1#ifndef __SCALAR_SIMULATION_HPP__
2#define __SCALAR_SIMULATION_HPP__
4#include "common/traits.hpp"
6#include <common/eigen_diag.hpp>
10#include <Eigen/Sparse>
11#include <kokkos_eigen.hpp>
14#include <Kokkos_Core.hpp>
15#include <common/common.hpp>
18#include <mc/traits.hpp>
19#include <simulation/mass_transfer.hpp>
25 template <FloatingPo
intType ftype>
33 Kokkos::DefaultExecutionSpace>;
41 std::span<mass_balance_float_type> volume);
68 [[nodiscard]] std::size_t
n_row() const noexcept;
69 [[nodiscard]] std::
size_t n_col() const noexcept;
84 [[nodiscard]] const
KokkosEigen::Alias::DiagonalType<
88 [[deprecated]] [[nodiscard]] std::span<
double const>
volume_span() const;
102 void set_feed(std::uint64_t i_r, std::uint64_t i_c,
double val);
103 void set_sink(std::uint64_t i_compartment,
double val);
105 void setVolumes(std::span<const
double> volumes,
106 std::span<const
double> inv_volumes);
118 Kokkos::DefaultExecutionSpace>
125 Kokkos::DefaultExecutionSpace>
144 KOKKOS_ASSERT(index <
n_c);
145 return m_volumes.diagonal().coeff(EIGEN_INDEX(index));
167 this->
sink.setZero();
182 this->
sources.eigen().coeffRef(EIGEN_INDEX(i_r), EIGEN_INDEX(i_c)) += val;
188 this->
sink.diagonal().coeffRef(EIGEN_INDEX(i_compartment)) += val;
197 inline std::span<double>
203 inline std::span<const double>
209 inline std::span<const double>
212 return this->
sources.get_span();
215 inline std::span<double>
218 return this->
sources.get_span();
221 [[deprecated]]
inline std::span<double const>
230 std::span<const double> inv_volumes)
232 KOKKOS_ASSERT(volumes.size() == inv_volumes.size()
233 && volumes.size() ==
n_col() &&
"scalar:setvolume")
235 this->
m_volumes.diagonal() = Eigen::Map<const Eigen::VectorXd>(
236 volumes.data(),
static_cast<int>(volumes.size()));
239 inv_volumes.data(),
static_cast<int>(inv_volumes.size()));
245 std::span<double> volumes)
Wraps a Kokkos 2D View as an Eigen matrix map.
Definition kokkos_eigen.hpp:52
view_type::t_host host_view_type
Definition kokkos_eigen.hpp:90
Definition scalar_simulation.hpp:29
FlowMatrixType< mass_balance_float_type > m_transition
Definition scalar_simulation.hpp:128
bool deep_copy_concentration(const std::vector< concentration_float_type > &data)
Definition implScalar.cpp:293
concentration_view_t get_concentration() noexcept
Definition implScalar.cpp:176
concentration_t::host_view_type concentration_view_t
Definition scalar_simulation.hpp:35
ScalarSimulation operator=(const ScalarSimulation &other)=delete
MC::kernelContribution contribs
Definition scalar_simulation.hpp:127
KokkosEigen::Alias::DiagonalType< mass_balance_float_type > sink
Definition scalar_simulation.hpp:132
void performStep(double d_t)
Definition implScalar.cpp:251
void set_sink(std::uint64_t i_compartment, double val)
Definition scalar_simulation.hpp:186
void setVolumes(std::span< const double > volumes, std::span< const double > inv_volumes)
Definition scalar_simulation.hpp:229
MC::kernelContribution get_kernel_contribution() const
Definition scalar_simulation.hpp:156
ScalarSimulation(const ScalarSimulation &other) noexcept=delete
void set_feed(std::uint64_t i_r, std::uint64_t i_c, double val)
Definition scalar_simulation.hpp:180
std::size_t n_col() const noexcept
Definition implScalar.cpp:182
KokkosEigen::Alias::DiagonalType< mass_balance_float_type > volumes_inverse
Definition scalar_simulation.hpp:131
void set_zero_contribs()
Definition scalar_simulation.hpp:163
KokkosEigen::KokkosEigen2D< double, Kokkos::LayoutLeft, Kokkos::DefaultExecutionSpace > concentration_t
Definition scalar_simulation.hpp:30
KokkosEigen::Alias::ColMajorMatrixtype< mass_balance_float_type > total_mass
Definition scalar_simulation.hpp:113
double volume_at(std::size_t) const
Definition scalar_simulation.hpp:142
std::span< double > contribution_span_mut()
Definition scalar_simulation.hpp:216
void set_transition(CmaUtils::StateCooMatrixType &&transition)
Definition implScalar.cpp:316
std::size_t n_r
Definition scalar_simulation.hpp:110
~ScalarSimulation()=default
MC::KernelConcentrationType get_device_concentration() const
Definition implScalar.cpp:208
KokkosEigen::KokkosEigen2D< mass_balance_float_type, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace > sources
Definition scalar_simulation.hpp:125
concentration_view_t::value_type concentration_float_type
Definition scalar_simulation.hpp:36
KokkosEigen::Alias::DiagonalType< mass_balance_float_type > m_volumes
Definition scalar_simulation.hpp:130
std::size_t n_row() const noexcept
Definition implScalar.cpp:188
std::span< const double > contribution_span() const
Definition scalar_simulation.hpp:210
void performStepGL(double d_t, const KokkosEigen::Alias::ColMajorMatrixtype< mass_balance_float_type > &mtr, MassTransfer::Sign sign)
Definition implScalar.cpp:229
void clearNegs()
Definition implScalar.cpp:267
KokkosEigen::KokkosEigen2D< mass_balance_float_type, Kokkos::LayoutLeft, Kokkos::DefaultExecutionSpace > concentrations
Definition scalar_simulation.hpp:118
const KokkosEigen::Alias::DiagonalType< mass_balance_float_type > & getVolume() const noexcept
Definition scalar_simulation.hpp:192
ScalarSimulation(size_t n_compartments, size_t n_species, std::span< mass_balance_float_type > volume)
Definition implScalar.cpp:142
std::span< double const > volume_span() const
Definition scalar_simulation.hpp:222
ScalarSimulation operator=(ScalarSimulation &&other)=delete
auto getConcentrationArray() const
Definition scalar_simulation.hpp:149
void synchro_sources()
Definition implScalar.cpp:194
void set_mass()
Definition implScalar.cpp:310
std::size_t n_c
Definition scalar_simulation.hpp:111
std::span< concentration_float_type > getConcentrationData()
Definition scalar_simulation.hpp:198
::rust::Box<::CooMatrixWrap > StateCooMatrixType
Opaque type for Naive COO matrix.
Definition alias.hpp:26
Definition impl_mtr.cpp:16
Eigen::DiagonalMatrix< ftype, CompileMatrixSizeEigen > DiagonalType
Template type for eigen diagonal object.
Definition kokkos_eigen.hpp:225
MatrixType< Kokkos::LayoutLeft, ftype > ColMajorMatrixtype
Template type for colmajor eigen matrix object.
Definition kokkos_eigen.hpp:245
Definition kokkos_eigen.hpp:11
Namespace that contains classes and structures related to Monte Carlo (MC) simulations.
Definition alias.hpp:16
Kokkos::View< float **, Kokkos::LayoutLeft, MC::ComputeSpace, kernelMT > kernelContribution
Definition alias.hpp:160
Sign
Definition mass_transfer.hpp:44
Namespace that contains classes and structures related to simulation handling.
Definition host_specific.hpp:12
Eigen::SparseMatrix< ftype > FlowMatrixType
Definition scalar_simulation.hpp:26
double mass_balance_float_type
Definition scalar_simulation.hpp:27
ScalarSimulation * makeScalarSimulation(size_t n_compartments, size_t n_species, std::span< double > volumes)
Definition scalar_simulation.hpp:243