25 const int p,
const int space_dim,
const int type,
104 : H1FESpace_(&H1FESpace),
105 HCurlFESpace_(&HCurlFESpace),
115 ownsWeakDiv_(weakDiv == NULL),
116 ownsGrad_(grad == NULL)
135 if ( weakDiv_ == NULL )
170IrrotationalProjector::InitSolver()
const
188 weakDiv_->
Mult(x,*xDiv_); *xDiv_ *= -1.0;
195 if ( pcg_ == NULL ) { this->InitSolver(); }
196 pcg_->
Mult(RHS_, Psi_);
202 grad_->
Mult(*psi_, y);
208 delete pcg_; pcg_ = NULL;
209 delete amg_; amg_ = NULL;
237DivergenceFreeProjector
265 ParMesh &pmesh,
const char *title,
266 int x,
int y,
int w,
int h,
const char *keys)
268 MPI_Comm comm = pmesh.
GetComm();
271 MPI_Comm_size(comm, &num_procs);
272 MPI_Comm_rank(comm, &myid);
274 bool newly_opened =
false;
275 int connection_failed;
292 if (myid == 0 && newly_opened)
294 sock <<
"window_title '" << title <<
"'\n"
295 <<
"window_geometry "
296 << x <<
" " << y <<
" " << w <<
" " << h <<
"\n";
297 if ( keys ) { sock <<
"keys " << keys <<
"\n"; }
303 connection_failed = !sock && !newly_opened;
305 MPI_Bcast(&connection_failed, 1, MPI_INT, 0, comm);
307 while (connection_failed);
312 int x,
int y,
int w,
int h,
const char *keys,
bool vec)
315 MPI_Comm comm = pmesh.
GetComm();
318 MPI_Comm_size(comm, &num_procs);
319 MPI_Comm_rank(comm, &myid);
321 bool newly_opened =
false;
322 int connection_failed;
334 sock <<
"solution\n";
340 if (myid == 0 && newly_opened)
342 sock <<
"window_title '" << title <<
"'\n"
343 <<
"window_geometry "
344 << x <<
" " << y <<
" " << w <<
" " << h <<
"\n";
345 if ( keys ) { sock <<
"keys " << keys <<
"\n"; }
346 else { sock <<
"keys maaAc"; }
347 if ( vec ) { sock <<
"vvv"; }
353 connection_failed = !sock && !newly_opened;
355 MPI_Bcast(&connection_failed, 1, MPI_INT, 0, comm);
357 while (connection_failed);
T Max() const
Find the maximal element in the array, using the comparison operator < for class T.
void SetSize(int nsize)
Change the logical size of the array, keep existing entries.
void AddDomainInterpolator(DiscreteInterpolator *di)
Adds a domain interpolator. Assumes ownership of di.
virtual void Assemble(int skip_zeros=1)
Construct the internal matrix representation of the discrete linear operator.
const FiniteElementCollection * fec
Associated FE collection (not owned).
Geometry::Type GetGeomType() const
Returns the Geometry::Type of the reference element.
Arbitrary order H1-conforming (continuous) finite elements.
The BoomerAMG solver in hypre.
void SetPrintLevel(int print_level)
void SetPrintLevel(int print_lvl)
void SetPreconditioner(HypreSolver &precond)
Set the hypre solver to be used as a preconditioner.
virtual void Mult(const HypreParVector &b, HypreParVector &x) const
Solve Ax=b with hypre's PCG.
void SetMaxIter(int max_iter)
Wrapper for hypre's ParCSR matrix class.
Class for an integration rule - an Array of IntegrationPoint.
const IntegrationRule & Get(int GeomType, int Order)
Returns an integration rule for given GeomType and Order.
Arbitrary order "L2-conforming" discontinuous finite elements.
Array< int > bdr_attributes
A list of all unique boundary attributes used by the Mesh.
Arbitrary order H(curl)-conforming Nedelec finite elements.
Abstract parallel finite element space.
void GetEssentialTrueDofs(const Array< int > &bdr_attr_is_ess, Array< int > &ess_tdof_list, int component=-1) const override
ParMesh * GetParMesh() const
const FiniteElement * GetFE(int i) const override
Class for parallel grid function.
ParFiniteElementSpace * ParFESpace() const
void SaveAsOne(const char *fname, int precision=16) const
void Update() override
Transform by the Space UpdateMatrix (e.g., on Mesh change).
Class for parallel meshes.
void PrintAsOne(std::ostream &out=mfem::out, const std::string &comments="") const
Arbitrary order H(div)-conforming Raviart-Thomas finite elements.
virtual void Mult(const Vector &x, Vector &y) const
Operator application: y=A(x).
virtual ~DivergenceFreeProjector()
H1_ParFESpace(ParMesh *m, const int p, const int space_dim=3, const int type=BasisType::GaussLobatto, int vdim=1, int order=Ordering::byNODES)
virtual ~IrrotationalProjector()
virtual void Mult(const Vector &x, Vector &y) const
Operator application: y=A(x).
L2_ParFESpace(ParMesh *m, const int p, const int space_dim, int vdim=1, int order=Ordering::byNODES)
ND_ParFESpace(ParMesh *m, const int p, const int space_dim, int vdim=1, int order=Ordering::byNODES)
ParDiscreteCurlOperator(ParFiniteElementSpace *dfes, ParFiniteElementSpace *rfes)
ParDiscreteDivOperator(ParFiniteElementSpace *dfes, ParFiniteElementSpace *rfes)
ParDiscreteGradOperator(ParFiniteElementSpace *dfes, ParFiniteElementSpace *rfes)
virtual ~ParDiscreteInterpolationOperator()
RT_ParFESpace(ParMesh *m, const int p, const int space_dim, int vdim=1, int order=Ordering::byNODES)
int open(const char hostname[], int port)
Open the socket stream on 'port' at 'hostname'.
bool is_open()
True if the socketstream is open, false otherwise.
void VisualizeMesh(socketstream &sock, const char *vishost, int visport, Mesh &mesh, const char *title, int x, int y, int w, int h, const char *keys)
void VisualizeField(socketstream &sock, const char *vishost, int visport, GridFunction &gf, const char *title, int x, int y, int w, int h, const char *keys, bool vec)
IntegrationRules IntRules(0, Quadrature1D::GaussLegendre)
A global object with all integration rules (defined in intrules.cpp)
real_t p(const Vector &x, real_t t)