5 #ifndef NEUMANNINNERSURFACE_POLYCONVEXHGO_HPP 6 #define NEUMANNINNERSURFACE_POLYCONVEXHGO_HPP 19 Epetra_SerialDenseVector
a,
b;
23 std::string mesh_file = Teuchos::getParameter<std::string>(Parameters.sublist(
"Mesh"),
"mesh_file");
24 std::string boundary_file = Teuchos::getParameter<std::string>(Parameters.sublist(
"Mesh"),
"boundary_file");
25 unsigned int number_physical_groups = Teuchos::getParameter<unsigned int>(Parameters.sublist(
"Mesh"),
"nb_phys_groups");
26 std::string select_model = Teuchos::getParameter<std::string>(Parameters.sublist(
"Mesh"),
"model");
28 mu1 = Teuchos::getParameter<double>(Parameters.sublist(select_model),
"mu1");
29 mu2 = Teuchos::getParameter<double>(Parameters.sublist(select_model),
"mu2");
30 mu3 = Teuchos::getParameter<double>(Parameters.sublist(select_model),
"mu3");
31 mu4 = Teuchos::getParameter<double>(Parameters.sublist(select_model),
"mu4");
32 beta3 = Teuchos::getParameter<double>(Parameters.sublist(select_model),
"beta3");
33 beta4 = Teuchos::getParameter<double>(Parameters.sublist(select_model),
"beta4");
34 theta = Teuchos::getParameter<double>(Parameters.sublist(select_model),
"theta");
36 Mesh =
new mesh(comm, mesh_file, 1000.0);
37 Mesh->read_boundary_file(boundary_file,number_physical_groups);
43 Epetra_FECrsMatrix matrix(Copy,*Laplace->
FEGraph);
49 bc_val[0] = 0.0; bc_val[1] = 1.0;
51 bc_indx[0] = 2; bc_indx[1] = 3;
52 Laplace->
solve_aztec(Parameters.sublist(
"Laplace"), matrix, phi, rhs, &bc_indx[0], &bc_val[0]);
55 bc_indx[0] = 0; bc_indx[1] = 1;
56 Laplace->
solve_aztec(Parameters.sublist(
"Laplace"), matrix, psi, rhs, &bc_indx[0], &bc_val[0]);
63 StandardMap =
new Epetra_Map(-1,3*Mesh->n_local_nodes_without_ghosts,&Mesh->local_dof_without_ghosts[0],0,*
Comm);
64 OverlapMap =
new Epetra_Map(-1,3*Mesh->n_local_nodes,&Mesh->local_dof[0],0,*
Comm);
99 for (
int i=0;
i<3; ++
i){
109 double & det, Epetra_SerialDenseVector & inverse_cauchy,
110 Epetra_SerialDenseVector & piola_isc,
111 Epetra_SerialDenseVector & piola_vol,
112 Epetra_SerialDenseMatrix & tangent_piola_isc,
113 Epetra_SerialDenseMatrix & tangent_piola_vol){
115 model_C(deformation_gradient, det, inverse_cauchy, piola_isc, piola_vol, tangent_piola_isc, tangent_piola_vol);
120 double ptheta = std::pow(theta,beta3);
121 pressure = mu3*beta3*( (ptheta/
theta) - (1.0/(ptheta*theta)) );
122 dpressure = mu3*beta3*( (beta3-1.0)*(ptheta/(theta*
theta)) + (beta3+1.0)/(ptheta*theta*
theta) );
127 for (
int i=0;
i<3; ++
i){
136 void get_stress_for_recover(Epetra_SerialDenseMatrix & deformation_gradient,
double & det, Epetra_SerialDenseMatrix & piola_stress){
138 det = deformation_gradient(0,0)*deformation_gradient(1,1)*deformation_gradient(2,2)
139 - deformation_gradient(0,0)*deformation_gradient(1,2)*deformation_gradient(2,1)
140 - deformation_gradient(0,1)*deformation_gradient(1,0)*deformation_gradient(2,2)
141 + deformation_gradient(0,1)*deformation_gradient(1,2)*deformation_gradient(2,0)
142 + deformation_gradient(0,2)*deformation_gradient(1,0)*deformation_gradient(2,1)
143 - deformation_gradient(0,2)*deformation_gradient(1,1)*deformation_gradient(2,0);
145 double alpha = std::pow(det,-2.0/3.0);
146 double beta = 1.0/(det*det);
147 Epetra_SerialDenseMatrix eye(3,3);
148 Epetra_SerialDenseMatrix M1(3,3), M2(3,3);
149 Epetra_SerialDenseMatrix C(3,3),
L(3,3);
150 Epetra_SerialDenseMatrix piola_ani1(3,3), piola_ani2(3,3);
152 eye(0,0) = 1.0; eye(0,1) = 0.0; eye(0,2) = 0.0;
153 eye(1,0) = 0.0; eye(1,1) = 1.0; eye(1,2) = 0.0;
154 eye(2,0) = 0.0; eye(2,1) = 0.0; eye(2,2) = 1.0;
156 M1.Multiply(
'N',
'T',1.0,a,a,0.0);
157 M2.Multiply(
'N',
'T',1.0,b,b,0.0);
159 C.Multiply(
'T',
'N',1.0,deformation_gradient,deformation_gradient,0.0);
161 L(0,0) = (1.0/(det*det))*(C(1,1)*C(2,2)-C(1,2)*C(2,1));
162 L(1,1) = (1.0/(det*det))*(C(0,0)*C(2,2)-C(0,2)*C(2,0));
163 L(2,2) = (1.0/(det*det))*(C(0,0)*C(1,1)-C(0,1)*C(1,0));
164 L(1,2) = (1.0/(det*det))*(C(0,2)*C(1,0)-C(0,0)*C(1,2));
165 L(0,2) = (1.0/(det*det))*(C(0,1)*C(1,2)-C(0,2)*C(1,1));
166 L(0,1) = (1.0/(det*det))*(C(0,2)*C(2,1)-C(0,1)*C(2,2));
167 L(2,1) =
L(1,2);
L(2,0) =
L(0,2);
L(1,0) =
L(0,1);
169 double I1 = C(0,0) + C(1,1) + C(2,2);
170 double II1 = C(0,0)*C(0,0) + C(1,1)*C(1,1) + C(2,2)*C(2,2) + 2.0*C(1,2)*C(1,2) + 2.0*C(0,2)*C(0,2) + 2.0*C(0,1)*C(0,1);
171 double I2 = (1.0/2.0)*(I1*I1-II1);
172 double I4_1 = C(0,0)*M1(0,0) + C(1,1)*M1(1,1) + C(2,2)*M1(2,2) + 2.0*C(0,1)*M1(0,1) + 2.0*C(0,2)*M1(0,2) + 2.0*C(1,2)*M1(1,2);
173 double I4_2 = C(0,0)*M2(0,0) + C(1,1)*M2(1,1) + C(2,2)*M2(2,2) + 2.0*C(0,1)*M2(0,1) + 2.0*C(0,2)*M2(0,2) + 2.0*C(1,2)*M2(1,2);
174 double pI2 = std::sqrt(I2);
176 double S4_1 = (I4_1-1.0)*(I4_1-1.0);
177 double S4_2 = (I4_2-1.0)*(I4_2-1.0);
179 double ptheta = std::pow(det,beta3);
180 double pressure = mu3*beta3*( (ptheta/det) - (1.0/(ptheta*det)) );
182 for (
unsigned int i=0;
i<3; ++
i){
183 for (
unsigned int j=0;
j<3; ++
j){
184 piola_stress(
i,
j) = 2.0*mu1*alpha*(eye(
i,
j)-(1.0/3.0)*
L(
i,
j))
185 + mu2*beta*( 3.0*pI2*(I1*eye(
i,
j)-C(
i,
j)) - 2.0*I2*pI2*
L(
i,
j) )
186 + det*pressure*
L(
i,
j);
187 piola_ani1(
i,
j) = 4.0*mu4*(I4_1-1.0)*exp(beta4*S4_1)*M1(
i,
j);
188 piola_ani2(
i,
j) = 4.0*mu4*(I4_2-1.0)*exp(beta4*S4_2)*M2(
i,
j);
193 piola_stress += piola_ani1;
196 piola_stress += piola_ani2;
222 const int nodesblk_gid0 = 480-1;
223 const int nodesblk_gid1 = 538-1;
224 const int nodesblk_gid2 = 577-1;
306 Epetra_IntSerialDenseVector nodesblk_gid(3);
307 nodesblk_gid(0) = 480-1;
308 nodesblk_gid(1) = 481-1;
309 nodesblk_gid(2) = 479-1;
316 if (node==nodesblk_gid(0)||node==nodesblk_gid(1)||node==nodesblk_gid(2)){
330 if (node==nodesblk_gid(0)||node==nodesblk_gid(1)||node==nodesblk_gid(2)){
344 void apply_clamp(Epetra_FECrsMatrix & K, Epetra_FEVector & F,
double & displacement){
359 void apply_slipbc(Epetra_FECrsMatrix & K, Epetra_FEVector & F,
double & displacement){
360 const int nodesblk_gid0 = 480-1;
361 const int nodesblk_gid1 = 538-1;
362 const int nodesblk_gid2 = 577-1;
411 Epetra_IntSerialDenseVector nodesblk_gid(3);
412 nodesblk_gid(0) = 480-1;
413 nodesblk_gid(1) = 481-1;
414 nodesblk_gid(2) = 479-1;
421 if (node==nodesblk_gid(0)||node==nodesblk_gid(1)||node==nodesblk_gid(2)){
435 void model_C(Epetra_SerialDenseMatrix & deformation_gradient,
double & det, Epetra_SerialDenseVector &
L, Epetra_SerialDenseVector & piola_isc, Epetra_SerialDenseVector & piola_vol, Epetra_SerialDenseMatrix & tangent_piola_isc, Epetra_SerialDenseMatrix & tangent_piola_vol){
437 det = deformation_gradient(0,0)*deformation_gradient(1,1)*deformation_gradient(2,2)
438 - deformation_gradient(0,0)*deformation_gradient(1,2)*deformation_gradient(2,1)
439 - deformation_gradient(0,1)*deformation_gradient(1,0)*deformation_gradient(2,2)
440 + deformation_gradient(0,1)*deformation_gradient(1,2)*deformation_gradient(2,0)
441 + deformation_gradient(0,2)*deformation_gradient(1,0)*deformation_gradient(2,1)
442 - deformation_gradient(0,2)*deformation_gradient(1,1)*deformation_gradient(2,0);
444 double alpha = std::pow(det,-2.0/3.0);
446 Epetra_SerialDenseVector eye(6);
447 Epetra_SerialDenseMatrix rightCauchy(3,3);
448 Epetra_SerialDenseVector M1(6), M2(6);
449 Epetra_SerialDenseVector C(6), D(6);
450 Epetra_SerialDenseVector piola_nh(6), piola_ani1(6), piola_ani2(6);
452 M1(0) =
a(0)*
a(0); M2(0) =
b(0)*
b(0);
453 M1(1) =
a(1)*
a(1); M2(1) =
b(1)*
b(1);
454 M1(2) =
a(2)*
a(2); M2(2) =
b(2)*
b(2);
455 M1(3) =
a(1)*
a(2); M2(3) =
b(1)*
b(2);
456 M1(4) =
a(0)*
a(2); M2(4) =
b(0)*
b(2);
457 M1(5) =
a(0)*
a(1); M2(5) =
b(0)*
b(1);
459 rightCauchy.Multiply(
'T',
'N',1.0,deformation_gradient,deformation_gradient,0.0);
461 eye(0) = 1.0; eye(1) = 1.0; eye(2) = 1.0; eye(3) = 0.0; eye(4) = 0.0; eye(5) = 0.0;
463 C(0) = rightCauchy(0,0); C(1) = rightCauchy(1,1); C(2) = rightCauchy(2,2);
464 C(3) = rightCauchy(1,2); C(4) = rightCauchy(0,2); C(5) = rightCauchy(0,1);
466 L(0) = (1.0/(det*det))*(rightCauchy(1,1)*rightCauchy(2,2)-rightCauchy(1,2)*rightCauchy(2,1));
467 L(1) = (1.0/(det*det))*(rightCauchy(0,0)*rightCauchy(2,2)-rightCauchy(0,2)*rightCauchy(2,0));
468 L(2) = (1.0/(det*det))*(rightCauchy(0,0)*rightCauchy(1,1)-rightCauchy(0,1)*rightCauchy(1,0));
469 L(3) = (1.0/(det*det))*(rightCauchy(0,2)*rightCauchy(1,0)-rightCauchy(0,0)*rightCauchy(1,2));
470 L(4) = (1.0/(det*det))*(rightCauchy(0,1)*rightCauchy(1,2)-rightCauchy(0,2)*rightCauchy(1,1));
471 L(5) = (1.0/(det*det))*(rightCauchy(0,2)*rightCauchy(2,1)-rightCauchy(0,1)*rightCauchy(2,2));
473 double I1 = C(0) + C(1) + C(2);
474 double II1 = C(0)*C(0) + C(1)*C(1) + C(2)*C(2) + 2.0*C(3)*C(3) + 2.0*C(4)*C(4) + 2.0*C(5)*C(5);
475 double I2 = (1.0/2.0)*(I1*I1-II1);
476 double I4_1 = C(0)*M1(0) + C(1)*M1(1) + C(2)*M1(2) + 2.0*C(5)*M1(5) + 2.0*C(4)*M1(4) + 2.0*C(3)*M1(3);
477 double I4_2 = C(0)*M2(0) + C(1)*M2(1) + C(2)*M2(2) + 2.0*C(5)*M2(5) + 2.0*C(4)*M2(4) + 2.0*C(3)*M2(3);
478 double pI2 = std::sqrt(I2);
480 double S4_1 = (I4_1-1.0)*(I4_1-1.0);
481 double S4_2 = (I4_2-1.0)*(I4_2-1.0);
483 for (
unsigned int i=0;
i<6; ++
i){
484 D(
i) = I1*eye(
i) - C(
i);
485 piola_nh(
i) = 2.0*alpha*mu1*(eye(
i)-(1.0/3.0)*I1*
L(
i));
486 piola_isc(
i) = piola_nh(
i) + (mu2/(det*det))*( 3.0*pI2*D(
i) - 2.0*pI2*I2*
L(
i) );
488 piola_ani1(
i) = 4.0*mu4*(I4_1-1.0)*exp(beta4*S4_1)*M1(
i);
489 piola_ani2(
i) = 4.0*mu4*(I4_2-1.0)*exp(beta4*S4_2)*M2(
i);
491 piola_vol(
i) = det*
L(
i);
506 tensor_product(-6.0*mu2*pI2/(det*det),D,eye,tangent_piola_isc,1.0);
507 tensor_product(-6.0*mu2*pI2/(det*det),eye,D,tangent_piola_isc,1.0);
510 tensor_product((-4.0/9.0)*mu1*alpha*I1 + 4.0*mu2*pI2*I2/(det*det),L,L,tangent_piola_isc,1.0);
513 sym_tensor_product((4.0/3.0)*mu1*alpha*I1 + 4.0*mu2*pI2*I2/(det*det),L,L,tangent_piola_isc,1.0);
519 tensor_product(6.0*mu2*pI2/(det*det),eye,eye,tangent_piola_isc,1.0);
525 piola_isc += piola_ani1;
527 tensor_product((8.0*mu4 + 16.0*mu4*beta4*S4_1)*exp(beta4*S4_1),M1,M1,tangent_piola_isc,1.0);
530 piola_isc += piola_ani2;
532 tensor_product((8.0*mu4 + 16.0*mu4*beta4*S4_2)*exp(beta4*S4_2),M2,M2,tangent_piola_isc,1.0);
536 void model_B(Epetra_SerialDenseMatrix & deformation_gradient,
double & det, Epetra_SerialDenseVector & piola_isc, Epetra_SerialDenseVector & piola_vol, Epetra_SerialDenseMatrix & tangent_piola_isc, Epetra_SerialDenseMatrix & tangent_piola_vol){
538 det = deformation_gradient(0,0)*deformation_gradient(1,1)*deformation_gradient(2,2)-deformation_gradient(0,0)*deformation_gradient(1,2)*deformation_gradient(2,1)-deformation_gradient(0,1)*deformation_gradient(1,0)*deformation_gradient(2,2)+deformation_gradient(0,1)*deformation_gradient(1,2)*deformation_gradient(2,0)+deformation_gradient(0,2)*deformation_gradient(1,0)*deformation_gradient(2,1)-deformation_gradient(0,2)*deformation_gradient(1,1)*deformation_gradient(2,0);
540 double alpha = std::pow(det,-2.0/3.0);
542 Epetra_SerialDenseMatrix rightCauchy(3,3);
543 Epetra_SerialDenseVector M1(6), M2(6);
544 Epetra_SerialDenseVector eye(6);
545 Epetra_SerialDenseVector C(6), D(6),
L(6);
546 Epetra_SerialDenseVector dI4_1(6), dI4_2(6);
547 Epetra_SerialDenseVector piola_nh(6), piola_ani1(6), piola_ani2(6);
549 M1(0) =
a(0)*
a(0); M2(0) =
b(0)*
b(0);
550 M1(1) =
a(1)*
a(1); M2(1) =
b(1)*
b(1);
551 M1(2) =
a(2)*
a(2); M2(2) =
b(2)*
b(2);
552 M1(3) =
a(1)*
a(2); M2(3) =
b(1)*
b(2);
553 M1(4) =
a(0)*
a(2); M2(4) =
b(0)*
b(2);
554 M1(5) =
a(0)*
a(1); M2(5) =
b(0)*
b(1);
556 rightCauchy.Multiply(
'T',
'N',1.0,deformation_gradient,deformation_gradient,0.0);
558 eye(0) = 1.0; eye(1) = 1.0; eye(2) = 1.0; eye(3) = 0.0; eye(4) = 0.0; eye(5) = 0.0;
560 C(0) = rightCauchy(0,0); C(1) = rightCauchy(1,1); C(2) = rightCauchy(2,2);
561 C(3) = rightCauchy(1,2); C(4) = rightCauchy(0,2); C(5) = rightCauchy(0,1);
563 L(0) = (1.0/(det*det))*(rightCauchy(1,1)*rightCauchy(2,2)-rightCauchy(1,2)*rightCauchy(2,1));
564 L(1) = (1.0/(det*det))*(rightCauchy(0,0)*rightCauchy(2,2)-rightCauchy(0,2)*rightCauchy(2,0));
565 L(2) = (1.0/(det*det))*(rightCauchy(0,0)*rightCauchy(1,1)-rightCauchy(0,1)*rightCauchy(1,0));
566 L(3) = (1.0/(det*det))*(rightCauchy(0,2)*rightCauchy(1,0)-rightCauchy(0,0)*rightCauchy(1,2));
567 L(4) = (1.0/(det*det))*(rightCauchy(0,1)*rightCauchy(1,2)-rightCauchy(0,2)*rightCauchy(1,1));
568 L(5) = (1.0/(det*det))*(rightCauchy(0,2)*rightCauchy(2,1)-rightCauchy(0,1)*rightCauchy(2,2));
570 double I1 = C(0) + C(1) + C(2);
571 double II1 = C(0)*C(0) + C(1)*C(1) + C(2)*C(2) + 2.0*C(3)*C(3) + 2.0*C(4)*C(4) + 2.0*C(5)*C(5);
572 double I2 = (1.0/2.0)*(I1*I1-II1);
573 double I4_1 = C(0)*M1(0) + C(1)*M1(1) + C(2)*M1(2) + 2.0*C(5)*M1(5) + 2.0*C(4)*M1(4) + 2.0*C(3)*M1(3);
574 double I4_2 = C(0)*M2(0) + C(1)*M2(1) + C(2)*M2(2) + 2.0*C(5)*M2(5) + 2.0*C(4)*M2(4) + 2.0*C(3)*M2(3);
575 double pI2 = std::sqrt(I2);
577 double S4_1 = (alpha*I4_1-1.0)*(alpha*I4_1-1.0);
578 double S4_2 = (alpha*I4_2-1.0)*(alpha*I4_2-1.0);
580 for (
unsigned int i=0;
i<6; ++
i){
581 D(
i) = I1*eye(
i) - C(
i);
582 dI4_1(
i) = M1(
i)-(1.0/3.0)*I4_1*
L(
i);
583 dI4_2(
i) = M2(
i)-(1.0/3.0)*I4_2*
L(
i);
584 piola_nh(
i) = 2.0*alpha*mu1*(eye(
i)-(1.0/3.0)*I1*
L(
i));
585 piola_isc(
i) = piola_nh(
i) + (mu2/(det*det))*( 3.0*pI2*D(
i) - 2.0*pI2*I2*
L(
i) );
587 piola_ani1(
i) = 4.0*mu4*alpha*(alpha*I4_1-1.0)*exp(beta4*S4_1)*(M1(
i)-(1.0/3.0)*I4_1*
L(
i));
588 piola_ani2(
i) = 4.0*mu4*alpha*(alpha*I4_2-1.0)*exp(beta4*S4_2)*(M2(
i)-(1.0/3.0)*I4_2*
L(
i));;
590 piola_vol(
i) = det*
L(
i);
604 scalarAB = -6.0*mu2*pI2/(det*det);
608 scalarAB = (-4.0/9.0)*mu1*alpha*I1 + 4.0*mu2*pI2*I2/(det*det);
611 scalarAB = (4.0/3.0)*mu1*alpha*I1 + 4.0*mu2*pI2*I2/(det*det);
614 scalarAB = 3.0*mu2/(det*det*pI2);
617 scalarAB = 6.0*mu2*pI2/(det*det);
620 scalarAB = -scalarAB;
624 piola_isc += piola_ani1;
625 scalarAB = -(8.0/3.0)*mu4*alpha*(alpha*I4_1-1.0)*exp(beta4*S4_1);
627 scalarAB = (8.0/3.0)*mu4*alpha*alpha*exp(beta4*S4_1);
629 scalarAB = 16.0*mu4*beta4*alpha*alpha*S4_1*exp(beta4*S4_1);
633 piola_isc += piola_ani2;
634 scalarAB = -(8.0/3.0)*mu4*alpha*(alpha*I4_2-1.0)*exp(beta4*S4_2);
636 scalarAB = (8.0/3.0)*mu4*alpha*alpha*exp(beta4*S4_2);
638 scalarAB = 16.0*mu4*beta4*alpha*alpha*S4_2*exp(beta4*S4_2);
644 void model_A(Epetra_SerialDenseMatrix & deformation_gradient,
double & det, Epetra_SerialDenseVector & piola_isc, Epetra_SerialDenseVector & piola_vol, Epetra_SerialDenseMatrix & tangent_piola_isc, Epetra_SerialDenseMatrix & tangent_piola_vol){
646 det = deformation_gradient(0,0)*deformation_gradient(1,1)*deformation_gradient(2,2)-deformation_gradient(0,0)*deformation_gradient(1,2)*deformation_gradient(2,1)-deformation_gradient(0,1)*deformation_gradient(1,0)*deformation_gradient(2,2)+deformation_gradient(0,1)*deformation_gradient(1,2)*deformation_gradient(2,0)+deformation_gradient(0,2)*deformation_gradient(1,0)*deformation_gradient(2,1)-deformation_gradient(0,2)*deformation_gradient(1,1)*deformation_gradient(2,0);
648 double alpha = std::pow(det,-2.0/3.0);
650 Epetra_SerialDenseMatrix rightCauchy(3,3);
651 Epetra_SerialDenseVector M1(6), M2(6);
652 Epetra_SerialDenseVector eye(6);
653 Epetra_SerialDenseVector C(6),
L(6), CC(6);
654 Epetra_SerialDenseVector CMMC1(6), CMMC2(6);
655 Epetra_SerialDenseVector D(6);
656 Epetra_SerialDenseVector dK3_1(6), dK3_2(6);
657 Epetra_SerialDenseVector piola_nh(6), piola_ani1(6), piola_ani2(6);
673 rightCauchy.Multiply(
'T',
'N',1.0,deformation_gradient,deformation_gradient,0.0);
675 eye(0) = 1.0; eye(1) = 1.0; eye(2) = 1.0; eye(3) = 0.0; eye(4) = 0.0; eye(5) = 0.0;
677 C(0) = rightCauchy(0,0); C(1) = rightCauchy(1,1); C(2) = rightCauchy(2,2);
678 C(3) = rightCauchy(1,2); C(4) = rightCauchy(0,2); C(5) = rightCauchy(0,1);
680 L(0) = (1.0/(det*det))*(rightCauchy(1,1)*rightCauchy(2,2)-rightCauchy(1,2)*rightCauchy(2,1));
681 L(1) = (1.0/(det*det))*(rightCauchy(0,0)*rightCauchy(2,2)-rightCauchy(0,2)*rightCauchy(2,0));
682 L(2) = (1.0/(det*det))*(rightCauchy(0,0)*rightCauchy(1,1)-rightCauchy(0,1)*rightCauchy(1,0));
683 L(3) = (1.0/(det*det))*(rightCauchy(0,2)*rightCauchy(1,0)-rightCauchy(0,0)*rightCauchy(1,2));
684 L(4) = (1.0/(det*det))*(rightCauchy(0,1)*rightCauchy(1,2)-rightCauchy(0,2)*rightCauchy(1,1));
685 L(5) = (1.0/(det*det))*(rightCauchy(0,2)*rightCauchy(2,1)-rightCauchy(0,1)*rightCauchy(2,2));
687 CMMC1(0) = 2.0*C(0)*M1(0) + 2.0*C(4)*M1(4) + 2.0*C(5)*M1(5);
688 CMMC1(1) = 2.0*C(1)*M1(1) + 2.0*C(3)*M1(3) + 2.0*C(5)*M1(5);
689 CMMC1(2) = 2.0*C(2)*M1(2) + 2.0*C(3)*M1(3) + 2.0*C(4)*M1(4);
690 CMMC1(3) = C(1)*M1(3) + C(3)*M1(1) + C(2)*M1(3) + C(3)*M1(2) + C(4)*M1(5) + C(5)*M1(4);
691 CMMC1(4) = C(0)*M1(4) + C(4)*M1(0) + C(2)*M1(4) + C(4)*M1(2) + C(3)*M1(5) + C(5)*M1(3);
692 CMMC1(5) = C(0)*M1(5) + C(5)*M1(0) + C(1)*M1(5) + C(5)*M1(1) + C(3)*M1(4) + C(4)*M1(3);
694 CMMC2(0) = 2.0*C(0)*M2(0) + 2.0*C(4)*M2(4) + 2.0*C(5)*M2(5);
695 CMMC2(1) = 2.0*C(1)*M2(1) + 2.0*C(3)*M2(3) + 2.0*C(5)*M2(5);
696 CMMC2(2) = 2.0*C(2)*M2(2) + 2.0*C(3)*M2(3) + 2.0*C(4)*M2(4);
697 CMMC2(3) = C(1)*M2(3) + C(3)*M2(1) + C(2)*M2(3) + C(3)*M2(2) + C(4)*M2(5) + C(5)*M2(4);
698 CMMC2(4) = C(0)*M2(4) + C(4)*M2(0) + C(2)*M2(4) + C(4)*M2(2) + C(3)*M2(5) + C(5)*M2(3);
699 CMMC2(5) = C(0)*M2(5) + C(5)*M2(0) + C(1)*M2(5) + C(5)*M2(1) + C(3)*M2(4) + C(4)*M2(3);
701 CC(0) = C(0)*C(0) + C(4)*C(4) + C(5)*C(5);
702 CC(1) = C(1)*C(1) + C(3)*C(3) + C(5)*C(5);
703 CC(2) = C(2)*C(2) + C(3)*C(3) + C(4)*C(4);
704 CC(3) = C(1)*C(3) + C(2)*C(3) + C(4)*C(5);
705 CC(4) = C(0)*C(4) + C(2)*C(4) + C(3)*C(5);
706 CC(5) = C(0)*C(5) + C(1)*C(5) + C(3)*C(4);
708 double I1 = C(0) + C(1) + C(2);
709 double II1 = C(0)*C(0) + C(1)*C(1) + C(2)*C(2) + 2.0*C(3)*C(3) + 2.0*C(4)*C(4) + 2.0*C(5)*C(5);
710 double I2 = (1.0/2.0)*(I1*I1-II1);
711 double I4_1 = C(0)*M1(0) + C(1)*M1(1) + C(2)*M1(2) + 2.0*C(5)*M1(5) + 2.0*C(4)*M1(4) + 2.0*C(3)*M1(3);
712 double I4_2 = C(0)*M2(0) + C(1)*M2(1) + C(2)*M2(2) + 2.0*C(5)*M2(5) + 2.0*C(4)*M2(4) + 2.0*C(3)*M2(3);
713 double I5_1 = CC(0)*M1(0) + CC(1)*M1(1) + CC(2)*M1(2) + 2.0*CC(5)*M1(5) + 2.0*CC(4)*M1(4) + 2.0*CC(3)*M1(3);
714 double I5_2 = CC(0)*M2(0) + CC(1)*M2(1) + CC(2)*M2(2) + 2.0*CC(5)*M2(5) + 2.0*CC(4)*M2(4) + 2.0*CC(3)*M2(3);
715 double K3_1 = I1*I4_1-I5_1;
716 double K3_2 = I1*I4_2-I5_2;
717 double pI2 = std::sqrt(I2);
719 for (
unsigned int i=0;
i<6; ++
i){
720 D(
i) = I1*eye(
i) - C(
i);
721 piola_nh(
i) = 2.0*alpha*mu1*(eye(
i)-(1.0/3.0)*I1*
L(
i));
722 piola_isc(
i) = piola_nh(
i) + (mu2/(det*det))*( 3.0*pI2*D(
i) - 2.0*pI2*I2*
L(
i) );
724 dK3_1(
i) = I4_1*eye(
i) + I1*M1(
i) - CMMC1(
i);
725 dK3_2(
i) = I4_2*eye(
i) + I1*M2(
i) - CMMC2(
i);
726 piola_ani1(
i) = 2.0*mu4*beta4*std::pow(K3_1-2.0,beta4-1.0)*dK3_1(
i);
727 piola_ani2(
i) = 2.0*mu4*beta4*std::pow(K3_2-2.0,beta4-1.0)*dK3_2(
i);
729 piola_vol(
i) = det*
L(
i);
743 scalarAB = -6.0*mu2*pI2/(det*det);
747 scalarAB = (-4.0/9.0)*mu1*alpha*I1 + 4.0*mu2*pI2*I2/(det*det);
750 scalarAB = (4.0/3.0)*mu1*alpha*I1 + 4.0*mu2*pI2*I2/(det*det);
753 scalarAB = 3.0*mu2/(det*det*pI2);
756 scalarAB = 6.0*mu2*pI2/(det*det);
759 scalarAB = -scalarAB;
763 piola_isc += piola_ani1;
764 scalarAB = 4.0*mu4*beta4*(beta4-1.0)*std::pow(K3_1-2.0,beta4-2.0);
767 scalarAB = 4.0*mu4*beta4*std::pow(K3_1-2.0,beta4-1.0);
770 scalarAB = -scalarAB;
775 piola_isc += piola_ani2;
776 scalarAB = 4.0*mu4*beta4*(beta4-1.0)*std::pow(K3_2-2.0,beta4-2.0);
779 scalarAB = 4.0*mu4*beta4*std::pow(K3_2-2.0,beta4-1.0);
782 scalarAB = -scalarAB;
neumannInnerSurface_PolyconvexHGO(Epetra_Comm &comm, Teuchos::ParameterList &Parameters)
void model_C(Epetra_SerialDenseMatrix &deformation_gradient, double &det, Epetra_SerialDenseVector &L, Epetra_SerialDenseVector &piola_isc, Epetra_SerialDenseVector &piola_vol, Epetra_SerialDenseMatrix &tangent_piola_isc, Epetra_SerialDenseMatrix &tangent_piola_vol)
std::vector< int > local_nodes
void tensor_product(double scalarAB, Epetra_SerialDenseVector &A, Epetra_SerialDenseVector &B, Epetra_SerialDenseMatrix &AoB, double scalarThis)
Epetra_SerialDenseVector b
void apply_slipbc(Epetra_FECrsMatrix &K, Epetra_FEVector &F, double &displacement)
void apply_semiselipbc(Epetra_FECrsMatrix &K, Epetra_FEVector &F, double &displacement)
int print_solution(Epetra_Vector &lhs, std::string fileName)
void compute_center_local_directions(Epetra_Vector &laplace_one, Epetra_Vector &laplace_two)
void get_material_parameters_for_recover(unsigned int &e_lid)
void model_A(Epetra_SerialDenseMatrix &deformation_gradient, double &det, Epetra_SerialDenseVector &piola_isc, Epetra_SerialDenseVector &piola_vol, Epetra_SerialDenseMatrix &tangent_piola_isc, Epetra_SerialDenseMatrix &tangent_piola_vol)
Epetra_SerialDenseVector a
void get_matrix_and_rhs(Epetra_Vector &x, Epetra_FECrsMatrix &K, Epetra_FEVector &F)
void model_B(Epetra_SerialDenseMatrix &deformation_gradient, double &det, Epetra_SerialDenseVector &piola_isc, Epetra_SerialDenseVector &piola_vol, Epetra_SerialDenseMatrix &tangent_piola_isc, Epetra_SerialDenseMatrix &tangent_piola_vol)
Epetra_FECrsGraph * FEGraph
void get_internal_pressure(double &theta, double &pressure, double &dpressure)
Epetra_IntSerialDenseMatrix nodes_to_boundaries
std::vector< int > local_cells
clc clear all close all mesh
~neumannInnerSurface_PolyconvexHGO()
int n_local_nodes_without_ghosts
void get_constitutive_tensors_static_condensation(Epetra_SerialDenseMatrix &deformation_gradient, double &det, Epetra_SerialDenseVector &inverse_cauchy, Epetra_SerialDenseVector &piola_isc, Epetra_SerialDenseVector &piola_vol, Epetra_SerialDenseMatrix &tangent_piola_isc, Epetra_SerialDenseMatrix &tangent_piola_vol)
Epetra_SerialDenseMatrix laplace_direction_one
Epetra_Import * ImportToOverlapMap
void get_material_parameters(unsigned int &e_lid, unsigned int &gp)
unsigned int n_gauss_cells
void sym_tensor_product(double scalarAB, Epetra_SerialDenseVector &A, Epetra_SerialDenseVector &B, Epetra_SerialDenseMatrix &AoB, double scalarThis)
Epetra_SerialDenseMatrix laplace_direction_two_cross_one
Epetra_SerialDenseMatrix laplace_direction_one_center
void apply_clamp(Epetra_FECrsMatrix &K, Epetra_FEVector &F, double &displacement)
void get_stress_for_recover(Epetra_SerialDenseMatrix &deformation_gradient, double &det, Epetra_SerialDenseMatrix &piola_stress)
Epetra_SerialDenseMatrix laplace_direction_two_cross_one_center
void setup_slipbc_and_clamp()
void compute_local_directions(Epetra_Vector &laplace_one, Epetra_Vector &laplace_two)
void apply_slipbc_and_clamp(Epetra_FECrsMatrix &K, Epetra_FEVector &F, double &displacement)
void assembleMixedDirichletDeformationDependentNeumann_homogeneousForcing(Epetra_Vector &x, Epetra_FECrsMatrix &K, Epetra_FEVector &F)
void apply_dirichlet_conditions(Epetra_FECrsMatrix &K, Epetra_FEVector &F, double &displacement)
void setup_dirichlet_conditions()
void solve_aztec(Teuchos::ParameterList &Parameters, Epetra_FECrsMatrix &matrix, Epetra_Vector &lhs, Epetra_FEVector &rhs, int *bc_indx, double *bc_val)