v0.10.0
Classes | Macros | Functions | Variables
cylindrical_best_approximation.cpp File Reference
#include <MoFEM.hpp>
#include <Projection10NodeCoordsOnField.hpp>
#include <HelmholtzElementObsolete.hpp>
#include <boost/numeric/ublas/vector_proxy.hpp>
#include <FieldApproximationObsolete.hpp>
#include <PotsProcOnRefMesh.hpp>
#include <boost/iostreams/tee.hpp>
#include <boost/iostreams/stream.hpp>
#include <petsctime.h>
#include <fstream>
#include <iostream>
#include <stdexcept>
#include <cmath>
#include <boost/math/special_functions.hpp>
#include <complex>

Go to the source code of this file.

Classes

struct  MyFunApprox_re
 

Macros

#define HOON
 

Functions

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

Variables

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

Macro Definition Documentation

◆ HOON

#define HOON

Definition at line 40 of file cylindrical_best_approximation.cpp.

Function Documentation

◆ main()

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

Definition at line 177 of file cylindrical_best_approximation.cpp.

177  {
178 
179 
180 
181 
182  PetscInitialize(&argc,&argv,(char *)0,help);
183 
184  moab::Core mb_instance;
185  Interface& moab = mb_instance;
186  int rank;
187  MPI_Comm_rank(PETSC_COMM_WORLD,&rank);
188 
189  PetscBool flg = PETSC_TRUE;
190  char mesh_file_name[255];
191  ierr = PetscOptionsGetString(PETSC_NULL,"-my_file",mesh_file_name,255,&flg); CHKERRQ(ierr);
192  if(flg != PETSC_TRUE) {
193  SETERRQ(PETSC_COMM_SELF,1,"*** ERROR -my_file (MESH FILE NEEDED)");
194  }
195 
196  ParallelComm* pcomm = ParallelComm::get_pcomm(&moab,MYPCOMM_INDEX);
197  if(pcomm == NULL) pcomm = new ParallelComm(&moab,PETSC_COMM_WORLD);
198 
199  const char *option;
200  option = "";//"PARALLEL=BCAST;";//;DEBUG_IO";
201  BARRIER_RANK_START(pcomm)
202  rval = moab.load_file(mesh_file_name, 0, option); CHKERR_PETSC(rval);
203  BARRIER_RANK_END(pcomm)
204 
205  //Create MoFEM (Joseph) database
206  MoFEM::Core core(moab);
207  MoFEM::Interface& m_field = core;
208 
209  //count the comsumption of time by single run
210  PetscLogDouble t1,t2;
211  PetscLogDouble v1,v2;
212  ierr = PetscTime(&v1); CHKERRQ(ierr);
213  ierr = PetscGetCPUTime(&t1); CHKERRQ(ierr);
214 
215  //set entitities bit level
216  BitRefLevel bit_level0;
217  bit_level0.set(0);
218  EntityHandle meshset_level0;
219  rval = moab.create_meshset(MESHSET_SET,meshset_level0); CHKERR_PETSC(rval);
220  ierr = m_field.seed_ref_level_3D(0,bit_level0); CHKERRQ(ierr);
221 
222  //Fields
223  ierr = m_field.add_field("reEX",H1,AINSWORTH_LEGENDRE_BASE,1); CHKERRQ(ierr);
224  ierr = m_field.add_field("imEX",H1,AINSWORTH_LEGENDRE_BASE,1); CHKERRQ(ierr);
225  #ifdef HOON
226  ierr = m_field.add_field("MESH_NODE_POSITIONS",H1,AINSWORTH_LEGENDRE_BASE,3,MB_TAG_SPARSE,MF_ZERO); CHKERRQ(ierr);
227  #endif
228 
229  //FE
230  ierr = m_field.add_finite_element("FE1"); CHKERRQ(ierr);
231  ierr = m_field.add_finite_element("FE2"); CHKERRQ(ierr);
232 
233  //Define rows/cols and element data
234  ierr = m_field.modify_finite_element_add_field_row("FE1","reEX"); CHKERRQ(ierr);
235  ierr = m_field.modify_finite_element_add_field_col("FE1","reEX"); CHKERRQ(ierr);
236  ierr = m_field.modify_finite_element_add_field_data("FE1","reEX"); CHKERRQ(ierr);
237  ierr = m_field.modify_finite_element_add_field_data("FE1","imEX"); CHKERRQ(ierr);
238  #ifdef HOON
239  ierr = m_field.modify_finite_element_add_field_data("FE1","MESH_NODE_POSITIONS"); CHKERRQ(ierr);
240  #endif
241 
242  //Define rows/cols and element data
243  ierr = m_field.modify_finite_element_add_field_row("FE2","imEX"); CHKERRQ(ierr);
244  ierr = m_field.modify_finite_element_add_field_col("FE2","imEX"); CHKERRQ(ierr);
245  ierr = m_field.modify_finite_element_add_field_data("FE2","imEX"); CHKERRQ(ierr);
246  #ifdef HOON
247  ierr = m_field.modify_finite_element_add_field_data("FE2","MESH_NODE_POSITIONS"); CHKERRQ(ierr);
248  #endif
249 
250  //Problem
251  ierr = m_field.add_problem("EX1_PROBLEM"); CHKERRQ(ierr);
252  ierr = m_field.add_problem("EX2_PROBLEM"); CHKERRQ(ierr);
253 
254  //set finite elements for problem
255  ierr = m_field.modify_problem_add_finite_element("EX1_PROBLEM","FE1"); CHKERRQ(ierr);
256  ierr = m_field.modify_problem_add_finite_element("EX2_PROBLEM","FE2"); CHKERRQ(ierr);
257  //set refinment level for problem
258  ierr = m_field.modify_problem_ref_level_add_bit("EX1_PROBLEM",bit_level0); CHKERRQ(ierr);
259  ierr = m_field.modify_problem_ref_level_add_bit("EX2_PROBLEM",bit_level0); CHKERRQ(ierr);
260 
261  //meshset consisting all entities in mesh
262  EntityHandle root_set = moab.get_root_set();
263  //add entities to field
264  ierr = m_field.add_ents_to_field_by_type(root_set,MBTET,"reEX"); CHKERRQ(ierr);
265  ierr = m_field.add_ents_to_field_by_type(root_set,MBTET,"imEX"); CHKERRQ(ierr);
266  #ifdef HOON
267  ierr = m_field.add_ents_to_field_by_type(root_set,MBTET,"MESH_NODE_POSITIONS"); CHKERRQ(ierr);
268  #endif
269  //add entities to finite element
270  ierr = m_field.add_ents_to_finite_element_by_type(root_set,MBTET,"FE1"); CHKERRQ(ierr);
271  ierr = m_field.add_ents_to_finite_element_by_type(root_set,MBTET,"FE2"); CHKERRQ(ierr);
272 
273 
274  //set app. order
275  //see Hierarchic Finite Element Bases on Unstructured Tetrahedral Meshes (Mark Ainsworth & Joe Coyle)
276  int order = 3;
277  ierr = PetscOptionsGetInt(PETSC_NULL,"-my_order",&order,&flg); CHKERRQ(ierr);
278  if(flg != PETSC_TRUE) {
279  order = 3;
280  }
281  ierr = m_field.set_field_order(root_set,MBTET,"reEX",order); CHKERRQ(ierr);
282  ierr = m_field.set_field_order(root_set,MBTRI,"reEX",order); CHKERRQ(ierr);
283  ierr = m_field.set_field_order(root_set,MBEDGE,"reEX",order); CHKERRQ(ierr);
284  ierr = m_field.set_field_order(root_set,MBVERTEX,"reEX",1); CHKERRQ(ierr);
285 
286  ierr = m_field.set_field_order(root_set,MBTET,"imEX",order); CHKERRQ(ierr);
287  ierr = m_field.set_field_order(root_set,MBTRI,"imEX",order); CHKERRQ(ierr);
288  ierr = m_field.set_field_order(root_set,MBEDGE,"imEX",order); CHKERRQ(ierr);
289  ierr = m_field.set_field_order(root_set,MBVERTEX,"imEX",1); CHKERRQ(ierr);
290  #ifdef HOON
291  //if(!m_field.check_field("MESH_NODE_POSITIONS")) {
292  ierr = m_field.set_field_order(root_set,MBTET,"MESH_NODE_POSITIONS",2); CHKERRQ(ierr);
293  ierr = m_field.set_field_order(root_set,MBTRI,"MESH_NODE_POSITIONS",2); CHKERRQ(ierr);
294  ierr = m_field.set_field_order(root_set,MBEDGE,"MESH_NODE_POSITIONS",2); CHKERRQ(ierr);
295  ierr = m_field.set_field_order(root_set,MBVERTEX,"MESH_NODE_POSITIONS",1); CHKERRQ(ierr);
296  //}
297  #endif
298 
299  /****/
300  //build database
301  //build field
302  ierr = m_field.build_fields(); CHKERRQ(ierr);
303  #ifdef HOON
304  Projection10NodeCoordsOnField ent_method_material(m_field,"MESH_NODE_POSITIONS");
305  ierr = m_field.loop_dofs("MESH_NODE_POSITIONS",ent_method_material); CHKERRQ(ierr);
306  #endif
307  //build finite elemnts
308  ierr = m_field.build_finite_elements(); CHKERRQ(ierr);
309  //build adjacencies
310  ierr = m_field.build_adjacencies(bit_level0); CHKERRQ(ierr);
311  //build problem
312  ierr = m_field.build_problems(); CHKERRQ(ierr);
313 
314  /****/
315  //mesh partitioning
316  //partition
317  ierr = m_field.simple_partition_problem("EX1_PROBLEM"); CHKERRQ(ierr);
318  ierr = m_field.partition_finite_elements("EX1_PROBLEM"); CHKERRQ(ierr);
319  ierr = m_field.simple_partition_problem("EX2_PROBLEM"); CHKERRQ(ierr);
320  ierr = m_field.partition_finite_elements("EX2_PROBLEM"); CHKERRQ(ierr);
321  //what are ghost nodes, see Petsc Manual
322  ierr = m_field.partition_ghost_dofs("EX1_PROBLEM"); CHKERRQ(ierr);
323  ierr = m_field.partition_ghost_dofs("EX2_PROBLEM"); CHKERRQ(ierr);
324 
325  Mat A;
326  ierr = m_field.MatCreateMPIAIJWithArrays("EX1_PROBLEM",&A); CHKERRQ(ierr);
327  Vec D,F;
328  ierr = m_field.VecCreateGhost("EX1_PROBLEM",ROW,&F); CHKERRQ(ierr);
329  ierr = m_field.VecCreateGhost("EX1_PROBLEM",COL,&D); CHKERRQ(ierr);
330 
331  Mat B;
332  ierr = m_field.MatCreateMPIAIJWithArrays("EX2_PROBLEM",&B); CHKERRQ(ierr);
333  Vec C,G;
334  ierr = m_field.VecCreateGhost("EX2_PROBLEM",ROW,&G); CHKERRQ(ierr);
335  ierr = m_field.VecCreateGhost("EX2_PROBLEM",COL,&C); CHKERRQ(ierr);
336 
337  //Extract data from MAT_HELMHOLTZ block
338  //Exact solution of Impinging sphere from Acoustic isogeometric boundary element analysis by R.N. Simpson etc.
339  static double aNgularfreq;
340  static double sPeed; //Without static. I got error:use of local variable with automatic storage from containing function
341 
342 
343  for(_IT_CUBITMESHSETS_BY_NAME_FOR_LOOP_(m_field,"MAT_HELMHOLTZ",it)) {
344  //for(_IT_CUBITMESHSETS_BY_SET_TYPE_FOR_LOOP_(m_field,"MAT_HELMHOLTZ",it) {
345  //for(_IT_CUBITMESHSETS_BY_SET_TYPE_FOR_LOOP_(m_field,BLOCKSET,it)) {
346 
347  //Get block name
348  //string name = it->get_Cubit_name();
349  //if (name.compare(0,13,"MAT_HELMHOLTZ") == 0)
350  //{
351  //get block attributes
352  vector<double> attributes;
353  ierr = it->get_Cubit_attributes(attributes); CHKERRQ(ierr);
354  if(attributes.size()<2) {
355  SETERRQ1(PETSC_COMM_SELF,1,"not enough block attributes to deffine fluid pressure element, attributes.size() = %d ",attributes.size());
356  }
357  aNgularfreq = attributes[0];
358  sPeed = attributes[1];
359  //}
360  }
361 
362 
363  double wavenumber = aNgularfreq/sPeed;
364 
365  {
366 
367  MyFunApprox_re function_evaluator_re(wavenumber,true);
368  FieldApproximationH1<MyFunApprox_re> field_approximation_re(m_field);
369 
370  field_approximation_re.loopMatrixAndVector(
371  "EX1_PROBLEM","FE1","reEX",A,F,function_evaluator_re);
372  }
373 
374  {
375 
376  MyFunApprox_re function_evaluator_im(wavenumber,false);
377  FieldApproximationH1<MyFunApprox_re> field_approximation_im(m_field);
378 
379  field_approximation_im.loopMatrixAndVector(
380  "EX2_PROBLEM","FE2","imEX",B,G,function_evaluator_im);
381  }
382 
383  //solve real part of the acoustic problem
384  ierr = MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY); CHKERRQ(ierr);
385  ierr = MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY); CHKERRQ(ierr);
386  ierr = VecGhostUpdateBegin(F,ADD_VALUES,SCATTER_REVERSE); CHKERRQ(ierr);
387  ierr = VecGhostUpdateEnd(F,ADD_VALUES,SCATTER_REVERSE); CHKERRQ(ierr);
388  ierr = VecGhostUpdateBegin(F,INSERT_VALUES,SCATTER_FORWARD); CHKERRQ(ierr);
389  ierr = VecGhostUpdateEnd(F,INSERT_VALUES,SCATTER_FORWARD); CHKERRQ(ierr);
390 
391  KSP solver1;
392  ierr = KSPCreate(PETSC_COMM_WORLD,&solver1); CHKERRQ(ierr);
393  ierr = KSPSetOperators(solver1,A,A); CHKERRQ(ierr);
394  ierr = KSPSetFromOptions(solver1); CHKERRQ(ierr);
395  ierr = KSPSetUp(solver1); CHKERRQ(ierr);
396 
397  ierr = KSPSolve(solver1,F,D); CHKERRQ(ierr);
398  ierr = VecGhostUpdateBegin(D,INSERT_VALUES,SCATTER_FORWARD); CHKERRQ(ierr);
399  ierr = VecGhostUpdateEnd(D,INSERT_VALUES,SCATTER_FORWARD); CHKERRQ(ierr);
400 
401  //solve imagine part of the acoustic problem
402  ierr = MatAssemblyBegin(B,MAT_FINAL_ASSEMBLY); CHKERRQ(ierr);
403  ierr = MatAssemblyEnd(B,MAT_FINAL_ASSEMBLY); CHKERRQ(ierr);
404  ierr = VecGhostUpdateBegin(G,ADD_VALUES,SCATTER_REVERSE); CHKERRQ(ierr);
405  ierr = VecGhostUpdateEnd(G,ADD_VALUES,SCATTER_REVERSE); CHKERRQ(ierr);
406  ierr = VecGhostUpdateBegin(G,INSERT_VALUES,SCATTER_FORWARD); CHKERRQ(ierr);
407  ierr = VecGhostUpdateEnd(G,INSERT_VALUES,SCATTER_FORWARD); CHKERRQ(ierr);
408 
409  KSP solver2;
410  ierr = KSPCreate(PETSC_COMM_WORLD,&solver2); CHKERRQ(ierr);
411  ierr = KSPSetOperators(solver2,B,B); CHKERRQ(ierr);
412  ierr = KSPSetFromOptions(solver2); CHKERRQ(ierr);
413  ierr = KSPSetUp(solver2); CHKERRQ(ierr);
414  ierr = KSPSolve(solver2,G,C); CHKERRQ(ierr);
415  ierr = VecGhostUpdateBegin(C,INSERT_VALUES,SCATTER_FORWARD); CHKERRQ(ierr);
416  ierr = VecGhostUpdateEnd(C,INSERT_VALUES,SCATTER_FORWARD); CHKERRQ(ierr);
417  ierr = m_field.set_global_ghost_vector("EX1_PROBLEM",COL,D,INSERT_VALUES,SCATTER_REVERSE); CHKERRQ(ierr);
418  ierr = m_field.set_global_ghost_vector("EX2_PROBLEM",COL,C,INSERT_VALUES,SCATTER_REVERSE); CHKERRQ(ierr);
419 
420 
421  //if(pcomm->rank()==0) {
422  rval = moab.write_file("analytical_solution_mesh.h5m"); CHKERR_PETSC(rval);
423  //}
424 
425  //destroy the solvers
426  ierr = KSPDestroy(&solver1); CHKERRQ(ierr);
427  ierr = VecDestroy(&D); CHKERRQ(ierr);
428  ierr = VecDestroy(&F); CHKERRQ(ierr);
429  ierr = MatDestroy(&A); CHKERRQ(ierr);
430  ierr = KSPDestroy(&solver2); CHKERRQ(ierr);
431  ierr = VecDestroy(&C); CHKERRQ(ierr);
432  ierr = VecDestroy(&G); CHKERRQ(ierr);
433  ierr = MatDestroy(&B); CHKERRQ(ierr);
434 
435 
436  PostProcVolumeOnRefinedMesh post_proc1(m_field);
437  ierr = post_proc1.generateRefereneElemenMesh(); CHKERRQ(ierr);
438  ierr = post_proc1.addFieldValuesPostProc("reEX"); CHKERRQ(ierr);
439  ierr = post_proc1.addFieldValuesPostProc("imEX"); CHKERRQ(ierr);
440  ierr = post_proc1.addFieldValuesPostProc("MESH_NODE_POSITIONS"); CHKERRQ(ierr);
441  ierr = m_field.loop_finite_elements("EX1_PROBLEM","FE1",post_proc1); CHKERRQ(ierr);
442  rval = post_proc1.postProcMesh.write_file("best_approximation_out.h5m","MOAB","PARALLEL=WRITE_PART"); CHKERR_PETSC(rval);
443 
444  //output the results from Docker
445  //char command1[] = "mbconvert ./best_approximation_out.h5m ./best_approximation_out.vtk && cp ./best_approximation_out.vtk ../../../../../mnt/home/Desktop/U_pan/helmholtz_results/";
446  //int todo1 = system( command1 );
447 
448  /** get the time interval **/
449  ierr = PetscTime(&v2);CHKERRQ(ierr);
450  ierr = PetscGetCPUTime(&t2);CHKERRQ(ierr);
451  PetscSynchronizedPrintf(PETSC_COMM_WORLD,"Total Rank %d Time = %f S CPU Time = %f S \n",pcomm->rank(),v2-v1,t2-t1);
452 
453 
454  //typedef tee_device<ostream, ofstream> TeeDevice;
455  //typedef stream<TeeDevice> TeeStream;
456 
457  //ofstream ofs("acoustic_re_field_testing_field_approximation.txt");
458  //TeeDevice tee(cout, ofs);
459  //TeeStream my_split(tee);
460 
461  //Range nodes;
462  //rval = moab.get_entities_by_type(0,MBVERTEX,nodes,true); CHKERR(rval);
463  //MatrixDouble nodes_vals;
464  //nodes_vals.resize(nodes.size(),3); //change the parameter from 3 to 1 ?
465  //rval = moab.tag_get_data(
466  // ent_method_field1_on_10nodeTet.th,nodes,&*nodes_vals.data().begin()); CHKERR(rval);
467 
468 
469  //const double eps = 1e-4;
470 
471  //my_split.precision(3);
472  //my_split.setf(std::ios::fixed);
473  //for(
474  // ublas::unbounded_array<double>::iterator it = nodes_vals.data().begin();
475  // it!=nodes_vals.data().end();it++) {
476  // *it = fabs(*it)<eps ? 0.0 : *it; //if a < b ?then c, :else d
477  //}
478  //my_split << nodes_vals << endl;
479 
480  //const Problem *problemPtr;
481  //ierr = m_field.get_problem("PROBLEM1",&problemPtr); CHKERRQ(ierr);
482  //map<EntityHandle,double> m0,m1,m2;
483  //for(_IT_NUMEREDDOF_ROW_FOR_LOOP_(problemPtr,dit)) {
484 
485  // my_split.precision(3);
486  // my_split.setf(std::ios::fixed);
487  // double val = fabs(dit->getFieldData())<eps ? 0.0 : dit->getFieldData();
488  // my_split << dit->getPetscGlobalDofIdx() << " " << val << endl;
489 
490  //}
491 
492  ierr = PetscFinalize(); CHKERRQ(ierr);
493 
494  return 0;
495 
496 }
static char help[]
virtual MoFEMErrorCode modify_finite_element_add_field_col(const std::string &fe_name, const std::string &name_row)=0
set field col which finite element use
virtual MoFEMErrorCode add_ents_to_finite_element_by_type(const EntityHandle entities, const EntityType type, const std::string &name, const bool recursive=true)=0
add entities to finite element
Deprecated interface functions.
virtual MoFEMErrorCode build_adjacencies(const Range &ents, int verb=DEFAULT_VERBOSITY)=0
build adjacencies
DEPRECATED MoFEMErrorCode set_global_ghost_vector(const Problem *problem_ptr, RowColData rc, Vec V, InsertMode mode, ScatterMode scatter_mode) const
set values of vector from/to mesh database (collective)collective - need tu be run on all processors ...
CoreTmp< 0 > Core
Definition: Core.hpp:1129
const double D
diffusivity
#define BARRIER_RANK_END(PCMB)
Definition: definitions.h:351
virtual DEPRECATED MoFEMErrorCode build_problems(int verb=-1)=0
build problem data structures
#define _IT_CUBITMESHSETS_BY_NAME_FOR_LOOP_(MESHSET_MANAGER, NAME, IT)
Iterator that loops over Cubit BlockSet having a particular name.
virtual MoFEMErrorCode modify_problem_add_finite_element(const std::string &name_problem, const std::string &fe_name)=0
add finite element to problem, this add entities assigned to finite element to a particular problem
virtual MoFEMErrorCode add_field(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_EXCL, int verb=DEFAULT_VERBOSITY)=0
Add field.
virtual MoFEMErrorCode set_field_order(const EntityHandle meshset, const EntityType type, const std::string &name, const ApproximationOrder order, int verb=DEFAULT_VERBOSITY)=0
Set order approximation of the entities in the field.
char mesh_file_name[255]
Projection of edge entities with one mid-node on hierarchical basis.
static MoFEMErrorCodeGeneric< moab::ErrorCode > rval
Definition: Exceptions.hpp:85
PetscErrorCode PetscOptionsGetString(PetscOptions *, const char pre[], const char name[], char str[], size_t size, PetscBool *set)
DEPRECATED MoFEMErrorCode partition_finite_elements(const std::string &name, bool part_from_moab=false, int low_proc=-1, int hi_proc=-1, int verb=-1)
partition finite elements
constexpr int order
#define BARRIER_RANK_START(PCMB)
Definition: definitions.h:328
CHKERRQ(ierr)
virtual MoFEMErrorCode add_ents_to_field_by_type(const Range &ents, const EntityType type, const std::string &name, int verb=DEFAULT_VERBOSITY)=0
Add entities to field meshset.
Ainsworth Cole (Legendre) approx. base .
Definition: definitions.h:152
Post processing.
virtual MoFEMErrorCode loop_dofs(const Problem *problem_ptr, const std::string &field_name, RowColData rc, DofMethod &method, int lower_rank, int upper_rank, int verb=DEFAULT_VERBOSITY)=0
Make a loop over dofs.
virtual MoFEMErrorCode modify_problem_ref_level_add_bit(const std::string &name_problem, const BitRefLevel &bit)=0
add ref level to problem
DEPRECATED MoFEMErrorCode VecCreateGhost(const std::string &name, RowColData rc, Vec *V) const
create ghost vector for problem (collective)collective - need to be run on all processors in communic...
virtual MoFEMErrorCode add_finite_element(const std::string &fe_name, enum MoFEMTypes bh=MF_EXCL, int verb=DEFAULT_VERBOSITY)=0
add finite element
PetscErrorCode PetscOptionsGetInt(PetscOptions *, const char pre[], const char name[], PetscInt *ivalue, PetscBool *set)
virtual MoFEMErrorCode modify_finite_element_add_field_data(const std::string &fe_name, const std::string &name_filed)=0
set finite element field data
#define MYPCOMM_INDEX
default communicator number PCOMM
Definition: definitions.h:292
std::bitset< BITREFLEVEL_SIZE > BitRefLevel
Bit structure attached to each entity identifying to what mesh entity is attached.
Definition: Types.hpp:51
DEPRECATED MoFEMErrorCode partition_ghost_dofs(const std::string &name, int verb=-1)
determine ghost nodes
virtual MoFEMErrorCode build_fields(int verb=DEFAULT_VERBOSITY)=0
virtual MoFEMErrorCode add_problem(const std::string &name, enum MoFEMTypes bh=MF_EXCL, int verb=DEFAULT_VERBOSITY)=0
Add problem.
Finite element for approximating analytical filed on the mesh.
virtual MoFEMErrorCode modify_finite_element_add_field_row(const std::string &fe_name, const std::string &name_row)=0
set field row which finite element use
Core (interface) class.
Definition: Core.hpp:77
continuous field
Definition: definitions.h:177
DEPRECATED MoFEMErrorCode MatCreateMPIAIJWithArrays(const std::string &name, Mat *Aij, int verb=DEFAULT_VERBOSITY)
DEPRECATED MoFEMErrorCode seed_ref_level_3D(const EntityHandle meshset, const BitRefLevel &bit, int verb=-1)
seed 2D entities in the meshset and their adjacencies (only TETs adjacencies) in a particular BitRefL...
virtual MoFEMErrorCode build_finite_elements(int verb=DEFAULT_VERBOSITY)=0
Build finite elementsBuild finite element data structures. Have to be run before problem and adjacenc...
DEPRECATED MoFEMErrorCode loop_finite_elements(const Problem *problem_ptr, const std::string &fe_name, FEMethod &method, int lower_rank, int upper_rank, MoFEMTypes bh, int verb=DEFAULT_VERBOSITY)

Variable Documentation

◆ help

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

Definition at line 49 of file cylindrical_best_approximation.cpp.