Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Init vertical grid #470

Merged
merged 29 commits into from
Jul 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
aee5396
create vertical grid config
OngChia May 3, 2024
cbc317f
Merge branch 'main' into init_vertical_grid
OngChia May 21, 2024
5fb5113
port completed.
OngChia May 22, 2024
313b326
Clean up and modify data tests of granules and timeloop
OngChia May 28, 2024
a3f1278
merge main
OngChia May 28, 2024
25559f9
Fix bug from merge main
OngChia May 28, 2024
f65600f
precommit
OngChia May 28, 2024
fb05a9c
Fix bug after merge main
OngChia May 28, 2024
0f07a18
Made changes according to review
OngChia Jun 19, 2024
c3e99d3
change diffusion
OngChia Jun 19, 2024
db013ee
merge main
OngChia Jun 19, 2024
cdbb4aa
Add xarray dependency
OngChia Jun 21, 2024
9a9e69e
Merge branch 'main' into init_vertical_grid
OngChia Jun 26, 2024
310bdcd
add height index
OngChia Jul 2, 2024
a2d70fb
refine the vertical output
OngChia Jul 2, 2024
b10e5af
Merge branch 'main' into init_vertical_grid
OngChia Jul 2, 2024
fcb080f
fix typo
OngChia Jul 2, 2024
06a6a43
merge main
OngChia Jul 3, 2024
fd72662
remove xarray
OngChia Jul 3, 2024
b8144ee
changes according to review
OngChia Jul 3, 2024
92d4b21
change vertical grid initialization in diffusion wrapper
OngChia Jul 4, 2024
040f364
merge main
OngChia Jul 4, 2024
5c3785d
nflat_gradp is added back in diffusion wrapper
OngChia Jul 4, 2024
fc4c6a8
change long name of vct_a
OngChia Jul 5, 2024
4bd6e1c
Merge branch 'main' into init_vertical_grid
OngChia Jul 5, 2024
f2def08
Merge branch 'main' into init_vertical_grid
OngChia Jul 5, 2024
8761570
merge main
OngChia Jul 5, 2024
160ec76
precommit run
OngChia Jul 5, 2024
df85353
fix bugs due to change verticalGridParams
OngChia Jul 5, 2024
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
Original file line number Diff line number Diff line change
Expand Up @@ -330,7 +330,7 @@ def __init__(
self.grid: Optional[icon_grid.IconGrid] = None
self.config: Optional[DiffusionConfig] = None
self.params: Optional[DiffusionParams] = None
self.vertical_params: Optional[v_grid.VerticalModelParams] = None
self.vertical_params: Optional[v_grid.VerticalGridParams] = None
self.interpolation_state: diffusion_states.DiffusionInterpolationState = None
self.metric_state: diffusion_states.DiffusionMetricState = None
self.diff_multfac_w: Optional[float] = None
Expand All @@ -348,7 +348,7 @@ def init(
grid: icon_grid.IconGrid,
config: DiffusionConfig,
params: DiffusionParams,
vertical_params: v_grid.VerticalModelParams,
vertical_params: v_grid.VerticalGridParams,
metric_state: diffusion_states.DiffusionMetricState,
interpolation_state: diffusion_states.DiffusionInterpolationState,
edge_params: h_grid.EdgeParams,
Expand Down Expand Up @@ -404,7 +404,7 @@ def _get_start_index_for_w_diffusion() -> gtx.int32:
config.substep_as_float,
*params.smagorinski_factor,
*params.smagorinski_height,
self.vertical_params.physical_heights,
self.vertical_params.inteface_physical_height,
self.diff_multfac_vn,
self.smag_limit,
self.enh_smag_fac,
Expand All @@ -415,8 +415,8 @@ def _get_start_index_for_w_diffusion() -> gtx.int32:
self.diff_multfac_n2w = diffusion_utils.init_nabla2_factor_in_upper_damping_zone(
k_size=self.grid.num_levels,
nshift=0,
physical_heights=self.vertical_params.physical_heights,
nrdmax=self.vertical_params.index_of_damping_layer,
physical_heights=self.vertical_params.inteface_physical_height,
nrdmax=self.vertical_params.end_index_of_damping_layer,
)
self._horizontal_start_index_w_diffusion = _get_start_index_for_w_diffusion()
self._initialized = True
Expand Down Expand Up @@ -734,7 +734,7 @@ def _do_diffusion_step(
k=self.vertical_index,
cell=self.horizontal_cell_index,
nrdmax=gtx.int32(
self.vertical_params.index_of_damping_layer + 1
self.vertical_params.end_index_of_damping_layer + 1
), # +1 since Fortran includes boundaries
interior_idx=gtx.int32(cell_start_interior),
halo_idx=gtx.int32(cell_end_local),
Expand Down
7 changes: 7 additions & 0 deletions model/atmosphere/diffusion/tests/diffusion_tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,23 @@
decomposition_info,
download_ser_data,
experiment,
flat_height,
grid_savepoint,
htop_moist_proc,
icon_grid,
interpolation_savepoint,
linit,
lowest_layer_thickness,
maximal_layer_thickness,
metrics_savepoint,
model_top_height,
ndyn_substeps,
processor_props,
ranked_data_path,
step_date_exit,
step_date_init,
stretch_factor,
top_height_limit_for_maximal_layer_thickness,
)


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
from icon4py.model.atmosphere.diffusion.diffusion import Diffusion, DiffusionParams
from icon4py.model.common.decomposition import definitions
from icon4py.model.common.dimension import CellDim, EdgeDim, VertexDim
from icon4py.model.common.grid.vertical import VerticalModelParams
from icon4py.model.common.grid.vertical import VerticalGridConfig, VerticalGridParams
from icon4py.model.common.test_utils.datatest_utils import REGIONAL_EXPERIMENT
from icon4py.model.common.test_utils.parallel_helpers import ( # noqa: F401 # import fixtures from test_utils package
check_comm_size,
Expand Down Expand Up @@ -50,6 +50,9 @@ def test_parallel_diffusion(
grid_savepoint,
metrics_savepoint,
interpolation_savepoint,
lowest_layer_thickness,
model_top_height,
stretch_factor,
damping_height,
):
check_comm_size(processor_props)
Expand All @@ -73,6 +76,13 @@ def test_parallel_diffusion(
cell_geometry = grid_savepoint.construct_cell_geometry()
edge_geometry = grid_savepoint.construct_edge_geometry()
interpolation_state = construct_interpolation_state(interpolation_savepoint)
vertical_config = VerticalGridConfig(
icon_grid.num_levels,
lowest_layer_thickness=lowest_layer_thickness,
model_top_height=model_top_height,
stretch_factor=stretch_factor,
rayleigh_damping_height=damping_height,
)
config = construct_config(experiment, ndyn_substeps=ndyn_substeps)
diffusion_params = DiffusionParams(config)
dtime = diffusion_savepoint_init.get_metadata("dtime").get("dtime")
Expand All @@ -87,7 +97,9 @@ def test_parallel_diffusion(
grid=icon_grid,
config=config,
params=diffusion_params,
vertical_params=VerticalModelParams(grid_savepoint.vct_a(), damping_height),
vertical_params=VerticalGridParams(
vertical_config, grid_savepoint.vct_a(), grid_savepoint.vct_b()
),
metric_state=metric_state,
interpolation_state=interpolation_state,
edge_params=edge_geometry,
Expand Down
83 changes: 57 additions & 26 deletions model/atmosphere/diffusion/tests/diffusion_tests/test_diffusion.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
from icon4py.model.atmosphere.diffusion.diffusion import Diffusion, DiffusionParams
from icon4py.model.atmosphere.diffusion.diffusion_utils import scale_k
from icon4py.model.common.grid.horizontal import CellParams, EdgeParams
from icon4py.model.common.grid.vertical import VerticalModelParams
from icon4py.model.common.grid.vertical import VerticalGridConfig, VerticalGridParams
from icon4py.model.common.settings import backend
from icon4py.model.common.test_utils.datatest_utils import GLOBAL_EXPERIMENT, REGIONAL_EXPERIMENT
from icon4py.model.common.test_utils.helpers import dallclose
Expand Down Expand Up @@ -96,6 +96,15 @@ def test_smagorinski_factor_diffusion_type_5(experiment):
assert np.all(params.smagorinski_factor >= np.zeros(len(params.smagorinski_factor)))


def create_vertical_params(vertical_config, grid_savepoint):
return VerticalGridParams(
vertical_config=vertical_config,
vct_a=grid_savepoint.vct_a(),
vct_b=grid_savepoint.vct_b(),
_min_index_flat_horizontal_grad_pressure=grid_savepoint.nflat_gradp(),
)


@pytest.mark.datatest
def test_diffusion_init(
diffusion_savepoint_init,
Expand All @@ -105,18 +114,23 @@ def test_diffusion_init(
icon_grid,
experiment,
step_date_init,
lowest_layer_thickness,
model_top_height,
stretch_factor,
damping_height,
ndyn_substeps,
):
config = construct_config(experiment, ndyn_substeps=ndyn_substeps)
additional_parameters = DiffusionParams(config)

vertical_params = VerticalModelParams(
vct_a=grid_savepoint.vct_a(),
vertical_config = VerticalGridConfig(
icon_grid.num_levels,
lowest_layer_thickness=lowest_layer_thickness,
model_top_height=model_top_height,
stretch_factor=stretch_factor,
rayleigh_damping_height=damping_height,
nflatlev=grid_savepoint.nflatlev(),
nflat_gradp=grid_savepoint.nflat_gradp(),
)
vertical_params = create_vertical_params(vertical_config, grid_savepoint)

meta = diffusion_savepoint_init.get_metadata("linit", "date")

Expand Down Expand Up @@ -199,12 +213,12 @@ def _verify_init_values_against_savepoint(

@pytest.mark.datatest
@pytest.mark.parametrize(
"experiment,step_date_init,damping_height",
"experiment,step_date_init",
[
(REGIONAL_EXPERIMENT, "2021-06-20T12:00:10.000", 12500.0),
(REGIONAL_EXPERIMENT, "2021-06-20T12:00:20.000", 12500.0),
(GLOBAL_EXPERIMENT, "2000-01-01T00:00:02.000", 50000.0),
(GLOBAL_EXPERIMENT, "2000-01-01T00:00:04.000", 50000.0),
(REGIONAL_EXPERIMENT, "2021-06-20T12:00:10.000"),
(REGIONAL_EXPERIMENT, "2021-06-20T12:00:20.000"),
(GLOBAL_EXPERIMENT, "2000-01-01T00:00:02.000"),
(GLOBAL_EXPERIMENT, "2000-01-01T00:00:04.000"),
],
)
@pytest.mark.parametrize("ndyn_substeps", (2,))
Expand All @@ -215,17 +229,22 @@ def test_verify_diffusion_init_against_savepoint(
interpolation_savepoint,
metrics_savepoint,
diffusion_savepoint_init,
lowest_layer_thickness,
model_top_height,
stretch_factor,
damping_height,
ndyn_substeps,
):
config = construct_config(experiment, ndyn_substeps=ndyn_substeps)
additional_parameters = DiffusionParams(config)
vertical_params = VerticalModelParams(
vct_a=grid_savepoint.vct_a(),
vertical_config = VerticalGridConfig(
icon_grid.num_levels,
lowest_layer_thickness=lowest_layer_thickness,
model_top_height=model_top_height,
stretch_factor=stretch_factor,
rayleigh_damping_height=damping_height,
nflatlev=grid_savepoint.nflatlev(),
nflat_gradp=grid_savepoint.nflat_gradp(),
)
vertical_params = create_vertical_params(vertical_config, grid_savepoint)
interpolation_state = construct_interpolation_state(interpolation_savepoint)
metric_state = construct_metric_state(metrics_savepoint)
edge_params = grid_savepoint.construct_edge_geometry()
Expand All @@ -248,10 +267,10 @@ def test_verify_diffusion_init_against_savepoint(

@pytest.mark.datatest
@pytest.mark.parametrize(
"experiment, step_date_init, step_date_exit, damping_height",
"experiment, step_date_init, step_date_exit",
[
(REGIONAL_EXPERIMENT, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", 12500.0),
(GLOBAL_EXPERIMENT, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000", 50000.0),
(REGIONAL_EXPERIMENT, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000"),
(GLOBAL_EXPERIMENT, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000"),
],
)
@pytest.mark.parametrize("ndyn_substeps", (2,))
Expand All @@ -263,6 +282,9 @@ def test_run_diffusion_single_step(
grid_savepoint,
icon_grid,
experiment,
lowest_layer_thickness,
model_top_height,
stretch_factor,
damping_height,
ndyn_substeps,
):
Expand All @@ -273,12 +295,14 @@ def test_run_diffusion_single_step(
metric_state = construct_metric_state(metrics_savepoint)
diagnostic_state = construct_diagnostics(diffusion_savepoint_init)
prognostic_state = diffusion_savepoint_init.construct_prognostics()
vertical_params = VerticalModelParams(
vct_a=grid_savepoint.vct_a(),
vertical_config = VerticalGridConfig(
icon_grid.num_levels,
lowest_layer_thickness=lowest_layer_thickness,
model_top_height=model_top_height,
stretch_factor=stretch_factor,
rayleigh_damping_height=damping_height,
nflatlev=grid_savepoint.nflatlev(),
nflat_gradp=grid_savepoint.nflat_gradp(),
)
vertical_params = create_vertical_params(vertical_config, grid_savepoint)
config = construct_config(experiment, ndyn_substeps)
additional_parameters = DiffusionParams(config)

Expand Down Expand Up @@ -307,11 +331,12 @@ def test_run_diffusion_single_step(


@pytest.mark.datatest
@pytest.mark.parametrize(
"linit, experiment, damping_height", [(True, REGIONAL_EXPERIMENT, 12500.0)]
)
@pytest.mark.parametrize("linit, experiment", [(True, REGIONAL_EXPERIMENT)])
def test_run_diffusion_initial_step(
experiment,
lowest_layer_thickness,
model_top_height,
stretch_factor,
damping_height,
diffusion_savepoint_init,
diffusion_savepoint_exit,
Expand All @@ -327,8 +352,14 @@ def test_run_diffusion_initial_step(
metric_state = construct_metric_state(metrics_savepoint)
diagnostic_state = construct_diagnostics(diffusion_savepoint_init)
prognostic_state = diffusion_savepoint_init.construct_prognostics()
vct_a = grid_savepoint.vct_a()
vertical_params = VerticalModelParams(vct_a=vct_a, rayleigh_damping_height=damping_height)
vertical_config = VerticalGridConfig(
icon_grid.num_levels,
lowest_layer_thickness=lowest_layer_thickness,
model_top_height=model_top_height,
stretch_factor=stretch_factor,
rayleigh_damping_height=damping_height,
)
vertical_params = create_vertical_params(vertical_config, grid_savepoint)
config = construct_config(experiment, ndyn_substeps=2)
additional_parameters = DiffusionParams(config)

Expand Down
Loading
Loading