v0.15.0
Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | Private Attributes | List of all members
SolutionMapping Struct Reference

#include "users_modules/multifield-thermoplasticity-private/src/SolutionMapping.hpp"

Collaboration diagram for SolutionMapping:
[legend]

Public Member Functions

 SolutionMapping (MoFEM::Interface &m_field)
 
MoFEMErrorCode mapFields (SmartPetscObj< DM > &intermediateDM, Range elsToRemove=Range(), Range elsToAdd=Range(), Range elsToFlip=Range(), PetscInt numVecs=1, Vec vecsToMapFrom[]=PETSC_NULLPTR, Vec vecsToMapTo[]=PETSC_NULLPTR)
 
MoFEMErrorCode reSetUp (std::vector< std::string > fIelds, std::vector< int > oRders, BitRefLevel bIt)
 

Private Member Functions

MoFEMErrorCode setUp (SmartPetscObj< DM > &subDM, SmartPetscObj< DM > &intermediateDM, Range elsToAdd, Range elsToFlip)
 
MoFEMErrorCode removeDofs (Range elsToRemove, Range elsToAdd)
 
MoFEMErrorCode pushOperators (Range elsToFlip, Range elsToAdd, Vec vecIn=PETSC_NULLPTR)
 
MoFEMErrorCode solveMap (SmartPetscObj< DM > &subDM, SmartPetscObj< DM > &intermediateDM, PetscInt numVecs, Vec vecsToMapFrom[], Vec vecsToMapTo[])
 
MoFEMErrorCode postProcess ()
 

Private Attributes

MoFEM::Interfacem_field
 
Range elsToRemove
 
Range elsToAdd
 
Range elsToFlip
 
SmartPetscObj< DM > subDM
 
SmartPetscObj< DM > intermediateDM
 
boost::shared_ptr< DomainElefeRhs
 
boost::shared_ptr< DomainElefeLhs
 

Detailed Description

Examples
SolutionMapping.hpp, and thermoplastic.cpp.

Definition at line 26 of file SolutionMapping.hpp.

Constructor & Destructor Documentation

◆ SolutionMapping()

SolutionMapping::SolutionMapping ( MoFEM::Interface m_field)
Examples
SolutionMapping.hpp.

Definition at line 60 of file SolutionMapping.hpp.

60 : m_field(m_field) {
61 feRhs = boost::make_shared<DomainEle>(m_field);
62 feLhs = boost::make_shared<DomainEle>(m_field);
63}
boost::shared_ptr< DomainEle > feRhs
MoFEM::Interface & m_field
boost::shared_ptr< DomainEle > feLhs

Member Function Documentation

◆ mapFields()

MoFEMErrorCode SolutionMapping::mapFields ( SmartPetscObj< DM > &  intermediateDM,
Range  elsToRemove = Range(),
Range  elsToAdd = Range(),
Range  elsToFlip = Range(),
PetscInt  numVecs = 1,
Vec  vecsToMapFrom[] = PETSC_NULLPTR,
Vec  vecsToMapTo[] = PETSC_NULLPTR 
)
Examples
SolutionMapping.hpp, and thermoplastic.cpp.

Definition at line 65 of file SolutionMapping.hpp.

69 {
71
72 CHKERR pushOperators(els_to_flip, els_to_add);
73 CHKERR setUp(subDM, intermediate_dm, els_to_add, els_to_flip);
74 CHKERR solveMap(subDM, intermediate_dm, num_vecs, vecs_to_map_from,
75 vecs_to_map_to);
76
78};
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
MoFEMErrorCode solveMap(SmartPetscObj< DM > &subDM, SmartPetscObj< DM > &intermediateDM, PetscInt numVecs, Vec vecsToMapFrom[], Vec vecsToMapTo[])
MoFEMErrorCode setUp(SmartPetscObj< DM > &subDM, SmartPetscObj< DM > &intermediateDM, Range elsToAdd, Range elsToFlip)
MoFEMErrorCode pushOperators(Range elsToFlip, Range elsToAdd, Vec vecIn=PETSC_NULLPTR)
SmartPetscObj< DM > subDM

◆ postProcess()

MoFEMErrorCode SolutionMapping::postProcess ( )
private

◆ pushOperators()

MoFEMErrorCode SolutionMapping::pushOperators ( Range  elsToFlip,
Range  elsToAdd,
Vec  vecIn = PETSC_NULLPTR 
)
private
Examples
SolutionMapping.hpp.

Definition at line 203 of file SolutionMapping.hpp.

204 {
206
207 SmartPetscObj<Vec> smart_vec_in;
208 if (vec_in)
209 smart_vec_in = SmartPetscObj<Vec>(vec_in, true);
210
211 MOFEM_LOG("REMESHING", Sev::inform) << "Got past smart vector";
212
213 feRhs->getOpPtrVector().clear();
214
215 MOFEM_LOG("REMESHING", Sev::inform) << "Cleared RHS FE";
216
217 Simple *simple = m_field.getInterface<Simple>();
218
219 auto vol_rule = [](int, int, int ao) { return 2 * ao + geom_order; };
220
221 // feRhs->getRuleHook = vol_rule;
222 // feLhs->getRuleHook = vol_rule;
223 feRhs->getRuleHook = [](int, int, int) { return -1; };
224 feRhs->setRuleHook =
225 SetEnrichedIntegration(boost::make_shared<Range>(els_to_add));
226 feLhs->getRuleHook = [](int, int, int) { return -1; };
227 feLhs->setRuleHook =
228 SetEnrichedIntegration(boost::make_shared<Range>(els_to_add));
229
230 auto T_ptr = boost::make_shared<VectorDouble>();
231 auto TAU_ptr = boost::make_shared<VectorDouble>();
232 auto EP_ptr = boost::make_shared<MatrixDouble>();
233
234 auto set_domain_rhs = [&](auto &pip) {
236
238
239 auto old_T_ptr = boost::make_shared<VectorDouble>();
240 auto old_TAU_ptr = boost::make_shared<VectorDouble>();
241 auto old_EP_ptr = boost::make_shared<MatrixDouble>();
242
243 auto old_el_ops = [&](auto &pip) {
245
246 // get old solution
247 if (vec_in) {
248 pip.push_back(
249 new OpCalculateScalarFieldValues("T", old_T_ptr, smart_vec_in));
250 pip.push_back(
251 new OpCalculateScalarFieldValues("TAU", old_TAU_ptr, smart_vec_in));
252 pip.push_back(new OpCalculateTensor2SymmetricFieldValues<SPACE_DIM>(
253 "EP", old_EP_ptr, smart_vec_in));
254 } else {
255 pip.push_back(new OpCalculateScalarFieldValues("T", old_T_ptr));
256 pip.push_back(new OpCalculateScalarFieldValues("TAU", old_TAU_ptr));
257 pip.push_back(new OpCalculateTensor2SymmetricFieldValues<SPACE_DIM>(
258 "EP", old_EP_ptr));
259 }
260 // pip.push_back(new EdgeFlippingOps::filterScalarSolution<AT, IT>(
261 // "T", old_T_ptr, nullptr, nullptr, nullptr));
262 // pip.push_back(new EdgeFlippingOps::filterScalarSolution<AT, IT>(
263 // "TAU", old_TAU_ptr, nullptr, nullptr, nullptr));
264 // pip.push_back(new EdgeFlippingOps::filterSymTensorSolution<AT, IT,
265 // SPACE_DIM>("EP", old_EP_ptr, nullptr, nullptr, nullptr));
266
268 };
269
270 auto new_el_ops = [&](auto &pp_fe, auto &&p) {
272
273 auto new_T_ptr = boost::make_shared<VectorDouble>();
274 auto new_TAU_ptr = boost::make_shared<VectorDouble>();
275 auto new_EP_ptr = boost::make_shared<MatrixDouble>();
276 if (vec_in) {
277 pip.push_back(
278 new OpCalculateScalarFieldValues("T", new_T_ptr, smart_vec_in));
279 pip.push_back(
280 new OpCalculateScalarFieldValues("TAU", new_TAU_ptr, smart_vec_in));
281 pip.push_back(new OpCalculateTensor2SymmetricFieldValues<SPACE_DIM>(
282 "EP", new_EP_ptr, smart_vec_in));
283 } else {
284 MOFEM_LOG("REMESHING", Sev::inform) << "In other branch of child ops";
285 pip.push_back(new OpCalculateScalarFieldValues("T", new_T_ptr));
286 pip.push_back(new OpCalculateScalarFieldValues("TAU", new_TAU_ptr));
287 pip.push_back(new OpCalculateTensor2SymmetricFieldValues<SPACE_DIM>(
288 "EP", new_EP_ptr));
289 }
290
291 pip.push_back(
293 "T", old_T_ptr, nullptr, new_T_ptr, nullptr, m_field));
294 pip.push_back(
296 "TAU", old_TAU_ptr, nullptr, new_TAU_ptr, nullptr, m_field));
297 pip.push_back(
299 SPACE_DIM>(
300 "EP", old_EP_ptr, nullptr, new_EP_ptr, nullptr, m_field));
301
303 };
304
305 // create an OpLoopRange object
306 auto op_range = new OpLoopRange<DomainEleOnRange>(
307 m_field, simple->getDomainFEName(),
308 boost::make_shared<Range>(els_to_flip), Sev::noisy);
309
310 op_range->getRangeFEPtr()->getRuleHook = [](int, int, int) { return -1; };
311
312 // push operator
313 pip.push_back(op_range);
314
315 // call the parent ops from each child pipeline
316 CHK_MOAB_THROW(new_el_ops(pip, old_el_ops(op_range->getOpPtrVector())),
317 "failed to loop over child ops");
318
320 };
321
322 auto set_domain_lhs = [&](auto &pip) {
324
326
327 using OpLhsScalarLeastSquaresProj = FormsIntegrators<DomainEleOp>::Assembly<
329 pip.push_back(new OpLhsScalarLeastSquaresProj("T", "T"));
330 pip.push_back(new OpLhsScalarLeastSquaresProj("TAU", "TAU"));
331 pip.push_back(
333 "EP", "EP"));
334
336 };
337
338 CHKERR set_domain_rhs(feRhs->getOpPtrVector());
339 CHKERR set_domain_lhs(feLhs->getOpPtrVector());
340
342};
void simple(double P1[], double P2[], double P3[], double c[], const int N)
Definition acoustic.cpp:69
constexpr int SPACE_DIM
[Define dimension]
@ L2
field with C-1 continuity
Definition definitions.h:88
#define CHK_MOAB_THROW(err, msg)
Check error code of MoAB function and throw MoFEM exception.
#define MOFEM_LOG(channel, severity)
Log.
Rhs for mapping scalar fields with least squares.
Rhs for mapping symmetric tensor fields with least squares.
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface reference to pointer of interface.
constexpr AssemblyType AT
constexpr IntegrationType IT
int geom_order
Order if fixed.
Definition plastic.cpp:141

◆ removeDofs()

MoFEMErrorCode SolutionMapping::removeDofs ( Range  elsToRemove,
Range  elsToAdd 
)
private
Examples
SolutionMapping.hpp.

Definition at line 165 of file SolutionMapping.hpp.

166 {
168
169 const Problem *prb_ptr;
170 CHKERR m_field.get_problem("SUB_MAPPING", &prb_ptr);
171 int nb_init_row_dofs = prb_ptr->getNbDofsRow();
172
173 MOFEM_LOG("REMESHING", Sev::verbose)
174 << "Number of initial row dofs: " << nb_init_row_dofs;
175
176 if (is_distributed_mesh == PETSC_FALSE)
177 CHKERR m_field.getInterface<CommInterface>()->synchroniseEntities(
178 els_to_remove);
179
180 auto prb_mng = m_field.getInterface<ProblemsManager>();
181
182 auto remove_dofs_on_ents = [&](std::string field, const Range &ents) {
183 if (is_distributed_mesh == PETSC_TRUE)
184 return prb_mng->removeDofsOnEntities("SUB_MAPPING", field, ents);
185 else
186 return prb_mng->removeDofsOnEntitiesNotDistributed("SUB_MAPPING", field,
187 ents);
188 };
189
190 for (std::string field : {"EP", "TAU", "T"}) {
191 remove_dofs_on_ents(field, els_to_remove);
192
193 nb_init_row_dofs = prb_ptr->getNbDofsRow();
194
195 MOFEM_LOG("REMESHING", Sev::verbose)
196 << "Number of row dofs after removing " << field
197 << " field: " << nb_init_row_dofs;
198 }
199
201};
virtual const Problem * get_problem(const std::string problem_name) const =0
Get the problem object.
DofIdx getNbDofsRow() const
PetscBool is_distributed_mesh

◆ reSetUp()

MoFEMErrorCode SolutionMapping::reSetUp ( std::vector< std::string >  fIelds,
std::vector< int >  oRders,
BitRefLevel  bIt 
)
Examples
SolutionMapping.hpp, and thermoplastic.cpp.

Definition at line 131 of file SolutionMapping.hpp.

133 {
135
136 Simple *simple = m_field.getInterface<Simple>();
137
138 auto add_ents_order_to_field =
140 const std::initializer_list<std::string> &f,
141 const std::initializer_list<EntityType> &t, int _order) {
143 for (auto _f : f) {
144 for (auto _t : t) {
146 CHKERR m_field.set_field_order(0, _t, _f, _order);
147 }
148 }
150 };
151
152 for (size_t i = 0; i < fields.size(); ++i) {
153 CHKERR add_ents_order_to_field(m_field, {fields[i]}, {MBTRI}, orders[i]);
154 }
155
158 simple->getDomainFEName());
161
163};
virtual MoFEMErrorCode build_finite_elements(int verb=DEFAULT_VERBOSITY)=0
Build finite elements.
virtual MoFEMErrorCode add_ents_to_finite_element_by_type(const EntityHandle entities, const EntityType type, const std::string name, const bool recursive=true)=0
add entities to finite element
virtual MoFEMErrorCode build_fields(int verb=DEFAULT_VERBOSITY)=0
virtual MoFEMErrorCode set_field_order(const EntityHandle meshset, const EntityType type, const std::string &name, const ApproximationOrder order, int verb=DEFAULT_VERBOSITY)=0
Set order approximation of the entities in the field.
virtual MoFEMErrorCode add_ents_to_field_by_type(const Range &ents, const EntityType type, const std::string &name, int verb=DEFAULT_VERBOSITY)=0
Add entities to field meshset.
auto bit
set bit
FTensor::Index< 'i', SPACE_DIM > i
constexpr double t
plate stiffness
Definition plate.cpp:58
virtual MoFEMErrorCode build_adjacencies(const Range &ents, int verb=DEFAULT_VERBOSITY)=0
build adjacencies
Deprecated interface functions.

◆ setUp()

MoFEMErrorCode SolutionMapping::setUp ( SmartPetscObj< DM > &  subDM,
SmartPetscObj< DM > &  intermediateDM,
Range  elsToAdd,
Range  elsToFlip 
)
private
Examples
SolutionMapping.hpp.

Definition at line 80 of file SolutionMapping.hpp.

82 {
84
85 MOFEM_LOG("REMESHING", Sev::inform) << "Set up sub DM for mapping";
86
87 Simple *simple = m_field.getInterface<Simple>();
88
89 Range sub_dm_elems;
90
91 auto create_sub_dm = [&]() {
93 sub_dm = createDM(m_field.get_comm(), "DMMOFEM");
94 auto create_impl = [&]() {
96 CHKERR DMSetType(sub_dm, "DMMOFEM");
97 CHKERR DMMoFEMCreateSubDM(sub_dm, intermediate_dm, "SUB_MAPPING");
98 CHKERR DMMoFEMAddElement(sub_dm, simple->getDomainFEName());
99 CHKERR DMMoFEMSetSquareProblem(sub_dm, PETSC_TRUE);
100 CHKERR DMMoFEMSetDestroyProblem(sub_dm, PETSC_TRUE);
101
102 MOFEM_LOG("REMESHING", Sev::inform) << "Created sub DM";
103
104 for (auto f : {"T", "TAU", "EP"}) {
106 boost::make_shared<Range>(els_to_add));
108 boost::make_shared<Range>(els_to_add));
109 }
110
111 auto bit = BitRefLevel().set();
114
117
119 };
120
121 CHKERR create_impl();
123 };
124
125 CHK_THROW_MESSAGE(create_sub_dm(), "failed to create sub dm");
126
127 MOFEM_LOG("REMESHING", Sev::inform) << "Set up sub DM for mapping <= done";
129};
#define CHK_THROW_MESSAGE(err, msg)
Check and throw MoFEM exception.
PetscErrorCode DMMoFEMSetIsPartitioned(DM dm, PetscBool is_partitioned)
Definition DMMoFEM.cpp:1113
PetscErrorCode DMMoFEMCreateSubDM(DM subdm, DM dm, const char problem_name[])
Must be called by user to set Sub DM MoFEM data structures.
Definition DMMoFEM.cpp:215
PetscErrorCode DMMoFEMAddElement(DM dm, std::string fe_name)
add element to dm
Definition DMMoFEM.cpp:488
PetscErrorCode DMMoFEMSetSquareProblem(DM dm, PetscBool square_problem)
set squared problem
Definition DMMoFEM.cpp:450
PetscErrorCode DMMoFEMAddSubFieldRow(DM dm, const char field_name[])
Definition DMMoFEM.cpp:238
PetscErrorCode DMMoFEMAddSubFieldCol(DM dm, const char field_name[])
Definition DMMoFEM.cpp:280
PetscErrorCode DMSubDMSetUp_MoFEM(DM subdm)
Definition DMMoFEM.cpp:1344
virtual MoFEMErrorCode modify_problem_mask_ref_level_set_bit(const std::string &name_problem, const BitRefLevel &bit)=0
set dof mask ref level for problem
virtual MoFEMErrorCode modify_problem_ref_level_set_bit(const std::string &name_problem, const BitRefLevel &bit)=0
set ref level for problem
std::bitset< BITREFLEVEL_SIZE > BitRefLevel
Bit structure attached to each entity identifying to what mesh entity is attached.
Definition Types.hpp:40
PetscErrorCode DMMoFEMSetDestroyProblem(DM dm, PetscBool destroy_problem)
Definition DMMoFEM.cpp:434
auto createDM(MPI_Comm comm, const std::string dm_type_name)
Creates smart DM object.
virtual MPI_Comm & get_comm() const =0

◆ solveMap()

MoFEMErrorCode SolutionMapping::solveMap ( SmartPetscObj< DM > &  subDM,
SmartPetscObj< DM > &  intermediateDM,
PetscInt  numVecs,
Vec  vecsToMapFrom[],
Vec  vecsToMapTo[] 
)
private
Examples
SolutionMapping.hpp.

Definition at line 344 of file SolutionMapping.hpp.

348 {
350
351 auto simple = m_field.getInterface<Simple>();
352 auto is_mgr = m_field.getInterface<ISManager>();
353
354 auto post_proc = [&](auto dm, std::string file_name) {
356
357 auto T_ptr = boost::make_shared<VectorDouble>();
358 auto TAU_ptr = boost::make_shared<VectorDouble>();
359 auto EP_ptr = boost::make_shared<MatrixDouble>();
360
361 auto post_proc_fe = boost::make_shared<PostProcEle>(m_field);
362
363 using OpPPMap = OpPostProcMapInMoab<SPACE_DIM, SPACE_DIM>;
364
365 post_proc_fe->getOpPtrVector().push_back(
366 new OpCalculateScalarFieldValues("T", T_ptr));
367 post_proc_fe->getOpPtrVector().push_back(
368 new OpCalculateScalarFieldValues("TAU", TAU_ptr));
369 post_proc_fe->getOpPtrVector().push_back(
370 new OpCalculateTensor2SymmetricFieldValues<SPACE_DIM>("EP", EP_ptr));
371 // post_proc_fe->getOpPtrVector().push_back(
372 // new OpCalculateVectorFieldValues<SPACE_DIM>("U", u_ptr));
373 post_proc_fe->getOpPtrVector().push_back(
374
375 new OpPPMap(post_proc_fe->getPostProcMesh(),
376 post_proc_fe->getMapGaussPts(),
377
378 {{"T", T_ptr}, {"TAU", TAU_ptr}},
379
380 {},
381
382 {},
383
384 {{"EP", EP_ptr}}
385
386 )
387
388 );
389
390 CHKERR DMoFEMLoopFiniteElements(dm, simple->getDomainFEName(),
391 post_proc_fe);
392 CHKERR post_proc_fe->writeFile(file_name);
393
395 };
396
397 auto null_fe = boost::shared_ptr<FEMethod>();
398
399 CHKERR DMMoFEMKSPSetComputeOperators(sub_dm, simple->getDomainFEName(), feLhs,
400 null_fe, null_fe);
401 // CHKERR DMMoFEMKSPSetComputeRHS(sub_dm, simple->getDomainFEName(), feRhs,
402 // null_fe, null_fe);
403
404 auto ksp = MoFEM::createKSP(m_field.get_comm());
405 CHKERR KSPSetDM(ksp, sub_dm);
406 CHKERR KSPSetFromOptions(ksp);
407
408 // We create a temp_D to store current state of the mesh. We doing to preserve
409 // whatever is currently stored on entities, we will restore it to keep it as
410 // it was before.
411
412 auto tmp_D = createDMVector(intermediate_dm);
413 CHKERR DMoFEMMeshToLocalVector(intermediate_dm, tmp_D, INSERT_VALUES,
414 SCATTER_FORWARD);
415 CHKERR VecGhostUpdateBegin(tmp_D, INSERT_VALUES, SCATTER_FORWARD);
416 CHKERR VecGhostUpdateEnd(tmp_D, INSERT_VALUES, SCATTER_FORWARD);
417
418 auto D = createDMVector(sub_dm);
419 auto F = vectorDuplicate(D);
420
421 for (int i = 0; i < num_vecs; ++i) {
422 CHKERR VecGhostUpdateBegin(vecs_to_map_from[i], INSERT_VALUES,
423 SCATTER_FORWARD);
424 CHKERR VecGhostUpdateEnd(vecs_to_map_from[i], INSERT_VALUES,
425 SCATTER_FORWARD);
426 CHKERR DMoFEMMeshToLocalVector(intermediate_dm, vecs_to_map_from[i],
427 INSERT_VALUES, SCATTER_REVERSE);
428 // map
429 CHKERR VecZeroEntries(F);
430 CHKERR VecGhostUpdateBegin(F, INSERT_VALUES, SCATTER_FORWARD);
431 CHKERR VecGhostUpdateEnd(F, INSERT_VALUES, SCATTER_FORWARD);
432 feRhs->ksp_f = F;
433 CHKERR DMoFEMLoopFiniteElements(sub_dm, simple->getDomainFEName(), feRhs);
434 CHKERR VecGhostUpdateBegin(F, ADD_VALUES, SCATTER_REVERSE);
435 CHKERR VecGhostUpdateEnd(F, ADD_VALUES, SCATTER_REVERSE);
436 CHKERR VecAssemblyBegin(F);
437 CHKERR VecAssemblyEnd(F);
438 CHKERR KSPSolve(ksp, F, D);
439
440 // update data
441 CHKERR DMoFEMMeshToLocalVector(sub_dm, D, INSERT_VALUES, SCATTER_REVERSE);
442 CHKERR DMoFEMMeshToLocalVector(intermediate_dm, vecs_to_map_to[i],
443 INSERT_VALUES, SCATTER_FORWARD);
444 CHKERR VecGhostUpdateBegin(vecs_to_map_to[i], INSERT_VALUES,
445 SCATTER_FORWARD);
446 CHKERR VecGhostUpdateEnd(vecs_to_map_to[i], INSERT_VALUES, SCATTER_FORWARD);
447
448 CHKERR post_proc(intermediate_dm, "out_map_" + std::to_string(i) + ".h5m");
449 }
450
451 CHKERR DMoFEMMeshToLocalVector(intermediate_dm, tmp_D, INSERT_VALUES,
452 SCATTER_REVERSE);
453
454 MOFEM_LOG("REMESHING", Sev::inform) << "Mapped thermoplastic state variables";
455
457};
@ F
PetscErrorCode DMoFEMMeshToLocalVector(DM dm, Vec l, InsertMode mode, ScatterMode scatter_mode)
set local (or ghosted) vector values on mesh for partition only
Definition DMMoFEM.cpp:514
PetscErrorCode DMoFEMLoopFiniteElements(DM dm, const char fe_name[], MoFEM::FEMethod *method, CacheTupleWeakPtr cache_ptr=CacheTupleSharedPtr())
Executes FEMethod for finite elements in DM.
Definition DMMoFEM.cpp:576
auto createDMVector(DM dm)
Get smart vector from DM.
Definition DMMoFEM.hpp:1234
PetscErrorCode DMMoFEMKSPSetComputeOperators(DM dm, const char fe_name[], MoFEM::FEMethod *method, MoFEM::BasicMethod *pre_only, MoFEM::BasicMethod *post_only)
Set KSP operators and push mofem finite element methods.
Definition DMMoFEM.cpp:668
double D
auto createKSP(MPI_Comm comm)
SmartPetscObj< Vec > vectorDuplicate(Vec vec)
Create duplicate vector of smart vector.
OpPostProcMapInMoab< SPACE_DIM, SPACE_DIM > OpPPMap

Member Data Documentation

◆ elsToAdd

Range SolutionMapping::elsToAdd
private
Examples
SolutionMapping.hpp.

Definition at line 41 of file SolutionMapping.hpp.

◆ elsToFlip

Range SolutionMapping::elsToFlip
private
Examples
SolutionMapping.hpp.

Definition at line 42 of file SolutionMapping.hpp.

◆ elsToRemove

Range SolutionMapping::elsToRemove
private
Examples
SolutionMapping.hpp.

Definition at line 40 of file SolutionMapping.hpp.

◆ feLhs

boost::shared_ptr<DomainEle> SolutionMapping::feLhs
private
Examples
SolutionMapping.hpp.

Definition at line 46 of file SolutionMapping.hpp.

◆ feRhs

boost::shared_ptr<DomainEle> SolutionMapping::feRhs
private
Examples
SolutionMapping.hpp.

Definition at line 45 of file SolutionMapping.hpp.

◆ intermediateDM

SmartPetscObj<DM> SolutionMapping::intermediateDM
private
Examples
SolutionMapping.hpp.

Definition at line 43 of file SolutionMapping.hpp.

◆ m_field

MoFEM::Interface& SolutionMapping::m_field
private
Examples
SolutionMapping.hpp.

Definition at line 39 of file SolutionMapping.hpp.

◆ subDM

SmartPetscObj<DM> SolutionMapping::subDM
private
Examples
SolutionMapping.hpp.

Definition at line 43 of file SolutionMapping.hpp.


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