14static char help[] = 
"...\n\n";
 
   21  const std::vector<unsigned char> &
mArker;
 
   37    auto get_boundary_marker_directly_from_range = [&]() {
 
   38      std::vector<unsigned char> ents_marker_used_for_testing;
 
   44          ents_marker_used_for_testing[3 * side + 0] =
 
   46          ents_marker_used_for_testing[3 * side + 2] =
 
   47              ents_marker_used_for_testing[3 * side + 0];
 
   54        for (
size_t dof = 0; dof != nb_dofs; ++dof)
 
   56            ents_marker_used_for_testing[dof] = is_on_boundary ? 1 : 0;
 
   59      return ents_marker_used_for_testing;
 
   62    auto test_marker = get_boundary_marker_directly_from_range();
 
   63    for (
size_t n = 0; 
n != nb_dofs; ++
n) {
 
   65      if (test_marker[
n] != 
mArker[local_index])
 
   67                "Wrong boundary marker");
 
 
 
   74int main(
int argc, 
char *argv[]) {
 
   80    moab::Core mb_instance;
 
   81    moab::Interface &moab = mb_instance;
 
   90    DMType dm_name = 
"DMMOFEM";
 
   95    CHKERR simple_interface->loadFile(
"");
 
   96    CHKERR simple_interface->addDomainField(
"FIELD1", 
H1,
 
   98    CHKERR simple_interface->setFieldOrder(
"FIELD1", 
order);
 
   99    CHKERR simple_interface->setUp();
 
  101    auto get_ents_on_mesh_skin = [&]() {
 
  106      CHKERR skin.find_skin(0, faces, 
false, skin_edges);
 
  108      CHKERR moab.get_connectivity(skin_edges, skin_verts, 
true);
 
  109      skin_edges.merge(skin_verts);
 
  113    auto mark_boundary_dofs = [&](
Range &skin_edges) {
 
  115      std::vector<unsigned char> 
marker;
 
  116      problem_manager->
markDofs(simple_interface->getProblemName(), 
ROW,
 
  119      problem_manager->modifyMarkDofs(simple_interface->getProblemName(), 
ROW,
 
  125    auto skin_ents = get_ents_on_mesh_skin();
 
  130    auto marker = mark_boundary_dofs(skin_ents);
 
  132    boost::shared_ptr<FaceEle> fe(
new FaceEle(m_field));
 
  133    fe->getOpPtrVector().push_back(
new OpFace(skin_ents, 
marker));
 
  135    auto dm = simple_interface->getDM();
 
 
MoFEM::FaceElementForcesAndSourcesCore FaceEle
#define CATCH_ERRORS
Catch errors.
@ AINSWORTH_LEGENDRE_BASE
Ainsworth Cole (Legendre) approx. base .
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ MOFEM_ATOM_TEST_INVALID
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
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.
auto marker
set bit to marker
const double n
refractive index of diffusive medium
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
implementation of Data Operators for Forces and Sources
PetscErrorCode PetscOptionsGetInt(PetscOptions *, const char pre[], const char name[], PetscInt *ivalue, PetscBool *set)
virtual moab::Interface & get_moab()=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.
Data on single entity (This is passed as argument to DataOperator::doWork)
const VectorInt & getLocalIndices() const
Get local indices of degrees of freedom on entity.
const VectorInt & getIndices() const
Get global indices of degrees of freedom on entity.
default operator for TRI element
int getNumberOfNodesOnElement() const
Get the number of nodes on finite element.
EntityHandle getSideEntity(const int side_number, const EntityType type)
Get the side entity.
@ OPROW
operator doWork function is executed on FE rows
Problem manager is used to build and partition problems.
MoFEMErrorCode markDofs(const std::string problem_name, RowColData rc, const enum MarkOP op, const Range ents, std::vector< unsigned char > &marker) const
Create vector with marked indices.
Simple interface for fast problem set-up.
MoFEMErrorCode getOptions()
get options
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface reference to pointer of interface.
OpFace(const Range &skin_ents, const std::vector< unsigned char > &marker)
MoFEMErrorCode doWork(int side, EntityType type, EntitiesFieldData::EntData &data)
Operator for linear form, usually to calculate values on right hand side.
const std::vector< unsigned char > & mArker