From f7b2157657124e1b92cdaa3d5ee436d1b9949187 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 15 Sep 2021 09:45:56 -0600 Subject: [PATCH 01/19] Update .gitmodules and submodule pointer for ccpp-physics for code review and testing --- .gitmodules | 6 ++++-- ccpp/physics | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index afe6f27dd..041b351d1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,5 +8,7 @@ branch = main [submodule "ccpp/physics"] path = ccpp/physics - url = https://github.com/NCAR/ccpp-physics - branch = main + #url = https://github.com/NCAR/ccpp-physics + #branch = main + url = https://github.com/climbfuji/ccpp-physics + branch = vegetation_soil_slope_type_integer diff --git a/ccpp/physics b/ccpp/physics index 84c6144f5..074c1b051 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 84c6144f5412fe0f1ac88e377516f8df5d00f3a7 +Subproject commit 074c1b0516db67b9f56dacb0d300fe2d4ecb8c70 From 1e9f49d1a00b1d4c43f36777a6048aaedbff34dc Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 15 Sep 2021 09:53:55 -0600 Subject: [PATCH 02/19] Make real vegetation, slope and soil type integers, remove unnecessary interstitial arrays --- atmos_model.F90 | 4 +- ccpp/data/GFS_typedefs.F90 | 26 ++--- ccpp/data/GFS_typedefs.meta | 33 ++---- ccpp/driver/GFS_diagnostics.F90 | 8 +- cpl/module_block_data.F90 | 35 +++++++ io/FV3GFS_io.F90 | 172 +++++++++++++++++--------------- 6 files changed, 148 insertions(+), 130 deletions(-) diff --git a/atmos_model.F90 b/atmos_model.F90 index 1bec14f0b..f82a8bc2e 100644 --- a/atmos_model.F90 +++ b/atmos_model.F90 @@ -2325,7 +2325,7 @@ subroutine assign_importdata(jdat, rc) do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - GFS_data(nb)%Sfcprop%vtype(ix) = datar82d(i-isc+1,j-jsc+1) + GFS_data(nb)%Sfcprop%vtype(ix) = int(datar82d(i-isc+1,j-jsc+1)) enddo enddo endif @@ -2340,7 +2340,7 @@ subroutine assign_importdata(jdat, rc) do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - GFS_data(nb)%Sfcprop%stype(ix) = datar82d(i-isc+1,j-jsc+1) + GFS_data(nb)%Sfcprop%stype(ix) = int(datar82d(i-isc+1,j-jsc+1)) enddo enddo endif diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index fb456245b..4ea9ea15b 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -263,13 +263,13 @@ module GFS_typedefs real (kind=kind_phys), pointer :: facwf (:) => null() !< fractional coverage with weak cosz dependency !--- In (physics only) - real (kind=kind_phys), pointer :: slope (:) => null() !< sfc slope type for lsm + integer, pointer :: slope (:) => null() !< sfc slope type for lsm real (kind=kind_phys), pointer :: shdmin (:) => null() !< min fractional coverage of green veg real (kind=kind_phys), pointer :: shdmax (:) => null() !< max fractnl cover of green veg (not used) real (kind=kind_phys), pointer :: tg3 (:) => null() !< deep soil temperature real (kind=kind_phys), pointer :: vfrac (:) => null() !< vegetation fraction - real (kind=kind_phys), pointer :: vtype (:) => null() !< vegetation type - real (kind=kind_phys), pointer :: stype (:) => null() !< soil type + integer, pointer :: vtype (:) => null() !< vegetation type + integer, pointer :: stype (:) => null() !< soil type real (kind=kind_phys), pointer :: uustar (:) => null() !< boundary layer parameter real (kind=kind_phys), pointer :: oro (:) => null() !< orography real (kind=kind_phys), pointer :: oro_uf (:) => null() !< unfiltered orography @@ -2041,7 +2041,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: sigmatot(:,:) => null() !< logical :: skip_macro !< real (kind=kind_phys), pointer :: slc_save(:,:) => null() !< - integer, pointer :: slopetype(:) => null() !< real (kind=kind_phys), pointer :: smcmax(:) => null() !< real (kind=kind_phys), pointer :: smc_save(:,:) => null() !< real (kind=kind_phys), pointer :: snowc(:) => null() !< @@ -2057,7 +2056,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: snowmp(:) => null() !< real (kind=kind_phys), pointer :: snowmt(:) => null() !< real (kind=kind_phys), pointer :: soilm_in_m(:) => null() !< - integer, pointer :: soiltype(:) => null() !< real (kind=kind_phys), pointer :: stc_save(:,:) => null() !< real (kind=kind_phys), pointer :: stress(:) => null() !< real (kind=kind_phys), pointer :: stress_ice(:) => null() !< @@ -2094,7 +2092,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: vegf1d(:) => null() !< real (kind=kind_phys) :: lndp_vgf !< - integer, pointer :: vegtype(:) => null() !< real (kind=kind_phys), pointer :: w_upi(:,:) => null() !< real (kind=kind_phys), pointer :: wcbmax(:) => null() !< ! real (kind=kind_phys), pointer :: weasd_water(:) => null() !< @@ -2448,14 +2445,14 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%hflx (IM)) allocate (Sfcprop%qss (IM)) - Sfcprop%slope = clear_val + Sfcprop%slope = zero Sfcprop%shdmin = clear_val Sfcprop%shdmax = clear_val Sfcprop%snoalb = clear_val Sfcprop%tg3 = clear_val Sfcprop%vfrac = clear_val - Sfcprop%vtype = clear_val - Sfcprop%stype = clear_val + Sfcprop%vtype = zero + Sfcprop%stype = zero Sfcprop%uustar = clear_val Sfcprop%oro = clear_val Sfcprop%oro_uf = clear_val @@ -7134,14 +7131,12 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%sigmaf (IM)) allocate (Interstitial%sigmafrac (IM,Model%levs)) allocate (Interstitial%sigmatot (IM,Model%levs)) - allocate (Interstitial%slopetype (IM)) allocate (Interstitial%snowc (IM)) allocate (Interstitial%snowd_ice (IM)) ! allocate (Interstitial%snowd_land (IM)) ! allocate (Interstitial%snowd_water (IM)) allocate (Interstitial%snohf (IM)) allocate (Interstitial%snowmt (IM)) - allocate (Interstitial%soiltype (IM)) allocate (Interstitial%stress (IM)) allocate (Interstitial%stress_ice (IM)) allocate (Interstitial%stress_land (IM)) @@ -7167,7 +7162,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%uustar_water (IM)) allocate (Interstitial%vdftra (IM,Model%levs,Interstitial%nvdiff)) !GJF first dimension was set as 'IX' in GFS_physics_driver allocate (Interstitial%vegf1d (IM)) - allocate (Interstitial%vegtype (IM)) allocate (Interstitial%wcbmax (IM)) allocate (Interstitial%weasd_ice (IM)) ! allocate (Interstitial%weasd_land (IM)) @@ -7870,14 +7864,12 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%sigmaf = clear_val Interstitial%sigmafrac = clear_val Interstitial%sigmatot = clear_val - Interstitial%slopetype = 0 Interstitial%snowc = clear_val Interstitial%snowd_ice = huge ! Interstitial%snowd_land = huge ! Interstitial%snowd_water = huge Interstitial%snohf = clear_val Interstitial%snowmt = clear_val - Interstitial%soiltype = 0 Interstitial%stress = clear_val Interstitial%stress_ice = huge Interstitial%stress_land = huge @@ -7900,7 +7892,6 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%vdftra = clear_val Interstitial%vegf1d = clear_val Interstitial%lndp_vgf = clear_val - Interstitial%vegtype = 0 Interstitial%wcbmax = clear_val Interstitial%weasd_ice = huge ! Interstitial%weasd_land = huge @@ -8255,14 +8246,12 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%sigmaf ) = ', sum(Interstitial%sigmaf ) write (0,*) 'sum(Interstitial%sigmafrac ) = ', sum(Interstitial%sigmafrac ) write (0,*) 'sum(Interstitial%sigmatot ) = ', sum(Interstitial%sigmatot ) - write (0,*) 'sum(Interstitial%slopetype ) = ', sum(Interstitial%slopetype ) write (0,*) 'sum(Interstitial%snowc ) = ', sum(Interstitial%snowc ) write (0,*) 'sum(Interstitial%snowd_ice ) = ', sum(Interstitial%snowd_ice ) ! write (0,*) 'sum(Interstitial%snowd_land ) = ', sum(Interstitial%snowd_land ) ! write (0,*) 'sum(Interstitial%snowd_water ) = ', sum(Interstitial%snowd_water ) write (0,*) 'sum(Interstitial%snohf ) = ', sum(Interstitial%snohf ) write (0,*) 'sum(Interstitial%snowmt ) = ', sum(Interstitial%snowmt ) - write (0,*) 'sum(Interstitial%soiltype ) = ', sum(Interstitial%soiltype ) write (0,*) 'sum(Interstitial%stress ) = ', sum(Interstitial%stress ) write (0,*) 'sum(Interstitial%stress_ice ) = ', sum(Interstitial%stress_ice ) write (0,*) 'sum(Interstitial%stress_land ) = ', sum(Interstitial%stress_land ) @@ -8288,11 +8277,8 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%uustar_water ) = ', sum(Interstitial%uustar_water ) write (0,*) 'sum(Interstitial%vdftra ) = ', sum(Interstitial%vdftra ) write (0,*) 'sum(Interstitial%vegf1d ) = ', sum(Interstitial%vegf1d ) - write (0,*) 'sum(Interstitial%vegtype ) = ', sum(Interstitial%vegtype ) write (0,*) 'sum(Interstitial%wcbmax ) = ', sum(Interstitial%wcbmax ) write (0,*) 'sum(Interstitial%weasd_ice ) = ', sum(Interstitial%weasd_ice ) -! write (0,*) 'sum(Interstitial%weasd_land ) = ', sum(Interstitial%weasd_land ) -! write (0,*) 'sum(Interstitial%weasd_water ) = ', sum(Interstitial%weasd_water ) write (0,*) 'sum(Interstitial%wind ) = ', sum(Interstitial%wind ) write (0,*) 'sum(Interstitial%work1 ) = ', sum(Interstitial%work1 ) write (0,*) 'sum(Interstitial%work2 ) = ', sum(Interstitial%work2 ) diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index c7522a0e3..c2f3294e5 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -697,12 +697,11 @@ type = real kind = kind_phys [slope] - standard_name = surface_slope_classification_real + standard_name = surface_slope_classification long_name = sfc slope type for lsm units = index dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys + type = integer [shdmin] standard_name = min_vegetation_area_fraction long_name = min fractional coverage of green vegetation @@ -732,19 +731,17 @@ type = real kind = kind_phys [vtype] - standard_name = vegetation_type_classification_real + standard_name = vegetation_type_classification long_name = vegetation type for lsm units = index dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys + type = integer [stype] - standard_name = soil_type_classification_real + standard_name = soil_type_classification long_name = soil type for lsm units = index dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys + type = integer [uustar] standard_name = surface_friction_velocity long_name = boundary layer parameter @@ -9519,12 +9516,6 @@ type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noah_wrfv4_land_surface_scheme) -[slopetype] - standard_name = surface_slope_classification - long_name = surface slope type at each grid cell - units = index - dimensions = (horizontal_loop_extent) - type = integer [smcmax] standard_name = soil_porosity long_name = volumetric soil porosity @@ -9625,12 +9616,6 @@ type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noah_wrfv4_land_surface_scheme) -[soiltype] - standard_name = soil_type_classification - long_name = soil type at each grid cell - units = index - dimensions = (horizontal_loop_extent) - type = integer [stc_save] standard_name = soil_temperature_save long_name = soil temperature before entering a physics scheme @@ -9877,12 +9862,6 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys -[vegtype] - standard_name = vegetation_type_classification - long_name = vegetation type at each grid cell - units = index - dimensions = (horizontal_loop_extent) - type = integer [w_upi] standard_name = vertical_velocity_for_updraft long_name = vertical velocity for updraft diff --git a/ccpp/driver/GFS_diagnostics.F90 b/ccpp/driver/GFS_diagnostics.F90 index 23c830a5c..5a3e41f2d 100644 --- a/ccpp/driver/GFS_diagnostics.F90 +++ b/ccpp/driver/GFS_diagnostics.F90 @@ -20,6 +20,7 @@ module GFS_diagnostics !--- private data type definition --- type data_subtype + integer, dimension(:), pointer :: int2 => NULL() real(kind=kind_phys), dimension(:), pointer :: var2 => NULL() real(kind=kind_phys), dimension(:), pointer :: var21 => NULL() real(kind=kind_phys), dimension(:,:), pointer :: var3 => NULL() @@ -113,6 +114,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ! ExtDiag%mask [char*64 ] description of mask-type ! ! ExtDiag%intpl_method [char*64 ] method to use for interpolation ! ! ExtDiag%cnvfac [real*8 ] conversion factor to output specified units ! +! ExtDiag%data(nb)%int2(:) [integer ] pointer to 2D data [=> null() for a 3D field] ! ! ExtDiag%data(nb)%var2(:) [real*8 ] pointer to 2D data [=> null() for a 3D field] ! ! ExtDiag%data(nb)%var21(:) [real*8 ] pointer to 2D data for ratios ! ! ExtDiag%data(nb)%var3(:,:) [real*8 ] pointer to 3D data [=> null() for a 2D field] ! @@ -2610,7 +2612,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_sfc' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%slope(:) + ExtDiag(idx)%data(nb)%int2 => Sfcprop(nb)%slope(:) enddo idx = idx + 1 @@ -2724,7 +2726,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_sfc' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%stype(:) + ExtDiag(idx)%data(nb)%int2 => Sfcprop(nb)%stype(:) enddo idx = idx + 1 @@ -2819,7 +2821,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_sfc' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => sfcprop(nb)%vtype(:) + ExtDiag(idx)%data(nb)%int2 => sfcprop(nb)%vtype(:) enddo idx = idx + 1 diff --git a/cpl/module_block_data.F90 b/cpl/module_block_data.F90 index f2f6fd4e8..02ef0ebc8 100644 --- a/cpl/module_block_data.F90 +++ b/cpl/module_block_data.F90 @@ -8,6 +8,7 @@ module module_block_data implicit none interface block_data_copy + module procedure block_copy_1d_i4_to_2d_r8 module procedure block_copy_1d_to_2d_r8 module procedure block_copy_2d_to_2d_r8 module procedure block_copy_2d_to_3d_r8 @@ -50,6 +51,40 @@ module module_block_data ! -- copy: 1D to 2D + subroutine block_copy_1d_i4_to_2d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, rc) + + ! -- arguments + real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) + integer, pointer :: source_ptr(:) + type(block_control_type), intent(in) :: block + integer, intent(in) :: block_index + real(kind_phys), optional, intent(in) :: scale_factor + integer, optional, intent(out) :: rc + + ! -- local variables + integer :: localrc + integer :: i, ib, ix, j, jb + real(kind_phys) :: factor + + ! -- begin + localrc = ESMF_RC_PTR_NOTALLOC + if (associated(destin_ptr) .and. associated(source_ptr)) then + factor = 1._kind_phys + if (present(scale_factor)) factor = scale_factor + do ix = 1, block%blksz(block_index) + ib = block%index(block_index)%ii(ix) + jb = block%index(block_index)%jj(ix) + i = ib - block%isc + 1 + j = jb - block%jsc + 1 + destin_ptr(i,j) = factor * real(source_ptr(ix), kind=kind_phys) + enddo + localrc = ESMF_SUCCESS + end if + + if (present(rc)) rc = localrc + + end subroutine block_copy_1d_i4_to_2d_r8 + subroutine block_copy_1d_to_2d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, rc) ! -- arguments diff --git a/io/FV3GFS_io.F90 b/io/FV3GFS_io.F90 index ce6420fa4..8b840c69b 100644 --- a/io/FV3GFS_io.F90 +++ b/io/FV3GFS_io.F90 @@ -215,13 +215,13 @@ subroutine FV3GFS_GFS_checksum (Model, GFS_Data, Atm_block) temp2d(i,j,14) = GFS_Data(nb)%Sfcprop%alnwf(ix) temp2d(i,j,15) = GFS_Data(nb)%Sfcprop%facsf(ix) temp2d(i,j,16) = GFS_Data(nb)%Sfcprop%facwf(ix) - temp2d(i,j,17) = GFS_Data(nb)%Sfcprop%slope(ix) + temp2d(i,j,17) = real(GFS_Data(nb)%Sfcprop%slope(ix), kind=kind_phys) temp2d(i,j,18) = GFS_Data(nb)%Sfcprop%shdmin(ix) temp2d(i,j,19) = GFS_Data(nb)%Sfcprop%shdmax(ix) temp2d(i,j,20) = GFS_Data(nb)%Sfcprop%tg3(ix) temp2d(i,j,21) = GFS_Data(nb)%Sfcprop%vfrac(ix) - temp2d(i,j,22) = GFS_Data(nb)%Sfcprop%vtype(ix) - temp2d(i,j,23) = GFS_Data(nb)%Sfcprop%stype(ix) + temp2d(i,j,22) = real(GFS_Data(nb)%Sfcprop%vtype(ix), kind=kind_phys) + temp2d(i,j,23) = real(GFS_Data(nb)%Sfcprop%stype(ix), kind=kind_phys) temp2d(i,j,24) = GFS_Data(nb)%Sfcprop%uustar(ix) temp2d(i,j,25) = GFS_Data(nb)%Sfcprop%oro(ix) temp2d(i,j,26) = GFS_Data(nb)%Sfcprop%oro_uf(ix) @@ -1142,8 +1142,8 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta Sfcprop(nb)%f10m(ix) = sfc_var2(i,j,14) !--- f10m Sfcprop(nb)%t2m(ix) = sfc_var2(i,j,15) !--- t2m Sfcprop(nb)%q2m(ix) = sfc_var2(i,j,16) !--- q2m - Sfcprop(nb)%vtype(ix) = sfc_var2(i,j,17) !--- vtype - Sfcprop(nb)%stype(ix) = sfc_var2(i,j,18) !--- stype + Sfcprop(nb)%vtype(ix) = int(sfc_var2(i,j,17)) !--- vtype + Sfcprop(nb)%stype(ix) = int(sfc_var2(i,j,18)) !--- stype Sfcprop(nb)%uustar(ix) = sfc_var2(i,j,19) !--- uustar Sfcprop(nb)%ffmm(ix) = sfc_var2(i,j,20) !--- ffmm Sfcprop(nb)%ffhh(ix) = sfc_var2(i,j,21) !--- ffhh @@ -1155,7 +1155,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta Sfcprop(nb)%snowd(ix) = sfc_var2(i,j,27) !--- snowd (snwdph in the file) Sfcprop(nb)%shdmin(ix) = sfc_var2(i,j,28) !--- shdmin Sfcprop(nb)%shdmax(ix) = sfc_var2(i,j,29) !--- shdmax - Sfcprop(nb)%slope(ix) = sfc_var2(i,j,30) !--- slope + Sfcprop(nb)%slope(ix) = int(sfc_var2(i,j,30)) !--- slope Sfcprop(nb)%snoalb(ix) = sfc_var2(i,j,31) !--- snoalb Sfcprop(nb)%sncovr(ix) = sfc_var2(i,j,32) !--- sncovr Sfcprop(nb)%snodl(ix) = sfc_var2(i,j,33) !--- snodl (snowd on land portion of a cell) @@ -1183,7 +1183,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta Sfcprop(nb)%zorlwav(ix) = Sfcprop(nb)%zorlw(ix) endif - if (nint(Sfcprop(nb)%stype(ix)) == 14 .or. int(Sfcprop(nb)%stype(ix)+0.5) <= 0) then + if (Sfcprop(nb)%stype(ix) == 14 .or. Sfcprop(nb)%stype(ix) <= 0) then Sfcprop(nb)%landfrac(ix) = zero Sfcprop(nb)%stype(ix) = 0 if (Sfcprop(nb)%lakefrac(ix) > zero) then @@ -1194,7 +1194,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta if (Model%frac_grid) then if (Sfcprop(nb)%landfrac(ix) > -999.0_r8) then Sfcprop(nb)%slmsk(ix) = ceiling(Sfcprop(nb)%landfrac(ix)-1.0e-6) - if (Sfcprop(nb)%slmsk(ix) == 1 .and. nint(Sfcprop(nb)%stype(ix)) == 14) & + if (Sfcprop(nb)%slmsk(ix) == 1 .and. Sfcprop(nb)%stype(ix) == 14) & Sfcprop(nb)%slmsk(ix) = 0 if (Sfcprop(nb)%lakefrac(ix) > zero) then Sfcprop(nb)%oceanfrac(ix) = zero ! lake & ocean don't coexist in a cell @@ -1245,7 +1245,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta if (Sfcprop(nb)%fice(ix) >= Model%min_lakeice) Sfcprop(nb)%slmsk(ix) = 2.0 else Sfcprop(nb)%slmsk(ix) = nint(Sfcprop(nb)%landfrac(ix)) - if (Sfcprop(nb)%stype(ix) <= 0 .or. nint(Sfcprop(nb)%stype(ix)) == 14) & + if (Sfcprop(nb)%stype(ix) <= 0 .or. Sfcprop(nb)%stype(ix) == 14) & Sfcprop(nb)%slmsk(ix) = zero if (nint(Sfcprop(nb)%slmsk(ix)) == 0) then Sfcprop(nb)%oceanfrac(ix) = one @@ -1260,7 +1260,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta endif else if (nint(Sfcprop(nb)%slmsk(ix)) == 1 .and. Sfcprop(nb)%stype(ix) > 0 & - .and. nint(Sfcprop(nb)%stype(ix)) /= 14) then + .and. Sfcprop(nb)%stype(ix) /= 14) then Sfcprop(nb)%landfrac(ix) = one Sfcprop(nb)%lakefrac(ix) = zero Sfcprop(nb)%oceanfrac(ix) = zero @@ -2034,8 +2034,8 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta sfc_var2(i,j,14) = Sfcprop(nb)%f10m(ix) !--- f10m sfc_var2(i,j,15) = Sfcprop(nb)%t2m(ix) !--- t2m sfc_var2(i,j,16) = Sfcprop(nb)%q2m(ix) !--- q2m - sfc_var2(i,j,17) = Sfcprop(nb)%vtype(ix) !--- vtype - sfc_var2(i,j,18) = Sfcprop(nb)%stype(ix) !--- stype + sfc_var2(i,j,17) = real(Sfcprop(nb)%vtype(ix), kind=kind_phys) !--- vtype + sfc_var2(i,j,18) = real(Sfcprop(nb)%stype(ix), kind=kind_phys) !--- stype sfc_var2(i,j,19) = Sfcprop(nb)%uustar(ix)!--- uustar sfc_var2(i,j,20) = Sfcprop(nb)%ffmm(ix) !--- ffmm sfc_var2(i,j,21) = Sfcprop(nb)%ffhh(ix) !--- ffhh @@ -2047,7 +2047,7 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta sfc_var2(i,j,27) = Sfcprop(nb)%snowd(ix) !--- snowd (snwdph in the file) sfc_var2(i,j,28) = Sfcprop(nb)%shdmin(ix)!--- shdmin sfc_var2(i,j,29) = Sfcprop(nb)%shdmax(ix)!--- shdmax - sfc_var2(i,j,30) = Sfcprop(nb)%slope(ix) !--- slope + sfc_var2(i,j,30) = real(Sfcprop(nb)%slope(ix), kind=kind_phys) !--- slope sfc_var2(i,j,31) = Sfcprop(nb)%snoalb(ix)!--- snoalb sfc_var2(i,j,32) = Sfcprop(nb)%sncovr(ix) !--- sncovr sfc_var2(i,j,33) = Sfcprop(nb)%snodl(ix) !--- snodl (snowd on land) @@ -2638,8 +2638,8 @@ subroutine fv3gfs_diag_output(time, diag, atm_block, nx, ny, levs, ntcw, ntoz, & endif endif if (diag(idx)%axes == 2) then - if (trim(diag(idx)%mask) == 'positive_flux') then - !--- albedos are actually a ratio of two radiation surface properties + ! Integer data + int_or_real: if (associated(Diag(idx)%data(1)%int2)) then var2(1:nx,1:ny) = 0._kind_phys do j = 1, ny jj = j + jsc -1 @@ -2647,92 +2647,108 @@ subroutine fv3gfs_diag_output(time, diag, atm_block, nx, ny, levs, ntcw, ntoz, & ii = i + isc -1 nb = Atm_block%blkno(ii,jj) ix = Atm_block%ixp(ii,jj) - if (Diag(idx)%data(nb)%var21(ix) > 0._kind_phys) & - var2(i,j) = max(0._kind_phys,min(1._kind_phys,Diag(idx)%data(nb)%var2(ix)/Diag(idx)%data(nb)%var21(ix)))*lcnvfac + var2(i,j) = real(Diag(idx)%data(nb)%int2(ix), kind=kind_phys) enddo enddo - elseif (trim(Diag(idx)%mask) == 'land_ice_only') then - !--- need to "mask" gflux to output valid data over land/ice only - var2(1:nx,1:ny) = missing_value - do j = 1, ny - jj = j + jsc -1 - do i = 1, nx - ii = i + isc -1 - nb = Atm_block%blkno(ii,jj) - ix = Atm_block%ixp(ii,jj) - if (Diag(idx)%data(nb)%var21(ix) /= 0) var2(i,j) = Diag(idx)%data(nb)%var2(ix)*lcnvfac + call store_data(Diag(idx)%id, var2, Time, idx, Diag(idx)%intpl_method, Diag(idx)%name) + ! Real data + else ! int_or_real + if (trim(diag(idx)%mask) == 'positive_flux') then + !--- albedos are actually a ratio of two radiation surface properties + var2(1:nx,1:ny) = 0._kind_phys + do j = 1, ny + jj = j + jsc -1 + do i = 1, nx + ii = i + isc -1 + nb = Atm_block%blkno(ii,jj) + ix = Atm_block%ixp(ii,jj) + if (Diag(idx)%data(nb)%var21(ix) > 0._kind_phys) & + var2(i,j) = max(0._kind_phys,min(1._kind_phys,Diag(idx)%data(nb)%var2(ix)/Diag(idx)%data(nb)%var21(ix)))*lcnvfac + enddo enddo - enddo - elseif (trim(Diag(idx)%mask) == 'land_only') then - !--- need to "mask" soilm to have value only over land - var2(1:nx,1:ny) = missing_value - do j = 1, ny - jj = j + jsc -1 - do i = 1, nx - ii = i + isc -1 - nb = Atm_block%blkno(ii,jj) - ix = Atm_block%ixp(ii,jj) - if (Diag(idx)%data(nb)%var21(ix) == 1) var2(i,j) = Diag(idx)%data(nb)%var2(ix)*lcnvfac + elseif (trim(Diag(idx)%mask) == 'land_ice_only') then + !--- need to "mask" gflux to output valid data over land/ice only + var2(1:nx,1:ny) = missing_value + do j = 1, ny + jj = j + jsc -1 + do i = 1, nx + ii = i + isc -1 + nb = Atm_block%blkno(ii,jj) + ix = Atm_block%ixp(ii,jj) + if (Diag(idx)%data(nb)%var21(ix) /= 0) var2(i,j) = Diag(idx)%data(nb)%var2(ix)*lcnvfac + enddo enddo - enddo - elseif (trim(Diag(idx)%mask) == 'cldmask') then - !--- need to "mask" soilm to have value only over land - var2(1:nx,1:ny) = missing_value - do j = 1, ny - jj = j + jsc -1 - do i = 1, nx - ii = i + isc -1 - nb = Atm_block%blkno(ii,jj) - ix = Atm_block%ixp(ii,jj) - if (Diag(idx)%data(nb)%var21(ix)*100. > 0.5) var2(i,j) = Diag(idx)%data(nb)%var2(ix)*lcnvfac + elseif (trim(Diag(idx)%mask) == 'land_only') then + !--- need to "mask" soilm to have value only over land + var2(1:nx,1:ny) = missing_value + do j = 1, ny + jj = j + jsc -1 + do i = 1, nx + ii = i + isc -1 + nb = Atm_block%blkno(ii,jj) + ix = Atm_block%ixp(ii,jj) + if (Diag(idx)%data(nb)%var21(ix) == 1) var2(i,j) = Diag(idx)%data(nb)%var2(ix)*lcnvfac + enddo enddo - enddo - elseif (trim(Diag(idx)%mask) == 'cldmask_ratio') then - !--- need to "mask" soilm to have value only over land - var2(1:nx,1:ny) = missing_value - do j = 1, ny - jj = j + jsc -1 - do i = 1, nx - ii = i + isc -1 - nb = Atm_block%blkno(ii,jj) - ix = Atm_block%ixp(ii,jj) - if (Diag(idx)%data(nb)%var21(ix)*100.*lcnvfac > 0.5) var2(i,j) = Diag(idx)%data(nb)%var2(ix)/ & - Diag(idx)%data(nb)%var21(ix) + elseif (trim(Diag(idx)%mask) == 'cldmask') then + !--- need to "mask" soilm to have value only over land + var2(1:nx,1:ny) = missing_value + do j = 1, ny + jj = j + jsc -1 + do i = 1, nx + ii = i + isc -1 + nb = Atm_block%blkno(ii,jj) + ix = Atm_block%ixp(ii,jj) + if (Diag(idx)%data(nb)%var21(ix)*100. > 0.5) var2(i,j) = Diag(idx)%data(nb)%var2(ix)*lcnvfac + enddo enddo - enddo - elseif (trim(Diag(idx)%mask) == 'pseudo_ps') then - if ( use_wrtgridcomp_output ) then + elseif (trim(Diag(idx)%mask) == 'cldmask_ratio') then + !--- need to "mask" soilm to have value only over land + var2(1:nx,1:ny) = missing_value do j = 1, ny jj = j + jsc -1 do i = 1, nx ii = i + isc -1 nb = Atm_block%blkno(ii,jj) ix = Atm_block%ixp(ii,jj) - var2(i,j) = (Diag(idx)%data(nb)%var2(ix)/stndrd_atmos_ps)**(rdgas/grav*stndrd_atmos_lapse) + if (Diag(idx)%data(nb)%var21(ix)*100.*lcnvfac > 0.5) var2(i,j) = Diag(idx)%data(nb)%var2(ix)/ & + Diag(idx)%data(nb)%var21(ix) enddo enddo - else + elseif (trim(Diag(idx)%mask) == 'pseudo_ps') then + if ( use_wrtgridcomp_output ) then + do j = 1, ny + jj = j + jsc -1 + do i = 1, nx + ii = i + isc -1 + nb = Atm_block%blkno(ii,jj) + ix = Atm_block%ixp(ii,jj) + var2(i,j) = (Diag(idx)%data(nb)%var2(ix)/stndrd_atmos_ps)**(rdgas/grav*stndrd_atmos_lapse) + enddo + enddo + else + do j = 1, ny + jj = j + jsc -1 + do i = 1, nx + ii = i + isc -1 + nb = Atm_block%blkno(ii,jj) + ix = Atm_block%ixp(ii,jj) + var2(i,j) = Diag(idx)%data(nb)%var2(ix) + enddo + enddo + endif + elseif (trim(Diag(idx)%mask) == '') then do j = 1, ny jj = j + jsc -1 do i = 1, nx ii = i + isc -1 nb = Atm_block%blkno(ii,jj) ix = Atm_block%ixp(ii,jj) - var2(i,j) = Diag(idx)%data(nb)%var2(ix) + var2(i,j) = Diag(idx)%data(nb)%var2(ix)*lcnvfac enddo enddo endif - elseif (trim(Diag(idx)%mask) == '') then - do j = 1, ny - jj = j + jsc -1 - do i = 1, nx - ii = i + isc -1 - nb = Atm_block%blkno(ii,jj) - ix = Atm_block%ixp(ii,jj) - var2(i,j) = Diag(idx)%data(nb)%var2(ix)*lcnvfac - enddo - enddo - endif + endif int_or_real ! used=send_data(Diag(idx)%id, var2, Time) ! print *,'in phys, after store_data, idx=',idx,' var=', trim(Diag(idx)%name) call store_data(Diag(idx)%id, var2, Time, idx, Diag(idx)%intpl_method, Diag(idx)%name) From f84acd38b956428c012ba66da49f05be82767400 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 15 Sep 2021 13:38:54 -0600 Subject: [PATCH 03/19] Update submodule pointer for ccpp-physics --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index 074c1b051..a442f8043 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 074c1b0516db67b9f56dacb0d300fe2d4ecb8c70 +Subproject commit a442f8043035c73dd8b6ce178db5632482adf458 From d7f4c066d78650c96e9a0fe5b3d1fda021a0dea9 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Thu, 16 Sep 2021 09:17:00 -0600 Subject: [PATCH 04/19] Update submodule pointer for ccpp-physics --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index a442f8043..b06304843 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit a442f8043035c73dd8b6ce178db5632482adf458 +Subproject commit b063048438c4b7a14d5bb8efdfdd93ca4434475d From 25ccc89b1172b0533edeb5f2e05551b4105bb3ae Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Thu, 16 Sep 2021 12:06:49 -0600 Subject: [PATCH 05/19] Add interstitial variables to save and restore vegetation/soil/slope types before/after surface physics --- ccpp/data/GFS_typedefs.F90 | 419 ++---------------------------------- ccpp/data/GFS_typedefs.meta | 18 ++ ccpp/physics | 2 +- 3 files changed, 34 insertions(+), 405 deletions(-) diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 4ea9ea15b..6cca61744 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -2218,11 +2218,15 @@ module GFS_typedefs !-- 3D diagnostics integer :: rtg_ozone_index, rtg_tke_index + ! DH* DO WE NEED THIS ??? + integer, pointer :: vtype_save (:) => null() !< vegetation type save + integer, pointer :: stype_save (:) => null() !< soil type save + integer, pointer :: slope_save (:) => null() !< slope type save + contains procedure :: create => interstitial_create !< allocate array data procedure :: rad_reset => interstitial_rad_reset !< reset array data for radiation procedure :: phys_reset => interstitial_phys_reset !< reset array data for physics - procedure :: mprint => interstitial_print !< print array data end type GFS_interstitial_type @@ -7431,6 +7435,11 @@ subroutine interstitial_create (Interstitial, IM, Model) ! which is set to .true. Interstitial%phys_hydrostatic = .true. ! + ! DH* DO WE NEED THIS ??? + allocate (Interstitial%vtype_save (IM)) + allocate (Interstitial%stype_save (IM)) + allocate (Interstitial%slope_save (IM)) + ! *DH ! Reset all other variables call Interstitial%rad_reset (Model) call Interstitial%phys_reset (Model) @@ -8022,409 +8031,11 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%radar_reset = mod(Model%kdt-1, nint(Model%nsradar_reset/Model%dtp)) == 0 end if ! + ! DH* DO WE NEED THIS ??? + Interstitial%vtype_save = clear_val + Interstitial%stype_save = clear_val + Interstitial%slope_save = clear_val + ! *DH end subroutine interstitial_phys_reset - ! DH* 20200901: this routine is no longer used by CCPP's GFS_debug.F90. When new variables are - ! added to the GFS_interstitial_type, it is best to add the variable to both interstitial_print - ! below and to GFS_interstitialtoscreen in ccpp/physics/physics/GFS_debug.F90 - subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) - ! - implicit none - ! - class(GFS_interstitial_type) :: Interstitial - type(GFS_control_type), intent(in) :: Model - integer, intent(in) :: mpirank, omprank, blkno - ! - ! Print static variables - write (0,'(a,3i6)') 'Interstitial_print for mpirank, omprank, blkno: ', mpirank, omprank, blkno - write (0,*) 'Interstitial_print: values that do not change' - write (0,*) 'Interstitial%ipr = ', Interstitial%ipr - write (0,*) 'Interstitial%itc = ', Interstitial%itc - write (0,*) 'Interstitial%latidxprnt = ', Interstitial%latidxprnt - write (0,*) 'Interstitial%levi = ', Interstitial%levi - write (0,*) 'Interstitial%lmk = ', Interstitial%lmk - write (0,*) 'Interstitial%lmp = ', Interstitial%lmp - write (0,*) 'Interstitial%nbdlw = ', Interstitial%nbdlw - write (0,*) 'Interstitial%nbdsw = ', Interstitial%nbdsw - write (0,*) 'Interstitial%nf_aelw = ', Interstitial%nf_aelw - write (0,*) 'Interstitial%nf_aesw = ', Interstitial%nf_aesw - write (0,*) 'Interstitial%nsamftrac = ', Interstitial%nsamftrac - write (0,*) 'Interstitial%nscav = ', Interstitial%nscav - write (0,*) 'Interstitial%nspc1 = ', Interstitial%nspc1 - write (0,*) 'Interstitial%ntcwx = ', Interstitial%ntcwx - write (0,*) 'Interstitial%ntiwx = ', Interstitial%ntiwx - write (0,*) 'Interstitial%nvdiff = ', Interstitial%nvdiff - write (0,*) 'Interstitial%phys_hydrostatic = ', Interstitial%phys_hydrostatic - write (0,*) 'Interstitial%skip_macro = ', Interstitial%skip_macro - write (0,*) 'Interstitial%trans_aero = ', Interstitial%trans_aero - ! Print all other variables - write (0,*) 'Interstitial_print: values that change' - write (0,*) 'sum(Interstitial%adjsfculw_land ) = ', sum(Interstitial%adjsfculw_land ) - write (0,*) 'sum(Interstitial%adjsfculw_ice ) = ', sum(Interstitial%adjsfculw_ice ) - write (0,*) 'sum(Interstitial%adjsfculw_water ) = ', sum(Interstitial%adjsfculw_water ) - write (0,*) 'sum(Interstitial%adjnirbmd ) = ', sum(Interstitial%adjnirbmd ) - write (0,*) 'sum(Interstitial%adjnirbmu ) = ', sum(Interstitial%adjnirbmu ) - write (0,*) 'sum(Interstitial%adjnirdfd ) = ', sum(Interstitial%adjnirdfd ) - write (0,*) 'sum(Interstitial%adjnirdfu ) = ', sum(Interstitial%adjnirdfu ) - write (0,*) 'sum(Interstitial%adjvisbmd ) = ', sum(Interstitial%adjvisbmd ) - write (0,*) 'sum(Interstitial%adjvisbmu ) = ', sum(Interstitial%adjvisbmu ) - write (0,*) 'sum(Interstitial%adjvisdfu ) = ', sum(Interstitial%adjvisdfu ) - write (0,*) 'sum(Interstitial%adjvisdfd ) = ', sum(Interstitial%adjvisdfd ) - write (0,*) 'sum(Interstitial%aerodp ) = ', sum(Interstitial%aerodp ) - write (0,*) 'sum(Interstitial%alb1d ) = ', sum(Interstitial%alb1d ) - if (.not. Model%do_RRTMGP) then - write (0,*) 'sum(Interstitial%alpha ) = ', sum(Interstitial%alpha ) - end if - write (0,*) 'sum(Interstitial%bexp1d ) = ', sum(Interstitial%bexp1d ) - write (0,*) 'sum(Interstitial%cd ) = ', sum(Interstitial%cd ) - write (0,*) 'sum(Interstitial%cd_ice ) = ', sum(Interstitial%cd_ice ) - write (0,*) 'sum(Interstitial%cd_land ) = ', sum(Interstitial%cd_land ) - write (0,*) 'sum(Interstitial%cd_water ) = ', sum(Interstitial%cd_water ) - write (0,*) 'sum(Interstitial%cdq ) = ', sum(Interstitial%cdq ) - write (0,*) 'sum(Interstitial%cdq_ice ) = ', sum(Interstitial%cdq_ice ) - write (0,*) 'sum(Interstitial%cdq_land ) = ', sum(Interstitial%cdq_land ) - write (0,*) 'sum(Interstitial%cdq_water ) = ', sum(Interstitial%cdq_water ) - write (0,*) 'sum(Interstitial%chh_ice ) = ', sum(Interstitial%chh_ice ) - write (0,*) 'sum(Interstitial%chh_land ) = ', sum(Interstitial%chh_land ) - write (0,*) 'sum(Interstitial%chh_water ) = ', sum(Interstitial%chh_water ) - write (0,*) 'sum(Interstitial%cldf ) = ', sum(Interstitial%cldf ) - write (0,*) 'sum(Interstitial%cldsa ) = ', sum(Interstitial%cldsa ) - write (0,*) 'sum(Interstitial%cldtaulw ) = ', sum(Interstitial%cldtaulw ) - write (0,*) 'sum(Interstitial%cldtausw ) = ', sum(Interstitial%cldtausw ) - write (0,*) 'sum(Interstitial%cld1d ) = ', sum(Interstitial%cld1d ) - write (0,*) 'sum(Interstitial%clw ) = ', sum(Interstitial%clw ) - write (0,*) 'sum(Interstitial%clx ) = ', sum(Interstitial%clx ) - write (0,*) 'sum(Interstitial%clouds ) = ', sum(Interstitial%clouds ) - write (0,*) 'sum(Interstitial%cmm_ice ) = ', sum(Interstitial%cmm_ice ) - write (0,*) 'sum(Interstitial%cmm_land ) = ', sum(Interstitial%cmm_land ) - write (0,*) 'sum(Interstitial%cmm_water ) = ', sum(Interstitial%cmm_water ) - write (0,*) 'sum(Interstitial%cnvc ) = ', sum(Interstitial%cnvc ) - write (0,*) 'sum(Interstitial%cnvw ) = ', sum(Interstitial%cnvw ) - write (0,*) 'sum(Interstitial%ctei_r ) = ', sum(Interstitial%ctei_r ) - write (0,*) 'sum(Interstitial%ctei_rml ) = ', sum(Interstitial%ctei_rml ) - write (0,*) 'sum(Interstitial%cumabs ) = ', sum(Interstitial%cumabs ) - write (0,*) 'sum(Interstitial%dd_mf ) = ', sum(Interstitial%dd_mf ) - write (0,*) 'sum(Interstitial%de_lgth ) = ', sum(Interstitial%de_lgth ) - write (0,*) 'sum(Interstitial%del ) = ', sum(Interstitial%del ) - write (0,*) 'sum(Interstitial%del_gz ) = ', sum(Interstitial%del_gz ) - write (0,*) 'sum(Interstitial%delr ) = ', sum(Interstitial%delr ) - write (0,*) 'sum(Interstitial%dlength ) = ', sum(Interstitial%dlength ) - write (0,*) 'sum(Interstitial%dqdt ) = ', sum(Interstitial%dqdt ) - write (0,*) 'sum(Interstitial%dqsfc1 ) = ', sum(Interstitial%dqsfc1 ) - write (0,*) 'sum(Interstitial%drain ) = ', sum(Interstitial%drain ) - write (0,*) 'sum(Interstitial%dtdt ) = ', sum(Interstitial%dtdt ) - write (0,*) 'sum(Interstitial%dtsfc1 ) = ', sum(Interstitial%dtsfc1 ) - write (0,*) 'sum(Interstitial%dtzm ) = ', sum(Interstitial%dtzm ) - write (0,*) 'sum(Interstitial%dt_mf ) = ', sum(Interstitial%dt_mf ) - write (0,*) 'sum(Interstitial%dudt ) = ', sum(Interstitial%dudt ) - write (0,*) 'sum(Interstitial%dusfcg ) = ', sum(Interstitial%dusfcg ) - write (0,*) 'sum(Interstitial%dusfc1 ) = ', sum(Interstitial%dusfc1 ) - write (0,*) 'sum(Interstitial%dvdftra ) = ', sum(Interstitial%dvdftra ) - write (0,*) 'sum(Interstitial%dvdt ) = ', sum(Interstitial%dvdt ) - write (0,*) 'sum(Interstitial%dvsfcg ) = ', sum(Interstitial%dvsfcg ) - write (0,*) 'sum(Interstitial%dvsfc1 ) = ', sum(Interstitial%dvsfc1 ) - write (0,*) 'sum(Interstitial%dzlyr ) = ', sum(Interstitial%dzlyr ) - write (0,*) 'sum(Interstitial%elvmax ) = ', sum(Interstitial%elvmax ) - write (0,*) 'sum(Interstitial%ep1d ) = ', sum(Interstitial%ep1d ) - write (0,*) 'sum(Interstitial%ep1d_ice ) = ', sum(Interstitial%ep1d_ice ) - write (0,*) 'sum(Interstitial%ep1d_land ) = ', sum(Interstitial%ep1d_land ) - write (0,*) 'sum(Interstitial%ep1d_water ) = ', sum(Interstitial%ep1d_water ) - write (0,*) 'sum(Interstitial%evap_ice ) = ', sum(Interstitial%evap_ice ) - write (0,*) 'sum(Interstitial%evap_land ) = ', sum(Interstitial%evap_land ) - write (0,*) 'sum(Interstitial%evap_water ) = ', sum(Interstitial%evap_water ) - write (0,*) 'sum(Interstitial%evbs ) = ', sum(Interstitial%evbs ) - write (0,*) 'sum(Interstitial%evcw ) = ', sum(Interstitial%evcw ) - write (0,*) 'sum(Interstitial%faerlw ) = ', sum(Interstitial%faerlw ) - write (0,*) 'sum(Interstitial%faersw ) = ', sum(Interstitial%faersw ) - write (0,*) 'sum(Interstitial%ffhh_ice ) = ', sum(Interstitial%ffhh_ice ) - write (0,*) 'sum(Interstitial%ffhh_land ) = ', sum(Interstitial%ffhh_land ) - write (0,*) 'sum(Interstitial%ffhh_water ) = ', sum(Interstitial%ffhh_water ) - write (0,*) 'sum(Interstitial%fh2 ) = ', sum(Interstitial%fh2 ) - write (0,*) 'sum(Interstitial%fh2_ice ) = ', sum(Interstitial%fh2_ice ) - write (0,*) 'sum(Interstitial%fh2_land ) = ', sum(Interstitial%fh2_land ) - write (0,*) 'sum(Interstitial%fh2_water ) = ', sum(Interstitial%fh2_water ) - write (0,*) 'Interstitial%flag_cice(1) = ', Interstitial%flag_cice(1) - write (0,*) 'Interstitial%flag_guess(1) = ', Interstitial%flag_guess(1) - write (0,*) 'Interstitial%flag_iter(1) = ', Interstitial%flag_iter(1) - write (0,*) 'sum(Interstitial%ffmm_ice ) = ', sum(Interstitial%ffmm_ice ) - write (0,*) 'sum(Interstitial%ffmm_land ) = ', sum(Interstitial%ffmm_land ) - write (0,*) 'sum(Interstitial%ffmm_water ) = ', sum(Interstitial%ffmm_water ) - write (0,*) 'sum(Interstitial%fm10 ) = ', sum(Interstitial%fm10 ) - write (0,*) 'sum(Interstitial%fm10_ice ) = ', sum(Interstitial%fm10_ice ) - write (0,*) 'sum(Interstitial%fm10_land ) = ', sum(Interstitial%fm10_land ) - write (0,*) 'sum(Interstitial%fm10_water ) = ', sum(Interstitial%fm10_water ) - write (0,*) 'Interstitial%frain = ', Interstitial%frain - write (0,*) 'sum(Interstitial%frland ) = ', sum(Interstitial%frland ) - write (0,*) 'sum(Interstitial%fscav ) = ', sum(Interstitial%fscav ) - write (0,*) 'sum(Interstitial%fswtr ) = ', sum(Interstitial%fswtr ) - write (0,*) 'sum(Interstitial%gabsbdlw ) = ', sum(Interstitial%gabsbdlw ) - write (0,*) 'sum(Interstitial%gabsbdlw_ice ) = ', sum(Interstitial%gabsbdlw_ice ) - write (0,*) 'sum(Interstitial%gabsbdlw_land ) = ', sum(Interstitial%gabsbdlw_land ) - write (0,*) 'sum(Interstitial%gabsbdlw_water ) = ', sum(Interstitial%gabsbdlw_water ) - write (0,*) 'sum(Interstitial%gamma ) = ', sum(Interstitial%gamma ) - write (0,*) 'sum(Interstitial%gamq ) = ', sum(Interstitial%gamq ) - write (0,*) 'sum(Interstitial%gamt ) = ', sum(Interstitial%gamt ) - write (0,*) 'sum(Interstitial%gasvmr ) = ', sum(Interstitial%gasvmr ) - write (0,*) 'sum(Interstitial%gflx ) = ', sum(Interstitial%gflx ) - write (0,*) 'sum(Interstitial%gflx_ice ) = ', sum(Interstitial%gflx_ice ) - write (0,*) 'sum(Interstitial%gflx_land ) = ', sum(Interstitial%gflx_land ) - write (0,*) 'sum(Interstitial%gflx_water ) = ', sum(Interstitial%gflx_water ) - write (0,*) 'sum(Interstitial%gwdcu ) = ', sum(Interstitial%gwdcu ) - write (0,*) 'sum(Interstitial%gwdcv ) = ', sum(Interstitial%gwdcv ) - write (0,*) 'sum(Interstitial%zvfun ) = ', sum(Interstitial%zvfun ) - write (0,*) 'sum(Interstitial%hffac ) = ', sum(Interstitial%hffac ) - write (0,*) 'sum(Interstitial%hflxq ) = ', sum(Interstitial%hflxq ) - write (0,*) 'sum(Interstitial%hflx_ice ) = ', sum(Interstitial%hflx_ice ) - write (0,*) 'sum(Interstitial%hflx_land ) = ', sum(Interstitial%hflx_land ) - write (0,*) 'sum(Interstitial%hflx_water ) = ', sum(Interstitial%hflx_water ) - write (0,*) 'sum(Interstitial%htlwc ) = ', sum(Interstitial%htlwc ) - write (0,*) 'sum(Interstitial%htlw0 ) = ', sum(Interstitial%htlw0 ) - write (0,*) 'sum(Interstitial%htswc ) = ', sum(Interstitial%htswc ) - write (0,*) 'sum(Interstitial%htsw0 ) = ', sum(Interstitial%htsw0 ) - write (0,*) 'Interstitial%dry(:)==.true. = ', count(Interstitial%dry(:) ) - write (0,*) 'sum(Interstitial%idxday ) = ', sum(Interstitial%idxday ) - write (0,*) 'Interstitial%icy(:)==.true. = ', count(Interstitial%icy(:) ) - write (0,*) 'Interstitial%lake(:)==.true. = ', count(Interstitial%lake(:) ) - write (0,*) 'Interstitial%use_flake(:)==.true. = ', count(Interstitial%use_flake(:) ) - write (0,*) 'Interstitial%ocean(:)==.true. = ', count(Interstitial%ocean(:) ) - write (0,*) 'sum(Interstitial%islmsk ) = ', sum(Interstitial%islmsk ) - write (0,*) 'sum(Interstitial%islmsk_cice ) = ', sum(Interstitial%islmsk_cice ) - write (0,*) 'Interstitial%wet(:)==.true. = ', count(Interstitial%wet(:) ) - write (0,*) 'Interstitial%kb = ', Interstitial%kb - write (0,*) 'sum(Interstitial%kbot ) = ', sum(Interstitial%kbot ) - write (0,*) 'sum(Interstitial%kcnv ) = ', sum(Interstitial%kcnv ) - write (0,*) 'Interstitial%kd = ', Interstitial%kd - write (0,*) 'sum(Interstitial%kinver ) = ', sum(Interstitial%kinver ) - write (0,*) 'sum(Interstitial%kpbl ) = ', sum(Interstitial%kpbl ) - write (0,*) 'Interstitial%kt = ', Interstitial%kt - write (0,*) 'sum(Interstitial%ktop ) = ', sum(Interstitial%ktop ) - write (0,*) 'sum(Interstitial%mbota ) = ', sum(Interstitial%mbota ) - write (0,*) 'sum(Interstitial%mtopa ) = ', sum(Interstitial%mtopa ) - write (0,*) 'Interstitial%nday = ', Interstitial%nday - write (0,*) 'sum(Interstitial%oa4 ) = ', sum(Interstitial%oa4 ) - write (0,*) 'sum(Interstitial%oc ) = ', sum(Interstitial%oc ) - write (0,*) 'sum(Interstitial%olyr ) = ', sum(Interstitial%olyr ) - write (0,*) 'sum(Interstitial%plvl ) = ', sum(Interstitial%plvl ) - write (0,*) 'sum(Interstitial%plyr ) = ', sum(Interstitial%plyr ) - write (0,*) 'sum(Interstitial%prcpmp ) = ', sum(Interstitial%prcpmp ) - write (0,*) 'sum(Interstitial%prnum ) = ', sum(Interstitial%prnum ) - write (0,*) 'sum(Interstitial%qlyr ) = ', sum(Interstitial%qlyr ) - write (0,*) 'sum(Interstitial%qss_ice ) = ', sum(Interstitial%qss_ice ) - write (0,*) 'sum(Interstitial%qss_land ) = ', sum(Interstitial%qss_land ) - write (0,*) 'sum(Interstitial%qss_water ) = ', sum(Interstitial%qss_water ) - write (0,*) 'Interstitial%radar_reset = ', Interstitial%radar_reset - write (0,*) 'Interstitial%raddt = ', Interstitial%raddt - write (0,*) 'sum(Interstitial%raincd ) = ', sum(Interstitial%raincd ) - write (0,*) 'sum(Interstitial%raincs ) = ', sum(Interstitial%raincs ) - write (0,*) 'sum(Interstitial%rainmcadj ) = ', sum(Interstitial%rainmcadj ) - write (0,*) 'sum(Interstitial%rainp ) = ', sum(Interstitial%rainp ) - write (0,*) 'sum(Interstitial%rb ) = ', sum(Interstitial%rb ) - write (0,*) 'sum(Interstitial%rb_ice ) = ', sum(Interstitial%rb_ice ) - write (0,*) 'sum(Interstitial%rb_land ) = ', sum(Interstitial%rb_land ) - write (0,*) 'sum(Interstitial%rb_water ) = ', sum(Interstitial%rb_water ) - write (0,*) 'Interstitial%max_hourly_reset = ', Interstitial%max_hourly_reset - write (0,*) 'Interstitial%ext_diag_thompson_reset = ', Interstitial%ext_diag_thompson_reset - write (0,*) 'sum(Interstitial%rhc ) = ', sum(Interstitial%rhc ) - write (0,*) 'sum(Interstitial%runoff ) = ', sum(Interstitial%runoff ) - write (0,*) 'sum(Interstitial%save_q ) = ', sum(Interstitial%save_q ) - write (0,*) 'sum(Interstitial%save_t ) = ', sum(Interstitial%save_t ) - write (0,*) 'sum(Interstitial%save_tcp ) = ', sum(Interstitial%save_tcp ) - write (0,*) 'sum(Interstitial%save_u ) = ', sum(Interstitial%save_u ) - write (0,*) 'sum(Interstitial%save_v ) = ', sum(Interstitial%save_v ) - write (0,*) 'sum(Interstitial%sbsno ) = ', sum(Interstitial%sbsno ) - write (0,*) 'sum(Interstitial%scmpsw%uvbfc ) = ', sum(Interstitial%scmpsw%uvbfc ) - write (0,*) 'sum(Interstitial%scmpsw%uvbf0 ) = ', sum(Interstitial%scmpsw%uvbf0 ) - write (0,*) 'sum(Interstitial%scmpsw%nirbm ) = ', sum(Interstitial%scmpsw%nirbm ) - write (0,*) 'sum(Interstitial%scmpsw%nirdf ) = ', sum(Interstitial%scmpsw%nirdf ) - write (0,*) 'sum(Interstitial%scmpsw%visbm ) = ', sum(Interstitial%scmpsw%visbm ) - write (0,*) 'sum(Interstitial%scmpsw%visdf ) = ', sum(Interstitial%scmpsw%visdf ) - write (0,*) 'sum(Interstitial%semis_ice ) = ', sum(Interstitial%semis_ice ) - write (0,*) 'sum(Interstitial%semis_land ) = ', sum(Interstitial%semis_land ) - write (0,*) 'sum(Interstitial%semis_water ) = ', sum(Interstitial%semis_water ) - write (0,*) 'sum(Interstitial%sfcalb ) = ', sum(Interstitial%sfcalb ) - write (0,*) 'sum(Interstitial%sigma ) = ', sum(Interstitial%sigma ) - write (0,*) 'sum(Interstitial%sigmaf ) = ', sum(Interstitial%sigmaf ) - write (0,*) 'sum(Interstitial%sigmafrac ) = ', sum(Interstitial%sigmafrac ) - write (0,*) 'sum(Interstitial%sigmatot ) = ', sum(Interstitial%sigmatot ) - write (0,*) 'sum(Interstitial%snowc ) = ', sum(Interstitial%snowc ) - write (0,*) 'sum(Interstitial%snowd_ice ) = ', sum(Interstitial%snowd_ice ) -! write (0,*) 'sum(Interstitial%snowd_land ) = ', sum(Interstitial%snowd_land ) -! write (0,*) 'sum(Interstitial%snowd_water ) = ', sum(Interstitial%snowd_water ) - write (0,*) 'sum(Interstitial%snohf ) = ', sum(Interstitial%snohf ) - write (0,*) 'sum(Interstitial%snowmt ) = ', sum(Interstitial%snowmt ) - write (0,*) 'sum(Interstitial%stress ) = ', sum(Interstitial%stress ) - write (0,*) 'sum(Interstitial%stress_ice ) = ', sum(Interstitial%stress_ice ) - write (0,*) 'sum(Interstitial%stress_land ) = ', sum(Interstitial%stress_land ) - write (0,*) 'sum(Interstitial%stress_water ) = ', sum(Interstitial%stress_water ) - write (0,*) 'sum(Interstitial%theta ) = ', sum(Interstitial%theta ) - write (0,*) 'sum(Interstitial%tlvl ) = ', sum(Interstitial%tlvl ) - write (0,*) 'sum(Interstitial%tlyr ) = ', sum(Interstitial%tlyr ) - write (0,*) 'sum(Interstitial%tprcp_ice ) = ', sum(Interstitial%tprcp_ice ) - write (0,*) 'sum(Interstitial%tprcp_land ) = ', sum(Interstitial%tprcp_land ) - write (0,*) 'sum(Interstitial%tprcp_water ) = ', sum(Interstitial%tprcp_water ) - write (0,*) 'sum(Interstitial%trans ) = ', sum(Interstitial%trans ) - write (0,*) 'sum(Interstitial%tseal ) = ', sum(Interstitial%tseal ) - write (0,*) 'sum(Interstitial%tsfa ) = ', sum(Interstitial%tsfa ) - write (0,*) 'sum(Interstitial%tsfc_ice ) = ', sum(Interstitial%tsfc_ice ) - write (0,*) 'sum(Interstitial%tsfc_water ) = ', sum(Interstitial%tsfc_water ) - write (0,*) 'sum(Interstitial%tsfg ) = ', sum(Interstitial%tsfg ) - write (0,*) 'sum(Interstitial%tsurf_ice ) = ', sum(Interstitial%tsurf_ice ) - write (0,*) 'sum(Interstitial%tsurf_land ) = ', sum(Interstitial%tsurf_land ) - write (0,*) 'sum(Interstitial%tsurf_water ) = ', sum(Interstitial%tsurf_water ) - write (0,*) 'sum(Interstitial%ud_mf ) = ', sum(Interstitial%ud_mf ) - write (0,*) 'sum(Interstitial%uustar_ice ) = ', sum(Interstitial%uustar_ice ) - write (0,*) 'sum(Interstitial%uustar_land ) = ', sum(Interstitial%uustar_land ) - write (0,*) 'sum(Interstitial%uustar_water ) = ', sum(Interstitial%uustar_water ) - write (0,*) 'sum(Interstitial%vdftra ) = ', sum(Interstitial%vdftra ) - write (0,*) 'sum(Interstitial%vegf1d ) = ', sum(Interstitial%vegf1d ) - write (0,*) 'sum(Interstitial%wcbmax ) = ', sum(Interstitial%wcbmax ) - write (0,*) 'sum(Interstitial%weasd_ice ) = ', sum(Interstitial%weasd_ice ) - write (0,*) 'sum(Interstitial%wind ) = ', sum(Interstitial%wind ) - write (0,*) 'sum(Interstitial%work1 ) = ', sum(Interstitial%work1 ) - write (0,*) 'sum(Interstitial%work2 ) = ', sum(Interstitial%work2 ) - write (0,*) 'sum(Interstitial%work3 ) = ', sum(Interstitial%work3 ) - write (0,*) 'sum(Interstitial%xcosz ) = ', sum(Interstitial%xcosz ) - write (0,*) 'sum(Interstitial%xlai1d ) = ', sum(Interstitial%xlai1d ) - write (0,*) 'sum(Interstitial%xmu ) = ', sum(Interstitial%xmu ) - write (0,*) 'sum(Interstitial%z01d ) = ', sum(Interstitial%z01d ) - write (0,*) 'sum(Interstitial%zt1d ) = ', sum(Interstitial%zt1d ) - -! UGWP common - write (0,*) 'sum(Interstitial%tau_mtb ) = ', sum(Interstitial%tau_mtb ) - write (0,*) 'sum(Interstitial%tau_ogw ) = ', sum(Interstitial%tau_ogw ) - write (0,*) 'sum(Interstitial%tau_tofd ) = ', sum(Interstitial%tau_tofd ) - write (0,*) 'sum(Interstitial%tau_ngw ) = ', sum(Interstitial%tau_ngw ) - write (0,*) 'sum(Interstitial%tau_oss ) = ', sum(Interstitial%tau_oss ) - write (0,*) 'sum(Interstitial%dudt_mtb ) = ', sum(Interstitial%dudt_mtb ) - write (0,*) 'sum(Interstitial%dudt_tms ) = ', sum(Interstitial%dudt_tms ) - write (0,*) 'sum(Interstitial%zmtb ) = ', sum(Interstitial%zmtb ) - write (0,*) 'sum(Interstitial%zlwb ) = ', sum(Interstitial%zlwb ) - write (0,*) 'sum(Interstitial%zogw ) = ', sum(Interstitial%zogw ) - write (0,*) 'sum(Interstitial%zngw ) = ', sum(Interstitial%zngw ) - -! UGWP v1 - if (Model%do_ugwp_v1) then - write (0,*) 'sum(Interstitial%dudt_ngw ) = ', sum(Interstitial%dudt_ngw ) - write (0,*) 'sum(Interstitial%dvdt_ngw ) = ', sum(Interstitial%dvdt_ngw ) - write (0,*) 'sum(Interstitial%dtdt_ngw ) = ', sum(Interstitial%dtdt_ngw ) - write (0,*) 'sum(Interstitial%kdis_ngw ) = ', sum(Interstitial%kdis_ngw ) - end if -!-- GSL drag suite - if (Model%gwd_opt==3 .or. Model%gwd_opt==33 .or. & - Model%gwd_opt==2 .or. Model%gwd_opt==22) then - write (0,*) 'sum(Interstitial%varss ) = ', sum(Interstitial%varss) - write (0,*) 'sum(Interstitial%ocss ) = ', sum(Interstitial%ocss) - write (0,*) 'sum(Interstitial%oa4ss ) = ', sum(Interstitial%oa4ss) - write (0,*) 'sum(Interstitial%clxss ) = ', sum(Interstitial%clxss) - end if -! - ! Print arrays that are conditional on physics choices - if (Model%imp_physics == Model%imp_physics_gfdl .or. Model%imp_physics == Model%imp_physics_thompson) then - write (0,*) 'Interstitial_print: values specific to GFDL/Thompson microphysics' - write (0,*) 'sum(Interstitial%graupelmp ) = ', sum(Interstitial%graupelmp ) - write (0,*) 'sum(Interstitial%icemp ) = ', sum(Interstitial%icemp ) - write (0,*) 'sum(Interstitial%rainmp ) = ', sum(Interstitial%rainmp ) - write (0,*) 'sum(Interstitial%snowmp ) = ', sum(Interstitial%snowmp ) - !F-A scheme - else if (Model%imp_physics == Model%imp_physics_fer_hires) then - write (0,*) 'Interstitial_print: values specific to F-A microphysics' - write (0,*) 'sum(Interstitial%f_ice ) = ', sum(Interstitial%f_ice ) - write (0,*) 'sum(Interstitial%f_rain ) = ', sum(Interstitial%f_rain ) - write (0,*) 'sum(Interstitial%f_rimef ) = ', sum(Interstitial%f_rimef ) - write (0,*) 'sum(Interstitial%cwm ) = ', sum(Interstitial%cwm ) - else if (Model%imp_physics == Model%imp_physics_mg) then - write (0,*) 'Interstitial_print: values specific to MG microphysics' - write (0,*) 'sum(Interstitial%ncgl ) = ', sum(Interstitial%ncgl ) - write (0,*) 'sum(Interstitial%ncpr ) = ', sum(Interstitial%ncpr ) - write (0,*) 'sum(Interstitial%ncps ) = ', sum(Interstitial%ncps ) - write (0,*) 'sum(Interstitial%qgl ) = ', sum(Interstitial%qgl ) - write (0,*) 'sum(Interstitial%qrn ) = ', sum(Interstitial%qrn ) - write (0,*) 'sum(Interstitial%qsnw ) = ', sum(Interstitial%qsnw ) - write (0,*) 'sum(Interstitial%qlcn ) = ', sum(Interstitial%qlcn ) - write (0,*) 'sum(Interstitial%qicn ) = ', sum(Interstitial%qicn ) - write (0,*) 'sum(Interstitial%w_upi ) = ', sum(Interstitial%w_upi ) - write (0,*) 'sum(Interstitial%cf_upi ) = ', sum(Interstitial%cf_upi ) - write (0,*) 'sum(Interstitial%cnv_mfd ) = ', sum(Interstitial%cnv_mfd ) - write (0,*) 'sum(Interstitial%cnv_dqldt ) = ', sum(Interstitial%cnv_dqldt ) - write (0,*) 'sum(Interstitial%clcn ) = ', sum(Interstitial%clcn ) - write (0,*) 'sum(Interstitial%cnv_fice ) = ', sum(Interstitial%cnv_fice ) - write (0,*) 'sum(Interstitial%cnv_ndrop ) = ', sum(Interstitial%cnv_ndrop ) - write (0,*) 'sum(Interstitial%cnv_nice ) = ', sum(Interstitial%cnv_nice ) - end if - if (Model%do_shoc) then - write (0,*) 'Interstitial_print: values specific to SHOC' - write (0,*) 'sum(Interstitial%ncgl ) = ', sum(Interstitial%ncgl ) - write (0,*) 'sum(Interstitial%qrn ) = ', sum(Interstitial%qrn ) - write (0,*) 'sum(Interstitial%qsnw ) = ', sum(Interstitial%qsnw ) - write (0,*) 'sum(Interstitial%qgl ) = ', sum(Interstitial%qgl ) - write (0,*) 'sum(Interstitial%ncpi ) = ', sum(Interstitial%ncpi ) - write (0,*) 'sum(Interstitial%ncpl ) = ', sum(Interstitial%ncpl ) - end if - if (Model%lsm == Model%lsm_noahmp) then - write (0,*) 'sum(Interstitial%t2mmp ) = ', sum(Interstitial%t2mmp ) - write (0,*) 'sum(Interstitial%q2mp ) = ', sum(Interstitial%q2mp ) - end if - if (Model%lsm == Model%lsm_noah_wrfv4) then - write (0,*) 'sum(Interstitial%canopy_save ) = ', sum(Interstitial%canopy_save ) - write (0,*) 'sum(Interstitial%chk_land ) = ', sum(Interstitial%chk_land ) - write (0,*) 'sum(Interstitial%cmc ) = ', sum(Interstitial%cmc ) - write (0,*) 'sum(Interstitial%dqsdt2 ) = ', sum(Interstitial%dqsdt2 ) - write (0,*) 'sum(Interstitial%drain_in_m_sm1 ) = ', sum(Interstitial%drain_in_m_sm1 ) - write (0,*) 'Interstitial%flag_lsm(1) = ', Interstitial%flag_lsm(1) - write (0,*) 'Interstitial%flag_lsm_glacier(1) = ', Interstitial%flag_lsm_glacier(1) - write (0,*) 'sum(Interstitial%qs1 ) = ', sum(Interstitial%qs1 ) - write (0,*) 'sum(Interstitial%qv1 ) = ', sum(Interstitial%qv1 ) - write (0,*) 'sum(Interstitial%rho1 ) = ', sum(Interstitial%rho1 ) - write (0,*) 'sum(Interstitial%runoff_in_m_sm1 ) = ', sum(Interstitial%runoff_in_m_sm1 ) - write (0,*) 'sum(Interstitial%smcmax ) = ', sum(Interstitial%smcmax ) - write (0,*) 'sum(Interstitial%snowd_land_save ) = ', sum(Interstitial%snowd_land_save ) - write (0,*) 'sum(Interstitial%snow_depth ) = ', sum(Interstitial%snow_depth ) - write (0,*) 'sum(Interstitial%snohf_snow ) = ', sum(Interstitial%snohf_snow ) - write (0,*) 'sum(Interstitial%snohf_frzgra ) = ', sum(Interstitial%snohf_frzgra ) - write (0,*) 'sum(Interstitial%snohf_snowmelt ) = ', sum(Interstitial%snohf_snowmelt ) - write (0,*) 'sum(Interstitial%soilm_in_m ) = ', sum(Interstitial%soilm_in_m ) - write (0,*) 'sum(Interstitial%th1 ) = ', sum(Interstitial%th1 ) - write (0,*) 'sum(Interstitial%tprcp_rate_land ) = ', sum(Interstitial%tprcp_rate_land ) - write (0,*) 'sum(Interstitial%tsfc_land_save ) = ', sum(Interstitial%tsfc_land_save ) - write (0,*) 'sum(Interstitial%weasd_land_save ) = ', sum(Interstitial%weasd_land_save ) - end if - ! RRTMGP - if (Model%do_RRTMGP) then - write (0,*) 'sum(Interstitial%aerosolslw ) = ', sum(Interstitial%aerosolslw ) - write (0,*) 'sum(Interstitial%aerosolssw ) = ', sum(Interstitial%aerosolssw ) - write (0,*) 'sum(Interstitial%cld_frac ) = ', sum(Interstitial%cld_frac ) - write (0,*) 'sum(Interstitial%cld_lwp ) = ', sum(Interstitial%cld_lwp ) - write (0,*) 'sum(Interstitial%cld_reliq ) = ', sum(Interstitial%cld_reliq ) - write (0,*) 'sum(Interstitial%cld_iwp ) = ', sum(Interstitial%cld_iwp ) - write (0,*) 'sum(Interstitial%cld_reice ) = ', sum(Interstitial%cld_reice ) - write (0,*) 'sum(Interstitial%cld_swp ) = ', sum(Interstitial%cld_swp ) - write (0,*) 'sum(Interstitial%cld_resnow ) = ', sum(Interstitial%cld_resnow ) - write (0,*) 'sum(Interstitial%cld_rwp ) = ', sum(Interstitial%cld_rwp ) - write (0,*) 'sum(Interstitial%cld_rerain ) = ', sum(Interstitial%cld_rerain ) - write (0,*) 'sum(Interstitial%precip_frac ) = ', sum(Interstitial%precip_frac ) - write (0,*) 'sum(Interstitial%icseed_lw ) = ', sum(Interstitial%icseed_lw ) - write (0,*) 'sum(Interstitial%icseed_sw ) = ', sum(Interstitial%icseed_sw ) - write (0,*) 'sum(Interstitial%fluxlwUP_clrsky ) = ', sum(Interstitial%fluxlwUP_clrsky ) - write (0,*) 'sum(Interstitial%fluxlwDOWN_clrsky ) = ', sum(Interstitial%fluxlwDOWN_clrsky) - write (0,*) 'sum(Interstitial%fluxswUP_allsky ) = ', sum(Interstitial%fluxswUP_allsky ) - write (0,*) 'sum(Interstitial%fluxswDOWN_allsky ) = ', sum(Interstitial%fluxswDOWN_allsky) - write (0,*) 'sum(Interstitial%fluxswUP_clrsky ) = ', sum(Interstitial%fluxswUP_clrsky ) - write (0,*) 'sum(Interstitial%fluxswDOWN_clrsky ) = ', sum(Interstitial%fluxswDOWN_clrsky) - write (0,*) 'sum(Interstitial%relhum ) = ', sum(Interstitial%relhum ) - write (0,*) 'sum(Interstitial%q_lay ) = ', sum(Interstitial%q_lay ) - write (0,*) 'sum(Interstitial%qs_lay ) = ', sum(Interstitial%qs_lay ) - write (0,*) 'sum(Interstitial%deltaZ ) = ', sum(Interstitial%deltaZ ) - write (0,*) 'sum(Interstitial%p_lay ) = ', sum(Interstitial%p_lay ) - write (0,*) 'sum(Interstitial%p_lev ) = ', sum(Interstitial%p_lev ) - write (0,*) 'sum(Interstitial%t_lay ) = ', sum(Interstitial%t_lay ) - write (0,*) 'sum(Interstitial%t_lev ) = ', sum(Interstitial%t_lev ) - write (0,*) 'sum(Interstitial%tv_lay ) = ', sum(Interstitial%tv_lay ) - write (0,*) 'sum(Interstitial%cloud_overlap_param ) = ', sum(Interstitial%cloud_overlap_param) - write (0,*) 'sum(Interstitial%precip_overlap_param ) = ', sum(Interstitial%precip_overlap_param) - end if - - write (0,*) 'Interstitial_print: end' - ! - end subroutine interstitial_print - end module GFS_typedefs diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index c2f3294e5..4199282a1 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -10513,6 +10513,24 @@ units = count dimensions = () type = integer +[vtype_save] + standard_name = vegetation_type_classification_save + long_name = vegetation type for lsm save + units = index + dimensions = (horizontal_loop_extent) + type = integer +[stype_save] + standard_name = soil_type_classification_save + long_name = soil type for lsm save + units = index + dimensions = (horizontal_loop_extent) + type = integer +[slope_save] + standard_name = surface_slope_classification_save + long_name = sfc slope type for lsm save + units = index + dimensions = (horizontal_loop_extent) + type = integer ######################################################################## [ccpp-table-properties] diff --git a/ccpp/physics b/ccpp/physics index b06304843..ac03a54ab 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit b063048438c4b7a14d5bb8efdfdd93ca4434475d +Subproject commit ac03a54abe5266e28077c7c748813ef79bb12a8a From dca09e39d5e1639f4dbd6cbaa7a7b488b49e8d54 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Mon, 20 Sep 2021 08:23:43 -0600 Subject: [PATCH 06/19] Update submodule pointer for ccpp-physics --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index ac03a54ab..d45dc43d7 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit ac03a54abe5266e28077c7c748813ef79bb12a8a +Subproject commit d45dc43d766bdddd4bbab94de1cfd1acdbf8c9bc From 9d5650715c56682082c83f45728de7fed6268016 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Mon, 20 Sep 2021 14:58:43 -0600 Subject: [PATCH 07/19] Make vegetation/soil/slope save variables persistent so that they can be used in the _init phases --- ccpp/data/GFS_typedefs.F90 | 82 +++++++++++++++++-------------------- ccpp/data/GFS_typedefs.meta | 36 ++++++++-------- ccpp/physics | 2 +- 3 files changed, 57 insertions(+), 63 deletions(-) diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 6cca61744..cefce8bd4 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -264,12 +264,15 @@ module GFS_typedefs !--- In (physics only) integer, pointer :: slope (:) => null() !< sfc slope type for lsm + integer, pointer :: slope_save (:) => null()!< sfc slope type save real (kind=kind_phys), pointer :: shdmin (:) => null() !< min fractional coverage of green veg real (kind=kind_phys), pointer :: shdmax (:) => null() !< max fractnl cover of green veg (not used) real (kind=kind_phys), pointer :: tg3 (:) => null() !< deep soil temperature real (kind=kind_phys), pointer :: vfrac (:) => null() !< vegetation fraction integer, pointer :: vtype (:) => null() !< vegetation type integer, pointer :: stype (:) => null() !< soil type + integer, pointer :: vtype_save (:) => null()!< vegetation type save + integer, pointer :: stype_save (:) => null()!< soil type save real (kind=kind_phys), pointer :: uustar (:) => null() !< boundary layer parameter real (kind=kind_phys), pointer :: oro (:) => null() !< orography real (kind=kind_phys), pointer :: oro_uf (:) => null() !< unfiltered orography @@ -2218,11 +2221,6 @@ module GFS_typedefs !-- 3D diagnostics integer :: rtg_ozone_index, rtg_tke_index - ! DH* DO WE NEED THIS ??? - integer, pointer :: vtype_save (:) => null() !< vegetation type save - integer, pointer :: stype_save (:) => null() !< soil type save - integer, pointer :: slope_save (:) => null() !< slope type save - contains procedure :: create => interstitial_create !< allocate array data procedure :: rad_reset => interstitial_rad_reset !< reset array data for radiation @@ -2434,35 +2432,41 @@ subroutine sfcprop_create (Sfcprop, IM, Model) !--- physics surface props !--- In - allocate (Sfcprop%slope (IM)) - allocate (Sfcprop%shdmin (IM)) - allocate (Sfcprop%shdmax (IM)) - allocate (Sfcprop%snoalb (IM)) - allocate (Sfcprop%tg3 (IM)) - allocate (Sfcprop%vfrac (IM)) - allocate (Sfcprop%vtype (IM)) - allocate (Sfcprop%stype (IM)) - allocate (Sfcprop%uustar (IM)) - allocate (Sfcprop%oro (IM)) - allocate (Sfcprop%oro_uf (IM)) - allocate (Sfcprop%evap (IM)) - allocate (Sfcprop%hflx (IM)) - allocate (Sfcprop%qss (IM)) - - Sfcprop%slope = zero - Sfcprop%shdmin = clear_val - Sfcprop%shdmax = clear_val - Sfcprop%snoalb = clear_val - Sfcprop%tg3 = clear_val - Sfcprop%vfrac = clear_val - Sfcprop%vtype = zero - Sfcprop%stype = zero - Sfcprop%uustar = clear_val - Sfcprop%oro = clear_val - Sfcprop%oro_uf = clear_val - Sfcprop%evap = clear_val - Sfcprop%hflx = clear_val - Sfcprop%qss = clear_val + allocate (Sfcprop%slope (IM)) + allocate (Sfcprop%slope_save (IM)) + allocate (Sfcprop%shdmin (IM)) + allocate (Sfcprop%shdmax (IM)) + allocate (Sfcprop%snoalb (IM)) + allocate (Sfcprop%tg3 (IM)) + allocate (Sfcprop%vfrac (IM)) + allocate (Sfcprop%vtype (IM)) + allocate (Sfcprop%vtype_save (IM)) + allocate (Sfcprop%stype (IM)) + allocate (Sfcprop%stype_save (IM)) + allocate (Sfcprop%uustar (IM)) + allocate (Sfcprop%oro (IM)) + allocate (Sfcprop%oro_uf (IM)) + allocate (Sfcprop%evap (IM)) + allocate (Sfcprop%hflx (IM)) + allocate (Sfcprop%qss (IM)) + + Sfcprop%slope = zero + Sfcprop%slope_save = zero + Sfcprop%shdmin = clear_val + Sfcprop%shdmax = clear_val + Sfcprop%snoalb = clear_val + Sfcprop%tg3 = clear_val + Sfcprop%vfrac = clear_val + Sfcprop%vtype = zero + Sfcprop%vtype_save = zero + Sfcprop%stype = zero + Sfcprop%stype_save = zero + Sfcprop%uustar = clear_val + Sfcprop%oro = clear_val + Sfcprop%oro_uf = clear_val + Sfcprop%evap = clear_val + Sfcprop%hflx = clear_val + Sfcprop%qss = clear_val !--- In/Out allocate (Sfcprop%hice (IM)) @@ -7435,11 +7439,6 @@ subroutine interstitial_create (Interstitial, IM, Model) ! which is set to .true. Interstitial%phys_hydrostatic = .true. ! - ! DH* DO WE NEED THIS ??? - allocate (Interstitial%vtype_save (IM)) - allocate (Interstitial%stype_save (IM)) - allocate (Interstitial%slope_save (IM)) - ! *DH ! Reset all other variables call Interstitial%rad_reset (Model) call Interstitial%phys_reset (Model) @@ -8031,11 +8030,6 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%radar_reset = mod(Model%kdt-1, nint(Model%nsradar_reset/Model%dtp)) == 0 end if ! - ! DH* DO WE NEED THIS ??? - Interstitial%vtype_save = clear_val - Interstitial%stype_save = clear_val - Interstitial%slope_save = clear_val - ! *DH end subroutine interstitial_phys_reset end module GFS_typedefs diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index 4199282a1..d6222c7a8 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -702,6 +702,12 @@ units = index dimensions = (horizontal_loop_extent) type = integer +[slope_save] + standard_name = surface_slope_classification_save + long_name = sfc slope type for lsm save + units = index + dimensions = (horizontal_loop_extent) + type = integer [shdmin] standard_name = min_vegetation_area_fraction long_name = min fractional coverage of green vegetation @@ -736,12 +742,24 @@ units = index dimensions = (horizontal_loop_extent) type = integer +[vtype_save] + standard_name = vegetation_type_classification_save + long_name = vegetation type for lsm save + units = index + dimensions = (horizontal_loop_extent) + type = integer [stype] standard_name = soil_type_classification long_name = soil type for lsm units = index dimensions = (horizontal_loop_extent) type = integer +[stype_save] + standard_name = soil_type_classification_save + long_name = soil type for lsm save + units = index + dimensions = (horizontal_loop_extent) + type = integer [uustar] standard_name = surface_friction_velocity long_name = boundary layer parameter @@ -10513,24 +10531,6 @@ units = count dimensions = () type = integer -[vtype_save] - standard_name = vegetation_type_classification_save - long_name = vegetation type for lsm save - units = index - dimensions = (horizontal_loop_extent) - type = integer -[stype_save] - standard_name = soil_type_classification_save - long_name = soil type for lsm save - units = index - dimensions = (horizontal_loop_extent) - type = integer -[slope_save] - standard_name = surface_slope_classification_save - long_name = sfc slope type for lsm save - units = index - dimensions = (horizontal_loop_extent) - type = integer ######################################################################## [ccpp-table-properties] diff --git a/ccpp/physics b/ccpp/physics index d45dc43d7..a80ad971c 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit d45dc43d766bdddd4bbab94de1cfd1acdbf8c9bc +Subproject commit a80ad971c6b25959e1e272666f7c752d81436ff1 From 4531ef9362ed86d33d9a793b5cd289d424fd2255 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Tue, 21 Sep 2021 08:24:13 -0600 Subject: [PATCH 08/19] Only allow nearest-neighbor interpolation method for integer data --- io/FV3GFS_io.F90 | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/io/FV3GFS_io.F90 b/io/FV3GFS_io.F90 index 8b840c69b..7d5a84f4e 100644 --- a/io/FV3GFS_io.F90 +++ b/io/FV3GFS_io.F90 @@ -2640,17 +2640,22 @@ subroutine fv3gfs_diag_output(time, diag, atm_block, nx, ny, levs, ntcw, ntoz, & if (diag(idx)%axes == 2) then ! Integer data int_or_real: if (associated(Diag(idx)%data(1)%int2)) then - var2(1:nx,1:ny) = 0._kind_phys - do j = 1, ny - jj = j + jsc -1 - do i = 1, nx - ii = i + isc -1 - nb = Atm_block%blkno(ii,jj) - ix = Atm_block%ixp(ii,jj) - var2(i,j) = real(Diag(idx)%data(nb)%int2(ix), kind=kind_phys) + if (trim(Diag(idx)%intpl_method) == 'nearest_stod') then + var2(1:nx,1:ny) = 0._kind_phys + do j = 1, ny + jj = j + jsc -1 + do i = 1, nx + ii = i + isc -1 + nb = Atm_block%blkno(ii,jj) + ix = Atm_block%ixp(ii,jj) + var2(i,j) = real(Diag(idx)%data(nb)%int2(ix), kind=kind_phys) + enddo enddo - enddo - call store_data(Diag(idx)%id, var2, Time, idx, Diag(idx)%intpl_method, Diag(idx)%name) + call store_data(Diag(idx)%id, var2, Time, idx, Diag(idx)%intpl_method, Diag(idx)%name) + else + call mpp_error(FATAL, 'Interpolation method ' // trim(Diag(idx)%intpl_method) // ' for integer variable ' & + // trim(Diag(idx)%name) // ' not supported.') + endif ! Real data else ! int_or_real if (trim(diag(idx)%mask) == 'positive_flux') then From 52f882415454b1d400a29b7449ea230310f86f27 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 1 Oct 2021 10:22:42 -0600 Subject: [PATCH 09/19] Update submodule pointer for ccpp-physics --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index 8763252e8..d29e48be1 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 8763252e894770b2e31506cfb16e51ce02354f64 +Subproject commit d29e48be195cbac10a424a148e6e4c2630f15bcd From 813524239e1c77c0d39fe4e934e05572777f1b43 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 1 Oct 2021 12:08:12 -0600 Subject: [PATCH 10/19] Remove legacy code from CMakeLists.txt --- CMakeLists.txt | 3 --- ccpp/physics | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d375d288e..986b5fd2f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,9 +60,6 @@ set_target_properties(fv3atm PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT target_include_directories(fv3atm INTERFACE $ $) -# This should not be necessary once framework and physics targets define BUILD_INTERFACE -target_include_directories(fv3atm PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/ccpp/physics) - target_link_libraries(fv3atm PUBLIC fv3 fv3ccpp stochastic_physics diff --git a/ccpp/physics b/ccpp/physics index d29e48be1..9438220dc 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit d29e48be195cbac10a424a148e6e4c2630f15bcd +Subproject commit 9438220dcf0d00fea0ff8ca2a35cd7d96446b1bd From 1b8d32ca6a99e9234a9345b51a242f7e7203cc57 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 1 Oct 2021 12:12:38 -0600 Subject: [PATCH 11/19] Update submodule pointer for ccpp-physics --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index 9438220dc..71832dba3 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 9438220dcf0d00fea0ff8ca2a35cd7d96446b1bd +Subproject commit 71832dba3bcb241731dccb3115c41f0ec21cd268 From db63ad9df17918a17cc3a601fbfbdcb0aa725e9f Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Mon, 4 Oct 2021 07:06:18 -0600 Subject: [PATCH 12/19] Revert change to .gitmodules and update submodule pointer for ccpp-physics --- .gitmodules | 6 ++---- ccpp/physics | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.gitmodules b/.gitmodules index 6c9befa91..a54f243ae 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,7 +8,5 @@ branch = main [submodule "ccpp/physics"] path = ccpp/physics - #url = https://github.com/NCAR/ccpp-physics - #branch = main - url = https://github.com/climbfuji/ccpp-physics - branch = vegetation_soil_slope_type_integer + url = https://github.com/NCAR/ccpp-physics + branch = main diff --git a/ccpp/physics b/ccpp/physics index 71832dba3..2ececb085 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 71832dba3bcb241731dccb3115c41f0ec21cd268 +Subproject commit 2ececb085ba72f5dac6cf296e20771f1ae970a96 From 6d12f1cfb683a915db6b17d06bc61da7981d0cc8 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Mon, 4 Oct 2021 10:34:50 -0600 Subject: [PATCH 13/19] Update .gitmodules for code review and testing --- .gitmodules | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index a54f243ae..eac65f46a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,5 +8,7 @@ branch = main [submodule "ccpp/physics"] path = ccpp/physics - url = https://github.com/NCAR/ccpp-physics - branch = main + #url = https://github.com/NCAR/ccpp-physics + #branch = main + url = https://github.com/climbfuji/ccpp-physics + branch = debug-array-alloc-ccpp-caps From 698b496c3159f7a66ec7a16711b3dc925821e98b Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Mon, 4 Oct 2021 14:42:35 -0600 Subject: [PATCH 14/19] Update .gitmodules and submodule pointers for GFDL_atmos_cubed_sphere, ccpp-framework and ccpp-physics for code review and testing --- .gitmodules | 12 ++++++++---- atmos_cubed_sphere | 2 +- ccpp/framework | 2 +- ccpp/physics | 2 +- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/.gitmodules b/.gitmodules index eac65f46a..ab5220f7d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,11 +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/NOAA-GFDL/GFDL_atmos_cubed_sphere + #branch = dev/emc + url = https://github.com/climbfuji/GFDL_atmos_cubed_sphere + branch = improve_error_message_from_ccpp [submodule "ccpp/framework"] path = ccpp/framework - url = https://github.com/NCAR/ccpp-framework - branch = main + #url = https://github.com/NCAR/ccpp-framework + #branch = main + url = https://github.com/climbfuji/ccpp-framework + branch = debug-array-alloc-ccpp-caps [submodule "ccpp/physics"] path = ccpp/physics #url = https://github.com/NCAR/ccpp-physics diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index ab026b794..5f7885b13 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit ab026b79497ee00530ff3eb6b59dd9b9346e8e7d +Subproject commit 5f7885b13ae3ee127afac9ea2689c08a459995f1 diff --git a/ccpp/framework b/ccpp/framework index 6874fc9b4..0a7fdb9a8 160000 --- a/ccpp/framework +++ b/ccpp/framework @@ -1 +1 @@ -Subproject commit 6874fc9b49237b70df7af9b513ea10df697c27d6 +Subproject commit 0a7fdb9a822b19d90fb4c83bdc6ff51c17d3be01 diff --git a/ccpp/physics b/ccpp/physics index 2ececb085..7af3a505b 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 2ececb085ba72f5dac6cf296e20771f1ae970a96 +Subproject commit 7af3a505b005634b2c225c4d10f30c1e01fb7388 From 59acbe556f8b8bdec6be2e1b54860bb6b9087c53 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Mon, 4 Oct 2021 14:55:29 -0600 Subject: [PATCH 15/19] Enable debugging features in auto-generated CCPP physics caps, clean up of variables for Ferrier-Aligo and RRTMGP in GFS_typedefs, bugfixes for multigases array dimensions, bug fixes in CCPP metadata in GFS_typedefs --- ccpp/CMakeLists.txt | 5 +- ccpp/data/CCPP_typedefs.F90 | 12 ++-- ccpp/data/CCPP_typedefs.meta | 3 +- ccpp/data/GFS_typedefs.F90 | 76 ++++++------------------- ccpp/data/GFS_typedefs.meta | 107 ++++++----------------------------- 5 files changed, 47 insertions(+), 156 deletions(-) diff --git a/ccpp/CMakeLists.txt b/ccpp/CMakeLists.txt index b614e099f..eda2180d7 100644 --- a/ccpp/CMakeLists.txt +++ b/ccpp/CMakeLists.txt @@ -20,7 +20,10 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/framework/cmake") #------------------------------------------------------------------------------ # Call to CCPP code generator if(DEBUG) + # Enable debugging features in auto-generated physics caps set(_ccpp_debug_arg "--debug") + # Enable verbose output from ccpp_prebuild.py + set(_ccpp_verbose_arg "--verbose") endif() if(DEFINED CCPP_SUITES) set(_ccpp_suites_arg "--suites=${CCPP_SUITES}") @@ -31,7 +34,7 @@ endif() execute_process(COMMAND ${Python_EXECUTABLE} "framework/scripts/ccpp_prebuild.py" "--config=config/ccpp_prebuild_config.py" - "--builddir=${CMAKE_CURRENT_BINARY_DIR}" ${_ccpp_suites_arg} ${_ccpp_debug_arg} + "--builddir=${CMAKE_CURRENT_BINARY_DIR}" ${_ccpp_suites_arg} ${_ccpp_debug_arg} ${_ccpp_verbose_arg} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_FILE ${CMAKE_CURRENT_BINARY_DIR}/ccpp_prebuild.out ERROR_FILE ${CMAKE_CURRENT_BINARY_DIR}/ccpp_prebuild.err diff --git a/ccpp/data/CCPP_typedefs.F90 b/ccpp/data/CCPP_typedefs.F90 index 7cd287b5d..01695bc4a 100644 --- a/ccpp/data/CCPP_typedefs.F90 +++ b/ccpp/data/CCPP_typedefs.F90 @@ -219,18 +219,18 @@ subroutine interstitial_create (Interstitial, is, ie, isd, ied, js, je, jsd, jed ! For multi-gases physics Interstitial%nwat = nwat ! If ngas, rilist and cpilist are present, then - ! multi-gases physics are used. If not, set ngas=1 + ! multi-gases physics are used. If not, set ngas=0 ! (safe value), allocate rilist/cpilist and set to zero if(present(ngas)) then Interstitial%ngas = ngas else - Interstitial%ngas = 1 + Interstitial%ngas = 0 end if - allocate(Interstitial%rilist(1:Interstitial%ngas)) - allocate(Interstitial%cpilist(1:Interstitial%ngas)) + allocate(Interstitial%rilist(0:Interstitial%ngas)) + allocate(Interstitial%cpilist(0:Interstitial%ngas)) if (present(rilist)) then - Interstitial%rilist = rilist(1:Interstitial%ngas) - Interstitial%cpilist = cpilist(1:Interstitial%ngas) + Interstitial%rilist = rilist(0:Interstitial%ngas) + Interstitial%cpilist = cpilist(0:Interstitial%ngas) else Interstitial%rilist = 0.0 Interstitial%cpilist = 0.0 diff --git a/ccpp/data/CCPP_typedefs.meta b/ccpp/data/CCPP_typedefs.meta index 60c9420c1..ed0fd63cf 100644 --- a/ccpp/data/CCPP_typedefs.meta +++ b/ccpp/data/CCPP_typedefs.meta @@ -228,9 +228,10 @@ standard_name = gas_tracers_for_multi_gas_physics_at_Lagrangian_surface long_name = gas tracers for multi gas physics at Lagrangian surface units = kg kg-1 - dimensions = (starting_x_direction_index_domain:ending_x_direction_index_domain,starting_y_direction_index_domain:ending_y_direction_index_domain,1:vertical_dimension_for_fast_physics,1:number_of_gases_for_multi_gases_physics) + dimensions = (starting_x_direction_index_domain:ending_x_direction_index_domain,starting_y_direction_index_domain:ending_y_direction_index_domain,1:vertical_dimension_for_fast_physics,0:number_of_gases_for_multi_gases_physics) type = real kind = kind_dyn + active = (number_of_gases_for_multi_gases_physics > 0) [qv] standard_name = water_vapor_specific_humidity_at_Lagrangian_surface long_name = water vapor specific humidity updated by fast physics at Lagrangian surface diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index eb47767f8..60cbaebdd 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -736,7 +736,7 @@ module GFS_typedefs integer :: rrtmgp_nrghice !< Number of ice-roughness categories integer :: rrtmgp_nGauss_ang !< Number of angles used in Gaussian quadrature logical :: do_GPsw_Glw !< If set to true use rrtmgp for SW calculation, rrtmg for LW. - character(len=128) :: active_gases_array(100) !< character array for each trace gas name + character(len=128), pointer :: active_gases_array(:) => null() !< character array for each trace gas name logical :: use_LW_jacobian !< If true, use Jacobian of LW to update radiation tendency. logical :: damp_LW_fluxadj !< If true, damp the LW flux adjustment using the Jacobian w/ height with logistic function real(kind_phys) :: lfnc_k !< Logistic function transition depth (Pa) @@ -1149,8 +1149,8 @@ module GFS_typedefs integer :: n_var_lndp logical :: lndp_each_step ! flag to indicate that land perturbations are applied at every time step, ! otherwise they are applied only after gcycle is run - character(len=3) :: lndp_var_list(6) ! dimension here must match n_var_max_lndp in stochy_nml_def - real(kind=kind_phys) :: lndp_prt_list(6) ! dimension here must match n_var_max_lndp in stochy_nml_def + character(len=3) , pointer :: lndp_var_list(:) ! dimension here must match n_var_max_lndp in stochy_nml_def + real(kind=kind_phys), pointer :: lndp_prt_list(:) ! dimension here must match n_var_max_lndp in stochy_nml_def ! also previous code had dimension 5 for each pert, to allow ! multiple patterns. It wasn't fully coded (and wouldn't have worked ! with nlndp>1, so I just dropped it). If we want to code it properly, @@ -2164,7 +2164,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: sfc_alb_uvvis_dif(:,:) => null() !< real (kind=kind_phys), pointer :: toa_src_lw(:,:) => null() !< real (kind=kind_phys), pointer :: toa_src_sw(:,:) => null() !< - character(len=128), pointer :: active_gases_array(:) => null() !< Character array for each trace gas name integer, pointer :: icseed_lw(:) => null() !< RRTMGP seed for RNG for longwave radiation integer, pointer :: icseed_sw(:) => null() !< RRTMGP seed for RNG for shortwave radiation type(proflw_type), pointer :: flxprf_lw(:,:) => null() !< DDT containing RRTMGP longwave fluxes @@ -2184,26 +2183,12 @@ module GFS_typedefs type(ty_gas_concs) :: gas_concentrations !< RRTMGP DDT type(ty_source_func_lw) :: sources !< RRTMGP DDT - !-- HWRF physics: dry mixing ratios - real (kind=kind_phys), pointer :: qv_r(:,:) => null() !< - real (kind=kind_phys), pointer :: qc_r(:,:) => null() !< - real (kind=kind_phys), pointer :: qi_r(:,:) => null() !< - real (kind=kind_phys), pointer :: qr_r(:,:) => null() !< - real (kind=kind_phys), pointer :: qs_r(:,:) => null() !< - real (kind=kind_phys), pointer :: qg_r(:,:) => null() !< - !-- GSL drag suite real (kind=kind_phys), pointer :: varss(:) => null() !< real (kind=kind_phys), pointer :: ocss(:) => null() !< real (kind=kind_phys), pointer :: oa4ss(:,:) => null() !< real (kind=kind_phys), pointer :: clxss(:,:) => null() !< - !-- Ferrier-Aligo MP scheme - real (kind=kind_phys), pointer :: f_rain (:,:) => null() !< - real (kind=kind_phys), pointer :: f_ice (:,:) => null() !< - real (kind=kind_phys), pointer :: f_rimef (:,:) => null() !< - real (kind=kind_phys), pointer :: cwm (:,:) => null() !< - !-- 3D diagnostics integer :: rtg_ozone_index, rtg_tke_index @@ -3011,7 +2996,7 @@ subroutine coupling_create (Coupling, IM, Model) endif !--- stochastic land perturbation option - if (Model%lndp_type .NE. 0) then + if (Model%lndp_type /= 0) then allocate (Coupling%sfc_wts (IM,Model%n_var_lndp)) Coupling%sfc_wts = clear_val endif @@ -3955,6 +3940,13 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%do_GPsw_Glw = do_GPsw_Glw Model%active_gases = active_gases Model%ngases = nGases + if (Model%do_RRTMGP) then + allocate (Model%active_gases_array(Model%nGases)) + ! Reset, will be populated by RRTMGP + do ipat=1,Model%nGases + Model%active_gases_array(ipat) = '' + enddo + endif Model%rrtmgp_root = rrtmgp_root Model%lw_file_gas = lw_file_gas Model%lw_file_clouds = lw_file_clouds @@ -4407,10 +4399,16 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%use_zmtnblck = use_zmtnblck Model%do_shum = do_shum Model%do_skeb = do_skeb + !--- stochastic surface perturbation options Model%lndp_type = lndp_type Model%n_var_lndp = n_var_lndp Model%lndp_each_step = lndp_each_step - + if (Model%lndp_type/=0) then + allocate(Model%lndp_var_list(Model%n_var_lndp)) + allocate(Model%lndp_prt_list(Model%n_var_lndp)) + Model%lndp_var_list(:) = '' + Model%lndp_prt_list(:) = clear_val + end if !--- cellular automata options ! force namelist constsitency allocate(Model%vfact_ca(levs)) @@ -7190,7 +7188,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%sfc_alb_uvvis_dif (Model%rrtmgp_nBandsSW,IM)) allocate (Interstitial%toa_src_sw (IM,Model%rrtmgp_nGptsSW)) allocate (Interstitial%toa_src_lw (IM,Model%rrtmgp_nGptsLW)) - allocate (Interstitial%active_gases_array (Model%nGases)) ! ! gas_concentrations (ty_gas_concs) ! @@ -7318,21 +7315,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%cnv_ndrop (IM,Model%levs)) allocate (Interstitial%cnv_nice (IM,Model%levs)) end if - if (Model%imp_physics == Model%imp_physics_fer_hires) then - !--- if HWRF physics? - allocate (Interstitial%qv_r (IM,Model%levs)) - allocate (Interstitial%qc_r (IM,Model%levs)) - allocate (Interstitial%qi_r (IM,Model%levs)) - allocate (Interstitial%qr_r (IM,Model%levs)) - allocate (Interstitial%qs_r (IM,Model%levs)) - allocate (Interstitial%qg_r (IM,Model%levs)) - - !--- Ferrier-Aligo MP scheme - allocate (Interstitial%f_ice (IM,Model%levs)) - allocate (Interstitial%f_rain (IM,Model%levs)) - allocate (Interstitial%f_rimef (IM,Model%levs)) - allocate (Interstitial%cwm (IM,Model%levs)) - end if if (Model%do_shoc) then if (.not. associated(Interstitial%qrn)) allocate (Interstitial%qrn (IM,Model%levs)) if (.not. associated(Interstitial%qsnw)) allocate (Interstitial%qsnw (IM,Model%levs)) @@ -7599,22 +7581,6 @@ subroutine interstitial_rad_reset (Interstitial, Model) Interstitial%tsfa = clear_val Interstitial%tsfg = clear_val -! F-A scheme - if (Model%imp_physics == Model%imp_physics_fer_hires) then - Interstitial%qv_r = clear_val - Interstitial%qc_r = clear_val - Interstitial%qi_r = clear_val - Interstitial%qr_r = clear_val - Interstitial%qs_r = clear_val - Interstitial%qg_r = clear_val - if(Model%spec_adv) then - Interstitial%f_ice = clear_val - Interstitial%f_rain = clear_val - Interstitial%f_rimef = clear_val - Interstitial%cwm = clear_val - end if - end if - if (Model%do_RRTMGP) then Interstitial%tracer = clear_val Interstitial%tv_lay = clear_val @@ -7930,12 +7896,6 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%cnv_ndrop = clear_val Interstitial%cnv_nice = clear_val end if - if (Model%imp_physics == Model%imp_physics_fer_hires .and. Model%spec_adv) then - Interstitial%f_ice = clear_val - Interstitial%f_rain = clear_val - Interstitial%f_rimef = clear_val - Interstitial%cwm = clear_val - end if if (Model%do_shoc) then Interstitial%qrn = clear_val Interstitial%qsnw = clear_val diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index f623a8027..0a784bd89 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -1833,6 +1833,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (flag_for_chemistry_coupling) [snow_cpl] standard_name = cumulative_lwe_thickness_of_snow_amount_for_coupling long_name = total snow precipitation @@ -2262,7 +2263,7 @@ dimensions = (horizontal_loop_extent,number_of_perturbed_land_surface_variables) type = real kind = kind_phys - active = (control_for_stochastic_land_surface_perturbation .ne. 0) + active = (control_for_stochastic_land_surface_perturbation /= 0) [nwfa2d] standard_name = tendency_of_hygroscopic_aerosols_at_surface_adjacent_layer long_name = instantaneous water-friendly sfc aerosol source @@ -2311,6 +2312,7 @@ type = real kind = kind_phys active = (flag_for_chemistry_coupling) + ######################################################################## [ccpp-table-properties] name = GFS_control_type @@ -2857,6 +2859,14 @@ units = count dimensions = () type = integer +[active_gases_array] + standard_name = list_of_active_gases_used_by_RRTMGP + long_name = list of active gases used by RRTMGP + units = none + dimensions = (number_of_active_gases_used_by_RRTMGP) + type = character + kind = len=128 + active = (flag_for_rrtmgp_radiation_scheme) [rrtmgp_root] standard_name = directory_for_rte_rrtmgp_source_code long_name = directory for rte+rrtmgp source code (Model%rrtmgp_root) @@ -4516,6 +4526,7 @@ dimensions = (number_of_perturbed_land_surface_variables) type = real kind = kind_phys + active = (control_for_stochastic_land_surface_perturbation /= 0) [lndp_var_list] standard_name = land_surface_perturbation_variables long_name = variables to be perturbed for landperts @@ -4523,6 +4534,7 @@ dimensions = (number_of_perturbed_land_surface_variables) type = character kind = len=3 + active = (control_for_stochastic_land_surface_perturbation /= 0) [ntrac] standard_name = number_of_tracers long_name = number of tracers @@ -6885,7 +6897,7 @@ standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables units = various - dimensions = (horizontal_loop_extent,vertical_layer_dimension,number_of_cumulative_change_processes) + dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys active = (flag_for_diagnostics_3D) @@ -6945,6 +6957,7 @@ dimensions = (horizontal_loop_extent,vertical_layer_dimension) type = real kind = kind_phys + active = (flag_for_tracer_diagnostics_3D) [dwn_mf] standard_name = cumulative_atmosphere_downdraft_convective_mass_flux long_name = cumulative downdraft mass flux @@ -6952,6 +6965,7 @@ dimensions = (horizontal_loop_extent,vertical_layer_dimension) type = real kind = kind_phys + active = (flag_for_tracer_diagnostics_3D) [det_mf] standard_name = cumulative_atmosphere_detrainment_convective_mass_flux long_name = cumulative detrainment mass flux @@ -6959,6 +6973,7 @@ dimensions = (horizontal_loop_extent,vertical_layer_dimension) type = real kind = kind_phys + active = (flag_for_tracer_diagnostics_3D) [refl_10cm] standard_name = radar_reflectivity_10cm long_name = instantaneous refl_10cm @@ -7397,86 +7412,6 @@ [ccpp-arg-table] name = GFS_interstitial_type type = ddt -[qv_r] - standard_name = humidity_mixing_ratio - long_name = the ratio of the mass of water vapor to the mass of dry air - units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) - type = real - kind = kind_phys - active = (control_for_microphysics_scheme == identifier_for_fer_hires_microphysics_scheme) -[qc_r] - standard_name = cloud_liquid_water_mixing_ratio_interstitial - long_name = the ratio of the mass of liquid water to the mass of dry air - units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) - type = real - kind = kind_phys - active = (control_for_microphysics_scheme == identifier_for_fer_hires_microphysics_scheme) -[qr_r] - standard_name = cloud_rain_water_mixing_ratio - long_name = the ratio of the mass rain water to the mass of dry air - units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) - type = real - kind = kind_phys - active = (control_for_microphysics_scheme == identifier_for_fer_hires_microphysics_scheme) -[qi_r] - standard_name = cloud_ice_mixing_ratio_interstitial - long_name = the ratio of the mass of ice to the mass of dry air - units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) - type = real - kind = kind_phys - active = (control_for_microphysics_scheme == identifier_for_fer_hires_microphysics_scheme) -[qs_r] - standard_name = cloud_snow_mixing_ratio - long_name = the ratio of the mass of snow to mass of dry air - units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) - type = real - kind = kind_phys - active = (control_for_microphysics_scheme == identifier_for_fer_hires_microphysics_scheme) -[qg_r] - standard_name = mass_weighted_rime_factor_mixing_ratio - long_name = the ratio of the mass of rime factor to mass of dry air - units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) - type = real - kind = kind_phys - active = (control_for_microphysics_scheme == identifier_for_fer_hires_microphysics_scheme) -[f_ice] - standard_name = fraction_of_ice_water_cloud - long_name = fraction of ice water cloud - units = frac - dimensions = (horizontal_loop_extent,vertical_layer_dimension) - type = real - kind = kind_phys - active = (control_for_microphysics_scheme == identifier_for_fer_hires_microphysics_scheme) -[f_rain] - standard_name = fraction_of_rain_water_cloud - long_name = fraction of rain water cloud - units = frac - dimensions = (horizontal_loop_extent,vertical_layer_dimension) - type = real - kind = kind_phys - active = (control_for_microphysics_scheme == identifier_for_fer_hires_microphysics_scheme) -[f_rimef] - standard_name = rime_factor - long_name = rime factor - units = frac - dimensions = (horizontal_loop_extent,vertical_layer_dimension) - type = real - kind = kind_phys - active = (control_for_microphysics_scheme == identifier_for_fer_hires_microphysics_scheme) -[cwm] - standard_name = total_cloud_condensate_mixing_ratio_updated_by_physics - long_name = total cloud condensate mixing ratio (except water vapor) updated by physics - units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) - type = real - kind = kind_phys - active = (control_for_microphysics_scheme == identifier_for_fer_hires_microphysics_scheme) [adjsfculw_water] standard_name = surface_upwelling_longwave_flux_over_water long_name = surface upwelling longwave flux at current time over water @@ -10482,14 +10417,6 @@ type = real kind = kind_phys active = (flag_for_rrtmgp_radiation_scheme) -[active_gases_array] - standard_name = list_of_active_gases_used_by_RRTMGP - long_name = list of active gases used by RRTMGP - units = none - dimensions = (number_of_active_gases_used_by_RRTMGP) - type = character - kind = len=128 - active = (flag_for_rrtmgp_radiation_scheme) [rtg_ozone_index] standard_name = vertically_diffused_tracer_index_of_ozone long_name = number of tracers From d562f5f1696d6b977ecebf6701092bc017cc7895 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 6 Oct 2021 08:22:49 -0600 Subject: [PATCH 16/19] Revert change for GFDL_atmos_cubed_sphere to .gitmodules and update submodule pointer for GFDL_atmos_cubed_sphere --- .gitmodules | 6 ++---- atmos_cubed_sphere | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.gitmodules b/.gitmodules index ab5220f7d..94824fe96 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +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/climbfuji/GFDL_atmos_cubed_sphere - branch = improve_error_message_from_ccpp + 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 5f7885b13..640636614 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 5f7885b13ae3ee127afac9ea2689c08a459995f1 +Subproject commit 6406366144dab2b83e1833962577ef8c968cd92d From 167aea906e68fb1df06d6a080592b0dde04b7bf8 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 8 Oct 2021 11:59:32 -0600 Subject: [PATCH 17/19] Update submodule pointer for ccpp-physics --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index 110aac8c8..4fb84dbcf 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 110aac8c84330eec5d4bb7da0c9f6043246c5533 +Subproject commit 4fb84dbcfd9315c11fa694d899ebaa8afee837f4 From 9c7357b080016442be318aed2f35ef62d0dfa7bb Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Mon, 18 Oct 2021 08:35:09 -0600 Subject: [PATCH 18/19] Revert submodule pointer update for GFDL_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 640636614..ab026b794 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 6406366144dab2b83e1833962577ef8c968cd92d +Subproject commit ab026b79497ee00530ff3eb6b59dd9b9346e8e7d From 2e28d65bfc26220dcde6d8e02fa6b7d427679e11 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Sun, 24 Oct 2021 20:04:55 -0600 Subject: [PATCH 19/19] Revert .gitmodules and update submodule pointers for ccpp-framework and ccpp-physics; remove ccpp/suites/suite_FV3_GFS_v16_thompson.xml.dom --- .gitmodules | 12 +- ccpp/framework | 2 +- ccpp/physics | 2 +- .../suites/suite_FV3_GFS_v16_thompson.xml.dom | 108 ------------------ 4 files changed, 6 insertions(+), 118 deletions(-) delete mode 100644 ccpp/suites/suite_FV3_GFS_v16_thompson.xml.dom diff --git a/.gitmodules b/.gitmodules index 94824fe96..a54f243ae 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,13 +4,9 @@ branch = dev/emc [submodule "ccpp/framework"] path = ccpp/framework - #url = https://github.com/NCAR/ccpp-framework - #branch = main - url = https://github.com/climbfuji/ccpp-framework - branch = debug-array-alloc-ccpp-caps + 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/climbfuji/ccpp-physics - branch = debug-array-alloc-ccpp-caps + url = https://github.com/NCAR/ccpp-physics + branch = main diff --git a/ccpp/framework b/ccpp/framework index 0a7fdb9a8..f7a4af8c4 160000 --- a/ccpp/framework +++ b/ccpp/framework @@ -1 +1 @@ -Subproject commit 0a7fdb9a822b19d90fb4c83bdc6ff51c17d3be01 +Subproject commit f7a4af8c4a322b0a75e0eb3896512522bca6cfa9 diff --git a/ccpp/physics b/ccpp/physics index c68c8640c..7d7b3bcc4 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit c68c8640cab84617a28a75038b1e6bdd0f2e60c7 +Subproject commit 7d7b3bcc4b8009ef3491bd230b31bf5af5910bb5 diff --git a/ccpp/suites/suite_FV3_GFS_v16_thompson.xml.dom b/ccpp/suites/suite_FV3_GFS_v16_thompson.xml.dom deleted file mode 100644 index 1d4a88ea2..000000000 --- a/ccpp/suites/suite_FV3_GFS_v16_thompson.xml.dom +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - GFS_time_vary_pre - GFS_rrtmg_setup - GFS_rad_time_vary - GFS_phys_time_vary - - - - - GFS_suite_interstitial_rad_reset - GFS_rrtmg_pre - GFS_radiation_surface - rrtmg_sw_pre - rrtmg_sw - rrtmg_sw_post - rrtmg_lw_pre - rrtmg_lw - rrtmg_lw_post - GFS_rrtmg_post - - - - - GFS_suite_interstitial_phys_reset - GFS_suite_interstitial_rad_reset - GFS_diagtoscreen - GFS_interstitialtoscreen - 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 - GFS_PBL_generic_pre - satmedmfvdifq - GFS_PBL_generic_post - GFS_GWD_generic_pre - cires_ugwp - cires_ugwp_post - GFS_GWD_generic_post - GFS_suite_stateout_update - ozphys_2015 - h2ophys - get_phi_fv3 - GFS_suite_interstitial_3 - GFS_DCNV_generic_pre - samfdeepcnv - GFS_DCNV_generic_post - GFS_SCNV_generic_pre - samfshalcnv - GFS_SCNV_generic_post - GFS_suite_interstitial_4 - cnvc90 - GFS_diagtoscreen - GFS_interstitialtoscreen - GFS_MP_generic_pre - GFS_diagtoscreen - GFS_interstitialtoscreen - mp_thompson_pre - GFS_diagtoscreen - GFS_interstitialtoscreen - - - mp_thompson - - - GFS_diagtoscreen - GFS_interstitialtoscreen - mp_thompson_post - GFS_diagtoscreen - GFS_interstitialtoscreen - GFS_MP_generic_post - maximum_hourly_diagnostics - phys_tend - - - - - GFS_stochastics - - - -