|
| 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