-
Notifications
You must be signed in to change notification settings - Fork 10
Better torus support for mean cell area etc. #848
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
Changes from 48 commits
caf2565
643829b
4b0327c
4113218
2df94eb
32f322e
3dc0152
3958306
f4bdfc3
c05d469
21c6785
409ceeb
f87f5d9
04025bd
bd08cbb
9cf6b5d
6e96aee
667c38c
8c6d92c
471ba0a
20b0735
66c31e4
27b7cba
1c31e16
35e4a11
d3e1bd0
b940c27
5816b44
8edfafc
f295c3f
f6f0ce8
995d822
ac84e00
c68c183
b4d73a8
fbc91d6
a8e9044
48207b0
7396648
b05cc3d
4879d3a
628de75
6d316bb
c8eea7b
38680c7
5e7eefc
a7f8dea
19256ce
8c484a6
c9dbdb3
e597f64
0891271
f75a552
fda6768
71e6d69
4852673
6dec71b
b6d6121
718ed0a
75313b6
a886952
c986803
3320813
a236f1f
9c9857a
a21bf4b
581f465
bdd5bcb
4e8786e
8875e0f
3c12735
47687a4
a75b0a1
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -119,9 +119,9 @@ def __exit__(self, exc_type, exc_val, exc_tb): | |
| def __call__(self, backend: gtx_typing.Backend | None, keep_skip_values: bool): | ||
| if not self._reader: | ||
| self.open() | ||
| self._geometry = self._read_geometry_fields(backend) | ||
| self._grid = self._construct_grid(backend=backend, with_skip_values=keep_skip_values) | ||
| self._coordinates = self._read_coordinates(backend) | ||
| self._geometry = self._read_geometry_fields(backend) | ||
| self.close() | ||
|
|
||
| def _read_coordinates(self, backend: gtx_typing.Backend | None) -> CoordinateDict: | ||
|
|
@@ -185,6 +185,16 @@ def _read_geometry_fields(self, backend: gtx_typing.Backend | None): | |
| self._reader.variable(gridfile.GeometryName.DUAL_AREA), | ||
| allocator=backend, | ||
| ), | ||
| gridfile.GeometryName.EDGE_LENGTH.value: gtx.as_field( | ||
| (dims.EdgeDim,), | ||
| self._reader.variable(gridfile.GeometryName.EDGE_LENGTH), | ||
| allocator=backend, | ||
| ), | ||
| gridfile.GeometryName.DUAL_EDGE_LENGTH.value: gtx.as_field( | ||
| (dims.EdgeDim,), | ||
| self._reader.variable(gridfile.GeometryName.DUAL_EDGE_LENGTH), | ||
| allocator=backend, | ||
| ), | ||
| gridfile.GeometryName.EDGE_CELL_DISTANCE.value: gtx.as_field( | ||
| (dims.EdgeDim, dims.E2CDim), | ||
| self._reader.variable(gridfile.GeometryName.EDGE_CELL_DISTANCE, transpose=True), | ||
|
|
@@ -335,11 +345,55 @@ def _construct_grid( | |
| grid_level = self._reader.attribute(gridfile.MandatoryPropertyName.LEVEL) | ||
| if geometry_type := self._reader.try_attribute(gridfile.MPIMPropertyName.GEOMETRY): | ||
| geometry_type = base.GeometryType(geometry_type) | ||
| global_params = icon.GlobalGridParams( | ||
| sphere_radius = self._reader.try_attribute(gridfile.MPIMPropertyName.SPHERE_RADIUS) | ||
| domain_length = self._reader.try_attribute(gridfile.MPIMPropertyName.DOMAIN_LENGTH) | ||
| domain_height = self._reader.try_attribute(gridfile.MPIMPropertyName.DOMAIN_HEIGHT) | ||
|
|
||
| mean_edge_length = self._reader.try_attribute(gridfile.MPIMPropertyName.MEAN_EDGE_LENGTH) | ||
| mean_dual_edge_length = self._reader.try_attribute( | ||
| gridfile.MPIMPropertyName.MEAN_DUAL_EDGE_LENGTH | ||
| ) | ||
| mean_cell_area = self._reader.try_attribute(gridfile.MPIMPropertyName.MEAN_CELL_AREA) | ||
| mean_dual_cell_area = self._reader.try_attribute( | ||
| gridfile.MPIMPropertyName.MEAN_DUAL_CELL_AREA | ||
| ) | ||
|
|
||
| # TODO(msimberg): EDGE_LENGTH requires GridGeometry (not just | ||
| # GeometryDict). GridGeometry requires the IconGrid. IconGrid requires | ||
| # GlobalGridParams. GlobalGridParams requires EDGE_LENGTH. EDGE_LENGTH | ||
| # requires GridGeometry. | ||
| # - Option 1: Only use MEAN_EDGE_LENGTH from grid file. | ||
| # - Option 2: Fix circular dependency. | ||
| # - Option 3: Use EDGE_LENGTH from grid file to make it available in | ||
| # GeometryDict. This is implemented below. Is the field always there? | ||
|
||
| edge_lengths = self.geometry[gridfile.GeometryName.EDGE_LENGTH.value].ndarray | ||
| dual_edge_lengths = self.geometry[gridfile.GeometryName.DUAL_EDGE_LENGTH.value].ndarray | ||
| cell_areas = self.geometry[gridfile.GeometryName.CELL_AREA.value].ndarray | ||
| dual_cell_areas = mean_dual_cell_area = xp.mean( | ||
| self.geometry[gridfile.GeometryName.DUAL_AREA.value].ndarray | ||
| ) | ||
|
|
||
| global_params = icon.GlobalGridParams.from_fields( | ||
| backend=backend, | ||
| grid_shape=icon.GridShape( | ||
| geometry_type=geometry_type, | ||
| subdivision=icon.GridSubdivision(root=grid_root, level=grid_level), | ||
| ) | ||
| ), | ||
| radius=sphere_radius, | ||
| domain_length=domain_length, | ||
| domain_height=domain_height, | ||
| # TODO(msimberg): The above is given for the grid, not derived from | ||
| # anything. The below can be derived in the worst case, so keep | ||
| # separate? | ||
| num_cells=num_cells, | ||
| mean_edge_length=mean_edge_length, | ||
| mean_dual_edge_length=mean_dual_edge_length, | ||
| mean_cell_area=mean_cell_area, | ||
| mean_dual_cell_area=mean_dual_cell_area, | ||
| edge_lengths=edge_lengths, | ||
| dual_edge_lengths=dual_edge_lengths, | ||
| cell_areas=cell_areas, | ||
| dual_cell_areas=dual_cell_areas, | ||
|
||
| ) | ||
| grid_size = base.HorizontalGridSize( | ||
| num_vertices=num_vertices, num_edges=num_edges, num_cells=num_cells | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.