From 2527c11754f1b8144dcbfb59952d0e06446a0166 Mon Sep 17 00:00:00 2001 From: lisa-bengtsson <54411948+lisa-bengtsson@users.noreply.github.com> Date: Fri, 19 Jul 2024 15:08:22 -0600 Subject: [PATCH 1/8] HR4 and SFS baseline update: Improve convection/radiation interaction in the GFS physics suite (#851) * Output updraft value of convective cloud condensate in CCPP * update xkinv1 to 0.15 * add check if progsigma is true * address seg fault if progsigma=F --------- Co-authored-by: Grant Firl --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index 8103e21cd..46df08008 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 8103e21cd095eb2d81a5152019d6133a0374bb0a +Subproject commit 46df080086fe351f4a96eef5cd82f56af56bf531 From 927261d3916c8e96e7ebe38fe86f06f7aab0abc2 Mon Sep 17 00:00:00 2001 From: HelinWei-NOAA <48133472+HelinWei-NOAA@users.noreply.github.com> Date: Tue, 23 Jul 2024 17:07:30 -0400 Subject: [PATCH 2/8] Land surface upgrades for HR4 (#855) * Land surface upgrades for HR4 --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index 46df08008..2a50cccd9 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 46df080086fe351f4a96eef5cd82f56af56bf531 +Subproject commit 2a50cccd916cceafaf031f4cd14f2ecef277be8f From 0495c19204325401ccba2943f99e65ee9190f07d Mon Sep 17 00:00:00 2001 From: Dusan Jovic <48258889+DusanJovic-NOAA@users.noreply.github.com> Date: Mon, 29 Jul 2024 16:53:37 -0400 Subject: [PATCH 3/8] Fix dumpfields=true option by using ESMF_FieldBundleWrite (#856) * Update diagnose_cplFields routine to use FieldBundleWrite. Needs esmf v8.6.0 * Fixed bug in aux2d dimensions for GFS meta file. * Pass return code from diagnose_cplFields back to caller * Skip 'cpl_scalars' field when dumping export state * fix fhzero for GEFS * fix cpl_scalars (#6) * fix issues w/ cplscalars * error out of all 3 spatial indices are not present * add check for scalar_id = 0 * modify for timeslices and times (#7) --- atmos_model.F90 | 2 +- ccpp/data/GFS_typedefs.meta | 2 +- cpl/module_cap_cpl.F90 | 212 ++++++++++++++++++++++++++++-------- cpl/module_cplscalars.F90 | 2 +- fv3_cap.F90 | 30 +++-- module_fcst_grid_comp.F90 | 9 +- 6 files changed, 197 insertions(+), 60 deletions(-) diff --git a/atmos_model.F90 b/atmos_model.F90 index 92fa59742..c3bf1ec45 100644 --- a/atmos_model.F90 +++ b/atmos_model.F90 @@ -815,7 +815,7 @@ subroutine atmos_model_init (Atmos, Time_init, Time, Time_step) if (mpp_pe() == mpp_root_pe()) print *,'in atmos_model, fhzero=',GFS_Control%fhzero, 'fhour=',sec/3600.,sec_lastfhzerofh/3600 if (mod((sec-sec_lastfhzerofh),int(GFS_Control%fhzero*3600.)) /= 0) then - diag_time = Time - real_to_time_type(mod(int((GFS_Control%kdt - 1)*dt_phys-sec_lastfhzerofh),int(GFS_Control%fhzero))*3600.0) + diag_time = Time - real_to_time_type(real(mod(int((GFS_Control%kdt - 1)*dt_phys-sec_lastfhzerofh),int(GFS_Control%fhzero*3600.0)))) if (mpp_pe() == mpp_root_pe()) print *,'Warning: in atmos_init,start at non multiple of fhzero' endif if (Atmos%iau_offset > zero) then diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index 2a9ec401e..7e4475d9d 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -9927,7 +9927,7 @@ standard_name = auxiliary_2d_arrays long_name = auxiliary 2d arrays to output (for debugging) units = none - dimensions = (horizontal_loop_extent,number_of_xyz_dimensioned_auxiliary_arrays) + dimensions = (horizontal_loop_extent,number_of_xy_dimensioned_auxiliary_arrays) type = real kind = kind_phys active = (number_of_xy_dimensioned_auxiliary_arrays > 0) diff --git a/cpl/module_cap_cpl.F90 b/cpl/module_cap_cpl.F90 index cd92532d7..f91e95384 100644 --- a/cpl/module_cap_cpl.F90 +++ b/cpl/module_cap_cpl.F90 @@ -17,27 +17,29 @@ module module_cap_cpl !----------------------------------------------------------------------------- subroutine diagnose_cplFields(gcomp, clock_fv3, fcstpe, & - statewrite_flag, stdiagnose_flag, state_tag) + statewrite_flag, stdiagnose_flag, state_tag, rc) type(ESMF_GridComp), intent(in) :: gcomp type(ESMF_Clock),intent(in) :: clock_fv3 logical, intent(in) :: fcstpe logical, intent(in) :: statewrite_flag integer, intent(in) :: stdiagnose_flag - character(len=*), intent(in) :: state_tag !< Import or export. + character(len=*), intent(in) :: state_tag !< "import" or "export". + integer, intent(out) :: rc character(len=*),parameter :: subname='(module_cap_cpl:diagnose_cplFields)' type(ESMF_Time) :: currTime type(ESMF_State) :: state - character(len=240) :: timestr - integer :: timeslice = 1 + type(ESMF_TimeInterval) :: timeStep + character(len=240) :: import_timestr, export_timestr character(len=160) :: nuopcMsg character(len=160) :: filename - integer :: rc ! - call ESMF_ClockGet(clock_fv3, currTime=currTime, rc=rc) + call ESMF_ClockGet(clock_fv3, currTime=currTime, timeStep=timestep, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + call ESMF_TimeGet(currTime, timestring=import_timestr, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - call ESMF_TimeGet(currTime, timestring=timestr, rc=rc) + call ESMF_TimeGet(currTime+timestep, timestring=export_timestr, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return call ESMF_ClockPrint(clock_fv3, options="currTime", preString="current time: ", unit=nuopcMsg) @@ -53,8 +55,8 @@ subroutine diagnose_cplFields(gcomp, clock_fv3, fcstpe, & ! Dump Fields out if (statewrite_flag) then - write(filename,'(A)') 'fv3_cap_import_'//trim(timestr)//'_' - call State_RWFields_tiles(state,trim(filename), timeslice, rc=rc) + write(filename,'(A)') 'fv3_cap_import_'//trim(import_timestr)//'.tile*.nc' + call State_RWFields_tiles(state,trim(filename), rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return end if end if @@ -69,8 +71,8 @@ subroutine diagnose_cplFields(gcomp, clock_fv3, fcstpe, & ! Dump Fields out if (statewrite_flag) then - write(filename,'(A)') 'fv3_cap_export_'//trim(timestr)//'_' - call State_RWFields_tiles(state,trim(filename), timeslice, rc=rc) + write(filename,'(A)') 'fv3_cap_export_'//trim(export_timestr)//'.tile*.nc' + call State_RWFields_tiles(state,trim(filename), rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return end if end if @@ -80,28 +82,36 @@ end subroutine diagnose_cplFields !----------------------------------------------------------------------------- ! This subroutine requires ESMFv8 - for coupled FV3 - subroutine State_RWFields_tiles(state,filename,timeslice,rc) + subroutine State_RWFields_tiles(state,filename,rc) type(ESMF_State), intent(in) :: state character(len=*), intent(in) :: fileName - integer, intent(in) :: timeslice integer, intent(out) :: rc - ! local - type(ESMF_Field) :: firstESMFFLD - type(ESMF_Field),allocatable :: flds(:) - type(ESMF_GridComp) :: IOComp - type(ESMF_Grid) :: gridFv3 - - character(len=256) :: msgString - integer :: i, icount, ifld + ! local variables + type(ESMF_Array) :: array + type(ESMF_Grid) :: grid + type(ESMF_FieldBundle) :: fieldbundle + type(ESMF_Field), allocatable :: flds(:) + type(ESMF_DistGrid) :: distgrid + integer :: i, icount, ifld, id integer :: fieldcount, firstfld + integer :: fieldDimCount, gridDimCount, dimCount, tileCount, ungriddedDimCount character(64), allocatable :: itemNameList(:), fldNameList(:) type(ESMF_StateItem_Flag), allocatable :: typeList(:) + integer, allocatable :: minIndexPTile(:,:), maxIndexPTile(:,:) + integer, allocatable :: ungriddedLBound(:), ungriddedUBound(:) + integer, allocatable :: fieldDimLen(:) + character(len=32), allocatable :: gridded_dim_labels(:), ungridded_dim_labels(:) - character(len=*),parameter :: subname='(module_cap_cpl:State_RWFields_tiles)' + character(16), parameter :: convention = 'NetCDF' + character(16), parameter :: purpose = 'FV3' - ! local variables + integer, parameter :: max_n_axes = 4 + integer, parameter :: max_n_dim = 16 + integer, dimension(max_n_axes, max_n_dim) :: axes_dimcount = 0 + + character(len=*),parameter :: subname='(module_cap_cpl:State_RWFields_tiles)' rc = ESMF_SUCCESS !call ESMF_LogWrite(trim(subname)//trim(filename)//": called", ESMF_LOGMSG_INFO, rc=rc) @@ -118,9 +128,6 @@ subroutine State_RWFields_tiles(state,filename,timeslice,rc) if(typeList(i) == ESMF_STATEITEM_FIELD) firstfld = i if(typeList(i) == ESMF_STATEITEM_FIELD) fieldcount = fieldcount + 1 enddo - !write(msgString,*) trim(subname)//' icount = ',icount," fieldcount = - !",fieldcount," firstfld = ",firstfld - !call ESMF_LogWrite(trim(msgString), ESMF_LOGMSG_INFO, rc=rc) allocate(flds(fieldCount),fldNameList(fieldCount)) ifld = 1 @@ -131,37 +138,152 @@ subroutine State_RWFields_tiles(state,filename,timeslice,rc) endif enddo - call ESMF_LogWrite(trim(subname)//": write "//trim(filename)//"tile1-tile6", ESMF_LOGMSG_INFO, rc=rc) - ! get first field - call ESMF_StateGet(state, itemName=itemNameList(firstfld), field=firstESMFFLD, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - - call ESMF_FieldGet(firstESMFFLD, grid=gridFv3, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out + fieldbundle = ESMF_FieldBundleCreate(rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - IOComp = ESMFIO_Create(gridFv3, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out + call ESMF_LogWrite(trim(subname)//": write "//trim(filename), ESMF_LOGMSG_INFO, rc=rc) do ifld=1, fieldCount call ESMF_StateGet(state, itemName=fldNameList(ifld), field=flds(ifld), rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + call ESMF_FieldGet(flds(ifld), grid=grid, dimCount=fieldDimCount, array=array, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + if (fieldDimCount > 4) then + call ESMF_LogWrite(trim(subname)//": fieldDimCount > 4 unsupported", ESMF_LOGMSG_ERROR, rc=rc) + end if + + call ESMF_GridGet(grid, dimCount=gridDimCount, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + if (gridDimCount > 2) then + call ESMF_LogWrite(trim(subname)//": gridDimCount > 2 unsupported", ESMF_LOGMSG_ERROR, rc=rc) + end if + + call ESMF_ArrayGet(array, distgrid=distgrid, dimCount=dimCount, tileCount=tileCount, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + ! skip 'cpl_scalars' field because it has tileCount == 1, while all other fields have 6. + ! This causes the following error: + ! 20240705 134459.788 ERROR PET000 ESMCI_IO.C:1614 ESMCI::IO::checkNtiles() Wrong data value - New number of tiles (6) does not match previously-set number of tiles (1) for this IO object. All arrays handled by a given IO object must have the same number of tiles. + if (trim(fldNameList(ifld)) == 'cpl_scalars') then + cycle + endif + + allocate(fieldDimLen(fieldDimCount)) + + allocate(minIndexPTile(dimCount, tileCount)) + allocate(maxIndexPTile(dimCount, tileCount)) + call ESMF_DistGridGet(distgrid, minIndexPTile=minIndexPTile, maxIndexPTile=maxIndexPTile, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + allocate(gridded_dim_labels(gridDimCount)) + do i = 1, gridDimCount + fieldDimLen(i) = maxIndexPTile(i,1) - minIndexPTile(i,1) + 1 + id = find_axis_id_for_axis_count(i,fieldDimLen(i)) + if (id < 1) then + call ESMF_LogWrite(trim(subname)//": id < 1", ESMF_LOGMSG_ERROR, rc=rc) + endif + if (i == 1) write(gridded_dim_labels(i),'(A,I0)') 'xaxis_',id + if (i == 2) write(gridded_dim_labels(i),'(A,I0)') 'yaxis_',id + end do + + deallocate(minIndexPTile) + deallocate(maxIndexPTile) + + ungriddedDimCount = fieldDimCount - gridDimCount + allocate(ungridded_dim_labels(ungriddedDimCount)) + if (fieldDimCount > gridDimCount) then + allocate(ungriddedLBound(ungriddedDimCount)) + allocate(ungriddedUBound(ungriddedDimCount)) + call ESMF_FieldGet(flds(ifld), ungriddedLBound=ungriddedLBound, ungriddedUBound=ungriddedUBound, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + do i=1,ungriddedDimCount + fieldDimLen(i+gridDimCount) = ungriddedUBound(i) - ungriddedLBound(i) + 1 + id = find_axis_id_for_axis_count(i+gridDimCount, fieldDimLen(i+gridDimCount)) + if (id < 1) then + write(0,*)'stop error', id, i, fieldDimLen(i+gridDimCount) + endif + if (i==1) write(ungridded_dim_labels(i),'(A,I0)') 'zaxis_',id + if (i==2) write(ungridded_dim_labels(i),'(A,I0)') 'taxis_',id + end do + deallocate(ungriddedLBound) + deallocate(ungriddedUBound) + end if + + call ESMF_AttributeAdd(grid, convention=convention, purpose=purpose, attrList=(/ ESMF_ATT_GRIDDED_DIM_LABELS /), rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + call ESMF_AttributeSet(grid, convention=convention, purpose=purpose, & + name=ESMF_ATT_GRIDDED_DIM_LABELS, valueList=gridded_dim_labels, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + if (ungriddedDimCount > 0) then + call ESMF_AttributeAdd(flds(ifld), convention=convention, purpose=purpose, & + attrList=(/ ESMF_ATT_UNGRIDDED_DIM_LABELS /), rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + call ESMF_AttributeSet(flds(ifld), convention=convention, purpose=purpose, & + name=ESMF_ATT_UNGRIDDED_DIM_LABELS, valueList=ungridded_dim_labels, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + end if + + deallocate(fieldDimLen) + deallocate(gridded_dim_labels) + deallocate(ungridded_dim_labels) + + call ESMF_FieldBundleAdd(fieldbundle, (/flds(ifld)/), rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + enddo - call ESMFIO_Write(IOComp, filename, flds, filePath='./', rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out + call ESMF_FieldBundleWrite(fieldbundle, fileName=trim(filename), convention=convention, purpose=purpose, & + timeslice=1, overwrite=.true., rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return -! -- Finalize ESMFIO +! -- Finalize deallocate(flds) deallocate(fldNameList) - call ESMFIO_Destroy(IOComp, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) call ESMF_Finalize() + + call ESMF_FieldBundleDestroy(fieldbundle, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return !call ESMF_LogWrite(trim(subname)//trim(filename)//": finished", ESMF_LOGMSG_INFO, rc=rc) + contains + + function find_axis_id_for_axis_count(axis, count) result(id) + integer, intent(in) :: axis, count + + integer :: id + integer :: i + + id = -1 ! not found + + if (axis > max_n_axes) then + call ESMF_LogWrite('axis > max_n_axes. Increase max_n_axes in '//trim(subname), ESMF_LOGMSG_ERROR) + return + end if + + do i =1, max_n_dim + if (axes_dimcount(axis, i) == 0) then + axes_dimcount(axis, i) = count + id = i + return + else + if (axes_dimcount(axis, i) == count) then + id = i + return + end if + end if + end do + + call ESMF_LogWrite('Increase max_n_dim in '//trim(subname), ESMF_LOGMSG_ERROR) + + end function find_axis_id_for_axis_count + end subroutine State_RWFields_tiles !----------------------------------------------------------------------------- diff --git a/cpl/module_cplscalars.F90 b/cpl/module_cplscalars.F90 index 2b3e5869e..481de02be 100644 --- a/cpl/module_cplscalars.F90 +++ b/cpl/module_cplscalars.F90 @@ -116,7 +116,7 @@ subroutine State_SetScalar(scalar_value, scalar_id, State, flds_scalar_name, fld if (mytask == 0) then call ESMF_FieldGet(lfield, farrayPtr = farrayptr, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - if (scalar_id < 0 .or. scalar_id > flds_scalar_num) then + if (scalar_id <= 0 .or. scalar_id > flds_scalar_num) then call ESMF_LogWrite(trim(subname)//": ERROR in scalar_id", ESMF_LOGMSG_INFO) rc = ESMF_FAILURE return diff --git a/fv3_cap.F90 b/fv3_cap.F90 index 20c2bcc7a..4d3f999d2 100644 --- a/fv3_cap.F90 +++ b/fv3_cap.F90 @@ -288,7 +288,6 @@ subroutine InitializeAdvertise(gcomp, rc) call ESMF_LogWrite(trim(subname)//' flds_scalar_name = '//trim(flds_scalar_name), ESMF_LOGMSG_INFO) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return endif - call NUOPC_CompAttributeGet(gcomp, name="ScalarFieldCount", value=cvalue, isPresent=isPresent, isSet=isSet, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return if (isPresent .and. isSet) then @@ -313,14 +312,23 @@ subroutine InitializeAdvertise(gcomp, rc) call ESMF_LogWrite(trim(subname)//' : flds_scalar_index_ny = '//trim(msgString), ESMF_LOGMSG_INFO) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return endif - call NUOPC_CompAttributeGet(gcomp, name="ScalarFieldIdxGridNTile", value=cvalue, isPresent=isPresent, isSet=isSet, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - if (isPresent .and. isSet) then - read(cvalue,*) flds_scalar_index_ntile - write(msgString,*) flds_scalar_index_ntile - call ESMF_LogWrite(trim(subname)//' : flds_scalar_index_ntile = '//trim(msgString), ESMF_LOGMSG_INFO) + ! tile index must be present if indices for nx and ny are non-zero + if (flds_scalar_index_nx /= 0 .and. flds_scalar_index_ny /=0 ) then + call NUOPC_CompAttributeGet(gcomp, name="ScalarFieldIdxGridNTile", isPresent=isPresent, isSet=isSet, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - endif + if (.not. isPresent .and. .not. isSet) then + if (mype == 0)write(*,*)'ERROR : ScalarFieldIdxGridNTile must be set' + call ESMF_LogWrite('ERROR : ScalarFieldIdxGridNTile must be set', ESMF_LOGMSG_ERROR) + rc = ESMF_FAILURE + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + else + call NUOPC_CompAttributeGet(gcomp, name="ScalarFieldIdxGridNTile", value=cvalue, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + read(cvalue,*) flds_scalar_index_ntile + write(msgString,*) flds_scalar_index_ntile + call ESMF_LogWrite(trim(subname)//' : flds_scalar_index_ntile = '//trim(msgString), ESMF_LOGMSG_INFO) + endif + end if !------------------------------------------------------------------------ ! get config variables @@ -1081,7 +1089,8 @@ subroutine ModelAdvance_phase1(gcomp, rc) if( dbug > 0 .or. cplprint_flag ) then fcstpe = .false. if( mype < num_pes_fcst ) fcstpe = .true. - call diagnose_cplFields(gcomp, clock, fcstpe, cplprint_flag, dbug, 'import') + call diagnose_cplFields(gcomp, clock, fcstpe, cplprint_flag, dbug, 'import', rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return endif timep1re = MPI_Wtime() @@ -1235,7 +1244,8 @@ subroutine ModelAdvance_phase2(gcomp, rc) if( dbug > 0 .or. cplprint_flag ) then fcstpe = .false. if( mype < num_pes_fcst ) fcstpe = .true. - call diagnose_cplFields(gcomp, clock_out, fcstpe, cplprint_flag, dbug, 'export') + call diagnose_cplFields(gcomp, clock_out, fcstpe, cplprint_flag, dbug, 'export', rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return end if timep2re = MPI_Wtime() diff --git a/module_fcst_grid_comp.F90 b/module_fcst_grid_comp.F90 index 27cdf955f..4b79c34af 100644 --- a/module_fcst_grid_comp.F90 +++ b/module_fcst_grid_comp.F90 @@ -293,8 +293,13 @@ subroutine SetServicesNest(nest, rc) ! Write grid to netcdf file if( cplprint_flag ) then write (myGridStr,"(I0)") mygrid - call wrt_fcst_grid(grid, "diagnostic_FV3_fcstGrid"//trim(mygridStr)//".nc", & - regridArea=.TRUE., rc=rc) + if (trim(name)=="global") then + call wrt_fcst_grid(grid, "diagnostic_FV3_fcstGrid"//trim(mygridStr)//".tile*.nc", & + regridArea=.TRUE., rc=rc) + else + call wrt_fcst_grid(grid, "diagnostic_FV3_fcstGrid"//trim(mygridStr)//".nc", & + regridArea=.TRUE., rc=rc) + end if if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return endif From aa1484378de6cc665910b63a691a1475809f6bb3 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Thu, 8 Aug 2024 09:59:20 -0600 Subject: [PATCH 4/8] Convert GFS DDTs from blocked data structures to contiguous arrays (now also includes https://github.com/NOAA-EMC/fv3atm/pull/752) (#798) * Convert GFS_grid DDT: use contiguous arrays instead of blocked data structures * Add GCC-based CI build --------- Co-authored-by: Alex Richert Co-authored-by: Dustin Swales --- .github/pull_request_template.md | 5 + .github/workflows/GCC.yml | 47 +- CMakeLists.txt | 5 + atmos_cubed_sphere | 2 +- atmos_model.F90 | 1001 +++++----- ccpp/config/ccpp_prebuild_config.py | 19 +- ccpp/data/CCPP_data.F90 | 34 +- ccpp/data/CCPP_data.meta | 62 +- ccpp/data/GFS_typedefs.F90 | 161 +- ccpp/data/GFS_typedefs.meta | 1607 ++++++++--------- ccpp/driver/CCPP_driver.F90 | 29 +- ccpp/driver/GFS_diagnostics.F90 | 929 +++++----- ccpp/driver/GFS_init.F90 | 67 +- ccpp/driver/GFS_restart.F90 | 172 +- ccpp/physics | 2 +- cpl/module_block_data.F90 | 302 ++-- io/fv3atm_clm_lake_io.F90 | 100 +- io/fv3atm_oro_io.F90 | 77 +- io/fv3atm_restart_io.F90 | 463 ++--- io/fv3atm_rrfs_sd_io.F90 | 91 +- io/fv3atm_sfc_io.F90 | 746 ++++---- moving_nest/fv_moving_nest.F90 | 14 +- moving_nest/fv_moving_nest_main.F90 | 64 +- moving_nest/fv_moving_nest_physics.F90 | 593 +++--- .../stochastic_physics_wrapper.F90 | 198 +- tests/CMakeLists.txt | 29 + tests/data/post_namelist.nml | 20 + tests/data/post_namelist_empty.nml | 4 + tests/test_post_nems_routines.F90 | 55 + 29 files changed, 3651 insertions(+), 3247 deletions(-) create mode 100644 tests/CMakeLists.txt create mode 100644 tests/data/post_namelist.nml create mode 100644 tests/data/post_namelist_empty.nml create mode 100644 tests/test_post_nems_routines.F90 diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index e4d67029f..b6220c6e3 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -35,3 +35,8 @@ Do PRs in upstream repositories need to be merged first? If so add the "waiting for other repos" label and list the upstream PRs - waiting on noaa-emc/nems/pull/ - waiting on noaa-emc/fv3atm/pull/ + +# Requirements before merging +- [ ] All new code in this PR is tested by at least one unit test +- [ ] All new code in this PR includes Doxygen documentation +- [ ] All new code in this PR does not add new compilation warnings (check CI output) diff --git a/.github/workflows/GCC.yml b/.github/workflows/GCC.yml index 5f3891684..86d0bf668 100644 --- a/.github/workflows/GCC.yml +++ b/.github/workflows/GCC.yml @@ -24,7 +24,7 @@ jobs: mpi: ["mpich", "openmpi"] steps: - + - name: checkout-fv3atm uses: actions/checkout@v4 with: @@ -59,6 +59,7 @@ jobs: spack config add "packages:mpi:require:'${{ matrix.mpi }}'" spack concretize |& tee ${SPACK_ENV}/log.concretize spack install -j2 --fail-fast + echo "spackrc=$?" >> ${GITHUB_ENV} spack clean --all build_fv3atm: @@ -73,9 +74,20 @@ jobs: steps: - - name: install-doxygen + # Only do Doxygen and gcovr build for one job + - name: decide-doc-gcovr-build + run: | + if [[ "${{ matrix.cmake_opts }}" == "-D32BIT=ON" && "${{ matrix.gcc_ver }}" == 12 && "${{ matrix.mpi }}" == mpich ]]; then + echo 'devbuild=ON' | tee -a ${GITHUB_ENV} + echo 'gcov_cmake="-DCMAKE_Fortran_FLAGS=-fprofile-abs-path -fprofile-arcs -ftest-coverage -O0"' | tee -a ${GITHUB_ENV} + else + echo 'devbuild=OFF' | tee -a ${GITHUB_ENV} + fi + + - name: install-utilities run: | sudo apt-get install doxygen graphviz + python3 -m pip install gcovr - name: install-cmake run: | @@ -109,14 +121,34 @@ jobs: export CC=mpicc export CXX=mpicxx export FC=mpif90 - cat /home/runner/work/fv3atm/fv3atm/spack-develop/opt/spack/linux-ubuntu22.04-zen2/gcc-12.3.0/fms-2023.04-*/lib/cmake/fms/fms-config.cmake - cmake ${GITHUB_WORKSPACE}/fv3atm -DBUILD_TESTING=ON ${{ matrix.cmake_opts }} -DENABLE_DOCS=ON + cmake ${GITHUB_WORKSPACE}/fv3atm -DBUILD_TESTING=ON ${{ matrix.cmake_opts }} -DENABLE_DOCS=ON ${{ env.gcov_cmake }} make -j2 - ls -l /home/runner/work/fv3atm/fv3atm/fv3atm/io - - uses: actions/upload-artifact@v4 + - name: run-tests + run: | + cd $GITHUB_WORKSPACE/build + ctest -j2 --output-on-failure --rerun-failed + + - name: get-test-coverage + if: ${{ env.devbuild == 'ON' }} + run: | + cd $GITHUB_WORKSPACE/build + gcovr -r .. -v --html-details --gcov-executable gcov-12 --exclude $GITHUB_WORKSPACE/fv3atm/tests --exclude $GITHUB_WORKSPACE/fv3atm/stochastic_physics_repo --exclude $GITHUB_WORKSPACE/fv3atm/build/ccpp --exclude $GITHUB_WORKSPACE/fv3atm/ccpp/physics --exclude $GITHUB_WORKSPACE/fv3atm/ccpp/framework --exclude $GITHUB_WORKSPACE/fv3atm/atmos_cubed_sphere --exclude CMakeFiles --print-summary -o test-coverage.html + + - name: upload-test-coverage + uses: actions/upload-artifact@v4 + if: ${{ env.devbuild == 'ON' }} + with: + name: test-coverage-fv3atm-${{ github.sha }} + path: | + ${{ github.workspace }}/build/*.html + ${{ github.workspace }}/build/*.css + + - name: upload-docs + uses: actions/upload-artifact@v4 + if: ${{ env.devbuild == 'ON' }} with: - name: docs-gcc${{ matrix.gcc_ver }}-${{ matrix.mpi }}-${{ matrix.cmake_opts }} + name: docs-fv3atm path: | build/docs/html @@ -126,4 +158,3 @@ jobs: with: name: ccpp_prebuild_logs-gcc${{ matrix.gcc_ver }}-${{ matrix.mpi }}-${{ matrix.cmake_opts }} path: ${{ github.workspace }}/build/ccpp/ccpp_prebuild.* - diff --git a/CMakeLists.txt b/CMakeLists.txt index cd8eef7e5..cdf597df2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -164,6 +164,11 @@ if(OPENMP) target_link_libraries(fv3atm PUBLIC OpenMP::OpenMP_Fortran) endif() +if(BUILD_TESTING) + include(CTest) + add_subdirectory(tests) +endif() + ############################################################################### ### Install ############################################################################### diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index 1720f85e5..7c3102fcc 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 1720f85e54765251f869756e67c93ef7acefac0d +Subproject commit 7c3102fccc493d4c006c936ea88e4b512f6f5251 diff --git a/atmos_model.F90 b/atmos_model.F90 index c3bf1ec45..4b3b87d20 100644 --- a/atmos_model.F90 +++ b/atmos_model.F90 @@ -84,7 +84,11 @@ module atmos_model_mod use GFS_diagnostics, only: GFS_externaldiag_type, & GFS_externaldiag_populate use CCPP_data, only: ccpp_suite, GFS_control, & - GFS_data, GFS_interstitial + GFS_statein, GFS_stateout, & + GFS_grid, GFS_tbd, GFS_cldprop, & + GFS_sfcprop, GFS_radtend, & + GFS_coupling, GFS_intdiag, & + GFS_interstitial use GFS_init, only: GFS_initialize use CCPP_driver, only: CCPP_step, non_uniform_blocks @@ -266,17 +270,15 @@ subroutine update_atmos_radiation_physics (Atmos) call set_atmosphere_pelist() call mpp_clock_begin(getClock) if (GFS_control%do_skeb) call atmosphere_diss_est (GFS_control%skeb_npass) ! do smoothing for SKEB - call atmos_phys_driver_statein (GFS_data, Atm_block, flip_vc) + call atmos_phys_driver_statein (GFS_Control, GFS_Statein, Atm_block, flip_vc) call mpp_clock_end(getClock) !--- if dycore only run, set up the dummy physics output state as the input state if (dycore_only) then - do nb = 1,Atm_block%nblks - GFS_data(nb)%Stateout%gu0 = GFS_data(nb)%Statein%ugrs - GFS_data(nb)%Stateout%gv0 = GFS_data(nb)%Statein%vgrs - GFS_data(nb)%Stateout%gt0 = GFS_data(nb)%Statein%tgrs - GFS_data(nb)%Stateout%gq0 = GFS_data(nb)%Statein%qgrs - enddo + GFS_Stateout%gu0 = GFS_Statein%ugrs + GFS_Stateout%gv0 = GFS_Statein%vgrs + GFS_Stateout%gt0 = GFS_Statein%tgrs + GFS_Stateout%gq0 = GFS_Statein%qgrs else if (mpp_pe() == mpp_root_pe() .and. debug) write(6,*) "setup step" @@ -294,7 +296,7 @@ subroutine update_atmos_radiation_physics (Atmos) if (GFS_Control%do_sppt .or. GFS_Control%do_shum .or. GFS_Control%do_skeb .or. & GFS_Control%lndp_type > 0 .or. GFS_Control%do_ca .or. GFS_Control%do_spp) then !--- call stochastic physics pattern generation / cellular automata - call stochastic_physics_wrapper(GFS_control, GFS_data, Atm_block, ierr) + call stochastic_physics_wrapper(GFS_Control, GFS_Statein, GFS_Grid, GFS_Sfcprop, GFS_Radtend, GFS_Coupling, Atm_block, ierr) if (ierr/=0) call mpp_error(FATAL, 'Call to stochastic_physics_wrapper failed') endif @@ -309,7 +311,7 @@ subroutine update_atmos_radiation_physics (Atmos) ! by downscaling the coupling variables from its parent. if (Atmos%isAtCapTime .and. Atmos%ngrids > 1) then if (GFS_control%cplocn2atm .or. GFS_control%cplwav2atm) then - call atmosphere_fill_nest_cpl(Atm_block, GFS_control, GFS_data) + call atmosphere_fill_nest_cpl(Atm_block, GFS_control, GFS_sfcprop) endif endif @@ -320,24 +322,24 @@ subroutine update_atmos_radiation_physics (Atmos) idtend = GFS_Control%dtidx(GFS_Control%index_of_x_wind,GFS_Control%index_of_process_non_physics) if(idtend>=1) then do nb = 1,Atm_block%nblks - GFS_data(nb)%Intdiag%dtend(:,:,idtend) = GFS_data(nb)%Intdiag%dtend(:,:,idtend) & - + (GFS_data(nb)%Statein%ugrs - GFS_data(nb)%Stateout%gu0) + GFS_Intdiag%dtend(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:,idtend) = GFS_Intdiag%dtend(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:,idtend) & + + (GFS_Statein%ugrs(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:) - GFS_Stateout%gu0(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:)) enddo endif idtend = GFS_Control%dtidx(GFS_Control%index_of_y_wind,GFS_Control%index_of_process_non_physics) if(idtend>=1) then do nb = 1,Atm_block%nblks - GFS_data(nb)%Intdiag%dtend(:,:,idtend) = GFS_data(nb)%Intdiag%dtend(:,:,idtend) & - + (GFS_data(nb)%Statein%vgrs - GFS_data(nb)%Stateout%gv0) + GFS_Intdiag%dtend(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:,idtend) = GFS_Intdiag%dtend(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:,idtend) & + + (GFS_Statein%vgrs(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:) - GFS_Stateout%gv0(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:)) enddo endif idtend = GFS_Control%dtidx(GFS_Control%index_of_temperature,GFS_Control%index_of_process_non_physics) if(idtend>=1) then do nb = 1,Atm_block%nblks - GFS_data(nb)%Intdiag%dtend(:,:,idtend) = GFS_data(nb)%Intdiag%dtend(:,:,idtend) & - + (GFS_data(nb)%Statein%tgrs - GFS_data(nb)%Stateout%gt0) + GFS_Intdiag%dtend(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:,idtend) = GFS_Intdiag%dtend(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:,idtend) & + + (GFS_Statein%tgrs(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:) - GFS_Stateout%gt0(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:)) enddo endif @@ -346,8 +348,8 @@ subroutine update_atmos_radiation_physics (Atmos) idtend = GFS_Control%dtidx(itrac+100,GFS_Control%index_of_process_non_physics) if(idtend>=1) then do nb = 1,Atm_block%nblks - GFS_data(nb)%Intdiag%dtend(:,:,idtend) = GFS_data(nb)%Intdiag%dtend(:,:,idtend) & - + (GFS_data(nb)%Statein%qgrs(:,:,itrac) - GFS_data(nb)%Stateout%gq0(:,:,itrac)) + GFS_Intdiag%dtend(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:,idtend) = GFS_Intdiag%dtend(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:,idtend) & + + (GFS_Statein%qgrs(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:,itrac) - GFS_Stateout%gq0(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:,itrac)) enddo endif enddo @@ -370,7 +372,7 @@ subroutine update_atmos_radiation_physics (Atmos) if (chksum_debug) then if (mpp_pe() == mpp_root_pe()) print *,'RADIATION STEP ', GFS_control%kdt, GFS_control%fhour - call fv3atm_checksum(GFS_control, GFS_data, Atm_block) + call fv3atm_checksum(GFS_control, GFS_Statein, GFS_Stateout, GFS_Grid, GFS_Tbd, GFS_Cldprop, GFS_Sfcprop, GFS_Radtend, GFS_Coupling, Atm_block) endif if (mpp_pe() == mpp_root_pe() .and. debug) write(6,*) "physics driver" @@ -384,7 +386,7 @@ subroutine update_atmos_radiation_physics (Atmos) if (chksum_debug) then if (mpp_pe() == mpp_root_pe()) print *,'PHYSICS STEP1 ', GFS_control%kdt, GFS_control%fhour - call fv3atm_checksum(GFS_control, GFS_data, Atm_block) + call fv3atm_checksum(GFS_control, GFS_Statein, GFS_Stateout, GFS_Grid, GFS_Tbd, GFS_Cldprop, GFS_Sfcprop, GFS_Radtend, GFS_Coupling, Atm_block) endif if (GFS_Control%do_sppt .or. GFS_Control%do_shum .or. GFS_Control%do_skeb .or. & @@ -403,7 +405,7 @@ subroutine update_atmos_radiation_physics (Atmos) if (chksum_debug) then if (mpp_pe() == mpp_root_pe()) print *,'PHYSICS STEP2 ', GFS_control%kdt, GFS_control%fhour - call fv3atm_checksum(GFS_control, GFS_data, Atm_block) + call fv3atm_checksum(GFS_control, GFS_Statein, GFS_Stateout, GFS_Grid, GFS_Tbd, GFS_Cldprop, GFS_Sfcprop, GFS_Radtend, GFS_Coupling, Atm_block) endif call getiauforcing(GFS_control,IAU_data) if (mpp_pe() == mpp_root_pe() .and. debug) write(6,*) "end of radiation and physics step" @@ -455,6 +457,7 @@ subroutine atmos_timestep_diagnostics(Atmos) type (atmos_data_type), intent(in) :: Atmos !--- local variables--- integer :: i, nb, count, ierror + integer :: j ! double precision ensures ranks and sums are not truncated ! regardless of compilation settings double precision :: pdiff, psum, pcount, maxabs, pmaxloc(7), adiff @@ -470,17 +473,19 @@ subroutine atmos_timestep_diagnostics(Atmos) ! Put pgr stats in pmaxloc, psum, and pcount: pmaxloc(1) = GFS_Control%tile_num + j = 0 do nb = 1,ATM_block%nblks - count = size(GFS_data(nb)%Statein%pgr) + count = size(GFS_Statein%pgr(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb))) do i=1,count - pdiff = GFS_data(nb)%Statein%pgr(i)-GFS_data(nb)%Intdiag%old_pgr(i) + j = j+1 + pdiff = GFS_Statein%pgr(j)-GFS_Intdiag%old_pgr(j) adiff = abs(pdiff) psum = psum + adiff if(adiff>=maxabs) then maxabs=adiff pmaxloc(2:3) = (/ dble(ATM_block%index(nb)%ii(i)), dble(ATM_block%index(nb)%jj(i)) /) - pmaxloc(4:7) = (/ dble(pdiff), dble(GFS_data(nb)%Statein%pgr(i)), & - dble(GFS_data(nb)%Grid%xlat(i)), dble(GFS_data(nb)%Grid%xlon(i)) /) + pmaxloc(4:7) = (/ dble(pdiff), dble(GFS_Statein%pgr(j)), & + dble(GFS_Grid%xlat(j)), dble(GFS_Grid%xlon(j)) /) endif enddo pcount = pcount+count @@ -506,9 +511,7 @@ subroutine atmos_timestep_diagnostics(Atmos) endif endif ! old_pgr is updated every timestep, including the first one where stats aren't printed: - do nb = 1,ATM_block%nblks - GFS_data(nb)%Intdiag%old_pgr=GFS_data(nb)%Statein%pgr - enddo + GFS_Intdiag%old_pgr = GFS_Statein%pgr endif !----------------------------------------------------------------------- @@ -533,6 +536,7 @@ subroutine atmos_model_init (Atmos, Time_init, Time, Time_step) type (time_type), intent(in) :: Time_init, Time, Time_step !--- local variables --- integer :: unit, i + ! NEEDED? integer :: j, ix integer :: mlon, mlat, nlon, nlat, nlev, sec, sec_lastfhzerofh integer :: ierr, io, logunit integer :: tile_num @@ -627,7 +631,6 @@ subroutine atmos_model_init (Atmos, Time_init, Time, Time_step) blocksize, block_message) allocate(DYCORE_Data(Atm_block%nblks)) - allocate(GFS_data(Atm_block%nblks)) #ifdef _OPENMP nthrds = omp_get_max_threads() @@ -707,15 +710,15 @@ subroutine atmos_model_init (Atmos, Time_init, Time, Time_step) Init_parm%input_nml_file => input_nml_file Init_parm%fn_nml='using internal file' - call GFS_initialize (GFS_control, GFS_data%Statein, GFS_data%Stateout, GFS_data%Sfcprop, & - GFS_data%Coupling, GFS_data%Grid, GFS_data%Tbd, GFS_data%Cldprop, GFS_data%Radtend, & - GFS_data%Intdiag, GFS_interstitial, Init_parm) + call GFS_initialize (GFS_control, GFS_Statein, GFS_Stateout, GFS_Sfcprop, & + GFS_Coupling, GFS_Grid, GFS_Tbd, GFS_Cldprop, GFS_Radtend, & + GFS_Intdiag, GFS_interstitial, Init_parm) !--- populate/associate the Diag container elements - call GFS_externaldiag_populate (GFS_Diag, GFS_Control, GFS_Data%Statein, GFS_Data%Stateout, & - GFS_Data%Sfcprop, GFS_Data%Coupling, GFS_Data%Grid, & - GFS_Data%Tbd, GFS_Data%Cldprop, GFS_Data%Radtend, & - GFS_Data%Intdiag, Init_parm) + call GFS_externaldiag_populate (GFS_Diag, GFS_Control, GFS_Statein, GFS_Stateout, & + GFS_Sfcprop, GFS_Coupling, GFS_Grid, & + GFS_Tbd, GFS_Cldprop, GFS_Radtend, & + GFS_Intdiag, Init_parm) Atmos%Diag => GFS_Diag @@ -734,36 +737,31 @@ subroutine atmos_model_init (Atmos, Time_init, Time, Time_step) deallocate (tracer_names) deallocate (tracer_types) - !--- update tracers in FV3 with any initialized during the physics/radiation init phase -!rab call atmosphere_tracer_postinit (GFS_data, Atm_block) - call atmosphere_nggps_diag (Time, init=.true.) call fv3atm_diag_register (GFS_Diag, Time, Atm_block, GFS_control, Atmos%lon, Atmos%lat, Atmos%axes) - call GFS_restart_populate (GFS_restart_var, GFS_control, GFS_data%Statein, GFS_data%Stateout, GFS_data%Sfcprop, & - GFS_data%Coupling, GFS_data%Grid, GFS_data%Tbd, GFS_data%Cldprop, GFS_data%Radtend, & - GFS_data%IntDiag, Init_parm, GFS_Diag) + call GFS_restart_populate (GFS_restart_var, GFS_control, GFS_statein, GFS_stateout, GFS_sfcprop, & + GFS_coupling, GFS_grid, GFS_tbd, GFS_cldprop, GFS_Radtend, & + GFS_IntDiag, Init_parm, GFS_Diag) if (quilting_restart) then call fv_dyn_restart_register (Atm(mygrid)) - call fv3atm_restart_register (GFS_data%Sfcprop, GFS_restart_var, Atm_block, GFS_control) + call fv3atm_restart_register (GFS_Sfcprop, GFS_restart_var, Atm_block, GFS_control) endif - call fv3atm_restart_read (GFS_data, GFS_restart_var, Atm_block, GFS_control, Atmos%domain_for_read, & + call fv3atm_restart_read (GFS_sfcprop, GFS_restart_var, Atm_block, GFS_control, Atmos%domain_for_read, & Atm(mygrid)%flagstruct%warm_start, ignore_rst_cksum) if(GFS_control%do_ca .and. Atm(mygrid)%flagstruct%warm_start)then call read_ca_restart (Atmos%domain,3,GFS_control%ncells,GFS_control%nca,GFS_control%ncells_g,GFS_control%nca_g) endif - ! Populate the GFS_data%Statein container with the prognostic state + ! Populate the GFS_Statein container with the prognostic state ! in Atm_block, which contains the initial conditions/restart data. - call atmos_phys_driver_statein (GFS_data, Atm_block, flip_vc) + call atmos_phys_driver_statein (GFS_control, GFS_statein, Atm_block, flip_vc) ! When asked to calculate 3-dim. tendencies, set Stateout variables to ! Statein variables here in order to capture the first call to dycore if (GFS_control%ldiag3d) then - do nb = 1,Atm_block%nblks - GFS_data(nb)%Stateout%gu0 = GFS_data(nb)%Statein%ugrs - GFS_data(nb)%Stateout%gv0 = GFS_data(nb)%Statein%vgrs - GFS_data(nb)%Stateout%gt0 = GFS_data(nb)%Statein%tgrs - GFS_data(nb)%Stateout%gq0 = GFS_data(nb)%Statein%qgrs - enddo + GFS_Stateout%gu0 = GFS_Statein%ugrs + GFS_Stateout%gv0 = GFS_Statein%vgrs + GFS_Stateout%gt0 = GFS_Statein%tgrs + GFS_Stateout%gq0 = GFS_Statein%qgrs endif ! Initialize the CCPP framework @@ -777,7 +775,7 @@ subroutine atmos_model_init (Atmos, Time_init, Time, Time_step) GFS_Control%lndp_type > 0 .or. GFS_Control%do_ca .or. GFS_Control%do_spp) then !--- Initialize stochastic physics pattern generation / cellular automata for first time step - call stochastic_physics_wrapper(GFS_control, GFS_data, Atm_block, ierr) + call stochastic_physics_wrapper(GFS_control, GFS_statein, GFS_grid, GFS_sfcprop, GFS_Radtend, GFS_Coupling, Atm_block, ierr) if (ierr/=0) call mpp_error(FATAL, 'Call to stochastic_physics_wrapper failed') endif @@ -873,7 +871,8 @@ subroutine update_atmos_model_dynamics (Atmos) ! W. Ramstrom, AOML/HRD -- May 28, 2021 ! Evaluates whether to move nest, then performs move if needed if (Atmos%moving_nest_parent .or. Atmos%is_moving_nest ) then - call update_moving_nest (Atm_block, GFS_control, GFS_data, Atmos%Time) + call update_moving_nest (Atm_block, GFS_control, GFS_sfcprop, GFS_tbd, & + GFS_cldprop, GFS_intdiag, GFS_grid, Atmos%Time) endif #endif call mpp_clock_begin(fv3Clock) @@ -882,7 +881,7 @@ subroutine update_atmos_model_dynamics (Atmos) ! W. Ramstrom, AOML/HRD -- June 9, 2021 ! Debugging output of moving nest code. Called from this level to access needed input variables. if (Atmos%moving_nest_parent .or. Atmos%is_moving_nest ) then - call dump_moving_nest (Atm_block, GFS_control, GFS_data, Atmos%Time) + call dump_moving_nest (Atm_block, GFS_control, GFS_sfcprop, GFS_tbd, Atmos%Time) endif #endif @@ -984,7 +983,7 @@ subroutine update_atmos_model_state (Atmos, rc) call set_atmosphere_pelist() call mpp_clock_begin(fv3Clock) call mpp_clock_begin(updClock) - call atmosphere_state_update (Atmos%Time, GFS_data, IAU_Data, Atm_block, flip_vc) + call atmosphere_state_update(Atmos%Time, GFS_control, GFS_statein, GFS_stateout, IAU_Data, Atm_block, flip_vc) #ifdef MOVING_NEST call execute_tracker(Atm, mygrid, Atmos%Time, Atmos%Time_step) #endif @@ -993,8 +992,7 @@ subroutine update_atmos_model_state (Atmos, rc) if (chksum_debug) then if (mpp_pe() == mpp_root_pe()) print *,'UPDATE STATE ', GFS_control%kdt, GFS_control%fhour - if (mpp_pe() == mpp_root_pe()) print *,'in UPDATE STATE ', size(GFS_data(1)%SfcProp%tsfc),'nblks=',Atm_block%nblks - call fv3atm_checksum(GFS_control, GFS_data, Atm_block) + call fv3atm_checksum(GFS_control, GFS_statein, GFS_stateout, GFS_grid, GFS_tbd, GFS_cldprop, GFS_sfcprop, GFS_Radtend, GFS_Coupling, Atm_block) endif !--- advance time --- @@ -1154,12 +1152,12 @@ subroutine atmos_model_restart(Atmos, timestamp) character(len=*), intent(in) :: timestamp if (quilting_restart) then - call fv_sfc_restart_output(GFS_Data%Sfcprop, Atm_block, GFS_control) + call fv_sfc_restart_output(GFS_sfcprop, Atm_block, GFS_control) call fv_phy_restart_output(GFS_restart_var, Atm_block) call fv_dyn_restart_output(Atm(mygrid), timestamp) else call atmosphere_restart(timestamp) - call fv3atm_restart_write (GFS_data, GFS_restart_var, Atm_block, & + call fv3atm_restart_write (GFS_sfcprop, GFS_restart_var, Atm_block, & GFS_control, Atmos%domain, timestamp) endif if(GFS_control%do_ca)then @@ -1185,10 +1183,7 @@ subroutine get_atmos_model_ungridded_dim(nlev, nsoillev, ntracers) !--- number of soil levels if (present(nsoillev)) then nsoillev = 0 - if (allocated(GFS_data)) then - if (associated(GFS_data(1)%Sfcprop%slc)) & - nsoillev = size(GFS_data(1)%Sfcprop%slc, dim=2) - end if + if (associated(GFS_Sfcprop%slc)) nsoillev = size(GFS_Sfcprop%slc, dim=2) end if !--- total number of atmospheric tracers @@ -1317,7 +1312,7 @@ end subroutine get_atmos_tracer_types ! tracers must match their order in the chemistry component. ! ! Requires: -! GFS_data +! GFS data types ! Atm_block ! subroutine update_atmos_chemistry(state, rc) @@ -1332,7 +1327,7 @@ subroutine update_atmos_chemistry(state, rc) integer :: localrc integer :: ni, nj, nk, nt, ntb, nte integer :: nb, ix, i, j, k, k1, it - integer :: ib, jb + integer :: ib, jb, im real(ESMF_KIND_R8), dimension(:,:,:), pointer :: cldfra, & pfils, pflls, & @@ -1387,8 +1382,8 @@ subroutine update_atmos_chemistry(state, rc) !--- prognostic tracer concentrations do it = ntb, nte !$OMP parallel do default (none) & -!$OMP shared (it, nk, nj, ni, Atm_block, GFS_data, q) & -!$OMP private (k, j, jb, i, ib, nb, ix) +!$OMP shared (it, nk, nj, ni, Atm_block, GFS_Control, GFS_Stateout, q) & +!$OMP private (k, j, jb, i, ib, nb, ix, im) do k = 1, nk do j = 1, nj jb = j + Atm_block%jsc - 1 @@ -1396,7 +1391,8 @@ subroutine update_atmos_chemistry(state, rc) ib = i + Atm_block%isc - 1 nb = Atm_block%blkno(ib,jb) ix = Atm_block%ixp(ib,jb) - GFS_data(nb)%Stateout%gq0(ix,k,it) = q(i,j,k,it) + im = GFS_Control%chunk_begin(nb)+ix-1 + GFS_Stateout%gq0(im,k,it) = q(i,j,k,it) enddo enddo enddo @@ -1433,15 +1429,16 @@ subroutine update_atmos_chemistry(state, rc) if (GFS_control%cplaqm) then !--- other diagnostics !$OMP parallel do default (none) & -!$OMP shared (nj, ni, Atm_block, GFS_Data, aod) & -!$OMP private (j, jb, i, ib, nb, ix) +!$OMP shared (nj, ni, Atm_block, GFS_Control, GFS_Intdiag, aod) & +!$OMP private (j, jb, i, ib, nb, ix, im) do j = 1, nj jb = j + Atm_block%jsc - 1 do i = 1, ni ib = i + Atm_block%isc - 1 nb = Atm_block%blkno(ib,jb) ix = Atm_block%ixp(ib,jb) - GFS_Data(nb)%IntDiag%aod(ix) = aod(i,j) + im = GFS_Control%chunk_begin(nb)+ix-1 + GFS_IntDiag%aod(im) = aod(i,j) enddo enddo end if @@ -1638,36 +1635,23 @@ subroutine update_atmos_chemistry(state, rc) end if !--- handle all three-dimensional variables -!$OMP parallel do default (none) & -!$OMP shared (nk, nj, ni, Atm_block, GFS_Data, GFS_Control, & -!$OMP cldfra, pfils, pflls, prsi, phii, prsl, phil, & -!$OMP temp, ua, va) & -!$OMP private (k, j, jb, i, ib, nb, ix) - do k = 1, nk - do j = 1, nj - jb = j + Atm_block%jsc - 1 - do i = 1, ni - ib = i + Atm_block%isc - 1 - nb = Atm_block%blkno(ib,jb) - ix = Atm_block%ixp(ib,jb) - !--- interface values - phii(i,j,k) = GFS_data(nb)%Statein%phii(ix,k) - prsi(i,j,k) = GFS_data(nb)%Statein%prsi(ix,k) - !--- layer values - prsl(i,j,k) = GFS_Data(nb)%Statein%prsl(ix,k) - phil(i,j,k) = GFS_Data(nb)%Statein%phil(ix,k) - temp(i,j,k) = GFS_Data(nb)%Stateout%gt0(ix,k) - ua (i,j,k) = GFS_Data(nb)%Stateout%gu0(ix,k) - va (i,j,k) = GFS_Data(nb)%Stateout%gv0(ix,k) - cldfra(i,j,k) = GFS_Data(nb)%IntDiag%cldfra(ix,k) - if (.not.GFS_Control%cplaqm) then - !--- layer values - pfils (i,j,k) = GFS_Data(nb)%Coupling%pfi_lsan(ix,k) - pflls (i,j,k) = GFS_Data(nb)%Coupling%pfl_lsan(ix,k) - end if - enddo - enddo - enddo + + !--- interface values + phii = reshape(GFS_Statein%phii, shape(phii)) + prsi = reshape(GFS_Statein%prsi, shape(prsi)) + !--- layer values + prsl = reshape(GFS_Statein%prsl, shape(prsl)) + phil = reshape(GFS_Statein%phil, shape(phil)) + temp = reshape(GFS_Stateout%gt0, shape(temp)) + ua = reshape(GFS_Stateout%gu0, shape(ua )) + va = reshape(GFS_Stateout%gv0, shape(va )) + cldfra = reshape(GFS_IntDiag%cldfra, shape(cldfra)) + + if (.not.GFS_Control%cplaqm) then + !--- layer values + pfils = reshape(GFS_Coupling%pfi_lsan, shape(pfils)) + pflls = reshape(GFS_Coupling%pfl_lsan, shape(pflls)) + end if !--- top interface values k = nk+1 @@ -1678,16 +1662,17 @@ subroutine update_atmos_chemistry(state, rc) ib = i + Atm_block%isc - 1 nb = Atm_block%blkno(ib,jb) ix = Atm_block%ixp(ib,jb) - phii(i,j,k) = GFS_data(nb)%Statein%phii(ix,k) - prsi(i,j,k) = GFS_data(nb)%Statein%prsi(ix,k) + im = GFS_Control%chunk_begin(nb)+ix-1 + phii(i,j,k) = GFS_Statein%phii(im,k) + prsi(i,j,k) = GFS_Statein%prsi(im,k) enddo enddo !--- tracers quantities do it = 1, nt !$OMP parallel do default (none) & -!$OMP shared (it, nk, nj, ni, Atm_block, GFS_data, q) & -!$OMP private (k, j, jb, i, ib, nb, ix) +!$OMP shared (it, nk, nj, ni, Atm_block, GFS_Control, GFS_Stateout, q) & +!$OMP private (k, j, jb, i, ib, nb, ix, im) do k = 1, nk do j = 1, nj jb = j + Atm_block%jsc - 1 @@ -1695,93 +1680,95 @@ subroutine update_atmos_chemistry(state, rc) ib = i + Atm_block%isc - 1 nb = Atm_block%blkno(ib,jb) ix = Atm_block%ixp(ib,jb) - q(i,j,k,it) = GFS_data(nb)%Stateout%gq0(ix,k,it) + im = GFS_Control%chunk_begin(nb)+ix-1 + q(i,j,k,it) = GFS_Stateout%gq0(im,k,it) enddo enddo enddo enddo -!$OMP parallel do default (none) & -!$OMP shared (nj, ni, Atm_block, GFS_data, GFS_Control, & -!$OMP area, canopy, cmm, dqsfc, dtsfc, fice, & -!$OMP flake, focn, fsnow, hpbl, nswsfc, oro, & -!$OMP psfc, q2m, rain, rainc, rca, shfsfc, slc, & -!$OMP slmsk, smc, stc, stype, swet, t2m, tsfc, & -!$OMP u10m, uustar, v10m, vfrac, xlai, zorl) & -!$OMP private (j, jb, i, ib, nb, ix) - do j = 1, nj - jb = j + Atm_block%jsc - 1 - do i = 1, ni - ib = i + Atm_block%isc - 1 - nb = Atm_block%blkno(ib,jb) - ix = Atm_block%ixp(ib,jb) - hpbl(i,j) = GFS_Data(nb)%Tbd%hpbl(ix) - area(i,j) = GFS_Data(nb)%Grid%area(ix) - rainc(i,j) = GFS_Data(nb)%Coupling%rainc_cpl(ix) - rain(i,j) = GFS_Data(nb)%Coupling%rain_cpl(ix) & - + GFS_Data(nb)%Coupling%snow_cpl(ix) - uustar(i,j) = GFS_Data(nb)%Sfcprop%uustar(ix) - slmsk(i,j) = GFS_Data(nb)%Sfcprop%slmsk(ix) - tsfc(i,j) = GFS_Data(nb)%Coupling%tsfci_cpl(ix) - zorl(i,j) = GFS_Data(nb)%Sfcprop%zorl(ix) - u10m(i,j) = GFS_Data(nb)%Coupling%u10mi_cpl(ix) - v10m(i,j) = GFS_Data(nb)%Coupling%v10mi_cpl(ix) - fice(i,j) = GFS_Data(nb)%Sfcprop%fice(ix) - fsnow(i,j) = GFS_Data(nb)%Sfcprop%sncovr(ix) - if (GFS_Control%cplaqm) then - canopy(i,j) = GFS_Data(nb)%Sfcprop%canopy(ix) - cmm(i,j) = GFS_Data(nb)%IntDiag%cmm(ix) - dqsfc(i,j) = GFS_Data(nb)%Coupling%dqsfci_cpl(ix) - dtsfc(i,j) = GFS_Data(nb)%Coupling%dtsfci_cpl(ix) - nswsfc(i,j) = GFS_Data(nb)%Coupling%nswsfci_cpl(ix) - oro(i,j) = max(0.d0, GFS_Data(nb)%Sfcprop%oro(ix)) - psfc(i,j) = GFS_Data(nb)%Coupling%psurfi_cpl(ix) - q2m(i,j) = GFS_Data(nb)%Coupling%q2mi_cpl(ix) - rca(i,j) = GFS_Data(nb)%Sfcprop%rca(ix) - smc(i,j,:) = GFS_Data(nb)%Sfcprop%smc(ix,:) - stc(i,j,:) = GFS_Data(nb)%Sfcprop%stc(ix,:) - t2m(i,j) = GFS_Data(nb)%Coupling%t2mi_cpl(ix) - vfrac(i,j) = GFS_Data(nb)%Sfcprop%vfrac(ix) - xlai(i,j) = GFS_Data(nb)%Sfcprop%xlaixy(ix) - if (nint(slmsk(i,j)) == 2) then - if (GFS_Control%isot == 1) then - stype(i,j) = 16._ESMF_KIND_R8 - else - stype(i,j) = 9._ESMF_KIND_R8 - endif - else - stype(i,j) = real(int( GFS_Data(nb)%Sfcprop%stype(ix)+0.5 ), kind=ESMF_KIND_R8) - endif - else - flake(i,j) = max(zero, GFS_Data(nb)%Sfcprop%lakefrac(ix)) - focn(i,j) = GFS_Data(nb)%Sfcprop%oceanfrac(ix) - shfsfc(i,j) = GFS_Data(nb)%Coupling%ushfsfci(ix) - slc(i,j,:) = GFS_Data(nb)%Sfcprop%slc(ix,:) - if (GFS_Control%lsm == GFS_Control%lsm_ruc) then - swet(i,j) = GFS_Data(nb)%Sfcprop%wetness(ix) - else - swet(i,j) = GFS_Data(nb)%IntDiag%wet1(ix) - end if - end if - enddo - enddo + area = reshape(GFS_Grid%area, shape(area)) + hpbl = reshape(GFS_Tbd%hpbl, shape(hpbl)) + uustar = reshape(GFS_Sfcprop%uustar, shape(uustar)) + slmsk = reshape(GFS_Sfcprop%slmsk, shape(slmsk)) + zorl = reshape(GFS_Sfcprop%zorl, shape(zorl)) + fice = reshape(GFS_Sfcprop%fice, shape(fice)) + fsnow = reshape(GFS_Sfcprop%sncovr, shape(fsnow)) + + rainc = reshape(GFS_Coupling%rainc_cpl, shape(rainc)) + rain = reshape(GFS_Coupling%rain_cpl, shape(rain)) & + + reshape(GFS_Coupling%snow_cpl, shape(rain)) + tsfc = reshape(GFS_Coupling%tsfci_cpl, shape(tsfc)) + u10m = reshape(GFS_Coupling%u10mi_cpl, shape(u10m)) + v10m = reshape(GFS_Coupling%v10mi_cpl, shape(v10m)) + + if (GFS_Control%cplaqm) then + cmm = reshape(GFS_IntDiag%cmm, shape(cmm)) + canopy = reshape(GFS_Sfcprop%canopy, shape(canopy)) + !oro(i,j) = max(0.d0, GFS_Data(nb)%Sfcprop%oro(ix)) + oro = reshape(GFS_Sfcprop%oro, shape(oro)) + where (oro < 0.d0) oro = 0.d0 + rca = reshape(GFS_Sfcprop%rca, shape(rca)) + !smc(i,j,:) = GFS_Data(nb)%Sfcprop%smc(ix,:) + !stc(i,j,:) = GFS_Data(nb)%Sfcprop%stc(ix,:) + smc = reshape(GFS_Sfcprop%smc, shape(smc)) + stc = reshape(GFS_Sfcprop%stc, shape(stc)) + vfrac = reshape(GFS_Sfcprop%vfrac, shape(vfrac)) + xlai = reshape(GFS_Sfcprop%xlaixy, shape(xlai)) + !if (nint(slmsk(i,j)) == 2) then + ! if (GFS_Control%isot == 1) then + ! stype(i,j) = 16._ESMF_KIND_R8 + ! else + ! stype(i,j) = 9._ESMF_KIND_R8 + ! endif + !else + ! stype(i,j) = real(int( GFS_Data(nb)%Sfcprop%stype(ix)+0.5 ), kind=ESMF_KIND_R8) + !endif + stype = real(int(reshape(GFS_Sfcprop%stype, shape(stype))+0.5), kind=ESMF_KIND_R8) + if (GFS_Control%isot == 1) then + where (slmsk == 2) stype = 16._ESMF_KIND_R8 + else + where (slmsk == 2) stype = 9._ESMF_KIND_R8 + end if + dqsfc = reshape(GFS_Coupling%dqsfci_cpl, shape(dqsfc)) + dtsfc = reshape(GFS_Coupling%dtsfci_cpl, shape(dtsfc)) + nswsfc = reshape(GFS_Coupling%nswsfci_cpl, shape(nswsfc)) + psfc = reshape(GFS_Coupling%psurfi_cpl, shape(psfc)) + q2m = reshape(GFS_Coupling%q2mi_cpl, shape(q2m)) + t2m = reshape(GFS_Coupling%t2mi_cpl, shape(t2m)) + else + !flake(i,j) = max(zero, GFS_Data(nb)%Sfcprop%lakefrac(ix)) + flake = reshape(GFS_Sfcprop%lakefrac, shape(flake)) + where (flake zero .and. datar8(i,j) > zorlmin) then + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%oceanfrac(im) > zero .and. datar8(i,j) > zorlmin) then tem = 100.0_GFS_kind_phys * min(0.1_GFS_kind_phys, datar8(i,j)) -! GFS_data(nb)%Coupling%zorlwav_cpl(ix) = tem - GFS_data(nb)%Sfcprop%zorlwav(ix) = tem - GFS_data(nb)%Sfcprop%zorlw(ix) = tem +! GFS_Coupling%zorlwav_cpl(im) = tem + GFS_Sfcprop%zorlwav(im) = tem + GFS_Sfcprop%zorlw(im) = tem else - GFS_data(nb)%Sfcprop%zorlwav(ix) = -999.0_GFS_kind_phys - + GFS_Sfcprop%zorlwav(im) = -999.0_GFS_kind_phys endif enddo enddo @@ -1983,14 +1970,15 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%oceanfrac(ix) > zero .and. datar8(i,j) > 150.0) then -! GFS_data(nb)%Coupling%tisfcin_cpl(ix) = datar8(i,j) - GFS_data(nb)%Sfcprop%tisfc(ix) = datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%oceanfrac(im) > zero .and. datar8(i,j) > 150.0) then +! GFS_Coupling%tisfcin_cpl(im) = datar8(i,j) + GFS_Sfcprop%tisfc(im) = datar8(i,j) endif enddo enddo @@ -2003,21 +1991,20 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex) .and. GFS_control%cplocn2atm) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_Data(nb)%Sfcprop%oceanfrac(ix) > zero .and. datar8(i,j) > 150.0) then + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%oceanfrac(im) > zero .and. datar8(i,j) > 150.0) then if(mergeflg(i,j)) then -! GFS_Data(nb)%Coupling%tseain_cpl(ix) = & -! GFS_Data(nb)%Sfcprop%tsfc(ix) - GFS_Data(nb)%Sfcprop%tsfco(ix) = & - GFS_Data(nb)%Sfcprop%tsfc(ix) - datar8(i,j) = GFS_Data(nb)%Sfcprop%tsfc(ix) +! GFS_Coupling%tseain_cpl(im) = GFS_Sfcprop%tsfc(im) + GFS_Sfcprop%tsfco(im) = GFS_Sfcprop%tsfc(im) + datar8(i,j) = GFS_Sfcprop%tsfc(im) else -! GFS_Data(nb)%Coupling%tseain_cpl(ix) = datar8(i,j) - GFS_Data(nb)%Sfcprop%tsfco(ix) = datar8(i,j) +! GFS_Coupling%tseain_cpl(im) = datar8(i,j) + GFS_Sfcprop%tsfco(im) = datar8(i,j) endif endif enddo @@ -2032,18 +2019,19 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex) .and. GFS_control%cplocn2atm) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - GFS_Data(nb)%Sfcprop%usfco(ix) = zero - if (GFS_Data(nb)%Sfcprop%oceanfrac(ix) > zero) then ! ocean points + im = GFS_control%chunk_begin(nb)+ix-1 + GFS_Sfcprop%usfco(im) = zero + if (GFS_Sfcprop%oceanfrac(im) > zero) then ! ocean points if(mergeflg(i,j)) then - GFS_Data(nb)%Sfcprop%usfco(ix) = zero + GFS_Sfcprop%usfco(im) = zero datar8(i,j) = zero else - GFS_Data(nb)%Sfcprop%usfco(ix) = datar8(i,j) + GFS_Sfcprop%usfco(im) = datar8(i,j) endif endif enddo @@ -2058,18 +2046,19 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex) .and. GFS_control%cplocn2atm) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - GFS_Data(nb)%Sfcprop%vsfco(ix) = zero - if (GFS_Data(nb)%Sfcprop%oceanfrac(ix) > zero) then ! ocean points + im = GFS_control%chunk_begin(nb)+ix-1 + GFS_Sfcprop%vsfco(im) = zero + if (GFS_Sfcprop%oceanfrac(im) > zero) then ! ocean points if(mergeflg(i,j)) then - GFS_Data(nb)%Sfcprop%vsfco(ix) = zero + GFS_Sfcprop%vsfco(im) = zero datar8(i,j) = zero else - GFS_Data(nb)%Sfcprop%vsfco(ix) = datar8(i,j) + GFS_Sfcprop%vsfco(im) = datar8(i,j) endif endif enddo @@ -2085,26 +2074,26 @@ subroutine assign_importdata(jdat, rc) findex = queryImportFields(fldname) if (importFieldsValid(findex)) then lcpl_fice = .true. -!$omp parallel do default(shared) private(i,j,nb,ix,ofrac) +!$omp parallel do default(shared) private(i,j,nb,ix,im,ofrac) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - - GFS_data(nb)%Coupling%slimskin_cpl(ix) = GFS_data(nb)%Sfcprop%slmsk(ix) - ofrac = GFS_data(nb)%Sfcprop%oceanfrac(ix) + im = GFS_control%chunk_begin(nb)+ix-1 + GFS_Coupling%slimskin_cpl(im) = GFS_Sfcprop%slmsk(im) + ofrac = GFS_Sfcprop%oceanfrac(im) if (ofrac > zero) then - GFS_data(nb)%Sfcprop%fice(ix) = max(zero, min(one, datar8(i,j)/ofrac)) !LHS: ice frac wrt water area - if (GFS_data(nb)%Sfcprop%fice(ix) >= GFS_control%min_seaice) then - if (GFS_data(nb)%Sfcprop%fice(ix) > one-epsln) GFS_data(nb)%Sfcprop%fice(ix) = one - if (abs(one-ofrac) < epsln) GFS_data(nb)%Sfcprop%slmsk(ix) = 2.0_GFS_kind_phys !slmsk=2 crashes in gcycle on partial land points -! GFS_data(nb)%Sfcprop%slmsk(ix) = 2.0_GFS_kind_phys - GFS_data(nb)%Coupling%slimskin_cpl(ix) = 4.0_GFS_kind_phys + GFS_Sfcprop%fice(im) = max(zero, min(one, datar8(i,j)/ofrac)) !LHS: ice frac wrt water area + if (GFS_Sfcprop%fice(im) >= GFS_control%min_seaice) then + if (GFS_Sfcprop%fice(im) > one-epsln) GFS_Sfcprop%fice(im) = one + if (abs(one-ofrac) < epsln) GFS_Sfcprop%slmsk(im) = 2.0_GFS_kind_phys !slmsk=2 crashes in gcycle on partial land points +! GFS_Sfcprop%slmsk(im) = 2.0_GFS_kind_phys + GFS_Coupling%slimskin_cpl(im) = 4.0_GFS_kind_phys else - GFS_data(nb)%Sfcprop%fice(ix) = zero + GFS_Sfcprop%fice(im) = zero if (abs(one-ofrac) < epsln) then - GFS_data(nb)%Sfcprop%slmsk(ix) = zero - GFS_data(nb)%Coupling%slimskin_cpl(ix) = zero + GFS_Sfcprop%slmsk(im) = zero + GFS_Coupling%slimskin_cpl(im) = zero endif endif endif @@ -2120,20 +2109,21 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec ! do i=isc,iec ! nb = Atm_block%blkno(i,j) ! ix = Atm_block%ixp(i,j) -! if (GFS_data(nb)%Sfcprop%slmsk(ix) < 0.1 .or. GFS_data(nb)%Sfcprop%slmsk(ix) > 1.9) then -! GFS_data(nb)%Coupling%ulwsfcin_cpl(ix) = -datar8(i,j) +! if (GFS_Sfcprop%slmsk(im) < 0.1 .or. GFS_Sfcprop%slmsk(im) > 1.9) then +! GFS_Coupling%ulwsfcin_cpl(im) = -datar8(i,j) ! endif ! enddo do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%oceanfrac(ix) > zero) then - GFS_data(nb)%Coupling%ulwsfcin_cpl(ix) = -datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%oceanfrac(im) > zero) then + GFS_Coupling%ulwsfcin_cpl(im) = -datar8(i,j) endif enddo enddo @@ -2147,13 +2137,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%oceanfrac(ix) > zero) then - GFS_data(nb)%Coupling%dqsfcin_cpl(ix) = -datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%oceanfrac(im) > zero) then + GFS_Coupling%dqsfcin_cpl(im) = -datar8(i,j) endif enddo enddo @@ -2167,13 +2158,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%oceanfrac(ix) > zero) then - GFS_data(nb)%Coupling%dtsfcin_cpl(ix) = -datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%oceanfrac(im) > zero) then + GFS_Coupling%dtsfcin_cpl(im) = -datar8(i,j) endif enddo enddo @@ -2187,13 +2179,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%oceanfrac(ix) > zero) then - GFS_data(nb)%Coupling%dusfcin_cpl(ix) = -datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%oceanfrac(im) > zero) then + GFS_Coupling%dusfcin_cpl(im) = -datar8(i,j) endif enddo enddo @@ -2207,13 +2200,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%oceanfrac(ix) > zero) then - GFS_data(nb)%Coupling%dvsfcin_cpl(ix) = -datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%oceanfrac(im) > zero) then + GFS_Coupling%dvsfcin_cpl(im) = -datar8(i,j) endif enddo enddo @@ -2227,14 +2221,15 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%oceanfrac(ix) > zero) then -! GFS_data(nb)%Coupling%hicein_cpl(ix) = datar8(i,j) - GFS_data(nb)%Sfcprop%hice(ix) = min(datar8(i,j), himax) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%oceanfrac(im) > zero) then +! GFS_Coupling%hicein_cpl(im) = datar8(i,j) + GFS_Sfcprop%hice(im) = min(datar8(i,j), himax) endif enddo enddo @@ -2248,13 +2243,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%oceanfrac(ix) > zero) then - GFS_data(nb)%Coupling%hsnoin_cpl(ix) = datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%oceanfrac(im) > zero) then + GFS_Coupling%hsnoin_cpl(im) = datar8(i,j) endif enddo enddo @@ -2270,14 +2266,15 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%oceanfrac(ix) > zero) then -! GFS_data(nb)%Coupling%sfc_alb_nir_dif_cpl(ix) = datar8(i,j) - GFS_data(nb)%Sfcprop%albdifnir_ice(ix) = datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%oceanfrac(im) > zero) then +! GFS_Coupling%sfc_alb_nir_dif_cpl(im) = datar8(i,j) + GFS_Sfcprop%albdifnir_ice(im) = datar8(i,j) endif enddo enddo @@ -2291,14 +2288,15 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%oceanfrac(ix) > zero) then -! GFS_data(nb)%Coupling%sfc_alb_nir_dir_cpl(ix) = datar8(i,j) - GFS_data(nb)%Sfcprop%albdirnir_ice(ix) = datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%oceanfrac(im) > zero) then +! GFS_Coupling%sfc_alb_nir_dir_cpl(im) = datar8(i,j) + GFS_Sfcprop%albdirnir_ice(im) = datar8(i,j) endif enddo enddo @@ -2312,14 +2310,15 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%oceanfrac(ix) > zero) then -! GFS_data(nb)%Coupling%sfc_alb_vis_dif_cpl(ix) = datar8(i,j) - GFS_data(nb)%Sfcprop%albdifvis_ice(ix) = datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%oceanfrac(im) > zero) then +! GFS_Coupling%sfc_alb_vis_dif_cpl(im) = datar8(i,j) + GFS_Sfcprop%albdifvis_ice(im) = datar8(i,j) endif enddo enddo @@ -2334,14 +2333,15 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%oceanfrac(ix) > zero) then -! GFS_data(nb)%Coupling%sfc_alb_vis_dir_cpl(ix) = datar8(i,j) - GFS_data(nb)%Sfcprop%albdirvis_ice(ix) = datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%oceanfrac(im) > zero) then +! GFS_Coupling%sfc_alb_vis_dir_cpl(im) = datar8(i,j) + GFS_Sfcprop%albdirvis_ice(im) = datar8(i,j) endif enddo enddo @@ -2356,13 +2356,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname) .and. GFS_control%use_med_flux) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%oceanfrac(ix) > zero) then - GFS_data(nb)%Coupling%ulwsfcin_med(ix) = -datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%oceanfrac(im) > zero) then + GFS_Coupling%ulwsfcin_med(im) = -datar8(i,j) endif enddo enddo @@ -2376,13 +2377,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname) .and. GFS_control%use_med_flux) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%oceanfrac(ix) > zero) then - GFS_data(nb)%Coupling%dqsfcin_med(ix) = -datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%oceanfrac(im) > zero) then + GFS_Coupling%dqsfcin_med(im) = -datar8(i,j) endif enddo enddo @@ -2396,13 +2398,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname) .and. GFS_control%use_med_flux) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%oceanfrac(ix) > zero) then - GFS_data(nb)%Coupling%dtsfcin_med(ix) = -datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%oceanfrac(im) > zero) then + GFS_Coupling%dtsfcin_med(im) = -datar8(i,j) endif enddo enddo @@ -2416,13 +2419,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname) .and. GFS_control%use_med_flux) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%oceanfrac(ix) > zero) then - GFS_data(nb)%Coupling%dusfcin_med(ix) = -datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%oceanfrac(im) > zero) then + GFS_Coupling%dusfcin_med(im) = -datar8(i,j) endif enddo enddo @@ -2436,13 +2440,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname) .and. GFS_control%use_med_flux) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%oceanfrac(ix) > zero) then - GFS_data(nb)%Coupling%dvsfcin_med(ix) = -datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%oceanfrac(im) > zero) then + GFS_Coupling%dvsfcin_med(im) = -datar8(i,j) endif enddo enddo @@ -2456,13 +2461,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex) .and. GFS_control%cpllnd .and. GFS_control%cpllnd2atm) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%landfrac(ix) > zero) then - GFS_data(nb)%Coupling%sncovr1_lnd(ix) = datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%landfrac(im) > zero) then + GFS_Coupling%sncovr1_lnd(im) = datar8(i,j) endif enddo enddo @@ -2476,13 +2482,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex) .and. GFS_control%cpllnd .and. GFS_control%cpllnd2atm) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%landfrac(ix) > zero) then - GFS_data(nb)%Coupling%evap_lnd(ix) = datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%landfrac(im) > zero) then + GFS_Coupling%evap_lnd(im) = datar8(i,j) endif enddo enddo @@ -2496,13 +2503,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex) .and. GFS_control%cpllnd .and. GFS_control%cpllnd2atm) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%landfrac(ix) > zero) then - GFS_data(nb)%Coupling%hflx_lnd(ix) = datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%landfrac(im) > zero) then + GFS_Coupling%hflx_lnd(im) = datar8(i,j) endif enddo enddo @@ -2516,13 +2524,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex) .and. GFS_control%cpllnd .and. GFS_control%cpllnd2atm) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%landfrac(ix) > zero) then - GFS_data(nb)%Coupling%ep_lnd(ix) = datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%landfrac(im) > zero) then + GFS_Coupling%ep_lnd(im) = datar8(i,j) endif enddo enddo @@ -2536,13 +2545,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex) .and. GFS_control%cpllnd .and. GFS_control%cpllnd2atm) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%landfrac(ix) > zero) then - GFS_data(nb)%Coupling%t2mmp_lnd(ix) = datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%landfrac(im) > zero) then + GFS_Coupling%t2mmp_lnd(im) = datar8(i,j) endif enddo enddo @@ -2556,13 +2566,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex) .and. GFS_control%cpllnd .and. GFS_control%cpllnd2atm) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%landfrac(ix) > zero) then - GFS_data(nb)%Coupling%q2mp_lnd(ix) = datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%landfrac(im) > zero) then + GFS_Coupling%q2mp_lnd(im) = datar8(i,j) endif enddo enddo @@ -2576,13 +2587,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex) .and. GFS_control%cpllnd .and. GFS_control%cpllnd2atm) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%landfrac(ix) > zero) then - GFS_data(nb)%Coupling%qsurf_lnd(ix) = datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%landfrac(im) > zero) then + GFS_Coupling%qsurf_lnd(im) = datar8(i,j) endif enddo enddo @@ -2596,13 +2608,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex) .and. GFS_control%cpllnd .and. GFS_control%cpllnd2atm) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%landfrac(ix) > zero) then - GFS_data(nb)%Coupling%gflux_lnd(ix) = datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%landfrac(im) > zero) then + GFS_Coupling%gflux_lnd(im) = datar8(i,j) endif enddo enddo @@ -2616,13 +2629,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex) .and. GFS_control%cpllnd .and. GFS_control%cpllnd2atm) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%landfrac(ix) > zero) then - GFS_data(nb)%Coupling%runoff_lnd(ix) = datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%landfrac(im) > zero) then + GFS_Coupling%runoff_lnd(im) = datar8(i,j) endif enddo enddo @@ -2636,13 +2650,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex) .and. GFS_control%cpllnd .and. GFS_control%cpllnd2atm) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%landfrac(ix) > zero) then - GFS_data(nb)%Coupling%drain_lnd(ix) = datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%landfrac(im) > zero) then + GFS_Coupling%drain_lnd(im) = datar8(i,j) endif enddo enddo @@ -2656,13 +2671,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex) .and. GFS_control%cpllnd .and. GFS_control%cpllnd2atm) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%landfrac(ix) > zero) then - GFS_data(nb)%Coupling%cmm_lnd(ix) = datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%landfrac(im) > zero) then + GFS_Coupling%cmm_lnd(im) = datar8(i,j) endif enddo enddo @@ -2676,13 +2692,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex) .and. GFS_control%cpllnd .and. GFS_control%cpllnd2atm) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%landfrac(ix) > zero) then - GFS_data(nb)%Coupling%chh_lnd(ix) = datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%landfrac(im) > zero) then + GFS_Coupling%chh_lnd(im) = datar8(i,j) endif enddo enddo @@ -2696,13 +2713,14 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex) .and. GFS_control%cpllnd .and. GFS_control%cpllnd2atm) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%landfrac(ix) > zero) then - GFS_data(nb)%Coupling%zvfun_lnd(ix) = datar8(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%landfrac(im) > zero) then + GFS_Coupling%zvfun_lnd(im) = datar8(i,j) endif enddo enddo @@ -2915,12 +2933,13 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - GFS_data(nb)%Sfcprop%slmsk(ix) = datar82d(i-isc+1,j-jsc+1) + im = GFS_control%chunk_begin(nb)+ix-1 + GFS_sfcprop%slmsk(im) = datar82d(i-isc+1,j-jsc+1) enddo enddo endif @@ -2930,12 +2949,13 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - GFS_data(nb)%Sfcprop%weasd(ix) = datar82d(i-isc+1,j-jsc+1) + im = GFS_control%chunk_begin(nb)+ix-1 + GFS_sfcprop%weasd(im) = datar82d(i-isc+1,j-jsc+1) enddo enddo endif @@ -2945,12 +2965,13 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - GFS_data(nb)%Sfcprop%tsfco(ix) = datar82d(i-isc+1,j-jsc+1) + im = GFS_control%chunk_begin(nb)+ix-1 + GFS_sfcprop%tsfco(im) = datar82d(i-isc+1,j-jsc+1) enddo enddo endif @@ -2960,12 +2981,13 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - GFS_data(nb)%Sfcprop%vtype(ix) = int(datar82d(i-isc+1,j-jsc+1)) + im = GFS_control%chunk_begin(nb)+ix-1 + GFS_sfcprop%vtype(im) = int(datar82d(i-isc+1,j-jsc+1)) enddo enddo endif @@ -2975,12 +2997,13 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - GFS_data(nb)%Sfcprop%stype(ix) = int(datar82d(i-isc+1,j-jsc+1)) + im = GFS_control%chunk_begin(nb)+ix-1 + GFS_sfcprop%stype(im) = int(datar82d(i-isc+1,j-jsc+1)) enddo enddo endif @@ -2990,12 +3013,13 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - GFS_data(nb)%Sfcprop%vfrac(ix) = datar82d(i-isc+1,j-jsc+1) + im = GFS_control%chunk_begin(nb)+ix-1 + GFS_sfcprop%vfrac(im) = datar82d(i-isc+1,j-jsc+1) enddo enddo endif @@ -3005,12 +3029,13 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - GFS_data(nb)%Sfcprop%stc(ix,:) = datar83d(i-isc+1,j-jsc+1,:) + im = GFS_control%chunk_begin(nb)+ix-1 + GFS_sfcprop%stc(im,:) = datar83d(i-isc+1,j-jsc+1,:) enddo enddo endif @@ -3020,12 +3045,13 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - GFS_data(nb)%Sfcprop%smc(ix,:) = datar83d(i-isc+1,j-jsc+1,:) + im = GFS_control%chunk_begin(nb)+ix-1 + GFS_sfcprop%smc(im,:) = datar83d(i-isc+1,j-jsc+1,:) enddo enddo endif @@ -3035,12 +3061,13 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - GFS_data(nb)%Sfcprop%snowd(ix) = datar82d(i-isc+1,j-jsc+1) + im = GFS_control%chunk_begin(nb)+ix-1 + GFS_sfcprop%snowd(im) = datar82d(i-isc+1,j-jsc+1) enddo enddo endif @@ -3050,12 +3077,13 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - GFS_data(nb)%Sfcprop%f10m(ix) = datar82d(i-isc+1,j-jsc+1) + im = GFS_control%chunk_begin(nb)+ix-1 + GFS_sfcprop%f10m(im) = datar82d(i-isc+1,j-jsc+1) enddo enddo endif @@ -3065,12 +3093,13 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - GFS_data(nb)%Sfcprop%zorl(ix) = datar82d(i-isc+1,j-jsc+1) + im = GFS_control%chunk_begin(nb)+ix-1 + GFS_sfcprop%zorl(im) = datar82d(i-isc+1,j-jsc+1) enddo enddo endif @@ -3080,12 +3109,13 @@ subroutine assign_importdata(jdat, rc) if (trim(impfield_name) == trim(fldname)) then findex = queryImportFields(fldname) if (importFieldsValid(findex)) then -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - GFS_data(nb)%Sfcprop%t2m(ix) = datar82d(i-isc+1,j-jsc+1) + im = GFS_control%chunk_begin(nb)+ix-1 + GFS_sfcprop%t2m(im) = datar82d(i-isc+1,j-jsc+1) enddo enddo endif @@ -3118,69 +3148,52 @@ subroutine assign_importdata(jdat, rc) ! update sea ice related fields: if( lcpl_fice ) then -!$omp parallel do default(shared) private(i,j,nb,ix,tem) +!$omp parallel do default(shared) private(i,j,nb,ix,tem,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - if (GFS_data(nb)%Sfcprop%oceanfrac(ix) > zero) then - if (GFS_data(nb)%Sfcprop%fice(ix) >= GFS_control%min_seaice) then - - GFS_data(nb)%Coupling%hsnoin_cpl(ix) = min(hsmax, GFS_data(nb)%Coupling%hsnoin_cpl(ix) & - / GFS_data(nb)%Sfcprop%fice(ix)) - GFS_data(nb)%Sfcprop%zorli(ix) = z0ice - tem = GFS_data(nb)%Sfcprop%tisfc(ix) * GFS_data(nb)%Sfcprop%tisfc(ix) + im = GFS_control%chunk_begin(nb)+ix-1 + if (GFS_Sfcprop%oceanfrac(im) > zero) then + if (GFS_Sfcprop%fice(im) >= GFS_control%min_seaice) then + + GFS_Coupling%hsnoin_cpl(im) = min(hsmax, GFS_Coupling%hsnoin_cpl(im) & + / GFS_Sfcprop%fice(im)) + GFS_Sfcprop%zorli(im) = z0ice + tem = GFS_Sfcprop%tisfc(im) * GFS_Sfcprop%tisfc(im) tem = con_sbc * tem * tem - if (GFS_data(nb)%Coupling%ulwsfcin_cpl(ix) > zero) then - GFS_data(nb)%Sfcprop%emis_ice(ix) = GFS_data(nb)%Coupling%ulwsfcin_cpl(ix) / tem - GFS_data(nb)%Sfcprop%emis_ice(ix) = max(0.9, min(one, GFS_data(nb)%Sfcprop%emis_ice(ix))) + if (GFS_Coupling%ulwsfcin_cpl(im) > zero) then + GFS_Sfcprop%emis_ice(im) = GFS_Coupling%ulwsfcin_cpl(im) / tem + GFS_Sfcprop%emis_ice(im) = max(0.9, min(one, GFS_Sfcprop%emis_ice(im))) else - GFS_data(nb)%Sfcprop%emis_ice(ix) = 0.96 + GFS_Sfcprop%emis_ice(im) = 0.96 endif - GFS_data(nb)%Coupling%ulwsfcin_cpl(ix) = tem * GFS_data(nb)%Sfcprop%emis_ice(ix) + GFS_Coupling%ulwsfcin_cpl(im) = tem * GFS_Sfcprop%emis_ice(im) else - GFS_data(nb)%Sfcprop%tisfc(ix) = GFS_data(nb)%Sfcprop%tsfco(ix) - GFS_data(nb)%Sfcprop%fice(ix) = zero - GFS_data(nb)%Sfcprop%hice(ix) = zero - GFS_data(nb)%Coupling%hsnoin_cpl(ix) = zero + GFS_Sfcprop%tisfc(im) = GFS_Sfcprop%tsfco(im) + GFS_Sfcprop%fice(im) = zero + GFS_Sfcprop%hice(im) = zero + GFS_Coupling%hsnoin_cpl(im) = zero ! - GFS_data(nb)%Coupling%dtsfcin_cpl(ix) = -99999.0 ! over open water - should not be used in ATM - GFS_data(nb)%Coupling%dqsfcin_cpl(ix) = -99999.0 ! ,, - GFS_data(nb)%Coupling%dusfcin_cpl(ix) = -99999.0 ! ,, - GFS_data(nb)%Coupling%dvsfcin_cpl(ix) = -99999.0 ! ,, - GFS_data(nb)%Coupling%dtsfcin_cpl(ix) = -99999.0 ! ,, - GFS_data(nb)%Coupling%ulwsfcin_cpl(ix) = -99999.0 ! ,, -! GFS_data(nb)%Sfcprop%albdirvis_ice(ix) = -9999.0 ! ,, -! GFS_data(nb)%Sfcprop%albdirnir_ice(ix) = -9999.0 ! ,, -! GFS_data(nb)%Sfcprop%albdifvis_ice(ix) = -9999.0 ! ,, -! GFS_data(nb)%Sfcprop%albdifnir_ice(ix) = -9999.0 ! ,, - if (abs(one-GFS_data(nb)%Sfcprop%oceanfrac(ix)) < epsln) then ! 100% open water - GFS_data(nb)%Coupling%slimskin_cpl(ix) = zero - GFS_data(nb)%Sfcprop%slmsk(ix) = zero + GFS_Coupling%dtsfcin_cpl(im) = -99999.0 ! over open water - should not be used in ATM + GFS_Coupling%dqsfcin_cpl(im) = -99999.0 ! ,, + GFS_Coupling%dusfcin_cpl(im) = -99999.0 ! ,, + GFS_Coupling%dvsfcin_cpl(im) = -99999.0 ! ,, + GFS_Coupling%dtsfcin_cpl(im) = -99999.0 ! ,, + GFS_Coupling%ulwsfcin_cpl(im) = -99999.0 ! ,, +! GFS_Sfcprop%albdirvis_ice(im) = -9999.0 ! ,, +! GFS_Sfcprop%albdirnir_ice(im) = -9999.0 ! ,, +! GFS_Sfcprop%albdifvis_ice(im) = -9999.0 ! ,, +! GFS_Sfcprop%albdifnir_ice(im) = -9999.0 ! ,, + if (abs(one-GFS_Sfcprop%oceanfrac(im)) < epsln) then ! 100% open water + GFS_Coupling%slimskin_cpl(im) = zero + GFS_Sfcprop%slmsk(im) = zero endif endif endif enddo enddo endif -! -!------------------------------------------------------------------------------- -! do j=jsc,jec -! do i=isc,iec -! nb = Atm_block%blkno(i,j) -! ix = Atm_block%ixp(i,j) -! if (abs(GFS_data(nb)%Grid%xlon_d(ix)-2.89) < 0.1 .and. & -! abs(GFS_data(nb)%Grid%xlat_d(ix)+58.99) < 0.1) then -! write(0,*)' in assign tisfc=',GFS_data(nb)%Sfcprop%tisfc(ix), & -! ' oceanfrac=',GFS_data(nb)%Sfcprop%oceanfrac(ix),' i=',i,' j=',j,& -!! ' tisfcin=',GFS_data(nb)%Coupling%tisfcin_cpl(ix), & -! ' tisfcin=',GFS_data(nb)%Sfcprop%tisfc(ix), & -! ' fice=',GFS_data(nb)%Sfcprop%fice(ix) -! endif -! enddo -! enddo -!------------------------------------------------------------------------------- -! rc=0 ! @@ -3198,7 +3211,7 @@ subroutine setup_exportdata(rc) integer, optional, intent(out) :: rc !--- local variables - integer :: i, j, ix + integer :: i, j, ix, im integer :: isc, iec, jsc, jec integer :: nb, nk integer :: sphum, liq_wat, ice_wat, o3mr @@ -3217,6 +3230,7 @@ subroutine setup_exportdata(rc) real(kind=ESMF_KIND_R8), parameter :: zeror8 = 0._ESMF_KIND_R8 real(GFS_kind_phys), parameter :: revap = one/2.501E+06_GFS_kind_phys ! reciprocal of specific ! heat of vaporization J/kg + !--- begin if (present(rc)) rc = ESMF_SUCCESS @@ -3282,229 +3296,229 @@ subroutine setup_exportdata(rc) !--- Instantaneous quantities ! Instantaneous u wind (m/s) 10 m above ground case ('inst_zonal_wind_height10m') - call block_data_copy(datar82d, GFS_data(nb)%coupling%u10mi_cpl, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%u10mi_cpl, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous v wind (m/s) 10 m above ground case ('inst_merid_wind_height10m') - call block_data_copy(datar82d, GFS_data(nb)%coupling%v10mi_cpl, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%v10mi_cpl, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous Zonal compt of momentum flux (N/m**2) case ('inst_zonal_moment_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%dusfci_cpl, Atm_block, nb, -one, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%dusfci_cpl, Atm_block, nb, -one, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous Merid compt of momentum flux (N/m**2) case ('inst_merid_moment_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%dvsfci_cpl, Atm_block, nb, -one, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%dvsfci_cpl, Atm_block, nb, -one, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous Sensible heat flux (W/m**2) case ('inst_sensi_heat_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%dtsfci_cpl, Atm_block, nb, -one, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%dtsfci_cpl, Atm_block, nb, -one, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous Latent heat flux (W/m**2) case ('inst_laten_heat_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%dqsfci_cpl, Atm_block, nb, -one, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%dqsfci_cpl, Atm_block, nb, -one, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous Evap flux (kg/m**2/s) case ('inst_evap_rate') - call block_data_copy(datar82d, GFS_data(nb)%coupling%dqsfci_cpl, Atm_block, nb, -revap, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%dqsfci_cpl, Atm_block, nb, -revap, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous precipitation rate (kg/m2/s) case ('inst_prec_rate') - call block_data_copy(datar82d, GFS_data(nb)%coupling%rain_cpl, Atm_block, nb, rtimek, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%rain_cpl, Atm_block, nb, rtimek, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous convective precipitation rate (kg/m2/s) case ('inst_prec_rate_conv') - call block_data_copy(datar82d, GFS_Data(nb)%Coupling%rainc_cpl, Atm_block, nb, rtimek, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%rainc_cpl, Atm_block, nb, rtimek, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instaneous snow precipitation rate (kg/m2/s) case ('inst_fprec_rate') - call block_data_copy(datar82d, GFS_data(nb)%coupling%snow_cpl, Atm_block, nb, rtimek, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%snow_cpl, Atm_block, nb, rtimek, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous Downward long wave radiation flux (W/m**2) case ('inst_down_lw_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%dlwsfci_cpl, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%dlwsfci_cpl, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous Downward solar radiation flux (W/m**2) case ('inst_down_sw_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%dswsfci_cpl, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%dswsfci_cpl, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous Temperature (K) 2 m above ground case ('inst_temp_height2m') - call block_data_copy(datar82d, GFS_data(nb)%coupling%t2mi_cpl, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%t2mi_cpl, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous Specific humidity (kg/kg) 2 m above ground case ('inst_spec_humid_height2m') - call block_data_copy(datar82d, GFS_data(nb)%coupling%q2mi_cpl, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%q2mi_cpl, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous Temperature (K) at surface case ('inst_temp_height_surface') - call block_data_copy(datar82d, GFS_data(nb)%coupling%tsfci_cpl, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%tsfci_cpl, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous Pressure (Pa) land and sea surface case ('inst_pres_height_surface') - call block_data_copy(datar82d, GFS_data(nb)%coupling%psurfi_cpl, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%psurfi_cpl, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous Surface height (m) case ('inst_surface_height') - call block_data_copy(datar82d, GFS_data(nb)%coupling%oro_cpl, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%oro_cpl, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous NET long wave radiation flux (W/m**2) case ('inst_net_lw_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%nlwsfci_cpl, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%nlwsfci_cpl, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous NET solar radiation flux over the ocean (W/m**2) case ('inst_net_sw_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%nswsfci_cpl, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%nswsfci_cpl, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous sfc downward nir direct flux (W/m**2) case ('inst_down_sw_ir_dir_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%dnirbmi_cpl, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%dnirbmi_cpl, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous sfc downward nir diffused flux (W/m**2) case ('inst_down_sw_ir_dif_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%dnirdfi_cpl, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%dnirdfi_cpl, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous sfc downward uv+vis direct flux (W/m**2) case ('inst_down_sw_vis_dir_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%dvisbmi_cpl, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%dvisbmi_cpl, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous sfc downward uv+vis diffused flux (W/m**2) case ('inst_down_sw_vis_dif_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%dvisdfi_cpl, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%dvisdfi_cpl, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous net sfc nir direct flux (W/m**2) case ('inst_net_sw_ir_dir_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%nnirbmi_cpl, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%nnirbmi_cpl, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous net sfc nir diffused flux (W/m**2) case ('inst_net_sw_ir_dif_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%nnirdfi_cpl, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%nnirdfi_cpl, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous net sfc uv+vis direct flux (W/m**2) case ('inst_net_sw_vis_dir_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%nvisbmi_cpl, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%nvisbmi_cpl, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Instantaneous net sfc uv+vis diffused flux (W/m**2) case ('inst_net_sw_vis_dif_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%nvisdfi_cpl, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%nvisdfi_cpl, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! Land/Sea mask (sea:0,land:1) case ('inst_land_sea_mask', 'slmsk') - call block_data_copy(datar82d, GFS_data(nb)%sfcprop%slmsk, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_sfcprop%slmsk, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) !--- Mean quantities ! MEAN Zonal compt of momentum flux (N/m**2) case ('mean_zonal_moment_flx_atm') - call block_data_copy(datar82d, GFS_data(nb)%coupling%dusfc_cpl, Atm_block, nb, -rtime, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%dusfc_cpl, Atm_block, nb, -rtime, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! MEAN Merid compt of momentum flux (N/m**2) case ('mean_merid_moment_flx_atm') - call block_data_copy(datar82d, GFS_data(nb)%coupling%dvsfc_cpl, Atm_block, nb, -rtime, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%dvsfc_cpl, Atm_block, nb, -rtime, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! MEAN Sensible heat flux (W/m**2) case ('mean_sensi_heat_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%dtsfc_cpl, Atm_block, nb, -rtime, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%dtsfc_cpl, Atm_block, nb, -rtime, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! MEAN Latent heat flux (W/m**2) case ('mean_laten_heat_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%dqsfc_cpl, Atm_block, nb, -rtime, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%dqsfc_cpl, Atm_block, nb, -rtime, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! MEAN Evap rate (kg/m**2/s) case ('mean_evap_rate') - call block_data_copy(datar82d, GFS_data(nb)%coupling%dqsfc_cpl, Atm_block, nb, -rtime*revap, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%dqsfc_cpl, Atm_block, nb, -rtime*revap, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! MEAN Downward LW heat flux (W/m**2) case ('mean_down_lw_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%dlwsfc_cpl, Atm_block, nb, rtime, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%dlwsfc_cpl, Atm_block, nb, rtime, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! MEAN Downward SW heat flux (W/m**2) case ('mean_down_sw_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%dswsfc_cpl, Atm_block, nb, rtime, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%dswsfc_cpl, Atm_block, nb, rtime, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! MEAN NET long wave radiation flux (W/m**2) case ('mean_net_lw_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%nlwsfc_cpl, Atm_block, nb, rtime, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%nlwsfc_cpl, Atm_block, nb, rtime, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! MEAN NET solar radiation flux over the ocean (W/m**2) case ('mean_net_sw_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%nswsfc_cpl, Atm_block, nb, rtime, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%nswsfc_cpl, Atm_block, nb, rtime, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! MEAN sfc downward nir direct flux (W/m**2) case ('mean_down_sw_ir_dir_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%dnirbm_cpl, Atm_block, nb, rtime, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%dnirbm_cpl, Atm_block, nb, rtime, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! MEAN sfc downward nir diffused flux (W/m**2) case ('mean_down_sw_ir_dif_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%dnirdf_cpl, Atm_block, nb, rtime, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%dnirdf_cpl, Atm_block, nb, rtime, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! MEAN sfc downward uv+vis direct flux (W/m**2) case ('mean_down_sw_vis_dir_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%dvisbm_cpl, Atm_block, nb, rtime, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%dvisbm_cpl, Atm_block, nb, rtime, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! MEAN sfc downward uv+vis diffused flux (W/m**2) case ('mean_down_sw_vis_dif_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%dvisdf_cpl, Atm_block, nb, rtime, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%dvisdf_cpl, Atm_block, nb, rtime, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! MEAN NET sfc nir direct flux (W/m**2) case ('mean_net_sw_ir_dir_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%nnirbm_cpl, Atm_block, nb, rtime, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%nnirbm_cpl, Atm_block, nb, rtime, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! MEAN NET sfc nir diffused flux (W/m**2) case ('mean_net_sw_ir_dif_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%nnirdf_cpl, Atm_block, nb, rtime, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%nnirdf_cpl, Atm_block, nb, rtime, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! MEAN NET sfc uv+vis direct flux (W/m**2) case ('mean_net_sw_vis_dir_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%nvisbm_cpl, Atm_block, nb, rtime, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%nvisbm_cpl, Atm_block, nb, rtime, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! MEAN NET sfc uv+vis diffused flux (W/m**2) case ('mean_net_sw_vis_dif_flx') - call block_data_copy(datar82d, GFS_data(nb)%coupling%nvisdf_cpl, Atm_block, nb, rtime, spval, rc=localrc) + call block_data_copy(datar82d, GFS_coupling%nvisdf_cpl, Atm_block, nb, rtime, spval, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! oceanfrac used by atm to calculate fluxes case ('openwater_frac_in_atm') - call block_data_combine_fractions(datar82d, GFS_data(nb)%sfcprop%oceanfrac, GFS_Data(nb)%sfcprop%fice, Atm_block, nb, rc=localrc) + call block_data_combine_fractions(datar82d, GFS_sfcprop%oceanfrac, GFS_sfcprop%fice, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) !--- Dycore quantities ! bottom layer temperature (t) case('inst_temp_height_lowest') - call block_data_copy_or_fill(datar82d, DYCORE_data(nb)%coupling%t_bot, zeror8, Atm_block, nb, rc=localrc) + call block_data_copy_or_fill(datar82d, DYCORE_data(nb)%coupling%t_bot, zeror8, Atm_block, nb, offset=1, rc=localrc) case('inst_temp_height_lowest_from_phys') - call block_data_copy_or_fill(datar82d, GFS_data(nb)%Statein%tgrs, 1, zeror8, Atm_block, nb, rc=localrc) + call block_data_copy_or_fill(datar82d, GFS_Statein%tgrs, 1, zeror8, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! bottom layer specific humidity (q) ! ! ! CHECK if tracer 1 is for specific humidity ! ! ! case('inst_spec_humid_height_lowest') - call block_data_copy_or_fill(datar82d, DYCORE_data(nb)%coupling%tr_bot, 1, zeror8, Atm_block, nb, rc=localrc) + call block_data_copy_or_fill(datar82d, DYCORE_data(nb)%coupling%tr_bot, 1, zeror8, Atm_block, nb, offset=1, rc=localrc) case('inst_spec_humid_height_lowest_from_phys') - call block_data_copy_or_fill(datar82d, GFS_data(nb)%Statein%qgrs, 1, GFS_Control%ntqv, zeror8, Atm_block, nb, rc=localrc) + call block_data_copy_or_fill(datar82d, GFS_Statein%qgrs, 1, GFS_Control%ntqv, zeror8, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! bottom layer zonal wind (u) case('inst_zonal_wind_height_lowest') - call block_data_copy_or_fill(datar82d, DYCORE_data(nb)%coupling%u_bot, zeror8, Atm_block, nb, rc=localrc) + call block_data_copy_or_fill(datar82d, DYCORE_data(nb)%coupling%u_bot, zeror8, Atm_block, nb, offset=1, rc=localrc) ! bottom layer meridional wind (v) case('inst_merid_wind_height_lowest') - call block_data_copy_or_fill(datar82d, DYCORE_data(nb)%coupling%v_bot, zeror8, Atm_block, nb, rc=localrc) + call block_data_copy_or_fill(datar82d, DYCORE_data(nb)%coupling%v_bot, zeror8, Atm_block, nb, offset=1, rc=localrc) ! surface friction velocity case('surface_friction_velocity') - call block_data_copy_or_fill(datar82d, GFS_data(nb)%Sfcprop%uustar, zeror8, Atm_block, nb, rc=localrc) + call block_data_copy_or_fill(datar82d, GFS_Sfcprop%uustar, zeror8, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! bottom layer pressure (p) case('inst_pres_height_lowest') - call block_data_copy_or_fill(datar82d, DYCORE_data(nb)%coupling%p_bot, zeror8, Atm_block, nb, rc=localrc) + call block_data_copy_or_fill(datar82d, DYCORE_data(nb)%coupling%p_bot, zeror8, Atm_block, nb, offset=1, rc=localrc) ! bottom layer pressure (p) from physics case('inst_pres_height_lowest_from_phys') - call block_data_copy_or_fill(datar82d, GFS_data(nb)%Statein%prsl, 1, zeror8, Atm_block, nb, rc=localrc) + call block_data_copy_or_fill(datar82d, GFS_Statein%prsl, 1, zeror8, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! dimensionless exner function at surface adjacent layer case('inst_exner_function_height_lowest') - call block_data_copy_or_fill(datar82d, GFS_data(nb)%Statein%prslk, 1, zeror8, Atm_block, nb, rc=localrc) + call block_data_copy_or_fill(datar82d, GFS_Statein%prslk, 1, zeror8, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) ! bottom layer height (z) case('inst_height_lowest') - call block_data_copy_or_fill(datar82d, DYCORE_data(nb)%coupling%z_bot, zeror8, Atm_block, nb, rc=localrc) + call block_data_copy_or_fill(datar82d, DYCORE_data(nb)%coupling%z_bot, zeror8, Atm_block, nb, offset=1, rc=localrc) !--- JEDI fields case ('u') - call block_atmos_copy(datar83d, Atm(mygrid)%u(isc:iec,jsc:jec,:), Atm_block, nb, rc=localrc) + call block_atmos_copy(datar83d, Atm(mygrid)%u(isc:iec,jsc:jec,:), Atm_block, nb, offset=1, rc=localrc) case ('v') - call block_atmos_copy(datar83d, Atm(mygrid)%v(isc:iec,jsc:jec,:), Atm_block, nb, rc=localrc) + call block_atmos_copy(datar83d, Atm(mygrid)%v(isc:iec,jsc:jec,:), Atm_block, nb, offset=1, rc=localrc) case ('ua') - call block_atmos_copy(datar83d, Atm(mygrid)%ua(isc:iec,jsc:jec,:),Atm_block, nb, rc=localrc) + call block_atmos_copy(datar83d, Atm(mygrid)%ua(isc:iec,jsc:jec,:),Atm_block, nb, offset=1, rc=localrc) case ('va') - call block_atmos_copy(datar83d, Atm(mygrid)%va(isc:iec,jsc:jec,:), Atm_block, nb, rc=localrc) + call block_atmos_copy(datar83d, Atm(mygrid)%va(isc:iec,jsc:jec,:), Atm_block, nb, offset=1, rc=localrc) case ('t') - call block_atmos_copy(datar83d, Atm(mygrid)%pt(isc:iec,jsc:jec,:), Atm_block, nb, rc=localrc) + call block_atmos_copy(datar83d, Atm(mygrid)%pt(isc:iec,jsc:jec,:), Atm_block, nb, offset=1, rc=localrc) case ('delp') - call block_atmos_copy(datar83d, Atm(mygrid)%delp(isc:iec,jsc:jec,:), Atm_block, nb, rc=localrc) + call block_atmos_copy(datar83d, Atm(mygrid)%delp(isc:iec,jsc:jec,:), Atm_block, nb, offset=1, rc=localrc) case ('sphum') sphum = get_tracer_index(MODEL_ATMOS, 'sphum') - call block_atmos_copy(datar83d, Atm(mygrid)%q(isc:iec,jsc:jec,:,:), sphum, Atm_block, nb, rc=localrc) + call block_atmos_copy(datar83d, Atm(mygrid)%q(isc:iec,jsc:jec,:,:), sphum, Atm_block, nb, offset=1, rc=localrc) case ('ice_wat') ice_wat = get_tracer_index(MODEL_ATMOS, 'ice_wat') - call block_atmos_copy(datar83d, Atm(mygrid)%q(isc:iec,jsc:jec,:,:), ice_wat, Atm_block, nb, rc=localrc) + call block_atmos_copy(datar83d, Atm(mygrid)%q(isc:iec,jsc:jec,:,:), ice_wat, Atm_block, nb, offset=1, rc=localrc) case ('liq_wat') liq_wat = get_tracer_index(MODEL_ATMOS, 'liq_wat') - call block_atmos_copy(datar83d, Atm(mygrid)%q(isc:iec,jsc:jec,:,:), liq_wat, Atm_block, nb, rc=localrc) + call block_atmos_copy(datar83d, Atm(mygrid)%q(isc:iec,jsc:jec,:,:), liq_wat, Atm_block, nb, offset=1, rc=localrc) case ('o3mr') o3mr = get_tracer_index(MODEL_ATMOS, 'o3mr') - call block_atmos_copy(datar83d, Atm(mygrid)%q(isc:iec,jsc:jec,:,:), o3mr, Atm_block, nb, rc=localrc) + call block_atmos_copy(datar83d, Atm(mygrid)%q(isc:iec,jsc:jec,:,:), o3mr, Atm_block, nb, offset=1, rc=localrc) case ('phis') - call block_atmos_copy(datar82d, Atm(mygrid)%phis(isc:iec,jsc:jec), Atm_block, nb, rc=localrc) + call block_atmos_copy(datar82d, Atm(mygrid)%phis(isc:iec,jsc:jec), Atm_block, nb, offset=1, rc=localrc) case ('u_srf') - call block_atmos_copy(datar82d, Atm(mygrid)%u_srf(isc:iec,jsc:jec), Atm_block, nb, rc=localrc) + call block_atmos_copy(datar82d, Atm(mygrid)%u_srf(isc:iec,jsc:jec), Atm_block, nb, offset=1, rc=localrc) case ('v_srf') - call block_atmos_copy(datar82d, Atm(mygrid)%v_srf(isc:iec,jsc:jec), Atm_block, nb, rc=localrc) + call block_atmos_copy(datar82d, Atm(mygrid)%v_srf(isc:iec,jsc:jec), Atm_block, nb, offset=1, rc=localrc) case ('weasd') - call block_data_copy(datar82d, GFS_data(nb)%sfcprop%weasd, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_Sfcprop%weasd, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) case ('tsea') - call block_data_copy(datar82d, GFS_data(nb)%sfcprop%tsfco, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_Sfcprop%tsfco, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) case ('vtype') - call block_data_copy(datar82d, GFS_data(nb)%sfcprop%vtype, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_Sfcprop%vtype, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) case ('stype') - call block_data_copy(datar82d, GFS_data(nb)%sfcprop%stype, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_Sfcprop%stype, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) case ('vfrac') - call block_data_copy(datar82d, GFS_data(nb)%sfcprop%vfrac, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_Sfcprop%vfrac, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) case ('stc') - call block_data_copy(datar83d, GFS_data(nb)%sfcprop%stc, Atm_block, nb, rc=localrc) + call block_data_copy(datar83d, GFS_Sfcprop%stc, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) case ('smc') - call block_data_copy(datar83d, GFS_data(nb)%sfcprop%smc, Atm_block, nb, rc=localrc) + call block_data_copy(datar83d, GFS_Sfcprop%smc, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) case ('snwdph') - call block_data_copy(datar82d, GFS_data(nb)%sfcprop%snowd, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_Sfcprop%snowd, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) case ('f10m') - call block_data_copy(datar82d, GFS_data(nb)%sfcprop%f10m, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_Sfcprop%f10m, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) case ('zorl') - call block_data_copy(datar82d, GFS_data(nb)%sfcprop%zorl, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_Sfcprop%zorl, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) case ('t2m') - call block_data_copy(datar82d, GFS_data(nb)%sfcprop%t2m, Atm_block, nb, rc=localrc) + call block_data_copy(datar82d, GFS_Sfcprop%t2m, Atm_block, nb, offset=GFS_Control%chunk_begin(nb), rc=localrc) case default localrc = ESMF_RC_NOT_FOUND end select @@ -3517,20 +3531,21 @@ subroutine setup_exportdata(rc) !--- if (GFS_control%cplflx) then ! zero out accumulated fields -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - GFS_data(nb)%coupling%dusfc_cpl(ix) = zero - GFS_data(nb)%coupling%dvsfc_cpl(ix) = zero - GFS_data(nb)%coupling%dtsfc_cpl(ix) = zero - GFS_data(nb)%coupling%dqsfc_cpl(ix) = zero - GFS_data(nb)%coupling%nlwsfc_cpl(ix) = zero - GFS_data(nb)%coupling%dnirbm_cpl(ix) = zero - GFS_data(nb)%coupling%dnirdf_cpl(ix) = zero - GFS_data(nb)%coupling%dvisbm_cpl(ix) = zero - GFS_data(nb)%coupling%dvisdf_cpl(ix) = zero + im = GFS_control%chunk_begin(nb)+ix-1 + GFS_coupling%dusfc_cpl(im) = zero + GFS_coupling%dvsfc_cpl(im) = zero + GFS_coupling%dtsfc_cpl(im) = zero + GFS_coupling%dqsfc_cpl(im) = zero + GFS_coupling%nlwsfc_cpl(im) = zero + GFS_coupling%dnirbm_cpl(im) = zero + GFS_coupling%dnirdf_cpl(im) = zero + GFS_coupling%dvisbm_cpl(im) = zero + GFS_coupling%dvisdf_cpl(im) = zero enddo enddo if (mpp_pe() == mpp_root_pe()) print *,'zeroing coupling accumulated fields at kdt= ',GFS_control%kdt @@ -3538,21 +3553,22 @@ subroutine setup_exportdata(rc) !--- if (GFS_control%cplflx .or. GFS_control%cpllnd) then ! zero out accumulated fields -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) - GFS_data(nb)%coupling%dlwsfc_cpl(ix) = zero - GFS_data(nb)%coupling%dswsfc_cpl(ix) = zero - GFS_data(nb)%coupling%rain_cpl(ix) = zero - GFS_data(nb)%coupling%rainc_cpl(ix) = zero - GFS_data(nb)%coupling%snow_cpl(ix) = zero - GFS_data(nb)%coupling%nswsfc_cpl(ix) = zero - GFS_data(nb)%coupling%nnirbm_cpl(ix) = zero - GFS_data(nb)%coupling%nnirdf_cpl(ix) = zero - GFS_data(nb)%coupling%nvisbm_cpl(ix) = zero - GFS_data(nb)%coupling%nvisdf_cpl(ix) = zero + im = GFS_control%chunk_begin(nb)+ix-1 + GFS_coupling%dlwsfc_cpl(im) = zero + GFS_coupling%dswsfc_cpl(im) = zero + GFS_coupling%rain_cpl(im) = zero + GFS_coupling%rainc_cpl(im) = zero + GFS_coupling%snow_cpl(im) = zero + GFS_coupling%nswsfc_cpl(im) = zero + GFS_coupling%nnirbm_cpl(im) = zero + GFS_coupling%nnirdf_cpl(im) = zero + GFS_coupling%nvisbm_cpl(im) = zero + GFS_coupling%nvisdf_cpl(im) = zero enddo enddo if (mpp_pe() == mpp_root_pe()) print *,'zeroing coupling accumulated fields at kdt= ',GFS_control%kdt @@ -3570,7 +3586,7 @@ subroutine addLsmask2grid(fcstGrid, rc) ! ! local vars integer isc, iec, jsc, jec - integer i, j, nb, ix + integer i, j, nb, ix, im ! integer CLbnd(2), CUbnd(2), CCount(2), TLbnd(2), TUbnd(2), TCount(2) integer, allocatable :: lsmask(:,:) integer(kind=ESMF_KIND_I4), pointer :: maskPtr(:,:) @@ -3581,13 +3597,14 @@ subroutine addLsmask2grid(fcstGrid, rc) jec = GFS_control%jsc+GFS_control%ny-1 allocate(lsmask(isc:iec,jsc:jec)) ! -!$omp parallel do default(shared) private(i,j,nb,ix) +!$omp parallel do default(shared) private(i,j,nb,ix,im) do j=jsc,jec do i=isc,iec nb = Atm_block%blkno(i,j) ix = Atm_block%ixp(i,j) + im = GFS_control%chunk_begin(nb)+ix-1 ! use land sea mask: land:1, ocean:0 - lsmask(i,j) = floor(one + epsln - GFS_data(nb)%SfcProp%oceanfrac(ix)) + lsmask(i,j) = floor(one + epsln - GFS_sfcprop%oceanfrac(im)) enddo enddo ! diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index 976b1d4f6..824c6d665 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -55,16 +55,15 @@ }, 'GFS_typedefs' : { 'GFS_control_type' : 'GFS_Control', - 'GFS_data_type' : 'GFS_Data(cdata%blk_no)', - 'GFS_diag_type' : 'GFS_Data(cdata%blk_no)%Intdiag', - 'GFS_tbd_type' : 'GFS_Data(cdata%blk_no)%Tbd', - 'GFS_sfcprop_type' : 'GFS_Data(cdata%blk_no)%Sfcprop', - 'GFS_coupling_type' : 'GFS_Data(cdata%blk_no)%Coupling', - 'GFS_statein_type' : 'GFS_Data(cdata%blk_no)%Statein', - 'GFS_cldprop_type' : 'GFS_Data(cdata%blk_no)%Cldprop', - 'GFS_radtend_type' : 'GFS_Data(cdata%blk_no)%Radtend', - 'GFS_grid_type' : 'GFS_Data(cdata%blk_no)%Grid', - 'GFS_stateout_type' : 'GFS_Data(cdata%blk_no)%Stateout', + 'GFS_statein_type' : 'GFS_Statein', + 'GFS_stateout_type' : 'GFS_Stateout', + 'GFS_grid_type' : 'GFS_Grid', + 'GFS_tbd_type' : 'GFS_Tbd', + 'GFS_cldprop_type' : 'GFS_Cldprop', + 'GFS_sfcprop_type' : 'GFS_Sfcprop', + 'GFS_radtend_type' : 'GFS_Radtend', + 'GFS_coupling_type' : 'GFS_Coupling', + 'GFS_diag_type' : 'GFS_Intdiag', 'GFS_typedefs' : '', }, } diff --git a/ccpp/data/CCPP_data.F90 b/ccpp/data/CCPP_data.F90 index 9bba44641..3ae2a2ad0 100644 --- a/ccpp/data/CCPP_data.F90 +++ b/ccpp/data/CCPP_data.F90 @@ -8,7 +8,15 @@ module CCPP_data use CCPP_typedefs, only: GFS_interstitial_type, & GFDL_interstitial_type use GFS_typedefs, only: GFS_control_type, & - GFS_data_type + GFS_statein_type, & + GFS_stateout_type, & + GFS_grid_type, & + GFS_tbd_type, & + GFS_cldprop_type, & + GFS_sfcprop_type, & + GFS_radtend_type, & + GFS_coupling_type, & + GFS_diag_type implicit none @@ -20,15 +28,31 @@ module CCPP_data ccpp_suite, & GFDL_interstitial, & GFS_control, & - GFS_data, & + GFS_statein, & + GFS_stateout, & + GFS_grid, & + GFS_tbd, & + GFS_cldprop, & + GFS_sfcprop, & + GFS_radtend, & + GFS_coupling, & + GFS_intdiag, & GFS_interstitial !-------------------------------------------------------! - ! GFS data containers, GFS_Data has dimension nblocks ! - ! and GFS_Interstitial has dimension nthreads ! + ! GFS data containers; ! + ! GFS_Interstitial has dimension nthreads ! !-------------------------------------------------------! type(GFS_control_type), save, target :: GFS_control - type(GFS_data_type), dimension(:), allocatable, save, target :: GFS_data + type(GFS_statein_type), save, target :: GFS_statein + type(GFS_stateout_type), save, target :: GFS_stateout + type(GFS_grid_type), save, target :: GFS_grid + type(GFS_tbd_type), save, target :: GFS_tbd + type(GFS_cldprop_type), save, target :: GFS_cldprop + type(GFS_sfcprop_type), save, target :: GFS_sfcprop + type(GFS_radtend_type), save, target :: GFS_radtend + type(GFS_coupling_type), save, target :: GFS_coupling + type(GFS_diag_type), save, target :: GFS_intdiag type(GFS_interstitial_type), dimension(:), allocatable, save, target :: GFS_interstitial !------------------------------------------------------! diff --git a/ccpp/data/CCPP_data.meta b/ccpp/data/CCPP_data.meta index 6029873da..782b315e4 100644 --- a/ccpp/data/CCPP_data.meta +++ b/ccpp/data/CCPP_data.meta @@ -24,24 +24,66 @@ units = DDT dimensions = () type = GFS_control_type -[GFS_Data(ccpp_block_number)] - standard_name = GFS_data_type_instance - long_name = instance of derived type GFS_data_type +[GFS_Statein] + standard_name = GFS_statein_type_instance + long_name = prognostic state data in from dycore units = DDT dimensions = () - type = GFS_data_type + type = GFS_statein_type +[GFS_Stateout] + standard_name = GFS_stateout_type_instance + long_name = prognostic state or tendencies return to dycore + units = DDT + dimensions = () + type = GFS_stateout_type +[GFS_Grid] + standard_name = GFS_grid_type_instance + long_name = instance of derived type GFS_grid_type + units = DDT + dimensions = () + type = GFS_grid_type +[GFS_Tbd] + standard_name = GFS_tbd_type_instance + long_name = instance of derived type GFS_tbd_type + units = DDT + dimensions = () + type = GFS_tbd_type +[GFS_Cldprop] + standard_name = GFS_cldprop_type_instance + long_name = instance of derived type GFS_cldprop_type + units = DDT + dimensions = () + type = GFS_cldprop_type +[GFS_Sfcprop] + standard_name = GFS_sfcprop_type_instance + long_name = instance of derived type GFS_sfcprop_type + units = DDT + dimensions = () + type = GFS_sfcprop_type +[GFS_Radtend] + standard_name = GFS_radtend_type_instance + long_name = instance of derived type GFS_radtend_type + units = DDT + dimensions = () + type = GFS_radtend_type +[GFS_Coupling] + standard_name = GFS_coupling_type_instance + long_name = instance of derived type GFS_coupling_type + units = DDT + dimensions = () + type = GFS_coupling_type +[GFS_Intdiag] + standard_name = GFS_diag_type_instance + long_name = instance of derived type GFS_diag_type + units = DDT + dimensions = () + type = GFS_diag_type [GFS_Interstitial(ccpp_thread_number)] standard_name = GFS_interstitial_type_instance long_name = instance of derived type GFS_interstitial_type units = DDT dimensions = () type = GFS_interstitial_type -[GFS_Data] - standard_name = GFS_data_type_instance_all_blocks - long_name = instance of derived type GFS_data_type - units = DDT - dimensions = (ccpp_block_count) - type = GFS_data_type [GFS_Interstitial] standard_name = GFS_interstitial_type_instance_all_threads long_name = instance of derived type GFS_interstitial_type diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 482fe2a1a..5a25f0c36 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -81,7 +81,6 @@ module GFS_typedefs ! GFS_cldprop_type !< cloud fields needed by radiation from physics ! GFS_radtend_type !< radiation tendencies needed in physics ! GFS_diag_type !< fields targetted for diagnostic output -! GFS_data_type !< combined type of all of the above except GFS_control_type !-------------------------------------------------------------------------------- ! GFS_init_type @@ -749,7 +748,11 @@ module GFS_typedefs integer :: nblks !< for explicit data blocking: number of blocks integer, pointer :: blksz(:) !< for explicit data blocking: block sizes of all blocks integer :: ncols !< total number of columns for all blocks - + ! + integer :: nchunks !< number of chunks of an array that are used in the CCPP run phase + integer, pointer :: chunk_begin(:) !< first indices of chunks of an array for the CCPP run phase + integer, pointer :: chunk_end(:) !< last indices of chunks of an array for the CCPP run phase + ! integer :: fire_aux_data_levels !< vertical levels of fire auxiliary data !--- coupling parameters @@ -1644,50 +1647,50 @@ module GFS_typedefs !! type GFS_grid_type - real (kind=kind_phys), pointer :: xlon (:) => null() !< grid longitude in radians, ok for both 0->2pi - !! or -pi -> +pi ranges - real (kind=kind_phys), pointer :: xlat (:) => null() !< grid latitude in radians, default to pi/2 -> - !! -pi/2 range, otherwise adj in subr called - real (kind=kind_phys), pointer :: xlat_d (:) => null() !< grid latitude in degrees, default to 90 -> - !! -90 range, otherwise adj in subr called - real (kind=kind_phys), pointer :: xlon_d (:) => null() !< grid longitude in degrees, default to 0 -> - !! 360 range, otherwise adj in subr called - real (kind=kind_phys), pointer :: sinlat (:) => null() !< sine of the grids corresponding latitudes - real (kind=kind_phys), pointer :: coslat (:) => null() !< cosine of the grids corresponding latitudes - real (kind=kind_phys), pointer :: area (:) => null() !< area of the grid cell - real (kind=kind_phys), pointer :: dx (:) => null() !< relative dx for the grid cell + real (kind=kind_phys), pointer :: xlon (:) !< grid longitude in radians, ok for both 0->2pi + !! or -pi -> +pi ranges + real (kind=kind_phys), pointer :: xlat (:) !< grid latitude in radians, default to pi/2 -> + !! -pi/2 range, otherwise adj in subr called + real (kind=kind_phys), pointer :: xlat_d (:) !< grid latitude in degrees, default to 90 -> + !! -90 range, otherwise adj in subr called + real (kind=kind_phys), pointer :: xlon_d (:) !< grid longitude in degrees, default to 0 -> + !! 360 range, otherwise adj in subr called + real (kind=kind_phys), pointer :: sinlat (:) !< sine of the grids corresponding latitudes + real (kind=kind_phys), pointer :: coslat (:) !< cosine of the grids corresponding latitudes + real (kind=kind_phys), pointer :: area (:) !< area of the grid cell + real (kind=kind_phys), pointer :: dx (:) !< relative dx for the grid cell !--- grid-related interpolation data for prognostic ozone - real (kind=kind_phys), pointer :: ddy_o3 (:) => null() !< interpolation weight for ozone - integer, pointer :: jindx1_o3 (:) => null() !< interpolation low index for ozone - integer, pointer :: jindx2_o3 (:) => null() !< interpolation high index for ozone + real (kind=kind_phys), pointer :: ddy_o3 (:) !< interpolation weight for ozone + integer, pointer :: jindx1_o3 (:) !< interpolation low index for ozone + integer, pointer :: jindx2_o3 (:) !< interpolation high index for ozone !--- grid-related interpolation data for stratosphere water - real (kind=kind_phys), pointer :: ddy_h (:) => null() !< interpolation weight for h2o - integer, pointer :: jindx1_h (:) => null() !< interpolation low index for h2o - integer, pointer :: jindx2_h (:) => null() !< interpolation high index for h2o + real (kind=kind_phys), pointer :: ddy_h (:) !< interpolation weight for h2o + integer, pointer :: jindx1_h (:) !< interpolation low index for h2o + integer, pointer :: jindx2_h (:) !< interpolation high index for h2o !--- grid-related interpolation data for prognostic iccn - real (kind=kind_phys), pointer :: ddy_ci (:) => null() !< interpolation weight for iccn - integer, pointer :: jindx1_ci (:) => null() !< interpolation low index for iccn - integer, pointer :: jindx2_ci (:) => null() !< interpolation high index for iccn - real (kind=kind_phys), pointer :: ddx_ci (:) => null() !< interpolation weight for iccn - integer, pointer :: iindx1_ci (:) => null() !< interpolation low index for iccn - integer, pointer :: iindx2_ci (:) => null() !< interpolation high index for iccn + real (kind=kind_phys), pointer :: ddy_ci (:) !< interpolation weight for iccn + integer, pointer :: jindx1_ci (:) !< interpolation low index for iccn + integer, pointer :: jindx2_ci (:) !< interpolation high index for iccn + real (kind=kind_phys), pointer :: ddx_ci (:) !< interpolation weight for iccn + integer, pointer :: iindx1_ci (:) !< interpolation low index for iccn + integer, pointer :: iindx2_ci (:) !< interpolation high index for iccn !--- grid-related interpolation data for prescribed aerosols - real (kind=kind_phys), pointer :: ddy_aer (:) => null() !< interpolation weight for iaerclm - integer, pointer :: jindx1_aer (:) => null() !< interpolation low index for iaerclm - integer, pointer :: jindx2_aer (:) => null() !< interpolation high index for iaerclm - real (kind=kind_phys), pointer :: ddx_aer (:) => null() !< interpolation weight for iaerclm - integer, pointer :: iindx1_aer (:) => null() !< interpolation low index for iaerclm - integer, pointer :: iindx2_aer (:) => null() !< interpolation high index for iaerclm + real (kind=kind_phys), pointer :: ddy_aer (:) !< interpolation weight for iaerclm + integer, pointer :: jindx1_aer (:) !< interpolation low index for iaerclm + integer, pointer :: jindx2_aer (:) !< interpolation high index for iaerclm + real (kind=kind_phys), pointer :: ddx_aer (:) !< interpolation weight for iaerclm + integer, pointer :: iindx1_aer (:) !< interpolation low index for iaerclm + integer, pointer :: iindx2_aer (:) !< interpolation high index for iaerclm !--- grid-related interpolation data for cires_ugwp_v1 - real (kind=kind_phys), pointer :: ddy_j1tau (:) => null() !< interpolation weight for tau_ugwp - real (kind=kind_phys), pointer :: ddy_j2tau (:) => null() !< interpolation weight for tau_ugwp - integer, pointer :: jindx1_tau (:) => null() !< interpolation low index for tau_ugwp - integer, pointer :: jindx2_tau (:) => null() !< interpolation high index for tau_ugwp + real (kind=kind_phys), pointer :: ddy_j1tau (:) !< interpolation weight for tau_ugwp + real (kind=kind_phys), pointer :: ddy_j2tau (:) !< interpolation weight for tau_ugwp + integer, pointer :: jindx1_tau (:) !< interpolation low index for tau_ugwp + integer, pointer :: jindx2_tau (:) !< interpolation high index for tau_ugwp contains procedure :: create => grid_create !< allocate array data @@ -2172,24 +2175,6 @@ module GFS_typedefs procedure :: phys_zero => diag_phys_zero end type GFS_diag_type -!---------------------------------------------------------- -! combined type of all of the above except GFS_control_type -!---------------------------------------------------------- -!! \section arg_table_GFS_data_type -!! \htmlinclude GFS_data_type.html -!! - type GFS_data_type - type(GFS_statein_type) :: Statein - type(GFS_stateout_type) :: Stateout - type(GFS_sfcprop_type) :: Sfcprop - type(GFS_coupling_type) :: Coupling - type(GFS_grid_type) :: Grid - type(GFS_tbd_type) :: Tbd - type(GFS_cldprop_type) :: Cldprop - type(GFS_radtend_type) :: Radtend - type(GFS_diag_type) :: Intdiag - end type GFS_data_type - !---------------- ! PUBLIC ENTITIES !---------------- @@ -2198,7 +2183,6 @@ module GFS_typedefs GFS_coupling_type public GFS_control_type, GFS_grid_type, GFS_tbd_type, & GFS_cldprop_type, GFS_radtend_type, GFS_diag_type - public GFS_data_type !******************************************************************************************* CONTAINS @@ -2206,12 +2190,14 @@ module GFS_typedefs !------------------------ ! GFS_statein_type%create !------------------------ - subroutine statein_create (Statein, IM, Model) + subroutine statein_create (Statein, Model) implicit none class(GFS_statein_type) :: Statein - integer, intent(in) :: IM type(GFS_control_type), intent(in) :: Model + integer :: IM + + IM = Model%ncols !--- level geopotential and pressures allocate (Statein%phii (IM,Model%levs+1)) @@ -2273,13 +2259,15 @@ end subroutine statein_create !------------------------- ! GFS_stateout_type%create !------------------------- - subroutine stateout_create (Stateout, IM, Model) + subroutine stateout_create (Stateout, Model) implicit none class(GFS_stateout_type) :: Stateout - integer, intent(in) :: IM type(GFS_control_type), intent(in) :: Model + integer :: IM + + IM = Model%ncols allocate (Stateout%gu0 (IM,Model%levs)) allocate (Stateout%gv0 (IM,Model%levs)) @@ -2297,13 +2285,15 @@ end subroutine stateout_create !------------------------ ! GFS_sfcprop_type%create !------------------------ - subroutine sfcprop_create (Sfcprop, IM, Model) + subroutine sfcprop_create (Sfcprop, Model) implicit none class(GFS_sfcprop_type) :: Sfcprop - integer, intent(in) :: IM type(GFS_control_type), intent(in) :: Model + integer :: IM + + IM = Model%ncols !--- physics and radiation allocate (Sfcprop%slmsk (IM)) @@ -2872,13 +2862,15 @@ end subroutine sfcprop_create !------------------------- ! GFS_coupling_type%create !------------------------- - subroutine coupling_create (Coupling, IM, Model) + subroutine coupling_create (Coupling, Model) implicit none class(GFS_coupling_type) :: Coupling - integer, intent(in) :: IM type(GFS_control_type), intent(in) :: Model + integer :: IM + + IM = Model%ncols !--- radiation out !--- physics in @@ -4334,6 +4326,16 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & allocate(Model%blksz(1:Model%nblks)) Model%blksz = blksz Model%ncols = sum(Model%blksz) + ! DH* + Model%nchunks = size(blksz) + allocate(Model%chunk_begin(Model%nchunks)) + allocate(Model%chunk_end(Model%nchunks)) + Model%chunk_begin(1) = 1 + Model%chunk_end(1) = Model%chunk_begin(1) + blksz(1) - 1 + do i=2,Model%nchunks + Model%chunk_begin(i) = Model%chunk_end(i-1) + 1 + Model%chunk_end(i) = Model%chunk_begin(i) + blksz(i) - 1 + end do !--- coupling parameters Model%cplflx = cplflx @@ -7018,14 +7020,15 @@ end subroutine control_print !---------------- ! GFS_grid%create !---------------- - subroutine grid_create (Grid, IM, Model) + subroutine grid_create (Grid, Model) implicit none class(GFS_grid_type) :: Grid - integer, intent(in) :: IM type(GFS_control_type), intent(in) :: Model + integer :: IM + IM = Model%ncols allocate (Grid%xlon (IM)) allocate (Grid%xlat (IM)) allocate (Grid%xlat_d (IM)) @@ -7119,14 +7122,15 @@ end subroutine grid_create !-------------------- ! GFS_tbd_type%create !-------------------- - subroutine tbd_create (Tbd, IM, Model) + subroutine tbd_create (Tbd, Model) implicit none class(GFS_tbd_type) :: Tbd - integer, intent(in) :: IM type(GFS_control_type), intent(in) :: Model + integer :: IM + IM = Model%ncols !--- In !--- sub-grid cloud radiation if ( Model%isubc_lw == 2 .or. Model%isubc_sw == 2 ) then @@ -7160,19 +7164,16 @@ subroutine tbd_create (Tbd, IM, Model) Tbd%ozpl = clear_val !--- ccn and in needs - ! DH* allocate only for MG? *DH allocate (Tbd%in_nm (IM,Model%levs)) allocate (Tbd%ccn_nm (IM,Model%levs)) Tbd%in_nm = clear_val Tbd%ccn_nm = clear_val !--- aerosol fields - ! DH* allocate only for MG? *DH allocate (Tbd%aer_nm (IM,Model%levs,ntrcaer)) Tbd%aer_nm = clear_val !--- tau_amf for NGWs - ! DH* allocate only for UGWP ? *DH allocate (Tbd%tau_amf(im) ) Tbd%tau_amf = clear_val @@ -7317,13 +7318,15 @@ end subroutine tbd_create !------------------------ ! GFS_cldprop_type%create !------------------------ - subroutine cldprop_create (Cldprop, IM, Model) + subroutine cldprop_create (Cldprop, Model) implicit none class(GFS_cldprop_type) :: Cldprop - integer, intent(in) :: IM type(GFS_control_type), intent(in) :: Model + integer :: IM + + IM = Model%ncols allocate (Cldprop%cv (IM)) allocate (Cldprop%cvt (IM)) @@ -7339,13 +7342,15 @@ end subroutine cldprop_create !****************************************** ! GFS_radtend_type%create !****************************************** - subroutine radtend_create (Radtend, IM, Model) + subroutine radtend_create (Radtend, Model) implicit none class(GFS_radtend_type) :: Radtend - integer, intent(in) :: IM type(GFS_control_type), intent(in) :: Model + integer :: IM + + IM = Model%ncols !--- Out (radiation only) allocate (Radtend%sfcfsw (IM)) @@ -7617,16 +7622,16 @@ end subroutine label_dtend_cause !---------------- ! GFS_diag%create !---------------- - subroutine diag_create (Diag, IM, Model) + subroutine diag_create (Diag, Model) use parse_tracers, only: get_tracer_index class(GFS_diag_type) :: Diag - integer, intent(in) :: IM type(GFS_control_type), intent(in) :: Model - -! + integer :: IM logical, save :: linit logical :: have_pbl, have_dcnv, have_scnv, have_mp, have_oz_phys + IM = Model%ncols + if(Model%print_diff_pgr) then allocate(Diag%old_pgr(IM)) Diag%old_pgr = clear_val diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index 7e4475d9d..51b4706ec 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -10,112 +10,112 @@ standard_name = geopotential_at_interface long_name = geopotential at model layer interfaces units = m2 s-2 - dimensions = (horizontal_loop_extent,vertical_interface_dimension) + dimensions = (horizontal_dimension,vertical_interface_dimension) type = real kind = kind_phys [prsi] standard_name = air_pressure_at_interface long_name = air pressure at model layer interfaces units = Pa - dimensions = (horizontal_loop_extent,vertical_interface_dimension) + dimensions = (horizontal_dimension,vertical_interface_dimension) type = real kind = kind_phys [prsi(:,1)] standard_name = air_pressure_at_lowest_model_interface long_name = air pressure at lowest model interface units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [prsik] standard_name = dimensionless_exner_function_at_interface long_name = dimensionless Exner function at model layer interfaces units = none - dimensions = (horizontal_loop_extent,vertical_interface_dimension) + dimensions = (horizontal_dimension,vertical_interface_dimension) type = real kind = kind_phys [prsik(:,1)] standard_name = surface_dimensionless_exner_function long_name = dimensionless Exner function at lowest model interface units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [phil] standard_name = geopotential long_name = geopotential at model layer centers units = m2 s-2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [prsl] standard_name = air_pressure long_name = mean layer pressure units = Pa - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [prsl(:,1)] standard_name = air_pressure_at_surface_adjacent_layer long_name = mean pressure at lowest model layer units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [prslk] standard_name = dimensionless_exner_function long_name = dimensionless Exner function at model layer centers units = none - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [prslk(:,1)] standard_name = dimensionless_exner_function_at_surface_adjacent_layer long_name = dimensionless Exner function at lowest model layer units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [pgr] standard_name = surface_air_pressure long_name = surface pressure units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [ugrs] standard_name = x_wind long_name = zonal wind units = m s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [ugrs(:,1)] standard_name = x_wind_at_surface_adjacent_layer long_name = zonal wind at lowest model layer units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [vgrs] standard_name = y_wind long_name = meridional wind units = m s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [vgrs(:,1)] standard_name = y_wind_at_surface_adjacent_layer long_name = meridional wind at lowest model layer units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [wgrs] standard_name = unsmoothed_nonhydrostatic_upward_air_velocity long_name = unsmoothed non-hydrostatic upward air velocity units = m s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (do_lightning_threat_index_calculations) @@ -123,91 +123,91 @@ standard_name = lagrangian_tendency_of_air_pressure long_name = layer mean vertical velocity units = Pa s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [tgrs] standard_name = air_temperature long_name = model layer mean temperature units = K - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [tgrs(:,1)] standard_name = air_temperature_at_surface_adjacent_layer long_name = mean temperature at lowest model layer units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [qgrs] standard_name = tracer_concentration long_name = model layer mean tracer concentration units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension,number_of_tracers) + dimensions = (horizontal_dimension,vertical_layer_dimension,number_of_tracers) type = real kind = kind_phys [qgrs(:,:,index_of_specific_humidity_in_tracer_concentration_array)] standard_name = specific_humidity long_name = water vapor specific humidity units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [qgrs(:,1,index_of_specific_humidity_in_tracer_concentration_array)] standard_name = specific_humidity_at_surface_adjacent_layer long_name = water vapor specific humidity at lowest model layer units = kg kg-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [qgrs(:,:,index_of_cloud_liquid_water_mixing_ratio_in_tracer_concentration_array)] standard_name = cloud_liquid_water_mixing_ratio long_name = ratio of mass of cloud water to mass of dry air plus vapor (without condensates) units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [qgrs(:,1,index_of_cloud_liquid_water_mixing_ratio_in_tracer_concentration_array)] standard_name = cloud_liquid_water_mixing_ratio_at_surface_adjacent_layer long_name = ratio of mass of cloud water to mass of dry air plus vapor (without condensates) at lowest model layer units = kg kg-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [qgrs(:,:,index_of_cloud_ice_mixing_ratio_in_tracer_concentration_array)] standard_name = cloud_ice_mixing_ratio long_name = ratio of mass of ice water to mass of dry air plus vapor (without condensates) units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [qgrs(:,:,index_of_rain_mixing_ratio_in_tracer_concentration_array)] standard_name = rain_mixing_ratio long_name = ratio of mass of rain water to mass of dry air plus vapor (without condensates) units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [qgrs(:,:,index_of_snow_mixing_ratio_in_tracer_concentration_array)] standard_name = snow_mixing_ratio long_name = ratio of mass of snow water to mass of dry air plus vapor (without condensates) units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [qgrs(:,:,index_of_graupel_mixing_ratio_in_tracer_concentration_array)] standard_name = graupel_mixing_ratio long_name = ratio of mass of graupel to mass of dry air plus vapor (without condensates) units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [qgrs(:,:,index_of_hail_mixing_ratio_in_tracer_concentration_array)] standard_name = hail_mixing_ratio long_name = ratio of mass of hail to mass of dry air plus vapor (without condensates) units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_hail_mixing_ratio_in_tracer_concentration_array > 0) @@ -215,14 +215,14 @@ standard_name = ozone_mixing_ratio long_name = ozone mixing ratio units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [qgrs(:,:,index_of_mass_number_concentration_of_hygroscopic_aerosols_in_tracer_concentration_array)] standard_name = mass_number_concentration_of_hygroscopic_aerosols long_name = number concentration of water-friendly aerosols units = kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) active = (index_of_mass_number_concentration_of_hygroscopic_aerosols_in_tracer_concentration_array > 0) type = real kind = kind_phys @@ -230,7 +230,7 @@ standard_name = mass_number_concentration_of_nonhygroscopic_ice_nucleating_aerosols long_name = number concentration of ice-friendly aerosols units = kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) active = (index_of_mass_number_concentration_of_nonhygroscopic_ice_nucleating_aerosols_in_tracer_concentration_array > 0) type = real kind = kind_phys @@ -238,7 +238,7 @@ standard_name = mass_number_concentration_of_cloud_liquid_water_particles_in_air long_name = number concentration of cloud droplets (liquid) units = kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_mass_number_concentration_of_cloud_droplets_in_tracer_concentration_array > 0) @@ -246,35 +246,35 @@ standard_name = mass_number_concentration_of_cloud_ice_water_crystals_in_air long_name = number concentration of ice units = kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [qgrs(:,:,index_of_mass_number_concentration_of_rain_in_tracer_concentration_array)] standard_name = mass_number_concentration_of_rain_water_in_air long_name = number concentration of rain units = kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [qgrs(:,:,index_of_mass_number_concentration_of_snow_in_tracer_concentration_array)] standard_name = mass_number_concentration_of_snow_in_air long_name = number concentration of snow units = kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [qgrs(:,:,index_of_mass_number_concentration_of_graupel_in_tracer_concentration_array)] standard_name = mass_number_concentration_of_graupel_in_air long_name = number concentration of graupel units = kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [qgrs(:,:,index_of_mass_number_concentration_of_hail_in_tracer_concentration_array)] standard_name = mass_number_concentration_of_hail_in_air long_name = number concentration of hail units = kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_mass_number_concentration_of_hail_in_tracer_concentration_array > 0) @@ -282,7 +282,7 @@ standard_name = reflectivity_of_rain_in_air long_name = reflectivity of rain units = m6 kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_reflectivity_of_rain_in_tracer_concentration_array > 0) @@ -290,7 +290,7 @@ standard_name = reflectivity_of_graupel_in_air long_name = reflectivity of graupel units = m6 kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_reflectivity_of_graupel_in_tracer_concentration_array > 0) @@ -298,7 +298,7 @@ standard_name = reflectivity_of_hail_in_air long_name = reflectivity of hail units = m6 kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_reflectivity_of_hail_in_tracer_concentration_array > 0) @@ -306,7 +306,7 @@ standard_name = cloud_condensation_nuclei_number_concentration long_name = number concentration of cloud condensation nuclei units = kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = ( index_of_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array > 0 ) @@ -314,7 +314,7 @@ standard_name = activated_cloud_condensation_nuclei_number_concentration long_name = number concentration of activated cloud condensation nuclei units = kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = ( index_of_activated_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array > 0 ) @@ -322,7 +322,7 @@ standard_name = graupel_volume long_name = graupel particle volume units = m3 kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = ( index_of_graupel_volume_in_tracer_concentration_array > 0 ) @@ -330,7 +330,7 @@ standard_name = hail_volume long_name = hail particle volume units = m3 kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = ( index_of_hail_volume_in_tracer_concentration_array > 0 ) @@ -338,14 +338,14 @@ standard_name = turbulent_kinetic_energy long_name = turbulent kinetic energy units = J - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [qgrs(:,:,index_of_updraft_area_fraction_in_tracer_concentration_array)] standard_name = prognostic_updraft_area_fraction_in_convection long_name = convective updraft area fraction units = frac - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_updraft_area_fraction_in_tracer_concentration_array > 0 ) @@ -353,21 +353,21 @@ standard_name = smoke_tracer_concentration long_name = concentration of smoke units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [qgrs(:,:,index_for_dust_in_tracer_concentration_array)] standard_name = dust_tracer_concentration long_name = concentration of dust units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [diss_est] standard_name = dissipation_estimate_of_air_temperature_at_model_layers long_name = dissipation estimate model layer mean temperature units = K - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys @@ -384,112 +384,112 @@ standard_name = x_wind_of_new_state long_name = zonal wind updated by physics units = m s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [gu0(:,1)] standard_name = x_wind_of_new_state_at_surface_adjacent_layer long_name = zonal wind at lowest model layer updated by physics units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [gv0] standard_name = y_wind_of_new_state long_name = meridional wind updated by physics units = m s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [gv0(:,1)] standard_name = y_wind_of_new_state_at_surface_adjacent_layer long_name = meridional wind at lowest model layer updated by physics units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [gt0] standard_name = air_temperature_of_new_state long_name = temperature updated by physics units = K - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [gt0(:,1)] standard_name = air_temperature_of_new_state_at_surface_adjacent_layer long_name = temperature at lowest model layer updated by physics units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [gq0] standard_name = tracer_concentration_of_new_state long_name = tracer concentration updated by physics units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension,number_of_tracers) + dimensions = (horizontal_dimension,vertical_layer_dimension,number_of_tracers) type = real kind = kind_phys [gq0(:,:,index_of_specific_humidity_in_tracer_concentration_array)] standard_name = specific_humidity_of_new_state long_name = water vapor specific humidity updated by physics units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [gq0(:,1,index_of_specific_humidity_in_tracer_concentration_array)] standard_name = specific_humidity_of_new_state_at_surface_adjacent_layer long_name = water vapor specific humidity at lowest model layer updated by physics units = kg kg-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [gq0(:,:,index_of_ozone_mixing_ratio_in_tracer_concentration_array)] standard_name = ozone_concentration_of_new_state long_name = ozone concentration updated by physics units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [gq0(:,:,index_of_cloud_liquid_water_mixing_ratio_in_tracer_concentration_array)] standard_name = cloud_liquid_water_mixing_ratio_of_new_state long_name = ratio of mass of cloud water to mass of dry air plus vapor (without condensates) updated by physics units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [gq0(:,:,index_of_cloud_ice_mixing_ratio_in_tracer_concentration_array)] standard_name = cloud_ice_mixing_ratio_of_new_state long_name = ratio of mass of ice water to mass of dry air plus vapor (without condensates) updated by physics units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [gq0(:,:,index_of_rain_mixing_ratio_in_tracer_concentration_array)] standard_name = rain_mixing_ratio_of_new_state long_name = ratio of mass of rain water to mass of dry air plus vapor (without condensates) updated by physics units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [gq0(:,:,index_of_snow_mixing_ratio_in_tracer_concentration_array)] standard_name = snow_mixing_ratio_of_new_state long_name = ratio of mass of snow water to mass of dry air plus vapor (without condensates) updated by physics units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [gq0(:,:,index_of_graupel_mixing_ratio_in_tracer_concentration_array)] standard_name = graupel_mixing_ratio_of_new_state long_name = ratio of mass of graupel to mass of dry air plus vapor (without condensates) updated by physics units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [gq0(:,:,index_of_hail_mixing_ratio_in_tracer_concentration_array)] standard_name = hail_mixing_ratio_of_new_state long_name = ratio of mass of hail to mass of dry air plus vapor (without condensates) updated by physics units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = ( index_of_hail_mixing_ratio_in_tracer_concentration_array > 0 ) @@ -497,14 +497,14 @@ standard_name = mass_weighted_rime_factor_of_new_state long_name = mass weighted rime factor updated by physics units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [gq0(:,:,index_of_mass_number_concentration_of_hygroscopic_aerosols_in_tracer_concentration_array)] standard_name = mass_number_concentration_of_hygroscopic_aerosols_of_new_state long_name = number concentration of water-friendly aerosols updated by physics units = kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_mass_number_concentration_of_hygroscopic_aerosols_in_tracer_concentration_array > 0) @@ -512,7 +512,7 @@ standard_name = mass_number_concentration_of_nonhygroscopic_ice_nucleating_aerosols_of_new_state long_name = number concentration of ice-friendly aerosols updated by physics units = kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_mass_number_concentration_of_nonhygroscopic_ice_nucleating_aerosols_in_tracer_concentration_array > 0) @@ -520,7 +520,7 @@ standard_name = mass_number_concentration_of_cloud_liquid_water_particles_in_air_of_new_state long_name = number concentration of cloud droplets updated by physics units = kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_mass_number_concentration_of_cloud_droplets_in_tracer_concentration_array > 0) @@ -528,35 +528,35 @@ standard_name = mass_number_concentration_of_cloud_ice_water_crystals_in_air_of_new_state long_name = number concentration of ice updated by physics units = kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [gq0(:,:,index_of_mass_number_concentration_of_rain_in_tracer_concentration_array)] standard_name = mass_number_concentration_of_rain_of_new_state long_name = number concentration of rain updated by physics units = kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [gq0(:,:,index_of_mass_number_concentration_of_snow_in_tracer_concentration_array)] standard_name = mass_number_concentration_of_snow_of_new_state long_name = number concentration of snow updated by physics units = kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [gq0(:,:,index_of_mass_number_concentration_of_graupel_in_tracer_concentration_array)] standard_name = mass_number_concentration_of_graupel_of_new_state long_name = number concentration of graupel updated by physics units = kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [gq0(:,:,index_of_mass_number_concentration_of_hail_in_tracer_concentration_array)] standard_name = mass_number_concentration_of_hail_of_new_state long_name = number concentration of hail updated by physics units = kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = ( index_of_mass_number_concentration_of_hail_in_tracer_concentration_array > 0 ) @@ -564,7 +564,7 @@ standard_name = cloud_condensation_nuclei_number_concentration_of_new_state long_name = number concentration of cloud condensation nuclei updated by physics units = kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = ( index_of_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array > 0 ) @@ -572,7 +572,7 @@ standard_name = activated_cloud_condensation_nuclei_number_concentration_of_new_state long_name = number concentration of cloud condensation nuclei updated by physics units = kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = ( index_of_activated_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array > 0 ) @@ -580,7 +580,7 @@ standard_name = graupel_volume_of_new_state long_name = graupel volume updated by physics units = m3 kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = ( index_of_graupel_volume_in_tracer_concentration_array > 0 ) @@ -588,7 +588,7 @@ standard_name = hail_volume_of_new_state long_name = hail volume updated by physics units = m3 kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = ( index_of_hail_volume_in_tracer_concentration_array > 0 ) @@ -596,7 +596,7 @@ standard_name = reflectivity_of_rain_of_new_state long_name = reflectivity of rain updated by physics units = m6 kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = ( index_of_reflectivity_of_rain_in_tracer_concentration_array > 0 ) @@ -604,7 +604,7 @@ standard_name = reflectivity_of_graupel_of_new_state long_name = reflectivity of graupel updated by physics units = m6 kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = ( index_of_reflectivity_of_graupel_in_tracer_concentration_array > 0 ) @@ -612,7 +612,7 @@ standard_name = reflectivity_of_hail_of_new_state long_name = reflectivity of hail updated by physics units = m6 kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = ( index_of_reflectivity_of_hail_in_tracer_concentration_array > 0 ) @@ -620,17 +620,18 @@ standard_name = cloud_area_fraction_in_atmosphere_layer_of_new_state long_name = cloud fraction updated by physics units = frac - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [gq0(:,:,index_of_updraft_area_fraction_in_tracer_concentration_array)] standard_name = updraft_area_fraction_updated_by_physics long_name = convective updraft area fraction updated by physics units = frac - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = ( index_of_updraft_area_fraction_in_tracer_concentration_array > 0 ) + ######################################################################## [ccpp-table-properties] name = GFS_sfcprop_type @@ -644,56 +645,56 @@ standard_name = area_type long_name = landmask: sea/land/ice=0/1/2 units = flag - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [oceanfrac] standard_name = sea_area_fraction long_name = fraction of horizontal grid area occupied by ocean units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [landfrac] standard_name = land_area_fraction long_name = fraction of horizontal grid area occupied by land units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [vegtype_frac] standard_name = fraction_of_vegetation_category long_name = fraction of horizontal grid area occupied by given vegetation category units = frac - dimensions = (horizontal_loop_extent,number_of_vegetation_categories) + dimensions = (horizontal_dimension,number_of_vegetation_categories) type = real kind = kind_phys [soiltype_frac] standard_name = fraction_of_soil_category long_name = fraction of horizontal grid area occupied by given soil category units = frac - dimensions = (horizontal_loop_extent,number_of_soil_categories) + dimensions = (horizontal_dimension,number_of_soil_categories) type = real kind = kind_phys [lakefrac] standard_name = lake_area_fraction long_name = fraction of horizontal grid area occupied by lake units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [lakedepth] standard_name = lake_depth long_name = lake depth units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [clm_lakedepth] standard_name = clm_lake_depth long_name = clm internal copy of lake depth with 10.0 replaced by default lake depth units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_lake_model_execution_method > 0 .and. control_for_lake_model_selection == 2) @@ -701,13 +702,13 @@ standard_name = flag_for_using_lake_model long_name = flag indicating lake points using a lake model units = flag - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer [lake_t2m] standard_name = temperature_at_2m_from_clm_lake long_name = temperature at 2m from clm lake units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_lake_model_execution_method > 0 .and. control_for_lake_model_selection == 2) @@ -715,7 +716,7 @@ standard_name = specific_humidity_at_2m_from_clm_lake long_name = specific humidity at 2m from clm lake units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_lake_model_execution_method > 0 .and. control_for_lake_model_selection == 2) @@ -723,7 +724,7 @@ standard_name = mixed_layer_depth_of_lakes long_name = depth of lake mixing layer units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_lake_model_selection == 1 .and. control_for_lake_model_execution_method > 0) @@ -731,7 +732,7 @@ standard_name = lake_mixed_layer_temperature long_name = temperature of lake mixing layer units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_lake_model_selection == 1 .and. control_for_lake_model_execution_method > 0) @@ -739,7 +740,7 @@ standard_name = mean_temperature_of_the_water_column long_name = thee mean temperature of the water column units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_lake_model_selection == 1 .and. control_for_lake_model_execution_method > 0) @@ -747,7 +748,7 @@ standard_name = the_thermally_active_layer_depth_of_the_bottom_sediment long_name = the depth of the thermally active layer of the bottom sediment units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_lake_model_selection == 1 .and. control_for_lake_model_execution_method > 0) @@ -755,7 +756,7 @@ standard_name = temperature_at_the_bottom_of_the_sediment_upper_layer long_name = the temperature at the bottom of the sediment upper layer units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_lake_model_selection == 1 .and. control_for_lake_model_execution_method > 0) @@ -763,7 +764,7 @@ standard_name = lake_bottom_temperature long_name = the temperature at the water-bottom sediment interface units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_lake_model_selection == 1 .and. control_for_lake_model_execution_method > 0) @@ -771,7 +772,7 @@ standard_name = temperature_for_bottom_layer_of_water long_name = the temperature at the lake bottom layer water units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_lake_model_selection == 1 .and. control_for_lake_model_execution_method > 0) @@ -779,7 +780,7 @@ standard_name = shape_factor_of_water_temperature_vertical_profile long_name = the shape factor of water temperature vertical profile units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_lake_model_selection == 1 .and. control_for_lake_model_execution_method > 0) @@ -787,7 +788,7 @@ standard_name = temperature_of_snow_on_lake long_name = temperature of snow on a lake units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_lake_model_execution_method > 0) @@ -795,147 +796,147 @@ standard_name = surface_skin_temperature long_name = surface skin temperature units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [tsfco] standard_name = sea_surface_temperature long_name = sea surface temperature units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [usfco] standard_name = x_ocean_current long_name = zonal current at ocean surface units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [vsfco] standard_name = y_ocean_current long_name = meridional current at ocean surface units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [tsfcl] standard_name = surface_skin_temperature_over_land long_name = surface skin temperature over land units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [tisfc] standard_name = surface_skin_temperature_over_ice long_name = surface skin temperature over ice units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [tiice] standard_name = temperature_in_ice_layer long_name = sea ice internal temperature units = K - dimensions = (horizontal_loop_extent,vertical_dimension_of_sea_ice) + dimensions = (horizontal_dimension,vertical_dimension_of_sea_ice) type = real kind = kind_phys [snowd] standard_name = lwe_surface_snow long_name = water equivalent snow depth units = mm - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [zorl] standard_name = surface_roughness_length long_name = surface roughness length units = cm - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [zorlw] standard_name = surface_roughness_length_over_water long_name = surface roughness length over water units = cm - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [zorll] standard_name = surface_roughness_length_over_land long_name = surface roughness length over land units = cm - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [zorli] standard_name = surface_roughness_length_over_ice long_name = surface roughness length over ice units = cm - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [zorlwav] standard_name = surface_roughness_length_from_wave_model long_name = surface roughness length from wave model units = cm - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [fice] standard_name = sea_ice_area_fraction_of_sea_area_fraction long_name = ice fraction over open water units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [snodl] standard_name = surface_snow_thickness_water_equivalent_over_land long_name = water equivalent snow depth over land units = mm - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [weasdl] standard_name = water_equivalent_accumulated_snow_depth_over_land long_name = water equiv of acc snow depth over land units = mm - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [snodi] standard_name = surface_snow_thickness_water_equivalent_over_ice long_name = water equivalent snow depth over ice units = mm - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [weasdi] standard_name = water_equivalent_accumulated_snow_depth_over_ice long_name = water equiv of acc snow depth over land units = mm - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [hprime] standard_name = statistical_measures_of_subgrid_orography_collection_array long_name = orographic metrics units = mixed - dimensions = (horizontal_loop_extent,number_of_statistical_measures_of_subgrid_orography) + dimensions = (horizontal_dimension,number_of_statistical_measures_of_subgrid_orography) type = real kind = kind_phys [hprime(:,1)] standard_name = standard_deviation_of_subgrid_orography long_name = standard deviation of subgrid height_above_mean_sea_level units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [dust12m_in] standard_name = fengsha_dust12m_input long_name = fengsha dust input units = various - dimensions = (horizontal_loop_extent,12,5) + dimensions = (horizontal_dimension,12,5) type = real kind = kind_phys active = (do_smoke_coupling) @@ -943,7 +944,7 @@ standard_name = anthropogenic_background_input long_name = anthropogenic background input units = various - dimensions = (horizontal_loop_extent,1) + dimensions = (horizontal_dimension,1) type = real kind = kind_phys active = (do_smoke_coupling) @@ -951,7 +952,7 @@ standard_name = emission_smoke_RRFS long_name = emission fire RRFS units = various - dimensions = (horizontal_loop_extent,24,2) + dimensions = (horizontal_dimension,24,2) type = real kind = kind_phys active = (do_smoke_coupling) @@ -959,7 +960,7 @@ standard_name = emission_smoke_prvd_RRFS long_name = emission fire RRFS daily units = various - dimensions = (horizontal_loop_extent,4) + dimensions = (horizontal_dimension,4) type = real kind = kind_phys active = (do_smoke_coupling) @@ -967,7 +968,7 @@ standard_name = baseline_surface_roughness_length long_name = baseline surface roughness length for momentum in meter units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_janjic_surface_layer_scheme .or. flag_for_mellor_yamada_janjic_pbl_scheme) @@ -975,28 +976,28 @@ standard_name = baseline_surface_longwave_emissivity long_name = baseline surface lw emissivity in fraction units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [sncovr] standard_name = surface_snow_area_fraction_over_land long_name = surface snow area fraction units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [sncovr_ice] standard_name = surface_snow_area_fraction_over_ice long_name = surface snow area fraction over ice units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [fire_heat_flux] standard_name = surface_fire_heat_flux long_name = heat flux of fire at the surface units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) @@ -1004,7 +1005,7 @@ standard_name = fraction_of_grid_cell_burning long_name = ration of the burnt area to the grid cell area units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) @@ -1012,35 +1013,35 @@ standard_name = upper_bound_of_max_albedo_assuming_deep_snow long_name = maximum snow albedo units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [emis_lnd] standard_name = surface_longwave_emissivity_over_land long_name = surface lw emissivity in fraction over land units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [emis_ice] standard_name = surface_longwave_emissivity_over_ice long_name = surface lw emissivity in fraction over ice units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [emis_wat] standard_name = surface_longwave_emissivity_over_water long_name = surface lw emissivity in fraction over water units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [sfalb_lnd] standard_name = surface_diffused_shortwave_albedo_over_land long_name = mean surface diffused sw albedo over land units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) @@ -1048,7 +1049,7 @@ standard_name = surface_diffused_shortwave_albedo_over_ice long_name = mean surface diffused sw albedo over ice units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) @@ -1056,7 +1057,7 @@ standard_name = surface_snow_free_albedo_over_land long_name = surface snow-free albedo over ice units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) @@ -1064,118 +1065,118 @@ standard_name = vis_albedo_weak_cosz long_name = mean vis albedo with weak cosz dependency units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [alnwf] standard_name = nir_albedo_weak_cosz long_name = mean nir albedo with weak cosz dependency units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [slope] standard_name = surface_slope_classification long_name = sfc slope type for lsm units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer [slope_save] standard_name = surface_slope_classification_save long_name = sfc slope type for lsm save units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer [shdmin] standard_name = min_vegetation_area_fraction long_name = min fractional coverage of green vegetation units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [shdmax] standard_name = max_vegetation_area_fraction long_name = max fractional coverage of green vegetation units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [tg3] standard_name = deep_soil_temperature long_name = deep soil temperature units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [vfrac] standard_name = vegetation_area_fraction long_name = areal fractional cover of green vegetation units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [vtype] standard_name = vegetation_type_classification long_name = vegetation type for lsm units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer [vtype_save] standard_name = vegetation_type_classification_save long_name = vegetation type for lsm save units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer [stype] standard_name = soil_type_classification long_name = soil type for lsm units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer [stype_save] standard_name = soil_type_classification_save long_name = soil type for lsm save units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer [scolor] standard_name = soil_color_classification long_name = soil color for lsm units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer [scolor_save] standard_name = soil_color_classification_save long_name = soil color for lsm save units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer [uustar] standard_name = surface_friction_velocity long_name = boundary layer parameter units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [oro] standard_name = height_above_mean_sea_level long_name = height_above_mean_sea_level units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [oro_uf] standard_name = unfiltered_height_above_mean_sea_level long_name = unfiltered height_above_mean_sea_level units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [maxupmf] standard_name = maximum_convective_updraft_mass_flux long_name = maximum convective updraft mass flux within a column units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_deep_convection_scheme == identifier_for_grell_freitas_deep_convection .or. control_for_deep_convection_scheme == identifier_for_c3_deep_convection) @@ -1183,7 +1184,7 @@ standard_name = consecutive_calls_for_grell_freitas_convection long_name = Memory counter for GF units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_deep_convection_scheme == identifier_for_grell_freitas_deep_convection .or. control_for_deep_convection_scheme == identifier_for_c3_deep_convection) @@ -1191,7 +1192,7 @@ standard_name = consecutive_calls_for_grell_freitas_mid_level_convection long_name = Memory counter for GF midlevel units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_deep_convection_scheme == identifier_for_grell_freitas_deep_convection .or. control_for_deep_convection_scheme == identifier_for_c3_deep_convection) @@ -1199,49 +1200,49 @@ standard_name = sea_ice_thickness long_name = sea ice thickness units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [weasd] standard_name = lwe_thickness_of_surface_snow_amount long_name = water equiv of acc snow depth over land and sea ice units = mm - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [canopy] standard_name = canopy_water_amount long_name = canopy water amount units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [ffmm] standard_name = Monin_Obukhov_similarity_function_for_momentum long_name = Monin-Obukhov similarity function for momentum units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [ffhh] standard_name = Monin_Obukhov_similarity_function_for_heat long_name = Monin-Obukhov similarity function for heat units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [f10m] standard_name = ratio_of_wind_at_surface_adjacent_layer_to_wind_at_10m long_name = ratio of sigma level 1 wind and 10m wind units = ratio - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [rca] standard_name = aerodynamic_resistance_in_canopy long_name = canopy resistance units = s m-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noah_land_surface_scheme .or. control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1249,63 +1250,63 @@ standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep long_name = total precipitation amount in each time step units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [srflag] standard_name = precipitation_type long_name = snow/rain flag for precipitation units = flag - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [slc] standard_name = volume_fraction_of_unfrozen_water_in_soil long_name = liquid soil moisture units = frac - dimensions = (horizontal_loop_extent,vertical_dimension_of_soil) + dimensions = (horizontal_dimension,vertical_dimension_of_soil) type = real kind = kind_phys [smc] standard_name = volume_fraction_of_condensed_water_in_soil long_name = total soil moisture units = frac - dimensions = (horizontal_loop_extent,vertical_dimension_of_soil) + dimensions = (horizontal_dimension,vertical_dimension_of_soil) type = real kind = kind_phys [stc] standard_name = soil_temperature long_name = soil temperature units = K - dimensions = (horizontal_loop_extent,vertical_dimension_of_soil) + dimensions = (horizontal_dimension,vertical_dimension_of_soil) type = real kind = kind_phys [t2m] standard_name = air_temperature_at_2m long_name = 2 meter temperature units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [th2m] standard_name = air_potential_temperature_at_2m long_name = 2 meter potential temperature units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [q2m] standard_name = specific_humidity_at_2m long_name = 2 meter specific humidity units = kg kg-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [tref] standard_name = reference_sea_surface_temperature long_name = sea surface reference temperature units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_nsstm > 0) @@ -1313,7 +1314,7 @@ standard_name = molecular_sublayer_thickness_in_sea_water long_name = sub-layer cooling thickness units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_nsstm > 0) @@ -1321,7 +1322,7 @@ standard_name = coefficient_c_0 long_name = coefficient 1 to calculate d(Tz)/d(Ts) units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_nsstm > 0) @@ -1329,7 +1330,7 @@ standard_name = coefficient_c_d long_name = coefficient 2 to calculate d(Tz)/d(Ts) units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_nsstm > 0) @@ -1337,7 +1338,7 @@ standard_name = coefficient_w_0 long_name = coefficient 3 to calculate d(Tz)/d(Ts) units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_nsstm > 0) @@ -1345,7 +1346,7 @@ standard_name = coefficient_w_d long_name = coefficient 4 to calculate d(Tz)/d(Ts) units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_nsstm > 0) @@ -1353,7 +1354,7 @@ standard_name = heat_content_in_diurnal_thermocline long_name = heat content in diurnal thermocline layer units = K m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_nsstm > 0) @@ -1361,7 +1362,7 @@ standard_name = sea_water_salinity_in_diurnal_thermocline long_name = salinity content in diurnal thermocline layer units = ppt m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_nsstm > 0) @@ -1369,7 +1370,7 @@ standard_name = x_current_in_diurnal_thermocline long_name = u-current content in diurnal thermocline layer units = m2 s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_nsstm > 0) @@ -1377,7 +1378,7 @@ standard_name = y_current_in_diurnal_thermocline long_name = v-current content in diurnal thermocline layer units = m2 s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_nsstm > 0) @@ -1385,7 +1386,7 @@ standard_name = diurnal_thermocline_layer_thickness long_name = diurnal thermocline layer thickness units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_nsstm > 0) @@ -1393,7 +1394,7 @@ standard_name = ocean_mixed_layer_thickness long_name = mixed layer thickness units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_nsstm > 0) @@ -1401,7 +1402,7 @@ standard_name = derivative_of_heat_content_in_diurnal_thermocline_wrt_surface_skin_temperature long_name = d(xt)/d(ts) units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_nsstm > 0) @@ -1409,7 +1410,7 @@ standard_name = derivative_of_diurnal_thermocline_layer_thickness_wrt_surface_skin_temperature long_name = d(xz)/d(ts) units = m K-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_nsstm > 0) @@ -1417,7 +1418,7 @@ standard_name = free_convection_layer_thickness_in_sea_water long_name = thickness of free convection layer (FCL) units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_nsstm > 0) @@ -1425,7 +1426,7 @@ standard_name = control_for_diurnal_thermocline_calculation long_name = index to start dtlm run or not units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_nsstm > 0) @@ -1433,7 +1434,7 @@ standard_name = molecular_sublayer_temperature_correction_in_sea_water long_name = sub-layer cooling amount units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_nsstm > 0) @@ -1441,7 +1442,7 @@ standard_name = surface_sensible_heat_due_to_rainfall long_name = sensible heat flux due to rainfall units = W - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_nsstm > 0) @@ -1449,7 +1450,7 @@ standard_name = number_of_snow_layers long_name = number of snow layers units = count - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1457,7 +1458,7 @@ standard_name = canopy_temperature long_name = vegetation temperature units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1465,7 +1466,7 @@ standard_name = ground_temperature long_name = ground temperature for noahmp units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1473,7 +1474,7 @@ standard_name = canopy_intercepted_ice_mass long_name = canopy intercepted ice mass units = mm - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1481,7 +1482,7 @@ standard_name = canopy_intercepted_liquid_water long_name = canopy intercepted liquid water units = mm - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1489,7 +1490,7 @@ standard_name = air_vapor_pressure_in_canopy long_name = canopy air vapor pressure units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1497,7 +1498,7 @@ standard_name = air_temperature_in_canopy long_name = canopy air temperature units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1505,7 +1506,7 @@ standard_name = surface_drag_coefficient_for_momentum_for_noahmp long_name = surface drag coefficient for momentum for noahmp units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1513,7 +1514,7 @@ standard_name = surface_drag_coefficient_for_heat_and_moisture_for_noahmp long_name = surface exchange coeff heat & moisture for noahmp units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1521,7 +1522,7 @@ standard_name = wet_canopy_area_fraction long_name = area fraction of canopy that is wetted/snowed units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1529,7 +1530,7 @@ standard_name = lwe_thickness_of_snowfall_amount_on_previous_timestep long_name = snow mass at previous time step units = mm - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1537,7 +1538,7 @@ standard_name = surface_albedo_assuming_deep_snow_on_previous_timestep long_name = snow albedo at previous time step units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1545,7 +1546,7 @@ standard_name = lwe_snowfall_rate long_name = snow precipitation rate at surface units = mm s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1553,7 +1554,7 @@ standard_name = water_storage_in_lake long_name = lake water storage units = mm - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1561,7 +1562,7 @@ standard_name = water_table_depth long_name = water table depth units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1569,7 +1570,7 @@ standard_name = water_storage_in_aquifer long_name = water storage in aquifer units = mm - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1577,7 +1578,7 @@ standard_name = water_storage_in_aquifer_and_saturated_soil long_name = water storage in aquifer and saturated soil units = mm - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1585,7 +1586,7 @@ standard_name = temperature_in_surface_snow long_name = temperature_in_surface_snow units = K - dimensions = (horizontal_loop_extent, lower_bound_of_vertical_dimension_of_surface_snow:0) + dimensions = (horizontal_dimension, lower_bound_of_vertical_dimension_of_surface_snow:0) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1593,7 +1594,7 @@ standard_name = depth_from_snow_surface_at_bottom_interface long_name = depth from the top of the snow surface at the bottom of the layer units = m - dimensions = (horizontal_loop_extent, lower_bound_of_vertical_dimension_of_surface_snow:vertical_dimension_of_soil_internal_to_land_surface_scheme) + dimensions = (horizontal_dimension, lower_bound_of_vertical_dimension_of_surface_snow:vertical_dimension_of_soil_internal_to_land_surface_scheme) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1601,7 +1602,7 @@ standard_name = lwe_thickness_of_ice_in_surface_snow long_name = snow layer ice units = mm - dimensions = (horizontal_loop_extent, lower_bound_of_vertical_dimension_of_surface_snow:0) + dimensions = (horizontal_dimension, lower_bound_of_vertical_dimension_of_surface_snow:0) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1609,7 +1610,7 @@ standard_name = lwe_thickness_of_liquid_water_in_surface_snow long_name = snow layer liquid water units = mm - dimensions = (horizontal_loop_extent, lower_bound_of_vertical_dimension_of_surface_snow:0) + dimensions = (horizontal_dimension, lower_bound_of_vertical_dimension_of_surface_snow:0) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1617,7 +1618,7 @@ standard_name = leaf_mass_content long_name = leaf mass units = g m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1625,7 +1626,7 @@ standard_name = fine_root_mass_content long_name = fine root mass units = g m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1633,7 +1634,7 @@ standard_name = stem_mass_content long_name = stem mass units = g m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1641,7 +1642,7 @@ standard_name = wood_mass_content long_name = wood mass including woody roots units = g m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1649,7 +1650,7 @@ standard_name = slow_soil_pool_mass_content_of_carbon long_name = stable carbon in deep soil units = g m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1657,7 +1658,7 @@ standard_name = fast_soil_pool_mass_content_of_carbon long_name = short-lived carbon in shallow soil units = g m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1665,7 +1666,7 @@ standard_name = leaf_area_index long_name = leaf area index units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noah_land_surface_scheme .or. control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme .or. control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) @@ -1673,7 +1674,7 @@ standard_name = stem_area_index long_name = stem area index units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1681,7 +1682,7 @@ standard_name = dimensionless_age_of_surface_snow long_name = non-dimensional snow age units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1689,7 +1690,7 @@ standard_name = volumetric_equilibrium_soil_moisture long_name = equilibrium soil water content units = m3 m-3 - dimensions = (horizontal_loop_extent,vertical_dimension_of_soil_internal_to_land_surface_scheme) + dimensions = (horizontal_dimension,vertical_dimension_of_soil_internal_to_land_surface_scheme) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1697,7 +1698,7 @@ standard_name = volumetric_soil_moisture_between_soil_bottom_and_water_table long_name = soil water content between the bottom of the soil and the water table units = m3 m-3 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1705,7 +1706,7 @@ standard_name = water_table_recharge_assuming_deep long_name = recharge to or from the water table when deep units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1713,7 +1714,7 @@ standard_name = water_table_recharge_assuming_shallow long_name = recharge to or from the water table when shallow units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -1721,35 +1722,35 @@ standard_name = surface_albedo_direct_visible_over_land long_name = direct surface albedo visible band over land units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [albdirnir_lnd] standard_name = surface_albedo_direct_NIR_over_land long_name = direct surface albedo NIR band over land units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [albdifvis_lnd] standard_name = surface_albedo_diffuse_visible_over_land long_name = diffuse surface albedo visible band over land units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [albdifnir_lnd] standard_name = surface_albedo_diffuse_NIR_over_land long_name = diffuse surface albedo NIR band over land units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [albdirvis_ice] standard_name = surface_albedo_direct_visible_over_ice long_name = direct surface albedo visible band over ice units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme .or. flag_for_cice_albedo) @@ -1757,7 +1758,7 @@ standard_name = surface_albedo_diffuse_visible_over_ice long_name = diffuse surface albedo visible band over ice units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme .or. flag_for_cice_albedo) @@ -1765,7 +1766,7 @@ standard_name = surface_albedo_direct_NIR_over_ice long_name = direct surface albedo NIR band over ice units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme .or. flag_for_cice_albedo) @@ -1773,7 +1774,7 @@ standard_name = surface_albedo_diffuse_NIR_over_ice long_name = diffuse surface albedo NIR band over ice units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme .or. flag_for_cice_albedo) @@ -1781,7 +1782,7 @@ standard_name = normalized_soil_wetness_for_land_surface_model long_name = normalized soil wetness for lsm units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) @@ -1789,7 +1790,7 @@ standard_name = volume_fraction_of_unfrozen_soil_moisture_for_land_surface_model long_name = volume fraction of unfrozen soil moisture for lsm units = frac - dimensions = (horizontal_loop_extent,vertical_dimension_of_soil_internal_to_land_surface_scheme) + dimensions = (horizontal_dimension,vertical_dimension_of_soil_internal_to_land_surface_scheme) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) @@ -1797,7 +1798,7 @@ standard_name = volume_fraction_of_frozen_soil_moisture_for_land_surface_model long_name = volume fraction of frozen soil moisture for lsm units = frac - dimensions = (horizontal_loop_extent,vertical_dimension_of_soil_internal_to_land_surface_scheme) + dimensions = (horizontal_dimension,vertical_dimension_of_soil_internal_to_land_surface_scheme) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) @@ -1805,7 +1806,7 @@ standard_name = volume_fraction_of_soil_moisture_for_land_surface_model long_name = volumetric fraction of soil moisture for lsm units = frac - dimensions = (horizontal_loop_extent,vertical_dimension_of_soil_internal_to_land_surface_scheme) + dimensions = (horizontal_dimension,vertical_dimension_of_soil_internal_to_land_surface_scheme) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) @@ -1813,7 +1814,7 @@ standard_name = soil_temperature_for_land_surface_model long_name = soil temperature for land surface model units = K - dimensions = (horizontal_loop_extent,vertical_dimension_of_soil_internal_to_land_surface_scheme) + dimensions = (horizontal_dimension,vertical_dimension_of_soil_internal_to_land_surface_scheme) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) @@ -1821,7 +1822,7 @@ standard_name = cloud_condensed_water_mixing_ratio_at_surface_over_land long_name = moist cloud water mixing ratio at surface over land units = kg kg-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) @@ -1829,7 +1830,7 @@ standard_name = cloud_condensed_water_mixing_ratio_at_surface_over_ice long_name = moist cloud water mixing ratio at surface over ice units = kg kg-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) @@ -1837,7 +1838,7 @@ standard_name = water_vapor_mixing_ratio_at_surface_over_land long_name = water vapor mixing ratio at surface over land units = kg kg-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) @@ -1845,7 +1846,7 @@ standard_name = water_vapor_mixing_ratio_at_surface_over_ice long_name = water vapor mixing ratio at surface over ice units = kg kg-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) @@ -1853,7 +1854,7 @@ standard_name = control_for_frozen_soil_physics long_name = flag for frozen soil physics (RUC) units = flag - dimensions = (horizontal_loop_extent,vertical_dimension_of_soil_internal_to_land_surface_scheme) + dimensions = (horizontal_dimension,vertical_dimension_of_soil_internal_to_land_surface_scheme) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) @@ -1861,7 +1862,7 @@ standard_name = lsm_internal_surface_frozen_precipitation_density long_name = density of frozen precipitation units = kg m-3 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) @@ -1869,7 +1870,7 @@ standard_name = temperature_in_surface_snow_at_surface_adjacent_layer_over_land long_name = snow temperature at the bottom of the first snow layer over land units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) @@ -1877,7 +1878,7 @@ standard_name = temperature_in_surface_snow_at_surface_adjacent_layer_over_ice long_name = snow temperature at the bottom of the first snow layer over ice units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) @@ -1885,7 +1886,7 @@ standard_name = surface_snow_amount_assuming_variable_snow_density_over_land long_name = run-total snow accumulation on the ground with variable snow density over land units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) @@ -1893,14 +1894,14 @@ standard_name = surface_snow_lwe_thickness_amount_over_land long_name = run-total snowfall water equivalent over land units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [snowfallac_ice] standard_name = surface_snow_amount_assuming_variable_snow_density_over_ice long_name = run-total snow accumulation on the ground with variable snow density over ice units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) @@ -1908,14 +1909,14 @@ standard_name = surface_snow_lwe_thickness_amount_over_ice long_name = run-total snowfall water equivalent over ice units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [ustm] standard_name = surface_friction_velocity_for_momentum long_name = friction velocity isolated for momentum only units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_surface_layer_scheme) @@ -1923,7 +1924,7 @@ standard_name = ratio_of_height_to_monin_obukhov_length long_name = monin obukhov surface stability parameter units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_surface_layer_scheme) @@ -1931,7 +1932,7 @@ standard_name = surface_temperature_scale long_name = temperature flux divided by ustar (temperature scale) units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_surface_layer_scheme) @@ -1939,28 +1940,28 @@ standard_name = reciprocal_of_obukhov_length long_name = one over obukhov length units = m-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [flhc] standard_name = surface_exchange_coefficient_for_heat long_name = surface exchange coefficient for heat units = W m-2 K-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [flqc] standard_name = surface_exchange_coefficient_for_moisture long_name = surface exchange coefficient for moisture units = kg m-2 s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [chs2] standard_name = surface_exchange_coefficient_for_heat_at_2m long_name = exchange coefficient for heat at 2 meters units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_surface_layer_scheme) @@ -1968,7 +1969,7 @@ standard_name = surface_exchange_coefficient_for_moisture_at_2m long_name = exchange coefficient for moisture at 2 meters units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_surface_layer_scheme) @@ -1976,7 +1977,7 @@ standard_name = surface_upward_latent_heat_flux long_name = latent heating at the surface (pos = up) units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_surface_layer_scheme) @@ -1984,28 +1985,28 @@ standard_name = surface_upward_specific_humidity_flux long_name = kinematic surface upward latent heat flux units = kg kg-1 m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [hflx] standard_name = surface_upward_temperature_flux long_name = kinematic surface upward sensible heat flux units = K m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [qss] standard_name = surface_specific_humidity long_name = surface air saturation specific humidity units = kg kg-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [raincprv] standard_name = lwe_thickness_of_convective_precipitation_amount_on_previous_timestep long_name = convective_precipitation_amount from previous timestep units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme .or. control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme .or. ( control_for_lake_model_execution_method > 0 .and. control_for_lake_model_selection == 2) ) @@ -2013,7 +2014,7 @@ standard_name = lwe_thickness_of_explicit_precipitation_amount_on_previous_timestep long_name = explicit rainfall from previous timestep units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme .or. control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme .or. ( control_for_lake_model_execution_method > 0 .and. control_for_lake_model_selection == 2) ) @@ -2021,7 +2022,7 @@ standard_name = lwe_thickness_of_ice_precipitation_amount_on_previous_timestep long_name = ice amount from previous timestep units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme .or. control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -2029,7 +2030,7 @@ standard_name = snow_mass_on_previous_timestep long_name = snow amount from previous timestep units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme .or. control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -2037,7 +2038,7 @@ standard_name = lwe_thickness_of_graupel_amount_on_previous_timestep long_name = graupel amount from previous timestep units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme .or. control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -2045,7 +2046,7 @@ standard_name = convective_precipitation_rate_on_previous_timestep long_name = convective precipitation rate from previous timestep units = mm s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -2053,7 +2054,7 @@ standard_name = explicit_precipitation_rate_on_previous_timestep long_name = explicit rainfall rate previous timestep units = mm s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -2061,7 +2062,7 @@ standard_name = ice_precipitation_rate_on_previous_timestep long_name = ice precipitation rate from previous timestep units = mm s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -2069,7 +2070,7 @@ standard_name = snowfall_rate_on_previous_timestep long_name = snow precipitation rate from previous timestep units = mm s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -2077,7 +2078,7 @@ standard_name = graupel_precipitation_rate_on_previous_timestep long_name = graupel precipitation rate from previous timestep units = mm s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -2085,35 +2086,35 @@ standard_name = vis_albedo_strong_cosz long_name = mean vis albedo with strong cosz dependency units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [alnsf] standard_name = nir_albedo_strong_cosz long_name = mean nir albedo with strong cosz dependency units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [facsf] standard_name =strong_cosz_area_fraction long_name = fractional coverage with strong cosz dependency units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [facwf] standard_name = weak_cosz_area_fraction long_name = fractional coverage with weak cosz dependency units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [lake_albedo] standard_name = mid_day_surface_albedo_over_lake long_name = mid day surface albedo over lake units = fraction - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0) @@ -2121,7 +2122,7 @@ standard_name = lake_depth_before_correction long_name = lake depth_before_correction units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0) @@ -2129,7 +2130,7 @@ standard_name = water_equivalent_accumulated_snow_depth_in_clm_lake_model long_name = water equiv of acc snow depth over lake in clm lake model units = mm - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0) @@ -2137,7 +2138,7 @@ standard_name = actual_snow_depth_in_clm_lake_model long_name = actual acc snow depth over lake in clm lake model units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0) @@ -2145,7 +2146,7 @@ standard_name = snow_layers_in_clm_lake_model long_name = snow layers in clm lake model (treated as integer) units = count - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0) @@ -2153,7 +2154,7 @@ standard_name = snow_level_depth_in_clm_lake_model long_name = snow level depth in clm lake model units = m - dimensions = (horizontal_loop_extent,snow_plus_soil_minus_one_vertical_dimension_for_clm_lake_model) + dimensions = (horizontal_dimension,snow_plus_soil_minus_one_vertical_dimension_for_clm_lake_model) type = real kind = kind_phys active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0) @@ -2161,7 +2162,7 @@ standard_name = snow_level_thickness_in_clm_lake_model long_name = snow level thickness in clm lake model units = m - dimensions = (horizontal_loop_extent,snow_plus_soil_minus_one_vertical_dimension_for_clm_lake_model) + dimensions = (horizontal_dimension,snow_plus_soil_minus_one_vertical_dimension_for_clm_lake_model) type = real kind = kind_phys active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0) @@ -2169,7 +2170,7 @@ standard_name = snow_interface_depth_in_clm_lake_model long_name = snow interface_depth in clm lake model units = m - dimensions = (horizontal_loop_extent,snow_plus_soil_vertical_dimension_for_clm_lake_model) + dimensions = (horizontal_dimension,snow_plus_soil_vertical_dimension_for_clm_lake_model) type = real kind = kind_phys active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0) @@ -2177,7 +2178,7 @@ standard_name = volumetric_soil_water_in_clm_lake_model long_name = volumetric soil water in clm lake model units = m3 m-3 - dimensions = (horizontal_loop_extent,snow_plus_soil_minus_one_vertical_dimension_for_clm_lake_model) + dimensions = (horizontal_dimension,snow_plus_soil_minus_one_vertical_dimension_for_clm_lake_model) type = real kind = kind_phys active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0) @@ -2185,7 +2186,7 @@ standard_name = soil_liquid_water_content_in_clm_lake_model long_name = soil liquid water content in clm lake model units = kg m-3 - dimensions = (horizontal_loop_extent,snow_plus_soil_minus_one_vertical_dimension_for_clm_lake_model) + dimensions = (horizontal_dimension,snow_plus_soil_minus_one_vertical_dimension_for_clm_lake_model) type = real kind = kind_phys active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0) @@ -2193,7 +2194,7 @@ standard_name = soil_ice_water_content_in_clm_lake_model long_name = soil ice water content in clm lake model units = kg m-3 - dimensions = (horizontal_loop_extent,snow_plus_soil_minus_one_vertical_dimension_for_clm_lake_model) + dimensions = (horizontal_dimension,snow_plus_soil_minus_one_vertical_dimension_for_clm_lake_model) type = real kind = kind_phys active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0) @@ -2201,7 +2202,7 @@ standard_name = skin_temperature_from_lake_model long_name = skin temperature from lake model units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0) @@ -2209,7 +2210,7 @@ standard_name = soil_or_snow_layer_temperature_from_clm_lake_model long_name = soil or snow layer temperature from clm lake model units = K - dimensions = (horizontal_loop_extent,snow_plus_soil_minus_one_vertical_dimension_for_clm_lake_model) + dimensions = (horizontal_dimension,snow_plus_soil_minus_one_vertical_dimension_for_clm_lake_model) type = real kind = kind_phys active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0) @@ -2217,7 +2218,7 @@ standard_name = lake_layer_temperature_from_clm_lake_model long_name = lake layer temperature from clm lake model units = K - dimensions = (horizontal_loop_extent,lake_vertical_dimension_for_clm_lake_model) + dimensions = (horizontal_dimension,lake_vertical_dimension_for_clm_lake_model) type = real kind = kind_phys active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0) @@ -2225,7 +2226,7 @@ standard_name = top_level_eddy_conductivity_from_previous_timestep_in_clm_lake_model long_name = top level eddy conductivity from previous timestep in clm lake model units = kg m-3 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0) @@ -2233,14 +2234,14 @@ standard_name = lake_fractional_ice_cover_on_clm_lake_levels long_name = lake fractional ice cover on clm lake levels units = kg m-3 - dimensions = (horizontal_loop_extent,lake_vertical_dimension_for_clm_lake_model) + dimensions = (horizontal_dimension,lake_vertical_dimension_for_clm_lake_model) type = real kind = kind_phys active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0) [lake_ht] standard_name = test_lake_ht long_name = test_lake_ht - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) units = unitless type = real kind = kind_phys @@ -2249,7 +2250,7 @@ standard_name = flag_for_clm_lake_initialization long_name = set to true in clm_lake_run after likeini is called for that gridpoint units = flag - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0) @@ -2257,21 +2258,21 @@ standard_name = clm_lake_is_salty long_name = lake at this point is salty (1) or not (0) units = 1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0) [lake_cannot_freeze] standard_name = clm_lake_cannot_freeze long_name = lake at this point is so salty it cannot freeze units = 1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0) [emdust] standard_name = emission_of_dust_for_smoke long_name = emission of dust for smoke units = ug m-2 s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (do_smoke_coupling) @@ -2279,7 +2280,7 @@ standard_name = emission_of_sea_salt_for_mp_indir_fdb long_name = emission of sea salt for mp indirect feedabck units = ug m-2 s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (do_smoke_coupling) @@ -2287,7 +2288,7 @@ standard_name = emission_of_anothropogenic_for_mp_indir_fdb long_name = emission of anothropogenic for mp indirect feedabck units = ug m-2 s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (do_smoke_coupling) @@ -2295,7 +2296,7 @@ standard_name = surface_smoke_emission long_name = emission of surface smoke units = ug m-2 s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (do_smoke_coupling) @@ -2303,7 +2304,7 @@ standard_name = frp_hourly long_name = hourly fire radiative power units = MW - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (do_smoke_coupling) @@ -2311,7 +2312,7 @@ standard_name = fire_hist long_name = coefficient to scale the fire activity depending on the fire duration units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (do_smoke_coupling) @@ -2319,7 +2320,7 @@ standard_name = coef_bb_dc long_name = coef to estimate the fire emission units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (do_smoke_coupling) @@ -2327,14 +2328,14 @@ standard_name = fire_type long_name = type of fire units = 1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer active = (do_smoke_coupling) [peak_hr] standard_name = peak_hr_fire long_name = time_of_peak_fire_emissions units = s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (do_smoke_coupling) @@ -2342,7 +2343,7 @@ standard_name = sum_of_land_use_fractions_for_no_fire_pixels long_name = land use of no fire pixels for type units = 1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (do_smoke_coupling) @@ -2350,7 +2351,7 @@ standard_name = sum_of_land_use_fractions_for_cropland_fire_pixels long_name = land use of fire pixels for type units = 1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (do_smoke_coupling) @@ -2358,7 +2359,7 @@ standard_name = smoke_fire_auxiliary_input long_name = smoke fire auxiliary input variables units = various - dimensions = (horizontal_loop_extent,fire_auxiliary_data_extent) + dimensions = (horizontal_dimension,fire_auxiliary_data_extent) type = real kind = kind_phys active = (do_smoke_coupling) @@ -2376,91 +2377,91 @@ standard_name = surface_downwelling_direct_nir_shortwave_flux_on_radiation_timestep long_name = sfc nir beam sw downward flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [nirdfdi] standard_name = surface_downwelling_diffuse_nir_shortwave_flux_on_radiation_timestep long_name = sfc nir diff sw downward flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [visbmdi] standard_name = surface_downwelling_direct_uv_and_vis_shortwave_flux_on_radiation_timestep long_name = sfc uv+vis beam sw downward flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [visdfdi] standard_name = surface_downwelling_diffuse_uv_and_vis_shortwave_flux_on_radiation_timestep long_name = sfc uv+vis diff sw downward flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [nirbmui] standard_name = surface_upwelling_direct_nir_shortwave_flux_on_radiation_timestep long_name = sfc nir beam sw upward flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [nirdfui] standard_name = surface_upwelling_diffuse_nir_shortwave_flux_on_radiation_timestep long_name = sfc nir diff sw upward flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [visbmui] standard_name = surface_upwelling_direct_uv_and_vis_shortwave_flux_on_radiation_timestep long_name = sfc uv+vis beam sw upward flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [visdfui] standard_name = surface_upwelling_diffuse_uv_and_vis_shortwave_flux_on_radiation_timestep long_name = sfc uv+vis diff sw upward flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [sfcdsw] standard_name = surface_downwelling_shortwave_flux_on_radiation_timestep long_name = total sky sfc downward sw flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [sfcnsw] standard_name = surface_net_downwelling_shortwave_flux_on_radiation_timestep long_name = total sky sfc netsw flx into ground units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [sfcdlw] standard_name = surface_downwelling_longwave_flux_on_radiation_timestep long_name = total sky sfc downward lw flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [sfculw] standard_name = surface_upwelling_longwave_flux_on_radiation_timestep long_name = total sky sfc upward lw flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [rain_cpl] standard_name = cumulative_lwe_thickness_of_precipitation_amount_for_coupling long_name = total rain precipitation units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_stochastic_physics_perturbations .or. flag_for_chemistry_coupling .or. flag_for_global_cellular_automata .or. flag_for_land_coupling) @@ -2468,7 +2469,7 @@ standard_name = cumulative_lwe_thickness_of_convective_precipitation_amount_for_coupling long_name = total convective precipitation units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_chemistry_coupling .or. flag_for_land_coupling) @@ -2476,7 +2477,7 @@ standard_name = cumulative_lwe_thickness_of_snow_amount_for_coupling long_name = total snow precipitation units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_stochastic_physics_perturbations .or. flag_for_chemistry_coupling .or. flag_for_global_cellular_automata .or. flag_for_land_coupling) @@ -2484,7 +2485,7 @@ standard_name = cumulative_surface_x_momentum_flux_for_coupling_multiplied_by_timestep long_name = cumulative sfc x momentum flux multiplied by timestep units = Pa s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling) @@ -2492,7 +2493,7 @@ standard_name = cumulative_surface_y_momentum_flux_for_coupling_multiplied_by_timestep long_name = cumulative sfc y momentum flux multiplied by timestep units = Pa s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling) @@ -2500,7 +2501,7 @@ standard_name = cumulative_surface_upward_sensible_heat_flux_for_coupling_multiplied_by_timestep long_name = cumulative sfc sensible heat flux multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling) @@ -2508,7 +2509,7 @@ standard_name = cumulative_surface_upward_latent_heat_flux_for_coupling_multiplied_by_timestep long_name = cumulative sfc latent heat flux multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling) @@ -2516,7 +2517,7 @@ standard_name = cumulative_surface_downwelling_longwave_flux_for_coupling_multiplied_by_timestep long_name = cumulative sfc downward lw flux mulitplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_land_coupling) @@ -2524,7 +2525,7 @@ standard_name = cumulative_surface_downwelling_shortwave_flux_for_coupling_multiplied_by_timestep long_name = cumulative sfc downward sw flux multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_land_coupling) @@ -2532,7 +2533,7 @@ standard_name = cumulative_surface_downwelling_direct_nir_shortwave_flux_for_coupling_multiplied_by_timestep long_name = cumulative sfc nir beam downward sw flux multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling) @@ -2540,7 +2541,7 @@ standard_name = cumulative_surface_downwelling_diffuse_nir_shortwave_flux_for_coupling_multiplied_by_timestep long_name = cumulative sfc nir diff downward sw flux multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling) @@ -2548,7 +2549,7 @@ standard_name = cumulative_surface_downwelling_direct_uv_and_vis_shortwave_flux_for_coupling_multiplied_by_timestep long_name = cumulative sfc uv+vis beam dnwd sw flux multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling) @@ -2556,7 +2557,7 @@ standard_name = cumulative_surface_downwelling_diffuse_uv_and_vis_shortwave_flux_for_coupling_multiplied_by_timestep long_name = cumulative sfc uv+vis diff dnwd sw flux multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling) @@ -2564,7 +2565,7 @@ standard_name = cumulative_surface_net_downwelling_longwave_flux_for_coupling_multiplied_by_timestep long_name = cumulative net downward lw flux multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling) @@ -2572,7 +2573,7 @@ standard_name = cumulative_surface_net_downwelling_shortwave_flux_for_coupling_multiplied_by_timestep long_name = cumulative net downward sw flux multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_land_coupling) @@ -2580,7 +2581,7 @@ standard_name = cumulative_surface_net_downwelling_direct_nir_shortwave_flux_for_coupling_multiplied_by_timestep long_name = cumulative net nir beam downward sw flux multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_land_coupling) @@ -2588,7 +2589,7 @@ standard_name = cumulative_surface_net_downwellling_diffuse_nir_shortwave_flux_for_coupling_multiplied_by_timestep long_name = cumulative net nir diff downward sw flux multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_land_coupling) @@ -2596,7 +2597,7 @@ standard_name = cumulative_surface_net_downwelling_direct_uv_and_vis_shortwave_flux_for_coupling_multiplied_by_timestep long_name = cumulative net uv+vis beam downward sw rad flux multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_land_coupling) @@ -2604,7 +2605,7 @@ standard_name = cumulative_surface_net_downwelling_diffuse_uv_and_vis_shortwave_flux_for_coupling_multiplied_by_timestep long_name = cumulative net uv+vis diff downward sw rad flux multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_land_coupling) @@ -2612,7 +2613,7 @@ standard_name = surface_x_momentum_flux_for_coupling long_name = instantaneous sfc x momentum flux units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling) @@ -2620,7 +2621,7 @@ standard_name = surface_y_momentum_flux_for_coupling long_name = instantaneous sfc y momentum flux units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling) @@ -2628,7 +2629,7 @@ standard_name = surface_upward_sensible_heat_flux_for_coupling long_name = instantaneous sfc sensible heat flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_air_quality_coupling) @@ -2636,7 +2637,7 @@ standard_name = surface_upward_latent_heat_flux_for_coupling long_name = instantaneous sfc latent heat flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_air_quality_coupling) @@ -2644,7 +2645,7 @@ standard_name = surface_downwelling_longwave_flux_for_coupling long_name = instantaneous sfc downward lw flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_land_coupling) @@ -2652,7 +2653,7 @@ standard_name = surface_downwelling_shortwave_flux_for_coupling long_name = instantaneous sfc downward sw flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_land_coupling) @@ -2660,7 +2661,7 @@ standard_name = surface_downwelling_direct_nir_shortwave_flux_for_coupling long_name = instantaneous sfc nir beam downward sw flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling) @@ -2668,7 +2669,7 @@ standard_name = surface_downwelling_diffuse_nir_shortwave_flux_for_coupling long_name = instantaneous sfc nir diff downward sw flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling) @@ -2676,7 +2677,7 @@ standard_name = surface_downwelling_direct_uv_and_vis_shortwave_flux_for_coupling long_name = instantaneous sfc uv+vis beam downward sw flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling) @@ -2684,7 +2685,7 @@ standard_name = surface_downwelling_diffuse_uv_and_vis_shortwave_flux_for_coupling long_name = instantaneous sfc uv+vis diff downward sw flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling) @@ -2692,7 +2693,7 @@ standard_name = surface_net_downwelling_longwave_flux_for_coupling long_name = instantaneous net sfc downward lw flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling) @@ -2700,7 +2701,7 @@ standard_name = surface_net_downwelling_shortwave_flux_for_coupling long_name = instantaneous net sfc downward sw flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_air_quality_coupling .or. flag_for_land_coupling) @@ -2708,7 +2709,7 @@ standard_name = surface_net_downwelling_direct_nir_shortwave_flux_for_coupling long_name = instantaneous net nir beam sfc downward sw flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_land_coupling) @@ -2716,7 +2717,7 @@ standard_name = surface_net_downwelling_diffuse_nir_shortwave_flux_for_coupling long_name = instantaneous net nir diff sfc downward sw flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_land_coupling) @@ -2724,7 +2725,7 @@ standard_name = surface_net_downwelling_direct_uv_and_vis_shortwave_flux_for_coupling long_name = instantaneous net uv+vis beam downward sw flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_land_coupling) @@ -2732,7 +2733,7 @@ standard_name = surface_net_downwelling_diffuse_uv_and_vis_shortwave_flux_for_coupling long_name = instantaneous net uv+vis diff downward sw flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_land_coupling) @@ -2740,7 +2741,7 @@ standard_name = temperature_at_2m_for_coupling long_name = instantaneous T2m units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_air_quality_coupling) @@ -2748,7 +2749,7 @@ standard_name = specific_humidity_at_2m_for_coupling long_name = instantaneous Q2m units = kg kg-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_air_quality_coupling) @@ -2756,7 +2757,7 @@ standard_name = x_wind_at_10m_for_coupling long_name = instantaneous U10m units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_chemistry_coupling .or. flag_for_ocean_wave_coupling) @@ -2764,7 +2765,7 @@ standard_name = y_wind_at_10m_for_coupling long_name = instantaneous V10m units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_chemistry_coupling .or. flag_for_ocean_wave_coupling) @@ -2772,7 +2773,7 @@ standard_name = surface_skin_temperature_for_coupling long_name = instantaneous sfc temperature units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_chemistry_coupling .or. flag_for_land_coupling) @@ -2780,7 +2781,7 @@ standard_name = surface_air_pressure_for_coupling long_name = instantaneous sfc pressure units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_air_quality_coupling .or. flag_for_land_coupling) @@ -2788,7 +2789,7 @@ standard_name = surface_upwelling_longwave_flux_from_coupled_process long_name = surface upwelling LW flux for coupling units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling) @@ -2796,7 +2797,7 @@ standard_name = surface_x_momentum_flux_from_coupled_process long_name = sfc x momentum flux for coupling units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling) @@ -2804,7 +2805,7 @@ standard_name = surface_y_momentum_flux_from_coupled_process long_name = sfc y momentum flux for coupling units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling) @@ -2812,7 +2813,7 @@ standard_name = surface_upward_sensible_heat_flux_from_coupled_process long_name = sfc sensible heat flux input units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling) @@ -2820,7 +2821,7 @@ standard_name = surface_upward_latent_heat_flux_from_coupled_process long_name = sfc latent heat flux input for coupling units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling) @@ -2828,7 +2829,7 @@ standard_name = surface_upwelling_longwave_flux_over_ocean_from_mediator long_name = surface upwelling LW flux over ocean for coupling units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .and. do_mediator_atmosphere_ocean_fluxes) @@ -2836,7 +2837,7 @@ standard_name = surface_x_momentum_flux_over_ocean_from_mediator long_name = sfc x momentum flux over ocean for coupling units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .and. do_mediator_atmosphere_ocean_fluxes) @@ -2844,7 +2845,7 @@ standard_name = surface_y_momentum_flux_over_ocean_from_mediator long_name = sfc y momentum flux over ocean for coupling units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .and. do_mediator_atmosphere_ocean_fluxes) @@ -2852,7 +2853,7 @@ standard_name = surface_upward_sensible_heat_flux_over_ocean_from_mediator long_name = sfc sensible heat flux input over ocean for coupling units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .and. do_mediator_atmosphere_ocean_fluxes) @@ -2860,7 +2861,7 @@ standard_name = surface_upward_latent_heat_flux_over_ocean_from_mediator long_name = sfc latent heat flux input over ocean for coupling units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .and. do_mediator_atmosphere_ocean_fluxes) @@ -2868,7 +2869,7 @@ standard_name = surface_snow_area_fraction_over_land_from_land long_name = surface snow area fraction over land for coupling units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) @@ -2876,7 +2877,7 @@ standard_name = surface_specific_humidity_over_land_from_land long_name = surface air saturation specific humidity over land units = kg kg-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) @@ -2884,7 +2885,7 @@ standard_name = surface_upward_sensible_heat_flux_over_land_from_land long_name = sfc sensible heat flux input over land for coupling units = K m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) @@ -2892,7 +2893,7 @@ standard_name = surface_upward_latent_heat_flux_over_land_from_land long_name = sfc latent heat flux input over land for coupling units = kg kg-1 m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) @@ -2900,7 +2901,7 @@ standard_name = surface_upward_potential_latent_heat_flux_over_land_from_land long_name = surface upward potential latent heat flux over land for coupling units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) @@ -2908,7 +2909,7 @@ standard_name = temperature_at_2m_over_land_from_land long_name = 2 meter temperature over land for coupling units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) @@ -2916,7 +2917,7 @@ standard_name = specific_humidity_at_2m_over_land_from_land long_name = 2 meter specific humidity over land for coupling units = kg kg-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) @@ -2924,7 +2925,7 @@ standard_name = upward_heat_flux_in_soil_over_land_from_land long_name = soil heat flux over land for coupling units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) @@ -2932,7 +2933,7 @@ standard_name = surface_runoff_flux_from_land long_name = surface runoff flux over land for coupling units = kg m-2 s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) @@ -2940,7 +2941,7 @@ standard_name = subsurface_runoff_flux_from_land long_name = subsurface runoff flux over land for coupling units = kg m-2 s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) @@ -2948,7 +2949,7 @@ standard_name = surface_drag_wind_speed_for_momentum_in_air_over_land_from_land long_name = momentum exchange coefficient over land for coupling units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) @@ -2956,7 +2957,7 @@ standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_land_from_land long_name = thermal exchange coefficient over land for coupling units = kg m-2 s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) @@ -2964,7 +2965,7 @@ standard_name = function_of_surface_roughness_length_and_green_vegetation_fraction_from_land long_name = function of surface roughness length and green vegetation fraction units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) @@ -2972,14 +2973,14 @@ standard_name = lwe_surface_snow_from_coupled_process long_name = sfc snow depth in meters over sea ice for coupling units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [slimskin_cpl] standard_name = area_type_from_coupled_process long_name = sea/land/ice mask input (=0/1/2) units = flag - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling) @@ -2987,7 +2988,7 @@ standard_name = instantaneous_tendency_of_specific_humidity_due_to_microphysics long_name = instantaneous_tendency_of_specific_humidity_due_to_microphysics units = kg kg-1 s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (do_prognostic_updraft_area_fraction) @@ -2995,7 +2996,7 @@ standard_name = cellular_automata_area_fraction_for_deep_convection_from_coupled_process long_name = fraction of cellular automata for deep convection units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_cellular_automata) @@ -3003,7 +3004,7 @@ standard_name = cellular_automata_global_pattern_from_coupled_process long_name = cellular automata global pattern units = flag - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_cellular_automata) @@ -3011,14 +3012,14 @@ standard_name = physics_field_for_coupling long_name = physics_field_for_coupling units = m2 s-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [shum_wts] standard_name = shum_weights_from_coupled_process long_name = weights for stochastic shum perturbation units = none - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_stochastic_shum_option) @@ -3026,7 +3027,7 @@ standard_name = sppt_weights_from_coupled_process long_name = weights for stochastic sppt perturbation units = none - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_stochastic_physics_perturbations .or. flag_for_global_cellular_automata) @@ -3034,7 +3035,7 @@ standard_name = skeb_x_wind_weights_from_coupled_process long_name = weights for stochastic skeb perturbation of x wind units = none - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_stochastic_skeb_option) @@ -3042,7 +3043,7 @@ standard_name = skeb_y_wind_weights_from_coupled_process long_name = weights for stochastic skeb perturbation of y wind units = none - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_stochastic_skeb_option) @@ -3050,7 +3051,7 @@ standard_name = spp_weights_for_pbl_scheme long_name = spp weights for pbl scheme units = 1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (do_stochastically_perturbed_parameterizations) @@ -3058,7 +3059,7 @@ standard_name = spp_weights_for_surface_layer_scheme long_name = spp weights for surface layer scheme units = 1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (do_stochastically_perturbed_parameterizations) @@ -3066,7 +3067,7 @@ standard_name = spp_weights_for_microphysics_scheme long_name = spp weights for microphysics scheme units = 1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (do_stochastically_perturbed_parameterizations) @@ -3074,7 +3075,7 @@ standard_name = spp_weights_for_gravity_wave_drag_scheme long_name = spp weights for gravity wave drag scheme units = 1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (do_stochastically_perturbed_parameterizations) @@ -3082,7 +3083,7 @@ standard_name = spp_weights_for_radiation_scheme long_name = spp weights for radiation scheme units = 1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (do_stochastically_perturbed_parameterizations) @@ -3090,7 +3091,7 @@ standard_name = spp_weights_for_cu_deep_scheme long_name = spp weights for cu deep scheme units = 1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (do_stochastically_perturbed_parameterizations) @@ -3098,7 +3099,7 @@ standard_name = surface_stochastic_weights_from_coupled_process long_name = weights for stochastic surface physics perturbation units = 1 - dimensions = (horizontal_loop_extent,number_of_perturbed_land_surface_variables) + dimensions = (horizontal_dimension,number_of_perturbed_land_surface_variables) type = real kind = kind_phys active = (control_for_stochastic_land_surface_perturbation /= 0) @@ -3106,7 +3107,7 @@ standard_name = tendency_of_hygroscopic_aerosols_at_surface_adjacent_layer long_name = instantaneous water-friendly sfc aerosol source units = kg-1 s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .and. flag_for_aerosol_physics) @@ -3114,7 +3115,7 @@ standard_name = tendency_of_nonhygroscopic_ice_nucleating_aerosols_at_surface_adjacent_layer long_name = instantaneous ice-friendly sfc aerosol source units = kg-1 s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .and. flag_for_aerosol_physics) @@ -3122,7 +3123,7 @@ standard_name = ebu_smoke long_name = buffer of vertical fire emission units = various - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (do_smoke_coupling) @@ -3130,7 +3131,7 @@ standard_name = extinction_coefficient_in_air_due_to_smoke long_name = extinction coefficient in air due to smoke units = various - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (do_smoke_coupling) @@ -3138,7 +3139,7 @@ standard_name = extinction_coefficient_in_air_due_to_dust long_name = extinction coefficient in air due to dust units = various - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (do_smoke_coupling) @@ -3146,7 +3147,7 @@ standard_name = chem3d_mynn_pbl_transport long_name = mynn pbl transport of smoke and dust units = various - dimensions = (horizontal_loop_extent,vertical_layer_dimension,number_of_chemical_species_vertically_mixed) + dimensions = (horizontal_dimension,vertical_layer_dimension,number_of_chemical_species_vertically_mixed) type = real kind = kind_phys active = (do_smoke_coupling) @@ -3154,7 +3155,7 @@ standard_name = dry_deposition_velocity_mynn_pbl_transport long_name = dry deposition velocity by mynn pbl transport units = m s-1 - dimensions = (horizontal_loop_extent,number_of_chemical_species_deposited) + dimensions = (horizontal_dimension,number_of_chemical_species_deposited) type = real kind = kind_phys active = (do_smoke_coupling) @@ -3162,7 +3163,7 @@ standard_name = conv_wet_deposition_smoke_dust long_name = convective wet removal of smoke and dust units = kg kg-1 - dimensions = (horizontal_loop_extent,number_of_chemical_species_vertically_mixed) + dimensions = (horizontal_dimension,number_of_chemical_species_vertically_mixed) type = real kind = kind_phys active = (do_smoke_coupling) @@ -3170,7 +3171,7 @@ standard_name = mp_wet_deposition_smoke_dust long_name = large scale wet deposition of smoke and dust units = kg kg-1 - dimensions = (horizontal_loop_extent,number_of_chemical_species_vertically_mixed) + dimensions = (horizontal_dimension,number_of_chemical_species_vertically_mixed) type = real kind = kind_phys active = (do_smoke_coupling) @@ -3178,7 +3179,7 @@ standard_name = dry_deposition_flux long_name = rrfs dry deposition flux units = ug m-2 - dimensions = (horizontal_loop_extent,number_of_chemical_species_deposited) + dimensions = (horizontal_dimension,number_of_chemical_species_deposited) type = real kind = kind_phys active = (do_smoke_coupling) @@ -3186,7 +3187,7 @@ standard_name = minimum_fire_plume_sigma_pressure_level long_name = minimum model level of fire plumerise units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (do_smoke_coupling) @@ -3194,7 +3195,7 @@ standard_name = maximum_fire_plume_sigma_pressure_level long_name = maximum model level of fire plumerise units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (do_smoke_coupling) @@ -3202,7 +3203,7 @@ standard_name = mean_wind_speed_in_boundary_layer long_name = average wind speed within the boundary layer units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (do_smoke_coupling) @@ -3210,7 +3211,7 @@ standard_name = atmosphere_boundary_layer_thickness_from_modified_parcel long_name = pbl height based on modified parcel method units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (do_smoke_coupling) @@ -3218,7 +3219,7 @@ standard_name = hourly_wildfire_potential long_name = rrfs hourly fire weather potential units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (do_smoke_coupling) @@ -3226,7 +3227,7 @@ standard_name = hourly_wildfire_potential_average long_name = rrfs hourly fire weather potential average units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (do_smoke_coupling) @@ -3234,7 +3235,7 @@ standard_name = surface_upward_sensible_heat_flux_for_chemistry_coupling long_name = instantaneous upward sensible heat flux for chemistry coupling units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_chemistry_coupling) @@ -3242,7 +3243,7 @@ standard_name = convective_cloud_condesate_after_rainout long_name = convective cloud condesate after rainout units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (control_for_deep_convection_scheme == identifier_for_grell_freitas_deep_convection .or. control_for_deep_convection_scheme == identifier_for_c3_deep_convection) @@ -3250,7 +3251,7 @@ standard_name = ice_flux_due_to_large_scale_precipitation long_name = instantaneous 3D flux of ice from nonconvective precipitation units = kg m-2 s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_chemistry_coupling) @@ -3258,7 +3259,7 @@ standard_name = liquid_flux_due_to_large_scale_precipitation long_name = instantaneous 3D flux of liquid water from nonconvective precipitation units = kg m-2 s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_chemistry_coupling) @@ -3266,7 +3267,7 @@ standard_name = updated_tendency_of_air_temperature_due_to_longwave_heating_on_physics_timestep long_name = total sky longwave heating rate on physics time step units = K s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_rrtmgp_radiation_scheme) @@ -3274,7 +3275,7 @@ standard_name = surface_skin_temperature_on_radiation_timestep long_name = surface skin temperature on radiation timestep units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_rrtmgp_radiation_scheme) @@ -3282,7 +3283,7 @@ standard_name = RRTMGP_jacobian_of_lw_flux_upward long_name = RRTMGP Jacobian upward longwave flux profile units = W m-2 K-1 - dimensions = (horizontal_loop_extent,vertical_interface_dimension) + dimensions = (horizontal_dimension,vertical_interface_dimension) type = real kind = kind_phys active = (flag_for_rrtmgp_radiation_scheme) @@ -3290,7 +3291,7 @@ standard_name = RRTMGP_lw_flux_profile_upward_allsky_on_radiation_timestep long_name = RRTMGP upward longwave all-sky flux profile units = W m-2 - dimensions = (horizontal_loop_extent,vertical_interface_dimension) + dimensions = (horizontal_dimension,vertical_interface_dimension) type = real kind = kind_phys active = (flag_for_rrtmgp_radiation_scheme) @@ -3298,7 +3299,7 @@ standard_name = RRTMGP_lw_flux_profile_downward_allsky_on_radiation_timestep long_name = RRTMGP downward longwave all-sky flux profile units = W m-2 - dimensions = (horizontal_loop_extent,vertical_interface_dimension) + dimensions = (horizontal_dimension,vertical_interface_dimension) type = real kind = kind_phys active = (flag_for_rrtmgp_radiation_scheme) @@ -3537,6 +3538,36 @@ units = count dimensions = () type = integer +[nchunks] + standard_name = ccpp_chunk_extent + long_name = number of chunks of array data used in run phase + units = count + dimensions = () + type = integer +[chunk_begin] + standard_name = horizontal_loop_begin_all_chunks + long_name = first index for horizontal loop extent in run phase + units = index + dimensions = (ccpp_chunk_extent) + type = integer +[chunk_begin(ccpp_chunk_number)] + standard_name = horizontal_loop_begin + long_name = first index for horizontal loop extent in run phase + units = index + dimensions = () + type = integer +[chunk_end] + standard_name = horizontal_loop_end_all_chunks + long_name = last index for horizontal loop extent in run phase + units = index + dimensions = (ccpp_chunk_extent) + type = integer +[chunk_end(ccpp_chunk_number)] + standard_name = horizontal_loop_end + long_name = last index for horizontal loop extent in run phase + units = index + dimensions = () + type = integer [tile_num] standard_name = index_of_cubed_sphere_tile long_name = tile number @@ -7534,77 +7565,77 @@ standard_name = cell_area long_name = area of the grid cell units = m2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [dx] standard_name = characteristic_grid_lengthscale long_name = relative dx for the grid cell units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [xlat] standard_name = latitude long_name = latitude units = radian - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [xlon] standard_name = longitude long_name = longitude units = radian - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [coslat] standard_name = cosine_of_latitude long_name = cosine of latitude units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [sinlat] standard_name = sine_of_latitude long_name = sine of latitude units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [xlat_d] standard_name = latitude_in_degree long_name = latitude in degree north units = degree_north - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [xlon_d] standard_name = longitude_in_degree long_name = longitude in degree east units = degree_east - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [jindx1_o3] standard_name = lower_latitude_index_of_ozone_forcing_for_interpolation long_name = interpolation low index for ozone units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer active = (index_of_ozone_mixing_ratio_in_tracer_concentration_array>0) [jindx2_o3] standard_name = upper_latitude_index_of_ozone_forcing_for_interpolation long_name = interpolation high index for ozone units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer active = (index_of_ozone_mixing_ratio_in_tracer_concentration_array>0) [ddy_o3] standard_name = latitude_interpolation_weight_for_ozone_forcing long_name = interpolation high index for ozone units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (index_of_ozone_mixing_ratio_in_tracer_concentration_array>0) @@ -7612,21 +7643,21 @@ standard_name = lower_latitude_index_of_stratospheric_water_vapor_forcing_for_interpolation long_name = interpolation low index for stratospheric water vapor units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer active = (flag_for_stratospheric_water_vapor_physics) [jindx2_h] standard_name = upper_latitude_index_of_stratospheric_water_vapor_forcing_for_interpolation long_name = interpolation high index for stratospheric water vapor units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer active = (flag_for_stratospheric_water_vapor_physics) [ddy_h] standard_name = latitude_interpolation_weight_for_stratospheric_water_vapor_forcing long_name = interpolation high index for stratospheric water vapor units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_stratospheric_water_vapor_physics) @@ -7634,21 +7665,21 @@ standard_name = lower_latitude_index_of_aerosol_forcing_for_interpolation long_name = interpolation low index for prescribed aerosols in the y direction units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer active = (flag_for_aerosol_input_MG_radiation) [jindx2_aer] standard_name = upper_latitude_index_of_aerosol_forcing_for_interpolation long_name = interpolation high index for prescribed aerosols in the y direction units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer active = (flag_for_aerosol_input_MG_radiation) [ddy_aer] standard_name = latitude_interpolation_weight_for_aerosol_forcing long_name = interpolation high index for prescribed aerosols in the y direction units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_aerosol_input_MG_radiation) @@ -7656,21 +7687,21 @@ standard_name = lower_longitude_index_of_aerosol_forcing_for_interpolation long_name = interpolation low index for prescribed aerosols in the x direction units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer active = (flag_for_aerosol_input_MG_radiation) [iindx2_aer] standard_name = upper_longitude_index_of_aerosol_forcing_for_interpolation long_name = interpolation high index for prescribed aerosols in the x direction units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer active = (flag_for_aerosol_input_MG_radiation) [ddx_aer] standard_name = longitude_interpolation_weight_for_aerosol_forcing long_name = interpolation high index for prescribed aerosols in the x direction units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_aerosol_input_MG_radiation) @@ -7678,21 +7709,21 @@ standard_name = lower_latitude_index_of_cloud_nuclei_forcing_for_interpolation long_name = interpolation low index for ice and cloud condensation nuclei in the y direction units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer active = (control_for_ice_cloud_condensation_nuclei_forcing==1) [jindx2_ci] standard_name = upper_latitude_index_of_cloud_nuclei_forcing_for_interpolation long_name = interpolation high index for ice and cloud condensation nuclei in the y direction units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer active = (control_for_ice_cloud_condensation_nuclei_forcing==1) [ddy_ci] standard_name = latitude_interpolation_weight_for_cloud_nuclei_forcing long_name = interpolation high index for ice and cloud condensation nuclei in the y direction units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_ice_cloud_condensation_nuclei_forcing==1) @@ -7700,21 +7731,21 @@ standard_name = lower_longitude_index_of_cloud_nuclei_forcing_for_interpolation long_name = interpolation low index for ice and cloud condensation nuclei in the x direction units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer active = (control_for_ice_cloud_condensation_nuclei_forcing==1) [iindx2_ci] standard_name = upper_longitude_index_of_cloud_nuclei_forcing_for_interpolation long_name = interpolation high index for ice and cloud condensation nuclei in the x direction units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer active = (control_for_ice_cloud_condensation_nuclei_forcing==1) [ddx_ci] standard_name = longitude_interpolation_weight_for_cloud_nuclei_forcing long_name = interpolation high index for ice and cloud condensation nuclei in the x direction units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_ice_cloud_condensation_nuclei_forcing==1) @@ -7722,21 +7753,21 @@ standard_name = lower_latitude_index_of_absolute_momentum_flux_due_to_nonorographic_gravity_wave_drag_for_interpolation long_name = index1 for weight1 for tau NGWs units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer active = (flag_for_ugwp_version_1) [jindx2_tau] standard_name = upper_latitude_index_of_absolute_momentum_flux_due_to_nonorographic_gravity_wave_drag_for_interpolation long_name = index2 for weight2 for tau NGWs units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer active = (flag_for_ugwp_version_1) [ddy_j1tau] standard_name = latitude_interpolation_weight_complement_for_absolute_momentum_flux_due_to_nonorographic_gravity_wave_drag long_name = interpolation weight1 for tau NGWs units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1) @@ -7744,7 +7775,7 @@ standard_name = latitude_interpolation_weight_for_absolute_momentum_flux_due_to_nonorographic_gravity_wave_drag long_name = interpolation weight2 for tau NGWs units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1) @@ -7762,56 +7793,56 @@ standard_name = random_number_seed_for_mcica_shortwave long_name = random seeds for sub-column cloud generators sw units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer active = (flag_for_lw_clouds_sub_grid_approximation == 2 .or. flag_for_sw_clouds_grid_approximation == 2) [icsdlw] standard_name = random_number_seed_for_mcica_longwave long_name = random seeds for sub-column cloud generators lw units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer active = (flag_for_lw_clouds_sub_grid_approximation == 2 .or. flag_for_sw_clouds_grid_approximation == 2) [rseeds] standard_name = random_number_seeds_from_host long_name = random number seeds from host units = none - dimensions = (horizontal_loop_extent, number_of_host_provided_random_number_streams) + dimensions = (horizontal_dimension, number_of_host_provided_random_number_streams) type = integer active = ((flag_for_lw_clouds_sub_grid_approximation == 2 .or. flag_for_sw_clouds_grid_approximation == 2) .and. do_host_provided_random_seeds) [tau_amf] standard_name = absolute_momentum_flux_due_to_nonorographic_gravity_wave_drag long_name = ngw_absolute_momentum_flux units = mixed - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [ozpl] standard_name = ozone_forcing long_name = ozone forcing data units = mixed - dimensions = (horizontal_loop_extent,vertical_dimension_of_ozone_forcing_data,number_of_coefficients_in_ozone_data) + dimensions = (horizontal_dimension,vertical_dimension_of_ozone_forcing_data,number_of_coefficients_in_ozone_data) type = real kind = kind_phys [h2opl] standard_name = stratospheric_water_vapor_forcing long_name = water forcing data units = mixed - dimensions = (horizontal_loop_extent,vertical_dimension_of_h2o_forcing_data,number_of_coefficients_in_h2o_forcing_data) + dimensions = (horizontal_dimension,vertical_dimension_of_h2o_forcing_data,number_of_coefficients_in_h2o_forcing_data) type = real kind = kind_phys [hpbl] standard_name = atmosphere_boundary_layer_thickness long_name = pbl height units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [ud_mf] standard_name = instantaneous_atmosphere_updraft_convective_mass_flux long_name = (updraft mass flux) * delt units = kg m-2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = ( control_for_deep_convection_scheme .ge. 0 .or. control_for_shallow_convection_scheme .ge. 0 ) @@ -7819,28 +7850,28 @@ standard_name = ice_nucleation_number_from_climatology long_name = ice nucleation number in MG MP units = kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [ccn_nm] standard_name = tendency_of_activated_cloud_condensation_nuclei_from_climatology long_name = tendency of ccn activated number units = kg-1 s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [aer_nm] standard_name = mass_mixing_ratio_of_aerosol_from_gocart_or_merra2 long_name = mass mixing ratio of aerosol from gocart or merra2 units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension,number_of_aerosol_tracers_MG) + dimensions = (horizontal_dimension,vertical_layer_dimension,number_of_aerosol_tracers_MG) type = real kind = kind_phys [aod_gf] standard_name = aerosol_optical_depth_for_grell_freitas_deep_convection long_name = aerosol optical depth used in Grell-Freitas Convective Parameterization units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_deep_convection_scheme == identifier_for_grell_freitas_deep_convection .or. control_for_deep_convection_scheme == identifier_for_c3_deep_convection) @@ -7848,47 +7879,47 @@ standard_name = map_of_block_column_number_to_global_i_index long_name = map of local index ix to global index i for this block units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer [jmap] standard_name = map_of_block_column_number_to_global_j_index long_name = map of local index ix to global index j for this block units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer [rann] standard_name = random_number long_name = random number array (0-1) units = none - dimensions = (horizontal_loop_extent,number_of_random_numbers) + dimensions = (horizontal_dimension,number_of_random_numbers) type = real kind = kind_phys [acv] standard_name = cumulative_lwe_thickness_of_convective_precipitation_amount_between_sw_radiation_calls long_name = accumulated convective rainfall amount for cnvc90 only units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [acvb] standard_name = cumulative_min_vertical_index_at_cloud_base_between_sw_radiation_calls long_name = smallest cloud base vertical index encountered thus far units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [acvt] standard_name = cumulative_max_vertical_index_at_cloud_base_between_sw_radiation_calls long_name = largest cloud top vertical index encountered thus far units = index - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [dtdtnp] standard_name = tendency_of_air_temperature_to_withold_from_sppt long_name = temp. change from physics that should not be perturbed by sppt units = K s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_stochastic_physics_perturbations .or. flag_for_global_cellular_automata) @@ -7896,7 +7927,7 @@ standard_name = tendency_of_lwe_thickness_of_rain_amount_on_dynamics_timestep_for_coupling long_name = change in rain_cpl (coupling_type) units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_chemistry_coupling .or. flag_for_land_coupling) @@ -7904,7 +7935,7 @@ standard_name = tendency_of_lwe_thickness_of_snowfall_amount_on_dynamics_timestep_for_coupling long_name = change in show_cpl (coupling_type) units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_surface_flux_coupling .or. flag_for_chemistry_coupling .or. flag_for_land_coupling) @@ -7912,7 +7943,7 @@ standard_name = atmosphere_updraft_convective_mass_flux_at_cloud_base_by_cloud_type long_name = cloud base mass flux for CS convection units = kg m-2 s-1 - dimensions = (horizontal_loop_extent,number_of_cloud_types_CS) + dimensions = (horizontal_dimension,number_of_cloud_types_CS) type = real kind = kind_phys active = (number_of_cloud_types_CS > 0 .and. flag_for_Chikira_Sugiyama_deep_convection) @@ -7920,7 +7951,7 @@ standard_name = surface_air_pressure_two_timesteps_back long_name = surface air pressure two timesteps back units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (index_of_surface_air_pressure_two_timesteps_back_in_xyz_dimensioned_tracer_array > 0) @@ -7928,7 +7959,7 @@ standard_name = surface_air_pressure_on_previous_timestep long_name = surface air pressure at previous timestep units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (index_of_surface_air_pressure_on_previous_timestep_in_xyz_dimensioned_restart_array > 0) @@ -7936,7 +7967,7 @@ standard_name = enhancement_to_wind_speed_at_surface_adjacent_layer_due_to_convection long_name = surface wind enhancement due to convection units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (index_of_enhancement_to_wind_speed_at_surface_adjacent_layer_due_to_convection_in_xy_dimensioned_restart_array > 0) @@ -7944,7 +7975,7 @@ standard_name = air_temperature_two_timesteps_back long_name = air temperature two timesteps back units = K - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_air_temperature_two_timesteps_back_in_xyz_dimensioned_restart_array > 0) @@ -7952,7 +7983,7 @@ standard_name = specific_humidity_two_timesteps_back long_name = water vapor specific humidity two timesteps back units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_specific_humidity_two_timesteps_back_in_xyz_dimensioned_restart_array > 0) @@ -7960,7 +7991,7 @@ standard_name = air_temperature_on_previous_timestep_in_xyz_dimensioned_restart_array long_name = air temperature at previous timestep units = K - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_air_temperature_on_previous_timestep_in_xyz_dimensioned_restart_array > 0) @@ -7968,7 +7999,7 @@ standard_name = specific_humidity_on_previous_timestep_in_xyz_dimensioned_restart_array long_name = water vapor specific humidity at previous timestep units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_specific_humidity_on_previous_timestep_in_xyz_dimensioned_restart_array > 0) @@ -7976,7 +8007,7 @@ standard_name = convective_cloud_condensate_mixing_ratio long_name = convective cloud water mixing ratio in the phy_f3d array units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_convective_cloud_condensate_mixing_ratio_in_xyz_dimensioned_restart_array > 0) @@ -7984,7 +8015,7 @@ standard_name = convective_cloud_area_fraction long_name = convective cloud cover in the phy_f3d array units = frac - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_convective_cloud_area_fraction_in_xyz_dimensioned_restart_array > 0) @@ -7992,7 +8023,7 @@ standard_name = upward_virtual_potential_temperature_flux long_name = upward kinematic buoyancy flux from the SHOC scheme units = K m s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_upward_virtual_potential_temperature_flux_in_xyz_dimensioned_restart_array > 0) @@ -8000,7 +8031,7 @@ standard_name = atmosphere_heat_diffusivity_from_shoc long_name = diffusivity for heat from the SHOC scheme units = m2 s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_atmosphere_heat_diffusivity_in_xyz_dimensioned_restart_array > 0) @@ -8008,7 +8039,7 @@ standard_name = subgrid_scale_cloud_fraction_from_shoc long_name = subgrid-scale cloud fraction from the SHOC scheme units = frac - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_subgrid_cloud_area_fracation_in_atmosphere_layer_in_xyz_dimensioned_restart_array > 0) @@ -8016,7 +8047,7 @@ standard_name = cloud_fraction_for_MG long_name = cloud fraction used by Morrison-Gettelman MP units = frac - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_cloud_area_fraction_in_atmosphere_layer_in_xyz_dimensioned_restart_array > 0) @@ -8024,7 +8055,7 @@ standard_name = effective_radius_of_stratiform_cloud_liquid_water_particle long_name = eff. radius of cloud liquid water particle in micrometer units = um - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_cloud_liquid_water_effective_radius_in_xyz_dimensioned_restart_array > 0) @@ -8032,7 +8063,7 @@ standard_name = effective_radius_of_stratiform_cloud_ice_particle long_name = eff. radius of cloud ice water particle in micrometer units = um - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_cloud_ice_effective_radius_in_xyz_dimensioned_restart_array > 0) @@ -8040,7 +8071,7 @@ standard_name = effective_radius_of_stratiform_cloud_rain_particle long_name = effective radius of cloud rain particle in micrometers units = um - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_rain_effective_radius_in_xyz_dimensioned_restart_array > 0) @@ -8048,7 +8079,7 @@ standard_name = effective_radius_of_stratiform_cloud_snow_particle long_name = effective radius of cloud snow particle in micrometers units = um - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_snow_effective_radius_in_xyz_dimensioned_restart_array > 0) @@ -8056,7 +8087,7 @@ standard_name = effective_radius_of_stratiform_cloud_graupel_particle long_name = eff. radius of cloud graupel particle in micrometer units = um - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (index_of_graupel_effective_radius_in_xyz_dimensioned_restart_array > 0) @@ -8064,7 +8095,7 @@ standard_name = tendency_of_air_temperature_due_to_nonphysics long_name = temperature tendency due to dynamics only units = K s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (control_for_deep_convection_scheme == identifier_for_grell_freitas_deep_convection .or. control_for_deep_convection_scheme == identifier_for_c3_deep_convection .or. control_for_deep_convection_scheme == identifier_for_new_tiedtke_deep_convection) @@ -8072,7 +8103,7 @@ standard_name = tendendy_of_specific_humidity_due_to_nonphysics long_name = moisture tendency due to dynamics only units = kg kg-1 s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (control_for_deep_convection_scheme == identifier_for_grell_freitas_deep_convection .or. control_for_deep_convection_scheme == identifier_for_c3_deep_convection .or. control_for_deep_convection_scheme == identifier_for_new_tiedtke_deep_convection) @@ -8080,7 +8111,7 @@ standard_name = air_temperature_on_previous_timestep long_name = temperature from previous time step units = K - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (control_for_deep_convection_scheme == identifier_for_grell_freitas_deep_convection .or. control_for_deep_convection_scheme == identifier_for_c3_deep_convection .or. control_for_deep_convection_scheme == identifier_for_new_tiedtke_deep_convection) @@ -8088,7 +8119,7 @@ standard_name = specific_humidity_on_previous_timestep long_name = moisture from previous time step units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (control_for_deep_convection_scheme == identifier_for_grell_freitas_deep_convection .or. control_for_deep_convection_scheme == identifier_for_c3_deep_convection .or. control_for_deep_convection_scheme == identifier_for_new_tiedtke_deep_convection .or. control_for_deep_convection_scheme == identifer_for_scale_aware_mass_flux_deep_convection .or. control_for_shallow_convection_scheme == identifier_for_scale_aware_mass_flux_shallow_convection) @@ -8096,21 +8127,21 @@ standard_name = counter_for_grell_freitas_convection long_name = convective activity memory units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer active = (control_for_deep_convection_scheme == identifier_for_grell_freitas_deep_convection .or. control_for_deep_convection_scheme == identifier_for_c3_deep_convection) [cactiv_m] standard_name = counter_for_grell_freitas_mid_level_convection long_name = mid-level convective activity memory units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer active = (control_for_deep_convection_scheme == identifier_for_grell_freitas_deep_convection .or. control_for_deep_convection_scheme == identifier_for_c3_deep_convection) [CLDFRA_BL] standard_name = subgrid_scale_cloud_area_fraction_in_atmosphere_layer long_name = subgrid cloud fraction from PBL scheme units = frac - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme) @@ -8118,7 +8149,7 @@ standard_name = subgrid_scale_cloud_liquid_water_mixing_ratio long_name = subgrid cloud water mixing ratio from PBL scheme units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme) @@ -8126,7 +8157,7 @@ standard_name = subgrid_scale_cloud_ice_mixing_ratio long_name = subgrid cloud ice mixing ratio from PBL scheme units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme) @@ -8134,7 +8165,7 @@ standard_name = turbulent_mixing_length long_name = mixing length in meters units = m - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme) @@ -8142,7 +8173,7 @@ standard_name = stability_function_for_heat long_name = stability function for heat units = none - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme) @@ -8150,7 +8181,7 @@ standard_name = stability_function_for_momentum long_name = stability function for momentum units = none - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme) @@ -8158,7 +8189,7 @@ standard_name = nonadvected_turbulent_kinetic_energy_multiplied_by_2 long_name = 2 x tke at mass points units = m2 s-2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme) @@ -8166,7 +8197,7 @@ standard_name = variance_of_air_temperature long_name = temperature fluctuation squared units = K2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme) @@ -8174,7 +8205,7 @@ standard_name = variance_of_specific_humidity long_name = water vapor fluctuation squared units = kg2 kg-2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme) @@ -8182,7 +8213,7 @@ standard_name = covariance_of_air_temperature_and_specific_humidity long_name = covariance of temperature and moisture units = K kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme) @@ -8190,7 +8221,7 @@ standard_name = surface_specific_humidity_for_MYJ_schemes long_name = surface air saturation specific humidity for MYJ schemes units = kg kg-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_janjic_surface_layer_scheme .or. flag_for_mellor_yamada_janjic_pbl_scheme) @@ -8198,7 +8229,7 @@ standard_name = air_potential_temperature_at_top_of_viscous_sublayer long_name = potential temperature at viscous sublayer top over water units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_janjic_surface_layer_scheme .or. flag_for_mellor_yamada_janjic_pbl_scheme) @@ -8206,7 +8237,7 @@ standard_name = specific_humidity_at_top_of_viscous_sublayer long_name = specific humidity at_viscous sublayer top over water units = kg kg-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_janjic_surface_layer_scheme .or. flag_for_mellor_yamada_janjic_pbl_scheme) @@ -8214,7 +8245,7 @@ standard_name = x_wind_at_top_of_viscous_sublayer long_name = u wind component at viscous sublayer top over water units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_janjic_surface_layer_scheme .or. flag_for_mellor_yamada_janjic_pbl_scheme) @@ -8222,7 +8253,7 @@ standard_name = y_wind_at_top_of_viscous_sublayer long_name = v wind component at viscous sublayer top over water units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_janjic_surface_layer_scheme .or. flag_for_mellor_yamada_janjic_pbl_scheme) @@ -8230,7 +8261,7 @@ standard_name = heat_exchange_coefficient_for_MYJ_schemes long_name = surface heat exchange_coefficient for MYJ schemes units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_janjic_surface_layer_scheme .or. flag_for_mellor_yamada_janjic_pbl_scheme) @@ -8238,7 +8269,7 @@ standard_name = momentum_exchange_coefficient_for_MYJ_schemes long_name = surface momentum exchange_coefficient for MYJ schemes units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_janjic_surface_layer_scheme .or. flag_for_mellor_yamada_janjic_pbl_scheme) @@ -8246,7 +8277,7 @@ standard_name = control_for_surface_layer_evaporation long_name = surface layer evaporation switch units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_janjic_surface_layer_scheme .or. flag_for_mellor_yamada_janjic_pbl_scheme) @@ -8254,7 +8285,7 @@ standard_name = surface_upward_specific_humidity_flux_for_mellor_yamada_janjic_surface_layer_scheme long_name = kinematic surface latent heat flux units = m s-1 kg kg-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_janjic_surface_layer_scheme .or. flag_for_mellor_yamada_janjic_pbl_scheme) @@ -8262,7 +8293,7 @@ standard_name = weight_for_momentum_at_top_of_viscous_sublayer long_name = weight for momentum at viscous layer top units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_janjic_surface_layer_scheme .or. flag_for_mellor_yamada_janjic_pbl_scheme) @@ -8270,7 +8301,7 @@ standard_name = weight_for_potental_temperature_at_top_of_viscous_sublayer long_name = weight for potental temperature at viscous layer top units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_janjic_surface_layer_scheme .or. flag_for_mellor_yamada_janjic_pbl_scheme) @@ -8278,7 +8309,7 @@ standard_name = weight_for_specific_humidity_at_top_of_viscous_sublayer long_name = weight for Specfic Humidity at viscous layer top units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_janjic_surface_layer_scheme .or. flag_for_mellor_yamada_janjic_pbl_scheme) @@ -8286,7 +8317,7 @@ standard_name = radar_derived_microphysics_temperature_tendency long_name = radar-derived microphysics temperature tendency units = K s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension,number_of_radar_derived_temperature_or_convection_suppression_intervals) + dimensions = (horizontal_dimension,vertical_layer_dimension,number_of_radar_derived_temperature_or_convection_suppression_intervals) type = real kind = kind_phys active = (number_of_radar_derived_temperature_or_convection_suppression_intervals>0) @@ -8294,7 +8325,7 @@ standard_name = radar_derived_convection_suppression long_name = radar-derived convection suppression units = unitless - dimensions = (horizontal_loop_extent,number_of_radar_derived_temperature_or_convection_suppression_intervals) + dimensions = (horizontal_dimension,number_of_radar_derived_temperature_or_convection_suppression_intervals) type = real kind = kind_phys active = (number_of_radar_derived_temperature_or_convection_suppression_intervals>0 .and. flag_for_radar_derived_convection_suppression) @@ -8312,21 +8343,21 @@ standard_name = convective_cloud_area_fraction_between_sw_radiation_calls_from_cnvc90 long_name = fraction of convective cloud units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [cvt] standard_name = pressure_at_convective_cloud_top_between_sw_radiation_calls_from_cnvc90 long_name = convective cloud top pressure units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [cvb] standard_name = pressure_at_convective_cloud_base_between_sw_radiation_calls_from_cnvc90 long_name = convective cloud bottom pressure units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys @@ -8343,89 +8374,89 @@ standard_name = surface_sw_fluxes_assuming_total_and_clear_sky_on_radiation_timestep long_name = sw radiation fluxes at sfc units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = sfcfsw_type [sfcflw] standard_name = surface_lw_fluxes_assuming_total_and_clear_sky_on_radiation_timestep long_name = lw radiation fluxes at sfc units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = sfcflw_type [htrsw] standard_name = tendency_of_air_temperature_due_to_shortwave_heating_on_radiation_timestep long_name = total sky sw heating rate units = K s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [htrlw] standard_name = tendency_of_air_temperature_due_to_longwave_heating_on_radiation_timestep long_name = total sky lw heating rate units = K s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [sfalb] standard_name = surface_albedo_for_diffused_shortwave_on_radiation_timestep long_name = mean surface diffused sw albedo units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [coszen] standard_name = cosine_of_solar_zenith_angle_for_daytime_points_on_radiation_timestep long_name = mean cos of zenith angle over rad call period units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [coszdg] standard_name = cosine_of_solar_zenith_angle_on_radiation_timestep long_name = daytime mean cosz over rad call period units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [tsflw] standard_name = air_temperature_at_surface_adjacent_layer_on_radiation_timestep long_name = surface air temp during lw calculation units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [semis] standard_name = surface_longwave_emissivity long_name = surface lw emissivity in fraction units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [ext550] standard_name = aerosol_optical_depth_at_550nm long_name = 3d optical extinction for total aerosol species units = none - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [swhc] standard_name = tendency_of_air_temperature_due_to_shortwave_heating_assuming_clear_sky_on_radiation_timestep long_name = clear sky sw heating rates units = K s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [lwhc] standard_name = tendency_of_air_temperature_due_to_longwave_heating_assuming_clear_sky_on_radiation_timestep long_name = clear sky lw heating rates units = K s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [lwhd] standard_name = tendency_of_air_temperature_due_to_integrated_dynamics_through_earths_atmosphere long_name = idea sky lw heating rates units = K s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension,6) + dimensions = (horizontal_dimension,vertical_layer_dimension,6) type = real kind = kind_phys @@ -8442,54 +8473,54 @@ standard_name = cumulative_radiation_diagnostic long_name = time-accumulated 2D radiation-related diagnostic fields units = mixed - dimensions = (horizontal_loop_extent,number_of_diagnostics_variables_for_radiation) + dimensions = (horizontal_dimension,number_of_diagnostics_variables_for_radiation) type = real kind = kind_phys [topfsw] standard_name = sw_fluxes_top_atmosphere long_name = sw radiation fluxes at toa units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = topfsw_type [topflw] standard_name = lw_fluxes_top_atmosphere long_name = lw radiation fluxes at top units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = topflw_type [srunoff] standard_name = surface_runoff long_name = surface water runoff (from lsm) units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [evbsa] standard_name = cumulative_soil_upward_latent_heat_flux_multiplied_by_timestep long_name = cumulative soil upward latent heat flux multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [evcwa] standard_name = cumulative_canopy_upward_latent_heat_flu_multiplied_by_timestep long_name = cumulative canopy upward latent heat flux multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [snohfa] standard_name = cumulative_snow_freezing_rain_upward_latent_heat_flux_multiplied_by_timestep long_name = cumulative latent heat flux due to snow and frz rain multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [paha] standard_name = cumulative_precipitation_advected_heat_flux_multiplied_by_timestep long_name = cumulative precipitation advected heat flux multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -8497,224 +8528,224 @@ standard_name = cumulative_transpiration_flux_multiplied_by_timestep long_name = cumulative total plant transpiration rate multiplied by timestep units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [sbsnoa] standard_name = cumulative_snow_deposition_sublimation_upward_latent_heat_flux_multiplied_by_timestep long_name = cumulative latent heat flux from snow depo/subl multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [snowca] standard_name = cumulative_surface_snow_area_fraction_multiplied_by_timestep long_name = cumulative surface snow area fraction multiplied by timestep units = s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [sbsno] standard_name = snow_deposition_sublimation_upward_latent_heat_flux long_name = latent heat flux from snow depo/subl units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [evbs] standard_name = soil_upward_latent_heat_flux long_name = soil upward latent heat flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [evcw] standard_name = canopy_upward_latent_heat_flux long_name = canopy upward latent heat flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [trans] standard_name = transpiration_flux long_name = total plant transpiration rate units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [soilm] standard_name = soil_moisture_content long_name = soil moisture units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [snowmt_land] standard_name = surface_snow_melt_over_land long_name = snow melt during timestep over land units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [snowmt_ice] standard_name = surface_snow_melt_over_ice long_name = snow melt during timestep over ice units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [tmpmin] standard_name = minimum_temperature_at_2m long_name = min temperature at 2m height units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [tmpmax] standard_name = maximum_temperature_at_2m long_name = max temperature at 2m height units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [dusfc] standard_name = cumulative_surface_x_momentum_flux_for_diag_multiplied_by_timestep long_name = cumulative sfc x momentum flux multiplied by timestep units = Pa s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [dvsfc] standard_name = cumulative_surface_y_momentum_flux_for_diag_multiplied_by_timestep long_name = cumulative sfc y momentum flux multiplied by timestep units = Pa s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [dtsfc] standard_name = cumulative_surface_upward_sensible_heat_flux_for_diag_multiplied_by_timestep long_name = cumulative sfc sensible heat flux multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [dqsfc] standard_name = cumulative_surface_upward_latent_heat_flux_for_diag_multiplied_by_timestep long_name = cumulative sfc latent heat flux multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [totprcp] standard_name = accumulated_lwe_thickness_of_precipitation_amount long_name = accumulated total precipitation units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [totice] standard_name = accumulated_lwe_thickness_of_ice_amount long_name = accumulated ice precipitation units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [totsnw] standard_name = accumulated_lwe_thickness_of_snow_amount long_name = accumulated snow precipitation units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [totgrp] standard_name = accumulated_lwe_thickness_of_graupel_amount long_name = accumulated graupel precipitation units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [totprcpb] standard_name = accumulated_lwe_thickness_of_precipitation_amount_in_bucket long_name = accumulated total precipitation in bucket units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [toticeb] standard_name = accumulated_lwe_thickness_of_ice_amount_in_bucket long_name = accumulated ice precipitation in bucket units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [totsnwb] standard_name = accumulated_lwe_thickness_of_snow_amount_in_bucket long_name = accumulated snow precipitation in bucket units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [totgrpb] standard_name = accumulated_lwe_thickness_of_graupel_amount_in_bucket long_name = accumulated graupel precipitation in bucket units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [frzr] standard_name = cumulative_lwe_thickness_of_surface_freezing_rain_amount long_name = accumulated surface freezing rain units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [frzrb] standard_name = cumulative_lwe_thickness_of_surface_freezing_rain_amount_in_bucket long_name = accumulated surface freezing rain in bucket units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [frozr] standard_name = cumulative_lwe_thickness_of_surface_graupel_amount long_name = accumulated surface graupel units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [frozrb] standard_name = cumulative_lwe_thickness_of_surface_graupel_amount_in_bucket long_name = accumulated surface graupel in bucket units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [tsnowp] standard_name = cumulative_lwe_thickness_of_surface_snow_amount long_name = accumulated surface snow units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [tsnowpb] standard_name = cumulative_lwe_thickness_of_surface_snow_amount_in_bucket long_name = accumulated surface snow in bucket units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [rhonewsn1] standard_name = surface_frozen_precipitation_density long_name = density of precipitation ice units = kg m-3 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [train] standard_name = accumulated_change_of_air_temperature_due_to_FA_scheme long_name = accumulated change of air temperature due to FA MP scheme units = K - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (control_for_microphysics_scheme == identifier_for_fer_hires_microphysics_scheme) @@ -8722,70 +8753,70 @@ standard_name = cumulative_surface_ground_heat_flux_multiplied_by_timestep long_name = cumulative groud conductive heat flux multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [dlwsfc] standard_name = cumulative_surface_downwelling_longwave_flux_multiplied_by_timestep long_name = cumulative surface downwelling LW flux multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [ulwsfc] standard_name = cumulative_surface_upwelling_longwave_flux_multiplied_by_timestep long_name = cumulative surface upwelling LW flux multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [suntim] standard_name = duration_of_sunshine long_name = sunshine duration time units = s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [runoff] standard_name = total_runoff long_name = total water runoff units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [ep] standard_name = cumulative_surface_upward_potential_latent_heat_flux_multiplied_by_timestep long_name = cumulative surface upward potential latent heat flux multiplied by timestep units = W m-2 s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [tecan] standard_name = total_evaporation_of_intercepted_water long_name = total evaporation of intercepted water units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [tetran] standard_name = total_transpiration_rate long_name = total transpiration rate units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [tedir] standard_name = total_soil_surface_evaporation_rate long_name = total soil surface evaporation rate units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [twa] standard_name = total_water_storage_in_aquifer long_name = total water storage in aquifer units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -8793,294 +8824,294 @@ standard_name = cumulative_cloud_work_function long_name = cumulative cloud work function (valid only with sas) units = m2 s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [dugwd] standard_name = time_integral_of_x_stress_due_to_gravity_wave_drag long_name = vertically integrated u change by OGWD units = Pa s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [dvgwd] standard_name = time_integral_of_y_stress_due_to_gravity_wave_drag long_name = vertically integrated v change by OGWD units = Pa s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [psmean] standard_name = cumulative_surface_pressure_multiplied_by_timestep long_name = cumulative surface pressure multiplied by timestep units = Pa s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [cnvprcp] standard_name = cumulative_lwe_thickness_of_convective_precipitation_amount long_name = cumulative convective precipitation units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [cnvprcpb] standard_name = cumulative_lwe_thickness_of_convective_precipitation_amount_in_bucket long_name = cumulative convective precipitation in bucket units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [spfhmin] standard_name = minimum_specific_humidity_at_2m long_name = minimum specific humidity at 2m height units = kg kg-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [spfhmax] standard_name = maximum_specific_humidity_at_2m long_name = maximum specific humidity at 2m height units = kg kg-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [u10mmax] standard_name = maximum_x_wind_at_10m long_name = maximum x wind at 10 m units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [v10mmax] standard_name = maximum_y_wind_at_10m long_name = maximum y wind at 10 m units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [wind10mmax] standard_name = maximum_wind_at_10m long_name = maximum wind speed at 10 m units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [u10max] standard_name = maximum_u_wind_at_10m_over_maximum_hourly_time_interval long_name = maximum u wind at 10m over maximum hourly time interval units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [v10max] standard_name = maximum_v_wind_at_10m_over_maximum_hourly_time_interval long_name = maximum v wind at 10m over maximum hourly time interval units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [spd10max] standard_name = maximum_wind_at_10m_over_maximum_hourly_time_interval long_name = maximum wind at 10m over maximum hourly time interval units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [rain] standard_name = lwe_thickness_of_precipitation_amount_on_dynamics_timestep long_name = total rain at this time step units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [rainc] standard_name = lwe_thickness_of_convective_precipitation_amount_on_dynamics_timestep long_name = convective rain at this time step units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [ice] standard_name = lwe_thickness_of_ice_amount_on_dynamics_timestep long_name = ice fall at this time step units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [snow] standard_name = lwe_thickness_of_snow_amount_on_dynamics_timestep long_name = snow fall at this time step units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [graupel] standard_name = lwe_thickness_of_graupel_amount_on_dynamics_timestep long_name = graupel fall at this time step units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [u10m] standard_name = x_wind_at_10m long_name = 10 meter u wind speed units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [v10m] standard_name = y_wind_at_10m long_name = 10 meter v wind speed units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [dpt2m] standard_name = dewpoint_temperature_at_2m long_name = 2 meter dewpoint temperature units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [zlvl] standard_name = height_above_ground_at_lowest_model_layer long_name = layer 1 height above ground (not MSL) units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [psurf] standard_name = surface_air_pressure_diag long_name = surface air pressure diagnostic units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [pwat] standard_name = column_precipitable_water long_name = precipitable water units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [t1] standard_name = air_temperature_at_lowest_model_layer_for_diag long_name = layer 1 temperature for diag units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [q1] standard_name = water_vapor_specific_humidity_at_lowest_model_layer_for_diag long_name = layer 1 specific humidity for diag units = kg kg-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [u1] standard_name = x_wind_at_lowest_model_layer_for_diag long_name = layer 1 x wind for diag units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [v1] standard_name = y_wind_at_lowest_model_layer_for_diag long_name = layer 1 y wind for diag units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [chh] standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air long_name = thermal exchange coefficient units = kg m-2 s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [cmm] standard_name = surface_drag_wind_speed_for_momentum_in_air long_name = momentum exchange coefficient units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [dlwsfci] standard_name = surface_downwelling_longwave_flux long_name = surface downwelling longwave flux at current time units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [ulwsfci] standard_name = surface_upwelling_longwave_flux long_name = surface upwelling longwave flux at current time units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [dswsfci] standard_name = surface_downwelling_shortwave_flux long_name = surface downwelling shortwave flux at current time units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [nswsfci] standard_name = surface_net_downwelling_shortwave_flux long_name = surface net downwelling shortwave flux at current time units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [uswsfci] standard_name = surface_upwelling_shortwave_flux long_name = surface upwelling shortwave flux at current time units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [dusfci] standard_name = instantaneous_surface_x_momentum_flux_for_diag long_name = instantaneous sfc x momentum flux multiplied by timestep units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [dvsfci] standard_name = instantaneous_surface_y_momentum_flux_for_diag long_name = instantaneous sfc y momentum flux multiplied by timestep units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [dtsfci] standard_name = instantaneous_surface_upward_sensible_heat_flux_for_diag long_name = instantaneous sfc sensible heat flux multiplied by timestep units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [dqsfci] standard_name = instantaneous_surface_upward_latent_heat_flux_for_diag long_name = instantaneous sfc latent heat flux multiplied by timestep units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [gfluxi] standard_name = instantaneous_surface_ground_heat_flux long_name = instantaneous sfc ground heat flux units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [pahi] standard_name = instantaneous_total_precipitation_advected_heat long_name = instantaneous precipitation advected heat - total units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme) @@ -9088,35 +9119,35 @@ standard_name = instantaneous_surface_potential_evaporation long_name = instantaneous sfc potential evaporation units = W m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [smcwlt2] standard_name = volume_fraction_of_condensed_water_in_soil_at_wilting_point long_name = wilting point (volumetric) units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [smcref2] standard_name = threshold_volume_fraction_of_condensed_water_in_soil long_name = soil moisture threshold (volumetric) units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [sr] standard_name = ratio_of_snowfall_to_rainfall long_name = snow ratio: ratio of snow to total precipitation (explicit only) units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [wet1] standard_name = normalized_soil_wetness long_name = normalized soil wetness units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (.not. control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) @@ -9124,42 +9155,42 @@ standard_name = dominant_rain_type long_name = dominant rain type units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [tdomzr] standard_name = dominant_freezing_rain_type long_name = dominant freezing rain type units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [tdomip] standard_name = dominant_sleet_type long_name = dominant sleet type units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [tdoms] standard_name = dominant_snow_type long_name = dominant snow type units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [zmtnblck] standard_name = level_of_dividing_streamline long_name = level of the dividing streamline units = none - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables units = mixed - dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) + dimensions = (horizontal_dimension,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys active = (flag_for_diagnostics_3D) @@ -9167,56 +9198,56 @@ standard_name = maximum_reflectivity_at_1km_agl_over_maximum_hourly_time_interval long_name = maximum reflectivity at 1km agl over maximum hourly time interval units = dBZ - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [refdmax263k] standard_name = maximum_reflectivity_at_minus10c_over_maximum_hourly_time_interval long_name = maximum reflectivity at minus10c over maximum hourly time interval units = dBZ - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [t02max] standard_name = maximum_temperature_at_2m_over_maximum_hourly_time_interval long_name = maximum temperature at 2m over maximum hourly time interval units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [t02min] standard_name = minimum_temperature_at_2m_over_maximum_hourly_time_interval long_name = minumum temperature at 2m over maximum hourly time interval units = K - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [rh02max] standard_name = maximum_relative_humidity_at_2m_over_maximum_hourly_time_interval long_name = maximum relative humidity at 2m over maximum hourly time interval units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [rh02min] standard_name = minimum_relative_humidity_at_2m_over_maximum_hourly_time_interval long_name = minumum relative humidity at 2m over maximum hourly time interval units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [pratemax] standard_name = maximum_precipitation_rate_over_maximum_hourly_time_interval long_name = maximum precipitation rate over maximum hourly time interval units = mm h-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [upd_mf] standard_name = cumulative_atmosphere_updraft_convective_mass_flux long_name = cumulative updraft mass flux units = kg m-1 s-2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_tracer_diagnostics_3D) @@ -9224,7 +9255,7 @@ standard_name = cumulative_atmosphere_downdraft_convective_mass_flux long_name = cumulative downdraft mass flux units = kg m-1 s-2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_tracer_diagnostics_3D) @@ -9232,7 +9263,7 @@ standard_name = cumulative_atmosphere_detrainment_convective_mass_flux long_name = cumulative detrainment mass flux units = kg m-1 s-2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_tracer_diagnostics_3D) @@ -9240,7 +9271,7 @@ standard_name = ozone_tendency_due_to_production_and_loss_rate long_name = ozone tendency due to production and loss rate units = kg kg-1 s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_tracer_diagnostics_3D .and. flag_for_nrl_2015_ozone_scheme) @@ -9248,7 +9279,7 @@ standard_name = ozone_tendency_due_to_ozone_mixing_ratio long_name = ozone tendency due to ozone mixing ratio units = kg kg-1 s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_tracer_diagnostics_3D .and. flag_for_nrl_2015_ozone_scheme) @@ -9256,7 +9287,7 @@ standard_name = ozone_tendency_due_to_temperature long_name = ozone tendency due to temperature units = kg kg-1 s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_tracer_diagnostics_3D .and. flag_for_nrl_2015_ozone_scheme) @@ -9264,7 +9295,7 @@ standard_name = ozone_tendency_due_to_overhead_ozone_column long_name = ozone tendency due to overhead ozone column units = kg kg-1 s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_tracer_diagnostics_3D .and. flag_for_nrl_2015_ozone_scheme) @@ -9272,84 +9303,84 @@ standard_name = radar_reflectivity_10cm long_name = instantaneous refl_10cm units = dBZ - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [max_hail_diam_sfc] standard_name = max_hail_diameter_sfc long_name = instantaneous maximum hail diameter at lowest model level units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [dkt] standard_name = atmosphere_heat_diffusivity long_name = atmospheric heat diffusivity units = m2 s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [dku] standard_name = atmosphere_momentum_diffusivity long_name = atmospheric momentum diffusivity units = m2 s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [cldfra] standard_name = instantaneous_3d_cloud_fraction long_name = instantaneous 3D cloud fraction for all MPs units = frac - dimensions = (horizontal_loop_extent,adjusted_vertical_layer_dimension_for_radiation) + dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) type = real kind = kind_phys [cldfra2d] standard_name = max_in_column_cloud_fraction long_name = instantaneous 2D (max-in-column) cloud fraction units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [lwp_ex] standard_name = liq_water_path_from_microphysics long_name = total liquid water path from explicit microphysics units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [iwp_ex] standard_name = ice_water_path_from_microphysics long_name = total ice water path from explicit microphysics units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [lwp_fc] standard_name = liq_water_path_from_cloud_fraction long_name = total liquid water path from cloud fraction scheme units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [iwp_fc] standard_name = ice_water_path_from_cloud_fraction long_name = total ice water path from cloud fraction scheme units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [total_albedo] standard_name = total_sky_albedo long_name = total sky albedo at toa units = frac - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [edmf_a] standard_name = emdf_updraft_area long_name = updraft area from mass flux scheme units = frac - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme .and. (control_for_additional_diagnostics_in_mellor_yamada_nakanishi_niino_pbl_scheme .ne. 0)) @@ -9357,7 +9388,7 @@ standard_name = emdf_updraft_vertical_velocity long_name = updraft vertical velocity from mass flux scheme units = m s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme .and. (control_for_additional_diagnostics_in_mellor_yamada_nakanishi_niino_pbl_scheme .ne. 0)) @@ -9365,7 +9396,7 @@ standard_name = emdf_updraft_total_water long_name = updraft total water from mass flux scheme units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme .and. (control_for_additional_diagnostics_in_mellor_yamada_nakanishi_niino_pbl_scheme .ne. 0)) @@ -9373,7 +9404,7 @@ standard_name = emdf_updraft_theta_l long_name = updraft theta-l from mass flux scheme units = K - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme .and. (control_for_additional_diagnostics_in_mellor_yamada_nakanishi_niino_pbl_scheme .ne. 0)) @@ -9381,7 +9412,7 @@ standard_name = emdf_updraft_entrainment_rate long_name = updraft entranment rate from mass flux scheme units = s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme .and. (control_for_additional_diagnostics_in_mellor_yamada_nakanishi_niino_pbl_scheme .ne. 0)) @@ -9389,7 +9420,7 @@ standard_name = emdf_updraft_cloud_water long_name = updraft cloud water from mass flux scheme units = kg kg-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme .and. (control_for_additional_diagnostics_in_mellor_yamada_nakanishi_niino_pbl_scheme .ne. 0)) @@ -9397,7 +9428,7 @@ standard_name = theta_subsidence_tendency long_name = updraft theta subsidence tendency units = K s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme .and. (control_for_additional_diagnostics_in_mellor_yamada_nakanishi_niino_pbl_scheme .ne. 0)) @@ -9405,7 +9436,7 @@ standard_name = water_vapor_subsidence_tendency long_name = updraft water vapor subsidence tendency units = kg kg-1 s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme .and. (control_for_additional_diagnostics_in_mellor_yamada_nakanishi_niino_pbl_scheme .ne. 0)) @@ -9413,7 +9444,7 @@ standard_name = theta_detrainment_tendency long_name = updraft theta detrainment tendency units = K s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme .and. (control_for_additional_diagnostics_in_mellor_yamada_nakanishi_niino_pbl_scheme .ne. 0)) @@ -9421,7 +9452,7 @@ standard_name = water_vapor_detrainment_tendency long_name = updraft water vapor detrainment tendency units = kg kg-1 s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme .and. (control_for_additional_diagnostics_in_mellor_yamada_nakanishi_niino_pbl_scheme .ne. 0)) @@ -9429,7 +9460,7 @@ standard_name = total_time_rate_of_change_of_tke long_name = total tke tendency units = m2 s-3 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme .and. control_for_tke_budget_output == 1) @@ -9437,7 +9468,7 @@ standard_name = tke_tendency_due_to_vertical_transport long_name = tke tendency due to vertical transport and diffusion units = m2 s-3 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme .and. control_for_tke_budget_output == 1) @@ -9445,7 +9476,7 @@ standard_name = tke_tendency_due_to_shear long_name = tke tendency due to shear units = m2 s-3 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme .and. control_for_tke_budget_output == 1) @@ -9453,7 +9484,7 @@ standard_name = tke_tendency_due_to_buoyancy long_name = tke tendency due to buoyancy production or consumption units = m2 s-3 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme .and. control_for_tke_budget_output == 1) @@ -9461,7 +9492,7 @@ standard_name = tke_tendency_due_to_dissipation long_name = tke tendency due to the dissipation of tke units = m2 s-3 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme .and. control_for_tke_budget_output == 1) @@ -9469,7 +9500,7 @@ standard_name = maximum_width_of_plumes long_name = maximum width of plumes per grid column units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme) @@ -9477,7 +9508,7 @@ standard_name = maximum_mass_flux long_name = maximum mass flux within a column units = m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme) @@ -9485,7 +9516,7 @@ standard_name = height_of_tallest_plume_in_a_column long_name = height of tallest plume in a column units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme) @@ -9493,20 +9524,20 @@ standard_name = k_level_of_highest_reaching_plume long_name = k-level of highest reaching plume units = count - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer [ktop_plume] standard_name = k_level_of_highest_plume long_name = k-level of highest plume units = count - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = integer active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme) [exch_h] standard_name = atmosphere_heat_diffusivity_for_mynnedmf long_name = diffusivity for heat for MYNN PBL (defined for all mass levels) units = m2 s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme) @@ -9514,7 +9545,7 @@ standard_name = atmosphere_momentum_diffusivity_for_mynnedmf long_name = diffusivity for momentum for MYNN PBL (defined for all mass levels) units = m2 s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_mellor_yamada_nakanishi_niino_pbl_scheme) @@ -9522,56 +9553,56 @@ standard_name = time_integral_of_height_of_mountain_blocking long_name = time integral of height of mountain blocking drag units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [zlwb] standard_name = time_integral_of_height_of_low_level_wave_breaking long_name = time integral of height of drag due to low level wave breaking units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [zogw] standard_name = time_integral_of_height_of_launch_level_of_orographic_gravity_wave long_name = time integral of height of launch level of orographic gravity wave units = m - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [tau_tofd] standard_name = time_integral_of_momentum_flux_due_to_turbulent_orographic_form_drag long_name = time integral of momentum flux due to TOFD units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [tau_mtb] standard_name = time_integral_of_momentum_flux_due_to_mountain_blocking_drag long_name = time integral of momentum flux due to mountain blocking drag units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [tau_ogw] standard_name = time_integral_of_momentum_flux_due_to_orographic_gravity_wave_drag long_name = time integral of momentum flux due to orographic gravity wave drag units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [tau_ngw] standard_name = time_integral_of_momentum_flux_due_to_nonstationary_gravity_wave long_name = time integral of momentum flux due to nonstationary gravity waves units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [du3dt_mtb] standard_name = time_integral_of_change_in_x_wind_due_to_mountain_blocking_drag long_name = time integral of change in x wind due to mountain blocking drag units = m s-2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_unified_gravity_wave_physics_diagnostics) @@ -9579,7 +9610,7 @@ standard_name = time_integral_of_change_in_x_wind_due_to_orographic_gravity_wave_drag long_name = time integral of change in x wind due to orographic gw drag units = m s-2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_unified_gravity_wave_physics_diagnostics) @@ -9587,7 +9618,7 @@ standard_name = cumulative_change_in_x_wind_due_to_mesoscale_orographic_gravity_wave_drag long_name = cumulative change in x wind due to mesoscale orographic gravity wave drag units = m s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_unified_gravity_wave_physics_diagnostics) @@ -9595,7 +9626,7 @@ standard_name = cumulative_change_in_x_wind_due_to_blocking_drag long_name = cumulative change in x wind due to blocking drag units = m s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_unified_gravity_wave_physics_diagnostics) @@ -9603,7 +9634,7 @@ standard_name = cumulative_change_in_x_wind_due_to_small_scale_gravity_wave_drag long_name = cumulative change in x wind due to small scale gravity wave drag units = m s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_unified_gravity_wave_physics_diagnostics) @@ -9611,7 +9642,7 @@ standard_name = cumulative_change_in_x_wind_due_to_form_drag long_name = cumulative change in x wind due to form drag units = m s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_unified_gravity_wave_physics_diagnostics) @@ -9619,7 +9650,7 @@ standard_name = time_integral_of_change_in_x_wind_due_to_turbulent_orographic_form_drag long_name = time integral of change in x wind due to TOFD units = m s-2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_unified_gravity_wave_physics_diagnostics) @@ -9627,7 +9658,7 @@ standard_name = time_integral_of_change_in_x_wind_due_to_nonstationary_gravity_wave long_name = time integral of change in x wind due to NGW units = m s-2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_unified_gravity_wave_physics_diagnostics) @@ -9635,7 +9666,7 @@ standard_name = cumulative_change_in_wind_speed_due_to_mesoscale_orographic_gravity_wave_drag long_name = cumulative change in wind speed due to mesoscale orographic gravity wave drag units = m s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_unified_gravity_wave_physics_diagnostics) @@ -9643,7 +9674,7 @@ standard_name = cumulative_change_in_wind_speed_due_to_blocking_drag long_name = cumulative change in wind speed due to blocking drag units = m s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_unified_gravity_wave_physics_diagnostics) @@ -9651,7 +9682,7 @@ standard_name = cumulative_change_in_wind_speed_due_to_small_scale_orographic_gravity_wave_drag long_name = cumulative change in wind speed due to small scale orographic gravity wave drag units = m s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_unified_gravity_wave_physics_diagnostics) @@ -9659,7 +9690,7 @@ standard_name = cumulative_change_in_wind_speed_due_to_turbulent_orographic_form_drag long_name = cumulative change in wind speed due to turbulent orographic form drag units = m s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_unified_gravity_wave_physics_diagnostics) @@ -9667,7 +9698,7 @@ standard_name = cumulative_change_in_x_wind_due_to_convective_gravity_wave_drag long_name = cumulative change in x wind due to convective gravity wave drag units = m s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_unified_gravity_wave_physics_diagnostics) @@ -9675,7 +9706,7 @@ standard_name = cumulative_change_in_y_wind_due_to_convective_gravity_wave_drag long_name = cumulative change in y wind due to convective gravity wave drag units = m s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_unified_gravity_wave_physics_diagnostics) @@ -9683,7 +9714,7 @@ standard_name = cumulative_change_in_temperature_due_to_convective_gravity_wave_drag long_name = cumulative change in temperature due to convective gravity wave drag units = K - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_unified_gravity_wave_physics_diagnostics) @@ -9691,35 +9722,35 @@ standard_name = tendency_of_x_wind_due_to_gravity_wave_drag long_name = zonal wind tendency due to all GWs units = m s-2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [dvdt_gw] standard_name = tendency_of_y_wind_due_to_gravity_wave_drag long_name = meridional wind tendency due to all GWs units = m s-2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [dtdt_gw] standard_name = tendency_of_air_temperature_due_to_gravity_wave_drag long_name = air temperature tendency due to all GWs units = K s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [kdis_gw] standard_name = atmosphere_momentum_diffusivity_due_to_gravity_wave_drag long_name = eddy mixing due to all GWs units = m2 s-1 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys [dudt_ogw] standard_name = tendency_of_x_wind_due_to_mesoscale_orographic_gravity_wave_drag long_name = x wind tendency from meso scale ogw units = m s-2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9727,7 +9758,7 @@ standard_name = tendency_of_y_wind_due_to_mesoscale_orographic_gravity_wave_drag long_name = y wind tendency from meso scale ogw units = m s-2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9735,7 +9766,7 @@ standard_name = vertically_integrated_x_momentum_flux_due_to_mesoscale_orographic_gravity_wave_drag long_name = integrated x momentum flux from meso scale ogw units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9743,7 +9774,7 @@ standard_name = vertically_integrated_y_momentum_flux_due_to_mesoscale_orographic_gravity_wave_drag long_name = integrated y momentum flux from meso scale ogw units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9751,7 +9782,7 @@ standard_name = tendency_of_x_wind_due_to_blocking_drag long_name = x wind tendency from blocking drag units = m s-2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9759,7 +9790,7 @@ standard_name = tendency_of_y_wind_due_to_blocking_drag long_name = y wind tendency from blocking drag units = m s-2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9767,7 +9798,7 @@ standard_name = vertically_integrated_x_momentum_flux_due_to_blocking_drag long_name = integrated x momentum flux from blocking drag units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9775,7 +9806,7 @@ standard_name = vertically_integrated_y_momentum_flux_due_to_blocking_drag long_name = integrated y momentum flux from blocking drag units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9783,7 +9814,7 @@ standard_name = cumulative_vertically_integrated_x_momentum_flux_due_to_mesoscale_orographic_gravity_wave_drag long_name = cumulative integrated x momentum flux from mesoscale orographic gravity wave drag units = Pa s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9791,7 +9822,7 @@ standard_name = cumulative_vertically_integrated_y_momentum_flux_due_to_mesoscale_orographic_gravity_wave_drag long_name = cumulative integrated y momentum flux from mesoscale orographic gravity wave drag units = Pa s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9799,7 +9830,7 @@ standard_name = cumulative_vertically_integrated_x_momentum_flux_due_to_blocking_drag long_name = cumulative integrated x momentum flux from blocking drag units = Pa s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9807,7 +9838,7 @@ standard_name = cumulative_vertically_integrated_y_momentum_flux_due_to_blocking_drag long_name = cumulative integrated y momentum flux from blocking drag units = Pa s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9815,7 +9846,7 @@ standard_name = cumulative_vertically_integrated_x_momentum_flux_due_to_small_scale_gravity_wave_drag long_name = cumulative integrated x momentum flux from small scale gravity wave drag units = Pa s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9823,7 +9854,7 @@ standard_name = cumulative_vertically_integrated_y_momentum_flux_due_small_scale_gravity_wave_drag long_name = cumulative integrated y momentum flux from small scale gravity wave drag units = Pa s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9831,7 +9862,7 @@ standard_name = cumulative_vertically_integrated_x_momentum_flux_due_to_form_drag long_name = cumulative integrated x momentum flux from form drag units = Pa s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9839,7 +9870,7 @@ standard_name = cumulative_vertically_integrated_y_momentum_flux_due_to_form_drag long_name = cumulative integrated y momentum flux from form drag units = Pa s - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9847,7 +9878,7 @@ standard_name = tendency_of_x_wind_due_to_small_scale_gravity_wave_drag long_name = x wind tendency from small scale gwd units = m s-2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9855,7 +9886,7 @@ standard_name = tendency_of_y_wind_due_to_small_scale_gravity_wave_drag long_name = y wind tendency from small scale gwd units = m s-2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9863,7 +9894,7 @@ standard_name = vertically_integrated_x_momentum_flux_due_to_small_scale_gravity_wave_drag long_name = integrated x momentum flux from small scale gwd units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9871,7 +9902,7 @@ standard_name = vertically_integrated_y_momentum_flux_due_to_small_scale_gravity_wave_drag long_name = integrated y momentum flux from small scale gwd units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9879,7 +9910,7 @@ standard_name = tendency_of_x_wind_due_to_form_drag long_name = x wind tendency from form drag units = m s-2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9887,7 +9918,7 @@ standard_name = tendency_of_y_wind_due_to_form_drag long_name = y wind tendency from form drag units = m s-2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9895,7 +9926,7 @@ standard_name = vertically_integrated_x_momentum_flux_due_to_form_drag long_name = integrated x momentum flux from form drag units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9903,7 +9934,7 @@ standard_name = vertically_integrated_y_momentum_flux_due_to_form_drag long_name = integrated y momentum flux from form drag units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (flag_for_ugwp_version_1 .or. flag_for_unified_gravity_wave_physics_diagnostics) @@ -9911,7 +9942,7 @@ standard_name = time_integral_of_change_in_y_wind_due_to_nonstationary_gravity_wave long_name = time integral of change in y wind due to NGW units = m s-2 - dimensions = (horizontal_loop_extent,vertical_layer_dimension) + dimensions = (horizontal_dimension,vertical_layer_dimension) type = real kind = kind_phys active = (flag_for_unified_gravity_wave_physics_diagnostics) @@ -9919,7 +9950,7 @@ standard_name = extended_diagnostics_output_from_thompson_microphysics long_name = set of 3d arrays for extended diagnostics output from thompson microphysics units = none - dimensions = (horizontal_loop_extent,vertical_layer_dimension,number_of_3d_diagnostic_output_arrays_from_thompson_microphysics) + dimensions = (horizontal_dimension,vertical_layer_dimension,number_of_3d_diagnostic_output_arrays_from_thompson_microphysics) type = real kind = kind_phys active = (flag_for_extended_diagnostic_output_from_thompson_microphysics) @@ -9927,7 +9958,7 @@ standard_name = auxiliary_2d_arrays long_name = auxiliary 2d arrays to output (for debugging) units = none - dimensions = (horizontal_loop_extent,number_of_xy_dimensioned_auxiliary_arrays) + dimensions = (horizontal_dimension,number_of_xy_dimensioned_auxiliary_arrays) type = real kind = kind_phys active = (number_of_xy_dimensioned_auxiliary_arrays > 0) @@ -9935,7 +9966,7 @@ standard_name = auxiliary_3d_arrays long_name = auxiliary 3d arrays to output (for debugging) units = none - dimensions = (horizontal_loop_extent,vertical_layer_dimension,number_of_xyz_dimensioned_auxiliary_arrays) + dimensions = (horizontal_dimension,vertical_layer_dimension,number_of_xyz_dimensioned_auxiliary_arrays) type = real kind = kind_phys active = (number_of_xyz_dimensioned_auxiliary_arrays > 0) @@ -9943,14 +9974,14 @@ standard_name = surface_air_pressure_from_previous_timestep long_name = surface air pressure from previous timestep units = Pa - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys [ltg1_max] standard_name = lightning_threat_index_1 long_name = lightning threat index 1 units = flashes min-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -9959,7 +9990,7 @@ standard_name = lightning_threat_index_2 long_name = lightning threat index 2 units = flashes min-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout @@ -9968,76 +9999,12 @@ standard_name = lightning_threat_index_3 long_name = lightning threat index 3 units = flashes min-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys intent = inout active = (do_lightning_threat_index_calculations) -######################################################################## -[ccpp-table-properties] - name = GFS_data_type - type = ddt - dependencies = - -[ccpp-arg-table] - name = GFS_data_type - type = ddt -[Statein] - standard_name = GFS_statein_type_instance - long_name = prognostic state data in from dycore - units = DDT - dimensions = () - type = GFS_statein_type -[Stateout] - standard_name = GFS_stateout_type_instance - long_name = prognostic state or tendencies return to dycore - units = DDT - dimensions = () - type = GFS_stateout_type -[Sfcprop] - standard_name = GFS_sfcprop_type_instance - long_name = surface fields - units = DDT - dimensions = () - type = GFS_sfcprop_type -[Coupling] - standard_name = GFS_coupling_type_instance - long_name = fields to/from coupling with other components (land/ice/ocean) - units = DDT - dimensions = () - type = GFS_coupling_type -[Grid] - standard_name = GFS_grid_type_instance - long_name = grid and interpolation related data - units = DDT - dimensions = () - type = GFS_grid_type -[Tbd] - standard_name = GFS_tbd_type_instance - long_name = to be determined data that doesn't fit in any one container - units = DDT - dimensions = () - type = GFS_tbd_type -[Cldprop] - standard_name = GFS_cldprop_type_instance - long_name = cloud fields needed by radiation from physics - units = DDT - dimensions = () - type = GFS_cldprop_type -[Radtend] - standard_name = GFS_radtend_type_instance - long_name = radiation tendencies needed in physics - units = DDT - dimensions = () - type = GFS_radtend_type -[Intdiag] - standard_name = GFS_diag_type_instance - long_name = fields targeted for diagnostic output - units = DDT - dimensions = () - type = GFS_diag_type - ######################################################################## [ccpp-table-properties] name = GFS_typedefs @@ -10069,12 +10036,6 @@ units = DDT dimensions = () type = GFS_coupling_type -[GFS_data_type] - standard_name = GFS_data_type - long_name = definition of type GFS_data_type - units = DDT - dimensions = () - type = GFS_data_type [GFS_diag_type] standard_name = GFS_diag_type long_name = definition of type GFS_diag_type diff --git a/ccpp/driver/CCPP_driver.F90 b/ccpp/driver/CCPP_driver.F90 index 8e4c019b3..b931998f5 100644 --- a/ccpp/driver/CCPP_driver.F90 +++ b/ccpp/driver/CCPP_driver.F90 @@ -13,7 +13,7 @@ module CCPP_driver cdata_block, & ccpp_suite, & GFS_control, & - GFS_data + GFS_Intdiag implicit none @@ -81,9 +81,10 @@ subroutine CCPP_step (step, nblks, ierr) nthrdsX = nthrds end if - ! For physics running over the entire domain, block and thread - ! number are not used; set to safe values + ! For physics running over the entire domain, block, chunk and thread + ! numbers are not used; set to safe values cdata_domain%blk_no = 1 + cdata_domain%chunk_no = 1 cdata_domain%thrd_no = 1 cdata_domain%thrd_cnt = 1 @@ -93,8 +94,10 @@ subroutine CCPP_step (step, nblks, ierr) ! Loop over all blocks and threads do nt=1,nthrdsX do nb=1,nblks - ! Assign the correct block and thread numbers + ! Assign the correct block, chunk and thread numbers + ! Note that we can use block number as chunk number cdata_block(nb,nt)%blk_no = nb + cdata_block(nb,nt)%chunk_no = nb cdata_block(nb,nt)%thrd_no = nt cdata_block(nb,nt)%thrd_cnt = nthrdsX end do @@ -137,24 +140,18 @@ subroutine CCPP_step (step, nblks, ierr) !--- determine if radiation diagnostics buckets need to be cleared if (nint(GFS_control%fhzero*3600) >= nint(max(GFS_control%fhswr,GFS_control%fhlwr))) then if (mod(GFS_control%kdt,GFS_control%nszero) == 1) then - do nb = 1,nblks - call GFS_data(nb)%Intdiag%rad_zero(GFS_control) - end do + call GFS_Intdiag%rad_zero(GFS_control) endif else kdt_rad = nint(min(GFS_control%fhswr,GFS_control%fhlwr)/GFS_control%dtp) if (mod(GFS_control%kdt,kdt_rad) == 1) then - do nb = 1,nblks - call GFS_data(nb)%Intdiag%rad_zero(GFS_control) - enddo + call GFS_Intdiag%rad_zero(GFS_control) endif endif !--- determine if physics diagnostics buckets need to be cleared if ((mod(GFS_control%kdt-1,GFS_control%nszero)) == 0) then - do nb = 1,nblks - call GFS_data(nb)%Intdiag%phys_zero(GFS_control) - end do + call GFS_Intdiag%phys_zero(GFS_control) endif !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -181,8 +178,8 @@ subroutine CCPP_step (step, nblks, ierr) #endif !$OMP do schedule (dynamic,1) do nb = 1,nblks - ! For non-uniform blocks, the last block has a different (shorter) - ! length than the other blocks; use special CCPP_Interstitial(nthrdsX) + ! For non-uniform blocks/chunks, the last block/chunk has a different (shorter) + ! length than the other blocks/chunks; use special CCPP_Interstitial(nthrdsX) if (non_uniform_blocks .and. nb==nblks) then ntX = nthrdsX else @@ -192,7 +189,7 @@ subroutine CCPP_step (step, nblks, ierr) call ccpp_physics_run(cdata_block(nb,ntX), suite_name=trim(ccpp_suite), group_name=trim(step), ierr=ierr2) if (ierr2/=0) then write(0,'(2a,3(a,i4),a)') "An error occurred in ccpp_physics_run for group ", trim(step), & - ", block ", nb, " and thread ", nt, " (ntX=", ntX, "):" + ", block/chunk ", nb, " and thread ", nt, " (ntX=", ntX, "):" write(0,'(a)') trim(cdata_block(nb,ntX)%errmsg) ierr = ierr + ierr2 end if diff --git a/ccpp/driver/GFS_diagnostics.F90 b/ccpp/driver/GFS_diagnostics.F90 index 68f89ae89..942db0175 100644 --- a/ccpp/driver/GFS_diagnostics.F90 +++ b/ccpp/driver/GFS_diagnostics.F90 @@ -57,7 +57,7 @@ subroutine add_dtend(Model,ExtDiag,IntDiag,idx,nblks,itrac,iprocess,desc,unit) implicit none type(GFS_control_type), intent(in) :: Model type(GFS_externaldiag_type), intent(inout) :: ExtDiag(:) - type(GFS_diag_type), intent(in) :: IntDiag(:) + type(GFS_diag_type), intent(in) :: IntDiag integer, intent(in) :: nblks, itrac, iprocess integer, intent(inout) :: idx real(kind=kind_phys), pointer :: dtend(:,:,:) ! Assumption: dtend is null iff all(dtidx <= 1) @@ -84,7 +84,7 @@ subroutine add_dtend(Model,ExtDiag,IntDiag,idx,nblks,itrac,iprocess,desc,unit) endif allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dtend(:,:,idtend) + ExtDiag(idx)%data(nb)%var3 => IntDiag%dtend(Model%chunk_begin(nb):Model%chunk_end(nb),:,idtend) enddo endif end subroutine add_dtend @@ -126,15 +126,15 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ! --- interface variables type(GFS_externaldiag_type), intent(inout) :: ExtDiag(:) type(GFS_control_type), intent(in) :: Model - type(GFS_statein_type), intent(in) :: Statein(:) - type(GFS_stateout_type), intent(in) :: Stateout(:) - type(GFS_sfcprop_type), intent(in) :: Sfcprop(:) - type(GFS_coupling_type), intent(in) :: Coupling(:) - type(GFS_grid_type), intent(in) :: Grid(:) - type(GFS_tbd_type), intent(in) :: Tbd(:) - type(GFS_cldprop_type), intent(in) :: Cldprop(:) - type(GFS_radtend_type), intent(in) :: Radtend(:) - type(GFS_diag_type), intent(in) :: IntDiag(:) + type(GFS_statein_type), intent(in) :: Statein + type(GFS_stateout_type), intent(in) :: Stateout + type(GFS_sfcprop_type), intent(in) :: Sfcprop + type(GFS_coupling_type), intent(in) :: Coupling + type(GFS_grid_type), intent(in) :: Grid + type(GFS_tbd_type), intent(in) :: Tbd + type(GFS_cldprop_type), intent(in) :: Cldprop + type(GFS_radtend_type), intent(in) :: Radtend + type(GFS_diag_type), intent(in) :: IntDiag type(GFS_init_type), intent(in) :: Init_parm !--- local variables @@ -147,7 +147,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop character(len=30) :: namestr, descstr NFXR = Model%NFXR - nblks = size(Statein) + nblks = Model%nchunks ExtDiag(:)%id = -99 ExtDiag(:)%axes = -99 @@ -169,7 +169,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%cldfra2d(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%cldfra2d(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -181,7 +181,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%total_albedo(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%total_albedo(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -193,7 +193,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%lwp_ex(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%lwp_ex(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -205,7 +205,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%iwp_ex(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%iwp_ex(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -217,7 +217,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%lwp_fc(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%lwp_fc(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -229,7 +229,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%iwp_fc(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%iwp_fc(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -242,8 +242,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mask = 'positive_flux' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,3) - ExtDiag(idx)%data(nb)%var21 => IntDiag(nb)%fluxr(:,4) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),3) + ExtDiag(idx)%data(nb)%var21 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),4) enddo idx = idx + 1 @@ -257,7 +257,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dlwsfc(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dlwsfc(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -269,7 +269,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dlwsfci(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dlwsfci(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -283,7 +283,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%ulwsfc(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%ulwsfc(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -296,7 +296,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,23) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),23) enddo idx = idx + 1 @@ -309,7 +309,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,2) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),2) enddo idx = idx + 1 @@ -322,7 +322,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,1) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),1) enddo idx = idx + 1 @@ -334,7 +334,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%ulwsfci(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%ulwsfci(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -349,7 +349,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,4) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),4) enddo idx = idx + 1 @@ -361,7 +361,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dswsfci(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dswsfci(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -376,7 +376,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,3) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),3) enddo idx = idx + 1 @@ -388,7 +388,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%uswsfci(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%uswsfci(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -402,7 +402,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,21) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),21) enddo idx = idx + 1 @@ -416,7 +416,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,22) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),22) enddo idx = idx + 1 @@ -430,7 +430,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,24) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),24) enddo idx = idx + 1 @@ -444,7 +444,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,25) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),25) enddo idx = idx + 1 @@ -458,7 +458,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,26) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),26) enddo idx = idx + 1 @@ -472,7 +472,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,27) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),27) enddo idx = idx + 1 @@ -486,7 +486,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,28) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),28) enddo idx = idx + 1 @@ -500,7 +500,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,29) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),29) enddo idx = idx + 1 @@ -514,7 +514,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,30) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),30) enddo idx = idx + 1 @@ -528,7 +528,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,31) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),31) enddo idx = idx + 1 @@ -542,7 +542,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,32) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),32) enddo idx = idx + 1 @@ -556,7 +556,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,33) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),33) enddo @@ -572,7 +572,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,23) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),23) enddo @@ -588,7 +588,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,2) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),2) enddo idx = idx + 1 @@ -603,9 +603,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,1) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),1) enddo -! if(mpp_pe()==mpp_root_pe())print *,'in gfdl_diag_register,bf ULWRFtoa,idx=',idx idx = idx + 1 ExtDiag(idx)%axes = 2 @@ -618,7 +617,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg_kind = 'rad_swlw_min' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,17) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),17) enddo idx = idx + 1 @@ -632,7 +631,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg_kind = 'rad_swlw_min' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,18) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),18) enddo idx = idx + 1 @@ -644,7 +643,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%cnvfac = cn_100 allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Cldprop(nb)%cv(:) + ExtDiag(idx)%data(nb)%var2 => Cldprop%cv(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -656,8 +655,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mask = 'cldmask' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Cldprop(nb)%cvt(:) - ExtDiag(idx)%data(nb)%var21 => Cldprop(nb)%cv(:) + ExtDiag(idx)%data(nb)%var2 => Cldprop%cvt(Model%chunk_begin(nb):Model%chunk_end(nb)) + ExtDiag(idx)%data(nb)%var21 => Cldprop%cv(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -669,8 +668,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mask = 'cldmask' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Cldprop(nb)%cvb(:) - ExtDiag(idx)%data(nb)%var21 => Cldprop(nb)%cv(:) + ExtDiag(idx)%data(nb)%var2 => Cldprop%cvb(Model%chunk_begin(nb):Model%chunk_end(nb)) + ExtDiag(idx)%data(nb)%var21 => Cldprop%cv(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo ! if(mpp_pe()==mpp_root_pe())print *,'in gfdl_diag_register,af PREScnvclb,idx=',idx @@ -686,7 +685,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg_kind = 'rad_swlw_min' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,5) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),5) enddo idx = idx + 1 @@ -700,8 +699,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mask = "cldmask_ratio" allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,8) - ExtDiag(idx)%data(nb)%var21 => IntDiag(nb)%fluxr(:,5) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),8) + ExtDiag(idx)%data(nb)%var21 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),5) enddo idx = idx + 1 @@ -715,8 +714,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mask = "cldmask_ratio" allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,11) - ExtDiag(idx)%data(nb)%var21 => IntDiag(nb)%fluxr(:,5) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),11) + ExtDiag(idx)%data(nb)%var21 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),5) enddo idx = idx + 1 @@ -730,8 +729,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mask = "cldmask_ratio" allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,14) - ExtDiag(idx)%data(nb)%var21 => IntDiag(nb)%fluxr(:,5) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),14) + ExtDiag(idx)%data(nb)%var21 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),5) enddo idx = idx + 1 @@ -745,7 +744,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg_kind = 'rad_swlw_min' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,6) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),6) enddo idx = idx + 1 @@ -759,8 +758,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mask = "cldmask_ratio" allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,9) - ExtDiag(idx)%data(nb)%var21 => IntDiag(nb)%fluxr(:,6) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),9) + ExtDiag(idx)%data(nb)%var21 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),6) enddo idx = idx + 1 @@ -774,8 +773,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mask = "cldmask_ratio" allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,12) - ExtDiag(idx)%data(nb)%var21 => IntDiag(nb)%fluxr(:,6) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),12) + ExtDiag(idx)%data(nb)%var21 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),6) enddo idx = idx + 1 @@ -789,8 +788,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mask = "cldmask_ratio" allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,15) - ExtDiag(idx)%data(nb)%var21 => IntDiag(nb)%fluxr(:,6) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),15) + ExtDiag(idx)%data(nb)%var21 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),6) enddo idx = idx + 1 @@ -804,7 +803,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg_kind = 'rad_swlw_min' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,7) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),7) enddo idx = idx + 1 @@ -818,8 +817,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mask = "cldmask_ratio" allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,10) - ExtDiag(idx)%data(nb)%var21 => IntDiag(nb)%fluxr(:,7) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),10) + ExtDiag(idx)%data(nb)%var21 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),7) enddo idx = idx + 1 @@ -833,8 +832,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mask = "cldmask_ratio" allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,13) - ExtDiag(idx)%data(nb)%var21 => IntDiag(nb)%fluxr(:,7) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),13) + ExtDiag(idx)%data(nb)%var21 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),7) enddo idx = idx + 1 @@ -848,8 +847,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mask = "cldmask_ratio" allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,16) - ExtDiag(idx)%data(nb)%var21 => IntDiag(nb)%fluxr(:,7) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),16) + ExtDiag(idx)%data(nb)%var21 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),7) enddo !--- aerosol diagnostics --- idx = idx + 1 @@ -861,7 +860,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,34) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),34) enddo !--- aerosol diagnostics --- @@ -874,7 +873,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,35) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),35) enddo !--- aerosol diagnostics --- @@ -887,7 +886,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,36) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),36) enddo !--- aerosol diagnostics --- @@ -900,7 +899,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,37) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),37) enddo !--- aerosol diagnostics --- @@ -913,7 +912,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,38) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),38) enddo !--- aerosol diagnostics --- @@ -926,12 +925,12 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,39) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),39) enddo !--- air quality diagnostics --- if (Model%cplaqm) then - if (associated(IntDiag(1)%aod)) then + if (associated(IntDiag%aod)) then idx = idx + 1 ExtDiag(idx)%axes = 2 ExtDiag(idx)%name = 'aod' @@ -940,7 +939,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%aod + ExtDiag(idx)%data(nb)%var2 => IntDiag%aod(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo endif endif @@ -958,7 +957,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,num) + ExtDiag(idx)%data(nb)%var2 => IntDiag%fluxr(Model%chunk_begin(nb):Model%chunk_end(nb),num) enddo enddo @@ -973,7 +972,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop !rab ExtDiag(idx)%unit = 'XXX' !rab ExtDiag(idx)%mod_name = 'gfs_phys' !rab do nb = 1,nblks -!rab ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dswcmp(:,num) +!rab ExtDiag(idx)%data(nb)%var2 => IntDiag%dswcmp(Model%chunk_begin(nb):Model%chunk_end(nb),num) !rab enddo !rab enddo !rab @@ -986,7 +985,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop !rab ExtDiag(idx)%unit = 'XXX' !rab ExtDiag(idx)%mod_name = 'gfs_phys' !rab do nb = 1,nblks -!rab ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%uswcmp(:,num) +!rab ExtDiag(idx)%data(nb)%var2 => IntDiag%uswcmp(Model%chunk_begin(nb):Model%chunk_end(nb),num) !rab enddo !rab enddo @@ -1004,7 +1003,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%topfsw(:)%upfxc + ExtDiag(idx)%data(nb)%var2 => IntDiag%topfsw(Model%chunk_begin(nb):Model%chunk_end(nb))%upfxc enddo idx = idx + 1 @@ -1016,7 +1015,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%topfsw(:)%dnfxc + ExtDiag(idx)%data(nb)%var2 => IntDiag%topfsw(Model%chunk_begin(nb):Model%chunk_end(nb))%dnfxc enddo idx = idx + 1 @@ -1028,7 +1027,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%topfsw(:)%upfx0 + ExtDiag(idx)%data(nb)%var2 => IntDiag%topfsw(Model%chunk_begin(nb):Model%chunk_end(nb))%upfx0 enddo idx = idx + 1 @@ -1040,7 +1039,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%topflw(:)%upfxc + ExtDiag(idx)%data(nb)%var2 => IntDiag%topflw(Model%chunk_begin(nb):Model%chunk_end(nb))%upfxc enddo idx = idx + 1 @@ -1052,7 +1051,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%topflw(:)%upfx0 + ExtDiag(idx)%data(nb)%var2 => IntDiag%topflw(Model%chunk_begin(nb):Model%chunk_end(nb))%upfx0 enddo #endif @@ -1065,7 +1064,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%srunoff(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%srunoff(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1077,7 +1076,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%evbsa(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%evbsa(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1089,7 +1088,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%evcwa(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%evcwa(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1101,7 +1100,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%snohfa(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%snohfa(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo if (Model%lsm == Model%lsm_noahmp) then @@ -1114,7 +1113,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%paha(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%paha(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo endif @@ -1127,7 +1126,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%transa(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%transa(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1139,7 +1138,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%sbsnoa(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%sbsnoa(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1152,7 +1151,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%cnvfac = cn_100 allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%snowca(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%snowca(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1163,7 +1162,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%sncovr(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%sncovr(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1175,8 +1174,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mask = "land_only" allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%soilm(:) - ExtDiag(idx)%data(nb)%var21 => Sfcprop(nb)%slmsk(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%soilm(Model%chunk_begin(nb):Model%chunk_end(nb)) + ExtDiag(idx)%data(nb)%var21 => Sfcprop%slmsk(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1188,7 +1187,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tmpmin(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%tmpmin(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1200,7 +1199,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tmpmax(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%tmpmax(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1214,7 +1213,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dusfc(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dusfc(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1228,7 +1227,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dvsfc(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dvsfc(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1242,7 +1241,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dtsfc(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dtsfc(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1256,7 +1255,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dqsfc(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dqsfc(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1271,7 +1270,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%totprcp(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%totprcp(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1285,7 +1284,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%totprcpb(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%totprcpb(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1299,8 +1298,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ! ExtDiag(idx)%mask = "land_ice_only" allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%gflux(:) -! ExtDiag(idx)%data(nb)%var21 => Sfcprop(nb)%slmsk(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%gflux(Model%chunk_begin(nb):Model%chunk_end(nb)) +! ExtDiag(idx)%data(nb)%var21 => Sfcprop%slmsk(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1312,7 +1311,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dlwsfc(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dlwsfc(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1324,7 +1323,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%ulwsfc(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%ulwsfc(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1336,7 +1335,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%suntim(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%suntim(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1347,7 +1346,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%runoff(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%runoff(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1358,7 +1357,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tecan(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%tecan(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1369,7 +1368,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tetran(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%tetran(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1380,7 +1379,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tedir(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%tedir(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo if (Model%lsm == Model%lsm_noahmp) then @@ -1392,7 +1391,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%twa(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%twa(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo endif @@ -1405,7 +1404,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%ep(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%ep(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1418,7 +1417,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%cldwrk(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%cldwrk(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo @@ -1432,7 +1431,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dugwd(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dugwd(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1445,7 +1444,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dvgwd(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dvgwd(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1457,7 +1456,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%psmean(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%psmean(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1472,7 +1471,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%cnvprcp(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%cnvprcp(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1486,7 +1485,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%cnvprcpb(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%cnvprcpb(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1497,7 +1496,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%cnvprcp(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%cnvprcp(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1509,7 +1508,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%spfhmin(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%spfhmin(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1521,7 +1520,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%spfhmax(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%spfhmax(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1533,7 +1532,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'vector_bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%u10mmax(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%u10mmax(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1545,7 +1544,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'vector_bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%v10mmax(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%v10mmax(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1557,7 +1556,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%wind10mmax(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%wind10mmax(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 ExtDiag(idx)%axes = 2 @@ -1568,7 +1567,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'vector_bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%u10max(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%u10max(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1580,7 +1579,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'vector_bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%v10max(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%v10max(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1592,7 +1591,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%spd10max(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%spd10max(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1604,7 +1603,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%t02max(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%t02max(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1616,7 +1615,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%t02min(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%t02min(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 ExtDiag(idx)%axes = 2 @@ -1627,7 +1626,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%rh02max(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%rh02max(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1639,7 +1638,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%rh02min(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%rh02min(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1650,7 +1649,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%pratemax(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%pratemax(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1662,7 +1661,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%cnvfac = cn_th allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%frzr(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%frzr(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1674,7 +1673,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%cnvfac = cn_th allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%frzrb(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%frzrb(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1686,7 +1685,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%cnvfac = cn_th allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%frozr(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%frozr(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1698,7 +1697,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%cnvfac = cn_th allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%frozrb(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%frozrb(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1710,7 +1709,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%cnvfac = cn_th allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tsnowp(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%tsnowp(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1722,7 +1721,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%cnvfac = cn_th allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tsnowpb(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%tsnowpb(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1733,7 +1732,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%rhonewsn1(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%rhonewsn1(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1744,7 +1743,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%rain(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%rain(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1755,7 +1754,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%rainc(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%rainc(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1766,7 +1765,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%ice(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%ice(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1777,7 +1776,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%snow(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%snow(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1788,7 +1787,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%graupel(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%graupel(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1802,7 +1801,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg_kind = 'full' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%totice(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%totice(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1815,7 +1814,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%toticeb(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%toticeb(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1829,7 +1828,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg_kind = 'full' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%totsnw(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%totsnw(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1842,7 +1841,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%totsnwb(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%totsnwb(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1856,7 +1855,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg_kind = 'full' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%totgrp(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%totgrp(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1869,12 +1868,12 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%totgrpb(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%totgrpb(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo ! if(mpp_pe()==mpp_root_pe())print *,'in gfdl_diag_register,af totgrp,idx=',idx - if(associated(Coupling(1)%sfcdlw)) then + if(associated(Coupling%sfcdlw)) then idx = idx + 1 ExtDiag(idx)%axes = 2 ExtDiag(idx)%name = 'sfcdlw' @@ -1883,11 +1882,11 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Coupling(nb)%sfcdlw(:) + ExtDiag(idx)%data(nb)%var2 => Coupling%sfcdlw(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo endif - if(associated(Coupling(1)%htrlw)) then + if(associated(Coupling%htrlw)) then idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'htrlw' @@ -1896,11 +1895,11 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Coupling(nb)%htrlw(:,:) + ExtDiag(idx)%data(nb)%var3 => Coupling%htrlw(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif - if(associated(Radtend(1)%lwhc)) then + if(associated(Radtend%lwhc)) then idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'lwhc' @@ -1909,7 +1908,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Radtend(nb)%lwhc(:,:) + ExtDiag(idx)%data(nb)%var3 => Radtend%lwhc(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif @@ -1923,7 +1922,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'vector_bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%u10m(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%u10m(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1935,7 +1934,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'vector_bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%v10m(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%v10m(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1947,7 +1946,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dpt2m(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dpt2m(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1958,7 +1957,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%zlvl(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%zlvl(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1971,7 +1970,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%psurf(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%psurf(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1983,7 +1982,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Tbd(nb)%hpbl(:) + ExtDiag(idx)%data(nb)%var2 => Tbd%hpbl(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -1995,7 +1994,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%pwat(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%pwat(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2007,7 +2006,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%t1(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%t1(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2019,7 +2018,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%q1(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%q1(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2031,7 +2030,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'vector_bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%u1(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%u1(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2043,7 +2042,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'vector_bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%v1(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%v1(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2055,7 +2054,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%chh(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%chh(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2067,7 +2066,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%cmm(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%cmm(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2079,7 +2078,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dlwsfci(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dlwsfci(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2091,7 +2090,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%ulwsfci(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%ulwsfci(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2103,7 +2102,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dswsfci(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dswsfci(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2115,7 +2114,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%uswsfci(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%uswsfci(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2126,7 +2125,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dusfci(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dusfci(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2137,7 +2136,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dvsfci(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dvsfci(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2149,7 +2148,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dtsfci(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dtsfci(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2161,7 +2160,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dqsfci(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dqsfci(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2172,7 +2171,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%gfluxi(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%gfluxi(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2183,7 +2182,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%smcwlt2(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%smcwlt2(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2194,7 +2193,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%smcref2(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%smcref2(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo if (Model%lsm == Model%lsm_noahmp) then @@ -2206,7 +2205,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%pahi(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%pahi(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo endif @@ -2218,7 +2217,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%epi(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%epi(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2230,11 +2229,11 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop allocate (ExtDiag(idx)%data(nblks)) if (Model%lsm==Model%lsm_ruc) then do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%wetness(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%wetness(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo else do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%wet1(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%wet1(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo endif @@ -2247,7 +2246,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%sr(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%sr(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2261,7 +2260,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tdomr(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%tdomr(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2275,7 +2274,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tdoms(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%tdoms(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2289,7 +2288,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tdomzr(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%tdomzr(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2303,7 +2302,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tdomip(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%tdomip(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2314,7 +2313,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%refl_10cm(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%refl_10cm(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -2325,7 +2324,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%max_hail_diam_sfc(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%max_hail_diam_sfc(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2336,7 +2335,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dkt(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%dkt(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -2347,7 +2346,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dku(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%dku(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -2358,7 +2357,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%cldfra(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%cldfra(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -2370,7 +2369,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop allocate (ExtDiag(idx)%data(nblks)) if( Model%ncnvw > 0 ) then do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Tbd(nb)%phy_f3d(:,:,Model%ncnvw) + ExtDiag(idx)%data(nb)%var3 => Tbd%phy_f3d(Model%chunk_begin(nb):Model%chunk_end(nb),:,Model%ncnvw) enddo endif @@ -2383,7 +2382,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Coupling(nb)%skebu_wts(:,:) + ExtDiag(idx)%data(nb)%var3 => Coupling%skebu_wts(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -2394,7 +2393,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Coupling(nb)%skebv_wts(:,:) + ExtDiag(idx)%data(nb)%var3 => Coupling%skebv_wts(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif @@ -2406,7 +2405,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%zmtnblck(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%zmtnblck(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2417,7 +2416,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%refdmax(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%refdmax(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 ExtDiag(idx)%axes = 2 @@ -2427,7 +2426,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%refdmax263k(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%refdmax263k(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo if (Model%do_sppt .or. Model%ca_global) then @@ -2439,7 +2438,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Coupling(nb)%sppt_wts(:,:) + ExtDiag(idx)%data(nb)%var3 => Coupling%sppt_wts(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif @@ -2452,7 +2451,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Coupling(nb)%shum_wts(:,:) + ExtDiag(idx)%data(nb)%var3 => Coupling%shum_wts(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif @@ -2465,7 +2464,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Coupling(nb)%spp_wts_pbl(:,:) + ExtDiag(idx)%data(nb)%var3 => Coupling%spp_wts_pbl(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif @@ -2478,7 +2477,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Coupling(nb)%spp_wts_sfc(:,:) + ExtDiag(idx)%data(nb)%var3 => Coupling%spp_wts_sfc(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif @@ -2491,7 +2490,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Coupling(nb)%spp_wts_mp(:,:) + ExtDiag(idx)%data(nb)%var3 => Coupling%spp_wts_mp(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif @@ -2504,7 +2503,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Coupling(nb)%spp_wts_gwd(:,:) + ExtDiag(idx)%data(nb)%var3 => Coupling%spp_wts_gwd(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif @@ -2517,7 +2516,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Coupling(nb)%spp_wts_rad(:,:) + ExtDiag(idx)%data(nb)%var3 => Coupling%spp_wts_rad(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif @@ -2530,7 +2529,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Coupling(nb)%spp_wts_cu_deep(:,:) + ExtDiag(idx)%data(nb)%var3 => Coupling%spp_wts_cu_deep(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif @@ -2543,7 +2542,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Coupling(nb)%sfc_wts(:,:) + ExtDiag(idx)%data(nb)%var3 => Coupling%sfc_wts(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif @@ -2557,7 +2556,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Coupling(nb)%ca1(:) + ExtDiag(idx)%data(nb)%var2 => Coupling%ca1(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2568,7 +2567,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Coupling(nb)%ca_deep(:) + ExtDiag(idx)%data(nb)%var2 => Coupling%ca_deep(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2579,7 +2578,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Coupling(nb)%ca_turb(:) + ExtDiag(idx)%data(nb)%var2 => Coupling%ca_turb(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2590,7 +2589,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Coupling(nb)%ca_shal(:) + ExtDiag(idx)%data(nb)%var2 => Coupling%ca_shal(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2601,7 +2600,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Coupling(nb)%ca_rad(:) + ExtDiag(idx)%data(nb)%var2 => Coupling%ca_rad(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2612,7 +2611,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Coupling(nb)%ca_micro(:) + ExtDiag(idx)%data(nb)%var2 => Coupling%ca_micro(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo endif @@ -2627,7 +2626,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'nearest_stod' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%lakefrac(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%lakefrac(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2639,7 +2638,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'nearest_stod' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%lakedepth(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%lakedepth(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2651,7 +2650,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'nearest_stod' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%T_snow(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%T_snow(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2663,7 +2662,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'nearest_stod' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%T_ice(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%T_ice(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2675,7 +2674,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'nearest_stod' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%int2 => Sfcprop(nb)%use_lake_model(:) + ExtDiag(idx)%data(nb)%int2 => Sfcprop%use_lake_model(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo if(Model%iopt_lake==Model%iopt_lake_clm) then @@ -2691,7 +2690,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)%int2 => Sfcprop(nb)%lake_is_salty(:) + ExtDiag(idx)%data(nb)%int2 => Sfcprop%lake_is_salty(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2702,7 +2701,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)%int2 => Sfcprop(nb)%lake_cannot_freeze(:) + ExtDiag(idx)%data(nb)%int2 => Sfcprop%lake_cannot_freeze(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2714,7 +2713,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)%lake_t2m(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%lake_t2m(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2726,7 +2725,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'nearest_stod' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%lake_q2m(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%lake_q2m(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2738,7 +2737,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'nearest_stod' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%lake_albedo(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%lake_albedo(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2750,7 +2749,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'nearest_stod' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%lake_h2osno2d(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%lake_h2osno2d(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2762,7 +2761,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'nearest_stod' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%lake_sndpth2d(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%lake_sndpth2d(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2774,7 +2773,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'nearest_stod' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%lake_snl2d(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%lake_snl2d(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2786,7 +2785,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'nearest_stod' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%lake_tsfc(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%lake_tsfc(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2798,7 +2797,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'nearest_stod' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%lake_savedtke12d(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%lake_savedtke12d(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2810,7 +2809,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'nearest_stod' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%lake_ht(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%lake_ht(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo endif @@ -2830,7 +2829,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%zmtb(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%zmtb(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2841,7 +2840,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%zogw(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%zogw(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2852,7 +2851,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%zlwb(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%zlwb(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2863,7 +2862,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tau_ogw(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%tau_ogw(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2874,7 +2873,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tau_mtb(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%tau_mtb(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2885,7 +2884,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tau_tofd(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%tau_tofd(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2896,7 +2895,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tau_ngw(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%tau_ngw(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -2907,7 +2906,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt_pbl(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%du3dt_pbl(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo ! ! dv3dt_pbl @@ -2919,7 +2918,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dv3dt_pbl(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%dv3dt_pbl(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo ! ! dt3dt_pbl @@ -2931,7 +2930,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dt3dt_pbl(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%dt3dt_pbl(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo ! ! uav_ugwp @@ -2944,7 +2943,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%uav_ugwp(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%uav_ugwp(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo ! ! tav_ugwp @@ -2957,7 +2956,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%tav_ugwp(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%tav_ugwp(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -2968,7 +2967,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt_ogw(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%du3dt_ogw(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -2979,7 +2978,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt_ngw(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%du3dt_ngw(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo ! ! @@ -2991,7 +2990,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt_mtb(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%du3dt_mtb(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -3002,7 +3001,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%du3dt_tms(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%du3dt_tms(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -3013,7 +3012,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dudt_tot(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%dudt_tot(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -3024,7 +3023,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dtdt_tot(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%dtdt_tot(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -3035,7 +3034,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dudt_ogw(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%dudt_ogw(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -3046,7 +3045,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dvdt_ogw(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%dvdt_ogw(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -3057,7 +3056,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dudt_obl(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%dudt_obl(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -3068,7 +3067,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dvdt_obl(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%dvdt_obl(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo ! 2D variables @@ -3081,7 +3080,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%du_ogwcol(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%du_ogwcol(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3092,7 +3091,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dv_ogwcol(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dv_ogwcol(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3103,7 +3102,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%du_oblcol(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%du_oblcol(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3114,7 +3113,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dv_oblcol(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dv_oblcol(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3126,7 +3125,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dws3dt_ogw(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%dws3dt_ogw(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -3138,7 +3137,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dws3dt_obl(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%dws3dt_obl(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo ! Variables for GSL drag suite @@ -3151,7 +3150,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dudt_oss(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%dudt_oss(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -3162,7 +3161,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dvdt_oss(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%dvdt_oss(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -3173,7 +3172,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dudt_ofd(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%dudt_ofd(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -3184,7 +3183,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dvdt_ofd(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%dvdt_ofd(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -3196,7 +3195,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dws3dt_oss(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%dws3dt_oss(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -3208,7 +3207,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dws3dt_ofd(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%dws3dt_ofd(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -3220,7 +3219,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%ldu3dt_ogw(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%ldu3dt_ogw(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -3232,7 +3231,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%ldu3dt_obl(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%ldu3dt_obl(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -3244,7 +3243,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%ldu3dt_ofd(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%ldu3dt_ofd(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -3256,7 +3255,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%ldu3dt_oss(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%ldu3dt_oss(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo ! 2D variables @@ -3269,7 +3268,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%du_osscol(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%du_osscol(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3280,7 +3279,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dv_osscol(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dv_osscol(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3291,7 +3290,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%du_ofdcol(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%du_ofdcol(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3302,7 +3301,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dv_ofdcol(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dv_ofdcol(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3314,7 +3313,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%du3_ogwcol(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%du3_ogwcol(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3326,7 +3325,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dv3_ogwcol(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dv3_ogwcol(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3338,7 +3337,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%du3_oblcol(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%du3_oblcol(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3350,7 +3349,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dv3_oblcol(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dv3_oblcol(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3362,7 +3361,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%du3_osscol(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%du3_osscol(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3374,7 +3373,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dv3_osscol(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dv3_osscol(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3386,7 +3385,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%du3_ofdcol(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%du3_ofdcol(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3398,7 +3397,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dv3_ofdcol(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%dv3_ofdcol(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo ! UGWP non-stationary GWD outputs @@ -3412,7 +3411,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%ldu3dt_ngw(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%ldu3dt_ngw(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -3424,7 +3423,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%ldv3dt_ngw(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%ldv3dt_ngw(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -3436,7 +3435,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%ldt3dt_ngw(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%ldt3dt_ngw(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo ENDIF ! if (Model%ldiag_ugwp) @@ -3466,7 +3465,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%upd_mf(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%upd_mf(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -3478,7 +3477,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dwn_mf(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%dwn_mf(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -3490,7 +3489,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .TRUE. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%det_mf(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%det_mf(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo end if if_qdiag3d @@ -3525,7 +3524,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)%alnsf(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%alnsf(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3536,7 +3535,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)%alnwf(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%alnwf(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3547,7 +3546,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)%alvsf(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%alvsf(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3558,7 +3557,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)%alvwf(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%alvwf(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3569,7 +3568,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)%canopy(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%canopy(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3580,7 +3579,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)%f10m(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%f10m(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3591,7 +3590,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)%facsf(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%facsf(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3602,7 +3601,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)%facwf(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%facwf(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3613,7 +3612,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)%ffhh(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%ffhh(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3624,7 +3623,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)%ffmm(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%ffmm(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3635,7 +3634,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)%uustar(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%uustar(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3646,7 +3645,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)%int2 => Sfcprop(nb)%slope(:) + ExtDiag(idx)%data(nb)%int2 => Sfcprop%slope(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3657,7 +3656,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)%fice(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%fice(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3668,7 +3667,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)%hice(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%hice(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3679,7 +3678,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)%snoalb(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%snoalb(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3690,7 +3689,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)%shdmax(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%shdmax(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3701,7 +3700,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)%shdmin(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%shdmin(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3713,7 +3712,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%cnvfac = cn_one/cn_th allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%snowd(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%snowd(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3724,7 +3723,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%sbsno(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%sbsno(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3735,7 +3734,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%evbs(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%evbs(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3746,7 +3745,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%evcw(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%evcw(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3757,7 +3756,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%trans(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%trans(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo if (Model%lsm == Model%lsm_ruc) then @@ -3770,7 +3769,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)%sfalb_lnd(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%sfalb_lnd(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3781,7 +3780,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)%rhofr(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%rhofr(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3792,7 +3791,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)%snowfallac_land(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%snowfallac_land(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3803,7 +3802,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)%acsnow_land(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%acsnow_land(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3814,7 +3813,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%snowmt_land(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%snowmt_land(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3825,7 +3824,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)%snowfallac_ice(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%snowfallac_ice(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3836,7 +3835,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)%acsnow_ice(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%acsnow_ice(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3847,7 +3846,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%snowmt_ice(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%snowmt_ice(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo endif ! RUC lsm @@ -3860,7 +3859,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%cnvfac = cn_one allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%srflag(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%srflag(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3871,7 +3870,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)%int2 => Sfcprop(nb)%stype(:) + ExtDiag(idx)%data(nb)%int2 => Sfcprop%stype(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3882,7 +3881,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)%int2 => Sfcprop(nb)%scolor(:) + ExtDiag(idx)%data(nb)%int2 => Sfcprop%scolor(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo @@ -3894,7 +3893,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)%landfrac(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%landfrac(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3906,7 +3905,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%q2m(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%q2m(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3918,7 +3917,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%intpl_method = 'bilinear' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%t2m(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%t2m(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3929,7 +3928,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)%tsfc(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%tsfc(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3940,7 +3939,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)%usfco(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%usfco(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3951,7 +3950,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)%vsfco(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%vsfco(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo if (Model%frac_grid) then @@ -3965,7 +3964,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)%tiice(:,num) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%tiice(Model%chunk_begin(nb):Model%chunk_end(nb),num) enddo enddo end if @@ -3978,7 +3977,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)%tg3(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%tg3(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -3989,7 +3988,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)%tisfc(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%tisfc(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4000,7 +3999,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)%tprcp(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%tprcp(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4011,7 +4010,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)%int2 => sfcprop(nb)%vtype(:) + ExtDiag(idx)%data(nb)%int2 => sfcprop%vtype(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4022,7 +4021,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)%weasd(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%weasd(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4033,7 +4032,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)%weasdi(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%weasdi(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4044,7 +4043,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)%snodi(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%snodi(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4056,7 +4055,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%cnvfac = cn_one allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => sfcprop(nb)%oro(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%oro(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4067,7 +4066,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)%slmsk(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%slmsk(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4079,7 +4078,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%cnvfac = cn_one/cn_100 allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => sfcprop(nb)%zorl(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%zorl(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4091,7 +4090,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%cnvfac = cn_100 allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => sfcprop(nb)%vfrac(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%vfrac(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo if (Model%lsm==Model%lsm_ruc) then @@ -4104,7 +4103,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%cnvfac = cn_100 allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => sfcprop(nb)%wetness(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%wetness(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo end if @@ -4116,7 +4115,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Coupling(nb)%nirbmdi(:) + ExtDiag(idx)%data(nb)%var2 => Coupling%nirbmdi(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4127,7 +4126,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Coupling(nb)%nirdfdi(:) + ExtDiag(idx)%data(nb)%var2 => Coupling%nirdfdi(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4138,7 +4137,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Coupling(nb)%visbmdi(:) + ExtDiag(idx)%data(nb)%var2 => Coupling%visbmdi(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4149,7 +4148,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => Coupling(nb)%visdfdi(:) + ExtDiag(idx)%data(nb)%var2 => Coupling%visdfdi(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4160,7 +4159,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)%xlaixy(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%xlaixy(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo do num = 1,Model%nvegcat @@ -4173,7 +4172,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)%vegtype_frac(:,num) + ExtDiag(idx)%data(nb)%var2 => sfcprop%vegtype_frac(Model%chunk_begin(nb):Model%chunk_end(nb),num) enddo enddo @@ -4187,7 +4186,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)%soiltype_frac(:,num) + ExtDiag(idx)%data(nb)%var2 => sfcprop%soiltype_frac(Model%chunk_begin(nb):Model%chunk_end(nb),num) enddo enddo @@ -4202,7 +4201,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)%sh2o(:,num) + ExtDiag(idx)%data(nb)%var2 => sfcprop%sh2o(Model%chunk_begin(nb):Model%chunk_end(nb),num) enddo enddo idx = idx + 1 @@ -4213,7 +4212,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)%var3 => sfcprop(nb)%sh2o(:,:) + ExtDiag(idx)%data(nb)%var3 => sfcprop%sh2o(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo else do num = 1,Model%lsoil_lsm @@ -4234,7 +4233,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)%slc(:,num) + ExtDiag(idx)%data(nb)%var2 => sfcprop%slc(Model%chunk_begin(nb):Model%chunk_end(nb),num) enddo enddo idx = idx + 1 @@ -4245,7 +4244,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)%var3 => sfcprop(nb)%slc(:,:) + ExtDiag(idx)%data(nb)%var3 => sfcprop%slc(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif @@ -4260,7 +4259,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)%smois(:,num) + ExtDiag(idx)%data(nb)%var2 => sfcprop%smois(Model%chunk_begin(nb):Model%chunk_end(nb),num) enddo enddo idx = idx + 1 @@ -4271,7 +4270,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)%var3 => sfcprop(nb)%smois(:,:) + ExtDiag(idx)%data(nb)%var3 => sfcprop%smois(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo else do num = 1,Model%lsoil_lsm @@ -4284,7 +4283,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)%smc(:,num) + ExtDiag(idx)%data(nb)%var2 => sfcprop%smc(Model%chunk_begin(nb):Model%chunk_end(nb),num) enddo enddo idx = idx + 1 @@ -4295,7 +4294,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)%var3 => sfcprop(nb)%smc(:,:) + ExtDiag(idx)%data(nb)%var3 => sfcprop%smc(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif @@ -4310,7 +4309,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)%tslb(:,num) + ExtDiag(idx)%data(nb)%var2 => sfcprop%tslb(Model%chunk_begin(nb):Model%chunk_end(nb),num) enddo enddo idx = idx + 1 @@ -4321,7 +4320,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)%var3 => sfcprop(nb)%tslb(:,:) + ExtDiag(idx)%data(nb)%var3 => sfcprop%tslb(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo else do num = 1,Model%lsoil_lsm @@ -4334,7 +4333,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)%stc(:,num) + ExtDiag(idx)%data(nb)%var2 => sfcprop%stc(Model%chunk_begin(nb):Model%chunk_end(nb),num) enddo enddo idx = idx + 1 @@ -4345,7 +4344,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)%var3 => sfcprop(nb)%stc(:,:) + ExtDiag(idx)%data(nb)%var3 => sfcprop%stc(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif @@ -4361,7 +4360,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)%tref(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%tref(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4372,7 +4371,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)%z_c(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%z_c(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4383,7 +4382,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)%c_0(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%c_0(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4394,7 +4393,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)%c_d(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%c_d(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4405,7 +4404,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)%w_0(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%w_0(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4416,7 +4415,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)%w_d(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%w_d(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4427,7 +4426,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)%xt(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%xt(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4438,7 +4437,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)%xs(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%xs(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4449,7 +4448,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)%xu(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%xu(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4460,7 +4459,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)%xv(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%xv(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4471,7 +4470,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)%xz(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%xz(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4482,7 +4481,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)%zm(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%zm(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4493,7 +4492,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)%xtts(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%xtts(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4504,7 +4503,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)%xzts(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%xzts(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4515,7 +4514,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)%d_conv(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%d_conv(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4526,7 +4525,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)%ifd(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%ifd(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4537,7 +4536,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)%dt_cool(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%dt_cool(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4548,7 +4547,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)%qrain(:) + ExtDiag(idx)%data(nb)%var2 => sfcprop%qrain(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo !--------------------------nsst variables endif @@ -4564,7 +4563,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Statein(nb)%qgrs(:,:,Model%ntwa) + ExtDiag(idx)%data(nb)%var3 => Statein%qgrs(Model%chunk_begin(nb):Model%chunk_end(nb),:,Model%ntwa) enddo idx = idx + 1 @@ -4575,7 +4574,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 => Coupling(nb)%nwfa2d + ExtDiag(idx)%data(nb)%var2 => Coupling%nwfa2d(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo elseif (Model%mraerosol) then idx = idx + 1 @@ -4586,7 +4585,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Stateout(nb)%gq0(:,:,Model%ntwa) + ExtDiag(idx)%data(nb)%var3 => Stateout%gq0(Model%chunk_begin(nb):Model%chunk_end(nb),:,Model%ntwa) enddo endif endif @@ -4601,7 +4600,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Statein(nb)%qgrs(:,:,Model%ntia) + ExtDiag(idx)%data(nb)%var3 => Statein%qgrs(Model%chunk_begin(nb):Model%chunk_end(nb),:,Model%ntia) enddo idx = idx + 1 @@ -4612,7 +4611,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 => Coupling(nb)%nifa2d + ExtDiag(idx)%data(nb)%var2 => Coupling%nifa2d(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo else if (Model%mraerosol) then idx = idx + 1 @@ -4623,7 +4622,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Stateout(nb)%gq0(:,:,Model%ntia) + ExtDiag(idx)%data(nb)%var3 => Stateout%gq0(Model%chunk_begin(nb):Model%chunk_end(nb),:,Model%ntia) enddo end if endif @@ -4649,7 +4648,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = .false. allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%thompson_ext_diag3d(:,:,num) + ExtDiag(idx)%data(nb)%var3 => IntDiag%thompson_ext_diag3d(Model%chunk_begin(nb):Model%chunk_end(nb),:,num) enddo enddo end if thompson_extended_diagnostics @@ -4664,7 +4663,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)%fire_heat_flux + ExtDiag(idx)%data(nb)%var2 => Sfcprop%fire_heat_flux(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4675,7 +4674,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)%frac_grid_burned + ExtDiag(idx)%data(nb)%var2 => Sfcprop%frac_grid_burned(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4686,7 +4685,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)%emdust + ExtDiag(idx)%data(nb)%var2 => Sfcprop%emdust(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4697,7 +4696,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)%emseas + ExtDiag(idx)%data(nb)%var2 => Sfcprop%emseas(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4708,7 +4707,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)%emanoc + ExtDiag(idx)%data(nb)%var2 => Sfcprop%emanoc(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4719,7 +4718,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)%coef_bb_dc + ExtDiag(idx)%data(nb)%var2 => Sfcprop%coef_bb_dc(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4730,7 +4729,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 => Coupling(nb)%min_fplume + ExtDiag(idx)%data(nb)%var2 => Coupling%min_fplume(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4741,7 +4740,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 => Coupling(nb)%max_fplume + ExtDiag(idx)%data(nb)%var2 => Coupling%max_fplume(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4752,7 +4751,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 => Coupling(nb)%rrfs_hwp + ExtDiag(idx)%data(nb)%var2 => Coupling%rrfs_hwp(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 ExtDiag(idx)%axes = 2 @@ -4762,7 +4761,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 => Coupling(nb)%rrfs_hwp_ave + ExtDiag(idx)%data(nb)%var2 => Coupling%rrfs_hwp_ave(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo extended_smoke_dust_diagnostics: if ( Model%extended_sd_diags ) then @@ -4775,7 +4774,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 => Coupling(nb)%uspdavg + ExtDiag(idx)%data(nb)%var2 => Coupling%uspdavg(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4786,7 +4785,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 => Coupling(nb)%hpbl_thetav + ExtDiag(idx)%data(nb)%var2 => Coupling%hpbl_thetav(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4797,7 +4796,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 => Coupling(nb)%drydep_flux(:,1) + ExtDiag(idx)%data(nb)%var2 => Coupling%drydep_flux(Model%chunk_begin(nb):Model%chunk_end(nb),1) enddo idx = idx + 1 @@ -4808,7 +4807,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 => Coupling(nb)%drydep_flux(:,2) + ExtDiag(idx)%data(nb)%var2 => Coupling%drydep_flux(Model%chunk_begin(nb):Model%chunk_end(nb),2) enddo idx = idx + 1 @@ -4819,7 +4818,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 => Coupling(nb)%drydep_flux(:,3) + ExtDiag(idx)%data(nb)%var2 => Coupling%drydep_flux(Model%chunk_begin(nb):Model%chunk_end(nb),3) enddo idx = idx + 1 @@ -4830,7 +4829,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 => Coupling(nb)%wetdpr_flux(:,1) + ExtDiag(idx)%data(nb)%var2 => Coupling%wetdpr_flux(Model%chunk_begin(nb):Model%chunk_end(nb),1) enddo idx = idx + 1 @@ -4841,7 +4840,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 => Coupling(nb)%wetdpr_flux(:,2) + ExtDiag(idx)%data(nb)%var2 => Coupling%wetdpr_flux(Model%chunk_begin(nb):Model%chunk_end(nb),2) enddo idx = idx + 1 @@ -4852,7 +4851,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 => Coupling(nb)%wetdpr_flux(:,3) + ExtDiag(idx)%data(nb)%var2 => Coupling%wetdpr_flux(Model%chunk_begin(nb):Model%chunk_end(nb),3) enddo idx = idx + 1 @@ -4863,7 +4862,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 => Coupling(nb)%wetdpc_flux(:,1) + ExtDiag(idx)%data(nb)%var2 => Coupling%wetdpc_flux(Model%chunk_begin(nb):Model%chunk_end(nb),1) enddo idx = idx + 1 @@ -4874,7 +4873,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 => Coupling(nb)%wetdpc_flux(:,2) + ExtDiag(idx)%data(nb)%var2 => Coupling%wetdpc_flux(Model%chunk_begin(nb):Model%chunk_end(nb),2) enddo idx = idx + 1 @@ -4885,7 +4884,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 => Coupling(nb)%wetdpc_flux(:,3) + ExtDiag(idx)%data(nb)%var2 => Coupling%wetdpc_flux(Model%chunk_begin(nb):Model%chunk_end(nb),3) enddo idx = idx + 1 @@ -4896,7 +4895,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)%peak_hr + ExtDiag(idx)%data(nb)%var2 => Sfcprop%peak_hr(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4907,7 +4906,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)%int2 => Sfcprop(nb)%fire_type + ExtDiag(idx)%data(nb)%int2 => Sfcprop%fire_type(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4918,7 +4917,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)%lu_nofire + ExtDiag(idx)%data(nb)%var2 => Sfcprop%lu_nofire(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4929,7 +4928,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)%lu_qfire + ExtDiag(idx)%data(nb)%var2 => Sfcprop%lu_qfire(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -4940,7 +4939,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)%fhist + ExtDiag(idx)%data(nb)%var2 => Sfcprop%fhist(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo if (Model%ebb_dcycle == 2 ) then @@ -4953,7 +4952,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)%smoke2d_RRFS(:,3) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%smoke2d_RRFS(Model%chunk_begin(nb):Model%chunk_end(nb),3) enddo endif @@ -4969,7 +4968,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)%ebb_smoke_in + ExtDiag(idx)%data(nb)%var2 => Sfcprop%ebb_smoke_in(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo @@ -4981,7 +4980,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)%frp_output + ExtDiag(idx)%data(nb)%var2 => Sfcprop%frp_output(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo smoke_forecast_mode: if (Model%ebb_dcycle == 2 ) then @@ -4994,7 +4993,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)%smoke2d_RRFS(:,1) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%smoke2d_RRFS(Model%chunk_begin(nb):Model%chunk_end(nb),1) enddo idx = idx + 1 @@ -5005,7 +5004,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)%smoke2d_RRFS(:,2) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%smoke2d_RRFS(Model%chunk_begin(nb):Model%chunk_end(nb),2) enddo @@ -5017,7 +5016,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)%smoke2d_RRFS(:,4) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%smoke2d_RRFS(Model%chunk_begin(nb):Model%chunk_end(nb),4) enddo endif smoke_forecast_mode @@ -5030,7 +5029,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Coupling(nb)%ebu_smoke(:,:) + ExtDiag(idx)%data(nb)%var3 => Coupling%ebu_smoke(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -5041,7 +5040,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Radtend(nb)%ext550(:,:) + ExtDiag(idx)%data(nb)%var3 => Radtend%ext550(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif @@ -5060,7 +5059,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Tbd(nb)%dfi_radar_tten(:,:,i) + ExtDiag(idx)%data(nb)%var3 => Tbd%dfi_radar_tten(Model%chunk_begin(nb):Model%chunk_end(nb),:,i) enddo enddo @@ -5075,7 +5074,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%cnvfac = 5.0_kind_phys allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%ltg1_max + ExtDiag(idx)%data(nb)%var2 => IntDiag%ltg1_max(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -5088,7 +5087,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%cnvfac = 5.0_kind_phys allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%ltg2_max + ExtDiag(idx)%data(nb)%var2 => IntDiag%ltg2_max(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -5101,7 +5100,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%cnvfac = 5.0_kind_phys allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%ltg3_max + ExtDiag(idx)%data(nb)%var2 => IntDiag%ltg3_max(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo endif @@ -5116,7 +5115,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Tbd(nb)%phy_f3d(:,:,Model%nleffr) + ExtDiag(idx)%data(nb)%var3 => Tbd%phy_f3d(Model%chunk_begin(nb):Model%chunk_end(nb),:,Model%nleffr) enddo idx = idx + 1 ExtDiag(idx)%axes = 3 @@ -5126,7 +5125,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Tbd(nb)%phy_f3d(:,:,Model%nieffr) + ExtDiag(idx)%data(nb)%var3 => Tbd%phy_f3d(Model%chunk_begin(nb):Model%chunk_end(nb),:,Model%nieffr) enddo idx = idx + 1 ExtDiag(idx)%axes = 3 @@ -5136,7 +5135,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Tbd(nb)%phy_f3d(:,:,Model%nseffr) + ExtDiag(idx)%data(nb)%var3 => Tbd%phy_f3d(Model%chunk_begin(nb):Model%chunk_end(nb),:,Model%nseffr) enddo endif @@ -5151,7 +5150,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 => IntDiag(nb)%ztop_plume(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%ztop_plume(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -5162,7 +5161,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 => IntDiag(nb)%maxmf(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%maxmf(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -5173,7 +5172,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 => IntDiag(nb)%maxwidth(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag%maxwidth(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo endif @@ -5186,7 +5185,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)%zol(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%zol(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -5197,7 +5196,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)%flhc(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%flhc(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo idx = idx + 1 @@ -5208,7 +5207,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)%flqc(:) + ExtDiag(idx)%data(nb)%var2 => Sfcprop%flqc(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo endif @@ -5221,7 +5220,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Tbd(nb)%CLDFRA_BL(:,:) + ExtDiag(idx)%data(nb)%var3 => Tbd%CLDFRA_BL(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -5232,7 +5231,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Tbd(nb)%QC_BL(:,:) + ExtDiag(idx)%data(nb)%var3 => Tbd%QC_BL(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -5243,7 +5242,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Tbd(nb)%el_pbl(:,:) + ExtDiag(idx)%data(nb)%var3 => Tbd%el_pbl(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -5254,7 +5253,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Tbd(nb)%QKE(:,:) + ExtDiag(idx)%data(nb)%var3 => Tbd%QKE(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo if (Model%bl_mynn_output > 0) then @@ -5267,7 +5266,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%edmf_a(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%edmf_a(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -5278,7 +5277,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%edmf_w(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%edmf_w(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -5289,7 +5288,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%edmf_qt(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%edmf_qt(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -5300,7 +5299,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%edmf_thl(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%edmf_thl(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -5311,7 +5310,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%edmf_ent(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%edmf_ent(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -5322,7 +5321,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%edmf_qc(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%edmf_qc(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -5333,7 +5332,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%sub_thl(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%sub_thl(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -5344,7 +5343,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%sub_sqv(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%sub_sqv(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -5355,7 +5354,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%det_thl(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%det_thl(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo idx = idx + 1 @@ -5366,7 +5365,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%det_sqv(:,:) + ExtDiag(idx)%data(nb)%var3 => IntDiag%det_sqv(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif @@ -5430,7 +5429,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = Model%aux2d_time_avg(num) allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%aux2d(:,num) + ExtDiag(idx)%data(nb)%var2 => IntDiag%aux2d(Model%chunk_begin(nb):Model%chunk_end(nb),num) enddo enddo @@ -5447,7 +5446,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%time_avg = Model%aux3d_time_avg(num) allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%aux3d(:,:,num) + ExtDiag(idx)%data(nb)%var3 => IntDiag%aux3d(Model%chunk_begin(nb):Model%chunk_end(nb),:,num) enddo enddo @@ -5457,7 +5456,7 @@ subroutine clm_lake_externaldiag_populate(ExtDiag, Model, Sfcprop, idx, cn_one, implicit none type(GFS_externaldiag_type), intent(inout) :: ExtDiag(:) type(GFS_control_type), intent(in) :: Model - type(GFS_sfcprop_type), intent(in) :: Sfcprop(:) + type(GFS_sfcprop_type), intent(in) :: Sfcprop integer, intent(inout) :: idx integer, intent(in) :: nblks real(kind=kind_phys), intent(in) :: cn_one @@ -5466,39 +5465,39 @@ subroutine clm_lake_externaldiag_populate(ExtDiag, Model, Sfcprop, idx, cn_one, integer :: nk, idx0, iblk do iblk=1,nblks - call link_all_levels(Sfcprop(iblk)%lake_snow_z3d, 'lake_snow_z3d', 'lake snow level depth', 'm') + call link_all_levels(Sfcprop%lake_snow_z3d(Model%chunk_begin(iblk):Model%chunk_end(iblk),:), 'lake_snow_z3d', 'lake snow level depth', 'm') enddo do iblk=1,nblks - call link_all_levels(Sfcprop(iblk)%lake_snow_dz3d, 'lake_snow_dz3d', 'lake snow level thickness', 'm') + call link_all_levels(Sfcprop%lake_snow_dz3d(Model%chunk_begin(iblk):Model%chunk_end(iblk),:), 'lake_snow_dz3d', 'lake snow level thickness', 'm') enddo do iblk=1,nblks - call link_all_levels(Sfcprop(iblk)%lake_snow_zi3d, 'lake_snow_zi3d', 'lake snow interface depth', 'm') + call link_all_levels(Sfcprop%lake_snow_zi3d(Model%chunk_begin(iblk):Model%chunk_end(iblk),:), 'lake_snow_zi3d', 'lake snow interface depth', 'm') enddo do iblk=1,nblks - call link_all_levels(Sfcprop(iblk)%lake_h2osoi_vol3d, 'lake_h2osoi_vol3d', 'volumetric soil water', 'm3 m-3') + call link_all_levels(Sfcprop%lake_h2osoi_vol3d(Model%chunk_begin(iblk):Model%chunk_end(iblk),:), 'lake_h2osoi_vol3d', 'volumetric soil water', 'm3 m-3') enddo do iblk=1,nblks - call link_all_levels(Sfcprop(iblk)%lake_h2osoi_liq3d, 'lake_h2osoi_liq3d', 'soil liquid water content', 'kg m-2') + call link_all_levels(Sfcprop%lake_h2osoi_liq3d(Model%chunk_begin(iblk):Model%chunk_end(iblk),:), 'lake_h2osoi_liq3d', 'soil liquid water content', 'kg m-2') enddo do iblk=1,nblks - call link_all_levels(Sfcprop(iblk)%lake_h2osoi_ice3d, 'lake_h2osoi_ice3d', 'soil ice water content', 'kg m-2') + call link_all_levels(Sfcprop%lake_h2osoi_ice3d(Model%chunk_begin(iblk):Model%chunk_end(iblk),:), 'lake_h2osoi_ice3d', 'soil ice water content', 'kg m-2') enddo do iblk=1,nblks - call link_all_levels(Sfcprop(iblk)%lake_t_soisno3d, 'lake_t_soisno3d', 'snow or soil level temperature', 'K') + call link_all_levels(Sfcprop%lake_t_soisno3d(Model%chunk_begin(iblk):Model%chunk_end(iblk),:), 'lake_t_soisno3d', 'snow or soil level temperature', 'K') enddo do iblk=1,nblks - call link_all_levels(Sfcprop(iblk)%lake_t_lake3d, 'lake_t_lake3d', 'lake layer temperature', 'K') + call link_all_levels(Sfcprop%lake_t_lake3d(Model%chunk_begin(iblk):Model%chunk_end(iblk),:), 'lake_t_lake3d', 'lake layer temperature', 'K') enddo do iblk=1,nblks - call link_all_levels(Sfcprop(iblk)%lake_icefrac3d, 'lake_icefrac3d', 'lake fractional ice cover', 'fraction') + call link_all_levels(Sfcprop%lake_icefrac3d(Model%chunk_begin(iblk):Model%chunk_end(iblk),:), 'lake_icefrac3d', 'lake fractional ice cover', 'fraction') enddo contains diff --git a/ccpp/driver/GFS_init.F90 b/ccpp/driver/GFS_init.F90 index 793ed4c2e..694bacdc5 100644 --- a/ccpp/driver/GFS_init.F90 +++ b/ccpp/driver/GFS_init.F90 @@ -36,15 +36,15 @@ subroutine GFS_initialize (Model, Statein, Stateout, Sfcprop, & !--- interface variables type(GFS_control_type), intent(inout) :: Model - type(GFS_statein_type), intent(inout) :: Statein(:) - type(GFS_stateout_type), intent(inout) :: Stateout(:) - type(GFS_sfcprop_type), intent(inout) :: Sfcprop(:) - type(GFS_coupling_type), intent(inout) :: Coupling(:) - type(GFS_grid_type), intent(inout) :: Grid(:) - type(GFS_tbd_type), intent(inout) :: Tbd(:) - type(GFS_cldprop_type), intent(inout) :: Cldprop(:) - type(GFS_radtend_type), intent(inout) :: Radtend(:) - type(GFS_diag_type), intent(inout) :: Diag(:) + type(GFS_statein_type), intent(inout) :: Statein + type(GFS_stateout_type), intent(inout) :: Stateout + type(GFS_sfcprop_type), intent(inout) :: Sfcprop + type(GFS_coupling_type), intent(inout) :: Coupling + type(GFS_grid_type), intent(inout) :: Grid + type(GFS_tbd_type), intent(inout) :: Tbd + type(GFS_cldprop_type), intent(inout) :: Cldprop + type(GFS_radtend_type), intent(inout) :: Radtend + type(GFS_diag_type), intent(inout) :: Diag type(GFS_interstitial_type), intent(inout) :: Interstitial(:) type(GFS_init_type), intent(in) :: Init_parm @@ -82,19 +82,15 @@ subroutine GFS_initialize (Model, Statein, Stateout, Sfcprop, & Init_parm%fcst_mpi_comm, & Init_parm%fcst_ntasks, nthrds) - do nb = 1,nblks - ix = Init_parm%blksz(nb) - call Statein (nb)%create (ix, Model) - call Stateout (nb)%create (ix, Model) - call Sfcprop (nb)%create (ix, Model) - call Coupling (nb)%create (ix, Model) - call Grid (nb)%create (ix, Model) - call Tbd (nb)%create (ix, Model) - call Cldprop (nb)%create (ix, Model) - call Radtend (nb)%create (ix, Model) -!--- internal representation of diagnostics - call Diag (nb)%create (ix, Model) - enddo + call Statein%create(Model) + call Stateout%create(Model) + call Grid%create(Model) + call Tbd%create(Model) + call Cldprop%create(Model) + call Sfcprop%create(Model) + call Radtend%create(Model) + call Coupling%create(Model) + call Diag%create(Model) ! This logic deals with non-uniform block sizes for CCPP. When non-uniform block sizes ! are used, it is required that only the last block has a different (smaller) size than @@ -138,34 +134,27 @@ subroutine GFS_grid_populate (Grid, xlon, xlat, area) implicit none - type(GFS_grid_type) :: Grid(:) + type(GFS_grid_type) :: Grid real(kind=kind_phys), intent(in) :: xlon(:,:) real(kind=kind_phys), intent(in) :: xlat(:,:) real(kind=kind_phys), intent(in) :: area(:,:) real(kind=kind_phys), parameter :: rad2deg = 180.0_kind_phys/pi !--- local variables - integer :: nb, ix, blksz, i, j - - blksz = size(Grid(1)%xlon) + integer :: ix, i, j - nb = 1 ix = 0 do j = 1,size(xlon,2) do i = 1,size(xlon,1) ix=ix+1 - if (ix > blksz) then - nb = nb + 1 - ix = 1 - endif - Grid(nb)%xlon(ix) = xlon(i,j) - Grid(nb)%xlat(ix) = xlat(i,j) - Grid(nb)%xlat_d(ix) = xlat(i,j) * rad2deg - Grid(nb)%xlon_d(ix) = xlon(i,j) * rad2deg - Grid(nb)%sinlat(ix) = sin(Grid(nb)%xlat(ix)) - Grid(nb)%coslat(ix) = sqrt(1.0_kind_phys - Grid(nb)%sinlat(ix)*Grid(nb)%sinlat(ix)) - Grid(nb)%area(ix) = area(i,j) - Grid(nb)%dx(ix) = sqrt(area(i,j)) + Grid%xlon(ix) = xlon(i,j) + Grid%xlat(ix) = xlat(i,j) + Grid%xlat_d(ix) = xlat(i,j) * rad2deg + Grid%xlon_d(ix) = xlon(i,j) * rad2deg + Grid%sinlat(ix) = sin(Grid%xlat(ix)) + Grid%coslat(ix) = sqrt(1.0_kind_phys - Grid%sinlat(ix)*Grid%sinlat(ix)) + Grid%area(ix) = area(i,j) + Grid%dx(ix) = sqrt(area(i,j)) enddo enddo diff --git a/ccpp/driver/GFS_restart.F90 b/ccpp/driver/GFS_restart.F90 index 890aeb9fb..d82a1b89f 100644 --- a/ccpp/driver/GFS_restart.F90 +++ b/ccpp/driver/GFS_restart.F90 @@ -46,15 +46,15 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & !----------------------------------------------------------------------------------------! type(GFS_restart_type), intent(inout) :: Restart type(GFS_control_type), intent(in) :: Model - type(GFS_statein_type), intent(in) :: Statein(:) - type(GFS_stateout_type), intent(in) :: Stateout(:) - type(GFS_sfcprop_type), intent(in) :: Sfcprop(:) - type(GFS_coupling_type), intent(in) :: Coupling(:) - type(GFS_grid_type), intent(in) :: Grid(:) - type(GFS_tbd_type), intent(in) :: Tbd(:) - type(GFS_cldprop_type), intent(in) :: Cldprop(:) - type(GFS_radtend_type), intent(in) :: Radtend(:) - type(GFS_diag_type), intent(in) :: IntDiag(:) + type(GFS_statein_type), intent(in) :: Statein + type(GFS_stateout_type), intent(in) :: Stateout + type(GFS_sfcprop_type), intent(in) :: Sfcprop + type(GFS_coupling_type), intent(in) :: Coupling + type(GFS_grid_type), intent(in) :: Grid + type(GFS_tbd_type), intent(in) :: Tbd + type(GFS_cldprop_type), intent(in) :: Cldprop + type(GFS_radtend_type), intent(in) :: Radtend + type(GFS_diag_type), intent(in) :: IntDiag type(GFS_init_type), intent(in) :: Init_parm type(GFS_externaldiag_type),intent(in) :: ExtDiag(:) @@ -206,9 +206,9 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & Restart%name2d(2) = 'cvt' Restart%name2d(3) = 'cvb' do nb = 1,nblks - Restart%data(nb,1)%var2p => Cldprop(nb)%cv(:) - Restart%data(nb,2)%var2p => Cldprop(nb)%cvt(:) - Restart%data(nb,3)%var2p => Cldprop(nb)%cvb(:) + Restart%data(nb,1)%var2p => Cldprop%cv(Model%chunk_begin(nb):Model%chunk_end(nb)) + Restart%data(nb,2)%var2p => Cldprop%cvt(Model%chunk_begin(nb):Model%chunk_end(nb)) + Restart%data(nb,3)%var2p => Cldprop%cvb(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo !--- phy_f2d variables @@ -218,7 +218,7 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & write(c2,'(i2.2)') num Restart%name2d(num+offset) = 'phy_f2d_'//c2 do nb = 1,nblks - Restart%data(nb,num+offset)%var2p => Tbd(nb)%phy_f2d(:,num) + Restart%data(nb,num+offset)%var2p => Tbd%phy_f2d(Model%chunk_begin(nb):Model%chunk_end(nb),num) enddo enddo offset = offset + Model%ntot2d @@ -230,7 +230,7 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & write(c2,'(i2.2)') num Restart%name2d(num+offset) = 'phy_fctd_'//c2 do nb = 1,nblks - Restart%data(nb,num+offset)%var2p => Tbd(nb)%phy_fctd(:,num) + Restart%data(nb,num+offset)%var2p => Tbd%phy_fctd(Model%chunk_begin(nb):Model%chunk_end(nb),num) enddo enddo offset = offset + Model%nctp @@ -254,7 +254,7 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & num = num + 1 Restart%name2d(num) = 'ca_condition' do nb = 1,nblks - Restart%data(nb,num)%var2p => Coupling(nb)%condition(:) + Restart%data(nb,num)%var2p => Coupling%condition(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo endif ! Unified convection @@ -262,17 +262,17 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & num = num + 1 Restart%name2d(num) = 'gf_2d_conv_act' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%conv_act(:) + Restart%data(nb,num)%var2p => Sfcprop%conv_act(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'gf_2d_conv_act_m' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%conv_act_m(:) + Restart%data(nb,num)%var2p => Sfcprop%conv_act_m(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'aod_gf' do nb = 1,nblks - Restart%data(nb,num)%var2p => Tbd(nb)%aod_gf(:) + Restart%data(nb,num)%var2p => Tbd%aod_gf(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo endif !--- RAP/HRRR-specific variables, 2D @@ -281,17 +281,17 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & num = num + 1 Restart%name2d(num) = 'gf_2d_conv_act' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%conv_act(:) + Restart%data(nb,num)%var2p => Sfcprop%conv_act(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'gf_2d_conv_act_m' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%conv_act_m(:) + Restart%data(nb,num)%var2p => Sfcprop%conv_act_m(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'aod_gf' do nb = 1,nblks - Restart%data(nb,num)%var2p => Tbd(nb)%aod_gf(:) + Restart%data(nb,num)%var2p => Tbd%aod_gf(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo endif ! NoahMP @@ -299,52 +299,52 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & num = num + 1 Restart%name2d(num) = 'noahmp_2d_raincprv' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%raincprv(:) + Restart%data(nb,num)%var2p => Sfcprop%raincprv(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'noahmp_2d_rainncprv' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%rainncprv(:) + Restart%data(nb,num)%var2p => Sfcprop%rainncprv(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'noahmp_2d_iceprv' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%iceprv(:) + Restart%data(nb,num)%var2p => Sfcprop%iceprv(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'noahmp_2d_snowprv' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%snowprv(:) + Restart%data(nb,num)%var2p => Sfcprop%snowprv(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'noahmp_2d_graupelprv' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%graupelprv(:) + Restart%data(nb,num)%var2p => Sfcprop%graupelprv(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'noahmp_2d_draincprv' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%draincprv(:) + Restart%data(nb,num)%var2p => Sfcprop%draincprv(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'noahmp_2d_drainncprv' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%drainncprv(:) + Restart%data(nb,num)%var2p => Sfcprop%drainncprv(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'noahmp_2d_diceprv' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%diceprv(:) + Restart%data(nb,num)%var2p => Sfcprop%diceprv(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'noahmp_2d_dsnowprv' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%dsnowprv(:) + Restart%data(nb,num)%var2p => Sfcprop%dsnowprv(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'noahmp_2d_dgraupelprv' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%dgraupelprv(:) + Restart%data(nb,num)%var2p => Sfcprop%dgraupelprv(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo endif ! RUC @@ -352,27 +352,27 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & num = num + 1 Restart%name2d(num) = 'ruc_2d_raincprv' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%raincprv(:) + Restart%data(nb,num)%var2p => Sfcprop%raincprv(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'ruc_2d_rainncprv' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%rainncprv(:) + Restart%data(nb,num)%var2p => Sfcprop%rainncprv(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'ruc_2d_iceprv' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%iceprv(:) + Restart%data(nb,num)%var2p => Sfcprop%iceprv(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'ruc_2d_snowprv' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%snowprv(:) + Restart%data(nb,num)%var2p => Sfcprop%snowprv(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'ruc_2d_graupelprv' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%graupelprv(:) + Restart%data(nb,num)%var2p => Sfcprop%graupelprv(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo endif ! MYNN SFC @@ -380,67 +380,67 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & num = num + 1 Restart%name2d(num) = 'mynn_2d_uustar' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%uustar(:) + Restart%data(nb,num)%var2p => Sfcprop%uustar(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'mynn_2d_hpbl' do nb = 1,nblks - Restart%data(nb,num)%var2p => Tbd(nb)%hpbl(:) + Restart%data(nb,num)%var2p => Tbd%hpbl(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'mynn_2d_ustm' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%ustm(:) + Restart%data(nb,num)%var2p => Sfcprop%ustm(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'mynn_2d_zol' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%zol(:) + Restart%data(nb,num)%var2p => Sfcprop%zol(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'mynn_2d_mol' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%mol(:) + Restart%data(nb,num)%var2p => Sfcprop%mol(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'mynn_2d_flhc' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%flhc(:) + Restart%data(nb,num)%var2p => Sfcprop%flhc(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'mynn_2d_flqc' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%flqc(:) + Restart%data(nb,num)%var2p => Sfcprop%flqc(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'mynn_2d_chs2' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%chs2(:) + Restart%data(nb,num)%var2p => Sfcprop%chs2(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'mynn_2d_cqs2' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%cqs2(:) + Restart%data(nb,num)%var2p => Sfcprop%cqs2(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'mynn_2d_lh' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%lh(:) + Restart%data(nb,num)%var2p => Sfcprop%lh(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'mynn_2d_hflx' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%hflx(:) + Restart%data(nb,num)%var2p => Sfcprop%hflx(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'mynn_2d_evap' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%evap(:) + Restart%data(nb,num)%var2p => Sfcprop%evap(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'mynn_2d_qss' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%qss(:) + Restart%data(nb,num)%var2p => Sfcprop%qss(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo endif ! Save rain prev for lake if surface layer doesn't. @@ -449,12 +449,12 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & num = num + 1 Restart%name2d(num) = 'raincprv' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%raincprv(:) + Restart%data(nb,num)%var2p => Sfcprop%raincprv(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'rainncprv' do nb = 1,nblks - Restart%data(nb,num)%var2p => Sfcprop(nb)%rainncprv(:) + Restart%data(nb,num)%var2p => Sfcprop%rainncprv(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo endif ! Thompson aerosol-aware @@ -462,12 +462,12 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & num = num + 1 Restart%name2d(num) = 'thompson_2d_nwfa2d' do nb = 1,nblks - Restart%data(nb,num)%var2p => Coupling(nb)%nwfa2d(:) + Restart%data(nb,num)%var2p => Coupling%nwfa2d(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'thompson_2d_nifa2d' do nb = 1,nblks - Restart%data(nb,num)%var2p => Coupling(nb)%nifa2d(:) + Restart%data(nb,num)%var2p => Coupling%nifa2d(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo endif @@ -482,7 +482,7 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & write(Restart%name2d(num),'("cap_suppress_",I0)') itime endif do nb = 1,nblks - Restart%data(nb,num)%var2p => Tbd(nb)%cap_suppress(:,Model%ix_dfi_radar(itime)) + Restart%data(nb,num)%var2p => Tbd%cap_suppress(Model%chunk_begin(nb):Model%chunk_end(nb),Model%ix_dfi_radar(itime)) enddo endif enddo @@ -493,32 +493,32 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & num = num + 1 Restart%name2d(num) = 'ddvel_1' do nb = 1,nblks - Restart%data(nb,num)%var2p => Coupling(nb)%ddvel(:,1) + Restart%data(nb,num)%var2p => Coupling%ddvel(Model%chunk_begin(nb):Model%chunk_end(nb),1) enddo num = num + 1 Restart%name2d(num) = 'ddvel_2' do nb = 1,nblks - Restart%data(nb,num)%var2p => Coupling(nb)%ddvel(:,2) + Restart%data(nb,num)%var2p => Coupling%ddvel(Model%chunk_begin(nb):Model%chunk_end(nb),2) enddo num = num + 1 Restart%name2d(num) = 'min_fplume' do nb = 1,nblks - Restart%data(nb,num)%var2p => Coupling(nb)%min_fplume(:) + Restart%data(nb,num)%var2p => Coupling%min_fplume(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'max_fplume' do nb = 1,nblks - Restart%data(nb,num)%var2p => Coupling(nb)%max_fplume(:) + Restart%data(nb,num)%var2p => Coupling%max_fplume(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'rrfs_hwp' do nb = 1,nblks - Restart%data(nb,num)%var2p => Coupling(nb)%rrfs_hwp(:) + Restart%data(nb,num)%var2p => Coupling%rrfs_hwp(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo num = num + 1 Restart%name2d(num) = 'rrfs_hwp_ave' do nb = 1,nblks - Restart%data(nb,num)%var2p => Coupling(nb)%rrfs_hwp_ave(:) + Restart%data(nb,num)%var2p => Coupling%rrfs_hwp_ave(Model%chunk_begin(nb):Model%chunk_end(nb)) enddo endif @@ -528,14 +528,14 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & write(c2,'(i2.2)') num Restart%name3d(num) = 'phy_f3d_'//c2 do nb = 1,nblks - Restart%data(nb,num)%var3p => Tbd(nb)%phy_f3d(:,:,num) + Restart%data(nb,num)%var3p => Tbd%phy_f3d(Model%chunk_begin(nb):Model%chunk_end(nb),:,num) enddo enddo if (Model%lrefres) then num = Model%ntot3d+1 restart%name3d(num) = 'ref_f3d' do nb = 1,nblks - Restart%data(nb,num)%var3p => IntDiag(nb)%refl_10cm(:,:) + Restart%data(nb,num)%var3p => IntDiag%refl_10cm(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif if (Model%lrefres) then @@ -549,12 +549,12 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & num = num + 1 Restart%name3d(num) = 'sas_3d_qgrs_dsave' do nb = 1,nblks - Restart%data(nb,num)%var3p => Tbd(nb)%prevsq(:,:) + Restart%data(nb,num)%var3p => Tbd%prevsq(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo num = num + 1 Restart%name3d(num) = 'sas_3d_dqdt_qmicro' do nb = 1,nblks - Restart%data(nb,num)%var3p => Coupling(nb)%dqdt_qmicro(:,:) + Restart%data(nb,num)%var3p => Coupling%dqdt_qmicro(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif @@ -564,7 +564,7 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & num = num + 1 Restart%name3d(num) = 'cnv_3d_ud_mf' do nb = 1,nblks - Restart%data(nb,num)%var3p => Tbd(nb)%ud_mf(:,:) + Restart%data(nb,num)%var3p => Tbd%ud_mf(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif @@ -573,17 +573,17 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & num = num + 1 Restart%name3d(num) = 'gf_3d_prevst' do nb = 1,nblks - Restart%data(nb,num)%var3p => Tbd(nb)%prevst(:,:) + Restart%data(nb,num)%var3p => Tbd%prevst(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo num = num + 1 Restart%name3d(num) = 'gf_3d_prevsq' do nb = 1,nblks - Restart%data(nb,num)%var3p => Tbd(nb)%prevsq(:,:) + Restart%data(nb,num)%var3p => Tbd%prevsq(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo num = num + 1 Restart%name3d(num) = 'gf_3d_qci_conv' do nb = 1,nblks - Restart%data(nb,num)%var3p => Coupling(nb)%qci_conv(:,:) + Restart%data(nb,num)%var3p => Coupling%qci_conv(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif @@ -593,17 +593,17 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & num = num + 1 Restart%name3d(num) = 'gf_3d_prevst' do nb = 1,nblks - Restart%data(nb,num)%var3p => Tbd(nb)%prevst(:,:) + Restart%data(nb,num)%var3p => Tbd%prevst(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo num = num + 1 Restart%name3d(num) = 'gf_3d_prevsq' do nb = 1,nblks - Restart%data(nb,num)%var3p => Tbd(nb)%prevsq(:,:) + Restart%data(nb,num)%var3p => Tbd%prevsq(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo num = num + 1 Restart%name3d(num) = 'gf_3d_qci_conv' do nb = 1,nblks - Restart%data(nb,num)%var3p => Coupling(nb)%qci_conv(:,:) + Restart%data(nb,num)%var3p => Coupling%qci_conv(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif ! MYNN PBL @@ -611,47 +611,47 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & num = num + 1 Restart%name3d(num) = 'mynn_3d_cldfra_bl' do nb = 1,nblks - Restart%data(nb,num)%var3p => Tbd(nb)%cldfra_bl(:,:) + Restart%data(nb,num)%var3p => Tbd%cldfra_bl(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo num = num + 1 Restart%name3d(num) = 'mynn_3d_qc_bl' do nb = 1,nblks - Restart%data(nb,num)%var3p => Tbd(nb)%qc_bl(:,:) + Restart%data(nb,num)%var3p => Tbd%qc_bl(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo num = num + 1 Restart%name3d(num) = 'mynn_3d_qi_bl' do nb = 1,nblks - Restart%data(nb,num)%var3p => Tbd(nb)%qi_bl(:,:) + Restart%data(nb,num)%var3p => Tbd%qi_bl(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo num = num + 1 Restart%name3d(num) = 'mynn_3d_el_pbl' do nb = 1,nblks - Restart%data(nb,num)%var3p => Tbd(nb)%el_pbl(:,:) + Restart%data(nb,num)%var3p => Tbd%el_pbl(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo num = num + 1 Restart%name3d(num) = 'mynn_3d_sh3d' do nb = 1,nblks - Restart%data(nb,num)%var3p => Tbd(nb)%sh3d(:,:) + Restart%data(nb,num)%var3p => Tbd%sh3d(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo num = num + 1 Restart%name3d(num) = 'mynn_3d_qke' do nb = 1,nblks - Restart%data(nb,num)%var3p => Tbd(nb)%qke(:,:) + Restart%data(nb,num)%var3p => Tbd%qke(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo num = num + 1 Restart%name3d(num) = 'mynn_3d_tsq' do nb = 1,nblks - Restart%data(nb,num)%var3p => Tbd(nb)%tsq(:,:) + Restart%data(nb,num)%var3p => Tbd%tsq(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo num = num + 1 Restart%name3d(num) = 'mynn_3d_qsq' do nb = 1,nblks - Restart%data(nb,num)%var3p => Tbd(nb)%qsq(:,:) + Restart%data(nb,num)%var3p => Tbd%qsq(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo num = num + 1 Restart%name3d(num) = 'mynn_3d_cov' do nb = 1,nblks - Restart%data(nb,num)%var3p => Tbd(nb)%cov(:,:) + Restart%data(nb,num)%var3p => Tbd%cov(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif @@ -666,8 +666,8 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & write(Restart%name3d(num),'("radar_tten_",I0)') itime endif do nb = 1,nblks - Restart%data(nb,num)%var3p => Tbd(nb)%dfi_radar_tten( & - :,:,Model%ix_dfi_radar(itime)) + Restart%data(nb,num)%var3p => Tbd%dfi_radar_tten( & + Model%chunk_begin(nb):Model%chunk_end(nb),:,Model%ix_dfi_radar(itime)) enddo endif enddo @@ -677,22 +677,22 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & num = num + 1 Restart%name3d(num) = 'chem3d_1' do nb = 1,nblks - Restart%data(nb,num)%var3p => Coupling(nb)%chem3d(:,:,1) + Restart%data(nb,num)%var3p => Coupling%chem3d(Model%chunk_begin(nb):Model%chunk_end(nb),:,1) enddo num = num + 1 Restart%name3d(num) = 'chem3d_2' do nb = 1,nblks - Restart%data(nb,num)%var3p => Coupling(nb)%chem3d(:,:,2) + Restart%data(nb,num)%var3p => Coupling%chem3d(Model%chunk_begin(nb):Model%chunk_end(nb),:,2) enddo num = num + 1 Restart%name3d(num) = 'chem3d_3' do nb = 1,nblks - Restart%data(nb,num)%var3p => Coupling(nb)%chem3d(:,:,3) + Restart%data(nb,num)%var3p => Coupling%chem3d(Model%chunk_begin(nb):Model%chunk_end(nb),:,3) enddo num = num + 1 Restart%name3d(num) = 'ext550' do nb = 1,nblks - Restart%data(nb,num)%var3p => Radtend(nb)%ext550(:,:) + Restart%data(nb,num)%var3p => Radtend%ext550(Model%chunk_begin(nb):Model%chunk_end(nb),:) enddo endif diff --git a/ccpp/physics b/ccpp/physics index 2a50cccd9..1d9b07650 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 2a50cccd916cceafaf031f4cd14f2ecef277be8f +Subproject commit 1d9b076503c27cd4cfa8b22a977a71e889cbb149 diff --git a/cpl/module_block_data.F90 b/cpl/module_block_data.F90 index b5dc6cc80..493005348 100644 --- a/cpl/module_block_data.F90 +++ b/cpl/module_block_data.F90 @@ -73,7 +73,7 @@ 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) + subroutine block_copy_1d_i4_to_2d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) @@ -81,11 +81,12 @@ subroutine block_copy_1d_i4_to_2d_r8(destin_ptr, source_ptr, block, block_index, type(block_control_type), intent(in) :: block integer, intent(in) :: block_index real(kind=8), optional, intent(in) :: scale_factor + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb + integer :: i, ib, ix, im, j, jb real(kind=8) :: factor ! -- begin @@ -93,13 +94,14 @@ subroutine block_copy_1d_i4_to_2d_r8(destin_ptr, source_ptr, block, block_index, if (associated(destin_ptr) .and. associated(source_ptr)) then factor = 1._8 if (present(scale_factor)) factor = scale_factor -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 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=8) + destin_ptr(i,j) = factor * real(source_ptr(im), kind=8) enddo localrc = ESMF_SUCCESS end if @@ -108,7 +110,7 @@ subroutine block_copy_1d_i4_to_2d_r8(destin_ptr, source_ptr, block, block_index, end subroutine block_copy_1d_i4_to_2d_r8 - subroutine block_copy_1d_r8_to_2d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, rc) + subroutine block_copy_1d_r8_to_2d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) @@ -116,11 +118,12 @@ subroutine block_copy_1d_r8_to_2d_r8(destin_ptr, source_ptr, block, block_index, type(block_control_type), intent(in) :: block integer, intent(in) :: block_index real(kind=8), optional, intent(in) :: scale_factor + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb + integer :: i, ib, ix, im, j, jb real(kind=8) :: factor ! -- begin @@ -128,13 +131,14 @@ subroutine block_copy_1d_r8_to_2d_r8(destin_ptr, source_ptr, block, block_index, if (associated(destin_ptr) .and. associated(source_ptr)) then factor = 1._8 if (present(scale_factor)) factor = scale_factor -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 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 * source_ptr(ix) + destin_ptr(i,j) = factor * source_ptr(im) enddo localrc = ESMF_SUCCESS end if @@ -143,7 +147,7 @@ subroutine block_copy_1d_r8_to_2d_r8(destin_ptr, source_ptr, block, block_index, end subroutine block_copy_1d_r8_to_2d_r8 - subroutine block_copy_spval_1d_r8_to_2d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, special_value, rc) + subroutine block_copy_spval_1d_r8_to_2d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, special_value, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) @@ -152,23 +156,25 @@ subroutine block_copy_spval_1d_r8_to_2d_r8(destin_ptr, source_ptr, block, block_ integer, intent(in) :: block_index real(kind=8), intent(in) :: scale_factor real(kind=8), intent(in) :: special_value + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb + integer :: i, ib, ix, im, j, jb ! -- begin localrc = ESMF_RC_PTR_NOTALLOC if (associated(destin_ptr) .and. associated(source_ptr)) then - !$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 ib = block%index(block_index)%ii(ix) jb = block%index(block_index)%jj(ix) i = ib - block%isc + 1 j = jb - block%jsc + 1 - if (source_ptr(ix) .ne. special_value) then - destin_ptr(i,j) = scale_factor * source_ptr(ix) + if (source_ptr(im) .ne. special_value) then + destin_ptr(i,j) = scale_factor * source_ptr(im) else destin_ptr(i,j) = special_value end if @@ -182,7 +188,7 @@ end subroutine block_copy_spval_1d_r8_to_2d_r8 ! -- copy: 1D slice to 2D - subroutine block_copy_1dslice_r8_to_2d_r8(destin_ptr, source_ptr, slice, block, block_index, scale_factor, rc) + subroutine block_copy_1dslice_r8_to_2d_r8(destin_ptr, source_ptr, slice, block, block_index, scale_factor, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) @@ -191,11 +197,12 @@ subroutine block_copy_1dslice_r8_to_2d_r8(destin_ptr, source_ptr, slice, block, type (block_control_type), intent(in) :: block integer, intent(in) :: block_index real(kind=8), optional, intent(in) :: scale_factor + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb + integer :: i, ib, ix, im, j, jb real(kind=8) :: factor ! -- begin @@ -205,13 +212,14 @@ subroutine block_copy_1dslice_r8_to_2d_r8(destin_ptr, source_ptr, slice, block, if (slice > 0 .and. slice <= size(source_ptr, dim=2)) then factor = 1._8 if (present(scale_factor)) factor = scale_factor -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 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 * source_ptr(ix,slice) + destin_ptr(i,j) = factor * source_ptr(im,slice) enddo localrc = ESMF_SUCCESS end if @@ -223,7 +231,7 @@ end subroutine block_copy_1dslice_r8_to_2d_r8 ! -- copy: 1D slice to 2D - subroutine block_copy_1dslice2_r8_to_2d_r8(destin_ptr, source_ptr, slice1, slice2, block, block_index, scale_factor, rc) + subroutine block_copy_1dslice2_r8_to_2d_r8(destin_ptr, source_ptr, slice1, slice2, block, block_index, scale_factor, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) @@ -233,11 +241,12 @@ subroutine block_copy_1dslice2_r8_to_2d_r8(destin_ptr, source_ptr, slice1, slice type (block_control_type), intent(in) :: block integer, intent(in) :: block_index real(kind=8), optional, intent(in) :: scale_factor + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb + integer :: i, ib, ix, im, j, jb real(kind=8) :: factor ! -- begin @@ -247,13 +256,14 @@ subroutine block_copy_1dslice2_r8_to_2d_r8(destin_ptr, source_ptr, slice1, slice if (slice1 > 0 .and. slice1 <= size(source_ptr, dim=2) .and. slice2 > 0 .and. slice2 <= size(source_ptr, dim=3)) then factor = 1._8 if (present(scale_factor)) factor = scale_factor -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 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 * source_ptr(ix,slice1,slice2) + destin_ptr(i,j) = factor * source_ptr(im,slice1,slice2) enddo localrc = ESMF_SUCCESS end if @@ -265,7 +275,7 @@ end subroutine block_copy_1dslice2_r8_to_2d_r8 ! -- copy: 2D to 3D - subroutine block_copy_2d_r8_to_3d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, rc) + subroutine block_copy_2d_r8_to_3d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:,:) @@ -273,11 +283,12 @@ subroutine block_copy_2d_r8_to_3d_r8(destin_ptr, source_ptr, block, block_index, type (block_control_type), intent(in) :: block integer, intent(in) :: block_index real(kind=8), optional, intent(in) :: scale_factor + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb, k + integer :: i, ib, ix, im, j, jb, k real(kind=8) :: factor ! -- begin @@ -286,13 +297,14 @@ subroutine block_copy_2d_r8_to_3d_r8(destin_ptr, source_ptr, block, block_index, factor = 1._8 if (present(scale_factor)) factor = scale_factor do k = 1, size(source_ptr, dim=2) -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 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,k) = factor * source_ptr(ix,k) + destin_ptr(i,j,k) = factor * source_ptr(im,k) enddo enddo localrc = ESMF_SUCCESS @@ -304,7 +316,7 @@ end subroutine block_copy_2d_r8_to_3d_r8 ! -- copy: 2D to 2D - subroutine block_copy_2d_r8_to_2d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, rc) + subroutine block_copy_2d_r8_to_2d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) @@ -312,11 +324,12 @@ subroutine block_copy_2d_r8_to_2d_r8(destin_ptr, source_ptr, block, block_index, type (block_control_type), intent(in) :: block integer, intent(in) :: block_index real(kind=8), optional, intent(in) :: scale_factor + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb + integer :: i, ib, ix, im, j, jb real(kind=8) :: factor ! -- begin @@ -324,8 +337,9 @@ subroutine block_copy_2d_r8_to_2d_r8(destin_ptr, source_ptr, block, block_index, if (associated(destin_ptr) .and. associated(source_ptr)) then factor = 1._8 if (present(scale_factor)) factor = scale_factor -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 ib = block%index(block_index)%ii(ix) jb = block%index(block_index)%jj(ix) i = ib - block%isc + 1 @@ -339,7 +353,7 @@ subroutine block_copy_2d_r8_to_2d_r8(destin_ptr, source_ptr, block, block_index, end subroutine block_copy_2d_r8_to_2d_r8 - subroutine block_array_copy_2d_r8_to_2d_r8(destin_ptr, source_arr, block, block_index, scale_factor, rc) + subroutine block_array_copy_2d_r8_to_2d_r8(destin_ptr, source_arr, block, block_index, scale_factor, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) @@ -347,11 +361,12 @@ subroutine block_array_copy_2d_r8_to_2d_r8(destin_ptr, source_arr, block, block_ type (block_control_type), intent(in) :: block integer, intent(in) :: block_index real(kind=8), optional, intent(in) :: scale_factor + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb + integer :: i, ib, ix, im, j, jb real(kind=8) :: factor ! -- begin @@ -359,8 +374,9 @@ subroutine block_array_copy_2d_r8_to_2d_r8(destin_ptr, source_arr, block, block_ if (associated(destin_ptr)) then factor = 1._8 if (present(scale_factor)) factor = scale_factor -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 ib = block%index(block_index)%ii(ix) jb = block%index(block_index)%jj(ix) i = ib - block%isc + 1 @@ -376,7 +392,7 @@ end subroutine block_array_copy_2d_r8_to_2d_r8 ! -- copy: 3D to 3D - subroutine block_copy_3d_r8_to_3d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, rc) + subroutine block_copy_3d_r8_to_3d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:,:) @@ -384,11 +400,12 @@ subroutine block_copy_3d_r8_to_3d_r8(destin_ptr, source_ptr, block, block_index, type (block_control_type), intent(in) :: block integer, intent(in) :: block_index real(kind=8), optional, intent(in) :: scale_factor + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb, k + integer :: i, ib, ix, im, j, jb, k real(kind=8) :: factor ! -- begin @@ -397,8 +414,9 @@ subroutine block_copy_3d_r8_to_3d_r8(destin_ptr, source_ptr, block, block_index, factor = 1._8 if (present(scale_factor)) factor = scale_factor do k = 1, size(source_ptr, dim=3) -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 ib = block%index(block_index)%ii(ix) jb = block%index(block_index)%jj(ix) i = ib - block%isc + 1 @@ -413,7 +431,7 @@ subroutine block_copy_3d_r8_to_3d_r8(destin_ptr, source_ptr, block, block_index, end subroutine block_copy_3d_r8_to_3d_r8 - subroutine block_array_copy_3d_r8_to_3d_r8(destin_ptr, source_arr, block, block_index, scale_factor, rc) + subroutine block_array_copy_3d_r8_to_3d_r8(destin_ptr, source_arr, block, block_index, scale_factor, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:,:) @@ -421,11 +439,12 @@ subroutine block_array_copy_3d_r8_to_3d_r8(destin_ptr, source_arr, block, block_ type (block_control_type), intent(in) :: block integer, intent(in) :: block_index real(kind=8), optional, intent(in) :: scale_factor + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb, k + integer :: i, ib, ix, im, j, jb, k real(kind=8) :: factor ! -- begin @@ -434,8 +453,9 @@ subroutine block_array_copy_3d_r8_to_3d_r8(destin_ptr, source_arr, block, block_ factor = 1._8 if (present(scale_factor)) factor = scale_factor do k = 1, size(source_arr, dim=3) -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 ib = block%index(block_index)%ii(ix) jb = block%index(block_index)%jj(ix) i = ib - block%isc + 1 @@ -452,7 +472,7 @@ end subroutine block_array_copy_3d_r8_to_3d_r8 ! -- copy: 3D slice to 3D - subroutine block_copy_3dslice_r8_to_3d_r8(destin_ptr, source_ptr, slice, block, block_index, scale_factor, rc) + subroutine block_copy_3dslice_r8_to_3d_r8(destin_ptr, source_ptr, slice, block, block_index, scale_factor, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:,:) @@ -461,11 +481,12 @@ subroutine block_copy_3dslice_r8_to_3d_r8(destin_ptr, source_ptr, slice, block, type (block_control_type), intent(in) :: block integer, intent(in) :: block_index real(kind=8), optional, intent(in) :: scale_factor + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb, k + integer :: i, ib, ix, im, j, jb, k real(kind=8) :: factor ! -- begin @@ -476,8 +497,9 @@ subroutine block_copy_3dslice_r8_to_3d_r8(destin_ptr, source_ptr, slice, block, factor = 1._8 if (present(scale_factor)) factor = scale_factor do k = 1, size(source_ptr, dim=3) -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 ib = block%index(block_index)%ii(ix) jb = block%index(block_index)%jj(ix) i = ib - block%isc + 1 @@ -493,7 +515,7 @@ subroutine block_copy_3dslice_r8_to_3d_r8(destin_ptr, source_ptr, slice, block, end subroutine block_copy_3dslice_r8_to_3d_r8 - subroutine block_array_copy_3dslice_r8_to_3d_r8(destin_ptr, source_arr, slice, block, block_index, scale_factor, rc) + subroutine block_array_copy_3dslice_r8_to_3d_r8(destin_ptr, source_arr, slice, block, block_index, scale_factor, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:,:) @@ -502,11 +524,12 @@ subroutine block_array_copy_3dslice_r8_to_3d_r8(destin_ptr, source_arr, slice, b type (block_control_type), intent(in) :: block integer, intent(in) :: block_index real(kind=8), optional, intent(in) :: scale_factor + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb, k + integer :: i, ib, ix, im, j, jb, k real(kind=8) :: factor ! -- begin @@ -517,8 +540,9 @@ subroutine block_array_copy_3dslice_r8_to_3d_r8(destin_ptr, source_arr, slice, b factor = 1._8 if (present(scale_factor)) factor = scale_factor do k = 1, size(source_arr, dim=3) -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 ib = block%index(block_index)%ii(ix) jb = block%index(block_index)%jj(ix) i = ib - block%isc + 1 @@ -536,24 +560,26 @@ end subroutine block_array_copy_3dslice_r8_to_3d_r8 ! -- fill: 2D - subroutine block_fill_2d_r8(destin_ptr, fill_value, block, block_index, rc) + subroutine block_fill_2d_r8(destin_ptr, fill_value, block, block_index, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) real(ESMF_KIND_R8), intent(in) :: fill_value type (block_control_type), intent(in) :: block integer, intent(in) :: block_index + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb + integer :: i, ib, ix, j, jb, im ! -- begin localrc = ESMF_RC_PTR_NOTALLOC if (associated(destin_ptr)) then -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 ib = block%index(block_index)%ii(ix) jb = block%index(block_index)%jj(ix) i = ib - block%isc + 1 @@ -569,25 +595,27 @@ end subroutine block_fill_2d_r8 ! -- fill: 3D - subroutine block_fill_3d_r8(destin_ptr, fill_value, block, block_index, rc) + subroutine block_fill_3d_r8(destin_ptr, fill_value, block, block_index, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:,:) real(ESMF_KIND_R8), intent(in) :: fill_value type (block_control_type), intent(in) :: block integer, intent(in) :: block_index + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb, k + integer :: i, ib, ix, im, j, jb, k ! -- begin localrc = ESMF_RC_PTR_NOTALLOC if (associated(destin_ptr)) then do k = 1, size(destin_ptr, dim=3) -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 ib = block%index(block_index)%ii(ix) jb = block%index(block_index)%jj(ix) i = ib - block%isc + 1 @@ -604,7 +632,7 @@ end subroutine block_fill_3d_r8 ! -- copy/fill: 1D to 2D - subroutine block_copy_or_fill_1d_r8_to_2d_r8(destin_ptr, source_ptr, fill_value, block, block_index, rc) + subroutine block_copy_or_fill_1d_r8_to_2d_r8(destin_ptr, source_ptr, fill_value, block, block_index, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) @@ -612,6 +640,7 @@ subroutine block_copy_or_fill_1d_r8_to_2d_r8(destin_ptr, source_ptr, fill_value, real(ESMF_KIND_R8), intent(in) :: fill_value type (block_control_type), intent(in) :: block integer, intent(in) :: block_index + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- begin @@ -619,9 +648,9 @@ subroutine block_copy_or_fill_1d_r8_to_2d_r8(destin_ptr, source_ptr, fill_value, if (associated(destin_ptr)) then if (associated(source_ptr)) then - call block_copy_1d_r8_to_2d_r8(destin_ptr, source_ptr, block, block_index, rc=rc) + call block_copy_1d_r8_to_2d_r8(destin_ptr, source_ptr, block, block_index, offset=offset, rc=rc) else - call block_fill_2d_r8(destin_ptr, fill_value, block, block_index, rc=rc) + call block_fill_2d_r8(destin_ptr, fill_value, block, block_index, offset=offset, rc=rc) end if end if @@ -629,7 +658,7 @@ end subroutine block_copy_or_fill_1d_r8_to_2d_r8 ! -- copy/fill: 1D slice to 2D - subroutine block_copy_or_fill_1dslice_r8_to_2d_r8(destin_ptr, source_ptr, slice, fill_value, block, block_index, rc) + subroutine block_copy_or_fill_1dslice_r8_to_2d_r8(destin_ptr, source_ptr, slice, fill_value, block, block_index, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) @@ -638,6 +667,7 @@ subroutine block_copy_or_fill_1dslice_r8_to_2d_r8(destin_ptr, source_ptr, slice, real(ESMF_KIND_R8), intent(in) :: fill_value type (block_control_type), intent(in) :: block integer, intent(in) :: block_index + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- begin @@ -645,9 +675,9 @@ subroutine block_copy_or_fill_1dslice_r8_to_2d_r8(destin_ptr, source_ptr, slice, if (associated(destin_ptr)) then if (associated(source_ptr)) then - call block_copy_1dslice_r8_to_2d_r8(destin_ptr, source_ptr, slice, block, block_index, rc=rc) + call block_copy_1dslice_r8_to_2d_r8(destin_ptr, source_ptr, slice, block, block_index, offset=offset, rc=rc) else - call block_fill_2d_r8(destin_ptr, fill_value, block, block_index, rc=rc) + call block_fill_2d_r8(destin_ptr, fill_value, block, block_index, offset=offset, rc=rc) end if end if @@ -655,7 +685,7 @@ end subroutine block_copy_or_fill_1dslice_r8_to_2d_r8 ! -- copy/fill: 1D slice to 2D - subroutine block_copy_or_fill_1dslice2_r8_to_2d_r8(destin_ptr, source_ptr, slice1, slice2, fill_value, block, block_index, rc) + subroutine block_copy_or_fill_1dslice2_r8_to_2d_r8(destin_ptr, source_ptr, slice1, slice2, fill_value, block, block_index, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) @@ -665,6 +695,7 @@ subroutine block_copy_or_fill_1dslice2_r8_to_2d_r8(destin_ptr, source_ptr, slice real(ESMF_KIND_R8), intent(in) :: fill_value type (block_control_type), intent(in) :: block integer, intent(in) :: block_index + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- begin @@ -672,9 +703,9 @@ subroutine block_copy_or_fill_1dslice2_r8_to_2d_r8(destin_ptr, source_ptr, slice if (associated(destin_ptr)) then if (associated(source_ptr)) then - call block_copy_1dslice2_r8_to_2d_r8(destin_ptr, source_ptr, slice1, slice2, block, block_index, rc=rc) + call block_copy_1dslice2_r8_to_2d_r8(destin_ptr, source_ptr, slice1, slice2, block, block_index, offset=offset, rc=rc) else - call block_fill_2d_r8(destin_ptr, fill_value, block, block_index, rc=rc) + call block_fill_2d_r8(destin_ptr, fill_value, block, block_index, offset=offset, rc=rc) end if end if @@ -682,7 +713,7 @@ end subroutine block_copy_or_fill_1dslice2_r8_to_2d_r8 ! -- copy/fill: 2D to 3D - subroutine block_copy_or_fill_2d_r8_to_3d_r8(destin_ptr, source_ptr, fill_value, block, block_index, rc) + subroutine block_copy_or_fill_2d_r8_to_3d_r8(destin_ptr, source_ptr, fill_value, block, block_index, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:,:) @@ -690,6 +721,7 @@ subroutine block_copy_or_fill_2d_r8_to_3d_r8(destin_ptr, source_ptr, fill_value, real(ESMF_KIND_R8), intent(in) :: fill_value type (block_control_type), intent(in) :: block integer, intent(in) :: block_index + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- begin @@ -697,9 +729,9 @@ subroutine block_copy_or_fill_2d_r8_to_3d_r8(destin_ptr, source_ptr, fill_value, if (associated(destin_ptr)) then if (associated(source_ptr)) then - call block_copy_2d_r8_to_3d_r8(destin_ptr, source_ptr, block, block_index, rc=rc) + call block_copy_2d_r8_to_3d_r8(destin_ptr, source_ptr, block, block_index, offset=offset, rc=rc) else - call block_fill_3d_r8(destin_ptr, fill_value, block, block_index, rc=rc) + call block_fill_3d_r8(destin_ptr, fill_value, block, block_index, offset=offset, rc=rc) end if end if @@ -707,7 +739,7 @@ end subroutine block_copy_or_fill_2d_r8_to_3d_r8 ! -- combine: 1D to 2D - subroutine block_combine_frac_1d_r8_to_2d_r8(destin_ptr, fract1_ptr, fract2_ptr, block, block_index, rc) + subroutine block_combine_frac_1d_r8_to_2d_r8(destin_ptr, fract1_ptr, fract2_ptr, block, block_index, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) @@ -715,23 +747,25 @@ subroutine block_combine_frac_1d_r8_to_2d_r8(destin_ptr, fract1_ptr, fract2_ptr, real(kind=8), pointer :: fract2_ptr(:) type(block_control_type), intent(in) :: block integer, intent(in) :: block_index + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb + integer :: i, ib, ix, im, j, jb ! -- begin localrc = ESMF_RC_PTR_NOTALLOC if (associated(destin_ptr) .and. & associated(fract1_ptr) .and. associated(fract2_ptr)) then -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 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) = fract1_ptr(ix) * (1._8 - fract2_ptr(ix)) + destin_ptr(i,j) = fract1_ptr(im) * (1._8 - fract2_ptr(im)) enddo localrc = ESMF_SUCCESS end if @@ -747,7 +781,7 @@ end subroutine block_combine_frac_1d_r8_to_2d_r8 ! ------------------------------------------------------------------------------------------ - subroutine block_copy_1d_r4_to_2d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, rc) + subroutine block_copy_1d_r4_to_2d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) @@ -755,11 +789,12 @@ subroutine block_copy_1d_r4_to_2d_r8(destin_ptr, source_ptr, block, block_index, type(block_control_type), intent(in) :: block integer, intent(in) :: block_index real(kind=4), optional, intent(in) :: scale_factor + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb + integer :: i, ib, ix, im, j, jb real(kind=4) :: factor ! -- begin @@ -767,13 +802,14 @@ subroutine block_copy_1d_r4_to_2d_r8(destin_ptr, source_ptr, block, block_index, if (associated(destin_ptr) .and. associated(source_ptr)) then factor = 1._4 if (present(scale_factor)) factor = scale_factor -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 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 * source_ptr(ix) + destin_ptr(i,j) = factor * source_ptr(im) enddo localrc = ESMF_SUCCESS end if @@ -782,7 +818,7 @@ subroutine block_copy_1d_r4_to_2d_r8(destin_ptr, source_ptr, block, block_index, end subroutine block_copy_1d_r4_to_2d_r8 - subroutine block_copy_spval_1d_r4_to_2d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, special_value, rc) + subroutine block_copy_spval_1d_r4_to_2d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, special_value, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) @@ -791,23 +827,25 @@ subroutine block_copy_spval_1d_r4_to_2d_r8(destin_ptr, source_ptr, block, block_ integer, intent(in) :: block_index real(kind=4), intent(in) :: scale_factor real(kind=4), intent(in) :: special_value + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb + integer :: i, ib, ix, im, j, jb ! -- begin localrc = ESMF_RC_PTR_NOTALLOC if (associated(destin_ptr) .and. associated(source_ptr)) then - !$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 ib = block%index(block_index)%ii(ix) jb = block%index(block_index)%jj(ix) i = ib - block%isc + 1 j = jb - block%jsc + 1 - if (source_ptr(ix) .ne. special_value) then - destin_ptr(i,j) = scale_factor * source_ptr(ix) + if (source_ptr(im) .ne. special_value) then + destin_ptr(i,j) = scale_factor * source_ptr(im) else destin_ptr(i,j) = special_value end if @@ -821,7 +859,7 @@ end subroutine block_copy_spval_1d_r4_to_2d_r8 ! -- copy: 1D slice to 2D - subroutine block_copy_1dslice_r4_to_2d_r8(destin_ptr, source_ptr, slice, block, block_index, scale_factor, rc) + subroutine block_copy_1dslice_r4_to_2d_r8(destin_ptr, source_ptr, slice, block, block_index, scale_factor, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) @@ -830,11 +868,12 @@ subroutine block_copy_1dslice_r4_to_2d_r8(destin_ptr, source_ptr, slice, block, type (block_control_type), intent(in) :: block integer, intent(in) :: block_index real(kind=4), optional, intent(in) :: scale_factor + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb + integer :: i, ib, ix, im, j, jb real(kind=4) :: factor ! -- begin @@ -844,13 +883,14 @@ subroutine block_copy_1dslice_r4_to_2d_r8(destin_ptr, source_ptr, slice, block, if (slice > 0 .and. slice <= size(source_ptr, dim=2)) then factor = 1._4 if (present(scale_factor)) factor = scale_factor -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 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 * source_ptr(ix,slice) + destin_ptr(i,j) = factor * source_ptr(im,slice) enddo localrc = ESMF_SUCCESS end if @@ -862,7 +902,7 @@ end subroutine block_copy_1dslice_r4_to_2d_r8 ! -- copy: 1D slice to 2D - subroutine block_copy_1dslice2_r4_to_2d_r8(destin_ptr, source_ptr, slice1, slice2, block, block_index, scale_factor, rc) + subroutine block_copy_1dslice2_r4_to_2d_r8(destin_ptr, source_ptr, slice1, slice2, block, block_index, scale_factor, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) @@ -872,11 +912,12 @@ subroutine block_copy_1dslice2_r4_to_2d_r8(destin_ptr, source_ptr, slice1, slice type (block_control_type), intent(in) :: block integer, intent(in) :: block_index real(kind=4), optional, intent(in) :: scale_factor + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb + integer :: i, ib, ix, im, j, jb real(kind=4) :: factor ! -- begin @@ -886,13 +927,14 @@ subroutine block_copy_1dslice2_r4_to_2d_r8(destin_ptr, source_ptr, slice1, slice if (slice1 > 0 .and. slice1 <= size(source_ptr, dim=2) .and. slice2 > 0 .and. slice2 <= size(source_ptr, dim=3)) then factor = 1._4 if (present(scale_factor)) factor = scale_factor -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 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 * source_ptr(ix,slice1,slice2) + destin_ptr(i,j) = factor * source_ptr(im,slice1,slice2) enddo localrc = ESMF_SUCCESS end if @@ -904,7 +946,7 @@ end subroutine block_copy_1dslice2_r4_to_2d_r8 ! -- copy: 2D to 3D - subroutine block_copy_2d_r4_to_3d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, rc) + subroutine block_copy_2d_r4_to_3d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:,:) @@ -912,11 +954,12 @@ subroutine block_copy_2d_r4_to_3d_r8(destin_ptr, source_ptr, block, block_index, type (block_control_type), intent(in) :: block integer, intent(in) :: block_index real(kind=4), optional, intent(in) :: scale_factor + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb, k + integer :: i, ib, ix, im, j, jb, k real(kind=4) :: factor ! -- begin @@ -925,13 +968,14 @@ subroutine block_copy_2d_r4_to_3d_r8(destin_ptr, source_ptr, block, block_index, factor = 1._4 if (present(scale_factor)) factor = scale_factor do k = 1, size(source_ptr, dim=2) -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 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,k) = factor * source_ptr(ix,k) + destin_ptr(i,j,k) = factor * source_ptr(im,k) enddo enddo localrc = ESMF_SUCCESS @@ -943,7 +987,7 @@ end subroutine block_copy_2d_r4_to_3d_r8 ! -- copy: 2D to 2D - subroutine block_copy_2d_r4_to_2d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, rc) + subroutine block_copy_2d_r4_to_2d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) @@ -951,11 +995,12 @@ subroutine block_copy_2d_r4_to_2d_r8(destin_ptr, source_ptr, block, block_index, type (block_control_type), intent(in) :: block integer, intent(in) :: block_index real(kind=4), optional, intent(in) :: scale_factor + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb + integer :: i, ib, ix, im, j, jb real(kind=4) :: factor ! -- begin @@ -963,8 +1008,9 @@ subroutine block_copy_2d_r4_to_2d_r8(destin_ptr, source_ptr, block, block_index, if (associated(destin_ptr) .and. associated(source_ptr)) then factor = 1._4 if (present(scale_factor)) factor = scale_factor -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 ib = block%index(block_index)%ii(ix) jb = block%index(block_index)%jj(ix) i = ib - block%isc + 1 @@ -978,7 +1024,7 @@ subroutine block_copy_2d_r4_to_2d_r8(destin_ptr, source_ptr, block, block_index, end subroutine block_copy_2d_r4_to_2d_r8 - subroutine block_array_copy_2d_r4_to_2d_r8(destin_ptr, source_arr, block, block_index, scale_factor, rc) + subroutine block_array_copy_2d_r4_to_2d_r8(destin_ptr, source_arr, block, block_index, scale_factor, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) @@ -986,11 +1032,12 @@ subroutine block_array_copy_2d_r4_to_2d_r8(destin_ptr, source_arr, block, block_ type (block_control_type), intent(in) :: block integer, intent(in) :: block_index real(kind=4), optional, intent(in) :: scale_factor + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb + integer :: i, ib, ix, im, j, jb real(kind=4) :: factor ! -- begin @@ -998,8 +1045,9 @@ subroutine block_array_copy_2d_r4_to_2d_r8(destin_ptr, source_arr, block, block_ if (associated(destin_ptr)) then factor = 1._4 if (present(scale_factor)) factor = scale_factor -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 ib = block%index(block_index)%ii(ix) jb = block%index(block_index)%jj(ix) i = ib - block%isc + 1 @@ -1015,7 +1063,7 @@ end subroutine block_array_copy_2d_r4_to_2d_r8 ! -- copy: 3D to 3D - subroutine block_copy_3d_r4_to_3d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, rc) + subroutine block_copy_3d_r4_to_3d_r8(destin_ptr, source_ptr, block, block_index, scale_factor, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:,:) @@ -1023,11 +1071,12 @@ subroutine block_copy_3d_r4_to_3d_r8(destin_ptr, source_ptr, block, block_index, type (block_control_type), intent(in) :: block integer, intent(in) :: block_index real(kind=4), optional, intent(in) :: scale_factor + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb, k + integer :: i, ib, ix, im, j, jb, k real(kind=4) :: factor ! -- begin @@ -1036,8 +1085,9 @@ subroutine block_copy_3d_r4_to_3d_r8(destin_ptr, source_ptr, block, block_index, factor = 1._4 if (present(scale_factor)) factor = scale_factor do k = 1, size(source_ptr, dim=3) -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 ib = block%index(block_index)%ii(ix) jb = block%index(block_index)%jj(ix) i = ib - block%isc + 1 @@ -1052,7 +1102,7 @@ subroutine block_copy_3d_r4_to_3d_r8(destin_ptr, source_ptr, block, block_index, end subroutine block_copy_3d_r4_to_3d_r8 - subroutine block_array_copy_3d_r4_to_3d_r8(destin_ptr, source_arr, block, block_index, scale_factor, rc) + subroutine block_array_copy_3d_r4_to_3d_r8(destin_ptr, source_arr, block, block_index, scale_factor, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:,:) @@ -1060,11 +1110,12 @@ subroutine block_array_copy_3d_r4_to_3d_r8(destin_ptr, source_arr, block, block_ type (block_control_type), intent(in) :: block integer, intent(in) :: block_index real(kind=4), optional, intent(in) :: scale_factor + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb, k + integer :: i, ib, ix, im, j, jb, k real(kind=4) :: factor ! -- begin @@ -1073,8 +1124,9 @@ subroutine block_array_copy_3d_r4_to_3d_r8(destin_ptr, source_arr, block, block_ factor = 1._4 if (present(scale_factor)) factor = scale_factor do k = 1, size(source_arr, dim=3) -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 ib = block%index(block_index)%ii(ix) jb = block%index(block_index)%jj(ix) i = ib - block%isc + 1 @@ -1091,7 +1143,7 @@ end subroutine block_array_copy_3d_r4_to_3d_r8 ! -- copy: 3D slice to 3D - subroutine block_copy_3dslice_r4_to_3d_r8(destin_ptr, source_ptr, slice, block, block_index, scale_factor, rc) + subroutine block_copy_3dslice_r4_to_3d_r8(destin_ptr, source_ptr, slice, block, block_index, scale_factor, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:,:) @@ -1100,11 +1152,12 @@ subroutine block_copy_3dslice_r4_to_3d_r8(destin_ptr, source_ptr, slice, block, type (block_control_type), intent(in) :: block integer, intent(in) :: block_index real(kind=4), optional, intent(in) :: scale_factor + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb, k + integer :: i, ib, ix, im, j, jb, k real(kind=4) :: factor ! -- begin @@ -1115,8 +1168,9 @@ subroutine block_copy_3dslice_r4_to_3d_r8(destin_ptr, source_ptr, slice, block, factor = 1._4 if (present(scale_factor)) factor = scale_factor do k = 1, size(source_ptr, dim=3) -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 ib = block%index(block_index)%ii(ix) jb = block%index(block_index)%jj(ix) i = ib - block%isc + 1 @@ -1132,7 +1186,7 @@ subroutine block_copy_3dslice_r4_to_3d_r8(destin_ptr, source_ptr, slice, block, end subroutine block_copy_3dslice_r4_to_3d_r8 - subroutine block_array_copy_3dslice_r4_to_3d_r8(destin_ptr, source_arr, slice, block, block_index, scale_factor, rc) + subroutine block_array_copy_3dslice_r4_to_3d_r8(destin_ptr, source_arr, slice, block, block_index, scale_factor, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:,:) @@ -1141,11 +1195,12 @@ subroutine block_array_copy_3dslice_r4_to_3d_r8(destin_ptr, source_arr, slice, b type (block_control_type), intent(in) :: block integer, intent(in) :: block_index real(kind=4), optional, intent(in) :: scale_factor + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb, k + integer :: i, ib, ix, im, j, jb, k real(kind=4) :: factor ! -- begin @@ -1156,8 +1211,9 @@ subroutine block_array_copy_3dslice_r4_to_3d_r8(destin_ptr, source_arr, slice, b factor = 1._4 if (present(scale_factor)) factor = scale_factor do k = 1, size(source_arr, dim=3) -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 ib = block%index(block_index)%ii(ix) jb = block%index(block_index)%jj(ix) i = ib - block%isc + 1 @@ -1175,7 +1231,7 @@ end subroutine block_array_copy_3dslice_r4_to_3d_r8 ! -- copy/fill: 1D to 2D - subroutine block_copy_or_fill_1d_r4_to_2d_r8(destin_ptr, source_ptr, fill_value, block, block_index, rc) + subroutine block_copy_or_fill_1d_r4_to_2d_r8(destin_ptr, source_ptr, fill_value, block, block_index, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) @@ -1183,6 +1239,7 @@ subroutine block_copy_or_fill_1d_r4_to_2d_r8(destin_ptr, source_ptr, fill_value, real(ESMF_KIND_R8), intent(in) :: fill_value type (block_control_type), intent(in) :: block integer, intent(in) :: block_index + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- begin @@ -1190,9 +1247,9 @@ subroutine block_copy_or_fill_1d_r4_to_2d_r8(destin_ptr, source_ptr, fill_value, if (associated(destin_ptr)) then if (associated(source_ptr)) then - call block_copy_1d_r4_to_2d_r8(destin_ptr, source_ptr, block, block_index, rc=rc) + call block_copy_1d_r4_to_2d_r8(destin_ptr, source_ptr, block, block_index, offset=offset, rc=rc) else - call block_fill_2d_r8(destin_ptr, fill_value, block, block_index, rc=rc) + call block_fill_2d_r8(destin_ptr, fill_value, block, block_index, offset=offset, rc=rc) end if end if @@ -1200,7 +1257,7 @@ end subroutine block_copy_or_fill_1d_r4_to_2d_r8 ! -- copy/fill: 1D slice to 2D - subroutine block_copy_or_fill_1dslice_r4_to_2d_r8(destin_ptr, source_ptr, slice, fill_value, block, block_index, rc) + subroutine block_copy_or_fill_1dslice_r4_to_2d_r8(destin_ptr, source_ptr, slice, fill_value, block, block_index, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) @@ -1209,6 +1266,7 @@ subroutine block_copy_or_fill_1dslice_r4_to_2d_r8(destin_ptr, source_ptr, slice, real(ESMF_KIND_R8), intent(in) :: fill_value type (block_control_type), intent(in) :: block integer, intent(in) :: block_index + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- begin @@ -1216,9 +1274,9 @@ subroutine block_copy_or_fill_1dslice_r4_to_2d_r8(destin_ptr, source_ptr, slice, if (associated(destin_ptr)) then if (associated(source_ptr)) then - call block_copy_1dslice_r4_to_2d_r8(destin_ptr, source_ptr, slice, block, block_index, rc=rc) + call block_copy_1dslice_r4_to_2d_r8(destin_ptr, source_ptr, slice, block, block_index, offset=offset, rc=rc) else - call block_fill_2d_r8(destin_ptr, fill_value, block, block_index, rc=rc) + call block_fill_2d_r8(destin_ptr, fill_value, block, block_index, offset=offset, rc=rc) end if end if @@ -1226,7 +1284,7 @@ end subroutine block_copy_or_fill_1dslice_r4_to_2d_r8 ! -- copy/fill: 1D slice to 2D - subroutine block_copy_or_fill_1dslice2_r4_to_2d_r8(destin_ptr, source_ptr, slice1, slice2, fill_value, block, block_index, rc) + subroutine block_copy_or_fill_1dslice2_r4_to_2d_r8(destin_ptr, source_ptr, slice1, slice2, fill_value, block, block_index, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) @@ -1236,6 +1294,7 @@ subroutine block_copy_or_fill_1dslice2_r4_to_2d_r8(destin_ptr, source_ptr, slice real(ESMF_KIND_R8), intent(in) :: fill_value type (block_control_type), intent(in) :: block integer, intent(in) :: block_index + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- begin @@ -1243,9 +1302,9 @@ subroutine block_copy_or_fill_1dslice2_r4_to_2d_r8(destin_ptr, source_ptr, slice if (associated(destin_ptr)) then if (associated(source_ptr)) then - call block_copy_1dslice2_r4_to_2d_r8(destin_ptr, source_ptr, slice1, slice2, block, block_index, rc=rc) + call block_copy_1dslice2_r4_to_2d_r8(destin_ptr, source_ptr, slice1, slice2, block, block_index, offset=offset, rc=rc) else - call block_fill_2d_r8(destin_ptr, fill_value, block, block_index, rc=rc) + call block_fill_2d_r8(destin_ptr, fill_value, block, block_index, offset=offset, rc=rc) end if end if @@ -1253,7 +1312,7 @@ end subroutine block_copy_or_fill_1dslice2_r4_to_2d_r8 ! -- copy/fill: 2D to 3D - subroutine block_copy_or_fill_2d_r4_to_3d_r8(destin_ptr, source_ptr, fill_value, block, block_index, rc) + subroutine block_copy_or_fill_2d_r4_to_3d_r8(destin_ptr, source_ptr, fill_value, block, block_index, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:,:) @@ -1261,6 +1320,7 @@ subroutine block_copy_or_fill_2d_r4_to_3d_r8(destin_ptr, source_ptr, fill_value, real(ESMF_KIND_R8), intent(in) :: fill_value type (block_control_type), intent(in) :: block integer, intent(in) :: block_index + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- begin @@ -1268,9 +1328,9 @@ subroutine block_copy_or_fill_2d_r4_to_3d_r8(destin_ptr, source_ptr, fill_value, if (associated(destin_ptr)) then if (associated(source_ptr)) then - call block_copy_2d_r4_to_3d_r8(destin_ptr, source_ptr, block, block_index, rc=rc) + call block_copy_2d_r4_to_3d_r8(destin_ptr, source_ptr, block, block_index, offset=offset, rc=rc) else - call block_fill_3d_r8(destin_ptr, fill_value, block, block_index, rc=rc) + call block_fill_3d_r8(destin_ptr, fill_value, block, block_index, offset=offset, rc=rc) end if end if @@ -1278,7 +1338,7 @@ end subroutine block_copy_or_fill_2d_r4_to_3d_r8 ! -- combine: 1D to 2D - subroutine block_combine_frac_1d_r4_to_2d_r8(destin_ptr, fract1_ptr, fract2_ptr, block, block_index, rc) + subroutine block_combine_frac_1d_r4_to_2d_r8(destin_ptr, fract1_ptr, fract2_ptr, block, block_index, offset, rc) ! -- arguments real(ESMF_KIND_R8), pointer :: destin_ptr(:,:) @@ -1286,23 +1346,25 @@ subroutine block_combine_frac_1d_r4_to_2d_r8(destin_ptr, fract1_ptr, fract2_ptr, real(kind=4), pointer :: fract2_ptr(:) type(block_control_type), intent(in) :: block integer, intent(in) :: block_index + integer, intent(in) :: offset integer, optional, intent(out) :: rc ! -- local variables integer :: localrc - integer :: i, ib, ix, j, jb + integer :: i, ib, ix, im, j, jb ! -- begin localrc = ESMF_RC_PTR_NOTALLOC if (associated(destin_ptr) .and. & associated(fract1_ptr) .and. associated(fract2_ptr)) then -!$omp parallel do private(ix,ib,jb,i,j) +!$omp parallel do private(ix,im,ib,jb,i,j) do ix = 1, block%blksz(block_index) + im = offset + ix - 1 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) = fract1_ptr(ix) * (1._4 - fract2_ptr(ix)) + destin_ptr(i,j) = fract1_ptr(im) * (1._4 - fract2_ptr(im)) enddo localrc = ESMF_SUCCESS end if diff --git a/io/fv3atm_clm_lake_io.F90 b/io/fv3atm_clm_lake_io.F90 index 37c221597..748ac129f 100644 --- a/io/fv3atm_clm_lake_io.F90 +++ b/io/fv3atm_clm_lake_io.F90 @@ -184,7 +184,7 @@ end subroutine clm_lake_write_axes subroutine clm_lake_fill_data(clm_lake, Model, Atm_block, Sfcprop) implicit none class(clm_lake_data_type) :: clm_lake - type(GFS_sfcprop_type), intent(in) :: Sfcprop(:) + type(GFS_sfcprop_type), intent(in) :: Sfcprop type(GFS_control_type), intent(in) :: Model type(block_control_type), intent(in) :: Atm_block @@ -232,42 +232,43 @@ end subroutine clm_lake_fill_data subroutine clm_lake_copy_from_grid(clm_lake, Model, Atm_block, Sfcprop) implicit none class(clm_lake_data_type) :: clm_lake - type(GFS_sfcprop_type), intent(in) :: Sfcprop(:) + type(GFS_sfcprop_type), intent(in) :: Sfcprop type(GFS_control_type), intent(in) :: Model type(block_control_type), intent(in) :: Atm_block - integer :: nb, ix, isc, jsc, i, j + integer :: nb, ix, isc, jsc, i, j, im isc = Model%isc jsc = Model%jsc ! Copy data to temporary arrays - !$omp parallel do default(shared) private(i, j, nb, ix) + !$omp parallel do default(shared) private(i, j, nb, ix, im) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) i = Atm_block%index(nb)%ii(ix) - isc + 1 j = Atm_block%index(nb)%jj(ix) - jsc + 1 - - clm_lake%T_snow(i,j) = Sfcprop(nb)%T_snow(ix) - clm_lake%T_ice(i,j) = Sfcprop(nb)%T_ice(ix) - clm_lake%lake_snl2d(i,j) = Sfcprop(nb)%lake_snl2d(ix) - clm_lake%lake_h2osno2d(i,j) = Sfcprop(nb)%lake_h2osno2d(ix) - clm_lake%lake_tsfc(i,j) = Sfcprop(nb)%lake_tsfc(ix) - clm_lake%lake_savedtke12d(i,j) = Sfcprop(nb)%lake_savedtke12d(ix) - clm_lake%lake_sndpth2d(i,j) = Sfcprop(nb)%lake_sndpth2d(ix) - clm_lake%clm_lakedepth(i,j) = Sfcprop(nb)%clm_lakedepth(ix) - clm_lake%clm_lake_initialized(i,j) = Sfcprop(nb)%clm_lake_initialized(ix) - clm_lake%input_lakedepth(i,j) = Sfcprop(nb)%input_lakedepth(ix) - - clm_lake%lake_snow_z3d(i,j,:) = Sfcprop(nb)%lake_snow_z3d(ix,:) - clm_lake%lake_snow_dz3d(i,j,:) = Sfcprop(nb)%lake_snow_dz3d(ix,:) - clm_lake%lake_snow_zi3d(i,j,:) = Sfcprop(nb)%lake_snow_zi3d(ix,:) - clm_lake%lake_h2osoi_vol3d(i,j,:) = Sfcprop(nb)%lake_h2osoi_vol3d(ix,:) - clm_lake%lake_h2osoi_liq3d(i,j,:) = Sfcprop(nb)%lake_h2osoi_liq3d(ix,:) - clm_lake%lake_h2osoi_ice3d(i,j,:) = Sfcprop(nb)%lake_h2osoi_ice3d(ix,:) - clm_lake%lake_t_soisno3d(i,j,:) = Sfcprop(nb)%lake_t_soisno3d(ix,:) - clm_lake%lake_t_lake3d(i,j,:) = Sfcprop(nb)%lake_t_lake3d(ix,:) - clm_lake%lake_icefrac3d(i,j,:) = Sfcprop(nb)%lake_icefrac3d(ix,:) + im = Model%chunk_begin(nb)+ix-1 + + clm_lake%T_snow(i,j) = Sfcprop%T_snow(im) + clm_lake%T_ice(i,j) = Sfcprop%T_ice(im) + clm_lake%lake_snl2d(i,j) = Sfcprop%lake_snl2d(im) + clm_lake%lake_h2osno2d(i,j) = Sfcprop%lake_h2osno2d(im) + clm_lake%lake_tsfc(i,j) = Sfcprop%lake_tsfc(im) + clm_lake%lake_savedtke12d(i,j) = Sfcprop%lake_savedtke12d(im) + clm_lake%lake_sndpth2d(i,j) = Sfcprop%lake_sndpth2d(im) + clm_lake%clm_lakedepth(i,j) = Sfcprop%clm_lakedepth(im) + clm_lake%clm_lake_initialized(i,j) = Sfcprop%clm_lake_initialized(im) + clm_lake%input_lakedepth(i,j) = Sfcprop%input_lakedepth(im) + + clm_lake%lake_snow_z3d(i,j,:) = Sfcprop%lake_snow_z3d(im,:) + clm_lake%lake_snow_dz3d(i,j,:) = Sfcprop%lake_snow_dz3d(im,:) + clm_lake%lake_snow_zi3d(i,j,:) = Sfcprop%lake_snow_zi3d(im,:) + clm_lake%lake_h2osoi_vol3d(i,j,:) = Sfcprop%lake_h2osoi_vol3d(im,:) + clm_lake%lake_h2osoi_liq3d(i,j,:) = Sfcprop%lake_h2osoi_liq3d(im,:) + clm_lake%lake_h2osoi_ice3d(i,j,:) = Sfcprop%lake_h2osoi_ice3d(im,:) + clm_lake%lake_t_soisno3d(i,j,:) = Sfcprop%lake_t_soisno3d(im,:) + clm_lake%lake_t_lake3d(i,j,:) = Sfcprop%lake_t_lake3d(im,:) + clm_lake%lake_icefrac3d(i,j,:) = Sfcprop%lake_icefrac3d(im,:) enddo enddo end subroutine clm_lake_copy_from_grid @@ -278,42 +279,43 @@ end subroutine clm_lake_copy_from_grid subroutine clm_lake_copy_to_grid(clm_lake, Model, Atm_block, Sfcprop) implicit none class(clm_lake_data_type) :: clm_lake - type(GFS_sfcprop_type), intent(in) :: Sfcprop(:) + type(GFS_sfcprop_type), intent(in) :: Sfcprop type(GFS_control_type), intent(in) :: Model type(block_control_type), intent(in) :: Atm_block - integer :: nb, ix, isc, jsc, i, j + integer :: nb, ix, isc, jsc, i, j, im isc = Model%isc jsc = Model%jsc ! Copy data to temporary arrays - !$omp parallel do default(shared) private(i, j, nb, ix) + !$omp parallel do default(shared) private(i, j, nb, ix, im) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) i = Atm_block%index(nb)%ii(ix) - isc + 1 j = Atm_block%index(nb)%jj(ix) - jsc + 1 - - Sfcprop(nb)%T_snow(ix) = clm_lake%T_snow(i,j) - Sfcprop(nb)%T_ice(ix) = clm_lake%T_ice(i,j) - Sfcprop(nb)%lake_snl2d(ix) = clm_lake%lake_snl2d(i,j) - Sfcprop(nb)%lake_h2osno2d(ix) = clm_lake%lake_h2osno2d(i,j) - Sfcprop(nb)%lake_tsfc(ix) = clm_lake%lake_tsfc(i,j) - Sfcprop(nb)%lake_savedtke12d(ix) = clm_lake%lake_savedtke12d(i,j) - Sfcprop(nb)%lake_sndpth2d(ix) = clm_lake%lake_sndpth2d(i,j) - Sfcprop(nb)%clm_lakedepth(ix) = clm_lake%clm_lakedepth(i,j) - Sfcprop(nb)%clm_lake_initialized(ix) = clm_lake%clm_lake_initialized(i,j) - Sfcprop(nb)%input_lakedepth(ix) = clm_lake%input_lakedepth(i,j) - - Sfcprop(nb)%lake_snow_z3d(ix,:) = clm_lake%lake_snow_z3d(i,j,:) - Sfcprop(nb)%lake_snow_dz3d(ix,:) = clm_lake%lake_snow_dz3d(i,j,:) - Sfcprop(nb)%lake_snow_zi3d(ix,:) = clm_lake%lake_snow_zi3d(i,j,:) - Sfcprop(nb)%lake_h2osoi_vol3d(ix,:) = clm_lake%lake_h2osoi_vol3d(i,j,:) - Sfcprop(nb)%lake_h2osoi_liq3d(ix,:) = clm_lake%lake_h2osoi_liq3d(i,j,:) - Sfcprop(nb)%lake_h2osoi_ice3d(ix,:) = clm_lake%lake_h2osoi_ice3d(i,j,:) - Sfcprop(nb)%lake_t_soisno3d(ix,:) = clm_lake%lake_t_soisno3d(i,j,:) - Sfcprop(nb)%lake_t_lake3d(ix,:) = clm_lake%lake_t_lake3d(i,j,:) - Sfcprop(nb)%lake_icefrac3d(ix,:) = clm_lake%lake_icefrac3d(i,j,:) + im = Model%chunk_begin(nb)+ix-1 + + Sfcprop%T_snow(im) = clm_lake%T_snow(i,j) + Sfcprop%T_ice(im) = clm_lake%T_ice(i,j) + Sfcprop%lake_snl2d(im) = clm_lake%lake_snl2d(i,j) + Sfcprop%lake_h2osno2d(im) = clm_lake%lake_h2osno2d(i,j) + Sfcprop%lake_tsfc(im) = clm_lake%lake_tsfc(i,j) + Sfcprop%lake_savedtke12d(im) = clm_lake%lake_savedtke12d(i,j) + Sfcprop%lake_sndpth2d(im) = clm_lake%lake_sndpth2d(i,j) + Sfcprop%clm_lakedepth(im) = clm_lake%clm_lakedepth(i,j) + Sfcprop%clm_lake_initialized(im) = clm_lake%clm_lake_initialized(i,j) + Sfcprop%input_lakedepth(im) = clm_lake%input_lakedepth(i,j) + + Sfcprop%lake_snow_z3d(im,:) = clm_lake%lake_snow_z3d(i,j,:) + Sfcprop%lake_snow_dz3d(im,:) = clm_lake%lake_snow_dz3d(i,j,:) + Sfcprop%lake_snow_zi3d(im,:) = clm_lake%lake_snow_zi3d(i,j,:) + Sfcprop%lake_h2osoi_vol3d(im,:) = clm_lake%lake_h2osoi_vol3d(i,j,:) + Sfcprop%lake_h2osoi_liq3d(im,:) = clm_lake%lake_h2osoi_liq3d(i,j,:) + Sfcprop%lake_h2osoi_ice3d(im,:) = clm_lake%lake_h2osoi_ice3d(i,j,:) + Sfcprop%lake_t_soisno3d(im,:) = clm_lake%lake_t_soisno3d(i,j,:) + Sfcprop%lake_t_lake3d(im,:) = clm_lake%lake_t_lake3d(i,j,:) + Sfcprop%lake_icefrac3d(im,:) = clm_lake%lake_icefrac3d(i,j,:) enddo enddo end subroutine clm_lake_copy_to_grid diff --git a/io/fv3atm_oro_io.F90 b/io/fv3atm_oro_io.F90 index 493cfd4c4..3349bb1a6 100644 --- a/io/fv3atm_oro_io.F90 +++ b/io/fv3atm_oro_io.F90 @@ -141,63 +141,64 @@ subroutine Oro_io_copy(oro, Model, Sfcprop, Atm_block) implicit none class(Oro_io_data_type) :: oro type(GFS_control_type), intent(in) :: Model - type(GFS_sfcprop_type) :: Sfcprop(:) + type(GFS_sfcprop_type) :: Sfcprop type(FmsNetcdfDomainFile_t) :: Oro_restart type(block_control_type), intent(in) :: Atm_block - integer :: i,j,nb,ix,num + integer :: i,j,nb,ix,num,im - !$omp parallel do default(shared) private(i, j, nb, ix, num) + !$omp parallel do default(shared) private(i, j, nb, ix, num, im) do nb = 1, Atm_block%nblks !--- 2D variables do ix = 1, Atm_block%blksz(nb) i = Atm_block%index(nb)%ii(ix) - Atm_block%isc + 1 j = Atm_block%index(nb)%jj(ix) - Atm_block%jsc + 1 + im = Model%chunk_begin(nb)+ix-1 !--- stddev ! Sfcprop(nb)%hprim(ix) = oro%var2(i,j,1) !--- hprime(1:14) - num = 1 ; Sfcprop(nb)%hprime(ix,num) = oro%var2(i,j,num) - num = num + 1 ; Sfcprop(nb)%hprime(ix,num) = oro%var2(i,j,num) - num = num + 1 ; Sfcprop(nb)%hprime(ix,num) = oro%var2(i,j,num) - num = num + 1 ; Sfcprop(nb)%hprime(ix,num) = oro%var2(i,j,num) - num = num + 1 ; Sfcprop(nb)%hprime(ix,num) = oro%var2(i,j,num) - num = num + 1 ; Sfcprop(nb)%hprime(ix,num) = oro%var2(i,j,num) - num = num + 1 ; Sfcprop(nb)%hprime(ix,num) = oro%var2(i,j,num) - num = num + 1 ; Sfcprop(nb)%hprime(ix,num) = oro%var2(i,j,num) - num = num + 1 ; Sfcprop(nb)%hprime(ix,num) = oro%var2(i,j,num) - num = num + 1 ; Sfcprop(nb)%hprime(ix,num) = oro%var2(i,j,num) - num = num + 1 ; Sfcprop(nb)%hprime(ix,num) = oro%var2(i,j,num) - num = num + 1 ; Sfcprop(nb)%hprime(ix,num) = oro%var2(i,j,num) - num = num + 1 ; Sfcprop(nb)%hprime(ix,num) = oro%var2(i,j,num) - num = num + 1 ; Sfcprop(nb)%hprime(ix,num) = oro%var2(i,j,num) + num = 1 ; Sfcprop%hprime(im,num) = oro%var2(i,j,num) + num = num + 1 ; Sfcprop%hprime(im,num) = oro%var2(i,j,num) + num = num + 1 ; Sfcprop%hprime(im,num) = oro%var2(i,j,num) + num = num + 1 ; Sfcprop%hprime(im,num) = oro%var2(i,j,num) + num = num + 1 ; Sfcprop%hprime(im,num) = oro%var2(i,j,num) + num = num + 1 ; Sfcprop%hprime(im,num) = oro%var2(i,j,num) + num = num + 1 ; Sfcprop%hprime(im,num) = oro%var2(i,j,num) + num = num + 1 ; Sfcprop%hprime(im,num) = oro%var2(i,j,num) + num = num + 1 ; Sfcprop%hprime(im,num) = oro%var2(i,j,num) + num = num + 1 ; Sfcprop%hprime(im,num) = oro%var2(i,j,num) + num = num + 1 ; Sfcprop%hprime(im,num) = oro%var2(i,j,num) + num = num + 1 ; Sfcprop%hprime(im,num) = oro%var2(i,j,num) + num = num + 1 ; Sfcprop%hprime(im,num) = oro%var2(i,j,num) + num = num + 1 ; Sfcprop%hprime(im,num) = oro%var2(i,j,num) !--- oro - num = num + 1 ; Sfcprop(nb)%oro(ix) = oro%var2(i,j,num) - num = num + 1 ; Sfcprop(nb)%oro_uf(ix) = oro%var2(i,j,num) + num = num + 1 ; Sfcprop%oro(im) = oro%var2(i,j,num) + num = num + 1 ; Sfcprop%oro_uf(im) = oro%var2(i,j,num) - Sfcprop(nb)%landfrac(ix) = -9999.0 - Sfcprop(nb)%lakefrac(ix) = -9999.0 + Sfcprop%landfrac(im) = -9999.0 + Sfcprop%lakefrac(im) = -9999.0 - num = num + 1 ; Sfcprop(nb)%landfrac(ix) = oro%var2(i,j,num) !land frac [0:1] + num = num + 1 ; Sfcprop%landfrac(im) = oro%var2(i,j,num) !land frac [0:1] if (Model%lkm > 0 ) then if(oro%var2(i,j,num+1)>Model%lakefrac_threshold .and. & oro%var2(i,j,num+2)>Model%lakedepth_threshold) then - Sfcprop(nb)%lakefrac(ix) = oro%var2(i,j,num+1) !lake frac [0:1] - Sfcprop(nb)%lakedepth(ix) = oro%var2(i,j,num+2) !lake depth [m] !YWu + Sfcprop%lakefrac(im) = oro%var2(i,j,num+1) !lake frac [0:1] + Sfcprop%lakedepth(im) = oro%var2(i,j,num+2) !lake depth [m] !YWu else - Sfcprop(nb)%lakefrac(ix) = 0 - Sfcprop(nb)%lakedepth(ix) = -9999 + Sfcprop%lakefrac(im) = 0 + Sfcprop%lakedepth(im) = -9999 endif else - Sfcprop(nb)%lakefrac(ix) = oro%var2(i,j,num+1) !lake frac [0:1] - Sfcprop(nb)%lakedepth(ix) = oro%var2(i,j,num+2) !lake depth [m] !YWu + Sfcprop%lakefrac(im) = oro%var2(i,j,num+1) !lake frac [0:1] + Sfcprop%lakedepth(im) = oro%var2(i,j,num+2) !lake depth [m] !YWu endif num = num + 2 ! To account for lakefrac and lakedepth - Sfcprop(nb)%vegtype_frac(ix,:) = -9999.0 - Sfcprop(nb)%soiltype_frac(ix,:) = -9999.0 + Sfcprop%vegtype_frac(im,:) = -9999.0 + Sfcprop%soiltype_frac(im,:) = -9999.0 - Sfcprop(nb)%vegtype_frac(ix,:) = oro%var3v(i,j,:) ! vegetation type fractions, [0:1] - Sfcprop(nb)%soiltype_frac(ix,:) = oro%var3s(i,j,:) ! soil type fractions, [0:1] + Sfcprop%vegtype_frac(im,:) = oro%var3v(i,j,:) ! vegetation type fractions, [0:1] + Sfcprop%soiltype_frac(im,:) = oro%var3s(i,j,:) ! soil type fractions, [0:1] enddo enddo @@ -291,23 +292,25 @@ end subroutine Oro_scale_io_register !> \section Oro_scale_io_data_type%copy procedure !! After reading the restart, data is on temporary arrays with x-y data storage. !! This subroutine copies the x-y fields to Sfcprop's blocked grid storage arrays. - subroutine Oro_scale_io_copy(oro_scale, Sfcprop, Atm_block, first_index) + subroutine Oro_scale_io_copy(oro_scale, Model, Sfcprop, Atm_block, first_index) implicit none class(Oro_scale_io_data_type) :: oro_scale - type(GFS_sfcprop_type) :: Sfcprop(:) + type(GFS_control_type), intent(in) :: Model + type(GFS_sfcprop_type) :: Sfcprop type(block_control_type), intent(in) :: Atm_block integer, intent(in) :: first_index - integer :: i,j,nb,ix,num,v + integer :: i,j,nb,ix,num,v,im - !$OMP PARALLEL DO PRIVATE(nb,ix,i,j,v) + !$OMP PARALLEL DO PRIVATE(nb,ix,i,j,v,im) do nb = 1, Atm_block%nblks !--- 2D variables do ix = 1, Atm_block%blksz(nb) i = Atm_block%index(nb)%ii(ix) - Atm_block%isc + 1 j = Atm_block%index(nb)%jj(ix) - Atm_block%jsc + 1 + im = Model%chunk_begin(nb)+ix-1 do v=1,nvar_oro_scale - Sfcprop(nb)%hprime(ix,first_index-1+v) = oro_scale%var(i,j,v) + Sfcprop%hprime(im,first_index-1+v) = oro_scale%var(i,j,v) enddo enddo enddo diff --git a/io/fv3atm_restart_io.F90 b/io/fv3atm_restart_io.F90 index a567f992f..e7f60262b 100644 --- a/io/fv3atm_restart_io.F90 +++ b/io/fv3atm_restart_io.F90 @@ -6,7 +6,10 @@ module fv3atm_restart_io_mod use block_control_mod, only: block_control_type use mpp_mod, only: mpp_error, mpp_chksum, NOTE, FATAL - use GFS_typedefs, only: GFS_sfcprop_type, GFS_control_type, kind_phys, GFS_data_type + use GFS_typedefs, only: GFS_statein_type, GFS_stateout_type + use GFS_typedefs, only: GFS_sfcprop_type, GFS_control_type, kind_phys + use GFS_typedefs, only: GFS_grid_type, GFS_cldprop_type, GFS_tbd_type + use GFS_typedefs, only: GFS_radtend_type, GFS_coupling_type use GFS_restart, only: GFS_restart_type use fms_mod, only: stdout use fms2_io_mod, only: FmsNetcdfDomainFile_t, unlimited, & @@ -97,9 +100,9 @@ module fv3atm_restart_io_mod !>@brief Reads physics and surface fields. !> \section fv3atm_restart_read subroutine !! Calls sfc_prop_restart_read and phys_restart_read to read all surface and physics restart files. - subroutine fv3atm_restart_read (GFS_Data, GFS_Restart, Atm_block, Model, fv_domain, warm_start, ignore_rst_cksum) + subroutine fv3atm_restart_read (GFS_Sfcprop, GFS_Restart, Atm_block, Model, fv_domain, warm_start, ignore_rst_cksum) implicit none - type(GFS_data_type), intent(inout) :: GFS_Data(:) + type(GFS_sfcprop_type), intent(inout) :: GFS_Sfcprop type(GFS_restart_type), intent(inout) :: GFS_Restart type(block_control_type), intent(in) :: Atm_block type(GFS_control_type), intent(inout) :: Model @@ -108,7 +111,7 @@ subroutine fv3atm_restart_read (GFS_Data, GFS_Restart, Atm_block, Model, fv_doma logical, intent(in) :: ignore_rst_cksum !--- read in surface data from chgres - call sfc_prop_restart_read (GFS_Data%Sfcprop, Atm_block, Model, fv_domain, warm_start, ignore_rst_cksum) + call sfc_prop_restart_read (GFS_Sfcprop, Atm_block, Model, fv_domain, warm_start, ignore_rst_cksum) !--- read in physics restart data call phys_restart_read (GFS_Restart, Atm_block, Model, fv_domain, ignore_rst_cksum) @@ -120,9 +123,9 @@ end subroutine fv3atm_restart_read !! Calls sfc_prop_restart_write and phys_restart_write to write !! surface and physics restart fields. This pauses the model to !! write; it does not use the write component (quilt). - subroutine fv3atm_restart_write (GFS_Data, GFS_Restart, Atm_block, Model, fv_domain, timestamp) + subroutine fv3atm_restart_write (GFS_Sfcprop, GFS_Restart, Atm_block, Model, fv_domain, timestamp) implicit none - type(GFS_data_type), intent(inout) :: GFS_Data(:) + type(GFS_sfcprop_type), intent(inout) :: GFS_Sfcprop type(GFS_restart_type), intent(inout) :: GFS_Restart type(block_control_type), intent(in) :: Atm_block type(GFS_control_type), intent(in) :: Model @@ -130,7 +133,7 @@ subroutine fv3atm_restart_write (GFS_Data, GFS_Restart, Atm_block, Model, fv_dom character(len=32), optional, intent(in) :: timestamp !--- write surface data from chgres - call sfc_prop_restart_write (GFS_Data%Sfcprop, Atm_block, Model, fv_domain, timestamp) + call sfc_prop_restart_write (GFS_Sfcprop, Atm_block, Model, fv_domain, timestamp) !--- write physics restart data call phys_restart_write (GFS_Restart, Atm_block, Model, fv_domain, timestamp) @@ -140,14 +143,21 @@ end subroutine fv3atm_restart_write !---------------- ! fv3atm_checksum !---------------- - subroutine fv3atm_checksum (Model, GFS_Data, Atm_block) + subroutine fv3atm_checksum (Model, GFS_Statein, GFS_Stateout, GFS_Grid, GFS_Tbd, GFS_Cldprop, GFS_Sfcprop, GFS_Radtend, GFS_Coupling, Atm_block) implicit none !--- interface variables type(GFS_control_type), intent(in) :: Model - type(GFS_data_type), intent(in) :: GFS_Data(:) + type(GFS_statein_type), intent(in) :: GFS_Statein + type(GFS_stateout_type), intent(in) :: GFS_Stateout + type(GFS_grid_type), intent(in) :: GFS_Grid + type(GFS_tbd_type), intent(in) :: GFS_Tbd + type(GFS_cldprop_type), intent(in) :: GFS_Cldprop + type(GFS_sfcprop_type), intent(in) :: GFS_Sfcprop + type(GFS_radtend_type), intent(in) :: GFS_Radtend + type(GFS_coupling_type), intent(in) :: GFS_Coupling type (block_control_type), intent(in) :: Atm_block !--- local variables - integer :: outunit, i, ix, nb, isc, iec, jsc, jec, lev, ntr, k + integer :: outunit, i, ix, im, nb, isc, iec, jsc, jec, lev, ntr, k integer :: nsfcprop2d, nt real(kind=kind_phys), allocatable :: temp2d(:,:,:) real(kind=kind_phys), allocatable :: temp3d(:,:,:,:) @@ -161,7 +171,7 @@ subroutine fv3atm_checksum (Model, GFS_Data, Atm_block) jec = Model%jsc+Model%ny-1 lev = Model%levs - ntr = size(GFS_Data(1)%Statein%qgrs,3) + ntr = size(GFS_Statein%qgrs,3) nsfcprop2d = 94 if (Model%lsm == Model%lsm_noahmp) then @@ -206,274 +216,291 @@ subroutine fv3atm_checksum (Model, GFS_Data, Atm_block) ! Copy into temp2d nt=0 - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Statein%pgr) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%slmsk) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%tsfc) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%tisfc) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%snowd) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%zorl) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%fice) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%hprime(:,1)) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%sncovr) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%snoalb) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%alvsf) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%alnsf) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%alvwf) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%alnwf) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%facsf) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%facwf) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%slope) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%shdmin) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%shdmax) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%tg3) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%vfrac) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%vtype) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%stype) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%scolor) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%uustar) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%oro) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%oro_uf) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%hice) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%weasd) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%canopy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%ffmm) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%ffhh) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%f10m) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%tprcp) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%srflag) + ! DH* clean this up - create a new/replacement copy_from_GFS_data - this can be outside the block + ! loop, too! + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Statein%pgr , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%slmsk , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%tsfc , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%tisfc , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%snowd , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%zorl , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%fice , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%hprime(:,1), (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%sncovr , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%snoalb , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%alvsf , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%alnsf , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%alvwf , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%alnwf , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%facsf , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%facwf , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%slope , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%shdmin , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%shdmax , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%tg3 , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%vfrac , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%vtype , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%stype , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%scolor , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%uustar , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%oro , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%oro_uf , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%hice , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%weasd , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%canopy , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%ffmm , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%ffhh , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%f10m , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%tprcp , (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%srflag , (/iec-isc+1, jec-jsc+1/)) lsm_choice: if (Model%lsm == Model%lsm_noah .or. Model%lsm == Model%lsm_noahmp) then - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%slc) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%smc) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%stc) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%slc, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%smc, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%stc, (/iec-isc+1, jec-jsc+1/)) elseif (Model%lsm == Model%lsm_ruc) then do k=1,3 - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%sh2o(:,k)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%sh2o(:,k), (/iec-isc+1, jec-jsc+1/)) enddo + ! *DH ! Combine levels 4 to lsoil_lsm (9 for RUC) into one - nt=nt+1 - do ix=1,Atm_block%blksz(nb) - temp2d(ii1(ix),jj1(ix),nt) = sum(GFS_Data(nb)%Sfcprop%sh2o(ix,4:Model%lsoil_lsm)) - enddo + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(sum(GFS_Sfcprop%sh2o(:,4:Model%lsoil_lsm), dim=1), (/iec-isc+1, jec-jsc+1/)) + !nt=nt+1 + !do ix=1,Atm_block%blksz(nb) + ! temp2d(ii1(ix),jj1(ix),nt) = sum(GFS_Data(nb)%Sfcprop%sh2o(ix,4:Model%lsoil_lsm)) + !enddo + ! DH* do k=1,3 - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%smois(:,k)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%smois(:,k), (/iec-isc+1, jec-jsc+1/)) enddo + ! *DH ! Combine levels 4 to lsoil_lsm (9 for RUC) into one - nt=nt+1 - do ix=1,Atm_block%blksz(nb) - temp2d(ii1(ix),jj1(ix),nt) = sum(GFS_Data(nb)%Sfcprop%smois(ix,4:Model%lsoil_lsm)) - enddo + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(sum(GFS_Sfcprop%smois(:,4:Model%lsoil_lsm), dim=1), (/iec-isc+1, jec-jsc+1/)) + !nt=nt+1 + !do ix=1,Atm_block%blksz(nb) + ! temp2d(ii1(ix),jj1(ix),nt) = sum(GFS_Data(nb)%Sfcprop%smois(ix,4:Model%lsoil_lsm)) + !enddo + ! DH* do k=1,3 - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%tslb(:,k)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%tslb(:,k), (/iec-isc+1, jec-jsc+1/)) enddo + ! *DH ! Combine levels 4 to lsoil_lsm (9 for RUC) into one - nt=nt+1 - do ix=1,Atm_block%blksz(nb) - temp2d(ii1(ix),jj1(ix),nt) = sum(GFS_Data(nb)%Sfcprop%tslb(ix,4:Model%lsoil_lsm)) - enddo + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(sum(GFS_Sfcprop%tslb(:,4:Model%lsoil_lsm), dim=1), (/iec-isc+1, jec-jsc+1/)) + !nt=nt+1 + !do ix=1,Atm_block%blksz(nb) + ! temp2d(ii1(ix),jj1(ix),nt) = sum(GFS_Data(nb)%Sfcprop%tslb(ix,4:Model%lsoil_lsm)) + !enddo endif lsm_choice - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%t2m) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%q2m) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Coupling%nirbmdi) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Coupling%nirdfdi) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Coupling%visbmdi) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Coupling%visdfdi) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Coupling%nirbmui) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Coupling%nirdfui) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Coupling%visbmui) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Coupling%visdfui) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Coupling%sfcdsw) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Coupling%sfcnsw) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Coupling%sfcdlw) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Grid%xlon) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Grid%xlat) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Grid%xlat_d) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Grid%sinlat) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Grid%coslat) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Grid%area) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Grid%dx) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%t2m, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%q2m, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Coupling%nirbmdi, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Coupling%nirdfdi, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Coupling%visbmdi, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Coupling%visdfdi, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Coupling%nirbmui, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Coupling%nirdfui, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Coupling%visbmui, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Coupling%visdfui, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Coupling%sfcdsw, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Coupling%sfcnsw, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Coupling%sfcdlw, (/iec-isc+1, jec-jsc+1/)) + ! DH* clean this up - create a new/replacement copy_from_GFS_data + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Grid%xlon, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Grid%xlat, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Grid%xlat_d, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Grid%sinlat, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Grid%coslat, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Grid%area, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Grid%dx, (/iec-isc+1, jec-jsc+1/)) if (Model%ntoz > 0) then - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Grid%ddy_o3) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Grid%ddy_o3, (/iec-isc+1, jec-jsc+1/)) endif if (Model%h2o_phys) then - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Grid%ddy_h) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Grid%ddy_h, (/iec-isc+1, jec-jsc+1/)) endif - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Cldprop%cv) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Cldprop%cvt) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Cldprop%cvb) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Radtend%sfalb) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Radtend%coszen) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Radtend%tsflw) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Radtend%semis) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Radtend%coszdg) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Cldprop%cv, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Cldprop%cvt, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Cldprop%cvb, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Radtend%sfalb, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Radtend%coszen, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Radtend%tsflw, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Radtend%semis, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Radtend%coszdg, (/iec-isc+1, jec-jsc+1/)) ! Radtend%sfcfsw is an array of derived type, so we copy all ! eight elements of the type in one loop do ix=1,Atm_block%blksz(nb) - temp2d(ii1(ix),jj1(ix),nt+1) = GFS_Data(nb)%Radtend%sfcfsw(ix)%upfxc - temp2d(ii1(ix),jj1(ix),nt+2) = GFS_Data(nb)%Radtend%sfcfsw(ix)%upfx0 - temp2d(ii1(ix),jj1(ix),nt+3) = GFS_Data(nb)%Radtend%sfcfsw(ix)%dnfxc - temp2d(ii1(ix),jj1(ix),nt+4) = GFS_Data(nb)%Radtend%sfcfsw(ix)%dnfx0 - temp2d(ii1(ix),jj1(ix),nt+5) = GFS_Data(nb)%Radtend%sfcflw(ix)%upfxc - temp2d(ii1(ix),jj1(ix),nt+6) = GFS_Data(nb)%Radtend%sfcflw(ix)%upfx0 - temp2d(ii1(ix),jj1(ix),nt+7) = GFS_Data(nb)%Radtend%sfcflw(ix)%dnfxc - temp2d(ii1(ix),jj1(ix),nt+8) = GFS_Data(nb)%Radtend%sfcflw(ix)%dnfx0 + im = Model%chunk_begin(nb)+ix-1 + temp2d(ii1(ix),jj1(ix),nt+1) = GFS_Radtend%sfcfsw(im)%upfxc + temp2d(ii1(ix),jj1(ix),nt+2) = GFS_Radtend%sfcfsw(im)%upfx0 + temp2d(ii1(ix),jj1(ix),nt+3) = GFS_Radtend%sfcfsw(im)%dnfxc + temp2d(ii1(ix),jj1(ix),nt+4) = GFS_Radtend%sfcfsw(im)%dnfx0 + temp2d(ii1(ix),jj1(ix),nt+5) = GFS_Radtend%sfcflw(im)%upfxc + temp2d(ii1(ix),jj1(ix),nt+6) = GFS_Radtend%sfcflw(im)%upfx0 + temp2d(ii1(ix),jj1(ix),nt+7) = GFS_Radtend%sfcflw(im)%dnfxc + temp2d(ii1(ix),jj1(ix),nt+8) = GFS_Radtend%sfcflw(im)%dnfx0 enddo nt = nt + 8 - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%tiice(:,1)) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%tiice(:,2)) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%albdirvis_lnd) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%albdirnir_lnd) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%albdifvis_lnd) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%albdifnir_lnd) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%emis_lnd) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%emis_ice) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%sncovr_ice) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%tiice(:,1), (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%tiice(:,2), (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%albdirvis_lnd, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%albdirnir_lnd, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%albdifvis_lnd, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%albdifnir_lnd, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%emis_lnd, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%emis_ice, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%sncovr_ice, (/iec-isc+1, jec-jsc+1/)) if (Model%use_cice_alb .or. Model%lsm == Model%lsm_ruc) then - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%albdirvis_ice) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%albdirnir_ice) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%albdifvis_ice) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%albdifnir_ice) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%albdirvis_ice, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%albdirnir_ice, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%albdifvis_ice, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%albdifnir_ice, (/iec-isc+1, jec-jsc+1/)) endif lsm_choice_2: if (Model%lsm == Model%lsm_noahmp) then - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%snowxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%tvxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%tgxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%canicexy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%canliqxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%eahxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%tahxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%cmxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%chxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%fwetxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%sneqvoxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%alboldxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%qsnowxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%wslakexy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%zwtxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%waxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%wtxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%lfmassxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%rtmassxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%stmassxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%woodxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%stblcpxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%fastcpxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%xsaixy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%xlaixy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%taussxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%smcwtdxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%deeprechxy) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%rechxy) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%snowxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%tvxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%tgxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%canicexy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%canliqxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%eahxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%tahxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%cmxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%chxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%fwetxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%sneqvoxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%alboldxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%qsnowxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%wslakexy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%zwtxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%waxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%wtxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%lfmassxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%rtmassxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%stmassxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%woodxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%stblcpxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%fastcpxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%xsaixy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%xlaixy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%taussxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%smcwtdxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%deeprechxy, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%rechxy, (/iec-isc+1, jec-jsc+1/)) ! These five arrays use bizarre indexing, so we use loops: do k=-2,0 - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%snicexy(:,k)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%snicexy(:,k), (/iec-isc+1, jec-jsc+1/)) enddo do k=-2,0 - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%snliqxy(:,k)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%snliqxy(:,k), (/iec-isc+1, jec-jsc+1/)) enddo do k=-2,0 - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%tsnoxy(:,k)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%tsnoxy(:,k), (/iec-isc+1, jec-jsc+1/)) enddo do k=1,4 - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%smoiseq(:,k)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%smoiseq(:,k), (/iec-isc+1, jec-jsc+1/)) enddo do k=-2,4 - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%zsnsoxy(:,k)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%zsnsoxy(:,k), (/iec-isc+1, jec-jsc+1/)) enddo elseif (Model%lsm == Model%lsm_ruc) then - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%wetness) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%clw_surf_land) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%clw_surf_ice) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%qwv_surf_land) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%qwv_surf_ice) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%tsnow_land) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%tsnow_ice) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%snowfallac_land) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%snowfallac_ice) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%sfalb_lnd) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%sfalb_lnd_bck) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%sfalb_ice) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%wetness, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%clw_surf_land, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%clw_surf_ice, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%qwv_surf_land, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%qwv_surf_ice, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%tsnow_land, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%tsnow_ice, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%snowfallac_land, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%snowfallac_ice, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%sfalb_lnd, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%sfalb_lnd_bck, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%sfalb_ice, (/iec-isc+1, jec-jsc+1/)) if (Model%rdlai) then - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%xlaixy) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%xlaixy, (/iec-isc+1, jec-jsc+1/)) endif endif lsm_choice_2 nstf_name_choice: if (Model%nstf_name(1) > 0) then - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%tref) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%z_c) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%c_0) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%c_d) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%w_0) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%w_d) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%xt) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%xs) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%xu) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%xz) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%zm) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%xtts) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%xzts) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%ifd) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%dt_cool) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%qrain) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%tref, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%z_c, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%c_0, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%c_d, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%w_0, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%w_d, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%xt, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%xs, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%xu, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%xz, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%zm, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%xtts, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%xzts, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%ifd, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%dt_cool, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%qrain, (/iec-isc+1, jec-jsc+1/)) endif nstf_name_choice ! Flake if (Model%lkm > 0 .and. Model%iopt_lake==Model%iopt_lake_flake) then - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%T_snow) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%T_ice) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%h_ML) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%t_ML) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%t_mnw) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%h_talb) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%t_talb) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%t_bot1) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%t_bot2) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%c_t) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%T_snow, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%T_ice, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%h_ML, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%t_ML, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%t_mnw, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%h_talb, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%t_talb, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%t_bot1, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%t_bot2, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Sfcprop%c_t, (/iec-isc+1, jec-jsc+1/)) endif - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Tbd%phy_f2d) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Tbd%phy_fctd) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Tbd%phy_f2d, (/iec-isc+1, jec-jsc+1/)) + nt=nt+1; temp2d(isc:iec,jsc:jec,nt) = reshape(GFS_Tbd%phy_fctd, (/iec-isc+1, jec-jsc+1/)) + ! *DH ! Copy to temp3dlevsp1 nt=0 - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp3dlevsp1, GFS_Data(nb)%Statein%phii) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp3dlevsp1, GFS_Data(nb)%Statein%prsi) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp3dlevsp1, GFS_Data(nb)%Statein%prsik) + ! DH* + nt=nt+1; temp3dlevsp1(isc:iec,jsc:jec,1:lev+1,nt) = reshape(GFS_Statein%phii, (/iec-isc+1, jec-jsc+1, lev+1/)) + nt=nt+1; temp3dlevsp1(isc:iec,jsc:jec,1:lev+1,nt) = reshape(GFS_Statein%prsi, (/iec-isc+1, jec-jsc+1, lev+1/)) + nt=nt+1; temp3dlevsp1(isc:iec,jsc:jec,1:lev+1,nt) = reshape(GFS_Statein%prsik, (/iec-isc+1, jec-jsc+1, lev+1/)) + ! *DH ! Copy to temp3d nt=0 - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp3d,GFS_Data(nb)%Statein%phil) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp3d,GFS_Data(nb)%Statein%prsl) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp3d,GFS_Data(nb)%Statein%prslk) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp3d,GFS_Data(nb)%Statein%ugrs) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp3d,GFS_Data(nb)%Statein%vgrs) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp3d,GFS_Data(nb)%Statein%vvl) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp3d,GFS_Data(nb)%Statein%tgrs) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp3d,GFS_Data(nb)%Stateout%gu0) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp3d,GFS_Data(nb)%Stateout%gv0) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp3d,GFS_Data(nb)%Stateout%gt0) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp3d,GFS_Data(nb)%Radtend%htrsw) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp3d,GFS_Data(nb)%Radtend%htrlw) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp3d,GFS_Data(nb)%Radtend%swhc) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp3d,GFS_Data(nb)%Radtend%lwhc) + ! DH* + nt=nt+1; temp3d(isc:iec,jsc:jec,1:lev,nt) = reshape(GFS_Statein%phil, (/iec-isc+1, jec-jsc+1, lev/)) + nt=nt+1; temp3d(isc:iec,jsc:jec,1:lev,nt) = reshape(GFS_Statein%prsl, (/iec-isc+1, jec-jsc+1, lev/)) + nt=nt+1; temp3d(isc:iec,jsc:jec,1:lev,nt) = reshape(GFS_Statein%prslk, (/iec-isc+1, jec-jsc+1, lev/)) + nt=nt+1; temp3d(isc:iec,jsc:jec,1:lev,nt) = reshape(GFS_Statein%ugrs, (/iec-isc+1, jec-jsc+1, lev/)) + nt=nt+1; temp3d(isc:iec,jsc:jec,1:lev,nt) = reshape(GFS_Statein%vgrs, (/iec-isc+1, jec-jsc+1, lev/)) + nt=nt+1; temp3d(isc:iec,jsc:jec,1:lev,nt) = reshape(GFS_Statein%vvl, (/iec-isc+1, jec-jsc+1, lev/)) + nt=nt+1; temp3d(isc:iec,jsc:jec,1:lev,nt) = reshape(GFS_Statein%tgrs, (/iec-isc+1, jec-jsc+1, lev/)) + nt=nt+1; temp3d(isc:iec,jsc:jec,1:lev,nt) = reshape(GFS_Stateout%gu0, (/iec-isc+1, jec-jsc+1, lev/)) + nt=nt+1; temp3d(isc:iec,jsc:jec,1:lev,nt) = reshape(GFS_Stateout%gv0, (/iec-isc+1, jec-jsc+1, lev/)) + nt=nt+1; temp3d(isc:iec,jsc:jec,1:lev,nt) = reshape(GFS_Stateout%gt0, (/iec-isc+1, jec-jsc+1, lev/)) + nt=nt+1; temp3d(isc:iec,jsc:jec,1:lev,nt) = reshape(GFS_Radtend%htrsw, (/iec-isc+1, jec-jsc+1, lev/)) + nt=nt+1; temp3d(isc:iec,jsc:jec,1:lev,nt) = reshape(GFS_Radtend%htrlw, (/iec-isc+1, jec-jsc+1, lev/)) + nt=nt+1; temp3d(isc:iec,jsc:jec,1:lev,nt) = reshape(GFS_Radtend%swhc, (/iec-isc+1, jec-jsc+1, lev/)) + nt=nt+1; temp3d(isc:iec,jsc:jec,1:lev,nt) = reshape(GFS_Radtend%lwhc, (/iec-isc+1, jec-jsc+1, lev/)) do k = 1,Model%ntot3d - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp3d,GFS_Data(nb)%Tbd%phy_f3d(:,:,k)) + nt=nt+1; temp3d(isc:iec,jsc:jec,1:lev,nt) = reshape(GFS_Tbd%phy_f3d(:,:,k), (/iec-isc+1, jec-jsc+1, lev/)) enddo do k = 1,ntr - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp3d,GFS_Data(nb)%Statein%qgrs(:,:,k)) - call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp3d,GFS_Data(nb)%Stateout%gq0(:,:,k)) + nt=nt+1; temp3d(isc:iec,jsc:jec,1:lev,nt) = reshape(GFS_Statein%qgrs(:,:,k), (/iec-isc+1, jec-jsc+1, lev/)) + nt=nt+1; temp3d(isc:iec,jsc:jec,1:lev,nt) = reshape(GFS_Stateout%gq0(:,:,k), (/iec-isc+1, jec-jsc+1, lev/)) enddo + ! *DH enddo block_loop @@ -507,7 +534,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta use fv3atm_rrfs_sd_io implicit none !--- interface variable definitions - type(GFS_sfcprop_type), intent(inout) :: Sfcprop(:) + type(GFS_sfcprop_type), intent(inout) :: Sfcprop type (block_control_type), intent(in) :: Atm_block type(GFS_control_type), intent(inout) :: Model type (domain2d), intent(in) :: fv_domain @@ -566,7 +593,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta call close_file(dust12m_restart) !--- Copy to Sfcprop and free temporary arrays: - call rrfs_sd_emis%copy_dust12m(Sfcprop, Atm_block) + call rrfs_sd_emis%copy_dust12m(Model, Sfcprop, Atm_block) !---------------------------------------------- @@ -584,7 +611,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta call close_file(emi_restart) !--- Copy to Sfcprop and free temporary arrays: - call rrfs_sd_emis%copy_emi(Sfcprop, Atm_block) + call rrfs_sd_emis%copy_emi(Model, Sfcprop, Atm_block) !---------------------------------------------- @@ -624,7 +651,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta &INPUT/oro_data_ls.tile*.nc') call read_restart(Oro_ls_restart, ignore_checksum=ignore_rst_cksum) call close_file(Oro_ls_restart) - call oro_ls%copy(Sfcprop,Atm_block,1) + call oro_ls%copy(Model,Sfcprop,Atm_block,1) endif !--- open restart file @@ -636,7 +663,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta &INPUT/oro_data_ss.tile*.nc') call read_restart(Oro_ss_restart, ignore_checksum=ignore_rst_cksum) call close_file(Oro_ss_restart) - call oro_ss%copy(Sfcprop,Atm_block,15) + call oro_ss%copy(Model,Sfcprop,Atm_block,15) end if !--- SURFACE FILE @@ -724,7 +751,7 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta use fv3atm_rrfs_sd_io implicit none !--- interface variable definitions - type(GFS_sfcprop_type), intent(in) :: Sfcprop(:) + type(GFS_sfcprop_type), intent(in) :: Sfcprop type(block_control_type), intent(in) :: Atm_block type(GFS_control_type), intent(in) :: Model type(domain2d), intent(in) :: fv_domain @@ -985,7 +1012,7 @@ end subroutine phys_restart_write subroutine fv3atm_restart_register (Sfcprop, GFS_restart, Atm_block, Model) implicit none - type(GFS_sfcprop_type), intent(in) :: Sfcprop(:) + type(GFS_sfcprop_type), intent(in) :: Sfcprop type(GFS_restart_type), intent(in) :: GFS_Restart type(block_control_type), intent(in) :: Atm_block type(GFS_control_type), intent(in) :: Model @@ -1029,7 +1056,7 @@ subroutine fv_sfc_restart_output(Sfcprop, Atm_block, Model) !--- interface variable definitions implicit none - type(GFS_sfcprop_type), intent(in) :: Sfcprop(:) + type(GFS_sfcprop_type), intent(in) :: Sfcprop type(block_control_type), intent(in) :: Atm_block type(GFS_control_type), intent(in) :: Model diff --git a/io/fv3atm_rrfs_sd_io.F90 b/io/fv3atm_rrfs_sd_io.F90 index 93e2981c7..927607af9 100644 --- a/io/fv3atm_rrfs_sd_io.F90 +++ b/io/fv3atm_rrfs_sd_io.F90 @@ -159,7 +159,7 @@ end subroutine rrfs_sd_state_allocate_data subroutine rrfs_sd_state_fill_data(data, Model, Atm_block, Sfcprop) implicit none class(rrfs_sd_state_type) :: data - type(GFS_sfcprop_type), intent(in) :: Sfcprop(:) + type(GFS_sfcprop_type), intent(in) :: Sfcprop type(GFS_control_type), intent(in) :: Model type(block_control_type), intent(in) :: Atm_block @@ -306,25 +306,26 @@ end subroutine rrfs_sd_state_deallocate_data subroutine rrfs_sd_state_copy_to_grid(data, Model, Atm_block, Sfcprop) implicit none class(rrfs_sd_state_type) :: data - type(GFS_sfcprop_type), intent(in) :: Sfcprop(:) + type(GFS_sfcprop_type), intent(in) :: Sfcprop type(GFS_control_type), intent(in) :: Model type(block_control_type), intent(in) :: Atm_block - integer :: nb, ix, i, j + integer :: nb, ix, i, j, im - !$omp parallel do default(shared) private(i, j, nb, ix) + !$omp parallel do default(shared) private(i, j, nb, ix, im) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) i = Atm_block%index(nb)%ii(ix) - Atm_block%isc + 1 j = Atm_block%index(nb)%jj(ix) - Atm_block%jsc + 1 + im = Model%chunk_begin(nb)+ix-1 - Sfcprop(nb)%emdust(ix) = data%emdust(i,j) - Sfcprop(nb)%emseas(ix) = data%emseas(i,j) - Sfcprop(nb)%emanoc(ix) = data%emanoc(i,j) - Sfcprop(nb)%fhist(ix) = data%fhist(i,j) - Sfcprop(nb)%coef_bb_dc(ix) = data%coef_bb_dc(i,j) + Sfcprop%emdust(im) = data%emdust(i,j) + Sfcprop%emseas(im) = data%emseas(i,j) + Sfcprop%emanoc(im) = data%emanoc(i,j) + Sfcprop%fhist(im) = data%fhist(i,j) + Sfcprop%coef_bb_dc(im) = data%coef_bb_dc(i,j) - Sfcprop(nb)%fire_in(ix,:) = data%fire_in(i,j,:) + Sfcprop%fire_in(im,:) = data%fire_in(i,j,:) enddo enddo end subroutine rrfs_sd_state_copy_to_grid @@ -339,25 +340,26 @@ end subroutine rrfs_sd_state_copy_to_grid subroutine rrfs_sd_state_copy_from_grid(data, Model, Atm_block, Sfcprop) implicit none class(rrfs_sd_state_type) :: data - type(GFS_sfcprop_type), intent(in) :: Sfcprop(:) + type(GFS_sfcprop_type), intent(in) :: Sfcprop type(GFS_control_type), intent(in) :: Model type(block_control_type), intent(in) :: Atm_block - integer :: nb, ix, i, j + integer :: nb, ix, i, j, im - !$omp parallel do default(shared) private(i, j, nb, ix) + !$omp parallel do default(shared) private(i, j, nb, ix, im) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) i = Atm_block%index(nb)%ii(ix) - Atm_block%isc + 1 j = Atm_block%index(nb)%jj(ix) - Atm_block%jsc + 1 + im = Model%chunk_begin(nb)+ix-1 - data%emdust(i,j) = Sfcprop(nb)%emdust(ix) - data%emseas(i,j) = Sfcprop(nb)%emseas(ix) - data%emanoc(i,j) = Sfcprop(nb)%emanoc(ix) - data%fhist(i,j) = Sfcprop(nb)%fhist(ix) - data%coef_bb_dc(i,j) = Sfcprop(nb)%coef_bb_dc(ix) + data%emdust(i,j) = Sfcprop%emdust(im) + data%emseas(i,j) = Sfcprop%emseas(im) + data%emanoc(i,j) = Sfcprop%emanoc(im) + data%fhist(i,j) = Sfcprop%fhist(im) + data%coef_bb_dc(i,j) = Sfcprop%coef_bb_dc(im) - data%fire_in(i,j,:) = Sfcprop(nb)%fire_in(ix,:) + data%fire_in(i,j,:) = Sfcprop%fire_in(im,:) enddo enddo end subroutine rrfs_sd_state_copy_from_grid @@ -412,31 +414,33 @@ end subroutine rrfs_sd_emissions_register_dust12m ! -------------------------------------------------------------------- !>@ Called after register_dust12m() to copy data from internal arrays to the model grid and deallocate arrays - subroutine rrfs_sd_emissions_copy_dust12m(data, Sfcprop, Atm_block) + subroutine rrfs_sd_emissions_copy_dust12m(data, Model, Sfcprop, Atm_block) implicit none - type(GFS_sfcprop_type), intent(inout) :: Sfcprop(:) + type(GFS_control_type), intent(in) :: Model + type(GFS_sfcprop_type), intent(inout) :: Sfcprop class(rrfs_sd_emissions_type) :: data type(block_control_type), intent(in) :: Atm_block - integer :: num, nb, i, j, ix, k + integer :: num, nb, i, j, ix, k, im if(.not.associated(data%dust12m_name) .or. .not.associated(data%dust12m_var)) then write(0,*) 'ERROR: Called copy_dust12m before register_dust12m' return endif - !$omp parallel do default(shared) private(i, j, nb, ix, k) + !$omp parallel do default(shared) private(i, j, nb, ix, k, im) do nb = 1, Atm_block%nblks !--- 3D variables do ix = 1, Atm_block%blksz(nb) i = Atm_block%index(nb)%ii(ix) - Atm_block%isc + 1 j = Atm_block%index(nb)%jj(ix) - Atm_block%jsc + 1 + im = Model%chunk_begin(nb)+ix-1 do k = 1, 12 - Sfcprop(nb)%dust12m_in(ix,k,1) = data%dust12m_var(i,j,k,1) - Sfcprop(nb)%dust12m_in(ix,k,2) = data%dust12m_var(i,j,k,2) - Sfcprop(nb)%dust12m_in(ix,k,3) = data%dust12m_var(i,j,k,3) - Sfcprop(nb)%dust12m_in(ix,k,4) = data%dust12m_var(i,j,k,4) - Sfcprop(nb)%dust12m_in(ix,k,5) = data%dust12m_var(i,j,k,5) + Sfcprop%dust12m_in(im,k,1) = data%dust12m_var(i,j,k,1) + Sfcprop%dust12m_in(im,k,2) = data%dust12m_var(i,j,k,2) + Sfcprop%dust12m_in(im,k,3) = data%dust12m_var(i,j,k,3) + Sfcprop%dust12m_in(im,k,4) = data%dust12m_var(i,j,k,4) + Sfcprop%dust12m_in(im,k,5) = data%dust12m_var(i,j,k,5) enddo enddo enddo @@ -489,13 +493,14 @@ end subroutine rrfs_sd_emissions_register_emi ! -------------------------------------------------------------------- !>@ Called after register_emi() to copy data from internal arrays to the model grid and deallocate arrays - subroutine rrfs_sd_emissions_copy_emi(data, Sfcprop, Atm_block) + subroutine rrfs_sd_emissions_copy_emi(data, Model, Sfcprop, Atm_block) implicit none - type(GFS_sfcprop_type), intent(inout) :: Sfcprop(:) + type(GFS_control_type), intent(in) :: Model + type(GFS_sfcprop_type), intent(inout) :: Sfcprop class(rrfs_sd_emissions_type) :: data type(block_control_type), intent(in) :: Atm_block - integer :: num, nb, i, j, ix + integer :: num, nb, i, j, ix, im if(.not.associated(data%emi_name) .or. .not.associated(data%emi_var)) then write(0,*) 'ERROR: Called copy_emi before register_emi' @@ -503,13 +508,14 @@ subroutine rrfs_sd_emissions_copy_emi(data, Sfcprop, Atm_block) endif do num=1,data%nvar_emi - !$omp parallel do default(shared) private(i, j, nb, ix) + !$omp parallel do default(shared) private(i, j, nb, ix, im) do nb = 1, Atm_block%nblks !--- 2D variables do ix = 1, Atm_block%blksz(nb) i = Atm_block%index(nb)%ii(ix) - Atm_block%isc + 1 j = Atm_block%index(nb)%jj(ix) - Atm_block%jsc + 1 - Sfcprop(nb)%emi_in(ix,num) = data%emi_var(i,j,1,num) + im = Model%chunk_begin(nb)+ix-1 + Sfcprop%emi_in(im,num) = data%emi_var(i,j,1,num) enddo enddo enddo @@ -605,31 +611,32 @@ subroutine rrfs_sd_emissions_copy_fire(data, Model, Sfcprop, Atm_block) implicit none class(rrfs_sd_emissions_type) :: data type(GFS_control_type), intent(in) :: Model - type(GFS_sfcprop_type), intent(inout) :: Sfcprop(:) + type(GFS_sfcprop_type), intent(inout) :: Sfcprop type(block_control_type), intent(in) :: Atm_block - integer :: nb, ix, k, i, j + integer :: nb, ix, k, i, j, im integer :: ebb_dcycle ebb_dcycle=Model%ebb_dcycle - !$omp parallel do default(shared) private(i, j, nb, ix, k) + !$omp parallel do default(shared) private(i, j, nb, ix, k, im) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) i = Atm_block%index(nb)%ii(ix) - Atm_block%isc + 1 j = Atm_block%index(nb)%jj(ix) - Atm_block%jsc + 1 + im = Model%chunk_begin(nb)+ix-1 if (ebb_dcycle==1) then ! -- retro mode !--- 3D variables do k = 1, 24 - Sfcprop(nb)%smoke_RRFS(ix,k,1) = data%fire_var(i,j,k,1) - Sfcprop(nb)%smoke_RRFS(ix,k,2) = data%fire_var(i,j,k,2) + Sfcprop%smoke_RRFS(im,k,1) = data%fire_var(i,j,k,1) + Sfcprop%smoke_RRFS(im,k,2) = data%fire_var(i,j,k,2) enddo elseif (ebb_dcycle==2) then ! -- forecast mode !--- 2D variables - Sfcprop(nb)%smoke2d_RRFS(ix,1) = data%fire_var2d(i,j,1) - Sfcprop(nb)%smoke2d_RRFS(ix,2) = data%fire_var2d(i,j,2) - Sfcprop(nb)%smoke2d_RRFS(ix,3) = data%fire_var2d(i,j,3) - Sfcprop(nb)%smoke2d_RRFS(ix,4) = data%fire_var2d(i,j,4) + Sfcprop%smoke2d_RRFS(im,1) = data%fire_var2d(i,j,1) + Sfcprop%smoke2d_RRFS(im,2) = data%fire_var2d(i,j,2) + Sfcprop%smoke2d_RRFS(im,3) = data%fire_var2d(i,j,3) + Sfcprop%smoke2d_RRFS(im,4) = data%fire_var2d(i,j,4) else ! -- user define their own fire emission endif diff --git a/io/fv3atm_sfc_io.F90 b/io/fv3atm_sfc_io.F90 index 95957682a..0d1e1193a 100644 --- a/io/fv3atm_sfc_io.F90 +++ b/io/fv3atm_sfc_io.F90 @@ -982,13 +982,13 @@ subroutine Sfc_io_transfer(sfc, reading, Model, Atm_block, Sfcprop, warm_start, class(Sfc_io_data_type) :: sfc logical, intent(in) :: reading - type(GFS_sfcprop_type) :: Sfcprop(:) + type(GFS_sfcprop_type) :: Sfcprop type(block_control_type), intent(in) :: Atm_block type(GFS_control_type), intent(in) :: Model logical, intent(in) :: warm_start logical, intent(out), optional :: override_frac_grid - integer :: i, j, k, nb, ix, lsoil, num, nt + integer :: i, j, k, nb, ix, lsoil, num, nt, ixs, ixe, im integer :: isc, iec, jsc, jec, npz, nx, ny integer, allocatable :: ii1(:), jj1(:) real(kind_phys) :: ice @@ -1009,79 +1009,81 @@ subroutine Sfc_io_transfer(sfc, reading, Model, Atm_block, Sfcprop, warm_start, ! write(0,*)' stype read in min,max=',minval(sfc_var2(:,:,18)),maxval(sfc_var2(:,:,18)) ! write(0,*)' sfc_var2=',sfc_var2(:,:,12) - !$omp parallel do default(shared) private(i, j, nb, ix, nt, ii1, jj1, lsoil) + !$omp parallel do default(shared) private(i, j, nb, ix, nt, ii1, jj1, lsoil, ixs, ixe, im) block_loop: do nb = 1, Atm_block%nblks allocate(ii1(Atm_block%blksz(nb))) allocate(jj1(Atm_block%blksz(nb))) ii1=Atm_block%index(nb)%ii - isc + 1 jj1=Atm_block%index(nb)%jj - jsc + 1 + ixs = Model%chunk_begin(nb) + ixe = Model%chunk_end(nb) nt=0 !--- 2D variables ! ------------ - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%slmsk) !--- slmsk - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%tsfco) !--- tsfc (tsea in sfc file) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%weasd) !--- weasd (sheleg in sfc file) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%tg3) !--- tg3 - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%zorl) !--- zorl composite - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%alvsf) !--- alvsf - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%alvwf) !--- alvwf - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%alnsf) !--- alnsf - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%alnwf) !--- alnwf - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%facsf) !--- facsf - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%facwf) !--- facwf - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%vfrac) !--- vfrac - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%canopy) !--- canopy - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%f10m) !--- f10m - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%t2m) !--- t2m - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%q2m) !--- q2m - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%vtype) !--- vtype - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%stype) !--- stype - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%uustar) !--- uustar - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%ffmm) !--- ffmm - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%ffhh) !--- ffhh - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%hice) !--- hice - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%fice) !--- fice - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%tisfc) !--- tisfc - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%tprcp) !--- tprcp - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%srflag) !--- srflag - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%snowd) !--- snowd (snwdph in the file) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%shdmin) !--- shdmin - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%shdmax) !--- shdmax - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%slope) !--- slope - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%snoalb) !--- snoalb - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%scolor) !--- scolor - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%sncovr) !--- sncovr - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%snodl) !--- snodl (snowd on land portion of a cell) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%weasdl) !--- weasdl (weasd on land portion of a cell) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%tsfc) !--- tsfc composite - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%tsfcl) !--- tsfcl (temp on land portion of a cell) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%zorlw) !--- zorlw (zorl on water portion of a cell) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%zorll) !--- zorll (zorl on land portion of a cell) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%zorli) !--- zorli (zorl on ice portion of a cell) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%albdirvis_lnd) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%albdirnir_lnd) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%albdifvis_lnd) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%albdifnir_lnd) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%emis_lnd) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%emis_ice) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%sncovr_ice) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%snodi) !--- snodi (snowd on ice portion of a cell) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%weasdi) !--- weasdi (weasd on ice portion of a cell) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%slmsk(ixs:ixe)) !--- slmsk + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%tsfco(ixs:ixe)) !--- tsfc (tsea in sfc file) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%weasd(ixs:ixe)) !--- weasd (sheleg in sfc file) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%tg3(ixs:ixe)) !--- tg3 + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%zorl(ixs:ixe)) !--- zorl composite + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%alvsf(ixs:ixe)) !--- alvsf + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%alvwf(ixs:ixe)) !--- alvwf + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%alnsf(ixs:ixe)) !--- alnsf + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%alnwf(ixs:ixe)) !--- alnwf + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%facsf(ixs:ixe)) !--- facsf + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%facwf(ixs:ixe)) !--- facwf + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%vfrac(ixs:ixe)) !--- vfrac + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%canopy(ixs:ixe)) !--- canopy + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%f10m(ixs:ixe)) !--- f10m + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%t2m(ixs:ixe)) !--- t2m + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%q2m(ixs:ixe)) !--- q2m + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%vtype(ixs:ixe)) !--- vtype + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%stype(ixs:ixe)) !--- stype + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%uustar(ixs:ixe)) !--- uustar + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%ffmm(ixs:ixe)) !--- ffmm + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%ffhh(ixs:ixe)) !--- ffhh + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%hice(ixs:ixe)) !--- hice + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%fice(ixs:ixe)) !--- fice + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%tisfc(ixs:ixe)) !--- tisfc + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%tprcp(ixs:ixe)) !--- tprcp + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%srflag(ixs:ixe)) !--- srflag + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%snowd(ixs:ixe)) !--- snowd (snwdph in the file) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%shdmin(ixs:ixe)) !--- shdmin + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%shdmax(ixs:ixe)) !--- shdmax + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%slope(ixs:ixe)) !--- slope + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%snoalb(ixs:ixe)) !--- snoalb + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%scolor(ixs:ixe)) !--- scolor + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%sncovr(ixs:ixe)) !--- sncovr + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%snodl(ixs:ixe)) !--- snodl (snowd on land portion of a cell) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%weasdl(ixs:ixe)) !--- weasdl (weasd on land portion of a cell) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%tsfc(ixs:ixe)) !--- tsfc composite + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%tsfcl(ixs:ixe)) !--- tsfcl (temp on land portion of a cell) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%zorlw(ixs:ixe)) !--- zorlw (zorl on water portion of a cell) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%zorll(ixs:ixe)) !--- zorll (zorl on land portion of a cell) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%zorli(ixs:ixe)) !--- zorli (zorl on ice portion of a cell) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%albdirvis_lnd(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%albdirnir_lnd(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%albdifvis_lnd(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%albdifnir_lnd(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%emis_lnd(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%emis_ice(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%sncovr_ice(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%snodi(ixs:ixe)) !--- snodi (snowd on ice portion of a cell) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%weasdi(ixs:ixe)) !--- weasdi (weasd on ice portion of a cell) if (Model%use_cice_alb .or. Model%lsm == Model%lsm_ruc) then - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%albdirvis_ice) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%albdifvis_ice) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%albdirnir_ice) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%albdifnir_ice) - ! call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%sfalb_ice) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%albdirvis_ice(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%albdifvis_ice(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%albdirnir_ice(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%albdifnir_ice(ixs:ixe)) + ! call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%sfalb_ice(ixs:ixe)) endif if(Model%cplwav) then !tgs - the following line is a bug. It should be nt = nt !nt = sfc%nvar2m-1 ! Next item will be at sfc%nvar2m - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%zorlwav) !--- (zorl from wave model) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%zorlwav(ixs:ixe)) !--- (zorl from wave model) else if(reading) then - Sfcprop(nb)%zorlwav = Sfcprop(nb)%zorlw + Sfcprop%zorlwav(ixs:ixe) = Sfcprop%zorlw(ixs:ixe) endif if(present(override_frac_grid)) then @@ -1090,36 +1092,37 @@ subroutine Sfc_io_transfer(sfc, reading, Model, Atm_block, Sfcprop, warm_start, if(reading) then do_lsi_fractions: do ix = 1, Atm_block%blksz(nb) - 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 - Sfcprop(nb)%lakefrac(ix) = one + im = Model%chunk_begin(nb)+ix-1 + if (Sfcprop%stype(im) == 14 .or. Sfcprop%stype(im) <= 0) then + Sfcprop%landfrac(im) = zero + Sfcprop%stype(im) = 0 + if (Sfcprop%lakefrac(im) > zero) then + Sfcprop%lakefrac(im) = one endif endif if_frac_grid: if (Model%frac_grid) then - if (Sfcprop(nb)%landfrac(ix) > -999.0_kind_phys) then - Sfcprop(nb)%slmsk(ix) = ceiling(Sfcprop(nb)%landfrac(ix)-1.0e-6) - 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 - if (nint(Sfcprop(nb)%slmsk(ix)) /= 1) then - if(Sfcprop(nb)%fice(ix) >= Model%min_lakeice) then - Sfcprop(nb)%slmsk(ix) = 2 + if (Sfcprop%landfrac(im) > -999.0_kind_phys) then + Sfcprop%slmsk(im) = ceiling(Sfcprop%landfrac(im)-1.0e-6) + if (Sfcprop%slmsk(im) == 1 .and. Sfcprop%stype(im) == 14) & + Sfcprop%slmsk(im) = 0 + if (Sfcprop%lakefrac(im) > zero) then + Sfcprop%oceanfrac(im) = zero ! lake & ocean don't coexist in a cell + if (nint(Sfcprop%slmsk(im)) /= 1) then + if(Sfcprop%fice(im) >= Model%min_lakeice) then + Sfcprop%slmsk(im) = 2 else - Sfcprop(nb)%slmsk(ix) = 0 + Sfcprop%slmsk(im) = 0 endif endif else - Sfcprop(nb)%lakefrac(ix) = zero - Sfcprop(nb)%oceanfrac(ix) = one - Sfcprop(nb)%landfrac(ix) - if (nint(Sfcprop(nb)%slmsk(ix)) /= 1) then - if (Sfcprop(nb)%fice(ix) >= Model%min_seaice) then - Sfcprop(nb)%slmsk(ix) = 2 + Sfcprop%lakefrac(im) = zero + Sfcprop%oceanfrac(im) = one - Sfcprop%landfrac(im) + if (nint(Sfcprop%slmsk(im)) /= 1) then + if (Sfcprop%fice(im) >= Model%min_seaice) then + Sfcprop%slmsk(im) = 2 else - Sfcprop(nb)%slmsk(ix) = 0 + Sfcprop%slmsk(im) = 0 endif endif endif @@ -1127,63 +1130,63 @@ subroutine Sfc_io_transfer(sfc, reading, Model, Atm_block, Sfcprop, warm_start, if(present(override_frac_grid)) then override_frac_grid = .false. endif - if (nint(Sfcprop(nb)%slmsk(ix)) == 1) then - Sfcprop(nb)%landfrac(ix) = one - Sfcprop(nb)%lakefrac(ix) = zero - Sfcprop(nb)%oceanfrac(ix) = zero + if (nint(Sfcprop%slmsk(im)) == 1) then + Sfcprop%landfrac(im) = one + Sfcprop%lakefrac(im) = zero + Sfcprop%oceanfrac(im) = zero else - if (Sfcprop(nb)%slmsk(ix) < 0.1_kind_phys .or. Sfcprop(nb)%slmsk(ix) > 1.9_kind_phys) then - Sfcprop(nb)%landfrac(ix) = zero - if (Sfcprop(nb)%oro_uf(ix) > min_lake_orog) then ! lakes - Sfcprop(nb)%lakefrac(ix) = one - Sfcprop(nb)%oceanfrac(ix) = zero + if (Sfcprop%slmsk(im) < 0.1_kind_phys .or. Sfcprop%slmsk(im) > 1.9_kind_phys) then + Sfcprop%landfrac(im) = zero + if (Sfcprop%oro_uf(im) > min_lake_orog) then ! lakes + Sfcprop%lakefrac(im) = one + Sfcprop%oceanfrac(im) = zero else ! ocean - Sfcprop(nb)%lakefrac(ix) = zero - Sfcprop(nb)%oceanfrac(ix) = one + Sfcprop%lakefrac(im) = zero + Sfcprop%oceanfrac(im) = one endif endif endif endif else ! not a fractional grid - if (Sfcprop(nb)%landfrac(ix) > -999.0_kind_phys) then - if (Sfcprop(nb)%lakefrac(ix) > zero) then - Sfcprop(nb)%oceanfrac(ix) = zero - Sfcprop(nb)%landfrac(ix) = zero - Sfcprop(nb)%lakefrac(ix) = one - Sfcprop(nb)%slmsk(ix) = zero - if (Sfcprop(nb)%fice(ix) >= Model%min_lakeice) Sfcprop(nb)%slmsk(ix) = 2.0 + if (Sfcprop%landfrac(im) > -999.0_kind_phys) then + if (Sfcprop%lakefrac(im) > zero) then + Sfcprop%oceanfrac(im) = zero + Sfcprop%landfrac(im) = zero + Sfcprop%lakefrac(im) = one + Sfcprop%slmsk(im) = zero + if (Sfcprop%fice(im) >= Model%min_lakeice) Sfcprop%slmsk(im) = 2.0 else - Sfcprop(nb)%slmsk(ix) = nint(Sfcprop(nb)%landfrac(ix)) - 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 - Sfcprop(nb)%landfrac(ix) = zero - Sfcprop(nb)%lakefrac(ix) = zero - if (Sfcprop(nb)%fice(ix) >= Model%min_seaice) Sfcprop(nb)%slmsk(ix) = 2.0 + Sfcprop%slmsk(im) = nint(Sfcprop%landfrac(im)) + if (Sfcprop%stype(im) <= 0 .or. Sfcprop%stype(im) == 14) & + Sfcprop%slmsk(im) = zero + if (nint(Sfcprop%slmsk(im)) == 0) then + Sfcprop%oceanfrac(im) = one + Sfcprop%landfrac(im) = zero + Sfcprop%lakefrac(im) = zero + if (Sfcprop%fice(im) >= Model%min_seaice) Sfcprop%slmsk(im) = 2.0 else - Sfcprop(nb)%landfrac(ix) = one - Sfcprop(nb)%lakefrac(ix) = zero - Sfcprop(nb)%oceanfrac(ix) = zero + Sfcprop%landfrac(im) = one + Sfcprop%lakefrac(im) = zero + Sfcprop%oceanfrac(im) = zero endif endif else - if (nint(Sfcprop(nb)%slmsk(ix)) == 1 .and. Sfcprop(nb)%stype(ix) > 0 & - .and. Sfcprop(nb)%stype(ix) /= 14) then - Sfcprop(nb)%landfrac(ix) = one - Sfcprop(nb)%lakefrac(ix) = zero - Sfcprop(nb)%oceanfrac(ix) = zero + if (nint(Sfcprop%slmsk(im)) == 1 .and. Sfcprop%stype(im) > 0 & + .and. Sfcprop%stype(im) /= 14) then + Sfcprop%landfrac(im) = one + Sfcprop%lakefrac(im) = zero + Sfcprop%oceanfrac(im) = zero else - Sfcprop(nb)%slmsk(ix) = zero - Sfcprop(nb)%landfrac(ix) = zero - if (Sfcprop(nb)%oro_uf(ix) > min_lake_orog) then ! lakes - Sfcprop(nb)%lakefrac(ix) = one - Sfcprop(nb)%oceanfrac(ix) = zero - if (Sfcprop(nb)%fice(ix) > Model%min_lakeice) Sfcprop(nb)%slmsk(ix) = 2.0 + Sfcprop%slmsk(im) = zero + Sfcprop%landfrac(im) = zero + if (Sfcprop%oro_uf(im) > min_lake_orog) then ! lakes + Sfcprop%lakefrac(im) = one + Sfcprop%oceanfrac(im) = zero + if (Sfcprop%fice(im) > Model%min_lakeice) Sfcprop%slmsk(im) = 2.0 else ! ocean - Sfcprop(nb)%lakefrac(ix) = zero - Sfcprop(nb)%oceanfrac(ix) = one - if (Sfcprop(nb)%fice(ix) > Model%min_seaice) Sfcprop(nb)%slmsk(ix) = 2.0 + Sfcprop%lakefrac(im) = zero + Sfcprop%oceanfrac(im) = one + if (Sfcprop%fice(im) > Model%min_seaice) Sfcprop%slmsk(im) = 2.0 endif endif endif @@ -1193,7 +1196,8 @@ subroutine Sfc_io_transfer(sfc, reading, Model, Atm_block, Sfcprop, warm_start, if (reading .and. warm_start .and. Model%kdt > 1) then do ix = 1, Atm_block%blksz(nb) - Sfcprop(nb)%slmsk(ix) = sfc%var2(ii1(ix),jj1(ix),1) !--- slmsk + im = Model%chunk_begin(nb)+ix-1 + Sfcprop%slmsk(im) = sfc%var2(ii1(ix),jj1(ix),1) !--- slmsk enddo endif @@ -1205,117 +1209,118 @@ subroutine Sfc_io_transfer(sfc, reading, Model, Atm_block, Sfcprop, warm_start, if (reading .and. Model%nstf_name(2) == 1) then ! nsst spinup !--- nsstm tref nt = nt + 18 - Sfcprop(nb)%tref = Sfcprop(nb)%tsfco - Sfcprop(nb)%z_c = zero - Sfcprop(nb)%c_0 = zero - Sfcprop(nb)%c_d = zero - Sfcprop(nb)%w_0 = zero - Sfcprop(nb)%w_d = zero - Sfcprop(nb)%xt = zero - Sfcprop(nb)%xs = zero - Sfcprop(nb)%xu = zero - Sfcprop(nb)%xv = zero - Sfcprop(nb)%xz = 20.0_kind_phys - Sfcprop(nb)%zm = zero - Sfcprop(nb)%xtts = zero - Sfcprop(nb)%xzts = zero - Sfcprop(nb)%d_conv = zero - Sfcprop(nb)%ifd = zero - Sfcprop(nb)%dt_cool = zero - Sfcprop(nb)%qrain = zero + Sfcprop%tref(ixs:ixe) = Sfcprop%tsfco(ixs:ixe) + Sfcprop%z_c(ixs:ixe) = zero + Sfcprop%c_0(ixs:ixe) = zero + Sfcprop%c_d(ixs:ixe) = zero + Sfcprop%w_0(ixs:ixe) = zero + Sfcprop%w_d(ixs:ixe) = zero + Sfcprop%xt(ixs:ixe) = zero + Sfcprop%xs(ixs:ixe) = zero + Sfcprop%xu(ixs:ixe) = zero + Sfcprop%xv(ixs:ixe) = zero + Sfcprop%xz(ixs:ixe) = 20.0_kind_phys + Sfcprop%zm(ixs:ixe) = zero + Sfcprop%xtts(ixs:ixe) = zero + Sfcprop%xzts(ixs:ixe) = zero + Sfcprop%d_conv(ixs:ixe) = zero + Sfcprop%ifd(ixs:ixe) = zero + Sfcprop%dt_cool(ixs:ixe) = zero + Sfcprop%qrain(ixs:ixe) = zero elseif (.not.reading .or. Model%nstf_name(2) == 0) then ! nsst restart - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%tref) !--- nsstm tref - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%z_c) !--- nsstm z_c - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%c_0) !--- nsstm c_0 - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%c_d) !--- nsstm c_d - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%w_0) !--- nsstm w_0 - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%w_d) !--- nsstm w_d - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%xt) !--- nsstm xt - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%xs) !--- nsstm xs - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%xu) !--- nsstm xu - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%xv) !--- nsstm xv - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%xz) !--- nsstm xz - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%zm) !--- nsstm zm - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%xtts) !--- nsstm xtts - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%xzts) !--- nsstm xzts - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%d_conv) !--- nsstm d_conv - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%ifd) !--- nsstm ifd - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%dt_cool) !--- nsstm dt_cool - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%qrain) !--- nsstm qrain + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%tref(ixs:ixe)) !--- nsstm tref + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%z_c(ixs:ixe)) !--- nsstm z_c + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%c_0(ixs:ixe)) !--- nsstm c_0 + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%c_d(ixs:ixe)) !--- nsstm c_d + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%w_0(ixs:ixe)) !--- nsstm w_0 + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%w_d(ixs:ixe)) !--- nsstm w_d + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%xt(ixs:ixe)) !--- nsstm xt + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%xs(ixs:ixe)) !--- nsstm xs + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%xu(ixs:ixe)) !--- nsstm xu + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%xv(ixs:ixe)) !--- nsstm xv + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%xz(ixs:ixe)) !--- nsstm xz + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%zm(ixs:ixe)) !--- nsstm zm + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%xtts(ixs:ixe)) !--- nsstm xtts + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%xzts(ixs:ixe)) !--- nsstm xzts + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%d_conv(ixs:ixe)) !--- nsstm d_conv + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%ifd(ixs:ixe)) !--- nsstm ifd + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%dt_cool(ixs:ixe)) !--- nsstm dt_cool + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%qrain(ixs:ixe)) !--- nsstm qrain endif endif if (Model%lsm == Model%lsm_ruc .and. (warm_start .or. .not. reading)) then !--- Extra RUC variables - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%wetness) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%clw_surf_land) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%clw_surf_ice) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%qwv_surf_land) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%qwv_surf_ice) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%tsnow_land) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%tsnow_ice) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%snowfallac_land) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%snowfallac_ice) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%sfalb_lnd) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%sfalb_lnd_bck) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%sfalb_ice) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%wetness(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%clw_surf_land(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%clw_surf_ice(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%qwv_surf_land(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%qwv_surf_ice(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%tsnow_land(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%tsnow_ice(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%snowfallac_land(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%snowfallac_ice(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%sfalb_lnd(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%sfalb_lnd_bck(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%sfalb_ice(ixs:ixe)) if (Model%rdlai) then - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%xlaixy) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%xlaixy(ixs:ixe)) endif else if (reading .and. Model%lsm == Model%lsm_ruc) then ! Initialize RUC snow cover on ice from snow cover - Sfcprop(nb)%sncovr_ice = Sfcprop(nb)%sncovr + Sfcprop%sncovr_ice(ixs:ixe) = Sfcprop%sncovr(ixs:ixe) if (Model%rdlai) then - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%xlaixy) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%xlaixy(ixs:ixe)) end if elseif (Model%lsm == Model%lsm_noahmp) then !--- Extra Noah MP variables - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%snowxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%tvxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%tgxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%canicexy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%canliqxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%eahxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%tahxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%cmxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%chxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%fwetxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%sneqvoxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%alboldxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%qsnowxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%wslakexy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%zwtxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%waxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%wtxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%lfmassxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%rtmassxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%stmassxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%woodxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%stblcpxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%fastcpxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%xsaixy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%xlaixy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%taussxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%smcwtdxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%deeprechxy) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%rechxy) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%snowxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%tvxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%tgxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%canicexy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%canliqxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%eahxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%tahxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%cmxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%chxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%fwetxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%sneqvoxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%alboldxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%qsnowxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%wslakexy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%zwtxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%waxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%wtxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%lfmassxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%rtmassxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%stmassxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%woodxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%stblcpxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%fastcpxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%xsaixy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%xlaixy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%taussxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%smcwtdxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%deeprechxy(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%rechxy(ixs:ixe)) endif if (Model%lkm > 0 .and. Model%iopt_lake==Model%iopt_lake_flake) then - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%T_snow) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%T_ice) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%h_ML) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%t_ML) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%t_mnw) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%h_talb) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%t_talb) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%t_bot1) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%t_bot2) - call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%c_t) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%T_snow(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%T_ice(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%h_ML(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%t_ML(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%t_mnw(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%h_talb(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%t_talb(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%t_bot1(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%t_bot2(ixs:ixe)) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop%c_t(ixs:ixe)) endif if(.not.reading) then do k = 1,Model%kice do ix = 1, Atm_block%blksz(nb) - ice=Sfcprop(nb)%tiice(ix,k) + im = Model%chunk_begin(nb)+ix-1 + ice=Sfcprop%tiice(im,k) if(ice zero) then - Sfcprop(nb)%snowd(ix) = Sfcprop(nb)%snodi(ix) - elseif (Sfcprop(nb)%landfrac(ix) > zero) then - Sfcprop(nb)%snowd(ix) = Sfcprop(nb)%snodl(ix) + im = Model%chunk_begin(nb)+ix-1 + if (Sfcprop%fice(im) > zero) then + Sfcprop%snowd(im) = Sfcprop%snodi(im) + elseif (Sfcprop%landfrac(im) > zero) then + Sfcprop%snowd(im) = Sfcprop%snodl(im) else - Sfcprop(nb)%snowd(ix) = zero + Sfcprop%snowd(im) = zero endif enddo enddo @@ -1534,15 +1552,16 @@ subroutine Sfc_io_apply_safeguards(sfc, Model, Atm_block, Sfcprop) if (sfc%var2(i,j,3) < -9990.0_kind_phys) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing weasd') - !$omp parallel do default(shared) private(nb, ix) + !$omp parallel do default(shared) private(nb, ix, im) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - if (Sfcprop(nb)%fice(ix) > zero) then - Sfcprop(nb)%weasd(ix) = Sfcprop(nb)%weasdi(ix) - elseif (Sfcprop(nb)%landfrac(ix) > zero) then - Sfcprop(nb)%weasd(ix) = Sfcprop(nb)%weasdl(ix) + im = Model%chunk_begin(nb)+ix-1 + if (Sfcprop%fice(im) > zero) then + Sfcprop%weasd(im) = Sfcprop%weasdi(im) + elseif (Sfcprop%landfrac(im) > zero) then + Sfcprop%weasd(im) = Sfcprop%weasdl(im) else - Sfcprop(nb)%weasd(ix) = zero + Sfcprop%weasd(im) = zero endif enddo enddo @@ -1552,11 +1571,12 @@ subroutine Sfc_io_apply_safeguards(sfc, Model, Atm_block, Sfcprop) ! Just use a nominal value. if (sfc%var2(i,j,39) < -9990.0_kind_phys) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing zorll') - !$omp parallel do default(shared) private(nb, ix) + !$omp parallel do default(shared) private(nb, ix, im) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - if (Sfcprop(nb)%landfrac(ix) > zero) then - Sfcprop(nb)%zorll(ix) = 25.0 + im = Model%chunk_begin(nb)+ix-1 + if (Sfcprop%landfrac(im) > zero) then + Sfcprop%zorll(im) = 25.0 endif enddo enddo @@ -1564,15 +1584,16 @@ subroutine Sfc_io_apply_safeguards(sfc, Model, Atm_block, Sfcprop) if (sfc%var2(i,j,5) < -9990.0_kind_phys) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing zorl') - !$omp parallel do default(shared) private(nb, ix) + !$omp parallel do default(shared) private(nb, ix, im) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - if (Sfcprop(nb)%fice(ix) > zero) then - Sfcprop(nb)%zorl(ix) = Sfcprop(nb)%zorli(ix) - elseif (Sfcprop(nb)%landfrac(ix) > zero) then - Sfcprop(nb)%zorl(ix) = Sfcprop(nb)%zorll(ix) + im = Model%chunk_begin(nb)+ix-1 + if (Sfcprop%fice(im) > zero) then + Sfcprop%zorl(im) = Sfcprop%zorli(im) + elseif (Sfcprop%landfrac(im) > zero) then + Sfcprop%zorl(im) = Sfcprop%zorll(im) else - Sfcprop(nb)%zorl(ix) = Sfcprop(nb)%zorlw(ix) + Sfcprop%zorl(im) = Sfcprop%zorlw(im) endif enddo enddo @@ -1580,36 +1601,39 @@ subroutine Sfc_io_apply_safeguards(sfc, Model, Atm_block, Sfcprop) if (sfc%var2(i,j,46) < -9990.0_kind_phys) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing emis_ice') - !$omp parallel do default(shared) private(nb, ix) + !$omp parallel do default(shared) private(nb, ix, im) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - Sfcprop(nb)%emis_ice(ix) = 0.96 + im = Model%chunk_begin(nb)+ix-1 + Sfcprop%emis_ice(im) = 0.96 enddo enddo endif if (sfc%var2(i,j,47) < -9990.0_kind_phys .and. Model%lsm /= Model%lsm_ruc) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing sncovr_ice') - !$omp parallel do default(shared) private(nb, ix) + !$omp parallel do default(shared) private(nb, ix, im) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - ! Sfcprop(nb)%sncovr_ice(ix) = Sfcprop(nb)%sncovr(ix) - Sfcprop(nb)%sncovr_ice(ix) = zero + im = Model%chunk_begin(nb)+ix-1 + !Sfcprop%sncovr_ice(im) = Sfcprop%sncovr(im) + Sfcprop%sncovr_ice(im) = zero enddo enddo endif if (Model%use_cice_alb) then if (sfc%var2(i,j,50) < -9990.0_kind_phys) then - !$omp parallel do default(shared) private(nb, ix) + !$omp parallel do default(shared) private(nb, ix, im) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - if (Sfcprop(nb)%oceanfrac(ix) > zero .and. & - Sfcprop(nb)%fice(ix) >= Model%min_seaice) then - Sfcprop(nb)%albdirvis_ice(ix) = 0.6_kind_phys - Sfcprop(nb)%albdifvis_ice(ix) = 0.6_kind_phys - Sfcprop(nb)%albdirnir_ice(ix) = 0.6_kind_phys - Sfcprop(nb)%albdifnir_ice(ix) = 0.6_kind_phys + im = Model%chunk_begin(nb)+ix-1 + if (Sfcprop%oceanfrac(im) > zero .and. & + Sfcprop%fice(im) >= Model%min_seaice) then + Sfcprop%albdirvis_ice(im) = 0.6_kind_phys + Sfcprop%albdifvis_ice(im) = 0.6_kind_phys + Sfcprop%albdirnir_ice(im) = 0.6_kind_phys + Sfcprop%albdifnir_ice(im) = 0.6_kind_phys endif enddo enddo @@ -1621,30 +1645,32 @@ subroutine Sfc_io_apply_safeguards(sfc, Model, Atm_block, Sfcprop) compute_tsfc_for_coldstart: if (sfc%var2(i,j,36) < -9990.0_kind_phys) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing composite tsfc') if(Model%frac_grid) then ! 3-way composite - !$omp parallel do default(shared) private(nb, ix, tem, tem1) + !$omp parallel do default(shared) private(nb, ix, im, tem, tem1) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - Sfcprop(nb)%tsfco(ix) = max(con_tice, Sfcprop(nb)%tsfco(ix)) ! this may break restart reproducibility - tem1 = one - Sfcprop(nb)%landfrac(ix) - tem = tem1 * Sfcprop(nb)%fice(ix) ! tem = ice fraction wrt whole cell - Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tsfcl(ix) * Sfcprop(nb)%landfrac(ix) & - + Sfcprop(nb)%tisfc(ix) * tem & - + Sfcprop(nb)%tsfco(ix) * (tem1-tem) + im = Model%chunk_begin(nb)+ix-1 + Sfcprop%tsfco(im) = max(con_tice, Sfcprop%tsfco(im)) ! this may break restart reproducibility + tem1 = one - Sfcprop%landfrac(im) + tem = tem1 * Sfcprop%fice(im) ! tem = ice fraction wrt whole cell + Sfcprop%tsfc(im) = Sfcprop%tsfcl(im) * Sfcprop%landfrac(im) & + + Sfcprop%tisfc(im) * tem & + + Sfcprop%tsfco(im) * (tem1-tem) enddo enddo else - !$omp parallel do default(shared) private(nb, ix, tem) + !$omp parallel do default(shared) private(nb, ix, im, tem) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - if (Sfcprop(nb)%slmsk(ix) == 1) then - Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tsfcl(ix) - if (Sfcprop(nb)%tsfc(ix) < -99 .or. Sfcprop(nb)%tsfc(ix) > 999.) print*,'bad tsfc land ',nb,ix,Sfcprop(nb)%tsfcl(ix) - elseif(Sfcprop(nb)%fice(ix) > 0.0)then - Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tisfc(ix) - if (Sfcprop(nb)%tsfc(ix) < -99 .or. Sfcprop(nb)%tsfc(ix) > 999.) print*,'bad tsfc ice ',nb,ix,Sfcprop(nb)%tisfc(ix) + im = Model%chunk_begin(nb)+ix-1 + if (Sfcprop%slmsk(im) == 1) then + Sfcprop%tsfc(im) = Sfcprop%tsfcl(im) + if (Sfcprop%tsfc(im) < -99 .or. Sfcprop%tsfc(im) > 999.) print*,'bad tsfc land ',nb,ix,Sfcprop%tsfcl(im) + elseif(Sfcprop%fice(im) > 0.0)then + Sfcprop%tsfc(im) = Sfcprop%tisfc(im) + if (Sfcprop%tsfc(im) < -99 .or. Sfcprop%tsfc(im) > 999.) print*,'bad tsfc ice ',nb,ix,Sfcprop%tisfc(im) else - Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tsfco(ix) - if (Sfcprop(nb)%tsfc(ix) < -99 .or. Sfcprop(nb)%tsfc(ix) > 999.) print*,'bad tsfc water ',nb,ix,Sfcprop(nb)%tsfco(ix) + Sfcprop%tsfc(im) = Sfcprop%tsfco(im) + if (Sfcprop%tsfc(im) < -99 .or. Sfcprop%tsfc(im) > 999.) print*,'bad tsfc water ',nb,ix,Sfcprop%tsfco(im) endif enddo enddo @@ -1653,10 +1679,11 @@ subroutine Sfc_io_apply_safeguards(sfc, Model, Atm_block, Sfcprop) if (sfc%var2(i,j,sfc%nvar2m) < -9990.0_kind_phys) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing zorlwav') - !$omp parallel do default(shared) private(nb, ix) + !$omp parallel do default(shared) private(nb, ix, im) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - Sfcprop(nb)%zorlwav(ix) = Sfcprop(nb)%zorl(ix) !--- compute zorlwav from existing variables + im = Model%chunk_begin(nb)+ix-1 + Sfcprop%zorlwav(im) = Sfcprop%zorl(im) !--- compute zorlwav from existing variables enddo enddo endif @@ -1667,14 +1694,15 @@ subroutine Sfc_io_apply_safeguards(sfc, Model, Atm_block, Sfcprop) if (sfc%var2(i,j,34) < -9990.0_kind_phys) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing snodl') - !$omp parallel do default(shared) private(nb, ix, tem) + !$omp parallel do default(shared) private(nb, ix, im, tem) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - if (Sfcprop(nb)%landfrac(ix) > zero) then - tem = one / (Sfcprop(nb)%fice(ix)*(one-Sfcprop(nb)%landfrac(ix))+Sfcprop(nb)%landfrac(ix)) - Sfcprop(nb)%snodl(ix) = Sfcprop(nb)%snowd(ix) * tem + im = Model%chunk_begin(nb)+ix-1 + if (Sfcprop%landfrac(im) > zero) then + tem = one / (Sfcprop%fice(im)*(one-Sfcprop%landfrac(im))+Sfcprop%landfrac(im)) + Sfcprop%snodl(im) = Sfcprop%snowd(im) * tem else - Sfcprop(nb)%snodl(ix) = zero + Sfcprop%snodl(im) = zero endif enddo enddo @@ -1682,14 +1710,15 @@ subroutine Sfc_io_apply_safeguards(sfc, Model, Atm_block, Sfcprop) if (sfc%var2(i,j,35) < -9990.0_kind_phys) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing weasdl') - !$omp parallel do default(shared) private(nb, ix, tem) + !$omp parallel do default(shared) private(nb, ix, im, tem) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - if (Sfcprop(nb)%landfrac(ix) > zero) then - tem = one / (Sfcprop(nb)%fice(ix)*(one-Sfcprop(nb)%landfrac(ix))+Sfcprop(nb)%landfrac(ix)) - Sfcprop(nb)%weasdl(ix) = Sfcprop(nb)%weasd(ix) * tem + im = Model%chunk_begin(nb)+ix-1 + if (Sfcprop%landfrac(im) > zero) then + tem = one / (Sfcprop%fice(im)*(one-Sfcprop%landfrac(im))+Sfcprop%landfrac(im)) + Sfcprop%weasdl(im) = Sfcprop%weasd(im) * tem else - Sfcprop(nb)%weasdl(ix) = zero + Sfcprop%weasdl(im) = zero endif enddo enddo @@ -1697,21 +1726,23 @@ subroutine Sfc_io_apply_safeguards(sfc, Model, Atm_block, Sfcprop) if (sfc%var2(i,j,37) < -9990.0_kind_phys) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing tsfcl') - !$omp parallel do default(shared) private(nb, ix) + !$omp parallel do default(shared) private(nb, ix, im) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - Sfcprop(nb)%tsfcl(ix) = Sfcprop(nb)%tsfco(ix) !--- compute tsfcl from existing variables + im = Model%chunk_begin(nb)+ix-1 + Sfcprop%tsfcl(im) = Sfcprop%tsfco(im) !--- compute tsfcl from existing variables enddo enddo endif if (sfc%var2(i,j,38) < -9990.0_kind_phys) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing zorlw') - !$omp parallel do default(shared) private(nb, ix) + !$omp parallel do default(shared) private(nb, ix, im) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - if (Sfcprop(nb)%landfrac(ix) < one .and. Sfcprop(nb)%fice(ix) < one) then - Sfcprop(nb)%zorlw(ix) = min(Sfcprop(nb)%zorl(ix), 0.317) + im = Model%chunk_begin(nb)+ix-1 + if (Sfcprop%landfrac(im) < one .and. Sfcprop%fice(im) < one) then + Sfcprop%zorlw(im) = min(Sfcprop%zorl(im), 0.317) endif enddo enddo @@ -1719,21 +1750,23 @@ subroutine Sfc_io_apply_safeguards(sfc, Model, Atm_block, Sfcprop) if (sfc%var2(i,j,39) < -9990.0_kind_phys) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing zorll') - !$omp parallel do default(shared) private(nb, ix) + !$omp parallel do default(shared) private(nb, ix, im) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - Sfcprop(nb)%zorll(ix) = Sfcprop(nb)%zorl(ix) !--- compute zorll from existing variables + im = Model%chunk_begin(nb)+ix-1 + Sfcprop%zorll(im) = Sfcprop%zorl(im) !--- compute zorll from existing variables enddo enddo endif if (sfc%var2(i,j,40) < -9990.0_kind_phys) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing zorli') - !$omp parallel do default(shared) private(nb, ix) + !$omp parallel do default(shared) private(nb, ix, im) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - if (Sfcprop(nb)%fice(ix)*(one-Sfcprop(nb)%landfrac(ix)) > zero) then - Sfcprop(nb)%zorli(ix) = one + im = Model%chunk_begin(nb)+ix-1 + if (Sfcprop%fice(im)*(one-Sfcprop%landfrac(im)) > zero) then + Sfcprop%zorli(im) = one endif enddo enddo @@ -1741,35 +1774,38 @@ subroutine Sfc_io_apply_safeguards(sfc, Model, Atm_block, Sfcprop) if (sfc%var2(i,j,46) < -9990.0_kind_phys) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing emis_ice') - !$omp parallel do default(shared) private(nb, ix) + !$omp parallel do default(shared) private(nb, ix, im) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - Sfcprop(nb)%emis_ice(ix) = 0.96 + im = Model%chunk_begin(nb)+ix-1 + Sfcprop%emis_ice(im) = 0.96 enddo enddo endif if (sfc%var2(i,j,47) < -9990.0_kind_phys .and. Model%lsm /= Model%lsm_ruc) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing sncovr_ice') - !$omp parallel do default(shared) private(nb, ix) + !$omp parallel do default(shared) private(nb, ix, im) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - ! Sfcprop(nb)%sncovr_ice(ix) = Sfcprop(nb)%sncovr(ix) - Sfcprop(nb)%sncovr_ice(ix) = zero + im = Model%chunk_begin(nb)+ix-1 + !Sfcprop%sncovr_ice(im) = Sfcprop%sncovr(im) + Sfcprop%sncovr_ice(im) = zero enddo enddo endif if (sfc%var2(i,j,48) < -9990.0_kind_phys) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing snodi') - !$omp parallel do default(shared) private(nb, ix, tem) + !$omp parallel do default(shared) private(nb, ix, im, tem) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - if (Sfcprop(nb)%fice(ix) > zero) then - tem = one / (Sfcprop(nb)%fice(ix)*(one-Sfcprop(nb)%landfrac(ix))+Sfcprop(nb)%landfrac(ix)) - Sfcprop(nb)%snodi(ix) = min(Sfcprop(nb)%snowd(ix) * tem, 3.0) + im = Model%chunk_begin(nb)+ix-1 + if (Sfcprop%fice(im) > zero) then + tem = one / (Sfcprop%fice(im)*(one-Sfcprop%landfrac(im))+Sfcprop%landfrac(im)) + Sfcprop%snodi(im) = min(Sfcprop%snowd(im) * tem, 3.0) else - Sfcprop(nb)%snodi(ix) = zero + Sfcprop%snodi(im) = zero endif enddo enddo @@ -1777,14 +1813,15 @@ subroutine Sfc_io_apply_safeguards(sfc, Model, Atm_block, Sfcprop) if (sfc%var2(i,j,49) < -9990.0_kind_phys) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing weasdi') - !$omp parallel do default(shared) private(nb, ix, tem) + !$omp parallel do default(shared) private(nb, ix, im, tem) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - if (Sfcprop(nb)%fice(ix) > zero) then - tem = one / (Sfcprop(nb)%fice(ix)*(one-Sfcprop(nb)%landfrac(ix))+Sfcprop(nb)%landfrac(ix)) - Sfcprop(nb)%weasdi(ix) = Sfcprop(nb)%weasd(ix)*tem + im = Model%chunk_begin(nb)+ix-1 + if (Sfcprop%fice(im) > zero) then + tem = one / (Sfcprop%fice(im)*(one-Sfcprop%landfrac(im))+Sfcprop%landfrac(im)) + Sfcprop%weasdi(im) = Sfcprop%weasd(im)*tem else - Sfcprop(nb)%weasdi(ix) = zero + Sfcprop%weasdi(im) = zero endif enddo enddo @@ -1792,15 +1829,16 @@ subroutine Sfc_io_apply_safeguards(sfc, Model, Atm_block, Sfcprop) if (Model%use_cice_alb) then if (sfc%var2(i,j,50) < -9990.0_kind_phys) then - !$omp parallel do default(shared) private(nb, ix) + !$omp parallel do default(shared) private(nb, ix, im) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - if (Sfcprop(nb)%oceanfrac(ix) > zero .and. & - Sfcprop(nb)%fice(ix) >= Model%min_seaice) then - Sfcprop(nb)%albdirvis_ice(ix) = 0.6_kind_phys - Sfcprop(nb)%albdifvis_ice(ix) = 0.6_kind_phys - Sfcprop(nb)%albdirnir_ice(ix) = 0.6_kind_phys - Sfcprop(nb)%albdifnir_ice(ix) = 0.6_kind_phys + im = Model%chunk_begin(nb)+ix-1 + if (Sfcprop%oceanfrac(im) > zero .and. & + Sfcprop%fice(im) >= Model%min_seaice) then + Sfcprop%albdirvis_ice(im) = 0.6_kind_phys + Sfcprop%albdifvis_ice(im) = 0.6_kind_phys + Sfcprop%albdirnir_ice(im) = 0.6_kind_phys + Sfcprop%albdifnir_ice(im) = 0.6_kind_phys endif enddo enddo @@ -1812,27 +1850,29 @@ subroutine Sfc_io_apply_safeguards(sfc, Model, Atm_block, Sfcprop) compute_tsfc_for_colstart: if (sfc%var2(i,j,35) < -9990.0_kind_phys) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing composite tsfc') if(Model%frac_grid) then ! 3-way composite - !$omp parallel do default(shared) private(nb, ix, tem, tem1) + !$omp parallel do default(shared) private(nb, ix, im, tem, tem1) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - Sfcprop(nb)%tsfco(ix) = max(con_tice, Sfcprop(nb)%tsfco(ix)) ! this may break restart reproducibility - tem1 = one - Sfcprop(nb)%landfrac(ix) - tem = tem1 * Sfcprop(nb)%fice(ix) ! tem = ice fraction wrt whole cell - Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tsfcl(ix) * Sfcprop(nb)%landfrac(ix) & - + Sfcprop(nb)%tisfc(ix) * tem & - + Sfcprop(nb)%tsfco(ix) * (tem1-tem) + im = Model%chunk_begin(nb)+ix-1 + Sfcprop%tsfco(im) = max(con_tice, Sfcprop%tsfco(im)) ! this may break restart reproducibility + tem1 = one - Sfcprop%landfrac(im) + tem = tem1 * Sfcprop%fice(im) ! tem = ice fraction wrt whole cell + Sfcprop%tsfc(im) = Sfcprop%tsfcl(im) * Sfcprop%landfrac(im) & + + Sfcprop%tisfc(im) * tem & + + Sfcprop%tsfco(im) * (tem1-tem) enddo enddo else - !$omp parallel do default(shared) private(nb, ix, tem) + !$omp parallel do default(shared) private(nb, ix, im, tem) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - if (Sfcprop(nb)%slmsk(ix) == 1) then - Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tsfcl(ix) + im = Model%chunk_begin(nb)+ix-1 + if (Sfcprop%slmsk(im) == 1) then + Sfcprop%tsfc(im) = Sfcprop%tsfcl(im) else - tem = one - Sfcprop(nb)%fice(ix) - Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tisfc(ix) * Sfcprop(nb)%fice(ix) & - + Sfcprop(nb)%tsfco(ix) * tem + tem = one - Sfcprop%fice(im) + Sfcprop%tsfc(im) = Sfcprop%tisfc(im) * Sfcprop%fice(im) & + + Sfcprop%tsfco(im) * tem endif enddo enddo @@ -1841,10 +1881,11 @@ subroutine Sfc_io_apply_safeguards(sfc, Model, Atm_block, Sfcprop) if (sfc%var2(i,j,sfc%nvar2m) < -9990.0_kind_phys) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing zorlwav') - !$omp parallel do default(shared) private(nb, ix) + !$omp parallel do default(shared) private(nb, ix, im) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - Sfcprop(nb)%zorlwav(ix) = Sfcprop(nb)%zorl(ix) !--- compute zorlwav from existing variables + im = Model%chunk_begin(nb)+ix-1 + Sfcprop%zorlwav(im) = Sfcprop%zorl(im) !--- compute zorlwav from existing variables enddo enddo endif @@ -1853,8 +1894,9 @@ subroutine Sfc_io_apply_safeguards(sfc, Model, Atm_block, Sfcprop) if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing tiice') do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - Sfcprop(nb)%tiice(ix,1) = max(timin, min(con_tice, Sfcprop(nb)%stc(ix,1))) - Sfcprop(nb)%tiice(ix,2) = max(timin, min(con_tice, Sfcprop(nb)%stc(ix,2))) + im = Model%chunk_begin(nb)+ix-1 + Sfcprop%tiice(im,1) = max(timin, min(con_tice, Sfcprop%stc(im,1))) + Sfcprop%tiice(im,2) = max(timin, min(con_tice, Sfcprop%stc(im,2))) enddo enddo endif diff --git a/moving_nest/fv_moving_nest.F90 b/moving_nest/fv_moving_nest.F90 index 6ef5ab384..91c80165b 100644 --- a/moving_nest/fv_moving_nest.F90 +++ b/moving_nest/fv_moving_nest.F90 @@ -62,13 +62,13 @@ module fv_moving_nest_mod use mpp_domains_mod, only : NORTH, SOUTH, EAST, WEST, CORNER, CENTER use mpp_domains_mod, only : NUPDATE, SUPDATE, EUPDATE, WUPDATE, DGRID_NE -#ifdef GFS_TYPES - use GFS_typedefs, only: IPD_data_type => GFS_data_type, & - IPD_control_type => GFS_control_type, kind_phys -#else - use IPD_typedefs, only: IPD_data_type, IPD_control_type, kind_phys => IPD_kind_phys -#endif - use GFS_init, only: GFS_grid_populate +!#ifdef GFS_TYPES +! use GFS_typedefs, only: IPD_data_type => GFS_data_type, & +! IPD_control_type => GFS_control_type, kind_phys +!#else +! use IPD_typedefs, only: IPD_data_type, IPD_control_type, kind_phys => IPD_kind_phys +!#endif +! use GFS_init, only: GFS_grid_populate use boundary_mod, only: update_coarse_grid, update_coarse_grid_mpp use bounding_box_mod, only: bbox, bbox_get_C2F_index, fill_bbox diff --git a/moving_nest/fv_moving_nest_main.F90 b/moving_nest/fv_moving_nest_main.F90 index 34af608c2..b26b720c7 100644 --- a/moving_nest/fv_moving_nest_main.F90 +++ b/moving_nest/fv_moving_nest_main.F90 @@ -59,13 +59,8 @@ module fv_moving_nest_main_mod use tracer_manager_mod, only: get_tracer_index, get_number_tracers, & NO_TRACER, get_tracer_names use DYCORE_typedefs, only: DYCORE_data_type -#ifdef GFS_TYPES - use GFS_typedefs, only: IPD_data_type => GFS_data_type, & - IPD_control_type => GFS_control_type, kind_phys -#else - use IPD_typedefs, only: IPD_data_type, IPD_control_type, kind_phys => IPD_kind_phys -#endif - + use GFS_typedefs, only: GFS_sfcprop_type, GFS_tbd_type, GFS_cldprop_type, & + GFS_grid_type, GFS_diag_type, GFS_control_type, kind_phys use fv_iau_mod, only: IAU_external_data_type #ifdef MULTI_GASES use multi_gases_mod, only: virq, virq_max, num_gas, ri, cpi @@ -170,10 +165,14 @@ module fv_moving_nest_main_mod !>@brief The subroutine 'update_moving_nest' decides whether the nest should be moved, and if so, performs the move. !>@details This subroutine evaluates the automatic storm tracker (or prescribed motion configuration), then decides !! if the nest should be moved. If it should be moved, it calls fv_moving_nest_exec() to perform the nest move. - subroutine update_moving_nest(Atm_block, IPD_control, IPD_data, time_step) + subroutine update_moving_nest(Atm_block, GFS_control, GFS_sfcprop, GFS_tbd, GFS_cldprop, GFS_intdiag, GFS_grid, time_step) type(block_control_type), intent(in) :: Atm_block !< Physics block layout - type(IPD_control_type), intent(in) :: IPD_control !< Physics metadata - type(IPD_data_type), intent(inout) :: IPD_data(:) !< Physics variable data + type(GFS_control_type), intent(in) :: GFS_control !< Physics metadata + type(GFS_sfcprop_type), intent(inout):: GFS_sfcprop !< Physics variable data (surface) + type(GFS_tbd_type), intent(inout) :: GFS_tbd !< Physics variable data (tbd) + type(GFS_cldprop_type), intent(inout):: GFS_cldprop !< Physics variable data (clouds) + type(GFS_diag_type), intent(inout) :: GFS_intdiag !< Physics variable data (diagnostic) + type(GFS_grid_type), intent(inout) :: GFS_grid !< Physics variable data (grid) type(time_type), intent(in) :: time_step !< Current timestep logical :: do_move @@ -208,7 +207,8 @@ subroutine update_moving_nest(Atm_block, IPD_control, IPD_data, time_step) call mpp_set_current_pelist(Atm(n)%pelist) if (do_move) then - call fv_moving_nest_exec(Atm, Atm_block, IPD_control, IPD_data, delta_i_c, delta_j_c, n, nest_num, parent_grid_num, child_grid_num, dt_atmos) + call fv_moving_nest_exec(Atm, Atm_block, GFS_control, GFS_sfcprop, GFS_tbd, GFS_cldprop, GFS_intdiag, GFS_grid, & + delta_i_c, delta_j_c, n, nest_num, parent_grid_num, child_grid_num, dt_atmos) endif end subroutine update_moving_nest @@ -249,10 +249,11 @@ end subroutine nest_tracker_end !>@brief The subroutine 'dump_moving_nest' outputs native grid format data to netCDF files !>@details This subroutine exports model variables using FMS IO to netCDF files if tsvar_out is set to .True. - subroutine dump_moving_nest(Atm_block, IPD_control, IPD_data, time_step) + subroutine dump_moving_nest(Atm_block, GFS_control, GFS_sfcprop, GFS_tbd, time_step) type(block_control_type), intent(in) :: Atm_block !< Physics block layout - type(IPD_control_type), intent(in) :: IPD_control !< Physics metadata - type(IPD_data_type), intent(in) :: IPD_data(:) !< Physics variable data + type(GFS_control_type), intent(in) :: GFS_control !< Physics metadata + type(GFS_sfcprop_type), intent(in) :: GFS_sfcprop !< Physics variable data (surface) + type(GFS_tbd_type), intent(in) :: GFS_tbd !< Physics variable data (tbd) type(time_type), intent(in) :: time_step !< Current timestep type(domain2d), pointer :: domain_coarse, domain_fine @@ -273,7 +274,7 @@ subroutine dump_moving_nest(Atm_block, IPD_control, IPD_data, time_step) ! Enable this to dump debug netCDF files. Files are automatically closed when dumped. !if (mod(a_step, 80) .eq. 0 ) then ! if (tsvar_out) call mn_prog_dump_to_netcdf(Atm(n), a_step, "tsavar", is_fine_pe, domain_coarse, domain_fine, nz) - ! if (tsvar_out) call mn_phys_dump_to_netcdf(Atm(n), Atm_block, IPD_control, IPD_data, a_step, "tsavar", is_fine_pe, domain_coarse, domain_fine, nz) + ! if (tsvar_out) call mn_phys_dump_to_netcdf(Atm(n), Atm_block, GFS_control, GFS_sfcprop, GFS_tbd, time_val, file_prefix, is_fine_pe, domain_coarse, domain_fine, nz) !endif end subroutine dump_moving_nest @@ -483,12 +484,17 @@ end subroutine eval_move_nest !>@brief The subroutine 'fv_moving_nest_exec' performs the nest move - most work occurs on nest PEs but some on parent PEs. !>@details This subroutine shifts the prognostic and physics/surface variables. !! It also updates metadata and interpolation weights. - subroutine fv_moving_nest_exec(Atm, Atm_block, IPD_control, IPD_data, delta_i_c, delta_j_c, n, nest_num, parent_grid_num, child_grid_num, dt_atmos) + subroutine fv_moving_nest_exec(Atm, Atm_block, GFS_control, GFS_sfcprop, GFS_tbd, GFS_cldprop, GFS_intdiag, GFS_grid, & + delta_i_c, delta_j_c, n, nest_num, parent_grid_num, child_grid_num, dt_atmos) implicit none type(fv_atmos_type), allocatable, target, intent(inout) :: Atm(:) !< Atmospheric variables type(block_control_type), intent(in) :: Atm_block !< Physics block - type(IPD_control_type), intent(in) :: IPD_control !< Physics metadata - type(IPD_data_type), intent(inout) :: IPD_data(:) !< Physics variable data + type(GFS_control_type), intent(in) :: GFS_control !< Physics metadata + type(GFS_sfcprop_type), intent(inout) :: GFS_sfcprop !< Physics variable data (surface) + type(GFS_tbd_type), intent(inout) :: GFS_tbd !< Physics variable data (tbd) + type(GFS_cldprop_type), intent(inout) :: GFS_cldprop !< Physics variable data (clouds) + type(GFS_diag_type), intent(inout) :: GFS_intdiag !< Physics variable data (diagnostic) + type(GFS_grid_type), intent(inout) :: GFS_grid !< Physics variable data (grid) integer, intent(in) :: delta_i_c, delta_j_c !< Nest motion increments integer, intent(in) :: n, nest_num !< Nest indices integer, intent(in) :: parent_grid_num, child_grid_num !< Grid numbers @@ -615,7 +621,7 @@ subroutine fv_moving_nest_exec(Atm, Atm_block, IPD_control, IPD_data, delta_i_c, ! If NSST is turned off, do not move the NSST variables. ! Namelist switches are confusing; this should be the correct way to distinguish, not using nst_anl - if (IPD_Control%nstf_name(1) == 0) then + if (GFS_control%nstf_name(1) == 0) then move_nsst=.false. else move_nsst=.true. @@ -626,7 +632,7 @@ subroutine fv_moving_nest_exec(Atm, Atm_block, IPD_control, IPD_data, delta_i_c, call allocate_fv_moving_nest_prog_type(isd, ied, jsd, jed, npz, Moving_nest(n)%mn_prog) call allocate_fv_moving_nest_physics_type(isd, ied, jsd, jed, npz, move_physics, move_nsst, & - IPD_Control%lsoil, IPD_Control%nmtvr, IPD_Control%levs, IPD_Control%ntot2d, IPD_Control%ntot3d, & + GFS_control%lsoil, GFS_control%nmtvr, GFS_control%levs, GFS_control%ntot2d, GFS_control%ntot3d, & Moving_nest(n)%mn_phys) endif @@ -839,7 +845,7 @@ subroutine fv_moving_nest_exec(Atm, Atm_block, IPD_control, IPD_data, delta_i_c, !!===================================================================================== call mn_prog_fill_temp_variables(Atm, n, child_grid_num, is_fine_pe, npz) - call mn_phys_fill_temp_variables(Atm, Atm_block, IPD_control, IPD_data, n, child_grid_num, is_fine_pe, npz) + call mn_phys_fill_temp_variables(Atm, Atm_block, GFS_control, GFS_sfcprop, GFS_tbd, GFS_cldprop, GFS_intdiag, n, child_grid_num, is_fine_pe, npz) if (use_timers) call mpp_clock_end (id_movnest1_9) if (use_timers) call mpp_clock_begin (id_movnest2) @@ -853,7 +859,7 @@ subroutine fv_moving_nest_exec(Atm, Atm_block, IPD_control, IPD_data, delta_i_c, ! This is before any nest motion has occurred call mn_prog_fill_nest_halos_from_parent(Atm, n, child_grid_num, is_fine_pe, global_nest_domain, nz) - call mn_phys_fill_nest_halos_from_parent(Atm, IPD_control, IPD_data, mn_static, n, child_grid_num, is_fine_pe, global_nest_domain, nz) + call mn_phys_fill_nest_halos_from_parent(Atm, GFS_control, mn_static, n, child_grid_num, is_fine_pe, global_nest_domain, nz) if (use_timers) call mpp_clock_end (id_movnest2) if (use_timers) call mpp_clock_begin (id_movnest3) @@ -889,7 +895,7 @@ subroutine fv_moving_nest_exec(Atm, Atm_block, IPD_control, IPD_data, delta_i_c, ! TODO should/can this run before the mn_meta_move_nest? if (is_fine_pe) then call mn_prog_fill_intern_nest_halos(Atm(n), domain_fine, is_fine_pe) - call mn_phys_fill_intern_nest_halos(Moving_nest(n), IPD_control, IPD_data, domain_fine, is_fine_pe) + call mn_phys_fill_intern_nest_halos(Moving_nest(n), GFS_control, domain_fine, is_fine_pe) endif if (debug_sync) call mpp_sync(full_pelist) ! Used to make debugging easier. Can be removed. @@ -919,7 +925,7 @@ subroutine fv_moving_nest_exec(Atm, Atm_block, IPD_control, IPD_data, delta_i_c, if (use_timers) call mpp_clock_begin (id_movnest5_2) ! tile_geo holds the center lat/lons for the entire nest (all PEs). - call mn_reset_phys_latlon(Atm, n, tile_geo, fp_super_tile_geo, Atm_block, IPD_control, IPD_data) + call mn_reset_phys_latlon(Atm, n, tile_geo, fp_super_tile_geo, Atm_block, GFS_control, GFS_grid) if (use_timers) call mpp_clock_end (id_movnest5_2) endif @@ -975,7 +981,7 @@ subroutine fv_moving_nest_exec(Atm, Atm_block, IPD_control, IPD_data, delta_i_c, delta_i_c, delta_j_c, x_refine, y_refine, & is_fine_pe, global_nest_domain, nz) - call mn_phys_shift_data(Atm, IPD_control, IPD_data, n, child_grid_num, wt_h, wt_u, wt_v, & + call mn_phys_shift_data(Atm, GFS_control, n, child_grid_num, wt_h, wt_u, wt_v, & delta_i_c, delta_j_c, x_refine, y_refine, & is_fine_pe, global_nest_domain, nz) @@ -1043,7 +1049,7 @@ subroutine fv_moving_nest_exec(Atm, Atm_block, IPD_control, IPD_data, delta_i_c, Atm(n)%sgh(isc:iec, jsc:jec) = mn_static%orog_std_grid((ioffset-1)*x_refine+isc:(ioffset-1)*x_refine+iec, (joffset-1)*y_refine+jsc:(joffset-1)*y_refine+jec) endif - call mn_phys_reset_sfc_props(Atm, n, mn_static, Atm_block, IPD_data, ioffset, joffset, x_refine) + call mn_phys_reset_sfc_props(Atm, n, mn_static, Atm_block, GFS_sfcprop, ioffset, joffset, x_refine) endif !!===================================================================================== @@ -1053,7 +1059,7 @@ subroutine fv_moving_nest_exec(Atm, Atm_block, IPD_control, IPD_data, delta_i_c, ! Refill the halos around the edge of the nest from the parent call mn_prog_fill_nest_halos_from_parent(Atm, n, child_grid_num, is_fine_pe, global_nest_domain, nz) - call mn_phys_fill_nest_halos_from_parent(Atm, IPD_control, IPD_data, mn_static, n, child_grid_num, is_fine_pe, global_nest_domain, nz) + call mn_phys_fill_nest_halos_from_parent(Atm, GFS_control, mn_static, n, child_grid_num, is_fine_pe, global_nest_domain, nz) if (use_timers) call mpp_clock_end (id_movnest7_1) @@ -1062,7 +1068,7 @@ subroutine fv_moving_nest_exec(Atm, Atm_block, IPD_control, IPD_data, delta_i_c, ! Refill the internal halos after nest motion call mn_prog_fill_intern_nest_halos(Atm(n), domain_fine, is_fine_pe) - call mn_phys_fill_intern_nest_halos(Moving_nest(n), IPD_control, IPD_data, domain_fine, is_fine_pe) + call mn_phys_fill_intern_nest_halos(Moving_nest(n), GFS_control, domain_fine, is_fine_pe) if (use_timers) call mpp_clock_end (id_movnest7_2) endif @@ -1075,7 +1081,7 @@ subroutine fv_moving_nest_exec(Atm, Atm_block, IPD_control, IPD_data, delta_i_c, if (use_timers) call mpp_clock_begin (id_movnest7_3) call mn_prog_apply_temp_variables(Atm, n, child_grid_num, is_fine_pe, npz) - call mn_phys_apply_temp_variables(Atm, Atm_block, IPD_control, IPD_data, n, child_grid_num, is_fine_pe, npz) + call mn_phys_apply_temp_variables(Atm, Atm_block, GFS_control, GFS_sfcprop, GFS_tbd, GFS_cldprop, GFS_intdiag, n, child_grid_num, is_fine_pe, npz) if (use_timers) call mpp_clock_end (id_movnest7_3) if (use_timers) call mpp_clock_begin (id_movnest8) diff --git a/moving_nest/fv_moving_nest_physics.F90 b/moving_nest/fv_moving_nest_physics.F90 index bb0e09927..db06d1802 100644 --- a/moving_nest/fv_moving_nest_physics.F90 +++ b/moving_nest/fv_moving_nest_physics.F90 @@ -59,12 +59,8 @@ module fv_moving_nest_physics_mod use mpp_domains_mod, only: NORTH, SOUTH, EAST, WEST, CORNER, CENTER use mpp_domains_mod, only: NUPDATE, SUPDATE, EUPDATE, WUPDATE, DGRID_NE -#ifdef GFS_TYPES - use GFS_typedefs, only: IPD_data_type => GFS_data_type, & - IPD_control_type => GFS_control_type, kind_phys -#else - use IPD_typedefs, only: IPD_data_type, IPD_control_type, kind_phys => IPD_kind_phys -#endif + use GFS_typedefs, only: GFS_sfcprop_type, GFS_tbd_type, GFS_cldprop_type, & + GFS_grid_type, GFS_diag_type, GFS_control_type, kind_phys use GFS_init, only: GFS_grid_populate use boundary_mod, only: update_coarse_grid, update_coarse_grid_mpp @@ -113,11 +109,11 @@ module fv_moving_nest_physics_mod logical :: move_physics = .true. ! Always true, unless developer sets move_physics to .False. here for debugging. logical :: move_nsst = .true. ! Value is reset in fv_moving_nest_main.F90 from namelist options - ! Persistent variables to enable debug printing after range warnings. - type (fv_atmos_type), pointer :: save_Atm_n - type (block_control_type), pointer :: save_Atm_block - type(IPD_control_type), pointer :: save_IPD_Control - type(IPD_data_type), pointer :: save_IPD_Data(:) + !! Persistent variables to enable debug printing after range warnings. + !type (fv_atmos_type), pointer :: save_Atm_n + !type (block_control_type), pointer :: save_Atm_block + !type(IPD_control_type), pointer :: save_IPD_Control + !type(IPD_data_type), pointer :: save_IDP_Data #include @@ -126,17 +122,17 @@ module fv_moving_nest_physics_mod !>@brief The subroutine 'mn_phys_reset_sfc_props' sets the static surface parameters from the high-resolution input file data !>@details This subroutine relies on earlier code reading the data from files into the mn_static data structure !! This subroutine does not yet handle ice points or frac_grid - fractional landfrac/oceanfrac values - subroutine mn_phys_reset_sfc_props(Atm, n, mn_static, Atm_block, IPD_data, ioffset, joffset, refine) + subroutine mn_phys_reset_sfc_props(Atm, n, mn_static, Atm_block, GFS_Sfcprop, ioffset, joffset, refine) type(fv_atmos_type), intent(inout),allocatable :: Atm(:) !< Array of atmospheric data integer, intent(in) :: n !< Current grid number type(mn_surface_grids), intent(in) :: mn_static !< Static surface data type(block_control_type), intent(in) :: Atm_block !< Physics block layout - type(IPD_data_type), intent(inout) :: IPD_data(:) !< Physics variable data + type(GFS_sfcprop_type), intent(inout) :: GFS_Sfcprop !< Physics variable data integer, intent(in) :: ioffset, joffset !< Current nest offset in i,j direction integer, intent(in) :: refine !< Nest refinement ratio ! For iterating through physics/surface vector data - integer :: nb, blen, ix, i_pe, j_pe, i_idx, j_idx + integer :: nb, blen, ix, i_pe, j_pe, i_idx, j_idx, im real(kind=kind_phys) :: phys_oro ! Setup local land sea mask grid for masked interpolations @@ -150,6 +146,7 @@ subroutine mn_phys_reset_sfc_props(Atm, n, mn_static, Atm_block, IPD_data, ioffs enddo ! Reset the variables from the fix_sfc files + im = 0 do nb = 1,Atm_block%nblks blen = Atm_block%blksz(nb) do ix = 1, blen @@ -159,23 +156,25 @@ subroutine mn_phys_reset_sfc_props(Atm, n, mn_static, Atm_block, IPD_data, ioffs i_idx = (ioffset-1)*refine + i_pe j_idx = (joffset-1)*refine + j_pe + im = im + 1 + ! Reset the land sea mask from the hires parent data - IPD_data(nb)%Sfcprop%slmsk(ix) = mn_static%ls_mask_grid(i_idx, j_idx) + GFS_Sfcprop%slmsk(im) = mn_static%ls_mask_grid(i_idx, j_idx) ! IFD values are 0 for land, and 1 for oceans/lakes -- reverse of the land sea mask ! Land Sea Mask has values of 0 for oceans/lakes, 1 for land, 2 for sea ice ! TODO figure out what ifd should be for sea ice if (mn_static%ls_mask_grid(i_idx, j_idx) .eq. 1 ) then - if (move_nsst) IPD_data(nb)%Sfcprop%ifd(ix) = 0 ! Land - IPD_data(nb)%Sfcprop%oceanfrac(ix) = 0 ! Land -- TODO permit fractions - IPD_data(nb)%Sfcprop%landfrac(ix) = 1 ! Land -- TODO permit fractions + if (move_nsst) GFS_Sfcprop%ifd(im) = 0 ! Land + GFS_Sfcprop%oceanfrac(im) = 0 ! Land -- TODO permit fractions + GFS_Sfcprop%landfrac(im) = 1 ! Land -- TODO permit fractions else - if (move_nsst) IPD_data(nb)%Sfcprop%ifd(ix) = 1 ! Ocean - IPD_data(nb)%Sfcprop%oceanfrac(ix) = 1 ! Ocean -- TODO permit fractions - IPD_data(nb)%Sfcprop%landfrac(ix) = 0 ! Ocean -- TODO permit fractions + if (move_nsst) GFS_Sfcprop%ifd(im) = 1 ! Ocean + GFS_Sfcprop%oceanfrac(im) = 1 ! Ocean -- TODO permit fractions + GFS_Sfcprop%landfrac(im) = 0 ! Ocean -- TODO permit fractions endif - IPD_data(nb)%Sfcprop%tg3(ix) = mn_static%deep_soil_temp_grid(i_idx, j_idx) + GFS_Sfcprop%tg3(im) = mn_static%deep_soil_temp_grid(i_idx, j_idx) ! Follow logic from FV3/io/fv3atm_sfc_io.F90 ! TODO this will need to be more complicated if we support frac_grid @@ -188,33 +187,33 @@ subroutine mn_phys_reset_sfc_props(Atm, n, mn_static, Atm_block, IPD_data, ioffs ! Water soil type == lake, etc. -- override the other variables and make this water !!print '("mn_phys_reset_sfc_props LAKE SOIL npe=",I0," x,y=",I0,",",I0," lat=",F10.3," lon=",F10.3)', mpp_pe(), i_idx, j_idx, IPD_data(nb)%Grid%xlat_d(ix), IPD_data(nb)%Grid%xlon_d(ix)-360.0 - if (move_nsst) IPD_data(nb)%Sfcprop%ifd(ix) = 1 ! Ocean - IPD_data(nb)%Sfcprop%oceanfrac(ix) = 1 ! Ocean -- TODO permit fractions - IPD_data(nb)%Sfcprop%landfrac(ix) = 0 ! Ocean -- TODO permit fractions + if (move_nsst) GFS_Sfcprop%ifd(im) = 1 ! Ocean + GFS_Sfcprop%oceanfrac(im) = 1 ! Ocean -- TODO permit fractions + GFS_Sfcprop%landfrac(im) = 0 ! Ocean -- TODO permit fractions - IPD_data(nb)%Sfcprop%stype(ix) = 0 - IPD_data(nb)%Sfcprop%slmsk(ix) = 0 + GFS_Sfcprop%stype(im) = 0 + GFS_Sfcprop%slmsk(im) = 0 else - IPD_data(nb)%Sfcprop%stype(ix) = nint(mn_static%soil_type_grid(i_idx, j_idx)) + GFS_Sfcprop%stype(im) = nint(mn_static%soil_type_grid(i_idx, j_idx)) endif - !IPD_data(nb)%Sfcprop%vfrac(ix) = mn_static%veg_frac_grid(i_idx, j_idx) - IPD_data(nb)%Sfcprop%vtype(ix) = nint(mn_static%veg_type_grid(i_idx, j_idx)) - IPD_data(nb)%Sfcprop%slope(ix) = nint(mn_static%slope_type_grid(i_idx, j_idx)) - IPD_data(nb)%Sfcprop%snoalb(ix) = mn_static%max_snow_alb_grid(i_idx, j_idx) + !GFS_Sfcprop%vfrac(im) = mn_static%veg_frac_grid(i_idx, j_idx) + GFS_Sfcprop%vtype(im) = nint(mn_static%veg_type_grid(i_idx, j_idx)) + GFS_Sfcprop%slope(im) = nint(mn_static%slope_type_grid(i_idx, j_idx)) + GFS_Sfcprop%snoalb(im) = mn_static%max_snow_alb_grid(i_idx, j_idx) - IPD_data(nb)%Sfcprop%facsf(ix) = mn_static%facsf_grid(i_idx, j_idx) - IPD_data(nb)%Sfcprop%facwf(ix) = mn_static%facwf_grid(i_idx, j_idx) + GFS_Sfcprop%facsf(im) = mn_static%facsf_grid(i_idx, j_idx) + GFS_Sfcprop%facwf(im) = mn_static%facwf_grid(i_idx, j_idx) - IPD_data(nb)%Sfcprop%alvsf(ix) = mn_static%alvsf_grid(i_idx, j_idx) - IPD_data(nb)%Sfcprop%alvwf(ix) = mn_static%alvwf_grid(i_idx, j_idx) - IPD_data(nb)%Sfcprop%alnsf(ix) = mn_static%alnsf_grid(i_idx, j_idx) - IPD_data(nb)%Sfcprop%alnwf(ix) = mn_static%alnwf_grid(i_idx, j_idx) + GFS_Sfcprop%alvsf(im) = mn_static%alvsf_grid(i_idx, j_idx) + GFS_Sfcprop%alvwf(im) = mn_static%alvwf_grid(i_idx, j_idx) + GFS_Sfcprop%alnsf(im) = mn_static%alnsf_grid(i_idx, j_idx) + GFS_Sfcprop%alnwf(im) = mn_static%alnwf_grid(i_idx, j_idx) ! Reset the orography in the physics arrays, using the smoothed values from above phys_oro = Atm(n)%phis(i_pe, j_pe) / grav - IPD_data(nb)%Sfcprop%oro(ix) = phys_oro - IPD_data(nb)%Sfcprop%oro_uf(ix) = phys_oro + GFS_Sfcprop%oro(im) = phys_oro + GFS_Sfcprop%oro_uf(im) = phys_oro enddo enddo @@ -223,14 +222,14 @@ end subroutine mn_phys_reset_sfc_props !>@brief The subroutine 'mn_phys_reset_phys_latlon' sets the lat/lons from the high-resolution input file data !>@details This subroutine sets lat/lons of the moved nest, then recalculates all the derived quantities (dx,dy,etc.) - subroutine mn_reset_phys_latlon(Atm, n, tile_geo, fp_super_tile_geo, Atm_block, IPD_control, IPD_data) + subroutine mn_reset_phys_latlon(Atm, n, tile_geo, fp_super_tile_geo, Atm_block, GFS_control, GFS_grid) type(fv_atmos_type), allocatable, intent(in) :: Atm(:) !< Array of atmospheric data integer, intent(in) :: n !< Current grid number type(grid_geometry), intent(in) :: tile_geo !< Bounds of this grid type(grid_geometry), intent(in) :: fp_super_tile_geo !< Bounds of high-resolution parent grid type(block_control_type), intent(in) :: Atm_block !< Physics block layout - type(IPD_control_type), intent(in) :: IPD_control !< Physics metadata - type(IPD_data_type), intent(inout) :: IPD_data(:) !< Physics variable data + type(GFS_control_type), intent(in) :: GFS_control !< Physics metadata + type(GFS_grid_type), intent(inout) :: GFS_grid !< Physics variable data integer :: isc, jsc, iec, jec integer :: x, y, fp_i, fp_j @@ -287,7 +286,7 @@ subroutine mn_reset_phys_latlon(Atm, n, tile_geo, fp_super_tile_geo, Atm_block, enddo enddo - call GFS_grid_populate(IPD_data%Grid, lons, lats, area) + call GFS_grid_populate(GFS_Grid, lons, lats, area) deallocate(lats) deallocate(lons) @@ -298,11 +297,14 @@ end subroutine mn_reset_phys_latlon !>@brief The subroutine 'mn_phys_fill_temp_variables' extracts 1D physics data into a 2D array for nest motion !>@details This subroutine fills in the mn_phys structure on the Atm object with 2D arrays of physics/surface variables. !! Note that ice variables are not yet handled. - subroutine mn_phys_fill_temp_variables(Atm, Atm_block, IPD_Control, IPD_Data, n, child_grid_num, is_fine_pe, npz) + subroutine mn_phys_fill_temp_variables(Atm, Atm_block, GFS_control, GFS_sfcprop, GFS_tbd, GFS_cldprop, GFS_intdiag, n, child_grid_num, is_fine_pe, npz) type(fv_atmos_type), allocatable, target, intent(inout) :: Atm(:) !< Array of atmospheric data type (block_control_type), target, intent(in) :: Atm_block !< Physics block layout - type(IPD_control_type), target, intent(in) :: IPD_Control !< Physics metadata - type(IPD_data_type), target, intent(inout) :: IPD_Data(:) !< Physics variable data + type(GFS_control_type), target, intent(in) :: GFS_control !< Physics metadata + type(GFS_sfcprop_type), target, intent(in) :: GFS_sfcprop !< Physics variable data (surface) + type(GFS_tbd_type), target, intent(in) :: GFS_tbd !< Physics variable data (tbd) + type(GFS_cldprop_type), target, intent(in) :: GFS_cldprop !< Physics variable data (clouds) + type(GFS_diag_type), target, intent(in) :: GFS_intdiag !< Physics variable data (clouds) integer, intent(in) :: n, child_grid_num !< Current grid number, child grid number logical, intent(in) :: is_fine_pe !< Is this a nest PE? integer, intent(in) :: npz !< Number of vertical levels @@ -311,15 +313,15 @@ subroutine mn_phys_fill_temp_variables(Atm, Atm_block, IPD_Control, IPD_Data, n, integer :: is, ie, js, je integer :: this_pe - integer :: nb, blen, i, j, k, ix, nv + integer :: nb, blen, i, j, k, ix, nv, im type(fv_moving_nest_physics_type), pointer :: mn_phys this_pe = mpp_pe() - save_Atm_n => Atm(n) - save_Atm_block => Atm_block - save_IPD_Control => IPD_Control - save_IPD_Data => IPD_Data + !save_Atm_n => Atm(n) + !save_Atm_block => Atm_block + !save_GFS_control => GFS_control + !save_IPD_Data => IPD_Data isd = Atm(n)%bd%isd ied = Atm(n)%bd%ied @@ -337,100 +339,102 @@ subroutine mn_phys_fill_temp_variables(Atm, Atm_block, IPD_Control, IPD_Data, n, mn_phys%ts(is:ie, js:je) = Atm(n)%ts(is:ie, js:je) + im = 0 do nb = 1,Atm_block%nblks blen = Atm_block%blksz(nb) do ix = 1, blen ! Get the indices only once, before iterating through vertical levels or number of variables i = Atm_block%index(nb)%ii(ix) j = Atm_block%index(nb)%jj(ix) + im = im + 1 if (move_physics) then - do k = 1, IPD_Control%lsoil - mn_phys%smc(i,j,k) = IPD_Data(nb)%Sfcprop%smc(ix,k) - mn_phys%stc(i,j,k) = IPD_Data(nb)%Sfcprop%stc(ix,k) - mn_phys%slc(i,j,k) = IPD_Data(nb)%Sfcprop%slc(ix,k) + do k = 1, GFS_control%lsoil + mn_phys%smc(i,j,k) = GFS_sfcprop%smc(im,k) + mn_phys%stc(i,j,k) = GFS_sfcprop%stc(im,k) + mn_phys%slc(i,j,k) = GFS_sfcprop%slc(im,k) enddo - mn_phys%emis_lnd(i,j) = IPD_Data(nb)%Sfcprop%emis_lnd(ix) - mn_phys%emis_ice(i,j) = IPD_Data(nb)%Sfcprop%emis_ice(ix) - mn_phys%emis_wat(i,j) = IPD_Data(nb)%Sfcprop%emis_wat(ix) + mn_phys%emis_lnd(i,j) = GFS_sfcprop%emis_lnd(im) + mn_phys%emis_ice(i,j) = GFS_sfcprop%emis_ice(im) + mn_phys%emis_wat(i,j) = GFS_sfcprop%emis_wat(im) - !mn_phys%sfalb_lnd(i,j) = IPD_Data(nb)%Sfcprop%sfalb_lnd(ix) - !mn_phys%sfalb_lnd_bck(i,j) = IPD_Data(nb)%Sfcprop%sfalb_lnd_bck(ix) - !mn_phys%semis(i,j) = IPD_Data(nb)%Radtend%semis(ix) - !mn_phys%semisbase(i,j) = IPD_Data(nb)%Sfcprop%semisbase(ix) - !mn_phys%sfalb(i,j) = IPD_Data(nb)%Radtend%sfalb(ix) + !mn_phys%sfalb_lnd(i,j) = GFS_sfcprop%sfalb_lnd(im) + !mn_phys%sfalb_lnd_bck(i,j) = GFS_sfcprop%sfalb_lnd_bck(im) + !mn_phys%semis(i,j) = GFS_Radtend%semis(im) + !mn_phys%semisbase(i,j) = GFS_sfcprop%semisbase(im) + !mn_phys%sfalb(i,j) = GFS_Radtend%sfalb(im) - mn_phys%albdirvis_lnd(i,j) = IPD_Data(nb)%Sfcprop%albdirvis_lnd(ix) - mn_phys%albdirnir_lnd(i,j) = IPD_Data(nb)%Sfcprop%albdirnir_lnd(ix) - mn_phys%albdifvis_lnd(i,j) = IPD_Data(nb)%Sfcprop%albdifvis_lnd(ix) - mn_phys%albdifnir_lnd(i,j) = IPD_Data(nb)%Sfcprop%albdifnir_lnd(ix) + mn_phys%albdirvis_lnd(i,j) = GFS_sfcprop%albdirvis_lnd(im) + mn_phys%albdirnir_lnd(i,j) = GFS_sfcprop%albdirnir_lnd(im) + mn_phys%albdifvis_lnd(i,j) = GFS_sfcprop%albdifvis_lnd(im) + mn_phys%albdifnir_lnd(i,j) = GFS_sfcprop%albdifnir_lnd(im) - mn_phys%u10m(i,j) = IPD_Data(nb)%IntDiag%u10m(ix) - mn_phys%v10m(i,j) = IPD_Data(nb)%IntDiag%v10m(ix) - mn_phys%tprcp(i,j) = IPD_Data(nb)%Sfcprop%tprcp(ix) + mn_phys%u10m(i,j) = GFS_intdiag%u10m(im) + mn_phys%v10m(i,j) = GFS_intdiag%v10m(im) + mn_phys%tprcp(i,j) = GFS_sfcprop%tprcp(im) - do k = 1, IPD_Control%nmtvr - mn_phys%hprime(i,j,k) = IPD_Data(nb)%Sfcprop%hprime(ix,k) + do k = 1, GFS_control%nmtvr + mn_phys%hprime(i,j,k) = GFS_sfcprop%hprime(im,k) enddo - mn_phys%lakefrac(i,j) = IPD_Data(nb)%Sfcprop%lakefrac(ix) - mn_phys%lakedepth(i,j) = IPD_Data(nb)%Sfcprop%lakedepth(ix) - - mn_phys%canopy(i,j) = IPD_Data(nb)%Sfcprop%canopy(ix) - mn_phys%vegfrac(i,j)= IPD_Data(nb)%Sfcprop%vfrac(ix) - mn_phys%uustar(i,j) = IPD_Data(nb)%Sfcprop%uustar(ix) - mn_phys%shdmin(i,j) = IPD_Data(nb)%Sfcprop%shdmin(ix) - mn_phys%shdmax(i,j) = IPD_Data(nb)%Sfcprop%shdmax(ix) - mn_phys%zorl(i,j) = IPD_Data(nb)%Sfcprop%zorl(ix) - mn_phys%zorll(i,j) = IPD_Data(nb)%Sfcprop%zorll(ix) - mn_phys%zorlwav(i,j)= IPD_Data(nb)%Sfcprop%zorlwav(ix) - mn_phys%zorlw(i,j) = IPD_Data(nb)%Sfcprop%zorlw(ix) - mn_phys%usfco(i,j) = IPD_Data(nb)%Sfcprop%usfco(ix) - mn_phys%vsfco(i,j) = IPD_Data(nb)%Sfcprop%vsfco(ix) - mn_phys%tsfco(i,j) = IPD_Data(nb)%Sfcprop%tsfco(ix) - mn_phys%tsfcl(i,j) = IPD_Data(nb)%Sfcprop%tsfcl(ix) - mn_phys%tsfc(i,j) = IPD_Data(nb)%Sfcprop%tsfc(ix) - - mn_phys%albdirvis_lnd(i,j) = IPD_Data(nb)%Sfcprop%albdirvis_lnd(ix) - mn_phys%albdirnir_lnd(i,j) = IPD_Data(nb)%Sfcprop%albdirnir_lnd(ix) - mn_phys%albdifvis_lnd(i,j) = IPD_Data(nb)%Sfcprop%albdifvis_lnd(ix) - mn_phys%albdifnir_lnd(i,j) = IPD_Data(nb)%Sfcprop%albdifnir_lnd(ix) - - do nv = 1, IPD_Control%ntot2d - mn_phys%phy_f2d(i,j,nv) = IPD_Data(nb)%Tbd%phy_f2d(ix, nv) + mn_phys%lakefrac(i,j) = GFS_Sfcprop%lakefrac(im) + mn_phys%lakedepth(i,j) = GFS_Sfcprop%lakedepth(im) + + mn_phys%canopy(i,j) = GFS_Sfcprop%canopy(im) + mn_phys%vegfrac(i,j)= GFS_Sfcprop%vfrac(im) + mn_phys%uustar(i,j) = GFS_Sfcprop%uustar(im) + mn_phys%shdmin(i,j) = GFS_Sfcprop%shdmin(im) + mn_phys%shdmax(i,j) = GFS_Sfcprop%shdmax(im) + mn_phys%zorl(i,j) = GFS_Sfcprop%zorl(im) + mn_phys%zorll(i,j) = GFS_Sfcprop%zorll(im) + mn_phys%zorlwav(i,j)= GFS_Sfcprop%zorlwav(im) + mn_phys%zorlw(i,j) = GFS_Sfcprop%zorlw(im) + mn_phys%usfco(i,j) = GFS_Sfcprop%usfco(im) + mn_phys%vsfco(i,j) = GFS_Sfcprop%vsfco(im) + mn_phys%tsfco(i,j) = GFS_Sfcprop%tsfco(im) + mn_phys%tsfcl(i,j) = GFS_Sfcprop%tsfcl(im) + mn_phys%tsfc(i,j) = GFS_Sfcprop%tsfc(im) + + mn_phys%albdirvis_lnd(i,j) = GFS_Sfcprop%albdirvis_lnd(im) + mn_phys%albdirnir_lnd(i,j) = GFS_Sfcprop%albdirnir_lnd(im) + mn_phys%albdifvis_lnd(i,j) = GFS_Sfcprop%albdifvis_lnd(im) + mn_phys%albdifnir_lnd(i,j) = GFS_Sfcprop%albdifnir_lnd(im) + + do nv = 1, GFS_Control%ntot2d + mn_phys%phy_f2d(i,j,nv) = GFS_tbd%phy_f2d(im, nv) enddo - do k = 1, IPD_Control%levs - do nv = 1, IPD_Control%ntot3d - mn_phys%phy_f3d(i,j,k,nv) = IPD_Data(nb)%Tbd%phy_f3d(ix, k, nv) + do k = 1, GFS_control%levs + do nv = 1, GFS_control%ntot3d + mn_phys%phy_f3d(i,j,k,nv) = GFS_tbd%phy_f3d(im, k, nv) enddo enddo ! Cloud prop data has x,y dimensions - mn_phys%cv(i,j) = IPD_Data(nb)%Cldprop%cv(ix) - mn_phys%cvt(i,j) = IPD_Data(nb)%Cldprop%cvt(ix) - mn_phys%cvb(i,j) = IPD_Data(nb)%Cldprop%cvb(ix) + mn_phys%cv(i,j) = GFS_cldprop%cv(im) + mn_phys%cvt(i,j) = GFS_cldprop%cvt(im) + mn_phys%cvb(i,j) = GFS_cldprop%cvb(im) endif if (move_nsst) then - mn_phys%tref(i,j) = IPD_Data(nb)%Sfcprop%tref(ix) - mn_phys%z_c(i,j) = IPD_Data(nb)%Sfcprop%z_c(ix) - mn_phys%c_0(i,j) = IPD_Data(nb)%Sfcprop%c_0(ix) - mn_phys%c_d(i,j) = IPD_Data(nb)%Sfcprop%c_d(ix) - mn_phys%w_0(i,j) = IPD_Data(nb)%Sfcprop%w_0(ix) - mn_phys%w_d(i,j) = IPD_Data(nb)%Sfcprop%w_d(ix) - mn_phys%xt(i,j) = IPD_Data(nb)%Sfcprop%xt(ix) - mn_phys%xs(i,j) = IPD_Data(nb)%Sfcprop%xs(ix) - mn_phys%xu(i,j) = IPD_Data(nb)%Sfcprop%xu(ix) - mn_phys%xv(i,j) = IPD_Data(nb)%Sfcprop%xv(ix) - mn_phys%xz(i,j) = IPD_Data(nb)%Sfcprop%xz(ix) - mn_phys%zm(i,j) = IPD_Data(nb)%Sfcprop%zm(ix) - mn_phys%xtts(i,j) = IPD_Data(nb)%Sfcprop%xtts(ix) - mn_phys%xzts(i,j) = IPD_Data(nb)%Sfcprop%xzts(ix) - mn_phys%d_conv(i,j) = IPD_Data(nb)%Sfcprop%d_conv(ix) - mn_phys%dt_cool(i,j)= IPD_Data(nb)%Sfcprop%dt_cool(ix) - mn_phys%qrain(i,j) = IPD_Data(nb)%Sfcprop%qrain(ix) + mn_phys%tref(i,j) = GFS_sfcprop%tref(im) + mn_phys%z_c(i,j) = GFS_sfcprop%z_c(im) + mn_phys%c_0(i,j) = GFS_sfcprop%c_0(im) + mn_phys%c_d(i,j) = GFS_sfcprop%c_d(im) + mn_phys%w_0(i,j) = GFS_sfcprop%w_0(im) + mn_phys%w_d(i,j) = GFS_sfcprop%w_d(im) + mn_phys%xt(i,j) = GFS_sfcprop%xt(im) + mn_phys%xs(i,j) = GFS_sfcprop%xs(im) + mn_phys%xu(i,j) = GFS_sfcprop%xu(im) + mn_phys%xv(i,j) = GFS_sfcprop%xv(im) + mn_phys%xz(i,j) = GFS_sfcprop%xz(im) + mn_phys%zm(i,j) = GFS_sfcprop%zm(im) + mn_phys%xtts(i,j) = GFS_sfcprop%xtts(im) + mn_phys%xzts(i,j) = GFS_sfcprop%xzts(im) + mn_phys%d_conv(i,j) = GFS_sfcprop%d_conv(im) + mn_phys%dt_cool(i,j)= GFS_sfcprop%dt_cool(im) + mn_phys%qrain(i,j) = GFS_sfcprop%qrain(im) endif enddo enddo @@ -440,18 +444,21 @@ end subroutine mn_phys_fill_temp_variables !>@brief The subroutine 'mn_phys_apply_temp_variables' copies moved 2D data back into 1D physics arryas for nest motion !>@details This subroutine fills the 1D physics arrays from the mn_phys structure on the Atm object !! Note that ice variables are not yet handled. - subroutine mn_phys_apply_temp_variables(Atm, Atm_block, IPD_Control, IPD_Data, n, child_grid_num, is_fine_pe, npz) + subroutine mn_phys_apply_temp_variables(Atm, Atm_block, GFS_control, GFS_sfcprop, GFS_tbd, GFS_cldprop, GFS_intdiag, n, child_grid_num, is_fine_pe, npz) type(fv_atmos_type), allocatable, target, intent(inout) :: Atm(:) !< Array of atmospheric data type (block_control_type), intent(in) :: Atm_block !< Physics block layout - type(IPD_control_type), intent(in) :: IPD_Control !< Physics metadata - type(IPD_data_type), intent(inout) :: IPD_Data(:) !< Physics variable data + type(GFS_control_type), intent(in) :: GFS_control !< Physics metadata + type(GFS_sfcprop_type), intent(inout) :: GFS_sfcprop !< Physics variable data (surface) + type(GFS_tbd_type), intent(inout) :: GFS_tbd !< Physics variable data (tbd) + type(GFS_cldprop_type), intent(inout) :: GFS_cldprop !< Physics variable data (clouds) + type(GFS_diag_type), intent(inout) :: GFS_intdiag !< Physics variable data (diagnostic) integer, intent(in) :: n, child_grid_num !< Current grid number, child grid number logical, intent(in) :: is_fine_pe !< Is this a nest PE? integer, intent(in) :: npz !< Number of vertical levels integer :: is, ie, js, je integer :: this_pe - integer :: nb, blen, i, j ,k, ix, nv + integer :: nb, blen, i, j ,k, ix, nv, im type(fv_moving_nest_physics_type), pointer :: mn_phys this_pe = mpp_pe() @@ -468,178 +475,180 @@ subroutine mn_phys_apply_temp_variables(Atm, Atm_block, IPD_Control, IPD_Data, n ! SST directly in Atm structure Atm(n)%ts(is:ie, js:je) = mn_phys%ts(is:ie, js:je) + im = 0 do nb = 1,Atm_block%nblks blen = Atm_block%blksz(nb) do ix = 1, blen i = Atm_block%index(nb)%ii(ix) j = Atm_block%index(nb)%jj(ix) + im = im +1 if (move_physics) then ! Surface properties - do k = 1, IPD_Control%lsoil - IPD_Data(nb)%Sfcprop%smc(ix,k) = mn_phys%smc(i,j,k) - IPD_Data(nb)%Sfcprop%stc(ix,k) = mn_phys%stc(i,j,k) - IPD_Data(nb)%Sfcprop%slc(ix,k) = mn_phys%slc(i,j,k) + do k = 1, GFS_control%lsoil + GFS_sfcprop%smc(im,k) = mn_phys%smc(i,j,k) + GFS_sfcprop%stc(im,k) = mn_phys%stc(i,j,k) + GFS_sfcprop%slc(im,k) = mn_phys%slc(i,j,k) enddo ! EMIS PATCH - Force to positive at all locations. if (mn_phys%emis_lnd(i,j) .ge. 0.0) then - IPD_Data(nb)%Sfcprop%emis_lnd(ix) = mn_phys%emis_lnd(i,j) + GFS_sfcprop%emis_lnd(im) = mn_phys%emis_lnd(i,j) else - IPD_Data(nb)%Sfcprop%emis_lnd(ix) = 0.5 + GFS_sfcprop%emis_lnd(im) = 0.5 endif if (mn_phys%emis_ice(i,j) .ge. 0.0) then - IPD_Data(nb)%Sfcprop%emis_ice(ix) = mn_phys%emis_ice(i,j) + GFS_sfcprop%emis_ice(im) = mn_phys%emis_ice(i,j) else - IPD_Data(nb)%Sfcprop%emis_ice(ix) = 0.5 + GFS_sfcprop%emis_ice(im) = 0.5 endif if (mn_phys%emis_wat(i,j) .ge. 0.0) then - IPD_Data(nb)%Sfcprop%emis_wat(ix) = mn_phys%emis_wat(i,j) + GFS_sfcprop%emis_wat(im) = mn_phys%emis_wat(i,j) else - IPD_Data(nb)%Sfcprop%emis_wat(ix) = 0.5 + GFS_sfcprop%emis_wat(im) = 0.5 endif - !IPD_Data(nb)%Sfcprop%sfalb_lnd(ix) = mn_phys%sfalb_lnd(i,j) - !IPD_Data(nb)%Sfcprop%sfalb_lnd_bck(ix) = mn_phys%sfalb_lnd_bck(i,j) - !IPD_Data(nb)%Radtend%semis(ix) = mn_phys%semis(i,j) - !IPD_Data(nb)%Sfcprop%semisbase(ix) = mn_phys%semisbase(i,j) - !IPD_Data(nb)%Radtend%sfalb(ix) = mn_phys%sfalb(i,j) + !GFS_sfcprop%sfalb_lnd(im) = mn_phys%sfalb_lnd(i,j) + !GFS_sfcprop%sfalb_lnd_bck(im) = mn_phys%sfalb_lnd_bck(i,j) + !GFS_radtend%semis(im) = mn_phys%semis(i,j) + !GFS_sfcprop%semisbase(im) = mn_phys%semisbase(i,j) + !GFS_radtend%sfalb(im) = mn_phys%sfalb(i,j) - IPD_Data(nb)%IntDiag%u10m(ix) = mn_phys%u10m(i,j) - IPD_Data(nb)%IntDiag%v10m(ix) = mn_phys%v10m(i,j) - IPD_Data(nb)%Sfcprop%tprcp(ix) = mn_phys%tprcp(i,j) + GFS_intdiag%u10m(im) = mn_phys%u10m(i,j) + GFS_intdiag%v10m(im) = mn_phys%v10m(i,j) + GFS_sfcprop%tprcp(im) = mn_phys%tprcp(i,j) - do k = 1, IPD_Control%nmtvr - IPD_Data(nb)%Sfcprop%hprime(ix,k) = mn_phys%hprime(i,j,k) + do k = 1, GFS_control%nmtvr + GFS_sfcprop%hprime(im,k) = mn_phys%hprime(i,j,k) enddo - IPD_Data(nb)%Sfcprop%lakefrac(ix) = mn_phys%lakefrac(i,j) - IPD_Data(nb)%Sfcprop%lakedepth(ix) = mn_phys%lakedepth(i,j) + GFS_sfcprop%lakefrac(im) = mn_phys%lakefrac(i,j) + GFS_sfcprop%lakedepth(im) = mn_phys%lakedepth(i,j) - IPD_Data(nb)%Sfcprop%canopy(ix) = mn_phys%canopy(i,j) - IPD_Data(nb)%Sfcprop%vfrac(ix) = mn_phys%vegfrac(i,j) - IPD_Data(nb)%Sfcprop%uustar(ix) = mn_phys%uustar(i,j) - IPD_Data(nb)%Sfcprop%shdmin(ix) = mn_phys%shdmin(i,j) - IPD_Data(nb)%Sfcprop%shdmax(ix) = mn_phys%shdmax(i,j) + GFS_sfcprop%canopy(im) = mn_phys%canopy(i,j) + GFS_sfcprop%vfrac(im) = mn_phys%vegfrac(i,j) + GFS_sfcprop%uustar(im) = mn_phys%uustar(i,j) + GFS_sfcprop%shdmin(im) = mn_phys%shdmin(i,j) + GFS_sfcprop%shdmax(im) = mn_phys%shdmax(i,j) ! Set roughness lengths to physically reasonable values if they have fill value (possible at coastline) ! sea/land mask array (sea:0,land:1,sea-ice:2) - if (nint(IPD_data(nb)%Sfcprop%slmsk(ix)) .eq. 1 .and. mn_phys%zorll(i,j) .gt. 1e6) then - IPD_Data(nb)%Sfcprop%zorll(ix) = 82.0 ! + if (nint(GFS_sfcprop%slmsk(im)) .eq. 1 .and. mn_phys%zorll(i,j) .gt. 1e6) then + GFS_sfcprop%zorll(im) = 82.0 ! else - IPD_Data(nb)%Sfcprop%zorll(ix) = mn_phys%zorll(i,j) + GFS_sfcprop%zorll(im) = mn_phys%zorll(i,j) endif - if (nint(IPD_data(nb)%Sfcprop%slmsk(ix)) .eq. 0 .and. mn_phys%zorlw(i,j) .gt. 1e6) then - IPD_Data(nb)%Sfcprop%zorlw(ix) = 83.0 ! + if (nint(GFS_sfcprop%slmsk(im)) .eq. 0 .and. mn_phys%zorlw(i,j) .gt. 1e6) then + GFS_sfcprop%zorlw(im) = 83.0 ! else - IPD_Data(nb)%Sfcprop%zorlw(ix) = mn_phys%zorlw(i,j) + GFS_sfcprop%zorlw(im) = mn_phys%zorlw(i,j) endif - if (nint(IPD_data(nb)%Sfcprop%slmsk(ix)) .eq. 0 .and. mn_phys%zorlwav(i,j) .gt. 1e6) then - IPD_Data(nb)%Sfcprop%zorlwav(ix) = 84.0 ! + if (nint(GFS_sfcprop%slmsk(im)) .eq. 0 .and. mn_phys%zorlwav(i,j) .gt. 1e6) then + GFS_sfcprop%zorlwav(im) = 84.0 ! else - IPD_Data(nb)%Sfcprop%zorlwav(ix) = mn_phys%zorlwav(i,j) + GFS_sfcprop%zorlwav(im) = mn_phys%zorlwav(i,j) endif if (mn_phys%zorl(i,j) .gt. 1e6) then - IPD_Data(nb)%Sfcprop%zorl(ix) = 85.0 + GFS_sfcprop%zorl(im) = 85.0 else - IPD_Data(nb)%Sfcprop%zorl(ix) = mn_phys%zorl(i,j) + GFS_sfcprop%zorl(im) = mn_phys%zorl(i,j) endif - if (nint(IPD_data(nb)%Sfcprop%slmsk(ix)) .eq. 0 .and. mn_phys%usfco(i,j) .gt. 1e6) then - IPD_Data(nb)%Sfcprop%usfco(ix) = 0.0 + if (nint(GFS_sfcprop%slmsk(im)) .eq. 0 .and. mn_phys%usfco(i,j) .gt. 1e6) then + GFS_sfcprop%usfco(im) = 0.0 else - IPD_Data(nb)%Sfcprop%usfco(ix) = mn_phys%usfco(i,j) + GFS_sfcprop%usfco(im) = mn_phys%usfco(i,j) endif - if (nint(IPD_data(nb)%Sfcprop%slmsk(ix)) .eq. 0 .and. mn_phys%vsfco(i,j) .gt. 1e6) then - IPD_Data(nb)%Sfcprop%vsfco(ix) = 0.0 + if (nint(GFS_sfcprop%slmsk(im)) .eq. 0 .and. mn_phys%vsfco(i,j) .gt. 1e6) then + GFS_sfcprop%vsfco(im) = 0.0 else - IPD_Data(nb)%Sfcprop%vsfco(ix) = mn_phys%vsfco(i,j) + GFS_sfcprop%vsfco(im) = mn_phys%vsfco(i,j) endif - IPD_Data(nb)%Sfcprop%tsfco(ix) = mn_phys%tsfco(i,j) - IPD_Data(nb)%Sfcprop%tsfcl(ix) = mn_phys%tsfcl(i,j) - IPD_Data(nb)%Sfcprop%tsfc(ix) = mn_phys%tsfc(i,j) + GFS_sfcprop%tsfco(im) = mn_phys%tsfco(i,j) + GFS_sfcprop%tsfcl(im) = mn_phys%tsfcl(i,j) + GFS_sfcprop%tsfc(im) = mn_phys%tsfc(i,j) ! Set albedo values to physically reasonable values if they have negative fill values. if (mn_phys%albdirvis_lnd (i,j) .ge. 0.0) then - IPD_Data(nb)%Sfcprop%albdirvis_lnd (ix) = mn_phys%albdirvis_lnd (i,j) + GFS_sfcprop%albdirvis_lnd (im) = mn_phys%albdirvis_lnd (i,j) else - IPD_Data(nb)%Sfcprop%albdirvis_lnd (ix) = 0.5 + GFS_sfcprop%albdirvis_lnd (im) = 0.5 endif if (mn_phys%albdirnir_lnd (i,j) .ge. 0.0) then - IPD_Data(nb)%Sfcprop%albdirnir_lnd (ix) = mn_phys%albdirnir_lnd (i,j) + GFS_sfcprop%albdirnir_lnd (im) = mn_phys%albdirnir_lnd (i,j) else - IPD_Data(nb)%Sfcprop%albdirnir_lnd (ix) = 0.5 + GFS_sfcprop%albdirnir_lnd (im) = 0.5 endif if (mn_phys%albdifvis_lnd (i,j) .ge. 0.0) then - IPD_Data(nb)%Sfcprop%albdifvis_lnd (ix) = mn_phys%albdifvis_lnd (i,j) + GFS_sfcprop%albdifvis_lnd (im) = mn_phys%albdifvis_lnd (i,j) else - IPD_Data(nb)%Sfcprop%albdifvis_lnd (ix) = 0.5 + GFS_sfcprop%albdifvis_lnd (im) = 0.5 endif if (mn_phys%albdifnir_lnd (i,j) .ge. 0.0) then - IPD_Data(nb)%Sfcprop%albdifnir_lnd (ix) = mn_phys%albdifnir_lnd (i,j) + GFS_sfcprop%albdifnir_lnd (im) = mn_phys%albdifnir_lnd (i,j) else - IPD_Data(nb)%Sfcprop%albdifnir_lnd (ix) = 0.5 + GFS_sfcprop%albdifnir_lnd (im) = 0.5 endif ! Cloud properties - IPD_Data(nb)%Cldprop%cv(ix) = mn_phys%cv(i,j) - IPD_Data(nb)%Cldprop%cvt(ix) = mn_phys%cvt(i,j) - IPD_Data(nb)%Cldprop%cvb(ix) = mn_phys%cvb(i,j) + GFS_cldprop%cv(im) = mn_phys%cv(i,j) + GFS_cldprop%cvt(im) = mn_phys%cvt(i,j) + GFS_cldprop%cvb(im) = mn_phys%cvb(i,j) - do nv = 1, IPD_Control%ntot2d - IPD_Data(nb)%Tbd%phy_f2d(ix, nv) = mn_phys%phy_f2d(i,j,nv) + do nv = 1, GFS_control%ntot2d + GFS_tbd%phy_f2d(im, nv) = mn_phys%phy_f2d(i,j,nv) enddo - do k = 1, IPD_Control%levs - do nv = 1, IPD_Control%ntot3d - IPD_Data(nb)%Tbd%phy_f3d(ix, k, nv) = mn_phys%phy_f3d(i,j,k,nv) + do k = 1, GFS_control%levs + do nv = 1, GFS_control%ntot3d + GFS_tbd%phy_f3d(im, k, nv) = mn_phys%phy_f3d(i,j,k,nv) enddo enddo endif if (move_nsst) then - IPD_Data(nb)%Sfcprop%tref(ix) = mn_phys%tref(i,j) - IPD_Data(nb)%Sfcprop%z_c(ix) = mn_phys%z_c(i,j) - IPD_Data(nb)%Sfcprop%c_0(ix) = mn_phys%c_0(i,j) - IPD_Data(nb)%Sfcprop%c_d(ix) = mn_phys%c_d(i,j) - IPD_Data(nb)%Sfcprop%w_0(ix) = mn_phys%w_0(i,j) - IPD_Data(nb)%Sfcprop%w_d(ix) = mn_phys%w_d(i,j) - IPD_Data(nb)%Sfcprop%xt(ix) = mn_phys%xt(i,j) - IPD_Data(nb)%Sfcprop%xs(ix) = mn_phys%xs(i,j) - IPD_Data(nb)%Sfcprop%xu(ix) = mn_phys%xu(i,j) - IPD_Data(nb)%Sfcprop%xv(ix) = mn_phys%xv(i,j) - IPD_Data(nb)%Sfcprop%xz(ix) = mn_phys%xz(i,j) - IPD_Data(nb)%Sfcprop%zm(ix) = mn_phys%zm(i,j) - IPD_Data(nb)%Sfcprop%xtts(ix) = mn_phys%xtts(i,j) - IPD_Data(nb)%Sfcprop%xzts(ix) = mn_phys%xzts(i,j) - IPD_Data(nb)%Sfcprop%d_conv(ix) = mn_phys%d_conv(i,j) - IPD_Data(nb)%Sfcprop%dt_cool(ix) = mn_phys%dt_cool(i,j) - IPD_Data(nb)%Sfcprop%qrain(ix) = mn_phys%qrain(i,j) + GFS_sfcprop%tref(im) = mn_phys%tref(i,j) + GFS_sfcprop%z_c(im) = mn_phys%z_c(i,j) + GFS_sfcprop%c_0(im) = mn_phys%c_0(i,j) + GFS_sfcprop%c_d(im) = mn_phys%c_d(i,j) + GFS_sfcprop%w_0(im) = mn_phys%w_0(i,j) + GFS_sfcprop%w_d(im) = mn_phys%w_d(i,j) + GFS_sfcprop%xt(im) = mn_phys%xt(i,j) + GFS_sfcprop%xs(im) = mn_phys%xs(i,j) + GFS_sfcprop%xu(im) = mn_phys%xu(i,j) + GFS_sfcprop%xv(im) = mn_phys%xv(i,j) + GFS_sfcprop%xz(im) = mn_phys%xz(i,j) + GFS_sfcprop%zm(im) = mn_phys%zm(i,j) + GFS_sfcprop%xtts(im) = mn_phys%xtts(i,j) + GFS_sfcprop%xzts(im) = mn_phys%xzts(i,j) + GFS_sfcprop%d_conv(im) = mn_phys%d_conv(i,j) + GFS_sfcprop%dt_cool(im) = mn_phys%dt_cool(i,j) + GFS_sfcprop%qrain(im) = mn_phys%qrain(i,j) endif ! Check if stype and vtype are properly set for land points. Set to reasonable values if they have fill values. - if ( (int(IPD_data(nb)%Sfcprop%slmsk(ix)) .eq. 1) ) then + if ( (int(GFS_sfcprop%slmsk(im)) .eq. 1) ) then - if (IPD_data(nb)%Sfcprop%vtype(ix) .lt. 0.5) then - IPD_data(nb)%Sfcprop%vtype(ix) = 7 ! Force to grassland + if (GFS_sfcprop%vtype(im) .lt. 0.5) then + GFS_sfcprop%vtype(im) = 7 ! Force to grassland endif - if (IPD_data(nb)%Sfcprop%stype(ix) .lt. 0.5) then - IPD_data(nb)%Sfcprop%stype(ix) = 3 ! Force to sandy loam + if (GFS_sfcprop%stype(im) .lt. 0.5) then + GFS_sfcprop%stype(im) = 3 ! Force to sandy loam endif - if (IPD_data(nb)%Sfcprop%vtype_save(ix) .lt. 0.5) then - IPD_data(nb)%Sfcprop%vtype_save(ix) = 7 ! Force to grassland + if (GFS_sfcprop%vtype_save(im) .lt. 0.5) then + GFS_sfcprop%vtype_save(im) = 7 ! Force to grassland endif - if (IPD_data(nb)%Sfcprop%stype_save(ix) .lt. 0.5) then - IPD_data(nb)%Sfcprop%stype_save(ix) = 3 ! Force to sandy loam + if (GFS_sfcprop%stype_save(im) .lt. 0.5) then + GFS_sfcprop%stype_save(im) = 3 ! Force to sandy loam endif endif @@ -652,10 +661,9 @@ end subroutine mn_phys_apply_temp_variables !>@brief The subroutine 'mn_physfill_nest_halos_from_parent' transfers data from the coarse grid to the nest edge !>@details This subroutine must run on parent and nest PEs to complete the data transfers - subroutine mn_phys_fill_nest_halos_from_parent(Atm, IPD_Control, IPD_Data, mn_static, n, child_grid_num, is_fine_pe, nest_domain, nz) + subroutine mn_phys_fill_nest_halos_from_parent(Atm, GFS_control, mn_static, n, child_grid_num, is_fine_pe, nest_domain, nz) type(fv_atmos_type), allocatable, target, intent(inout) :: Atm(:) !< Array of atmospheric data - type(IPD_control_type), intent(in) :: IPD_Control !< Physics metadata - type(IPD_data_type), intent(inout) :: IPD_Data(:) !< Physics variable data + type(GFS_control_type), intent(in) :: GFS_control !< Physics metadata type(mn_surface_grids), intent(in) :: mn_static !< Static data integer, intent(in) :: n, child_grid_num !< Current grid number, child grid number logical, intent(in) :: is_fine_pe !< Is this a nest PE? @@ -692,25 +700,25 @@ subroutine mn_phys_fill_nest_halos_from_parent(Atm, IPD_Control, IPD_Data, mn_st call fill_nest_halos_from_parent("smc", mn_phys%smc, interp_type, Atm(child_grid_num)%neststruct%wt_h, & Atm(child_grid_num)%neststruct%ind_h, & x_refine, y_refine, & - is_fine_pe, nest_domain, position, IPD_Control%lsoil) + is_fine_pe, nest_domain, position, GFS_control%lsoil) call fill_nest_halos_from_parent("stc", mn_phys%stc, interp_type, Atm(child_grid_num)%neststruct%wt_h, & Atm(child_grid_num)%neststruct%ind_h, & x_refine, y_refine, & - is_fine_pe, nest_domain, position, IPD_Control%lsoil) + is_fine_pe, nest_domain, position, GFS_control%lsoil) call fill_nest_halos_from_parent("slc", mn_phys%slc, interp_type, Atm(child_grid_num)%neststruct%wt_h, & Atm(child_grid_num)%neststruct%ind_h, & x_refine, y_refine, & - is_fine_pe, nest_domain, position, IPD_Control%lsoil) + is_fine_pe, nest_domain, position, GFS_control%lsoil) call fill_nest_halos_from_parent("phy_f2d", mn_phys%phy_f2d, interp_type, Atm(child_grid_num)%neststruct%wt_h, & Atm(child_grid_num)%neststruct%ind_h, & x_refine, y_refine, & - is_fine_pe, nest_domain, position, IPD_Control%ntot2d) + is_fine_pe, nest_domain, position, GFS_control%ntot2d) call fill_nest_halos_from_parent("phy_f3d", mn_phys%phy_f3d, interp_type, Atm(child_grid_num)%neststruct%wt_h, & Atm(child_grid_num)%neststruct%ind_h, & x_refine, y_refine, & - is_fine_pe, nest_domain, position, IPD_Control%levs) + is_fine_pe, nest_domain, position, GFS_control%levs) !! Surface variables @@ -772,7 +780,7 @@ subroutine mn_phys_fill_nest_halos_from_parent(Atm, IPD_Control, IPD_Data, mn_st call fill_nest_halos_from_parent("hprime", mn_phys%hprime, interp_type, Atm(child_grid_num)%neststruct%wt_h, & Atm(child_grid_num)%neststruct%ind_h, & x_refine, y_refine, & - is_fine_pe, nest_domain, position, IPD_Control%nmtvr) + is_fine_pe, nest_domain, position, GFS_control%nmtvr) call fill_nest_halos_from_parent("lakefrac", mn_phys%lakefrac, interp_type, Atm(child_grid_num)%neststruct%wt_h, & Atm(child_grid_num)%neststruct%ind_h, & @@ -953,10 +961,9 @@ end subroutine mn_phys_fill_nest_halos_from_parent !>@brief The subroutine 'mn_phys_fill_intern_nest_halos' fills the intenal nest halos for the physics variables !>@details This subroutine is only called for the nest PEs. - subroutine mn_phys_fill_intern_nest_halos(moving_nest, IPD_Control, IPD_Data, domain_fine, is_fine_pe) + subroutine mn_phys_fill_intern_nest_halos(moving_nest, GFS_control, domain_fine, is_fine_pe) type(fv_moving_nest_type), target, intent(inout) :: moving_nest !< Single instance of moving nest data - type(IPD_control_type), intent(in) :: IPD_Control !< Physics metadata - type(IPD_data_type), intent(inout) :: IPD_Data(:) !< Physics variable data + type(GFS_control_type), intent(in) :: GFS_control !< Physics metadata type(domain2d), intent(inout) :: domain_fine !< Domain structure for this nest logical, intent(in) :: is_fine_pe !< Is nest PE - should be True. Argument is redundant. @@ -1041,11 +1048,10 @@ end subroutine mn_phys_fill_intern_nest_halos !>@brief The subroutine 'mn_phys_shift_data' shifts the variable in the nest, including interpolating at the leading edge !>@details This subroutine is called for the nest and parent PEs. - subroutine mn_phys_shift_data(Atm, IPD_Control, IPD_Data, n, child_grid_num, wt_h, wt_u, wt_v, & + subroutine mn_phys_shift_data(Atm, GFS_control, n, child_grid_num, wt_h, wt_u, wt_v, & delta_i_c, delta_j_c, x_refine, y_refine, is_fine_pe, nest_domain, nz) type(fv_atmos_type), allocatable, target, intent(inout) :: Atm(:) !< Array of atmospheric data - type(IPD_control_type), intent(in) :: IPD_Control !< Physics metadata - type(IPD_data_type), intent(inout) :: IPD_Data(:) !< Physics variable data + type(GFS_control_type), intent(in) :: GFS_control !< Physics metadata integer, intent(in) :: n, child_grid_num !< Current grid number, child grid number real, allocatable, intent(in) :: wt_h(:,:,:), wt_u(:,:,:), wt_v(:,:,:) !< Interpolation weights integer, intent(in) :: delta_i_c, delta_j_c !< Nest motion in i,j direction @@ -1072,18 +1078,18 @@ subroutine mn_phys_shift_data(Atm, IPD_Control, IPD_Data, n, child_grid_num, wt_ if (move_physics) then !! Soil variables call mn_var_shift_data(mn_phys%smc, interp_type, wt_h, Atm(child_grid_num)%neststruct%ind_h, & - delta_i_c, delta_j_c, x_refine, y_refine, is_fine_pe, nest_domain, position, IPD_Control%lsoil) + delta_i_c, delta_j_c, x_refine, y_refine, is_fine_pe, nest_domain, position, GFS_control%lsoil) call mn_var_shift_data(mn_phys%stc, interp_type, wt_h, Atm(child_grid_num)%neststruct%ind_h, & - delta_i_c, delta_j_c, x_refine, y_refine, is_fine_pe, nest_domain, position, IPD_Control%lsoil) + delta_i_c, delta_j_c, x_refine, y_refine, is_fine_pe, nest_domain, position, GFS_control%lsoil) call mn_var_shift_data(mn_phys%slc, interp_type, wt_h, Atm(child_grid_num)%neststruct%ind_h, & - delta_i_c, delta_j_c, x_refine, y_refine, is_fine_pe, nest_domain, position, IPD_Control%lsoil) + delta_i_c, delta_j_c, x_refine, y_refine, is_fine_pe, nest_domain, position, GFS_control%lsoil) !! Physics arrays call mn_var_shift_data(mn_phys%phy_f2d, interp_type, wt_h, Atm(child_grid_num)%neststruct%ind_h, & - delta_i_c, delta_j_c, x_refine, y_refine, is_fine_pe, nest_domain, position, IPD_control%ntot2d) + delta_i_c, delta_j_c, x_refine, y_refine, is_fine_pe, nest_domain, position, GFS_control%ntot2d) call mn_var_shift_data(mn_phys%phy_f3d, interp_type, wt_h, Atm(child_grid_num)%neststruct%ind_h, & - delta_i_c, delta_j_c, x_refine, y_refine, is_fine_pe, nest_domain, position, IPD_Control%levs) + delta_i_c, delta_j_c, x_refine, y_refine, is_fine_pe, nest_domain, position, GFS_control%levs) ! Surface variables @@ -1113,7 +1119,7 @@ subroutine mn_phys_shift_data(Atm, IPD_Control, IPD_Data, n, child_grid_num, wt_ call mn_var_shift_data(mn_phys%tprcp, interp_type, wt_h, Atm(child_grid_num)%neststruct%ind_h, & delta_i_c, delta_j_c, x_refine, y_refine, is_fine_pe, nest_domain, position) call mn_var_shift_data(mn_phys%hprime, interp_type, wt_h, Atm(child_grid_num)%neststruct%ind_h, & - delta_i_c, delta_j_c, x_refine, y_refine, is_fine_pe, nest_domain, position, IPD_Control%nmtvr) + delta_i_c, delta_j_c, x_refine, y_refine, is_fine_pe, nest_domain, position, GFS_control%nmtvr) call mn_var_shift_data(mn_phys%lakefrac, interp_type, wt_h, Atm(child_grid_num)%neststruct%ind_h, & delta_i_c, delta_j_c, x_refine, y_refine, is_fine_pe, nest_domain, position) call mn_var_shift_data(mn_phys%lakedepth, interp_type, wt_h, Atm(child_grid_num)%neststruct%ind_h, & @@ -1203,11 +1209,12 @@ end subroutine mn_phys_shift_data !>@brief The subroutine 'mn_phys_dump_to_netcdf' dumps physics variables to debugging netCDF files !>@details This subroutine is called for the nest and parent PEs. - subroutine mn_phys_dump_to_netcdf(Atm, Atm_block, IPD_Control, IPD_Data, time_val, file_prefix, is_fine_pe, domain_coarse, domain_fine, nz) + subroutine mn_phys_dump_to_netcdf(Atm, Atm_block, GFS_control, GFS_sfcprop, GFS_tbd, time_val, file_prefix, is_fine_pe, domain_coarse, domain_fine, nz) type(fv_atmos_type), intent(in) :: Atm !< Single instance of atmospheric data type (block_control_type), intent(in) :: Atm_block !< Physics block layout - type(IPD_control_type), intent(in) :: IPD_Control !< Physics metadata - type(IPD_data_type), intent(in) :: IPD_Data(:) !< Physics variable data + type(GFS_control_type), intent(in) :: GFS_control !< Physics metadata + type(GFS_sfcprop_type), intent(in) :: GFS_sfcprop !< Physics variable data (surface) + type(GFS_tbd_type), intent(in) :: GFS_tbd !< Physics variable data (tbd) integer, intent(in) :: time_val !< Timestep number for filename character(len=*), intent(in) :: file_prefix !< Prefix for output netCDF filenames logical, intent(in) :: is_fine_pe !< Is this the nest PE? @@ -1215,7 +1222,7 @@ subroutine mn_phys_dump_to_netcdf(Atm, Atm_block, IPD_Control, IPD_Data, time_va integer, intent(in) :: nz !< Number of vertical levels integer :: is, ie, js, je - integer :: nb, blen, i, j, k, ix, nv + integer :: nb, blen, i, j, k, ix, nv, im integer :: this_pe integer :: n_moist @@ -1264,15 +1271,15 @@ subroutine mn_phys_dump_to_netcdf(Atm, Atm_block, IPD_Control, IPD_Data, time_va ! Just allocate compute domain size here for outputs; the nest moving code also has halos added, but we don't need them here. if (move_physics) then - allocate ( smc_pr_local(is:ie, js:je, IPD_Control%lsoil) ) - allocate ( stc_pr_local(is:ie, js:je, IPD_Control%lsoil) ) - allocate ( slc_pr_local(is:ie, js:je, IPD_Control%lsoil) ) + allocate ( smc_pr_local(is:ie, js:je, GFS_control%lsoil) ) + allocate ( stc_pr_local(is:ie, js:je, GFS_control%lsoil) ) + allocate ( slc_pr_local(is:ie, js:je, GFS_control%lsoil) ) allocate ( sealand_pr_local(is:ie, js:je) ) allocate ( lakefrac_pr_local(is:ie, js:je) ) allocate ( landfrac_pr_local(is:ie, js:je) ) allocate ( emis_lnd_pr_local(is:ie, js:je) ) - allocate ( phy_f2d_pr_local(is:ie, js:je, IPD_Control%ntot2d) ) - allocate ( phy_f3d_pr_local(is:ie, js:je, IPD_Control%levs, IPD_Control%ntot3d) ) + allocate ( phy_f2d_pr_local(is:ie, js:je, GFS_control%ntot2d) ) + allocate ( phy_f3d_pr_local(is:ie, js:je, GFS_control%levs, GFS_control%ntot3d) ) allocate ( tsfco_pr_local(is:ie, js:je) ) allocate ( tsfcl_pr_local(is:ie, js:je) ) allocate ( tsfc_pr_local(is:ie, js:je) ) @@ -1334,75 +1341,77 @@ subroutine mn_phys_dump_to_netcdf(Atm, Atm_block, IPD_Control, IPD_Data, time_va ifd_pr_local = +99999.9 endif + im = 0 do nb = 1,Atm_block%nblks blen = Atm_block%blksz(nb) do ix = 1, blen i = Atm_block%index(nb)%ii(ix) j = Atm_block%index(nb)%jj(ix) + im = im + 1 if (move_physics) then - do k = 1, IPD_Control%lsoil + do k = 1, GFS_control%lsoil ! Use real() to lower the precision - smc_pr_local(i,j,k) = real(IPD_Data(nb)%Sfcprop%smc(ix,k)) - stc_pr_local(i,j,k) = real(IPD_Data(nb)%Sfcprop%stc(ix,k)) - slc_pr_local(i,j,k) = real(IPD_Data(nb)%Sfcprop%slc(ix,k)) + smc_pr_local(i,j,k) = real(GFS_sfcprop%smc(im,k)) + stc_pr_local(i,j,k) = real(GFS_sfcprop%stc(im,k)) + slc_pr_local(i,j,k) = real(GFS_sfcprop%slc(im,k)) enddo - sealand_pr_local(i,j) = real(IPD_Data(nb)%Sfcprop%slmsk(ix)) - lakefrac_pr_local(i,j) = real(IPD_Data(nb)%Sfcprop%lakefrac(ix)) - landfrac_pr_local(i,j) = real(IPD_Data(nb)%Sfcprop%landfrac(ix)) - emis_lnd_pr_local(i,j) = real(IPD_Data(nb)%Sfcprop%emis_lnd(ix)) - deep_soil_t_pr_local(i, j) = IPD_data(nb)%Sfcprop%tg3(ix) - soil_type_pr_local(i, j) = IPD_data(nb)%Sfcprop%stype(ix) - !veg_frac_pr_local(i, j) = IPD_data(nb)%Sfcprop%vfrac(ix) - veg_type_pr_local(i, j) = IPD_data(nb)%Sfcprop%vtype(ix) - slope_type_pr_local(i, j) = IPD_data(nb)%Sfcprop%slope(ix) - facsf_pr_local(i, j) = IPD_data(nb)%Sfcprop%facsf(ix) - facwf_pr_local(i, j) = IPD_data(nb)%Sfcprop%facwf(ix) - zorl_pr_local(i, j) = IPD_data(nb)%Sfcprop%zorl(ix) - zorlw_pr_local(i, j) = IPD_data(nb)%Sfcprop%zorlw(ix) - zorll_pr_local(i, j) = IPD_data(nb)%Sfcprop%zorll(ix) - zorli_pr_local(i, j) = IPD_data(nb)%Sfcprop%zorli(ix) - usfco_pr_local(i, j) = IPD_data(nb)%Sfcprop%usfco(ix) - vsfco_pr_local(i, j) = IPD_data(nb)%Sfcprop%vsfco(ix) - max_snow_alb_pr_local(i, j) = IPD_data(nb)%Sfcprop%snoalb(ix) - tsfco_pr_local(i, j) = IPD_data(nb)%Sfcprop%tsfco(ix) - tsfcl_pr_local(i, j) = IPD_data(nb)%Sfcprop%tsfcl(ix) - tsfc_pr_local(i, j) = IPD_data(nb)%Sfcprop%tsfc(ix) - vegfrac_pr_local(i, j) = IPD_data(nb)%Sfcprop%vfrac(ix) - alvsf_pr_local(i, j) = IPD_data(nb)%Sfcprop%alvsf(ix) - alvwf_pr_local(i, j) = IPD_data(nb)%Sfcprop%alvwf(ix) - alnsf_pr_local(i, j) = IPD_data(nb)%Sfcprop%alnsf(ix) - alnwf_pr_local(i, j) = IPD_data(nb)%Sfcprop%alnwf(ix) - - do nv = 1, IPD_Control%ntot2d + sealand_pr_local(i,j) = real(GFS_sfcprop%slmsk(im)) + lakefrac_pr_local(i,j) = real(GFS_sfcprop%lakefrac(im)) + landfrac_pr_local(i,j) = real(GFS_sfcprop%landfrac(im)) + emis_lnd_pr_local(i,j) = real(GFS_sfcprop%emis_lnd(im)) + deep_soil_t_pr_local(i, j) = GFS_sfcprop%tg3(im) + soil_type_pr_local(i, j) = GFS_sfcprop%stype(im) + !veg_frac_pr_local(i, j) = GFS_sfcprop%vfrac(im) + veg_type_pr_local(i, j) = GFS_sfcprop%vtype(im) + slope_type_pr_local(i, j) = GFS_sfcprop%slope(im) + facsf_pr_local(i, j) = GFS_sfcprop%facsf(im) + facwf_pr_local(i, j) = GFS_sfcprop%facwf(im) + zorl_pr_local(i, j) = GFS_sfcprop%zorl(im) + zorlw_pr_local(i, j) = GFS_sfcprop%zorlw(im) + zorll_pr_local(i, j) = GFS_sfcprop%zorll(im) + zorli_pr_local(i, j) = GFS_sfcprop%zorli(im) + usfco_pr_local(i, j) = GFS_sfcprop%usfco(im) + vsfco_pr_local(i, j) = GFS_sfcprop%vsfco(im) + max_snow_alb_pr_local(i, j) = GFS_sfcprop%snoalb(im) + tsfco_pr_local(i, j) = GFS_sfcprop%tsfco(im) + tsfcl_pr_local(i, j) = GFS_sfcprop%tsfcl(im) + tsfc_pr_local(i, j) = GFS_sfcprop%tsfc(im) + vegfrac_pr_local(i, j) = GFS_sfcprop%vfrac(im) + alvsf_pr_local(i, j) = GFS_sfcprop%alvsf(im) + alvwf_pr_local(i, j) = GFS_sfcprop%alvwf(im) + alnsf_pr_local(i, j) = GFS_sfcprop%alnsf(im) + alnwf_pr_local(i, j) = GFS_sfcprop%alnwf(im) + + do nv = 1, GFS_Control%ntot2d ! Use real() to lower the precision - phy_f2d_pr_local(i,j,nv) = real(IPD_Data(nb)%Tbd%phy_f2d(ix, nv)) + phy_f2d_pr_local(i,j,nv) = real(GFS_tbd%phy_f2d(im, nv)) enddo - do k = 1, IPD_Control%levs - do nv = 1, IPD_Control%ntot3d + do k = 1, GFS_control%levs + do nv = 1, GFS_control%ntot3d ! Use real() to lower the precision - phy_f3d_pr_local(i,j,k,nv) = real(IPD_Data(nb)%Tbd%phy_f3d(ix, k, nv)) + phy_f3d_pr_local(i,j,k,nv) = real(GFS_tbd%phy_f3d(im, k, nv)) enddo enddo endif if (move_nsst) then - tref_pr_local(i,j) = IPD_data(nb)%Sfcprop%tref(ix) - c_0_pr_local(i,j) = IPD_data(nb)%Sfcprop%c_0(ix) - xt_pr_local(i,j) = IPD_data(nb)%Sfcprop%xt(ix) - xu_pr_local(i,j) = IPD_data(nb)%Sfcprop%xu(ix) - xv_pr_local(i,j) = IPD_data(nb)%Sfcprop%xv(ix) - ifd_pr_local(i,j) = IPD_data(nb)%Sfcprop%ifd(ix) + tref_pr_local(i,j) = GFS_sfcprop%tref(im) + c_0_pr_local(i,j) = GFS_sfcprop%c_0(im) + xt_pr_local(i,j) = GFS_sfcprop%xt(im) + xu_pr_local(i,j) = GFS_sfcprop%xu(im) + xv_pr_local(i,j) = GFS_sfcprop%xv(im) + ifd_pr_local(i,j) = GFS_sfcprop%ifd(im) endif enddo enddo if (move_physics) then - !call mn_var_dump_to_netcdf(stc_pr_local, is_fine_pe, domain_coarse, domain_fine, position, IPD_Control%lsoil, time_val, Atm%global_tile, file_prefix, "SOILT") - !call mn_var_dump_to_netcdf(smc_pr_local, is_fine_pe, domain_coarse, domain_fine, position, IPD_Control%lsoil, time_val, Atm%global_tile, file_prefix, "SOILM") - !call mn_var_dump_to_netcdf(slc_pr_local, is_fine_pe, domain_coarse, domain_fine, position, IPD_Control%lsoil, time_val, Atm%global_tile, file_prefix, "SOILL") + !call mn_var_dump_to_netcdf(stc_pr_local, is_fine_pe, domain_coarse, domain_fine, position, GFS_control%lsoil, time_val, Atm%global_tile, file_prefix, "SOILT") + !call mn_var_dump_to_netcdf(smc_pr_local, is_fine_pe, domain_coarse, domain_fine, position, GFS_control%lsoil, time_val, Atm%global_tile, file_prefix, "SOILM") + !call mn_var_dump_to_netcdf(slc_pr_local, is_fine_pe, domain_coarse, domain_fine, position, GFS_control%lsoil, time_val, Atm%global_tile, file_prefix, "SOILL") call mn_var_dump_to_netcdf(sealand_pr_local, is_fine_pe, domain_coarse, domain_fine, position, time_val, Atm%global_tile, file_prefix, "LMASK") call mn_var_dump_to_netcdf(lakefrac_pr_local, is_fine_pe, domain_coarse, domain_fine, position, time_val, Atm%global_tile, file_prefix, "LAKEFRAC") call mn_var_dump_to_netcdf(landfrac_pr_local, is_fine_pe, domain_coarse, domain_fine, position, time_val, Atm%global_tile, file_prefix, "LANDFRAC") @@ -1430,15 +1439,15 @@ subroutine mn_phys_dump_to_netcdf(Atm, Atm_block, IPD_Control, IPD_Data, time_va call mn_var_dump_to_netcdf(usfco_pr_local, is_fine_pe, domain_coarse, domain_fine, position, time_val, Atm%global_tile, file_prefix, "SSU") call mn_var_dump_to_netcdf(vsfco_pr_local, is_fine_pe, domain_coarse, domain_fine, position, time_val, Atm%global_tile, file_prefix, "SSV") - do nv = 1, IPD_Control%ntot2d + do nv = 1, GFS_control%ntot2d write (phys_var_name, "(A4,I0.3)") 'PH2D', nv !call mn_var_dump_to_netcdf(phy_f2d_pr_local(:,:,nv), is_fine_pe, domain_coarse, domain_fine, position, 1, & ! time_val, Atm%global_tile, file_prefix, phys_var_name) enddo - do nv = 1, IPD_Control%ntot3d + do nv = 1, GFS_control%ntot3d write (phys_var_name, "(A4,I0.3)") 'PH3D', nv - !call mn_var_dump_to_netcdf(phy_f3d_pr_local(:,:,:,nv), is_fine_pe, domain_coarse, domain_fine, position, IPD_Control%levs, & + !call mn_var_dump_to_netcdf(phy_f3d_pr_local(:,:,:,nv), is_fine_pe, domain_coarse, domain_fine, position, GFS_control%levs, & ! time_val, Atm%global_tile, file_prefix, phys_var_name) enddo endif diff --git a/stochastic_physics/stochastic_physics_wrapper.F90 b/stochastic_physics/stochastic_physics_wrapper.F90 index 842495569..260f4bb5e 100644 --- a/stochastic_physics/stochastic_physics_wrapper.F90 +++ b/stochastic_physics/stochastic_physics_wrapper.F90 @@ -57,13 +57,13 @@ module stochastic_physics_wrapper_mod !------------------------------- ! CCPP step !------------------------------- - subroutine stochastic_physics_wrapper (GFS_Control, GFS_Data, Atm_block, ierr) + subroutine stochastic_physics_wrapper (GFS_Control, GFS_Statein, GFS_Grid, GFS_Sfcprop, GFS_Radtend, GFS_Coupling, Atm_block, ierr) #ifdef _OPENMP use omp_lib #endif - use GFS_typedefs, only: GFS_control_type, GFS_data_type + use GFS_typedefs, only: GFS_control_type, GFS_statein_type, GFS_grid_type, GFS_sfcprop_type, GFS_radtend_type, GFS_coupling_type use mpp_mod, only: FATAL, mpp_error use block_control_mod, only: block_control_type use atmosphere_mod, only: Atm, mygrid @@ -76,11 +76,15 @@ subroutine stochastic_physics_wrapper (GFS_Control, GFS_Data, Atm_block, ierr) implicit none type(GFS_control_type), intent(inout) :: GFS_Control - type(GFS_data_type), intent(inout) :: GFS_Data(:) + type(GFS_statein_type), intent(in) :: GFS_Statein + type(GFS_grid_type), intent(in) :: GFS_Grid + type(GFS_sfcprop_type), intent(inout) :: GFS_Sfcprop + type(GFS_radtend_type), intent(inout) :: GFS_Radtend + type(GFS_coupling_type), intent(inout) :: GFS_Coupling type(block_control_type), intent(inout) :: Atm_block integer, intent(out) :: ierr - integer :: nthreads, nb, levs, maxblk, nblks, n, v + integer :: nthreads, nb, levs, maxblk, nblks, n, v, ixs, ixe logical :: param_update_flag #ifdef _OPENMP @@ -101,10 +105,8 @@ subroutine stochastic_physics_wrapper (GFS_Control, GFS_Data, Atm_block, ierr) if (GFS_Control%do_sppt .OR. GFS_Control%do_shum .OR. GFS_Control%do_skeb .OR. (GFS_Control%lndp_type > 0) .OR. GFS_Control%do_spp) then allocate(xlat(1:nblks,maxblk)) allocate(xlon(1:nblks,maxblk)) - do nb=1,nblks - xlat(nb,1:GFS_Control%blksz(nb)) = GFS_Data(nb)%Grid%xlat(:) - xlon(nb,1:GFS_Control%blksz(nb)) = GFS_Data(nb)%Grid%xlon(:) - end do + call transfer_field_to_stochastics(GFS_Control%blksz, GFS_Grid%xlat, xlat) + call transfer_field_to_stochastics(GFS_Control%blksz, GFS_Grid%xlon, xlon) ! Initialize stochastic physics call init_stochastic_physics(levs, GFS_Control%blksz, GFS_Control%dtp, GFS_Control%sppt_amp, & GFS_Control%input_nml_file, GFS_Control%fn_nml, GFS_Control%nlunit, xlon, xlat, GFS_Control%do_sppt, GFS_Control%do_shum, & @@ -185,7 +187,7 @@ subroutine stochastic_physics_wrapper (GFS_Control, GFS_Data, Atm_block, ierr) spp_wts=spp_wts, nthreads=nthreads) ! Copy contiguous data back do nb=1,nblks - GFS_Data(nb)%Coupling%sfc_wts(:,:) = sfc_wts(nb,1:GFS_Control%blksz(nb),:) + GFS_Coupling%sfc_wts(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:) = sfc_wts(nb,1:GFS_Control%blksz(nb),:) end do deallocate(sfc_wts) end if @@ -222,18 +224,18 @@ subroutine stochastic_physics_wrapper (GFS_Control, GFS_Data, Atm_block, ierr) ! Copy contiguous data back if (GFS_Control%do_sppt) then do nb=1,nblks - GFS_Data(nb)%Coupling%sppt_wts(:,:) = sppt_wts(nb,1:GFS_Control%blksz(nb),:) + GFS_Coupling%sppt_wts(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:) = sppt_wts(nb,1:GFS_Control%blksz(nb),:) end do end if if (GFS_Control%do_shum) then do nb=1,nblks - GFS_Data(nb)%Coupling%shum_wts(:,:) = shum_wts(nb,1:GFS_Control%blksz(nb),:) + GFS_Coupling%shum_wts(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:) = shum_wts(nb,1:GFS_Control%blksz(nb),:) end do end if if (GFS_Control%do_skeb) then do nb=1,nblks - GFS_Data(nb)%Coupling%skebu_wts(:,:) = skebu_wts(nb,1:GFS_Control%blksz(nb),:) - GFS_Data(nb)%Coupling%skebv_wts(:,:) = skebv_wts(nb,1:GFS_Control%blksz(nb),:) + GFS_Coupling%skebu_wts(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:) = skebu_wts(nb,1:GFS_Control%blksz(nb),:) + GFS_Coupling%skebv_wts(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:) = skebv_wts(nb,1:GFS_Control%blksz(nb),:) end do end if if (GFS_Control%do_spp) then @@ -241,27 +243,27 @@ subroutine stochastic_physics_wrapper (GFS_Control, GFS_Data, Atm_block, ierr) select case (trim(GFS_Control%spp_var_list(n))) case('pbl') do nb=1,Atm_block%nblks - GFS_Data(nb)%Coupling%spp_wts_pbl(:,:) = spp_wts(nb,1:GFS_Control%blksz(nb),:,n) + GFS_Coupling%spp_wts_pbl(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:) = spp_wts(nb,1:GFS_Control%blksz(nb),:,n) end do case('sfc') do nb=1,Atm_block%nblks - GFS_Data(nb)%Coupling%spp_wts_sfc(:,:) = spp_wts(nb,1:GFS_Control%blksz(nb),:,n) + GFS_Coupling%spp_wts_sfc(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:) = spp_wts(nb,1:GFS_Control%blksz(nb),:,n) end do case('mp') do nb=1,Atm_block%nblks - GFS_Data(nb)%Coupling%spp_wts_mp(:,:) = spp_wts(nb,1:GFS_Control%blksz(nb),:,n) + GFS_Coupling%spp_wts_mp(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:) = spp_wts(nb,1:GFS_Control%blksz(nb),:,n) end do case('gwd') do nb=1,Atm_block%nblks - GFS_Data(nb)%Coupling%spp_wts_gwd(:,:) = spp_wts(nb,1:GFS_Control%blksz(nb),:,n) + GFS_Coupling%spp_wts_gwd(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:) = spp_wts(nb,1:GFS_Control%blksz(nb),:,n) end do case('rad') do nb=1,Atm_block%nblks - GFS_Data(nb)%Coupling%spp_wts_rad(:,:) = spp_wts(nb,1:GFS_Control%blksz(nb),:,n) + GFS_Coupling%spp_wts_rad(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:) = spp_wts(nb,1:GFS_Control%blksz(nb),:,n) end do case('cu_deep') do nb=1,Atm_block%nblks - GFS_Data(nb)%Coupling%spp_wts_cu_deep(:,:) = spp_wts(nb,1:GFS_Control%blksz(nb),:,n) + GFS_Coupling%spp_wts_cu_deep(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:) = spp_wts(nb,1:GFS_Control%blksz(nb),:,n) end do end select end do @@ -269,50 +271,52 @@ subroutine stochastic_physics_wrapper (GFS_Control, GFS_Data, Atm_block, ierr) if (GFS_Control%lndp_type == 2) then ! save wts, and apply lndp scheme do nb=1,nblks - GFS_Data(nb)%Coupling%sfc_wts(:,:) = sfc_wts(nb,1:GFS_Control%blksz(nb),:) + GFS_Coupling%sfc_wts(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb),:) = sfc_wts(nb,1:GFS_Control%blksz(nb),:) end do do nb=1,nblks + ixs = GFS_control%chunk_begin(nb) + ixe = GFS_control%chunk_end(nb) do v = 1,GFS_Control%n_var_lndp ! used to identify locations with land model (=soil) if ((GFS_Control%lsm == GFS_Control%lsm_ruc) ) then - smc(nb,1:GFS_Control%blksz(nb),1:lsoil) = GFS_Data(nb)%Sfcprop%smois(1:GFS_Control%blksz(nb),1:lsoil) + smc(nb,1:GFS_Control%blksz(nb),1:lsoil) = GFS_Sfcprop%smois(ixs:ixe,1:lsoil) else ! noah or noah-MP - smc(nb,1:GFS_Control%blksz(nb),1:lsoil) = GFS_Data(nb)%Sfcprop%smc(1:GFS_Control%blksz(nb),1:lsoil) + smc(nb,1:GFS_Control%blksz(nb),1:lsoil) = GFS_Sfcprop%smc(ixs:ixe,1:lsoil) endif select case (trim(GFS_Control%lndp_var_list(v))) ! DH* is this correct? shouldn't this be slc ? case('smc') ! stype used to fetch soil params - stype(nb,1:GFS_Control%blksz(nb)) = GFS_Data(nb)%Sfcprop%stype(1:GFS_Control%blksz(nb)) + stype(nb,1:GFS_Control%blksz(nb)) = GFS_Sfcprop%stype(ixs:ixe) if ((GFS_Control%lsm == GFS_Control%lsm_ruc) ) then - slc(nb,1:GFS_Control%blksz(nb),1:lsoil) = GFS_Data(nb)%Sfcprop%sh2o(1:GFS_Control%blksz(nb),1:lsoil) + slc(nb,1:GFS_Control%blksz(nb),1:lsoil) = GFS_Sfcprop%sh2o(ixs:ixe,1:lsoil) else ! noah or noah-MP - slc(nb,1:GFS_Control%blksz(nb),1:lsoil) = GFS_Data(nb)%Sfcprop%slc(1:GFS_Control%blksz(nb),1:lsoil) + slc(nb,1:GFS_Control%blksz(nb),1:lsoil) = GFS_Sfcprop%slc(ixs:ixe,1:lsoil) endif case('stc') if ((GFS_Control%lsm == GFS_Control%lsm_ruc) ) then - stc(nb,1:GFS_Control%blksz(nb),1:lsoil) = GFS_Data(nb)%Sfcprop%tslb(1:GFS_Control%blksz(nb),1:lsoil) + stc(nb,1:GFS_Control%blksz(nb),1:lsoil) = GFS_Sfcprop%tslb(ixs:ixe,1:lsoil) else ! noah or noah-MP - stc(nb,1:GFS_Control%blksz(nb),1:lsoil) = GFS_Data(nb)%Sfcprop%stc(1:GFS_Control%blksz(nb),1:lsoil) + stc(nb,1:GFS_Control%blksz(nb),1:lsoil) = GFS_Sfcprop%stc(ixs:ixe,1:lsoil) endif case('vgf') if ( (GFS_Control%lsm == GFS_Control%lsm_noahmp) ) then ! assumes iopt_dveg = 4 (will be checked later) - vfrac(nb,1:GFS_Control%blksz(nb)) = GFS_Data(nb)%Sfcprop%shdmax(1:GFS_Control%blksz(nb)) + vfrac(nb,1:GFS_Control%blksz(nb)) = GFS_Sfcprop%shdmax(ixs:ixe) else ! ruc or noah-MP - vfrac(nb,1:GFS_Control%blksz(nb)) = GFS_Data(nb)%Sfcprop%vfrac(1:GFS_Control%blksz(nb)) + vfrac(nb,1:GFS_Control%blksz(nb)) = GFS_Sfcprop%vfrac(ixs:ixe) endif case('alb') - alnsf(nb,1:GFS_Control%blksz(nb)) = GFS_Data(nb)%Sfcprop%alnsf(1:GFS_Control%blksz(nb)) - alnwf(nb,1:GFS_Control%blksz(nb)) = GFS_Data(nb)%Sfcprop%alnwf(1:GFS_Control%blksz(nb)) + alnsf(nb,1:GFS_Control%blksz(nb)) = GFS_Sfcprop%alnsf(ixs:ixe) + alnwf(nb,1:GFS_Control%blksz(nb)) = GFS_Sfcprop%alnwf(ixs:ixe) case('sal') - snoalb(nb,1:GFS_Control%blksz(nb)) = GFS_Data(nb)%Sfcprop%snoalb(1:GFS_Control%blksz(nb)) + snoalb(nb,1:GFS_Control%blksz(nb)) = GFS_Sfcprop%snoalb(ixs:ixe) case('emi') - semis(nb,1:GFS_Control%blksz(nb)) = GFS_Data(nb)%Radtend%semis(1:GFS_Control%blksz(nb)) + semis(nb,1:GFS_Control%blksz(nb)) = GFS_Radtend%semis(ixs:ixe) case('zol') - zorll(nb,1:GFS_Control%blksz(nb)) = GFS_Data(nb)%Sfcprop%zorll(1:GFS_Control%blksz(nb)) + zorll(nb,1:GFS_Control%blksz(nb)) = GFS_Sfcprop%zorll(ixs:ixe) endselect enddo enddo @@ -344,39 +348,42 @@ subroutine stochastic_physics_wrapper (GFS_Control, GFS_Data, Atm_block, ierr) endif do nb=1,nblks + ixs = GFS_control%chunk_begin(nb) + ixe = GFS_control%chunk_end(nb) + do v = 1,GFS_Control%n_var_lndp select case (trim(GFS_Control%lndp_var_list(v))) case('smc') if ((GFS_Control%lsm == GFS_Control%lsm_ruc) ) then - GFS_Data(nb)%Sfcprop%smois(1:GFS_Control%blksz(nb),1:lsoil) = smc(nb,1:GFS_Control%blksz(nb),1:lsoil) - GFS_Data(nb)%Sfcprop%sh2o(1:GFS_Control%blksz(nb),1:lsoil) = slc(nb,1:GFS_Control%blksz(nb),1:lsoil) + GFS_Sfcprop%smois(ixs:ixe,1:lsoil) = smc(nb,1:GFS_Control%blksz(nb),1:lsoil) + GFS_Sfcprop%sh2o(ixs:ixe,1:lsoil) = slc(nb,1:GFS_Control%blksz(nb),1:lsoil) else ! noah or noah-MP - GFS_Data(nb)%Sfcprop%smc(1:GFS_Control%blksz(nb),1:lsoil) = smc(nb,1:GFS_Control%blksz(nb),1:lsoil) - GFS_Data(nb)%Sfcprop%slc(1:GFS_Control%blksz(nb),1:lsoil) = slc(nb,1:GFS_Control%blksz(nb),1:lsoil) + GFS_Sfcprop%smc(ixs:ixe,1:lsoil) = smc(nb,1:GFS_Control%blksz(nb),1:lsoil) + GFS_Sfcprop%slc(ixs:ixe,1:lsoil) = slc(nb,1:GFS_Control%blksz(nb),1:lsoil) endif case('stc') if ((GFS_Control%lsm == GFS_Control%lsm_ruc) ) then - GFS_Data(nb)%Sfcprop%tslb(1:GFS_Control%blksz(nb),1:lsoil) = stc(nb,1:GFS_Control%blksz(nb),1:lsoil) + GFS_Sfcprop%tslb(ixs:ixe,1:lsoil) = stc(nb,1:GFS_Control%blksz(nb),1:lsoil) else ! noah or noah-MP - GFS_Data(nb)%Sfcprop%stc(1:GFS_Control%blksz(nb),1:lsoil) = stc(nb,1:GFS_Control%blksz(nb),1:lsoil) + GFS_Sfcprop%stc(ixs:ixe,1:lsoil) = stc(nb,1:GFS_Control%blksz(nb),1:lsoil) endif case('vgf') if ( (GFS_Control%lsm == GFS_Control%lsm_noahmp) ) then - GFS_Data(nb)%Sfcprop%shdmax(1:GFS_Control%blksz(nb)) = vfrac(nb,1:GFS_Control%blksz(nb)) + GFS_Sfcprop%shdmax(ixs:ixe) = vfrac(nb,1:GFS_Control%blksz(nb)) else - GFS_Data(nb)%Sfcprop%vfrac(1:GFS_Control%blksz(nb)) = vfrac(nb,1:GFS_Control%blksz(nb)) + GFS_Sfcprop%vfrac(ixs:ixe) = vfrac(nb,1:GFS_Control%blksz(nb)) endif case('alb') - GFS_Data(nb)%Sfcprop%alnsf(1:GFS_Control%blksz(nb)) = alnsf(nb,1:GFS_Control%blksz(nb)) - GFS_Data(nb)%Sfcprop%alnwf(1:GFS_Control%blksz(nb)) = alnwf(nb,1:GFS_Control%blksz(nb)) + GFS_Sfcprop%alnsf(ixs:ixe) = alnsf(nb,1:GFS_Control%blksz(nb)) + GFS_Sfcprop%alnwf(ixs:ixe) = alnwf(nb,1:GFS_Control%blksz(nb)) case('sal') - GFS_Data(nb)%Sfcprop%snoalb(1:GFS_Control%blksz(nb)) = snoalb(nb,1:GFS_Control%blksz(nb)) + GFS_Sfcprop%snoalb(ixs:ixe) = snoalb(nb,1:GFS_Control%blksz(nb)) case('emi') - GFS_Data(nb)%Radtend%semis(1:GFS_Control%blksz(nb)) = semis(nb,1:GFS_Control%blksz(nb)) + GFS_Radtend%semis(ixs:ixe) = semis(nb,1:GFS_Control%blksz(nb)) case('zol') - GFS_Data(nb)%Sfcprop%zorll(1:GFS_Control%blksz(nb)) = zorll(nb,1:GFS_Control%blksz(nb)) - end select + GFS_Sfcprop%zorll(ixs:ixe) = zorll(nb,1:GFS_Control%blksz(nb)) + end select enddo enddo endif ! lndp block @@ -386,18 +393,20 @@ subroutine stochastic_physics_wrapper (GFS_Control, GFS_Data, Atm_block, ierr) if(GFS_Control%ca_sgs)then do nb=1,nblks - sst (nb,1:GFS_Control%blksz(nb)) = GFS_Data(nb)%Sfcprop%tsfco(:) - lmsk (nb,1:GFS_Control%blksz(nb)) = GFS_Data(nb)%Sfcprop%slmsk(:) - lake (nb,1:GFS_Control%blksz(nb)) = GFS_Data(nb)%Sfcprop%lakefrac(:) - uwind (nb,1:GFS_Control%blksz(nb),:) = GFS_Data(nb)%Statein%ugrs(:,:) - vwind (nb,1:GFS_Control%blksz(nb),:) = GFS_Data(nb)%Statein%vgrs(:,:) - height (nb,1:GFS_Control%blksz(nb),:) = GFS_Data(nb)%Statein%phil(:,:) - dx (nb,1:GFS_Control%blksz(nb)) = GFS_Data(nb)%Grid%dx(:) - condition (nb,1:GFS_Control%blksz(nb)) = GFS_Data(nb)%Coupling%condition(:) - ca_deep_cpl(nb,1:GFS_Control%blksz(nb)) = GFS_Data(nb)%Coupling%ca_deep(:) - ca_turb_cpl(nb,1:GFS_Control%blksz(nb)) = GFS_Data(nb)%Coupling%ca_turb(:) - ca_shal_cpl(nb,1:GFS_Control%blksz(nb)) = GFS_Data(nb)%Coupling%ca_shal(:) - enddo + ixs = GFS_control%chunk_begin(nb) + ixe = GFS_control%chunk_end(nb) + sst (nb,1:GFS_Control%blksz(nb)) = GFS_Sfcprop%tsfco(ixs:ixe) + lmsk (nb,1:GFS_Control%blksz(nb)) = GFS_Sfcprop%slmsk(ixs:ixe) + lake (nb,1:GFS_Control%blksz(nb)) = GFS_Sfcprop%lakefrac(ixs:ixe) + condition (nb,1:GFS_Control%blksz(nb)) = GFS_Coupling%condition(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb)) + ca_deep_cpl(nb,1:GFS_Control%blksz(nb)) = GFS_Coupling%ca_deep(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb)) + ca_turb_cpl(nb,1:GFS_Control%blksz(nb)) = GFS_Coupling%ca_turb(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb)) + ca_shal_cpl(nb,1:GFS_Control%blksz(nb)) = GFS_Coupling%ca_shal(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb)) + enddo + call transfer_field_to_stochastics_3d(GFS_Control%blksz, GFS_Statein%ugrs, uwind) + call transfer_field_to_stochastics_3d(GFS_Control%blksz, GFS_Statein%vgrs, vwind) + call transfer_field_to_stochastics_3d(GFS_Control%blksz, GFS_Statein%phil, height) + call transfer_field_to_stochastics(GFS_Control%blksz, GFS_Grid%dx, dx) call cellular_automata_sgs(GFS_Control%kdt,GFS_control%dtp,GFS_control%restart,GFS_Control%first_time_step, & sst,lmsk,lake,uwind,vwind,height,dx,condition,ca_deep_cpl,ca_turb_cpl,ca_shal_cpl, Atm(mygrid)%domain_for_coupler,nblks, & Atm_block%isc,Atm_block%iec,Atm_block%jsc,Atm_block%jec,Atm(mygrid)%npx,Atm(mygrid)%npy, levs, & @@ -406,9 +415,9 @@ subroutine stochastic_physics_wrapper (GFS_Control, GFS_Data, Atm_block, ierr) GFS_Control%nspinup,GFS_Control%ca_trigger,Atm_block%blksz(1),GFS_Control%master,GFS_Control%communicator) ! Copy contiguous data back as needed do nb=1,nblks - GFS_Data(nb)%Coupling%ca_deep(:) = ca_deep_cpl (nb,1:GFS_Control%blksz(nb)) - GFS_Data(nb)%Coupling%ca_turb(:) = ca_turb_cpl (nb,1:GFS_Control%blksz(nb)) - GFS_Data(nb)%Coupling%ca_shal(:) = ca_shal_cpl (nb,1:GFS_Control%blksz(nb)) + GFS_Coupling%ca_deep(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb)) = ca_deep_cpl (nb,1:GFS_Control%blksz(nb)) + GFS_Coupling%ca_turb(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb)) = ca_turb_cpl (nb,1:GFS_Control%blksz(nb)) + GFS_Coupling%ca_shal(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb)) = ca_shal_cpl (nb,1:GFS_Control%blksz(nb)) enddo endif if(GFS_Control%ca_global)then @@ -419,9 +428,9 @@ subroutine stochastic_physics_wrapper (GFS_Control, GFS_Data, Atm_block, ierr) GFS_Control%nsmooth,GFS_Control%ca_amplitude,GFS_Control%master,GFS_Control%communicator) ! Copy contiguous data back do nb=1,nblks - GFS_Data(nb)%Coupling%ca1(:) = ca1_cpl(nb,1:GFS_Control%blksz(nb)) - GFS_Data(nb)%Coupling%ca2(:) = ca2_cpl(nb,1:GFS_Control%blksz(nb)) - GFS_Data(nb)%Coupling%ca3(:) = ca3_cpl(nb,1:GFS_Control%blksz(nb)) + GFS_Coupling%ca1(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb)) = ca1_cpl(nb,1:GFS_Control%blksz(nb)) + GFS_Coupling%ca2(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb)) = ca2_cpl(nb,1:GFS_Control%blksz(nb)) + GFS_Coupling%ca3(GFS_Control%chunk_begin(nb):GFS_Control%chunk_end(nb)) = ca3_cpl(nb,1:GFS_Control%blksz(nb)) enddo endif @@ -429,12 +438,67 @@ subroutine stochastic_physics_wrapper (GFS_Control, GFS_Data, Atm_block, ierr) endif initalize_stochastic_physics + contains + + subroutine transfer_field_to_stochastics(blksz, data_in, data_out) + + integer, dimension(:), intent(in) :: blksz + real(kind=kind_phys), dimension(:), intent(in) :: data_in + real(kind=kind_phys), dimension(:,:), intent(out) :: data_out + integer :: i, nb, ni + + nb = 1 + ni = 1 + do i=1,size(data_in) + if (ni>blksz(nb)) then + nb = nb+1 + ni = 1 + end if + data_out(nb,ni) = data_in(i) + ni = ni+1 + end do + + end subroutine transfer_field_to_stochastics + + subroutine transfer_field_to_stochastics_3d(blksz, data_in, data_out) + + integer, dimension(:), intent(in) :: blksz + real(kind=kind_phys), dimension(:,:), intent(in) :: data_in + real(kind=kind_phys), dimension(:,:,:), intent(out) :: data_out + integer :: j + + do j=1,size(data_in, dim=2) + call transfer_field_to_stochastics(blksz, data_in(:,j), data_out(:,:,j)) + end do + + end subroutine transfer_field_to_stochastics_3d + + subroutine transfer_field_from_stochastics(blksz, data_in, data_out) + + integer, dimension(:), intent(in) :: blksz + real(kind=kind_phys), dimension(:,:), intent(in) :: data_in + real(kind=kind_phys), dimension(:), intent(out) :: data_out + integer :: i, nb, ni + + nb = 1 + ni = 1 + do i=1,size(data_out) + if (ni>blksz(nb)) then + nb = nb+1 + ni = 1 + end if + data_out(i)= data_in(nb,ni) + ni = ni+1 + end do + + end subroutine transfer_field_from_stochastics + end subroutine stochastic_physics_wrapper subroutine stochastic_physics_wrapper_end (GFS_Control) - use GFS_typedefs, only: GFS_control_type, GFS_data_type + use GFS_typedefs, only: GFS_control_type use stochastic_physics, only: finalize_stochastic_physics implicit none diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 000000000..5667d3d61 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,29 @@ +# This file sets up CTest unit tests for fv3atm. +# +# Alex Richert, Jan 2024 + +# Stage test data +execute_process(COMMAND cmake -E create_symlink + "${CMAKE_CURRENT_SOURCE_DIR}/data" + "${CMAKE_CURRENT_BINARY_DIR}/data" + ) + +function(add_fv3atm_mpi_test TESTNAME) + add_executable(${TESTNAME} ${TESTNAME}.F90) + target_link_libraries(${TESTNAME} PRIVATE fv3atm MPI::MPI_Fortran PIO::PIO_Fortran) + add_test(${TESTNAME} ${MPIEXEC_EXECUTABLE} -n 2 ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME}) +endfunction() + +function(add_fv3atm_serial_test TESTNAME) + add_executable(${TESTNAME} ${TESTNAME}.F90) + target_link_libraries(${TESTNAME} PRIVATE fv3atm) + add_test(${TESTNAME} ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME}) +endfunction() + +#foreach(testname test_write_netcdf) +# add_fv3atm_mpi_test(${testname}) +#endforeach() + +foreach(testname test_post_nems_routines) + add_fv3atm_serial_test(${testname}) +endforeach() diff --git a/tests/data/post_namelist.nml b/tests/data/post_namelist.nml new file mode 100644 index 000000000..262d229c7 --- /dev/null +++ b/tests/data/post_namelist.nml @@ -0,0 +1,20 @@ +&model_inputs + modelname = "DMMY" + submodelname = "SUBM" +/ +&nampgb + kpo = 5 + kth = 7 + kpv = 9 + po = 0.5 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + th = 1.0 2.0 3.0 4.0 5.0 6.0 7.0 + pv = 11. 12. 13. 14. 15. 16. 17. 18. 19. + hyb_sigp = F + d3d_on = T + gocart_on = T + popascal = T + rdaod = T + nasa_on = T + gccpp_on = T + d2d_chem = T +/ diff --git a/tests/data/post_namelist_empty.nml b/tests/data/post_namelist_empty.nml new file mode 100644 index 000000000..4efa4ecd5 --- /dev/null +++ b/tests/data/post_namelist_empty.nml @@ -0,0 +1,4 @@ +&model_inputs +/ +&nampgb +/ diff --git a/tests/test_post_nems_routines.F90 b/tests/test_post_nems_routines.F90 new file mode 100644 index 000000000..371c3bc8d --- /dev/null +++ b/tests/test_post_nems_routines.F90 @@ -0,0 +1,55 @@ +! This program provides unit testing for the subroutines in io/post_nems_routines.F90 +! +! Alex Richert, 11 Jan 2024 +program test_post_nems_routines + + use ctlblk_mod, only : komax,hyb_sigp,d3d_on,gocart_on, & + rdaod,nasa_on,gccpp_on,d2d_chem,modelname,submodelname, lsm + + implicit none + + character (len=*), parameter :: post_namelist_empty="data/post_namelist_empty.nml" + character (len=*), parameter :: post_namelist="data/post_namelist.nml" + integer :: kpo,kth,kpv + real(4),dimension(komax) :: po,th,pv + logical :: popascal + real, parameter :: tini=tiny(1.0) + + ! Verify default settings by using empty nml file + call read_postnmlt(kpo,kth,kpv,po,th,pv,trim(post_namelist_empty)) + if (kpo.ne.0) stop 1 + if (kth.ne.6) stop 2 + if (kpv.ne.8) stop 3 + if (any(po.ne.0.0)) stop 4 + if (any(abs(th(1:6)-(/310.,320.,350.,450.,550.,650./)).gt.tini)) stop 5 + if (any(abs(pv(1:8)-(/0.5,-0.5,1.0,-1.0,1.5,-1.5,2.0,-2.0/)).gt.tini)) stop 6 + if (.not.hyb_sigp) stop 7 + if (d3d_on) stop 8 + if (gocart_on) stop 9 + if (lsm.ne.46) stop 10 ! 'lsm' is determined by 'popascal' + if (rdaod) stop 11 + if (nasa_on) stop 12 + if (gccpp_on) stop 13 + if (d2d_chem) stop 14 + + ! Now use fully populated nml file + call read_postnmlt(kpo,kth,kpv,po,th,pv,trim(post_namelist)) + if (kpo.ne.5) stop 101 + if (kth.ne.7) stop 102 + if (kpv.ne.9) stop 103 + if (po(1).ne.0.5) stop 104 + if (any(po(2:komax).ne.1.0)) stop 104 + if (any(abs(th(1:7)-(/1.,2.,3.,4.,5.,6.,7./)).gt.tini)) stop 105 + if (any(abs(pv(1:9)-(/11.,12.,13.,14.,15.,16.,17.,18.,19./)).gt.tini)) stop 106 + if (hyb_sigp) stop 107 + if (.not.d3d_on) stop 108 + if (.not.gocart_on) stop 109 + if (lsm.ne.5) stop 110 ! 'lsm' is determined by 'popascal' + if (.not.rdaod) stop 111 + if (.not.nasa_on) stop 112 + if (.not.gccpp_on) stop 113 + if (.not.d2d_chem) stop 114 + if (trim(modelname).ne."DMMY") stop 115 + if (trim(submodelname).ne."SUBM") stop 116 + +end program test_post_nems_routines From 66bded5b3e6fefc181f7df433acd18c392267311 Mon Sep 17 00:00:00 2001 From: Neil Barton <103681022+NeilBarton-NOAA@users.noreply.github.com> Date: Mon, 12 Aug 2024 16:37:38 -0400 Subject: [PATCH 5/8] SKEB fix when using hydrostatic option (#862) * atmos_cube_sphere: heat_source is allocated when SKEB is true and d_con is zero --- atmos_cubed_sphere | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index 7c3102fcc..3f8153364 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 7c3102fccc493d4c006c936ea88e4b512f6f5251 +Subproject commit 3f81533642be6060e1ac382ac99ce1481892dddd From cc2a4ca443675aee743a2ffad0252fc7e3cc7bbd Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Wed, 21 Aug 2024 12:52:21 -0400 Subject: [PATCH 6/8] update GFS_diagnostics.F90 for blocked data change --- ccpp/driver/GFS_diagnostics.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/driver/GFS_diagnostics.F90 b/ccpp/driver/GFS_diagnostics.F90 index 93685b098..4729819ea 100644 --- a/ccpp/driver/GFS_diagnostics.F90 +++ b/ccpp/driver/GFS_diagnostics.F90 @@ -4662,7 +4662,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%mod_name = 'gfs_phys' allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var3 => Statein(nb)%qgrs(:,:,Model%ntfsmoke) + ExtDiag(idx)%data(nb)%var3 => Statein%qgrs(Model%chunk_begin(nb):Model%chunk_end(nb),:,Model%ntfsmoke) enddo endif From c1552db0f474ad7fa468178c623cb5cdbec06ae1 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Wed, 21 Aug 2024 15:08:06 -0400 Subject: [PATCH 7/8] fix inadvertent syntax error --- atmos_model.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atmos_model.F90 b/atmos_model.F90 index ab4178c9b..1cd0906ea 100644 --- a/atmos_model.F90 +++ b/atmos_model.F90 @@ -1,4 +1,4 @@ -< Date: Thu, 22 Aug 2024 13:54:14 -0400 Subject: [PATCH 8/8] update ccpp/physics submodule after updating --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index 598db4b0b..ebe335d03 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 598db4b0b05378543b95ce161e8d98e171e3dd00 +Subproject commit ebe335d0364bd9840b230c012ab7903ee709f569