232 Sesame(
const std::string &subsection)
237 "material id", material_id_,
"The Sesame Material ID");
241 double pressure(
double rho,
double e)
const final
243 eospac_guard_.ensure_initialized([&]() {
244 this->set_up_database();
248 EOS_INTEGER index = 0;
250 double p, p_drho, p_de;
251 const double rho_scaled = rho / 1.0e3;
252 const double e_scaled = e / 1.0e6;
254 eospac_interface_->interpolate_values(
256 dealii::ArrayView<double>(&p, 1),
257 dealii::ArrayView<double>(&p_drho, 1),
258 dealii::ArrayView<double>(&p_de, 1),
259 dealii::ArrayView<const double>(&rho_scaled, 1),
260 dealii::ArrayView<const double>(&e_scaled, 1));
266 void pressure(
const dealii::ArrayView<double> &p,
267 const dealii::ArrayView<double> &rho,
268 const dealii::ArrayView<double> &e)
const final
270 Assert(p.size() == rho.size() && rho.size() == e.size(),
271 dealii::ExcMessage(
"vectors have different size"));
273 eospac_guard_.ensure_initialized([&]() {
274 this->set_up_database();
278 EOS_INTEGER index = 0;
281 thread_local static std::vector<double> p_drho;
282 thread_local static std::vector<double> p_de;
283 p_drho.resize(p.size());
284 p_de.resize(p.size());
287 std::transform(std::begin(rho),
290 [](
double rho) {
return rho / 1.0e3; });
293 std::transform(std::begin(e),
296 [](
auto e) {
return e / 1.0e6; });
298 eospac_interface_->interpolate_values(index,
300 dealii::ArrayView<double>(p_drho),
301 dealii::ArrayView<double>(p_de),
306 std::transform(std::begin(p),
309 [](
auto it) {
return it * 1.0e9; });
315 eospac_guard_.ensure_initialized([&]() {
316 this->set_up_database();
320 EOS_INTEGER index = 1;
322 double e, e_drho, e_dp;
323 const double rho_scaled = rho / 1.0e3;
324 const double p_scaled = p / 1.0e9;
326 eospac_interface_->interpolate_values(
328 dealii::ArrayView<double>(&e, 1),
329 dealii::ArrayView<double>(&e_drho, 1),
330 dealii::ArrayView<double>(&e_dp, 1),
331 dealii::ArrayView<const double>(&rho_scaled, 1),
332 dealii::ArrayView<const double>(&p_scaled, 1));
340 const dealii::ArrayView<double> &rho,
341 const dealii::ArrayView<double> &p)
const final
343 Assert(e.size() == rho.size() && rho.size() == p.size(),
344 dealii::ExcMessage(
"vectors have different size"));
346 eospac_guard_.ensure_initialized([&]() {
347 this->set_up_database();
351 EOS_INTEGER index = 1;
354 thread_local static std::vector<double> e_drho;
355 thread_local static std::vector<double> e_dp;
356 e_drho.resize(e.size());
357 e_dp.resize(e.size());
360 std::transform(std::begin(rho),
363 [](
double rho) {
return rho / 1.0e3; });
366 std::transform(std::begin(p),
369 [](
auto it) {
return it / 1.0e9; });
371 eospac_interface_->interpolate_values(index,
373 dealii::ArrayView<double>(e_drho),
374 dealii::ArrayView<double>(e_dp),
379 std::transform(std::begin(e),
382 [](
auto e) {
return e * 1.0e6; });
390 eospac_guard_.ensure_initialized([&]() {
391 this->set_up_database();
395 AssertThrow(
false, dealii::ExcInternalError());
400 void temperature(
const dealii::ArrayView<double> & ,
401 const dealii::ArrayView<double> & ,
402 const dealii::ArrayView<double> & )
const final
404 eospac_guard_.ensure_initialized([&]() {
405 this->set_up_database();
409 AssertThrow(
false, dealii::ExcInternalError());
416 eospac_guard_.ensure_initialized([&]() {
417 this->set_up_database();
421 AssertThrow(
false, dealii::ExcInternalError());
427 const dealii::ArrayView<double> & ,
428 const dealii::ArrayView<double> & )
const final
430 eospac_guard_.ensure_initialized([&]() {
431 this->set_up_database();
435 AssertThrow(
false, dealii::ExcInternalError());
445 void set_up_database()
const
448 std::filesystem::exists(
"sesameFilesDir.txt"),
450 "For EOSPAC to find the sesame database, we assume that there "
451 "exists a file named 'sesameFilesDir.txt' in the current "
452 "simulation directory. This file should list the path to the "
453 "sesame database. See the EOSPAC manual for more "
455 const std::vector<std::tuple<EOS_INTEGER, eospac::TableType>> tables{
456 {material_id_, eospac::TableType::p_rho_e},
457 {material_id_, eospac::TableType::e_rho_p},
460 eospac_interface_ = std::make_unique<eospac::Interface>(tables);
464 mutable std::unique_ptr<eospac::Interface> eospac_interface_;
472 EOS_INTEGER material_id_;
485 "ryujin has to be configured with eospac support in order to use "
486 "the Sesame EOS database";
490 AssertThrow(
false, dealii::ExcMessage(
message));
496 AssertThrow(
false, dealii::ExcMessage(
message));
502 AssertThrow(
false, dealii::ExcMessage(
message));
508 AssertThrow(
false, dealii::ExcMessage(
message));