48 int main(
int argc,
char *argv[])
52 MPI_Init(&argc, &argv);
53 MPI_Comm_size(MPI_COMM_WORLD, &num_procs);
54 MPI_Comm_rank(MPI_COMM_WORLD, &myid);
57 const char *mesh_file =
"../data/star.mesh";
60 bool static_cond =
false;
61 bool hybridization =
false;
62 bool visualization = 1;
65 args.
AddOption(&mesh_file,
"-m",
"--mesh",
68 "Finite element order (polynomial degree).");
69 args.
AddOption(&set_bc,
"-bc",
"--impose-bc",
"-no-bc",
"--dont-impose-bc",
70 "Impose or not essential boundary conditions.");
71 args.
AddOption(&
freq,
"-f",
"--frequency",
"Set the frequency for the exact"
73 args.
AddOption(&static_cond,
"-sc",
"--static-condensation",
"-no-sc",
74 "--no-static-condensation",
"Enable static condensation.");
75 args.
AddOption(&hybridization,
"-hb",
"--hybridization",
"-no-hb",
76 "--no-hybridization",
"Enable hybridization.");
77 args.
AddOption(&visualization,
"-vis",
"--visualization",
"-no-vis",
79 "Enable or disable GLVis visualization.");
100 ifstream imesh(mesh_file);
105 cerr <<
"\nCan not open mesh file: " << mesh_file <<
'\n' << endl;
110 mesh =
new Mesh(imesh, 1, 1);
121 (int)floor(log(1000./mesh->
GetNE())/log(2.)/
dim);
122 for (
int l = 0; l < ref_levels; l++)
136 int par_ref_levels = 2;
137 for (
int l = 0; l < par_ref_levels; l++)
151 cout <<
"Number of finite element unknowns: " << size << endl;
162 ess_bdr = set_bc ? 1 : 0;
204 else if (hybridization)
220 cout <<
"Size of linear system: " << glob_size << endl;
237 if (dim == 2) { prec =
new HypreAMS(A, prec_fespace); }
238 else { prec =
new HypreADS(A, prec_fespace); }
252 cout <<
"\n|| F_h - F ||_{L^2} = " << err <<
'\n' << endl;
259 ostringstream mesh_name, sol_name;
260 mesh_name <<
"mesh." << setfill(
'0') << setw(6) << myid;
261 sol_name <<
"sol." << setfill(
'0') << setw(6) << myid;
263 ofstream mesh_ofs(mesh_name.str().c_str());
264 mesh_ofs.precision(8);
265 pmesh->
Print(mesh_ofs);
267 ofstream sol_ofs(sol_name.str().c_str());
268 sol_ofs.precision(8);
275 char vishost[] =
"localhost";
278 sol_sock <<
"parallel " << num_procs <<
" " << myid <<
"\n";
279 sol_sock.precision(8);
280 sol_sock <<
"solution\n" << *pmesh << x << flush;
330 f(0) = temp*cos(kappa*x)*sin(kappa*y);
331 f(1) = temp*cos(kappa*y)*sin(kappa*x);
int Size() const
Logical size of the array.
Conjugate gradient method.
MPI_Comm GetComm() const
MPI communicator.
The Auxiliary-space Maxwell Solver in hypre.
double ComputeL2Error(Coefficient *exsol[], const IntegrationRule *irs[]=NULL) const
The Auxiliary-space Divergence Solver in hypre.
Subclass constant coefficient.
virtual void ReorientTetMesh()
See the remarks for the serial version in mesh.hpp.
HYPRE_Int GlobalTrueVSize()
int Size() const
Returns the size of the vector.
int GetNE() const
Returns number of elements.
virtual void Save(std::ostream &out) const
Abstract parallel finite element space.
void ProjectCoefficient(Coefficient &coeff)
virtual void Mult(const Vector &x, Vector &y) const
Operator application.
(Q div u, div v) for RT elements
The BoomerAMG solver in hypre.
HYPRE_Int GetGlobalNumRows() const
void SetPrintLevel(int print_lvl)
void UniformRefinement(int i, const DSTable &, int *, int *, int *)
void SetMaxIter(int max_it)
void F_exact(const Vector &, Vector &)
void PrintUsage(std::ostream &out) const
Arbitrary order H(div)-conforming Raviart-Thomas finite elements.
int SpaceDimension() const
Array< int > bdr_attributes
int main(int argc, char *argv[])
void SetRelTol(double rtol)
Base class Coefficient that may optionally depend on time.
virtual void GetEssentialTrueDofs(const Array< int > &bdr_attr_is_ess, Array< int > &ess_tdof_list)
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)
void f_exact(const Vector &, Vector &)
void PrintOptions(std::ostream &out) const
Abstract class for hypre's solvers and preconditioners.
for VectorFiniteElements (Nedelec, Raviart-Thomas)
virtual void SetOperator(const Operator &op)
Also calls SetOperator for the preconditioner if there is one.
virtual void SetPreconditioner(Solver &pr)
This should be called before SetOperator.
Class for parallel grid function.
Wrapper for hypre's ParCSR matrix class.
Class for parallel meshes.
Integrator for (Q u, v) for VectorFiniteElements.
virtual void Print(std::ostream &out=std::cout) const