39 #ifndef _ELEMOPERSTRUCTURE_H_INCLUDED 40 #define _ELEMOPERSTRUCTURE_H_INCLUDED 46 #include <Epetra_LAPACK.h> 47 #include <Epetra_BLAS.h> 48 #include <Epetra_SerialDenseMatrix.h> 49 #include <Epetra_SerialDenseVector.h> 51 #include <lifev/core/array/MatrixElemental.hpp> 52 #include <lifev/core/array/VectorElemental.hpp> 54 #include <lifev/core/LifeV.hpp> 56 #include <lifev/core/fem/FESpace.hpp> 57 #include <lifev/core/fem/CurrentFEManifold.hpp> 58 #include <lifev/core/fem/CurrentFE.hpp> 59 #include <lifev/core/fem/DOF.hpp> 61 #include <lifev/core/array/VectorEpetra.hpp> 67 typedef boost::numeric::ublas::matrix<Real> Matrix;
68 typedef boost::numeric::ublas::vector<Real> Vector;
69 typedef boost::numeric::ublas::zero_matrix<Real> ZeroMatrix;
79 namespace AssemblyElementalStructure
89 template<
typename FunctorType,
typename MeshType,
typename MapType>
90 void saveVectorAccordingToFunctor (
const std::shared_ptr<FESpace<MeshType, MapType> > dispFESpace,
91 const FunctorType functor,
93 const std::shared_ptr<VectorEpetra> statusVector,
94 const std::shared_ptr<VectorEpetra> saveVector,
97 UInt dim = dispFESpace->dim();
98 UInt nTotDof = dispFESpace->dof().numTotalDof();
101 for(
UInt i(0); i < nTotDof; ++i )
103 if( originVector.blockMap().LID(
static_cast<EpetraInt_Type>(i) ) != -1 )
106 bool variable = functor( i, nTotDof, offset );
111 for ( UInt iComp = 0; iComp < dispFESpace->fieldDim(); ++iComp )
113 Int LIDid = originVector.blockMap().LID (
static_cast<EpetraInt_Type>(i + iComp * dim + offset));
114 Int GIDid = originVector.blockMap().GID (LIDid);
116 if( (*statusVector)( GIDid ) != 1.0 )
119 (*saveVector)( GIDid ) = originVector( GIDid );
122 (*statusVector) ( GIDid ) = 1.0;
130 template<
typename FunctorType,
typename MeshType,
typename MapType>
131 void saveBooleanVectorAccordingToFunctor (
const std::shared_ptr<FESpace<MeshType, MapType> > dispFESpace,
132 const FunctorType& functor,
133 const std::shared_ptr<VectorEpetra> originVector,
134 std::shared_ptr<VectorEpetra> saveVector,
137 UInt dim = dispFESpace->dim();
138 UInt nTotDof = dispFESpace->dof().numTotalDof();
141 for(
UInt i(0); i < nTotDof; ++i )
143 if( originVector->blockMap().LID(
static_cast<EpetraInt_Type>(i) ) != -1 )
146 bool variable = functor( i, nTotDof, offset );
151 for ( UInt iComp = 0; iComp < dispFESpace->fieldDim(); ++iComp )
153 Int LIDid = originVector->blockMap().LID (
static_cast<EpetraInt_Type>(i + iComp * dim + offset));
154 Int GIDid = originVector->blockMap().GID (LIDid);
156 (*saveVector)( GIDid ) = 1.0;
170 void computeGradientLocalDisplacement (boost::multi_array<Real, 3>& gradientLocalDisplacement,
const VectorElemental& uk_loc,
const CurrentFE& fe );
179 void computeLocalDeformationGradient (
const VectorElemental& uk_loc, std::vector<Epetra_SerialDenseMatrix>& tensorF,
const CurrentFE& fe );
188 void computeLocalDeformationGradientWithoutIdentity (
const VectorElemental& uk_loc, std::vector<Epetra_SerialDenseMatrix>& tensorF,
const CurrentFE& fe );
209 void stiff_derdiv (
Real coef,
const boost::multi_array<Real, 3>& gradientLocalDisplacement,
MatrixElemental& elmat,
const CurrentFE& fe );
221 void stiff_dergradbis (
Real coef,
const boost::multi_array<Real, 3>& gradientLocalDisplacement,
MatrixElemental& elmat,
const CurrentFE& fe );
257 void stiff_dergrad_gradbis (
Real coef,
const boost::multi_array<Real, 3>& gradientLocalDisplacement,
MatrixElemental& elmat,
const CurrentFE& fe );
269 void stiff_dergrad_gradbis_Tr (
Real coef,
const boost::multi_array<Real, 3>& gradientLocalDisplacement,
MatrixElemental& elmat,
const CurrentFE& fe );
297 void stiff_dergrad (
Real coef,
const boost::multi_array<Real, 3>& gradientLocalDisplacement,
MatrixElemental& elmat,
const CurrentFE& fe );
309 void stiff_divgrad_2 (
Real coef,
const boost::multi_array<Real, 3>& gradientLocalDisplacement,
MatrixElemental& elmat,
const CurrentFE& fe );
321 void stiff_gradgrad_2 (
Real coef,
const boost::multi_array<Real, 3>& gradientLocalDisplacement,
MatrixElemental& elmat,
const CurrentFE& fe );
333 void stiff_dergrad_gradbis_2 (
Real coef,
const boost::multi_array<Real, 3>& gradientLocalDisplacement,
MatrixElemental& elmat,
const CurrentFE& fe );
345 void stiff_dergrad_gradbis_Tr_2 (
Real coef,
const boost::multi_array<Real, 3>& gradientLocalDisplacement,
MatrixElemental& elmat,
const CurrentFE& fe );
357 void stiff_gradgradTr_gradbis_2 (
Real coef,
const boost::multi_array<Real, 3>& gradientLocalDisplacement,
MatrixElemental& elmat,
const CurrentFE& fe );
387 void source_Pvol (
Real coef,
const boost::multi_array<Real, 3>& CofFk,
const std::vector<Real>& Jk,
VectorElemental& elvec,
const CurrentFE& fe);
401 void stiff_Jac_Pvol_1term (
Real coef,
const boost::multi_array<Real, 3 >& CofFk,
const std::vector<Real>& Jk,
MatrixElemental& elmat,
const CurrentFE& fe );
414 void stiff_Jac_Pvol_2term (
Real coef,
const boost::multi_array<Real, 3 >& CofFk,
const std::vector<Real>& Jk,
MatrixElemental& elmat,
const CurrentFE& fe );
431 void source_P1iso_NH (
Real coef,
const boost::multi_array<Real, 3 >& CofFk,
const boost::multi_array<Real, 3 >& Fk,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_isok,
VectorElemental& elvec,
const CurrentFE& fe);
442 void computeInvariantsRightCauchyGreenTensor (std::vector<LifeV::Real>& invariants,
443 const Epetra_SerialDenseMatrix& tensorF,
444 Epetra_SerialDenseMatrix& cofactorF);
446 void computeInvariantsRightCauchyGreenTensor (std::vector<LifeV::Real>& invariants,
447 const Epetra_SerialDenseMatrix& tensorF);
458 void computeCauchyStressTensor (Epetra_SerialDenseMatrix& cauchy,
459 Epetra_SerialDenseMatrix& firstPiola,
461 Epetra_SerialDenseMatrix& tensorF);
468 void computeEigenvalues (
const Epetra_SerialDenseMatrix& cauchy,
469 std::vector<LifeV::Real>& eigenvaluesR,
470 std::vector<LifeV::Real>& eigenvaluesI);
485 void stiff_Jac_P1iso_NH_1term (
Real coef,
const boost::multi_array<Real, 3 >& CofFk,
const boost::multi_array<Real, 3 >& Fk,
const std::vector<Real>& Jk,
MatrixElemental& elmat,
const CurrentFE& fe );
499 void stiff_Jac_P1iso_NH_2term (
Real coef,
const boost::multi_array<Real, 3 >& CofFk,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_isok,
MatrixElemental& elmat,
const CurrentFE& fe );
525 void stiff_Jac_P1iso_NH_4term (
Real coef,
const boost::multi_array<Real, 3 >& CofFk,
const boost::multi_array<Real, 3 >& Fk,
const std::vector<Real>& Jk,
MatrixElemental& elmat,
const CurrentFE& fe );
539 void stiff_Jac_P1iso_NH_5term (
Real coef,
const boost::multi_array<Real, 3 >& CofFk,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_isok,
MatrixElemental& elmat,
const CurrentFE& fe );
557 void source_P1iso_Exp (
Real coef,
Real coefExp,
const boost::multi_array<Real, 3 >& CofFk,
const boost::multi_array<Real, 3 >& Fk,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_isok,
VectorElemental& elvec,
const CurrentFE& fe );
574 void stiff_Jac_P1iso_Exp_1term (
Real coef,
Real coefExp,
const boost::multi_array<Real, 3 >& CofFk,
const boost::multi_array<Real, 3 >& Fk,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_isok,
MatrixElemental& elmat,
const CurrentFE& fe );
589 void stiff_Jac_P1iso_Exp_2term (
Real coef,
Real coefExp,
const boost::multi_array<Real, 3 >& Fk,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_isok,
MatrixElemental& elmat,
const CurrentFE& fe );
604 void stiff_Jac_P1iso_Exp_3term (
Real coef,
Real coefExp,
const boost::multi_array<Real, 3 >& CofFk,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_isok,
MatrixElemental& elmat,
const CurrentFE& fe );
620 void stiff_Jac_P1iso_Exp_4term (
Real coef,
Real coefExp,
const boost::multi_array<Real, 3 >& CofFk,
const boost::multi_array<Real, 3 >& Fk,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_isok,
MatrixElemental& elmat,
const CurrentFE& fe );
633 void stiff_Jac_P1iso_Exp_5term (
Real coef,
Real coefExp,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_isok,
MatrixElemental& elmat,
const CurrentFE& fe );
647 void stiff_Jac_P1iso_Exp_6term (
Real coef,
Real coefExp,
const boost::multi_array<Real, 3 >& CofFk,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_isok,
MatrixElemental& elmat,
const CurrentFE& fe );
665 void source_P1iso_VKPenalized (
Real lambda,
Real mu,
const boost::multi_array<Real, 3 >& FkMinusTransposed,
const boost::multi_array<Real, 3 >& Fk,
const std::vector<Real>& Ic_isok,
const std::vector<Real>& Ic_k,
const std::vector<Real>& Jack_k,
VectorElemental& elvec,
const CurrentFE& fe );
679 void source_P2iso_VKPenalized (
Real mu,
const boost::multi_array<Real, 3 >& FkMinusTransposed,
const boost::multi_array<Real, 3 >& FkCk,
const std::vector<Real>& Ic_Squared,
const std::vector<Real>& Jk,
VectorElemental& elvec,
const CurrentFE& fe );
695 void stiff_Jac_P1iso_VKPenalized_0term (
Real lambda,
Real mu,
const boost::multi_array<Real, 3 >& FkMinusTransposed,
const boost::multi_array<Real, 3 >& Fk,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_k,
const std::vector<Real>& IcIso_k,
MatrixElemental& elmat,
const CurrentFE& fe );
709 void stiff_Jac_P1iso_VKPenalized_1term (
Real coeff,
const boost::multi_array<Real, 3 >& FkMinusTransposed,
const boost::multi_array<Real, 3 >& Fk,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_k,
MatrixElemental& elmat,
const CurrentFE& fe );
722 void stiff_Jac_P1iso_VKPenalized_2term (
Real coef,
const boost::multi_array<Real, 3 >& FkMinusTransposed,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_k,
MatrixElemental& elmat,
const CurrentFE& fe );
735 void stiff_Jac_P1iso_VKPenalized_3term (
Real coef,
const boost::multi_array<Real, 3 >& Fk,
const std::vector<Real>& Jk,
MatrixElemental& elmat,
const CurrentFE& fe );
749 void stiff_Jac_P1iso_VKPenalized_4term (
Real coef,
const boost::multi_array<Real, 3 >& FkMinusTransposed,
const boost::multi_array<Real, 3 >& Fk,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_k,
MatrixElemental& elmat,
const CurrentFE& fe );
761 void stiff_Jac_P1iso_VKPenalized_5term (
Real coef,
Real secondCoef,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_isok,
MatrixElemental& elmat,
const CurrentFE& fe );
774 void stiff_Jac_P1iso_VKPenalized_6term (
Real coef,
Real secondCoef,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_isok,
const boost::multi_array<Real, 3 >& Fk,
const boost::multi_array<Real, 3 >& FkMinusTransposed,
MatrixElemental& elmat,
const CurrentFE& fe );
789 void stiff_Jac_P1iso_VKPenalized_7term (
Real coef,
Real secondCoef,
const boost::multi_array<Real, 3 >& FkMinusTransposed,
const std::vector<Real>& Ic_isok,
const std::vector<Real>& Ic_k,
const std::vector<Real>& Jk,
MatrixElemental& elmat,
const CurrentFE& fe );
803 void stiff_Jac_P1iso_VKPenalized_8term (
Real coef,
const std::vector<Real>& Jack_k,
const boost::multi_array<Real, 3 >& FkMinusTransposed,
const boost::multi_array<Real, 3 >& FkCk,
MatrixElemental& elmat,
const CurrentFE& fe );
818 void stiff_Jac_P1iso_VKPenalized_9term (
Real coef,
const std::vector<Real>& Jack_k,
const std::vector<Real>& Ic_kSquared,
const boost::multi_array<Real, 3 >& FkMinusTransposed,
MatrixElemental& elmat,
const CurrentFE& fe );
830 void stiff_Jac_P1iso_VKPenalized_10term (
Real coef,
const std::vector<Real>& Jack_k,
const boost::multi_array<Real, 3 >& Ck,
MatrixElemental& elmat,
const CurrentFE& fe );
842 void stiff_Jac_P1iso_VKPenalized_11term (
Real coef,
const std::vector<Real>& Jk,
const boost::multi_array<Real, 3 >& Fk,
MatrixElemental& elmat,
const CurrentFE& fe );
854 void stiff_Jac_P1iso_VKPenalized_12term (
Real coef,
const std::vector<Real>& Jk,
const boost::multi_array<Real, 3 >& Fk,
MatrixElemental& elmat,
const CurrentFE& fe );
867 void stiff_Jac_P1iso_VKPenalized_13term (
Real coef,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_kSquared,
const boost::multi_array<Real, 3 >& FkMinusTransposed,
MatrixElemental& elmat,
const CurrentFE& fe );
881 void stiff_Jac_P1iso_VKPenalized_14term (
Real coef,
const std::vector<Real>& Jk,
const boost::multi_array<Real, 3 >& FkCk,
const boost::multi_array<Real, 3 >& FkMinusTransposed,
MatrixElemental& elmat,
const CurrentFE& fe );
885 void source_P1iso_SecondOrderExponential (
Real coef,
Real coefExp,
const boost::multi_array<Real, 3 >& CofFk,
const boost::multi_array<Real, 3 >& Fk,
const std::vector<Real>& Jk,
const std::vector<Real>& trCisok,
VectorElemental& elvec,
const CurrentFE& fe );
901 void stiff_Jac_P1iso_SecondOrderExp_1term (
Real coef,
Real coefExp,
const boost::multi_array<Real, 3 >& CofFk,
const boost::multi_array<Real, 3 >& Fk,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_isok,
MatrixElemental& elmat,
const CurrentFE& fe );
916 void stiff_Jac_P1iso_SecondOrderExp_2term (
Real coef,
Real coefExp,
const boost::multi_array<Real, 3 >& Fk,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_isok,
MatrixElemental& elmat,
const CurrentFE& fe );
930 void stiff_Jac_P1iso_SecondOrderExp_3term (
Real coef,
Real coefExp,
const boost::multi_array<Real, 3 >& CofFk,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_isok,
MatrixElemental& elmat,
const CurrentFE& fe );
946 void stiff_Jac_P1iso_SecondOrderExp_4term (
Real coef,
Real coefExp,
const boost::multi_array<Real, 3 >& CofFk,
const boost::multi_array<Real, 3 >& Fk,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_isok,
const std::vector<Real>& Ic_k,
MatrixElemental& elmat,
const CurrentFE& fe );
959 void stiff_Jac_P1iso_SecondOrderExp_5term (
Real coef,
Real coefExp,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_isok,
MatrixElemental& elmat,
const CurrentFE& fe );
973 void stiff_Jac_P1iso_SecondOrderExp_6term (
Real coef,
Real coefExp,
const boost::multi_array<Real, 3 >& CofFk,
const std::vector<Real>& Jk,
const std::vector<Real>& Ic_isok,
MatrixElemental& elmat,
const CurrentFE& fe );
VectorEpetra - The Epetra Vector format Wrapper.
void updateInverseJacobian(const UInt &iQuadPt)
double Real
Generic real data.
CurrentFE - A primordial class for the assembly of the local matrices/vectors retaining the values on...
uint32_type UInt
generic unsigned integer (used mainly for addressing)