v0.13.0
Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
PeriodicNitscheConstrains::OpRhsPeriodicNormal Struct Reference

#include <users_modules/homogenisation/src/NitschePeriodicMethod.hpp>

Inheritance diagram for PeriodicNitscheConstrains::OpRhsPeriodicNormal:
[legend]
Collaboration diagram for PeriodicNitscheConstrains::OpRhsPeriodicNormal:
[legend]

Public Member Functions

 OpRhsPeriodicNormal (string field_name, NitscheMethod::BlockData &nitsche_block_data, NitscheMethod::CommonData &nitsche_common_data, NonlinearElasticElement::BlockData &data, NonlinearElasticElement::CommonData &common_data, CommonData &periodic_common_data, vector< Vec > &f, bool field_disp=true)
 
PetscErrorCode doWork (int row_side, EntityType row_type, DataForcesAndSourcesCore::EntData &row_data)
 
- Public Member Functions inherited from NitscheMethod::OpCommon
 OpCommon (const std::string field_name, BlockData &nitsche_block_data, CommonData &nitsche_common_data, NonlinearElasticElement::BlockData &data, NonlinearElasticElement::CommonData &common_data, bool field_disp, const char type)
 
virtual MoFEMErrorCode calculateP (int gg, int fgg, int ff)
 
MoFEMErrorCode getJac (DataForcesAndSourcesCore::EntData &data, int gg, MatrixDouble &jac)
 
MoFEMErrorCode getTractionVariance (int gg, int fgg, int ff, MatrixDouble &jac, MatrixDouble &trac)
 
- Public Member Functions inherited from NitscheMethod::OpBasicCommon
 OpBasicCommon (const std::string field_name, BlockData &nitsche_block_data, CommonData &nitsche_common_data, bool field_disp, const char type)
 
virtual MoFEMErrorCode getFaceRadius (int ff)
 
virtual MoFEMErrorCode getGammaH (double gamma, int gg)
 
- Public Member Functions inherited from MoFEM::VolumeElementForcesAndSourcesCoreBase::UserDataOperator
int getNumNodes ()
 get element number of nodes More...
 
const EntityHandlegetConn ()
 get element connectivity More...
 
double getVolume () const
 element volume (linear geometry) More...
 
double & getVolume ()
 element volume (linear geometry) More...
 
FTensor::Tensor2< double *, 3, 3 > & getJac ()
 get element Jacobian More...
 
FTensor::Tensor2< double *, 3, 3 > & getInvJac ()
 get element inverse Jacobian More...
 
VectorDoublegetCoords ()
 nodal coordinates More...
 
VolumeElementForcesAndSourcesCoreBasegetVolumeFE () const
 return pointer to Generic Volume Finite Element object More...
 
- Public Member Functions inherited from MoFEM::ForcesAndSourcesCore::UserDataOperator
 UserDataOperator (const FieldSpace space, const char type=OPSPACE, const bool symm=true)
 
 UserDataOperator (const std::string &field_name, const char type, const bool symm=true)
 
 UserDataOperator (const std::string &row_field_name, const std::string &col_field_name, const char type, const bool symm=true)
 
boost::shared_ptr< const NumeredEntFiniteElementgetNumeredEntFiniteElementPtr () const
 Return raw pointer to NumeredEntFiniteElement. More...
 
EntityHandle getFEEntityHandle () const
 Return finite element entity handle. More...
 
int getFEDim () const
 Get dimension of finite element. More...
 
EntityType getFEType () const
 Get dimension of finite element. More...
 
boost::weak_ptr< SideNumbergetSideNumberPtr (const int side_number, const EntityType type)
 Get the side number pointer. More...
 
EntityHandle getSideEntity (const int side_number, const EntityType type)
 Get the side entity. More...
 
int getNumberOfNodesOnElement () const
 Get the number of nodes on finite element. More...
 
MoFEMErrorCode getProblemRowIndices (const std::string filed_name, const EntityType type, const int side, VectorInt &indices) const
 Get row indices. More...
 
MoFEMErrorCode getProblemColIndices (const std::string filed_name, const EntityType type, const int side, VectorInt &indices) const
 Get col indices. More...
 
const FEMethodgetFEMethod () const
 Return raw pointer to Finite Element Method object. More...
 
int getOpType () const
 Get operator types. More...
 
void setOpType (const OpType type)
 Set operator type. More...
 
void addOpType (const OpType type)
 Add operator type. More...
 
int getNinTheLoop () const
 get number of finite element in the loop More...
 
int getLoopSize () const
 get size of elements in the loop More...
 
const std::string & getFEName () const
 Get name of the element. More...
 
const PetscData::SwitchesgetDataCtx () const
 
const KspMethod::KSPContext getKSPCtx () const
 
const SnesMethod::SNESContext getSNESCtx () const
 
const TSMethod::TSContext getTSCtx () const
 
Vec getKSPf () const
 
Mat getKSPA () const
 
Mat getKSPB () const
 
Vec getSNESf () const
 
Vec getSNESx () const
 
Mat getSNESA () const
 
Mat getSNESB () const
 
Vec getTSu () const
 
Vec getTSu_t () const
 
Vec getTSu_tt () const
 
Vec getTSf () const
 
Mat getTSA () const
 
Mat getTSB () const
 
int getTSstep () const
 
double getTStime () const
 
double getTSa () const
 
double getTSaa () const
 
MatrixDoublegetGaussPts ()
 matrix of integration (Gauss) points for Volume Element More...
 
auto getFTensor0IntegrationWeight ()
 Get integration weights. More...
 
MatrixDoublegetCoordsAtGaussPts ()
 Gauss points and weight, matrix (nb. of points x 3) More...
 
auto getFTensor1CoordsAtGaussPts ()
 Get coordinates at integration points assuming linear geometry. More...
 
double getMeasure () const
 get measure of element More...
 
double & getMeasure ()
 get measure of element More...
 
MoFEMErrorCode loopSide (const string &fe_name, ForcesAndSourcesCore *side_fe, const size_t dim, const EntityHandle ent_for_side=0, const int verb=QUIET, const LogManager::SeverityLevel sev=Sev::noisy)
 User call this function to loop over elements on the side of face. This function calls finite element with is operator to do calculations. More...
 
MoFEMErrorCode loopThis (const string &fe_name, ForcesAndSourcesCore *parent_fe, const int verb=QUIET, const LogManager::SeverityLevel sev=Sev::noisy)
 User call this function to loop over parent elements. This function calls finite element with is operator to do calculations. More...
 
MoFEMErrorCode loopParent (const string &fe_name, ForcesAndSourcesCore *parent_fe, const int verb=QUIET, const LogManager::SeverityLevel sev=Sev::noisy)
 User call this function to loop over parent elements. This function calls finite element with is operator to do calculations. More...
 
MoFEMErrorCode loopChildren (const string &fe_name, ForcesAndSourcesCore *child_fe, const int verb=QUIET, const LogManager::SeverityLevel sev=Sev::noisy)
 User call this function to loop over parent elements. This function calls finite element with is operator to do calculations. More...
 
- Public Member Functions inherited from MoFEM::DataOperator
 DataOperator (const bool symm=true)
 
virtual ~DataOperator ()=default
 
virtual MoFEMErrorCode doWork (int row_side, int col_side, EntityType row_type, EntityType col_type, EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
 Operator for bi-linear form, usually to calculate values on left hand side. More...
 
virtual MoFEMErrorCode opLhs (EntitiesFieldData &row_data, EntitiesFieldData &col_data)
 
virtual MoFEMErrorCode doWork (int side, EntityType type, EntitiesFieldData::EntData &data)
 Operator for linear form, usually to calculate values on right hand side. More...
 
virtual MoFEMErrorCode opRhs (EntitiesFieldData &data, const bool error_if_no_base=false)
 
bool getSymm () const
 Get if operator uses symmetry of DOFs or not. More...
 
void setSymm ()
 set if operator is executed taking in account symmetry More...
 
void unSetSymm ()
 unset if operator is executed for non symmetric problem More...
 

Static Public Member Functions

static PetscErrorCode calcualteDMatrix (VectorAdaptor coords, MatrixDouble &mat_d)
 

Public Attributes

CommonDataperiodicCommonData
 
vector< Vec > & F
 
VectorDouble nF0 [6]
 
VectorDouble nF1 [6]
 
VectorDouble voightStrain
 
VectorDouble dispOnThisSide
 
VectorDouble dispOnOtherSide
 
MatrixDouble matD0
 
MatrixDouble matD1
 
- Public Attributes inherited from NitscheMethod::OpCommon
NonlinearElasticElement::BlockDatadAta
 
NonlinearElasticElement::CommonDatacommonData
 
VectorDouble dIsp
 
VectorDouble tRaction
 
MatrixDouble jAc_row
 
MatrixDouble jAc_col
 
MatrixDouble tRac_v
 
MatrixDouble tRac_u
 
- Public Attributes inherited from NitscheMethod::OpBasicCommon
BlockDatanitscheBlockData
 
CommonDatanitscheCommonData
 
bool fieldDisp
 
double faceRadius
 
double gammaH
 
- Public Attributes inherited from MoFEM::ForcesAndSourcesCore::UserDataOperator
char opType
 
std::string rowFieldName
 
std::string colFieldName
 
FieldSpace sPace
 
- Public Attributes inherited from MoFEM::DataOperator
DoWorkLhsHookFunType doWorkLhsHook
 
DoWorkRhsHookFunType doWorkRhsHook
 
bool sYmm
 If true assume that matrix is symmetric structure. More...
 
std::array< bool, MBMAXTYPE > doEntities
 If true operator is executed for entity. More...
 
booldoVertices
 \deprectaed If false skip vertices More...
 
booldoEdges
 \deprectaed If false skip edges More...
 
booldoQuads
 \deprectaed More...
 
booldoTris
 \deprectaed More...
 
booldoTets
 \deprectaed More...
 
booldoPrisms
 \deprectaed More...
 

Additional Inherited Members

- Public Types inherited from MoFEM::ForcesAndSourcesCore::UserDataOperator
enum  OpType { OPROW = 1 << 0 , OPCOL = 1 << 1 , OPROWCOL = 1 << 2 , OPSPACE = 1 << 3 }
 Controls loop over entities on element. More...
 
- Public Types inherited from MoFEM::DataOperator
using DoWorkLhsHookFunType = boost::function< MoFEMErrorCode(DataOperator *op_ptr, int row_side, int col_side, EntityType row_type, EntityType col_type, EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)>
 
using DoWorkRhsHookFunType = boost::function< MoFEMErrorCode(DataOperator *op_ptr, int side, EntityType type, EntitiesFieldData::EntData &data)>
 
- Static Public Attributes inherited from MoFEM::ForcesAndSourcesCore::UserDataOperator
static const char *const OpTypeNames []
 
- Protected Member Functions inherited from MoFEM::VolumeElementForcesAndSourcesCoreBase::UserDataOperator
MoFEMErrorCode setPtrFE (ForcesAndSourcesCore *ptr)
 
- Protected Member Functions inherited from MoFEM::ForcesAndSourcesCore::UserDataOperator
ForcesAndSourcesCoregetPtrFE () const
 
ForcesAndSourcesCoregetSidePtrFE () const
 
ForcesAndSourcesCoregetRefinePtrFE () const
 
- Protected Attributes inherited from MoFEM::ForcesAndSourcesCore::UserDataOperator
ForcesAndSourcesCoreptrFE
 

Detailed Description

Definition at line 576 of file NitschePeriodicMethod.hpp.

Constructor & Destructor Documentation

◆ OpRhsPeriodicNormal()

PeriodicNitscheConstrains::OpRhsPeriodicNormal::OpRhsPeriodicNormal ( string  field_name,
NitscheMethod::BlockData nitsche_block_data,
NitscheMethod::CommonData nitsche_common_data,
NonlinearElasticElement::BlockData data,
NonlinearElasticElement::CommonData common_data,
CommonData periodic_common_data,
vector< Vec > &  f,
bool  field_disp = true 
)

Definition at line 581 of file NitschePeriodicMethod.hpp.

590  :
591  OpCommon(
592  field_name,
593  nitsche_block_data,
594  nitsche_common_data,
595  data,
596  common_data,
597  field_disp,
598  UserDataOperator::OPROW
599  ),
600  periodicCommonData(periodic_common_data),
601  F(f) {
602  }
OpCommon(const std::string field_name, BlockData &nitsche_block_data, CommonData &nitsche_common_data, NonlinearElasticElement::BlockData &data, NonlinearElasticElement::CommonData &common_data, bool field_disp, const char type)

Member Function Documentation

◆ calcualteDMatrix()

static PetscErrorCode PeriodicNitscheConstrains::OpRhsPeriodicNormal::calcualteDMatrix ( VectorAdaptor  coords,
MatrixDouble &  mat_d 
)
static

Definition at line 612 of file NitschePeriodicMethod.hpp.

612  {
613  PetscFunctionBegin;
614  mat_d.resize(3,6,false);
615  mat_d.clear();
616  mat_d(0,0) = coords[0]; mat_d(0,3) = coords[1]*0.5; mat_d(0,5) = coords[2]*0.5;
617  mat_d(1,1) = coords[1]; mat_d(1,3) = coords[0]*0.5; mat_d(1,4) = coords[2]*0.5;
618  mat_d(2,2) = coords[2]; mat_d(2,4) = coords[1]*0.5; mat_d(2,5) = coords[0]*0.5;
619  PetscFunctionReturn(0);
620  }

◆ doWork()

PetscErrorCode PeriodicNitscheConstrains::OpRhsPeriodicNormal::doWork ( int  row_side,
EntityType  row_type,
DataForcesAndSourcesCore::EntData row_data 
)

Definition at line 622 of file NitschePeriodicMethod.hpp.

624  {
625  PetscFunctionBegin;
626 
627  if(dAta.tEts.find(getNumeredEntFiniteElementPtr()->getEnt()) == dAta.tEts.end()) {
628  PetscFunctionReturn(0);
629  }
630 
631  if(row_data.getIndices().size()==0) PetscFunctionReturn(0);
632  int nb_dofs = row_data.getIndices().size();
633  const double gamma = nitscheBlockData.gamma;
634  const double phi = nitscheBlockData.phi;
635  double eps = periodicCommonData.eps;
636 
637  try {
638 
639  int gg = 0;
640  for(int ff = 0;ff<4;ff++) {
641  if(nitscheCommonData.facesFePtr[ff]==NULL) continue;
642  int nb_face_gauss_pts = nitscheCommonData.faceGaussPts[ff].size2();
643  ierr = getFaceRadius(ff); CHKERRQ(ierr);
644  for(int ii = 0;ii<6;ii++) {
645  nF0[ii].resize(nb_dofs,false);
646  nF0[ii].clear();
647  nF1[ii].resize(nb_dofs,false);
648  nF1[ii].clear();
649  }
650  for(int fgg = 0;fgg<nb_face_gauss_pts;fgg++,gg++) {
651  ierr = getGammaH(gamma,gg); CHKERRQ(ierr);
652  double val = getGaussPts()(3,gg);
653  ierr = getJac(row_data,gg,jAc_row); CHKERRQ(ierr);
654  ierr = getTractionVariance(gg,fgg,ff,jAc_row,tRac_v); CHKERRQ(ierr);
656  3,ublas::shallow_array_adaptor<double>(
657  3,&nitscheCommonData.faceNormals[ff](fgg,0)
658  )
659  );
660  double area = cblas_dnrm2(3,&normal[0],1);
661 
662  voightStrain.resize(6,false);
663  dispOnThisSide.resize(3,false);
664  dispOnOtherSide.resize(3,false);
666  3,ublas::shallow_array_adaptor<double>(3,&getCoordsAtGaussPts()(gg,0))
667  );
669  VectorDouble other_x = VectorAdaptor(
670  3,ublas::shallow_array_adaptor<double>(3,&periodicCommonData.hoCoordsAtGaussPts[gg][0])
671  );
672  ierr = calcualteDMatrix(other_x,matD1);
673  const double err = 1e-10;
674  double delta = inner_prod(other_x,normal)+inner_prod(x,normal);
675  if(fabs(delta)>err) {
676  cerr << x << endl;
677  cerr << other_x << endl;
678  SETERRQ1(
679  PETSC_COMM_SELF,MOFEM_DATA_INCONSISTENCY,"err = %6.4e",delta
680  );
681  }
682 
683  for(int ii = 0;ii<6;ii++) {
684  voightStrain.clear();
685  voightStrain[ii] = 1;
686  noalias(dispOnThisSide) = prod(matD0,voightStrain);
687  noalias(dispOnOtherSide) = prod(matD1,voightStrain);
688  for(int dd1 = 0;dd1<nb_dofs/3;dd1++) {
689  double n_val = row_data.getN(gg)[dd1];
690  for(int dd2 = 0;dd2<3;dd2++) {
691  nF0[ii][3*dd1+dd2] -= dispOnThisSide[dd2]*n_val*val*area;
692  nF0[ii][3*dd1+dd2] += (1-eps)*dispOnOtherSide[dd2]*n_val*val*area;
693  }
694  }
695  for(int dd = 0;dd<nb_dofs;dd++) {
696  double dot;
697  dot = cblas_ddot(
698  3,&dispOnThisSide[0],1,&tRac_v(0,dd),tRac_v.size2()
699  );
700  dot -= (1-eps)*cblas_ddot(
701  3,&dispOnOtherSide[0],1,&tRac_v(0,dd),tRac_v.size2()
702  );
703  nF1[ii][dd] += val*phi*dot;
704  }
705  }
706  }
707 
708  for(int ii = 0;ii<6;ii++) {
709  nF0[ii] *= -(1/gammaH);
710  ierr = VecSetValues(
711  F[ii],
712  nb_dofs,
713  &row_data.getIndices()[0],
714  &nF0[ii][0],
715  ADD_VALUES
716  ); CHKERRQ(ierr);
717  nF1[ii] *= -1;
718  ierr = VecSetValues(
719  F[ii],
720  nb_dofs,
721  &row_data.getIndices()[0],
722  &nF1[ii][0],
723  ADD_VALUES
724  ); CHKERRQ(ierr);
725  }
726 
727  }
728 
729  } catch (const std::exception& ex) {
730  ostringstream ss;
731  ss << "throw in method: " << ex.what() << endl;
732  SETERRQ(PETSC_COMM_SELF,1,ss.str().c_str());
733  }
734 
735  PetscFunctionReturn(0);
736  }
static const double eps
@ MOFEM_DATA_INCONSISTENCY
Definition: definitions.h:44
FTensor::Tensor1< double, SPACE_DIM > normal(FTensor::Tensor1< T1, 3 > &t_coords, FTensor::Tensor1< T2, SPACE_DIM > &t_disp)
Definition: ContactOps.hpp:77
const Tensor2_symmetric_Expr< const ddTensor0< T, Dim, i, j >, typename promote< T, double >::V, Dim, i, j > dd(const Tensor0< T * > &a, const Index< i, Dim > index1, const Index< j, Dim > index2, const Tensor1< int, Dim > &d_ijk, const Tensor1< double, Dim > &d_xyz)
Definition: ddTensor0.hpp:33
static MoFEMErrorCodeGeneric< PetscErrorCode > ierr
Definition: Exceptions.hpp:87
VectorShallowArrayAdaptor< double > VectorAdaptor
Definition: Types.hpp:126
UBlasVector< double > VectorDouble
Definition: Types.hpp:79
static double phi
static constexpr double delta
MatrixDouble & getCoordsAtGaussPts()
Gauss points and weight, matrix (nb. of points x 3)
boost::shared_ptr< const NumeredEntFiniteElement > getNumeredEntFiniteElementPtr() const
Return raw pointer to NumeredEntFiniteElement.
MatrixDouble & getGaussPts()
matrix of integration (Gauss) points for Volume Element
FTensor::Tensor2< double *, 3, 3 > & getJac()
get element Jacobian
double gamma
Penalty term, see .
double phi
Nitsche method parameter, see .
std::vector< boost::shared_ptr< const NumeredEntFiniteElement > > facesFePtr
std::vector< MatrixDouble > faceNormals
std::vector< MatrixDouble > faceGaussPts
virtual MoFEMErrorCode getFaceRadius(int ff)
virtual MoFEMErrorCode getGammaH(double gamma, int gg)
NonlinearElasticElement::BlockData & dAta
MoFEMErrorCode getTractionVariance(int gg, int fgg, int ff, MatrixDouble &jac, MatrixDouble &trac)
Range tEts
constrains elements in block set
static PetscErrorCode calcualteDMatrix(VectorAdaptor coords, MatrixDouble &mat_d)

Member Data Documentation

◆ dispOnOtherSide

VectorDouble PeriodicNitscheConstrains::OpRhsPeriodicNormal::dispOnOtherSide

Definition at line 609 of file NitschePeriodicMethod.hpp.

◆ dispOnThisSide

VectorDouble PeriodicNitscheConstrains::OpRhsPeriodicNormal::dispOnThisSide

Definition at line 608 of file NitschePeriodicMethod.hpp.

◆ F

vector<Vec>& PeriodicNitscheConstrains::OpRhsPeriodicNormal::F

Definition at line 579 of file NitschePeriodicMethod.hpp.

◆ matD0

MatrixDouble PeriodicNitscheConstrains::OpRhsPeriodicNormal::matD0

Definition at line 611 of file NitschePeriodicMethod.hpp.

◆ matD1

MatrixDouble PeriodicNitscheConstrains::OpRhsPeriodicNormal::matD1

Definition at line 611 of file NitschePeriodicMethod.hpp.

◆ nF0

VectorDouble PeriodicNitscheConstrains::OpRhsPeriodicNormal::nF0[6]

Definition at line 604 of file NitschePeriodicMethod.hpp.

◆ nF1

VectorDouble PeriodicNitscheConstrains::OpRhsPeriodicNormal::nF1[6]

Definition at line 604 of file NitschePeriodicMethod.hpp.

◆ periodicCommonData

CommonData& PeriodicNitscheConstrains::OpRhsPeriodicNormal::periodicCommonData

Definition at line 578 of file NitschePeriodicMethod.hpp.

◆ voightStrain

VectorDouble PeriodicNitscheConstrains::OpRhsPeriodicNormal::voightStrain

Definition at line 607 of file NitschePeriodicMethod.hpp.


The documentation for this struct was generated from the following file: