v0.16.0
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 490 of file initial_diffusion.cpp.

490 {
491
492 // Initialisation of MoFEM/PETSc and MOAB data structures
493 const char param_file[] = "param_file.petsc";
494 MoFEM::Core::Initialize(&argc, &argv, param_file, help);
495
496 // Add logging channel for example
497 auto core_log = logging::core::get();
498 core_log->add_sink(
500 LogManager::setLog("INITIAL");
501 MOFEM_LOG_TAG("INITIAL", "initial_diffusion")
502
503 // Error handling
504 try {
505 // Register MoFEM discrete manager in PETSc
506 DMType dm_name = "DMMOFEM";
507 CHKERR DMRegister_MoFEM(dm_name);
508
509 // Create MOAB instance
510 moab::Core mb_instance; // mesh database
511 moab::Interface &moab = mb_instance; // mesh database interface
512
513 // Create MoFEM instance
514 MoFEM::Core core(moab); // finite element database
515 MoFEM::Interface &m_field = core; // finite element interface
516
517 // Run the main analysis
518 PhotonDiffusion heat_problem(m_field);
519 CHKERR heat_problem.runProgram();
520 }
522
523 // Finish work: cleaning memory, getting statistics, etc.
525
526 return 0;
527}
#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
cell_forces.cpp, 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, mofem/users_modules/bone_remodelling/src/impl/Remodeling.cpp, nonlinear_elastic.cpp, plastic.cpp, thermo_elastic.cpp, and thermoplastic.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

refractive index of diffusive medium

Examples
/home/lk58p/mofem_install/vanilla_dev_release/mofem-cephas/mofem/users_modules/eshelbian_plasticity/src/impl/EshelbianOperators.cpp, /home/lk58p/mofem_install/vanilla_dev_release/mofem-cephas/mofem/users_modules/eshelbian_plasticity/src/impl/EshelbianPlasticity.cpp, HenckyOps.hpp, PlasticOpsGeneric.hpp, PlasticOpsLargeStrains.hpp, PlasticOpsSmallStrains.hpp, ThermoPlasticOps.hpp, cell_forces.cpp, mofem/atom_tests/bernstein_bezier_generate_base.cpp, mofem/atom_tests/boundary_marker.cpp, mofem/atom_tests/child_and_parent.cpp, mofem/atom_tests/gauss_points_on_outer_product.cpp, mofem/atom_tests/prism_elements_from_surface.cpp, mofem/atom_tests/prism_polynomial_approximation.cpp, mofem/atom_tests/quad_polynomial_approximation.cpp, mofem/tutorials/adv-0_plasticity/src/PlasticOpsGeneric.hpp, mofem/tutorials/adv-0_plasticity/src/PlasticOpsLargeStrains.hpp, mofem/tutorials/adv-0_plasticity/src/PlasticOpsSmallStrains.hpp, mofem/tutorials/adv-5_poroelasticity/seepage.cpp, mofem/tutorials/cor-12_cohesive_interface/arc_length_interface.cpp, mofem/tutorials/max-1_lorentz_force//lorentz_force.cpp, mofem/tutorials/vec-1_eigen_elasticity/eigen_elastic.cpp, mofem/tutorials/vec-2_nonlinear_elasticity/src/HenckyOps.hpp, mofem/tutorials/vec-5_free_surface/free_surface.cpp, mofem/users_modules/basic_finite_elements/src/HookeElement.hpp, mofem/users_modules/basic_finite_elements/src/impl/HookeElement.cpp, mofem/users_modules/basic_finite_elements/src/impl/NavierStokesElement.cpp, mofem/users_modules/bone_remodelling/src/impl/Remodeling.cpp, thermo_elastic.cpp, and thermoplastic.cpp.

Definition at line 39 of file initial_diffusion.cpp.

◆ 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

Definition at line 62 of file initial_diffusion.cpp.

◆ v

const double v = c / n

phase velocity of light in medium (cm/ns)

Examples
/home/lk58p/mofem_install/vanilla_dev_release/mofem-cephas/mofem/users_modules/eshelbian_plasticity/src/impl/EshelbianOperators.cpp, /home/lk58p/mofem_install/vanilla_dev_release/mofem-cephas/mofem/users_modules/eshelbian_plasticity/src/impl/EshelbianPlasticity.cpp, HenckyOps.hpp, 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, mofem/users_modules/basic_finite_elements/src/impl/NavierStokesElement.cpp, plastic.cpp, and thermoplastic.cpp.

Definition at line 41 of file initial_diffusion.cpp.