1#ifndef __SCALAR_SIMULATION_HPP__
2#define __SCALAR_SIMULATION_HPP__
5# pragma GCC diagnostic push
6# pragma GCC diagnostic ignored "-Wunused-but-set-variable"
7# pragma GCC diagnostic ignored "-Wnan-infinity-disabled"
11#include <Eigen/Sparse>
13# pragma GCC diagnostic pop
15#include <Kokkos_Core.hpp>
16#include <common/common.hpp>
19#include <eigen_kokkos.hpp>
20#include <mc/traits.hpp>
21#include <simulation/mass_transfer.hpp>
25using FlowMatrixType = Eigen::SparseMatrix<double>;
35 std::span<double> volume);
50 const ColMajorMatrixtype<double>& mtr,
61 [[nodiscard]] ColMajorKokkosScalarMatrix<double>
64 [[nodiscard]] std::span<double const>
volume_span()
const;
69 [[nodiscard]]
const DiagonalType&
getVolume()
const;
75 [[nodiscard]] std::size_t
n_row() const noexcept;
76 [[nodiscard]] std::
size_t n_col() const noexcept;
82 void set_feed(std::uint64_t i_r, std::uint64_t i_c,
double val);
83 void set_sink(std::uint64_t i_compartment,
double val);
85 void setVolumes(std::span<const
double> volumes,
86 std::span<const
double> inv_volumes);
110 inline kernelContribution
122 Kokkos::deep_copy(
sources.compute, 0);
123 this->
sink.setZero();
129 sources.update_compute_to_host();
135 this->
sources.eigen_data.coeffRef(EIGEN_INDEX(i_r), EIGEN_INDEX(i_c))
142 this->
sink.diagonal().coeffRef(EIGEN_INDEX(i_compartment)) += val;
145 inline const DiagonalType&
151 inline std::span<double>
157 inline std::span<double>
160 return { this->
sources.host.data(),
161 static_cast<size_t>(this->
sources.host.size()) };
164 inline std::span<double>
167 return { this->
sources.host.data(),
168 static_cast<size_t>(this->
sources.host.size()) };
171 inline std::span<double const>
180 std::span<const double> inv_volumes)
182 KOKKOS_ASSERT(volumes.size() == inv_volumes.size()
183 && volumes.size() ==
n_col() &&
"scalar:setvolume")
185 this->
m_volumes.diagonal() = Eigen::Map<const Eigen::VectorXd>(
186 volumes.data(),
static_cast<int>(volumes.size()));
189 inv_volumes.data(),
static_cast<int>(inv_volumes.size()));
195 std::span<double> volumes)
Definition scalar_simulation.hpp:31
ScalarSimulation(ScalarSimulation &&other) noexcept=delete
ScalarSimulation operator=(const ScalarSimulation &other)=delete
void performStepGL(double d_t, const ColMajorMatrixtype< double > &mtr, MassTransfer::Sign sign)
Definition implScalar.cpp:175
void performStep(double d_t)
Definition implScalar.cpp:192
void set_sink(std::uint64_t i_compartment, double val)
Definition scalar_simulation.hpp:140
void setVolumes(std::span< const double > volumes, std::span< const double > inv_volumes)
Definition scalar_simulation.hpp:179
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:133
std::size_t n_col() const noexcept
Definition implScalar.cpp:154
EigenKokkos< double > concentrations
Definition scalar_simulation.hpp:99
std::span< double > contribution_span() const
Definition scalar_simulation.hpp:158
void set_zero_contribs()
Definition scalar_simulation.hpp:118
kernelContribution contribs
Definition scalar_simulation.hpp:92
const DiagonalType & getVolume() const
Definition scalar_simulation.hpp:146
std::span< double > contribution_span_mut()
Definition scalar_simulation.hpp:165
void set_transition(CmaUtils::StateCooMatrixType &&transition)
Definition implScalar.cpp:226
DiagonalType volumes_inverse
Definition scalar_simulation.hpp:96
std::size_t n_r
Definition scalar_simulation.hpp:89
bool deep_copy_concentration(const std::vector< double > &data)
Definition implScalar.cpp:206
ColMajorMatrixtype< double > & get_concentration()
Definition implScalar.cpp:142
~ScalarSimulation()=default
ScalarSimulation(size_t n_compartments, size_t n_species, std::span< double > volume)
Definition implScalar.cpp:103
void reduce_contribs(std::span< const double > data)
Definition implScalar.cpp:166
std::size_t n_row() const noexcept
Definition implScalar.cpp:160
const ColMajorMatrixtype< double > & get_mass_transfer() const
FlowMatrixType m_transition
Definition scalar_simulation.hpp:94
kernelContribution get_kernel_contribution() const
Definition scalar_simulation.hpp:111
std::span< double const > volume_span() const
Definition scalar_simulation.hpp:172
ColMajorKokkosScalarMatrix< double > get_device_concentration() const
Definition implScalar.cpp:148
ScalarSimulation operator=(ScalarSimulation &&other)=delete
auto getConcentrationArray() const
Definition scalar_simulation.hpp:104
void synchro_sources()
Definition implScalar.cpp:136
void set_mass()
Definition implScalar.cpp:220
RowMajorEigenKokkos< double > sources
Definition scalar_simulation.hpp:100
ColMajorMatrixtype< double > total_mass
Definition scalar_simulation.hpp:91
std::size_t n_c
Definition scalar_simulation.hpp:90
void set_kernel_contribs_to_host() const
Definition scalar_simulation.hpp:127
std::span< double > getConcentrationData()
Definition scalar_simulation.hpp:152
DiagonalType m_volumes
Definition scalar_simulation.hpp:97
DiagonalType sink
Definition scalar_simulation.hpp:98
::rust::Box<::CooMatrixWrap > StateCooMatrixType
Opaque type for Naive COO matrix.
Definition alias.hpp:26
Sign
Definition mass_transfer.hpp:44
Namespace that contains classes and structures related to simulation handling.
Definition main_exporter.hpp:18
ScalarSimulation * makeScalarSimulation(size_t n_compartments, size_t n_species, std::span< double > volumes)
Definition scalar_simulation.hpp:193