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

Feature/dp driver #13

Merged
merged 7 commits into from
Aug 16, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
102 changes: 102 additions & 0 deletions driver/examples/configs/baroclinic_c12_dp.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
stencil_config:
compilation_config:
backend: numpy
rebuild: false
validate_args: true
format_source: false
device_sync: false
grid_config:
type: generated
config:
grid_type: 4
dx_const: 3000.0
dy_const: 3000.0
deglat: 10.0
initialization:
type: baroclinic
performance_config:
collect_performance: true
experiment_name: c12_baroclinic
nx_tile: 12
nz: 79
dt_atmos: 225
minutes: 15
layout:
- 1
- 1
diagnostics_config:
path: output
output_format: netcdf
names:
- u
- v
- ua
- va
- pt
- delp
- qvapor
- qliquid
- qice
- qrain
- qsnow
- qgraupel
z_select:
- level: 65
names:
- pt
dycore_config:
a_imp: 1.0
beta: 0.
consv_te: 0.
d2_bg: 0.
d2_bg_k1: 0.2
d2_bg_k2: 0.1
d4_bg: 0.15
d_con: 1.0
d_ext: 0.0
dddmp: 0.5
delt_max: 0.002
do_sat_adj: true
do_vort_damp: true
fill: true
hord_dp: 6
hord_mt: 6
hord_tm: 6
hord_tr: 8
hord_vt: 6
hydrostatic: false
k_split: 1
ke_bg: 0.
kord_mt: 9
kord_tm: -9
kord_tr: 9
kord_wz: 9
n_split: 1
nord: 3
nwat: 6
p_fac: 0.05
rf_cutoff: 3000.
rf_fast: true
tau: 10.
vtdm4: 0.06
z_tracer: true
do_qa: true
tau_i2s: 1000.
tau_g2v: 1200.
ql_gen: 0.001
ql_mlt: 0.002
qs_mlt: 0.000001
qi_lim: 1.0
dw_ocean: 0.1
dw_land: 0.15
icloud_f: 0
tau_l2v: 300.
tau_v2l: 90.
fv_sg_adj: 0
n_sponge: 48
u_max: 355.0

physics_config:
hydrostatic: false
nwat: 6
do_qa: true
4 changes: 4 additions & 0 deletions driver/pace/driver/driver.py
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,10 @@ def from_dict(cls, kwargs: Dict[str, Any]) -> "DriverConfig":
kwargs["grid_config"] = GridInitializerSelector.from_dict(
kwargs["grid_config"]
)
grid_type = kwargs["grid_config"].config.grid_type
# Copy grid_type to the DycoreConfig if it's not the default value
if grid_type != 0:
kwargs["dycore_config"].grid_type = grid_type

if (
isinstance(kwargs["stencil_config"], dict)
Expand Down
15 changes: 14 additions & 1 deletion driver/pace/driver/grid.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,12 +85,20 @@ class GeneratedGridConfig(GridInitializer):
lon_target: desired center longitude for refined tile (deg)
lat_target: desired center latitude for refined tile (deg)
restart_path: if given, load vertical grid from restart file
grid_type: type of grid, 0 is a gnomonic cubed-sphere, 4 is doubly-periodic
dx_const: constant x-width of grid cells on a dp-grid
dy_const: constant y-width of grid cells on a dp-grid
deglat: latitude to use for coriolis calculations on a dp-grid
"""

stretch_factor: Optional[float] = 1.0
lon_target: Optional[float] = 350.0
lat_target: Optional[float] = -90.0
restart_path: Optional[str] = None
grid_type: Optional[int] = 0
dx_const: Optional[float] = 1000.0
dy_const: Optional[float] = 1000.0
deglat: Optional[float] = 15.0

def get_grid(
self,
Expand All @@ -99,7 +107,12 @@ def get_grid(
) -> Tuple[DampingCoefficients, DriverGridData, GridData]:

metric_terms = MetricTerms(
quantity_factory=quantity_factory, communicator=communicator
quantity_factory=quantity_factory,
communicator=communicator,
grid_type=self.grid_type,
dx_const=self.dx_const,
dy_const=self.dy_const,
deglat=self.deglat,
)
if self.stretch_factor != 1: # do horizontal grid transformation
_transform_horizontal_grid(
Expand Down
2 changes: 2 additions & 0 deletions fv3core/pace/fv3core/_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,7 @@ class DynamicalCoreConfig:
do_qa: bool = DEFAULT_BOOL
layout: Tuple[int, int] = NamelistDefaults.layout
grid_type: int = NamelistDefaults.grid_type
u_max: float = NamelistDefaults.u_max # max windspeed for dp config
do_f3d: bool = NamelistDefaults.do_f3d
inline_q: bool = NamelistDefaults.inline_q
do_skeb: bool = NamelistDefaults.do_skeb # save dissipation estimate
Expand Down Expand Up @@ -334,6 +335,7 @@ def from_namelist(cls, namelist: Namelist) -> "DynamicalCoreConfig":
do_qa=namelist.do_qa,
layout=namelist.layout,
grid_type=namelist.grid_type,
u_max=namelist.u_max,
do_f3d=namelist.do_f3d,
inline_q=namelist.inline_q,
do_skeb=namelist.do_skeb,
Expand Down
1 change: 1 addition & 0 deletions tests/main/driver/test_example_configs.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

TESTED_CONFIGS: List[str] = [
"baroclinic_c12.yaml",
"baroclinic_c12_dp.yaml",
"baroclinic_c12_comm_read.yaml",
"baroclinic_c12_comm_write.yaml",
"baroclinic_c12_null_comm.yaml",
Expand Down
2 changes: 2 additions & 0 deletions util/HISTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ History
latest
------

- Added `dx_const`, `dy_const`, `deglat`, and `u_max` namelist settings for doubly-periodic grids
- Added `dx_const`, `dy_const`, and `deglat` to grid generation code for doubly-periodic grids
- Added f32 support to halo exchange data transformation

v0.10.0
Expand Down
9 changes: 9 additions & 0 deletions util/pace/util/grid/generation.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,9 @@ def __init__(
quantity_factory: util.QuantityFactory,
communicator: util.CubedSphereCommunicator,
grid_type: int = 0,
dx_const: float = 1000.0,
dy_const: float = 1000.0,
deglat: float = 15.0,
):
assert grid_type < 3
self._grid_type = grid_type
Expand Down Expand Up @@ -375,6 +378,9 @@ def from_tile_sizing(
communicator: util.CubedSphereCommunicator,
backend: str,
grid_type: int = 0,
dx_const: float = 1000.0,
dy_const: float = 1000.0,
deglat: float = 15.0,
) -> "MetricTerms":
sizer = util.SubtileGridSizer.from_tile_params(
nx_tile=npx - 1,
Expand All @@ -393,6 +399,9 @@ def from_tile_sizing(
quantity_factory=quantity_factory,
communicator=communicator,
grid_type=grid_type,
dx_const=dx_const,
dy_const=dy_const,
deglat=deglat,
)

@property
Expand Down
8 changes: 8 additions & 0 deletions util/pace/util/namelist.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@
class NamelistDefaults:
layout = (1, 1)
grid_type = 0
dx_const = 1000.0
dy_const = 1000.0
deglat = 15.0
u_max = 350.0
do_f3d = False
inline_q = False
do_skeb = False # save dissipation estimate
Expand Down Expand Up @@ -372,6 +376,10 @@ class Namelist:
# fvmxl: Any
# ldebug: Any
grid_type: int = NamelistDefaults.grid_type
dx_const: float = NamelistDefaults.dx_const
dy_const: float = NamelistDefaults.dy_const
deglat: float = NamelistDefaults.deglat
u_max: float = NamelistDefaults.u_max
do_f3d: bool = NamelistDefaults.do_f3d
inline_q: bool = NamelistDefaults.inline_q
do_skeb: bool = NamelistDefaults.do_skeb # save dissipation estimate
Expand Down