00001
00002
00003
00004
00005
00006
00007 #include "Teuchos_TestForException.hpp"
00008 #include "Phalanx_DataLayout.hpp"
00009 #include "Sacado_ParameterRegistration.hpp"
00010
00011
00012
00013
00014
00015 namespace LCM {
00016
00017 template <typename EvalT, typename Traits>
00018 TorsionBC_Base<EvalT, Traits>::
00019 TorsionBC_Base(Teuchos::ParameterList& p) :
00020 PHAL::DirichletBase<EvalT, Traits>(p),
00021 thetaDot(p.get<RealType>("Theta Dot")),
00022 X0(p.get<RealType>("X0")),
00023 Y0(p.get<RealType>("Y0"))
00024 {
00025 }
00026
00027
00028 template<typename EvalT, typename Traits>
00029 void
00030 TorsionBC_Base<EvalT, Traits>::
00031 computeBCs(double* coord, ScalarT& Xval, ScalarT& Yval,
00032 const RealType time)
00033 {
00034 RealType X(coord[0]);
00035 RealType Y(coord[1]);
00036 RealType theta(thetaDot*time);
00037
00038
00039 Xval = X0 + (X-X0) * std::cos(theta) - (Y-Y0) * std::sin(theta) - X;
00040 Yval = Y0 + (X-X0) * std::sin(theta) + (Y-Y0) * std::cos(theta) - Y;
00041
00042
00043
00044
00045
00046 }
00047
00048
00049
00050
00051 template<typename Traits>
00052 TorsionBC<PHAL::AlbanyTraits::Residual, Traits>::
00053 TorsionBC(Teuchos::ParameterList& p) :
00054 TorsionBC_Base<PHAL::AlbanyTraits::Residual, Traits>(p)
00055 {
00056 }
00057
00058
00059 template<typename Traits>
00060 void
00061 TorsionBC<PHAL::AlbanyTraits::Residual, Traits>::
00062 evaluateFields(typename Traits::EvalData dirichletWorkset)
00063 {
00064 Teuchos::RCP<Epetra_Vector> f = dirichletWorkset.f;
00065 Teuchos::RCP<const Epetra_Vector> x = dirichletWorkset.x;
00066
00067 const std::vector<std::vector<int> >& nsNodes =
00068 dirichletWorkset.nodeSets->find(this->nodeSetID)->second;
00069 const std::vector<double*>& nsNodeCoords =
00070 dirichletWorkset.nodeSetCoords->find(this->nodeSetID)->second;
00071
00072 RealType time = dirichletWorkset.current_time;
00073
00074 int xlunk, ylunk;
00075 double* coord;
00076 ScalarT Xval, Yval;
00077
00078 for (unsigned int inode = 0; inode < nsNodes.size(); inode++) {
00079 xlunk = nsNodes[inode][0];
00080 ylunk = nsNodes[inode][1];
00081 coord = nsNodeCoords[inode];
00082
00083 this->computeBCs(coord, Xval, Yval, time);
00084
00085 (*f)[xlunk] = ((*x)[xlunk] - Xval);
00086 (*f)[ylunk] = ((*x)[ylunk] - Yval);
00087 }
00088 }
00089
00090
00091
00092
00093 template<typename Traits>
00094 TorsionBC<PHAL::AlbanyTraits::Jacobian, Traits>::
00095 TorsionBC(Teuchos::ParameterList& p) :
00096 TorsionBC_Base<PHAL::AlbanyTraits::Jacobian, Traits>(p)
00097 {
00098 }
00099
00100 template<typename Traits>
00101 void TorsionBC<PHAL::AlbanyTraits::Jacobian, Traits>::
00102 evaluateFields(typename Traits::EvalData dirichletWorkset)
00103 {
00104
00105 Teuchos::RCP<Epetra_Vector> f = dirichletWorkset.f;
00106 Teuchos::RCP<Epetra_CrsMatrix> jac = dirichletWorkset.Jac;
00107 Teuchos::RCP<const Epetra_Vector> x = dirichletWorkset.x;
00108 const RealType j_coeff = dirichletWorkset.j_coeff;
00109 const std::vector<std::vector<int> >& nsNodes =
00110 dirichletWorkset.nodeSets->find(this->nodeSetID)->second;
00111 const std::vector<double*>& nsNodeCoords =
00112 dirichletWorkset.nodeSetCoords->find(this->nodeSetID)->second;
00113
00114 RealType* matrixEntries;
00115 int* matrixIndices;
00116 int numEntries;
00117 RealType diag=j_coeff;
00118 bool fillResid = (f != Teuchos::null);
00119
00120 RealType time = dirichletWorkset.current_time;
00121
00122 int xlunk, ylunk;
00123 double* coord;
00124 ScalarT Xval, Yval;
00125 for (unsigned int inode = 0; inode < nsNodes.size(); inode++)
00126 {
00127 xlunk = nsNodes[inode][0];
00128 ylunk = nsNodes[inode][1];
00129 coord = nsNodeCoords[inode];
00130
00131 this->computeBCs(coord, Xval, Yval, time);
00132
00133
00134 jac->ExtractMyRowView(xlunk, numEntries, matrixEntries, matrixIndices);
00135 for (int i=0; i<numEntries; i++) matrixEntries[i]=0;
00136 jac->ReplaceMyValues(xlunk, 1, &diag, &xlunk);
00137
00138
00139 jac->ExtractMyRowView(ylunk, numEntries, matrixEntries, matrixIndices);
00140 for (int i=0; i<numEntries; i++) matrixEntries[i]=0;
00141 jac->ReplaceMyValues(ylunk, 1, &diag, &ylunk);
00142
00143 if (fillResid)
00144 {
00145 (*f)[xlunk] = ((*x)[xlunk] - Xval.val());
00146 (*f)[ylunk] = ((*x)[ylunk] - Yval.val());
00147 }
00148 }
00149 }
00150
00151
00152
00153
00154 template<typename Traits>
00155 TorsionBC<PHAL::AlbanyTraits::Tangent, Traits>::
00156 TorsionBC(Teuchos::ParameterList& p) :
00157 TorsionBC_Base<PHAL::AlbanyTraits::Tangent, Traits>(p)
00158 {
00159 }
00160
00161 template<typename Traits>
00162 void TorsionBC<PHAL::AlbanyTraits::Tangent, Traits>::
00163 evaluateFields(typename Traits::EvalData dirichletWorkset)
00164 {
00165 Teuchos::RCP<Epetra_Vector> f = dirichletWorkset.f;
00166 Teuchos::RCP<Epetra_MultiVector> fp = dirichletWorkset.fp;
00167 Teuchos::RCP<Epetra_MultiVector> JV = dirichletWorkset.JV;
00168 Teuchos::RCP<const Epetra_Vector> x = dirichletWorkset.x;
00169 Teuchos::RCP<const Epetra_MultiVector> Vx = dirichletWorkset.Vx;
00170 const RealType j_coeff = dirichletWorkset.j_coeff;
00171 const std::vector<std::vector<int> >& nsNodes =
00172 dirichletWorkset.nodeSets->find(this->nodeSetID)->second;
00173 const std::vector<double*>& nsNodeCoords =
00174 dirichletWorkset.nodeSetCoords->find(this->nodeSetID)->second;
00175
00176 RealType time = dirichletWorkset.current_time;
00177
00178 int xlunk, ylunk;
00179 double* coord;
00180 ScalarT Xval, Yval;
00181 for (unsigned int inode = 0; inode < nsNodes.size(); inode++)
00182 {
00183 xlunk = nsNodes[inode][0];
00184 ylunk = nsNodes[inode][1];
00185 coord = nsNodeCoords[inode];
00186
00187 this->computeBCs(coord, Xval, Yval, time);
00188
00189 if (f != Teuchos::null)
00190 {
00191 (*f)[xlunk] = ((*x)[xlunk] - Xval.val());
00192 (*f)[ylunk] = ((*x)[ylunk] - Yval.val());
00193 }
00194
00195 if (JV != Teuchos::null) {
00196 for (int i=0; i<dirichletWorkset.num_cols_x; i++)
00197 {
00198 (*JV)[i][xlunk] = j_coeff*(*Vx)[i][xlunk];
00199 (*JV)[i][ylunk] = j_coeff*(*Vx)[i][ylunk];
00200 }
00201 }
00202
00203 if (fp != Teuchos::null) {
00204 for (int i=0; i<dirichletWorkset.num_cols_p; i++)
00205 {
00206 (*fp)[i][xlunk] = -Xval.dx(dirichletWorkset.param_offset+i);
00207 (*fp)[i][ylunk] = -Yval.dx(dirichletWorkset.param_offset+i);
00208 }
00209 }
00210
00211 }
00212 }
00213
00214
00215
00216
00217 #ifdef ALBANY_SG_MP
00218 template<typename Traits>
00219 TorsionBC<PHAL::AlbanyTraits::SGResidual, Traits>::
00220 TorsionBC(Teuchos::ParameterList& p) :
00221 TorsionBC_Base<PHAL::AlbanyTraits::SGResidual, Traits>(p)
00222 {
00223 }
00224
00225 template<typename Traits>
00226 void TorsionBC<PHAL::AlbanyTraits::SGResidual, Traits>::
00227 evaluateFields(typename Traits::EvalData dirichletWorkset)
00228 {
00229 Teuchos::RCP<Stokhos::EpetraVectorOrthogPoly> f =
00230 dirichletWorkset.sg_f;
00231 Teuchos::RCP<const Stokhos::EpetraVectorOrthogPoly> x =
00232 dirichletWorkset.sg_x;
00233 const std::vector<std::vector<int> >& nsNodes =
00234 dirichletWorkset.nodeSets->find(this->nodeSetID)->second;
00235 const std::vector<double*>& nsNodeCoords =
00236 dirichletWorkset.nodeSetCoords->find(this->nodeSetID)->second;
00237
00238 RealType time = dirichletWorkset.current_time;
00239
00240 int xlunk, ylunk;
00241 double* coord;
00242 ScalarT Xval, Yval;
00243
00244 int nblock = x->size();
00245 for (unsigned int inode = 0; inode < nsNodes.size(); inode++) {
00246 xlunk = nsNodes[inode][0];
00247 ylunk = nsNodes[inode][1];
00248 coord = nsNodeCoords[inode];
00249
00250 this->computeBCs(coord, Xval, Yval, time);
00251
00252 for (int block=0; block<nblock; block++) {
00253 (*f)[block][xlunk] = ((*x)[block][xlunk] - Xval.coeff(block));
00254 (*f)[block][ylunk] = ((*x)[block][ylunk] - Yval.coeff(block));
00255 }
00256 }
00257 }
00258
00259
00260
00261
00262 template<typename Traits>
00263 TorsionBC<PHAL::AlbanyTraits::SGJacobian, Traits>::
00264 TorsionBC(Teuchos::ParameterList& p) :
00265 TorsionBC_Base<PHAL::AlbanyTraits::SGJacobian, Traits>(p)
00266 {
00267 }
00268
00269 template<typename Traits>
00270 void TorsionBC<PHAL::AlbanyTraits::SGJacobian, Traits>::
00271 evaluateFields(typename Traits::EvalData dirichletWorkset)
00272 {
00273 Teuchos::RCP< Stokhos::EpetraVectorOrthogPoly> f =
00274 dirichletWorkset.sg_f;
00275 Teuchos::RCP< Stokhos::VectorOrthogPoly<Epetra_CrsMatrix> > jac =
00276 dirichletWorkset.sg_Jac;
00277 Teuchos::RCP<const Stokhos::EpetraVectorOrthogPoly> x =
00278 dirichletWorkset.sg_x;
00279 const RealType j_coeff = dirichletWorkset.j_coeff;
00280 const std::vector<std::vector<int> >& nsNodes =
00281 dirichletWorkset.nodeSets->find(this->nodeSetID)->second;
00282 const std::vector<double*>& nsNodeCoords =
00283 dirichletWorkset.nodeSetCoords->find(this->nodeSetID)->second;
00284
00285 RealType* matrixEntries;
00286 int* matrixIndices;
00287 int numEntries;
00288 RealType diag=j_coeff;
00289 bool fillResid = (f != Teuchos::null);
00290
00291 int nblock = 0;
00292 if (f != Teuchos::null)
00293 nblock = f->size();
00294 int nblock_jac = jac->size();
00295
00296 RealType time = dirichletWorkset.current_time;
00297
00298 int xlunk, ylunk;
00299 double* coord;
00300 ScalarT Xval, Yval;
00301 for (unsigned int inode = 0; inode < nsNodes.size(); inode++)
00302 {
00303 xlunk = nsNodes[inode][0];
00304 ylunk = nsNodes[inode][1];
00305 coord = nsNodeCoords[inode];
00306
00307 this->computeBCs(coord, Xval, Yval, time);
00308
00309
00310 for (int block=0; block<nblock_jac; block++) {
00311 (*jac)[block].ExtractMyRowView(xlunk, numEntries, matrixEntries,
00312 matrixIndices);
00313 for (int i=0; i<numEntries; i++) matrixEntries[i]=0;
00314
00315
00316 (*jac)[block].ExtractMyRowView(ylunk, numEntries, matrixEntries,
00317 matrixIndices);
00318 for (int i=0; i<numEntries; i++) matrixEntries[i]=0;
00319 }
00320 (*jac)[0].ReplaceMyValues(xlunk, 1, &diag, &xlunk);
00321 (*jac)[0].ReplaceMyValues(ylunk, 1, &diag, &ylunk);
00322
00323 if (fillResid)
00324 {
00325 for (int block=0; block<nblock; block++) {
00326 (*f)[block][xlunk] = ((*x)[block][xlunk] - Xval.val().coeff(block));
00327 (*f)[block][ylunk] = ((*x)[block][ylunk] - Yval.val().coeff(block));
00328 }
00329 }
00330 }
00331 }
00332
00333
00334
00335
00336 template<typename Traits>
00337 TorsionBC<PHAL::AlbanyTraits::SGTangent, Traits>::
00338 TorsionBC(Teuchos::ParameterList& p) :
00339 TorsionBC_Base<PHAL::AlbanyTraits::SGTangent, Traits>(p)
00340 {
00341 }
00342
00343 template<typename Traits>
00344 void TorsionBC<PHAL::AlbanyTraits::SGTangent, Traits>::
00345 evaluateFields(typename Traits::EvalData dirichletWorkset)
00346 {
00347 Teuchos::RCP<Stokhos::EpetraVectorOrthogPoly> f =
00348 dirichletWorkset.sg_f;
00349 Teuchos::RCP<Stokhos::EpetraMultiVectorOrthogPoly> fp =
00350 dirichletWorkset.sg_fp;
00351 Teuchos::RCP<Stokhos::EpetraMultiVectorOrthogPoly> JV =
00352 dirichletWorkset.sg_JV;
00353 Teuchos::RCP<const Stokhos::EpetraVectorOrthogPoly> x =
00354 dirichletWorkset.sg_x;
00355 Teuchos::RCP<const Epetra_MultiVector> Vx = dirichletWorkset.Vx;
00356 const RealType j_coeff = dirichletWorkset.j_coeff;
00357 const std::vector<std::vector<int> >& nsNodes =
00358 dirichletWorkset.nodeSets->find(this->nodeSetID)->second;
00359 const std::vector<double*>& nsNodeCoords =
00360 dirichletWorkset.nodeSetCoords->find(this->nodeSetID)->second;
00361
00362 int nblock = x->size();
00363
00364 RealType time = dirichletWorkset.current_time;
00365
00366 int xlunk, ylunk;
00367 double* coord;
00368 ScalarT Xval, Yval;
00369 for (unsigned int inode = 0; inode < nsNodes.size(); inode++)
00370 {
00371 xlunk = nsNodes[inode][0];
00372 ylunk = nsNodes[inode][1];
00373 coord = nsNodeCoords[inode];
00374
00375 this->computeBCs(coord, Xval, Yval, time);
00376
00377 if (f != Teuchos::null)
00378 {
00379 for (int block=0; block<nblock; block++) {
00380 (*f)[block][xlunk] = (*x)[block][xlunk] - Xval.val().coeff(block);
00381 (*f)[block][ylunk] = (*x)[block][ylunk] - Yval.val().coeff(block);
00382 }
00383 }
00384
00385 if (JV != Teuchos::null) {
00386 for (int i=0; i<dirichletWorkset.num_cols_x; i++)
00387 {
00388 (*JV)[0][i][xlunk] = j_coeff*(*Vx)[i][xlunk];
00389 (*JV)[0][i][ylunk] = j_coeff*(*Vx)[i][ylunk];
00390 }
00391 }
00392
00393 if (fp != Teuchos::null) {
00394 for (int i=0; i<dirichletWorkset.num_cols_p; i++)
00395 {
00396 for (int block=0; block<nblock; block++) {
00397 (*fp)[block][i][xlunk] =
00398 -Xval.dx(dirichletWorkset.param_offset+i).coeff(block);
00399 (*fp)[block][i][ylunk] =
00400 -Yval.dx(dirichletWorkset.param_offset+i).coeff(block);
00401 }
00402 }
00403 }
00404
00405 }
00406 }
00407
00408
00409
00410
00411
00412 template<typename Traits>
00413 TorsionBC<PHAL::AlbanyTraits::MPResidual, Traits>::
00414 TorsionBC(Teuchos::ParameterList& p) :
00415 TorsionBC_Base<PHAL::AlbanyTraits::MPResidual, Traits>(p)
00416 {
00417 }
00418
00419 template<typename Traits>
00420 void TorsionBC<PHAL::AlbanyTraits::MPResidual, Traits>::
00421 evaluateFields(typename Traits::EvalData dirichletWorkset)
00422 {
00423 Teuchos::RCP<Stokhos::ProductEpetraVector> f =
00424 dirichletWorkset.mp_f;
00425 Teuchos::RCP<const Stokhos::ProductEpetraVector> x =
00426 dirichletWorkset.mp_x;
00427 const std::vector<std::vector<int> >& nsNodes =
00428 dirichletWorkset.nodeSets->find(this->nodeSetID)->second;
00429 const std::vector<double*>& nsNodeCoords =
00430 dirichletWorkset.nodeSetCoords->find(this->nodeSetID)->second;
00431
00432 RealType time = dirichletWorkset.current_time;
00433
00434 int xlunk, ylunk;
00435 double* coord;
00436 ScalarT Xval, Yval;
00437
00438 int nblock = x->size();
00439 for (unsigned int inode = 0; inode < nsNodes.size(); inode++) {
00440 xlunk = nsNodes[inode][0];
00441 ylunk = nsNodes[inode][1];
00442 coord = nsNodeCoords[inode];
00443
00444 this->computeBCs(coord, Xval, Yval, time);
00445
00446 for (int block=0; block<nblock; block++) {
00447 (*f)[block][xlunk] = ((*x)[block][xlunk] - Xval.coeff(block));
00448 (*f)[block][ylunk] = ((*x)[block][ylunk] - Yval.coeff(block));
00449 }
00450 }
00451 }
00452
00453
00454
00455
00456 template<typename Traits>
00457 TorsionBC<PHAL::AlbanyTraits::MPJacobian, Traits>::
00458 TorsionBC(Teuchos::ParameterList& p) :
00459 TorsionBC_Base<PHAL::AlbanyTraits::MPJacobian, Traits>(p)
00460 {
00461 }
00462
00463 template<typename Traits>
00464 void TorsionBC<PHAL::AlbanyTraits::MPJacobian, Traits>::
00465 evaluateFields(typename Traits::EvalData dirichletWorkset)
00466 {
00467 Teuchos::RCP<Stokhos::ProductEpetraVector> f =
00468 dirichletWorkset.mp_f;
00469 Teuchos::RCP< Stokhos::ProductContainer<Epetra_CrsMatrix> > jac =
00470 dirichletWorkset.mp_Jac;
00471 Teuchos::RCP<const Stokhos::ProductEpetraVector> x =
00472 dirichletWorkset.mp_x;
00473 const RealType j_coeff = dirichletWorkset.j_coeff;
00474 const std::vector<std::vector<int> >& nsNodes =
00475 dirichletWorkset.nodeSets->find(this->nodeSetID)->second;
00476 const std::vector<double*>& nsNodeCoords =
00477 dirichletWorkset.nodeSetCoords->find(this->nodeSetID)->second;
00478
00479 RealType* matrixEntries;
00480 int* matrixIndices;
00481 int numEntries;
00482 RealType diag=j_coeff;
00483 bool fillResid = (f != Teuchos::null);
00484
00485 int nblock = 0;
00486 if (f != Teuchos::null)
00487 nblock = f->size();
00488 int nblock_jac = jac->size();
00489
00490 RealType time = dirichletWorkset.current_time;
00491
00492 int xlunk, ylunk;
00493 double* coord;
00494 ScalarT Xval, Yval;
00495 for (unsigned int inode = 0; inode < nsNodes.size(); inode++)
00496 {
00497 xlunk = nsNodes[inode][0];
00498 ylunk = nsNodes[inode][1];
00499 coord = nsNodeCoords[inode];
00500
00501 this->computeBCs(coord, Xval, Yval, time);
00502
00503
00504 for (int block=0; block<nblock_jac; block++) {
00505 (*jac)[block].ExtractMyRowView(xlunk, numEntries, matrixEntries,
00506 matrixIndices);
00507 for (int i=0; i<numEntries; i++) matrixEntries[i]=0;
00508 (*jac)[block].ReplaceMyValues(xlunk, 1, &diag, &xlunk);
00509
00510
00511 (*jac)[block].ExtractMyRowView(ylunk, numEntries, matrixEntries,
00512 matrixIndices);
00513 for (int i=0; i<numEntries; i++) matrixEntries[i]=0;
00514 (*jac)[block].ReplaceMyValues(ylunk, 1, &diag, &ylunk);
00515 }
00516
00517 if (fillResid)
00518 {
00519 for (int block=0; block<nblock; block++) {
00520 (*f)[block][xlunk] = ((*x)[block][xlunk] - Xval.val().coeff(block));
00521 (*f)[block][ylunk] = ((*x)[block][ylunk] - Yval.val().coeff(block));
00522 }
00523 }
00524 }
00525 }
00526
00527
00528
00529
00530 template<typename Traits>
00531 TorsionBC<PHAL::AlbanyTraits::MPTangent, Traits>::
00532 TorsionBC(Teuchos::ParameterList& p) :
00533 TorsionBC_Base<PHAL::AlbanyTraits::MPTangent, Traits>(p)
00534 {
00535 }
00536
00537 template<typename Traits>
00538 void TorsionBC<PHAL::AlbanyTraits::MPTangent, Traits>::
00539 evaluateFields(typename Traits::EvalData dirichletWorkset)
00540 {
00541 Teuchos::RCP<Stokhos::ProductEpetraVector> f =
00542 dirichletWorkset.mp_f;
00543 Teuchos::RCP<Stokhos::ProductEpetraMultiVector> fp =
00544 dirichletWorkset.mp_fp;
00545 Teuchos::RCP<Stokhos::ProductEpetraMultiVector> JV =
00546 dirichletWorkset.mp_JV;
00547 Teuchos::RCP<const Stokhos::ProductEpetraVector> x =
00548 dirichletWorkset.mp_x;
00549 Teuchos::RCP<const Epetra_MultiVector> Vx = dirichletWorkset.Vx;
00550 const RealType j_coeff = dirichletWorkset.j_coeff;
00551 const std::vector<std::vector<int> >& nsNodes =
00552 dirichletWorkset.nodeSets->find(this->nodeSetID)->second;
00553 const std::vector<double*>& nsNodeCoords =
00554 dirichletWorkset.nodeSetCoords->find(this->nodeSetID)->second;
00555
00556 int nblock = x->size();
00557
00558 RealType time = dirichletWorkset.current_time;
00559
00560 int xlunk, ylunk;
00561 double* coord;
00562 ScalarT Xval, Yval;
00563 for (unsigned int inode = 0; inode < nsNodes.size(); inode++)
00564 {
00565 xlunk = nsNodes[inode][0];
00566 ylunk = nsNodes[inode][1];
00567 coord = nsNodeCoords[inode];
00568
00569 this->computeBCs(coord, Xval, Yval, time);
00570
00571 if (f != Teuchos::null)
00572 {
00573 for (int block=0; block<nblock; block++) {
00574 (*f)[block][xlunk] = (*x)[block][xlunk] - Xval.val().coeff(block);
00575 (*f)[block][ylunk] = (*x)[block][ylunk] - Yval.val().coeff(block);
00576 }
00577 }
00578
00579 if (JV != Teuchos::null) {
00580 for (int i=0; i<dirichletWorkset.num_cols_x; i++)
00581 {
00582 for (int block=0; block<nblock; block++) {
00583 (*JV)[block][i][xlunk] = j_coeff*(*Vx)[i][xlunk];
00584 (*JV)[block][i][ylunk] = j_coeff*(*Vx)[i][ylunk];
00585 }
00586 }
00587 }
00588
00589 if (fp != Teuchos::null) {
00590 for (int i=0; i<dirichletWorkset.num_cols_p; i++)
00591 {
00592 for (int block=0; block<nblock; block++) {
00593 (*fp)[block][i][xlunk] =
00594 -Xval.dx(dirichletWorkset.param_offset+i).coeff(block);
00595 (*fp)[block][i][ylunk] =
00596 -Yval.dx(dirichletWorkset.param_offset+i).coeff(block);
00597 }
00598 }
00599 }
00600
00601 }
00602 }
00603 #endif //ALBANY_SG_MP
00604
00605 }
00606