diff --git a/GFS_layer/GFS_driver.F90 b/GFS_layer/GFS_driver.F90 index f2759068c..f08868d56 100644 --- a/GFS_layer/GFS_driver.F90 +++ b/GFS_layer/GFS_driver.F90 @@ -151,7 +151,7 @@ subroutine GFS_initialize (Model, Statein, Stateout, Sfcprop, & Init_parm%gnx, Init_parm%gny, & Init_parm%dt_dycore, Init_parm%dt_phys, & Init_parm%bdat, Init_parm%cdat, & - Init_parm%tracer_names) + Init_parm%tracer_names, Init_parm%blksz) call read_o3data (Model%ntoz, Model%me, Model%master) call read_h2odata (Model%h2o_phys, Model%me, Model%master) @@ -163,7 +163,7 @@ subroutine GFS_initialize (Model, Statein, Stateout, Sfcprop, & call Sfcprop (nb)%create (Init_parm%blksz(nb), Model) call Coupling (nb)%create (Init_parm%blksz(nb), Model) call Grid (nb)%create (Init_parm%blksz(nb), Model) - call Tbd (nb)%create (Init_parm%blksz(nb), Init_parm%blksz(:), nb, Model) + call Tbd (nb)%create (Init_parm%blksz(nb), nb, Model) call Cldprop (nb)%create (Init_parm%blksz(nb), Model) call Radtend (nb)%create (Init_parm%blksz(nb), Model) !--- internal representation of diagnostics @@ -264,7 +264,6 @@ end subroutine GFS_initialize subroutine GFS_time_vary_step (Model, Statein, Stateout, Sfcprop, Coupling, & Grid, Tbd, Cldprop, Radtend, Diag, Sfccycle) - use physparam, only: ictmflg, isolar use GFS_phys_time_vary_1, only: GFS_phys_time_vary_1_run use GFS_phys_time_vary_2, only: GFS_phys_time_vary_2_run use GFS_rad_time_vary, only: GFS_rad_time_vary_run @@ -283,12 +282,9 @@ subroutine GFS_time_vary_step (Model, Statein, Stateout, Sfcprop, Coupling, & type(GFS_diag_type), intent(inout) :: Diag type(GFS_sfccycle_type), intent(inout) :: Sfccycle - !--- local variables - real(kind=kind_phys) :: sec - - call GFS_phys_time_vary_1_run (Model, sec, Tbd%blkno) + call GFS_phys_time_vary_1_run (Model, Tbd) - call GFS_rad_time_vary_run (Model, Statein, Tbd, sec, ictmflg, isolar) + call GFS_rad_time_vary_run (Model, Statein, Tbd) call GFS_phys_time_vary_2_run (Grid, Model, Tbd, Sfcprop, Cldprop, Diag, Sfccycle) diff --git a/GFS_layer/GFS_typedefs.F90 b/GFS_layer/GFS_typedefs.F90 index 14df7f0c6..209572508 100644 --- a/GFS_layer/GFS_typedefs.F90 +++ b/GFS_layer/GFS_typedefs.F90 @@ -18,8 +18,8 @@ module GFS_typedefs !> \section arg_table_GFS_typedefs !! | local var name | longname | description | units | rank | type | kind | intent | optional | !! |---------------------------------|--------------------------------------------------------|---------------------------------------------------------|---------------|------|-----------------------|-----------|--------|----------| -!! | IPD_Data(nb)%Cldprop | FV3-GFS_Cldprop_type | derived type GFS_cldprop_type in FV3 | DDT | 0 | GFS_cldprop_type | | none | F | !! | IPD_Control | FV3-GFS_Control_type | derived type GFS_control_type in FV3 | DDT | 0 | GFS_control_type | | none | F | +!! | IPD_Data(nb)%Cldprop | FV3-GFS_Cldprop_type | derived type GFS_cldprop_type in FV3 | DDT | 0 | GFS_cldprop_type | | none | F | !! | IPD_Data(nb)%Coupling | FV3-GFS_Coupling_type | derived type GFS_coupling_type in FV3 | DDT | 0 | GFS_coupling_type | | none | F | !! | IPD_Data(nb)%Intdiag | FV3-GFS_Diag_type | derived type GFS_diag_type in FV3 | DDT | 0 | GFS_diag_type | | none | F | !! | IPD_Data(nb)%Grid | FV3-GFS_Grid_type | derived type GFS_grid_type in FV3 | DDT | 0 | GFS_grid_type | | none | F | @@ -740,6 +740,8 @@ module GFS_typedefs !! | IPD_Control%zhour | | previous hour diagnostic buckets emptied | h | 0 | real | kind_phys | none | F | !! | IPD_Control%kdt | index_of_time_step | current forecast iteration | index | 0 | integer | | none | F | !! | IPD_Control%jdat | | current forecast date and time | | 1 | integer | | none | F | +!! | IPD_Control%sec | seconds_elapsed_since_model_initialization | seconds elapsed since model initialization | s | 0 | real | kind_phys | none | F | +!! | IPD_Control%blksz | horizontal_block_size | for explicit data blocking: block sizes of all blocks | count | 1 | integer | | none | F | !! type GFS_control_type @@ -767,6 +769,7 @@ module GFS_typedefs integer :: cny !< number of points in the j-dir for this cubed-sphere face integer :: lonr !< number of global points in x-dir (i) along the equator integer :: latr !< number of global points in y-dir (j) along any meridian + integer, pointer :: blksz(:) !< for explicit data blocking !--- coupling parameters logical :: cplflx !< default no cplflx collection @@ -986,6 +989,7 @@ module GFS_typedefs integer :: kdt !< current forecast iteration integer :: jdat(1:8) !< current forecast date and time !< (yr, mon, day, t-zone, hr, min, sec, mil-sec) + real(kind=kind_phys) :: sec !< seconds since model initialization contains procedure :: init => control_initialize @@ -1075,8 +1079,6 @@ module GFS_typedefs !! | IPD_Data(nb)%Tbd%phy_f3d(:,:,3) | air_temperature_at_previous_time_step | air temperature at previous time step | K | 2 | real | kind_phys | none | F | !! | IPD_Data(nb)%Tbd%phy_f3d(:,:,4) | water_vapor_specific_humidity_at_previous_time_step | water vapor specific humidity at previous time step | kg kg-1 | 2 | real | kind_phys | none | F | !! | IPD_Data(nb)%Tbd%blkno | block_number | for explicit data blocking: block number of this block | index | 0 | integer | | none | F | -!! | IPD_Data(nb)%Tbd%blksz | horizontal_block_size | for explicit data blocking: block sizes of all blocks | count | 1 | integer | | none | F | -!! | IPD_Data(nb)%Tbd%sec | seconds_elapsed_since_model_initialization | seconds elapsed since model initialization | s | 0 | real | kind_phys | none | F | !! | IPD_Data(nb)%Tbd%htlwc | tendency_of_air_temperature_due_to_longwave_heating_on_radiation_time_step | total sky heating rate due to longwave radiation | K s-1 | 2 | real | kind_phys | none | F | !! | IPD_Data(nb)%Tbd%htlw0 | tendency_of_air_temperature_due_to_longwave_heating_assuming_clear_sky_on_radiation_time_step | clear sky heating rate due to longwave radiation | K s-1 | 2 | real | kind_phys | none | F | !! | IPD_Data(nb)%Tbd%htswc | tendency_of_air_temperature_due_to_shortwave_heating_on_radiation_time_step | total sky heating rate due to shortwave radiation | K s-1 | 2 | real | kind_phys | none | F | @@ -1116,8 +1118,8 @@ module GFS_typedefs real (kind=kind_phys), pointer :: phy_f3d (:,:,:) => null() !< 3d arrays saved for restart integer :: blkno !< for explicit data blocking: block number of this block - integer, pointer :: blksz (:) => null() !< for explicit data blocking: horizontal block sizes of all blocks - real (kind=kind_phys) :: sec !< + + !--- radiation variables that need to be carried over from radiation to physics real (kind=kind_phys), pointer :: htlwc(:,:) => null() !< real (kind=kind_phys), pointer :: htlw0(:,:) => null() !< real (kind=kind_phys), pointer :: htswc(:,:) => null() !< @@ -2246,7 +2248,8 @@ end subroutine coupling_create subroutine control_initialize (Model, nlunit, fn_nml, me, master, & logunit, isc, jsc, nx, ny, levs, & cnx, cny, gnx, gny, dt_dycore, & - dt_phys, idat, jdat, tracer_names) + dt_phys, idat, jdat, tracer_names, & + blksz) !--- modules use physcons, only: max_lon, max_lat, min_lon, min_lat, & @@ -2279,6 +2282,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & integer, intent(in) :: idat(8) integer, intent(in) :: jdat(8) character(len=32), intent(in) :: tracer_names(:) + integer, intent(in) :: blksz(:) !--- local variables integer :: n integer :: ios @@ -2538,6 +2542,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%cny = cny Model%lonr = gnx Model%latr = gny + allocate(Model%blksz(1:size(blksz))) + Model%blksz = blksz !--- coupling parameters Model%cplflx = cplflx @@ -2713,6 +2719,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%zhour = mod(Model%phour,Model%fhzero) Model%kdt = 0 Model%jdat(1:8) = jdat(1:8) + Model%sec = 0 !--- stored in wam_f107_kp module f107_kp_size = 56 @@ -2968,6 +2975,8 @@ subroutine control_print(Model) print *, ' cny : ', Model%cny print *, ' lonr : ', Model%lonr print *, ' latr : ', Model%latr + print *, ' blksz(1) : ', Model%blksz(1) + print *, ' blksz(size(blksz)): ', Model%blksz(size(Model%blksz)) print *, ' ' print *, 'coupling parameters' print *, ' cplflx : ', Model%cplflx @@ -3144,6 +3153,7 @@ subroutine control_print(Model) print *, ' zhour : ', Model%zhour print *, ' kdt : ', Model%kdt print *, ' jdat : ', Model%jdat + print *, ' sec : ', Model%sec endif end subroutine control_print @@ -3195,13 +3205,12 @@ end subroutine grid_create !-------------------- ! GFS_tbd_type%create !-------------------- - subroutine tbd_create (Tbd, IM, BLKSZ, BLKNO, Model) + subroutine tbd_create (Tbd, IM, BLKNO, Model) implicit none class(GFS_tbd_type) :: Tbd integer, intent(in) :: IM - integer, dimension(:), intent(in) :: BLKSZ integer, intent(in) :: BLKNO type(GFS_control_type), intent(in) :: Model @@ -3252,11 +3261,7 @@ subroutine tbd_create (Tbd, IM, BLKSZ, BLKNO, Model) Tbd%phy_f2d = clear_val Tbd%phy_f3d = clear_val - allocate (Tbd%blksz (size(BLKSZ))) - Tbd%blkno = BLKNO - Tbd%blksz = BLKSZ - Tbd%sec = clear_val allocate (Tbd%htlwc (IM,Model%levr+LTP)) allocate (Tbd%htlw0 (IM,Model%levr+LTP)) diff --git a/IPD_layer/IPD_CCPP_driver.F90 b/IPD_layer/IPD_CCPP_driver.F90 index a087ef9ae..0d47648f2 100644 --- a/IPD_layer/IPD_CCPP_driver.F90 +++ b/IPD_layer/IPD_CCPP_driver.F90 @@ -38,7 +38,7 @@ module IPD_CCPP_driver !------------------------------- ! DH* TODO - CHECK IF WE CAN REMOVE Atm_block completely? subroutine IPD_step (IPD_Control, IPD_Data, IPD_Diag, IPD_Restart, IPD_Interstitial, & - nBlocks, Atm_block, Init_parm, l_salp_data, l_snupx, ccpp_suite, step, ierr) + nBlocks, Init_parm, l_salp_data, l_snupx, ccpp_suite, step, ierr) use namelist_soilveg, only: salp_data, snupx, max_vegtyp use block_control_mod, only: block_control_type @@ -55,7 +55,6 @@ subroutine IPD_step (IPD_Control, IPD_Data, IPD_Diag, IPD_Restart, IPD_Interstit type(IPD_restart_type), target, intent(inout) :: IPD_Restart type(IPD_interstitial_type), target, intent(inout) :: IPD_Interstitial(:) integer, target, intent(in) :: nBlocks - type (block_control_type), target, intent(in) , optional :: Atm_block type(IPD_init_type), target, intent(in) , optional :: Init_parm real(kind=kind_phys), intent(inout), optional :: l_salp_data real(kind=kind_phys), intent(inout), optional :: l_snupx(max_vegtyp) @@ -76,11 +75,7 @@ subroutine IPD_step (IPD_Control, IPD_Data, IPD_Diag, IPD_Restart, IPD_Interstit if (step==0) then - if (.not. present(Atm_block)) then - call ccpp_error('Error, IPD init step called without mandatory Atm_block argument') - ierr = 1 - return - else if (.not. present(Init_parm)) then + if (.not. present(Init_parm)) then call ccpp_error('Error, IPD init step called without mandatory Init_parm argument') ierr = 1 return @@ -106,7 +101,6 @@ subroutine IPD_step (IPD_Control, IPD_Data, IPD_Diag, IPD_Restart, IPD_Interstit call ccpp_fields_add(cdata, 'IPD_Diag', '', c_loc(IPD_Diag), rank=size(shape(IPD_Diag)), dims=shape(IPD_Diag), ierr=ierr) call ccpp_fields_add(cdata, 'IPD_Restart', '', c_loc(IPD_Restart), ierr=ierr) call ccpp_fields_add(cdata, 'IPD_Interstitial', '', c_loc(IPD_Interstitial), rank=size(shape(IPD_Interstitial)), dims=shape(IPD_Interstitial), ierr=ierr) - call ccpp_fields_add(cdata, 'Atm_block', '', c_loc(Atm_block), ierr=ierr) call ccpp_fields_add(cdata, 'Init_parm', '', c_loc(Init_parm), ierr=ierr) call ccpp_fields_add(cdata, 'salp_data', l_salp_data, ierr=ierr) call ccpp_fields_add(cdata, 'snupx', l_snupx, ierr=ierr) @@ -132,11 +126,11 @@ subroutine IPD_step (IPD_Control, IPD_Data, IPD_Diag, IPD_Restart, IPD_Interstit end do end do + ! Time vary steps else if (step==1) then - ! DH* TODO - TEST RUNNING THIS OVER ALL BLOCKS USING THREADING? - ! Loop over blocks - in general, cannot use OpenMP for this step; - ! however, threading may be implemented inside the IPD_setup_step + ! Loop over blocks; cannot use OpenMP for this step; however, + ! threading may be implemented inside the IPD_setup_step do nb = 1,nBlocks nt = 1 call ccpp_run(cdata_block(nb,nt)%suite%ipds(step), cdata_block(nb,nt), ierr) diff --git a/physics/GFS_debug.f90 b/physics/GFS_debug.f90 index 8deae48c6..4af087ef0 100644 --- a/physics/GFS_debug.f90 +++ b/physics/GFS_debug.f90 @@ -109,9 +109,7 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, & call print_var(mpirank,omprank,Tbd%blkno, 'Tbd%htlw0', Tbd%htlw0) call print_var(mpirank,omprank,Tbd%blkno, 'Tbd%htswc', Tbd%htswc) call print_var(mpirank,omprank,Tbd%blkno, 'Tbd%htsw0', Tbd%htsw0) - call print_var(mpirank,omprank,Tbd%blkno, 'Tbd%sec', Tbd%sec) - call print_var(mpirank,omprank,Tbd%blkno, 'Tbd%blksz(Tbd%blkno)', Tbd%blksz(Tbd%blkno)) - !call Interstitial%mprint(mpirank,omprank,Tbd%blkno) + call print_var(mpirank,omprank,Tbd%blkno, 'Model%sec', Model%sec) end if !$OMP BARRIER end do diff --git a/physics/GFS_phys_time_vary.f90 b/physics/GFS_phys_time_vary.f90 index 9f6816d97..01e26ec75 100644 --- a/physics/GFS_phys_time_vary.f90 +++ b/physics/GFS_phys_time_vary.f90 @@ -15,37 +15,34 @@ end subroutine GFS_phys_time_vary_1_finalize !! | local var name | longname | description | units | rank | type | kind | intent | optional | !! |----------------|--------------------------------------------------------|-----------------------------------------------------------------------|---------------|------|-------------------------------|-----------|--------|----------| !! | Model | FV3-GFS_Control_type | Fortran DDT containing FV3-GFS model control parameters | DDT | 0 | GFS_control_type | | inout | F | -!! | sec | seconds_elapsed_since_model_initialization | seconds elapsed since model initialization | s | 0 | real | kind_phys | inout | F | -!! | blkno | block_number | for explicit data blocking: block number of this block | index | 0 | integer | | in | F | +!! | Tbd | FV3-GFS_Tbd_type | Fortran DDT containing FV3-GFS miscellaneous data | DDT | 0 | GFS_tbd_type | | in | F | !! - subroutine GFS_phys_time_vary_1_run (Model, sec, blkno) + subroutine GFS_phys_time_vary_1_run (Model, Tbd) use machine, only: kind_phys - use GFS_typedefs, only: GFS_control_type + use GFS_typedefs, only: GFS_control_type, GFS_tbd_type implicit none type(GFS_control_type), intent(inout) :: Model - real(kind=kind_phys), intent(inout) :: sec - integer, intent(in) :: blkno + type(GFS_tbd_type), intent(in) :: Tbd real(kind=kind_phys), parameter :: con_24 = 24.0_kind_phys real(kind=kind_phys), parameter :: con_hr = 3600.0_kind_phys real(kind=kind_phys) :: rinc(5) - !--- Model%jdat is being updated directly inside of FV3GFS_cap.F90 - !--- update calendars and triggers - rinc(1:5) = 0 - call w3difdat(Model%jdat,Model%idat,4,rinc) - sec = rinc(4) - - if (blkno==1) then + if (Tbd%blkno==1) then + !--- Model%jdat is being updated directly inside of FV3GFS_cap.F90 + !--- update calendars and triggers + rinc(1:5) = 0 + call w3difdat(Model%jdat,Model%idat,4,rinc) + Model%sec = rinc(4) - Model%phour = sec/con_hr + Model%phour = Model%sec/con_hr !--- set current bucket hour Model%zhour = Model%phour - Model%fhour = (sec + Model%dtp)/con_hr - Model%kdt = nint((sec + Model%dtp)/Model%dtp) + Model%fhour = (Model%sec + Model%dtp)/con_hr + Model%kdt = nint((Model%sec + Model%dtp)/Model%dtp) Model%ipt = 1 Model%lprnt = .false. @@ -59,7 +56,7 @@ subroutine GFS_phys_time_vary_1_run (Model, sec, blkno) Model%solhr = mod(Model%phour+Model%idate(1),con_24) if ((Model%debug) .and. (Model%me == Model%master)) then - print *,' sec ', sec + print *,' sec ', Model%sec print *,' kdt ', Model%kdt print *,' nsswr ', Model%nsswr print *,' nslwr ', Model%nslwr @@ -71,7 +68,6 @@ subroutine GFS_phys_time_vary_1_run (Model, sec, blkno) print *,' solhr ', Model%solhr endif endif -!$OMP barrier end subroutine GFS_phys_time_vary_1_run @@ -144,7 +140,6 @@ subroutine GFS_phys_time_vary_2_run (Grid, Model, Tbd, Sfcprop, Cldprop, Diag, S Model%clstp = 0100 endif endif -!$OMP barrier !--- random number needed for RAS and old SAS and when cal_pre=.true. if ( ((Model%imfdeepcnv <= 0) .or. (Model%cal_pre)) .and. (Model%random_clds) ) then @@ -168,7 +163,7 @@ subroutine GFS_phys_time_vary_2_run (Grid, Model, Tbd, Sfcprop, Cldprop, Diag, S do j = 1,Model%ny do i = 1,Model%nx ix = ix + 1 - if (ix .gt. Tbd%blksz(nb)) then + if (ix .gt. Model%blksz(nb)) then ix = 1 nb = nb + 1 endif @@ -182,20 +177,20 @@ subroutine GFS_phys_time_vary_2_run (Grid, Model, Tbd, Sfcprop, Cldprop, Diag, S !--- o3 interpolation if (Model%ntoz > 0) then - call ozinterpol (Model%me, Tbd%blksz(Tbd%blkno), Model%idate, Model%fhour, & + call ozinterpol (Model%me, Model%blksz(Tbd%blkno), Model%idate, Model%fhour, & Grid%jindx1_o3, Grid%jindx2_o3, Tbd%ozpl, Grid%ddy_o3) endif !--- h2o interpolation if (Model%h2o_phys) then - call h2ointerpol (Model%me, Tbd%blksz(Tbd%blkno), Model%idate, Model%fhour, & + call h2ointerpol (Model%me, Model%blksz(Tbd%blkno), Model%idate, Model%fhour, & Grid%jindx1_h, Grid%jindx2_h, Tbd%h2opl, Grid%ddy_h) endif !--- repopulate specific time-varying sfc properties for AMIP/forecast runs if (Model%nscyc > 0) then if (mod(Model%kdt,Model%nscyc) == 1) THEN - call gcycle (Tbd%blksz(Tbd%blkno), Model, Grid, Sfcprop, Cldprop, Sfccycle) + call gcycle (Model%blksz(Tbd%blkno), Model, Grid, Sfcprop, Cldprop, Sfccycle) endif endif diff --git a/physics/GFS_rad_time_vary.f90 b/physics/GFS_rad_time_vary.f90 index 680650ccb..d6289cbfb 100644 --- a/physics/GFS_rad_time_vary.f90 +++ b/physics/GFS_rad_time_vary.f90 @@ -16,11 +16,8 @@ end subroutine GFS_rad_time_vary_init !! | Model | FV3-GFS_Control_type | Fortran DDT containing FV3-GFS model control parameters | DDT | 0 | GFS_control_type | | inout | F | !! | Statein | FV3-GFS_Statein_type | Fortran DDT containing FV3-GFS prognostic state data in from dycore | DDT | 0 | GFS_statein_type | | in | F | !! | Tbd | FV3-GFS_Tbd_type | Fortran DDT containing FV3-GFS data not yet assigned to a defined container | DDT | 0 | GFS_tbd_type | | inout | F | -!! | sec | seconds_elapsed_since_model_initialization | seconds elapsed since model initialization | s | 0 | real | kind_phys | in | F | -!! | ictmflg | flag_for_initial_time-date_control | flag for initial time/date control | flag | 0 | integer | | in | F | -!! | isolar | flag_for_solar_constant | solar constant control flag | flag | 0 | integer | | in | F | !! - subroutine GFS_rad_time_vary_run (Model, Statein, Tbd, sec, ictmflg, isolar) + subroutine GFS_rad_time_vary_run (Model, Statein, Tbd) use physparam, only: ipsd0, ipsdlim, iaerflg use mersenne_twister, only: random_setseed, random_index, random_stat @@ -37,8 +34,6 @@ subroutine GFS_rad_time_vary_run (Model, Statein, Tbd, sec, ictmflg, isolar) type(GFS_control_type), intent(inout) :: Model type(GFS_statein_type), intent(in) :: Statein type(GFS_tbd_type), intent(inout) :: Tbd - real(kind=kind_phys), intent(in) :: sec - integer, intent(in) :: ictmflg, isolar !--- local variables type (random_stat) :: stat @@ -51,13 +46,12 @@ subroutine GFS_rad_time_vary_run (Model, Statein, Tbd, sec, ictmflg, isolar) call GFS_radupdate_run (Model%idat, Model%jdat, Model%fhswr, Model%dtf, Model%lsswr, & Model%me, Model%slag, Model%sdec, Model%cdec, Model%solcon, & - ictmflg, isolar ) + Model%ictm, Model%isol ) endif -!$OMP barrier !--- set up random seed index in a reproducible way for entire cubed-sphere face (lat-lon grid) if ((Model%isubc_lw==2) .or. (Model%isubc_sw==2)) then - ipseed = mod(nint(con_100*sqrt(sec)), ipsdlim) + 1 + ipsd0 + ipseed = mod(nint(con_100*sqrt(Model%sec)), ipsdlim) + 1 + ipsd0 call random_setseed (ipseed, stat) call random_index (ipsdlim, numrdm, stat) @@ -70,7 +64,7 @@ subroutine GFS_rad_time_vary_run (Model, Statein, Tbd, sec, ictmflg, isolar) do j = 1,Model%ny do i = 1,Model%nx ix = ix + 1 - if (ix .gt. Tbd%blksz(nb)) then + if (ix .gt. Model%blksz(nb)) then ix = 1 nb = nb + 1 endif @@ -82,7 +76,7 @@ subroutine GFS_rad_time_vary_run (Model, Statein, Tbd, sec, ictmflg, isolar) enddo enddo endif ! isubc_lw and isubc_sw - + if (Model%num_p3d == 4) then if (Model%kdt == 1) then Tbd%phy_f3d(:,:,1) = Statein%tgrs