180 int numNodes = this->numNodesVelocity_;
181 std::string FEType = this->FETypeVelocity_;
184 vec3D_dbl_ptr_Type dPhi;
185 vec_dbl_ptr_Type weights = Teuchos::rcp(
new vec_dbl_Type(0));
190 UN deg = (degGradPhi + extraDeg) + degGradPhi + degGradPhi;
201 detB = B.computeInverse(Binv);
202 absDetB = std::fabs(detB);
206 vec3D_dbl_Type dPhiTrans(dPhi->size(), vec2D_dbl_Type(dPhi->at(0).size(), vec_dbl_Type(dim, 0.)));
209 TEUCHOS_TEST_FOR_EXCEPTION(dim == 1, std::logic_error,
"AssemblyStress Not implemented for dim=1");
216 vec_dbl_ptr_Type gammaDot(
new vec_dbl_Type(weights->size(), 0.0));
221 double v11, v12, v21, v22, value1_j, value2_j, value1_i, value2_i, viscosity_atw;
225 for (UN i = 0; i < numNodes; i++)
228 for (UN j = 0; j < numNodes; j++)
237 for (UN w = 0; w < dPhiTrans.size(); w++)
240 value1_j = dPhiTrans[w][j][0];
241 value2_j = dPhiTrans[w][j][1];
243 value1_i = dPhiTrans[w][i][0];
244 value2_i = dPhiTrans[w][i][1];
247 this->viscosityModel->evaluateMapping(this->params_, gammaDot->at(w), viscosity_atw);
249 v11 = v11 + viscosity_atw * weights->at(w) * (2.0 * value1_i * value1_j + value2_i * value2_j);
250 v12 = v12 + viscosity_atw * weights->at(w) * (value2_i * value1_j);
251 v21 = v21 + viscosity_atw * weights->at(w) * (value1_i * value2_j);
252 v22 = v22 + viscosity_atw * weights->at(w) * (2.0 * value2_i * value2_j + value1_i * value1_j);
265 (*elementMatrix)[i * dofs][j * dofs] = v11;
266 (*elementMatrix)[i * dofs][j * dofs + 1] = v12;
267 (*elementMatrix)[i * dofs + 1][j * dofs] = v21;
268 (*elementMatrix)[i * dofs + 1][j * dofs + 1] = v22;
282 vec_dbl_ptr_Type gammaDot(
new vec_dbl_Type(weights->size(), 0.0));
286 double v11, v12, v13, v21, v22, v23, v31, v32, v33, value1_j, value2_j, value3_j, value1_i, value2_i, value3_i, viscosity_atw;
291 for (UN i = 0; i < numNodes; i++)
295 for (UN j = 0; j < numNodes; j++)
309 for (UN w = 0; w < dPhiTrans.size(); w++)
312 value1_j = dPhiTrans.at(w).at(j).at(0);
313 value2_j = dPhiTrans.at(w).at(j).at(1);
314 value3_j = dPhiTrans.at(w).at(j).at(2);
316 value1_i = dPhiTrans.at(w).at(i).at(0);
317 value2_i = dPhiTrans.at(w).at(i).at(1);
318 value3_i = dPhiTrans.at(w).at(i).at(2);
320 this->viscosityModel->evaluateMapping(this->params_, gammaDot->at(w), viscosity_atw);
323 v11 = v11 + viscosity_atw * weights->at(w) * (2.0 * value1_j * value1_i + value2_j * value2_i + value3_j * value3_i);
324 v12 = v12 + viscosity_atw * weights->at(w) * (value2_i * value1_j);
325 v13 = v13 + viscosity_atw * weights->at(w) * (value3_i * value1_j);
327 v21 = v21 + viscosity_atw * weights->at(w) * (value1_i * value2_j);
328 v22 = v22 + viscosity_atw * weights->at(w) * (value1_i * value1_j + 2.0 * value2_j * value2_i + value3_j * value3_i);
329 v23 = v23 + viscosity_atw * weights->at(w) * (value3_i * value2_j);
331 v31 = v31 + viscosity_atw * weights->at(w) * (value1_i * value3_j);
332 v32 = v32 + viscosity_atw * weights->at(w) * (value2_i * value3_j);
333 v33 = v33 + viscosity_atw * weights->at(w) * (value1_i * value1_j + value2_i * value2_j + 2.0 * value3_i * value3_j);
352 (*elementMatrix)[i * dofs][j * dofs] = v11;
353 (*elementMatrix)[i * dofs][j * dofs + 1] = v12;
354 (*elementMatrix)[i * dofs][j * dofs + 2] = v13;
355 (*elementMatrix)[i * dofs + 1][j * dofs] = v21;
356 (*elementMatrix)[i * dofs + 1][j * dofs + 1] = v22;
357 (*elementMatrix)[i * dofs + 1][j * dofs + 2] = v23;
358 (*elementMatrix)[i * dofs + 2][j * dofs] = v31;
359 (*elementMatrix)[i * dofs + 2][j * dofs + 1] = v32;
360 (*elementMatrix)[i * dofs + 2][j * dofs + 2] = v33;
396 int numNodes = this->numNodesVelocity_;
397 std::string FEType = this->FETypeVelocity_;
400 vec3D_dbl_ptr_Type dPhi;
401 vec_dbl_ptr_Type weights = Teuchos::rcp(
new vec_dbl_Type(0));
406 UN deg = 3*degGradPhi + (degGradPhi + extraDegree);
416 detB = B.computeInverse(Binv);
417 absDetB = std::fabs(detB);
419 vec3D_dbl_Type dPhiTrans(dPhi->size(), vec2D_dbl_Type(dPhi->at(0).size(), vec_dbl_Type(dim, 0.)));
422 TEUCHOS_TEST_FOR_EXCEPTION(dim == 1, std::logic_error,
"AssemblyStress Not implemented for dim=1");
430 vec_dbl_Type u11(dPhiTrans.size(), -1.);
431 vec_dbl_Type u12(dPhiTrans.size(), -1.);
432 vec_dbl_Type u21(dPhiTrans.size(), -1.);
433 vec_dbl_Type u22(dPhiTrans.size(), -1.);
434 vec_dbl_ptr_Type gammaDot(
new vec_dbl_Type(weights->size(), 0.0));
436 vec_dbl_ptr_Type mixed_term_xy(
new vec_dbl_Type(weights->size(), 0.0));
437 for (UN w = 0; w < dPhiTrans.size(); w++)
444 for (UN i = 0; i < dPhiTrans[0].size(); i++)
446 LO index1 = dim * i + 0;
447 LO index2 = dim * i + 1;
449 u11[w] += (*this->solution_)[index1] * dPhiTrans[w][i][0];
450 u12[w] += (*this->solution_)[index1] * dPhiTrans[w][i][1];
451 u21[w] += (*this->solution_)[index2] * dPhiTrans[w][i][0];
452 u22[w] += (*this->solution_)[index2] * dPhiTrans[w][i][1];
454 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]));
455 mixed_term_xy->at(w) = 0.5 * (u12[w] + u21[w]);
460 double v11, v12, v21, v22, value1_j, value2_j, value1_i, value2_i, deta_dgamma_dgamma_dtau;
462 deta_dgamma_dgamma_dtau = 0.;
465 for (UN i = 0; i < numNodes; i++)
469 for (UN j = 0; j < numNodes; j++)
479 for (UN w = 0; w < dPhiTrans.size(); w++)
482 value1_j = dPhiTrans[w][j][0];
483 value2_j = dPhiTrans[w][j][1];
485 value1_i = dPhiTrans[w][i][0];
486 value2_i = dPhiTrans[w][i][1];
488 this->viscosityModel->evaluateDerivative(this->params_, gammaDot->at(w), deta_dgamma_dgamma_dtau);
495 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)));
496 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)));
498 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]));
499 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]));
512 (*elementMatrix)[i * dofs][j * dofs] = v11;
513 (*elementMatrix)[i * dofs][j * dofs + 1] = v12;
514 (*elementMatrix)[i * dofs + 1][j * dofs] = v21;
515 (*elementMatrix)[i * dofs + 1][j * dofs + 1] = v22;
529 vec_dbl_Type u11(dPhiTrans.size(), -1.);
530 vec_dbl_Type u12(dPhiTrans.size(), -1.);
531 vec_dbl_Type u13(dPhiTrans.size(), -1.);
533 vec_dbl_Type u21(dPhiTrans.size(), -1.);
534 vec_dbl_Type u22(dPhiTrans.size(), -1.);
535 vec_dbl_Type u23(dPhiTrans.size(), -1.);
537 vec_dbl_Type u31(dPhiTrans.size(), -1.);
538 vec_dbl_Type u32(dPhiTrans.size(), -1.);
539 vec_dbl_Type u33(dPhiTrans.size(), -1.);
541 vec_dbl_ptr_Type gammaDot(
new vec_dbl_Type(weights->size(), 0.0));
543 vec_dbl_ptr_Type mixed_term_xy(
new vec_dbl_Type(weights->size(), 0.0));
544 vec_dbl_ptr_Type mixed_term_xz(
new vec_dbl_Type(weights->size(), 0.0));
545 vec_dbl_ptr_Type mixed_term_yz(
new vec_dbl_Type(weights->size(), 0.0));
547 for (UN w = 0; w < dPhiTrans.size(); w++)
560 for (UN i = 0; i < dPhiTrans[0].size(); i++)
562 LO index1 = dim * i + 0;
563 LO index2 = dim * i + 1;
564 LO index3 = dim * i + 2;
566 u11[w] += (*this->solution_)[index1] * dPhiTrans[w][i][0];
567 u12[w] += (*this->solution_)[index1] * dPhiTrans[w][i][1];
568 u13[w] += (*this->solution_)[index1] * dPhiTrans[w][i][2];
569 u21[w] += (*this->solution_)[index2] * dPhiTrans[w][i][0];
570 u22[w] += (*this->solution_)[index2] * dPhiTrans[w][i][1];
571 u23[w] += (*this->solution_)[index2] * dPhiTrans[w][i][2];
572 u31[w] += (*this->solution_)[index3] * dPhiTrans[w][i][0];
573 u32[w] += (*this->solution_)[index3] * dPhiTrans[w][i][1];
574 u33[w] += (*this->solution_)[index3] * dPhiTrans[w][i][2];
576 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]));
578 mixed_term_xy->at(w) = 0.5 * (u12[w] + u21[w]);
579 mixed_term_xz->at(w) = 0.5 * (u31[w] + u13[w]);
580 mixed_term_yz->at(w) = 0.5 * (u32[w] + u23[w]);
584 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;
586 deta_dgamma_dgamma_dtau = 0.;
589 for (UN i = 0; i < numNodes; i++)
593 for (UN j = 0; j < numNodes; j++)
607 for (UN w = 0; w < dPhiTrans.size(); w++)
610 value1_j = dPhiTrans.at(w).at(j).at(0);
611 value2_j = dPhiTrans.at(w).at(j).at(1);
612 value3_j = dPhiTrans.at(w).at(j).at(2);
614 value1_i = dPhiTrans.at(w).at(i).at(0);
615 value2_i = dPhiTrans.at(w).at(i).at(1);
616 value3_i = dPhiTrans.at(w).at(i).at(2);
618 this->viscosityModel->evaluateDerivative(this->params_, gammaDot->at(w), deta_dgamma_dgamma_dtau);
622 v11 = v11 + (-2.0) * deta_dgamma_dgamma_dtau * weights->at(w) * ((value1_i * u11[w] + value2_i * mixed_term_xy->at(w) + value3_i * mixed_term_xz->at(w)) * (value1_j * u11[w] + value2_j * mixed_term_xy->at(w) + value3_j * mixed_term_xz->at(w))) ;
623 v12 = v12 + (-2.0) * deta_dgamma_dgamma_dtau * weights->at(w) * ((value1_i * u11[w] + value2_i * mixed_term_xy->at(w) + value3_i * mixed_term_xz->at(w)) * (value1_j * mixed_term_xy->at(w) + u22[w] * value2_j + mixed_term_yz->at(w) * value3_j));
624 v13 = v13 + (-2.0) * deta_dgamma_dgamma_dtau * weights->at(w) * ((value1_i * u11[w] + value2_i * mixed_term_xy->at(w) + value3_i * mixed_term_xz->at(w)) * (value1_j * mixed_term_xz->at(w) + value2_j * mixed_term_yz->at(w) + value3_j * u33[w]));
626 v21 = v21 + (-2.0) * deta_dgamma_dgamma_dtau * weights->at(w) * ((value1_i * mixed_term_xy->at(w) + value2_i * u22[w] + value3_i * mixed_term_yz->at(w)) * (value1_j * u11[w] + value2_j * mixed_term_xy->at(w) + value3_j * mixed_term_xz->at(w)));
627 v22 = v22 + (-2.0) * deta_dgamma_dgamma_dtau * weights->at(w) * ((value1_i * mixed_term_xy->at(w) + value2_i * u22[w] + value3_i * mixed_term_yz->at(w)) * (value1_j * mixed_term_xy->at(w) + u22[w] * value2_j + mixed_term_yz->at(w) * value3_j));
628 v23 = v23 + (-2.0) * deta_dgamma_dgamma_dtau * weights->at(w) * ((value1_i * mixed_term_xy->at(w) + value2_i * u22[w] + value3_i * mixed_term_yz->at(w)) * (value1_j * mixed_term_xz->at(w) + value2_j * mixed_term_yz->at(w) + value3_j * u33[w]));
630 v31 = v31 + (-2.0) * deta_dgamma_dgamma_dtau * weights->at(w) * ((value1_i * mixed_term_xz->at(w) + mixed_term_yz->at(w) * value2_i + u33[w] * value3_i) * (value1_j * u11[w] + value2_j * mixed_term_xy->at(w) + value3_j * mixed_term_xz->at(w)));
631 v32 = v32 + (-2.0) * deta_dgamma_dgamma_dtau * weights->at(w) * ((value1_i * mixed_term_xz->at(w) + mixed_term_yz->at(w) * value2_i + u33[w] * value3_i) * (value1_j * mixed_term_xy->at(w) + u22[w] * value2_j + mixed_term_yz->at(w) * value3_j));
632 v33 = v33 + (-2.0) * deta_dgamma_dgamma_dtau * weights->at(w) * ((value1_i * mixed_term_xz->at(w) + mixed_term_yz->at(w) * value2_i + u33[w] * value3_i) * (value1_j * mixed_term_xz->at(w) + value2_j * mixed_term_yz->at(w) + value3_j * u33[w]));
651 (*elementMatrix)[i * dofs][j * dofs] = v11;
652 (*elementMatrix)[i * dofs][j * dofs + 1] = v12;
653 (*elementMatrix)[i * dofs][j * dofs + 2] = v13;
654 (*elementMatrix)[i * dofs + 1][j * dofs] = v21;
655 (*elementMatrix)[i * dofs + 1][j * dofs + 1] = v22;
656 (*elementMatrix)[i * dofs + 1][j * dofs + 2] = v23;
657 (*elementMatrix)[i * dofs + 2][j * dofs] = v31;
658 (*elementMatrix)[i * dofs + 2][j * dofs + 1] = v32;
659 (*elementMatrix)[i * dofs + 2][j * dofs + 2] = v33;
743 vec_dbl_ptr_Type &gammaDot,
int dim)
750 vec_dbl_Type u11(dPhiTrans.size(), -1.);
751 vec_dbl_Type u12(dPhiTrans.size(), -1.);
752 vec_dbl_Type u21(dPhiTrans.size(), -1.);
753 vec_dbl_Type u22(dPhiTrans.size(), -1.);
755 for (UN w = 0; w < dPhiTrans.size(); w++)
762 for (UN i = 0; i < dPhiTrans[0].size(); i++)
764 LO index1 = dim * i + 0;
765 LO index2 = dim * i + 1;
767 u11[w] += (*this->solution_)[index1] * dPhiTrans[w][i][0];
768 u12[w] += (*this->solution_)[index1] * dPhiTrans[w][i][1];
769 u21[w] += (*this->solution_)[index2] * dPhiTrans[w][i][0];
770 u22[w] += (*this->solution_)[index2] * dPhiTrans[w][i][1];
772 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]));
779 vec_dbl_Type u11(dPhiTrans.size(), -1.);
780 vec_dbl_Type u12(dPhiTrans.size(), -1.);
781 vec_dbl_Type u13(dPhiTrans.size(), -1.);
783 vec_dbl_Type u21(dPhiTrans.size(), -1.);
784 vec_dbl_Type u22(dPhiTrans.size(), -1.);
785 vec_dbl_Type u23(dPhiTrans.size(), -1.);
787 vec_dbl_Type u31(dPhiTrans.size(), -1.);
788 vec_dbl_Type u32(dPhiTrans.size(), -1.);
789 vec_dbl_Type u33(dPhiTrans.size(), -1.);
791 for (UN w = 0; w < dPhiTrans.size(); w++)
804 for (UN i = 0; i < dPhiTrans[0].size(); i++)
806 LO index1 = dim * i + 0;
807 LO index2 = dim * i + 1;
808 LO index3 = dim * i + 2;
810 u11[w] += (*this->solution_)[index1] * dPhiTrans[w][i][0];
811 u12[w] += (*this->solution_)[index1] * dPhiTrans[w][i][1];
812 u13[w] += (*this->solution_)[index1] * dPhiTrans[w][i][2];
813 u21[w] += (*this->solution_)[index2] * dPhiTrans[w][i][0];
814 u22[w] += (*this->solution_)[index2] * dPhiTrans[w][i][1];
815 u23[w] += (*this->solution_)[index2] * dPhiTrans[w][i][2];
816 u31[w] += (*this->solution_)[index3] * dPhiTrans[w][i][0];
817 u32[w] += (*this->solution_)[index3] * dPhiTrans[w][i][1];
818 u33[w] += (*this->solution_)[index3] * dPhiTrans[w][i][2];
820 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]));