15 #if !defined(KRATOS_STOKES_ELEMENT_TWOFLUID_3D_INCLUDED )
16 #define KRATOS_STOKES_ELEMENT_TWOFLUID_3D_INCLUDED
23 #include "boost/smart_ptr.hpp"
31 #include "utilities/geometry_utilities.h"
88 :
Stokes3D(NewId, pGeometry, pProperties)
107 return Kratos::make_intrusive< Stokes3DTwoFluid >(NewId,
GetGeometry().
Create(ThisNodes), pProperties);
112 GeometryType::Pointer pGeom,
113 PropertiesType::Pointer pProperties)
const override
115 return Kratos::make_intrusive< Stokes3DTwoFluid >(NewId, pGeom, pProperties);
122 bool compute_lhs_matrix =
true;
123 CalculateAll(rLeftHandSideMatrix, rRightHandSideVector, rCurrentProcessInfo, compute_lhs_matrix);
124 KRATOS_CATCH(
"Error in StokesTwoFluid Element Symbolic CalculateLocalSystem")
132 bool compute_lhs_matrix =
false;
133 CalculateAll(
temp, rRightHandSideVector, rCurrentProcessInfo, compute_lhs_matrix);
135 KRATOS_CATCH(
"Error in StokesTwoFluid Element Symbolic CalculateRightHandSide")
143 bool ComputeLHSMatrix)
147 const unsigned int NumNodes = 4;
148 const unsigned int Dim = 3;
149 const int ndofs = Dim + 1;
150 const unsigned int MatrixSize = NumNodes*ndofs;
152 if (rLeftHandSideMatrix.size1() != MatrixSize)
153 rLeftHandSideMatrix.
resize(MatrixSize, MatrixSize,
false);
155 if (rRightHandSideVector.size() != MatrixSize)
156 rRightHandSideVector.
resize(MatrixSize,
false);
174 const Vector& BDFVector = rCurrentProcessInfo[BDF_COEFFICIENTS];
175 data.bdf0 = BDFVector[0];
176 data.bdf1 = BDFVector[1];
177 data.bdf2 = BDFVector[2];
178 data.dyn_tau_coeff = rCurrentProcessInfo[DYNAMIC_TAU] *
data.bdf0;
181 for (
unsigned int i = 0;
i < NumNodes;
i++)
188 for(
unsigned int k=0;
k<Dim;
k++)
198 distances[
i] =
GetGeometry()[
i].FastGetSolutionStepValue(DISTANCE);
205 unsigned int npos=0, nneg=0;
206 for (
unsigned int i = 0;
i < NumNodes;
i++)
218 ComputeElementAsAIR<MatrixSize,NumNodes>(lhs_local, rhs_local, rLeftHandSideMatrix, rRightHandSideVector, Volume,
data, Ncontainer, rCurrentProcessInfo, ComputeLHSMatrix);
220 else if (nneg == NumNodes)
222 ComputeElementAsFLUID<MatrixSize,NumNodes>(lhs_local, rhs_local, rLeftHandSideMatrix, rRightHandSideVector, Volume,
data, Ncontainer, rCurrentProcessInfo, ComputeLHSMatrix);
226 ComputeElementAsMIXED<MatrixSize,NumNodes>(lhs_local, rhs_local, rLeftHandSideMatrix, rRightHandSideVector, Volume,
data, rCurrentProcessInfo, distances, ComputeLHSMatrix);
229 KRATOS_CATCH(
"Error in StokesTwoFluid Element Symbolic")
247 if(ErrorCode != 0)
return ErrorCode;
261 if(this->
GetGeometry()[
i].SolutionStepsDataHas(VELOCITY) ==
false)
263 if(this->
GetGeometry()[
i].SolutionStepsDataHas(DISTANCE) ==
false)
265 if(this->
GetGeometry()[
i].SolutionStepsDataHas(DENSITY) ==
false)
267 if(this->
GetGeometry()[
i].SolutionStepsDataHas(PRESSURE) ==
false)
269 if(this->
GetGeometry()[
i].HasDofFor(VELOCITY_X) ==
false ||
270 this->
GetGeometry()[
i].HasDofFor(VELOCITY_Y) ==
false ||
288 if(rVariable == HEAT_FLUX)
290 double distance_center = 0.0;
292 distance_center +=
GetGeometry()[
i].FastGetSolutionStepValue(DISTANCE);
295 if(distance_center > 0)
301 const unsigned int NumNodes = 4;
310 ConstitutiveLawOptions.
Set(ConstitutiveLaw::COMPUTE_STRESS);
311 ConstitutiveLawOptions.
Set(ConstitutiveLaw::COMPUTE_CONSTITUTIVE_TENSOR,
false);
314 for(
unsigned int i=0;
i<NumNodes;
i++) Nvec[
i]=0.25;
332 else if(rVariable == EQ_STRAIN_RATE)
334 const unsigned int NumNodes = 4;
340 for(
unsigned int i=0;
i<NumNodes;
i++) Nvec[
i]=0.25;
348 else if(rVariable == EFFECTIVE_VISCOSITY)
350 double distance_center = 0.0;
352 distance_center +=
GetGeometry()[
i].FastGetSolutionStepValue(DISTANCE);
355 if(distance_center > 0)
358 Output = r_properties[DYNAMIC_VISCOSITY];
362 const unsigned int NumNodes = 4;
368 for(
unsigned int i=0;
i<NumNodes;
i++) Nvec[
i]=0.25;
381 template<
int MatrixSize,
int NumNodes>
384 Matrix& rLeftHandSideMatrix,
385 Vector& rRightHandSideVector,
386 const double& Volume,
390 bool ComputeLHSMatrix)
393 for (
unsigned int i = 0;
i < NumNodes;
i++)
394 data.rho[
i] = air_density;
397 const double weight = Volume/
static_cast<double>(NumNodes);
400 for(
unsigned int igauss = 0; igauss<Ncontainer.size1(); igauss++)
404 ComputeConstitutiveResponse_AIR(
data, air_density, air_nu, rCurrentProcessInfo);
407 if (ComputeLHSMatrix) {
409 noalias(rLeftHandSideMatrix) += weight*lhs_local;
413 noalias(rRightHandSideVector) += weight*rhs_local;
443 template<
int MatrixSize,
int NumNodes>
446 Matrix& rLeftHandSideMatrix,
447 Vector& rRightHandSideVector,
448 const double& Volume,
452 bool ComputeLHSMatrix)
454 const double weight = Volume/
static_cast<double>(NumNodes);
457 for(
unsigned int igauss = 0; igauss<Ncontainer.size1(); igauss++)
464 if (ComputeLHSMatrix) {
466 noalias(rLeftHandSideMatrix) += weight*lhs_local;
469 noalias(rRightHandSideVector) += weight*rhs_local;
501 template<
int MatrixSize,
int NumNodes>
504 Matrix& rLeftHandSideMatrix,
505 Vector& rRightHandSideVector,
506 const double& Volume,
510 bool ComputeLHSMatrix
517 std::vector< Matrix >
DNenr;
531 for(
unsigned int i=0;
i<NumNodes;
i++) Ncenter[
i]=0.25;
532 const double dgauss =
inner_prod(distances, Ncenter);
535 ComputeElementAsAIR<MatrixSize,NumNodes>(lhs_local, rhs_local, rLeftHandSideMatrix, rRightHandSideVector, Volume,
data, Ncontainer,rCurrentProcessInfo, ComputeLHSMatrix);
539 ComputeElementAsFLUID<MatrixSize,NumNodes>(lhs_local, rhs_local, rLeftHandSideMatrix, rRightHandSideVector, Volume,
data, Ncontainer, rCurrentProcessInfo, ComputeLHSMatrix);
556 for(
unsigned int igauss = 0; igauss<signs.size(); igauss++)
566 for (
unsigned int i = 0;
i < NumNodes;
i++)
567 data.rho[
i] = air_density;
570 ComputeConstitutiveResponse_AIR(
data, air_density, air_nu, rCurrentProcessInfo);
574 for (
unsigned int i = 0;
i < NumNodes;
i++)
584 const double weight = volumes[igauss];
585 if (ComputeLHSMatrix) {
586 noalias(rLeftHandSideMatrix) += weight*lhs_local;
588 noalias(rRightHandSideVector) += weight*rhs_local;
596 CondenseEnrichment(rLeftHandSideMatrix,rRightHandSideVector,Htot,Vtot,Kee_tot, rhs_ee_tot, volumes, signs, distances, ComputeLHSMatrix);
616 std::string
Info()
const override
618 return "Stokes3DTwoFluid #";
625 rOStream <<
Info() <<
Id();
654 const element_data<4,3>&
data,
677 std::vector< Matrix >&
DNenr,
681 Vector el_distances = distances;
682 const unsigned int NumNodes = 4;
683 const unsigned int Dim = 3;
684 Matrix coords(NumNodes, Dim);
687 for (
unsigned int i = 0;
i < NumNodes;
i++)
690 for (
unsigned int j = 0;
j < Dim;
j++)
691 coords(
i,
j) = xyz[
j];
706 bool ComputeLHSMatrix
709 const double Dim = 3;
710 const double min_area_ratio = 1
e-6;
712 double positive_volume = 0.0;
713 double negative_volume = 0.0;
714 for (
unsigned int igauss = 0; igauss < volumes.size(); igauss++)
716 double wGauss = volumes[igauss];
718 if(signs[igauss] >= 0)
719 positive_volume += wGauss;
721 negative_volume += wGauss;
723 const double Vol = positive_volume + negative_volume;
725 double max_diag = 0.0;
726 for(
unsigned int k=0;
k<Dim+1;
k++)
727 if(std::abs(Kee_tot(
k,
k) ) > max_diag) max_diag = std::abs(Kee_tot(
k,
k) );
728 if(max_diag == 0) max_diag = 1.0;
730 if(positive_volume/Vol < min_area_ratio)
732 for(
unsigned int i=0;
i<Dim+1;
i++)
734 if(distances[
i] >= 0.0)
736 Kee_tot(
i,
i) += 1000.0*max_diag;
740 if(negative_volume/Vol < min_area_ratio)
742 for(
unsigned int i=0;
i<Dim+1;
i++)
744 if(distances[
i] < 0.0)
746 Kee_tot(
i,
i) += 1000.0*max_diag;
752 for(
unsigned int i=0;
i<Dim;
i++)
754 const double di = std::abs(distances[
i]);
756 for(
unsigned int j=
i+1;
j<Dim+1;
j++)
758 const double dj = std::abs(distances[
j]);
760 if( distances[
i]*distances[
j] < 0.0)
762 double sum_d = di+dj;
763 double Ni = dj/sum_d;
764 double Nj = di/sum_d;
766 double penalty_coeff = max_diag*0.001;
767 Kee_tot(
i,
i) += penalty_coeff * Ni*Ni;
768 Kee_tot(
i,
j) -= penalty_coeff * Ni*Nj;
769 Kee_tot(
j,
i) -= penalty_coeff * Nj*Ni;
770 Kee_tot(
j,
j) += penalty_coeff * Nj*Nj;
781 if (ComputeLHSMatrix) {
820 void save(
Serializer& rSerializer)
const override
834 virtual void ComputeConstitutiveResponse_AIR(element_data<4,3>&
data,
const double rho,
const double nu,
const ProcessInfo& rCurrentProcessInfo)
855 const double c2 =
nu;
856 const double c1 = 2.0*c2;
869 const unsigned int NumNodes = 4;
870 const unsigned int Dim = 3;
874 element_data<NumNodes,Dim>
data;
878 BoundedMatrix<double,NumNodes,Dim>
v,
DN;
879 array_1d<double,NumNodes>
N;
882 for (
unsigned int i = 0;
i < NumNodes;
i++)
884 const array_1d<double,3>&
vel =
GetGeometry()[
i].FastGetSolutionStepValue(VELOCITY);
885 for(
unsigned int k=0;
k<Dim;
k++)
893 strain[3] =
DN(0,0)*
v(0,1) +
DN(0,1)*
v(0,0) +
DN(1,0)*
v(1,1) +
DN(1,1)*
v(1,0) +
DN(2,0)*
v(2,1) +
DN(2,1)*
v(2,0) +
DN(3,0)*
v(3,1) +
DN(3,1)*
v(3,0);
894 strain[4] =
DN(0,1)*
v(0,2) +
DN(0,2)*
v(0,1) +
DN(1,1)*
v(1,2) +
DN(1,2)*
v(1,1) +
DN(2,1)*
v(2,2) +
DN(2,2)*
v(2,1) +
DN(3,1)*
v(3,2) +
DN(3,2)*
v(3,1);
895 strain[5] =
DN(0,0)*
v(0,2) +
DN(0,2)*
v(0,0) +
DN(1,0)*
v(1,2) +
DN(1,2)*
v(1,0) +
DN(2,0)*
v(2,2) +
DN(2,2)*
v(2,0) +
DN(3,0)*
v(3,2) +
DN(3,2)*
v(3,0);
Base class for all Elements.
Definition: element.h:60
PropertiesType & GetProperties()
Definition: element.h:1024
virtual int Check(const ProcessInfo &rCurrentProcessInfo) const
Definition: element.h:904
static int CalculateTetrahedraEnrichedShapeFuncions(TMatrixType const &rPoints, TGradientType const &DN_DX, TVectorType &rDistances, TVectorType &rVolumes, TMatrixType &rShapeFunctionValues, TVectorType &rPartitionsSign, std::vector< TMatrixType > &rGradientsValue, TMatrixType &NEnriched)
Definition: enrichment_utilities_duplicate_dofs.h:89
std::size_t IndexType
Definition: flags.h:74
void Set(const Flags ThisFlag)
Definition: flags.cpp:33
GeometryType & GetGeometry()
Returns the reference of the geometry.
Definition: geometrical_object.h:158
bool Has(const Variable< TDataType > &rThisVariable) const
Definition: geometrical_object.h:230
SizeType size() const
Definition: geometry.h:518
IndexType const & Id() const
Id of this Geometry.
Definition: geometry.h:964
static void CalculateGeometryData(const GeometryType &rGeometry, BoundedMatrix< double, 4, 3 > &rDN_DX, array_1d< double, 4 > &rN, double &rVolume)
This function is designed to compute the shape function derivatives, shape functions and volume in 3D...
Definition: geometry_utilities.h:176
IndexType Id() const
Definition: indexed_object.h:107
void resize(std::size_t NewSize1, std::size_t NewSize2, bool preserve=0)
Definition: amatrix_interface.h:224
void clear()
Definition: amatrix_interface.h:284
static BoundedMatrix< double, TDim, TDim > InvertMatrix(const BoundedMatrix< double, TDim, TDim > &rInputMatrix, double &rInputMatrixDet, const double Tolerance=ZeroTolerance)
Calculates the inverse of a 2x2, 3x3 and 4x4 matrices (using bounded matrix for performance)
Definition: math_utils.h:197
PointerVector is a container like stl vector but using a vector to store pointers to its data.
Definition: pointer_vector.h:72
ProcessInfo holds the current value of different solution parameters.
Definition: process_info.h:59
Properties encapsulates data shared by different Elements or Conditions. It can store any type of dat...
Definition: properties.h:69
TVariableType::Type & GetValue(const TVariableType &rVariable)
Definition: properties.h:228
The serialization consists in storing the state of an object into a storage format like data file or ...
Definition: serializer.h:123
Definition: stokes_3D.h:62
virtual void ComputeConstitutiveResponse(element_data< 4, 3 > &data, const ProcessInfo &rCurrentProcessInfo)
Definition: stokes_3D.h:564
ConstitutiveLaw::Pointer mp_constitutive_law
Definition: stokes_3D.h:653
void GetShapeFunctionsOnGauss(BoundedMatrix< double, 4, 4 > &Ncontainer)
Definition: stokes_3D.h:546
Definition: stokes_3D_twofluid.h:69
virtual void ComputeGaussPointRHSContribution(array_1d< double, 16 > &rhs, const element_data< 4, 3 > &data)
Definition: stokes_3D_twofluid.cpp:1022
~Stokes3DTwoFluid() override
Destructor.
Definition: stokes_3D_twofluid.h:92
void ComputeElementAsMIXED(BoundedMatrix< double, MatrixSize, MatrixSize > &lhs_local, array_1d< double, MatrixSize > &rhs_local, Matrix &rLeftHandSideMatrix, Vector &rRightHandSideVector, const double &Volume, element_data< 4, 3 > &data, const ProcessInfo &rCurrentProcessInfo, const array_1d< double, NumNodes > &distances, bool ComputeLHSMatrix)
Definition: stokes_3D_twofluid.h:502
void ComputeElementAsFLUID(BoundedMatrix< double, MatrixSize, MatrixSize > &lhs_local, array_1d< double, MatrixSize > &rhs_local, Matrix &rLeftHandSideMatrix, Vector &rRightHandSideVector, const double &Volume, element_data< 4, 3 > &data, BoundedMatrix< double, NumNodes, NumNodes > &Ncontainer, const ProcessInfo &rCurrentProcessInfo, bool ComputeLHSMatrix)
Definition: stokes_3D_twofluid.h:444
void CalculateLocalSystem(MatrixType &rLeftHandSideMatrix, VectorType &rRightHandSideVector, const ProcessInfo &rCurrentProcessInfo) override
Definition: stokes_3D_twofluid.h:119
void CondenseEnrichment(Matrix &rLeftHandSideMatrix, Vector &rRightHandSideVector, const BoundedMatrix< double, 4, 16 > &Htot, const BoundedMatrix< double, 16, 4 > &Vtot, BoundedMatrix< double, 4, 4 > &Kee_tot, array_1d< double, 4 > &Renr, const Vector &volumes, const Vector &signs, const array_1d< double, 4 > distances, bool ComputeLHSMatrix)
Definition: stokes_3D_twofluid.h:698
Stokes3DTwoFluid(IndexType NewId, GeometryType::Pointer pGeometry, PropertiesType::Pointer pProperties)
Definition: stokes_3D_twofluid.h:87
void Calculate(const Variable< double > &rVariable, double &Output, const ProcessInfo &rCurrentProcessInfo) override
Definition: stokes_3D_twofluid.h:282
virtual void ComputeGaussPointLHSContribution(BoundedMatrix< double, 16, 16 > &lhs, const element_data< 4, 3 > &data)
Definition: stokes_3D_twofluid.cpp:6
KRATOS_CLASS_INTRUSIVE_POINTER_DEFINITION(Stokes3DTwoFluid)
Counted pointer of.
Stokes3DTwoFluid(IndexType NewId, GeometryType::Pointer pGeometry)
Default constructor.
Definition: stokes_3D_twofluid.h:83
std::string Info() const override
Turn back information as a string.
Definition: stokes_3D_twofluid.h:616
Element::Pointer Create(IndexType NewId, GeometryType::Pointer pGeom, PropertiesType::Pointer pProperties) const override
It creates a new element pointer.
Definition: stokes_3D_twofluid.h:111
void PrintInfo(std::ostream &rOStream) const override
Print information about this object.
Definition: stokes_3D_twofluid.h:623
void ComputeElementAsAIR(BoundedMatrix< double, MatrixSize, MatrixSize > &lhs_local, array_1d< double, MatrixSize > &rhs_local, Matrix &rLeftHandSideMatrix, Vector &rRightHandSideVector, const double &Volume, element_data< 4, 3 > &data, BoundedMatrix< double, NumNodes, NumNodes > &Ncontainer, const ProcessInfo &rCurrentProcessInfo, bool ComputeLHSMatrix)
Definition: stokes_3D_twofluid.h:382
void CalculateAll(MatrixType &rLeftHandSideMatrix, VectorType &rRightHandSideVector, const ProcessInfo &rCurrentProcessInfo, bool ComputeLHSMatrix)
Definition: stokes_3D_twofluid.h:139
unsigned int ComputeSplitting(const element_data< 4, 3 > &data, Matrix &Ncontainer, Vector &volumes, std::vector< Matrix > &DNenr, Matrix &Nenr, Vector &signs, const array_1d< double, 4 > &distances)
Definition: stokes_3D_twofluid.h:674
int Check(const ProcessInfo &rCurrentProcessInfo) const override
Checks the input and that all required Kratos variables have been registered.
Definition: stokes_3D_twofluid.h:241
void CalculateRightHandSide(VectorType &rRightHandSideVector, const ProcessInfo &rCurrentProcessInfo) override
Definition: stokes_3D_twofluid.h:127
virtual void ComputeGaussPointEnrichmentContributions(BoundedMatrix< double, 4, 16 > &H, BoundedMatrix< double, 16, 4 > &V, BoundedMatrix< double, 4, 4 > &Kee, array_1d< double, 4 > &rhs_ee, const element_data< 4, 3 > &data, const array_1d< double, 4 > &distances, const array_1d< double, 4 > &Nenr, const BoundedMatrix< double, 4, 4 > &DNenr)
Definition: stokes_3D_twofluid.cpp:1203
Stokes3DTwoFluid()
Definition: stokes_3D_twofluid.h:664
Element::Pointer Create(IndexType NewId, NodesArrayType const &ThisNodes, PropertiesType::Pointer pProperties) const override
It creates a new element pointer.
Definition: stokes_3D_twofluid.h:104
BOOST_UBLAS_INLINE void clear()
Definition: array_1d.h:325
#define KRATOS_THROW_ERROR(ExceptionType, ErrorMessage, MoreInfo)
Definition: define.h:77
#define KRATOS_SERIALIZE_SAVE_BASE_CLASS(Serializer, BaseType)
Definition: define.h:812
#define KRATOS_CATCH(MoreInfo)
Definition: define.h:110
#define KRATOS_TRY
Definition: define.h:109
#define KRATOS_SERIALIZE_LOAD_BASE_CLASS(Serializer, BaseType)
Definition: define.h:815
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
KratosZeroVector< double > ZeroVector
Definition: amatrix_interface.h:561
Internals::Matrix< double, AMatrix::dynamic, 1 > Vector
Definition: amatrix_interface.h:472
KratosZeroMatrix< double > ZeroMatrix
Definition: amatrix_interface.h:559
Internals::Matrix< double, AMatrix::dynamic, AMatrix::dynamic > Matrix
Definition: amatrix_interface.h:470
AMatrix::MatrixProductExpression< TExpression1Type, TExpression2Type > prod(AMatrix::MatrixExpression< TExpression1Type, TCategory1 > const &First, AMatrix::MatrixExpression< TExpression2Type, TCategory2 > const &Second)
Definition: amatrix_interface.h:568
TExpression1Type::data_type inner_prod(AMatrix::MatrixExpression< TExpression1Type, TCategory1 > const &First, AMatrix::MatrixExpression< TExpression2Type, TCategory2 > const &Second)
Definition: amatrix_interface.h:592
T & noalias(T &TheMatrix)
Definition: amatrix_interface.h:484
AMatrix::MatrixRow< const TExpressionType > row(AMatrix::MatrixExpression< TExpressionType, TCategory > const &TheExpression, std::size_t RowIndex)
Definition: amatrix_interface.h:649
ProcessInfo
Definition: edgebased_PureConvection.py:116
v
Definition: generate_convection_diffusion_explicit_element.py:114
DN
Definition: generate_convection_diffusion_explicit_element.py:98
V
Definition: generate_droplet_dynamics.py:256
H
Definition: generate_droplet_dynamics.py:257
stress
Stress vector definition.
Definition: generate_droplet_dynamics.py:82
Kee
Definition: generate_droplet_dynamics.py:258
Nenr
Definition: generate_droplet_dynamics.py:57
rho
Definition: generate_droplet_dynamics.py:86
rhs_ee
Definition: generate_droplet_dynamics.py:257
DNenr
Definition: generate_droplet_dynamics.py:56
rhs
Definition: generate_frictional_mortar_condition.py:297
lhs
Definition: generate_frictional_mortar_condition.py:297
int strain_size
Definition: generate_hyper_elastic_simo_taylor_neo_hookean.py:16
strain
HERE WE MUST SUBSTITUTE EXPRESSIONS.
Definition: generate_stokes_twofluid_element.py:104
tuple tmp
Definition: generate_total_lagrangian_mixed_volumetric_strain_element.py:98
nu
Definition: isotropic_damage_automatic_differentiation.py:135
data
Definition: mesh_to_mdpa_converter.py:59
def load(f)
Definition: ode_solve.py:307
vel
Definition: pure_conduction.py:76
int k
Definition: quadrature.py:595
int j
Definition: quadrature.py:648
float temp
Definition: rotating_cone.py:85
body_force
Definition: script_ELASTIC.py:102
N
Definition: sensitivityMatrix.py:29
integer i
Definition: TensorModule.f:17
e
Definition: run_cpp_mpi_tests.py:31
Definition: constitutive_law.h:189
void SetStrainVector(StrainVectorType &rStrainVector)
Definition: constitutive_law.h:401
Flags & GetOptions()
Definition: constitutive_law.h:412
void SetStressVector(StressVectorType &rStressVector)
Definition: constitutive_law.h:402
void SetShapeFunctionsValues(const Vector &rShapeFunctionsValues)
Definition: constitutive_law.h:396
Definition: stokes_3D.h:72