18 static LoggerPtr logger(Logger::getLogger(
"pz.elasticity"));
87 for (
int i = 0; i < copy.
m_f.
size(); i++) {
109 for (
int i = 0; i < copy.
m_f.
size(); i++) {
131 int n_phi_u = phi_u.
Rows();
145 REAL dvdx,dvdy,dudx,dudy;
146 REAL duxdx,duxdy,duydx,duydy;
149 duxdx = dsol_u(0,0)*data.
axes(0,0)+dsol_u(1,0)*data.
axes(1,0);
150 duxdy = dsol_u(0,0)*data.
axes(0,1)+dsol_u(1,0)*data.
axes(1,1);
153 duydx = dsol_u(0,1)*data.
axes(0,0)+dsol_u(1,1)*data.
axes(1,0);
154 duydy = dsol_u(0,1)*data.
axes(0,1)+dsol_u(1,1)*data.
axes(1,1);
156 for(
int iu = 0; iu < n_phi_u; iu++ )
158 dvdx = grad_phi_u(0,iu);
159 dvdy = grad_phi_u(1,iu);
161 ef(2*iu + first_u) += weight * (grad_p[0] * phi_u(iu, 0) - (dvdx*
m_s0_xx + dvdy*
m_s0_xy) );
162 ef(2*iu+1 + first_u) += weight * (grad_p[1] * phi_u(iu, 0) - (dvdx*
m_s0_xy + dvdy*
m_s0_yy) );
178 ef(2*iu + first_u) += weight* ((
m_lambda + 2*
m_mu)*dvdx*duxdx + (
m_mu)*dvdy*(duxdy));
180 ef(2*iu + first_u) += weight* (
m_lambda*dvdx*duydy + (
m_mu)*dvdy*(duydx));
182 ef(2*iu+1 + first_u) += weight* (
m_lambda*dvdy*duxdx + (
m_mu)*dvdx*(duxdy));
184 ef(2*iu+1 + first_u) += weight* ((
m_lambda + 2*
m_mu)*dvdy*duydy + (
m_mu)*dvdx*(duydx));
187 for(
int ju = 0; ju < n_phi_u; ju++)
190 dudx = grad_phi_u(0,ju);
191 dudy = grad_phi_u(1,ju);
207 ek(2*iu + first_u,2*ju + first_u) += weight* ((
m_lambda + 2*
m_mu)*dvdx*dudx + (
m_mu)*dvdy*dudy);
209 ek(2*iu + first_u,2*ju+1 + first_u) += weight* (
m_lambda*dvdx*dudy + (
m_mu)*dvdy*dudx);
211 ek(2*iu+1 + first_u,2*ju + first_u) += weight* (
m_lambda*dvdy*dudx + (
m_mu)*dvdx*dudy);
213 ek(2*iu+1 + first_u,2*ju+1 + first_u) += weight* ((
m_lambda + 2*
m_mu)*dvdy*dudy + (
m_mu)*dvdx*dudx);
229 int phrU = dphiU.
Cols();
232 for (
int i=0; i<2; i++) {
233 for (
int j=0; j<phrU; j++) {
234 dudaxes(i,j) = dphiU(i,j);
235 dvdaxes(i,j) = dphiU(2+i,j);
242 for(
int iu = 0; iu < phrU; iu++ )
245 gradv(0,0) = dudx(0,iu);
246 gradv(0,1) = dudx(1,iu);
247 gradv(1,0) = dvdx(0,iu);
248 gradv(1,1) = dvdx(1,iu);
250 for(
int ju = 0; ju < phrU; ju++)
253 gradu(0,0) = dudx(0,ju);
254 gradu(0,1) = dudx(1,ju);
255 gradu(1,0) = dvdx(0,ju);
256 gradu(1,1) = dvdx(1,ju);
271 sigma_u(0,1) =
m_E/(2.*(1+
m_nu))*(gradu(0,1)+gradu(1,0));
272 sigma_u(1,0) = sigma_u(0,1);
273 ek(iu, ju) += weight*(sigma_u(0,0)*gradv(0,0)+sigma_u(1,1)*gradv(1,1)+
274 sigma_u(1,0)*gradv(1,0)+sigma_u(0,1)*gradv(0,1));
291 sigma_u(0,1) =
m_mu*(gradu(0,1)+gradu(1,0));
292 sigma_u(1,0) = sigma_u(0,1);
293 STATE energy = (sigma_u(0,0)*gradv(0,0)+sigma_u(1,1)*gradv(1,1)+
294 sigma_u(1,0)*gradv(1,0)+sigma_u(0,1)*gradv(0,1));
295 ek(iu, ju) += weight*energy;
308 int n_phi_u = phi_u.
Rows()/2;
312 for (
int i=0; i<2; i++) {
313 for (
int j=0; j<n_phi_u; j++) {
314 dudaxes(i,j) = dphiU(i,j);
315 dvdaxes(i,j) = dphiU(2+i,j);
334 for(
int iu = 0; iu < n_phi_u; iu++ )
337 gradv(0,0) = dudx(0,iu);
338 gradv(0,1) = dudx(1,iu);
339 gradv(1,0) = dvdx(0,iu);
340 gradv(1,1) = dvdx(1,iu);
343 ef(iu) += weight*(p[0]*phi_u(2*iu, 0) + p[1]*phi_u(2*iu+1,0)
352 sigma_u(0,1) =
m_E/(2.*(1+
m_nu))*(dsol_xy(0,1)+dsol_xy(1,0));
353 sigma_u(1,0) = sigma_u(0,1);
355 ef(iu) -= weight*(gradv(0,0)*sigma_u(0,0)+gradv(1,1)*sigma_u(1,1)+gradv(1,0)*sigma_u(1,0)+gradv(0,1)*sigma_u(0,1));
363 sigma_u(0,1) =
m_mu*(dsol_xy(0,1)+dsol_xy(1,0));
364 sigma_u(1,0) = sigma_u(0,1);
365 ef(iu) -= weight*(gradv(0,0)*sigma_u(0,0)+gradv(1,1)*sigma_u(1,1)+gradv(1,0)*sigma_u(1,0)+gradv(0,1)*sigma_u(0,1));
384 int n_phi_u = phi_u.
Rows();
399 REAL duxdx,duxdy,duydx,duydy;
402 duxdx = dsol_u(0,0)*data.
axes(0,0)+dsol_u(1,0)*data.
axes(1,0);
403 duxdy = dsol_u(0,0)*data.
axes(0,1)+dsol_u(1,0)*data.
axes(1,1);
406 duydx = dsol_u(0,1)*data.
axes(0,0)+dsol_u(1,1)*data.
axes(1,0);
407 duydy = dsol_u(0,1)*data.
axes(0,1)+dsol_u(1,1)*data.
axes(1,1);
410 for(
int iu = 0; iu < n_phi_u; iu++ )
412 dvdx = grad_phi_u(0,iu);
413 dvdy = grad_phi_u(1,iu);
415 ef(2*iu + first_u) += weight * (grad_p[0] * phi_u(iu, 0) - (dvdx*
m_s0_xx + dvdy*
m_s0_xy) );
416 ef(2*iu+1 + first_u) += weight * (grad_p[1] * phi_u(iu, 0) - (dvdx*
m_s0_xy + dvdy*
m_s0_yy) );
432 ef(2*iu + first_u) += weight* ((
m_lambda + 2*
m_mu)*dvdx*duxdx + (
m_mu)*dvdy*(duxdy));
434 ef(2*iu + first_u) += weight* (
m_lambda*dvdx*duydy + (
m_mu)*dvdy*(duydx));
436 ef(2*iu+1 + first_u) += weight* (
m_lambda*dvdy*duxdx + (
m_mu)*dvdx*(duxdy));
438 ef(2*iu+1 + first_u) += weight* ((
m_lambda + 2*
m_mu)*dvdy*duydy + (
m_mu)*dvdx*(duydx));
450 if (dudx.
Rows() < 2 || dudx.
Cols() != 2 || sigma.
Rows() != 2 || sigma.
Cols() != 2) {
458 sigma(0,1) = (
m_mu)*(dudx.
g(1,0)+dudx.
g(0,1));
459 sigma(1,0) = sigma(0,1);
466 sigma(1,0) =
m_mu*(dudx.
g(1,0)+dudx.
g(0,1));
467 sigma(0,1) = sigma(1,0);
492 val2loc(0,0) = val2vec[0];
493 val2loc(1,0) = val2vec[1];
498 for (
int i=0; i<2; i++) {
500 for (
int j=0; j<2; j++) {
501 val2loc(i,0) += val1loc(i,j)*val2vec[j];
507 for (
int i=0; i<2; i++) {
509 for (
int j=0; j<2; j++) {
510 val2loc(i,0) += val1loc(i,j)*data.
normal[j];
515 int phru = phiu.
Rows();
519 v2[0] = val2loc(0,0);
520 v2[1] = val2loc(1,0);
535 for(in = 0 ; in < phru; in++)
538 ef(2*in,0) += BIGNUMBER*(ux - v2[0])*phiu(in,0)*weight;
539 ef(2*in+1,0) += BIGNUMBER*(uy - v2[1])*phiu(in,0)*weight;
541 for (jn = 0 ; jn < phru; jn++)
544 ek(2*in,2*jn) += BIGNUMBER*phiu(in,0)*phiu(jn,0)*weight;
545 ek(2*in+1,2*jn+1) += BIGNUMBER*phiu(in,0)*phiu(jn,0)*weight;
555 for(in = 0 ; in <phru; in++)
558 ef(2*in,0) += -1.0*v2[0]*phiu(in,0)*weight;
559 ef(2*in+1,0) += -1.0*v2[1]*phiu(in,0)*weight;
568 for(
int i=0; i<2; i++)
for(
int j=0; j<2; j++)
570 res(i,0) += v1(i,j)*data.
sol[0][j];
573 for(in = 0 ; in < phru; in++)
575 ef(2*in+0,0) += weight * (v2[0]-
res(0,0)) * phiu(in,0);
576 ef(2*in+1,0) += weight * (v2[1]-
res(1,0)) * phiu(in,0);
578 for (jn = 0 ; jn < phru; jn++)
582 ek(2*in+
idf,2*jn+jdf) += v1(
idf,jdf)*phiu(in,0)*phiu(jn,0)*weight;
595 for(in = 0 ; in < phru; in++)
598 ef(2*in,0) += BIGNUMBER*( v2[0])*phiu(in,0)*weight;
599 ef(2*in+1,0) += BIGNUMBER*( v2[1])*phiu(in,0)*weight;
601 for (jn = 0 ; jn < phru; jn++)
604 ek(2*in,2*jn) += BIGNUMBER*phiu(in,0)*phiu(jn,0)*weight;
605 ek(2*in+1,2*jn+1) += BIGNUMBER*phiu(in,0)*phiu(jn,0)*weight;
616 for(in = 0; in < this->
Dimension(); in ++){
617 v2[in] = ( v1(in,0) * data.
normal[0] + v1(in,1) * data.
normal[1]);
620 for(in = 0 ; in <phru; in++)
623 ef(2*in,0) += -1.0*v2[0]*phiu(in,0)*weight;
624 ef(2*in+1,0) += -1.0*v2[1]*phiu(in,0)*weight;
634 for(
int i=0; i<2; i++)
for(
int j=0; j<2; j++)
638 for(
int in = 0 ; in < phru; in++)
640 ef(2*in+0,0) += (v2[0]*data.
normal[0]-
res(0,0)) * phiu(in,0) * weight ;
641 ef(2*in+1,0) += (v2[0]*data.
normal[1]-
res(1,0)) * phiu(in,0) * weight ;
642 for(
int jn=0; jn< phru; jn++)
659 for(
int i=0; i<2; i++)
for(
int j=0; j<2; j++)
663 for(
int in = 0 ; in < phru; in++)
665 ef(2*in+0,0) += (v2[0]*data.
normal[0]-
res(0,0)) * phiu(in,0) * weight ;
666 ef(2*in+1,0) += (v2[0]*data.
normal[1]-
res(1,0)) * phiu(in,0) * weight ;
667 for(
int jn=0; jn< phru; jn++)
683 for(in = 0 ; in < phru; in++)
686 ef(2*in,0) += BIGNUMBER*(ux - v2[0])*phiu(in,0)*weight;
688 for (jn = 0 ; jn < phru; jn++)
691 ek(2*in,2*jn) += BIGNUMBER*phiu(in,0)*phiu(jn,0)*weight;
701 for(in = 0 ; in < phru; in++)
704 ef(2*in+1,0) += BIGNUMBER*(uy - v2[1])*phiu(in,0)*weight;
706 for (jn = 0 ; jn < phru; jn++)
709 ek(2*in+1,2*jn+1) += BIGNUMBER*phiu(in,0)*phiu(jn,0)*weight;
717 PZError <<
"TPZMatElasticity2D::ContributeBC error - Wrong boundary condition type" << std::endl;
735 int phru = phiu.
Rows();
738 v2[0] = bc.
Val2()(0,0);
739 v2[1] = bc.
Val2()(1,0);
754 for(in = 0 ; in < phru; in++)
757 ef(2*in,0) += BIGNUMBER*(ux - v2[0])*phiu(in,0)*weight;
758 ef(2*in+1,0) += BIGNUMBER*(uy - v2[1])*phiu(in,0)*weight;
768 for(in = 0 ; in <phru; in++)
771 ef(2*in,0) += -1.0*v2[0]*phiu(in,0)*weight;
772 ef(2*in+1,0) += -1.0*v2[1]*phiu(in,0)*weight;
781 for(
int i=0; i<2; i++)
for(
int j=0; j<2; j++)
786 for(in = 0 ; in < phru; in++)
788 ef(2*in+0,0) += weight * (v2[0]-
res(0,0)) * phiu(in,0);
789 ef(2*in+1,0) += weight * (v2[1]-
res(1,0)) * phiu(in,0);
799 for(in = 0 ; in < phru; in++)
802 ef(2*in,0) += BIGNUMBER*(0.0 - v2[0])*phiu(in,0)*weight;
803 ef(2*in+1,0) += BIGNUMBER*(0.0 - v2[1])*phiu(in,0)*weight;
814 for(in = 0; in < this->
Dimension(); in ++){ v2[in] = ( v1(in,0) * data.
normal[0] + v1(in,1) * data.
normal[1]);}
816 for(in = 0 ; in <phru; in++)
819 ef(2*in,0) += -1.0*v2[0]*phiu(in,0)*weight;
820 ef(2*in+1,0) += -1.0*v2[1]*phiu(in,0)*weight;
830 for(
int i=0; i<2; i++)
for(
int j=0; j<2; j++)
834 for(
int in = 0 ; in < phru; in++)
836 ef(2*in+0,0) += (v2[0]*data.
normal[0]-
res(0,0)) * phiu(in,0) * weight ;
837 ef(2*in+1,0) += (v2[0]*data.
normal[1]-
res(1,0)) * phiu(in,0) * weight ;
846 for(
int i=0; i<2; i++)
for(
int j=0; j<2; j++)
850 for(
int in = 0 ; in < phru; in++)
852 ef(2*in+0,0) += (v2[0]*data.
normal[0]-
res(0,0)) * phiu(in,0) * weight ;
853 ef(2*in+1,0) += (v2[0]*data.
normal[1]-
res(1,0)) * phiu(in,0) * weight ;
861 for(in = 0 ; in < phru; in++)
864 ef(2*in,0) += BIGNUMBER*(ux - v2[0])*phiu(in,0)*weight;
873 for(in = 0 ; in < phru; in++)
876 ef(2*in+1,0) += BIGNUMBER*(uy - v2[1])*phiu(in,0)*weight;
883 PZError <<
"TPZMatElasticity2D::ContributeBC error - Wrong boundary condition type" << std::endl;
910 out <<
"Material Name : " <<
Name() <<
"\n";
911 out <<
"Plane Problem (m_plane_stress = 0, for Plane Strain conditions) " <<
m_plane_stress << std::endl;
912 out <<
"Properties for elasticity: \n";
913 out <<
"\t Young modulus = " <<
m_E << std::endl;
914 out <<
"\t Poisson Ratio = " <<
m_nu << std::endl;
915 out <<
"\t First Lamé Parameter = " <<
m_lambda << std::endl;
916 out <<
"\t Second Lamé Parameter = " <<
m_mu << std::endl;
917 out <<
"\t Body force vector B {X-direction, Y-direction} = " <<
m_f[0] <<
' ' <<
m_f[1] << std::endl;
918 out <<
"\t m_s0_xx = " <<
m_s0_xx << std::endl;
919 out <<
"\t m_s0_xy = " <<
m_s0_xy << std::endl;
920 out <<
"\t m_s0_yy = " <<
m_s0_yy << std::endl;
921 out <<
"\t m_s0_zz = " <<
m_s0_zz << std::endl;
922 out <<
"Class properties :";
932 if(!strcmp(
"Displacement",name.c_str()))
return 1;
933 if(!strcmp(
"SolidPressure",name.c_str()))
return 2;
934 if(!strcmp(
"SigmaX",name.c_str()))
return 3;
935 if(!strcmp(
"SigmaY",name.c_str()))
return 4;
936 if(!strcmp(
"SigmaZ",name.c_str()))
return 5;
937 if(!strcmp(
"TauXY",name.c_str()))
return 6;
938 if(!strcmp(
"EpsX",name.c_str()))
return 7;
939 if(!strcmp(
"EpsY",name.c_str()))
return 8;
940 if(!strcmp(
"EpsZ",name.c_str()))
return 9;
941 if(!strcmp(
"EpsXY",name.c_str()))
return 10;
986 if(var == 1)
return 3;
987 if(var == 2)
return 1;
988 if(var == 3)
return 1;
989 if(var == 4)
return 1;
990 if(var == 5)
return 1;
991 if(var == 6)
return 1;
992 if(var == 7)
return 1;
993 if(var == 8)
return 1;
994 if(var == 9)
return 1;
995 if(var == 10)
return 1;
1018 DSolU = data.
dsol[0];
1023 if(var == 1 || var == 0){
1024 Solout[0] = SolU[0];
1025 Solout[1] = SolU[1];
1026 if(var==1) Solout[2] = 0.0;
1037 REAL Tau, DSolxy[2][2];
1040 DSolxy[0][0] = DSolU(0,0)*axesU(0,0)+DSolU(1,0)*axesU(1,0);
1041 DSolxy[1][0] = DSolU(0,0)*axesU(0,1)+DSolU(1,0)*axesU(1,1);
1043 DSolxy[0][1] = DSolU(0,1)*axesU(0,0)+DSolU(1,1)*axesU(1,0);
1044 DSolxy[1][1] = DSolU(0,1)*axesU(0,1)+DSolU(1,1)*axesU(1,1);
1046 divu = DSolxy[0][0]+DSolxy[1][1]+0.0;
1048 epsx = DSolxy[0][0];
1049 epsy = DSolxy[1][1];
1050 epsxy = 0.5*(DSolxy[1][0]+DSolxy[0][1]);
1056 SigX = C11*epsx+C22*epsy;
1057 SigY = C11*epsy+C22*epsx;
1059 Tau = 2.0*
m_mu*epsxy;
1066 Tau = 2.0*
m_mu*epsxy;
1073 Solout[0] = SigX+SigY+SigZ;
1114 Solout[0] = -
m_nu*(epsx+epsy);
1146 L2 = (sol[0]-uexact[0])*(sol[0]-uexact[0])+(sol[1]-uexact[1])*(sol[1]-uexact[1]);
1149 for (
int i=0; i<2; i++) {
1150 for (
int j=0; j<2; j++) {
1151 H1 += (dudx(i,j)-duexact(i,j))*(dudx(i,j)-duexact(i,j));
1152 energy += (stress(i,j)-stressexact(i,j))*(dudx(i,j)-duexact(i,j));
virtual void Execute(const TPZVec< REAL > &x, TPZVec< TVar > &f, TPZFMatrix< TVar > &df)
Performs function computation.
TPZManVector< REAL, 3 > normal
normal to the element at the integration point
virtual void Write(TPZStream &buf, int withclassid) const override
Contains definitions to LOGPZ_DEBUG, LOGPZ_INFO, LOGPZ_WARN, LOGPZ_ERROR and LOGPZ_FATAL, and the implementation of the inline InitializePZLOG(string) function using log4cxx library or not. It must to be called out of "#ifdef LOG4CXX" scope.
virtual void ContributeBC(TPZMaterialData &data, REAL weight, TPZFMatrix< STATE > &ek, TPZFMatrix< STATE > &ef, TPZBndCond &bc) override
It computes a contribution to the stiffness matrix and load vector at one BC integration point...
TPZManVector< REAL, 3 > x
value of the coordinate at the integration point
virtual int NStateVariables() const override
Returns the number of state variables associated with the material.
REAL m_E
Elasticity modulus.
clarg::argBool bc("-bc", "binary checkpoints", false)
bool fNeedsNeighborCenter
TPZMatElasticity2D & operator=(const TPZMatElasticity2D ©)
virtual void resize(const int64_t newsize)
virtual void Print(std::ostream &out) override
Prints out the data associated with the material.
virtual std::string Name() override
Returns the name of the material.
int m_plane_stress
plain stress directive
TPZMaterial & operator=(const TPZMaterial ©)
operator =
REAL m_s0_xx
Initial Stress.
virtual int VariableIndex(const std::string &name)
Returns the variable index associated with the name.
void SetAllRequirements(bool set)
Set all flags at once.
virtual int ClassId() const override
Define the class id associated with the class.
void Write(TPZStream &buf, int withclassid) const override
Saves the element data to a stream.
TPZGradSolVec dsol
vector of the derivatives of the solution at the integration point
MShapeFunctionType fShapeType
REAL val(STATE &number)
Returns value of the variable.
int Dimension() const override
Returns the integrable dimension of the material.
virtual void FillDataRequirements(TPZMaterialData &data) override
Fill material data parameter with necessary requirements for the.
TPZFMatrix< STATE > & Val2(int loadcase=0)
TPZFNMatrix< 220, REAL > phi
vector of shapefunctions (format is dependent on the value of shapetype)
TPZFNMatrix< 660, REAL > dphix
values of the derivative of the shape functions
virtual int NSolutionVariables(int var) override
Returns the number of variables associated with the variable indexed by var.
virtual void Print(std::ostream &out=std::cout)
Prints out the data associated with the material.
This abstract class defines the behaviour which each derived class needs to implement.
virtual void Errors(TPZVec< REAL > &x, TPZVec< STATE > &sol, TPZFMatrix< STATE > &dsol, TPZFMatrix< REAL > &axes, TPZVec< STATE > &flux, TPZVec< STATE > &uexact, TPZFMatrix< STATE > &duexact, TPZVec< REAL > &val) override
Computes the error due to the difference between the interpolated flux and the flux computed based o...
Contains the TPZBndCond class which implements a boundary condition for TPZMaterial objects...
TPZAutoPointer< TPZFunction< STATE > > & ForcingFunction()
Returns a procedure as source function for the material.
int64_t size() const
Returns the number of elements of the vector.
virtual void Resize(const int64_t newsize, const T &object)
Resizes the vector object reallocating the necessary storage, copying the existing objects to the new...
virtual void Solution(TPZMaterialData &data, int var, TPZVec< STATE > &Solout) override
Returns the solution associated with the var index based on the finite element approximation.
void Read(TPZStream &buf, void *context) override
Reads the element data from a stream.
void Read(TPZStream &buf, void *context) override
virtual void Write(const bool val)
#define DebugStop()
Returns a message to user put a breakpoint in.
This class defines the boundary condition for TPZMaterial objects.
void ComputeSigma(const TPZFMatrix< STATE > &dudx, TPZFMatrix< STATE > &sigma)
compute the stress tensor as a function of the solution gradient
int64_t Rows() const
Returns number of rows.
REAL m_nu
Poison coeficient.
TPZFNMatrix< 9, REAL > axes
axes indicating the directions of the derivatives of the shapefunctions
void ContributeVec(TPZMaterialData &data, REAL weight, TPZFMatrix< STATE > &ek, TPZFMatrix< STATE > &ef)
TPZFMatrix< STATE > & Val1()
virtual int HasForcingFunction()
Directive that gives true if the material has a forcing function.
REAL m_lambda
first Lame Parameter
static REAL gBigNumber
Big number to penalization method, used for Dirichlet conditions.
int32_t Hash(std::string str)
int ClassId() const override
Unique identifier for serialization purposes.
virtual int NSolutionVariables(int var)
Returns the number of variables associated with the variable indexed by var.
REAL m_mu
Second Lame Parameter.
TPZManVector< STATE, 2 > m_f
Forcing vector.
TPZAutoPointer< TPZFunction< STATE > > fForcingFunction
Pointer to forcing function, it is the right member at differential equation.
virtual void FillBoundaryConditionDataRequirement(int type, TPZMaterialData &data) override
This method defines which parameters need to be initialized in order to compute the contribution of t...
int64_t Cols() const
Returns number of cols.
virtual int VariableIndex(const std::string &name) override
Defines the interface for saving and reading data. Persistency.
virtual void Contribute(TPZMaterialData &data, REAL weight, TPZFMatrix< STATE > &ek, TPZFMatrix< STATE > &ef) override
It computes a contribution to the stiffness matrix and load vector at one integration point to multip...
virtual ~TPZMatElasticity2D()
TPZSolVec sol
vector of the solutions at the integration point
Description Linear elastic equations.
TVar & g(const int64_t row, const int64_t col) const
Non abstract class which implements full matrices with preallocated storage with (N+1) entries...
#define PZError
Defines the output device to error messages and the DebugStop() function.
virtual void Read(bool &val)