1 / 25

Dynamics-Physics Coupling in FV3-GFS

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 T ime permitting - an extra discussion. System Driver. i nitialization Phase

ichandler
Télécharger la présentation

Dynamics-Physics Coupling in FV3-GFS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Dynamics-Physics Coupling in FV3-GFS EMC-GFDL Technical Meeting on FV3 Modeling System 17-18 October, 2016

  2. Agenda • System Driver Phases • Modifications to the GFS physics suite • FV3-GFS Features • Testing • Time permitting - an extra discussion

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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

  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

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

  18. Modified IPD Benefit

  19. 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

  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

  21. 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

  22. 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

  23. 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

More Related