29#include <experimental/mdspan>
59 requires requires(
decltype(rho_dust) rd,
int j) {
60 { rd(j) } -> std::same_as<T>;
64 SHAM_ASSERT(massgrid.extent(0) == gij.extent(0) + 1);
66 for (std::size_t j = 0; j < gij.extent(0); ++j) {
67 T rho_d = rho_dust(j);
68 gij(j) = (rho_d > rho_eps) ? rho_d / (massgrid[j + 1] - massgrid[j]) : 0;
104 requires requires(Func f,
int a,
int b) {
116 SHAM_ASSERT(tensor_tabflux_coag.extent(0) == nbins);
117 SHAM_ASSERT(tensor_tabflux_coag.extent(1) == nbins);
118 SHAM_ASSERT(tensor_tabflux_coag.extent(2) == nbins);
125 for (
int j = 0; j < nbins; ++j) {
127 for (
int l = 0; l < nbins; ++l) {
128 for (
int m = 0; m < nbins; ++m) {
129 sum += tensor_tabflux_coag(j, l, m) * dv(l, m) * gij[l] * gij[m];
157 S_coag(0) = -flux(0);
158 for (
int j = 1; j < flux.extent(0); ++j) {
159 S_coag(j) = flux(j - 1) - flux(j);
163 template<
class T,
class FuncDv,
class FuncRhoDust>
164 void coala_k0_source_term(
168 FuncRhoDust &&rho_dust,
Shamrock assertion utility.
#define SHAM_ASSERT(x)
Shorthand for SHAM_ASSERT_NAMED without a message.
void compute_flux_coag_k0_kdv(int nbins, shambase::is_mdspan_rank< 1 > auto gij, shambase::is_mdspan_rank< 3 > auto tensor_tabflux_coag, Func &&dv, shambase::is_mdspan_rank< 1 > auto flux)
Coagulation flux at bin right edges for a ballistic kernel ( ).
void coala_flux_diff(shambase::is_mdspan_rank< 1 > auto flux, shambase::is_mdspan_rank< 1 > auto S_coag)
Convert interface fluxes to a mass-bin coagulation source term.
void compute_gij_k0(auto &&rho_dust, T rho_eps, shambase::is_mdspan_rank< 1 > auto massgrid, shambase::is_mdspan_rank< 1 > auto gij)
Build coefficients on the piecewise-constant DG basis ( ).