feat(pythonInterface/eos): fast forward
This commit is contained in:
@@ -1,69 +1,92 @@
|
||||
/* ***********************************************************************
|
||||
//
|
||||
// Copyright (C) 2025 -- The 4D-STAR Collaboration
|
||||
// File Author: Emily Boudreaux
|
||||
// Last Modified: March 20, 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
|
||||
//
|
||||
// *********************************************************************** */
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <variant>
|
||||
#include <memory>
|
||||
|
||||
// EOS table format includes
|
||||
#include "helm.h"
|
||||
|
||||
using EOSTable = std::variant<
|
||||
std::unique_ptr<helmholtz::HELMTable>
|
||||
>;
|
||||
namespace serif::eos {
|
||||
|
||||
/**
|
||||
* @class EOSio
|
||||
* @brief Handles the input/output operations for EOS tables.
|
||||
*
|
||||
* The EOSio class is responsible for loading and managing EOS tables from files.
|
||||
* It supports different formats, currently only HELM format.
|
||||
*
|
||||
* Example usage:
|
||||
* @code
|
||||
* EOSio eosIO("path/to/file");
|
||||
* std::string format = eosIO.getFormat();
|
||||
* EOSTable& table = eosIO.getTable();
|
||||
* @endcode
|
||||
*/
|
||||
class EOSio {
|
||||
private:
|
||||
std::string m_filename; ///< The filename of the EOS table.
|
||||
bool m_loaded = false; ///< Flag indicating if the table is loaded.
|
||||
std::string m_format; ///< The format of the EOS table.
|
||||
EOSTable m_table; ///< The EOS table data.
|
||||
|
||||
/**
|
||||
* @brief Loads the EOS table from the file.
|
||||
*/
|
||||
void load();
|
||||
// EOS table format includes
|
||||
|
||||
using EOSTable = std::variant<
|
||||
std::unique_ptr<serif::eos::helmholtz::HELMTable>
|
||||
>;
|
||||
|
||||
/**
|
||||
* @brief Loads the HELM format EOS table.
|
||||
* @class EosIO
|
||||
* @brief Handles the input/output operations for EOS tables.
|
||||
*
|
||||
* The EosIO class is responsible for loading and managing EOS tables from files.
|
||||
* It supports different formats, currently only HELM format.
|
||||
*
|
||||
* Example usage:
|
||||
* @code
|
||||
* EosIO eosIO("path/to/file");
|
||||
* std::string format = eosIO.getFormat();
|
||||
* EOSTable& table = eosIO.getTable();
|
||||
* @endcode
|
||||
*/
|
||||
void loadHelm();
|
||||
public:
|
||||
/**
|
||||
* @brief Constructs an EosIO object with the given filename.
|
||||
* @param filename The filename of the EOS table.
|
||||
*/
|
||||
explicit EOSio(std::string filename);
|
||||
|
||||
/**
|
||||
* @brief Default destructor.
|
||||
*/
|
||||
~EOSio() = default;
|
||||
class EOSio {
|
||||
private:
|
||||
std::string m_filename; ///< The filename of the EOS table.
|
||||
bool m_loaded = false; ///< Flag indicating if the table is loaded.
|
||||
std::string m_format; ///< The format of the EOS table.
|
||||
EOSTable m_table; ///< The EOS table data.
|
||||
|
||||
/**
|
||||
* @brief Gets the format of the EOS table.
|
||||
* @return The format of the EOS table as a string.
|
||||
*/
|
||||
std::string getFormat() const;
|
||||
/**
|
||||
* @brief Loads the EOS table from the file.
|
||||
*/
|
||||
void load();
|
||||
|
||||
/**
|
||||
* @brief Gets the EOS table.
|
||||
* @return A reference to the EOS table.
|
||||
*/
|
||||
EOSTable& getTable();
|
||||
/**
|
||||
* @brief Loads the HELM format EOS table.
|
||||
*/
|
||||
void loadHelm();
|
||||
public:
|
||||
/**
|
||||
* @brief Constructs an EosIO object with the given filename.
|
||||
* @param filename The filename of the EOS table.
|
||||
*/
|
||||
explicit EOSio(const std::string filename);
|
||||
|
||||
/**
|
||||
* @brief Default destructor.
|
||||
*/
|
||||
~EOSio() = default;
|
||||
|
||||
/**
|
||||
* @brief Gets the format of the EOS table.
|
||||
* @return The format of the EOS table as a string.
|
||||
*/
|
||||
std::string getFormat() const;
|
||||
|
||||
/**
|
||||
* @brief Gets the EOS table.
|
||||
* @return A reference to the EOS table.
|
||||
*/
|
||||
EOSTable& getTable();
|
||||
|
||||
std::string getFilename() const { return m_filename; }
|
||||
};
|
||||
}
|
||||
|
||||
std::string getFilename() const { return m_filename; }
|
||||
};
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// Copyright (C) 2025 -- The 4D-STAR Collaboration
|
||||
// File Authors: Aaron Dotter, Emily Boudreaux
|
||||
// Last Modified: March 06, 2025
|
||||
// Last Modified: March 20, 2025
|
||||
//
|
||||
// 4DSSE is free software; you can use it and/or modify
|
||||
// it under the terms and restrictions the GNU General Library Public
|
||||
@@ -21,10 +21,9 @@
|
||||
// this file contains a C++ conversion of Frank Timmes' fortran code
|
||||
// helmholtz.f90, which implements the Helmholtz Free Energy EOS described
|
||||
// by Timmes & Swesty (2000) doi:10.1086/313304 -- Aaron Dotter 2025
|
||||
|
||||
#pragma once
|
||||
|
||||
#define IMAX 541
|
||||
#define JMAX 201
|
||||
|
||||
#include <array>
|
||||
#include <iostream>
|
||||
@@ -35,21 +34,22 @@
|
||||
|
||||
#include "debug.h"
|
||||
|
||||
/**
|
||||
* @brief 2D array template alias.
|
||||
* @tparam T Type of the array elements.
|
||||
* @tparam J Number of columns.
|
||||
* @tparam I Number of rows.
|
||||
*/
|
||||
template <typename T, std::size_t J, std::size_t I>
|
||||
using array2D = std::array<std::array<T, J>, I>;
|
||||
namespace serif::eos::helmholtz {
|
||||
constexpr int IMAX = 541;
|
||||
constexpr int JMAX = 201;
|
||||
/**
|
||||
* @brief 2D array template alias.
|
||||
* @tparam T Type of the array elements.
|
||||
* @tparam J Number of columns.
|
||||
* @tparam I Number of rows.
|
||||
*/
|
||||
template <typename T, std::size_t J, std::size_t I>
|
||||
using array2D = std::array<std::array<T, J>, I>;
|
||||
|
||||
double** heap_allocate_contiguous_2D_memory(int rows, int cols);
|
||||
double** heap_allocate_contiguous_2D_memory(int rows, int cols);
|
||||
|
||||
void heap_deallocate_contiguous_2D_memory(double **array);
|
||||
void heap_deallocate_contiguous_2D_memory(double **array);
|
||||
|
||||
namespace helmholtz
|
||||
{
|
||||
const double tlo = 3.0, thi = 13.0;
|
||||
const double dlo = -12.0, dhi = 15.0;
|
||||
const double tstp = (thi - tlo) / (JMAX - 1), tstpi = 1 / tstp;
|
||||
|
||||
Reference in New Issue
Block a user