182 int numNodes = this->numNodesVelocity_;
183 std::string FEType = this->FETypeVelocity_;
186 vec3D_dbl_ptr_Type dPhi;
187 vec_dbl_ptr_Type weights = Teuchos::rcp(
new vec_dbl_Type(0));
192 UN deg = (degGradPhi + extraDeg) + degGradPhi + degGradPhi;
203 detB = B.computeInverse(Binv);
204 absDetB = std::fabs(detB);
208 vec3D_dbl_Type dPhiTrans(dPhi->size(), vec2D_dbl_Type(dPhi->at(0).size(), vec_dbl_Type(dim, 0.)));
211 TEUCHOS_TEST_FOR_EXCEPTION(dim == 1, std::logic_error,
"AssemblyStress Not implemented for dim=1");
218 vec_dbl_ptr_Type gammaDot(
new vec_dbl_Type(weights->size(), 0.0));
223 double v11, v12, v21, v22, value1_j, value2_j, value1_i, value2_i, viscosity_atw;
227 for (UN i = 0; i < numNodes; i++)
230 for (UN j = 0; j < numNodes; j++)
239 for (UN w = 0; w < dPhiTrans.size(); w++)
242 value1_j = dPhiTrans[w][j][0];
243 value2_j = dPhiTrans[w][j][1];
245 value1_i = dPhiTrans[w][i][0];
246 value2_i = dPhiTrans[w][i][1];
249 this->viscosityModel->evaluateMapping(this->params_, gammaDot->at(w), viscosity_atw);
251 v11 = v11 + viscosity_atw * weights->at(w) * (2.0 * value1_i * value1_j + value2_i * value2_j);
252 v12 = v12 + viscosity_atw * weights->at(w) * (value2_i * value1_j);
253 v21 = v21 + viscosity_atw * weights->at(w) * (value1_i * value2_j);
254 v22 = v22 + viscosity_atw * weights->at(w) * (2.0 * value2_i * value2_j + value1_i * value1_j);
267 (*elementMatrix)[i * dofs][j * dofs] = v11;
268 (*elementMatrix)[i * dofs][j * dofs + 1] = v12;
269 (*elementMatrix)[i * dofs + 1][j * dofs] = v21;
270 (*elementMatrix)[i * dofs + 1][j * dofs + 1] = v22;
284 vec_dbl_ptr_Type gammaDot(
new vec_dbl_Type(weights->size(), 0.0));
288 double v11, v12, v13, v21, v22, v23, v31, v32, v33, value1_j, value2_j, value3_j, value1_i, value2_i, value3_i, viscosity_atw;
293 for (UN i = 0; i < numNodes; i++)
297 for (UN j = 0; j < numNodes; j++)
311 for (UN w = 0; w < dPhiTrans.size(); w++)
314 value1_j = dPhiTrans.at(w).at(j).at(0);
315 value2_j = dPhiTrans.at(w).at(j).at(1);
316 value3_j = dPhiTrans.at(w).at(j).at(2);
318 value1_i = dPhiTrans.at(w).at(i).at(0);
319 value2_i = dPhiTrans.at(w).at(i).at(1);
320 value3_i = dPhiTrans.at(w).at(i).at(2);
322 this->viscosityModel->evaluateMapping(this->params_, gammaDot->at(w), viscosity_atw);
325 v11 = v11 + viscosity_atw * weights->at(w) * (2.0 * value1_j * value1_i + value2_j * value2_i + value3_j * value3_i);
326 v12 = v12 + viscosity_atw * weights->at(w) * (value2_i * value1_j);
327 v13 = v13 + viscosity_atw * weights->at(w) * (value3_i * value1_j);
329 v21 = v21 + viscosity_atw * weights->at(w) * (value1_i * value2_j);
330 v22 = v22 + viscosity_atw * weights->at(w) * (value1_i * value1_j + 2.0 * value2_j * value2_i + value3_j * value3_i);
331 v23 = v23 + viscosity_atw * weights->at(w) * (value3_i * value2_j);
333 v31 = v31 + viscosity_atw * weights->at(w) * (value1_i * value3_j);
334 v32 = v32 + viscosity_atw * weights->at(w) * (value2_i * value3_j);
335 v33 = v33 + viscosity_atw * weights->at(w) * (value1_i * value1_j + value2_i * value2_j + 2.0 * value3_i * value3_j);
354 (*elementMatrix)[i * dofs][j * dofs] = v11;
355 (*elementMatrix)[i * dofs][j * dofs + 1] = v12;
356 (*elementMatrix)[i * dofs][j * dofs + 2] = v13;
357 (*elementMatrix)[i * dofs + 1][j * dofs] = v21;
358 (*elementMatrix)[i * dofs + 1][j * dofs + 1] = v22;
359 (*elementMatrix)[i * dofs + 1][j * dofs + 2] = v23;
360 (*elementMatrix)[i * dofs + 2][j * dofs] = v31;
361 (*elementMatrix)[i * dofs + 2][j * dofs + 1] = v32;
362 (*elementMatrix)[i * dofs + 2][j * dofs + 2] = v33;
377 int numNodes = this->numNodesVelocity_;
378 std::string FEType = this->FETypeVelocity_;
381 vec3D_dbl_ptr_Type dPhi;
382 vec_dbl_ptr_Type weights = Teuchos::rcp(
new vec_dbl_Type(0));
387 UN deg = 3*degGradPhi + (degGradPhi + extraDegree);
397 detB = B.computeInverse(Binv);
398 absDetB = std::fabs(detB);
400 vec3D_dbl_Type dPhiTrans(dPhi->size(), vec2D_dbl_Type(dPhi->at(0).size(), vec_dbl_Type(dim, 0.)));
403 TEUCHOS_TEST_FOR_EXCEPTION(dim == 1, std::logic_error,
"AssemblyStress Not implemented for dim=1");
411 vec_dbl_Type u11(dPhiTrans.size(), -1.);
412 vec_dbl_Type u12(dPhiTrans.size(), -1.);
413 vec_dbl_Type u21(dPhiTrans.size(), -1.);
414 vec_dbl_Type u22(dPhiTrans.size(), -1.);
415 vec_dbl_ptr_Type gammaDot(
new vec_dbl_Type(weights->size(), 0.0));
417 vec_dbl_ptr_Type mixed_term_xy(
new vec_dbl_Type(weights->size(), 0.0));
418 for (UN w = 0; w < dPhiTrans.size(); w++)
425 for (UN i = 0; i < dPhiTrans[0].size(); i++)
427 LO index1 = dim * i + 0;
428 LO index2 = dim * i + 1;
430 u11[w] += (*this->solution_)[index1] * dPhiTrans[w][i][0];
431 u12[w] += (*this->solution_)[index1] * dPhiTrans[w][i][1];
432 u21[w] += (*this->solution_)[index2] * dPhiTrans[w][i][0];
433 u22[w] += (*this->solution_)[index2] * dPhiTrans[w][i][1];
435 gammaDot->at(w) = std::sqrt(2.0 * u11[w] * u11[w] + 2.0 * u22[w] * u22[w] + (u12[w] + u21[w]) * (u12[w] + u21[w]));
436 mixed_term_xy->at(w) = 0.5 * (u12[w] + u21[w]);
441 double v11, v12, v21, v22, value1_j, value2_j, value1_i, value2_i, deta_dgamma_dgamma_dtau;
443 deta_dgamma_dgamma_dtau = 0.;
446 for (UN i = 0; i < numNodes; i++)
450 for (UN j = 0; j < numNodes; j++)
460 for (UN w = 0; w < dPhiTrans.size(); w++)
463 value1_j = dPhiTrans[w][j][0];
464 value2_j = dPhiTrans[w][j][1];
466 value1_i = dPhiTrans[w][i][0];
467 value2_i = dPhiTrans[w][i][1];
469 this->viscosityModel->evaluateDerivative(this->params_, gammaDot->at(w), deta_dgamma_dgamma_dtau);
476 v11 = v11 + (-2.0) * deta_dgamma_dgamma_dtau * weights->at(w) * ((value1_j * u11[w] + value2_j * mixed_term_xy->at(w)) * (value1_i * u11[w] + value2_i * mixed_term_xy->at(w)));
477 v12 = v12 + (-2.0) * deta_dgamma_dgamma_dtau * weights->at(w) * ((value1_j * mixed_term_xy->at(w) + u22[w] * value2_j) * (value1_i * u11[w] + value2_i * mixed_term_xy->at(w)));
479 v21 = v21 + (-2.0) * deta_dgamma_dgamma_dtau * weights->at(w) * ((value1_j * u11[w] + value2_j * mixed_term_xy->at(w)) * (value1_i * mixed_term_xy->at(w) + value2_i * u22[w]));
480 v22 = v22 + (-2.0) * deta_dgamma_dgamma_dtau * weights->at(w) * ((value1_j * mixed_term_xy->at(w) + u22[w] * value2_j) * (value1_i * mixed_term_xy->at(w) + value2_i * u22[w]));
493 (*elementMatrix)[i * dofs][j * dofs] = v11;
494 (*elementMatrix)[i * dofs][j * dofs + 1] = v12;
495 (*elementMatrix)[i * dofs + 1][j * dofs] = v21;
496 (*elementMatrix)[i * dofs + 1][j * dofs + 1] = v22;
510 vec_dbl_Type u11(dPhiTrans.size(), -1.);
511 vec_dbl_Type u12(dPhiTrans.size(), -1.);
512 vec_dbl_Type u13(dPhiTrans.size(), -1.);
514 vec_dbl_Type u21(dPhiTrans.size(), -1.);
515 vec_dbl_Type u22(dPhiTrans.size(), -1.);
516 vec_dbl_Type u23(dPhiTrans.size(), -1.);
518 vec_dbl_Type u31(dPhiTrans.size(), -1.);
519 vec_dbl_Type u32(dPhiTrans.size(), -1.);
520 vec_dbl_Type u33(dPhiTrans.size(), -1.);
522 vec_dbl_ptr_Type gammaDot(
new vec_dbl_Type(weights->size(), 0.0));
524 vec_dbl_ptr_Type mixed_term_xy(
new vec_dbl_Type(weights->size(), 0.0));
525 vec_dbl_ptr_Type mixed_term_xz(
new vec_dbl_Type(weights->size(), 0.0));
526 vec_dbl_ptr_Type mixed_term_yz(
new vec_dbl_Type(weights->size(), 0.0));
528 for (UN w = 0; w < dPhiTrans.size(); w++)
541 for (UN i = 0; i < dPhiTrans[0].size(); i++)
543 LO index1 = dim * i + 0;
544 LO index2 = dim * i + 1;
545 LO index3 = dim * i + 2;
547 u11[w] += (*this->solution_)[index1] * dPhiTrans[w][i][0];
548 u12[w] += (*this->solution_)[index1] * dPhiTrans[w][i][1];
549 u13[w] += (*this->solution_)[index1] * dPhiTrans[w][i][2];
550 u21[w] += (*this->solution_)[index2] * dPhiTrans[w][i][0];
551 u22[w] += (*this->solution_)[index2] * dPhiTrans[w][i][1];
552 u23[w] += (*this->solution_)[index2] * dPhiTrans[w][i][2];
553 u31[w] += (*this->solution_)[index3] * dPhiTrans[w][i][0];
554 u32[w] += (*this->solution_)[index3] * dPhiTrans[w][i][1];
555 u33[w] += (*this->solution_)[index3] * dPhiTrans[w][i][2];
557 gammaDot->at(w) = std::sqrt(2.0 * u11[w] * u11[w] + 2.0 * u22[w] * u22[w] + 2.0 * u33[w] * u33[w] + (u12[w] + u21[w]) * (u12[w] + u21[w]) + (u13[w] + u31[w]) * (u13[w] + u31[w]) + (u23[w] + u32[w]) * (u23[w] + u32[w]));
559 mixed_term_xy->at(w) = 0.5 * (u12[w] + u21[w]);
560 mixed_term_xz->at(w) = 0.5 * (u31[w] + u13[w]);
561 mixed_term_yz->at(w) = 0.5 * (u32[w] + u23[w]);
565 double v11, v12, v13, v21, v22, v23, v31, v32, v33, value1_j, value2_j, value3_j, value1_i, value2_i, value3_i, deta_dgamma_dgamma_dtau;
567 deta_dgamma_dgamma_dtau = 0.;
570 for (UN i = 0; i < numNodes; i++)
574 for (UN j = 0; j < numNodes; j++)
588 for (UN w = 0; w < dPhiTrans.size(); w++)
591 value1_j = dPhiTrans.at(w).at(j).at(0);
592 value2_j = dPhiTrans.at(w).at(j).at(1);
593 value3_j = dPhiTrans.at(w).at(j).at(2);
595 value1_i = dPhiTrans.at(w).at(i).at(0);
596 value2_i = dPhiTrans.at(w).at(i).at(1);
597 value3_i = dPhiTrans.at(w).at(i).at(2);
599 this->viscosityModel->evaluateDerivative(this->params_, gammaDot->at(w), deta_dgamma_dgamma_dtau);
602 v11 = v11 + (-2.0) * deta_dgamma_dgamma_dtau * weights->at(w) * ((value1_j * u11[w] + value2_j * mixed_term_xy->at(w) + value3_j * mixed_term_xz->at(w)) * (value1_i * u11[w] + value2_i * mixed_term_xy->at(w) + value3_i * mixed_term_xz->at(w)));
603 v12 = v12 + (-2.0) * deta_dgamma_dgamma_dtau * weights->at(w) * ((value1_j * mixed_term_xy->at(w) + u22[w] * value2_j + mixed_term_yz->at(w) * value3_j) * (value1_i * u11[w] + value2_i * mixed_term_xy->at(w) + value3_i * mixed_term_xz->at(w)));
604 v13 = v13 + (-2.0) * deta_dgamma_dgamma_dtau * weights->at(w) * ((value3_j * mixed_term_xz->at(w) + value2_j * mixed_term_yz->at(w) + value3_j * u33[w]) * (value1_i * u11[w] + value2_i * mixed_term_xy->at(w) + value3_i * mixed_term_xz->at(w)));
606 v21 = v21 + (-2.0) * deta_dgamma_dgamma_dtau * weights->at(w) * ((value1_j * u11[w] + value2_j * mixed_term_xy->at(w) + value3_j * mixed_term_xz->at(w)) * (value1_i * mixed_term_xy->at(w) + value2_i * u22[w] + value3_i * mixed_term_yz->at(w)));
607 v22 = v22 + (-2.0) * deta_dgamma_dgamma_dtau * weights->at(w) * ((value1_j * mixed_term_xy->at(w) + u22[w] * value2_j + mixed_term_yz->at(w) * value3_j) * (value1_i * mixed_term_xy->at(w) + value2_i * u22[w] + value3_i * mixed_term_yz->at(w)));
608 v23 = v23 + (-2.0) * deta_dgamma_dgamma_dtau * weights->at(w) * ((value3_j * mixed_term_xz->at(w) + value2_j * mixed_term_yz->at(w) + value3_j * u33[w]) * (value1_i * mixed_term_xy->at(w) + value2_i * u22[w] + value3_i * mixed_term_yz->at(w)));
610 v31 = v31 + (-2.0) * deta_dgamma_dgamma_dtau * weights->at(w) * ((value1_j * u11[w] + value2_j * mixed_term_xy->at(w) + value3_j * mixed_term_xz->at(w)) * (value1_i * mixed_term_xz->at(w) + mixed_term_yz->at(w) * value2_i + u33[w] * value3_i));
611 v32 = v32 + (-2.0) * deta_dgamma_dgamma_dtau * weights->at(w) * ((value1_j * mixed_term_xy->at(w) + u22[w] * value2_j + mixed_term_yz->at(w) * value3_j) * (value1_i * mixed_term_xz->at(w) + mixed_term_yz->at(w) * value2_i + u33[w] * value3_i));
612 v33 = v33 + (-2.0) * deta_dgamma_dgamma_dtau * weights->at(w) * ((value3_j * mixed_term_xz->at(w) + value2_j * mixed_term_yz->at(w) + value3_j * u33[w]) * (value1_i * mixed_term_xz->at(w) + mixed_term_yz->at(w) * value2_i + u33[w] * value3_i));
631 (*elementMatrix)[i * dofs][j * dofs] = v11;
632 (*elementMatrix)[i * dofs][j * dofs + 1] = v12;
633 (*elementMatrix)[i * dofs][j * dofs + 2] = v13;
634 (*elementMatrix)[i * dofs + 1][j * dofs] = v21;
635 (*elementMatrix)[i * dofs + 1][j * dofs + 1] = v22;
636 (*elementMatrix)[i * dofs + 1][j * dofs + 2] = v23;
637 (*elementMatrix)[i * dofs + 2][j * dofs] = v31;
638 (*elementMatrix)[i * dofs + 2][j * dofs + 1] = v32;
639 (*elementMatrix)[i * dofs + 2][j * dofs + 2] = v33;
722 vec_dbl_ptr_Type &gammaDot,
int dim)
729 vec_dbl_Type u11(dPhiTrans.size(), -1.);
730 vec_dbl_Type u12(dPhiTrans.size(), -1.);
731 vec_dbl_Type u21(dPhiTrans.size(), -1.);
732 vec_dbl_Type u22(dPhiTrans.size(), -1.);
734 for (UN w = 0; w < dPhiTrans.size(); w++)
741 for (UN i = 0; i < dPhiTrans[0].size(); i++)
743 LO index1 = dim * i + 0;
744 LO index2 = dim * i + 1;
746 u11[w] += (*this->solution_)[index1] * dPhiTrans[w][i][0];
747 u12[w] += (*this->solution_)[index1] * dPhiTrans[w][i][1];
748 u21[w] += (*this->solution_)[index2] * dPhiTrans[w][i][0];
749 u22[w] += (*this->solution_)[index2] * dPhiTrans[w][i][1];
751 gammaDot->at(w) = std::sqrt(2.0 * u11[w] * u11[w] + 2.0 * u22[w] * u22[w] + (u12[w] + u21[w]) * (u12[w] + u21[w]));
758 vec_dbl_Type u11(dPhiTrans.size(), -1.);
759 vec_dbl_Type u12(dPhiTrans.size(), -1.);
760 vec_dbl_Type u13(dPhiTrans.size(), -1.);
762 vec_dbl_Type u21(dPhiTrans.size(), -1.);
763 vec_dbl_Type u22(dPhiTrans.size(), -1.);
764 vec_dbl_Type u23(dPhiTrans.size(), -1.);
766 vec_dbl_Type u31(dPhiTrans.size(), -1.);
767 vec_dbl_Type u32(dPhiTrans.size(), -1.);
768 vec_dbl_Type u33(dPhiTrans.size(), -1.);
770 for (UN w = 0; w < dPhiTrans.size(); w++)
783 for (UN i = 0; i < dPhiTrans[0].size(); i++)
785 LO index1 = dim * i + 0;
786 LO index2 = dim * i + 1;
787 LO index3 = dim * i + 2;
789 u11[w] += (*this->solution_)[index1] * dPhiTrans[w][i][0];
790 u12[w] += (*this->solution_)[index1] * dPhiTrans[w][i][1];
791 u13[w] += (*this->solution_)[index1] * dPhiTrans[w][i][2];
792 u21[w] += (*this->solution_)[index2] * dPhiTrans[w][i][0];
793 u22[w] += (*this->solution_)[index2] * dPhiTrans[w][i][1];
794 u23[w] += (*this->solution_)[index2] * dPhiTrans[w][i][2];
795 u31[w] += (*this->solution_)[index3] * dPhiTrans[w][i][0];
796 u32[w] += (*this->solution_)[index3] * dPhiTrans[w][i][1];
797 u33[w] += (*this->solution_)[index3] * dPhiTrans[w][i][2];
799 gammaDot->at(w) = std::sqrt(2.0 * u11[w] * u11[w] + 2.0 * u22[w] * u22[w] + 2.0 * u33[w] * u33[w] + (u12[w] + u21[w]) * (u12[w] + u21[w]) + (u13[w] + u31[w]) * (u13[w] + u31[w]) + (u23[w] + u32[w]) * (u23[w] + u32[w]));