From 39e6b188fec41f9fd2219e4cd5cb2a75c94f694e Mon Sep 17 00:00:00 2001 From: James Edwards Date: Wed, 30 Aug 2023 14:34:57 -0600 Subject: [PATCH] now functional for F case --- mediator/med_enthalpy_mod.F90 | 6 +++++- mediator/med_internalstate_mod.F90 | 5 ++++- mediator/med_phases_prep_atm_mod.F90 | 9 +++++---- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/mediator/med_enthalpy_mod.F90 b/mediator/med_enthalpy_mod.F90 index 5799e0993..f7b5605da 100644 --- a/mediator/med_enthalpy_mod.F90 +++ b/mediator/med_enthalpy_mod.F90 @@ -6,7 +6,7 @@ module med_enthalpy_mod use med_utils_mod , only : chkerr => med_utils_ChkErr use med_methods_mod , only : FB_fldchk => med_methods_FB_FldChk use med_methods_mod , only : FB_GetFldPtr => med_methods_FB_GetFldPtr - use med_internalstate_mod, only : compocn, compatm, InternalState + use med_internalstate_mod, only : compocn, compatm, comprof, InternalState use perf_mod, only : t_startf, t_stopf @@ -110,6 +110,8 @@ subroutine med_compute_enthalpy(is_local, rc) call FB_GetFldPtr(is_local%wrap%FBExp(compocn), 'Foxx_rofl' , rofl, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return else + call FB_GetFldPtr(is_local%wrap%FBImp(comprof, comprof), 'Forr_rofl', rofl, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return endif if(FB_fldchk(is_local%wrap%FBExp(compocn), 'Foxx_hrofl', rc)) then call FB_GetFldPtr(is_local%wrap%FBExp(compocn), 'Foxx_hrofl', hrofl, rc=rc) @@ -122,6 +124,8 @@ subroutine med_compute_enthalpy(is_local, rc) call FB_GetFldPtr(is_local%wrap%FBExp(compocn), 'Foxx_rofi' , rofi, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return else + call FB_GetFldPtr(is_local%wrap%FBImp(comprof, comprof), 'Forr_rofi', rofi, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return endif if(FB_fldchk(is_local%wrap%FBExp(compocn), 'Foxx_hrofi', rc)) then call FB_GetFldPtr(is_local%wrap%FBExp(compocn), 'Foxx_hrofi', hrofi, rc=rc) diff --git a/mediator/med_internalstate_mod.F90 b/mediator/med_internalstate_mod.F90 index 66e2eb1db..9d6029b1f 100644 --- a/mediator/med_internalstate_mod.F90 +++ b/mediator/med_internalstate_mod.F90 @@ -125,7 +125,8 @@ module med_internalstate_mod logical :: ocn2glc_coupling = .false. ! obtained from attribute logical :: lnd2glc_coupling = .false. logical :: accum_lnd2glc = .false. - + logical :: docn_present ! aoflux calc requires med_coupling_active true even for docn + ! so we need an additional flag ! Mediator vm type(ESMF_VM) :: vm @@ -282,8 +283,10 @@ subroutine med_internalstate_init(gcomp, rc) end if call NUOPC_CompAttributeGet(gcomp, name='OCN_model', value=ocn_name, isPresent=isPresent, isSet=isSet, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return + is_local%wrap%docn_present = .false. if (isPresent .and. isSet) then if (trim(ocn_name) /= 'socn') is_local%wrap%comp_present(compocn) = .true. + if (trim(ocn_name) == 'docn') is_local%wrap%docn_present = .true. end if call NUOPC_CompAttributeGet(gcomp, name='ICE_model', value=ice_name, isPresent=isPresent, isSet=isSet, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return diff --git a/mediator/med_phases_prep_atm_mod.F90 b/mediator/med_phases_prep_atm_mod.F90 index b1d9878ba..5d8826908 100644 --- a/mediator/med_phases_prep_atm_mod.F90 +++ b/mediator/med_phases_prep_atm_mod.F90 @@ -7,7 +7,7 @@ module med_phases_prep_atm_mod use med_kind_mod , only : CX=>SHR_KIND_CX, CS=>SHR_KIND_CS, CL=>SHR_KIND_CL, R8=>SHR_KIND_R8 use ESMF , only : ESMF_LogWrite, ESMF_LOGMSG_INFO, ESMF_SUCCESS use ESMF , only : ESMF_Field, ESMF_FieldGet, ESMF_FieldBundleGet - use ESMF , only : ESMF_GridComp, ESMF_GridCompGet + use ESMF , only : ESMF_GridComp, ESMF_GridCompGet, ESMF_FieldBundleIsCreated use med_constants_mod , only : dbug_flag => med_constants_dbug_flag use med_utils_mod , only : memcheck => med_memcheck use med_utils_mod , only : chkerr => med_utils_ChkErr @@ -239,9 +239,10 @@ subroutine med_phases_prep_atm(gcomp, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return ! IF data ocn case compute first, otherwise computed in prep_ocn_mod - -! call med_compute_enthalpy(is_local, rc) -! if (ChkErr(rc,__LINE__,u_FILE_u)) return + if(is_local%wrap%docn_present) then + call med_compute_enthalpy(is_local, rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + endif do n = 1,size(dataptr1) dataptr1(n) = dataptr1(n) + med_enthalpy_get_global_htot_corr() end do