Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
c43adb0
simple ice: formulas and calculate RH_i
pdziekan Dec 14, 2023
aa2d33e
add ice to dry_distros/sizes
pdziekan Dec 14, 2023
54d2eda
use different growth equation iif ice
pdziekan Dec 14, 2023
a5aee6d
move src_dry_sizes/distros to opts
pdziekan Dec 18, 2023
8282a24
compling version
pdziekan Dec 19, 2023
3f5496b
terminal velocity of ice
pdziekan Dec 19, 2023
0418936
diag_ice
pdziekan Dec 20, 2023
71d8adc
disable bindings
pdziekan Dec 20, 2023
0bf1d24
init_ice.ipp
pdziekan Dec 21, 2023
8971011
python bindings for ice
pdziekan Dec 21, 2023
3a2947a
ice in puddle
pdziekan Dec 22, 2023
e441d2a
diag ice/water in multi_cuda
Feb 29, 2024
74822eb
allow kappa=0, for which rw=rd; condensation of water drops will fail…
pdziekan Mar 15, 2024
4e81ff6
src individual supstp: WIP (TODO: src dry sizes)
pdziekan Mar 18, 2024
c6f843b
sources: separate supstp for each
pdziekan Mar 18, 2024
0dafbb2
ice that fell out is now correctly stored in outice_vol, previously i…
pdziekan Apr 4, 2024
b1131cd
vterm: add break in switch case to fix vt
pdziekan Apr 26, 2024
21717e8
INAS density formulas
May 29, 2025
f0e4c95
sampling T_freez from CFD
Jun 2, 2025
57a15ca
add rd3_insol and T_freeze; init rd3_insol
pdziekan Jun 9, 2025
a5a618f
ice nucleation
Jun 13, 2025
591e5b2
rd3_insol init
Jul 1, 2025
db62b55
comments in impl_nucleation
Jul 1, 2025
909b33c
T_freeze initialization
Jul 1, 2025
5469206
5% of mineral dust inactive
Jul 1, 2025
5cbe83b
adding opts.ice_nucl and renaming
Jul 2, 2025
d472273
code cleanup
Jul 2, 2025
e5b41e6
sampling in src/ with multiple random numbers
Jul 14, 2025
8ff2239
latent heat of freezing/sublimation
Jul 14, 2025
aa22224
dth freezing
Jul 18, 2025
118c97a
3rd moment for frozen droplets
AgnieszkaMakulska Sep 8, 2025
4394428
select newly frozen droplets
AgnieszkaMakulska Sep 8, 2025
5d27765
fixing update_th_freezing
AgnieszkaMakulska Sep 9, 2025
8a09ee4
Merge branch 'master' into ice
AgnieszkaMakulska Sep 9, 2025
b5158a9
fixing merge conflict
AgnieszkaMakulska Sep 9, 2025
a9fc994
output name fix
AgnieszkaMakulska Sep 10, 2025
731fe55
Merge branch 'master' into ice
AgnieszkaMakulska Sep 10, 2025
6aad57c
heat of freezing
AgnieszkaMakulska Sep 10, 2025
2e9de60
new attributes
AgnieszkaMakulska Sep 11, 2025
af5e74f
melting
AgnieszkaMakulska Sep 11, 2025
1ee1311
freezing changes the radius
AgnieszkaMakulska Sep 11, 2025
1a8a244
heat of sublimation
AgnieszkaMakulska Sep 12, 2025
471999b
initialize a,c,rho as zero
AgnieszkaMakulska Sep 15, 2025
fd9c206
fixing ice_nucl
AgnieszkaMakulska Sep 16, 2025
2e1bddb
melting
AgnieszkaMakulska Sep 16, 2025
15f0111
fixing impl_cond
AgnieszkaMakulska Sep 16, 2025
cdc7b54
ice 3rd moment
AgnieszkaMakulska Sep 16, 2025
f980f56
combine nucl and melt
AgnieszkaMakulska Sep 16, 2025
7eb1e71
update_th_rv for cond and subl
AgnieszkaMakulska Sep 16, 2025
4773d91
ice volume vector
AgnieszkaMakulska Sep 16, 2025
fc81617
template for iterator type
AgnieszkaMakulska Sep 19, 2025
1714c39
init insol dry sizes
AgnieszkaMakulska Sep 30, 2025
9215dc4
change rd3_insol to rd2_insol
AgnieszkaMakulska Sep 30, 2025
11cf489
rd2_insol in T_freeze
AgnieszkaMakulska Sep 30, 2025
e768106
fixing rd_insol init
AgnieszkaMakulska Oct 1, 2025
39f101c
probability for time-dependent freezing
AgnieszkaMakulska Oct 14, 2025
4684e38
time dep freeze condition
AgnieszkaMakulska Oct 14, 2025
0e649f9
time dependent freezing option
AgnieszkaMakulska Oct 15, 2025
45d8dd8
fix units
AgnieszkaMakulska Oct 15, 2025
7c6e123
advance a c (spherical for now)
AgnieszkaMakulska Oct 16, 2025
99fefaa
separate growth for ice and droplets
AgnieszkaMakulska Oct 16, 2025
fcb8b0f
move time_dep_ice_nucl to opts_init
AgnieszkaMakulska Oct 17, 2025
746bc24
diag ice a c
AgnieszkaMakulska Oct 20, 2025
a2d97a5
python bindinds for ice
AgnieszkaMakulska Oct 22, 2025
74a0b7d
kappa_rd_insol_t to fix bindings
AgnieszkaMakulska Oct 23, 2025
d07d1a4
removing the ice flag
AgnieszkaMakulska Oct 30, 2025
ee6b2f8
fix diag_ice_cons
AgnieszkaMakulska Oct 30, 2025
1951955
fix condendation
AgnieszkaMakulska Oct 30, 2025
ac71f9d
vterm_ice
AgnieszkaMakulska Oct 30, 2025
7f2e63c
select vt formula
AgnieszkaMakulska Nov 4, 2025
59842e1
fixing errors
AgnieszkaMakulska Nov 5, 2025
a581bbd
use ice.switch in cond
AgnieszkaMakulska Nov 6, 2025
3f049aa
rd2_insol only if ice_switch
AgnieszkaMakulska Nov 6, 2025
e353e8f
python tests with new dry_distros
AgnieszkaMakulska Nov 6, 2025
f879ada
fix src in bindings
AgnieszkaMakulska Nov 7, 2025
37bc8f7
test ice api
AgnieszkaMakulska Nov 7, 2025
08221cc
Merge branch 'master' into ice
AgnieszkaMakulska Nov 7, 2025
76ac5d5
fixing problems after merge
AgnieszkaMakulska Nov 7, 2025
880d93b
RHi formula
AgnieszkaMakulska Nov 12, 2025
4169ea2
deposotion
AgnieszkaMakulska Nov 14, 2025
a6fdc15
free drv vector
AgnieszkaMakulska Nov 14, 2025
73360fe
initialize Tfreez, correct Jhet
AgnieszkaMakulska Nov 21, 2025
6e7212d
debug freezing/melting
AgnieszkaMakulska Nov 21, 2025
45cfa14
4/3 pi
AgnieszkaMakulska Nov 25, 2025
2084d1b
change ice_vol to ice_mass
AgnieszkaMakulska Nov 27, 2025
6d14b05
correcting units and tests
AgnieszkaMakulska Nov 27, 2025
5f226ea
homogeneous freezing at -38C
AgnieszkaMakulska Nov 28, 2025
e47c973
ice test
AgnieszkaMakulska Dec 2, 2025
ebf9a2f
source test
AgnieszkaMakulska Dec 2, 2025
1cea336
rd_insol in tests
AgnieszkaMakulska Dec 2, 2025
62cee14
fixing CUDA compilation errors
AgnieszkaMakulska Dec 3, 2025
e57ba43
debuging
AgnieszkaMakulska Dec 3, 2025
73cbbc1
more debugging
AgnieszkaMakulska Dec 4, 2025
d532356
debugging for CUDA
AgnieszkaMakulska Dec 4, 2025
30c83a9
time dep homogeneous freezing
AgnieszkaMakulska Dec 5, 2025
f482ed0
ice a,c rng
AgnieszkaMakulska Dec 8, 2025
7a9e009
precip rate ice
AgnieszkaMakulska Dec 8, 2025
1d9a6e3
code cleanup
AgnieszkaMakulska Dec 8, 2025
8866953
python path
AgnieszkaMakulska Dec 9, 2025
5d4b07c
move deposition to separate file
AgnieszkaMakulska Dec 9, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ if (CMAKE_CUDA_COMPILER)
target_compile_options(cloudphxx_lgrngn PRIVATE $<$<COMPILE_LANGUAGE:CUDA>: -O3 -use_fast_math -Xcompiler=-Ofast,-march=native,-fopenmp>)
# Debug mode cuda flags
elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
target_compile_options(cloudphxx_lgrngn PRIVATE $<$<COMPILE_LANGUAGE:CUDA>: -g -DTHRUST_DEBUG -lineinfo -Xcompiler=-fopenmp,-g,-Og,-rdynamic>)
target_compile_options(cloudphxx_lgrngn PRIVATE $<$<COMPILE_LANGUAGE:CUDA>: -g -DTHRUST_DEBUG -lineinfo -Xcompiler=-fopenmp,-g,-Og,-rdynamic,-Wfatal-errors>)
# Release mode cuda flags
else()
target_compile_options(cloudphxx_lgrngn PRIVATE $<$<COMPILE_LANGUAGE:CUDA>: -DNDEBUG -O3 -use_fast_math -Xcompiler=-Ofast,-march=native,-DNDEBUG,-fopenmp>)
Expand Down Expand Up @@ -396,7 +396,7 @@ add_subdirectory(include)

if(NOT LIBCLOUDPHXX_DISABLE_BINDINGS) # some tests require bindings, so we disable them too
enable_testing()
add_subdirectory(bindings)
add_subdirectory(bindings)
add_subdirectory(tests)
endif()

Expand Down
24 changes: 24 additions & 0 deletions bindings/python/common.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,12 @@ namespace libcloudphxx
return cmn::const_cp::p_vs(T * si::kelvins) / si::pascals;
}

template <typename real_t>
real_t p_vsi(const real_t &T)
{
return cmn::const_cp::p_vsi(T * si::kelvins) / si::pascals;
}

template <typename real_t>
real_t p_vs_tet(const real_t &T)
{
Expand All @@ -69,13 +75,31 @@ namespace libcloudphxx
{
return cmn::const_cp::r_vs(T * si::kelvins, p * si::pascals);
}

template <typename real_t>
real_t r_vsi(const real_t &T, const real_t &p)
{
return cmn::const_cp::r_vsi(T * si::kelvins, p * si::pascals);
}

template <typename real_t>
real_t l_v(const real_t &T)
{
return cmn::const_cp::l_v(T * si::kelvins) / si::joules * si::kilograms;
}

template <typename real_t>
real_t l_s(const real_t &T)
{
return cmn::const_cp::l_s(T * si::kelvins) / si::joules * si::kilograms;
}

template <typename real_t>
real_t l_f(const real_t &T)
{
return cmn::const_cp::l_f(T * si::kelvins) / si::joules * si::kilograms;
}

template <typename real_t>
real_t T(const real_t &th, const real_t &rhod)
{
Expand Down
79 changes: 56 additions & 23 deletions bindings/python/lgrngn.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ namespace libcloudphxx
map_t map = arg->diag_puddle();
bp::dict dict;
for(auto& x : map)
dict[static_cast<int>(x.first)] = x.second;
dict[cmn::output_names.at(x.first)] = x.second;
return dict;
}

Expand All @@ -234,45 +234,71 @@ namespace libcloudphxx
return *arg->opts_init;
}

// set dry distros from a dict with (kappa, rd_insol) as key
template <typename real_t>
void set_dd( // dry_distro
void set_dd(
lgr::opts_init_t<real_t> *arg,
const bp::dict &kappa_func)
const bp::dict &kappa_func) // a dict keyed by (kappa, rd_insol)
{
arg->dry_distros.clear();
for (int i = 0; i < len(kappa_func.keys()); ++i)
{
bp::tuple key = bp::extract<bp::tuple>(kappa_func.keys()[i]);
const real_t kappa = bp::extract<real_t>(key[0]);
const real_t rd_insol = bp::extract<real_t>(key[1]);
arg->dry_distros.emplace(
bp::extract<real_t>(kappa_func.keys()[i]),
libcloudphxx::lgrngn::kappa_rd_insol_t<real_t>{kappa, rd_insol},
std::make_shared<detail::pyunary<real_t>>(kappa_func.values()[i])
);
}
}

// src_dry_distros moved from opts_init to opts
template <typename real_t>
void set_sdd( // src_dry_distro
lgr::opts_init_t<real_t> *arg,
const bp::dict &kappa_func)
lgr::opts_t<real_t> *arg,
const bp::dict &kappa_func) // a dict keyed by (kappa, rd_insol)
{
arg->src_dry_distros.clear();
for (int i = 0; i < len(kappa_func.keys()); ++i)
{
bp::tuple key = bp::extract<bp::tuple>(kappa_func.keys()[i]);
bp::tuple val = bp::extract<bp::tuple>(kappa_func.values()[i]);
const real_t kappa = bp::extract<real_t>(key[0]);
const real_t rd_insol = bp::extract<real_t>(key[1]);

const int sd_conc = bp::extract<int>(val[1]);
const int supstp = bp::extract<int>(val[2]);
arg->src_dry_distros.emplace(
bp::extract<real_t>(kappa_func.keys()[i]),
std::make_shared<detail::pyunary<real_t>>(kappa_func.values()[i])
libcloudphxx::lgrngn::kappa_rd_insol_t<real_t>{kappa, rd_insol},
std::make_tuple(std::static_pointer_cast<libcloudphxx::common::unary_function<real_t>>(
std::make_shared<detail::pyunary<real_t>>(val[0])),
sd_conc, supstp)
);
}
}

// set dry sizes from a dict with (kappa, rd_insol) as key
template <typename real_t>
void set_ds( // dry_sizes
void set_ds(
lgr::opts_init_t<real_t> *arg,
const bp::dict &kappa_func
const bp::dict &kappa_func // a dict keyed by (kappa, rd_insol)
)
{
arg->dry_sizes.clear();
if(len(kappa_func.keys()) == 0)
return;

// loop over kappas
// loop over kappas and rd_insol
for (int j = 0; j < len(kappa_func.keys()); ++j)
{

// extract the key tuple (kappa, rd_insol)
const bp::tuple key = bp::extract<bp::tuple>(kappa_func.keys()[j]);
const real_t kappa = bp::extract<real_t>(key[0]);
const real_t rd_insol = bp::extract<real_t>(key[1]);

// extract size : {conc, count} dict for this (kappa, rd_insol)
const bp::dict size_conc = bp::extract<bp::dict>(kappa_func.values()[j]);
std::map<real_t, std::pair<real_t, int>> size_conc_map;

Expand All @@ -283,43 +309,50 @@ namespace libcloudphxx
assert(len(conc_count_list) == 2);
const real_t conc = bp::extract<real_t>(conc_count_list[0]);
const int count = bp::extract<int> (conc_count_list[1]);
size_conc_map[bp::extract<real_t>(size_conc.keys()[i])] = std::make_pair(conc, count);
size_conc_map[bp::extract<real_t>(size_conc.keys()[i])] = std::make_pair(conc, count);
}
const real_t kappa = bp::extract<real_t>(kappa_func.keys()[j]);
arg->dry_sizes[kappa] = size_conc_map;
arg->dry_sizes[libcloudphxx::lgrngn::kappa_rd_insol_t<real_t>{kappa, rd_insol}] = size_conc_map;
}
}

// src_dry_sizes moved from opts_init to opts
template <typename real_t>
void set_sds( // src_dry_sizes
lgr::opts_init_t<real_t> *arg,
const bp::dict &kappa_func
lgr::opts_t<real_t> *arg,
const bp::dict &kappa_func // a dict keyed by (kappa, rd_insol)
)
{
arg->src_dry_sizes.clear();
if(len(kappa_func.keys()) == 0)
return;

// loop over kappas
// loop over kappas and rd_insol
for (int j = 0; j < len(kappa_func.keys()); ++j)
{
// extract the key tuple (kappa, rd_insol)
const bp::tuple key = bp::extract<bp::tuple>(kappa_func.keys()[j]);
const real_t kappa = bp::extract<real_t>(key[0]);
const real_t rd_insol = bp::extract<real_t>(key[1]);

// extract size : {conc, count, supstp_src} dict for this (kappa, rd_insol)
const bp::dict size_conc = bp::extract<bp::dict>(kappa_func.values()[j]);
std::map<real_t, std::pair<real_t, int>> size_conc_map;
std::map<double, std::tuple<real_t, int, int>> size_conc_map;

// turn the size : {conc, count} dict into a size : {conc, count} map
// turn the size : {conc, count, supstp_src} dict into a size : {conc, count, supstp_src} map
for (int i = 0; i < len(size_conc.keys()); ++i)
{
const bp::list conc_count_list = bp::extract<bp::list>(size_conc.values()[i]);
assert(len(conc_count_list) == 2);
assert(len(conc_count_list) == 3);
const real_t conc = bp::extract<real_t>(conc_count_list[0]);
const int count = bp::extract<int> (conc_count_list[1]);
size_conc_map[bp::extract<real_t>(size_conc.keys()[i])] = std::make_pair(conc, count);
const int supstp = bp::extract<int> (conc_count_list[2]);
size_conc_map[bp::extract<real_t>(size_conc.keys()[i])] = std::make_tuple(conc, count, supstp);
}
const real_t kappa = bp::extract<real_t>(kappa_func.keys()[j]);
arg->src_dry_sizes[kappa] = size_conc_map;
arg->src_dry_sizes[libcloudphxx::lgrngn::kappa_rd_insol_t<real_t>{kappa, rd_insol}] = size_conc_map;
}
}


template <typename real_t>
void set_rdd( // rlx_dry_distros
lgr::opts_init_t<real_t> *arg,
Expand Down
18 changes: 14 additions & 4 deletions bindings/python/lib.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ BOOST_PYTHON_MODULE(libcloudphxx)
bp::scope().attr("eps") = (real_t) (cmn::moist_air::eps<real_t>());
bp::scope().attr("rho_stp") = (real_t) (cmn::earth::rho_stp<real_t>() * si::cubic_metres / si::kilograms);
bp::scope().attr("rho_w") = (real_t) (cmn::moist_air::rho_w<real_t>() * si::cubic_metres / si::kilograms);
bp::scope().attr("rho_i") = (real_t) (cmn::moist_air::rho_i<real_t>() * si::cubic_metres / si::kilograms);
//molar mass of trace gases
bp::scope().attr("M_SO2") = (real_t) (cmn::molar_mass::M_SO2<real_t>() * si::moles / si::kilograms);
bp::scope().attr("M_H2O2") = (real_t) (cmn::molar_mass::M_H2O2<real_t>() * si::moles / si::kilograms);
Expand Down Expand Up @@ -131,6 +132,7 @@ BOOST_PYTHON_MODULE(libcloudphxx)
bp::def("p_v", &common::p_v<real_t>);
bp::def("p_vs", &common::p_vs<real_t>);
bp::def("r_vs", &common::r_vs<real_t>);
bp::def("r_vsi", &common::r_vsi<real_t>);
bp::def("p_vs_tet", &common::p_vs_tet<real_t>);
bp::def("l_v", &common::l_v<real_t>);
bp::def("T", &common::T<real_t>);
Expand Down Expand Up @@ -278,13 +280,14 @@ BOOST_PYTHON_MODULE(libcloudphxx)
.def_readwrite("turb_adve", &lgr::opts_t<real_t>::turb_adve)
.def_readwrite("turb_cond", &lgr::opts_t<real_t>::turb_cond)
.def_readwrite("turb_coal", &lgr::opts_t<real_t>::turb_coal)
.def_readwrite("ice_nucl", &lgr::opts_t<real_t>::ice_nucl)
.def_readwrite("dt", &lgr::opts_t<real_t>::dt)
.add_property("src_dry_distros", &lgrngn::get_sdd<real_t>, &lgrngn::set_sdd<real_t>)
.add_property("src_dry_sizes", &lgrngn::get_ds<real_t>, &lgrngn::set_sds<real_t>)
;
bp::class_<lgr::opts_init_t<real_t>>("opts_init_t")
.add_property("dry_distros", &lgrngn::get_dd<real_t>, &lgrngn::set_dd<real_t>)
.add_property("dry_sizes", &lgrngn::get_ds<real_t>, &lgrngn::set_ds<real_t>)
.add_property("src_dry_distros", &lgrngn::get_sdd<real_t>, &lgrngn::set_sdd<real_t>)
.add_property("src_dry_sizes", &lgrngn::get_ds<real_t>, &lgrngn::set_sds<real_t>)
.add_property("rlx_dry_distros", &lgrngn::get_rdd<real_t>, &lgrngn::set_rdd<real_t>)
.def_readwrite("nx", &lgr::opts_init_t<real_t>::nx)
.def_readwrite("ny", &lgr::opts_init_t<real_t>::ny)
Expand Down Expand Up @@ -321,15 +324,13 @@ BOOST_PYTHON_MODULE(libcloudphxx)
.def_readwrite("sstp_cond", &lgr::opts_init_t<real_t>::sstp_cond)
.def_readwrite("sstp_coal", &lgr::opts_init_t<real_t>::sstp_coal)
.def_readwrite("sstp_chem", &lgr::opts_init_t<real_t>::sstp_chem)
.def_readwrite("supstp_src", &lgr::opts_init_t<real_t>::supstp_src)
.def_readwrite("supstp_rlx", &lgr::opts_init_t<real_t>::supstp_rlx)
.def_readwrite("kernel", &lgr::opts_init_t<real_t>::kernel)
.def_readwrite("adve_scheme", &lgr::opts_init_t<real_t>::adve_scheme)
.def_readwrite("sd_conc", &lgr::opts_init_t<real_t>::sd_conc)
.def_readwrite("sd_conc_large_tail", &lgr::opts_init_t<real_t>::sd_conc_large_tail)
.def_readwrite("aerosol_independent_of_rhod", &lgr::opts_init_t<real_t>::aerosol_independent_of_rhod)
.def_readwrite("sd_const_multi", &lgr::opts_init_t<real_t>::sd_const_multi)
.def_readwrite("src_sd_conc", &lgr::opts_init_t<real_t>::src_sd_conc)
.def_readwrite("rlx_bins", &lgr::opts_init_t<real_t>::rlx_bins)
.def_readwrite("rlx_sd_per_bin", &lgr::opts_init_t<real_t>::rlx_sd_per_bin)
.def_readwrite("rlx_timescale", &lgr::opts_init_t<real_t>::rlx_timescale)
Expand All @@ -347,6 +348,8 @@ BOOST_PYTHON_MODULE(libcloudphxx)
.add_property("SGS_mix_len", &lgrngn::get_SGS_mix_len<real_t>, &lgrngn::set_SGS_mix_len<real_t>)
.add_property("kernel_parameters", &lgrngn::get_kp<real_t>, &lgrngn::set_kp<real_t>)
.def_readwrite("variable_dt_switch", &lgr::opts_init_t<real_t>::variable_dt_switch)
.def_readwrite("ice_switch", &lgr::opts_init_t<real_t>::ice_switch)
.def_readwrite("time_dep_ice_nucl", &lgr::opts_init_t<real_t>::time_dep_ice_nucl)
.def_readwrite("const_p", &lgr::opts_init_t<real_t>::const_p)
.def_readwrite("th_dry", &lgr::opts_init_t<real_t>::th_dry)
;
Expand Down Expand Up @@ -409,6 +412,13 @@ BOOST_PYTHON_MODULE(libcloudphxx)
.def("diag_chem", &lgr::particles_proto_t<real_t>::diag_chem)
.def("diag_precip_rate", &lgr::particles_proto_t<real_t>::diag_precip_rate)
.def("diag_puddle", &lgrngn::diag_puddle<real_t>)
.def("diag_ice", &lgr::particles_proto_t<real_t>::diag_ice)
.def("diag_water", &lgr::particles_proto_t<real_t>::diag_water)
.def("diag_ice_cons", &lgr::particles_proto_t<real_t>::diag_ice_cons)
.def("diag_water_cons", &lgr::particles_proto_t<real_t>::diag_water_cons)
.def("diag_ice_a_mom", &lgr::particles_proto_t<real_t>::diag_ice_a_mom)
.def("diag_ice_c_mom", &lgr::particles_proto_t<real_t>::diag_ice_c_mom)
.def("diag_ice_mass", &lgr::particles_proto_t<real_t>::diag_ice_mass)
.def("outbuf", &lgrngn::outbuf<real_t>)
.def("get_attr", &lgr::particles_proto_t<real_t>::get_attr)
;
Expand Down
Loading
Loading