v0.13.0
Public Member Functions | Private Attributes | List of all members
StdRDOperators::OpComputeSlowValue Struct Reference

#include <users_modules/softmech/chemo_mech/src/rd_stdOperators.hpp>

Inheritance diagram for StdRDOperators::OpComputeSlowValue:
[legend]
Collaboration diagram for StdRDOperators::OpComputeSlowValue:
[legend]

Public Member Functions

 OpComputeSlowValue (std::string mass_field, boost::shared_ptr< PreviousData > &data1, boost::shared_ptr< PreviousData > &data2, boost::shared_ptr< PreviousData > &data3, std::map< int, BlockData > &block_map)
 
MoFEMErrorCode doWork (int side, EntityType type, EntData &data)
 

Private Attributes

std::string massField
 
boost::shared_ptr< PreviousDatacommonData1
 
boost::shared_ptr< PreviousDatacommonData2
 
boost::shared_ptr< PreviousDatacommonData3
 
std::map< int, BlockDatasetOfBlock
 

Detailed Description

Definition at line 121 of file rd_stdOperators.hpp.

Constructor & Destructor Documentation

◆ OpComputeSlowValue()

StdRDOperators::OpComputeSlowValue::OpComputeSlowValue ( std::string  mass_field,
boost::shared_ptr< PreviousData > &  data1,
boost::shared_ptr< PreviousData > &  data2,
boost::shared_ptr< PreviousData > &  data3,
std::map< int, BlockData > &  block_map 
)

Definition at line 122 of file rd_stdOperators.hpp.

127  : OpEle(mass_field, OpEle::OPROW), commonData1(data1), commonData2(data2),
128  commonData3(data3), massField(mass_field), setOfBlock(block_map) {}
FaceElementForcesAndSourcesCore::UserDataOperator OpEle
std::map< int, BlockData > setOfBlock
boost::shared_ptr< PreviousData > commonData2
boost::shared_ptr< PreviousData > commonData3
boost::shared_ptr< PreviousData > commonData1

Member Function Documentation

◆ doWork()

MoFEMErrorCode StdRDOperators::OpComputeSlowValue::doWork ( int  side,
EntityType  type,
EntData data 
)

Definition at line 129 of file rd_stdOperators.hpp.

129  {
131  boost::shared_ptr<VectorDouble> slow_value_ptr1(commonData1,
132  &commonData1->slow_values);
133  boost::shared_ptr<VectorDouble> slow_value_ptr2(commonData2,
134  &commonData2->slow_values);
135  boost::shared_ptr<VectorDouble> slow_value_ptr3(commonData3,
136  &commonData3->slow_values);
137 
138  VectorDouble &vec1 = *slow_value_ptr1;
139  VectorDouble &vec2 = *slow_value_ptr2;
140  VectorDouble &vec3 = *slow_value_ptr3;
141  const int nb_integration_pts = getGaussPts().size2();
142  if (type == MBVERTEX) {
143  vec1.resize(nb_integration_pts, false);
144  vec2.resize(nb_integration_pts, false);
145  vec3.resize(nb_integration_pts, false);
146  vec1.clear();
147  vec2.clear();
148  vec3.clear();
149  }
150  const int nb_dofs = data.getIndices().size();
151 
152  if (nb_dofs) {
153  auto find_block_data = [&]() {
154  EntityHandle fe_ent = getFEEntityHandle();
155  BlockData *block_raw_ptr = nullptr;
156  for (auto &m : setOfBlock) {
157  if (m.second.block_ents.find(fe_ent) != m.second.block_ents.end()) {
158  block_raw_ptr = &m.second;
159  break;
160  }
161  }
162  return block_raw_ptr;
163  };
164 
165  auto block_data_ptr = find_block_data();
166  if (!block_data_ptr)
167  SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY, "Block not found");
168 
169  auto &block_data = *block_data_ptr;
170 
171  const int nb_integration_pts = getGaussPts().size2();
172 
173  auto t_slow_values1 = getFTensor0FromVec(vec1);
174  auto t_slow_values2 = getFTensor0FromVec(vec2);
175  auto t_slow_values3 = getFTensor0FromVec(vec3);
176 
177  auto t_mass_values1 = getFTensor0FromVec(commonData1->values);
178  auto t_mass_values2 = getFTensor0FromVec(commonData2->values);
179  auto t_mass_values3 = getFTensor0FromVec(commonData3->values);
180 
181  // cout << "r1 : " << block_data.rate[0] << endl;
182 
183  for (int gg = 0; gg != nb_integration_pts; ++gg) {
184  t_slow_values1 = block_data.rate[0] * t_mass_values1 *
185  (1.0 - block_data.coef(0, 0) * t_mass_values1 -
186  block_data.coef(0, 1) * t_mass_values2 -
187  block_data.coef(0, 2) * t_mass_values3);
188  t_slow_values2 = block_data.rate[1] * t_mass_values2 *
189  (1.0 - block_data.coef(1, 0) * t_mass_values1 -
190  block_data.coef(1, 1) * t_mass_values2 -
191  block_data.coef(1, 2) * t_mass_values3);
192 
193  t_slow_values3 = block_data.rate[2] * t_mass_values3 *
194  (1.0 - block_data.coef(2, 0) * t_mass_values1 -
195  block_data.coef(2, 1) * t_mass_values2 -
196  block_data.coef(2, 2) * t_mass_values3);
197  ++t_slow_values1;
198  ++t_slow_values2;
199  ++t_slow_values3;
200 
201  ++t_mass_values1;
202  ++t_mass_values2;
203  ++t_mass_values3;
204  }
205  }
207  }
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:359
@ MOFEM_DATA_INCONSISTENCY
Definition: definitions.h:44
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:429
UBlasVector< double > VectorDouble
Definition: Types.hpp:79
static auto getFTensor0FromVec(ublas::vector< T, A > &data)
Get tensor rank 0 (scalar) form data vector.
Definition: Templates.hpp:149
FTensor::Index< 'm', 3 > m
const VectorInt & getIndices() const
Get global indices of dofs on entity.

Member Data Documentation

◆ commonData1

boost::shared_ptr<PreviousData> StdRDOperators::OpComputeSlowValue::commonData1
private

Definition at line 211 of file rd_stdOperators.hpp.

◆ commonData2

boost::shared_ptr<PreviousData> StdRDOperators::OpComputeSlowValue::commonData2
private

Definition at line 212 of file rd_stdOperators.hpp.

◆ commonData3

boost::shared_ptr<PreviousData> StdRDOperators::OpComputeSlowValue::commonData3
private

Definition at line 213 of file rd_stdOperators.hpp.

◆ massField

std::string StdRDOperators::OpComputeSlowValue::massField
private

Definition at line 210 of file rd_stdOperators.hpp.

◆ setOfBlock

std::map<int, BlockData> StdRDOperators::OpComputeSlowValue::setOfBlock
private

Definition at line 214 of file rd_stdOperators.hpp.


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