Loading [MathJax]/extensions/tex2jax.js
libMesh
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Pages
Functions | Variables
subdomains_ex3.C File Reference

Go to the source code of this file.

Functions

void integrate_function (const MeshBase &mesh)
 
Real distance (const Point &p)
 
Real integrand (const Point &p)
 
int main (int argc, char **argv)
 

Variables

const Real radius = 0.5
 

Function Documentation

◆ distance()

Real distance ( const Point p)

Definition at line 51 of file subdomains_ex3.C.

References libMesh::TensorTools::norm(), and radius.

Referenced by NonManifoldTestPartitioner::_do_partition(), OverlappingTestPartitioner::_do_partition(), libMesh::MeshCommunication::assign_global_indices(), libMesh::InfElemBuilder::build_inf_elem(), libMesh::EquationSystems::build_parallel_solution_vector(), libMesh::Tet::choose_diagonal(), libMesh::MeshCommunication::find_global_indices(), libMesh::RBParametrized::get_closest_value(), libMesh::EquationSystems::get_vars_active_subdomains(), libMesh::ParmetisPartitioner::initialize(), libMesh::ExodusII_IO_Helper::initialize(), LinearElasticityWithContact::initialize_contact_load_paths(), libMesh::ExodusII_IO_Helper::initialize_element_variables(), integrand(), integrate_function(), libMesh::StoredRange< iterator_type, object_type >::is_divisible(), libMesh::Parallel::Histogram< KeyType, IdxType >::local_bin_size(), libMesh::DofMap::local_variable_indices(), libMesh::DistributedVector< T >::localize(), AugmentSparsityOnInterface::mesh_reinit(), libMesh::TriangulatorInterface::MeshedHole::MeshedHole(), libMesh::ReplicatedMesh::n_active_elem(), libMesh::DistributedMesh::n_active_elem(), libMesh::MeshTools::n_active_elem_of_type(), libMesh::MeshBase::n_active_elem_on_proc(), libMesh::BoundaryInfo::n_boundary_ids(), libMesh::MeshTools::n_elem(), libMesh::MeshTools::n_elem_of_type(), libMesh::MeshBase::n_elem_on_proc(), libMesh::DofMap::n_local_constrained_dofs(), libMesh::MeshTools::n_nodes(), libMesh::MeshBase::n_nodes_on_proc(), libMesh::PetscMatrix< T >::operator()(), libMesh::LinearPartitioner::partition_range(), libMesh::MetisPartitioner::partition_range(), libMesh::SFCPartitioner::partition_range(), libMesh::Partitioner::partition_unpartitioned_elements(), libMesh::LaspackMatrix< T >::pos(), libMesh::Elem::positive_face_orientation(), OverlappingFunctorTest::run_coupling_functor_test(), libMesh::FE< Dim, LAGRANGE_VEC >::shape_deriv(), libMesh::FE< Dim, LAGRANGE_VEC >::shape_second_deriv(), libMesh::StoredRange< iterator_type, object_type >::size(), libMesh::Parallel::BinSorter< KeyType, IdxType >::sizeof_bin(), libMesh::StoredRange< iterator_type, object_type >::StoredRange(), MultiEvaluablePredTest::test(), DefaultCouplingTest::testCoupling(), EquationSystemsTest::testDisableDefaultGhosting(), PartitionerTest< PartitionerSubclass, MeshClass >::testPartition(), CheckpointIOTest::testSplitter(), libMesh::TetGenMeshInterface::triangulate_conformingDelaunayMesh_carvehole(), libMesh::Poly2TriTriangulator::triangulate_current_points(), NonManifoldGhostingFunctorTest::verify_send_list_entries_helper(), libMesh::ExodusII_IO::write_element_data_from_discontinuous_nodal_data(), libMesh::ExodusII_IO_Helper::write_element_values_element_major(), libMesh::Nemesis_IO_Helper::write_exodus_initialization_info(), libMesh::Nemesis_IO_Helper::write_nodal_solution(), and libMesh::VariationalMeshSmoother::writegr().

52 {
53  Point cent(0.8, 0.9);
54  return ((p-cent).norm() - radius);
55 }
const Real radius
auto norm(const T &a) -> decltype(std::abs(a))
Definition: tensor_tools.h:74
A Point defines a location in LIBMESH_DIM dimensional Real space.
Definition: point.h:39

◆ integrand()

Real integrand ( const Point p)

Definition at line 57 of file subdomains_ex3.C.

References distance().

Referenced by integrate_function().

58 {
59  return (distance(p) < 0) ? 10. : 1.;
60 }
Real distance(const Point &p)

◆ integrate_function()

void integrate_function ( const MeshBase mesh)

Definition at line 121 of file subdomains_ex3.C.

References libMesh::FEGenericBase< OutputType >::build(), libMesh::ParallelObject::comm(), distance(), libMesh::FIRST, libMesh::QComposite< QSubCell >::init(), integrand(), libMesh::LAGRANGE, libMesh::libmesh_ignore(), mesh, libMesh::MeshBase::mesh_dimension(), libMesh::out, libMesh::pi, radius, libMesh::Real, and TIMPI::Communicator::sum().

Referenced by main().

122 {
123 #if defined(LIBMESH_HAVE_TRIANGLE) && defined(LIBMESH_HAVE_TETGEN)
124 
125  std::vector<Real> vertex_distance;
126 
128  //QGauss qrule (mesh.mesh_dimension(), FIRST);
129 
130  std::unique_ptr<FEBase> fe (FEBase::build (mesh.mesh_dimension(), FEType (FIRST, LAGRANGE)));
131 
132  Real int_val=0.;
133 
134  const std::vector<Point> & q_points = fe->get_xyz();
135  const std::vector<Real> & JxW = fe->get_JxW();
136 
137  for (const auto & elem : mesh.active_local_element_ptr_range())
138  {
139  vertex_distance.clear();
140 
141  for (unsigned int v=0; v<elem->n_vertices(); v++)
142  vertex_distance.push_back (distance(elem->point(v)));
143 
144  qrule.init (*elem, vertex_distance);
145 
146  fe->reinit (elem,
147  &(qrule.get_points()),
148  &(qrule.get_weights()));
149 
150 
151  // TODO: would it be valuable to have the composite quadrature rule sort
152  // from smallest to largest JxW value to help prevent
153  // ... large + small + large + large + small ...
154  // type truncation errors?
155  for (std::size_t qp=0; qp<q_points.size(); qp++)
156  int_val += JxW[qp] * integrand(q_points[qp]);
157  }
158 
159  mesh.comm().sum (int_val);
160 
161  libMesh::out << "\n***********************************\n"
162  << " int_val = " << int_val << std::endl
163  << " exact_val = " << 1*(2*2 - radius*radius*pi) + 10.*(radius*radius*pi)
164  << "\n***********************************\n"
165  << std::endl;
166 #else
168 #endif
169 }
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition: fe_type.h:196
const Real radius
void sum(T &r) const
MeshBase & mesh
const Parallel::Communicator & comm() const
Real distance(const Point &p)
Real integrand(const Point &p)
void libmesh_ignore(const Args &...)
This class implements generic composite quadrature rules.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
OStreamProxy out
unsigned int mesh_dimension() const
Definition: mesh_base.C:354
const Real pi
.
Definition: libmesh.h:299

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 65 of file subdomains_ex3.C.

References libMesh::command_line_next(), dim, libMesh::TriangleWrapper::init(), integrate_function(), mesh, libMesh::MeshBase::print_info(), libMesh::MeshBase::read(), and libMesh::MeshRefinement::uniformly_refine().

66 {
67  // Initialize libMesh and any dependent libraries, like in example 2.
68  LibMeshInit init (argc, argv);
69 
70  // This example requires Adaptive Mesh Refinement support - although
71  // it only refines uniformly, the refinement code used is the same
72  // underneath. It also requires libmesh support for Triangle and
73  // Tetgen, which means that libmesh must be configured with
74  // --disable-strict-lgpl for this example to run.
75 #if !defined(LIBMESH_HAVE_TRIANGLE) || !defined(LIBMESH_HAVE_TETGEN) || !defined(LIBMESH_ENABLE_AMR)
76  libmesh_example_requires(false, "--disable-strict-lgpl --enable-amr");
77 #else
78 
79  // Skip this 2D example if libMesh was compiled as 1D-only.
80  libmesh_example_requires(2 <= LIBMESH_DIM, "2D support");
81 
82  // Read the mesh from file. This is the coarse mesh that will be used
83  // in example 10 to demonstrate adaptive mesh refinement. Here we will
84  // simply read it in and uniformly refine it 5 times before we compute
85  // with it.
86  Mesh mesh(init.comm());
87 
88  {
89  const unsigned int dim =
91 
92  if (dim == 3)
93  std::cout << "Running in 3D" << std::endl;
94 
95  mesh.read ((dim==2) ? "mesh.xda" : "hybrid_3d.xda");
96  }
97 
98  // Create a MeshRefinement object to handle refinement of our mesh.
99  // This class handles all the details of mesh refinement and coarsening.
100  MeshRefinement mesh_refinement (mesh);
101 
102  // Uniformly refine the mesh, by default 4 times.
103  const int n_refinements =
104  libMesh::command_line_next("-n_refinements", 4);
105 
106  mesh_refinement.uniformly_refine (n_refinements);
107 
108  // Print information about the mesh to the screen.
109  mesh.print_info();
110 
111  // integrate the desired function
113 
114  // All done.
115  return 0;
116 #endif
117 }
T command_line_next(std::string name, T default_value)
Use GetPot&#39;s search()/next() functions to get following arguments from the command line...
Definition: libmesh.C:1078
virtual void read(const std::string &name, void *mesh_data=nullptr, bool skip_renumber_nodes_and_elements=false, bool skip_find_neighbors=false)=0
Interfaces for reading/writing a mesh to/from a file.
unsigned int dim
MeshBase & mesh
The LibMeshInit class, when constructed, initializes the dependent libraries (e.g.
Definition: libmesh.h:90
void integrate_function(const MeshBase &mesh)
Implements (adaptive) mesh refinement algorithms for a MeshBase.
void print_info(std::ostream &os=libMesh::out, const unsigned int verbosity=0, const bool global=true) const
Prints relevant information about the mesh.
Definition: mesh_base.C:1544
void init(triangulateio &t)
Initializes the fields of t to nullptr/0 as necessary.
The Mesh class is a thin wrapper, around the ReplicatedMesh class by default.
Definition: mesh.h:50

Variable Documentation

◆ radius

const Real radius = 0.5