From fbfb3dfe141061032a9fa231e03a1a14bda4f983 Mon Sep 17 00:00:00 2001 From: "denise.worthen" Date: Sat, 11 Jan 2020 19:31:03 +0000 Subject: [PATCH 01/17] remove ice-ocean merge in prep_atm --- src/module_MEDIATOR.F90 | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/module_MEDIATOR.F90 b/src/module_MEDIATOR.F90 index 23ac5f7a..508fbbfe 100644 --- a/src/module_MEDIATOR.F90 +++ b/src/module_MEDIATOR.F90 @@ -3700,13 +3700,19 @@ subroutine MedPhase_prep_atm(gcomp, rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out allocate(ocnwgt(lbound(icewgt,1):ubound(icewgt,1),lbound(icewgt,2):ubound(icewgt,2))) + allocate(customwgt(lbound(icewgt,1):ubound(icewgt,1),lbound(icewgt,2):ubound(icewgt,2))) do j=lbound(icewgt,2),ubound(icewgt,2) do i=lbound(icewgt,1),ubound(icewgt,1) ocnwgt(i,j) = 1.0_ESMF_KIND_R8 - icewgt(i,j) -!BL2017 ocnwgt = 1.0_ESMF_KIND_R8 - icewgt + customwgt(i,j) = 1.0_ESMF_KIND_R8 enddo enddo + ! FLAG icewgt > 1.0 + write(msgString,'(A,3g17.10)')trim(subname)//trim(' FLAG icewgt>1.0'), & + minval(icewgt),maxval(icewgt-1.0_ESMF_KIND_R8),sum(icewgt) + if(maxval(icewgt) .gt. 1.0_ESMF_KIND_R8)call ESMF_LogWrite(trim(msgString), ESMF_LOGMSG_INFO, rc=rc) + !--- fill land mask every coupling from initial computation if (generate_landmask) then @@ -3726,45 +3732,39 @@ subroutine MedPhase_prep_atm(gcomp, rc) return endif - !--- merges - + !--- merges from ice only + call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_sensi_heat_flx' , & - is_local%wrap%FBAtmOcn_a,'mean_sensi_heat_flx_atm_into_ocn',ocnwgt, & - is_local%wrap%FBIce_a ,'mean_sensi_heat_flx_atm_into_ice',icewgt, rc=rc) + is_local%wrap%FBIce_a ,'mean_sensi_heat_flx_atm_into_ice',customwgt, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_laten_heat_flx' , & - is_local%wrap%FBAtmOcn_a,'mean_laten_heat_flx_atm_into_ocn',ocnwgt, & - is_local%wrap%FBIce_a ,'mean_laten_heat_flx_atm_into_ice',icewgt, rc=rc) + is_local%wrap%FBIce_a ,'mean_laten_heat_flx_atm_into_ice',customwgt, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_up_lw_flx' , & - is_local%wrap%FBAtmOcn_a,'mean_up_lw_flx_ocn',ocnwgt, & - is_local%wrap%FBIce_a ,'mean_up_lw_flx_ice',icewgt, rc=rc) + is_local%wrap%FBIce_a ,'mean_up_lw_flx_ice',customwgt, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_evap_rate' , & - is_local%wrap%FBAtmOcn_a,'mean_evap_rate_atm_into_ocn',ocnwgt, & - is_local%wrap%FBIce_a ,'mean_evap_rate_atm_into_ice',icewgt, rc=rc) + is_local%wrap%FBIce_a ,'mean_evap_rate_atm_into_ice',customwgt, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_zonal_moment_flx' , & - is_local%wrap%FBAtmOcn_a,'stress_on_air_ocn_zonal',ocnwgt, & - is_local%wrap%FBIce_a ,'stress_on_air_ice_zonal',icewgt, rc=rc) + is_local%wrap%FBIce_a ,'stress_on_air_ice_zonal',customwgt, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_merid_moment_flx' , & - is_local%wrap%FBAtmOcn_a,'stress_on_air_ocn_merid',ocnwgt, & - is_local%wrap%FBIce_a ,'stress_on_air_ice_merid',icewgt, rc=rc) + is_local%wrap%FBIce_a ,'stress_on_air_ice_merid',customwgt, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out - deallocate(ocnwgt) + deallocate(ocnwgt, customwgt) !--------------------------------------- !--- set export State to special value for testing From 71108383993a4b0daadd1e192e97b0123692af9f Mon Sep 17 00:00:00 2001 From: "denise.worthen" Date: Mon, 27 Jan 2020 17:01:33 +0000 Subject: [PATCH 02/17] remove atm-ocn in prep_atm;remove associated FBs --- src/module_MEDIATOR.F90 | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/module_MEDIATOR.F90 b/src/module_MEDIATOR.F90 index b83a9942..4c71a65f 100644 --- a/src/module_MEDIATOR.F90 +++ b/src/module_MEDIATOR.F90 @@ -97,11 +97,11 @@ module module_MEDIATOR type(ESMF_FieldBundle):: FBHyd_a ! Hyd export data mapped to atm grid type(ESMF_FieldBundle):: FBHyd_h ! Hyd export on hyd grid type(ESMF_FieldBundle):: FBAtmOcn_o ! Atm/Ocn flux fields on ocn grid - type(ESMF_FieldBundle):: FBAtmOcn_a ! Atm/Ocn flux fields on atm grid +! type(ESMF_FieldBundle):: FBAtmOcn_a ! Atm/Ocn flux fields on atm grid !BL2017b type(ESMF_FieldBundle):: FBOcn2_a ! Ocn export data mapped to atm grid type(ESMF_FieldBundle):: FBIce2_a ! Ice export data mapped to atm grid - type(ESMF_FieldBundle):: FBAtmOcn2_a ! Atm/Ocn flux fields on atm grid +! type(ESMF_FieldBundle):: FBAtmOcn2_a ! Atm/Ocn flux fields on atm grid !BL2017b type(ESMF_FieldBundle):: FBforAtm ! data storage for atm import type(ESMF_FieldBundle):: FBforOcn ! data storage for ocn import @@ -2373,11 +2373,11 @@ subroutine InitializeIPDv03p5(gcomp, importState, exportState, clock, rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out - call fieldBundle_init(is_local%wrap%FBAtmOcn_a, grid=gridAtm, & - fieldnamelist=fldsAtmOcn%shortname(1:fldsAtmOcn%num), name='FBAtmOcn_a', rc=rc) + !call fieldBundle_init(is_local%wrap%FBAtmOcn_a, grid=gridAtm, & + ! fieldnamelist=fldsAtmOcn%shortname(1:fldsAtmOcn%num), name='FBAtmOcn_a', rc=rc) !BL2017b - call fieldBundle_init(is_local%wrap%FBAtmOcn2_a, grid=gridAtm, & - fieldnamelist=fldsAtmOcn%shortname(1:fldsAtmOcn%num), name='FBAtmOcn2_a', rc=rc) + !call fieldBundle_init(is_local%wrap%FBAtmOcn2_a, grid=gridAtm, & + ! fieldnamelist=fldsAtmOcn%shortname(1:fldsAtmOcn%num), name='FBAtmOcn2_a', rc=rc) !BL2017b if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out @@ -3220,11 +3220,11 @@ subroutine MedPhase_prep_atm(gcomp, rc) call fieldBundle_reset(is_local%wrap%FBIce_if, value=czero, rc=rc) call fieldBundle_reset(is_local%wrap%FBLnd_a, value=czero, rc=rc) call fieldBundle_reset(is_local%wrap%FBHyd_a, value=czero, rc=rc) - call fieldBundle_reset(is_local%wrap%FBAtmOcn_a, value=czero, rc=rc) + !call fieldBundle_reset(is_local%wrap%FBAtmOcn_a, value=czero, rc=rc) !BL2017b call fieldBundle_reset(is_local%wrap%FBOcn2_a, value=czero, rc=rc) call fieldBundle_reset(is_local%wrap%FBIce2_a, value=czero, rc=rc) - call fieldBundle_reset(is_local%wrap%FBAtmOcn2_a, value=czero, rc=rc) + !call fieldBundle_reset(is_local%wrap%FBAtmOcn2_a, value=czero, rc=rc) !BL2017b if (is_local%wrap%o2a_active) then @@ -3272,7 +3272,7 @@ subroutine MedPhase_prep_atm(gcomp, rc) enddo deallocate(fieldNameList) !BL2017b - +#ifdef test call Fieldbundle_Regrid(fldsAtmOcn, is_local%wrap%FBAtmOcn_o, is_local%wrap%FBAtmOcn_a, & consfmap=is_local%wrap%RH_o2a_consf, & consdmap=is_local%wrap%RH_o2a_consd, & @@ -3317,6 +3317,7 @@ subroutine MedPhase_prep_atm(gcomp, rc) enddo deallocate(fieldNameList) !BL2017b +#endif endif if (is_local%wrap%i2a_active) then @@ -3660,14 +3661,14 @@ subroutine MedPhase_prep_atm(gcomp, rc) call FieldBundle_diagnose(is_local%wrap%FBIce_a, trim(subname)//' FBIce_a ', rc=rc) call FieldBundle_diagnose(is_local%wrap%FBLnd_a, trim(subname)//' FBLnd_a ', rc=rc) call FieldBundle_diagnose(is_local%wrap%FBHyd_a, trim(subname)//' FBHyd_a ', rc=rc) - call FieldBundle_diagnose(is_local%wrap%FBAtmOcn_a, trim(subname)//' FBAtmOcn_a ', rc=rc) + !call FieldBundle_diagnose(is_local%wrap%FBAtmOcn_a, trim(subname)//' FBAtmOcn_a ', rc=rc) endif call fieldBundle_copy(is_local%wrap%FBforAtm, is_local%wrap%FBOcn_a, rc=rc) call fieldBundle_copy(is_local%wrap%FBforAtm, is_local%wrap%FBIce_a, rc=rc) call fieldBundle_copy(is_local%wrap%FBforAtm, is_local%wrap%FBLnd_a, rc=rc) call fieldBundle_copy(is_local%wrap%FBforAtm, is_local%wrap%FBHyd_a, rc=rc) - call fieldBundle_copy(is_local%wrap%FBforAtm, is_local%wrap%FBAtmOcn_a, rc=rc) + !call fieldBundle_copy(is_local%wrap%FBforAtm, is_local%wrap%FBAtmOcn_a, rc=rc) if (dbug_flag > 1) then call FieldBundle_diagnose(is_local%wrap%FBforAtm, trim(subname)//' FBforAtm ', rc=rc) From 8e4187ec9bdeae9d2d4d69b2c73fbe0ae7e46372 Mon Sep 17 00:00:00 2001 From: "denise.worthen" Date: Mon, 27 Jan 2020 18:13:50 +0000 Subject: [PATCH 03/17] comment vs ifdef --- src/module_MEDIATOR.F90 | 96 ++++++++++++++++++++++------------------- 1 file changed, 51 insertions(+), 45 deletions(-) diff --git a/src/module_MEDIATOR.F90 b/src/module_MEDIATOR.F90 index 4c71a65f..56107a12 100644 --- a/src/module_MEDIATOR.F90 +++ b/src/module_MEDIATOR.F90 @@ -3272,52 +3272,50 @@ subroutine MedPhase_prep_atm(gcomp, rc) enddo deallocate(fieldNameList) !BL2017b -#ifdef test - call Fieldbundle_Regrid(fldsAtmOcn, is_local%wrap%FBAtmOcn_o, is_local%wrap%FBAtmOcn_a, & - consfmap=is_local%wrap%RH_o2a_consf, & - consdmap=is_local%wrap%RH_o2a_consd, & - bilnrmap=is_local%wrap%RH_o2a_bilnr, & - patchmap=is_local%wrap%RH_o2a_patch, & - string='o2aatmocn', rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - + !call Fieldbundle_Regrid(fldsAtmOcn, is_local%wrap%FBAtmOcn_o, is_local%wrap%FBAtmOcn_a, & + ! consfmap=is_local%wrap%RH_o2a_consf, & + ! consdmap=is_local%wrap%RH_o2a_consd, & + ! bilnrmap=is_local%wrap%RH_o2a_bilnr, & + ! patchmap=is_local%wrap%RH_o2a_patch, & + ! string='o2aatmocn', rc=rc) + !if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + ! line=__LINE__, file=__FILE__)) return ! bail out + +!BL201!7b +! use !the nearest neighbor method + !call Fieldbundle_Regrid2(fldsAtmOcn, is_local%wrap%FBAtmOcn_o, is_local%wrap%FBAtmOcn2_a, & + ! nearestmap=is_local%wrap%RH_o2a_nearest, & + ! string='atmocn_o2a_nearest', rc=rc) + !if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + ! line=__LINE__, file=__FILE__)) return ! bail out + + !call ESMF_FieldBundleGet(is_local%wrap%FBAtmOcn_a, fieldCount=fieldCount, rc=rc) + !if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + ! line=__LINE__, file=__FILE__)) return ! bail out + !allocate(fieldNameList(fieldCount)) + !call ESMF_FieldBundleGet(is_local%wrap%FBAtmOcn_a, fieldNameList=fieldNameList, rc=rc) + !if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + ! line=__LINE__, file=__FILE__)) return ! bail out + + !do n = 1, fieldCount + !call FieldBundle_GetFldPtr(is_local%wrap%FBAtmOcn_a, fieldNameList(n),dataPtr1,rc=rc) + !if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + ! line=__LINE__, file=__FILE__)) return ! bail out + + !call FieldBundle_GetFldPtr(is_local%wrap%FBAtmOcn2_a, fieldNameList(n), dataPtr2, rc=rc) + !if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + ! line=__LINE__, file=__FILE__)) return ! bail out + + !do j=lbound(dataPtr1,2),ubound(dataPtr1,2) + !do i=lbound(dataPtr1,1),ubound(dataPtr1,1) + !if(dataPtr1(i,j).eq.0._ESMF_KIND_R8.and.abs(dataPtr2(i,j)).gt.0._ESMF_KIND_R8) then + ! dataPtr1(i,j)=dataPtr2(i,j) + ! endif + !enddo + !enddo + !enddo + !deallocate(fieldNameList) !BL2017b -! use the nearest neighbor method - call Fieldbundle_Regrid2(fldsAtmOcn, is_local%wrap%FBAtmOcn_o, is_local%wrap%FBAtmOcn2_a, & - nearestmap=is_local%wrap%RH_o2a_nearest, & - string='atmocn_o2a_nearest', rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - - call ESMF_FieldBundleGet(is_local%wrap%FBAtmOcn_a, fieldCount=fieldCount, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - allocate(fieldNameList(fieldCount)) - call ESMF_FieldBundleGet(is_local%wrap%FBAtmOcn_a, fieldNameList=fieldNameList, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - - do n = 1, fieldCount - call FieldBundle_GetFldPtr(is_local%wrap%FBAtmOcn_a, fieldNameList(n),dataPtr1,rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - - call FieldBundle_GetFldPtr(is_local%wrap%FBAtmOcn2_a, fieldNameList(n), dataPtr2, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - - do j=lbound(dataPtr1,2),ubound(dataPtr1,2) - do i=lbound(dataPtr1,1),ubound(dataPtr1,1) - if(dataPtr1(i,j).eq.0._ESMF_KIND_R8.and.abs(dataPtr2(i,j)).gt.0._ESMF_KIND_R8) then - dataPtr1(i,j)=dataPtr2(i,j) - endif - enddo - enddo - enddo - deallocate(fieldNameList) -!BL2017b -#endif endif if (is_local%wrap%i2a_active) then @@ -5483,6 +5481,14 @@ subroutine MedPhase_prep_ocn(gcomp, rc) enddo enddo + ii =lbound(icewgt,1)+(ubound(icewgt,1) - lbound(icewgt,1))/2 + jj =lbound(icewgt,2)+(ubound(icewgt,2) - lbound(icewgt,2))/2 + write(msgString,'(A,6f12.5)')trim(subname)//trim(' wts for atm-ocn merges'), & + real(icewgt(ii,jj),4), real(atmwgt(ii,jj),4),& + real(icewgt1(ii,jj),4), real( atmwgt1(ii,jj),4),& + real(wgtp01(ii,jj),4), real( wgtm01(ii,jj),4) + call ESMF_LogWrite(trim(msgString), ESMF_LOGMSG_INFO, rc=rc) + !------------- ! mean_evap_rate = mean_laten_heat_flux * (1-ice_fraction)/const_lhvap !------------- From c3fe0c1587fbc2ddfd63ec6e26abdd2bd522c04e Mon Sep 17 00:00:00 2001 From: "denise.worthen" Date: Mon, 27 Jan 2020 19:44:11 +0000 Subject: [PATCH 04/17] remove unnecessary prep_atm merges --- src/module_MEDIATOR.F90 | 64 +++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/src/module_MEDIATOR.F90 b/src/module_MEDIATOR.F90 index 56107a12..ce84d7c4 100644 --- a/src/module_MEDIATOR.F90 +++ b/src/module_MEDIATOR.F90 @@ -3732,37 +3732,37 @@ subroutine MedPhase_prep_atm(gcomp, rc) endif !--- merges from ice only - - call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_sensi_heat_flx' , & - is_local%wrap%FBIce_a ,'mean_sensi_heat_flx_atm_into_ice',customwgt, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - - call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_laten_heat_flx' , & - is_local%wrap%FBIce_a ,'mean_laten_heat_flx_atm_into_ice',customwgt, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - - call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_up_lw_flx' , & - is_local%wrap%FBIce_a ,'mean_up_lw_flx_ice',customwgt, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - - call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_evap_rate' , & - is_local%wrap%FBIce_a ,'mean_evap_rate_atm_into_ice',customwgt, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - - call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_zonal_moment_flx' , & - is_local%wrap%FBIce_a ,'stress_on_air_ice_zonal',customwgt, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - - call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_merid_moment_flx' , & - is_local%wrap%FBIce_a ,'stress_on_air_ice_merid',customwgt, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - +! +! call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_sensi_heat_flx' , & +! is_local%wrap%FBIce_a ,'mean_sensi_heat_flx_atm_into_ice',customwgt, rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & +! line=__LINE__, file=__FILE__)) return ! bail out +! +! call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_laten_heat_flx' , & +! is_local%wrap%FBIce_a ,'mean_laten_heat_flx_atm_into_ice',customwgt, rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & +! line=__LINE__, file=__FILE__)) return ! bail out +! +! call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_up_lw_flx' , & +! is_local%wrap%FBIce_a ,'mean_up_lw_flx_ice',customwgt, rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & +! line=__LINE__, file=__FILE__)) return ! bail out +! +! call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_evap_rate' , & +! is_local%wrap%FBIce_a ,'mean_evap_rate_atm_into_ice',customwgt, rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & +! line=__LINE__, file=__FILE__)) return ! bail out +! +! call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_zonal_moment_flx' , & +! is_local%wrap%FBIce_a ,'stress_on_air_ice_zonal',customwgt, rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & +! line=__LINE__, file=__FILE__)) return ! bail out +! +! call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_merid_moment_flx' , & +! is_local%wrap%FBIce_a ,'stress_on_air_ice_merid',customwgt, rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & +! line=__LINE__, file=__FILE__)) return ! bail out +! deallocate(ocnwgt, customwgt) !--------------------------------------- @@ -5258,6 +5258,8 @@ subroutine MedPhase_prep_ocn(gcomp, rc) logical :: checkOK, checkOK1, checkOK2 character(len=*),parameter :: subname='(module_MEDIATOR:MedPhase_prep_ocn)' + integer :: ii,jj + if(profile_memory) call ESMF_VMLogMemInfo("Entering "//trim(subname)) if (dbug_flag > 5) then call ESMF_LogWrite(trim(subname)//": called", ESMF_LOGMSG_INFO, rc=dbrc) From ca2677c17d10aeb12c16d6987e6e86868e0d8943 Mon Sep 17 00:00:00 2001 From: "denise.worthen" Date: Fri, 31 Jan 2020 18:28:25 +0000 Subject: [PATCH 05/17] remove custom merges in prep_atm which are not needed when field name changes are made of fv3 side for import directly from cice --- src/module_MEDIATOR.F90 | 50 ++--------------------------------------- 1 file changed, 2 insertions(+), 48 deletions(-) diff --git a/src/module_MEDIATOR.F90 b/src/module_MEDIATOR.F90 index b83a9942..649b11ef 100644 --- a/src/module_MEDIATOR.F90 +++ b/src/module_MEDIATOR.F90 @@ -3133,7 +3133,7 @@ subroutine MedPhase_prep_atm(gcomp, rc) real(ESMF_KIND_R8), pointer :: ifrac_ad(:,:), ifrac_adr(:,:) ! ice fraction on atm grid consd map real(ESMF_KIND_R8), pointer :: ifrac_ab(:,:), ifrac_abr(:,:) ! ice fraction on atm grid bilnr map real(ESMF_KIND_R8), pointer :: ifrac_ap(:,:), ifrac_apr(:,:) ! ice fraction on atm grid patch map - real(ESMF_KIND_R8), pointer :: ocnwgt(:,:),icewgt(:,:),customwgt(:,:) + real(ESMF_KIND_R8), pointer :: icewgt(:,:) integer :: i,j,n integer :: regridwriteAtmExp_timeslice = 0 character(len=*),parameter :: subname='(module_MEDIATOR:MedPhase_prep_atm)' @@ -3690,23 +3690,11 @@ subroutine MedPhase_prep_atm(gcomp, rc) #endif endif - !--------------------------------------- - !--- custom calculations to atm - !--------------------------------------- - - !--- ocn and ice fraction for merges + !--- check for ice fraction out of range call FieldBundle_GetFldPtr(is_local%wrap%FBIce_a, 'ice_fraction', icewgt, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out - allocate(ocnwgt(lbound(icewgt,1):ubound(icewgt,1),lbound(icewgt,2):ubound(icewgt,2))) - allocate(customwgt(lbound(icewgt,1):ubound(icewgt,1),lbound(icewgt,2):ubound(icewgt,2))) - do j=lbound(icewgt,2),ubound(icewgt,2) - do i=lbound(icewgt,1),ubound(icewgt,1) - ocnwgt(i,j) = 1.0_ESMF_KIND_R8 - icewgt(i,j) - customwgt(i,j) = 1.0_ESMF_KIND_R8 - enddo - enddo ! FLAG icewgt > 1.0 write(msgString,'(A,3g17.10)')trim(subname)//trim(' FLAG icewgt>1.0'), & @@ -3732,40 +3720,6 @@ subroutine MedPhase_prep_atm(gcomp, rc) return endif - !--- merges from ice only - - call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_sensi_heat_flx' , & - is_local%wrap%FBIce_a ,'mean_sensi_heat_flx_atm_into_ice',customwgt, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - - call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_laten_heat_flx' , & - is_local%wrap%FBIce_a ,'mean_laten_heat_flx_atm_into_ice',customwgt, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - - call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_up_lw_flx' , & - is_local%wrap%FBIce_a ,'mean_up_lw_flx_ice',customwgt, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - - call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_evap_rate' , & - is_local%wrap%FBIce_a ,'mean_evap_rate_atm_into_ice',customwgt, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - - call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_zonal_moment_flx' , & - is_local%wrap%FBIce_a ,'stress_on_air_ice_zonal',customwgt, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - - call fieldBundle_FieldMerge(is_local%wrap%FBforAtm ,'mean_merid_moment_flx' , & - is_local%wrap%FBIce_a ,'stress_on_air_ice_merid',customwgt, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - - deallocate(ocnwgt, customwgt) - !--------------------------------------- !--- set export State to special value for testing !--------------------------------------- From 42075ce1a723649818cd935bdfa1d08795fb198e Mon Sep 17 00:00:00 2001 From: "denise.worthen" Date: Mon, 3 Feb 2020 23:44:27 +0000 Subject: [PATCH 06/17] move sum(weights) into datm part of loop; add wgtp01 for netLW merge --- src/module_MEDIATOR.F90 | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/module_MEDIATOR.F90 b/src/module_MEDIATOR.F90 index bd001d5f..2339f3af 100644 --- a/src/module_MEDIATOR.F90 +++ b/src/module_MEDIATOR.F90 @@ -5483,13 +5483,7 @@ subroutine MedPhase_prep_ocn(gcomp, rc) wgtp01(i,j) = 1.0_ESMF_KIND_R8 wgtm01(i,j) = -1.0_ESMF_KIND_R8 endif -#else - atmwgt(i,j) = 1.0_ESMF_KIND_R8 - icewgt(i,j) - atmwgt1(i,j) = 0.0_ESMF_KIND_R8 - icewgt1(i,j) = icewgt(i,j) - wgtm01(i,j) = -atmwgt(i,j) - wgtp01(i,j) = 0.0_ESMF_KIND_R8 -#endif + ! check wgts do add to 1 as expected if (abs(atmwgt(i,j) + icewgt(i,j) - 1.0_ESMF_KIND_R8) > 1.0e-12 .or. & abs(atmwgt1(i,j) + icewgt1(i,j) + wgtp01(i,j) - 1.0_ESMF_KIND_R8) > 1.0e-12 .or. & @@ -5498,6 +5492,13 @@ subroutine MedPhase_prep_ocn(gcomp, rc) rc = ESMF_FAILURE return endif +#else + atmwgt(i,j) = 1.0_ESMF_KIND_R8 - icewgt(i,j) + atmwgt1(i,j) = 0.0_ESMF_KIND_R8 + icewgt1(i,j) = icewgt(i,j) + wgtm01(i,j) = -atmwgt(i,j) + wgtp01(i,j) = atmwgt(i,j) +#endif enddo enddo From a7daedfd31a0a2de7dce4b0cb329764911631189 Mon Sep 17 00:00:00 2001 From: "denise.worthen" Date: Tue, 4 Feb 2020 16:35:59 +0000 Subject: [PATCH 07/17] remove unused code in prep_atm --- src/module_MEDIATOR.F90 | 122 ++++++++++++++++++++-------------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/src/module_MEDIATOR.F90 b/src/module_MEDIATOR.F90 index 649b11ef..62e758f6 100644 --- a/src/module_MEDIATOR.F90 +++ b/src/module_MEDIATOR.F90 @@ -97,11 +97,11 @@ module module_MEDIATOR type(ESMF_FieldBundle):: FBHyd_a ! Hyd export data mapped to atm grid type(ESMF_FieldBundle):: FBHyd_h ! Hyd export on hyd grid type(ESMF_FieldBundle):: FBAtmOcn_o ! Atm/Ocn flux fields on ocn grid - type(ESMF_FieldBundle):: FBAtmOcn_a ! Atm/Ocn flux fields on atm grid + !type(ESMF_FieldBundle):: FBAtmOcn_a ! Atm/Ocn flux fields on atm grid !BL2017b type(ESMF_FieldBundle):: FBOcn2_a ! Ocn export data mapped to atm grid type(ESMF_FieldBundle):: FBIce2_a ! Ice export data mapped to atm grid - type(ESMF_FieldBundle):: FBAtmOcn2_a ! Atm/Ocn flux fields on atm grid + !type(ESMF_FieldBundle):: FBAtmOcn2_a ! Atm/Ocn flux fields on atm grid !BL2017b type(ESMF_FieldBundle):: FBforAtm ! data storage for atm import type(ESMF_FieldBundle):: FBforOcn ! data storage for ocn import @@ -2373,11 +2373,11 @@ subroutine InitializeIPDv03p5(gcomp, importState, exportState, clock, rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out - call fieldBundle_init(is_local%wrap%FBAtmOcn_a, grid=gridAtm, & - fieldnamelist=fldsAtmOcn%shortname(1:fldsAtmOcn%num), name='FBAtmOcn_a', rc=rc) + !call fieldBundle_init(is_local%wrap%FBAtmOcn_a, grid=gridAtm, & + ! fieldnamelist=fldsAtmOcn%shortname(1:fldsAtmOcn%num), name='FBAtmOcn_a', rc=rc) !BL2017b - call fieldBundle_init(is_local%wrap%FBAtmOcn2_a, grid=gridAtm, & - fieldnamelist=fldsAtmOcn%shortname(1:fldsAtmOcn%num), name='FBAtmOcn2_a', rc=rc) + !call fieldBundle_init(is_local%wrap%FBAtmOcn2_a, grid=gridAtm, & + ! fieldnamelist=fldsAtmOcn%shortname(1:fldsAtmOcn%num), name='FBAtmOcn2_a', rc=rc) !BL2017b if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out @@ -3220,11 +3220,11 @@ subroutine MedPhase_prep_atm(gcomp, rc) call fieldBundle_reset(is_local%wrap%FBIce_if, value=czero, rc=rc) call fieldBundle_reset(is_local%wrap%FBLnd_a, value=czero, rc=rc) call fieldBundle_reset(is_local%wrap%FBHyd_a, value=czero, rc=rc) - call fieldBundle_reset(is_local%wrap%FBAtmOcn_a, value=czero, rc=rc) + !call fieldBundle_reset(is_local%wrap%FBAtmOcn_a, value=czero, rc=rc) !BL2017b call fieldBundle_reset(is_local%wrap%FBOcn2_a, value=czero, rc=rc) call fieldBundle_reset(is_local%wrap%FBIce2_a, value=czero, rc=rc) - call fieldBundle_reset(is_local%wrap%FBAtmOcn2_a, value=czero, rc=rc) + !call fieldBundle_reset(is_local%wrap%FBAtmOcn2_a, value=czero, rc=rc) !BL2017b if (is_local%wrap%o2a_active) then @@ -3272,51 +3272,51 @@ subroutine MedPhase_prep_atm(gcomp, rc) enddo deallocate(fieldNameList) !BL2017b - - call Fieldbundle_Regrid(fldsAtmOcn, is_local%wrap%FBAtmOcn_o, is_local%wrap%FBAtmOcn_a, & - consfmap=is_local%wrap%RH_o2a_consf, & - consdmap=is_local%wrap%RH_o2a_consd, & - bilnrmap=is_local%wrap%RH_o2a_bilnr, & - patchmap=is_local%wrap%RH_o2a_patch, & - string='o2aatmocn', rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - -!BL2017b -! use the nearest neighbor method - call Fieldbundle_Regrid2(fldsAtmOcn, is_local%wrap%FBAtmOcn_o, is_local%wrap%FBAtmOcn2_a, & - nearestmap=is_local%wrap%RH_o2a_nearest, & - string='atmocn_o2a_nearest', rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - - call ESMF_FieldBundleGet(is_local%wrap%FBAtmOcn_a, fieldCount=fieldCount, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - allocate(fieldNameList(fieldCount)) - call ESMF_FieldBundleGet(is_local%wrap%FBAtmOcn_a, fieldNameList=fieldNameList, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - - do n = 1, fieldCount - call FieldBundle_GetFldPtr(is_local%wrap%FBAtmOcn_a, fieldNameList(n),dataPtr1,rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - - call FieldBundle_GetFldPtr(is_local%wrap%FBAtmOcn2_a, fieldNameList(n), dataPtr2, rc=rc) - if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, file=__FILE__)) return ! bail out - - do j=lbound(dataPtr1,2),ubound(dataPtr1,2) - do i=lbound(dataPtr1,1),ubound(dataPtr1,1) - if(dataPtr1(i,j).eq.0._ESMF_KIND_R8.and.abs(dataPtr2(i,j)).gt.0._ESMF_KIND_R8) then - dataPtr1(i,j)=dataPtr2(i,j) - endif - enddo - enddo - enddo - deallocate(fieldNameList) -!BL2017b +! +! call Fieldbundle_Regrid(fldsAtmOcn, is_local%wrap%FBAtmOcn_o, is_local%wrap%FBAtmOcn_a, & +! consfmap=is_local%wrap%RH_o2a_consf, & +! consdmap=is_local%wrap%RH_o2a_consd, & +! bilnrmap=is_local%wrap%RH_o2a_bilnr, & +! patchmap=is_local%wrap%RH_o2a_patch, & +! string='o2aatmocn', rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & +! line=__LINE__, file=__FILE__)) return ! bail out +! +!!BL2017b +!! use the nearest neighbor method +! call Fieldbundle_Regrid2(fldsAtmOcn, is_local%wrap%FBAtmOcn_o, is_local%wrap%FBAtmOcn2_a, & +! nearestmap=is_local%wrap%RH_o2a_nearest, & +! string='atmocn_o2a_nearest', rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & +! line=__LINE__, file=__FILE__)) return ! bail out +! +! call ESMF_FieldBundleGet(is_local%wrap%FBAtmOcn_a, fieldCount=fieldCount, rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & +! line=__LINE__, file=__FILE__)) return ! bail out +! allocate(fieldNameList(fieldCount)) +! call ESMF_FieldBundleGet(is_local%wrap%FBAtmOcn_a, fieldNameList=fieldNameList, rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & +! line=__LINE__, file=__FILE__)) return ! bail out +! +! do n = 1, fieldCount +! call FieldBundle_GetFldPtr(is_local%wrap%FBAtmOcn_a, fieldNameList(n),dataPtr1,rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & +! line=__LINE__, file=__FILE__)) return ! bail out +! +! call FieldBundle_GetFldPtr(is_local%wrap%FBAtmOcn2_a, fieldNameList(n), dataPtr2, rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & +! line=__LINE__, file=__FILE__)) return ! bail out +! +! do j=lbound(dataPtr1,2),ubound(dataPtr1,2) +! do i=lbound(dataPtr1,1),ubound(dataPtr1,1) +! if(dataPtr1(i,j).eq.0._ESMF_KIND_R8.and.abs(dataPtr2(i,j)).gt.0._ESMF_KIND_R8) then +! dataPtr1(i,j)=dataPtr2(i,j) +! endif +! enddo +! enddo +! enddo +! deallocate(fieldNameList) +!!BL2017b endif if (is_local%wrap%i2a_active) then @@ -3660,14 +3660,14 @@ subroutine MedPhase_prep_atm(gcomp, rc) call FieldBundle_diagnose(is_local%wrap%FBIce_a, trim(subname)//' FBIce_a ', rc=rc) call FieldBundle_diagnose(is_local%wrap%FBLnd_a, trim(subname)//' FBLnd_a ', rc=rc) call FieldBundle_diagnose(is_local%wrap%FBHyd_a, trim(subname)//' FBHyd_a ', rc=rc) - call FieldBundle_diagnose(is_local%wrap%FBAtmOcn_a, trim(subname)//' FBAtmOcn_a ', rc=rc) + !call FieldBundle_diagnose(is_local%wrap%FBAtmOcn_a, trim(subname)//' FBAtmOcn_a ', rc=rc) endif call fieldBundle_copy(is_local%wrap%FBforAtm, is_local%wrap%FBOcn_a, rc=rc) call fieldBundle_copy(is_local%wrap%FBforAtm, is_local%wrap%FBIce_a, rc=rc) call fieldBundle_copy(is_local%wrap%FBforAtm, is_local%wrap%FBLnd_a, rc=rc) call fieldBundle_copy(is_local%wrap%FBforAtm, is_local%wrap%FBHyd_a, rc=rc) - call fieldBundle_copy(is_local%wrap%FBforAtm, is_local%wrap%FBAtmOcn_a, rc=rc) + !call fieldBundle_copy(is_local%wrap%FBforAtm, is_local%wrap%FBAtmOcn_a, rc=rc) if (dbug_flag > 1) then call FieldBundle_diagnose(is_local%wrap%FBforAtm, trim(subname)//' FBforAtm ', rc=rc) @@ -5362,10 +5362,10 @@ subroutine MedPhase_prep_ocn(gcomp, rc) line=__LINE__, file=__FILE__)) return ! bail out endif - if (dbug_flag > 1) then + !if (dbug_flag > 1) then call FieldBundle_diagnose(is_local%wrap%FBAtm_o, trim(subname)//' FBAtm_o ', rc=rc) call FieldBundle_diagnose(is_local%wrap%FBIce_o, trim(subname)//' FBIce_o ', rc=rc) - endif + !endif ! tcx Xgrid ! XGrid intermediary required? instantiate FBXgrid FieldBundle? @@ -5597,9 +5597,9 @@ subroutine MedPhase_prep_ocn(gcomp, rc) deallocate(atmwgt,customwgt,atmwgt1,icewgt1,wgtp01) - if (dbug_flag > 1) then + !if (dbug_flag > 1) then call FieldBundle_diagnose(is_local%wrap%FBforOcn, trim(subname)//' FB4ocn_AFmrg ', rc=rc) - endif + !endif endif @@ -5662,7 +5662,7 @@ subroutine MedPhase_prep_ocn(gcomp, rc) call State_diagnose(NState_OcnExp, trim(subname)//' es_AFcp ', rc=rc) endif - if (statewrite_flag) then + !if (statewrite_flag) then ! write the fields exported to ocn to file call NUOPC_Write(NState_OcnExp, & fldsToOcn%shortname(1:fldsToOcn%num), & @@ -5670,7 +5670,7 @@ subroutine MedPhase_prep_ocn(gcomp, rc) relaxedFlag=.true., rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out - endif + !endif !--------------------------------------- From 793b2e4b766ab9e997f5e13179e2403b9f26e180 Mon Sep 17 00:00:00 2001 From: "denise.worthen" Date: Wed, 5 Feb 2020 16:15:39 +0000 Subject: [PATCH 08/17] use RWFields_tile for mediator dumps --- src/module_MEDIATOR.F90 | 111 +++++++++++++++++++++++++++++----------- 1 file changed, 81 insertions(+), 30 deletions(-) diff --git a/src/module_MEDIATOR.F90 b/src/module_MEDIATOR.F90 index 8630d75a..d6958e7b 100644 --- a/src/module_MEDIATOR.F90 +++ b/src/module_MEDIATOR.F90 @@ -3144,6 +3144,7 @@ subroutine MedPhase_prep_atm(gcomp, rc) real(ESMF_KIND_R8), pointer :: icewgt(:,:) integer :: i,j,n integer :: regridwriteAtmExp_timeslice = 0 + character(len=128) :: fname character(len=*),parameter :: subname='(module_MEDIATOR:MedPhase_prep_atm)' !BL2017b character(ESMF_MAXSTR) ,pointer :: fieldNameList(:) @@ -3750,21 +3751,32 @@ subroutine MedPhase_prep_atm(gcomp, rc) if (statewrite_flag) then ! write the fields exported to atm to file -#ifdef FRONT_FV3 - regridwriteAtmExp_timeslice = regridwriteAtmExp_timeslice + 1 - call ESMFPP_RegridWriteFB(is_local%wrap%FBforAtm, "med_to_atm_export_", regridwriteAtmExp_timeslice, rc=rc) +#ifdef FV3_CPLD + write(fname,'(a,i6.6)') 'field_med_to_atm_',is_local%wrap%fastcntr + call FieldBundle_RWFields_tiles('write',trim(fname),is_local%wrap%FBforAtm,rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & - line=__LINE__, & - file=__FILE__)) & - return ! bail out + line=__LINE__, file=__FILE__)) return ! bail out #else - call NUOPC_Write(NState_AtmExp, & - fldsToAtm%shortname(1:fldsToAtm%num), & - "field_med_to_atm_", timeslice=is_local%wrap%fastcntr, & - relaxedFlag=.true., rc=rc) + write(fname,'(a,i6.6)') 'field_med_to_atm_',is_local%wrap%fastcntr + call FieldBundle_RWFields('write',trim(fname),is_local%wrap%FBforAtm,rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out #endif +!#ifdef FRONT_FV3 +! regridwriteAtmExp_timeslice = regridwriteAtmExp_timeslice + 1 +! call ESMFPP_RegridWriteFB(is_local%wrap%FBforAtm, "med_to_atm_export_", regridwriteAtmExp_timeslice, rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & +! line=__LINE__, & +! file=__FILE__)) & +! return ! bail out +!#else +! call NUOPC_Write(NState_AtmExp, & +! fldsToAtm%shortname(1:fldsToAtm%num), & +! "field_med_to_atm_", timeslice=is_local%wrap%fastcntr, & +! relaxedFlag=.true., rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & +! line=__LINE__, file=__FILE__)) return ! bail out +!#endif endif if (dbug_flag > 1) then @@ -4712,6 +4724,7 @@ subroutine MedPhase_accum_fast(gcomp, rc) type(ESMF_State) :: importState, exportState type(InternalState) :: is_local integer :: i,j,n + character(len=128) :: fname character(len=*),parameter :: subname='(module_MEDIATOR:MedPhase_accum_fast)' if (dbug_flag > 5) then @@ -4752,17 +4765,19 @@ subroutine MedPhase_accum_fast(gcomp, rc) line=__LINE__, file=__FILE__)) return ! bail out endif - if (statewrite_flag) then +! if (statewrite_flag) then ! write the fields imported from atm to file -#ifndef FRONT_FV3 - call NUOPC_Write(NState_AtmImp, & - fldsFrAtm%shortname(1:fldsFrAtm%num), & - "field_med_from_atm_", timeslice=is_local%wrap%fastcntr, & - relaxedFlag=.true., rc=rc) +#ifdef FV3_CPLD + write(fname,'(a,i6.6)') 'field_med_from_atm_',is_local%wrap%fastcntr + call FieldBundle_RWFields_tiles('write',trim(fname),is_local%wrap%FBAtm_a,rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, file=__FILE__)) return ! bail out +#else + write(fname,'(a,i6.6)') 'field_med_from_atm_',is_local%wrap%fastcntr + call FieldBundle_RWFields('write',trim(fname),is_local%wrap%FBAtm_a,rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out #endif - ! write the fields imported from ice to file call NUOPC_Write(NState_IceImp, & fldsFrIce%shortname(1:fldsFrIce%num), & @@ -4786,7 +4801,40 @@ subroutine MedPhase_accum_fast(gcomp, rc) relaxedFlag=.true., rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out - endif +! endif +!#ifndef FRONT_FV3 +! call NUOPC_Write(NState_AtmImp, & +! fldsFrAtm%shortname(1:fldsFrAtm%num), & +! "field_med_from_atm_", timeslice=is_local%wrap%fastcntr, & +! relaxedFlag=.true., rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & +! line=__LINE__, file=__FILE__)) return ! bail out +!#endif +! +! ! write the fields imported from ice to file +! call NUOPC_Write(NState_IceImp, & +! fldsFrIce%shortname(1:fldsFrIce%num), & +! "field_med_from_ice_", timeslice=is_local%wrap%fastcntr, & +! relaxedFlag=.true., rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & +! line=__LINE__, file=__FILE__)) return ! bail out +! +! ! write the fields imported from lnd to file +! call NUOPC_Write(NState_LndImp, & +! fieldNameList=fldsFrLnd%shortname(1:fldsFrLnd%num), & +! fileNamePrefix="field_med_from_lnd_", timeslice=is_local%wrap%fastcntr, & +! relaxedFlag=.true., rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & +! line=__LINE__, file=__FILE__)) return ! bail out +! +! ! write the fields imported from hyd to file +! call NUOPC_Write(NState_HydImp, & +! fieldNameList=fldsFrHyd%shortname(1:fldsFrHyd%num), & +! fileNamePrefix="field_med_from_hyd_", timeslice=is_local%wrap%fastcntr, & +! relaxedFlag=.true., rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & +! line=__LINE__, file=__FILE__)) return ! bail out +! endif !--------------------------------------- !--- atm, ice, lnd, hyd accumulator for ocean @@ -6131,7 +6179,7 @@ subroutine FieldBundle_RWFields_tiles(mode,fname,FB,flag,rc) integer,optional :: rc ! local variables - type(ESMF_Field) :: f(47) + type(ESMF_Field),allocatable :: flds(:) type(ESMF_GridComp) :: IOComp type(ESMF_Grid) :: gridFv3 character(len=ESMF_MAXSTR) :: name @@ -6145,7 +6193,6 @@ subroutine FieldBundle_RWFields_tiles(mode,fname,FB,flag,rc) call ESMF_LogWrite(trim(subname)//trim(fname)//": called", ESMF_LOGMSG_INFO, rc=dbrc) endif - if (mode == 'write') then call ESMF_FieldBundleGet(FB, fieldCount=fieldCount, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out @@ -6153,11 +6200,14 @@ subroutine FieldBundle_RWFields_tiles(mode,fname,FB,flag,rc) write(msgString,*) trim(subname)//' fieldCount = ',fieldCount call ESMF_LogWrite(trim(msgString), ESMF_LOGMSG_INFO, rc=dbrc) - call fieldBundle_getFieldN(FB, 1, f(1), rc) + allocate(flds(fieldCount)) + + if (mode == 'write') then + call fieldBundle_getFieldN(FB, 1, flds(1), rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out - call ESMF_FieldGet(f(1), grid=gridFv3, rc=rc) + call ESMF_FieldGet(flds(1), grid=gridFv3, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out @@ -6166,11 +6216,11 @@ subroutine FieldBundle_RWFields_tiles(mode,fname,FB,flag,rc) line=__LINE__, file=__FILE__)) return ! bail out call ESMF_LogWrite(trim(subname)//": write "//trim(fname), ESMF_LOGMSG_INFO, rc=dbrc) - do n=2, 47 - call fieldBundle_getFieldN(FB, n, f(n), rc) + do n=2, fieldCount + call fieldBundle_getFieldN(FB, n, flds(n), rc) enddo - call ESMFIO_Write(IOComp, fname, f, filePath='./', rc=rc) + call ESMFIO_Write(IOComp, fname, flds, filePath='./', rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out @@ -6182,11 +6232,11 @@ subroutine FieldBundle_RWFields_tiles(mode,fname,FB,flag,rc) call ESMF_LogWrite(trim(subname)//": read "//trim(fname)// & "tile1-tile6", ESMF_LOGMSG_INFO, rc=dbrc) - call fieldBundle_getFieldN(FB, 1, f(1), rc) + call fieldBundle_getFieldN(FB, 1, flds(1), rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out - call ESMF_FieldGet(f(1), grid=gridFv3, rc=rc) + call ESMF_FieldGet(flds(1), grid=gridFv3, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out @@ -6194,11 +6244,11 @@ subroutine FieldBundle_RWFields_tiles(mode,fname,FB,flag,rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out - do n=2, 47 - call fieldBundle_getFieldN(FB, n, f(n), rc) + do n=2, fieldCount + call fieldBundle_getFieldN(FB, n, flds(n), rc) enddo - call ESMFIO_Read(IOComp, fname, f, filePath='./', rc=rc) + call ESMFIO_Read(IOComp, fname, flds, filePath='./', rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out @@ -6208,6 +6258,7 @@ subroutine FieldBundle_RWFields_tiles(mode,fname,FB,flag,rc) call ESMF_LogWrite(trim(subname)//": mode WARNING "//trim(fname)//" mode="//trim(mode), ESMF_LOGMSG_INFO, rc=dbrc) endif ! -- Finalize ESMFIO + deallocate(flds) call ESMFIO_Destroy(IOComp, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) call ESMF_Finalize() From c030896cfc1433b5b3ca8b084a190f2bfd4ef955 Mon Sep 17 00:00:00 2001 From: "denise.worthen" Date: Thu, 6 Feb 2020 14:15:53 +0000 Subject: [PATCH 09/17] clean up commented out code used for testing --- src/module_MEDIATOR.F90 | 86 +++++++++++++---------------------------- 1 file changed, 26 insertions(+), 60 deletions(-) diff --git a/src/module_MEDIATOR.F90 b/src/module_MEDIATOR.F90 index d6958e7b..758e8afc 100644 --- a/src/module_MEDIATOR.F90 +++ b/src/module_MEDIATOR.F90 @@ -3757,26 +3757,18 @@ subroutine MedPhase_prep_atm(gcomp, rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out #else - write(fname,'(a,i6.6)') 'field_med_to_atm_',is_local%wrap%fastcntr - call FieldBundle_RWFields('write',trim(fname),is_local%wrap%FBforAtm,rc=rc) +! TODO: check method for DATM + call NUOPC_Write(NState_AtmExp, & + fldsToAtm%shortname(1:fldsToAtm%num), & + "field_med_to_atm_", timeslice=is_local%wrap%fastcntr, & + relaxedFlag=.true., rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out -#endif -!#ifdef FRONT_FV3 -! regridwriteAtmExp_timeslice = regridwriteAtmExp_timeslice + 1 -! call ESMFPP_RegridWriteFB(is_local%wrap%FBforAtm, "med_to_atm_export_", regridwriteAtmExp_timeslice, rc=rc) -! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & -! line=__LINE__, & -! file=__FILE__)) & -! return ! bail out -!#else -! call NUOPC_Write(NState_AtmExp, & -! fldsToAtm%shortname(1:fldsToAtm%num), & -! "field_med_to_atm_", timeslice=is_local%wrap%fastcntr, & -! relaxedFlag=.true., rc=rc) +! write(fname,'(a,i6.6)') 'field_med_to_atm_',is_local%wrap%fastcntr +! call FieldBundle_RWFields('write',trim(fname),is_local%wrap%FBforAtm,rc=rc) ! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & ! line=__LINE__, file=__FILE__)) return ! bail out -!#endif +#endif endif if (dbug_flag > 1) then @@ -4773,10 +4765,17 @@ subroutine MedPhase_accum_fast(gcomp, rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out #else - write(fname,'(a,i6.6)') 'field_med_from_atm_',is_local%wrap%fastcntr - call FieldBundle_RWFields('write',trim(fname),is_local%wrap%FBAtm_a,rc=rc) +! TODO: check method for DATM + call NUOPC_Write(NState_AtmImp, & + fldsFrAtm%shortname(1:fldsFrAtm%num), & + "field_med_from_atm_", timeslice=is_local%wrap%fastcntr, & + relaxedFlag=.true., rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out +! write(fname,'(a,i6.6)') 'field_med_from_atm_',is_local%wrap%fastcntr +! call FieldBundle_RWFields('write',trim(fname),is_local%wrap%FBAtm_a,rc=rc) +! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & +! line=__LINE__, file=__FILE__)) return ! bail out #endif ! write the fields imported from ice to file call NUOPC_Write(NState_IceImp, & @@ -4801,39 +4800,6 @@ subroutine MedPhase_accum_fast(gcomp, rc) relaxedFlag=.true., rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out -! endif -!#ifndef FRONT_FV3 -! call NUOPC_Write(NState_AtmImp, & -! fldsFrAtm%shortname(1:fldsFrAtm%num), & -! "field_med_from_atm_", timeslice=is_local%wrap%fastcntr, & -! relaxedFlag=.true., rc=rc) -! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & -! line=__LINE__, file=__FILE__)) return ! bail out -!#endif -! -! ! write the fields imported from ice to file -! call NUOPC_Write(NState_IceImp, & -! fldsFrIce%shortname(1:fldsFrIce%num), & -! "field_med_from_ice_", timeslice=is_local%wrap%fastcntr, & -! relaxedFlag=.true., rc=rc) -! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & -! line=__LINE__, file=__FILE__)) return ! bail out -! -! ! write the fields imported from lnd to file -! call NUOPC_Write(NState_LndImp, & -! fieldNameList=fldsFrLnd%shortname(1:fldsFrLnd%num), & -! fileNamePrefix="field_med_from_lnd_", timeslice=is_local%wrap%fastcntr, & -! relaxedFlag=.true., rc=rc) -! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & -! line=__LINE__, file=__FILE__)) return ! bail out -! -! ! write the fields imported from hyd to file -! call NUOPC_Write(NState_HydImp, & -! fieldNameList=fldsFrHyd%shortname(1:fldsFrHyd%num), & -! fileNamePrefix="field_med_from_hyd_", timeslice=is_local%wrap%fastcntr, & -! relaxedFlag=.true., rc=rc) -! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & -! line=__LINE__, file=__FILE__)) return ! bail out ! endif !--------------------------------------- @@ -5420,10 +5386,10 @@ subroutine MedPhase_prep_ocn(gcomp, rc) line=__LINE__, file=__FILE__)) return ! bail out endif - !if (dbug_flag > 1) then + if (dbug_flag > 1) then call FieldBundle_diagnose(is_local%wrap%FBAtm_o, trim(subname)//' FBAtm_o ', rc=rc) call FieldBundle_diagnose(is_local%wrap%FBIce_o, trim(subname)//' FBIce_o ', rc=rc) - !endif + endif ! tcx Xgrid ! XGrid intermediary required? instantiate FBXgrid FieldBundle? @@ -5437,17 +5403,17 @@ subroutine MedPhase_prep_ocn(gcomp, rc) call fieldBundle_copy(is_local%wrap%FBforOcn, is_local%wrap%FBIce_o, rc=rc) call fieldBundle_copy(is_local%wrap%FBforOcn, is_local%wrap%FBAccumAtmOcn, rc=rc) - !if (dbug_flag > 1) then + if (dbug_flag > 1) then call FieldBundle_diagnose(is_local%wrap%FBforOcn, trim(subname)//' FB4ocn_AFregrid ', rc=rc) - !endif + endif !--------------------------------------- !--- custom calculations to ocn !--------------------------------------- -! if (dbug_flag > 1) then -! call FieldBundle_diagnose(is_local%wrap%FBforOcn, trim(subname)//' FB4ocn_AFcc ', rc=rc) -! endif + if (dbug_flag > 1) then + call FieldBundle_diagnose(is_local%wrap%FBforOcn, trim(subname)//' FB4ocn_AFcc ', rc=rc) + endif !--------------------------------------- !--- merges to ocn @@ -5674,9 +5640,9 @@ subroutine MedPhase_prep_ocn(gcomp, rc) deallocate(atmwgt,customwgt,atmwgt1,icewgt1,wgtp01) - !if (dbug_flag > 1) then + if (dbug_flag > 1) then call FieldBundle_diagnose(is_local%wrap%FBforOcn, trim(subname)//' FB4ocn_AFmrg ', rc=rc) - !endif + endif endif From c8a3c1b8994c963f405b85bd072df382936953e6 Mon Sep 17 00:00:00 2001 From: "denise.worthen" Date: Fri, 7 Feb 2020 13:23:32 +0000 Subject: [PATCH 10/17] add print statement of slow and fast counters for field dumping --- src/module_MEDIATOR.F90 | 43 +++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/src/module_MEDIATOR.F90 b/src/module_MEDIATOR.F90 index 758e8afc..b3a82edd 100644 --- a/src/module_MEDIATOR.F90 +++ b/src/module_MEDIATOR.F90 @@ -4272,7 +4272,10 @@ subroutine MedPhase_prep_ice(gcomp, rc) call state_diagnose(NState_IceExp, trim(subname)//' IceExp_final ', rc=rc) endif - !if (statewrite_flag) then + if (statewrite_flag) then + write(msgString,'(A,i10)')trim(subname)//trim(': write field_med_to_ice '), is_local%wrap%fastcntr + call ESMF_LogWrite(trim(msgString), ESMF_LOGMSG_INFO, rc=rc) + ! write the fields exported to ice to file call NUOPC_Write(NState_IceExp, & fldsToIce%shortname(1:fldsToIce%num), & @@ -4280,7 +4283,7 @@ subroutine MedPhase_prep_ice(gcomp, rc) relaxedFlag=.true., rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out - !endif + endif !--------------------------------------- !--- clean up @@ -4759,6 +4762,8 @@ subroutine MedPhase_accum_fast(gcomp, rc) ! if (statewrite_flag) then ! write the fields imported from atm to file + write(msgString,'(A,i10)')trim(subname)//trim(': write field_med_from '), is_local%wrap%fastcntr + call ESMF_LogWrite(trim(msgString), ESMF_LOGMSG_INFO, rc=rc) #ifdef FV3_CPLD write(fname,'(a,i6.6)') 'field_med_from_atm_',is_local%wrap%fastcntr call FieldBundle_RWFields_tiles('write',trim(fname),is_local%wrap%FBAtm_a,rc=rc) @@ -5386,10 +5391,10 @@ subroutine MedPhase_prep_ocn(gcomp, rc) line=__LINE__, file=__FILE__)) return ! bail out endif - if (dbug_flag > 1) then + !if (dbug_flag > 1) then call FieldBundle_diagnose(is_local%wrap%FBAtm_o, trim(subname)//' FBAtm_o ', rc=rc) call FieldBundle_diagnose(is_local%wrap%FBIce_o, trim(subname)//' FBIce_o ', rc=rc) - endif + !endif ! tcx Xgrid ! XGrid intermediary required? instantiate FBXgrid FieldBundle? @@ -5403,9 +5408,9 @@ subroutine MedPhase_prep_ocn(gcomp, rc) call fieldBundle_copy(is_local%wrap%FBforOcn, is_local%wrap%FBIce_o, rc=rc) call fieldBundle_copy(is_local%wrap%FBforOcn, is_local%wrap%FBAccumAtmOcn, rc=rc) - if (dbug_flag > 1) then + !if (dbug_flag > 1) then call FieldBundle_diagnose(is_local%wrap%FBforOcn, trim(subname)//' FB4ocn_AFregrid ', rc=rc) - endif + !endif !--------------------------------------- !--- custom calculations to ocn @@ -5640,9 +5645,9 @@ subroutine MedPhase_prep_ocn(gcomp, rc) deallocate(atmwgt,customwgt,atmwgt1,icewgt1,wgtp01) - if (dbug_flag > 1) then + !if (dbug_flag > 1) then call FieldBundle_diagnose(is_local%wrap%FBforOcn, trim(subname)//' FB4ocn_AFmrg ', rc=rc) - endif + !endif endif @@ -5707,6 +5712,9 @@ subroutine MedPhase_prep_ocn(gcomp, rc) !if (statewrite_flag) then ! write the fields exported to ocn to file + write(msgString,'(A,i10)')trim(subname)//trim(': write field_med_to_ocn '), is_local%wrap%slowcntr + call ESMF_LogWrite(trim(msgString), ESMF_LOGMSG_INFO, rc=rc) + call NUOPC_Write(NState_OcnExp, & fldsToOcn%shortname(1:fldsToOcn%num), & "field_med_to_ocn_", timeslice=is_local%wrap%slowcntr, & @@ -5751,9 +5759,9 @@ subroutine MedPhase_write_restart(gcomp, rc) character(len=128) :: fname character(len=*),parameter :: subname='(module_MEDIATOR:MedPhase_write_restart)' - if (dbug_flag > 5) then + !if (dbug_flag > 5) then call ESMF_LogWrite(trim(subname)//": called", ESMF_LOGMSG_INFO, rc=dbrc) - endif + !endif rc = ESMF_SUCCESS if (restart_interval > 0) then @@ -5789,9 +5797,9 @@ subroutine MedPhase_write_restart(gcomp, rc) endif endif - if (dbug_flag > 5) then + !if (dbug_flag > 5) then call ESMF_LogWrite(trim(subname)//": done", ESMF_LOGMSG_INFO, rc=dbrc) - endif + !endif end subroutine MedPhase_write_restart @@ -5808,15 +5816,18 @@ subroutine Finalize(gcomp, importState, exportState, clock, rc) integer :: stat character(len=*),parameter :: subname='(module_MEDIATOR:Finalize)' - if (dbug_flag > 5) then + !if (dbug_flag > 5) then call ESMF_LogWrite(trim(subname)//": called", ESMF_LOGMSG_INFO, rc=dbrc) - endif + !endif rc = ESMF_SUCCESS call Mediator_restart(gcomp,'write','mediator',rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out + write(msgString,*) trim(subname)//' restart at Finalize' + call ESMF_LogWrite(msgString, ESMF_LOGMSG_INFO, rc=dbrc) + ! Get the internal state from Component. nullify(is_local%wrap) call ESMF_GridCompGetInternalState(gcomp, is_local, rc) @@ -6169,6 +6180,10 @@ subroutine FieldBundle_RWFields_tiles(mode,fname,FB,flag,rc) allocate(flds(fieldCount)) if (mode == 'write') then + + call ESMF_LogWrite(trim(subname)//": write "//trim(fname)// & + "tile1-tile6", ESMF_LOGMSG_INFO, rc=dbrc) + call fieldBundle_getFieldN(FB, 1, flds(1), rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out From 6acefa8cb844801965dff752995f2bf9a0f24673 Mon Sep 17 00:00:00 2001 From: "denise.worthen" Date: Fri, 7 Feb 2020 16:23:52 +0000 Subject: [PATCH 11/17] more PET log info printout --- src/module_MEDIATOR.F90 | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/module_MEDIATOR.F90 b/src/module_MEDIATOR.F90 index b3a82edd..18127b73 100644 --- a/src/module_MEDIATOR.F90 +++ b/src/module_MEDIATOR.F90 @@ -3751,6 +3751,8 @@ subroutine MedPhase_prep_atm(gcomp, rc) if (statewrite_flag) then ! write the fields exported to atm to file + write(msgString,'(A,i10)')trim(subname)//trim(': write field_med_to_atm '), is_local%wrap%fastcntr + call ESMF_LogWrite(trim(msgString), ESMF_LOGMSG_INFO, rc=rc) #ifdef FV3_CPLD write(fname,'(a,i6.6)') 'field_med_to_atm_',is_local%wrap%fastcntr call FieldBundle_RWFields_tiles('write',trim(fname),is_local%wrap%FBforAtm,rc=rc) @@ -4762,7 +4764,7 @@ subroutine MedPhase_accum_fast(gcomp, rc) ! if (statewrite_flag) then ! write the fields imported from atm to file - write(msgString,'(A,i10)')trim(subname)//trim(': write field_med_from '), is_local%wrap%fastcntr + write(msgString,'(A,i10)')trim(subname)//trim(': write field_med_from_atm '), is_local%wrap%fastcntr call ESMF_LogWrite(trim(msgString), ESMF_LOGMSG_INFO, rc=rc) #ifdef FV3_CPLD write(fname,'(a,i6.6)') 'field_med_from_atm_',is_local%wrap%fastcntr @@ -4783,6 +4785,8 @@ subroutine MedPhase_accum_fast(gcomp, rc) ! line=__LINE__, file=__FILE__)) return ! bail out #endif ! write the fields imported from ice to file + write(msgString,'(A,i10)')trim(subname)//trim(': write field_med_from_ice '), is_local%wrap%fastcntr + call ESMF_LogWrite(trim(msgString), ESMF_LOGMSG_INFO, rc=rc) call NUOPC_Write(NState_IceImp, & fldsFrIce%shortname(1:fldsFrIce%num), & "field_med_from_ice_", timeslice=is_local%wrap%fastcntr, & @@ -5283,6 +5287,8 @@ subroutine MedPhase_prep_ocn(gcomp, rc) if (statewrite_flag) then ! write the fields imported from ocn to file + write(msgString,'(A,i10)')trim(subname)//trim(': write field_med_from_ocn '), is_local%wrap%slowcntr + call ESMF_LogWrite(trim(msgString), ESMF_LOGMSG_INFO, rc=rc) call NUOPC_Write(NState_OcnImp, & fldsFrOcn%shortname(1:fldsFrOcn%num), & "field_med_from_ocn_", timeslice=is_local%wrap%slowcntr, & From d3ad0c59de45f8bd733641944ea5ed453346097b Mon Sep 17 00:00:00 2001 From: "denise.worthen" Date: Sun, 9 Feb 2020 16:29:20 +0000 Subject: [PATCH 12/17] add ability to write mediator a-o fluxes to file with statewrite_flag --- src/module_MEDIATOR.F90 | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/src/module_MEDIATOR.F90 b/src/module_MEDIATOR.F90 index 18127b73..2a85ddd8 100644 --- a/src/module_MEDIATOR.F90 +++ b/src/module_MEDIATOR.F90 @@ -3749,7 +3749,7 @@ subroutine MedPhase_prep_atm(gcomp, rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out - if (statewrite_flag) then + !if (statewrite_flag) then ! write the fields exported to atm to file write(msgString,'(A,i10)')trim(subname)//trim(': write field_med_to_atm '), is_local%wrap%fastcntr call ESMF_LogWrite(trim(msgString), ESMF_LOGMSG_INFO, rc=rc) @@ -3771,7 +3771,7 @@ subroutine MedPhase_prep_atm(gcomp, rc) ! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & ! line=__LINE__, file=__FILE__)) return ! bail out #endif - endif + !endif if (dbug_flag > 1) then call state_diagnose(NState_AtmExp, trim(subname)//' AtmExp_final ', rc=rc) @@ -5240,6 +5240,7 @@ subroutine MedPhase_prep_ocn(gcomp, rc) real(ESMF_KIND_R8), pointer :: atmwgt1(:,:),icewgt1(:,:),wgtp01(:,:),wgtm01(:,:) real(ESMF_KIND_R8), pointer :: tmp_n1(:,:),tmp_n2(:,:) character(ESMF_MAXSTR) ,pointer :: fieldNameList(:) + type(ESMF_Field) :: aofield integer :: fieldCount logical :: checkOK, checkOK1, checkOK2 character(len=*),parameter :: subname='(module_MEDIATOR:MedPhase_prep_ocn)' @@ -5426,6 +5427,30 @@ subroutine MedPhase_prep_ocn(gcomp, rc) call FieldBundle_diagnose(is_local%wrap%FBforOcn, trim(subname)//' FB4ocn_AFcc ', rc=rc) endif + !--------------------------------------- + !--- write the Mediator Atm-Ocn fluxes + !--------------------------------------- + + !if (statewrite_flag) then + ! write the fields cantaining the mediator fluxes to ocn to file + write(msgString,'(A,i10)')trim(subname)//trim(': write field_aofield_to_ocn '), is_local%wrap%slowcntr + call ESMF_LogWrite(trim(msgString), ESMF_LOGMSG_INFO, rc=rc) + + call ESMF_FieldBundleGet(is_local%wrap%FBAccumAtmOcn, fieldCount=fieldCount, rc=rc) + allocate(fieldNameList(fieldCount)) + call ESMF_FieldBundleGet(is_local%wrap%FBAccumAtmOcn, fieldNameList=fieldNameList, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU,line=__LINE__, file=__FILE__)) return + + do n = 1, fieldCount + call ESMF_FieldBundleGet(is_local%wrap%FBAccumAtmOcn, fieldname=fieldNameList(n), field=aofield, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU,line=__LINE__, file=__FILE__)) return + call ESMF_FieldWrite(aofield,'field_aofield_to_ocn_'//trim(fieldnameList(n))//'.nc', & + timeslice=is_local%wrap%slowcntr, overwrite=.true.,rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU,line=__LINE__, file=__FILE__)) return + end do + deallocate(fieldNameList) + !endif + !--------------------------------------- !--- merges to ocn !--------------------------------------- @@ -6180,8 +6205,8 @@ subroutine FieldBundle_RWFields_tiles(mode,fname,FB,flag,rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out - write(msgString,*) trim(subname)//' fieldCount = ',fieldCount - call ESMF_LogWrite(trim(msgString), ESMF_LOGMSG_INFO, rc=dbrc) + !write(msgString,*) trim(subname)//' fieldCount = ',fieldCount + !call ESMF_LogWrite(trim(msgString), ESMF_LOGMSG_INFO, rc=dbrc) allocate(flds(fieldCount)) From 592373967e6944c6d0ec95c97eb12d09d92ff1f4 Mon Sep 17 00:00:00 2001 From: "denise.worthen" Date: Mon, 10 Feb 2020 19:15:12 +0000 Subject: [PATCH 13/17] return statewrite flags to their default setting --- src/module_MEDIATOR.F90 | 45 +++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/src/module_MEDIATOR.F90 b/src/module_MEDIATOR.F90 index 2a85ddd8..fe7d4ad3 100644 --- a/src/module_MEDIATOR.F90 +++ b/src/module_MEDIATOR.F90 @@ -3749,7 +3749,7 @@ subroutine MedPhase_prep_atm(gcomp, rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out - !if (statewrite_flag) then + if (statewrite_flag) then ! write the fields exported to atm to file write(msgString,'(A,i10)')trim(subname)//trim(': write field_med_to_atm '), is_local%wrap%fastcntr call ESMF_LogWrite(trim(msgString), ESMF_LOGMSG_INFO, rc=rc) @@ -3771,7 +3771,7 @@ subroutine MedPhase_prep_atm(gcomp, rc) ! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & ! line=__LINE__, file=__FILE__)) return ! bail out #endif - !endif + endif if (dbug_flag > 1) then call state_diagnose(NState_AtmExp, trim(subname)//' AtmExp_final ', rc=rc) @@ -4762,7 +4762,7 @@ subroutine MedPhase_accum_fast(gcomp, rc) line=__LINE__, file=__FILE__)) return ! bail out endif -! if (statewrite_flag) then + if (statewrite_flag) then ! write the fields imported from atm to file write(msgString,'(A,i10)')trim(subname)//trim(': write field_med_from_atm '), is_local%wrap%fastcntr call ESMF_LogWrite(trim(msgString), ESMF_LOGMSG_INFO, rc=rc) @@ -4809,7 +4809,7 @@ subroutine MedPhase_accum_fast(gcomp, rc) relaxedFlag=.true., rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out -! endif + endif !--------------------------------------- !--- atm, ice, lnd, hyd accumulator for ocean @@ -5398,10 +5398,10 @@ subroutine MedPhase_prep_ocn(gcomp, rc) line=__LINE__, file=__FILE__)) return ! bail out endif - !if (dbug_flag > 1) then + if (dbug_flag > 1) then call FieldBundle_diagnose(is_local%wrap%FBAtm_o, trim(subname)//' FBAtm_o ', rc=rc) call FieldBundle_diagnose(is_local%wrap%FBIce_o, trim(subname)//' FBIce_o ', rc=rc) - !endif + endif ! tcx Xgrid ! XGrid intermediary required? instantiate FBXgrid FieldBundle? @@ -5415,23 +5415,23 @@ subroutine MedPhase_prep_ocn(gcomp, rc) call fieldBundle_copy(is_local%wrap%FBforOcn, is_local%wrap%FBIce_o, rc=rc) call fieldBundle_copy(is_local%wrap%FBforOcn, is_local%wrap%FBAccumAtmOcn, rc=rc) - !if (dbug_flag > 1) then + if (dbug_flag > 1) then call FieldBundle_diagnose(is_local%wrap%FBforOcn, trim(subname)//' FB4ocn_AFregrid ', rc=rc) - !endif + endif !--------------------------------------- !--- custom calculations to ocn !--------------------------------------- - if (dbug_flag > 1) then - call FieldBundle_diagnose(is_local%wrap%FBforOcn, trim(subname)//' FB4ocn_AFcc ', rc=rc) - endif + !if (dbug_flag > 1) then + ! call FieldBundle_diagnose(is_local%wrap%FBforOcn, trim(subname)//' FB4ocn_AFcc ', rc=rc) + !endif !--------------------------------------- !--- write the Mediator Atm-Ocn fluxes !--------------------------------------- - !if (statewrite_flag) then + if (statewrite_flag) then ! write the fields cantaining the mediator fluxes to ocn to file write(msgString,'(A,i10)')trim(subname)//trim(': write field_aofield_to_ocn '), is_local%wrap%slowcntr call ESMF_LogWrite(trim(msgString), ESMF_LOGMSG_INFO, rc=rc) @@ -5449,7 +5449,7 @@ subroutine MedPhase_prep_ocn(gcomp, rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU,line=__LINE__, file=__FILE__)) return end do deallocate(fieldNameList) - !endif + endif !--------------------------------------- !--- merges to ocn @@ -5676,9 +5676,9 @@ subroutine MedPhase_prep_ocn(gcomp, rc) deallocate(atmwgt,customwgt,atmwgt1,icewgt1,wgtp01) - !if (dbug_flag > 1) then + if (dbug_flag > 1) then call FieldBundle_diagnose(is_local%wrap%FBforOcn, trim(subname)//' FB4ocn_AFmrg ', rc=rc) - !endif + endif endif @@ -5741,7 +5741,7 @@ subroutine MedPhase_prep_ocn(gcomp, rc) call State_diagnose(NState_OcnExp, trim(subname)//' es_AFcp ', rc=rc) endif - !if (statewrite_flag) then + if (statewrite_flag) then ! write the fields exported to ocn to file write(msgString,'(A,i10)')trim(subname)//trim(': write field_med_to_ocn '), is_local%wrap%slowcntr call ESMF_LogWrite(trim(msgString), ESMF_LOGMSG_INFO, rc=rc) @@ -5752,7 +5752,7 @@ subroutine MedPhase_prep_ocn(gcomp, rc) relaxedFlag=.true., rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out - !endif + endif !--------------------------------------- @@ -5790,9 +5790,9 @@ subroutine MedPhase_write_restart(gcomp, rc) character(len=128) :: fname character(len=*),parameter :: subname='(module_MEDIATOR:MedPhase_write_restart)' - !if (dbug_flag > 5) then + if (dbug_flag > 5) then call ESMF_LogWrite(trim(subname)//": called", ESMF_LOGMSG_INFO, rc=dbrc) - !endif + endif rc = ESMF_SUCCESS if (restart_interval > 0) then @@ -5847,18 +5847,15 @@ subroutine Finalize(gcomp, importState, exportState, clock, rc) integer :: stat character(len=*),parameter :: subname='(module_MEDIATOR:Finalize)' - !if (dbug_flag > 5) then + if (dbug_flag > 5) then call ESMF_LogWrite(trim(subname)//": called", ESMF_LOGMSG_INFO, rc=dbrc) - !endif + endif rc = ESMF_SUCCESS call Mediator_restart(gcomp,'write','mediator',rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out - write(msgString,*) trim(subname)//' restart at Finalize' - call ESMF_LogWrite(msgString, ESMF_LOGMSG_INFO, rc=dbrc) - ! Get the internal state from Component. nullify(is_local%wrap) call ESMF_GridCompGetInternalState(gcomp, is_local, rc) From fd0cd6988c139487a826e4cd15caee47315a8d67 Mon Sep 17 00:00:00 2001 From: "denise.worthen" Date: Sun, 16 Feb 2020 08:42:40 -0700 Subject: [PATCH 14/17] mediator aborts if a required mediator restart file does not exist --- src/module_MEDIATOR.F90 | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/module_MEDIATOR.F90 b/src/module_MEDIATOR.F90 index fe7d4ad3..78a933bf 100644 --- a/src/module_MEDIATOR.F90 +++ b/src/module_MEDIATOR.F90 @@ -6135,6 +6135,12 @@ subroutine FieldBundle_RWFields(mode,fname,FB,flag,rc) call fieldBundle_diagnose(FB, 'write '//trim(fname), rc) elseif (mode == 'read') then inquire(file=fname,exist=fexists) + + if(.not.fexists)then + call ESMF_LogWrite(trim(fname)//' does not exist', ESMF_LOGMSG_INFO, rc=dbrc) + call ESMF_Finalize(endflag=ESMF_END_ABORT) + endif + if (fexists) then call ESMF_LogWrite(trim(subname)//": read "//trim(fname), ESMF_LOGMSG_INFO, rc=dbrc) !----------------------------------------------------------------------------------------------------- @@ -6236,6 +6242,12 @@ subroutine FieldBundle_RWFields_tiles(mode,fname,FB,flag,rc) elseif (mode == 'read') then fname_tile1='mediator_FBAtm_a_restart.tile1.nc' inquire(file=fname_tile1,exist=fexists) + + if(.not.fexists)then + call ESMF_LogWrite(trim(fname_tile1)//' does not exist', ESMF_LOGMSG_INFO, rc=dbrc) + call ESMF_Finalize(endflag=ESMF_END_ABORT) + endif + if (fexists) then call ESMF_LogWrite(trim(subname)//": read "//trim(fname)// & From 16cc11a5f2b8f31bbe57a9cb8d4ed039f806175f Mon Sep 17 00:00:00 2001 From: "denise.worthen" Date: Sun, 16 Feb 2020 10:58:14 -0700 Subject: [PATCH 15/17] add condition of 'not coldstart' to mediator abort when mediator restart files are missing --- src/module_MEDIATOR.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/module_MEDIATOR.F90 b/src/module_MEDIATOR.F90 index 78a933bf..5241cc6b 100644 --- a/src/module_MEDIATOR.F90 +++ b/src/module_MEDIATOR.F90 @@ -6136,7 +6136,7 @@ subroutine FieldBundle_RWFields(mode,fname,FB,flag,rc) elseif (mode == 'read') then inquire(file=fname,exist=fexists) - if(.not.fexists)then + if(.not.fexists .and. .not. coldstart)then call ESMF_LogWrite(trim(fname)//' does not exist', ESMF_LOGMSG_INFO, rc=dbrc) call ESMF_Finalize(endflag=ESMF_END_ABORT) endif @@ -6243,7 +6243,7 @@ subroutine FieldBundle_RWFields_tiles(mode,fname,FB,flag,rc) fname_tile1='mediator_FBAtm_a_restart.tile1.nc' inquire(file=fname_tile1,exist=fexists) - if(.not.fexists)then + if(.not.fexists .and. .not. coldstart)then call ESMF_LogWrite(trim(fname_tile1)//' does not exist', ESMF_LOGMSG_INFO, rc=dbrc) call ESMF_Finalize(endflag=ESMF_END_ABORT) endif From 101d1093dd4a70a6cb66629829aa6c153328db06 Mon Sep 17 00:00:00 2001 From: "denise.worthen" Date: Sun, 16 Feb 2020 22:01:56 +0000 Subject: [PATCH 16/17] change sw field names from cice --- src/module_EARTH_GRID_COMP.F90 | 46 +++++++++++++++++++++++++++++++++- src/module_MEDIATOR.F90 | 16 ++++++------ 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/src/module_EARTH_GRID_COMP.F90 b/src/module_EARTH_GRID_COMP.F90 index 6cac85ea..66d0945a 100644 --- a/src/module_EARTH_GRID_COMP.F90 +++ b/src/module_EARTH_GRID_COMP.F90 @@ -1318,7 +1318,51 @@ SUBROUTINE EARTH_REGISTER(EARTH_GRID_COMP,RC_REG) line=__LINE__, & file=__FILE__)) & return ! bail out - endif + endif + if (.not. NUOPC_FieldDictionaryHasEntry( & + "mean_sw_pen_to_ocn_vis_dir_flx")) then + call NUOPC_FieldDictionaryAddEntry( & + standardName="mean_sw_pen_to_ocn_vis_dir_flx", & + canonicalUnits="W m-2", & + rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + endif + if (.not. NUOPC_FieldDictionaryHasEntry( & + "mean_sw_pen_to_ocn_vis_dif_flx")) then + call NUOPC_FieldDictionaryAddEntry( & + standardName="mean_sw_pen_to_ocn_vis_dif_flx", & + canonicalUnits="W m-2", & + rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + endif + if (.not. NUOPC_FieldDictionaryHasEntry( & + "mean_sw_pen_to_ocn_ir_dir_flx")) then + call NUOPC_FieldDictionaryAddEntry( & + standardName="mean_sw_pen_to_ocn_ir_dir_flx", & + canonicalUnits="W m-2", & + rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + endif + if (.not. NUOPC_FieldDictionaryHasEntry( & + "mean_sw_pen_to_ocn_ir_dif_flx")) then + call NUOPC_FieldDictionaryAddEntry( & + standardName="mean_sw_pen_to_ocn_ir_dif_flx", & + canonicalUnits="W m-2", & + rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + endif if (.not. NUOPC_FieldDictionaryHasEntry( & "inst_ir_dir_albedo")) then call NUOPC_FieldDictionaryAddEntry( & diff --git a/src/module_MEDIATOR.F90 b/src/module_MEDIATOR.F90 index 5241cc6b..16a4d73f 100644 --- a/src/module_MEDIATOR.F90 +++ b/src/module_MEDIATOR.F90 @@ -747,10 +747,10 @@ subroutine SetServices(gcomp, rc) ! call fld_list_add(fldsFrIce,"stress_on_ocn_ice_idir" , "will provide","copy") ! call fld_list_add(fldsFrIce,"stress_on_ocn_ice_jdir" , "will provide","copy") call fld_list_add(fldsFrIce,"mean_sw_pen_to_ocn" , "will provide","conservefrac") - call fld_list_add(fldsFrIce,"mean_net_sw_vis_dir_flx" , "will provide","conservefrac") - call fld_list_add(fldsFrIce,"mean_net_sw_vis_dif_flx" , "will provide","conservefrac") - call fld_list_add(fldsFrIce,"mean_net_sw_ir_dir_flx" , "will provide","conservefrac") - call fld_list_add(fldsFrIce,"mean_net_sw_ir_dif_flx" , "will provide","conservefrac") + call fld_list_add(fldsFrIce,"mean_sw_pen_to_ocn_vis_dir_flx" , "will provide","conservefrac") + call fld_list_add(fldsFrIce,"mean_sw_pen_to_ocn_vis_dif_flx" , "will provide","conservefrac") + call fld_list_add(fldsFrIce,"mean_sw_pen_to_ocn_ir_dir_flx" , "will provide","conservefrac") + call fld_list_add(fldsFrIce,"mean_sw_pen_to_ocn_ir_dif_flx" , "will provide","conservefrac") call fld_list_add(fldsFrIce,"mean_up_lw_flx_ice" , "will provide","conservefrac") call fld_list_add(fldsFrIce,"mean_sensi_heat_flx_atm_into_ice", "will provide","conservefrac") call fld_list_add(fldsFrIce,"mean_laten_heat_flx_atm_into_ice", "will provide","conservefrac") @@ -5644,28 +5644,28 @@ subroutine MedPhase_prep_ocn(gcomp, rc) call fieldBundle_FieldMerge(is_local%wrap%FBforOcn,'mean_net_sw_vis_dir_flx' , & is_local%wrap%FBAtm_o ,'mean_down_sw_vis_dir_flx',customwgt, & - is_local%wrap%FBIce_o ,'mean_net_sw_vis_dir_flx' ,icewgt, & + is_local%wrap%FBIce_o ,'mean_sw_pen_to_ocn_vis_dir_flx' ,icewgt, & rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out call fieldBundle_FieldMerge(is_local%wrap%FBforOcn,'mean_net_sw_vis_dif_flx' , & is_local%wrap%FBAtm_o ,'mean_down_sw_vis_dif_flx',customwgt, & - is_local%wrap%FBIce_o ,'mean_net_sw_vis_dif_flx',icewgt, & + is_local%wrap%FBIce_o ,'mean_sw_pen_to_ocn_vis_dif_flx',icewgt, & rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out call fieldBundle_FieldMerge(is_local%wrap%FBforOcn,'mean_net_sw_ir_dir_flx' , & is_local%wrap%FBAtm_o ,'mean_down_sw_ir_dir_flx',customwgt, & - is_local%wrap%FBIce_o ,'mean_net_sw_ir_dir_flx',icewgt, & + is_local%wrap%FBIce_o ,'mean_sw_pen_to_ocn_ir_dir_flx',icewgt, & rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out call fieldBundle_FieldMerge(is_local%wrap%FBforOcn,'mean_net_sw_ir_dif_flx' , & is_local%wrap%FBAtm_o ,'mean_down_sw_ir_dif_flx',customwgt, & - is_local%wrap%FBIce_o ,'mean_net_sw_ir_dif_flx',icewgt, & + is_local%wrap%FBIce_o ,'mean_sw_pen_to_ocn_ir_dif_flx',icewgt, & rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=__FILE__)) return ! bail out From 48debb8ead6cc2e958559cec414bb9c040b4cfa1 Mon Sep 17 00:00:00 2001 From: "denise.worthen" Date: Wed, 26 Feb 2020 14:39:19 +0000 Subject: [PATCH 17/17] Add capablilty to build the CMEPS mediator in place of the NEMS mediator using 'ifdef CMEPS' conditionals in module_EARTH_GRID_COMP.F90 If CMEPS is built, the NUOPC field contained in parm/fd.yaml will be used. --- src/GNUmakefile | 4 + src/incmake/component_CICE.mk | 7 + src/incmake/component_CMEPS.mk | 47 ++++ src/incmake/component_MOM6.mk | 7 + src/module_EARTH_GRID_COMP.F90 | 413 ++++++++++++++++++++++++++++++++- 5 files changed, 471 insertions(+), 7 deletions(-) create mode 100644 src/incmake/component_CMEPS.mk diff --git a/src/GNUmakefile b/src/GNUmakefile index 4032717d..78637cc3 100644 --- a/src/GNUmakefile +++ b/src/GNUmakefile @@ -74,6 +74,10 @@ $(foreach COMP,$(COMP_LINK_ORDER),$(eval $(call comp_template,$(COMP)))) CPPFLAGS += $(DEP_FRONTS) +ifneq (,$(findstring CMEPS,$(COMPONENTS))) +CPPFLAGS += -DCMEPS +endif + TARGET = ../exe/NEMS.x ifneq (,$(findstring MACOSX,$(CPPDEFS))) diff --git a/src/incmake/component_CICE.mk b/src/incmake/component_CICE.mk index 007b816a..3e44d4a4 100644 --- a/src/incmake/component_CICE.mk +++ b/src/incmake/component_CICE.mk @@ -16,6 +16,12 @@ NEMS_GRID?=T126_mx5 $(call require_dir,$(CICE_SRCDIR),CICE source directory) $(call require_dir,$(ROOTDIR)/CICE_CAP,CICE cap directory) +ifneq (,$(findstring CMEPS,$(COMPONENTS))) +CPPCMEPS = -DCMEPS +else +CPPCMEPS = +endif + CICE_ALL_OPTS=\ COMP_SRCDIR=$(CICE_SRCDIR) \ COMP_BINDIR=$(CICE_BINDIR) \ @@ -23,6 +29,7 @@ CICE_ALL_OPTS=\ SYSTEM_USERDIR="$(CICE_SRCDIR)" \ SRCDIR="$(CICE_SRCDIR)" \ EXEDIR="$(CICE_SRCDIR)" \ + CPPCMEPS="$(CPPCMEPS)" \ NEMS_GRID="$(NEMS_GRID)" ######################################################################## diff --git a/src/incmake/component_CMEPS.mk b/src/incmake/component_CMEPS.mk new file mode 100644 index 00000000..fcdc9c06 --- /dev/null +++ b/src/incmake/component_CMEPS.mk @@ -0,0 +1,47 @@ +# Location of the ESMF makefile fragment for this component: +cmeps_mk = $(CMEPS_BINDIR)/cmeps.mk +all_component_mk_files+=$(cmeps_mk) + +# Location of source code and installation +CMEPS_SRCDIR?=$(ROOTDIR)/CMEPS +CMEPS_BINDIR?=$(ROOTDIR)/CMEPS_INSTALL + +# Make sure the expected directories exist and are non-empty: +$(call require_dir,$(CMEPS_SRCDIR),CMEPS source directory) + +ifndef CONFIGURE_NEMS_FILE +$(error CONFIGURE_NEMS_FILE not set.) +endif + +include $(CONFIGURE_NEMS_FILE) + +# Rule for building this component: +build_CMEPS: $(cmeps_mk) + +CMEPS_ALL_OPTS=\ + COMP_SRCDIR="$(CMEPS_SRCDIR)" \ + COMP_BINDIR="$(CMEPS_BINDIR)" \ + MACHINE_ID="$(MACHINE_ID)" \ + FC="$(FC)" \ + CC="$(CC)" \ + CXX="$(CXX)" + +$(cmeps_mk): configure + $(MODULE_LOGIC) ; export $(CMEPS_ALL_OPTS) ; \ + set -e ; \ + $(MODULE_LOGIC) ; cd $(CMEPS_SRCDIR) ; \ + exec $(MAKE) $(CMEPS_ALL_OPTS) \ + "INSTALLDIR=$(CMEPS_BINDIR)" install + test -d "$(CMEPS_BINDIR)" + test -s "$(cmeps_mk)" + +# Rule for cleaning the SRCDIR and BINDIR: +clean_CMEPS: + $(MODULE_LOGIC) ; export $(CMEPS_ALL_OPTS) ; \ + set -e ; \ + cd $(CMEPS_SRCDIR) ; \ + exec $(MAKE) clean + +distclean_CMEPS: clean_CMEPS + rm -rf $(CMEPS_BINDIR) + rm -f $(cmeps_mk) diff --git a/src/incmake/component_MOM6.mk b/src/incmake/component_MOM6.mk index 69ba3586..0b03dee4 100644 --- a/src/incmake/component_MOM6.mk +++ b/src/incmake/component_MOM6.mk @@ -12,10 +12,17 @@ $(call require_dir,$(MOM6_SRCDIR),MOM6 source directory) # Rule for building this component: build_MOM6: $(mom6_mk) +ifneq (,$(findstring CMEPS,$(COMPONENTS))) +CPPCMEPS = -DCMEPS +else +CPPCMEPS = +endif + MOM6_ALL_OPTS=\ COMP_SRCDIR="$(MOM6_SRCDIR)" \ COMP_BINDIR="$(MOM6_BINDIR)" \ FMS_BINDIR="$(FMS_BINDIR)" \ + CPPCMEPS="$(CPPCMEPS)" \ MACHINE_ID="$(FULL_MACHINE_ID)" # Workaround: if MOM6 is built twice, it fails because files in diff --git a/src/module_EARTH_GRID_COMP.F90 b/src/module_EARTH_GRID_COMP.F90 index 66d0945a..8da83de3 100644 --- a/src/module_EARTH_GRID_COMP.F90 +++ b/src/module_EARTH_GRID_COMP.F90 @@ -150,7 +150,11 @@ MODULE module_EARTH_GRID_COMP use FRONT_GSDCHEM, only: GSDCHEM_SS => SetServices #endif ! - Mediator +#ifdef CMEPS + use MED, only : MED_SS => SetServices +#else use module_MEDIATOR, only: MED_SS => SetServices +#endif use module_MEDSpaceWeather, only: MEDSW_SS => SetServices USE module_EARTH_INTERNAL_STATE,ONLY: EARTH_INTERNAL_STATE & @@ -279,6 +283,13 @@ SUBROUTINE EARTH_REGISTER(EARTH_GRID_COMP,RC_REG) !TODO: In the long run this section will not be needed when we have !TODO: absorbed the needed standard names into the default dictionary. ! -> 20 fields identified as exports by the GSM component +#ifdef CMEPS + call NUOPC_FieldDictionarySetup("fd.yaml", rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out +#else if (.not.NUOPC_FieldDictionaryHasEntry( & "air_density_height_lowest")) then call NUOPC_FieldDictionaryAddEntry( & @@ -587,6 +598,7 @@ SUBROUTINE EARTH_REGISTER(EARTH_GRID_COMP,RC_REG) file=__FILE__)) & return ! bail out endif + !For MOM6 and WW3 variables to match: if (.not.NUOPC_FieldDictionaryHasEntry( & "eastward_partitioned_stokes_drift_1")) then @@ -598,7 +610,7 @@ SUBROUTINE EARTH_REGISTER(EARTH_GRID_COMP,RC_REG) line=__LINE__, & file=__FILE__)) & return ! bail out - endif + endif if (.not.NUOPC_FieldDictionaryHasEntry( & "northward_partitioned_stokes_drift_1")) then @@ -611,6 +623,7 @@ SUBROUTINE EARTH_REGISTER(EARTH_GRID_COMP,RC_REG) file=__FILE__)) & return ! bail out endif + if (.not.NUOPC_FieldDictionaryHasEntry( & "eastward_partitioned_stokes_drift_2")) then call NUOPC_FieldDictionaryAddEntry( & @@ -622,6 +635,7 @@ SUBROUTINE EARTH_REGISTER(EARTH_GRID_COMP,RC_REG) file=__FILE__)) & return ! bail out endif + if (.not.NUOPC_FieldDictionaryHasEntry( & "northward_partitioned_stokes_drift_2")) then call NUOPC_FieldDictionaryAddEntry( & @@ -633,6 +647,9 @@ SUBROUTINE EARTH_REGISTER(EARTH_GRID_COMP,RC_REG) file=__FILE__)) & return ! bail out endif + + + if (.not.NUOPC_FieldDictionaryHasEntry( & "eastward_partitioned_stokes_drift_3")) then call NUOPC_FieldDictionaryAddEntry( & @@ -657,6 +674,7 @@ SUBROUTINE EARTH_REGISTER(EARTH_GRID_COMP,RC_REG) return ! bail out endif ! end of MOM6 and WW3 variables to match + if (.not.NUOPC_FieldDictionaryHasEntry( & "inst_temp_height_surface")) then call NUOPC_FieldDictionaryAddEntry( & @@ -3281,6 +3299,7 @@ SUBROUTINE EARTH_REGISTER(EARTH_GRID_COMP,RC_REG) file=__FILE__)) & return ! bail out endif +#endif !----------------------------------------------------------------------- ! @@ -3292,6 +3311,9 @@ END SUBROUTINE EARTH_REGISTER ! subroutine SetModelServices(driver, rc) +#ifdef CMEPS + use med_internalstate_mod , only : med_id +#endif type(ESMF_GridComp) :: driver integer, intent(out) :: rc @@ -3309,7 +3331,12 @@ subroutine SetModelServices(driver, rc) integer :: petListBounds(2) integer :: componentCount type(NUOPC_FreeFormat) :: attrFF, fdFF - +#ifdef CMEPS + logical :: read_restart + character(ESMF_MAXSTR) :: cvalue + character(len=5) :: inst_suffix + logical :: isPresent +#endif rc = ESMF_SUCCESS ! query the Component for info @@ -3383,7 +3410,38 @@ subroutine SetModelServices(driver, rc) label="EARTH_component_list:", count=componentCount, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & line=__LINE__, file=trim(name)//":"//__FILE__)) return ! bail out - + +#ifdef CMEPS + ! get file suffix + call NUOPC_CompAttributeGet(driver, name="inst_suffix", isPresent=isPresent, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, file=trim(name)//":"//__FILE__)) return ! bail out + if (isPresent) then + call NUOPC_CompAttributeGet(driver, name="inst_suffix", value=inst_suffix, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, file=trim(name)//":"//__FILE__)) return ! bail out + else + inst_suffix = "" + endif + + ! obtain driver attributes (for CMEPS) + call ReadAttributes(driver, config, "DRIVER_attributes::", formatprint=.true., rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, file=trim(name)//":"//__FILE__)) return ! bail out + + call ReadAttributes(driver, config, "FLDS_attributes::", formatprint=.true., rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, file=trim(name)//":"//__FILE__)) return ! bail out + + call ReadAttributes(driver, config, "CLOCK_attributes::", formatprint=.true., rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, file=trim(name)//":"//__FILE__)) return ! bail out + + call ReadAttributes(driver, config, "ALLCOMP_attributes::", formatprint=.true., rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, file=trim(name)//":"//__FILE__)) return ! bail out +#endif + ! determine information for each component and add to the driver do i=1, componentCount ! construct component prefix @@ -3416,7 +3474,7 @@ subroutine SetModelServices(driver, rc) do j=petListBounds(1), petListBounds(2) petList(j-petListBounds(1)+1) = j ! PETs are 0 based enddo - + if (trim(model) == "satm") then #ifdef FRONT_SATM call NUOPC_DriverAddComp(driver, trim(prefix), SATM_SS, & @@ -3791,7 +3849,7 @@ subroutine SetModelServices(driver, rc) write (msg, *) "Model '", trim(model), "' was requested, "// & "but is not available in the executable!" call ESMF_LogSetError(ESMF_RC_NOT_VALID, msg=msg, line=__LINE__, & - file=__FILE__, rcToReturn=rc) + file=__FILE__, rcToReturn=rc) return ! bail out #endif elseif (trim(model) == "wrfhydro") then @@ -3822,6 +3880,9 @@ subroutine SetModelServices(driver, rc) #endif ! - Two mediator choices currently built into NEMS from internal elseif (trim(model) == "nems") then +#ifdef CMEPS + med_id = i+1 +#endif call NUOPC_DriverAddComp(driver, trim(prefix), MED_SS, & petList=petList, comp=comp, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & @@ -3854,9 +3915,19 @@ subroutine SetModelServices(driver, rc) ! clean-up deallocate(petList) - + +#ifdef CMEPS + ! Perform restarts if appropriate + call InitRestart(driver, rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, file=trim(name)//":"//__FILE__)) return ! bail out + + call AddAttributes(comp, driver, config, i+1, trim(prefix), inst_suffix, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, file=trim(name)//":"//__FILE__)) return ! bail out +#endif enddo - + #if ESMF_VERSION_MAJOR < 8 !TODOgjt: REMOVE THIS BLOCK ONCE SHOWN TO WORK WITHOUT ! SetServices for Connectors @@ -4329,6 +4400,334 @@ recursive subroutine ModifyCplLists(driver, importState, exportState, clock, & end subroutine !----------------------------------------------------------------------------- + +#ifdef CMEPS + subroutine ReadAttributes(gcomp, config, label, relaxedflag, formatprint, rc) + + use ESMF , only : ESMF_GridComp, ESMF_Config, ESMF_LogWrite, ESMF_LOGMSG_INFO, ESMF_SUCCESS + use NUOPC , only : NUOPC_FreeFormatCreate, NUOPC_CompAttributeIngest + use NUOPC , only : NUOPC_FreeFormatDestroy, NUOPC_FreeFormat + + ! input/output arguments + type(ESMF_GridComp) , intent(inout) :: gcomp + type(ESMF_Config) , intent(in) :: config + character(len=*) , intent(in) :: label + logical , intent(in), optional :: relaxedflag + logical , intent(in), optional :: formatprint + integer , intent(inout) :: rc + + ! local variables + type(NUOPC_FreeFormat) :: attrFF + character(len=*), parameter :: subname = "(module_EARTH_GRID_COMP.F90:ReadAttributes)" + !------------------------------------------- + + rc = ESMF_SUCCESS + + if (present(relaxedflag)) then + attrFF = NUOPC_FreeFormatCreate(config, label=trim(label), relaxedflag=.true., rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + else + attrFF = NUOPC_FreeFormatCreate(config, label=trim(label), rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + end if + + call NUOPC_CompAttributeIngest(gcomp, attrFF, addFlag=.true., rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + + call NUOPC_FreeFormatDestroy(attrFF, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + + end subroutine ReadAttributes + + subroutine InitRestart(driver, rc) + + !----------------------------------------------------- + ! Determine if will restart and read pointer file if appropriate + !----------------------------------------------------- + + use ESMF , only : ESMF_GridComp, ESMF_VM, ESMF_GridCompGet, ESMF_VMGet, ESMF_SUCCESS + use ESMF , only : ESMF_LogSetError, ESMF_LogWrite, ESMF_LOGMSG_INFO, ESMF_RC_NOT_VALID + use NUOPC , only : NUOPC_CompAttributeGet, NUOPC_CompAttributeSet, NUOPC_CompAttributeAdd + + ! input/output variables + type(ESMF_GridComp) , intent(inout) :: driver + integer , intent(out) :: rc + + ! local variables + logical :: read_restart ! read the restart file, based on start_type + character(len=ESMF_MAXSTR) :: cvalue ! temporary + character(len=ESMF_MAXSTR) :: rest_case_name ! Short case identification + character(len=*) , parameter :: subname = "(module_EARTH_GRID_COMP.F90:InitRestart)" + !------------------------------------------- + + rc = ESMF_SUCCESS + call ESMF_LogWrite(trim(subname)//": called", ESMF_LOGMSG_INFO, rc=rc) + + !----------------------------------------------------- + ! Carry out restart if appropriate + !----------------------------------------------------- + + read_restart = IsRestart(driver, rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + + ! Add rest_case_name and read_restart to driver attributes + call NUOPC_CompAttributeAdd(driver, attrList=(/'rest_case_name','read_restart '/), rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + + rest_case_name = ' ' + call NUOPC_CompAttributeSet(driver, name='rest_case_name', value=rest_case_name, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + + write(cvalue,*) read_restart + call NUOPC_CompAttributeSet(driver, name='read_restart', value=trim(cvalue), rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + + end subroutine InitRestart + + function IsRestart(gcomp, rc) + + use ESMF , only : ESMF_GridComp, ESMF_SUCCESS + use ESMF , only : ESMF_LogSetError, ESMF_LogWrite, ESMF_LOGMSG_INFO, ESMF_RC_NOT_VALID + use NUOPC , only : NUOPC_CompAttributeGet + + ! input/output variables + logical :: IsRestart + type(ESMF_GridComp) , intent(inout) :: gcomp + integer , intent(out) :: rc + + ! locals + character(len=ESMF_MAXSTR) :: start_type ! Type of startup + character(len=ESMF_MAXSTR) :: msgstr + character(len=*) , parameter :: start_type_start = "startup" + character(len=*) , parameter :: start_type_cont = "continue" + character(len=*) , parameter :: start_type_brnch = "branch" + character(len=*) , parameter :: subname = "(module_EARTH_GRID_COMP.F90:IsRestart)" + !--------------------------------------- + + rc = ESMF_SUCCESS + + ! First Determine if restart is read + call NUOPC_CompAttributeGet(gcomp, name='start_type', value=start_type, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + + if ((trim(start_type) /= start_type_start) .and. & + (trim(start_type) /= start_type_cont ) .and. & + (trim(start_type) /= start_type_brnch)) then + write (msgstr, *) subname//': start_type invalid = '//trim(start_type) + call ESMF_LogSetError(ESMF_RC_NOT_VALID, msg=msgstr, line=__LINE__, file=__FILE__, rcToReturn=rc) + return + end if + + !TODO: this is hard-wired to CIME start/continue types in terms of gcomp + IsRestart = .false. + if (trim(start_type) == trim(start_type_cont) .or. trim(start_type) == trim(start_type_brnch)) then + IsRestart = .true. + end if + + end function IsRestart + + subroutine AddAttributes(gcomp, driver, config, compid, compname, inst_suffix, rc) + + ! Add specific set of attributes to components from driver attributes + + use ESMF , only : ESMF_GridComp, ESMF_Config, ESMF_LogWrite, ESMF_LOGMSG_INFO, ESMF_SUCCESS + use ESMF , only : ESMF_LogFoundAllocError, ESMF_ConfigGetLen, ESMF_ConfigGetAttribute + use NUOPC , only : NUOPC_CompAttributeAdd, NUOPC_CompAttributeGet, NUOPC_CompAttributeSet + + ! input/output parameters + type(ESMF_GridComp) , intent(inout) :: gcomp + type(ESMF_GridComp) , intent(in) :: driver + type(ESMF_Config) , intent(inout) :: config + integer , intent(in) :: compid + character(len=*) , intent(in) :: compname + character(len=*) , intent(in) :: inst_suffix + integer , intent(inout) :: rc + + ! local variables + integer :: n + integer :: stat + integer :: inst_index + logical :: is_present + character(len=ESMF_MAXSTR) :: cvalue + character(len=32), allocatable :: compLabels(:) + character(len=32), allocatable :: attrList(:) + integer :: componentCount + character(len=*), parameter :: subname = "(module_EARTH_GRID_COMP.F90:AddAttributes)" + logical :: lvalue = .false. + !------------------------------------------- + + rc = ESMF_Success + call ESMF_LogWrite(trim(subname)//": called", ESMF_LOGMSG_INFO) + + !------ + ! Add compid to gcomp attributes + !------ + !write(cvalue,*) compid + !call NUOPC_CompAttributeAdd(gcomp, attrList=(/'MCTID'/), rc=rc) + !if (chkerr(rc,__LINE__,u_FILE_u)) return + !call NUOPC_CompAttributeSet(gcomp, name='MCTID', value=trim(cvalue), rc=rc) + !if (chkerr(rc,__LINE__,u_FILE_u)) return + + !------ + ! Add all the other attributes in AttrList (which have already been added to driver attributes) + !------ + !allocate(attrList(5)) + !attrList = (/"read_restart", "orb_eccen ", "orb_obliqr ", "orb_lambm0 ", "orb_mvelpp "/) + ! TODO: orb_obliqr and orb_lambm0 not exist + allocate(attrList(1)) + attrList = (/"read_restart"/) + + call NUOPC_CompAttributeAdd(gcomp, attrList=attrList, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + + do n = 1,size(attrList) + if (trim(attrList(n)) == "read_restart") then + call NUOPC_CompAttributeGet(driver, name="mediator_read_restart", value=cvalue, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + + read(cvalue,*) lvalue + + if (.not. lvalue) then + call NUOPC_CompAttributeGet(driver, name=trim(attrList(n)), value=cvalue, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + end if + + call NUOPC_CompAttributeSet(gcomp, name=trim(attrList(n)), value=trim(cvalue), rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + else + print*, trim(attrList(n)) + call NUOPC_CompAttributeGet(driver, name=trim(attrList(n)), value=cvalue, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + call NUOPC_CompAttributeSet(gcomp, name=trim(attrList(n)), value=trim(cvalue), rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + end if + enddo + deallocate(attrList) + + !------ + ! Add component specific attributes + !------ + call ReadAttributes(gcomp, config, trim(compname)//"_attributes::", rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + + call ReadAttributes(gcomp, config, "ALLCOMP_attributes::", rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + + call ReadAttributes(gcomp, config, trim(compname)//"_modelio"//trim(inst_suffix)//"::", rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + + call ReadAttributes(gcomp, config, "CLOCK_attributes::", rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + + !------ + ! Add mediator specific attributes + !------ + if (compname == 'MED') then + call ReadAttributes(gcomp, config, "MED_history_attributes::", rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + + call ReadAttributes(gcomp, config, "FLDS_attributes::", rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + endif + + !------ + ! Add multi-instance specific attributes + !------ + call NUOPC_CompAttributeAdd(gcomp, attrList=(/'inst_index'/), rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + + ! add inst_index attribute (inst_index is not required for cime internal components) + ! for now hard-wire inst_index to 1 + inst_index = 1 + write(cvalue,*) inst_index + call NUOPC_CompAttributeSet(gcomp, name='inst_index', value=trim(cvalue), rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + + ! add inst_suffix attribute + if (len_trim(inst_suffix) > 0) then + call NUOPC_CompAttributeAdd(gcomp, attrList=(/'inst_suffix'/), rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + call NUOPC_CompAttributeSet(gcomp, name='inst_suffix', value=inst_suffix, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__)) & + return ! bail out + end if + + end subroutine AddAttributes +#endif ! !----------------------------------------------------------------------- !