v0.16.3
Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
MatOps::MatOpsDataImpl Struct Reference
Inheritance diagram for MatOps::MatOpsDataImpl:
[legend]
Collaboration diagram for MatOps::MatOpsDataImpl:
[legend]

Classes

struct  Data
 

Public Types

using MatrixPtr = MatOpsData::MatrixPtr
 
using StateMatrixPtr = MatOpsData::StateMatrixPtr
 
using DataContainer = boost::multi_index::multi_index_container< Data, boost::multi_index::indexed_by< boost::multi_index::sequenced< boost::multi_index::tag< DataSequence_mi_tag > >, boost::multi_index::hashed_unique< boost::multi_index::tag< DataName_mi_tag >, boost::multi_index::member< Data, std::string, &Data::name > > > >
 
- Public Types inherited from MatOps::MatOpsData
using MatrixPtr = boost::shared_ptr< MatrixDouble >
 
using StateMatrixPtr = boost::shared_ptr< MatrixAdaptor >
 

Public Member Functions

boost::shared_ptr< UserDatagetUserDataPtr () const override
 Get the optional user-defined material data.
 
void setUserDataPtr (boost::shared_ptr< UserData > user_data_ptr) override
 Set data owned by this container; back-references should be weak.
 
auto & getDataCommonByName ()
 
auto & getDataActiveByName ()
 
auto & getDataDependentByName ()
 
auto & getDataDependentDerivativesByName ()
 
auto & getStateDataByName ()
 
auto & getStateDataBySequence ()
 
std::pair< bool, MatrixPtrinsertCommonData (const std::string &name, const MatrixDouble &data=MatrixDouble(), int shift=0) override
 
std::pair< bool, MatrixPtrinsertActiveData (const std::string &name, const MatrixDouble &data=MatrixDouble(), int shift=0) override
 
std::pair< bool, MatrixPtrinsertDependentData (const std::string &name, const MatrixDouble &data=MatrixDouble(), int shift=0) override
 
std::pair< bool, MatrixPtrinsertDependentDerivativesData (const std::string &name, const MatrixDouble &data=MatrixDouble(), int shift=0) override
 
MatrixPtr getCommonDataPtr (const std::string &name) override
 
MatrixPtr getActiveDataPtr (const std::string &name) override
 
MatrixPtr getDependentDataPtr (const std::string &name) override
 
MatrixPtr getDependentDerivativesDataPtr (const std::string &name) override
 
StateMatrixPtr getStateDataPtr (const std::string &name, EntityHandle ent, int gg) override
 Start each integration-point sweep at gg == 0 to refresh cached tag storage.
 
StateTags getStateTags () const override
 
MoFEMErrorCode bindStateTag (MoFEM::Interface &m_field, const std::string &name, int num_components) override
 
MoFEMErrorCode setupStateData () override
 
MoFEMErrorCode setActiveContinuousVector (std::vector< double > &active_variables) override
 
MoFEMErrorCode setDependentContinuousVector (std::vector< double > &dependent_variables) override
 
MoFEMErrorCode setDependentDerivativesContinuousVector (std::vector< double > &dependent_variables_derivatives) override
 
MoFEMErrorCode getActiveContinuousVector (const std::vector< double > &active_variables) override
 
MoFEMErrorCode getDependentContinuousVector (const std::vector< double > &dependent_variables) override
 
MoFEMErrorCode getDependentDerivativesContinuousVector (const std::vector< double > &dependent_variables_derivatives) override
 
- Public Member Functions inherited from MatOps::MatOpsData
virtual ~MatOpsData ()=default
 

Protected Member Functions

MoFEMErrorCode setContinuousVector (DataContainer &data_container, std::vector< double > &variables)
 
MoFEMErrorCode getContinuousVector (DataContainer &data_container, const std::vector< double > &variables)
 

Protected Attributes

DataContainer dataCommon
 
DataContainer dataActive
 
DataContainer dataDependent
 
DataContainer dataDependentDerivatives
 
DataContainer dataState
 
MoFEM::InterfacemFieldPtr = nullptr
 
boost::shared_ptr< UserDatauserDataPtr
 

Detailed Description

Definition at line 99 of file MatOps.cpp.

Member Typedef Documentation

◆ DataContainer

using MatOps::MatOpsDataImpl::DataContainer = boost::multi_index::multi_index_container< Data, boost::multi_index::indexed_by< boost::multi_index::sequenced< boost::multi_index::tag<DataSequence_mi_tag> >, boost::multi_index::hashed_unique< boost::multi_index::tag<DataName_mi_tag>, boost::multi_index::member<Data, std::string, &Data::name> >> >

Definition at line 139 of file MatOps.cpp.

◆ MatrixPtr

Definition at line 100 of file MatOps.cpp.

◆ StateMatrixPtr

Definition at line 101 of file MatOps.cpp.

Member Function Documentation

◆ bindStateTag()

MoFEMErrorCode MatOps::MatOpsDataImpl::bindStateTag ( MoFEM::Interface m_field,
const std::string &  name,
int  num_components 
)
inlineoverridevirtual

Implements MatOps::MatOpsData.

Definition at line 358 of file MatOps.cpp.

360 {
362 for (const auto &state_data : getStateDataBySequence()) {
363 state_data.resetStateCache();
364 }
365 mFieldPtr = &m_field;
366
367 if (name.empty()) {
368 SETERRQ(PETSC_COMM_SELF, MOFEM_OPERATION_UNSUCCESSFUL,
369 "State data name can not be empty");
370 }
371
372 if (num_components <= 0) {
373 SETERRQ(PETSC_COMM_SELF, MOFEM_OPERATION_UNSUCCESSFUL,
374 "State data %s has non-positive number of components %d",
375 name.c_str(), num_components);
376 }
377
378 auto &state_by_name = getStateDataByName();
379 auto it = state_by_name.find(name);
380 if (it != state_by_name.end()) {
381 if (it->numComponents != num_components) {
382 SETERRQ(PETSC_COMM_SELF, MOFEM_OPERATION_UNSUCCESSFUL,
383 "State data %s already exists with incompatible size",
384 name.c_str());
385 }
386 } else {
387 state_by_name.insert(Data{name, num_components});
388 }
389
391 }
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ MOFEM_OPERATION_UNSUCCESSFUL
Definition definitions.h:34
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
MoFEM::Interface * mFieldPtr
Definition MatOps.cpp:506
auto & getStateDataByName()
Definition MatOps.cpp:168
auto & getStateDataBySequence()
Definition MatOps.cpp:172

◆ getActiveContinuousVector()

MoFEMErrorCode MatOps::MatOpsDataImpl::getActiveContinuousVector ( const std::vector< double > &  active_variables)
inlineoverridevirtual

Implements MatOps::MatOpsData.

Definition at line 433 of file MatOps.cpp.

434 {
435 return getContinuousVector(dataActive, active_variables);
436 }
DataContainer dataActive
Definition MatOps.cpp:502
MoFEMErrorCode getContinuousVector(DataContainer &data_container, const std::vector< double > &variables)
Definition MatOps.cpp:474

◆ getActiveDataPtr()

MatrixPtr MatOps::MatOpsDataImpl::getActiveDataPtr ( const std::string &  name)
inlineoverridevirtual

Implements MatOps::MatOpsData.

Definition at line 228 of file MatOps.cpp.

228 {
229 auto &data_by_name = getDataActiveByName();
230 auto it = data_by_name.find(name);
231 if (it == data_by_name.end()) {
233 "Active data with name " + name + " not found");
234 return MatrixPtr();
235 }
236 return boost::shared_ptr<MatrixDouble>(this->shared_from_this(), &it->data);
237 }
#define CHK_THROW_MESSAGE(err, msg)
Check and throw MoFEM exception.
auto & getDataActiveByName()
Definition MatOps.cpp:156
MatOpsData::MatrixPtr MatrixPtr
Definition MatOps.cpp:100

◆ getCommonDataPtr()

MatrixPtr MatOps::MatOpsDataImpl::getCommonDataPtr ( const std::string &  name)
inlineoverridevirtual

Implements MatOps::MatOpsData.

Definition at line 217 of file MatOps.cpp.

217 {
218 auto &data_by_name = getDataCommonByName();
219 auto it = data_by_name.find(name);
220 if (it == data_by_name.end()) {
222 "Common data with name " + name + " not found");
223 return MatrixPtr();
224 }
225 return boost::shared_ptr<MatrixDouble>(this->shared_from_this(), &it->data);
226 }
auto & getDataCommonByName()
Definition MatOps.cpp:152

◆ getContinuousVector()

MoFEMErrorCode MatOps::MatOpsDataImpl::getContinuousVector ( DataContainer data_container,
const std::vector< double > &  variables 
)
inlineprotected

Definition at line 474 of file MatOps.cpp.

475 {
477
478 auto &data_by_sequence =
479 boost::multi_index::get<DataSequence_mi_tag>(data_container);
480
481 int nb_variables = 0;
482 for (const auto &d : data_by_sequence)
483 nb_variables += d.data.data().size();
484
485 if (variables.size() != static_cast<size_t>(nb_variables)) {
486 SETERRQ(PETSC_COMM_SELF, MOFEM_OPERATION_UNSUCCESSFUL,
487 "Inconsistent size of continuous vector");
488 }
489
490 int shift = 0;
491 for (const auto &d : data_by_sequence) {
492 d.shift = shift;
493 for (auto it = d.data.data().begin(); it != d.data.data().end();
494 ++it, ++shift)
495 *it = variables[shift];
496 }
497
499 }
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...

◆ getDataActiveByName()

auto & MatOps::MatOpsDataImpl::getDataActiveByName ( )
inline

Definition at line 156 of file MatOps.cpp.

156 {
157 return boost::multi_index::get<DataName_mi_tag>(dataActive);
158 }

◆ getDataCommonByName()

auto & MatOps::MatOpsDataImpl::getDataCommonByName ( )
inline

Definition at line 152 of file MatOps.cpp.

152 {
153 return boost::multi_index::get<DataName_mi_tag>(dataCommon);
154 }
DataContainer dataCommon
Definition MatOps.cpp:501

◆ getDataDependentByName()

auto & MatOps::MatOpsDataImpl::getDataDependentByName ( )
inline

Definition at line 160 of file MatOps.cpp.

160 {
161 return boost::multi_index::get<DataName_mi_tag>(dataDependent);
162 }
DataContainer dataDependent
Definition MatOps.cpp:503

◆ getDataDependentDerivativesByName()

auto & MatOps::MatOpsDataImpl::getDataDependentDerivativesByName ( )
inline

Definition at line 164 of file MatOps.cpp.

164 {
165 return boost::multi_index::get<DataName_mi_tag>(dataDependentDerivatives);
166 }
DataContainer dataDependentDerivatives
Definition MatOps.cpp:504

◆ getDependentContinuousVector()

MoFEMErrorCode MatOps::MatOpsDataImpl::getDependentContinuousVector ( const std::vector< double > &  dependent_variables)
inlineoverridevirtual

Implements MatOps::MatOpsData.

Definition at line 438 of file MatOps.cpp.

439 {
440 return getContinuousVector(dataDependent, dependent_variables);
441 }

◆ getDependentDataPtr()

MatrixPtr MatOps::MatOpsDataImpl::getDependentDataPtr ( const std::string &  name)
inlineoverridevirtual

Implements MatOps::MatOpsData.

Definition at line 239 of file MatOps.cpp.

239 {
240 auto &data_by_name = getDataDependentByName();
241 auto it = data_by_name.find(name);
242 if (it == data_by_name.end()) {
244 "Dependent data with name " + name + " not found");
245 return MatrixPtr();
246 }
247 return boost::shared_ptr<MatrixDouble>(this->shared_from_this(), &it->data);
248 }
auto & getDataDependentByName()
Definition MatOps.cpp:160

◆ getDependentDerivativesContinuousVector()

MoFEMErrorCode MatOps::MatOpsDataImpl::getDependentDerivativesContinuousVector ( const std::vector< double > &  dependent_variables_derivatives)
inlineoverridevirtual

Implements MatOps::MatOpsData.

Definition at line 443 of file MatOps.cpp.

444 {
446 dependent_variables_derivatives);
447 }

◆ getDependentDerivativesDataPtr()

MatrixPtr MatOps::MatOpsDataImpl::getDependentDerivativesDataPtr ( const std::string &  name)
inlineoverridevirtual

Implements MatOps::MatOpsData.

Definition at line 250 of file MatOps.cpp.

250 {
251 auto &data_by_name = getDataDependentDerivativesByName();
252 auto it = data_by_name.find(name);
253 if (it == data_by_name.end()) {
255 "Dependent derivatives data with name " + name +
256 " not found");
257 return MatrixPtr();
258 }
259 return boost::shared_ptr<MatrixDouble>(this->shared_from_this(), &it->data);
260 }
auto & getDataDependentDerivativesByName()
Definition MatOps.cpp:164

◆ getStateDataByName()

auto & MatOps::MatOpsDataImpl::getStateDataByName ( )
inline

Definition at line 168 of file MatOps.cpp.

168 {
169 return boost::multi_index::get<DataName_mi_tag>(dataState);
170 }
DataContainer dataState
Definition MatOps.cpp:505

◆ getStateDataBySequence()

auto & MatOps::MatOpsDataImpl::getStateDataBySequence ( )
inline

Definition at line 172 of file MatOps.cpp.

172 {
173 return boost::multi_index::get<DataSequence_mi_tag>(dataState);
174 }

◆ getStateDataPtr()

StateMatrixPtr MatOps::MatOpsDataImpl::getStateDataPtr ( const std::string &  name,
EntityHandle  ent,
int  gg 
)
inlineoverridevirtual

Start each integration-point sweep at gg == 0 to refresh cached tag storage.

Implements MatOps::MatOpsData.

Definition at line 262 of file MatOps.cpp.

263 {
264 auto &state_by_name = getStateDataByName();
265 auto it = state_by_name.find(name);
266 if (it == state_by_name.end()) {
268 "State data with name " + name + " not found");
269 return StateMatrixPtr();
270 }
271 if (!mFieldPtr) {
273 "MoFEM interface for state data is not set");
274 return StateMatrixPtr();
275 }
276 if (!ent) {
278 "State entity is not set");
279 return StateMatrixPtr();
280 }
281 if (gg < 0) {
283 "State gauss point out of range");
284 return StateMatrixPtr();
285 }
286 if (!it->tag) {
289 "State data " + name +
290 " is not initialised; call setupStateData() after binding");
291 return StateMatrixPtr();
292 }
293 const auto required_size = it->numComponents * (gg + 1);
294 if (gg == 0 || ent != it->cachedEntity || !it->cachedPtr ||
295 required_size > it->cachedSize) {
296 it->resetStateCache();
297 double *tag_data = nullptr;
298 int tag_size = 0;
299 auto &moab = mFieldPtr->get_moab();
300 auto rval = moab.tag_get_by_ptr(it->tag, &ent, 1,
301 (const void **)&tag_data, &tag_size);
302 if (tag_data && tag_size > 0 && tag_size % it->numComponents != 0) {
304 "Inconsistent state tag size for " + name);
305 return StateMatrixPtr();
306 }
307 if (rval != MB_SUCCESS || !tag_data || tag_size < required_size) {
308 std::vector<double> storage(required_size, 0);
309 if (rval == MB_SUCCESS && tag_data && tag_size > 0) {
310 std::copy_n(tag_data, std::min(tag_size, required_size),
311 storage.data());
312 }
313 void const *storage_ptr[] = {storage.data()};
314 int storage_size = required_size;
316 moab.tag_set_by_ptr(it->tag, &ent, 1, storage_ptr, &storage_size),
317 "Failed to set state data " + name);
318 CHK_THROW_MESSAGE(moab.tag_get_by_ptr(it->tag, &ent, 1,
319 (const void **)&tag_data,
320 &tag_size),
321 "Failed to get state data " + name);
322 }
323 if (!tag_data || tag_size < required_size ||
324 (tag_size > 0 && tag_size % it->numComponents != 0)) {
326 "Inconsistent state tag size for " + name);
327 return StateMatrixPtr();
328 }
329
330 it->cachedEntity = ent;
331 it->cachedPtr = tag_data;
332 it->cachedSize = tag_size;
333 }
334
335 auto *ptr = it->cachedPtr + gg * it->numComponents;
336 return boost::make_shared<MatrixAdaptor>(
337 it->numComponents, 1,
338 ublas::shallow_array_adaptor<double>(it->numComponents, ptr));
339 }
static MoFEMErrorCodeGeneric< moab::ErrorCode > rval
MatOpsData::StateMatrixPtr StateMatrixPtr
Definition MatOps.cpp:101
virtual moab::Interface & get_moab()=0

◆ getStateTags()

StateTags MatOps::MatOpsDataImpl::getStateTags ( ) const
inlineoverridevirtual

Implements MatOps::MatOpsData.

Definition at line 341 of file MatOps.cpp.

341 {
342 StateTags state_tags;
343 const auto &state_by_sequence =
344 boost::multi_index::get<DataSequence_mi_tag>(dataState);
345
346 for (const auto &state_data : state_by_sequence) {
347 if (!state_data.tag || state_data.name.empty() ||
348 state_data.numComponents <= 0)
349 continue;
350 state_tags.push_back(
351 {state_data.name, state_data.tag, state_data.numComponents});
352 }
353
354 sortStateTags(state_tags);
355 return state_tags;
356 }
static void sortStateTags(StateTags &state_tags)
Definition MatOps.cpp:19
std::vector< StateTag > StateTags
Definition MatOps.hpp:21

◆ getUserDataPtr()

boost::shared_ptr< UserData > MatOps::MatOpsDataImpl::getUserDataPtr ( ) const
inlineoverridevirtual

Get the optional user-defined material data.

Implements MatOps::MatOpsData.

Definition at line 103 of file MatOps.cpp.

103 {
104 return userDataPtr;
105 }
boost::shared_ptr< UserData > userDataPtr
Definition MatOps.cpp:507

◆ insertActiveData()

std::pair< bool, MatrixPtr > MatOps::MatOpsDataImpl::insertActiveData ( const std::string &  name,
const MatrixDouble data = MatrixDouble(),
int  shift = 0 
)
inlineoverridevirtual

Implements MatOps::MatOpsData.

Definition at line 187 of file MatOps.cpp.

189 {
190 auto insert_ret = getDataActiveByName().insert(Data{name, data, shift});
191 return {insert_ret.second,
192 boost::shared_ptr<MatrixDouble>(this->shared_from_this(),
193 &insert_ret.first->data)};
194 }

◆ insertCommonData()

std::pair< bool, MatrixPtr > MatOps::MatOpsDataImpl::insertCommonData ( const std::string &  name,
const MatrixDouble data = MatrixDouble(),
int  shift = 0 
)
inlineoverridevirtual

Implements MatOps::MatOpsData.

Definition at line 177 of file MatOps.cpp.

179 {
180 auto insert_ret = getDataCommonByName().insert(Data{name, data, shift});
181 return {insert_ret.second,
182 boost::shared_ptr<MatrixDouble>(this->shared_from_this(),
183 &insert_ret.first->data)};
184 }

◆ insertDependentData()

std::pair< bool, MatrixPtr > MatOps::MatOpsDataImpl::insertDependentData ( const std::string &  name,
const MatrixDouble data = MatrixDouble(),
int  shift = 0 
)
inlineoverridevirtual

Implements MatOps::MatOpsData.

Definition at line 197 of file MatOps.cpp.

199 {
200 auto insert_ret = getDataDependentByName().insert(Data{name, data, shift});
201 return {insert_ret.second,
202 boost::shared_ptr<MatrixDouble>(this->shared_from_this(),
203 &insert_ret.first->data)};
204 }

◆ insertDependentDerivativesData()

std::pair< bool, MatrixPtr > MatOps::MatOpsDataImpl::insertDependentDerivativesData ( const std::string &  name,
const MatrixDouble data = MatrixDouble(),
int  shift = 0 
)
inlineoverridevirtual

Implements MatOps::MatOpsData.

Definition at line 207 of file MatOps.cpp.

209 {
210 auto insert_ret =
211 getDataDependentDerivativesByName().insert(Data{name, data, shift});
212 return {insert_ret.second,
213 boost::shared_ptr<MatrixDouble>(this->shared_from_this(),
214 &insert_ret.first->data)};
215 }

◆ setActiveContinuousVector()

MoFEMErrorCode MatOps::MatOpsDataImpl::setActiveContinuousVector ( std::vector< double > &  active_variables)
inlineoverridevirtual

Implements MatOps::MatOpsData.

Definition at line 418 of file MatOps.cpp.

418 {
419 return setContinuousVector(dataActive, active_variables);
420 }
MoFEMErrorCode setContinuousVector(DataContainer &data_container, std::vector< double > &variables)
Definition MatOps.cpp:450

◆ setContinuousVector()

MoFEMErrorCode MatOps::MatOpsDataImpl::setContinuousVector ( DataContainer data_container,
std::vector< double > &  variables 
)
inlineprotected

Definition at line 450 of file MatOps.cpp.

451 {
453
454 auto &data_by_sequence =
455 boost::multi_index::get<DataSequence_mi_tag>(data_container);
456
457 int nb_variables = 0;
458 for (const auto &d : data_by_sequence)
459 nb_variables += d.data.data().size();
460
461 variables.resize(nb_variables);
462
463 int shift = 0;
464 for (const auto &d : data_by_sequence) {
465 d.shift = shift;
466 for (auto it = d.data.data().begin(); it != d.data.data().end();
467 ++it, ++shift)
468 variables[shift] = *it;
469 }
470
472 }

◆ setDependentContinuousVector()

MoFEMErrorCode MatOps::MatOpsDataImpl::setDependentContinuousVector ( std::vector< double > &  dependent_variables)
inlineoverridevirtual

Implements MatOps::MatOpsData.

Definition at line 422 of file MatOps.cpp.

423 {
424 return setContinuousVector(dataDependent, dependent_variables);
425 }

◆ setDependentDerivativesContinuousVector()

MoFEMErrorCode MatOps::MatOpsDataImpl::setDependentDerivativesContinuousVector ( std::vector< double > &  dependent_variables_derivatives)
inlineoverridevirtual

Implements MatOps::MatOpsData.

Definition at line 427 of file MatOps.cpp.

428 {
430 dependent_variables_derivatives);
431 }

◆ setupStateData()

MoFEMErrorCode MatOps::MatOpsDataImpl::setupStateData ( )
inlineoverridevirtual

Implements MatOps::MatOpsData.

Definition at line 393 of file MatOps.cpp.

393 {
395 if (!mFieldPtr) {
396 SETERRQ(PETSC_COMM_SELF, MOFEM_OPERATION_UNSUCCESSFUL,
397 "MoFEM interface for state data is not set");
398 }
399
400 for (auto &state_data : getStateDataBySequence()) {
401 state_data.resetStateCache();
402 Tag tag = 0;
403 const auto state_tag_name = "_ADOLC_STATE_" +
404 std::to_string(state_data.numComponents) +
405 "_" + state_data.name;
406 CHKERR mFieldPtr->get_moab().tag_get_handle(
407 state_tag_name.c_str(), 0, MB_TYPE_DOUBLE, tag,
408 MB_TAG_CREAT | MB_TAG_VARLEN | MB_TAG_SPARSE, PETSC_NULLPTR);
409 getStateDataBySequence().modify(
410 getStateDataBySequence().iterator_to(state_data),
411 [&](auto &data) { data.tag = tag; });
412 }
413
415 }
#define CHKERR
Inline error check.

◆ setUserDataPtr()

void MatOps::MatOpsDataImpl::setUserDataPtr ( boost::shared_ptr< UserData user_data_ptr)
inlineoverridevirtual

Set data owned by this container; back-references should be weak.

Implements MatOps::MatOpsData.

Definition at line 107 of file MatOps.cpp.

107 {
108 userDataPtr = user_data_ptr;
109 }

Member Data Documentation

◆ dataActive

DataContainer MatOps::MatOpsDataImpl::dataActive
protected

Definition at line 502 of file MatOps.cpp.

◆ dataCommon

DataContainer MatOps::MatOpsDataImpl::dataCommon
protected

Definition at line 501 of file MatOps.cpp.

◆ dataDependent

DataContainer MatOps::MatOpsDataImpl::dataDependent
protected

Definition at line 503 of file MatOps.cpp.

◆ dataDependentDerivatives

DataContainer MatOps::MatOpsDataImpl::dataDependentDerivatives
protected

Definition at line 504 of file MatOps.cpp.

◆ dataState

DataContainer MatOps::MatOpsDataImpl::dataState
protected

Definition at line 505 of file MatOps.cpp.

◆ mFieldPtr

MoFEM::Interface* MatOps::MatOpsDataImpl::mFieldPtr = nullptr
protected

Definition at line 506 of file MatOps.cpp.

◆ userDataPtr

boost::shared_ptr<UserData> MatOps::MatOpsDataImpl::userDataPtr
protected

Definition at line 507 of file MatOps.cpp.


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