v0.16.0
Loading...
Searching...
No Matches
Classes | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
PhotonDiffusion Struct Reference
Collaboration diagram for PhotonDiffusion:
[legend]

Classes

struct  CommonData
 
struct  Monitor
 
struct  OpCameraInteg
 
struct  OpError
 
struct  OpGetScalarFieldGradientValuesOnSkin
 

Public Member Functions

 PhotonDiffusion (MoFEM::Interface &m_field)
 
MoFEMErrorCode runProgram ()
 [runProgram]
 
 PhotonDiffusion (MoFEM::Interface &m_field)
 
MoFEMErrorCode runProgram ()
 

Static Public Member Functions

static double sourceFunction (const double x, const double y, const double z)
 

Private Member Functions

MoFEMErrorCode readMesh ()
 [sourceFunction]
 
MoFEMErrorCode setupProblem ()
 
MoFEMErrorCode createCommonData ()
 
MoFEMErrorCode initialCondition ()
 
MoFEMErrorCode boundaryCondition ()
 [interior_boundary]
 
MoFEMErrorCode assembleSystem ()
 [interior_boundary]
 
MoFEMErrorCode solveSystem ()
 [assembleSystem]
 
MoFEMErrorCode checkResults ()
 [runProgram]
 
MoFEMErrorCode outputResults ()
 [solveSystem]
 
MoFEMErrorCode readMesh ()
 
MoFEMErrorCode createCommonData ()
 
MoFEMErrorCode setupProblem ()
 
MoFEMErrorCode setIntegrationRules ()
 
MoFEMErrorCode initialCondition ()
 
MoFEMErrorCode boundaryCondition ()
 
MoFEMErrorCode assembleSystem ()
 
MoFEMErrorCode solveSystem ()
 
MoFEMErrorCode checkResults ()
 
MoFEMErrorCode outputResults ()
 

Private Attributes

MoFEM::InterfacemField
 
boost::shared_ptr< CommonDatacommonDataPtr
 
boost::shared_ptr< std::vector< unsigned char > > boundaryMarker
 
boost::shared_ptr< FEMethoddomainLhsFEPtr
 
boost::shared_ptr< FEMethodboundaryLhsFEPtr
 
boost::shared_ptr< FEMethodboundaryRhsFEPtr
 

Detailed Description

Definition at line 67 of file initial_diffusion.cpp.

Constructor & Destructor Documentation

◆ PhotonDiffusion() [1/2]

PhotonDiffusion::PhotonDiffusion ( MoFEM::Interface m_field)

Definition at line 108 of file initial_diffusion.cpp.

108: mField(m_field) {}
MoFEM::Interface & mField

◆ PhotonDiffusion() [2/2]

PhotonDiffusion::PhotonDiffusion ( MoFEM::Interface m_field)

Member Function Documentation

◆ assembleSystem() [1/2]

MoFEMErrorCode PhotonDiffusion::assembleSystem ( )
private

[interior_boundary]

[assembleSystem]

Definition at line 334 of file initial_diffusion.cpp.

334 {
337
338 auto integration_rule = [](int o_row, int o_col, int approx_order) {
339 return 2 * approx_order;
340 };
341
342 auto set_domain = [&]() {
345 pipeline_mng->getOpDomainLhsPipeline(), {H1});
346
347 pipeline_mng->getOpDomainLhsPipeline().push_back(new OpDomainMass(
348 "PHOTON_FLUENCE_RATE", "PHOTON_FLUENCE_RATE",
349 [](const double, const double, const double) { return 1; }));
350
351 pipeline_mng->getOpDomainRhsPipeline().push_back(
352 new OpDomainSource("PHOTON_FLUENCE_RATE", sourceFunction));
353
357 };
358
359 auto set_boundary = [&]() {
364 };
365
366 CHKERR set_domain();
367 CHKERR set_boundary();
368
370}
#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.
auto integration_rule
boost::ptr_deque< UserDataOperator > & getOpDomainLhsPipeline()
Get the Op Domain Lhs Pipeline object.
boost::ptr_deque< UserDataOperator > & getOpDomainRhsPipeline()
Get the Op Domain Rhs Pipeline object.
FormsIntegrators< DomainEleOp >::Assembly< PETSC >::BiLinearForm< GAUSS >::OpMass< 1, 1 > OpDomainMass
FormsIntegrators< DomainEleOp >::Assembly< PETSC >::LinearForm< GAUSS >::OpSource< 1, 1 > OpDomainSource
static constexpr int approx_order
Add operators pushing bases from local to physical configuration.
PipelineManager interface.
MoFEMErrorCode setDomainRhsIntegrationRule(RuleHookFun rule)
Set integration rule for domain right-hand side finite element.
MoFEMErrorCode setBoundaryLhsIntegrationRule(RuleHookFun rule)
Set integration rule for boundary left-hand side finite element.
MoFEMErrorCode setBoundaryRhsIntegrationRule(RuleHookFun rule)
Set integration rule for boundary right-hand side finite element.
MoFEMErrorCode setDomainLhsIntegrationRule(RuleHookFun rule)
Set integration rule for domain left-hand side finite element.
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface reference to pointer of interface.
static double sourceFunction(const double x, const double y, const double z)

◆ assembleSystem() [2/2]

MoFEMErrorCode PhotonDiffusion::assembleSystem ( )
private

◆ boundaryCondition() [1/2]

MoFEMErrorCode PhotonDiffusion::boundaryCondition ( )
private

[interior_boundary]

Definition at line 282 of file initial_diffusion.cpp.

282 {
284
285 auto *simple = mField.getInterface<Simple>();
286
287 // Get boundary faces marked in block named "INT"
288 Range boundary_faces;
290 std::string entity_name = it->getName();
291 if (entity_name.compare(0, 3, "INT") == 0) {
292 CHKERR it->getMeshsetIdEntitiesByDimension(mField.get_moab(), 2,
293 boundary_faces, true);
294 }
295 }
296
297 if (boundary_faces.empty()) {
299 std::string entity_name = it->getName();
300 CHKERR it->getMeshsetIdEntitiesByDimension(mField.get_moab(), 2,
301 boundary_faces, true);
302 }
303 }
304
305 // Get boundary edges in "INT"
306 Range boundary_ents;
307 CHKERR mField.get_moab().get_adjacencies(
308 boundary_faces, 1, false, boundary_ents, moab::Interface::UNION);
309 // Add vertices to boundary entities
310 Range boundary_verts;
311 CHKERR mField.get_moab().get_adjacencies(
312 boundary_faces, 0, false, boundary_verts, moab::Interface::UNION);
313
314 boundary_faces.merge(boundary_verts);
315 boundary_faces.merge(boundary_ents);
316
317 CHKERR mField.getInterface<CommInterface>()->synchroniseEntities(
318 boundary_faces);
319
320 EntityHandle meshset;
321 CHKERR mField.get_moab().create_meshset(MESHSET_SET, meshset);
322 CHKERR mField.get_moab().add_entities(meshset, boundary_faces);
323
324 // Remove DOFs as homogeneous boundary condition is used
325
326 CHKERR mField.getInterface<ProblemsManager>()->removeDofsOnEntities(
327 simple->getProblemName(), "PHOTON_FLUENCE_RATE", boundary_faces);
328
330}
void simple(double P1[], double P2[], double P3[], double c[], const int N)
Definition acoustic.cpp:69
@ SIDESET
@ BLOCKSET
#define _IT_CUBITMESHSETS_BY_SET_TYPE_FOR_LOOP_(MESHSET_MANAGER, CUBITBCTYPE, IT)
Iterator that loops over a specific Cubit MeshSet having a particular BC meshset in a moFEM field.
Managing BitRefLevels.
virtual moab::Interface & get_moab()=0
Problem manager is used to build and partition problems.
Simple interface for fast problem set-up.
Definition Simple.hpp:27

◆ boundaryCondition() [2/2]

MoFEMErrorCode PhotonDiffusion::boundaryCondition ( )
private

◆ checkResults() [1/2]

MoFEMErrorCode PhotonDiffusion::checkResults ( )
private

[runProgram]

[Check results]

Definition at line 459 of file initial_diffusion.cpp.

459 {
462 pipeline_mng->getDomainLhsFE().reset();
463 pipeline_mng->getDomainRhsFE().reset();
464 pipeline_mng->getOpDomainRhsPipeline().clear();
465 pipeline_mng->getOpDomainRhsPipeline().push_back(
466 new OpCalculateScalarFieldValues("PHOTON_FLUENCE_RATE",
467 commonDataPtr->uAtPtsPtr));
468 pipeline_mng->getOpDomainRhsPipeline().push_back(new OpError(commonDataPtr));
469 CHKERR pipeline_mng->loopFiniteElements();
470 CHKERR VecAssemblyBegin(commonDataPtr->L2Vec);
471 CHKERR VecAssemblyEnd(commonDataPtr->L2Vec);
472 CHKERR VecAssemblyBegin(commonDataPtr->resVec);
473 CHKERR VecAssemblyEnd(commonDataPtr->resVec);
474 double nrm2;
475 CHKERR VecNorm(commonDataPtr->resVec, NORM_2, &nrm2);
476 const double *array;
477 CHKERR VecGetArrayRead(commonDataPtr->L2Vec, &array);
478 if (mField.get_comm_rank() == 0)
479 PetscPrintf(PETSC_COMM_SELF, "Error %6.4e Vec norm %6.4e\n",
480 std::sqrt(array[0]), nrm2);
481 CHKERR VecRestoreArrayRead(commonDataPtr->L2Vec, &array);
482 constexpr double eps = 1e-8;
483 if (nrm2 > eps)
484 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
485 "Not converged solution");
487}
static const double eps
@ MOFEM_DATA_INCONSISTENCY
Definition definitions.h:31
MoFEMErrorCode loopFiniteElements(SmartPetscObj< DM > dm=nullptr)
Iterate finite elements.
virtual int get_comm_rank() const =0
Specialization for double precision scalar field values calculation.
boost::shared_ptr< FEMethod > & getDomainRhsFE()
Get domain right-hand side finite element.
boost::shared_ptr< FEMethod > & getDomainLhsFE()
Get domain left-hand side finite element.
boost::shared_ptr< CommonData > commonDataPtr

◆ checkResults() [2/2]

MoFEMErrorCode PhotonDiffusion::checkResults ( )
private

◆ createCommonData() [1/2]

MoFEMErrorCode PhotonDiffusion::createCommonData ( )
private

Definition at line 263 of file initial_diffusion.cpp.

263 {
265 auto *simple = mField.getInterface<Simple>();
266
267 commonDataPtr = boost::make_shared<PhotonDiffusion::CommonData>();
268 commonDataPtr->resVec = createDMVector(simple->getDM());
269 commonDataPtr->L2Vec =
271 commonDataPtr->uAtPtsPtr = boost::make_shared<VectorDouble>();
272
274}
auto createDMVector(DM dm, RowColData rc=RowColData::COL)
Get smart vector from DM.
Definition DMMoFEM.hpp:1237
auto createVectorMPI(MPI_Comm comm, PetscInt n, PetscInt N)
Create MPI Vector.
virtual MPI_Comm & get_comm() const =0

◆ createCommonData() [2/2]

MoFEMErrorCode PhotonDiffusion::createCommonData ( )
private

◆ initialCondition() [1/2]

MoFEMErrorCode PhotonDiffusion::initialCondition ( )
private

Definition at line 276 of file initial_diffusion.cpp.

276 {
279}

◆ initialCondition() [2/2]

MoFEMErrorCode PhotonDiffusion::initialCondition ( )
private

◆ outputResults() [1/2]

MoFEMErrorCode PhotonDiffusion::outputResults ( )
private

[solveSystem]

[timesolver] [solveSystem]

Definition at line 405 of file initial_diffusion.cpp.

405 {
407 auto *pipeline_mng = mField.getInterface<PipelineManager>();
408 auto post_proc_fe = boost::make_shared<PostProcEle>(mField);
409
410 auto u_ptr = boost::make_shared<VectorDouble>();
411 post_proc_fe->getOpPtrVector().push_back(
412 new OpCalculateScalarFieldValues("PHOTON_FLUENCE_RATE", u_ptr));
413
415
416 post_proc_fe->getOpPtrVector().push_back(
417
418 new OpPPMap(
419
420 post_proc_fe->getPostProcMesh(), post_proc_fe->getMapGaussPts(),
421
422 {{"PHOTON_FLUENCE_RATE", u_ptr}},
423
424 {},
425
426 {},
427
428 {})
429
430 );
431
432 pipeline_mng->getDomainPostProcFE() = post_proc_fe;
433 CHKERR pipeline_mng->loopFiniteElementsPostProc();
434 CHKERR post_proc_fe->writeFile("out_initial.h5m");
436}
MoFEMErrorCode loopFiniteElementsPostProc(SmartPetscObj< DM > dm=nullptr)
Iterate postprocessing finite elements.
OpPostProcMapInMoab< SPACE_DIM, SPACE_DIM > OpPPMap
Post post-proc data at points from hash maps.
boost::shared_ptr< FEMethod > & getDomainPostProcFE()
Get domain postprocessing finite element.

◆ outputResults() [2/2]

MoFEMErrorCode PhotonDiffusion::outputResults ( )
private

◆ readMesh() [1/2]

MoFEMErrorCode PhotonDiffusion::readMesh ( )
private

[sourceFunction]

Definition at line 162 of file initial_diffusion.cpp.

162 {
164
165 auto *simple = mField.getInterface<Simple>();
167 CHKERR simple->getOptions();
168 CHKERR simple->loadFile();
169
171}

◆ readMesh() [2/2]

MoFEMErrorCode PhotonDiffusion::readMesh ( )
private

◆ runProgram() [1/2]

MoFEMErrorCode PhotonDiffusion::runProgram ( )

[runProgram]

Definition at line 439 of file initial_diffusion.cpp.

439 {
441
448 if (output_volume)
450 if (testing) {
453 }
455}
PetscBool testing
PetscBool output_volume
MoFEMErrorCode assembleSystem()
[interior_boundary]
MoFEMErrorCode solveSystem()
[assembleSystem]
MoFEMErrorCode readMesh()
[sourceFunction]
MoFEMErrorCode outputResults()
[solveSystem]
MoFEMErrorCode initialCondition()
MoFEMErrorCode checkResults()
[runProgram]
MoFEMErrorCode createCommonData()
MoFEMErrorCode boundaryCondition()
[interior_boundary]
MoFEMErrorCode setupProblem()

◆ runProgram() [2/2]

MoFEMErrorCode PhotonDiffusion::runProgram ( )

◆ setIntegrationRules()

MoFEMErrorCode PhotonDiffusion::setIntegrationRules ( )
private

◆ setupProblem() [1/2]

MoFEMErrorCode PhotonDiffusion::setupProblem ( )
private

Definition at line 173 of file initial_diffusion.cpp.

173 {
175
176 auto *simple = mField.getInterface<Simple>();
177 CHKERR simple->addDomainField("PHOTON_FLUENCE_RATE", H1,
179 CHKERR simple->addBoundaryField("PHOTON_FLUENCE_RATE", H1,
181
182 CHKERR PetscOptionsGetScalar(PETSC_NULLPTR, "", "-flux_magnitude",
183 &flux_magnitude, PETSC_NULLPTR);
184 CHKERR PetscOptionsGetScalar(PETSC_NULLPTR, "", "-slab_thickness",
185 &slab_thickness, PETSC_NULLPTR);
186 CHKERR PetscOptionsGetScalar(PETSC_NULLPTR, "", "-beam_radius", &beam_radius,
187 PETSC_NULLPTR);
188 CHKERR PetscOptionsGetScalar(PETSC_NULLPTR, "", "-beam_centre_x",
189 &beam_centre_x, PETSC_NULLPTR);
190 CHKERR PetscOptionsGetScalar(PETSC_NULLPTR, "", "-beam_centre_y",
191 &beam_centre_y, PETSC_NULLPTR);
192 CHKERR PetscOptionsGetScalar(PETSC_NULLPTR, "", "-mu_a", &mu_a,
193 PETSC_NULLPTR);
194 CHKERR PetscOptionsGetScalar(PETSC_NULLPTR, "", "-mu_sp", &mu_sp,
195 PETSC_NULLPTR);
196 CHKERR PetscOptionsGetScalar(PETSC_NULLPTR, "", "-initial_time",
197 &initial_time, PETSC_NULLPTR);
198
199 CHKERR PetscOptionsGetString(PETSC_NULLPTR, "", "-output_file", out_file_name,
200 255, PETSC_NULLPTR);
201 CHKERR PetscOptionsGetBool(PETSC_NULLPTR, "", "-output_volume",
202 &output_volume, PETSC_NULLPTR);
203 CHKERR PetscOptionsGetBool(PETSC_NULLPTR, "", "-testing", &testing,
204 PETSC_NULLPTR);
205
206 D = 1. / (3. * (mu_a + mu_sp));
207
208 MOFEM_LOG("INITIAL", Sev::inform) << "Refractive index: " << n;
209 MOFEM_LOG("INITIAL", Sev::inform) << "Speed of light (cm/ns): " << c;
210 MOFEM_LOG("INITIAL", Sev::inform)
211 << "Phase velocity in medium (cm/ns): " << v;
212 MOFEM_LOG("INITIAL", Sev::inform)
213 << "Absorption coefficient (cm^-1): " << mu_a;
214 MOFEM_LOG("INITIAL", Sev::inform)
215 << "Scattering coefficient (cm^-1): " << mu_sp;
216 MOFEM_LOG("INITIAL", Sev::inform) << "Diffusion coefficient D : " << D;
217 MOFEM_LOG("INITIAL", Sev::inform) << "Impulse magnitude: " << flux_magnitude;
218 MOFEM_LOG("INITIAL", Sev::inform) << "Compute time (ns): " << initial_time;
219 MOFEM_LOG("INITIAL", Sev::inform) << "Slab thickness: " << slab_thickness;
220
221 int order = 2;
222 CHKERR PetscOptionsGetInt(PETSC_NULLPTR, "", "-order", &order, PETSC_NULLPTR);
223
224 MOFEM_LOG("INITIAL", Sev::inform) << "Approximation order: " << order;
225 MOFEM_LOG("INITIAL", Sev::inform) << "Kronrod points: " << kronrod_points;
226
227 CHKERR simple->setFieldOrder("PHOTON_FLUENCE_RATE", order);
228
229 // if (numHoLevels > 0) {
230
231 // Range ho_ents;
232 // for (_IT_CUBITMESHSETS_BY_SET_TYPE_FOR_LOOP_(mField, BLOCKSET, it)) {
233 // if (it->getName().compare(0, 3, "CAM") == 0) {
234 // CHKERR mField.get_moab().get_entities_by_dimension(it->getMeshset(), 2,
235 // ho_ents, true);
236 // }
237 // }
238
239 // EntityHandle meshset;
240 // CHKERR mField.get_moab().create_meshset(MESHSET_SET, meshset);
241 // CHKERR mField.get_moab().add_entities(meshset, ho_ents);
242 // std::string field_name;
243 // field_name = "out_test_" +
244 // boost::lexical_cast<std::string>(mField.get_comm_rank()) +
245 // ".vtk";
246 // CHKERR mField.get_moab().write_file(field_name.c_str(), "VTK", "", &meshset,
247 // 1);
248 // CHKERR mField.get_moab().delete_entities(&meshset, 1);
249
250 // CHKERR mField.getInterface<CommInterface>()->synchroniseEntities(ho_ents);
251
252 // CHKERR simple->setFieldOrder("PHOTON_FLUENCE_RATE", order + 1, &ho_ents);
253
254 // CHKERR mField.getInterface<CommInterface>()->synchroniseFieldEntities(
255 // "PHOTON_FLUENCE_RATE");
256 // }
257
258 CHKERR simple->setUp();
259
261}
@ AINSWORTH_LEGENDRE_BASE
Ainsworth Cole (Legendre) approx. base .
Definition definitions.h:60
@ H1
continuous field
Definition definitions.h:85
#define MOFEM_LOG(channel, severity)
Log.
char out_file_name[255]
double initial_time
PetscErrorCode PetscOptionsGetInt(PetscOptions *, const char pre[], const char name[], PetscInt *ivalue, PetscBool *set)
PetscErrorCode PetscOptionsGetBool(PetscOptions *, const char pre[], const char name[], PetscBool *bval, PetscBool *set)
PetscErrorCode PetscOptionsGetScalar(PetscOptions *, const char pre[], const char name[], PetscScalar *dval, PetscBool *set)
PetscErrorCode PetscOptionsGetString(PetscOptions *, const char pre[], const char name[], char str[], size_t size, PetscBool *set)
double mu_sp
scattering coefficient (cm^-1)
double flux_magnitude
impulse magnitude
const int kronrod_points
This has been tested and gives the same result for any number of points. Increasing the number of poi...
double beam_centre_y
double beam_centre_x
const double c
speed of light (cm/ns)
double slab_thickness
double beam_radius
int order
double D
double mu_a
absorption coefficient (cm^-1)
const double v
phase velocity of light in medium (cm/ns)
const double n
refractive index of diffusive medium
MoFEMErrorCode addDomainField(const std::string name, const FieldSpace space, const FieldApproximationBase base, const FieldCoefficientsNumber nb_of_coefficients, const TagType tag_type=MB_TAG_SPARSE, const enum MoFEMTypes bh=MF_ZERO, int verb=-1)
Add field on domain.
Definition Simple.cpp:261

◆ setupProblem() [2/2]

MoFEMErrorCode PhotonDiffusion::setupProblem ( )
private

◆ solveSystem() [1/2]

MoFEMErrorCode PhotonDiffusion::solveSystem ( )
private

[assembleSystem]

[solveSystem]

[postprocess]

[postprocess]

[timesolver]

Definition at line 374 of file initial_diffusion.cpp.

374 {
376 auto *simple = mField.getInterface<Simple>();
377 auto *pipeline_mng = mField.getInterface<PipelineManager>();
378 auto solver = pipeline_mng->createKSP();
379
380 CHKERR KSPSetFromOptions(solver);
381
382 auto dm = simple->getDM();
383 auto X = createDMVector(dm);
384 auto F = vectorDuplicate(X);
385
386 MOFEM_LOG("INITIAL", Sev::inform) << "Solver start";
387 CHKERR KSPSolve(solver, F, X);
388 CHKERR VecGhostUpdateBegin(X, INSERT_VALUES, SCATTER_FORWARD);
389 CHKERR VecGhostUpdateEnd(X, INSERT_VALUES, SCATTER_FORWARD);
390 CHKERR DMoFEMMeshToLocalVector(dm, X, INSERT_VALUES, SCATTER_REVERSE);
391
392 MOFEM_LOG("INITIAL", Sev::inform)
393 << "writing vector in binary to " << out_file_name << " ...";
394 PetscViewer viewer;
395 PetscViewerBinaryOpen(PETSC_COMM_WORLD, out_file_name, FILE_MODE_WRITE,
396 &viewer);
397 VecView(X, viewer);
398 PetscViewerDestroy(&viewer);
399
400 MOFEM_LOG("INITIAL", Sev::inform) << "Solver done";
402}
@ F
PetscErrorCode DMoFEMMeshToLocalVector(DM dm, Vec l, InsertMode mode, ScatterMode scatter_mode, RowColData rc=RowColData::COL)
set local (or ghosted) vector values on mesh for partition only
Definition DMMoFEM.cpp:514
SmartPetscObj< Vec > vectorDuplicate(Vec vec)
Create duplicate vector of smart vector.

◆ solveSystem() [2/2]

MoFEMErrorCode PhotonDiffusion::solveSystem ( )
private

◆ sourceFunction()

static double PhotonDiffusion::sourceFunction ( const double  x,
const double  y,
const double  z 
)
inlinestatic

Definition at line 74 of file initial_diffusion.cpp.

75 {
79 }
double sourceFunctionEval(const double x, const double y, const double z, const double beam_radius, const double beam_centre_x, const double beam_centre_y, const double slab_thickness, const double mu_a, const double mu_sp, const double flux_magnitude, double initial_time, const double v, const double D)
Pulse is infinitely short.

Member Data Documentation

◆ boundaryLhsFEPtr

boost::shared_ptr<FEMethod> PhotonDiffusion::boundaryLhsFEPtr
private

Definition at line 131 of file photon_diffusion.cpp.

◆ boundaryMarker

boost::shared_ptr<std::vector<unsigned char> > PhotonDiffusion::boundaryMarker
private

Definition at line 128 of file photon_diffusion.cpp.

◆ boundaryRhsFEPtr

boost::shared_ptr<FEMethod> PhotonDiffusion::boundaryRhsFEPtr
private

Definition at line 132 of file photon_diffusion.cpp.

◆ commonDataPtr

boost::shared_ptr< CommonData > PhotonDiffusion::commonDataPtr
private

Definition at line 103 of file initial_diffusion.cpp.

◆ domainLhsFEPtr

boost::shared_ptr<FEMethod> PhotonDiffusion::domainLhsFEPtr
private

Definition at line 130 of file photon_diffusion.cpp.

◆ mField

MoFEM::Interface & PhotonDiffusion::mField
private

Definition at line 95 of file initial_diffusion.cpp.


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