80int main(
int argc,
char *argv[])
82 const char *mesh_file =
"../../data/star.mesh";
86 const char *device_config =
"cpu";
87 bool visualization =
true;
90 args.
AddOption(&mesh_file,
"-m",
"--mesh",
"Mesh file to use.");
91 args.
AddOption(&ref_levels,
"-r",
"--refine",
92 "Number of times to refine the mesh uniformly.");
93 args.
AddOption(&order,
"-o",
"--order",
"Polynomial degree.");
95 "FE type. h for H1, n for Hcurl, r for Hdiv, l for L2");
96 args.
AddOption(&visualization,
"-vis",
"--visualization",
"-no-vis",
98 "Enable or disable GLVis visualization.");
99 args.
AddOption(&device_config,
"-d",
"--device",
100 "Device configuration string, see Device::Configure().");
103 Device device(device_config);
106 bool H1 =
false, ND =
false, RT =
false, L2 =
false;
107 if (
string(fe) ==
"h") { H1 =
true; }
108 else if (
string(fe) ==
"n") { ND =
true; }
109 else if (
string(fe) ==
"r") { RT =
true; }
110 else if (
string(fe) ==
"l") { L2 =
true; }
111 else { MFEM_ABORT(
"Bad FE type. Must be 'h', 'n', 'r', or 'l'."); }
115 Mesh mesh(mesh_file, 1, 1);
118 MFEM_VERIFY(
dim == 2 ||
dim == 3,
"Mesh dimension must be 2 or 3.");
119 MFEM_VERIFY(!L2 ||
dim == sdim,
"DG surface meshes not supported.");
124 u_vec_coeff(sdim,
u_vec);
127 unique_ptr<FiniteElementCollection> fec;
134 cout <<
"Number of DOFs: " << fes.
GetTrueVSize() << endl;
160 if (!L2 && (H1 || sdim ==
dim)) {
a.SetAssemblyLevel(AssemblyLevel::PARTIAL); }
179 a.FormLinearSystem(ess_dofs, x,
b, A, X, B);
181#ifdef MFEM_USE_SUITESPARSE
196 a.RecoverFEMSolution(X,
b, x);
202 cout <<
"L2 error: " << er << endl;
210 mesh.
Save(
"mesh.mesh");
@ GaussLobatto
Closed type.
@ IntegratedGLL
Integrated GLL indicator functions.
Conjugate gradient method.
virtual void SetOperator(const Operator &op)
Also calls SetOperator for the preconditioner if there is one.
virtual void Mult(const Vector &b, Vector &x) const
Iterative solution of the linear system using the Conjugate Gradient method.
Integrator for for Nedelec elements.
virtual void RegisterField(const std::string &field_name, GridFunction *gf)
Add a grid function to the collection.
void SetCycle(int c)
Set time cycle (for time-dependent simulations)
void SetTime(real_t t)
Set physical time (for time-dependent simulations)
void SetPrefixPath(const std::string &prefix)
Set the path where the DataCollection will be saved.
The MFEM Device class abstracts hardware devices such as GPUs, as well as programming models such as ...
void Print(std::ostream &out=mfem::out)
Print the configuration of the MFEM virtual device object.
for Raviart-Thomas elements
Class for domain integration .
Class FiniteElementSpace - responsible for providing FEM view of the mesh, mainly managing the set of...
virtual int GetTrueVSize() const
Return the number of vector true (conforming) dofs.
void GetBoundaryTrueDofs(Array< int > &boundary_dofs, int component=-1)
Get a list of all boundary true dofs, boundary_dofs. For spaces with 'vdim' > 1, the 'component' para...
A general function coefficient.
Class for grid function - Vector with associated FE space.
virtual void Save(std::ostream &out) const
Save the GridFunction to an output stream.
virtual real_t ComputeL2Error(Coefficient *exsol[], const IntegrationRule *irs[]=NULL, const Array< int > *elems=NULL) const
virtual void ProjectCoefficient(Coefficient &coeff)
Project coeff Coefficient to this GridFunction. The projection computation depends on the choice of t...
Arbitrary order H1-conforming (continuous) finite elements.
void SetRelTol(real_t rtol)
virtual void SetPreconditioner(Solver &pr)
This should be called before SetOperator.
virtual void SetPrintLevel(int print_lvl)
Legacy method to set the level of verbosity of the solver output.
void SetMaxIter(int max_it)
void SetAbsTol(real_t atol)
Arbitrary order "L2-conforming" discontinuous finite elements.
Represents a solver of type SolverType created using the low-order refined version of the given Bilin...
virtual void Save(const std::string &fname, int precision=16) const
int Dimension() const
Dimension of the reference space used within the elements.
int SpaceDimension() const
Dimension of the physical space containing the mesh.
void UniformRefinement(int i, const DSTable &, int *, int *, int *)
Arbitrary order H(curl)-conforming Nedelec finite elements.
Pointer to an Operator of a specified type.
void ParseCheck(std::ostream &out=mfem::out)
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...
Helper class for ParaView visualization data.
void SetHighOrderOutput(bool high_order_output_)
void SetLevelsOfDetail(int levels_of_detail_)
virtual void Save() override
Arbitrary order H(div)-conforming Raviart-Thomas finite elements.
for VectorFiniteElements (Nedelec, Raviart-Thomas)
A general vector function coefficient.
real_t u(const Vector &xvec)
void u_vec(const Vector &xvec, Vector &u)
std::function< void(const Vector &, Vector &)> f_vec(bool grad_div_problem)
std::function< real_t(const Vector &)> f(real_t mass_coeff)