250 likes | 270 Views
This document details the discussions and phases from the FV3-GFS EMC-GFDL Technical Meeting held on 17-18 October 2016, covering System Driver, Integration, and Initialization Phases, modifications to GFS physics suite, and features of FV3-GFS. It includes procedures for system initialization, driver phases, testing, extra discussions, and key components for model integration. The document provides insights into the coupling of dynamics and physics components in the FV3-GFS modeling system, showcasing the collaboration among researchers and developers for advancing atmospheric modeling capabilities.
E N D
Dynamics-Physics Coupling in FV3-GFS EMC-GFDL Technical Meeting on FV3 Modeling System 17-18 October, 2016
Agenda • System Driver Phases • Modifications to the GFS physics suite • FV3-GFS Features • Testing • Time permitting - an extra discussion
System Driver initialization Phase call mpp_init call fms_init call coupler_init integration Phase call update_atmos_model_dynamics call update_atmos_radiation_physics call update_atmos_model_state end Phase call coupler_end call fms_end 3
Initialization Phase call atmos_model_init atmosphere_init phys_rad_driver_init [grid initialization] nuopc_phys_init gfs_diag_register get_external_ic gfuncphys surface_props_input gsmconst setindxoz adiabatic_init rad_initialize [IPD container init] set_soilveg NUOPC “cap” FV3 API GFS Physics API
get_external_ic Ingests GFS initial condition fields using FMS_IO: TSEA surface skin temperature (K) ORO_filt surface orography/topography (m) ZH GFS grid height [levels] (m) PS surface pressure (Pa) U_w D-grid west [left] face wind component (m/s) V_w D-grid west [left] face wind component (m/s) U_s D-grid south [bottom] face wind component (m/s) V_s D-grid south [bottom] face wind component (m/s) W vertical velocity 'omega' (Pa/s) Prognostic tracer fields: specific humidity O3mixing ratio cloud water mixing ratio U_w/V_w U_s/V_s
adiabatic_init Acts as a pre-conditioner for the ICs Number of pre-conditioning steps is a runtime option Each pre-conditioning step takes: forward-backward pass through dynamics nudge back to IC backward-forward pass through dynamics nudge back to IC
surface_props_input GFS initial condition surface data read in using FMS_IO: orography - filtered and unfiltered orographic GWD coefficients land surface properties vegetation fraction and type soil moisture and type soil temperatures albedos snowpack information 2-meter temperatures and winds optional data needed for clean restarts: phy_f2d phy_f3d
Prototype IPD Interface Nothing more than a variable translation layer did not include: ozone coefficient interpolation surface data cycling necessary logic inside of gloobp/gloopr required user to provide all storage new variables now added in two places Modified the container interfaces to allocate storage reduced interface argument-list allows one to recursively allocate containers allocation performed once during initialization
IPD Container Block For each MPI-rank, decomposing rank-local domain OpenMP threading naturally applicable Structure to store global extent for the rank and each block Include per-block translation from (i,j,k) -> (ix,k) Blocks not required to be uniform in size No more continual copying data to/from chunked arrays z y x
IPD Container Initialization !--- allocate/initialize the various nuopc physics containers per block (including ozone container) do nb = 1, Atm_block%nblks ibs = Atm_block%ibs(nb); ibe = Atm_block%ibe(nb) jbs = Atm_block%jbs(nb); jbe= Atm_block%jbe(nb) ngptc = (ibe - ibs + 1) * (jbe - jbs + 1) call Tbd_data(nb)%set (ngptc, Mdl_parms, xkzm_m, xkzm_h, xkzm_s,evpco, psautco, prautco, wminco, pl_pres) call Dyn_parms(nb)%setrad (ngptc, ngptc, kdt, jdate, solhr, fhlwr, fhswr,lssav, ipt, lprnt, dt_phys) callDyn_parms(nb)%setphys (ngptc, ngptc, solhr, kdt, lssav, latgfs,dt_phys, dt_phys, clstp, nnp, fhour, ncols) call Gfs_diags(nb)%setrad(ngptc, NFXR) call Gfs_diags(nb)%setphys (ngptc, Mdl_parms) call Sfc_props(nb)%setrad(ngptc, Mdl_parms, .FALSE.) ! last argument determines gsm vsatmos-only call Sfc_props(nb)%setphys (ngptc, Mdl_parms) call Cld_props(nb)%setrad(ngptc, Mdl_parms, sup) call Cld_props(nb)%setphys (ngptc, Mdl_parms, sup, flgmin) call Rad_tends(nb)%set (ngptc, Mdl_parms) call Intr_flds(nb)%setrad(ngptc, Mdl_parms, SW0, SWB, LW0, LWB) call Intr_flds(nb)%setphys (ngptc, Mdl_parms) call State_out(nb)%setphys (ngptc, Mdl_parms) ! setphys must becalled prior tosetrad call State_in(nb)%setphys(ngptc, Mdl_parms) call State_in(nb)%setrad(ngptc, Mdl_parms) enddo
System Driver initialization Phase call mpp_init call fms_init call coupler_init integration Phase call update_atmos_model_dynamics call update_atmos_radiation_physics call update_atmos_model_state end Phase call coupler_end call fms_end 12
Integration Phase update_atmos_model_dynamics fv_dynamics atmosphere_dynamics atmos_phys_driver_statein phys_rad_setup_step nuopc_rad_update update_atmos_radiation_physics nuopc_rad_run radiation_driver physics_driver nuopc_phys_run fv_update_phys update_atmos_model_state atmosphere_state_update fv_diag NUOPC “cap” FV3 API GFS Physics API
atmos_phys_driver_statein • Populate IPD State_in container(s) • uses defined blocks • transform vertical index • collapse horizontal indicesfrom (i,j,k) -> (ix,k) • A-grid quantities (including winds) • for consistency with GFS physics, redefine • total mass • mixing ratios • layer and level pressure
phys_rad_setup_step • Captures “setup phase” in gloopb/gloopr • time & date variables: phour, fhour, solhr, etc • triggers: lsswr, lslwr • random number seeds for radiation • scheme dependent cloud properties • interpolate coefficients for prognostic ozone • replace fields when surface data cycling triggered
radiation_driver Evaluate triggers to determine if a radiation step Update time varying data sets and module variables Loop through blocks computing radiation quantities !--- call the nuopc radiation loop--- !$OMP parallel do default (none) & !$OMP schedule (dynamic,1) & !$OMP shared (Atm_block, Dyn_parms, Statein, Sfc_props, & !$OMP Gfs_diags, Intr_flds, Cld_props, Rad_tends) & !$OMP firstprivate (Mdl_parms) & !$OMP private (nb) do nb = 1, Atm_block%nblks if ((Mdl_parms%me == 0) .and. (nb /= 1)) Mdl_parms%me = -99 call nuopc_rad_run (Statein(nb), Sfc_props(nb), Gfs_diags(nb), & Intr_flds(nb), Cld_props(nb), Rad_tends(nb), & Mdl_parms, Dyn_parms(nb)) enddo
physics_driver !--- call the nuopc physics loop--- !$OMP parallel do default (none) schedule(dynamic,1) & !$OMP shared (Atm_block, Dyn_parms, Statein, Sfc_props, Gfs_diags, Intr_flds, & !$OMP Cld_props, Rad_tends, Tbd_data, Stateout, fdiag, fhzero, levs) & !$OMP firstprivate (Mdl_parms, fhour, Time_diag) & !$OMP private (nb, nx, ny) donb = 1, Atm_block%nblks if ((Mdl_parms%me == 0) .and. (nb /= 1)) Mdl_parms%me = -99 Tbd_data(nb)%dpshc(:) = 0.3d0 * Statein(nb)%prsi(:,1) callnuopc_phys_run (Statein(nb), Stateout(nb), Sfc_props(nb), Gfs_diags(nb), Intr_flds(nb), & Cld_props(nb), Rad_tends(nb), Mdl_parms, Tbd_data(nb), Dyn_parms(nb)) if (mpp_pe() == mpp_root_pe()) Mdl_parms%me = mpp_pe() !--- check the diagnostics output trigger if (ANY(fdiag == fhour)) then if (mpp_pe() == mpp_root_pe().and.nb==1) write(6,*) 'DIAG STEP', fhour nx = Atm_block%ibe(nb) - Atm_block%ibs(nb) + 1 ny = Atm_block%jbe(nb) - Atm_block%jbs(nb) + 1 call gfs_diag_output (Time_diag, Gfs_diags(nb), Statein(nb), Stateout(nb), & Atm_block, nb, nx, ny, levs, Mdl_parms%ntcw, Mdl_parms%ntoz, Dyn_parms(nb)%dtp) endif enddo !----- Indicate to diag_manager to write diagnostics to file (if needed) if (ANY(fdiag == fhour)) then call diag_send_complete_extra(Time_diag) endif
atmosphere_state_update • De-populate IPD State_out container(s) • transform vertical index • expand horizontal indicesfrom (ix,k) -> (I,j,k) • compute A-grid velocity and heat tendencies • redefine tracer mixing ratios consistent for FV3 • Apply tendencies and redefine winds on the D-grid • Output diagnostic quantities defined in diag_table
System Driver initialization Phase call mpp_init call fms_init call coupler_init integration Phase call update_atmos_model_dynamics call update_atmos_radiation_physics call update_atmos_model_state end Phase call coupler_end call fms_end 20
GFS Physics Modifications • Enabled infinite top-layer option in radiation • FV3 consistent geopotential calculation prior to convective parameterization • FV3 grid-cellarea passed to gbphys to be used in length-scale calclulations
Unique FV3-GFS Features • Turn off physics only advect properties via dycore • Turn off dycore integrate physics only emulate single-column model with full domain • Turn off both to check framework
fvGFS Testing • Bitwise reproducible across • distributed decompositions • OpenMP thread counts • restarts (requires lossless data storage) • Performance • “Do No Harm” unless absolutely necessary for the science • Subset of DCMIP suite • Idealized Nest verification
Concurrent Radiation update_atmos_model_dynamics update_atmos_radiation atmosphere_dynamics atmos_rad_driver_statein fv_dynamics rad_setup_step update_atmos_physics radiation_driver atmos_phys_driver_statein nuopc_rad_update phys_setup_step nuopc_rad_run physics_driver nuopc_phys_run update_atmos_model_state atmosphere_state_update NUOPC “cap” FV3 API fv_update_phys GFS Physics API