86 {
87
88
90
91 moab::Core moab_core;
92 moab::Interface &moab = moab_core;
93
94 try {
95
96
98 PetscBool flg_test = PETSC_FALSE;
99 PetscOptionsBegin(PETSC_COMM_WORLD, "", "Poisson's problem options",
100 "none");
101
103 PETSC_NULLPTR);
104
105 CHKERR PetscOptionsBool(
"-test",
"if true is ctest",
"", flg_test,
106 &flg_test, PETSC_NULLPTR);
107 PetscOptionsEnd();
108
109
112
114
115
118
119
120
121
122
123
124
125
126 boost::shared_ptr<ForcesAndSourcesCore>
127 domain_lhs_fe;
128 boost::shared_ptr<ForcesAndSourcesCore>
129 boundary_lhs_fe;
130 boost::shared_ptr<ForcesAndSourcesCore>
131 domain_rhs_fe;
132 boost::shared_ptr<ForcesAndSourcesCore>
133 boundary_rhs_fe;
134 boost::shared_ptr<ForcesAndSourcesCore>
135 domain_error;
136 boost::shared_ptr<PoissonExample::PostProcFE>
137 post_proc_volume;
138 boost::shared_ptr<ForcesAndSourcesCore> null;
139 {
140
141
145 domain_lhs_fe, boundary_lhs_fe, domain_rhs_fe, boundary_rhs_fe,
147
148
151 global_error, domain_error);
152
155 }
156
157
158
160
162
163
164 {
165
166
168
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
186 1);
187
190
191
192
193
196
197
203 "ERROR", 0);
204
205
206
207
209 }
210
211
212
213
214
215
216
217
218
219 DM dm;
220
222
223
224
225
226
227
228
229 {
230
232 domain_lhs_fe, null, null);
234 boundary_lhs_fe, null, null);
235
237 domain_rhs_fe, null, null);
239 boundary_rhs_fe, null, null);
240 }
241
242
243 {
244
245
247 CHKERR DMCreateGlobalVector(dm, &
F);
248
249
251
252
253 SNES solver;
254 CHKERR SNESCreate(PETSC_COMM_WORLD, &solver);
255 CHKERR SNESSetFromOptions(solver);
256 CHKERR SNESSetDM(solver, dm);
257
259
260
261
264 solver, "nonlinear poisson");
265
266
267
269
270
271 CHKERR SNESDestroy(&solver);
274 }
275
276
277 {
278
279
281 domain_error);
283 global_error);
285 if (flg_test == PETSC_TRUE) {
287 }
288 }
289
290 {
291
292
294 post_proc_volume);
295
296 post_proc_volume->writeFile("out_vol.h5m");
297 }
298
299
301
302
303 CHKERR VecDestroy(&global_error);
304 }
306
307
309
310 return 0;
311}
#define CATCH_ERRORS
Catch errors.
@ AINSWORTH_LEGENDRE_BASE
Ainsworth Cole (Legendre) approx. base .
@ L2
field with C-1 continuity
#define CHKERR
Inline error check.
PetscErrorCode DMoFEMMeshToGlobalVector(DM dm, Vec g, InsertMode mode, ScatterMode scatter_mode, RowColData rc=RowColData::COL)
set ghosted vector values on all existing mesh entities
PetscErrorCode DMMoFEMSNESSetFunction(DM dm, const char fe_name[], MoFEM::FEMethod *method, MoFEM::BasicMethod *pre_only, MoFEM::BasicMethod *post_only)
set SNES residual evaluation function
PetscErrorCode DMMoFEMSNESSetJacobian(DM dm, const char fe_name[], MoFEM::FEMethod *method, MoFEM::BasicMethod *pre_only, MoFEM::BasicMethod *post_only)
set SNES Jacobian evaluation function
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.
const FTensor::Tensor2< T, Dim, Dim > Vec
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 data field.
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 createFEToAssembleMatrixAndVectorForNonlinearProblem(boost::function< double(const double, const double, const double)> f_u, boost::function< double(const double, const double, const double)> f_source, boost::function< double(const double)> a, boost::function< double(const double)> diff_a, 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, ForcesAndSourcesCore::RuleHookFun vol_rule, ForcesAndSourcesCore::RuleHookFun face_rule=FaceRule(), bool trans=true) const
Create finite element to calculate matrix and vectors.
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.