Skip to content

Commit 25b06c1

Browse files
authored
Merge pull request #380 from pdziekan/puddle_test
Puddle test
2 parents fc1e400 + 5b6de36 commit 25b06c1

File tree

3 files changed

+77
-2
lines changed

3 files changed

+77
-2
lines changed

src/impl/particles_impl_hskpng_count.ipp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ namespace libcloudphxx
2828
count_num.begin() // output - values
2929
);
3030
count_n = n.first - count_ijk.begin();
31-
assert(count_n > 0);
31+
assert(count_n >= 0);
3232
assert(count_n <= n_cell);
3333
}
3434
};

tests/python/physics/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#TODO: search scipy?
22

33
# non-pytest tests
4-
foreach(test test_coal coalescence_golovin coalescence_hall_davis_no_waals lgrngn_cond lgrngn_cond_substepping) # the coalescence_onishi_hall test is turned off as not specific enough
4+
foreach(test test_coal coalescence_golovin coalescence_hall_davis_no_waals lgrngn_cond lgrngn_cond_substepping puddle) # the coalescence_onishi_hall test is turned off as not specific enough
55
#TODO: indicate that tests depend on the lib
66
add_test(
77
NAME ${test}

tests/python/physics/puddle.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import sys
2+
sys.path.insert(0, "../../bindings/python/")
3+
4+
from libcloudphxx import lgrngn
5+
6+
import numpy as np
7+
from math import exp, log, sqrt, pi
8+
from time import time
9+
10+
def lognormal(lnr):
11+
mean_r = 100e-6
12+
stdev = 1.4
13+
n_tot = 1e6
14+
return n_tot * exp(
15+
-pow((lnr - log(mean_r)), 2) / 2 / pow(log(stdev),2)
16+
) / log(stdev) / sqrt(2*pi);
17+
18+
Opts_init = lgrngn.opts_init_t()
19+
kappa = .61
20+
Opts_init.dry_distros = {kappa:lognormal}
21+
Opts_init.coal_switch = False
22+
Opts_init.sedi_switch = True
23+
Opts_init.terminal_velocity = lgrngn.vt_t.beard76
24+
25+
Opts_init.dt = 1
26+
27+
Opts_init.nz = 1
28+
Opts_init.nx = 2
29+
Opts_init.dz = 1
30+
Opts_init.dx = 1
31+
Opts_init.z1 = Opts_init.nz * Opts_init.dz
32+
Opts_init.x1 = Opts_init.nx * Opts_init.dx
33+
34+
Opts_init.rng_seed = int(time())
35+
Opts_init.sd_conc = 10000
36+
Opts_init.n_sd_max = Opts_init.sd_conc * (Opts_init.nx * Opts_init.nz)
37+
Opts_init.dev_count = 2
38+
39+
40+
Opts = lgrngn.opts_t()
41+
Opts.adve = False
42+
Opts.sedi = True
43+
Opts.cond = False
44+
Opts.coal = False
45+
Opts.chem = False
46+
Opts.rcyc = False
47+
48+
Rhod = 1. * np.ones((Opts_init.nx, Opts_init.nz))
49+
Th = 300. * np.ones((Opts_init.nx, Opts_init.nz))
50+
Rv = 0.01 * np.ones((Opts_init.nx, Opts_init.nz))
51+
52+
try:
53+
prtcls = lgrngn.factory(lgrngn.backend_t.multi_CUDA, Opts_init)
54+
except:
55+
prtcls = lgrngn.factory(lgrngn.backend_t.serial, Opts_init)
56+
57+
prtcls.init(Th, Rv, Rhod)
58+
59+
for it in range(10):
60+
prtcls.step_sync(Opts, Th, Rv, Rhod)
61+
prtcls.step_async(Opts)
62+
63+
puddle = prtcls.diag_puddle()
64+
65+
prtcls.diag_all()
66+
prtcls.diag_sd_conc()
67+
tab_out = np.copy(np.frombuffer(prtcls.outbuf()).reshape(Opts_init.nx, Opts_init.nz))
68+
69+
assert(tab_out[0][0] == 0.)
70+
71+
puddle_expected_per_cell = {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0, 5: 0.0, 6: 0.0, 7: 0.0, 8: 7.087802417148837e-05, 9: 5.630090090571395e-06}
72+
73+
for a in puddle:
74+
print puddle[a], Opts_init.nx * puddle_expected_per_cell[a]
75+
assert np.isclose(puddle[a], Opts_init.nx * puddle_expected_per_cell[a], atol=0., rtol=1e-4)

0 commit comments

Comments
 (0)