77 int main(
int argc,
char *argv[])
79 const char *mesh_file =
"../../data/star.mesh";
83 const char *device_config =
"cpu";
84 bool visualization =
true;
87 args.
AddOption(&mesh_file,
"-m",
"--mesh",
"Mesh file to use.");
88 args.
AddOption(&ref_levels,
"-r",
"--refine",
89 "Number of times to refine the mesh uniformly.");
90 args.
AddOption(&order,
"-o",
"--order",
"Polynomial degree.");
92 "FE type. h for H1, n for Hcurl, r for Hdiv, l for L2");
93 args.
AddOption(&visualization,
"-vis",
"--visualization",
"-no-vis",
95 "Enable or disable GLVis visualization.");
96 args.
AddOption(&device_config,
"-d",
"--device",
97 "Device configuration string, see Device::Configure().");
100 Device device(device_config);
103 bool H1 =
false, ND =
false, RT =
false, L2 =
false;
104 if (
string(fe) ==
"h") { H1 =
true; }
105 else if (
string(fe) ==
"n") { ND =
true; }
106 else if (
string(fe) ==
"r") { RT =
true; }
107 else if (
string(fe) ==
"l") { L2 =
true; }
108 else { MFEM_ABORT(
"Bad FE type. Must be 'h', 'n', 'r', or 'l'."); }
110 double kappa = (order+1)*(order+1);
112 Mesh mesh(mesh_file, 1, 1);
114 MFEM_VERIFY(
dim == 2 ||
dim == 3,
"Spatial dimension must be 2 or 3.");
120 int b1 = BasisType::GaussLobatto, b2 = BasisType::IntegratedGLL;
121 unique_ptr<FiniteElementCollection> fec;
128 cout <<
"Number of DOFs: " << fes.
GetTrueVSize() << endl;
132 if (!L2) { fes.GetBoundaryTrueDofs(ess_dofs); }
153 if (!L2) {
a.SetAssemblyLevel(AssemblyLevel::PARTIAL); }
172 a.FormLinearSystem(ess_dofs, x,
b, A, X, B);
174 #ifdef MFEM_USE_SUITESPARSE 189 a.RecoverFEMSolution(X,
b, x);
193 cout <<
"L2 error: " << er << endl;
200 mesh.
Save(
"mesh.mesh");
virtual double ComputeL2Error(Coefficient *exsol[], const IntegrationRule *irs[]=NULL, const Array< int > *elems=NULL) const
Class for domain integration L(v) := (f, v)
Conjugate gradient method.
Class for grid function - Vector with associated FE space.
void SetCycle(int c)
Set time cycle (for time-dependent simulations)
int Dimension() const
Dimension of the reference space used within the elements.
Helper class for ParaView visualization data.
Integrator for (curl u, curl v) for Nedelec elements.
Pointer to an Operator of a specified type.
int main(int argc, char *argv[])
virtual void Mult(const Vector &b, Vector &x) const
Operator application: y=A(x).
virtual void Save(const std::string &fname, int precision=16) const
void Print(std::ostream &out=mfem::out)
Print the configuration of the MFEM virtual device object.
(Q div u, div v) for RT elements
virtual void RegisterField(const std::string &field_name, GridFunction *gf)
Add a grid function to the collection.
virtual void SetPrintLevel(int print_lvl)
Legacy method to set the level of verbosity of the solver output.
void UniformRefinement(int i, const DSTable &, int *, int *, int *)
void SetMaxIter(int max_it)
void u_vec(const Vector &xvec, Vector &u)
void SetHighOrderOutput(bool high_order_output_)
void SetTime(double t)
Set physical time (for time-dependent simulations)
Arbitrary order H(div)-conforming Raviart-Thomas finite elements.
A general vector function coefficient.
virtual int GetTrueVSize() const
Return the number of vector true (conforming) dofs.
void SetAbsTol(double atol)
std::function< void(const Vector &, Vector &)> f_vec(bool grad_div_problem)
void SetRelTol(double rtol)
Class FiniteElementSpace - responsible for providing FEM view of the mesh, mainly managing the set of...
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...
virtual void ProjectCoefficient(Coefficient &coeff)
Project coeff Coefficient to this GridFunction. The projection computation depends on the choice of t...
void SetLevelsOfDetail(int levels_of_detail_)
for VectorFiniteElements (Nedelec, Raviart-Thomas)
virtual void SetOperator(const Operator &op)
Also calls SetOperator for the preconditioner if there is one.
A general function coefficient.
Arbitrary order H(curl)-conforming Nedelec finite elements.
virtual void SetPreconditioner(Solver &pr)
This should be called before SetOperator.
Arbitrary order H1-conforming (continuous) finite elements.
virtual void Save() override
double u(const Vector &xvec)
virtual void Save(std::ostream &out) const
Save the GridFunction to an output stream.
The MFEM Device class abstracts hardware devices such as GPUs, as well as programming models such as ...
void ParseCheck(std::ostream &out=mfem::out)
void SetPrefixPath(const std::string &prefix)
Set the path where the DataCollection will be saved.
Represents a solver of type SolverType created using the low-order refined version of the given Bilin...
Arbitrary order "L2-conforming" discontinuous finite elements.
double f(const Vector &p)