54 int main(
int argc,
char *argv[])
57 const char *mesh_file =
"../../data/beam-tet.vtk";
60 bool visualization = 1;
63 args.
AddOption(&mesh_file,
"-m",
"--mesh",
66 "Set of attributes to remove from the mesh.");
67 args.
AddOption(&bdr_attr,
"-b",
"--bdr-attr",
68 "Set of attributes to assign to the new boundary elements.");
69 args.
AddOption(&visualization,
"-vis",
"--visualization",
"-no-vis",
71 "Enable or disable GLVis visualization.");
80 Mesh mesh(mesh_file, 0, 0);
85 if (bdr_attr.
Size() == 0)
88 for (
int i=0; i<attr.
Size(); i++)
90 bdr_attr[i] = max_bdr_attr + attr[i];
93 MFEM_VERIFY(attr.
Size() == bdr_attr.
Size(),
94 "Size mismatch in attribute arguments.");
100 for (
int i=0; i<attr.
Size(); i++)
102 marker[attr[i]-1] = 1;
103 attr_inv[attr[i]-1] = i;
107 int num_elements = 0;
108 for (
int e=0; e<mesh.
GetNE(); e++)
111 if (!marker[elem_attr-1]) { num_elements++; }
115 int num_bdr_elements = 0;
118 int e1 = -1, e2 = -1;
125 if (a1 == 0 || a2 == 0)
127 if (a1 == 0 && !marker[a2-1]) { num_bdr_elements++; }
128 else if (a2 == 0 && !marker[a1-1]) { num_bdr_elements++; }
132 if (marker[a1-1] && !marker[a2-1]) { num_bdr_elements++; }
133 else if (!marker[a1-1] && marker[a2-1]) { num_bdr_elements++; }
137 cout <<
"Number of Elements: " << mesh.
GetNE() <<
" -> "
138 << num_elements << endl;
139 cout <<
"Number of Boundary Elements: " << mesh.
GetNBE() <<
" -> "
140 << num_bdr_elements << endl;
146 for (
int v=0; v<mesh.
GetNV(); v++)
152 for (
int e=0; e<mesh.
GetNE(); e++)
156 if (!marker[elem_attr-1])
161 trimmed_mesh.AddElement(nel);
166 for (
int be=0; be<mesh.
GetNBE(); be++)
172 if (!marker[elem_attr-1])
175 trimmed_mesh.AddBdrElement(nbel);
182 int e1 = -1, e2 = -1;
185 int i1 = -1, i2 = -1;
192 if (a1 != 0 && a2 != 0)
194 if (marker[a1-1] && !marker[a2-1])
200 trimmed_mesh.AddBdrElement(bel);
202 else if (!marker[a1-1] && marker[a2-1])
208 trimmed_mesh.AddBdrElement(bel);
213 trimmed_mesh.FinalizeTopology();
214 trimmed_mesh.Finalize();
215 trimmed_mesh.RemoveUnusedVertices();
218 ofstream mesh_ofs(
"trimmer.mesh");
219 mesh_ofs.precision(8);
220 trimmed_mesh.Print(mesh_ofs);
228 sol_sock.precision(8);
229 sol_sock <<
"mesh\n" << trimmed_mesh << flush;
Geometry::Type GetGeometryType() const
int Size() const
Return the logical size of the array.
const double * GetVertex(int i) const
Return pointer to vertex i's coordinates.
virtual Element * Duplicate(Mesh *m) const =0
virtual void GetVertices(Array< int > &v) const =0
Returns element's vertices.
int GetNBE() const
Returns number of boundary elements.
int GetNE() const
Returns number of elements.
const Element * GetFace(int i) const
virtual void SetVertices(const int *ind)
Set the indices the element according to the input.
int main(int argc, char *argv[])
Element * NewElement(int geom)
int GetNumFaces() const
Return the number of faces (3D), edges (2D) or vertices (1D).
int AddVertex(double x, double y=0.0, double z=0.0)
void Parse()
Parse the command-line options. Note that this function expects all the options provided through the ...
T Max() const
Find the maximal element in the array, using the comparison operator < for class T.
int GetAttribute() const
Return element's attribute.
void GetBdrElementAdjacentElement(int bdr_el, int &el, int &info) const
For the given boundary element, bdr_el, return its adjacent element and its info, i...
const Element * GetElement(int i) const
void PrintUsage(std::ostream &out) const
Print the usage message.
int SpaceDimension() const
void GetFaceElements(int Face, int *Elem1, int *Elem2) const
Array< int > bdr_attributes
A list of all unique boundary attributes used by the Mesh.
void GetFaceInfos(int Face, int *Inf1, int *Inf2) const
void AddOption(bool *var, const char *enable_short_name, const char *enable_long_name, const char *disable_short_name, const char *disable_long_name, const char *description, bool required=false)
Add a boolean option and set 'var' to receive the value. Enable/disable tags are used to set the bool...
void SetSize(int nsize)
Change the logical size of the array, keep existing entries.
int GetNV() const
Returns number of vertices. Vertices are only at the corners of elements, where you would expect them...
void PrintOptions(std::ostream &out) const
Print the options.
void SetAttribute(const int attr)
Set element's attribute.
Abstract data type element.
Array< int > attributes
A list of all unique element attributes used by the Mesh.
const Element * GetBdrElement(int i) const
double f(const Vector &p)
bool Good() const
Return true if the command line options were parsed successfully.