133 lines
3.3 KiB
C++
133 lines
3.3 KiB
C++
// Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
// at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
// LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
//
|
|
// This file is part of the MFEM library. For more information and source code
|
|
// availability visit https://mfem.org.
|
|
//
|
|
// MFEM is free software; you can redistribute it and/or modify it under the
|
|
// terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
// CONTRIBUTING.md for details.
|
|
|
|
#include "fem_extras.hpp"
|
|
|
|
using namespace std;
|
|
|
|
namespace mfem
|
|
{
|
|
|
|
namespace common
|
|
{
|
|
|
|
H1_FESpace::H1_FESpace(Mesh *m,
|
|
const int p, const int space_dim, const int type,
|
|
int vdim, int order)
|
|
: FiniteElementSpace(m, new H1_FECollection(p,space_dim,type),vdim,order)
|
|
{
|
|
FEC_ = this->FiniteElementSpace::fec;
|
|
}
|
|
|
|
H1_FESpace::~H1_FESpace()
|
|
{
|
|
delete FEC_;
|
|
}
|
|
|
|
ND_FESpace::ND_FESpace(Mesh *m, const int p, const int space_dim,
|
|
int vdim, int order)
|
|
: FiniteElementSpace(m, new ND_FECollection(p,space_dim),vdim,order)
|
|
{
|
|
FEC_ = this->FiniteElementSpace::fec;
|
|
}
|
|
|
|
ND_FESpace::~ND_FESpace()
|
|
{
|
|
delete FEC_;
|
|
}
|
|
|
|
RT_FESpace::RT_FESpace(Mesh *m, const int p, const int space_dim,
|
|
int vdim, int order)
|
|
: FiniteElementSpace(m, new RT_FECollection(p-1,space_dim),vdim,order)
|
|
{
|
|
FEC_ = this->FiniteElementSpace::fec;
|
|
}
|
|
|
|
RT_FESpace::~RT_FESpace()
|
|
{
|
|
delete FEC_;
|
|
}
|
|
|
|
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)
|
|
{
|
|
bool newly_opened = false;
|
|
int connection_failed;
|
|
|
|
do
|
|
{
|
|
if (!sock.is_open() || !sock)
|
|
{
|
|
sock.open(vishost, visport);
|
|
sock.precision(8);
|
|
newly_opened = true;
|
|
}
|
|
sock << "mesh\n";
|
|
|
|
mesh.Print(sock);
|
|
|
|
if (newly_opened)
|
|
{
|
|
sock << "window_title '" << title << "'\n"
|
|
<< "window_geometry "
|
|
<< x << " " << y << " " << w << " " << h << "\n";
|
|
if ( keys ) { sock << "keys " << keys << "\n"; }
|
|
sock << endl;
|
|
}
|
|
|
|
connection_failed = !sock && !newly_opened;
|
|
}
|
|
while (connection_failed);
|
|
}
|
|
|
|
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)
|
|
{
|
|
Mesh &mesh = *gf.FESpace()->GetMesh();
|
|
|
|
bool newly_opened = false;
|
|
int connection_failed;
|
|
|
|
do
|
|
{
|
|
if (!sock.is_open() || !sock)
|
|
{
|
|
sock.open(vishost, visport);
|
|
sock.precision(8);
|
|
newly_opened = true;
|
|
}
|
|
sock << "solution\n";
|
|
|
|
mesh.Print(sock);
|
|
gf.Save(sock);
|
|
|
|
if (newly_opened)
|
|
{
|
|
sock << "window_title '" << title << "'\n"
|
|
<< "window_geometry "
|
|
<< x << " " << y << " " << w << " " << h << "\n";
|
|
if ( keys ) { sock << "keys " << keys << "\n"; }
|
|
else { sock << "keys maaAc\n"; }
|
|
if ( vec ) { sock << "vvv"; }
|
|
sock << endl;
|
|
}
|
|
|
|
connection_failed = !sock && !newly_opened;
|
|
}
|
|
while (connection_failed);
|
|
}
|
|
|
|
} // namespace common
|
|
|
|
} // namespace mfem
|