Files
mfem/miniapps/spde/visualizer.cpp
T

104 lines
3.1 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 "visualizer.hpp"
#include <string>
namespace mfem
{
namespace spde
{
void Visualizer::ExportToParaView()
{
ParaViewDataCollection paraview_dc("SurrogateMaterial", mesh_);
paraview_dc.SetPrefixPath("ParaView");
paraview_dc.SetLevelsOfDetail(order_);
paraview_dc.SetCycle(0);
paraview_dc.SetDataFormat(VTKFormat::BINARY);
paraview_dc.SetHighOrderOutput(true);
paraview_dc.SetTime(0.0); // set the time
paraview_dc.RegisterField("random_field", &g1_);
if (is_3D_)
{
paraview_dc.RegisterField("topological_support", &g2_);
paraview_dc.RegisterField("imperfect_topology", &g3_);
paraview_dc.RegisterField("level_set", &g4_);
}
paraview_dc.Save();
}
void Visualizer::SendToGLVis(int visport) const
{
std::string vishost{"localhost"};
int num_procs = Mpi::WorldSize();
int process_rank = Mpi::WorldRank();
socketstream uout;
std::ostringstream oss_u;
uout.open(vishost.c_str(), visport);
uout.precision(8);
oss_u.str("");
oss_u.clear();
oss_u << "Random Field";
uout << "parallel " << num_procs << " " << process_rank << "\n"
<< "solution\n"
<< *mesh_ << g1_ << "window_geometry 0 20 400 350 "
<< "window_title '" << oss_u.str() << "'" << std::flush;
uout.close();
if (!is_3D_)
{
return;
}
socketstream vout;
std::ostringstream oss_v;
vout.open(vishost.c_str(), visport);
vout.precision(8);
oss_v.str("");
oss_v.clear();
oss_v << "Topological Support";
vout << "parallel " << num_procs << " " << process_rank << "\n"
<< "solution\n"
<< *mesh_ << g2_ << "window_geometry 403 20 400 350 "
<< "window_title '" << oss_v.str() << "'" << std::flush;
vout.close();
socketstream wout;
std::ostringstream oss_w;
wout.open(vishost.c_str(), visport);
wout.precision(8);
oss_w.str("");
oss_w.clear();
oss_w << "Imperfect Topology";
wout << "parallel " << num_procs << " " << process_rank << "\n"
<< "solution\n"
<< *mesh_ << g3_ << "window_geometry 0 420 400 350 "
<< "window_title '" << oss_w.str() << "'" << std::flush;
wout.close();
socketstream lout;
std::ostringstream oss_l;
lout.open(vishost.c_str(), visport);
lout.precision(8);
oss_l.str("");
oss_l.clear();
oss_l << "Level Set";
lout << "parallel " << num_procs << " " << process_rank << "\n"
<< "solution\n"
<< *mesh_ << g4_ << "window_geometry 403 420 400 350 "
<< "window_title '" << oss_l.str() << "'" << std::flush;
lout.close();
}
} // namespace spde
} // namespace mfem