233 Sesame(
const std::string &subsection)
238 "material id", material_id_,
"The Sesame Material ID");
242 double pressure(
double rho,
double e)
const final
244 eospac_guard_.ensure_initialized([&]() {
245 this->set_up_database();
249 EOS_INTEGER index = 0;
251 double p, p_drho, p_de;
252 const double rho_scaled = rho / 1.0e3;
253 const double e_scaled = e / 1.0e6;
255 eospac_interface_->interpolate_values(
257 dealii::ArrayView<double>(&p, 1),
258 dealii::ArrayView<double>(&p_drho, 1),
259 dealii::ArrayView<double>(&p_de, 1),
260 dealii::ArrayView<const double>(&rho_scaled, 1),
261 dealii::ArrayView<const double>(&e_scaled, 1));
267 void pressure(
const dealii::ArrayView<double> &p,
268 const dealii::ArrayView<double> &rho,
269 const dealii::ArrayView<double> &e)
const final
271 Assert(p.size() == rho.size() && rho.size() == e.size(),
272 dealii::ExcMessage(
"vectors have different size"));
274 eospac_guard_.ensure_initialized([&]() {
275 this->set_up_database();
279 EOS_INTEGER index = 0;
282 thread_local static std::vector<double> p_drho;
283 thread_local static std::vector<double> p_de;
284 p_drho.resize(p.size());
285 p_de.resize(p.size());
288 std::transform(std::begin(rho),
291 [](
double rho) {
return rho / 1.0e3; });
294 std::transform(std::begin(e),
297 [](
auto e) {
return e / 1.0e6; });
299 eospac_interface_->interpolate_values(index,
301 dealii::ArrayView<double>(p_drho),
302 dealii::ArrayView<double>(p_de),
307 std::transform(std::begin(p),
310 [](
auto it) {
return it * 1.0e9; });
316 eospac_guard_.ensure_initialized([&]() {
317 this->set_up_database();
321 EOS_INTEGER index = 1;
323 double e, e_drho, e_dp;
324 const double rho_scaled = rho / 1.0e3;
325 const double p_scaled = p / 1.0e9;
327 eospac_interface_->interpolate_values(
329 dealii::ArrayView<double>(&e, 1),
330 dealii::ArrayView<double>(&e_drho, 1),
331 dealii::ArrayView<double>(&e_dp, 1),
332 dealii::ArrayView<const double>(&rho_scaled, 1),
333 dealii::ArrayView<const double>(&p_scaled, 1));
341 const dealii::ArrayView<double> &rho,
342 const dealii::ArrayView<double> &p)
const final
344 Assert(e.size() == rho.size() && rho.size() == p.size(),
345 dealii::ExcMessage(
"vectors have different size"));
347 eospac_guard_.ensure_initialized([&]() {
348 this->set_up_database();
352 EOS_INTEGER index = 1;
355 thread_local static std::vector<double> e_drho;
356 thread_local static std::vector<double> e_dp;
357 e_drho.resize(e.size());
358 e_dp.resize(e.size());
361 std::transform(std::begin(rho),
364 [](
double rho) {
return rho / 1.0e3; });
367 std::transform(std::begin(p),
370 [](
auto it) {
return it / 1.0e9; });
372 eospac_interface_->interpolate_values(index,
374 dealii::ArrayView<double>(e_drho),
375 dealii::ArrayView<double>(e_dp),
380 std::transform(std::begin(e),
383 [](
auto e) {
return e * 1.0e6; });
391 eospac_guard_.ensure_initialized([&]() {
392 this->set_up_database();
396 AssertThrow(
false, dealii::ExcInternalError());
401 void temperature(
const dealii::ArrayView<double> & ,
402 const dealii::ArrayView<double> & ,
403 const dealii::ArrayView<double> & )
const final
405 eospac_guard_.ensure_initialized([&]() {
406 this->set_up_database();
410 AssertThrow(
false, dealii::ExcInternalError());
417 eospac_guard_.ensure_initialized([&]() {
418 this->set_up_database();
422 AssertThrow(
false, dealii::ExcInternalError());
428 const dealii::ArrayView<double> & ,
429 const dealii::ArrayView<double> & )
const final
431 eospac_guard_.ensure_initialized([&]() {
432 this->set_up_database();
436 AssertThrow(
false, dealii::ExcInternalError());
446 void set_up_database()
const
449 std::filesystem::exists(
"sesameFilesDir.txt"),
451 "For EOSPAC to find the sesame database, we assume that there "
452 "exists a file named 'sesameFilesDir.txt' in the current "
453 "simulation directory. This file should list the path to the "
454 "sesame database. See the EOSPAC manual for more "
456 const std::vector<std::tuple<EOS_INTEGER, eospac::TableType>> tables{
457 {material_id_, eospac::TableType::p_rho_e},
458 {material_id_, eospac::TableType::e_rho_p},
461 eospac_interface_ = std::make_unique<eospac::Interface>(tables);
465 mutable std::unique_ptr<eospac::Interface> eospac_interface_;
473 EOS_INTEGER material_id_;
486 "ryujin has to be configured with eospac support in order to use "
487 "the Sesame EOS database";
491 AssertThrow(
false, dealii::ExcMessage(
message));
497 AssertThrow(
false, dealii::ExcMessage(
message));
503 AssertThrow(
false, dealii::ExcMessage(
message));
509 AssertThrow(
false, dealii::ExcMessage(
message));