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    
  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 .
@ 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 KSP right hand side evaluation function
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.
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 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.