38 #ifndef _VENANTKIRCHHOFFPENALIZED_H_ 39 #define _VENANTKIRCHHOFFPENALIZED_H_ 41 #pragma GCC diagnostic ignored "-Wunused-variable" 42 #pragma GCC diagnostic ignored "-Wunused-parameter" 45 #include <lifev/structure/solver/isotropic/StructuralIsotropicConstitutiveLaw.hpp> 49 template <
typename MeshType>
50 class VenantKirchhoffMaterialNonLinearPenalized :
public StructuralIsotropicConstitutiveLaw<MeshType>
56 typedef StructuralIsotropicConstitutiveLaw<MeshType> super;
58 typedef typename super::data_Type data_Type;
60 typedef typename super::vector_Type vector_Type;
61 typedef typename super::matrix_Type matrix_Type;
63 typedef typename super::matrixPtr_Type matrixPtr_Type;
64 typedef typename super::vectorPtr_Type vectorPtr_Type;
65 typedef typename super::dataPtr_Type dataPtr_Type;
66 typedef typename super::displayerPtr_Type displayerPtr_Type;
68 typedef typename super::mapMarkerVolumesPtr_Type mapMarkerVolumesPtr_Type;
69 typedef typename super::mapMarkerVolumes_Type mapMarkerVolumes_Type;
70 typedef typename mapMarkerVolumes_Type::const_iterator mapIterator_Type;
72 typedef typename super::vectorVolumes_Type vectorVolumes_Type;
73 typedef std::shared_ptr<vectorVolumes_Type> vectorVolumesPtr_Type;
75 typedef typename super::mapMarkerIndexesPtr_Type mapMarkerIndexesPtr_Type;
76 typedef typename super::mapMarkerIndexes_Type mapMarkerIndexes_Type;
77 typedef typename mapMarkerIndexes_Type::const_iterator mapIteratorIndex_Type;
79 typedef std::vector<UInt> vectorIndexes_Type;
80 typedef std::shared_ptr<vectorIndexes_Type> vectorIndexesPtr_Type;
82 typedef typename super::FESpacePtr_Type FESpacePtr_Type;
83 typedef typename super::ETFESpacePtr_Type ETFESpacePtr_Type;
86 typedef typename super::vectorsParameters_Type vectorsParameters_Type;
87 typedef typename super::vectorsParametersPtr_Type vectorsParametersPtr_Type;
89 typedef MatrixSmall<3, 3> matrixSmall_Type;
92 typedef typename super::tensorF_Type tensorF_Type;
93 typedef typename super::determinantF_Type determinantF_Type;
94 typedef typename super::tensorC_Type tensorC_Type;
95 typedef typename super::minusT_Type minusT_Type;
96 typedef typename super::traceTensor_Type traceTensor_Type;
105 VenantKirchhoffMaterialNonLinearPenalized();
107 virtual ~VenantKirchhoffMaterialNonLinearPenalized();
122 void setup (
const FESpacePtr_Type& dFESpace,
123 const ETFESpacePtr_Type& dETFESpace,
124 const std::shared_ptr<
const MapEpetra>& monolithicMap,
125 const UInt offset,
const dataPtr_Type& dataMaterial);
131 void computeLinearStiff ( dataPtr_Type& ,
132 const mapMarkerVolumesPtr_Type ,
133 const mapMarkerIndexesPtr_Type );
142 void updateJacobianMatrix (
const vector_Type& sol,
143 const dataPtr_Type& dataMaterial,
144 const mapMarkerVolumesPtr_Type mapsMarkerVolumes,
145 const mapMarkerIndexesPtr_Type mapsMarkerIndexes,
146 const displayerPtr_Type& displayer );
156 void updateNonLinearJacobianTerms ( matrixPtr_Type& jacobian,
157 const vector_Type& sol,
158 const dataPtr_Type& dataMaterial,
159 const mapMarkerVolumesPtr_Type ,
160 const mapMarkerIndexesPtr_Type ,
161 const displayerPtr_Type& displayer );
172 void computeStiffness (
const vector_Type& sol,
174 const dataPtr_Type& dataMaterial,
175 const mapMarkerVolumesPtr_Type ,
176 const mapMarkerIndexesPtr_Type ,
177 const displayerPtr_Type& displayer );
199 void computeKinematicsVariables (
const VectorElemental& dk_loc );
208 void showMe ( std::string
const& fileNameVectStiff,
209 std::string
const& fileNameJacobain );
219 void computeLocalFirstPiolaKirchhoffTensor ( Epetra_SerialDenseMatrix& firstPiola,
220 const Epetra_SerialDenseMatrix& tensorF,
221 const Epetra_SerialDenseMatrix& cofactorF,
222 const std::vector<Real>& invariants,
231 void computeCauchyStressTensor (
const vectorPtr_Type disp,
233 vectorPtr_Type sigma_1,
234 vectorPtr_Type sigma_2,
235 vectorPtr_Type sigma_3);
244 matrixPtr_Type
const stiffMatrix()
const 246 return super::M_jacobian;
251 vectorPtr_Type
const stiffVector()
const 256 void apply (
const vector_Type& sol, vector_Type& res,
const mapMarkerVolumesPtr_Type mapsMarkerVolumes,
257 const mapMarkerIndexesPtr_Type mapsMarkerIndexes,
258 const displayerPtr_Type displayer);
271 void setupVectorsParameters (
void );
275 vectorPtr_Type M_stiff;
278 matrixSmall_Type M_identity;
285 template <
typename MeshType>
286 VenantKirchhoffMaterialNonLinearPenalized<MeshType>::VenantKirchhoffMaterialNonLinearPenalized() :
297 template <
typename MeshType>
298 VenantKirchhoffMaterialNonLinearPenalized<MeshType>::~VenantKirchhoffMaterialNonLinearPenalized()
305 template <
typename MeshType>
307 VenantKirchhoffMaterialNonLinearPenalized<MeshType>::setup (
const FESpacePtr_Type& dFESpace,
308 const ETFESpacePtr_Type& dETFESpace,
309 const std::shared_ptr<
const MapEpetra>& monolithicMap,
310 const UInt offset,
const dataPtr_Type& dataMaterial)
312 this->M_dataMaterial = dataMaterial;
313 this->M_dispFESpace = dFESpace;
314 this->M_dispETFESpace = dETFESpace;
315 this->M_localMap = monolithicMap;
316 this->M_offset = offset;
318 M_stiff.reset (
new vector_Type (*
this->M_localMap) );
320 M_identity (0, 0) = 1.0;
321 M_identity (0, 1) = 0.0;
322 M_identity (0, 2) = 0.0;
323 M_identity (1, 0) = 0.0;
324 M_identity (1, 1) = 1.0;
325 M_identity (1, 2) = 0.0;
326 M_identity (2, 0) = 0.0;
327 M_identity (2, 1) = 0.0;
328 M_identity (2, 2) = 1.0;
333 this->M_vectorsParameters.reset (
new vectorsParameters_Type ( 3 ) );
335 this->setupVectorsParameters();
339 template <
typename MeshType>
341 VenantKirchhoffMaterialNonLinearPenalized<MeshType>::setupVectorsParameters (
void )
350 UInt nbElements =
this->M_dispFESpace->mesh()->numVolumes();
354 (* (
this->M_vectorsParameters) ) [0].resize ( nbElements );
357 (* (
this->M_vectorsParameters) ) [1].resize ( nbElements );
360 (* (
this->M_vectorsParameters) ) [2].resize ( nbElements );
362 for (
UInt i (0); i < nbElements; i++ )
365 UInt markerID =
this->M_dispFESpace->mesh()->element ( i ).markerID();
367 Real lambda =
this->M_dataMaterial->lambda ( markerID );
368 Real mu =
this->M_dataMaterial->mu ( markerID );
369 Real bulk =
this->M_dataMaterial->bulk ( markerID );
371 ( (* (
this->M_vectorsParameters) ) [0]) [ i ] = lambda;
372 ( (* (
this->M_vectorsParameters) ) [1]) [ i ] = mu;
373 ( (* (
this->M_vectorsParameters) ) [2]) [ i ] = bulk;
380 template <
typename MeshType>
381 void VenantKirchhoffMaterialNonLinearPenalized<MeshType>::computeLinearStiff (dataPtr_Type& ,
382 const mapMarkerVolumesPtr_Type ,
383 const mapMarkerIndexesPtr_Type )
392 template <
typename MeshType>
393 void VenantKirchhoffMaterialNonLinearPenalized<MeshType>::updateJacobianMatrix (
const vector_Type& sol,
394 const dataPtr_Type& dataMaterial,
395 const mapMarkerVolumesPtr_Type mapsMarkerVolumes,
396 const mapMarkerIndexesPtr_Type mapsMarkerIndexes,
397 const displayerPtr_Type& displayer )
399 this->M_jacobian.reset (
new matrix_Type (*
this->M_localMap) );
401 displayer->leaderPrint (
" \n************************************************\n ");
402 updateNonLinearJacobianTerms (
this->M_jacobian, sol,
this->M_dataMaterial, mapsMarkerVolumes, mapsMarkerIndexes, displayer);
403 displayer->leaderPrint (
" \n************************************************\n ");
411 template <
typename MeshType>
412 void VenantKirchhoffMaterialNonLinearPenalized<MeshType>::updateNonLinearJacobianTerms ( matrixPtr_Type& jacobian,
413 const vector_Type& sol,
414 const dataPtr_Type& dataMaterial,
415 const mapMarkerVolumesPtr_Type mapsMarkerVolumes,
416 const mapMarkerIndexesPtr_Type mapsMarkerIndexes,
417 const displayerPtr_Type& displayer )
424 displayer->leaderPrint (
" Non-Linear S- updating non linear terms in the Jacobian Matrix (VK-Penalized)");
453 tensorF_Type F = ExpressionDefinitions::deformationGradient(
this->M_dispETFESpace, sol,
this->M_offset,
this->M_identity );
468 traceSquaredTensor_Type I_Csq = ExpressionDefinitions::traceSquared( C );
477 integrate ( elements (
this->M_dispETFESpace->mesh() ) ,
478 this->M_dispFESpace->qr(),
479 this->M_dispETFESpace,
480 this->M_dispETFESpace,
485 integrate ( elements (
this->M_dispETFESpace->mesh() ) ,
486 this->M_dispFESpace->qr(),
487 this->M_dispETFESpace,
488 this->M_dispETFESpace,
489 value ( - 1.0 / 2.0 ) * parameter ( (* (
this->M_vectorsParameters) ) [2] ) * ( pow (J, 2.0) - J + log (J) ) * dot ( F_T * transpose (grad (phi_j) ) * F_T, grad (phi_i) )
495 integrate ( elements (
this->M_dispETFESpace->mesh() ) ,
496 this->M_dispFESpace->qr(),
497 this->M_dispETFESpace,
498 this->M_dispETFESpace,
499 value ( - 2.0 / 3.0
) * pow ( J, - (2.0 / 3.0) ) * (
value ( 1.0 / 2.0
) * parameter ( (* (
this->M_vectorsParameters) ) [0] ) * pow(J, -2.0/3.0) * I_C -
500 (
value (3.0 / 2.0
) * parameter ( (* (
this->M_vectorsParameters) ) [0] ) + parameter ( (* (
this->M_vectorsParameters) ) [1] ) ) ) *
506 integrate ( elements (
this->M_dispETFESpace->mesh() ) ,
507 this->M_dispFESpace->qr(),
508 this->M_dispETFESpace,
509 this->M_dispETFESpace,
510 pow ( J, - (4.0 / 3.0) ) *
value ( -1.0 / 3.0
) * parameter ( (* (
this->M_vectorsParameters) ) [0] ) * I_C *
515 integrate ( elements (
this->M_dispETFESpace->mesh() ) ,
516 this->M_dispFESpace->qr(),
517 this->M_dispETFESpace,
518 this->M_dispETFESpace,
519 pow ( J, - (4.0 / 3.0) ) *
value ( 1.0 / 9.0
) * parameter ( (* (
this->M_vectorsParameters) ) [0] ) * pow ( I_C, 2.0) *
524 integrate ( elements (
this->M_dispETFESpace->mesh() ) ,
525 this->M_dispFESpace->qr(),
526 this->M_dispETFESpace,
527 this->M_dispETFESpace,
528 pow ( J, - (4.0 / 3.0) ) * parameter ( (* (
this->M_vectorsParameters) ) [0] ) *
533 integrate ( elements (
this->M_dispETFESpace->mesh() ) ,
534 this->M_dispFESpace->qr(),
535 this->M_dispETFESpace,
536 this->M_dispETFESpace,
537 pow ( J, - (4.0 / 3.0) ) *
value ( -1.0 / 3.0
) * parameter ( (* (
this->M_vectorsParameters) ) [0] ) * I_C *
542 integrate ( elements (
this->M_dispETFESpace->mesh() ) ,
543 this->M_dispFESpace->qr(),
544 this->M_dispETFESpace,
545 this->M_dispETFESpace,
546 pow ( J, - (2.0 / 3.0) ) * ( value ( 1.0 / 2.0 ) * parameter ( (* (
this->M_vectorsParameters) ) [0] ) * pow( J, -2.0/3.0 ) * I_C -
547 (value (3.0 / 2.0) * parameter ( (* (
this->M_vectorsParameters) ) [0] ) + parameter ( (* (
this->M_vectorsParameters) ) [1] ) ) ) *
548 dot ( grad (phi_j) , grad (phi_i) )
553 integrate ( elements (
this->M_dispETFESpace->mesh() ) ,
554 this->M_dispFESpace->qr(),
555 this->M_dispETFESpace,
556 this->M_dispETFESpace,
557 pow ( J, - (2.0 / 3.0) ) * (
value ( 1.0 / 2.0
) * parameter ( (* (
this->M_vectorsParameters) ) [0] ) * pow( J, -2.0/3.0 ) * I_C -
558 (
value (3.0 / 2.0
) * parameter ( (* (
this->M_vectorsParameters) ) [0] ) + parameter ( (* (
this->M_vectorsParameters) ) [1] ) ) ) *
value (-2.0 / 3.0
) *
565 integrate ( elements (
this->M_dispETFESpace->mesh() ),
566 this->M_dispFESpace->qr(),
567 this->M_dispETFESpace,
568 this->M_dispETFESpace,
569 pow ( J, - (2.0 / 3.0) ) * ( value ( 1.0 / 2.0 ) * parameter ( (* (
this->M_vectorsParameters) ) [0] ) * pow( J, -2.0/3.0 ) * I_C -
570 (value (3.0 / 2.0) * parameter ( (* (
this->M_vectorsParameters) ) [0] ) + parameter ( (* (
this->M_vectorsParameters) ) [1] ) ) ) * value (1.0 / 3.0) * I_C *
571 dot ( F_T * transpose (grad (phi_j) ) * F_T , grad (phi_i) )
575 integrate ( elements (
this->M_dispETFESpace->mesh() ),
576 this->M_dispFESpace->qr(),
577 this->M_dispETFESpace,
578 this->M_dispETFESpace,
579 value ( (-4.0 / 3.0)
) * parameter ( (* (
this->M_vectorsParameters) ) [1] ) * pow ( J, (-4.0 / 3.0) ) *
585 integrate ( elements (
this->M_dispETFESpace->mesh() ),
586 this->M_dispFESpace->qr(),
587 this->M_dispETFESpace,
588 this->M_dispETFESpace,
589 value ( 4.0 / 9.0 ) * parameter ( (* (
this->M_vectorsParameters) ) [1] ) * pow ( J, (-4.0 / 3.0) ) * I_Csq *
590 dot ( F_T , grad (phi_j) ) * dot ( F_T , grad (phi_i) )
595 integrate ( elements (
this->M_dispETFESpace->mesh() ) ,
596 this->M_dispFESpace->qr(),
597 this->M_dispETFESpace,
598 this->M_dispETFESpace,
599 parameter ( (* (
this->M_vectorsParameters) ) [1] ) * pow ( J, (-4.0 / 3.0) ) *
605 integrate ( elements (
this->M_dispETFESpace->mesh() ) ,
606 this->M_dispFESpace->qr(),
607 this->M_dispETFESpace,
608 this->M_dispETFESpace,
609 parameter ( (* (
this->M_vectorsParameters) ) [1] ) * pow ( J, (-4.0 / 3.0) ) *
610 dot ( F * transpose ( grad (phi_j) ) * F, grad (phi_i) )
615 integrate ( elements (
this->M_dispETFESpace->mesh() ) ,
616 this->M_dispFESpace->qr(),
617 this->M_dispETFESpace,
618 this->M_dispETFESpace,
619 parameter ( (* (
this->M_vectorsParameters) ) [1] ) * pow ( J, (-4.0 / 3.0) ) *
624 integrate ( elements (
this->M_dispETFESpace->mesh() ) ,
625 this->M_dispFESpace->qr(),
626 this->M_dispETFESpace,
627 this->M_dispETFESpace,
628 parameter ( (* (
this->M_vectorsParameters) ) [1] ) * pow ( J, (-4.0 / 3.0) ) * value ( 1.0 / 3.0 ) * I_Csq *
629 dot ( F_T * transpose ( grad (phi_j) ) * F_T, grad (phi_i) )
634 integrate ( elements (
this->M_dispETFESpace->mesh() ) ,
635 this->M_dispFESpace->qr(),
636 this->M_dispETFESpace,
637 this->M_dispETFESpace,
638 parameter ( (* (
this->M_vectorsParameters) ) [1] ) * pow ( J, (-4.0 / 3.0) ) *
value ( -4.0 / 3.0
) *
644 jacobian->globalAssemble();
651 template <
typename MeshType>
652 void VenantKirchhoffMaterialNonLinearPenalized<MeshType>::computeStiffness (
const vector_Type& sol,
654 const dataPtr_Type& dataMaterial,
655 const mapMarkerVolumesPtr_Type mapsMarkerVolumes,
656 const mapMarkerIndexesPtr_Type mapsMarkerIndexes,
657 const displayerPtr_Type& displayer )
661 this->M_stiff.reset (
new vector_Type (*
this->M_localMap) );
664 displayer->leaderPrint (
" \n*********************************\n ");
665 displayer->leaderPrint (
" Non-Linear S- Computing the VK-Penalized nonlinear stiffness vector ");
666 displayer->leaderPrint (
" \n*********************************\n ");
691 tensorF_Type F = ExpressionDefinitions::deformationGradient(
this->M_dispETFESpace, sol,
this->M_offset,
this->M_identity );
706 traceSquaredTensor_Type I_Csq = ExpressionDefinitions::traceSquared( C );
710 integrate ( elements (
this->M_dispETFESpace->mesh() ) ,
711 this->M_dispFESpace->qr(),
712 this->M_dispETFESpace,
713 value (1.0 / 2.0
) * parameter ( (* (
this->M_vectorsParameters) ) [2] ) * ( pow ( J , 2.0) - J + log (J) ) * dot ( F_T,
grad (phi_i) )
718 integrate ( elements (
this->M_dispETFESpace->mesh() ) ,
719 this->M_dispFESpace->qr(),
720 this->M_dispETFESpace,
721 pow ( J , (-2.0 / 3.0) ) * (
value (1.0 / 2.0
) * parameter ( (* (
this->M_vectorsParameters) ) [0] ) * pow( J, -2.0/3.0 ) * I_C -
722 value (3.0 / 2.0
) * parameter ( (* (
this->M_vectorsParameters) ) [0]) - parameter ( (* (
this->M_vectorsParameters) ) [1] ) ) *
731 integrate ( elements (
this->M_dispETFESpace->mesh() ) ,
732 this->M_dispFESpace->qr(),
733 this->M_dispETFESpace,
734 parameter ( (* (
this->M_vectorsParameters) ) [1] ) * pow ( J , (-4.0 / 3.0) ) *
735 dot ( F * C + value ( (-1.0 / 3.0) ) * I_Csq * F_T, grad (phi_i) )
740 this->M_stiff->globalAssemble();
747 template <
typename MeshType>
748 void VenantKirchhoffMaterialNonLinearPenalized<MeshType>::computeKinematicsVariables (
const VectorElemental& dk_loc )
889 template <
typename MeshType>
898 template <
typename MeshType>
899 void VenantKirchhoffMaterialNonLinearPenalized<MeshType>::apply (
const vector_Type& sol, vector_Type& res,
const mapMarkerVolumesPtr_Type mapsMarkerVolumes,
900 const mapMarkerIndexesPtr_Type mapsMarkerIndexes,
const displayerPtr_Type displayer )
902 computeStiffness (sol, 0,
this->M_dataMaterial, mapsMarkerVolumes, mapsMarkerIndexes, displayer);
907 template <
typename MeshType>
908 void VenantKirchhoffMaterialNonLinearPenalized<MeshType>::computeLocalFirstPiolaKirchhoffTensor ( Epetra_SerialDenseMatrix& firstPiola,
909 const Epetra_SerialDenseMatrix& tensorF,
910 const Epetra_SerialDenseMatrix& cofactorF,
911 const std::vector<Real>& invariants,
916 Real lambda =
this->M_dataMaterial->lambda (marker);
917 Real mu =
this->M_dataMaterial->mu (marker);
918 Real bulk =
this->M_dataMaterial->bulk (marker);
921 Epetra_SerialDenseMatrix firstTerm (tensorF);
922 Epetra_SerialDenseMatrix copyCofactorF (cofactorF);
925 scale = -invariants[0] / 3.0;
926 copyCofactorF.Scale ( scale );
927 firstTerm += copyCofactorF;
931 trCiso = std::pow (invariants[3], - (2.0 / 3.0) ) * invariants[0];
933 Real firstCoef ( 0.0 );
934 firstCoef = std::pow (invariants[3], - (2.0 / 3.0) ) * ( ( lambda / 2.0 ) * trCiso - (3.0 / 2.0) * lambda - mu);
935 firstTerm.Scale ( firstCoef );
937 Epetra_SerialDenseMatrix secondTerm (
this->M_dispFESpace->fieldDim(),
this->M_dispFESpace->fieldDim() );
938 Epetra_SerialDenseMatrix rightCauchyC (
this->M_dispFESpace->fieldDim(),
this->M_dispFESpace->fieldDim() );
939 rightCauchyC.Scale (0.0);
942 rightCauchyC.Multiply (
'T',
'N', 1.0, tensorF, tensorF, 0.0);
943 secondTerm.Multiply (
'N',
'N', 1.0, tensorF, rightCauchyC, 0.0);
945 Real trCsquared (0.0);
946 trCsquared = rightCauchyC (0, 0) * rightCauchyC (0, 0) + rightCauchyC (0, 1) * rightCauchyC (0, 1) + rightCauchyC (0, 2) * rightCauchyC (0, 2) +
947 rightCauchyC (1, 0) * rightCauchyC (1, 0) + rightCauchyC (1, 1) * rightCauchyC (1, 1) + rightCauchyC (1, 2) * rightCauchyC (1, 2) +
948 rightCauchyC (2, 0) * rightCauchyC (2, 0) + rightCauchyC (2, 1) * rightCauchyC (2, 1) + rightCauchyC (2, 2) * rightCauchyC (2, 2);
950 Real scaleFactor (0.0);
951 scaleFactor = - trCsquared / 3.0;
953 Epetra_SerialDenseMatrix secondCofactorF (cofactorF);
954 secondCofactorF.Scale ( scaleFactor );
956 secondTerm += secondCofactorF;
958 Real secondCoef ( 0.0 );
959 secondCoef = mu * std::pow (invariants[3], - (4.0 / 3.0) );
961 secondTerm.Scale ( secondCoef );
964 Epetra_SerialDenseMatrix thirdTerm (cofactorF);
966 thirdCoef = invariants[3] * (bulk / 2.0) * (invariants[3] - 1 + (1.0 / invariants[3]) * std::log (invariants[3]) );
968 thirdTerm.Scale ( thirdCoef );
970 firstPiola += firstTerm;
971 firstPiola += secondTerm;
972 firstPiola += thirdTerm;
976 template <
typename MeshType>
977 void VenantKirchhoffMaterialNonLinearPenalized<MeshType>::computeCauchyStressTensor (
const vectorPtr_Type disp,
979 vectorPtr_Type sigma_1,
980 vectorPtr_Type sigma_2,
981 vectorPtr_Type sigma_3)
987 tensorF_Type F = ExpressionDefinitions::deformationGradient(
this->M_dispETFESpace, *disp,
this->M_offset,
this->M_identity );
1002 traceSquaredTensor_Type I_Csq = ExpressionDefinitions::traceSquared( C );
1004 evaluateNode( elements (
this->M_dispETFESpace->mesh() ),
1006 this->M_dispETFESpace,
1007 meas_K * dot ( vectorFromMatrix( ( 1 / J )*
1008 ( value (1.0 / 2.0) * parameter ( (* (
this->M_vectorsParameters) ) [2] ) * ( pow ( J , 2.0) - J + log (J) ) * F_T +
1009 pow ( J , (-2.0 / 3.0) ) * ( value (1.0 / 2.0) * parameter ( (* (
this->M_vectorsParameters) ) [0] ) * pow( J, -2.0/3.0 ) * I_C -
1010 value (3.0 / 2.0) * parameter ( (* (
this->M_vectorsParameters) ) [0]) - parameter ( (* (
this->M_vectorsParameters) ) [1] ) ) * ( F - value(1.0/3.0) * I_C * F_T ) +
1011 parameter ( (* (
this->M_vectorsParameters) ) [1] ) * pow ( J , (-4.0 / 3.0) ) * ( F * C + value ( (-1.0 / 3.0) ) * I_Csq * F_T )
1013 transpose( F ), 0 ), phi_i)
1015 sigma_1->globalAssemble();
1017 evaluateNode( elements (
this->M_dispETFESpace->mesh() ),
1019 this->M_dispETFESpace,
1020 meas_K * dot ( vectorFromMatrix( ( 1 / J )*
1021 ( value (1.0 / 2.0) * parameter ( (* (
this->M_vectorsParameters) ) [2] ) * ( pow ( J , 2.0) - J + log (J) ) * F_T +
1022 pow ( J , (-2.0 / 3.0) ) * ( value (1.0 / 2.0) * parameter ( (* (
this->M_vectorsParameters) ) [0] ) * pow( J, -2.0/3.0 ) * I_C -
1023 value (3.0 / 2.0) * parameter ( (* (
this->M_vectorsParameters) ) [0]) - parameter ( (* (
this->M_vectorsParameters) ) [1] ) ) * ( F - value(1.0/3.0) * I_C * F_T ) +
1024 parameter ( (* (
this->M_vectorsParameters) ) [1] ) * pow ( J , (-4.0 / 3.0) ) * ( F * C + value ( (-1.0 / 3.0) ) * I_Csq * F_T )
1026 transpose( F ) , 1 ), phi_i)
1028 sigma_2->globalAssemble();
1030 evaluateNode( elements (
this->M_dispETFESpace->mesh() ),
1032 this->M_dispETFESpace,
1033 meas_K * dot ( vectorFromMatrix( ( 1 / J )*
1034 ( value (1.0 / 2.0) * parameter ( (* (
this->M_vectorsParameters) ) [2] ) * ( pow ( J , 2.0) - J + log (J) ) * F_T +
1035 pow ( J , (-2.0 / 3.0) ) * ( value (1.0 / 2.0) * parameter ( (* (
this->M_vectorsParameters) ) [0] ) * pow( J, -2.0/3.0 ) * I_C -
1036 value (3.0 / 2.0) * parameter ( (* (
this->M_vectorsParameters) ) [0]) - parameter ( (* (
this->M_vectorsParameters) ) [1] ) ) * ( F - value(1.0/3.0) * I_C * F_T ) +
1037 parameter ( (* (
this->M_vectorsParameters) ) [1] ) * pow ( J , (-4.0 / 3.0) ) * ( F * C + value ( (-1.0 / 3.0) ) * I_Csq * F_T )
1039 transpose( F ) , 2 ), phi_i)
1041 sigma_3->globalAssemble();
1046 template <
typename MeshType>
1047 inline StructuralIsotropicConstitutiveLaw<MeshType>* createVenantKirchhoffMaterialNonLinearPenalized()
1049 return new VenantKirchhoffMaterialNonLinearPenalized<MeshType >();
void assignFunction(bcBase_Type &base)
Assign the function to the base of the BCHandler.
rightCauchyGreenTensor_Type tensorC(const ExpressionTranspose< deformationGradient_Type > tF, const deformationGradient_Type F)
determinantTensorF_Type determinantF(const deformationGradient_Type F)
ExpressionDot< ExpressionProduct< ExpressionTranspose< ExpressionAddition< ExpressionInterpolateGradient< MeshType, MapEpetra, 3, 3 >, ExpressionMatrix< 3, 3 > > >, ExpressionAddition< ExpressionInterpolateGradient< MeshType, MapEpetra, 3, 3 >, ExpressionMatrix< 3, 3 > > >, ExpressionProduct< ExpressionTranspose< ExpressionAddition< ExpressionInterpolateGradient< MeshType, MapEpetra, 3, 3 >, ExpressionMatrix< 3, 3 > > >, ExpressionAddition< ExpressionInterpolateGradient< MeshType, MapEpetra, 3, 3 >, ExpressionMatrix< 3, 3 > > > > traceSquaredTensor_Type
static const LifeV::UInt elm_nodes_num[]
const ExpressionPhiJ phi_j
Simple function to be used in the construction of an expression.
minusTransposedTensor_Type minusT(const deformationGradient_Type F)
traceTensor_Type traceTensor(const rightCauchyGreenTensor_Type C)
double Real
Generic real data.
ExpressionScalar value(const Real &myValue)
Simple function to be used in the construction of an expression.
QuadratureRule - The basis class for storing and accessing quadrature rules.
ExpressionDphiJ grad(const ExpressionPhiJ &)
Simple function to be used in the construction of an expression.
const ExpressionPhiI phi_i
Simple function to be used in the construction of an expression.
uint32_type UInt
generic unsigned integer (used mainly for addressing)
ExpressionDphiI grad(const ExpressionPhiI &)
Simple function to be used in the construction of an expression.