8static char help[] =
"...\n\n";
27 post_proc = boost::shared_ptr<PostProcVolumeOnRefinedMesh>(
36 boost::shared_ptr<MatrixDouble>(
data_u, &
data_u->flux_values);
38 boost::shared_ptr<VectorDouble>(
data_u, &
data_u->flux_divs);
40 boost::shared_ptr<VectorDouble>(
data_u, &
data_u->mass_values);
42 boost::shared_ptr<VectorDouble>(
data_u, &
data_u->mass_dots);
45 boost::shared_ptr<MatrixDouble>(
data_v, &
data_v->flux_values);
47 boost::shared_ptr<VectorDouble>(
data_v, &
data_v->flux_divs);
49 boost::shared_ptr<VectorDouble>(
data_v, &
data_v->mass_values);
51 boost::shared_ptr<VectorDouble>(
data_v, &
data_v->mass_dots);
55 boost::shared_ptr<MatrixDouble>(
data_w, &
data_w->flux_values);
57 boost::shared_ptr<VectorDouble>(
data_w, &
data_w->flux_divs);
59 boost::shared_ptr<VectorDouble>(
data_w, &
data_w->mass_values);
61 boost::shared_ptr<VectorDouble>(
data_w, &
data_w->mass_dots);
64 boost::shared_ptr<MatrixDouble>(
data_s, &
data_s->flux_values);
66 boost::shared_ptr<VectorDouble>(
data_s, &
data_s->flux_divs);
68 boost::shared_ptr<VectorDouble>(
data_s, &
data_s->mass_values);
70 boost::shared_ptr<VectorDouble>(
data_s, &
data_s->mass_dots);
82 boost::shared_ptr<VectorDouble> &value_ptr);
84 boost::shared_ptr<PreviousData> &
data_v,
85 boost::shared_ptr<PreviousData> &
data_w,
86 boost::shared_ptr<PreviousData> &
data_s);
89 boost::shared_ptr<VectorDouble> &mass_ptr,
90 boost::shared_ptr<VectorDouble> &mass_dot_ptr);
92 boost::shared_ptr<PreviousData> &
data_v,
93 boost::shared_ptr<PreviousData> &
data_w,
94 boost::shared_ptr<PreviousData> &
data_s);
96 boost::shared_ptr<VectorDouble> &mass_ptr);
101 boost::shared_ptr<VolEle> &initial_ele,
131 boost::shared_ptr<PostProcVolumeOnRefinedMesh>
post_proc;
159 boost::shared_ptr<ForcesAndSourcesCore>
null;
197 std::string natural) {
200 string name = it->getName();
201 if (name.compare(0, 14, natural) == 0) {
205 }
else if (name.compare(0, 14, essential) == 0) {
224 std::string mass_field, boost::shared_ptr<VectorDouble> &mass_ptr) {
233 boost::shared_ptr<PreviousData> &data_v,
234 boost::shared_ptr<PreviousData> &data_w,
235 boost::shared_ptr<PreviousData> &data_s) {
250 std::string mass_field,
251 boost::shared_ptr<VectorDouble> &mass_ptr,
252 boost::shared_ptr<VectorDouble> &mass_dot_ptr) {
265 boost::shared_ptr<PreviousData> &data_v,
266 boost::shared_ptr<PreviousData> &data_w,
267 boost::shared_ptr<PreviousData> &data_s) {
278 std::string mass_field,
279 boost::shared_ptr<VectorDouble> &mass_ptr) {
319 auto vol_rule = [](int, int,
int p) ->
int {
return 2 *
p + 1; };
331 boost::shared_ptr<VolEle> &initial_ele,
double init_val) {
333 initial_ele->getOpPtrVector().push_back(
348 CHKERR TSARKIMEXSetType(
ts, TSARKIMEXA2);
365 post_proc->addFieldValuesPostProc(mass_field);
385 CHKERR TSSetDuration(
ts, PETSC_DEFAULT, ftime);
475 boost::shared_ptr<VolEle> initial_mass_ele(
new VolEle(
m_field));
492 post_proc->generateReferenceElementMesh();
506int main(
int argc,
char *argv[]) {
521 moab::Core mb_instance;
522 moab::Interface &moab = mb_instance;
524 DMType dm_name =
"DMMOFEM";
MoFEM::FaceElementForcesAndSourcesCore FaceEle
#define CATCH_ERRORS
Catch errors.
@ AINSWORTH_LEGENDRE_BASE
Ainsworth Cole (Legendre) approx. base .
@ L2
field with C-1 continuity
@ HDIV
field with continuous normal traction
#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.
PetscErrorCode DMMoFEMTSSetIFunction(DM dm, const char fe_name[], MoFEM::FEMethod *method, MoFEM::BasicMethod *pre_only, MoFEM::BasicMethod *post_only)
set TS implicit function evaluation function
PetscErrorCode DMoFEMMeshToLocalVector(DM dm, Vec l, InsertMode mode, ScatterMode scatter_mode)
set local (or ghosted) vector values on mesh for partition only
PetscErrorCode DMRegister_MoFEM(const char sname[])
Register MoFEM problem.
PetscErrorCode DMoFEMLoopFiniteElements(DM dm, const char fe_name[], MoFEM::FEMethod *method, CacheTupleWeakPtr cache_ptr=CacheTupleSharedPtr())
Executes FEMethod for finite elements in DM.
PetscErrorCode DMMoFEMTSSetIJacobian(DM dm, const std::string fe_name, boost::shared_ptr< MoFEM::FEMethod > method, boost::shared_ptr< MoFEM::BasicMethod > pre_only, boost::shared_ptr< MoFEM::BasicMethod > post_only)
set TS Jacobian evaluation function
PetscErrorCode DMCreateGlobalVector_MoFEM(DM dm, Vec *g)
DMShellSetCreateGlobalVector.
bool checkMeshset(const int ms_id, const CubitBCType cubit_bc_type) const
check for CUBIT Id and CUBIT type
#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.
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
implementation of Data Operators for Forces and Sources
PetscErrorCode DMMoFEMTSSetMonitor(DM dm, TS ts, const std::string fe_name, boost::shared_ptr< MoFEM::FEMethod > method, boost::shared_ptr< MoFEM::BasicMethod > pre_only, boost::shared_ptr< MoFEM::BasicMethod > post_only)
Set Monitor To TS solver.
PetscErrorCode DMMoFEMTSSetRHSFunction(DM dm, const std::string fe_name, boost::shared_ptr< MoFEM::FEMethod > method, boost::shared_ptr< MoFEM::BasicMethod > pre_only, boost::shared_ptr< MoFEM::BasicMethod > post_only)
set TS the right hand side function
PetscErrorCode PetscOptionsGetInt(PetscOptions *, const char pre[], const char name[], PetscInt *ivalue, PetscBool *set)
OpCalculateScalarFieldValuesDot OpCalculateScalarValuesDot
auto createTS(MPI_Comm comm)
MoFEMErrorCode post_proc_fields(std::string mass_field)
MoFEMErrorCode extract_bd_ents(std::string ESSENTIAL, std::string NATURAL)
boost::shared_ptr< VectorDouble > divs_w_ptr
MoFEMErrorCode output_result()
boost::shared_ptr< PreviousData > data_s
boost::shared_ptr< VectorDouble > values_u_ptr
MoFEMErrorCode run_analysis()
boost::shared_ptr< VectorDouble > divs_v_ptr
boost::shared_ptr< ForcesAndSourcesCore > null
MoFEMErrorCode apply_IC(std::string mass_field, Range &surface, boost::shared_ptr< VolEle > &initial_ele, double init_val)
boost::shared_ptr< VectorDouble > dots_s_ptr
MoFEMErrorCode update_stiff_rhs(std::string mass_field, boost::shared_ptr< VectorDouble > &mass_ptr, boost::shared_ptr< VectorDouble > &mass_dot_ptr)
boost::shared_ptr< VectorDouble > values_w_ptr
MoFEMErrorCode setup_system()
MoFEMErrorCode extract_initial_ents(int block_id, Range &surface)
boost::shared_ptr< VectorDouble > dots_u_ptr
boost::shared_ptr< VectorDouble > divs_s_ptr
boost::shared_ptr< MatrixDouble > flux_u_ptr
ElectroPhysioProblem(MoFEM::Core &core, const int order)
boost::shared_ptr< FaceEle > natural_bdry_ele_slow_rhs
Range essential_bdry_ents
boost::shared_ptr< VectorDouble > values_v_ptr
boost::shared_ptr< PreviousData > data_w
boost::shared_ptr< VolEle > vol_ele_stiff_lhs
MoFEMErrorCode update_stiff_lhs(std::string mass_fiedl, boost::shared_ptr< VectorDouble > &mass_ptr)
boost::shared_ptr< MatrixDouble > flux_w_ptr
MoFEMErrorCode apply_BC()
boost::shared_ptr< Monitor > monitor_ptr
MoFEMErrorCode push_slow_rhs(boost::shared_ptr< PreviousData > &data_u, boost::shared_ptr< PreviousData > &data_v, boost::shared_ptr< PreviousData > &data_w, boost::shared_ptr< PreviousData > &data_s)
MoFEMErrorCode set_integration_rule()
boost::shared_ptr< PreviousData > data_v
boost::shared_ptr< VectorDouble > dots_v_ptr
boost::shared_ptr< VectorDouble > divs_u_ptr
Simple * simple_interface
boost::shared_ptr< VolEle > vol_ele_slow_rhs
boost::shared_ptr< MatrixDouble > flux_s_ptr
boost::shared_ptr< VolEle > vol_ele_stiff_rhs
MoFEM::Interface & m_field
boost::shared_ptr< PostProcVolumeOnRefinedMesh > post_proc
MoFEMErrorCode push_stiff_rhs(boost::shared_ptr< PreviousData > &data_u, boost::shared_ptr< PreviousData > &data_v, boost::shared_ptr< PreviousData > &data_w, boost::shared_ptr< PreviousData > &data_s)
MoFEMErrorCode update_slow_rhs(std::string mass_field, boost::shared_ptr< VectorDouble > &value_ptr)
boost::shared_ptr< PreviousData > data_u
boost::shared_ptr< VectorDouble > dots_w_ptr
boost::shared_ptr< VectorDouble > values_s_ptr
boost::shared_ptr< MatrixDouble > flux_v_ptr
MoFEMErrorCode push_stiff_lhs()
virtual moab::Interface & get_moab()=0
virtual MPI_Comm & get_comm() const =0
static MoFEMErrorCode Initialize(int *argc, char ***args, const char file[], const char help[])
Initializes the MoFEM database PETSc, MOAB and MPI.
static MoFEMErrorCode Finalize()
Checks for options to be called at the conclusion of the program.
Deprecated interface functions.
Interface for managing meshsets containing materials and boundary conditions.
Get vector field for H-div approximation.
Calculate divergence of vector field.
Get value at integration points for scalar field.
Problem manager is used to build and partition problems.
Simple interface for fast problem set-up.
const std::string getBoundaryFEName() const
Get the Boundary FE Name.
MoFEMErrorCode loadFile(const std::string options, const std::string mesh_file_name, LoadFileFunc loadFunc=defaultLoadFileFunc)
Load mesh file.
MoFEMErrorCode addDataField(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.
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.
MoFEMErrorCode getOptions()
get options
MoFEMErrorCode getDM(DM *dm)
Get DM.
MoFEMErrorCode setFieldOrder(const std::string field_name, const int order, const Range *ents=NULL)
Set field order.
MoFEMErrorCode addBoundaryField(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 boundary.
MoFEMErrorCode setUp(const PetscBool is_partitioned=PETSC_TRUE)
Setup problem.
const std::string getDomainFEName() const
Get the Domain FE Name.
intrusive_ptr for managing petsc objects
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface refernce to pointer of interface.
VolumeElementForcesAndSourcesCore VolEle