58 for (
int i = 0; i < x.
Size(); i++)
60 x(i) = (2*x(i)-xmin(i)-xmax(i))/(xmax(i)-xmin(i));
69int main(
int argc,
char *argv[])
73 const char *mesh_file =
"../../data/inline-quad.mesh";
79 args.
AddOption(&mesh_file,
"-m",
"--mesh",
80 "Input mesh file to shape materials in.");
81 args.
AddOption(&sd,
"-sd",
"--sub-divisions",
82 "Number of element subdivisions for interface detection.");
83 args.
AddOption(&nclimit,
"-ncl",
"--nc-limit",
84 "Level of hanging nodes allowed (-1 = unlimited).");
85 args.
AddOption(&aniso,
"-a",
"--aniso",
"-i",
"--iso",
86 "Enable anisotropic refinement of quads and hexes.");
87 args.
AddOption(&visport,
"-p",
"--send-port",
"Socket for GLVis.");
93 Mesh mesh(mesh_file, 1, 1);
113 sol_sock.precision(8);
116 for (
int iter = 0; 1; iter++)
119 for (
int i = 0; i < mesh.
GetNE(); i++)
141 if ((
int)matsum != m*(j+1))
158 int dx = 0, dy = 0, dz = 0;
162 for (
int jj = 0; jj <= sd; jj++)
163 for (
int ii = 0; ii < sd; ii++)
165 dx += abs(mat[jj*s + ii+1] - mat[jj*s + ii]);
166 dy += abs(mat[(ii+1)*s + jj] - mat[ii*s + jj]);
171 for (
int kk = 0; kk <= sd; kk++)
172 for (
int jj = 0; jj <= sd; jj++)
173 for (
int ii = 0; ii < sd; ii++)
175 dx += abs(mat[(kk*s + jj)*s + ii+1] - mat[(kk*s + jj)*s + ii]);
176 dy += abs(mat[(kk*s + ii+1)*s + jj] - mat[(kk*s + ii)*s + jj]);
177 dz += abs(mat[((ii+1)*s + jj)*s + kk] - mat[(ii*s + jj)*s + kk]);
181 const int tol = mat.
Size() / 10;
182 if (dx > tol) { type |= 1; }
183 if (dy > tol) { type |= 2; }
184 if (dz > tol) { type |= 4; }
185 if (!type) { type = 7; }
193 sol_sock <<
"solution\n" << mesh << attr;
194 if (iter == 0 && sdim == 2)
196 sol_sock <<
"keys 'RjlmpppppppppppppA*************'\n";
198 if (iter == 0 && sdim == 3)
200 sol_sock <<
"keys 'YYYYYYYYYXXXXXXXmA********8888888pppttt";
201 if (
dim == 3) { sol_sock <<
"iiM"; }
208 cout <<
"Mesh has " << mesh.
GetNE() <<
" elements. \n"
209 <<
"Continue shaping? --> ";
211 if (yn ==
'n' || yn ==
'q') {
break; }
220 for (
int i = 0; i < mesh.
GetNE(); i++)
227 ofstream mesh_ofs(
"shaper.mesh");
228 mesh_ofs.precision(8);
229 mesh.
Print(mesh_ofs);
int Size() const
Return the logical size of the array.
int Append(const T &el)
Append element 'el' to array, resize if necessary.
Class FiniteElementSpace - responsible for providing FEM view of the mesh, mainly managing the set of...
virtual void Update(bool want_transform=true)
Reflect changes in the mesh: update number of DOFs, etc. Also, calculate GridFunction transformation ...
RefinedGeometry * Refine(Geometry::Type Geom, int Times, int ETimes=1)
Class for grid function - Vector with associated FE space.
Class for an integration rule - an Array of IntegrationPoint.
int GetNPoints() const
Returns the number of the points in the integration rule.
IntegrationPoint & IntPoint(int i)
Returns a reference to the i-th integration point.
Arbitrary order "L2-conforming" discontinuous finite elements.
NURBSExtension * NURBSext
Optional NURBS mesh extension.
void GeneralRefinement(const Array< Refinement > &refinements, int nonconforming=-1, int nc_limit=0)
void SetAttribute(int i, int attr)
Set the attribute of element i.
virtual void Print(std::ostream &os=mfem::out, const std::string &comments="") const
int GetNE() const
Returns number of elements.
void GetBoundingBox(Vector &min, Vector &max, int ref=2)
Returns the minimum and maximum corners of the mesh bounding box.
int Dimension() const
Dimension of the reference space used within the elements.
void GetElementTransformation(int i, IsoparametricTransformation *ElTr) const
Builds the transformation defining the i-th element in ElTr. ElTr must be allocated in advance and wi...
int SpaceDimension() const
Dimension of the physical space containing the mesh.
int MeshGenerator() const
Get the mesh generator/type.
virtual void SetCurvature(int order, bool discont=false, int space_dim=-1, int ordering=1)
Set the curvature of the mesh nodes using the given polynomial degree.
Geometry::Type GetElementBaseGeometry(int i) const
virtual void SetAttributes()
Determine the sets of unique attribute values in domain and boundary elements.
void Parse()
Parse the command-line options. Note that this function expects all the options provided through the ...
void PrintUsage(std::ostream &out) const
Print the usage message.
void PrintOptions(std::ostream &out) const
Print the options.
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...
bool Good() const
Return true if the command line options were parsed successfully.
int Size() const
Returns the size of the vector.
real_t Normlp(real_t p) const
Returns the l_p norm of the vector.
GeometryRefiner GlobGeometryRefiner
real_t p(const Vector &x, real_t t)
int material(Vector &x, Vector &xmin, Vector &xmax)