70 {
71
72
74
75 try {
76
77
78 moab::Core moab_core;
79 moab::Interface &moab = moab_core;
80
81
83 PetscBool flg_test = PETSC_FALSE;
84 PetscOptionsBegin(PETSC_COMM_WORLD, "", "Poisson's problem options",
85 "none");
86
88 PETSC_NULLPTR);
89
90 CHKERR PetscOptionsBool(
"-test",
"if true is ctest",
"", flg_test,
91 &flg_test, PETSC_NULLPTR);
92 PetscOptionsEnd();
93
94
97
99
100
101 Vec global_error;
103
104
105
106
107
108
109
110
111 boost::shared_ptr<ForcesAndSourcesCore> domain_lhs_fe;
112 boost::shared_ptr<ForcesAndSourcesCore> boundary_lhs_fe;
113 boost::shared_ptr<ForcesAndSourcesCore> domain_rhs_fe;
114 boost::shared_ptr<ForcesAndSourcesCore> boundary_rhs_fe;
115 boost::shared_ptr<ForcesAndSourcesCore> domain_error;
116 boost::shared_ptr<PoissonExample::PostProcFE>
117 post_proc_volume;
118 boost::shared_ptr<ForcesAndSourcesCore> null;
119 {
120
124 boundary_lhs_fe, domain_rhs_fe, boundary_rhs_fe);
125
126
129 global_error, domain_error);
130
133 }
134
135
136
138
140
141
142 {
143
144
146
148
149
150
151
152
153
154
155
156
157
158
159
160
162
164
165
166
167
169
170
174
175
176
178
179 }
180
181
182
183
184
185
186
187 DM dm;
188
190
191
192
193
194
195
196
197 {
198
203 null);
204
206 domain_rhs_fe, null, null);
208 boundary_rhs_fe, null, null);
209 }
210
211
212 {
213
214
216 CHKERR DMCreateGlobalVector(dm,&
F);
217
218
220
221
222 KSP solver;
223 CHKERR KSPCreate(PETSC_COMM_WORLD,&solver);
224 CHKERR KSPSetFromOptions(solver);
225 CHKERR KSPSetDM(solver,dm);
226
228
229
230
232
233
235
236
237 CHKERR KSPDestroy(&solver);
240 }
241
242
243 {
244
246 domain_error);
248 global_error);
250 if (flg_test == PETSC_TRUE) {
252 }
253 }
254
255 {
256
257
259 post_proc_volume);
260
261 post_proc_volume->writeFile("out_vol.h5m");
262 }
263
264
266
267
268 CHKERR VecDestroy(&global_error);
269 }
271
272
274
275 return 0;
276
277}
#define CATCH_ERRORS
Catch errors.
@ AINSWORTH_LEGENDRE_BASE
Ainsworth Cole (Legendre) approx. base nme:nme847.
@ L2
field with C-1 continuity
#define CHKERR
Inline error check.
PetscErrorCode DMRegister_MoFEM(const char sname[])
Register MoFEM problem.
PetscErrorCode DMMoFEMKSPSetComputeRHS(DM dm, const char fe_name[], MoFEM::FEMethod *method, MoFEM::BasicMethod *pre_only, MoFEM::BasicMethod *post_only)
Set compute operator for KSP solver via sub-matrix and IS.
PetscErrorCode DMoFEMLoopFiniteElements(DM dm, const char fe_name[], MoFEM::FEMethod *method, CacheTupleWeakPtr cache_ptr=CacheTupleSharedPtr())
Executes FEMethod for finite elements in DM.
PetscErrorCode DMoFEMMeshToGlobalVector(DM dm, Vec g, InsertMode mode, ScatterMode scatter_mode)
set ghosted vector values on all existing mesh entities
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.
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.
Simple interface for fast problem set-up.
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.
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 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 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 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 setUp(const PetscBool is_partitioned=PETSC_TRUE)
Setup problem.
const std::string getDomainFEName() const
Get the Domain FE Name.
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface reference to pointer of interface.
MoFEMErrorCode createGhostVec(Vec *ghost_vec) const
MoFEMErrorCode testError(Vec ghost_vec)
Test error.
MoFEMErrorCode assembleGhostVector(Vec ghost_vec) const
Assemble error vector.
MoFEMErrorCode printError(Vec ghost_vec)
Print error.
Create finite elements instances.
MoFEMErrorCode creatFEToPostProcessResults(boost::shared_ptr< PostProcFE > &post_proc_volume) const
Create finite element to post-process results.
MoFEMErrorCode createFEToEvaluateError(boost::function< double(const double, const double, const double)> f_u, boost::function< FTensor::Tensor1< double, 3 >(const double, const double, const double)> g_u, Vec global_error, boost::shared_ptr< ForcesAndSourcesCore > &domain_error) const
Create finite element to calculate error.
MoFEMErrorCode createFEToAssembleMatrixAndVector(boost::function< double(const double, const double, const double)> f_u, boost::function< double(const double, const double, const double)> f_source, boost::shared_ptr< ForcesAndSourcesCore > &domain_lhs_fe, boost::shared_ptr< ForcesAndSourcesCore > &boundary_lhs_fe, boost::shared_ptr< ForcesAndSourcesCore > &domain_rhs_fe, boost::shared_ptr< ForcesAndSourcesCore > &boundary_rhs_fe, bool trans=true) const
Create finite element to calculate matrix and vectors.