v0.16.3
Loading...
Searching...
No Matches
Classes | Macros | Typedefs | Functions | Variables
initial_diffusion.cpp File Reference
#include <stdlib.h>
#include <cmath>
#include <MoFEM.hpp>
#include <SourceFunction.hpp>
#include <boost/math/quadrature/gauss_kronrod.hpp>

Go to the source code of this file.

Classes

struct  ElementsAndOps< DIM >
 [Operators_definition] More...
 
struct  PhotonDiffusion
 
struct  PhotonDiffusion::CommonData
 
struct  PhotonDiffusion::OpError
 

Macros

#define BOOST_MATH_GAUSS_NO_COMPUTE_ON_DEMAND
 

Typedefs

using DomainEle = VolumeElementForcesAndSourcesCore
 [Define dimension]
 
using DomainEleOp = DomainEle::UserDataOperator
 
using PostProcEle = PostProcBrokenMeshInMoab< DomainEle >
 
using OpDomainMass = FormsIntegrators< DomainEleOp >::Assembly< PETSC >::BiLinearForm< GAUSS >::OpMass< 1, 1 >
 
using OpDomainGradGrad = FormsIntegrators< DomainEleOp >::Assembly< PETSC >::BiLinearForm< GAUSS >::OpGradGrad< 1, 1, SPACE_DIM >
 
using OpDomainTimesScalarField = FormsIntegrators< DomainEleOp >::Assembly< PETSC >::LinearForm< GAUSS >::OpBaseTimesScalar< 1 >
 
using OpDomainGradTimesVec = FormsIntegrators< DomainEleOp >::Assembly< PETSC >::LinearForm< GAUSS >::OpGradTimesTensor< 1, 1, SPACE_DIM >
 
using OpDomainSource = FormsIntegrators< DomainEleOp >::Assembly< PETSC >::LinearForm< GAUSS >::OpSource< 1, 1 >
 

Functions

int main (int argc, char *argv[])
 [Check results]
 

Variables

static char help [] = "...\n\n"
 
constexpr int SPACE_DIM = 3
 [Define dimension]
 
const double n = 1.44
 refractive index of diffusive medium
 
const double c = 30.
 speed of light (cm/ns)
 
const double v = c / n
 phase velocity of light in medium (cm/ns)
 
double mu_a
 absorption coefficient (cm^-1)
 
double mu_sp
 scattering coefficient (cm^-1)
 
double D
 
double slab_thickness
 
double beam_radius
 
double beam_centre_x
 
double beam_centre_y
 
double flux_magnitude = 1e3
 impulse magnitude
 
const int kronrod_points
 This has been tested and gives the same result for any number of points. Increasing the number of points will increase the compute time, so 15 is used as default.
 
double initial_time
 
char out_file_name [255] = "init_file.dat"
 
int numHoLevels = 1
 
PetscBool output_volume = PETSC_FALSE
 
PetscBool testing = PETSC_FALSE
 

Macro Definition Documentation

◆ BOOST_MATH_GAUSS_NO_COMPUTE_ON_DEMAND

#define BOOST_MATH_GAUSS_NO_COMPUTE_ON_DEMAND

Definition at line 12 of file initial_diffusion.cpp.

Typedef Documentation

◆ DomainEle

[Define dimension]

Definition at line 24 of file initial_diffusion.cpp.

◆ DomainEleOp

Definition at line 25 of file initial_diffusion.cpp.

◆ OpDomainGradGrad

Definition at line 30 of file initial_diffusion.cpp.

◆ OpDomainGradTimesVec

◆ OpDomainMass

using OpDomainMass = FormsIntegrators<DomainEleOp>::Assembly< PETSC>::BiLinearForm<GAUSS>::OpMass<1, 1>

Definition at line 28 of file initial_diffusion.cpp.

◆ OpDomainSource

using OpDomainSource = FormsIntegrators<DomainEleOp>::Assembly< PETSC>::LinearForm<GAUSS>::OpSource<1, 1>

Definition at line 36 of file initial_diffusion.cpp.

◆ OpDomainTimesScalarField

using OpDomainTimesScalarField = FormsIntegrators<DomainEleOp>::Assembly< PETSC>::LinearForm<GAUSS>::OpBaseTimesScalar<1>

Definition at line 32 of file initial_diffusion.cpp.

◆ PostProcEle

Definition at line 26 of file initial_diffusion.cpp.

Function Documentation

◆ main()

int main ( int  argc,
char *  argv[] 
)

[Check results]

Definition at line 492 of file initial_diffusion.cpp.

492 {
493
494 // Initialisation of MoFEM/PETSc and MOAB data structures
495 const char param_file[] = "param_file.petsc";
496 MoFEM::Core::Initialize(&argc, &argv, param_file, help);
497
498 // Add logging channel for example
499 auto core_log = logging::core::get();
500 core_log->add_sink(
502 LogManager::setLog("INITIAL");
503 MOFEM_LOG_TAG("INITIAL", "initial_diffusion")
504
505 // Error handling
506 try {
507 // Register MoFEM discrete manager in PETSc
508 DMType dm_name = "DMMOFEM";
509 CHKERR DMRegister_MoFEM(dm_name);
510
511 // Create MOAB instance
512 moab::Core mb_instance; // mesh database
513 moab::Interface &moab = mb_instance; // mesh database interface
514
515 // Create MoFEM instance
516 MoFEM::Core core(moab); // finite element database
517 MoFEM::Interface &m_field = core; // finite element interface
518
519 // Run the main analysis
520 PhotonDiffusion heat_problem(m_field);
521 CHKERR heat_problem.runProgram();
522 }
524
525 // Finish work: cleaning memory, getting statistics, etc.
527
528 return 0;
529}
#define CATCH_ERRORS
Catch errors.
#define CHKERR
Inline error check.
PetscErrorCode DMRegister_MoFEM(const char sname[])
Register MoFEM problem.
Definition DMMoFEM.cpp:43
static LoggerType & setLog(const std::string channel)
Set ans resset chanel logger.
#define MOFEM_LOG_TAG(channel, tag)
Tag channel.
static char help[]
Core (interface) class.
Definition Core.hpp:83
static MoFEMErrorCode Initialize(int *argc, char ***args, const char file[], const char help[])
Initializes the MoFEM database PETSc, MOAB and MPI.
Definition Core.cpp:68
static MoFEMErrorCode Finalize()
Checks for options to be called at the conclusion of the program.
Definition Core.cpp:123
Deprecated interface functions.
static boost::shared_ptr< SinkType > createSink(boost::shared_ptr< std::ostream > stream_ptr, std::string comm_filter)
Create a sink object.
static boost::shared_ptr< std::ostream > getStrmWorld()
Get the strm world object.

Variable Documentation

◆ beam_centre_x

double beam_centre_x

Definition at line 49 of file initial_diffusion.cpp.

◆ beam_centre_y

double beam_centre_y

Definition at line 50 of file initial_diffusion.cpp.

◆ beam_radius

double beam_radius

Definition at line 48 of file initial_diffusion.cpp.

◆ c

const double c = 30.

◆ D

double D
Examples
mofem/atom_tests/child_and_parent.cpp, mofem/atom_tests/dg_projection.cpp, mofem/atom_tests/hanging_node_approx.cpp, mofem/atom_tests/hcurl_check_approx_in_2d.cpp, mofem/atom_tests/hdiv_check_approx_in_3d.cpp, mofem/atom_tests/higher_derivatives.cpp, mofem/atom_tests/prism_polynomial_approximation.cpp, mofem/atom_tests/quad_polynomial_approximation.cpp, mofem/atom_tests/scalar_check_approximation.cpp, mofem/tutorials/adv-0_plasticity/plastic.cpp, mofem/tutorials/adv-4_dynamic_first_order_con_law/dynamic_first_order_con_law.cpp, mofem/tutorials/adv-5_poroelasticity/seepage.cpp, mofem/tutorials/adv-6_dg_projection/between_meshes_dg_projection.cpp, mofem/tutorials/clx-0_acoustics/helmholtz.cpp, mofem/tutorials/cor-0to1_unsaturated_transport/src/UnsaturatedFlow.hpp, mofem/tutorials/cor-2to5_analytical_poisson/analytical_nonlinear_poisson.cpp, mofem/tutorials/cor-2to5_analytical_poisson/analytical_poisson.cpp, mofem/tutorials/cor-2to5_analytical_poisson/analytical_poisson_field_split.cpp, mofem/tutorials/mix-0_mixed_poisson/mixed_poisson.cpp, mofem/tutorials/scl-0_least_squares/approximation.cpp, mofem/tutorials/scl-12_electrostatics/electrostatics.cpp, mofem/tutorials/scl-1_poisson_2d_homogeneous/poisson_2d_homogeneous.cpp, mofem/tutorials/scl-6_heat_equation/heat_equation.cpp, mofem/tutorials/scl-7_wave_equation/wave_equation.cpp, mofem/tutorials/scl-9_heat_method/heat_method.cpp, mofem/tutorials/vec-10_elasticity_schur/schur_elastic.cpp, mofem/tutorials/vec-1_eigen_elasticity/eigen_elastic.cpp, mofem/tutorials/vec-2_nonlinear_elasticity/src/NonlinearElasticExample.hpp, mofem/tutorials/vec-4_shallow_wave/shallow_wave.cpp, mofem/tutorials/vec-5_free_surface/free_surface.cpp, mofem/tutorials/vec-6_dg_kirchhoff_plate/plate.cpp, mofem/tutorials/vec-9_arc_length/src/ArcLengthExample.hpp, mofem/users_modules/adolc-plasticity/adolc_plasticity.cpp, mofem/users_modules/basic_finite_elements/elasticity/elasticity.cpp, mofem/users_modules/basic_finite_elements/nonlinear_elasticity/nonlinear_dynamics.cpp, mofem/users_modules/basic_finite_elements/src/HookeElement.hpp, and mofem/users_modules/bone_remodelling/src/impl/Remodeling.cpp.

Definition at line 45 of file initial_diffusion.cpp.

◆ flux_magnitude

double flux_magnitude = 1e3

impulse magnitude

Definition at line 51 of file initial_diffusion.cpp.

◆ help

char help[] = "...\n\n"
static

Definition at line 16 of file initial_diffusion.cpp.

◆ initial_time

double initial_time

Definition at line 55 of file initial_diffusion.cpp.

◆ kronrod_points

const int kronrod_points
Initial value:
=
15

This has been tested and gives the same result for any number of points. Increasing the number of points will increase the compute time, so 15 is used as default.

number of points for kronrod integration, can be 15, 31, 41, 51, or 61 (from boost library docs)

Definition at line 52 of file initial_diffusion.cpp.

◆ mu_a

double mu_a

absorption coefficient (cm^-1)

Definition at line 43 of file initial_diffusion.cpp.

◆ mu_sp

double mu_sp

scattering coefficient (cm^-1)

Definition at line 44 of file initial_diffusion.cpp.

◆ n

const double n = 1.44

◆ numHoLevels

int numHoLevels = 1

Definition at line 59 of file initial_diffusion.cpp.

◆ out_file_name

char out_file_name[255] = "init_file.dat"

◆ output_volume

PetscBool output_volume = PETSC_FALSE

Definition at line 61 of file initial_diffusion.cpp.

◆ slab_thickness

double slab_thickness

Definition at line 47 of file initial_diffusion.cpp.

◆ SPACE_DIM

constexpr int SPACE_DIM = 3
constexpr

[Define dimension]

Definition at line 21 of file initial_diffusion.cpp.

◆ testing

PetscBool testing = PETSC_FALSE

◆ v

const double v = c / n

phase velocity of light in medium (cm/ns)

Examples
mofem/atom_tests/continuity_check_on_skeleton_3d.cpp, mofem/atom_tests/dm_partitioned_no_field.cpp, mofem/atom_tests/field_blas.cpp, mofem/atom_tests/field_blas_axpy.cpp, mofem/atom_tests/find_local_coordinates.cpp, mofem/atom_tests/hanging_node_approx.cpp, mofem/atom_tests/matrix_function.cpp, mofem/atom_tests/prism_elements_from_surface.cpp, mofem/atom_tests/prism_polynomial_approximation.cpp, mofem/atom_tests/quad_polynomial_approximation.cpp, mofem/atom_tests/remove_entities_from_problem_not_partitioned.cpp, mofem/atom_tests/scalar_check_approximation.cpp, mofem/atom_tests/schur_test_diag_mat.cpp, mofem/atom_tests/simple_interface.cpp, mofem/atom_tests/test_cache_on_entities.cpp, mofem/tools/mesh_smoothing.cpp, mofem/tutorials/adv-0_plasticity/plastic.cpp, mofem/tutorials/cor-0to1_unsaturated_transport/src/UnsaturatedFlow.hpp, mofem/tutorials/fun-2_plot_base/plot_base.cpp, mofem/tutorials/mix-1_light_intensity_equation/phase.cpp, mofem/tutorials/scl-9_heat_method/heat_method.cpp, mofem/tutorials/vec-2_nonlinear_elasticity/src/HenckyOps.hpp, mofem/tutorials/vec-5_free_surface/free_surface.cpp, mofem/tutorials/vec-7_shape_optimisation/adjoint.cpp, mofem/users_modules/adolc-plasticity/adolc_plasticity.cpp, mofem/users_modules/basic_finite_elements/src/HookeElement.hpp, mofem/users_modules/basic_finite_elements/src/impl/HookeElement.cpp, and mofem/users_modules/basic_finite_elements/src/impl/NavierStokesElement.cpp.

Definition at line 41 of file initial_diffusion.cpp.