Files
SERiF/tests/poly/polyTest.cpp

67 lines
2.5 KiB
C++

/* ***********************************************************************
//
// Copyright (C) 2025 -- The 4D-STAR Collaboration
// File Author: Emily Boudreaux
// Last Modified: March 18, 2025
//
// 4DSSE is free software; you can use it and/or modify
// it under the terms and restrictions the GNU General Library Public
// License version 3 (GPLv3) as published by the Free Software Foundation.
//
// 4DSSE is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public License
// along with this software; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// *********************************************************************** */
#include <gtest/gtest.h>
#include <iostream>
#include "quill/LogMacros.h"
#include "mfem.hpp"
#include "resourceManager.h"
#include "resourceManagerTypes.h"
#include "polySolver.h"
#include "polyCoeff.h"
#include "probe.h"
#include "config.h"
#include "meshIO.h"
std::string CONFIG_FILENAME = std::string(getenv("MESON_SOURCE_ROOT")) + "/tests/testsConfig.yaml";
class polyTest : public ::testing::Test {};
TEST_F(polyTest, Solve) {
Config& config = Config::getInstance();
config.loadConfig(CONFIG_FILENAME);
Probe::LogManager& logManager = Probe::LogManager::getInstance();
quill::Logger* logger = logManager.getLogger("log");
ResourceManager& rm = ResourceManager::getInstance();
const Resource& resource = rm.getResource("mesh:polySphere");
const auto &meshIO = std::get<std::unique_ptr<MeshIO>>(resource);
LOG_INFO(logger, "Starting polytrope solve test 1...");
config.loadConfig(CONFIG_FILENAME);
double polytropicIndex = config.get<double>("Tests:Poly:Index", 1);
double polyRadius = polycoeff::x1(polytropicIndex);
LOG_INFO(logger, "Solving polytrope with n = {:0.2f}", polytropicIndex);
meshIO->LinearRescale(polyRadius);
mfem::Mesh& mesh = meshIO->GetMesh();
double radius = Probe::getMeshRadius(mesh);
LOG_INFO(logger, "Mesh radius: {:0.4f} (target={:0.4f})", radius, polyRadius);
PolySolver polytrope(polytropicIndex, 1, mesh);
LOG_INFO(logger, "Solving polytrope...");
EXPECT_NO_THROW(polytrope.solve());
LOG_INFO(logger, "Polytrope solved.");
}