v0.13.2
Loading...
Searching...
No Matches
Public Member Functions | Private Attributes | List of all members
FreeSurfaceOps::OpLhsH_dH< I > Struct Template Reference

Lhs for H dH. More...

#include <users_modules/tutorials/vec-5/src/FreeSurfaceOps.hpp>

Inheritance diagram for FreeSurfaceOps::OpLhsH_dH< I >:
[legend]
Collaboration diagram for FreeSurfaceOps::OpLhsH_dH< I >:
[legend]

Public Member Functions

 OpLhsH_dH (const std::string field_name, boost::shared_ptr< MatrixDouble > u_ptr, boost::shared_ptr< VectorDouble > h_ptr, boost::shared_ptr< MatrixDouble > grad_g_ptr)
 
MoFEMErrorCode iNtegrate (EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
 

Private Attributes

boost::shared_ptr< MatrixDouble > uPtr
 
boost::shared_ptr< VectorDouble > hPtr
 
boost::shared_ptr< MatrixDouble > gradGPtr
 

Detailed Description

template<bool I>
struct FreeSurfaceOps::OpLhsH_dH< I >

Lhs for H dH.

Examples
free_surface.cpp.

Definition at line 974 of file FreeSurfaceOps.hpp.

Constructor & Destructor Documentation

◆ OpLhsH_dH()

template<bool I>
FreeSurfaceOps::OpLhsH_dH< I >::OpLhsH_dH ( const std::string  field_name,
boost::shared_ptr< MatrixDouble >  u_ptr,
boost::shared_ptr< VectorDouble >  h_ptr,
boost::shared_ptr< MatrixDouble >  grad_g_ptr 
)
inline

Definition at line 976 of file FreeSurfaceOps.hpp.

980 AssemblyDomainEleOp::OPROWCOL),
981 uPtr(u_ptr), hPtr(h_ptr), gradGPtr(grad_g_ptr) {
982 sYmm = false;
983 }
FormsIntegrators< DomainEleOp >::Assembly< A >::OpBase AssemblyDomainEleOp
Definition: plastic.cpp:48
constexpr auto field_name
boost::shared_ptr< MatrixDouble > uPtr
boost::shared_ptr< MatrixDouble > gradGPtr
boost::shared_ptr< VectorDouble > hPtr

Member Function Documentation

◆ iNtegrate()

template<bool I>
MoFEMErrorCode FreeSurfaceOps::OpLhsH_dH< I >::iNtegrate ( EntitiesFieldData::EntData &  row_data,
EntitiesFieldData::EntData &  col_data 
)
inline

Definition at line 985 of file FreeSurfaceOps.hpp.

986 {
988
989 const double vol = getMeasure();
990 auto t_w = getFTensor0IntegrationWeight();
991 auto t_coords = getFTensor1CoordsAtGaussPts();
992 auto t_row_base = row_data.getFTensor0N();
993 auto t_row_diff_base = row_data.getFTensor1DiffN<SPACE_DIM>();
994
995#ifndef NDEBUG
996 if (row_data.getDiffN().size1() != row_data.getN().size1())
997 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY, "wrong size 1");
998 if (row_data.getDiffN().size2() != row_data.getN().size2() * SPACE_DIM) {
999 MOFEM_LOG("SELF", Sev::error)
1000 << "Side " << rowSide << " " << CN::EntityTypeName(rowType);
1001 MOFEM_LOG("SELF", Sev::error) << row_data.getN();
1002 MOFEM_LOG("SELF", Sev::error) << row_data.getDiffN();
1003 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY, "wrong size 2");
1004 }
1005
1006 if (col_data.getDiffN().size1() != col_data.getN().size1())
1007 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY, "wrong size 1");
1008 if (col_data.getDiffN().size2() != col_data.getN().size2() * SPACE_DIM) {
1009 MOFEM_LOG("SELF", Sev::error)
1010 << "Side " << rowSide << " " << CN::EntityTypeName(rowType);
1011 MOFEM_LOG("SELF", Sev::error) << col_data.getN();
1012 MOFEM_LOG("SELF", Sev::error) << col_data.getDiffN();
1013 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY, "wrong size 2");
1014 }
1015#endif
1016
1017 if constexpr (I) {
1018
1019 auto t_h = getFTensor0FromVec(*hPtr);
1020 auto t_grad_g = getFTensor1FromMat<SPACE_DIM>(*gradGPtr);
1021
1022 for (int gg = 0; gg != nbIntegrationPts; gg++) {
1023
1024 const double r = t_coords(0);
1025 const double alpha = t_w * vol * cylindrical(r);
1026
1027 int rr = 0;
1028 for (; rr != nbRows; ++rr) {
1029
1030 auto t_col_base = col_data.getFTensor0N(gg, 0);
1031 auto t_col_diff_base = col_data.getFTensor1DiffN<SPACE_DIM>(gg, 0);
1032
1033 for (int cc = 0; cc != nbCols; ++cc) {
1034
1035 locMat(rr, cc) += (t_row_base * t_col_base * alpha);
1036
1037 ++t_col_base;
1038 ++t_col_diff_base;
1039 }
1040
1041 ++t_row_base;
1042 ++t_row_diff_base;
1043 }
1044
1045 for (; rr < nbRowBaseFunctions; ++rr) {
1046 ++t_row_base;
1047 ++t_row_diff_base;
1048 }
1049
1050 ++t_h;
1051 ++t_grad_g;
1052 ++t_w;
1053 ++t_coords;
1054 }
1055
1056 } else {
1057
1058 auto t_h = getFTensor0FromVec(*hPtr);
1059 auto t_grad_g = getFTensor1FromMat<SPACE_DIM>(*gradGPtr);
1060 auto t_u = getFTensor1FromMat<U_FIELD_DIM>(*uPtr);
1061
1062 auto ts_a = getTSa();
1063
1064 for (int gg = 0; gg != nbIntegrationPts; gg++) {
1065
1066 const double r = t_coords(0);
1067 const double alpha = t_w * vol * cylindrical(r);
1068
1069 auto m_dh = get_M_dh(t_h) * alpha;
1070 int rr = 0;
1071 for (; rr != nbRows; ++rr) {
1072
1073 auto t_col_base = col_data.getFTensor0N(gg, 0);
1074 auto t_col_diff_base = col_data.getFTensor1DiffN<SPACE_DIM>(gg, 0);
1075
1076 for (int cc = 0; cc != nbCols; ++cc) {
1077
1078 locMat(rr, cc) += (t_row_base * t_col_base * alpha) * ts_a;
1079 locMat(rr, cc) +=
1080 (t_row_base * alpha) * (t_col_diff_base(i) * t_u(i));
1081 locMat(rr, cc) +=
1082 (t_row_diff_base(i) * t_grad_g(i)) * (t_col_base * m_dh);
1083
1084 ++t_col_base;
1085 ++t_col_diff_base;
1086 }
1087
1088 ++t_row_base;
1089 ++t_row_diff_base;
1090 }
1091
1092 for (; rr < nbRowBaseFunctions; ++rr) {
1093 ++t_row_base;
1094 ++t_row_diff_base;
1095 }
1096
1097 ++t_u;
1098 ++t_h;
1099 ++t_grad_g;
1100 ++t_w;
1101 ++t_coords;
1102 }
1103 }
1104
1106 }
constexpr int SPACE_DIM
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:346
@ MOFEM_DATA_INCONSISTENCY
Definition: definitions.h:31
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:416
auto cylindrical
auto get_M_dh
#define MOFEM_LOG(channel, severity)
Log.
Definition: LogManager.hpp:308
FTensor::Index< 'i', SPACE_DIM > i
int r
Definition: sdf.py:5
constexpr IntegrationType I

Member Data Documentation

◆ gradGPtr

template<bool I>
boost::shared_ptr<MatrixDouble> FreeSurfaceOps::OpLhsH_dH< I >::gradGPtr
private

Definition at line 1111 of file FreeSurfaceOps.hpp.

◆ hPtr

template<bool I>
boost::shared_ptr<VectorDouble> FreeSurfaceOps::OpLhsH_dH< I >::hPtr
private

Definition at line 1110 of file FreeSurfaceOps.hpp.

◆ uPtr

template<bool I>
boost::shared_ptr<MatrixDouble> FreeSurfaceOps::OpLhsH_dH< I >::uPtr
private

Definition at line 1109 of file FreeSurfaceOps.hpp.


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