38 #ifndef _ANISOTROPICMULTIMECHANISM_H_ 39 #define _ANISOTROPICMULTIMECHANISM_H_ 41 #pragma GCC diagnostic ignored "-Wunused-variable" 42 #pragma GCC diagnostic ignored "-Wunused-parameter" 45 #include <lifev/structure/solver/anisotropic/StructuralAnisotropicConstitutiveLaw.hpp> 46 #include <lifev/structure/fem/AssemblyElementalStructure.hpp> 47 #include <lifev/structure/fem/ExpressionDefinitions.hpp> 48 #include <lifev/core/fem/QuadratureRule.hpp> 49 #include <lifev/eta/expression/Evaluate.hpp> 51 #define PI 3.14159265359
79 M_selectionVector.reset(
new vector_Type( selectionVector ) );
89 const UInt offset)
const 91 Int LIDx = M_selectionVector->blockMap().LID(
static_cast<EpetraInt_Type>(i) );
92 Int LIDy = M_selectionVector->blockMap().LID(
static_cast<EpetraInt_Type>(i + nTotDof + offset) );
93 Int LIDz = M_selectionVector->blockMap().LID(
static_cast<EpetraInt_Type>(i + 2 * nTotDof + offset) );
103 ( LIDz >= 0 ) ,
"Problem in the epetra maps cut!" );
109 Int GIDx = M_selectionVector->blockMap().GID( LIDx );
110 Int GIDy = M_selectionVector->blockMap().GID( LIDy );
111 Int GIDz = M_selectionVector->blockMap().GID( LIDz );
116 if( ( *M_selectionVector )( GIDx ) > M_value )
151 const UInt offset )
const 153 Int LIDx = M_selectionVector.blockMap().LID(
static_cast<EpetraInt_Type>(i) );
154 Int LIDy = M_selectionVector.blockMap().LID(
static_cast<EpetraInt_Type>(i + nTotDof + offset) );
155 Int LIDz = M_selectionVector.blockMap().LID(
static_cast<EpetraInt_Type>(i + 2 * nTotDof + offset) );
165 ( LIDz >= 0 ) ,
"Problem in the epetra maps cut!" );
167 Int GIDx = M_selectionVector.blockMap().GID( LIDx );
168 Int GIDy = M_selectionVector.blockMap().GID( LIDy );
169 Int GIDz = M_selectionVector.blockMap().GID( LIDz );
171 if( ( M_selectionVector )( GIDx ) == 1.0 ||
172 ( M_selectionVector )( GIDy ) == 1.0 ||
173 ( M_selectionVector )( GIDz ) == 1.0 )
191 template <
typename MeshType>
198 typedef StructuralAnisotropicConstitutiveLaw<MeshType>
super;
307 const std::shared_ptr<
const MapEpetra>& monolithicMap,
401 void showMe ( std::string
const& fileNameVectStiff,
402 std::string
const& fileNameJacobain );
413 const Epetra_SerialDenseMatrix& tensorF,
414 const Epetra_SerialDenseMatrix& cofactorF,
415 const std::vector<Real>& invariants,
445 return super::M_jacobian;
458 ASSERT( i <=
this->M_vectorInterpolated.size(),
" No such fiber family in the class" );
459 return M_selectionCriterion[ i - 1 ];
465 ASSERT( i <=
this->M_vectorInterpolated.size(),
" No such fiber family in the class" );
466 return M_activationDisplacement[ i - 1 ];
471 ASSERT( i <=
this->M_vectorInterpolated.size(),
" No such fiber family in the class" );
472 return M_unitFiberActivation[ i - 1 ];
477 ASSERT( i <=
this->M_vectorInterpolated.size(),
" No such fiber family in the class" );
478 return M_jacobianActivation[ i - 1 ];
535 template <
typename MeshType>
557 template <
typename MeshType>
565 template <
typename MeshType>
569 const std::shared_ptr<
const MapEpetra>& monolithicMap,
574 this->M_dataMaterial = dataMaterial;
575 this->M_dispFESpace = dFESpace;
576 this->M_dispETFESpace = dETFESpace;
577 this->M_localMap = monolithicMap;
578 this->M_offset = offset;
581 this->M_scalarETFESpace.reset (
new scalarETFESpace_Type (dFESpace->mesh(), & (dFESpace->refFE() ),
582 & (dFESpace->fe().geoMap() ), dFESpace->mapPtr()->commPtr() ) );
587 Real refElemArea (0);
589 for (
UInt iq = 0; iq <
this->M_dispFESpace->qr().nbQuadPt(); iq++)
591 refElemArea +=
this->M_dispFESpace->qr().weight (iq);
594 Real wQuad (refElemArea /
this->M_dispFESpace->refFE().nbDof() );
597 std::vector<GeoVector> coords =
this->M_dispFESpace->refFE().refCoor();
598 std::vector<Real> weights (
this->M_dispFESpace->fe().nbFEDof(), wQuad);
599 fakeQuadratureRule
.setDimensionShape ( shapeDimension (
this->M_dispFESpace->refFE().shape() )
, this->M_dispFESpace->refFE().shape()
);
600 fakeQuadratureRule.setPoints (coords, weights);
602 M_quadrature.reset(
new QuadratureRule( fakeQuadratureRule ) );
608 M_selectionCriterion.resize(
this->M_dataMaterial->numberFibersFamilies() );
609 M_selector.resize(
this->M_dataMaterial->numberFibersFamilies() );
610 M_firstActivation.resize(
this->M_dataMaterial->numberFibersFamilies() );
611 M_activationDisplacement.resize(
this->M_dataMaterial->numberFibersFamilies() );
613 M_jacobianActivation.resize(
this->M_dataMaterial->numberFibersFamilies() );
614 M_unitFiberActivation.resize(
this->M_dataMaterial->numberFibersFamilies() );
617 for(
UInt i(0); i <
this->M_dataMaterial->numberFibersFamilies(); i++ )
619 (M_selectionCriterion[i]).reset(
new vector_Type (*
this->M_localMap) );
620 (M_firstActivation[i]).reset(
new vector_Type (*
this->M_localMap) );
621 *(M_firstActivation[i]) *= 0.0;
623 (M_activationDisplacement[i]).reset(
new vector_Type (*
this->M_localMap) );
625 (M_jacobianActivation[i]).reset(
new vector_Type ( M_scalarETFESpace->map() ) );
626 (M_unitFiberActivation[i]).reset(
new vector_Type (*
this->M_localMap) );
632 M_identity (0, 0) = 1.0;
633 M_identity (0, 1) = 0.0;
634 M_identity (0, 2) = 0.0;
635 M_identity (1, 0) = 0.0;
636 M_identity (1, 1) = 1.0;
637 M_identity (1, 2) = 0.0;
638 M_identity (2, 0) = 0.0;
639 M_identity (2, 1) = 0.0;
640 M_identity (2, 2) = 1.0;
642 this->M_epsilon =
this->M_dataMaterial->smoothness();
647 ExpressionVectorFromNonConstantScalar<ExpressionMeas, 3 > vMeas( meas_K );
648 evaluateNode( elements (
this->M_dispETFESpace->mesh() ),
650 this->M_dispETFESpace,
652 ) >> M_patchAreaVector;
655 evaluateNode( elements (
this->M_scalarETFESpace->mesh() ),
657 this->M_scalarETFESpace,
659 ) >> M_patchAreaVectorScalar;
705 template <
typename MeshType>
716 UInt nbFamilies = (*vectorOfFibers).size();
718 ASSERT( nbFamilies ==
this->M_dataMaterial->numberFibersFamilies(),
719 " The number of families set in the test is different from the one in the data" );
721 this->M_vectorOfFibers->resize( nbFamilies );
723 for(
UInt k(0); k < nbFamilies; k++ )
725 ( *(
this->M_vectorOfFibers) )[ k ] = ( *vectorOfFibers )[ k ];
729 this->M_vectorInterpolated.resize( nbFamilies );
731 for(
UInt k(0); k < nbFamilies; k++ )
733 this->M_vectorInterpolated[ k ].reset(
new vector_Type(*
this->M_localMap) );
734 this->M_dispFESpace->interpolate ( *( ( *(
this->M_vectorOfFibers) )[ k ] ) ,
735 * ( (
this->M_vectorInterpolated )[ k ] ),
742 template <
typename MeshType>
754 template <
typename MeshType>
762 this->M_jacobian.reset (
new matrix_Type (*
this->M_localMap) );
764 displayer->leaderPrint (
" \n*********************************\n ");
766 displayer->leaderPrint (
" \n*********************************\n ");
770 template <
typename MeshType>
778 using namespace ExpressionAssembly;
785 tensorF_Type F = ExpressionDefinitions::deformationGradient(
this->M_dispETFESpace, disp,
this->M_offset,
this->M_identity );
791 tensorC_Type C = ExpressionDefinitions::tensorC( transpose(F), F );
794 isochoricDet_Type Jel = ExpressionDefinitions::isochoricDeterminant( J );
797 minusT_Type F_T = ExpressionDefinitions::minusT( F );
802 displayer->leaderPrint (
" Non-Linear S - updating non linear terms in the Jacobian Matrix (Multi-mechanism model): \n");
803 displayer->leaderPrint (
" Non-Linear S - the computation of the activation configuration has been carried out in computeStiffness: \n");
805 for(
UInt i(0); i <
this->M_vectorInterpolated.size(); i++ )
807 if( M_activationDisplacement[ i ]->norm2() )
809 displayer->leaderPrint (
" ", i + 1,
"-th fiber family \n" );
815 tensorF_Type ithFzeroA = ExpressionDefinitions::deformationGradient(
this->M_dispETFESpace, *(M_activationDisplacement[ i ]),
816 this->M_offset,
this->M_identity );
819 interpolatedScalarValue_Type ithJzeroA = ExpressionDefinitions::interpolateScalarValue(
this->M_scalarETFESpace, *( M_jacobianActivation[ i ] ) );
828 invTensor_Type FzeroAminus1 = ExpressionDefinitions::inv( ithFzeroA );
834 minusT_Type FzeroAminusT = ExpressionDefinitions::minusT( ithFzeroA );
836 activeMinusTtensor_Type FAminusT = ExpressionMultimechanism::createActiveMinusTtensor( F_T, transpose( ithFzeroA ) );
838 tensorCmultiMech_Type Ca = ExpressionMultimechanism::activationRightCauchyGreen( FzeroAminusT, C, FzeroAminus1 );
841 interpolatedValue_Type transformedFiber = ExpressionDefinitions::interpolateValue(
this->M_dispETFESpace, *( M_unitFiberActivation[ i ] ) );
859 integrate( elements (
this->M_dispETFESpace->mesh() ),
860 this->M_dispFESpace->qr(),
861 this->M_dispETFESpace,
862 this->M_dispETFESpace,
863 ithJzeroA * value( 2.0 ) * value(
this->M_dataMaterial->ithStiffnessFibers( i ) ) * JactiveEl *
864 exp( value(
this->M_dataMaterial->ithNonlinearityFibers( i ) ) * ( IVithBar- value( 1.0 ) ) * ( IVithBar- value( 1.0 ) ) ) *
866 derAtan( IVithBar - value( 1.0 ),
this->M_epsilon, ( 1.0 /
PI ) ) * ( IVithBar - value(1.0) ) +
867 atan( IVithBar - value(1.0),
this->M_epsilon, ( 1 /
PI ), (1.0/2.0) ) +
868 atan( IVithBar - value(1.0),
this->M_epsilon, ( 1 /
PI ), (1.0/2.0) ) *
869 value( 2.0 ) * value(
this->M_dataMaterial->ithNonlinearityFibers( i ) ) *
870 ( IVithBar- value( 1.0 ) ) * ( IVithBar- value( 1.0 ) )
872 ( dot( value(-2.0/3.0) * IVithBar * FAminusT, dFa ) + JactiveEl * dot( transpose(dFa)*Fa + transpose(Fa) * dFa , Mith ) ) *
873 dot( Fa * Mith - value(1.0/3.0) * IVith * FAminusT, grPhiI )
876 integrate( elements (
this->M_dispETFESpace->mesh() ),
877 this->M_dispFESpace->qr(),
878 this->M_dispETFESpace,
879 this->M_dispETFESpace,
880 ithJzeroA * value( 2.0 ) * value(
this->M_dataMaterial->ithStiffnessFibers( i ) ) *
881 exp( value(
this->M_dataMaterial->ithNonlinearityFibers( i ) ) * ( IVithBar- value( 1.0 ) ) * ( IVithBar- value( 1.0 ) ) ) *
882 atan( IVithBar - value(1.0),
this->M_epsilon, ( 1 /
PI ), (1.0/2.0) ) * ( IVithBar - value(1.0) ) *
883 dot( value(-2.0/3.0) * JactiveEl * FAminusT , dFa ) *
884 dot( Fa * Mith - value(1.0/3.0) * IVith * FAminusT, grPhiI )
887 integrate( elements (
this->M_dispETFESpace->mesh() ),
888 this->M_dispFESpace->qr(),
889 this->M_dispETFESpace,
890 this->M_dispETFESpace,
891 ithJzeroA * value( 2.0 ) * value(
this->M_dataMaterial->ithStiffnessFibers( i ) ) *
892 JactiveEl * ( IVithBar - value( 1.0 ) ) * atan( IVithBar - value(1.0),
this->M_epsilon, ( 1 /
PI ), (1.0/2.0) ) *
893 exp( value(
this->M_dataMaterial->ithNonlinearityFibers( i ) ) * ( IVithBar- value( 1.0 ) ) * ( IVithBar- value( 1.0 ) ) ) *
894 dot( dFa * Mith - value(1.0/3.0) * ( dot( transpose(dFa)*Fa + transpose(Fa) * dFa , Mith ) ) * FAminusT +
895 value(1.0/3.0) * IVith * FAminusT * transpose(dFa) * FAminusT, grPhiI )
901 displayer->leaderPrint (
"The activation displacement of the ", i + 1,
"-th fiber family is null. No Jacobian! \n" );
904 jacobian->globalAssemble();
911 template <
typename MeshType>
921 using namespace ExpressionAssembly;
926 displayer->leaderPrint (
" \n*********************************\n ");
927 displayer->leaderPrint (
" Non-Linear S- Computing the Multi-mechanism nonlinear stiffness vector \n");
928 displayer->leaderPrint (
" \n*********************************\n ");
930 if( ( !
this->M_dataMaterial->fiberActivation().compare(
"implicit") ||
933 this->computeReferenceConfigurations( disp,
this->M_dataMaterial, displayer );
943 tensorF_Type F = ExpressionDefinitions::deformationGradient(
this->M_dispETFESpace, disp,
this->M_offset,
this->M_identity );
949 tensorC_Type C = ExpressionDefinitions::tensorC( transpose(F), F );
952 isochoricDet_Type Jel = ExpressionDefinitions::isochoricDeterminant( J );
955 minusT_Type F_T = ExpressionDefinitions::minusT( F );
957 displayer->leaderPrint (
" Non-Linear S- Computing contributions to the stiffness vector... \n");
959 for(
UInt i(0); i <
this->M_vectorInterpolated.size() ; i++ )
961 if( M_activationDisplacement[ i ]->norm2() )
964 displayer->leaderPrint (
" ", i + 1,
"-th fiber family \n" );
969 tensorF_Type ithFzeroA = ExpressionDefinitions::deformationGradient(
this->M_dispETFESpace, *(M_activationDisplacement[ i ]),
970 this->M_offset,
this->M_identity );
973 interpolatedScalarValue_Type ithJzeroA = ExpressionDefinitions::interpolateScalarValue(
this->M_scalarETFESpace, *( M_jacobianActivation[ i ] ) );
982 invTensor_Type FzeroAminus1 = ExpressionDefinitions::inv( ithFzeroA );
988 minusT_Type FzeroAminusT = ExpressionDefinitions::minusT( ithFzeroA );
990 activeMinusTtensor_Type FAminusT = ExpressionMultimechanism::createActiveMinusTtensor( F_T, transpose( ithFzeroA ) );
992 tensorCmultiMech_Type Ca = ExpressionMultimechanism::activationRightCauchyGreen( FzeroAminusT, C, FzeroAminus1 );
995 ExpressionDefinitions::interpolateFiber(
this->M_dispETFESpace, *(
this->M_unitFiberActivation[ i ] ) );
1031 integrate ( elements (
this->M_dispETFESpace->mesh() ),
1032 this->M_dispFESpace->qr(),
1033 this->M_dispETFESpace,
1034 atan( IVithBar - value( 1.0 ) ,
this->M_epsilon, ( 1 /
PI ), ( 1.0/2.0 ) ) * ithJzeroA *
1035 (value( 2.0 ) * value(
this->M_dataMaterial->ithStiffnessFibers( i ) ) * JactiveEl * ( IVithBar - value( 1.0 ) ) *
1036 exp( value(
this->M_dataMaterial->ithNonlinearityFibers( i ) ) *
1037 ( IVithBar - value( 1.0 ) ) * ( IVithBar - value( 1.0 ))))*
1038 dot( ( Fa * Mith - value(1.0/3.0) * IVithBar * FAminusT) * FzeroAminusT, grad(phi_i) )
1043 displayer->leaderPrint (
"The activation displacement of the ", i + 1,
"-th fiber family is null. No contribution to stiffness! \n" );
1046 this->M_stiff->globalAssemble();
1052 template <
typename MeshType>
1054 std::string
const& fileNameJacobian )
1056 this->M_stiff->spy (fileNameStiff);
1057 this->M_jacobian->spy (fileNameJacobian);
1061 template <
typename MeshType>
1072 template <
typename MeshType>
1077 displayer->leaderPrint (
" Non-Linear S- Computing reference configurations... \n");
1081 tensorF_Type F = ExpressionDefinitions::deformationGradient(
this->M_dispETFESpace, disp,
this->M_offset,
this->M_identity );
1087 tensorC_Type C = ExpressionDefinitions::tensorC( transpose(F), F );
1096 for(
UInt i(0); i <
this->M_vectorInterpolated.size() ; i++ )
1099 displayer->leaderPrint (
" ", i + 1,
"-th fiber family \n" );
1105 (M_selectionCriterion[i]).reset(
new vector_Type (*
this->M_localMap) );
1106 *(M_selectionCriterion[i]) *= 0.0;
1114 ExpressionDefinitions::interpolateFiber(
this->M_dispETFESpace, *(
this->M_vectorInterpolated[ i ] ) );
1122 stretch_Type IVith = ExpressionDefinitions::fiberStretch( C, Mith );
1125 Real referenceStretch =
this->M_dataMaterial->ithCharacteristicStretch(i) *
this->M_dataMaterial->ithCharacteristicStretch(i);
1127 ExpressionMultimechanism::incompressibleDifference_Type absStretch =
1128 ExpressionMultimechanism::incompressibleAbsoluteStretch( IVith, referenceStretch );
1131 ExpressionMultimechanism::relativeDifference_Type relStretch =
1132 ExpressionMultimechanism::relativeDifference( absStretch, referenceStretch );
1135 ExpressionMultimechanism::expressionVectorFromRelativeDifference_Type vActivation =
1136 ExpressionMultimechanism::vectorFromRelativeDifference( relStretch );
1139 evaluateNode( elements (
this->M_dispETFESpace->mesh() ),
1141 this->M_dispETFESpace,
1142 meas_K * dot( vActivation , phi_i )
1143 ) >> M_selectionCriterion[ i ];
1144 M_selectionCriterion[ i ]->globalAssemble();
1145 *( M_selectionCriterion[ i ] ) = *( M_selectionCriterion[ i ] ) / *M_patchAreaVector;
1148 M_selector[i].setSelectionVector( *(M_selectionCriterion[i]) );
1149 M_selector[i].setValue(
this->M_dataMaterial->toleranceActivation() );
1152 AssemblyElementalStructure::saveVectorAccordingToFunctor(
this->M_dispFESpace, M_selector[ i ],
1153 disp,
this->M_firstActivation[i],
1154 M_activationDisplacement[i],
this->M_offset);
1157 *regularizationVector *= 0.0;
1159 evaluateNode( elements (
this->M_dispETFESpace->mesh() ),
1161 this->M_dispETFESpace,
1162 meas_K * dot( value(
this->M_dispETFESpace, *(M_activationDisplacement[i]) ) , phi_i )
1163 ) >> regularizationVector;
1164 regularizationVector->globalAssemble();
1167 *M_activationDisplacement[i] = *regularizationVector;
1169 booleanVector.reset(
new vector_Type( *
this->M_localMap ) );
1170 *booleanVector *= 0.0;
1173 vector_Type vectorReference( *(M_firstActivation[i]) );
1175 std::cout <<
"Activation: " << M_firstActivation[i]->norm2() << std::endl;
1176 std::cout <<
"Activation: " << M_activationDisplacement[i]->norm2() << std::endl;
1179 AssemblyElementalStructure::saveBooleanVectorAccordingToFunctor(
this->M_dispFESpace, boolSelector, (M_activationDisplacement[i]),
1180 booleanVector,
this->M_offset);
1182 *( M_jacobianActivation[ i ] ) *= 0.0;
1183 *( M_unitFiberActivation[ i ]) *= 0.0;
1185 if( M_activationDisplacement[i]->norm2() )
1193 tensorF_Type Fa = ExpressionDefinitions::deformationGradient(
this->M_dispETFESpace, *(M_activationDisplacement[i]),
1194 this->M_offset,
this->M_identity );
1198 evaluateNode( elements ( M_scalarETFESpace->mesh() ),
1202 ) >> M_jacobianActivation[ i ];
1203 M_jacobianActivation[ i ]->globalAssemble();
1204 *( M_jacobianActivation[ i ] ) = *( M_jacobianActivation[ i ] ) / *M_patchAreaVectorScalar;
1207 interpolatedValue_Type fiberIth = ExpressionDefinitions::interpolateFiber(
this->M_dispETFESpace, *(
this->M_vectorInterpolated[ i ] ) );
1210 activateFiber_Type activeIthFiber = ExpressionMultimechanism::activateFiberDirection( Fa, fiberIth );
1213 evaluateNode( elements (
this->M_dispETFESpace->mesh() ),
1215 this->M_dispETFESpace,
1216 meas_K * dot( normalizedFiber , phi_i )
1217 ) >> M_unitFiberActivation[ i ];
1218 M_unitFiberActivation[ i ]->globalAssemble();
1219 *( M_unitFiberActivation[ i ] ) = *( M_unitFiberActivation[ i ] ) / *M_patchAreaVector;
1222 *( M_unitFiberActivation[ i ] ) = *( M_unitFiberActivation[ i ] ) * ( *booleanVector );
1248 template <
typename MeshType>
1250 const Epetra_SerialDenseMatrix& tensorF,
1251 const Epetra_SerialDenseMatrix& cofactorF,
1252 const std::vector<Real>& invariants,
1261 template <
typename MeshType>
1269 ASSERT( 2 < 0 ,
"For the multimechanism law the computation of the Cauchy stress has to be defined." );
1275 template <
typename MeshType>
ExpressionMultimechanism::activeIsochoricDeterminant_Type activeIsochoricDeterminant_Type
std::shared_ptr< vectorIndexes_Type > vectorIndexesPtr_Type
VectorEpetra - The Epetra Vector format Wrapper.
vectorPtr_Type M_stiff
Vector: stiffness non-linear.
super::outerProduct_Type outerProduct_Type
matrixSmall_Type M_identity
virtual ~AnisotropicMultimechanismMaterialNonLinear()
mapMarkerIndexes_Type::const_iterator mapIteratorIndex_Type
ExpressionDefinitions::interpolatedScalarValue_Type interpolatedScalarValue_Type
super::ETFESpacePtr_Type ETFESpacePtr_Type
void setupFiberDirections(vectorFiberFunctionPtr_Type vectorOfFibers)
vectorPtr_Type const activatedUnitFiber(const UInt i) const
Get the activation displacement.
void computeLinearStiff(dataPtr_Type &, const mapMarkerVolumesPtr_Type, const mapMarkerIndexesPtr_Type)
Compute the Stiffness matrix in StructuralSolver::buildSystem()
void computeReferenceConfigurations(const vector_Type &disp, const dataPtr_Type &dataMaterial, const displayerPtr_Type &displayer)
vector_Type M_selectionVector
void updateNonLinearJacobianTerms(matrixPtr_Type &jacobian, const vector_Type &disp, const dataPtr_Type &dataMaterial, const mapMarkerVolumesPtr_Type, const mapMarkerIndexesPtr_Type, const displayerPtr_Type &displayer)
Updates the nonlinear terms in the Jacobian matrix in StructualSolver::updateJacobian.
bool operator()(const UInt i, const UInt nTotDof, const UInt offset) const
ExpressionMultimechanism::activeNormalizedOuterProduct_Type activeNormalizedOuterProduct_Type
StructuralAnisotropicConstitutiveLaw< MeshType > super
void setup(const FESpacePtr_Type &dFESpace, const ETFESpacePtr_Type &dETFESpace, const std::shared_ptr< const MapEpetra > &monolithicMap, const UInt offset, const dataPtr_Type &dataMaterial)
Setup the created object of the class StructuralIsotropicConstitutiveLaw.
selectionFunctors_Type M_selector
Vector: stiffness non-linear.
void setDimensionShape(const UInt &newDim, const ReferenceShapes &newShape)
Change the dimension and the shape.
super::vectorFiberFunction_Type vectorFiberFunction_Type
ExpressionDefinitions::isochoricChangeOfVariable_Type isochoricDet_Type
int32_type Int
Generic integer data.
ETFESpace< RegionMesh< LinearTetra >, MapEpetra, 3, 1 > scalarETFESpace_Type
AnisotropicMultimechanismMaterialNonLinear()
void setValue(const Real value)
std::shared_ptr< scalarETFESpace_Type > scalarETFESpacePtr_Type
std::vector< vectorPtr_Type > M_firstActivation
Vector: stiffness non-linear.
std::vector< vectorPtr_Type > M_unitFiberActivation
static const LifeV::UInt elm_nodes_num[]
matrixPtr_Type const stiffMatrix() const
Get the Stiffness matrix.
std::vector< UInt > vectorIndexes_Type
void evaluateActivationFibers(const vector_Type &displacement, vector_Type &fourthInvariant)
std::shared_ptr< vector_Type > vectorPtr_Type
super::minusT_Type minusT_Type
super::stretch_Type stretch_Type
super::FESpace_Type FESpace_Type
void computeKinematicsVariables(const VectorElemental &dk_loc)
Computes the new Stiffness vector for Neo-Hookean and Holzapfel materials in StructuralSolver given a...
StructuralAnisotropicConstitutiveLaw< MeshType > * createAnisotropicMultimechanismMaterialNonLinear()
super::vectorsParameters_Type vectorsParameters_Type
std::shared_ptr< vector_Type > vectorPtr_Type
super::displayerPtr_Type displayerPtr_Type
super::interpolatedValue_Type interpolatedValue_Type
vectorPtr_Type M_patchAreaVector
ExpressionMultimechanism::activePowerExpression_Type activePowerExpression_Type
vectorPtr_Type const selectionCriterion(const UInt i) const
Specific for multimechanism.
mapMarkerVolumes_Type::const_iterator mapIterator_Type
MatrixSmall< 3, 3 > matrixSmall_Type
super::vectorsParametersPtr_Type vectorsParametersPtr_Type
super::matrixPtr_Type matrixPtr_Type
ExpressionMultimechanism::activeIsochoricStretch_Type activeIsochoricStretch_Type
super::mapMarkerIndexes_Type mapMarkerIndexes_Type
std::vector< typename MeshType::element_Type * > vectorVolumes_Type
vectorPtr_Type M_patchAreaVectorScalar
vectorPtr_Type const activationDisplacement(const UInt i) const
Get the activation displacement.
super::vectorFiberFunctionPtr_Type vectorFiberFunctionPtr_Type
ExpressionMultimechanism::normalizedVector_Type normalizedVector_Type
scalarETFESpacePtr_Type M_scalarETFESpace
super::mapMarkerIndexesPtr_Type mapMarkerIndexesPtr_Type
ExpressionMultimechanism::activeInterpolatedFiberStretch_Type activeInterpolatedStretch_Type
ExpressionMultimechanism::activatedDeterminantF_Type activatedDeterminantF_Type
void updateJacobianMatrix(const vector_Type &disp, const dataPtr_Type &dataMaterial, const mapMarkerVolumesPtr_Type mapsMarkerVolumes, const mapMarkerIndexesPtr_Type mapsMarkerIndexes, const displayerPtr_Type &displayer)
Updates the Jacobian matrix in StructualSolver::updateJacobian.
ExpressionMultimechanism::normActivatedFiber_Type normActivateFiber_Type
super::tensorC_Type tensorC_Type
super::FESpacePtr_Type FESpacePtr_Type
double Real
Generic real data.
std::vector< vectorPtr_Type > M_selectionCriterion
Vector: stiffness non-linear.
ExpressionMultimechanism::activatedFiber_Type activateFiber_Type
void computeStiffness(const vector_Type &disp, const UInt iter, Real factor, const dataPtr_Type &dataMaterial, const mapMarkerVolumesPtr_Type, const mapMarkerIndexesPtr_Type, const displayerPtr_Type &displayer)
Interface method to compute the new Stiffness matrix in StructuralSolver::evalResidual and in Structu...
super::dataPtr_Type dataPtr_Type
super::vectorPtr_Type vectorPtr_Type
super::mapMarkerVolumesPtr_Type mapMarkerVolumesPtr_Type
std::vector< vectorPtr_Type > M_activationDisplacement
Vector: stiffness non-linear.
super::fiberFunctionPtr_Type fiberFunctionPtr_Type
vectorPtr_Type const stiffVector() const
Get the stiffness vector.
super::determinantF_Type determinantF_Type
super::vector_Type vector_Type
std::shared_ptr< vectorVolumes_Type > vectorVolumesPtr_Type
ExpressionMultimechanism::activeTestGradient_Type activeTestGradient_Type
vectorPtr_Type M_selectionVector
std::vector< SelectionFunctor > selectionFunctors_Type
std::vector< vectorPtr_Type > M_jacobianActivation
Kinematics quantities related to the activation.
super::isochoricStretch_Type isochoricStretch_Type
super::powerExpression_Type powerExpression_Type
ExpressionMultimechanism::activeStretch_Type activeStretch_Type
super::traceTensor_Type traceTensor_Type
void setSelectionVector(const vector_Type &selectionVector)
super::data_Type data_Type
bool operator()(const UInt i, const UInt nTotDof, const UInt offset) const
ExpressionMultimechanism::activeMinusTtensor_Type activeMinusTtensor_Type
QuadratureRule - The basis class for storing and accessing quadrature rules.
ExpressionMultimechanism::rightCauchyGreenMultiMechanism_Type tensorCmultiMech_Type
ExpressionMultimechanism::deformationActivatedTensor_Type deformationActivatedTensor_Type
void computeLocalFirstPiolaKirchhoffTensor(Epetra_SerialDenseMatrix &firstPiola, const Epetra_SerialDenseMatrix &tensorF, const Epetra_SerialDenseMatrix &cofactorF, const std::vector< Real > &invariants, const UInt marker)
Compute the First Piola Kirchhoff Tensor.
SelectionFunctor(const Real value)
ExpressionDefinitions::inverseTensor_Type invTensor_Type
super::matrix_Type matrix_Type
std::shared_ptr< QuadratureRule > quadratureRulePtr_Type
super::tensorF_Type tensorF_Type
ExpressionMultimechanism::activeLinearization_Type activeLinearization_Type
super::fiberFunction_Type fiberFunction_Type
uint32_type UInt
generic unsigned integer (used mainly for addressing)
void showMe(std::string const &fileNameVectStiff, std::string const &fileNameJacobain)
Computes the deformation Gradient F, the cofactor of F Cof(F), the determinant of F J = det(F)...
booleanSelector(const vector_Type &selectionVector)
void computeCauchyStressTensor(const vectorPtr_Type disp, const QuadratureRule &evalQuad, vectorPtr_Type sigma_1, vectorPtr_Type sigma_2, vectorPtr_Type sigma_3)
Compute the First Piola Kirchhoff Tensor.
void apply(const vector_Type &sol, vector_Type &res, const mapMarkerVolumesPtr_Type mapsMarkerVolumes, const mapMarkerIndexesPtr_Type mapsMarkerIndexes, const displayerPtr_Type displayer)
vectorPtr_Type const activatedDeterminant(const UInt i) const
Get the activation displacement.
quadratureRulePtr_Type M_quadrature
construct the vectors for the parameters
super::mapMarkerVolumes_Type mapMarkerVolumes_Type