From d3521d54d841fb6e09661244f2f51f87f1aed397 Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Fri, 15 Oct 2021 20:16:10 -0500 Subject: [PATCH 01/57] Updates to support NSSL microphysics in CCPP --- ccpp/config/ccpp_prebuild_config.py | 9 + ccpp/data/GFS_typedefs.F90 | 232 +++++++++++++++++- ccpp/data/GFS_typedefs.meta | 205 +++++++++++++++- ccpp/suites/suite_FV3_RRFS_v1nssl.xml | 82 +++++++ ccpp/suites/suite_FV3_RRFS_v1nssl_lsmnoah.xml | 82 +++++++ 5 files changed, 599 insertions(+), 11 deletions(-) create mode 100644 ccpp/suites/suite_FV3_RRFS_v1nssl.xml create mode 100644 ccpp/suites/suite_FV3_RRFS_v1nssl_lsmnoah.xml diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index 771e53b04..82d0e9c5b 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -162,6 +162,7 @@ 'physics/physics/mp_thompson_pre.F90', 'physics/physics/mp_thompson.F90', 'physics/physics/mp_thompson_post.F90', + 'physics/physics/mp_nssl.F90' , 'physics/physics/ozphys.f', 'physics/physics/ozphys_2015.f', 'physics/physics/precpd.f', @@ -297,6 +298,14 @@ # *DH 2020-06-01 ], }, + 'mp_nssl' : { + 'mp_nssl_run' : [ + 'effective_radius_of_stratiform_cloud_liquid_water_particle', + 'effective_radius_of_stratiform_cloud_ice_particle', + 'effective_radius_of_stratiform_cloud_snow_particle', + 'effective_radius_of_stratiform_cloud_rain_particle' + ], + }, 'rrtmgp_sw_rte' : { 'rrtmgp_sw_rte_run' : [ 'components_of_surface_downward_shortwave_fluxes', diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 04004eeec..c73d45f01 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -773,6 +773,8 @@ module GFS_typedefs integer :: idcor_con = 0 !< choice for decorrelation-length: Use constant value integer :: idcor_hogan = 1 !< choice for decorrelation-length: (https://rmets.onlinelibrary.wiley.com/doi/full/10.1002/qj.647) integer :: idcor_oreopoulos = 2 !< choice for decorrelation-length: (10.5194/acp-12-9097-2012) + integer :: imp_physics_nssl = 17 !< choice of NSSL microphysics scheme with background CCN + integer :: imp_physics_nssl2mccn = 18 !< choice of NSSL microphysics scheme with predicted CCN (compatibility) !--- Z-C microphysical parameters real(kind=kind_phys) :: psautco(2) !< [in] auto conversion coeff from ice to snow real(kind=kind_phys) :: prautco(2) !< [in] auto conversion coeff from cloud to rain @@ -817,6 +819,14 @@ module GFS_typedefs real(kind=kind_phys) :: shoc_parm(5) !< critical pressure in Pa for tke dissipation in shoc integer :: ncnd !< number of cloud condensate types + !--- NSSL microphysics params + real(kind=kind_phys) :: nssl_cccn !< CCN concentration (m-3) + real(kind=kind_phys) :: nssl_alphah !< graupel shape parameter + real(kind=kind_phys) :: nssl_alphahl !< hail shape parameter + logical :: nssl_hail_on !< NSSL flag to activate the hail category + logical :: nssl_ccn_on !< NSSL flag to activate the CCN category + logical :: nssl_invertccn !< NSSL flag to treat CCN as activated (true) or unactivated (false) + !--- Thompson's microphysical parameters logical :: ltaerosol !< flag for aerosol version logical :: lradar !< flag for radar reflectivity @@ -1203,13 +1213,19 @@ module GFS_typedefs integer :: ntrw !< tracer index for rain water integer :: ntsw !< tracer index for snow water integer :: ntgl !< tracer index for graupel + integer :: nthl !< tracer index for hail integer :: ntclamt !< tracer index for cloud amount integer :: ntlnc !< tracer index for liquid number concentration integer :: ntinc !< tracer index for ice number concentration integer :: ntrnc !< tracer index for rain number concentration integer :: ntsnc !< tracer index for snow number concentration integer :: ntgnc !< tracer index for graupel number concentration - integer :: ntke !< tracer index for sgs kinetic energy + integer :: nthnc !< tracer index for hail number concentration + integer :: ntccn !< tracer index for CCN + integer :: ntccna !< tracer index for activated CCN + integer :: ntgv !< tracer index for graupel particle volume + integer :: nthv !< tracer index for hail particle volume + integer :: ntke !< tracer index for kinetic energy integer :: nto !< tracer index for oxygen ion integer :: nto2 !< tracer index for oxygen integer :: ntwa !< tracer index for water friendly aerosol @@ -1980,6 +1996,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: oc(:) => null() !< real (kind=kind_phys), pointer :: olyr(:,:) => null() !< logical , pointer :: otspt(:,:) => null() !< + logical , pointer :: otsptflag(:) => null() !< integer :: oz_coeffp5 !< logical :: phys_hydrostatic !< real (kind=kind_phys), pointer :: plvl(:,:) => null() !< @@ -3249,6 +3266,13 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & logical :: mg_do_ice_gmao = .false. !< set .true. to turn on gmao ice formulation logical :: mg_do_liq_liu = .true. !< set .true. to turn on liu liquid treatment + !--- NSSL microphysics params + real(kind=kind_phys) :: nssl_cccn = 0.6e9 !< CCN concentration (m-3) + real(kind=kind_phys) :: nssl_alphah = 0.0 !< graupel shape parameter + real(kind=kind_phys) :: nssl_alphahl = 1.0 !< hail shape parameter + logical :: nssl_hail_on = .false. !< NSSL flag to activate the hail category + logical :: nssl_ccn_on = .true. !< NSSL flag to activate the CCN category + logical :: nssl_invertccn = .true. !< NSSL flag to treat CCN as activated (true) or unactivated (false) !--- Thompson microphysical parameters logical :: ltaerosol = .false. !< flag for aerosol version @@ -3616,6 +3640,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & mg_alf, mg_qcmin, mg_do_ice_gmao, mg_do_liq_liu, & ltaerosol, lradar, nsradar_reset, lrefres, ttendlim, & ext_diag_thompson, dt_inner, lgfdlmprad, & + nssl_cccn, nssl_alphah, nssl_alphahl, & + nssl_invertccn, nssl_hail_on, nssl_ccn_on, & !--- max hourly avg_max_length, & !--- land/surface model control @@ -4060,6 +4086,14 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%tcr = tcr Model%tcrf = 1.0/(tcr-tf) +!-- NSSL microphysics params + Model%nssl_cccn = nssl_cccn + Model%nssl_alphah = nssl_alphah + Model%nssl_alphahl = nssl_alphahl + Model%nssl_hail_on = nssl_hail_on + Model%nssl_ccn_on = nssl_ccn_on + Model%nssl_invertccn = nssl_invertccn + !--- Thompson MP parameters Model%ltaerosol = ltaerosol Model%lradar = lradar @@ -4480,12 +4514,18 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%ntrw = get_tracer_index(Model%tracer_names, 'rainwat', Model%me, Model%master, Model%debug) Model%ntsw = get_tracer_index(Model%tracer_names, 'snowwat', Model%me, Model%master, Model%debug) Model%ntgl = get_tracer_index(Model%tracer_names, 'graupel', Model%me, Model%master, Model%debug) + Model%nthl = get_tracer_index(Model%tracer_names, 'hailwat', Model%me, Model%master, Model%debug) Model%ntclamt = get_tracer_index(Model%tracer_names, 'cld_amt', Model%me, Model%master, Model%debug) Model%ntlnc = get_tracer_index(Model%tracer_names, 'water_nc', Model%me, Model%master, Model%debug) Model%ntinc = get_tracer_index(Model%tracer_names, 'ice_nc', Model%me, Model%master, Model%debug) Model%ntrnc = get_tracer_index(Model%tracer_names, 'rain_nc', Model%me, Model%master, Model%debug) Model%ntsnc = get_tracer_index(Model%tracer_names, 'snow_nc', Model%me, Model%master, Model%debug) Model%ntgnc = get_tracer_index(Model%tracer_names, 'graupel_nc', Model%me, Model%master, Model%debug) + Model%nthnc = get_tracer_index(Model%tracer_names, 'hail_nc', Model%me, Model%master, Model%debug) + Model%ntccn = get_tracer_index(Model%tracer_names, 'ccn_nc', Model%me, Model%master, Model%debug) + Model%ntccna = get_tracer_index(Model%tracer_names, 'ccna_nc', Model%me, Model%master, Model%debug) + Model%ntgv = get_tracer_index(Model%tracer_names, 'graupel_vol',Model%me, Model%master, Model%debug) + Model%nthv = get_tracer_index(Model%tracer_names, 'hail_vol', Model%me, Model%master, Model%debug) Model%ntke = get_tracer_index(Model%tracer_names, 'sgs_tke', Model%me, Model%master, Model%debug) Model%nqrimef = get_tracer_index(Model%tracer_names, 'q_rimef', Model%me, Model%master, Model%debug) Model%ntwa = get_tracer_index(Model%tracer_names, 'liq_aero', Model%me, Model%master, Model%debug) @@ -4619,12 +4659,17 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & call label_dtend_tracer(Model,100+Model%ntrw,'rainwat','rain water','kg kg-1 s-1') call label_dtend_tracer(Model,100+Model%ntsw,'snowwat','snow water','kg kg-1 s-1') call label_dtend_tracer(Model,100+Model%ntgl,'graupel','graupel','kg kg-1 s-1') + call label_dtend_tracer(Model,100+Model%nthl,'hailwat','hail','kg kg-1 s-1') call label_dtend_tracer(Model,100+Model%ntclamt,'cld_amt','cloud amount integer','kg kg-1 s-1') call label_dtend_tracer(Model,100+Model%ntlnc,'water_nc','liquid number concentration','kg-1 s-1') call label_dtend_tracer(Model,100+Model%ntinc,'ice_nc','ice number concentration','kg-1 s-1') call label_dtend_tracer(Model,100+Model%ntrnc,'rain_nc','rain number concentration','kg-1 s-1') call label_dtend_tracer(Model,100+Model%ntsnc,'snow_nc','snow number concentration','kg-1 s-1') call label_dtend_tracer(Model,100+Model%ntgnc,'graupel_nc','graupel number concentration','kg-1 s-1') + call label_dtend_tracer(Model,100+Model%nthnc,'hail_nc','hail number concentration','kg-1 s-1') + call label_dtend_tracer(Model,100+Model%ntccn,'ccn_nc','CCN number concentration','kg-1 s-1') + call label_dtend_tracer(Model,100+Model%ntgv,'graupel_vol','graupel volume','m3 kg-1 s-1') + call label_dtend_tracer(Model,100+Model%nthv,'hail_vol','hail volume','m3 kg-1 s-1') call label_dtend_tracer(Model,100+Model%ntke,'sgs_tke','turbulent kinetic energy','J s-1') call label_dtend_tracer(Model,100+Model%nqrimef,'q_rimef','mass weighted rime factor','kg-1 s-1') call label_dtend_tracer(Model,100+Model%ntwa,'liq_aero','number concentration of water-friendly aerosols','kg-1 s-1') @@ -4689,14 +4734,17 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & if(itrac==Model%ntchs) exit ! remaining tracers are chemical if ( itrac /= Model%ntcw .and. itrac /= Model%ntiw .and. itrac /= Model%ntclamt .and. & itrac /= Model%ntrw .and. itrac /= Model%ntsw .and. itrac /= Model%ntrnc .and. & - itrac /= Model%ntsnc .and. itrac /= Model%ntgl .and. itrac /= Model%ntgnc) then + itrac /= Model%ntsnc .and. itrac /= Model%ntgl .and. itrac /= Model%ntgnc .and. & + itrac /= Model%nthl .and. itrac /= Model%nthnc .and. itrac /= Model%nthv .and. & + itrac /= Model%ntgv ) then call fill_dtidx(Model,dtend_select,100+itrac,Model%index_of_process_scnv,have_scnv) call fill_dtidx(Model,dtend_select,100+itrac,Model%index_of_process_dcnv,have_dcnv) else if(Model%ntchs<=0 .or. itrac 1 ) THEN + IF (Model%me == Model%master) then + write(*,*) 'NSSL micro: error! CCN is OFF (nssl_ccn_on = F) but ntccn > 1.' + write(*,*) 'Should either remove ccn_nc from field_table or set nssl_ccn_on = .true.' + write(0,*) 'NSSL micro: error! CCN is OFF (nssl_ccn_on = F) but ntccn > 1.' + write(0,*) 'Should either remove ccn_nc from field_table or set nssl_ccn_on = .true.' + ENDIF + stop + ENDIF + Model%ntccn = -99 + Model%ntccna = -99 + ELSEIF ( Model%ntccn < 1 ) THEN + if (Model%me == Model%master) then + write(*,*) 'NSSL micro: error! CCN is ON but ntccn < 1. Must have ccn_nc in field_table if nssl_ccn_on=T' + write(0,*) 'NSSL micro: error! CCN is ON but ntccn < 1. Must have ccn_nc in field_table if nssl_ccn_on=T' + ENDIF + stop + ELSE + if (Model%me == Model%master) then + write(*,*) 'NSSL micro: CCN is ON' + ENDIF + IF ( Model%ntccna > 1 .and. Model%me == Model%master ) THEN + write(*,*) 'NSSL micro: CCNA is ON' + ENDIF + ENDIF + + if (Model%me == Model%master) then + write(*,*) 'Model%nthl = ',Model%nthl + ENDIF + IF ( ( Model%nthl < 1 ) ) THEN ! check if hail is in the field_table. If not, set flag so the microphysics knows. + if (Model%me == Model%master) then + write(*,*) 'NSSL micro: hail is OFF' + IF ( nssl_hail_on ) write(*,*) 'Namelist had nssl_hail_on=true, but tracer config does not have hailwat' + ENDIF + nssl_hail_on = .false. + Model%nssl_hail_on = .false. + ! pretend that hail exists so that bad arrays are not passed to microphysics +! Model%nthl = Max( 1, Model%ntgl ) +! Model%nthv = Max( 1, Model%ntgv ) +! Model%nthnc = Max( 1, Model%ntgnc ) + ELSE + nssl_hail_on = .true. + Model%nssl_hail_on = .true. + if (Model%me == Model%master) then + write(*,*) 'NSSL micro: hail is ON' + IF ( .not. nssl_hail_on ) write(*,*) 'Namelist had nssl_hail_on=false, but tracer config has hailwat' + ENDIF + IF ( Model%nthv < 1 .or. Model%nthnc < 1 ) THEN + if (Model%me == Model%master) THEN + write(0,*) 'missing needed tracers for NSSL hail! nthl > 1 but either volume or number is not in field_table' + write(0,*) 'nthv, nthnc = ', Model%nthv, Model%nthnc + ENDIF + stop + ENDIF + ENDIF + + Model%nssl_hail_on = nssl_hail_on + + IF ( ( Model%ntccn < 1 ) ) THEN ! check if ccn is in the field_table. If not, set flag so the microphysics knows. + if (Model%me == Model%master) then + write(*,*) 'NSSL micro: CCN is OFF' + ENDIF + nssl_ccn_on = .false. + Model%nssl_ccn_on = .false. + ELSE + nssl_ccn_on = .true. + Model%nssl_ccn_on = .true. + if (Model%me == Model%master) then + write(*,*) 'NSSL micro: CCN is ON' + ENDIF + ENDIF + + IF ( Model%ntgl < 1 .or. Model%ntgv < 1 .or. Model%ntgnc < 1 .or. & + Model%ntsw < 1 .or. Model%ntsnc < 1 .or. & + Model%ntrw < 1 .or. Model%ntrnc < 1 .or. & + Model%ntiw < 1 .or. Model%ntinc < 1 .or. & + Model%ntcw < 1 .or. Model%ntlnc < 1 & + ) THEN + if (Model%me == Model%master) write(0,*) 'missing needed tracers for NSSL!' + stop + ENDIF + + + ENDIF !} + ! To ensure that these values match what's in the physics, ! array sizes are compared during model init in GFS_phys_time_vary_init() ! @@ -5126,6 +5269,39 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !Model%nseffr = 3 !if (Model%me == Model%master) print *,' Using wsm6 microphysics' + elseif (Model%imp_physics == Model%imp_physics_nssl) then !NSSL microphysics + Model%npdf3d = 0 + Model%num_p3d = 4 ! for size of phy3d + Model%num_p2d = 1 + Model%pdfcld = .false. + Model%shcnvcw = .false. + IF ( Model%nssl_hail_on ) THEN + i = 1 + ELSE + i = 0 + ENDIF + if ( nwat /= 6+i ) then + print *,' NSSL MP requires nwat to be set to ', 6+i,' - job aborted, nssl_hail_on = ',nssl_hail_on + stop + end if + Model%nleffr = 1 + Model%nieffr = 2 + Model%nseffr = 3 + Model%nreffr = 4 + Model%lradar = .true. + if (.not. Model%effr_in) then + print *,' NSSL MP requires effr_in to be set to .true., changing value from false to true' + Model%effr_in = .true. + effr_in = .true. + ENDIF + if (Model%me == Model%master) print *,' Using NSSL double moment microphysics', & + ' nssl_ccn_on =',Model%nssl_ccn_on, & + ' nssl_invertccn =',Model%nssl_invertccn, & + ' lradar =',Model%lradar, & + ' num_p3d =',Model%num_p3d, & + ' num_p2d =',Model%num_p2d + + elseif (Model%imp_physics == Model%imp_physics_thompson) then !Thompson microphysics Model%npdf3d = 0 Model%num_p3d = 3 @@ -5569,6 +5745,14 @@ subroutine control_print(Model) print *, ' dt_inner : ', Model%dt_inner print *, ' ' endif + if (Model%imp_physics == Model%imp_physics_nssl) then + print *, ' NSSL microphysical parameters' + print *, ' nssl_cccn - CCCN background CCN conc. : ', Model%nssl_cccn + print *, ' nssl_alphah - graupel shape parameter : ', Model%nssl_alphah + print *, ' nssl_alphahl - hail shape parameter : ', Model%nssl_alphahl + print *, ' nssl_hail_on - hail activation flag : ', Model%nssl_hail_on + print *, ' lradar - radar refl. flag : ', Model%lradar + endif if (Model%imp_physics == Model%imp_physics_mg) then print *, ' M-G microphysical parameters' print *, ' fprcp : ', Model%fprcp @@ -5816,12 +6000,18 @@ subroutine control_print(Model) print *, ' ntrw : ', Model%ntrw print *, ' ntsw : ', Model%ntsw print *, ' ntgl : ', Model%ntgl + print *, ' nthl : ', Model%nthl print *, ' ntclamt : ', Model%ntclamt print *, ' ntlnc : ', Model%ntlnc print *, ' ntinc : ', Model%ntinc print *, ' ntrnc : ', Model%ntrnc print *, ' ntsnc : ', Model%ntsnc print *, ' ntgnc : ', Model%ntgnc + print *, ' nthnc : ', Model%nthnc + print *, ' ntccn : ', Model%ntccn + print *, ' ntccna : ', Model%ntccna + print *, ' ntgv : ', Model%ntgv + print *, ' nthv : ', Model%nthv print *, ' ntke : ', Model%ntke print *, ' nto : ', Model%nto print *, ' nto2 : ', Model%nto2 @@ -6928,6 +7118,7 @@ subroutine interstitial_create (Interstitial, IM, Model) integer :: iGas ! allocate (Interstitial%otspt (Model%ntracp1,2)) + allocate (Interstitial%otsptflag (Model%ntracp1)) ! Set up numbers of tracers for PBL, convection, etc: sets ! Interstitial%{nvdiff,mg3_as_mg2,nn,tracers_total,ntcwx,ntiwx,ntk,ntkev,otspt,nsamftrac,ncstrac,nscav} call interstitial_setup_tracers(Interstitial, Model) @@ -7303,7 +7494,9 @@ subroutine interstitial_create (Interstitial, IM, Model) end if ! ! Allocate arrays that are conditional on physics choices - if (Model%imp_physics == Model%imp_physics_gfdl .or. Model%imp_physics == Model%imp_physics_thompson) then + if (Model%imp_physics == Model%imp_physics_gfdl .or. Model%imp_physics == Model%imp_physics_thompson & + .or. Model%imp_physics == Model%imp_physics_nssl & + ) then allocate (Interstitial%graupelmp (IM)) allocate (Interstitial%icemp (IM)) allocate (Interstitial%rainmp (IM)) @@ -7429,6 +7622,7 @@ subroutine interstitial_setup_tracers(Interstitial, Model) Interstitial%ntkev = 0 Interstitial%tracers_total = 0 Interstitial%otspt(:,:) = .true. + Interstitial%otsptflag(:) = .true. Interstitial%nsamftrac = 0 Interstitial%ncstrac = 0 @@ -7442,6 +7636,21 @@ subroutine interstitial_setup_tracers(Interstitial, Model) Interstitial%nvdiff = 9 endif if (Model%satmedmf) Interstitial%nvdiff = Interstitial%nvdiff + 1 + elseif ( Model%imp_physics == Model%imp_physics_nssl ) then + if (Model%me == Model%master) write(0,*) 'nssl_settings1: nvdiff,ntrac = ', Interstitial%nvdiff, Model%ntrac + + IF ( Model%nssl_hail_on ) THEN + Interstitial%nvdiff = 16 ! Model%ntrac ! 17 + ELSE + Interstitial%nvdiff = 13 ! turn off hail q,N, and volume + ENDIF + ! write(*,*) 'NSSL: nvdiff, ntrac = ',Interstitial%nvdiff, Model%ntrac + if (Model%satmedmf) Interstitial%nvdiff = Interstitial%nvdiff + 1 + IF ( Model%nssl_ccn_on ) THEN + Interstitial%nvdiff = Interstitial%nvdiff + 1 + ENDIF + if (Model%me == Model%master) write(0,*) 'nssl_settings2: nvdiff,ntrac = ', Interstitial%nvdiff, Model%ntrac + elseif (Model%imp_physics == Model%imp_physics_wsm6) then Interstitial%nvdiff = Model%ntrac -3 if (Model%satmedmf) Interstitial%nvdiff = Interstitial%nvdiff + 1 @@ -7475,6 +7684,8 @@ subroutine interstitial_setup_tracers(Interstitial, Model) else Interstitial%ntiwx = 3 endif + elseif (Model%imp_physics == Model%imp_physics_nssl) then + Interstitial%ntiwx = 3 elseif (Model%imp_physics == Model%imp_physics_gfdl) then Interstitial%ntiwx = 3 ! F-A MP scheme @@ -7527,11 +7738,14 @@ subroutine interstitial_setup_tracers(Interstitial, Model) if (Model%cscnv .or. Model%satmedmf .or. Model%trans_trac ) then Interstitial%otspt(:,:) = .true. ! otspt is used only for cscnv Interstitial%otspt(1:3,:) = .false. ! this is for sp.hum, ice and liquid water + Interstitial%otsptflag(:) = .true. tracers = 2 do n=2,Model%ntrac if ( n /= Model%ntcw .and. n /= Model%ntiw .and. n /= Model%ntclamt .and. & n /= Model%ntrw .and. n /= Model%ntsw .and. n /= Model%ntrnc .and. & - n /= Model%ntsnc .and. n /= Model%ntgl .and. n /= Model%ntgnc) then + n /= Model%ntsnc .and. n /= Model%ntgl .and. n /= Model%ntgnc .and. & + n /= Model%nthl .and. n /= Model%nthnc .and. n /= Model%ntgv .and. & + n /= Model%nthv .and. n /= Model%ntccn .and. n /= Model%ntccna ) then tracers = tracers + 1 if (Model%ntke == n ) then Interstitial%otspt(tracers+1,1) = .false. @@ -7542,6 +7756,8 @@ subroutine interstitial_setup_tracers(Interstitial, Model) ! ntrw == n .or. ntsw == n .or. ntgl == n) & Interstitial%otspt(tracers+1,1) = .false. if (Interstitial%trans_aero .and. Model%ntchs == n) Interstitial%itc = tracers + else + Interstitial%otsptflag(n) = .false. endif enddo Interstitial%tracers_total = tracers - 2 @@ -7915,7 +8131,9 @@ subroutine interstitial_phys_reset (Interstitial, Model) end if ! ! Reset fields that are conditional on physics choices - if (Model%imp_physics == Model%imp_physics_gfdl .or. Model%imp_physics == Model%imp_physics_thompson) then + if (Model%imp_physics == Model%imp_physics_gfdl .or. Model%imp_physics == Model%imp_physics_thompson & + .or. Model%imp_physics == Model%imp_physics_nssl & + ) then Interstitial%graupelmp = clear_val Interstitial%icemp = clear_val Interstitial%rainmp = clear_val diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index 47b124b3b..6cc3f4c17 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -195,6 +195,14 @@ dimensions = (horizontal_loop_extent,vertical_layer_dimension) type = real kind = kind_phys +[qgrs(:,:,index_of_hail_mixing_ratio_in_tracer_concentration_array)] + standard_name = hail_mixing_ratio + long_name = ratio of mass of hail to mass of dry air plus vapor (without condensates) + units = kg kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + active = (index_of_hail_mixing_ratio_in_tracer_concentration_array > 0) [qgrs(:,:,index_of_ozone_mixing_ratio_in_tracer_concentration_array)] standard_name = ozone_mixing_ratio long_name = ozone mixing ratio @@ -254,6 +262,46 @@ dimensions = (horizontal_loop_extent,vertical_layer_dimension) type = real kind = kind_phys +[qgrs(:,:,index_of_mass_number_concentration_of_hail_in_tracer_concentration_array)] + standard_name = mass_number_concentration_of_hail_in_air + long_name = number concentration of hail + units = kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + active = (index_of_mass_number_concentration_of_hail_in_tracer_concentration_array > 0) +[qgrs(:,:,index_of_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array)] + standard_name = cloud_condensation_nuclei_number_concentration + long_name = number concentration of cloud condensation nuclei + units = kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + active = ( index_of_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array > 0 ) +[qgrs(:,:,index_of_activated_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array)] + standard_name = activated_cloud_condensation_nuclei_number_concentration + long_name = number concentration of activated cloud condensation nuclei + units = kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + active = ( index_of_activated_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array > 0 ) +[qgrs(:,:,index_of_graupel_volume_in_tracer_concentration_array)] + standard_name = graupel_volume + long_name = graupel particle volume + units = m3 kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + active = ( index_of_graupel_volume_in_tracer_concentration_array > 0 ) +[qgrs(:,:,index_of_hail_volume_in_tracer_concentration_array)] + standard_name = hail_volume + long_name = hail particle volume + units = m3 kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + active = ( index_of_hail_volume_in_tracer_concentration_array > 0 ) [qgrs(:,:,index_of_turbulent_kinetic_energy_in_tracer_concentration_array)] standard_name = turbulent_kinetic_energy long_name = turbulent kinetic energy @@ -383,6 +431,14 @@ dimensions = (horizontal_loop_extent,vertical_layer_dimension) type = real kind = kind_phys +[gq0(:,:,index_of_hail_mixing_ratio_in_tracer_concentration_array)] + standard_name = hail_mixing_ratio_of_new_state + long_name = ratio of mass of hail to mass of dry air plus vapor (without condensates) updated by physics + units = kg kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + active = ( index_of_hail_mixing_ratio_in_tracer_concentration_array > 0 ) [gq0(:,:,index_of_mass_weighted_rime_factor_in_tracer_concentration_array)] standard_name = mass_weighted_rime_factor_of_new_state long_name = mass weighted rime factor updated by physics @@ -442,6 +498,46 @@ dimensions = (horizontal_loop_extent,vertical_layer_dimension) type = real kind = kind_phys +[gq0(:,:,index_of_mass_number_concentration_of_hail_in_tracer_concentration_array)] + standard_name = mass_number_concentration_of_hail_of_new_state + long_name = number concentration of hail updated by physics + units = kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + active = ( index_of_mass_number_concentration_of_hail_in_tracer_concentration_array > 0 ) +[gq0(:,:,index_of_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array)] + standard_name = cloud_condensation_nuclei_number_concentration_of_new_state + long_name = number concentration of cloud condensation nuclei updated by physics + units = kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + active = ( index_of_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array > 0 ) +[gq0(:,:,index_of_activated_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array)] + standard_name = activated_cloud_condensation_nuclei_number_concentration_of_new_state + long_name = number concentration of cloud condensation nuclei updated by physics + units = kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + active = ( index_of_activated_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array > 0 ) +[gq0(:,:,index_of_graupel_volume_in_tracer_concentration_array)] + standard_name = graupel_volume_of_new_state + long_name = graupel volume updated by physics + units = m3 kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + active = ( index_of_graupel_volume_in_tracer_concentration_array > 0 ) +[gq0(:,:,index_of_hail_volume_in_tracer_concentration_array)] + standard_name = hail_volume_of_new_state + long_name = hail volume updated by physics + units = m3 kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + active = ( index_of_hail_volume_in_tracer_concentration_array > 0 ) [gq0(:,:,index_of_cloud_area_fraction_in_atmosphere_layer_in_tracer_concentration_array)] standard_name = cloud_area_fraction_in_atmosphere_layer_of_new_state long_name = cloud fraction updated by physics @@ -3080,6 +3176,18 @@ units = flag dimensions = () type = integer +[imp_physics_nssl] + standard_name = identifier_for_nssl_microphysics_scheme + long_name = choice of NSSL 2-moment microphysics scheme + units = flag + dimensions = () + type = integer +[imp_physics_nssl2mccn] + standard_name = identifier_for_nssl2mccn_microphysics_scheme + long_name = choice of NSSL 2-moment microphysics scheme with CCN + units = flag + dimensions = () + type = integer [iovr_exp] standard_name = flag_for_exponential_cloud_overlap_method long_name = choice of exponential cloud overlap method @@ -3312,6 +3420,45 @@ dimensions = () type = character kind = len=16 +[nssl_cccn] + standard_name = nssl_ccn_concentration + long_name = CCN concentration + units = m-3 + dimensions = () + type = real + kind = kind_phys +[nssl_alphah] + standard_name = nssl_alpha_graupel + long_name = graupel PSD shape parameter in NSSL micro + units = none + dimensions = () + type = real + kind = kind_phys +[nssl_alphahl] + standard_name = nssl_alpha_hail + long_name = hail PSD shape parameter in NSSL micro + units = none + dimensions = () + type = real + kind = kind_phys +[nssl_ccn_on] + standard_name = nssl_ccn_on + long_name = CCN activation flag in NSSL micro + units = none + dimensions = () + type = logical +[nssl_hail_on] + standard_name = nssl_hail_on + long_name = hail activation flag in NSSL micro + units = none + dimensions = () + type = logical +[nssl_invertccn] + standard_name = nssl_invertccn + long_name = flag to invert CCN in NSSL micro + units = none + dimensions = () + type = logical [tf] standard_name = all_ice_cloud_threshold_temperature long_name = threshold temperature below which all cloud is ice @@ -4748,6 +4895,12 @@ units = index dimensions = () type = integer +[nthl] + standard_name = index_of_hail_mixing_ratio_in_tracer_concentration_array + long_name = tracer index for hail + units = index + dimensions = () + type = integer [ntclamt] standard_name = index_of_cloud_area_fraction_in_atmosphere_layer_in_tracer_concentration_array long_name = tracer index for cloud amount integer @@ -4784,6 +4937,36 @@ units = index dimensions = () type = integer +[nthnc] + standard_name = index_of_mass_number_concentration_of_hail_in_tracer_concentration_array + long_name = tracer index for hail number concentration + units = index + dimensions = () + type = integer +[ntccn] + standard_name = index_of_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array + long_name = tracer index for cloud condensation nuclei number concentration + units = index + dimensions = () + type = integer +[ntccna] + standard_name = index_of_activated_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array + long_name = tracer index for activated cloud condensation nuclei number concentration + units = index + dimensions = () + type = integer +[ntgv] + standard_name = index_of_graupel_volume_in_tracer_concentration_array + long_name = tracer index for graupel particle volume + units = index + dimensions = () + type = integer +[nthv] + standard_name = index_of_hail_volume_in_tracer_concentration_array + long_name = tracer index for hail particle volume + units = index + dimensions = () + type = integer [ntke] standard_name = index_of_turbulent_kinetic_energy_in_tracer_concentration_array long_name = tracer index for turbulent kinetic energy @@ -8059,6 +8242,14 @@ type = real kind = kind_phys active = (index_of_mass_number_concentration_of_nonhygroscopic_ice_nucleating_aerosols_in_tracer_concentration_array > 0) +[dqdt(:,:,index_of_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array)] + standard_name = tendency_of_cloud_condensation_nuclei_number_concentration_due_to_model_physics + long_name = number concentration of cloud condensation nuclei tendency due to model physics + units = kg-1 s-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + active = ( index_of_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array > 0 ) [dqdt(:,:,index_of_rain_mixing_ratio_in_tracer_concentration_array)] standard_name = process_split_cumulative_tendency_of_rain_mixing_ratio long_name = ratio of mass of rain water tendency to mass of dry air plus vapor (without condensates) due to model physics @@ -8660,7 +8851,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme) + active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme) [gwdcu] standard_name = tendency_of_x_wind_due_to_convective_gravity_wave_drag long_name = zonal wind tendency due to convective gravity wave drag @@ -8752,7 +8943,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme) + active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme) [dry] standard_name = flag_nonzero_land_surface_fraction long_name = flag indicating presence of some land surface area fraction @@ -9090,6 +9281,12 @@ units = flag dimensions = (number_of_tracers_plus_one,2) type = logical +[otsptflag] + standard_name = flag_convective_tracer_transport_interstitial + long_name = flag for interstitial tracer transport + units = flag + dimensions = (number_of_tracers_plus_one) + type = logical [oz_coeffp5] standard_name = number_of_coefficients_in_ozone_forcing_data_plus_five long_name = number of coefficients in ozone forcing data plus five @@ -9263,7 +9460,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme) + active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme) [rainp] standard_name = tendency_of_rain_water_mixing_ratio_due_to_microphysics long_name = tendency of rain water mixing ratio due to microphysics @@ -9598,7 +9795,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme) + active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme) [snowmt] standard_name = surface_snow_melt long_name = snow melt during timestep diff --git a/ccpp/suites/suite_FV3_RRFS_v1nssl.xml b/ccpp/suites/suite_FV3_RRFS_v1nssl.xml new file mode 100644 index 000000000..3327edd81 --- /dev/null +++ b/ccpp/suites/suite_FV3_RRFS_v1nssl.xml @@ -0,0 +1,82 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + sgscloud_radpre + GFS_rrtmg_pre + GFS_radiation_surface + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + sgscloud_radpost + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + noahmpdrv + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + mynnedmf_wrapper + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + GFS_GWD_generic_post + GFS_suite_stateout_update + ozphys_2015 + h2ophys + get_phi_fv3 + + + GFS_MP_generic_pre + mp_nssl + GFS_MP_generic_post + maximum_hourly_diagnostics + phys_tend + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_RRFS_v1nssl_lsmnoah.xml b/ccpp/suites/suite_FV3_RRFS_v1nssl_lsmnoah.xml new file mode 100644 index 000000000..35df20d00 --- /dev/null +++ b/ccpp/suites/suite_FV3_RRFS_v1nssl_lsmnoah.xml @@ -0,0 +1,82 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + sgscloud_radpre + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + sgscloud_radpost + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + mynnedmf_wrapper + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + GFS_GWD_generic_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + get_phi_fv3 + + + GFS_MP_generic_pre + mp_nssl + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + From 2a3a1565baf4690a4d752faf15d35631eb1330fb Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Tue, 19 Oct 2021 17:31:13 -0500 Subject: [PATCH 02/57] Switched atmos and ccpp modules to NSSL versions --- .gitmodules | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitmodules b/.gitmodules index a54f243ae..3dc81ab74 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,12 +1,12 @@ [submodule "atmos_cubed_sphere"] path = atmos_cubed_sphere - url = https://github.com/NOAA-GFDL/GFDL_atmos_cubed_sphere - branch = dev/emc + url = https://github.com/MicroTed/GFDL_atmos_cubed_sphere.git + branch = feature/nssl-base [submodule "ccpp/framework"] path = ccpp/framework url = https://github.com/NCAR/ccpp-framework branch = main [submodule "ccpp/physics"] path = ccpp/physics - url = https://github.com/NCAR/ccpp-physics - branch = main + url = https://github.com/MicroTed/ccpp-physics + branch = feature/nsslmicro From 5564af56948bea1a3798d208a63960576b6702cd Mon Sep 17 00:00:00 2001 From: "larissa.reames@noaa.gov" Date: Fri, 22 Oct 2021 17:22:44 +0000 Subject: [PATCH 03/57] Update to my atmos_cubed_sphere --- atmos_cubed_sphere | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index ab026b794..4b8e162d0 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit ab026b79497ee00530ff3eb6b59dd9b9346e8e7d +Subproject commit 4b8e162d063247c02cb3debafdce5ddfc567da98 From 9b0c2284a59950d16d0b291234edc66695b2b8a6 Mon Sep 17 00:00:00 2001 From: "larissa.reames@noaa.gov" Date: Fri, 22 Oct 2021 17:35:18 +0000 Subject: [PATCH 04/57] Update submodule --- .gitmodules | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index a54f243ae..c66b73a64 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,7 +1,7 @@ [submodule "atmos_cubed_sphere"] path = atmos_cubed_sphere - url = https://github.com/NOAA-GFDL/GFDL_atmos_cubed_sphere - branch = dev/emc + url = https://github.com/LarissaReames-NOAA/GFDL_atmos_cubed_sphere + branch = feauture/ideal-new [submodule "ccpp/framework"] path = ccpp/framework url = https://github.com/NCAR/ccpp-framework From 99c9579d553c6d6d9b7e12c22ba2911f5dcd5811 Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Thu, 28 Oct 2021 16:38:53 +0000 Subject: [PATCH 05/57] Bug fix for allocating/loading array2d --- io/FV3GFS_io.F90 | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/io/FV3GFS_io.F90 b/io/FV3GFS_io.F90 index 7d5a84f4e..4ab08d161 100644 --- a/io/FV3GFS_io.F90 +++ b/io/FV3GFS_io.F90 @@ -186,7 +186,8 @@ subroutine FV3GFS_GFS_checksum (Model, GFS_Data, Atm_block) nsfcprop2d = 107 endif - allocate (temp2d(isc:iec,jsc:jec,nsfcprop2d+Model%ntot3d+Model%nctp)) +! allocate (temp2d(isc:iec,jsc:jec,nsfcprop2d+Model%ntot3d+Model%nctp)) + allocate (temp2d(isc:iec,jsc:jec,nsfcprop2d+Model%ntot2d+Model%nctp)) allocate (temp3d(isc:iec,jsc:jec,1:lev,14+Model%ntot3d+2*ntr)) allocate (temp3dlevsp1(isc:iec,jsc:jec,1:lev+1,3)) @@ -320,8 +321,8 @@ subroutine FV3GFS_GFS_checksum (Model, GFS_Data, Atm_block) temp2d(i,j,idx_opt+2) = GFS_Data(nb)%Sfcprop%albdirnir_ice(ix) temp2d(i,j,idx_opt+3) = GFS_Data(nb)%Sfcprop%albdifvis_ice(ix) temp2d(i,j,idx_opt+4) = GFS_Data(nb)%Sfcprop%albdifnir_ice(ix) + idx_opt = idx_opt + 5 endif - idx_opt = idx_opt + 5 if (Model%lsm == Model%lsm_noahmp) then temp2d(i,j,idx_opt) = GFS_Data(nb)%Sfcprop%snowxy(ix) @@ -2764,7 +2765,7 @@ subroutine fv3gfs_diag_output(time, diag, atm_block, nx, ny, levs, ntcw, ntoz, & !--- skipping other 3D variables with the following else statement !--- if(mpp_pe()==mpp_root_pe())print *,'in,fv3gfs_io. 3D fields, idx=',idx,'varname=',trim(diag(idx)%name), & - 'lcnvfac=',lcnvfac, 'levo=',levo,'nx=',nx,'ny=',ny + ' lcnvfac=',lcnvfac, ' levo=',levo,' nx=',nx,' ny=',ny do k=1, levo do j = 1, ny jj = j + jsc -1 From c48588155f98ddf4cd2766337d55da6e60e3c373 Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Fri, 29 Oct 2021 16:50:03 +0000 Subject: [PATCH 06/57] Made setting of otsptflag more logical --- ccpp/data/GFS_typedefs.F90 | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index c73d45f01..3bdacee50 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -7612,6 +7612,7 @@ subroutine interstitial_setup_tracers(Interstitial, Model) class(GFS_interstitial_type) :: Interstitial type(GFS_control_type), intent(in) :: Model integer :: n, tracers + logical :: ltest !first, initialize the values (in case the values don't get initialized within if statements below) Interstitial%nvdiff = Model%ntrac @@ -7741,11 +7742,13 @@ subroutine interstitial_setup_tracers(Interstitial, Model) Interstitial%otsptflag(:) = .true. tracers = 2 do n=2,Model%ntrac - if ( n /= Model%ntcw .and. n /= Model%ntiw .and. n /= Model%ntclamt .and. & + ltest = ( n /= Model%ntcw .and. n /= Model%ntiw .and. n /= Model%ntclamt .and. & n /= Model%ntrw .and. n /= Model%ntsw .and. n /= Model%ntrnc .and. & n /= Model%ntsnc .and. n /= Model%ntgl .and. n /= Model%ntgnc .and. & n /= Model%nthl .and. n /= Model%nthnc .and. n /= Model%ntgv .and. & - n /= Model%nthv .and. n /= Model%ntccn .and. n /= Model%ntccna ) then + n /= Model%nthv .and. n /= Model%ntccn .and. n /= Model%ntccna ) + Interstitial%otsptflag(n) = ltest + if ( ltest ) then tracers = tracers + 1 if (Model%ntke == n ) then Interstitial%otspt(tracers+1,1) = .false. @@ -7756,8 +7759,6 @@ subroutine interstitial_setup_tracers(Interstitial, Model) ! ntrw == n .or. ntsw == n .or. ntgl == n) & Interstitial%otspt(tracers+1,1) = .false. if (Interstitial%trans_aero .and. Model%ntchs == n) Interstitial%itc = tracers - else - Interstitial%otsptflag(n) = .false. endif enddo Interstitial%tracers_total = tracers - 2 From 7655fc5d6792fe67fe730992df1fe65c16eeb2e2 Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Tue, 9 Nov 2021 22:07:34 -0600 Subject: [PATCH 07/57] Fixed size and logic of otsptflag --- ccpp/data/GFS_typedefs.F90 | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index c73d45f01..86008b820 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -4112,7 +4112,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- GFDL MP parameters Model%lgfdlmprad = lgfdlmprad -!--- Thompson,GFDL MP parameter +!--- Thompson,GFDL,NSSL MP parameter Model%lrefres = lrefres !--- land/surface model parameters @@ -5752,6 +5752,7 @@ subroutine control_print(Model) print *, ' nssl_alphahl - hail shape parameter : ', Model%nssl_alphahl print *, ' nssl_hail_on - hail activation flag : ', Model%nssl_hail_on print *, ' lradar - radar refl. flag : ', Model%lradar + print *, ' lrefres : ', Model%lrefres endif if (Model%imp_physics == Model%imp_physics_mg) then print *, ' M-G microphysical parameters' @@ -7118,7 +7119,7 @@ subroutine interstitial_create (Interstitial, IM, Model) integer :: iGas ! allocate (Interstitial%otspt (Model%ntracp1,2)) - allocate (Interstitial%otsptflag (Model%ntracp1)) + allocate (Interstitial%otsptflag (Model%ntrac)) ! Set up numbers of tracers for PBL, convection, etc: sets ! Interstitial%{nvdiff,mg3_as_mg2,nn,tracers_total,ntcwx,ntiwx,ntk,ntkev,otspt,nsamftrac,ncstrac,nscav} call interstitial_setup_tracers(Interstitial, Model) @@ -7612,6 +7613,7 @@ subroutine interstitial_setup_tracers(Interstitial, Model) class(GFS_interstitial_type) :: Interstitial type(GFS_control_type), intent(in) :: Model integer :: n, tracers + logical :: ltest !first, initialize the values (in case the values don't get initialized within if statements below) Interstitial%nvdiff = Model%ntrac @@ -7741,11 +7743,13 @@ subroutine interstitial_setup_tracers(Interstitial, Model) Interstitial%otsptflag(:) = .true. tracers = 2 do n=2,Model%ntrac - if ( n /= Model%ntcw .and. n /= Model%ntiw .and. n /= Model%ntclamt .and. & + ltest = ( n /= Model%ntcw .and. n /= Model%ntiw .and. n /= Model%ntclamt .and. & n /= Model%ntrw .and. n /= Model%ntsw .and. n /= Model%ntrnc .and. & n /= Model%ntsnc .and. n /= Model%ntgl .and. n /= Model%ntgnc .and. & n /= Model%nthl .and. n /= Model%nthnc .and. n /= Model%ntgv .and. & - n /= Model%nthv .and. n /= Model%ntccn .and. n /= Model%ntccna ) then + n /= Model%nthv .and. n /= Model%ntccn .and. n /= Model%ntccna ) + Interstitial%otsptflag(n) = ltest + if ( ltest ) THEN tracers = tracers + 1 if (Model%ntke == n ) then Interstitial%otspt(tracers+1,1) = .false. @@ -7756,8 +7760,6 @@ subroutine interstitial_setup_tracers(Interstitial, Model) ! ntrw == n .or. ntsw == n .or. ntgl == n) & Interstitial%otspt(tracers+1,1) = .false. if (Interstitial%trans_aero .and. Model%ntchs == n) Interstitial%itc = tracers - else - Interstitial%otsptflag(n) = .false. endif enddo Interstitial%tracers_total = tracers - 2 From 81d33d9bbf1e192df76554367f48d2752c06fc0e Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Wed, 19 Jan 2022 18:34:03 -0600 Subject: [PATCH 08/57] Revert URL to default in .gitmodules --- .gitmodules | 4 ++-- atmos_cubed_sphere | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index 02235597f..6bb663df1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,7 +1,7 @@ [submodule "atmos_cubed_sphere"] path = atmos_cubed_sphere - url = https://github.com/MicroTed/GFDL_atmos_cubed_sphere.git - branch = feature/nssl-base + url = https://github.com/NOAA-GFDL/GFDL_atmos_cubed_sphere + branch = dev/emc [submodule "ccpp/framework"] path = ccpp/framework url = https://github.com/NCAR/ccpp-framework diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index fa86482e4..a5adfc51b 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit fa86482e48f1d5b594acb369e68b8488de84dc66 +Subproject commit a5adfc51b0dd9c9e60f84f37d9ed214e0db245d9 From 40a3c66dd850e0289c7c618075b9d7ee00f8bcd0 Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Wed, 19 Jan 2022 19:53:39 -0600 Subject: [PATCH 09/57] Removed commented line and added whitespace --- io/FV3GFS_io.F90 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/io/FV3GFS_io.F90 b/io/FV3GFS_io.F90 index 3f0ffabef..b38084585 100644 --- a/io/FV3GFS_io.F90 +++ b/io/FV3GFS_io.F90 @@ -196,7 +196,6 @@ subroutine FV3GFS_GFS_checksum (Model, GFS_Data, Atm_block) nsfcprop2d = nsfcprop2d + 16 endif -! allocate (temp2d(isc:iec,jsc:jec,nsfcprop2d+Model%ntot3d+Model%nctp)) allocate (temp2d(isc:iec,jsc:jec,nsfcprop2d+Model%ntot2d+Model%nctp)) allocate (temp3d(isc:iec,jsc:jec,1:lev,14+Model%ntot3d+2*ntr)) allocate (temp3dlevsp1(isc:iec,jsc:jec,1:lev+1,3)) @@ -2827,7 +2826,7 @@ subroutine fv3gfs_diag_output(time, diag, atm_block, nx, ny, levs, ntcw, ntoz, & !--- skipping other 3D variables with the following else statement !--- ! if(mpp_pe()==mpp_root_pe())print *,'in,fv3gfs_io. 3D fields, idx=',idx,'varname=',trim(diag(idx)%name), & -! 'lcnvfac=',lcnvfac, ' levo=',levo,' nx=',nx,' ny=',ny +! 'lcnvfac=',lcnvfac, 'levo=',levo,'nx=',nx,'ny=',ny do k=1, levo do j = 1, ny jj = j + jsc -1 From 3d721e813f4945bedfa9a5a1a71e6ebf289f38b2 Mon Sep 17 00:00:00 2001 From: Larissa Reames Date: Mon, 15 Nov 2021 18:15:22 +0000 Subject: [PATCH 10/57] Update to current version of atmos_cubed_sphere --- atmos_cubed_sphere | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index 4b8e162d0..701bcd548 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 4b8e162d063247c02cb3debafdce5ddfc567da98 +Subproject commit 701bcd5483410ba6c91624895534d64927a26cfd From 2dfb094247e4df53cf0be63f51f869db92fb4b19 Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Thu, 27 Jan 2022 11:44:01 -0600 Subject: [PATCH 11/57] Update GFS_diagnostics.F90 and submodules --- atmos_cubed_sphere | 2 +- ccpp/driver/GFS_diagnostics.F90 | 3 ++- ccpp/physics | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index a5adfc51b..84ff530bf 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit a5adfc51b0dd9c9e60f84f37d9ed214e0db245d9 +Subproject commit 84ff530bf0cf7baad994b2582c41ccbf1493f311 diff --git a/ccpp/driver/GFS_diagnostics.F90 b/ccpp/driver/GFS_diagnostics.F90 index 85866da18..dc469d954 100644 --- a/ccpp/driver/GFS_diagnostics.F90 +++ b/ccpp/driver/GFS_diagnostics.F90 @@ -3496,7 +3496,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop enddo ! Cloud effective radii from Microphysics - if (Model%imp_physics == Model%imp_physics_thompson .or. Model%imp_physics == Model%imp_physics_fer_hires) then + if (Model%imp_physics == Model%imp_physics_thompson .or. Model%imp_physics == Model%imp_physics_fer_hires .or. & + Model%imp_physics == Model%imp_physics_nssl ) then idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'cleffr' diff --git a/ccpp/physics b/ccpp/physics index 01f55a245..86592d1ea 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 01f55a2451eebaad55b6239fda7f309de109677f +Subproject commit 86592d1ea927ab42470ecc66e9ba47858d9d7d2c From 79019834263cbe31ad9a4ea05beeb2f68af5a5b1 Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Fri, 28 Jan 2022 17:06:54 -0600 Subject: [PATCH 12/57] Add suite file --- atmos_cubed_sphere | 2 +- .../suite_FV3_GFS_v15_nssl_mynn_lam3km.xml | 79 +++++++++++++++++++ 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 ccpp/suites/suite_FV3_GFS_v15_nssl_mynn_lam3km.xml diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index 84ff530bf..5fb5512dd 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 84ff530bf0cf7baad994b2582c41ccbf1493f311 +Subproject commit 5fb5512dd9a48f030fab357865b25228bf340763 diff --git a/ccpp/suites/suite_FV3_GFS_v15_nssl_mynn_lam3km.xml b/ccpp/suites/suite_FV3_GFS_v15_nssl_mynn_lam3km.xml new file mode 100644 index 000000000..acb0a66ee --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_v15_nssl_mynn_lam3km.xml @@ -0,0 +1,79 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + sgscloud_radpre + GFS_rrtmg_pre + GFS_radiation_surface + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + sgscloud_radpost + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + mynnsfc_wrapper + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + mynnedmf_wrapper + GFS_GWD_generic_pre + cires_ugwp_post + GFS_GWD_generic_post + GFS_suite_stateout_update + ozphys_2015 + h2ophys + get_phi_fv3 + GFS_MP_generic_pre + mp_nssl + GFS_MP_generic_post + maximum_hourly_diagnostics + phys_tend + + + + + GFS_stochastics + + + + From 59c2453a0d072c3407dd0767914efa7c9e019f4b Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Fri, 28 Jan 2022 19:14:43 -0600 Subject: [PATCH 13/57] Update .gitmodules --- .gitmodules | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitmodules b/.gitmodules index 6bb663df1..2f7c30529 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,15 +1,15 @@ [submodule "atmos_cubed_sphere"] path = atmos_cubed_sphere - url = https://github.com/NOAA-GFDL/GFDL_atmos_cubed_sphere - branch = dev/emc + url = https://github.com/MicroTed/GFDL_atmos_cubed_sphere + branch = dev/emc-nsslmicro [submodule "ccpp/framework"] path = ccpp/framework url = https://github.com/NCAR/ccpp-framework branch = main [submodule "ccpp/physics"] path = ccpp/physics - url = https://github.com/NCAR/ccpp-physics - branch = main + url = https://github.com/MicroTed/ccpp-physics + branch = feature/nsslmicro [submodule "upp"] path = upp url = https://github.com/NOAA-EMC/UPP From 23287bd2a51a7d379404f0b91507c9a4886245fe Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Mon, 31 Jan 2022 16:03:30 -0700 Subject: [PATCH 14/57] change dimensions of flag_convective_tracer_transport_interstitial to match allocation/use --- ccpp/data/GFS_typedefs.meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index 7d3c29ea9..8e72ad5d0 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -9380,7 +9380,7 @@ standard_name = flag_convective_tracer_transport_interstitial long_name = flag for interstitial tracer transport units = flag - dimensions = (number_of_tracers_plus_one) + dimensions = (number_of_tracers) type = logical [oz_coeffp5] standard_name = number_of_coefficients_in_ozone_forcing_data_plus_five From bb1207fc09922954df62c11497230074f51c5dea Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Tue, 1 Feb 2022 18:12:05 -0600 Subject: [PATCH 15/57] ccpp/physics update --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index 86592d1ea..a51c4a205 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 86592d1ea927ab42470ecc66e9ba47858d9d7d2c +Subproject commit a51c4a20526233089e2ff5bf3318d3f43c450e42 From 6613a8ca4def13af0ef31aeaeff58f27cc13a65c Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Fri, 11 Feb 2022 19:01:16 +0000 Subject: [PATCH 16/57] Update submodule --- atmos_cubed_sphere | 2 +- ccpp/physics | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index 5fb5512dd..f3d071f35 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 5fb5512dd9a48f030fab357865b25228bf340763 +Subproject commit f3d071f35020f23eb706fe0c8760117e0935aab6 diff --git a/ccpp/physics b/ccpp/physics index a51c4a205..1cd31f921 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit a51c4a20526233089e2ff5bf3318d3f43c450e42 +Subproject commit 1cd31f921668dce4ff6406176532dabf465e04c5 From 381f1c3204d64a9708636ddea0096d4a649ff342 Mon Sep 17 00:00:00 2001 From: Larissa Reames Date: Mon, 14 Feb 2022 16:47:40 +0000 Subject: [PATCH 17/57] Update atmos_cubed_sphere --- atmos_cubed_sphere | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index 701bcd548..1fe57170c 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 701bcd5483410ba6c91624895534d64927a26cfd +Subproject commit 1fe57170ceb7cf2aedcce1e29b41c1c9668445d9 From dd3d27c707f3d7ff2262536e62506e719ab9978b Mon Sep 17 00:00:00 2001 From: Larissa Reames Date: Mon, 14 Feb 2022 17:37:23 +0000 Subject: [PATCH 18/57] Switched to Ted's NSSL branch of ccpp --- .gitmodules | 4 ++-- ccpp/physics | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index c66b73a64..a1c837682 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,5 +8,5 @@ branch = main [submodule "ccpp/physics"] path = ccpp/physics - url = https://github.com/NCAR/ccpp-physics - branch = main + url = https://github.com/MicroTed/ccpp-physics.git + branch = feature/nsslmicro diff --git a/ccpp/physics b/ccpp/physics index 3423a1370..2c02bc580 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 3423a13700f9b8d4a7329ac155f3923a45c392ec +Subproject commit 2c02bc58075828c1d72c5da66f7cdedccc2f38cb From 574411a855c5da4c2958b4abccd25710b3444004 Mon Sep 17 00:00:00 2001 From: Larissa Reames Date: Mon, 14 Feb 2022 17:52:24 +0000 Subject: [PATCH 19/57] Point to correct atmos_cubed_sphere --- .gitmodules | 2 +- atmos_cubed_sphere | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index a1c837682..f93e37ec4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "atmos_cubed_sphere"] path = atmos_cubed_sphere - url = https://github.com/LarissaReames-NOAA/GFDL_atmos_cubed_sphere + url = https://github.com/LarissaReames-NOAA/GFDL_atmos_cubed_sphere.git branch = feauture/ideal-new [submodule "ccpp/framework"] path = ccpp/framework diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index 1fe57170c..9069d7cf2 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 1fe57170ceb7cf2aedcce1e29b41c1c9668445d9 +Subproject commit 9069d7cf2c4c2e48b47a85e8e4a21ff2dcf99efa From aaea304311dc3d8211f74cc5c0ca6f5f60314732 Mon Sep 17 00:00:00 2001 From: "larissa.reames@noaa.gov" Date: Mon, 14 Feb 2022 21:24:30 +0000 Subject: [PATCH 20/57] Minor text fix to gitmodules --- .gitmodules | 6 +++--- atmos_cubed_sphere | 2 +- upp | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.gitmodules b/.gitmodules index c0155b51f..95f2cf0ed 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,7 +1,7 @@ [submodule "atmos_cubed_sphere"] path = atmos_cubed_sphere - url = https://github.com/LarissaReames-NOAA/GFDL_atmos_cubed_sphere.git - branch = feauture/ideal-new + url = https://github.com/LarissaReames-NOAA/GFDL_atmos_cubed_sphere.git + branch = feature/ideal-new [submodule "ccpp/framework"] path = ccpp/framework url = https://github.com/NCAR/ccpp-framework @@ -13,4 +13,4 @@ [submodule "upp"] path = upp url = https://github.com/NOAA-EMC/UPP - commit = 0dc3c0c + branch = develop diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index 7813e2347..9069d7cf2 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 7813e2347a08c29903431e3117d48657d4b7d2e4 +Subproject commit 9069d7cf2c4c2e48b47a85e8e4a21ff2dcf99efa diff --git a/upp b/upp index 0dc3c0c1d..583f76bee 160000 --- a/upp +++ b/upp @@ -1 +1 @@ -Subproject commit 0dc3c0c1dbdcdc5025dff0c6b06b16aa2a7ddda9 +Subproject commit 583f76bee537a028b48b4555d19596df9be2a1ea From 157b1af2d3d9af1160b66b2fdc140b94177dcfc2 Mon Sep 17 00:00:00 2001 From: "larissa.reames@noaa.gov" Date: Wed, 16 Feb 2022 22:05:51 +0000 Subject: [PATCH 21/57] Updated atmos_cubed_sphere with new idealized sounding capabilities. Included ccpp suite that turns off pbl and surface layer schemes for better idealized testing. --- atmos_cubed_sphere | 2 +- .../suites/suite_FV3_RRFS_v1nssl_idealpbl.xml | 88 +++++++++++++++++++ 2 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 ccpp/suites/suite_FV3_RRFS_v1nssl_idealpbl.xml diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index 9069d7cf2..25334484a 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 9069d7cf2c4c2e48b47a85e8e4a21ff2dcf99efa +Subproject commit 25334484a5b37b53c65765552af26ba46d82d5d7 diff --git a/ccpp/suites/suite_FV3_RRFS_v1nssl_idealpbl.xml b/ccpp/suites/suite_FV3_RRFS_v1nssl_idealpbl.xml new file mode 100644 index 000000000..45f9223fc --- /dev/null +++ b/ccpp/suites/suite_FV3_RRFS_v1nssl_idealpbl.xml @@ -0,0 +1,88 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + sgscloud_radpre + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw_post + rrtmg_lw_pre + sgscloud_radpost + rrtmg_lw_post + GFS_rrtmg_post + + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + noahmpdrv + sfc_sice + GFS_surface_loop_control_part2 + + + + + mynnedmf_wrapper + rayleigh_damp + GFS_suite_stateout_update + + get_phi_fv3 + + + GFS_MP_generic_pre + mp_nssl + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + From 5cecf83ce7ea6785f003f792ab20168feb02389d Mon Sep 17 00:00:00 2001 From: "larissa.reames@noaa.gov" Date: Thu, 17 Feb 2022 17:45:54 +0000 Subject: [PATCH 22/57] Update atmos_cubed_sphere --- atmos_cubed_sphere | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index 25334484a..0f0f0f88e 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 25334484a5b37b53c65765552af26ba46d82d5d7 +Subproject commit 0f0f0f88e7b86fe5e991466ddbb652f8c320de40 From f85fad8543967a2397ca0a8ff5e15adef800b2ef Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Mon, 10 Apr 2023 13:20:25 -0500 Subject: [PATCH 23/57] Add flags and code for 3-moment rain/graupel/hail in NSSL microphysics scheme --- ccpp/data/GFS_typedefs.F90 | 35 ++++++++++++++++-- ccpp/data/GFS_typedefs.meta | 72 +++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+), 2 deletions(-) diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 1b35c8e5c..155a5efcc 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -927,6 +927,7 @@ module GFS_typedefs logical :: nssl_hail_on !< NSSL flag to activate the hail category logical :: nssl_ccn_on !< NSSL flag to activate the CCN category logical :: nssl_invertccn !< NSSL flag to treat CCN as activated (true) or unactivated (false) + logical :: nssl_3moment !< NSSL flag to turn on 3-moment for rain/graupel/hail !--- Thompson's microphysical parameters logical :: ltaerosol !< flag for aerosol version @@ -1357,6 +1358,9 @@ module GFS_typedefs integer :: ntccna !< tracer index for activated CCN integer :: ntgv !< tracer index for graupel particle volume integer :: nthv !< tracer index for hail particle volume + integer :: ntrz !< tracer index for rain reflectivity + integer :: ntgz !< tracer index for graupel reflectivity + integer :: nthz !< tracer index for hail reflectivity integer :: ntke !< tracer index for kinetic energy integer :: ntsigma !< tracer index for updraft area fraction integer :: nto !< tracer index for oxygen ion @@ -3243,6 +3247,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & logical :: nssl_hail_on = .false. !< NSSL flag to activate the hail category logical :: nssl_ccn_on = .true. !< NSSL flag to activate the CCN category logical :: nssl_invertccn = .true. !< NSSL flag to treat CCN as activated (true) or unactivated (false) + logical :: nssl_3moment = .false. !< NSSL flag to turn on 3-moment for rain/graupel/hail !--- Thompson microphysical parameters logical :: ltaerosol = .false. !< flag for aerosol version @@ -3685,7 +3690,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & sedi_semi, decfl, & nssl_cccn, nssl_alphah, nssl_alphahl, & nssl_alphar, nssl_ehw0_in, nssl_ehlw0_in, & - nssl_invertccn, nssl_hail_on, nssl_ccn_on, & + nssl_invertccn, nssl_hail_on, nssl_ccn_on, nssl_3moment, & !--- max hourly avg_max_length, & !--- land/surface model control @@ -4279,6 +4284,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%nssl_hail_on = nssl_hail_on Model%nssl_ccn_on = nssl_ccn_on Model%nssl_invertccn = nssl_invertccn + Model%nssl_3moment = nssl_3moment !--- Thompson MP parameters Model%ltaerosol = ltaerosol @@ -4762,6 +4768,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%ntccna = get_tracer_index(Model%tracer_names, 'ccna_nc', Model%me, Model%master, Model%debug) Model%ntgv = get_tracer_index(Model%tracer_names, 'graupel_vol',Model%me, Model%master, Model%debug) Model%nthv = get_tracer_index(Model%tracer_names, 'hail_vol', Model%me, Model%master, Model%debug) + Model%ntrz = get_tracer_index(Model%tracer_names, 'rain_ref', Model%me, Model%master, Model%debug) + Model%ntgz = get_tracer_index(Model%tracer_names, 'graupel_ref',Model%me, Model%master, Model%debug) + Model%nthz = get_tracer_index(Model%tracer_names, 'hail_ref', Model%me, Model%master, Model%debug) Model%ntke = get_tracer_index(Model%tracer_names, 'sgs_tke', Model%me, Model%master, Model%debug) Model%ntsigma = get_tracer_index(Model%tracer_names, 'sigmab', Model%me, Model%master, Model%debug) Model%nqrimef = get_tracer_index(Model%tracer_names, 'q_rimef', Model%me, Model%master, Model%debug) @@ -4931,6 +4940,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & call label_dtend_tracer(Model,100+Model%ntccn,'ccn_nc','CCN number concentration','kg-1 s-1') call label_dtend_tracer(Model,100+Model%ntgv,'graupel_vol','graupel volume','m3 kg-1 s-1') call label_dtend_tracer(Model,100+Model%nthv,'hail_vol','hail volume','m3 kg-1 s-1') + call label_dtend_tracer(Model,100+Model%ntrz,'rain_ref','rain reflectivity','m3 kg-1 s-1') + call label_dtend_tracer(Model,100+Model%ntgz,'graupel_ref','graupel reflectivity','m3 kg-1 s-1') + call label_dtend_tracer(Model,100+Model%nthz,'hail_ref','hail reflectivity','m3 kg-1 s-1') call label_dtend_tracer(Model,100+Model%ntke,'sgs_tke','turbulent kinetic energy','J s-1') call label_dtend_tracer(Model,100+Model%nqrimef,'q_rimef','mass weighted rime factor','kg-1 s-1') call label_dtend_tracer(Model,100+Model%ntwa,'liq_aero','number concentration of water-friendly aerosols','kg-1 s-1') @@ -4999,7 +5011,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & itrac /= Model%ntrw .and. itrac /= Model%ntsw .and. itrac /= Model%ntrnc .and. & itrac /= Model%ntsnc .and. itrac /= Model%ntgl .and. itrac /= Model%ntgnc .and. & itrac /= Model%nthl .and. itrac /= Model%nthnc .and. itrac /= Model%nthv .and. & - itrac /= Model%ntgv ) then + itrac /= Model%ntgv .and. itrac /= Model%ntrz .and. itrac /= Model%ntgz .and. & + itrac /= Model%nthz ) then call fill_dtidx(Model,dtend_select,100+itrac,Model%index_of_process_scnv,have_scnv) call fill_dtidx(Model,dtend_select,100+itrac,Model%index_of_process_dcnv,have_dcnv) else if(Model%ntchs<=0 .or. itrac 0) +[qgrs(:,:,index_of_reflectivity_of_rain_in_tracer_concentration_array)] + standard_name = reflectivity_of_rain_in_air + long_name = reflectivity of rain + units = m6 kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + active = (index_of_reflectivity_of_rain_in_tracer_concentration_array > 0) +[qgrs(:,:,index_of_reflectivity_of_graupel_in_tracer_concentration_array)] + standard_name = reflectivity_of_graupel_in_air + long_name = reflectivity of graupel + units = m6 kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + active = (index_of_reflectivity_of_graupel_in_tracer_concentration_array > 0) +[qgrs(:,:,index_of_reflectivity_of_hail_in_tracer_concentration_array)] + standard_name = reflectivity_of_hail_in_air + long_name = reflectivity of hail + units = m6 kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + active = (index_of_reflectivity_of_hail_in_tracer_concentration_array > 0) [qgrs(:,:,index_of_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array)] standard_name = cloud_condensation_nuclei_number_concentration long_name = number concentration of cloud condensation nuclei @@ -568,6 +592,30 @@ type = real kind = kind_phys active = ( index_of_hail_volume_in_tracer_concentration_array > 0 ) +[gq0(:,:,index_of_reflectivity_of_rain_in_tracer_concentration_array)] + standard_name = reflectivity_of_rain_of_new_state + long_name = reflectivity of rain updated by physics + units = m6 kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + active = ( index_of_reflectivity_of_rain_in_tracer_concentration_array > 0 ) +[gq0(:,:,index_of_reflectivity_of_graupel_in_tracer_concentration_array)] + standard_name = reflectivity_of_graupel_of_new_state + long_name = reflectivity of graupel updated by physics + units = m6 kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + active = ( index_of_reflectivity_of_graupel_in_tracer_concentration_array > 0 ) +[gq0(:,:,index_of_reflectivity_of_hail_in_tracer_concentration_array)] + standard_name = reflectivity_of_hail_of_new_state + long_name = reflectivity of hail updated by physics + units = m6 kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + active = ( index_of_reflectivity_of_hail_in_tracer_concentration_array > 0 ) [gq0(:,:,index_of_cloud_area_fraction_in_atmosphere_layer_in_tracer_concentration_array)] standard_name = cloud_area_fraction_in_atmosphere_layer_of_new_state long_name = cloud fraction updated by physics @@ -4024,6 +4072,12 @@ units = flag dimensions = () type = logical +[nssl_3moment] + standard_name = nssl_3moment + long_name = 3-moment activation flag in NSSL microphysics scheme + units = flag + dimensions = () + type = logical [tf] standard_name = all_ice_cloud_threshold_temperature long_name = threshold temperature below which all cloud is ice @@ -5716,6 +5770,24 @@ units = index dimensions = () type = integer +[ntrz] + standard_name = index_of_reflectivity_of_rain_in_tracer_concentration_array + long_name = tracer index for rain reflectivity + units = index + dimensions = () + type = integer +[ntgz] + standard_name = index_of_reflectivity_of_graupel_in_tracer_concentration_array + long_name = tracer index for graupel reflectivity + units = index + dimensions = () + type = integer +[nthz] + standard_name = index_of_reflectivity_of_hail_in_tracer_concentration_array + long_name = tracer index for hail reflectivity + units = index + dimensions = () + type = integer [ntke] standard_name = index_of_turbulent_kinetic_energy_in_tracer_concentration_array long_name = tracer index for turbulent kinetic energy From 77d250da0266ca1bb8468c86b88ae029ea6c8dc8 Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Tue, 11 Apr 2023 14:08:01 -0500 Subject: [PATCH 24/57] Update submodules and add suites for ideal --- .gitmodules | 8 ++--- atmos_cubed_sphere | 2 +- ccpp/suites/suite_FV3_RRFS_v1nssl_ideal.xml | 36 +++++++++++++++++++ .../suites/suite_FV3_RRFS_v1nssl_idealpbl.xml | 2 +- 4 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 ccpp/suites/suite_FV3_RRFS_v1nssl_ideal.xml diff --git a/.gitmodules b/.gitmodules index 9c7c067ff..4e74a1ac5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,15 +1,15 @@ [submodule "atmos_cubed_sphere"] path = atmos_cubed_sphere - url = https://github.com/LarissaReames-NOAA/GFDL_atmos_cubed_sphere.git - branch = feature/ideal-new + url = https://github.com/MicroTed/GFDL_atmos_cubed_sphere + branch = feature/ideal-new-tm [submodule "ccpp/framework"] path = ccpp/framework url = https://github.com/NCAR/ccpp-framework branch = main [submodule "ccpp/physics"] path = ccpp/physics - url = https://github.com/ufs-community/ccpp-physics - branch = ufs/dev + url = https://github.com/MicroTed/ccpp-physics + branch = feature/nssl3m [submodule "upp"] path = upp url = https://github.com/NOAA-EMC/UPP diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index 5281e0ace..abcd152b2 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 5281e0ace1e75ef7ddb163f0881cf78c9b8d088c +Subproject commit abcd152b211e8c816b5ced3746fdbc569b2d16dc diff --git a/ccpp/suites/suite_FV3_RRFS_v1nssl_ideal.xml b/ccpp/suites/suite_FV3_RRFS_v1nssl_ideal.xml new file mode 100644 index 000000000..102905101 --- /dev/null +++ b/ccpp/suites/suite_FV3_RRFS_v1nssl_ideal.xml @@ -0,0 +1,36 @@ + + + + + + + GFS_time_vary_pre + GFS_phys_time_vary + + + + + + + + + + + rayleigh_damp + GFS_suite_stateout_update + get_phi_fv3 + + + GFS_MP_generic_pre + mp_nssl + GFS_MP_generic_post + maximum_hourly_diagnostics + phys_tend + + + + + + + + diff --git a/ccpp/suites/suite_FV3_RRFS_v1nssl_idealpbl.xml b/ccpp/suites/suite_FV3_RRFS_v1nssl_idealpbl.xml index 45f9223fc..924fb74ac 100644 --- a/ccpp/suites/suite_FV3_RRFS_v1nssl_idealpbl.xml +++ b/ccpp/suites/suite_FV3_RRFS_v1nssl_idealpbl.xml @@ -15,7 +15,7 @@ GFS_suite_interstitial_rad_reset sgscloud_radpre GFS_rrtmg_pre - rrtmg_sw_pre + rad_sw_pre rrtmg_sw_post rrtmg_lw_pre sgscloud_radpost From 9cdcb7655f292e6aaa00b0adb29855ec82007307 Mon Sep 17 00:00:00 2001 From: "larissa.reames@noaa.gov" Date: Thu, 13 Apr 2023 17:06:51 +0000 Subject: [PATCH 25/57] Added fix to re-implement ideal (doubly periodic) grid capability in the write component. --- .gitmodules | 2 +- atmos_cubed_sphere | 2 +- atmos_model.F90 | 3 ++- module_fcst_grid_comp.F90 | 49 +++++++++++++++++++++++++++++++++++---- 4 files changed, 48 insertions(+), 8 deletions(-) diff --git a/.gitmodules b/.gitmodules index 4e74a1ac5..ecb5d0205 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "atmos_cubed_sphere"] path = atmos_cubed_sphere - url = https://github.com/MicroTed/GFDL_atmos_cubed_sphere + url = https://github.com/LarissaReames-NOAA/GFDL_atmos_cubed_sphere branch = feature/ideal-new-tm [submodule "ccpp/framework"] path = ccpp/framework diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index abcd152b2..02d15fe6b 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit abcd152b211e8c816b5ced3746fdbc569b2d16dc +Subproject commit 02d15fe6b928c8326fb334ead6e431e60d688991 diff --git a/atmos_model.F90 b/atmos_model.F90 index e6bbb72c7..c0ecd2a5c 100644 --- a/atmos_model.F90 +++ b/atmos_model.F90 @@ -137,6 +137,7 @@ module atmos_model_mod ! (they correspond to the x, y, pfull, phalf axes) integer, pointer :: pelist(:) =>null() ! pelist where atmosphere is running. integer :: layout(2) ! computer task laytout + integer :: grid_type logical :: regional ! true if domain is regional logical :: nested ! true if there is a nest logical :: moving_nest_parent ! true if this grid has a moving nest child @@ -572,7 +573,7 @@ subroutine atmos_model_init (Atmos, Time_init, Time, Time_step) call atmosphere_resolution (mlon, mlat, global=.true.) call atmosphere_domain (Atmos%domain, Atmos%domain_for_read, Atmos%layout, & Atmos%regional, Atmos%nested, & - Atmos%ngrids, Atmos%mygrid, Atmos%pelist) + Atmos%ngrids, Atmos%mygrid, Atmos%pelist, Atmos%grid_type) Atmos%moving_nest_parent = .false. Atmos%is_moving_nest = .false. #ifdef MOVING_NEST diff --git a/module_fcst_grid_comp.F90 b/module_fcst_grid_comp.F90 index 3897ff43c..6176cd558 100644 --- a/module_fcst_grid_comp.F90 +++ b/module_fcst_grid_comp.F90 @@ -61,7 +61,9 @@ module module_fcst_grid_comp fv_srf_wnd_restart_bundle_setup, & fv_tracer_restart_bundle_setup - use fms2_io_mod, only: FmsNetcdfFile_t, open_file, close_file, variable_exists, read_data + use fms2_io_mod, only: FmsNetcdfFile_t, open_file, close_file, variable_exists, & + read_data + use fms_io_mod, only: field_exist, read_data_old=>read_data use atmosphere_mod, only: atmosphere_control_data @@ -163,7 +165,7 @@ subroutine SetServicesNest(nest, rc) type(ESMF_Grid) :: grid type(ESMF_Info) :: info integer :: layout(2), tilesize - integer :: tl, nx, ny + integer :: tl, nx, ny, mype, clb(2), cub(2) integer,dimension(2,6):: decomptile !define delayout for the 6 cubed-sphere tiles integer,dimension(2) :: regdecomp !define delayout for the nest grid type(ESMF_Decomp_Flag):: decompflagPTile(2,6) @@ -171,7 +173,8 @@ subroutine SetServicesNest(nest, rc) character(3) :: myGridStr type(ESMF_DistGrid) :: distgrid type(ESMF_Array) :: array - + real(esmf_kind_r8), pointer :: ptr(:,:) + character(256) :: gridfile rc = ESMF_SUCCESS call ESMF_GridCompSetEntryPoint(nest, ESMF_METHOD_INITIALIZE, userRoutine=init_dyn_fb, phase=1, rc=rc) @@ -201,7 +204,31 @@ subroutine SetServicesNest(nest, rc) grid_typekind = ESMF_TYPEKIND_R8 endif - if (trim(name)=="global") then + if (Atmos%grid_type==4) then + gridfile = "grid_spec.nc" ! default + + if (field_exist("INPUT/grid_spec.nc", "atm_mosaic_file")) then + call read_data_old("INPUT/grid_spec.nc", "atm_mosaic_file", gridfile) + endif + + do tl=1,6 + decomptile(1,tl) = layout(1) + decomptile(2,tl) = layout(2) + decompflagPTile(:,tl) = (/ESMF_DECOMP_SYMMEDGEMAX,ESMF_DECOMP_SYMMEDGEMAX/) + enddo + grid = ESMF_GridCreateMosaic(filename="INPUT/"//trim(gridfile),& + regDecompPTile=decomptile,tileFilePath="INPUT/",& + decompflagPTile=decompflagPTile,& + staggerlocList=(/ESMF_STAGGERLOC_CENTER,ESMF_STAGGERLOC_CORNER/), & + name='fcst_grid', rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU,line=__LINE__, file=__FILE__)) return + call mpp_error(NOTE, 'after create fcst grid for global-only with INPUT/'//trim(gridfile)) + + call addLsmask2grid(grid, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU,line=__LINE__, file=__FILE__)) return + + elseif (trim(name)=="global") then + print*, "GLOBAL DOMAIN" ! global domain call ESMF_InfoGet(info, key="tilesize", value=tilesize, rc=rc); ESMF_ERR_ABORT(rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return @@ -211,6 +238,8 @@ subroutine SetServicesNest(nest, rc) decomptile(2,tl) = layout(2) decompflagPTile(:,tl) = (/ESMF_DECOMP_SYMMEDGEMAX,ESMF_DECOMP_SYMMEDGEMAX/) enddo + + print*, "demptile(1), decomptil(2) = ", decomptile(1,:), decomptile(2,:) grid = ESMF_GridCreateCubedSphere(tileSize=tilesize, & coordSys=ESMF_COORDSYS_SPH_RAD, & coordTypeKind=grid_typekind, & @@ -219,11 +248,13 @@ subroutine SetServicesNest(nest, rc) name="fcst_grid", rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return else + print*, "NEST DOMAIN" ! nest domain call ESMF_InfoGet(info, key="nx", value=nx, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return call ESMF_InfoGet(info, key="ny", value=ny, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + print*, "NX, NY = ", nx, ny grid = ESMF_GridCreateNoPeriDim(regDecomp=(/layout(1),layout(2)/), & minIndex=(/1,1/), & maxIndex=(/nx,ny/), & @@ -237,10 +268,17 @@ subroutine SetServicesNest(nest, rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return endif + if (.not. (Atmos%grid_type==4)) then ! - Create coordinate arrays around allocations held within Atmos data structure and set in Grid call ESMF_GridGet(grid, staggerloc=ESMF_STAGGERLOC_CENTER, distgrid=distgrid, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + !call MPI_COMM_RANK(MPI_COMM_WORLD, mype, rc) + !call ESMF_GridGet(grid, staggerloc=ESMF_STAGGERLOC_CENTER, localDE=mype, computationalCount=clb,rc=rc) + !if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + !print*, "local size of Atmos%lon = ", shape(Atmos%lon) + !print*, "local comp size ", clb(1), clb(2) + !call MPI_Barrier(MPI_COMM_WORLD,rc) array = ESMF_ArrayCreate(distgrid, farray=Atmos%lon, indexflag=ESMF_INDEX_DELOCAL, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return @@ -272,6 +310,7 @@ subroutine SetServicesNest(nest, rc) !TODO: Consider aligning mask treatment with coordinates... especially if it requires updates for moving call addLsmask2grid(grid, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + endif ! - Add Attributes used by output @@ -859,7 +898,7 @@ subroutine fcst_initialize(fcst_comp, importState, exportState, clock, rc) call ESMF_InfoGetFromHost(fcstGridComp(n), info=info, rc=rc); ESMF_ERR_ABORT(rc) call ESMF_InfoSet(info, key="layout", values=layout, rc=rc); ESMF_ERR_ABORT(rc) call ESMF_InfoSet(info, key="tilesize", value=Atmos%mlon, rc=rc); ESMF_ERR_ABORT(rc) - + print*, "layout, Atmos%mlon = ", layout, Atmos%mlon call ESMF_GridCompSetServices(fcstGridComp(n), SetServicesNest, userrc=urc, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return if (ESMF_LogFoundError(rcToCheck=urc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__, rcToReturn=rc)) return From d90c372a64224d07bd7813b3999d3e5b80a506bf Mon Sep 17 00:00:00 2001 From: "larissa.reames@noaa.gov" Date: Thu, 13 Apr 2023 17:13:21 +0000 Subject: [PATCH 26/57] Update to correct branch of atmos_cubed_sphere --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index ecb5d0205..9d444208a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,7 +1,7 @@ [submodule "atmos_cubed_sphere"] path = atmos_cubed_sphere url = https://github.com/LarissaReames-NOAA/GFDL_atmos_cubed_sphere - branch = feature/ideal-new-tm + branch = feature/ideal_fix_grid [submodule "ccpp/framework"] path = ccpp/framework url = https://github.com/NCAR/ccpp-framework From 652c0bf64511bd0abb208b4efc8d802e25f8f483 Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Sat, 15 Apr 2023 20:01:03 -0500 Subject: [PATCH 27/57] Update otsptflag for 3moment variables --- ccpp/data/CCPP_typedefs.F90 | 3 ++- ccpp/data/GFS_typedefs.F90 | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ccpp/data/CCPP_typedefs.F90 b/ccpp/data/CCPP_typedefs.F90 index b886beb3e..59e4f09e1 100644 --- a/ccpp/data/CCPP_typedefs.F90 +++ b/ccpp/data/CCPP_typedefs.F90 @@ -1059,7 +1059,8 @@ subroutine gfs_interstitial_setup_tracers(Interstitial, Model) n /= Model%ntrw .and. n /= Model%ntsw .and. n /= Model%ntrnc .and. & n /= Model%ntsnc .and. n /= Model%ntgl .and. n /= Model%ntgnc .and. & n /= Model%nthl .and. n /= Model%nthnc .and. n /= Model%ntgv .and. & - n /= Model%nthv .and. n /= Model%ntccn .and. n /= Model%ntccna .and. & + n /= Model%nthv .and. n /= Model%ntccn .and. n /= Model%ntccna .and. & + n /= Model%ntrz .and. n /= Model%ntgz .and. n /= Model%nthz .and. & n /= Model%ntsigma) Interstitial%otsptflag(n) = ltest if ( ltest ) then diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 155a5efcc..445ad0113 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -6490,6 +6490,9 @@ subroutine control_print(Model) print *, ' ntccna : ', Model%ntccna print *, ' ntgv : ', Model%ntgv print *, ' nthv : ', Model%nthv + print *, ' ntrz : ', Model%ntrz + print *, ' ntgz : ', Model%ntgz + print *, ' nthz : ', Model%nthz print *, ' ntke : ', Model%ntke print *, ' ntsigma : ', Model%ntsigma print *, ' nto : ', Model%nto From cae9c22a313d1a9e82d61d113392bb21a519b777 Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Tue, 18 Apr 2023 16:49:53 -0500 Subject: [PATCH 28/57] Fixed missing routine from ideal suite --- ccpp/data/GFS_typedefs.F90 | 2 +- ccpp/physics | 2 +- ccpp/suites/suite_FV3_RRFS_v1nssl_ideal.xml | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 445ad0113..ed98f8cfa 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -3637,7 +3637,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- aerosol scavenging factors integer, parameter :: max_scav_factors = 183 - character(len=40) :: fscav_aero(max_scav_factors) + character(len=40) :: fscav_aero(max_scav_factors) = '' real(kind=kind_phys) :: radar_tten_limits(2) = (/ limit_unspecified, limit_unspecified /) integer :: itime diff --git a/ccpp/physics b/ccpp/physics index 0a71797ca..7956ada51 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 0a71797cac0a52a9b50bd28ab39baae5dfb79772 +Subproject commit 7956ada51d49617acc7f1e03c0381dfafbf2ba25 diff --git a/ccpp/suites/suite_FV3_RRFS_v1nssl_ideal.xml b/ccpp/suites/suite_FV3_RRFS_v1nssl_ideal.xml index 102905101..96e859c06 100644 --- a/ccpp/suites/suite_FV3_RRFS_v1nssl_ideal.xml +++ b/ccpp/suites/suite_FV3_RRFS_v1nssl_ideal.xml @@ -18,6 +18,7 @@ rayleigh_damp GFS_suite_stateout_update + get_prs_fv3 get_phi_fv3 From 12b6b8ed4f4ecf42de9e70ecb314810d67cc8cb0 Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Tue, 18 Apr 2023 17:05:57 -0500 Subject: [PATCH 29/57] Update submodule --- .gitmodules | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 9d444208a..b49ac639f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,7 +1,7 @@ [submodule "atmos_cubed_sphere"] path = atmos_cubed_sphere - url = https://github.com/LarissaReames-NOAA/GFDL_atmos_cubed_sphere - branch = feature/ideal_fix_grid + url = https://github.com/MicroTed/GFDL_atmos_cubed_sphere.git + branch = feature/ideal-new-tm [submodule "ccpp/framework"] path = ccpp/framework url = https://github.com/NCAR/ccpp-framework From 45de372aa57319db09053a562c164b6abedbc6d2 Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Sat, 23 Sep 2023 16:14:34 -0500 Subject: [PATCH 30/57] Submodule update --- .gitmodules | 2 +- atmos_cubed_sphere | 2 +- ccpp/physics | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index b49ac639f..f538b665a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -9,7 +9,7 @@ [submodule "ccpp/physics"] path = ccpp/physics url = https://github.com/MicroTed/ccpp-physics - branch = feature/nssl3m + branch = ufsdev-nssl3m [submodule "upp"] path = upp url = https://github.com/NOAA-EMC/UPP diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index 7853ae967..f94653ae8 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 7853ae967a5f346dcb710d03cebb85969473751c +Subproject commit f94653ae899f3b628451d69cfd789f3f6563d3a7 diff --git a/ccpp/physics b/ccpp/physics index 679ba7347..f324aa52e 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 679ba7347bf02c5262cafdad2a88a4c3f40fd796 +Subproject commit f324aa52e64b325965b1552916c733946610ddd2 From da84b176c1df5036c0511e56dd9ab902e0e564b0 Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Sat, 23 Sep 2023 16:20:36 -0500 Subject: [PATCH 31/57] Submodule update --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index f324aa52e..fda90e0d4 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit f324aa52e64b325965b1552916c733946610ddd2 +Subproject commit fda90e0d45e13458d89425ec9bb4d1ef454e1fa8 From ba27e2bf111ebc27ae13a9c4330a7bb34bc5473a Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Fri, 10 Nov 2023 15:49:21 -0600 Subject: [PATCH 32/57] Set correct submodules --- .gitmodules | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index f538b665a..84f5f666d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,15 +1,15 @@ [submodule "atmos_cubed_sphere"] path = atmos_cubed_sphere url = https://github.com/MicroTed/GFDL_atmos_cubed_sphere.git - branch = feature/ideal-new-tm + branch = ideal-periodic [submodule "ccpp/framework"] path = ccpp/framework url = https://github.com/NCAR/ccpp-framework branch = main [submodule "ccpp/physics"] path = ccpp/physics - url = https://github.com/MicroTed/ccpp-physics - branch = ufsdev-nssl3m + url = https://github.com/ufs-community/ccpp-physics + branch = ufs/dev [submodule "upp"] path = upp url = https://github.com/NOAA-EMC/UPP From 28a4346f13ddf2f520549313266468d5e673a06c Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Fri, 10 Nov 2023 22:03:53 +0000 Subject: [PATCH 33/57] Commented phys_tend in suite_FV3_RRFS_v1nssl_ideal.xml, but need to check if it needs something else --- ccpp/suites/suite_FV3_RRFS_v1nssl_ideal.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/suites/suite_FV3_RRFS_v1nssl_ideal.xml b/ccpp/suites/suite_FV3_RRFS_v1nssl_ideal.xml index 96e859c06..a60e360b9 100644 --- a/ccpp/suites/suite_FV3_RRFS_v1nssl_ideal.xml +++ b/ccpp/suites/suite_FV3_RRFS_v1nssl_ideal.xml @@ -26,7 +26,7 @@ mp_nssl GFS_MP_generic_post maximum_hourly_diagnostics - phys_tend + From d6b741631e402b8aeff8f67cd2b54c03203863f2 Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Tue, 14 Nov 2023 12:17:59 -0600 Subject: [PATCH 34/57] Updated and renamed two suites for idealized model setup --- ...S_v1nssl_ideal.xml => suite_FV3_ideal_mp_nssl.xml} | 10 +++++++--- ...l_idealpbl.xml => suite_FV3_ideal_pbl_mp_nssl.xml} | 11 ++++++++--- 2 files changed, 15 insertions(+), 6 deletions(-) rename ccpp/suites/{suite_FV3_RRFS_v1nssl_ideal.xml => suite_FV3_ideal_mp_nssl.xml} (84%) rename ccpp/suites/{suite_FV3_RRFS_v1nssl_idealpbl.xml => suite_FV3_ideal_pbl_mp_nssl.xml} (91%) diff --git a/ccpp/suites/suite_FV3_RRFS_v1nssl_ideal.xml b/ccpp/suites/suite_FV3_ideal_mp_nssl.xml similarity index 84% rename from ccpp/suites/suite_FV3_RRFS_v1nssl_ideal.xml rename to ccpp/suites/suite_FV3_ideal_mp_nssl.xml index a60e360b9..abf6bd8af 100644 --- a/ccpp/suites/suite_FV3_RRFS_v1nssl_ideal.xml +++ b/ccpp/suites/suite_FV3_ideal_mp_nssl.xml @@ -1,6 +1,6 @@ - + @@ -8,30 +8,34 @@ GFS_phys_time_vary + rayleigh_damp GFS_suite_stateout_update + get_prs_fv3 get_phi_fv3 - - GFS_MP_generic_pre mp_nssl GFS_MP_generic_post maximum_hourly_diagnostics + GFS_physics_post + diff --git a/ccpp/suites/suite_FV3_RRFS_v1nssl_idealpbl.xml b/ccpp/suites/suite_FV3_ideal_pbl_mp_nssl.xml similarity index 91% rename from ccpp/suites/suite_FV3_RRFS_v1nssl_idealpbl.xml rename to ccpp/suites/suite_FV3_ideal_pbl_mp_nssl.xml index 924fb74ac..08f08d778 100644 --- a/ccpp/suites/suite_FV3_RRFS_v1nssl_idealpbl.xml +++ b/ccpp/suites/suite_FV3_ideal_pbl_mp_nssl.xml @@ -1,6 +1,6 @@ - + @@ -15,9 +15,12 @@ GFS_suite_interstitial_rad_reset sgscloud_radpre GFS_rrtmg_pre + GFS_radiation_surface rad_sw_pre + rrtmg_sw rrtmg_sw_post rrtmg_lw_pre + rrtmg_lw sgscloud_radpost rrtmg_lw_post GFS_rrtmg_post @@ -40,8 +43,9 @@ sfc_diff + --> + mynnsfc_wrapper GFS_surface_loop_control_part1 sfc_nst_pre sfc_nst @@ -64,9 +68,9 @@ GFS_GWD_generic_post --> mynnedmf_wrapper + @@ -77,6 +81,7 @@ mp_nssl GFS_MP_generic_post maximum_hourly_diagnostics + GFS_physics_post From f03b6646a037613765a7fca63dad94b931d13352 Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Tue, 14 Nov 2023 17:32:11 -0600 Subject: [PATCH 35/57] Update commit for atmos_cubed_sphere --- atmos_cubed_sphere | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index c626b5eb1..c5adcf1a3 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit c626b5eb1b2a91a31693556868be3875083cdb36 +Subproject commit c5adcf1a376c82feb0274c5c95d03c51afdd497d From e6a7a6c47c6944d7248c04ec0c685cca62ec7a02 Mon Sep 17 00:00:00 2001 From: Ted Mansell Date: Wed, 15 Nov 2023 11:36:36 -0600 Subject: [PATCH 36/57] Workaround to turn off radiation by adding a flag 'do_radiation' to gfs_physics_nml namelist --- ccpp/data/GFS_typedefs.F90 | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index dd9505128..cddb74063 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -759,6 +759,7 @@ module GFS_typedefs integer :: idate(4) !< initial date with different size and ordering !< (hr, mon, day, yr) !--- radiation control parameters + logical :: do_radiation !< do LW/SW radiation real(kind=kind_phys) :: fhswr !< frequency for shortwave radiation (secs) real(kind=kind_phys) :: fhlwr !< frequency for longwave radiation (secs) integer :: nsswr !< integer trigger for shortwave radiation @@ -3258,6 +3259,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & logical :: lsidea = .false. !--- radiation parameters + logical :: do_radiation = .true. !< do LW/SW radiation real(kind=kind_phys) :: fhswr = 3600. !< frequency for shortwave radiation (secs) real(kind=kind_phys) :: fhlwr = 3600. !< frequency for longwave radiation (secs) integer :: nhfrad = 0 !< number of timesteps for which to call radiation on physics timestep (coldstarts) @@ -3880,6 +3882,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & lsidea, use_med_flux, & #endif !--- radiation parameters + do_radiation, & fhswr, fhlwr, levr, nfxr, iaerclm, iflip, isol, ico2, ialb, & isot, iems, iaer, icliq_sw, iovr, ictm, isubc_sw, & isubc_lw, lcrick, lcnorm, lwhtr, swhtr, & @@ -4275,8 +4278,15 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- radiation control parameters Model%fhswr = fhswr Model%fhlwr = fhlwr - Model%nsswr = nint(fhswr/Model%dtp) - Model%nslwr = nint(fhlwr/Model%dtp) + if ( do_radiation ) then + Model%nsswr = nint(fhswr/Model%dtp) + if ( fhswr <= 0 ) Model%nsswr = -1 + Model%nslwr = nint(fhlwr/Model%dtp) + if ( fhlwr <= 0 ) Model%nslwr = -1 + else + Model%nsswr = -1 + Model%nslwr = -1 + endif if (restart) then Model%nhfrad = 0 if (Model%me == Model%master .and. nhfrad>0) & From 2cd4f2d13bb48a78f729226dd8b6eb159d50c5f4 Mon Sep 17 00:00:00 2001 From: "larissa.reames@noaa.gov" Date: Wed, 29 Nov 2023 22:40:39 +0000 Subject: [PATCH 37/57] Updated atmos_cubed_sphere state --- atmos_cubed_sphere | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index c5adcf1a3..f1c3099df 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit c5adcf1a376c82feb0274c5c95d03c51afdd497d +Subproject commit f1c3099df5b38db69d6601f2f6f48c9106431354 From 3a688e39e7d8e27ef3494bcc3c357485001480a7 Mon Sep 17 00:00:00 2001 From: "larissa.reames@noaa.gov" Date: Fri, 8 Dec 2023 19:17:57 +0000 Subject: [PATCH 38/57] Added radiation block to ideal_mp_nssl suite. Changed atmos_cubed_sphere submodule to point to my fork. --- .gitmodules | 2 +- ccpp/suites/suite_FV3_ideal_mp_nssl.xml | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index 84f5f666d..591ae5437 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "atmos_cubed_sphere"] path = atmos_cubed_sphere - url = https://github.com/MicroTed/GFDL_atmos_cubed_sphere.git + url = https://github.com/LarissaReames-NOAA/GFDL_atmos_cubed_sphere.git branch = ideal-periodic [submodule "ccpp/framework"] path = ccpp/framework diff --git a/ccpp/suites/suite_FV3_ideal_mp_nssl.xml b/ccpp/suites/suite_FV3_ideal_mp_nssl.xml index abf6bd8af..806eeed94 100644 --- a/ccpp/suites/suite_FV3_ideal_mp_nssl.xml +++ b/ccpp/suites/suite_FV3_ideal_mp_nssl.xml @@ -8,12 +8,23 @@ GFS_phys_time_vary - + From 589b7bdfbb4552187089ab654306e3179ec46654 Mon Sep 17 00:00:00 2001 From: "larissa.reames@noaa.gov" Date: Mon, 11 Dec 2023 22:34:22 +0000 Subject: [PATCH 39/57] updated atmos_cubed_sphere --- atmos_cubed_sphere | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index f1c3099df..565a4df84 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit f1c3099df5b38db69d6601f2f6f48c9106431354 +Subproject commit 565a4df84dde09341774132adfd74f1d4180eb4c From 75abfcbb5ef780ae382a3dedb5012f2bf708da98 Mon Sep 17 00:00:00 2001 From: "larissa.reames@noaa.gov" Date: Thu, 25 Jan 2024 20:56:10 +0000 Subject: [PATCH 40/57] Updated atmos_cubed_sphere --- atmos_cubed_sphere | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index f1c3099df..a4d28a3b1 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit f1c3099df5b38db69d6601f2f6f48c9106431354 +Subproject commit a4d28a3b1503c94f623a2a15400a2e08eb29a50f From 5df206d566b55648502c926497f761f3896d1107 Mon Sep 17 00:00:00 2001 From: "larissa.reames@noaa.gov" Date: Thu, 2 Jan 2025 20:42:36 +0000 Subject: [PATCH 41/57] Update atmos_cubed_sphere for ideal test changes --- atmos_cubed_sphere | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index a4d28a3b1..9619ba106 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit a4d28a3b1503c94f623a2a15400a2e08eb29a50f +Subproject commit 9619ba1067229cf89a6591b134bf7402c440c9a0 From ef1101d97ce60fa2d92e12e8585ebce48a223759 Mon Sep 17 00:00:00 2001 From: "larissa.reames@noaa.gov" Date: Thu, 2 Jan 2025 21:11:05 +0000 Subject: [PATCH 42/57] Updated ccpp submodules --- ccpp/framework | 2 +- ccpp/physics | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ccpp/framework b/ccpp/framework index 9e1c3abe1..f0b9a18b0 160000 --- a/ccpp/framework +++ b/ccpp/framework @@ -1 +1 @@ -Subproject commit 9e1c3abe1048c0f18c53fdbb7113bc56a129bdf5 +Subproject commit f0b9a18b005d950cb9b0038fbc827b6b37500f43 diff --git a/ccpp/physics b/ccpp/physics index dfad42fe3..cc114f40b 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit dfad42fe3ac83ab76c9e2523a5d185752d771fa8 +Subproject commit cc114f40bef4ca8d19ccd739cbaec3fc829a607c From a6d4260a7c619b1b84bfc57eb30e034d16d92303 Mon Sep 17 00:00:00 2001 From: "larissa.reames@noaa.gov" Date: Thu, 2 Jan 2025 21:20:04 +0000 Subject: [PATCH 43/57] Update CCPP submodules ... again --- ccpp/framework | 2 +- ccpp/physics | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ccpp/framework b/ccpp/framework index f0b9a18b0..9e1c3abe1 160000 --- a/ccpp/framework +++ b/ccpp/framework @@ -1 +1 @@ -Subproject commit f0b9a18b005d950cb9b0038fbc827b6b37500f43 +Subproject commit 9e1c3abe1048c0f18c53fdbb7113bc56a129bdf5 diff --git a/ccpp/physics b/ccpp/physics index cc114f40b..dfad42fe3 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit cc114f40bef4ca8d19ccd739cbaec3fc829a607c +Subproject commit dfad42fe3ac83ab76c9e2523a5d185752d771fa8 From 71e353df7b6e0b280bf4615ab1451b835b40f37e Mon Sep 17 00:00:00 2001 From: "larissa.reames@noaa.gov" Date: Fri, 10 Jan 2025 20:23:15 +0000 Subject: [PATCH 44/57] Updates to ideal test code structure and CCPP suites. --- atmos_cubed_sphere | 2 +- ccpp/suites/suite_FV3_ideal_mp_nssl.xml | 1 - ccpp/suites/suite_FV3_ideal_pbl_mp_nssl.xml | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index 78946f3fb..de6a88352 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 78946f3fb51f0617d024b699d3d1e5af0d9a98bb +Subproject commit de6a8835250e3a051753c5aa762a8a38a77e0ddc diff --git a/ccpp/suites/suite_FV3_ideal_mp_nssl.xml b/ccpp/suites/suite_FV3_ideal_mp_nssl.xml index 806eeed94..9d5c1e253 100644 --- a/ccpp/suites/suite_FV3_ideal_mp_nssl.xml +++ b/ccpp/suites/suite_FV3_ideal_mp_nssl.xml @@ -17,7 +17,6 @@ rad_sw_pre rrtmg_sw rrtmg_sw_post - rrtmg_lw_pre rrtmg_lw sgscloud_radpost rrtmg_lw_post diff --git a/ccpp/suites/suite_FV3_ideal_pbl_mp_nssl.xml b/ccpp/suites/suite_FV3_ideal_pbl_mp_nssl.xml index 08f08d778..d34014905 100644 --- a/ccpp/suites/suite_FV3_ideal_pbl_mp_nssl.xml +++ b/ccpp/suites/suite_FV3_ideal_pbl_mp_nssl.xml @@ -19,7 +19,6 @@ rad_sw_pre rrtmg_sw rrtmg_sw_post - rrtmg_lw_pre rrtmg_lw sgscloud_radpost rrtmg_lw_post From d5d075b5707a7759d6f4d263ef5429f47a1edecb Mon Sep 17 00:00:00 2001 From: Larissa Reames Date: Tue, 14 Jan 2025 16:06:35 +0000 Subject: [PATCH 45/57] Remove do_radiation flag as ccpp can now properly handle empty sections --- atmos_cubed_sphere | 2 +- ccpp/data/GFS_typedefs.F90 | 15 +++------------ 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index de6a88352..b020cbea4 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit de6a8835250e3a051753c5aa762a8a38a77e0ddc +Subproject commit b020cbea40b4dea7762208511da2fa96e319c97b diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 4db2e00c7..51ab714e3 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -808,7 +808,6 @@ module GFS_typedefs integer :: idate(4) !< initial date with different size and ordering !< (hr, mon, day, yr) !--- radiation control parameters - logical :: do_radiation !< do LW/SW radiation real(kind=kind_phys) :: fhswr !< frequency for shortwave radiation (secs) real(kind=kind_phys) :: fhlwr !< frequency for longwave radiation (secs) integer :: nsswr !< integer trigger for shortwave radiation @@ -3407,7 +3406,6 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & logical :: lsidea = .false. !--- radiation parameters - logical :: do_radiation = .true. !< do LW/SW radiation real(kind=kind_phys) :: fhswr = 3600. !< frequency for shortwave radiation (secs) real(kind=kind_phys) :: fhlwr = 3600. !< frequency for longwave radiation (secs) integer :: nhfrad = 0 !< number of timesteps for which to call radiation on physics timestep (coldstarts) @@ -4071,7 +4069,6 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & lsidea, use_med_flux, & #endif !--- radiation parameters - do_radiation, & fhswr, fhlwr, levr, nfxr, iaerclm, iflip, isol, ico2, ialb, & isot, iems, iaer, icliq_sw, iovr, ictm, isubc_sw, & isubc_lw, lcrick, lcnorm, lwhtr, swhtr, & @@ -4508,15 +4505,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- radiation control parameters Model%fhswr = fhswr Model%fhlwr = fhlwr - if ( do_radiation ) then - Model%nsswr = nint(fhswr/Model%dtp) - if ( fhswr <= 0 ) Model%nsswr = -1 - Model%nslwr = nint(fhlwr/Model%dtp) - if ( fhlwr <= 0 ) Model%nslwr = -1 - else - Model%nsswr = -1 - Model%nslwr = -1 - endif + Model%nsswr = nint(fhswr/Model%dtp) + Model%nslwr = nint(fhlwr/Model%dtp) + if (restart) then Model%nhfrad = 0 if (Model%me == Model%master .and. nhfrad>0) & From 6fd8966abf4fe1405cb0d21a0e8e9de2310e1584 Mon Sep 17 00:00:00 2001 From: Larissa Reames Date: Tue, 14 Jan 2025 16:09:58 +0000 Subject: [PATCH 46/57] Remove extranesous ccpp suites. Remove extraneous code used for debugging. --- .../suite_FV3_GFS_v15_nssl_mynn_lam3km.xml | 79 ------------------ ccpp/suites/suite_FV3_RRFS_v1nssl_lsmnoah.xml | 82 ------------------- module_fcst_grid_comp.F90 | 13 +-- 3 files changed, 1 insertion(+), 173 deletions(-) delete mode 100644 ccpp/suites/suite_FV3_GFS_v15_nssl_mynn_lam3km.xml delete mode 100644 ccpp/suites/suite_FV3_RRFS_v1nssl_lsmnoah.xml diff --git a/ccpp/suites/suite_FV3_GFS_v15_nssl_mynn_lam3km.xml b/ccpp/suites/suite_FV3_GFS_v15_nssl_mynn_lam3km.xml deleted file mode 100644 index acb0a66ee..000000000 --- a/ccpp/suites/suite_FV3_GFS_v15_nssl_mynn_lam3km.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - GFS_time_vary_pre - GFS_rrtmg_setup - GFS_rad_time_vary - GFS_phys_time_vary - - - - - GFS_suite_interstitial_rad_reset - sgscloud_radpre - GFS_rrtmg_pre - GFS_radiation_surface - rrtmg_sw_pre - rrtmg_sw - rrtmg_sw_post - rrtmg_lw_pre - rrtmg_lw - sgscloud_radpost - rrtmg_lw_post - GFS_rrtmg_post - - - - - GFS_suite_interstitial_phys_reset - GFS_suite_stateout_reset - get_prs_fv3 - GFS_suite_interstitial_1 - GFS_surface_generic_pre - GFS_surface_composites_pre - dcyc2t3 - GFS_surface_composites_inter - GFS_suite_interstitial_2 - - - - mynnsfc_wrapper - GFS_surface_loop_control_part1 - sfc_nst_pre - sfc_nst - sfc_nst_post - lsm_noah - sfc_sice - GFS_surface_loop_control_part2 - - - - GFS_surface_composites_post - sfc_diag - sfc_diag_post - GFS_surface_generic_post - mynnedmf_wrapper - GFS_GWD_generic_pre - cires_ugwp_post - GFS_GWD_generic_post - GFS_suite_stateout_update - ozphys_2015 - h2ophys - get_phi_fv3 - GFS_MP_generic_pre - mp_nssl - GFS_MP_generic_post - maximum_hourly_diagnostics - phys_tend - - - - - GFS_stochastics - - - - diff --git a/ccpp/suites/suite_FV3_RRFS_v1nssl_lsmnoah.xml b/ccpp/suites/suite_FV3_RRFS_v1nssl_lsmnoah.xml deleted file mode 100644 index 35df20d00..000000000 --- a/ccpp/suites/suite_FV3_RRFS_v1nssl_lsmnoah.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - GFS_time_vary_pre - GFS_rrtmg_setup - GFS_rad_time_vary - GFS_phys_time_vary - - - - - GFS_suite_interstitial_rad_reset - sgscloud_radpre - GFS_rrtmg_pre - rrtmg_sw_pre - rrtmg_sw - rrtmg_sw_post - rrtmg_lw_pre - rrtmg_lw - sgscloud_radpost - rrtmg_lw_post - GFS_rrtmg_post - - - - - GFS_suite_interstitial_phys_reset - GFS_suite_stateout_reset - get_prs_fv3 - GFS_suite_interstitial_1 - GFS_surface_generic_pre - GFS_surface_composites_pre - dcyc2t3 - GFS_surface_composites_inter - GFS_suite_interstitial_2 - - - - sfc_diff - GFS_surface_loop_control_part1 - sfc_nst_pre - sfc_nst - sfc_nst_post - lsm_noah - - sfc_sice - GFS_surface_loop_control_part2 - - - - GFS_surface_composites_post - sfc_diag - sfc_diag_post - GFS_surface_generic_post - mynnedmf_wrapper - GFS_GWD_generic_pre - cires_ugwp - cires_ugwp_post - GFS_GWD_generic_post - rayleigh_damp - GFS_suite_stateout_update - ozphys_2015 - h2ophys - get_phi_fv3 - - - GFS_MP_generic_pre - mp_nssl - GFS_MP_generic_post - maximum_hourly_diagnostics - - - - - GFS_stochastics - - - - diff --git a/module_fcst_grid_comp.F90 b/module_fcst_grid_comp.F90 index c13dc5dd4..5da5b91d2 100644 --- a/module_fcst_grid_comp.F90 +++ b/module_fcst_grid_comp.F90 @@ -165,7 +165,7 @@ subroutine SetServicesNest(nest, rc) type(ESMF_Grid) :: grid type(ESMF_Info) :: info integer :: layout(2), tilesize - integer :: tl, nx, ny, mype, clb(2), cub(2) + integer :: tl, nx, ny, mype integer,dimension(2,6):: decomptile !define delayout for the 6 cubed-sphere tiles integer,dimension(2) :: regdecomp !define delayout for the nest grid type(ESMF_Decomp_Flag):: decompflagPTile(2,6) @@ -173,7 +173,6 @@ subroutine SetServicesNest(nest, rc) character(3) :: myGridStr type(ESMF_DistGrid) :: distgrid type(ESMF_Array) :: array - real(esmf_kind_r8), pointer :: ptr(:,:) character(256) :: gridfile rc = ESMF_SUCCESS @@ -228,7 +227,6 @@ subroutine SetServicesNest(nest, rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU,line=__LINE__, file=__FILE__)) return elseif (trim(name)=="global") then - print*, "GLOBAL DOMAIN" ! global domain call ESMF_InfoGet(info, key="tilesize", value=tilesize, rc=rc); ESMF_ERR_ABORT(rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return @@ -239,7 +237,6 @@ subroutine SetServicesNest(nest, rc) decompflagPTile(:,tl) = (/ESMF_DECOMP_SYMMEDGEMAX,ESMF_DECOMP_SYMMEDGEMAX/) enddo - print*, "demptile(1), decomptil(2) = ", decomptile(1,:), decomptile(2,:) grid = ESMF_GridCreateCubedSphere(tileSize=tilesize, & coordSys=ESMF_COORDSYS_SPH_RAD, & coordTypeKind=grid_typekind, & @@ -248,7 +245,6 @@ subroutine SetServicesNest(nest, rc) name="fcst_grid", rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return else - print*, "NEST DOMAIN" ! nest domain call ESMF_InfoGet(info, key="nx", value=nx, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return @@ -273,12 +269,6 @@ subroutine SetServicesNest(nest, rc) call ESMF_GridGet(grid, staggerloc=ESMF_STAGGERLOC_CENTER, distgrid=distgrid, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - !call MPI_COMM_RANK(MPI_COMM_WORLD, mype, rc) - !call ESMF_GridGet(grid, staggerloc=ESMF_STAGGERLOC_CENTER, localDE=mype, computationalCount=clb,rc=rc) - !if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - !print*, "local size of Atmos%lon = ", shape(Atmos%lon) - !print*, "local comp size ", clb(1), clb(2) - !call MPI_Barrier(MPI_COMM_WORLD,rc) array = ESMF_ArrayCreate(distgrid, farray=Atmos%lon, indexflag=ESMF_INDEX_DELOCAL, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return @@ -927,7 +917,6 @@ subroutine fcst_initialize(fcst_comp, importState, exportState, clock, rc) call ESMF_InfoGetFromHost(fcstGridComp(n), info=info, rc=rc); ESMF_ERR_ABORT(rc) call ESMF_InfoSet(info, key="layout", values=layout, rc=rc); ESMF_ERR_ABORT(rc) call ESMF_InfoSet(info, key="tilesize", value=Atmos%mlon, rc=rc); ESMF_ERR_ABORT(rc) - print*, "layout, Atmos%mlon = ", layout, Atmos%mlon call ESMF_GridCompSetServices(fcstGridComp(n), SetServicesNest, userrc=urc, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return if (ESMF_LogFoundError(rcToCheck=urc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__, rcToReturn=rc)) return From 5fa7e6900d653eeb7cf7d9c44b4466343c356709 Mon Sep 17 00:00:00 2001 From: Larissa Reames Date: Tue, 14 Jan 2025 16:14:15 +0000 Subject: [PATCH 47/57] Minor text fixes --- ccpp/data/GFS_typedefs.F90 | 1 - module_fcst_grid_comp.F90 | 75 +++++++++++++++++++------------------- 2 files changed, 37 insertions(+), 39 deletions(-) diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 51ab714e3..a7cb640c8 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -4507,7 +4507,6 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%fhlwr = fhlwr Model%nsswr = nint(fhswr/Model%dtp) Model%nslwr = nint(fhlwr/Model%dtp) - if (restart) then Model%nhfrad = 0 if (Model%me == Model%master .and. nhfrad>0) & diff --git a/module_fcst_grid_comp.F90 b/module_fcst_grid_comp.F90 index 5da5b91d2..7af78877f 100644 --- a/module_fcst_grid_comp.F90 +++ b/module_fcst_grid_comp.F90 @@ -165,7 +165,7 @@ subroutine SetServicesNest(nest, rc) type(ESMF_Grid) :: grid type(ESMF_Info) :: info integer :: layout(2), tilesize - integer :: tl, nx, ny, mype + integer :: tl, nx, ny integer,dimension(2,6):: decomptile !define delayout for the 6 cubed-sphere tiles integer,dimension(2) :: regdecomp !define delayout for the nest grid type(ESMF_Decomp_Flag):: decompflagPTile(2,6) @@ -236,7 +236,6 @@ subroutine SetServicesNest(nest, rc) decomptile(2,tl) = layout(2) decompflagPTile(:,tl) = (/ESMF_DECOMP_SYMMEDGEMAX,ESMF_DECOMP_SYMMEDGEMAX/) enddo - grid = ESMF_GridCreateCubedSphere(tileSize=tilesize, & coordSys=ESMF_COORDSYS_SPH_RAD, & coordTypeKind=grid_typekind, & @@ -250,7 +249,6 @@ subroutine SetServicesNest(nest, rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return call ESMF_InfoGet(info, key="ny", value=ny, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - print*, "NX, NY = ", nx, ny grid = ESMF_GridCreateNoPeriDim(regDecomp=(/layout(1),layout(2)/), & minIndex=(/1,1/), & maxIndex=(/nx,ny/), & @@ -265,41 +263,41 @@ subroutine SetServicesNest(nest, rc) endif if (.not. (Atmos%grid_type==4)) then - ! - Create coordinate arrays around allocations held within Atmos data structure and set in Grid - - call ESMF_GridGet(grid, staggerloc=ESMF_STAGGERLOC_CENTER, distgrid=distgrid, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - - array = ESMF_ArrayCreate(distgrid, farray=Atmos%lon, indexflag=ESMF_INDEX_DELOCAL, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - - call ESMF_GridSetCoord(grid, coordDim=1, staggerLoc=ESMF_STAGGERLOC_CENTER, array=array, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - - array = ESMF_ArrayCreate(distgrid, farray=Atmos%lat, indexflag=ESMF_INDEX_DELOCAL, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - - call ESMF_GridSetCoord(grid, coordDim=2, staggerLoc=ESMF_STAGGERLOC_CENTER, array=array, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - - call ESMF_GridGet(grid, staggerloc=ESMF_STAGGERLOC_CORNER, distgrid=distgrid, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - - array = ESMF_ArrayCreate(distgrid, farray=Atmos%lon_bnd, indexflag=ESMF_INDEX_DELOCAL, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - - call ESMF_GridSetCoord(grid, coordDim=1, staggerLoc=ESMF_STAGGERLOC_CORNER, array=array, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - - array = ESMF_ArrayCreate(distgrid, farray=Atmos%lat_bnd, indexflag=ESMF_INDEX_DELOCAL, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - - call ESMF_GridSetCoord(grid, coordDim=2, staggerLoc=ESMF_STAGGERLOC_CORNER, array=array, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - - !TODO: Consider aligning mask treatment with coordinates... especially if it requires updates for moving - call addLsmask2grid(grid, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + ! - Create coordinate arrays around allocations held within Atmos data structure and set in Grid + + call ESMF_GridGet(grid, staggerloc=ESMF_STAGGERLOC_CENTER, distgrid=distgrid, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + array = ESMF_ArrayCreate(distgrid, farray=Atmos%lon, indexflag=ESMF_INDEX_DELOCAL, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + call ESMF_GridSetCoord(grid, coordDim=1, staggerLoc=ESMF_STAGGERLOC_CENTER, array=array, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + array = ESMF_ArrayCreate(distgrid, farray=Atmos%lat, indexflag=ESMF_INDEX_DELOCAL, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + call ESMF_GridSetCoord(grid, coordDim=2, staggerLoc=ESMF_STAGGERLOC_CENTER, array=array, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + call ESMF_GridGet(grid, staggerloc=ESMF_STAGGERLOC_CORNER, distgrid=distgrid, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + array = ESMF_ArrayCreate(distgrid, farray=Atmos%lon_bnd, indexflag=ESMF_INDEX_DELOCAL, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + call ESMF_GridSetCoord(grid, coordDim=1, staggerLoc=ESMF_STAGGERLOC_CORNER, array=array, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + array = ESMF_ArrayCreate(distgrid, farray=Atmos%lat_bnd, indexflag=ESMF_INDEX_DELOCAL, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + call ESMF_GridSetCoord(grid, coordDim=2, staggerLoc=ESMF_STAGGERLOC_CORNER, array=array, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + !TODO: Consider aligning mask treatment with coordinates... especially if it requires updates for moving + call addLsmask2grid(grid, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return endif ! - Add Attributes used by output @@ -917,6 +915,7 @@ subroutine fcst_initialize(fcst_comp, importState, exportState, clock, rc) call ESMF_InfoGetFromHost(fcstGridComp(n), info=info, rc=rc); ESMF_ERR_ABORT(rc) call ESMF_InfoSet(info, key="layout", values=layout, rc=rc); ESMF_ERR_ABORT(rc) call ESMF_InfoSet(info, key="tilesize", value=Atmos%mlon, rc=rc); ESMF_ERR_ABORT(rc) + call ESMF_GridCompSetServices(fcstGridComp(n), SetServicesNest, userrc=urc, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return if (ESMF_LogFoundError(rcToCheck=urc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__, rcToReturn=rc)) return From 2b4130f668480cb8412e72390315a519560c790d Mon Sep 17 00:00:00 2001 From: Larissa Reames Date: Tue, 14 Jan 2025 16:38:14 +0000 Subject: [PATCH 48/57] Add umove and vmove options --- atmos_cubed_sphere | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index b020cbea4..0e5a5f78f 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit b020cbea40b4dea7762208511da2fa96e319c97b +Subproject commit 0e5a5f78f0524fc0cd7c76243142190c901feb04 From 2b6e9a85e5b65609454654664e9f14787c9fed4d Mon Sep 17 00:00:00 2001 From: Larissa Reames Date: Tue, 14 Jan 2025 20:20:30 +0000 Subject: [PATCH 49/57] Empty out radiation loop of ideal_mp ccpp suite --- ccpp/suites/suite_FV3_ideal_mp_nssl.xml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/ccpp/suites/suite_FV3_ideal_mp_nssl.xml b/ccpp/suites/suite_FV3_ideal_mp_nssl.xml index 9d5c1e253..39b50a01e 100644 --- a/ccpp/suites/suite_FV3_ideal_mp_nssl.xml +++ b/ccpp/suites/suite_FV3_ideal_mp_nssl.xml @@ -10,17 +10,6 @@ - GFS_suite_interstitial_rad_reset - sgscloud_radpre - GFS_rrtmg_pre - GFS_radiation_surface - rad_sw_pre - rrtmg_sw - rrtmg_sw_post - rrtmg_lw - sgscloud_radpost - rrtmg_lw_post - GFS_rrtmg_post From 406089e76d07f923ac12f127d4cf2c8a1684aadc Mon Sep 17 00:00:00 2001 From: Larissa Reames Date: Tue, 14 Jan 2025 20:49:37 +0000 Subject: [PATCH 50/57] Update atmos_cubed_sphere with NISE commentary upgrade --- atmos_cubed_sphere | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index 0e5a5f78f..b4eef8238 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 0e5a5f78f0524fc0cd7c76243142190c901feb04 +Subproject commit b4eef8238f7cc38032f7993f702b7765ee8a3add From 3dac7b94f8d27043621b7be7b103a575d7194777 Mon Sep 17 00:00:00 2001 From: "larissa.reames@noaa.gov" Date: Thu, 16 Jan 2025 15:40:01 +0000 Subject: [PATCH 51/57] Update atmos_cubed_sphere with bug fixes for model crashes. --- atmos_cubed_sphere | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index b4eef8238..fd0cf79ed 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit b4eef8238f7cc38032f7993f702b7765ee8a3add +Subproject commit fd0cf79ed3576bc56778173062d72fdfbd1d695c From f86affff205c054c7962185a62e7f35710369a17 Mon Sep 17 00:00:00 2001 From: "larissa.reames@noaa.gov" Date: Thu, 16 Jan 2025 19:43:13 +0000 Subject: [PATCH 52/57] Update ideal ccpp suites --- ccpp/suites/suite_FV3_ideal_mp_nssl.xml | 1 - ccpp/suites/suite_FV3_ideal_pbl_mp_nssl.xml | 30 --------------------- 2 files changed, 31 deletions(-) diff --git a/ccpp/suites/suite_FV3_ideal_mp_nssl.xml b/ccpp/suites/suite_FV3_ideal_mp_nssl.xml index 39b50a01e..d91ccc488 100644 --- a/ccpp/suites/suite_FV3_ideal_mp_nssl.xml +++ b/ccpp/suites/suite_FV3_ideal_mp_nssl.xml @@ -17,7 +17,6 @@ - rayleigh_damp GFS_suite_stateout_update get_prs_fv3 diff --git a/ccpp/suites/suite_FV3_ideal_pbl_mp_nssl.xml b/ccpp/suites/suite_FV3_ideal_pbl_mp_nssl.xml index d34014905..75c428a25 100644 --- a/ccpp/suites/suite_FV3_ideal_pbl_mp_nssl.xml +++ b/ccpp/suites/suite_FV3_ideal_pbl_mp_nssl.xml @@ -27,8 +27,6 @@ - GFS_suite_interstitial_phys_reset GFS_suite_stateout_reset get_prs_fv3 @@ -41,9 +39,6 @@ - mynnsfc_wrapper GFS_surface_loop_control_part1 sfc_nst_pre @@ -55,27 +50,8 @@ - - mynnedmf_wrapper - get_phi_fv3 - - GFS_MP_generic_pre mp_nssl GFS_MP_generic_post @@ -83,10 +59,4 @@ GFS_physics_post - - - GFS_stochastics - - - From 09eb0f62e38363d3893f5279f247d40a1e333f10 Mon Sep 17 00:00:00 2001 From: "larissa.reames@noaa.gov" Date: Tue, 21 Jan 2025 18:41:14 +0000 Subject: [PATCH 53/57] Replace use of read_data from old fms_io with read_data from fms2_io. --- module_fcst_grid_comp.F90 | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/module_fcst_grid_comp.F90 b/module_fcst_grid_comp.F90 index 7af78877f..0e96ba81c 100644 --- a/module_fcst_grid_comp.F90 +++ b/module_fcst_grid_comp.F90 @@ -63,7 +63,6 @@ module module_fcst_grid_comp use fms2_io_mod, only: FmsNetcdfFile_t, open_file, close_file, variable_exists, & read_data - use fms_io_mod, only: field_exist, read_data_old=>read_data use atmosphere_mod, only: atmosphere_control_data @@ -174,6 +173,7 @@ subroutine SetServicesNest(nest, rc) type(ESMF_DistGrid) :: distgrid type(ESMF_Array) :: array character(256) :: gridfile + type(FmsNetcdfFile_t) :: fileobj rc = ESMF_SUCCESS call ESMF_GridCompSetEntryPoint(nest, ESMF_METHOD_INITIALIZE, userRoutine=init_dyn_fb, phase=1, rc=rc) @@ -206,9 +206,12 @@ subroutine SetServicesNest(nest, rc) if (Atmos%grid_type==4) then gridfile = "grid_spec.nc" ! default - if (field_exist("INPUT/grid_spec.nc", "atm_mosaic_file")) then - call read_data_old("INPUT/grid_spec.nc", "atm_mosaic_file", gridfile) - endif + if (open_file(fileobj, "INPUT/grid_spec.nc", "read")) then + if (variable_exists(fileobj, "atm_mosaic_file")) then + call read_data(fileobj, "atm_mosaic_file", gridfile) + endif + call close_file(fileobj) + endif do tl=1,6 decomptile(1,tl) = layout(1) From b21f6f0a6c2be9562a61dba2a43c9d99013fd2a1 Mon Sep 17 00:00:00 2001 From: "larissa.reames@noaa.gov" Date: Tue, 21 Jan 2025 21:02:05 +0000 Subject: [PATCH 54/57] Correct grid_type=4 configuration to use single tile ESMF Grid --- module_fcst_grid_comp.F90 | 104 ++++++++++++++++++++------------------ 1 file changed, 54 insertions(+), 50 deletions(-) diff --git a/module_fcst_grid_comp.F90 b/module_fcst_grid_comp.F90 index 0e96ba81c..3820b1ca3 100644 --- a/module_fcst_grid_comp.F90 +++ b/module_fcst_grid_comp.F90 @@ -213,18 +213,22 @@ subroutine SetServicesNest(nest, rc) call close_file(fileobj) endif - do tl=1,6 - decomptile(1,tl) = layout(1) - decomptile(2,tl) = layout(2) - decompflagPTile(:,tl) = (/ESMF_DECOMP_SYMMEDGEMAX,ESMF_DECOMP_SYMMEDGEMAX/) - enddo - grid = ESMF_GridCreateMosaic(filename="INPUT/"//trim(gridfile),& - regDecompPTile=decomptile,tileFilePath="INPUT/",& - decompflagPTile=decompflagPTile,& - staggerlocList=(/ESMF_STAGGERLOC_CENTER,ESMF_STAGGERLOC_CORNER/), & - name='fcst_grid', rc=rc) + call ESMF_InfoGet(info, key="nx", value=nx, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + call ESMF_InfoGet(info, key="ny", value=ny, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + grid = ESMF_GridCreateNoPeriDim( regDecomp=(/layout(1),layout(2)/), & + minIndex=(/1,1/), & + maxIndex=(/nx,ny/), & + gridAlign=(/-1,-1/), & + coordSys=ESMF_COORDSYS_SPH_RAD, & + coordTypeKind=grid_typekind, & + decompflag=(/ESMF_DECOMP_SYMMEDGEMAX,ESMF_DECOMP_SYMMEDGEMAX/), & + name="fcst_grid", & + indexflag=ESMF_INDEX_DELOCAL, & + rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU,line=__LINE__, file=__FILE__)) return - call mpp_error(NOTE, 'after create fcst grid for global-only with INPUT/'//trim(gridfile)) + call mpp_error(NOTE, 'after create fcst grid for doubly periodic with INPUT/'//trim(gridfile)) call addLsmask2grid(grid, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU,line=__LINE__, file=__FILE__)) return @@ -265,43 +269,42 @@ subroutine SetServicesNest(nest, rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return endif - if (.not. (Atmos%grid_type==4)) then - ! - Create coordinate arrays around allocations held within Atmos data structure and set in Grid - - call ESMF_GridGet(grid, staggerloc=ESMF_STAGGERLOC_CENTER, distgrid=distgrid, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - - array = ESMF_ArrayCreate(distgrid, farray=Atmos%lon, indexflag=ESMF_INDEX_DELOCAL, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - - call ESMF_GridSetCoord(grid, coordDim=1, staggerLoc=ESMF_STAGGERLOC_CENTER, array=array, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - - array = ESMF_ArrayCreate(distgrid, farray=Atmos%lat, indexflag=ESMF_INDEX_DELOCAL, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - - call ESMF_GridSetCoord(grid, coordDim=2, staggerLoc=ESMF_STAGGERLOC_CENTER, array=array, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - - call ESMF_GridGet(grid, staggerloc=ESMF_STAGGERLOC_CORNER, distgrid=distgrid, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - - array = ESMF_ArrayCreate(distgrid, farray=Atmos%lon_bnd, indexflag=ESMF_INDEX_DELOCAL, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - - call ESMF_GridSetCoord(grid, coordDim=1, staggerLoc=ESMF_STAGGERLOC_CORNER, array=array, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - - array = ESMF_ArrayCreate(distgrid, farray=Atmos%lat_bnd, indexflag=ESMF_INDEX_DELOCAL, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - - call ESMF_GridSetCoord(grid, coordDim=2, staggerLoc=ESMF_STAGGERLOC_CORNER, array=array, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - - !TODO: Consider aligning mask treatment with coordinates... especially if it requires updates for moving - call addLsmask2grid(grid, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - endif + ! - Create coordinate arrays around allocations held within Atmos data structure and set in Grid + + + call ESMF_GridGet(grid, staggerloc=ESMF_STAGGERLOC_CENTER, distgrid=distgrid, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + array = ESMF_ArrayCreate(distgrid, farray=Atmos%lon, indexflag=ESMF_INDEX_DELOCAL, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + call ESMF_GridSetCoord(grid, coordDim=1, staggerLoc=ESMF_STAGGERLOC_CENTER, array=array, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + array = ESMF_ArrayCreate(distgrid, farray=Atmos%lat, indexflag=ESMF_INDEX_DELOCAL, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + call ESMF_GridSetCoord(grid, coordDim=2, staggerLoc=ESMF_STAGGERLOC_CENTER, array=array, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + call ESMF_GridGet(grid, staggerloc=ESMF_STAGGERLOC_CORNER, distgrid=distgrid, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + array = ESMF_ArrayCreate(distgrid, farray=Atmos%lon_bnd, indexflag=ESMF_INDEX_DELOCAL, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + call ESMF_GridSetCoord(grid, coordDim=1, staggerLoc=ESMF_STAGGERLOC_CORNER, array=array, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + array = ESMF_ArrayCreate(distgrid, farray=Atmos%lat_bnd, indexflag=ESMF_INDEX_DELOCAL, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + call ESMF_GridSetCoord(grid, coordDim=2, staggerLoc=ESMF_STAGGERLOC_CORNER, array=array, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + !TODO: Consider aligning mask treatment with coordinates... especially if it requires updates for moving + call addLsmask2grid(grid, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return ! - Add Attributes used by output @@ -851,7 +854,7 @@ subroutine fcst_initialize(fcst_comp, importState, exportState, clock, rc) endif !----------------------------------------------------------------------- !---- open and close dummy file in restart dir to check if dir exists -- - +! if (mpp_pe() == 0 ) then open( newunit=unit, file='RESTART/file', iostat=stat ) if (stat == 0) then @@ -918,7 +921,8 @@ subroutine fcst_initialize(fcst_comp, importState, exportState, clock, rc) call ESMF_InfoGetFromHost(fcstGridComp(n), info=info, rc=rc); ESMF_ERR_ABORT(rc) call ESMF_InfoSet(info, key="layout", values=layout, rc=rc); ESMF_ERR_ABORT(rc) call ESMF_InfoSet(info, key="tilesize", value=Atmos%mlon, rc=rc); ESMF_ERR_ABORT(rc) - + call ESMF_InfoSet(info, key="nx", value=nx, rc=rc); ESMF_ERR_ABORT(rc) + call ESMF_InfoSet(info, key="ny", value=ny, rc=rc); ESMF_ERR_ABORT(rc) call ESMF_GridCompSetServices(fcstGridComp(n), SetServicesNest, userrc=urc, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return if (ESMF_LogFoundError(rcToCheck=urc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__, rcToReturn=rc)) return From bf9587bf84e2069852d001b948e134b9f59f5478 Mon Sep 17 00:00:00 2001 From: "larissa.reames@noaa.gov" Date: Wed, 22 Jan 2025 15:07:03 +0000 Subject: [PATCH 55/57] Modified logic in SetServices to combine grid_type=4 and nests. --- module_fcst_grid_comp.F90 | 67 +++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/module_fcst_grid_comp.F90 b/module_fcst_grid_comp.F90 index 3820b1ca3..9fccd4beb 100644 --- a/module_fcst_grid_comp.F90 +++ b/module_fcst_grid_comp.F90 @@ -172,8 +172,6 @@ subroutine SetServicesNest(nest, rc) character(3) :: myGridStr type(ESMF_DistGrid) :: distgrid type(ESMF_Array) :: array - character(256) :: gridfile - type(FmsNetcdfFile_t) :: fileobj rc = ESMF_SUCCESS call ESMF_GridCompSetEntryPoint(nest, ESMF_METHOD_INITIALIZE, userRoutine=init_dyn_fb, phase=1, rc=rc) @@ -203,37 +201,38 @@ subroutine SetServicesNest(nest, rc) grid_typekind = ESMF_TYPEKIND_R8 endif - if (Atmos%grid_type==4) then - gridfile = "grid_spec.nc" ! default - - if (open_file(fileobj, "INPUT/grid_spec.nc", "read")) then - if (variable_exists(fileobj, "atm_mosaic_file")) then - call read_data(fileobj, "atm_mosaic_file", gridfile) - endif - call close_file(fileobj) - endif - - call ESMF_InfoGet(info, key="nx", value=nx, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - call ESMF_InfoGet(info, key="ny", value=ny, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - grid = ESMF_GridCreateNoPeriDim( regDecomp=(/layout(1),layout(2)/), & - minIndex=(/1,1/), & - maxIndex=(/nx,ny/), & - gridAlign=(/-1,-1/), & - coordSys=ESMF_COORDSYS_SPH_RAD, & - coordTypeKind=grid_typekind, & - decompflag=(/ESMF_DECOMP_SYMMEDGEMAX,ESMF_DECOMP_SYMMEDGEMAX/), & - name="fcst_grid", & - indexflag=ESMF_INDEX_DELOCAL, & - rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU,line=__LINE__, file=__FILE__)) return - call mpp_error(NOTE, 'after create fcst grid for doubly periodic with INPUT/'//trim(gridfile)) - - call addLsmask2grid(grid, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU,line=__LINE__, file=__FILE__)) return - - elseif (trim(name)=="global") then +! if (Atmos%grid_type==4) then +! gridfile = "grid_spec.nc" ! default +! +! if (open_file(fileobj, "INPUT/grid_spec.nc", "read")) then +! if (variable_exists(fileobj, "atm_mosaic_file")) then +! call read_data(fileobj, "atm_mosaic_file", gridfile) +! endif +! call close_file(fileobj) +! endif +! +! call ESMF_InfoGet(info, key="nx", value=nx, rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return +! call ESMF_InfoGet(info, key="ny", value=ny, rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return +! grid = ESMF_GridCreateNoPeriDim( regDecomp=(/layout(1),layout(2)/), & +! minIndex=(/1,1/), & +! maxIndex=(/nx,ny/), & +! gridAlign=(/-1,-1/), & +! coordSys=ESMF_COORDSYS_SPH_RAD, & +! coordTypeKind=grid_typekind, & +! decompflag=(/ESMF_DECOMP_SYMMEDGEMAX,ESMF_DECOMP_SYMMEDGEMAX/), & +! name="fcst_grid", & +! indexflag=ESMF_INDEX_DELOCAL, & +! rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU,line=__LINE__, file=__FILE__)) return +! call mpp_error(NOTE, 'after create fcst grid for doubly periodic with INPUT/'//trim(gridfile)) +! +! call addLsmask2grid(grid, rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU,line=__LINE__, file=__FILE__)) return +! +! elseif (trim(name)=="global") then + if (trim(name) == "global" .and. Atmos%grid_type /= 4) then ! global domain call ESMF_InfoGet(info, key="tilesize", value=tilesize, rc=rc); ESMF_ERR_ABORT(rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return @@ -251,7 +250,7 @@ subroutine SetServicesNest(nest, rc) name="fcst_grid", rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return else - ! nest domain + ! nest and doubly periodic domain call ESMF_InfoGet(info, key="nx", value=nx, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return call ESMF_InfoGet(info, key="ny", value=ny, rc=rc) From 3067624df152bee4fd7ee0344e60cab2d61bd589 Mon Sep 17 00:00:00 2001 From: "larissa.reames@noaa.gov" Date: Wed, 22 Jan 2025 15:08:30 +0000 Subject: [PATCH 56/57] Removed commented lines. --- module_fcst_grid_comp.F90 | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/module_fcst_grid_comp.F90 b/module_fcst_grid_comp.F90 index 9fccd4beb..603ee43dc 100644 --- a/module_fcst_grid_comp.F90 +++ b/module_fcst_grid_comp.F90 @@ -201,37 +201,6 @@ subroutine SetServicesNest(nest, rc) grid_typekind = ESMF_TYPEKIND_R8 endif -! if (Atmos%grid_type==4) then -! gridfile = "grid_spec.nc" ! default -! -! if (open_file(fileobj, "INPUT/grid_spec.nc", "read")) then -! if (variable_exists(fileobj, "atm_mosaic_file")) then -! call read_data(fileobj, "atm_mosaic_file", gridfile) -! endif -! call close_file(fileobj) -! endif -! -! call ESMF_InfoGet(info, key="nx", value=nx, rc=rc) -! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return -! call ESMF_InfoGet(info, key="ny", value=ny, rc=rc) -! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return -! grid = ESMF_GridCreateNoPeriDim( regDecomp=(/layout(1),layout(2)/), & -! minIndex=(/1,1/), & -! maxIndex=(/nx,ny/), & -! gridAlign=(/-1,-1/), & -! coordSys=ESMF_COORDSYS_SPH_RAD, & -! coordTypeKind=grid_typekind, & -! decompflag=(/ESMF_DECOMP_SYMMEDGEMAX,ESMF_DECOMP_SYMMEDGEMAX/), & -! name="fcst_grid", & -! indexflag=ESMF_INDEX_DELOCAL, & -! rc=rc) -! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU,line=__LINE__, file=__FILE__)) return -! call mpp_error(NOTE, 'after create fcst grid for doubly periodic with INPUT/'//trim(gridfile)) -! -! call addLsmask2grid(grid, rc=rc) -! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU,line=__LINE__, file=__FILE__)) return -! -! elseif (trim(name)=="global") then if (trim(name) == "global" .and. Atmos%grid_type /= 4) then ! global domain call ESMF_InfoGet(info, key="tilesize", value=tilesize, rc=rc); ESMF_ERR_ABORT(rc) From b96c58fde39db85be0993d1766d015c095b0e3b4 Mon Sep 17 00:00:00 2001 From: "larissa.reames@noaa.gov" Date: Mon, 27 Jan 2025 19:50:34 +0000 Subject: [PATCH 57/57] Update changes to atmos_cubed_sphere --- atmos_cubed_sphere | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index fd0cf79ed..69c51edea 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit fd0cf79ed3576bc56778173062d72fdfbd1d695c +Subproject commit 69c51edead532ccb6c8f34ad1d09ff2bd6558973