42 for (
int i = 0; i <
p.Size(); i++)
44 p(i) = (
p(i)-pmin(i))/(pmax(i)-pmin(i));
49 int width = 1080, height = 1080;
52 real_t c_re = (col - width/2)*4.0/width;
53 real_t c_im = (row - height/2)*4.0/width;
55 int iteration = 0, maxit = 10000;
56 while (x*x+y*y <= 4 && iteration < maxit)
58 real_t x_new = x*x - y*y + c_re;
63 if (iteration < maxit)
65 return iteration%10+2;
74int main(
int argc,
char *argv[])
76 const char *mesh_file =
"../../data/inline-quad.mesh";
80 bool visualization = 1;
85 args.
AddOption(&mesh_file,
"-m",
"--mesh",
86 "Input mesh file to shape materials in.");
87 args.
AddOption(&sd,
"-sd",
"--sub-divisions",
88 "Number of element subdivisions for interface detection.");
89 args.
AddOption(&nclimit,
"-ncl",
"--nc-limit",
90 "Level of hanging nodes allowed (-1 = unlimited).");
91 args.
AddOption(&aniso,
"-a",
"--aniso",
"-i",
"--iso",
92 "Enable anisotropic refinement of quads and hexes.");
93 args.
AddOption(&visualization,
"-vis",
"--visualization",
"-no-vis",
95 "Enable or disable GLVis visualization.");
96 args.
AddOption(&visport,
"-p",
"--send-port",
"Socket for GLVis.");
102 Mesh mesh(mesh_file, 1, 1);
128 sol_sock.precision(8);
132 for (
int iter = 0; 1; iter++)
135 for (
int e = 0; e < mesh.
GetNE(); e++)
157 if ((
int)matsum != m*(j+1))
174 int dx = 0, dy = 0, dz = 0;
178 for (
int j = 0; j <= sd; j++)
179 for (
int i = 0; i < sd; i++)
181 dx += abs(mat[j*s + i+1] - mat[j*s + i]);
182 dy += abs(mat[(i+1)*s + j] - mat[i*s + j]);
187 for (
int k = 0; k <= sd; k++)
188 for (
int j = 0; j <= sd; j++)
189 for (
int i = 0; i < sd; i++)
191 dx += abs(mat[(k*s + j)*s + i+1] - mat[(k*s + j)*s + i]);
192 dy += abs(mat[(k*s + i+1)*s + j] - mat[(k*s + i)*s + j]);
193 dz += abs(mat[((i+1)*s + j)*s + k] - mat[(i*s + j)*s + k]);
197 const int tol = mat.
Size() / 10;
198 if (dx > tol) { type |= 1; }
199 if (dy > tol) { type |= 2; }
200 if (dz > tol) { type |= 4; }
201 if (!type) { type = 7; }
211 sol_sock <<
"solution\n" << mesh << attr;
212 if (iter == 0 && sdim == 2)
214 sol_sock <<
"keys 'RjlppppppppppppppA*************'\n";
216 if (iter == 0 && sdim == 3)
218 sol_sock <<
"keys 'YYYYYYYYYXXXXXXXmA********8888888pppttt";
219 if (
dim == 3) { sol_sock <<
"iiM"; }
226 cout <<
"Iteration " << iter+1 <<
": mesh has " << mesh.
GetNE() <<
228 if ((iter+1) % 4 == 0)
230 if (!visualization) {
break; }
232 cout <<
"Continue shaping? --> ";
234 if (yn ==
'n' || yn ==
'q') {
break; }
244 for (
int i = 0; i < mesh.
GetNE(); i++)
251 ofstream mesh_ofs(
"mandel.mesh");
252 mesh_ofs.precision(8);
253 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.
virtual void Update()
Transform by the Space UpdateMatrix (e.g., on Mesh change).
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.
void UniformRefinement(int i, const DSTable &, int *, int *, int *)
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 open(const char hostname[], int port)
Open the socket stream on 'port' at 'hostname'.
int material(Vector &p, Vector &pmin, Vector &pmax)
GeometryRefiner GlobGeometryRefiner
real_t p(const Vector &x, real_t t)