|
4 | 4 | # Authors: https://github.com/open-atmos/PyPartMC/graphs/contributors # |
5 | 5 | #################################################################################################### |
6 | 6 |
|
| 7 | +from cmath import nan |
7 | 8 | import gc |
8 | 9 | import json |
9 | 10 | import pytest |
| 11 | +import numpy as np |
10 | 12 | import PyPartMC as ppmc |
| 13 | +from PyPartMC import si |
11 | 14 |
|
12 | 15 | from .test_gas_data import GAS_DATA_CTOR_ARG_MINIMAL |
13 | 16 | from .test_aero_data import AERO_DATA_CTOR_ARG_MINIMAL |
| 17 | +from .test_env_state import ENV_STATE_CTOR_ARG_MINIMAL |
14 | 18 |
|
15 | 19 |
|
16 | 20 | SCENARIO_CTOR_ARG_MINIMAL = { |
@@ -117,3 +121,59 @@ def test_str(): |
117 | 121 | # assert |
118 | 122 | assert json_actual == SCENARIO_CTOR_ARG_MINIMAL |
119 | 123 |
|
| 124 | + @staticmethod |
| 125 | + @pytest.mark.parametrize("loss_function_params", ( |
| 126 | + {'loss_function': 'none'}, |
| 127 | + {'loss_function': 'constant'}, |
| 128 | + {'loss_function': 'volume'}, |
| 129 | + {'loss_function': 'drydep'}, |
| 130 | + { |
| 131 | + 'loss_function': 'chamber', |
| 132 | + 'chamber_vol': 84.3 * si.m**3, |
| 133 | + 'area_diffuse': 103 * si.m**2, |
| 134 | + 'area_sedi': 12.6 * si.m**2, |
| 135 | + 'prefactor_BL': 0.005 * si.m, |
| 136 | + 'exponent_BL': 0.274 |
| 137 | + } |
| 138 | + )) |
| 139 | + def test_loss_rate(loss_function_params:str): |
| 140 | + # arrange |
| 141 | + aero_data = ppmc.AeroData(AERO_DATA_CTOR_ARG_MINIMAL) |
| 142 | + env_state = ppmc.EnvState(ENV_STATE_CTOR_ARG_MINIMAL) |
| 143 | + gas_data = ppmc.GasData(GAS_DATA_CTOR_ARG_MINIMAL) |
| 144 | + scenario_ctor_arg = {**SCENARIO_CTOR_ARG_MINIMAL, **loss_function_params} |
| 145 | + scenario = ppmc.Scenario(gas_data, aero_data, scenario_ctor_arg) |
| 146 | + vol = (4/3)*np.pi*(1e-6)**3 |
| 147 | + density = 1 |
| 148 | + env_state.height = 1 |
| 149 | + env_state.set_temperature(300) |
| 150 | + env_state.pressure = 101325 |
| 151 | + aero_data.frac_dim = 3 |
| 152 | + aero_data.prime_radius = 1e-8 |
| 153 | + aero_data.vol_fill_factor = 1 |
| 154 | + |
| 155 | + # act |
| 156 | + rate = ppmc.loss_rate(scenario, vol, density, aero_data, env_state) |
| 157 | + |
| 158 | + # assert |
| 159 | + assert rate is not nan |
| 160 | + |
| 161 | + @staticmethod |
| 162 | + def test_loss_rate_dry_dep(): |
| 163 | + # arrange |
| 164 | + aero_data = ppmc.AeroData(AERO_DATA_CTOR_ARG_MINIMAL) |
| 165 | + env_state = ppmc.EnvState(ENV_STATE_CTOR_ARG_MINIMAL) |
| 166 | + vol = (4/3)*np.pi*(1e-6)**3 |
| 167 | + density = 1 |
| 168 | + env_state.height = 1 |
| 169 | + env_state.set_temperature(300) |
| 170 | + env_state.pressure = 101325 |
| 171 | + aero_data.frac_dim = 3 |
| 172 | + aero_data.prime_radius = 1e-8 |
| 173 | + aero_data.vol_fill_factor = 1 |
| 174 | + |
| 175 | + # act |
| 176 | + rate = ppmc.loss_rate_dry_dep(vol, density, aero_data, env_state) |
| 177 | + |
| 178 | + # assert |
| 179 | + assert rate is not nan |
0 commit comments