From f0f03c7c360dc015c6b117ebbfc1f27249d2b83b Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Wed, 4 Oct 2023 15:32:59 +1100 Subject: [PATCH 01/41] add access coupling options --- mediator/med.F90 | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mediator/med.F90 b/mediator/med.F90 index 81909d01..8579f3d9 100644 --- a/mediator/med.F90 +++ b/mediator/med.F90 @@ -52,6 +52,7 @@ module MED use esmFldsExchange_ufs_mod , only : esmFldsExchange_ufs use esmFldsExchange_cesm_mod , only : esmFldsExchange_cesm use esmFldsExchange_hafs_mod , only : esmFldsExchange_hafs + use esmFldsExchange_access_mod , only : esmFldsExchange_access use med_phases_profile_mod , only : med_phases_profile_finalize use shr_log_mod , only : shr_log_error @@ -842,6 +843,9 @@ subroutine AdvertiseFields(gcomp, importState, exportState, clock, rc) else if (coupling_mode(1:4) == 'hafs') then call esmFldsExchange_hafs(gcomp, phase='advertise', rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return + else if (trim(coupling_mode(1:4)) == 'access') then + call esmFldsExchange_access(gcomp, phase='advertise', rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return else call shr_log_error(trim(coupling_mode)//' is not a valid coupling_mode', rc=rc) return @@ -1859,6 +1863,9 @@ subroutine DataInitialize(gcomp, rc) else if (coupling_mode(1:4) == 'hafs') then call esmFldsExchange_hafs(gcomp, phase='initialize', rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return + else if (trim(coupling_mode) == 'access') then + call esmFldsExchange_access(gcomp, phase='initialize', rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return end if if (maintask) then From 458a2772110d6285d1a083a59d7ba675d8c4a512 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Wed, 4 Oct 2023 15:35:15 +1100 Subject: [PATCH 02/41] add access field exchange module --- mediator/esmFldsExchange_access_mod.F90 | 564 ++++++++++++++++++++++++ 1 file changed, 564 insertions(+) create mode 100644 mediator/esmFldsExchange_access_mod.F90 diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 new file mode 100644 index 00000000..01c31d6c --- /dev/null +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -0,0 +1,564 @@ +module esmFldsExchange_access_mod + + use ESMF + use NUOPC + use med_utils_mod , only : chkerr => med_utils_chkerr + use med_kind_mod , only : CX=>SHR_KIND_CX + use med_kind_mod , only : CS=>SHR_KIND_CS + use med_kind_mod , only : CL=>SHR_KIND_CL + use med_kind_mod , only : R8=>SHR_KIND_R8 + use med_internalstate_mod , only : compmed, compatm, compocn, compwav, compice + use med_internalstate_mod , only : ncomps + use med_internalstate_mod , only : coupling_mode + use esmflds , only : fldListTo + use esmflds , only : fldListFr + + !--------------------------------------------------------------------- + ! This is a mediator specific routine that determines ALL possible + ! fields exchanged between components and their associated routing, + ! mapping and merging + !--------------------------------------------------------------------- + + implicit none + public + + public :: esmFldsExchange_access + + character(*), parameter :: u_FILE_u = & + __FILE__ + + !=============================================================================== + contains + !=============================================================================== + + subroutine esmFldsExchange_access(gcomp, phase, rc) + + ! input/output parameters: + type(ESMF_GridComp) :: gcomp + character(len=*) , intent(in) :: phase + integer , intent(inout) :: rc + + ! local variables: + character(len=*) , parameter :: subname='(esmFldsExchange_access)' + !-------------------------------------- + + call ESMF_LogWrite(trim(subname)//": called", ESMF_LOGMSG_INFO) + rc = ESMF_SUCCESS + + if (phase == 'advertise') then + call esmFldsExchange_access_advt(gcomp, phase, rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + elseif (phase == 'fieldcheck') then + call esmFldsExchange_access_fchk(gcomp, phase, rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + elseif (phase == 'initialize') then + call esmFldsExchange_access_init(gcomp, phase, rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + else + call ESMF_LogSetError(ESMF_FAILURE, & + msg=trim(subname)//": Phase is set to "//trim(phase), & + line=__LINE__, file=__FILE__, rcToReturn=rc) + return ! bail out + endif + + call ESMF_LogWrite(trim(subname)//": done", ESMF_LOGMSG_INFO) + + end subroutine esmFldsExchange_access + + !----------------------------------------------------------------------------- + + subroutine esmFldsExchange_access_advt(gcomp, phase, rc) + + use esmFlds, only : addfld => med_fldList_AddFld + + ! input/output parameters: + type(ESMF_GridComp) :: gcomp + character(len=*) , intent(in) :: phase + integer , intent(inout) :: rc + + ! local variables: + integer :: num, i, n + logical :: isPresent + character(len=CL) :: cvalue + character(len=CS) :: name, fldname + character(len=CS) :: fldname1, fldname2 + character(len=CS), allocatable :: flds(:) + character(len=CS), allocatable :: S_flds(:) + character(len=CS), allocatable :: F_flds(:,:) + character(len=CS), allocatable :: suffix(:) + character(len=*) , parameter :: subname='(esmFldsExchange_access_advt)' + !-------------------------------------- + + call ESMF_LogWrite(trim(subname)//": called", ESMF_LOGMSG_INFO) + rc = ESMF_SUCCESS + + !===================================================================== + ! scalar information + !===================================================================== + + call NUOPC_CompAttributeGet(gcomp, name='ScalarFieldName', & + isPresent=isPresent, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + if (isPresent) then + call NUOPC_CompAttributeGet(gcomp, name="ScalarFieldName", & + value=cvalue, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + do n = 1,ncomps + call addfld(fldListFr(n)%flds, trim(cvalue)) + call addfld(fldListTo(n)%flds, trim(cvalue)) + end do + end if + + + !===================================================================== + ! FIELDS TO MEDIATOR component (for fractions and atm/ocn flux calculation) + !===================================================================== + + !---------------------------------------------------------- + ! to med: masks from components + !---------------------------------------------------------- + call addfld(fldListFr(compocn)%flds, 'So_omask') + call addfld(fldListFr(compice)%flds, 'Si_imask') + + !===================================================================== + ! FIELDS TO ATMOSPHERE + !===================================================================== + + call addfld(fldListTo(compatm)%flds, 'So_ofrac') + call addfld(fldListTo(compatm)%flds, 'Si_ifrac') + + ! --------------------------------------------------------------------- + ! to atm: from ocn + ! --------------------------------------------------------------------- + allocate(S_flds(1)) + S_flds = (/'So_t'/) ! sea_surface_temperature + do n = 1,size(S_flds) + fldname = trim(S_flds(n)) + call addfld(fldListFr(compocn)%flds, trim(fldname)) + call addfld(fldListTo(compatm)%flds, trim(fldname)) + end do + deallocate(S_flds) + + ! --------------------------------------------------------------------- + ! to atm: from ice + ! --------------------------------------------------------------------- + call addfld(fldListFr(compice)%flds, 'Si_t') + call addfld(fldListTo(compatm)%flds, 'Si_t') + + !===================================================================== + ! FIELDS TO OCEAN (compocn) + !===================================================================== + + ! --------------------------------------------------------------------- + ! to ocn: state fields + ! --------------------------------------------------------------------- + allocate(S_flds(2)) + S_flds = (/'Sa_pslv', & ! inst_zonal_wind_height10m + 'So_duu10n' /) ! inst_temp_height_surface + do n = 1,size(S_flds) + fldname = trim(S_flds(n)) + call addfld(fldListFr(compatm)%flds, trim(fldname)) + call addfld(fldListTo(compocn)%flds, trim(fldname)) + end do + deallocate(S_flds) + + ! --------------------------------------------------------------------- + ! to ocn: flux fields + ! --------------------------------------------------------------------- + + ! from atm + allocate(F_flds(13, 2)) + F_flds(1,:) = (/'Faxa_taux ', 'Foxx_taux'/) + F_flds(2,:) = (/'Faxa_tauy ', 'Foxx_tauy'/) + F_flds(3,:) = (/'Foxx_sen', 'Foxx_sen'/) + F_flds(4,:) = (/'Foxx_evap', 'Foxx_evap'/) + F_flds(5,:) = (/'Foxx_lwnet', 'Foxx_lwnet'/) + F_flds(6,:) = (/'Foxx_swnet_vdr', 'Foxx_swnet_vdr'/) + F_flds(7,:) = (/'Foxx_swnet_vdf', 'Foxx_swnet_vdf'/) + F_flds(8,:) = (/'Foxx_swnet_idr', 'Foxx_swnet_idr'/) + F_flds(9,:) = (/'Foxx_swnet_idf', 'Foxx_swnet_idf'/) + F_flds(10,:) = (/'Faxa_rainc', 'Faxa_rain'/) + F_flds(11,:) = (/'Faxa_snowc', 'Faxa_snow'/) + F_flds(12,:) = (/'Foxx_rofl', 'Foxx_rofl'/) ! mean runoff rate (liquid) + F_flds(13,:) = (/'Foxx_rofi', 'Foxx_rofi'/) ! mean runnof rate (frozen) + + do n = 1,size(F_flds,1) + fldname1 = trim(F_flds(n,1)) + fldname2 = trim(F_flds(n,2)) + call addfld(fldListFr(compatm)%flds, trim(fldname1)) + call addfld(fldListTo(compocn)%flds, trim(fldname2)) + end do + deallocate(F_flds) + + call addfld(fldListFr(compatm)%flds, 'Faxa_rainc') + call addfld(fldListFr(compatm)%flds, 'Faxa_snowc') + + ! from ice + allocate(F_flds(6, 2)) + F_flds(1,:) = (/'Fioi_salt', 'Fioi_salt'/) + F_flds(2,:) = (/'Si_ifrac', 'Si_ifrac'/) ! ice_fraction + F_flds(3,:) = (/'Fioi_meltw', 'Fioi_meltw'/) + F_flds(4,:) = (/'Fioi_melth', 'Fioi_melth'/) ! heat flux sea-ice to ocean + F_flds(5,:) = (/'Fioi_taux', 'Foxx_taux'/) + F_flds(6,:) = (/'Fioi_tauy', 'Foxx_tauy'/) ! heat flux sea-ice to ocean + do n = 1,size(F_flds,1) + fldname1 = trim(F_flds(n,1)) + fldname2 = trim(F_flds(n,2)) + call addfld(fldListFr(compice)%flds, trim(fldname1)) + call addfld(fldListTo(compocn)%flds, trim(fldname2)) + end do + deallocate(F_flds) + + !===================================================================== + ! FIELDS TO ICE (compice) + !===================================================================== + + ! --------------------------------------------------------------------- + ! to ice: state fields + ! --------------------------------------------------------------------- + + ! from atm + allocate(S_flds(2)) + S_flds = (/'Sa_z', & + 'Sa_u', & + 'Sa_v', & + 'Sa_shum', & + 'Sa_tbot', & + 'Sa_pbot', & + 'Sa_dens', & + 'Sa_ptem'/) + do n = 1,size(S_flds) + fldname = trim(S_flds(n)) + call addfld(fldListFr(compatm)%flds, trim(fldname)) + call addfld(fldListTo(compice)%flds, trim(fldname)) + end do + deallocate(S_flds) + + ! from ocn + allocate(S_flds(7)) + S_flds = (/'So_dhdx', & + 'So_dhdy', & + 'So_t', & + 'So_s', & + 'So_u', & + 'So_v', & + 'Fioo_q' /) + do n = 1,size(S_flds) + fldname = trim(S_flds(n)) + call addfld(fldListFr(compocn)%flds, trim(fldname)) + call addfld(fldListTo(compice)%flds, trim(fldname)) + end do + deallocate(S_flds) + + ! --------------------------------------------------------------------- + ! to ice: flux fields + ! --------------------------------------------------------------------- + allocate(F_flds(7, 2)) + F_flds(1,:) = (/'Faxa_swvdr ', 'Faxa_swvdr '/) + F_flds(2,:) = (/'Faxa_swndr ', 'Faxa_swndr '/) + F_flds(3,:) = (/'Faxa_swvdf', 'Faxa_swvdf'/) + F_flds(4,:) = (/'Faxa_swndf', 'Faxa_swndf'/) + F_flds(5,:) = (/'Faxa_lwdn', 'Faxa_lwdn'/) + F_flds(6,:) = (/'Faxa_rainl', 'Faxa_rain'/) + F_flds(7,:) = (/'Faxa_snowl', 'Faxa_snow'/) + do n = 1,size(F_flds,1) + fldname1 = trim(F_flds(n,1)) + fldname2 = trim(F_flds(n,2)) + call addfld(fldListFr(compatm)%flds, trim(fldname1)) + call addfld(fldListTo(compice)%flds, trim(fldname2)) + end do + deallocate(F_flds) + + call addfld(fldListFr(compatm)%flds, 'Faxa_rainc') + call addfld(fldListFr(compatm)%flds, 'Faxa_snowc') + + call ESMF_LogWrite(trim(subname)//": done", ESMF_LOGMSG_INFO) + + end subroutine esmFldsExchange_access_advt + + !----------------------------------------------------------------------------- + + subroutine esmFldsExchange_access_fchk(gcomp, phase, rc) + + use med_methods_mod , only : fldchk => med_methods_FB_FldChk + use med_internalstate_mod , only : InternalState + + ! input/output parameters: + type(ESMF_GridComp) :: gcomp + character(len=*) , intent(in) :: phase + integer , intent(inout) :: rc + + ! local variables: + type(InternalState) :: is_local + character(len=*) , parameter :: subname='(esmFldsExchange_access_fchk)' + !-------------------------------------- + + call ESMF_LogWrite(trim(subname)//": called", ESMF_LOGMSG_INFO) + rc = ESMF_SUCCESS + + !--------------------------------------- + ! Get the internal state + !--------------------------------------- + nullify(is_local%wrap) + call ESMF_GridCompGetInternalState(gcomp, is_local, rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + + if (fldchk(is_local%wrap%FBImp(compocn,compocn),'So_omask',rc=rc)) then + call ESMF_LogWrite(trim(subname)//": Field connected "//"So_omask", & + ESMF_LOGMSG_INFO) + else + call ESMF_LogSetError(ESMF_FAILURE, & + msg=trim(subname)//": Field is not connected "//"So_omask", & + line=__LINE__, file=__FILE__, rcToReturn=rc) + return ! bail out + endif + + call ESMF_LogWrite(trim(subname)//": done", ESMF_LOGMSG_INFO) + + end subroutine esmFldsExchange_access_fchk + + !----------------------------------------------------------------------------- + + subroutine esmFldsExchange_access_init(gcomp, phase, rc) + + use med_methods_mod , only : fldchk => med_methods_FB_FldChk + use med_internalstate_mod , only : InternalState + use med_internalstate_mod , only : mapbilnr, mapconsf, mapconsd, mappatch + use med_internalstate_mod , only : mapfcopy, mapnstod, mapnstod_consd + use med_internalstate_mod , only : mapfillv_bilnr + use med_internalstate_mod , only : mapnstod_consf + use esmFlds , only : med_fldList_type + use esmFlds , only : addmap => med_fldList_AddMap + use esmFlds , only : addmrg => med_fldList_AddMrg + + ! input/output parameters: + type(ESMF_GridComp) :: gcomp + character(len=*) , intent(in) :: phase + integer , intent(inout) :: rc + + ! local variables: + type(InternalState) :: is_local + integer :: num, i, n + integer :: n1, n2, n3, n4 + character(len=CL) :: cvalue + character(len=CS) :: name, fldname + character(len=CS) :: fldname1, fldname2 + character(len=CS), allocatable :: flds(:) + character(len=CS), allocatable :: S_flds(:) + character(len=CS), allocatable :: F_flds(:,:) + character(len=CS), allocatable :: suffix(:) + character(len=*) , parameter :: subname='(esmFldsExchange_access_init)' + !-------------------------------------- + + call ESMF_LogWrite(trim(subname)//": called", ESMF_LOGMSG_INFO) + rc = ESMF_SUCCESS + + !--------------------------------------- + ! Get the internal state + !--------------------------------------- + nullify(is_local%wrap) + call ESMF_GridCompGetInternalState(gcomp, is_local, rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + + !===================================================================== + ! FIELDS TO ATMOSPHERE + !===================================================================== + + ! --------------------------------------------------------------------- + ! to atm: sea surface temperature + ! --------------------------------------------------------------------- + call addmap(fldListFr(compocn)%flds, 'So_t', compatm, mapconsf, 'ofrac', 'unset') + call addmrg(fldListTo(compatm)%flds, 'So_t', mrg_from=compocn, mrg_fld='So_t', mrg_type='copy') + + call addmap(fldListFr(compice)%flds, 'Si_t', compatm, mapconsf, 'ifrac', 'unset') + call addmrg(fldListTo(compatm)%flds, 'Si_t', mrg_from=compice, mrg_fld='Si_t', mrg_type='copy') + + !===================================================================== + ! FIELDS TO OCEAN (compocn) + !===================================================================== + + ! --------------------------------------------------------------------- + ! to ocn: state fields + ! --------------------------------------------------------------------- + allocate(S_flds(2)) + S_flds = (/'Sa_pslv', & ! inst_zonal_wind_height10m + 'So_duu10n' /) ! inst_temp_height_surface + do n = 1,size(S_flds) + fldname = trim(S_flds(n)) + if (fldchk(is_local%wrap%FBExp(compocn), trim(fldname), rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compatm, compatm), trim(fldname), rc=rc) & + ) then + + call addmap(fldListFr(compatm)%flds, trim(fldname), compocn, mapbilnr, 'one', 'unset') + call addmrg(fldListTo(compocn)%flds, trim(fldname), mrg_from=compatm, mrg_fld=trim(fldname), mrg_type='copy') + + end if + end do + deallocate(S_flds) + + ! --------------------------------------------------------------------- + ! to ocn: flux fields + ! --------------------------------------------------------------------- + + ! from atm + allocate(F_flds(11, 2)) + F_flds(1,:) = (/'Foxx_sen', 'Foxx_sen'/) + F_flds(2,:) = (/'Foxx_evap', 'Foxx_evap'/) + F_flds(3,:) = (/'Foxx_lwnet', 'Foxx_lwnet'/) + F_flds(4,:) = (/'Foxx_swnet_vdr', 'Foxx_swnet_vdr'/) + F_flds(5,:) = (/'Foxx_swnet_vdf', 'Foxx_swnet_vdf'/) + F_flds(6,:) = (/'Foxx_swnet_idr', 'Foxx_swnet_idr'/) + F_flds(7,:) = (/'Foxx_swnet_idf', 'Foxx_swnet_idf'/) + F_flds(8,:) = (/'Foxx_rofl', 'Foxx_rofl'/) ! mean runoff rate (liquid) + F_flds(9,:) = (/'Foxx_rofi', 'Foxx_rofi'/) ! mean runnof rate (frozen) + + do n = 1,size(F_flds,1) + fldname1 = trim(F_flds(n,1)) + fldname2 = trim(F_flds(n,2)) + if (fldchk(is_local%wrap%FBExp(compocn), trim(fldname2), rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compatm, compatm), trim(fldname1), rc=rc) & + ) then + call addmap(fldListFr(compatm)%flds, trim(fldname1), compocn, mapconsf, 'one', 'unset') + call addmrg(fldListTo(compocn)%flds, trim(fldname2), mrg_from=compatm, mrg_fld=trim(fldname1), mrg_type='copy') + end if + end do + deallocate(F_flds) + + ! precip + call addmap(fldListFr(compatm)%flds, 'Faxa_rainc', compocn, mapconsf, 'one', 'unset') + call addmrg(fldListTo(compocn)%flds, 'Faxa_rain', mrg_from=compatm, mrg_fld='Faxa_rainc', mrg_type='sum') + call addmap(fldListFr(compatm)%flds, 'Faxa_rainl', compocn, mapconsf, 'one', 'unset') + call addmrg(fldListTo(compocn)%flds, 'Faxa_rain', mrg_from=compatm, mrg_fld='Faxa_rainl', mrg_type='sum') + + call addmap(fldListFr(compatm)%flds, 'Faxa_snowc', compocn, mapconsf, 'one', 'unset') + call addmrg(fldListTo(compocn)%flds, 'Faxa_snow', mrg_from=compatm, mrg_fld='Faxa_snowc', mrg_type='sum') + call addmap(fldListFr(compatm)%flds, 'Faxa_snowl', compocn, mapconsf, 'one', 'unset') + call addmrg(fldListTo(compocn)%flds, 'Faxa_snow', mrg_from=compatm, mrg_fld='Faxa_snowl', mrg_type='sum') + + ! from ice + allocate(F_flds(4, 2)) + F_flds(1,:) = (/'Fioi_salt', 'Fioi_salt'/) + F_flds(2,:) = (/'Si_ifrac', 'Si_ifrac'/) ! ice_fraction + F_flds(3,:) = (/'Fioi_meltw', 'Fioi_meltw'/) + F_flds(4,:) = (/'Fioi_melth', 'Fioi_melth'/) ! heat flux sea-ice to ocean + do n = 1,size(F_flds,1) + fldname1 = trim(F_flds(n,1)) + fldname2 = trim(F_flds(n,2)) + if (fldchk(is_local%wrap%FBExp(compocn), trim(fldname2), rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compice, compice), trim(fldname1),rc=rc) & + ) then + call addmap(fldListFr(compice)%flds, trim(fldname1), compocn, mapfcopy, 'unset', 'unset') + call addmrg(fldListTo(compocn)%flds, trim(fldname2), mrg_from=compice, mrg_fld=trim(fldname1), mrg_type='copy') + end if + end do + deallocate(F_flds) + + ! momentum transfer + call addmap(fldListFr(compice)%flds, 'Fioi_taux', compocn, mapfcopy, 'unset', 'unset') + call addmrg(fldListTo(compocn)%flds, 'Foxx_taux', mrg_from=compice, mrg_fld='Fioi_taux', mrg_type='merge', mrg_fracname='ifrac') + call addmap(fldListFr(compatm)%flds, 'Faxa_taux', compocn, mapconsf, 'one', 'unset') + call addmrg(fldListTo(compocn)%flds, 'Foxx_taux', mrg_from=compatm, mrg_fld='Faxa_taux', mrg_type='merge', mrg_fracname='ofrac') + + call addmap(fldListFr(compice)%flds, 'Fioi_tauy', compocn, mapfcopy, 'unset', 'unset') + call addmrg(fldListTo(compocn)%flds, 'Foxx_tauy', mrg_from=compice, mrg_fld='Fioi_tauy', mrg_type='merge', mrg_fracname='ifrac') + call addmap(fldListFr(compatm)%flds, 'Faxa_tauy', compocn, mapconsf, 'one', 'unset') + call addmrg(fldListTo(compocn)%flds, 'Foxx_tauy', mrg_from=compatm, mrg_fld='Faxa_tauy', mrg_type='merge', mrg_fracname='ofrac') + + !===================================================================== + ! FIELDS TO ICE (compice) + !===================================================================== + + ! --------------------------------------------------------------------- + ! to ice: state fields + ! --------------------------------------------------------------------- + + ! from atm + allocate(S_flds(8)) + S_flds = (/'Sa_z', & ! inst_zonal_wind_height10m + 'Sa_u', & ! inst_merid_wind_height10m + 'Sa_v ', & ! inst_temp_height2m + 'Sa_shum ', & ! inst_spec_humid_height2m + 'Sa_tbot', & ! Sa_pslv + 'Sa_pbot', & + 'Sa_dens', & + 'Sa_ptem' /) ! inst_temp_height_surface + + do n = 1,size(S_flds) + fldname = trim(S_flds(n)) + if (fldchk(is_local%wrap%FBExp(compice), trim(fldname),rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compatm, compatm), trim(fldname),rc=rc) & + ) then + + call addmap(fldListFr(compatm)%flds, trim(fldname), compice, mapbilnr, 'one', 'unset') + call addmrg(fldListTo(compice)%flds, trim(fldname), mrg_from=compatm, mrg_fld=trim(fldname), mrg_type='copy') + + end if + end do + deallocate(S_flds) + + ! from ocn + allocate(S_flds(6)) + S_flds = (/'So_dhdx', & ! inst_zonal_wind_height10m + 'So_dhdy', & ! inst_merid_wind_height10m + 'So_t ', & ! inst_temp_height2m + 'So_s ', & ! inst_spec_humid_height2m + 'So_u', & ! Sa_pslv + 'So_v', & ! Sa_pslv + 'Fioo_q' /) ! inst_temp_height_surface + do n = 1,size(S_flds) + fldname = trim(S_flds(n)) + if (fldchk(is_local%wrap%FBExp(compice),trim(fldname),rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compocn, compocn), trim(fldname),rc=rc) & + ) then + + call addmap(fldListFr(compocn)%flds, trim(fldname), compice, mapfcopy, 'unset', 'unset') + call addmrg(fldListTo(compice)%flds, trim(fldname), mrg_from=compocn, mrg_fld=trim(fldname), mrg_type='copy') + + end if + end do + deallocate(S_flds) + + ! --------------------------------------------------------------------- + ! to ice: flux fields + ! --------------------------------------------------------------------- + + ! from atm + allocate(F_flds(5, 2)) + F_flds(1,:) = (/'Faxa_swvdr ', 'Faxa_swvdr '/) + F_flds(2,:) = (/'Faxa_swndr ', 'Faxa_swndr '/) + F_flds(3,:) = (/'Faxa_swvdf', 'Faxa_swvdf'/) + F_flds(4,:) = (/'Faxa_swndf', 'Faxa_swndf'/) + F_flds(5,:) = (/'Faxa_lwdn', 'Faxa_lwdn'/) + + do n = 1,size(F_flds,1) + fldname1 = trim(F_flds(n,1)) + fldname2 = trim(F_flds(n,2)) + if (fldchk(is_local%wrap%FBExp(compice), trim(fldname2), rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compatm, compatm), trim(fldname1), rc=rc) & + ) then + + call addmap(fldListFr(compatm)%flds, trim(fldname1), compice, mapconsf, 'one', 'unset') + call addmrg(fldListTo(compice)%flds, trim(fldname2), mrg_from=compatm, mrg_fld=trim(fldname1), mrg_type='copy') + + end if + end do + deallocate(F_flds) + + ! precip + call addmap(fldListFr(compatm)%flds, 'Faxa_rainc', compice, mapconsf, 'one', 'unset') + call addmrg(fldListTo(compice)%flds, 'Faxa_rain', mrg_from=compatm, mrg_fld='Faxa_rainc', mrg_type='sum') + call addmap(fldListFr(compatm)%flds, 'Faxa_rainl', compice, mapconsf, 'one', 'unset') + call addmrg(fldListTo(compice)%flds, 'Faxa_rain', mrg_from=compatm, mrg_fld='Faxa_rainl', mrg_type='sum') + + call addmap(fldListFr(compatm)%flds, 'Faxa_snowc', compice, mapconsf, 'one', 'unset') + call addmrg(fldListTo(compice)%flds, 'Faxa_snow', mrg_from=compatm, mrg_fld='Faxa_snowc', mrg_type='sum') + call addmap(fldListFr(compatm)%flds, 'Faxa_snowl', compice, mapconsf, 'one', 'unset') + call addmrg(fldListTo(compice)%flds, 'Faxa_snow', mrg_from=compatm, mrg_fld='Faxa_snowl', mrg_type='sum') + + call ESMF_LogWrite(trim(subname)//": done", ESMF_LOGMSG_INFO) + + end subroutine esmFldsExchange_access_init + + !----------------------------------------------------------------------------- + + end module esmFldsExchange_access_mod From 5ce16a515ffd5396c11d68ab9e78177234bed08f Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Tue, 31 Oct 2023 10:51:37 +1100 Subject: [PATCH 03/41] add ice to um fields --- mediator/esmFldsExchange_access_mod.F90 | 38 ++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 index 01c31d6c..e06efadb 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -142,8 +142,22 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) ! --------------------------------------------------------------------- ! to atm: from ice ! --------------------------------------------------------------------- - call addfld(fldListFr(compice)%flds, 'Si_t') - call addfld(fldListTo(compatm)%flds, 'Si_t') + allocate(S_flds(8)) + S_flds = (/'Si_t', & + 'ia_aicen', & + 'ia_snown', & + 'ia_thikn', & + 'ia_itopt', & + 'ia_itopk', & + 'ia_pndfn', & + 'ia_pndtn', & + /) ! sea_surface_temperature + do n = 1,size(S_flds) + fldname = trim(S_flds(n)) + call addfld(fldListFr(compice)%flds, trim(fldname)) + call addfld(fldListTo(compatm)%flds, trim(fldname)) + end do + deallocate(S_flds) !===================================================================== ! FIELDS TO OCEAN (compocn) @@ -370,8 +384,24 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) call addmap(fldListFr(compocn)%flds, 'So_t', compatm, mapconsf, 'ofrac', 'unset') call addmrg(fldListTo(compatm)%flds, 'So_t', mrg_from=compocn, mrg_fld='So_t', mrg_type='copy') - call addmap(fldListFr(compice)%flds, 'Si_t', compatm, mapconsf, 'ifrac', 'unset') - call addmrg(fldListTo(compatm)%flds, 'Si_t', mrg_from=compice, mrg_fld='Si_t', mrg_type='copy') + allocate(S_flds(8)) + S_flds = (/'Si_t', & + 'ia_aicen', & + 'ia_snown', & + 'ia_thikn', & + 'ia_itopt', & + 'ia_itopk', & + 'ia_pndfn', & + 'ia_pndtn', & + /) ! sea_surface_temperature + do n = 1,size(S_flds) + fldname = trim(S_flds(n)) + call addmap(fldListFr(compice)%flds, trim(fldname), compatm, mapconsf, 'ifrac', 'unset') + call addmrg(fldListTo(compatm)%flds, trim(fldname), mrg_from=compice, mrg_fld=trim(fldname), mrg_type='copy') + end do + deallocate(S_flds) + ! call addmap(fldListFr(compice)%flds, 'Si_t', compatm, mapconsf, 'ifrac', 'unset') + ! call addmrg(fldListTo(compatm)%flds, 'Si_t', mrg_from=compice, mrg_fld='Si_t', mrg_type='copy') !===================================================================== ! FIELDS TO OCEAN (compocn) From 641f21dbd44819e86ba13ac12e88dec3bd2cc8c0 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Mon, 9 Oct 2023 15:25:54 +1100 Subject: [PATCH 04/41] update access fld exchange module to new CMEPS --- mediator/CMakeLists.txt | 2 +- mediator/Makefile | 7 +- mediator/esmFldsExchange_access_mod.F90 | 138 ++++++++++++------------ 3 files changed, 73 insertions(+), 74 deletions(-) diff --git a/mediator/CMakeLists.txt b/mediator/CMakeLists.txt index b65004c3..b95c62a1 100644 --- a/mediator/CMakeLists.txt +++ b/mediator/CMakeLists.txt @@ -1,6 +1,6 @@ project(cmeps Fortran) -set(SRCFILES esmFldsExchange_cesm_mod.F90 med_fraction_mod.F90 +set(SRCFILES esmFldsExchange_access_mod.F90 esmFldsExchange_cesm_mod.F90 med_fraction_mod.F90 med_field_info_mod.F90 med_methods_mod.F90 med_phases_prep_ice_mod.F90 med_phases_restart_mod.F90 esmFldsExchange_hafs_mod.F90 diff --git a/mediator/Makefile b/mediator/Makefile index a353ff9a..d7ad9570 100644 --- a/mediator/Makefile +++ b/mediator/Makefile @@ -36,13 +36,14 @@ esmFlds.o : med_kind_mod.o esmFldsExchange_cesm_mod.o : med_kind_mod.o med_methods_mod.o esmFlds.o med_internalstate_mod.o med_utils_mod.o esmFldsExchange_ufs_mod.o : med_kind_mod.o med_methods_mod.o esmFlds.o med_internalstate_mod.o med_utils_mod.o esmFldsExchange_hafs_mod.o : med_kind_mod.o med_methods_mod.o esmFlds.o med_internalstate_mod.o med_utils_mod.o +esmFldsExchange_access_mod.o : med_kind_mod.o med_methods_mod.o esmFlds.o med_internalstate_mod.o med_utils_mod.o med.o : med_kind_mod.o med_phases_profile_mod.o med_utils_mod.o med_phases_prep_rof_mod.o med_phases_aofluxes_mod.o \ med_phases_prep_ice_mod.o med_fraction_mod.o med_map_mod.o med_constants_mod.o med_phases_prep_wav_mod.o \ med_phases_prep_lnd_mod.o med_phases_history_mod.o med_phases_ocnalb_mod.o med_phases_restart_mod.o \ med_internalstate_mod.o med_phases_prep_atm_mod.o esmFldsExchange_cesm_mod.o esmFldsExchange_ufs_mod.o \ - esmFldsExchange_hafs_mod.o med_phases_prep_glc_mod.o esmFlds.o med_io_mod.o med_methods_mod.o med_phases_prep_ocn_mod.o \ - med_phases_post_atm_mod.o med_phases_post_ice_mod.o med_phases_post_lnd_mod.o med_phases_post_glc_mod.o med_phases_post_rof_mod.o \ - med_phases_post_wav_mod.o + esmFldsExchange_hafs_mod.o esmFldsExchange_access_mod.o med_phases_prep_glc_mod.o esmFlds.o med_io_mod.o med_methods_mod.o \ + med_phases_prep_ocn_mod.o med_phases_post_atm_mod.o med_phases_post_ice_mod.o med_phases_post_lnd_mod.o med_phases_post_glc_mod.o \ + med_phases_post_rof_mod.o med_phases_post_wav_mod.o med_fraction_mod.o : med_kind_mod.o med_utils_mod.o med_internalstate_mod.o med_constants_mod.o med_map_mod.o med_methods_mod.o esmFlds.o med_internalstate_mod.o : med_kind_mod.o esmFlds.o med_io_mod.o : med_kind_mod.o med_methods_mod.o med_constants_mod.o med_internalstate_mod.o med_utils_mod.o diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 index e06efadb..00d5272a 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -10,8 +10,11 @@ module esmFldsExchange_access_mod use med_internalstate_mod , only : compmed, compatm, compocn, compwav, compice use med_internalstate_mod , only : ncomps use med_internalstate_mod , only : coupling_mode - use esmflds , only : fldListTo - use esmflds , only : fldListFr + use esmFlds , only : med_fldList_type + use esmFlds , only : addfld_to => med_fldList_addfld_to + use esmFlds , only : addmrg_to => med_fldList_addmrg_to + use esmFlds , only : addfld_from => med_fldList_addfld_from + use esmFlds , only : addmap_from => med_fldList_addmap_from !--------------------------------------------------------------------- ! This is a mediator specific routine that determines ALL possible @@ -69,8 +72,6 @@ end subroutine esmFldsExchange_access subroutine esmFldsExchange_access_advt(gcomp, phase, rc) - use esmFlds, only : addfld => med_fldList_AddFld - ! input/output parameters: type(ESMF_GridComp) :: gcomp character(len=*) , intent(in) :: phase @@ -104,8 +105,8 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) value=cvalue, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return do n = 1,ncomps - call addfld(fldListFr(n)%flds, trim(cvalue)) - call addfld(fldListTo(n)%flds, trim(cvalue)) + call addfld_from(n, trim(cvalue)) + call addfld_to(n, trim(cvalue)) end do end if @@ -117,15 +118,15 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) !---------------------------------------------------------- ! to med: masks from components !---------------------------------------------------------- - call addfld(fldListFr(compocn)%flds, 'So_omask') - call addfld(fldListFr(compice)%flds, 'Si_imask') + call addfld_from(compocn, 'So_omask') + call addfld_from(compice, 'Si_imask') !===================================================================== ! FIELDS TO ATMOSPHERE !===================================================================== - call addfld(fldListTo(compatm)%flds, 'So_ofrac') - call addfld(fldListTo(compatm)%flds, 'Si_ifrac') + call addfld_to(compatm, 'So_ofrac') + call addfld_to(compatm, 'Si_ifrac') ! --------------------------------------------------------------------- ! to atm: from ocn @@ -134,8 +135,8 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) S_flds = (/'So_t'/) ! sea_surface_temperature do n = 1,size(S_flds) fldname = trim(S_flds(n)) - call addfld(fldListFr(compocn)%flds, trim(fldname)) - call addfld(fldListTo(compatm)%flds, trim(fldname)) + call addfld_from(compocn, trim(fldname)) + call addfld_to(compatm, trim(fldname)) end do deallocate(S_flds) @@ -171,8 +172,8 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) 'So_duu10n' /) ! inst_temp_height_surface do n = 1,size(S_flds) fldname = trim(S_flds(n)) - call addfld(fldListFr(compatm)%flds, trim(fldname)) - call addfld(fldListTo(compocn)%flds, trim(fldname)) + call addfld_from(compatm, trim(fldname)) + call addfld_to(compocn, trim(fldname)) end do deallocate(S_flds) @@ -199,13 +200,13 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) do n = 1,size(F_flds,1) fldname1 = trim(F_flds(n,1)) fldname2 = trim(F_flds(n,2)) - call addfld(fldListFr(compatm)%flds, trim(fldname1)) - call addfld(fldListTo(compocn)%flds, trim(fldname2)) + call addfld_from(compatm, trim(fldname1)) + call addfld_to(compocn, trim(fldname2)) end do deallocate(F_flds) - call addfld(fldListFr(compatm)%flds, 'Faxa_rainc') - call addfld(fldListFr(compatm)%flds, 'Faxa_snowc') + call addfld_from(compatm, 'Faxa_rainc') + call addfld_from(compatm, 'Faxa_snowc') ! from ice allocate(F_flds(6, 2)) @@ -218,8 +219,8 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) do n = 1,size(F_flds,1) fldname1 = trim(F_flds(n,1)) fldname2 = trim(F_flds(n,2)) - call addfld(fldListFr(compice)%flds, trim(fldname1)) - call addfld(fldListTo(compocn)%flds, trim(fldname2)) + call addfld_from(compice, trim(fldname1)) + call addfld_to(compocn, trim(fldname2)) end do deallocate(F_flds) @@ -243,8 +244,8 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) 'Sa_ptem'/) do n = 1,size(S_flds) fldname = trim(S_flds(n)) - call addfld(fldListFr(compatm)%flds, trim(fldname)) - call addfld(fldListTo(compice)%flds, trim(fldname)) + call addfld_from(compatm, trim(fldname)) + call addfld_to(compice, trim(fldname)) end do deallocate(S_flds) @@ -259,8 +260,8 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) 'Fioo_q' /) do n = 1,size(S_flds) fldname = trim(S_flds(n)) - call addfld(fldListFr(compocn)%flds, trim(fldname)) - call addfld(fldListTo(compice)%flds, trim(fldname)) + call addfld_from(compocn, trim(fldname)) + call addfld_to(compice, trim(fldname)) end do deallocate(S_flds) @@ -278,13 +279,13 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) do n = 1,size(F_flds,1) fldname1 = trim(F_flds(n,1)) fldname2 = trim(F_flds(n,2)) - call addfld(fldListFr(compatm)%flds, trim(fldname1)) - call addfld(fldListTo(compice)%flds, trim(fldname2)) + call addfld_from(compatm, trim(fldname1)) + call addfld_to(compice, trim(fldname2)) end do deallocate(F_flds) - call addfld(fldListFr(compatm)%flds, 'Faxa_rainc') - call addfld(fldListFr(compatm)%flds, 'Faxa_snowc') + call addfld_from(compatm, 'Faxa_rainc') + call addfld_from(compatm, 'Faxa_snowc') call ESMF_LogWrite(trim(subname)//": done", ESMF_LOGMSG_INFO) @@ -341,9 +342,6 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) use med_internalstate_mod , only : mapfcopy, mapnstod, mapnstod_consd use med_internalstate_mod , only : mapfillv_bilnr use med_internalstate_mod , only : mapnstod_consf - use esmFlds , only : med_fldList_type - use esmFlds , only : addmap => med_fldList_AddMap - use esmFlds , only : addmrg => med_fldList_AddMrg ! input/output parameters: type(ESMF_GridComp) :: gcomp @@ -381,8 +379,8 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) ! --------------------------------------------------------------------- ! to atm: sea surface temperature ! --------------------------------------------------------------------- - call addmap(fldListFr(compocn)%flds, 'So_t', compatm, mapconsf, 'ofrac', 'unset') - call addmrg(fldListTo(compatm)%flds, 'So_t', mrg_from=compocn, mrg_fld='So_t', mrg_type='copy') + call addmap_from(compocn, 'So_t', compatm, mapconsf, 'ofrac', 'unset') + call addmrg_to(compatm, 'So_t', mrg_from=compocn, mrg_fld='So_t', mrg_type='copy') allocate(S_flds(8)) S_flds = (/'Si_t', & @@ -419,8 +417,8 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) fldchk(is_local%wrap%FBImp(compatm, compatm), trim(fldname), rc=rc) & ) then - call addmap(fldListFr(compatm)%flds, trim(fldname), compocn, mapbilnr, 'one', 'unset') - call addmrg(fldListTo(compocn)%flds, trim(fldname), mrg_from=compatm, mrg_fld=trim(fldname), mrg_type='copy') + call addmap_from(compatm, trim(fldname), compocn, mapbilnr, 'one', 'unset') + call addmrg_to(compocn, trim(fldname), mrg_from=compatm, mrg_fld=trim(fldname), mrg_type='copy') end if end do @@ -448,22 +446,22 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) if (fldchk(is_local%wrap%FBExp(compocn), trim(fldname2), rc=rc) .and. & fldchk(is_local%wrap%FBImp(compatm, compatm), trim(fldname1), rc=rc) & ) then - call addmap(fldListFr(compatm)%flds, trim(fldname1), compocn, mapconsf, 'one', 'unset') - call addmrg(fldListTo(compocn)%flds, trim(fldname2), mrg_from=compatm, mrg_fld=trim(fldname1), mrg_type='copy') + call addmap_from(compatm, trim(fldname1), compocn, mapconsf, 'one', 'unset') + call addmrg_to(compocn, trim(fldname2), mrg_from=compatm, mrg_fld=trim(fldname1), mrg_type='copy') end if end do deallocate(F_flds) ! precip - call addmap(fldListFr(compatm)%flds, 'Faxa_rainc', compocn, mapconsf, 'one', 'unset') - call addmrg(fldListTo(compocn)%flds, 'Faxa_rain', mrg_from=compatm, mrg_fld='Faxa_rainc', mrg_type='sum') - call addmap(fldListFr(compatm)%flds, 'Faxa_rainl', compocn, mapconsf, 'one', 'unset') - call addmrg(fldListTo(compocn)%flds, 'Faxa_rain', mrg_from=compatm, mrg_fld='Faxa_rainl', mrg_type='sum') + call addmap_from(compatm, 'Faxa_rainc', compocn, mapconsf, 'one', 'unset') + call addmrg_to(compocn, 'Faxa_rain', mrg_from=compatm, mrg_fld='Faxa_rainc', mrg_type='sum') + call addmap_from(compatm, 'Faxa_rainl', compocn, mapconsf, 'one', 'unset') + call addmrg_to(compocn, 'Faxa_rain', mrg_from=compatm, mrg_fld='Faxa_rainl', mrg_type='sum') - call addmap(fldListFr(compatm)%flds, 'Faxa_snowc', compocn, mapconsf, 'one', 'unset') - call addmrg(fldListTo(compocn)%flds, 'Faxa_snow', mrg_from=compatm, mrg_fld='Faxa_snowc', mrg_type='sum') - call addmap(fldListFr(compatm)%flds, 'Faxa_snowl', compocn, mapconsf, 'one', 'unset') - call addmrg(fldListTo(compocn)%flds, 'Faxa_snow', mrg_from=compatm, mrg_fld='Faxa_snowl', mrg_type='sum') + call addmap_from(compatm, 'Faxa_snowc', compocn, mapconsf, 'one', 'unset') + call addmrg_to(compocn, 'Faxa_snow', mrg_from=compatm, mrg_fld='Faxa_snowc', mrg_type='sum') + call addmap_from(compatm, 'Faxa_snowl', compocn, mapconsf, 'one', 'unset') + call addmrg_to(compocn, 'Faxa_snow', mrg_from=compatm, mrg_fld='Faxa_snowl', mrg_type='sum') ! from ice allocate(F_flds(4, 2)) @@ -477,22 +475,22 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) if (fldchk(is_local%wrap%FBExp(compocn), trim(fldname2), rc=rc) .and. & fldchk(is_local%wrap%FBImp(compice, compice), trim(fldname1),rc=rc) & ) then - call addmap(fldListFr(compice)%flds, trim(fldname1), compocn, mapfcopy, 'unset', 'unset') - call addmrg(fldListTo(compocn)%flds, trim(fldname2), mrg_from=compice, mrg_fld=trim(fldname1), mrg_type='copy') + call addmap_from(compice, trim(fldname1), compocn, mapfcopy, 'unset', 'unset') + call addmrg_to(compocn, trim(fldname2), mrg_from=compice, mrg_fld=trim(fldname1), mrg_type='copy') end if end do deallocate(F_flds) ! momentum transfer - call addmap(fldListFr(compice)%flds, 'Fioi_taux', compocn, mapfcopy, 'unset', 'unset') - call addmrg(fldListTo(compocn)%flds, 'Foxx_taux', mrg_from=compice, mrg_fld='Fioi_taux', mrg_type='merge', mrg_fracname='ifrac') - call addmap(fldListFr(compatm)%flds, 'Faxa_taux', compocn, mapconsf, 'one', 'unset') - call addmrg(fldListTo(compocn)%flds, 'Foxx_taux', mrg_from=compatm, mrg_fld='Faxa_taux', mrg_type='merge', mrg_fracname='ofrac') + call addmap_from(compice, 'Fioi_taux', compocn, mapfcopy, 'unset', 'unset') + call addmrg_to(compocn, 'Foxx_taux', mrg_from=compice, mrg_fld='Fioi_taux', mrg_type='merge', mrg_fracname='ifrac') + call addmap_from(compatm, 'Faxa_taux', compocn, mapconsf, 'one', 'unset') + call addmrg_to(compocn, 'Foxx_taux', mrg_from=compatm, mrg_fld='Faxa_taux', mrg_type='merge', mrg_fracname='ofrac') - call addmap(fldListFr(compice)%flds, 'Fioi_tauy', compocn, mapfcopy, 'unset', 'unset') - call addmrg(fldListTo(compocn)%flds, 'Foxx_tauy', mrg_from=compice, mrg_fld='Fioi_tauy', mrg_type='merge', mrg_fracname='ifrac') - call addmap(fldListFr(compatm)%flds, 'Faxa_tauy', compocn, mapconsf, 'one', 'unset') - call addmrg(fldListTo(compocn)%flds, 'Foxx_tauy', mrg_from=compatm, mrg_fld='Faxa_tauy', mrg_type='merge', mrg_fracname='ofrac') + call addmap_from(compice, 'Fioi_tauy', compocn, mapfcopy, 'unset', 'unset') + call addmrg_to(compocn, 'Foxx_tauy', mrg_from=compice, mrg_fld='Fioi_tauy', mrg_type='merge', mrg_fracname='ifrac') + call addmap_from(compatm, 'Faxa_tauy', compocn, mapconsf, 'one', 'unset') + call addmrg_to(compocn, 'Foxx_tauy', mrg_from=compatm, mrg_fld='Faxa_tauy', mrg_type='merge', mrg_fracname='ofrac') !===================================================================== ! FIELDS TO ICE (compice) @@ -519,8 +517,8 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) fldchk(is_local%wrap%FBImp(compatm, compatm), trim(fldname),rc=rc) & ) then - call addmap(fldListFr(compatm)%flds, trim(fldname), compice, mapbilnr, 'one', 'unset') - call addmrg(fldListTo(compice)%flds, trim(fldname), mrg_from=compatm, mrg_fld=trim(fldname), mrg_type='copy') + call addmap_from(compatm, trim(fldname), compice, mapbilnr, 'one', 'unset') + call addmrg_to(compice, trim(fldname), mrg_from=compatm, mrg_fld=trim(fldname), mrg_type='copy') end if end do @@ -541,8 +539,8 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) fldchk(is_local%wrap%FBImp(compocn, compocn), trim(fldname),rc=rc) & ) then - call addmap(fldListFr(compocn)%flds, trim(fldname), compice, mapfcopy, 'unset', 'unset') - call addmrg(fldListTo(compice)%flds, trim(fldname), mrg_from=compocn, mrg_fld=trim(fldname), mrg_type='copy') + call addmap_from(compocn, trim(fldname), compice, mapfcopy, 'unset', 'unset') + call addmrg_to(compice, trim(fldname), mrg_from=compocn, mrg_fld=trim(fldname), mrg_type='copy') end if end do @@ -567,23 +565,23 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) fldchk(is_local%wrap%FBImp(compatm, compatm), trim(fldname1), rc=rc) & ) then - call addmap(fldListFr(compatm)%flds, trim(fldname1), compice, mapconsf, 'one', 'unset') - call addmrg(fldListTo(compice)%flds, trim(fldname2), mrg_from=compatm, mrg_fld=trim(fldname1), mrg_type='copy') + call addmap_from(compatm, trim(fldname1), compice, mapconsf, 'one', 'unset') + call addmrg_to(compice, trim(fldname2), mrg_from=compatm, mrg_fld=trim(fldname1), mrg_type='copy') end if end do deallocate(F_flds) ! precip - call addmap(fldListFr(compatm)%flds, 'Faxa_rainc', compice, mapconsf, 'one', 'unset') - call addmrg(fldListTo(compice)%flds, 'Faxa_rain', mrg_from=compatm, mrg_fld='Faxa_rainc', mrg_type='sum') - call addmap(fldListFr(compatm)%flds, 'Faxa_rainl', compice, mapconsf, 'one', 'unset') - call addmrg(fldListTo(compice)%flds, 'Faxa_rain', mrg_from=compatm, mrg_fld='Faxa_rainl', mrg_type='sum') - - call addmap(fldListFr(compatm)%flds, 'Faxa_snowc', compice, mapconsf, 'one', 'unset') - call addmrg(fldListTo(compice)%flds, 'Faxa_snow', mrg_from=compatm, mrg_fld='Faxa_snowc', mrg_type='sum') - call addmap(fldListFr(compatm)%flds, 'Faxa_snowl', compice, mapconsf, 'one', 'unset') - call addmrg(fldListTo(compice)%flds, 'Faxa_snow', mrg_from=compatm, mrg_fld='Faxa_snowl', mrg_type='sum') + call addmap_from(compatm, 'Faxa_rainc', compice, mapconsf, 'one', 'unset') + call addmrg_to(compice, 'Faxa_rain', mrg_from=compatm, mrg_fld='Faxa_rainc', mrg_type='sum') + call addmap_from(compatm, 'Faxa_rainl', compice, mapconsf, 'one', 'unset') + call addmrg_to(compice, 'Faxa_rain', mrg_from=compatm, mrg_fld='Faxa_rainl', mrg_type='sum') + + call addmap_from(compatm, 'Faxa_snowc', compice, mapconsf, 'one', 'unset') + call addmrg_to(compice, 'Faxa_snow', mrg_from=compatm, mrg_fld='Faxa_snowc', mrg_type='sum') + call addmap_from(compatm, 'Faxa_snowl', compice, mapconsf, 'one', 'unset') + call addmrg_to(compice, 'Faxa_snow', mrg_from=compatm, mrg_fld='Faxa_snowl', mrg_type='sum') call ESMF_LogWrite(trim(subname)//": done", ESMF_LOGMSG_INFO) From 33eee80738e7c0a67ab5cc407032a0f2d63dd4d7 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Mon, 9 Oct 2023 17:53:36 +1100 Subject: [PATCH 05/41] typo fix --- mediator/med.F90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mediator/med.F90 b/mediator/med.F90 index 8579f3d9..bec9766e 100644 --- a/mediator/med.F90 +++ b/mediator/med.F90 @@ -843,9 +843,9 @@ subroutine AdvertiseFields(gcomp, importState, exportState, clock, rc) else if (coupling_mode(1:4) == 'hafs') then call esmFldsExchange_hafs(gcomp, phase='advertise', rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - else if (trim(coupling_mode(1:4)) == 'access') then - call esmFldsExchange_access(gcomp, phase='advertise', rc=rc) - if (ChkErr(rc,__LINE__,u_FILE_u)) return + else if (trim(coupling_mode) == 'access') then + call esmFldsExchange_access(gcomp, phase='advertise', rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return else call shr_log_error(trim(coupling_mode)//' is not a valid coupling_mode', rc=rc) return From 76c9db9ab11eedbc49516a6c5ca89130ecc5c5bb Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Tue, 31 Oct 2023 11:24:29 +1100 Subject: [PATCH 06/41] bufix: fixed syntax errors --- mediator/esmFldsExchange_access_mod.F90 | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 index 00d5272a..08576bb2 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -151,8 +151,7 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) 'ia_itopt', & 'ia_itopk', & 'ia_pndfn', & - 'ia_pndtn', & - /) ! sea_surface_temperature + 'ia_pndtn'/) ! sea_surface_temperature do n = 1,size(S_flds) fldname = trim(S_flds(n)) call addfld(fldListFr(compice)%flds, trim(fldname)) @@ -390,8 +389,7 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) 'ia_itopt', & 'ia_itopk', & 'ia_pndfn', & - 'ia_pndtn', & - /) ! sea_surface_temperature + 'ia_pndtn'/) ! sea_surface_temperature do n = 1,size(S_flds) fldname = trim(S_flds(n)) call addmap(fldListFr(compice)%flds, trim(fldname), compatm, mapconsf, 'ifrac', 'unset') From 197998e60c564ba9032ffe27ab96eda63e4ba0db Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Tue, 31 Oct 2023 11:30:41 +1100 Subject: [PATCH 07/41] bufix: fixed syntax errors --- mediator/esmFldsExchange_access_mod.F90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 index 08576bb2..37ccb673 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -154,8 +154,8 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) 'ia_pndtn'/) ! sea_surface_temperature do n = 1,size(S_flds) fldname = trim(S_flds(n)) - call addfld(fldListFr(compice)%flds, trim(fldname)) - call addfld(fldListTo(compatm)%flds, trim(fldname)) + call addfld_from(compice, trim(fldname)) + call addfld_to(compatm, trim(fldname)) end do deallocate(S_flds) @@ -392,8 +392,8 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) 'ia_pndtn'/) ! sea_surface_temperature do n = 1,size(S_flds) fldname = trim(S_flds(n)) - call addmap(fldListFr(compice)%flds, trim(fldname), compatm, mapconsf, 'ifrac', 'unset') - call addmrg(fldListTo(compatm)%flds, trim(fldname), mrg_from=compice, mrg_fld=trim(fldname), mrg_type='copy') + call addmap_from(compice, trim(fldname), compatm, mapconsf, 'ifrac', 'unset') + call addmrg_to(compatm, trim(fldname), mrg_from=compice, mrg_fld=trim(fldname), mrg_type='copy') end do deallocate(S_flds) ! call addmap(fldListFr(compice)%flds, 'Si_t', compatm, mapconsf, 'ifrac', 'unset') From 072517458243666019921ada6a3e012d367f22d3 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Tue, 14 Nov 2023 14:24:18 +1100 Subject: [PATCH 08/41] more logging --- mediator/med_merge_mod.F90 | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/mediator/med_merge_mod.F90 b/mediator/med_merge_mod.F90 index 6d12fa92..822346c9 100644 --- a/mediator/med_merge_mod.F90 +++ b/mediator/med_merge_mod.F90 @@ -335,6 +335,8 @@ subroutine med_merge_auto_field(merge_type, field_out, ungriddedUBound_out, & real(R8), pointer :: dpf2(:,:) ! intput pointers to 1d and 2d fields real(R8), pointer :: dpw1(:) ! weight pointer character(len=*),parameter :: subname=' (med_merge_mod: med_merge_auto_field)' + character(len=CL) :: tmpString + integer :: ungriddedUbound_out1(1) !--------------------------------------- rc = ESMF_SUCCESS @@ -367,6 +369,19 @@ subroutine med_merge_auto_field(merge_type, field_out, ungriddedUBound_out, & ! Get field pointer to output and input fields ! Assume that input and output ungridded upper bounds are the same - this is checked in error check + ! field_in + ! field_out + + call ESMF_FieldGet(field_in, ungriddedUBound=ungriddedUbound_out1, rc=rc) + write (tmpString, *) ungriddedUbound_out1(1) + call ESMF_LogWrite('Input ungridded ubound: ' // trim(tmpString), ESMF_LogMsg_Info, rc=rc) + + call ESMF_FieldGet(field_out, ungriddedUBound=ungriddedUbound_out1, rc=rc) + write (tmpString, *) ungriddedUbound_out1(1) + call ESMF_LogWrite('Output ungridded ubound: ' // trim(tmpString), ESMF_LogMsg_Info, rc=rc) + + + if (ungriddedUBound_out(1) > 0) then call ESMF_FieldGet(field_in, farrayPtr=dpf2, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return From c91eabc6f3fea0f0edd3faf42357572a68dd417d Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Mon, 22 Jan 2024 16:59:24 +1100 Subject: [PATCH 09/41] update CM3 CMEPS to 1.1.2 --- mediator/esmFldsExchange_access_mod.F90 | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 index 37ccb673..17a6c65f 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -549,12 +549,19 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) ! --------------------------------------------------------------------- ! from atm - allocate(F_flds(5, 2)) + allocate(F_flds(12, 2)) F_flds(1,:) = (/'Faxa_swvdr ', 'Faxa_swvdr '/) F_flds(2,:) = (/'Faxa_swndr ', 'Faxa_swndr '/) F_flds(3,:) = (/'Faxa_swvdf', 'Faxa_swvdf'/) F_flds(4,:) = (/'Faxa_swndf', 'Faxa_swndf'/) F_flds(5,:) = (/'Faxa_lwdn', 'Faxa_lwdn'/) + F_flds(6,:) = (/'pen_rad', 'pen_rad'/) + F_flds(7,:) = (/'topmelt', 'topmelt'/) + F_flds(8,:) = (/'botmelt', 'botmelt'/) + F_flds(9,:) = (/'tstar_sice', 'tstar_sice'/) + F_flds(10,:) = (/'sublim', 'sublim'/) + F_flds(11,:) = (/'Foxx_sen', 'Foxx_sen'/) + F_flds(12,:) = (/'Faxa_swdn', 'Faxa_swdn'/) do n = 1,size(F_flds,1) fldname1 = trim(F_flds(n,1)) From 3f980c70b5d58f308bd0c724eb80b5d92f9812ae Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Mon, 4 Mar 2024 12:43:07 +1100 Subject: [PATCH 10/41] fix fields --- mediator/esmFldsExchange_access_mod.F90 | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 index 17a6c65f..669b5b3e 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -267,14 +267,20 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) ! --------------------------------------------------------------------- ! to ice: flux fields ! --------------------------------------------------------------------- - allocate(F_flds(7, 2)) + + allocate(F_flds(12, 2)) F_flds(1,:) = (/'Faxa_swvdr ', 'Faxa_swvdr '/) F_flds(2,:) = (/'Faxa_swndr ', 'Faxa_swndr '/) F_flds(3,:) = (/'Faxa_swvdf', 'Faxa_swvdf'/) F_flds(4,:) = (/'Faxa_swndf', 'Faxa_swndf'/) F_flds(5,:) = (/'Faxa_lwdn', 'Faxa_lwdn'/) - F_flds(6,:) = (/'Faxa_rainl', 'Faxa_rain'/) - F_flds(7,:) = (/'Faxa_snowl', 'Faxa_snow'/) + F_flds(6,:) = (/'pen_rad', 'pen_rad'/) + F_flds(7,:) = (/'topmelt', 'topmelt'/) + F_flds(8,:) = (/'botmelt', 'botmelt'/) + F_flds(9,:) = (/'tstar_sice', 'tstar_sice'/) + F_flds(10,:) = (/'sublim', 'sublim'/) + F_flds(11,:) = (/'Foxx_sen', 'Foxx_sen'/) + F_flds(12,:) = (/'Faxa_swdn', 'Faxa_swdn'/) do n = 1,size(F_flds,1) fldname1 = trim(F_flds(n,1)) fldname2 = trim(F_flds(n,2)) @@ -285,6 +291,11 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) call addfld_from(compatm, 'Faxa_rainc') call addfld_from(compatm, 'Faxa_snowc') + call addfld_from(compatm, 'Faxa_rainl') + call addfld_from(compatm, 'Faxa_snowl') + + call addfld_to(compice, 'Faxa_rain') + call addfld_to(compice, 'Faxa_snow') call ESMF_LogWrite(trim(subname)//": done", ESMF_LOGMSG_INFO) From 21bb9ce5e7db0e4bfb46352e50546f1fcecf8b56 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Mon, 20 May 2024 11:50:35 +1000 Subject: [PATCH 11/41] change flux scaling --- mediator/esmFldsExchange_access_mod.F90 | 52 +++++++++++++------------ 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 index 669b5b3e..485db876 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -392,9 +392,11 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) call addmap_from(compocn, 'So_t', compatm, mapconsf, 'ofrac', 'unset') call addmrg_to(compatm, 'So_t', mrg_from=compocn, mrg_fld='So_t', mrg_type='copy') - allocate(S_flds(8)) - S_flds = (/'Si_t', & - 'ia_aicen', & + call addmap_from(compice, 'Si_t', compatm, mapconsd, 'ifrac', 'unset') + call addmrg_to(compatm, 'Si_t', mrg_from=compice, mrg_fld='Si_t', mrg_type='copy') + + allocate(S_flds(7)) + S_flds = (/'ia_aicen', & 'ia_snown', & 'ia_thikn', & 'ia_itopt', & @@ -403,7 +405,7 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) 'ia_pndtn'/) ! sea_surface_temperature do n = 1,size(S_flds) fldname = trim(S_flds(n)) - call addmap_from(compice, trim(fldname), compatm, mapconsf, 'ifrac', 'unset') + call addmap_from(compice, trim(fldname), compatm, mapconsf, 'none', 'unset') call addmrg_to(compatm, trim(fldname), mrg_from=compice, mrg_fld=trim(fldname), mrg_type='copy') end do deallocate(S_flds) @@ -438,7 +440,7 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) ! --------------------------------------------------------------------- ! from atm - allocate(F_flds(11, 2)) + allocate(F_flds(9, 2)) F_flds(1,:) = (/'Foxx_sen', 'Foxx_sen'/) F_flds(2,:) = (/'Foxx_evap', 'Foxx_evap'/) F_flds(3,:) = (/'Foxx_lwnet', 'Foxx_lwnet'/) @@ -462,7 +464,7 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) deallocate(F_flds) ! precip - call addmap_from(compatm, 'Faxa_rainc', compocn, mapconsf, 'one', 'unset') + call addmap_from(compatm, 'Faxa_rainc', compocn, mapconsf, 'one', 'unset') ! TODO: weight by ocean fraction call addmrg_to(compocn, 'Faxa_rain', mrg_from=compatm, mrg_fld='Faxa_rainc', mrg_type='sum') call addmap_from(compatm, 'Faxa_rainl', compocn, mapconsf, 'one', 'unset') call addmrg_to(compocn, 'Faxa_rain', mrg_from=compatm, mrg_fld='Faxa_rainl', mrg_type='sum') @@ -471,13 +473,15 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) call addmrg_to(compocn, 'Faxa_snow', mrg_from=compatm, mrg_fld='Faxa_snowc', mrg_type='sum') call addmap_from(compatm, 'Faxa_snowl', compocn, mapconsf, 'one', 'unset') call addmrg_to(compocn, 'Faxa_snow', mrg_from=compatm, mrg_fld='Faxa_snowl', mrg_type='sum') - + ! from ice - allocate(F_flds(4, 2)) + call addmap_from(compice, 'Si_ifrac', compocn, mapfcopy, 'unset', 'unset') + call addmrg_to(compocn, 'Si_ifrac', mrg_from=compice, mrg_fld='Si_ifrac', mrg_type='copy') + + allocate(F_flds(3, 2)) F_flds(1,:) = (/'Fioi_salt', 'Fioi_salt'/) - F_flds(2,:) = (/'Si_ifrac', 'Si_ifrac'/) ! ice_fraction - F_flds(3,:) = (/'Fioi_meltw', 'Fioi_meltw'/) - F_flds(4,:) = (/'Fioi_melth', 'Fioi_melth'/) ! heat flux sea-ice to ocean + F_flds(2,:) = (/'Fioi_meltw', 'Fioi_meltw'/) + F_flds(3,:) = (/'Fioi_melth', 'Fioi_melth'/) ! heat flux sea-ice to ocean do n = 1,size(F_flds,1) fldname1 = trim(F_flds(n,1)) fldname2 = trim(F_flds(n,2)) @@ -485,7 +489,7 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) fldchk(is_local%wrap%FBImp(compice, compice), trim(fldname1),rc=rc) & ) then call addmap_from(compice, trim(fldname1), compocn, mapfcopy, 'unset', 'unset') - call addmrg_to(compocn, trim(fldname2), mrg_from=compice, mrg_fld=trim(fldname1), mrg_type='copy') + call addmrg_to(compocn, trim(fldname2), mrg_from=compice, mrg_fld=trim(fldname1), mrg_type='copy_with_weights', mrg_fracname='ifrac') end if end do deallocate(F_flds) @@ -534,7 +538,7 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) deallocate(S_flds) ! from ocn - allocate(S_flds(6)) + allocate(S_flds(7)) S_flds = (/'So_dhdx', & ! inst_zonal_wind_height10m 'So_dhdy', & ! inst_merid_wind_height10m 'So_t ', & ! inst_temp_height2m @@ -561,16 +565,16 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) ! from atm allocate(F_flds(12, 2)) - F_flds(1,:) = (/'Faxa_swvdr ', 'Faxa_swvdr '/) - F_flds(2,:) = (/'Faxa_swndr ', 'Faxa_swndr '/) - F_flds(3,:) = (/'Faxa_swvdf', 'Faxa_swvdf'/) - F_flds(4,:) = (/'Faxa_swndf', 'Faxa_swndf'/) - F_flds(5,:) = (/'Faxa_lwdn', 'Faxa_lwdn'/) - F_flds(6,:) = (/'pen_rad', 'pen_rad'/) - F_flds(7,:) = (/'topmelt', 'topmelt'/) - F_flds(8,:) = (/'botmelt', 'botmelt'/) - F_flds(9,:) = (/'tstar_sice', 'tstar_sice'/) - F_flds(10,:) = (/'sublim', 'sublim'/) + F_flds(1,:) = (/'pen_rad', 'pen_rad'/) + F_flds(2,:) = (/'topmelt', 'topmelt'/) + F_flds(3,:) = (/'botmelt', 'botmelt'/) + F_flds(4,:) = (/'tstar_sice', 'tstar_sice'/) + F_flds(5,:) = (/'sublim', 'sublim'/) + F_flds(6,:) = (/'Faxa_swvdr ', 'Faxa_swvdr '/) + F_flds(7,:) = (/'Faxa_swndr ', 'Faxa_swndr '/) + F_flds(8,:) = (/'Faxa_swvdf', 'Faxa_swvdf'/) + F_flds(9,:) = (/'Faxa_swndf', 'Faxa_swndf'/) + F_flds(10,:) = (/'Faxa_lwdn', 'Faxa_lwdn'/) F_flds(11,:) = (/'Foxx_sen', 'Foxx_sen'/) F_flds(12,:) = (/'Faxa_swdn', 'Faxa_swdn'/) @@ -581,7 +585,7 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) fldchk(is_local%wrap%FBImp(compatm, compatm), trim(fldname1), rc=rc) & ) then - call addmap_from(compatm, trim(fldname1), compice, mapconsf, 'one', 'unset') + call addmap_from(compatm, trim(fldname1), compice, mapconsf, 'one', 'unset') ! mapping with total ifrac, should use category fractions call addmrg_to(compice, trim(fldname2), mrg_from=compatm, mrg_fld=trim(fldname1), mrg_type='copy') end if From 9b8b24d494bb93fce6985b0cf76498d4797360c4 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Mon, 20 May 2024 12:43:12 +1000 Subject: [PATCH 12/41] scale precipitation over ocean by ocean fraction --- mediator/esmFldsExchange_access_mod.F90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 index 485db876..b79aacfa 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -465,14 +465,14 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) ! precip call addmap_from(compatm, 'Faxa_rainc', compocn, mapconsf, 'one', 'unset') ! TODO: weight by ocean fraction - call addmrg_to(compocn, 'Faxa_rain', mrg_from=compatm, mrg_fld='Faxa_rainc', mrg_type='sum') + call addmrg_to(compocn, 'Faxa_rain', mrg_from=compatm, mrg_fld='Faxa_rainc', mrg_type='sum_with_weights', mrg_fracname='ofrac') call addmap_from(compatm, 'Faxa_rainl', compocn, mapconsf, 'one', 'unset') - call addmrg_to(compocn, 'Faxa_rain', mrg_from=compatm, mrg_fld='Faxa_rainl', mrg_type='sum') + call addmrg_to(compocn, 'Faxa_rain', mrg_from=compatm, mrg_fld='Faxa_rainl', mrg_type='sum_with_weights', mrg_fracname='ofrac') call addmap_from(compatm, 'Faxa_snowc', compocn, mapconsf, 'one', 'unset') - call addmrg_to(compocn, 'Faxa_snow', mrg_from=compatm, mrg_fld='Faxa_snowc', mrg_type='sum') + call addmrg_to(compocn, 'Faxa_snow', mrg_from=compatm, mrg_fld='Faxa_snowc', mrg_type='sum_with_weights', mrg_fracname='ofrac') call addmap_from(compatm, 'Faxa_snowl', compocn, mapconsf, 'one', 'unset') - call addmrg_to(compocn, 'Faxa_snow', mrg_from=compatm, mrg_fld='Faxa_snowl', mrg_type='sum') + call addmrg_to(compocn, 'Faxa_snow', mrg_from=compatm, mrg_fld='Faxa_snowl', mrg_type='sum_with_weights', mrg_fracname='ofrac') ! from ice call addmap_from(compice, 'Si_ifrac', compocn, mapfcopy, 'unset', 'unset') From 3eea31fc59cd1786b23ebfafb6d029d4369ef694 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Tue, 21 May 2024 11:00:05 +1000 Subject: [PATCH 13/41] remove scaling of ice->ocn fluxes by ice fraction (scaling now in CICE cap) --- mediator/esmFldsExchange_access_mod.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 index b79aacfa..39368db7 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -489,7 +489,7 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) fldchk(is_local%wrap%FBImp(compice, compice), trim(fldname1),rc=rc) & ) then call addmap_from(compice, trim(fldname1), compocn, mapfcopy, 'unset', 'unset') - call addmrg_to(compocn, trim(fldname2), mrg_from=compice, mrg_fld=trim(fldname1), mrg_type='copy_with_weights', mrg_fracname='ifrac') + call addmrg_to(compocn, trim(fldname2), mrg_from=compice, mrg_fld=trim(fldname1), mrg_type='copy') end if end do deallocate(F_flds) From 0e3c4547510a5351eec56cd2f9f7ac737a1580c9 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Tue, 20 Aug 2024 14:35:50 +1000 Subject: [PATCH 14/41] fix precipitation merge --- mediator/esmFldsExchange_access_mod.F90 | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 index 39368db7..3242b254 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -465,14 +465,14 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) ! precip call addmap_from(compatm, 'Faxa_rainc', compocn, mapconsf, 'one', 'unset') ! TODO: weight by ocean fraction - call addmrg_to(compocn, 'Faxa_rain', mrg_from=compatm, mrg_fld='Faxa_rainc', mrg_type='sum_with_weights', mrg_fracname='ofrac') call addmap_from(compatm, 'Faxa_rainl', compocn, mapconsf, 'one', 'unset') - call addmrg_to(compocn, 'Faxa_rain', mrg_from=compatm, mrg_fld='Faxa_rainl', mrg_type='sum_with_weights', mrg_fracname='ofrac') - + call addmrg_to(compocn, 'Faxa_rain' , mrg_from=compatm, mrg_fld='Faxa_rainc:Faxa_rainl', & + mrg_type='sum_with_weights', mrg_fracname='ofrac') + call addmap_from(compatm, 'Faxa_snowc', compocn, mapconsf, 'one', 'unset') - call addmrg_to(compocn, 'Faxa_snow', mrg_from=compatm, mrg_fld='Faxa_snowc', mrg_type='sum_with_weights', mrg_fracname='ofrac') call addmap_from(compatm, 'Faxa_snowl', compocn, mapconsf, 'one', 'unset') - call addmrg_to(compocn, 'Faxa_snow', mrg_from=compatm, mrg_fld='Faxa_snowl', mrg_type='sum_with_weights', mrg_fracname='ofrac') + call addmrg_to(compocn, 'Faxa_snow' , mrg_from=compatm, mrg_fld='Faxa_snowc:Faxa_snowl', & + mrg_type='sum_with_weights', mrg_fracname='ofrac') ! from ice call addmap_from(compice, 'Si_ifrac', compocn, mapfcopy, 'unset', 'unset') @@ -594,14 +594,14 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) ! precip call addmap_from(compatm, 'Faxa_rainc', compice, mapconsf, 'one', 'unset') - call addmrg_to(compice, 'Faxa_rain', mrg_from=compatm, mrg_fld='Faxa_rainc', mrg_type='sum') call addmap_from(compatm, 'Faxa_rainl', compice, mapconsf, 'one', 'unset') - call addmrg_to(compice, 'Faxa_rain', mrg_from=compatm, mrg_fld='Faxa_rainl', mrg_type='sum') - + call addmrg_to(compice, 'Faxa_rain' , mrg_from=compatm, mrg_fld='Faxa_rainc:Faxa_rainl', & + mrg_type='sum') + call addmap_from(compatm, 'Faxa_snowc', compice, mapconsf, 'one', 'unset') - call addmrg_to(compice, 'Faxa_snow', mrg_from=compatm, mrg_fld='Faxa_snowc', mrg_type='sum') call addmap_from(compatm, 'Faxa_snowl', compice, mapconsf, 'one', 'unset') - call addmrg_to(compice, 'Faxa_snow', mrg_from=compatm, mrg_fld='Faxa_snowl', mrg_type='sum') + call addmrg_to(compice, 'Faxa_snow' , mrg_from=compatm, mrg_fld='Faxa_snowc:Faxa_snowl', & + mrg_type='sum') call ESMF_LogWrite(trim(subname)//": done", ESMF_LOGMSG_INFO) From 2e7db88e139fbdbfc6e08209e62b4bd3700e44ca Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Wed, 4 Sep 2024 11:17:59 +1000 Subject: [PATCH 15/41] add iceberg fluxes --- mediator/esmFldsExchange_access_mod.F90 | 31 ++++++++++++++++--------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 index 3242b254..220c3c46 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -143,7 +143,7 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) ! --------------------------------------------------------------------- ! to atm: from ice ! --------------------------------------------------------------------- - allocate(S_flds(8)) + allocate(S_flds(9)) S_flds = (/'Si_t', & 'ia_aicen', & 'ia_snown', & @@ -151,7 +151,9 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) 'ia_itopt', & 'ia_itopk', & 'ia_pndfn', & - 'ia_pndtn'/) ! sea_surface_temperature + 'ia_pndtn', & + 'sstfrz' & + /) ! sea_surface_temperature do n = 1,size(S_flds) fldname = trim(S_flds(n)) call addfld_from(compice, trim(fldname)) @@ -232,7 +234,7 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) ! --------------------------------------------------------------------- ! from atm - allocate(S_flds(2)) + allocate(S_flds(10)) S_flds = (/'Sa_z', & 'Sa_u', & 'Sa_v', & @@ -240,7 +242,9 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) 'Sa_tbot', & 'Sa_pbot', & 'Sa_dens', & - 'Sa_ptem'/) + 'Sa_ptem', & + 'um_icesth', & + 'um_icenth' /) do n = 1,size(S_flds) fldname = trim(S_flds(n)) call addfld_from(compatm, trim(fldname)) @@ -394,6 +398,9 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) call addmap_from(compice, 'Si_t', compatm, mapconsd, 'ifrac', 'unset') call addmrg_to(compatm, 'Si_t', mrg_from=compice, mrg_fld='Si_t', mrg_type='copy') + + call addmap_from(compice, 'sstfrz', compatm, mapconsf, 'none', 'unset') + call addmrg_to(compatm, 'sstfrz', mrg_from=compice, mrg_fld='sstfrz', mrg_type='copy') allocate(S_flds(7)) S_flds = (/'ia_aicen', & @@ -514,15 +521,17 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) ! --------------------------------------------------------------------- ! from atm - allocate(S_flds(8)) - S_flds = (/'Sa_z', & ! inst_zonal_wind_height10m - 'Sa_u', & ! inst_merid_wind_height10m - 'Sa_v ', & ! inst_temp_height2m - 'Sa_shum ', & ! inst_spec_humid_height2m - 'Sa_tbot', & ! Sa_pslv + allocate(S_flds(10)) + S_flds = (/'Sa_z', & + 'Sa_u', & + 'Sa_v', & + 'Sa_shum', & + 'Sa_tbot', & 'Sa_pbot', & 'Sa_dens', & - 'Sa_ptem' /) ! inst_temp_height_surface + 'Sa_ptem', & + 'um_icesth', & + 'um_icenth' /) do n = 1,size(S_flds) fldname = trim(S_flds(n)) From 1fa72eef9fc69e3694a14365df3330267e36c343 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Tue, 1 Oct 2024 10:48:56 +1000 Subject: [PATCH 16/41] add ocean current coupling --- mediator/esmFldsExchange_access_mod.F90 | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 index 220c3c46..8f13572c 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -131,8 +131,8 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) ! --------------------------------------------------------------------- ! to atm: from ocn ! --------------------------------------------------------------------- - allocate(S_flds(1)) - S_flds = (/'So_t'/) ! sea_surface_temperature + allocate(S_flds(3)) + S_flds = (/'So_t', 'So_u', 'So_v'/) ! sea_surface_temperature do n = 1,size(S_flds) fldname = trim(S_flds(n)) call addfld_from(compocn, trim(fldname)) @@ -395,6 +395,10 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) ! --------------------------------------------------------------------- call addmap_from(compocn, 'So_t', compatm, mapconsf, 'ofrac', 'unset') call addmrg_to(compatm, 'So_t', mrg_from=compocn, mrg_fld='So_t', mrg_type='copy') + call addmap_from(compocn, 'So_u', compatm, mapconsf, 'ofrac', 'unset') + call addmrg_to(compatm, 'So_u', mrg_from=compocn, mrg_fld='So_u', mrg_type='copy') + call addmap_from(compocn, 'So_v', compatm, mapconsf, 'ofrac', 'unset') + call addmrg_to(compatm, 'So_v', mrg_from=compocn, mrg_fld='So_v', mrg_type='copy') call addmap_from(compice, 'Si_t', compatm, mapconsd, 'ifrac', 'unset') call addmrg_to(compatm, 'Si_t', mrg_from=compice, mrg_fld='Si_t', mrg_type='copy') From fc6754c1045b1301220155076be998508a245a7a Mon Sep 17 00:00:00 2001 From: Spencer Wong Date: Wed, 19 Feb 2025 17:23:12 +1100 Subject: [PATCH 17/41] Don't run custom CESM calculations for access --- mediator/med_phases_prep_ocn_mod.F90 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mediator/med_phases_prep_ocn_mod.F90 b/mediator/med_phases_prep_ocn_mod.F90 index f4f9bd3b..43833568 100644 --- a/mediator/med_phases_prep_ocn_mod.F90 +++ b/mediator/med_phases_prep_ocn_mod.F90 @@ -255,8 +255,10 @@ subroutine med_phases_prep_ocn_accum(gcomp, rc) end if ! custom merges to ocean - call med_phases_prep_ocn_custom(gcomp, rc) - if (ChkErr(rc,__LINE__,u_FILE_u)) return + if (trim(coupling_mode) /= "access") then + call med_phases_prep_ocn_custom(gcomp, rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + end if ! ocean accumulator call FB_accum(is_local%wrap%FBExpAccumOcn, is_local%wrap%FBExp(compocn), rc=rc) From db26dc0a5eb43f372f481114387affd44334cc5f Mon Sep 17 00:00:00 2001 From: Spencer Wong <88933912+blimlim@users.noreply.github.com> Date: Tue, 25 Feb 2025 11:02:37 +1100 Subject: [PATCH 18/41] Tidy old logging code and comments Co-authored-by: Kieran Ricardo --- mediator/med_merge_mod.F90 | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/mediator/med_merge_mod.F90 b/mediator/med_merge_mod.F90 index 822346c9..6d12fa92 100644 --- a/mediator/med_merge_mod.F90 +++ b/mediator/med_merge_mod.F90 @@ -335,8 +335,6 @@ subroutine med_merge_auto_field(merge_type, field_out, ungriddedUBound_out, & real(R8), pointer :: dpf2(:,:) ! intput pointers to 1d and 2d fields real(R8), pointer :: dpw1(:) ! weight pointer character(len=*),parameter :: subname=' (med_merge_mod: med_merge_auto_field)' - character(len=CL) :: tmpString - integer :: ungriddedUbound_out1(1) !--------------------------------------- rc = ESMF_SUCCESS @@ -369,19 +367,6 @@ subroutine med_merge_auto_field(merge_type, field_out, ungriddedUBound_out, & ! Get field pointer to output and input fields ! Assume that input and output ungridded upper bounds are the same - this is checked in error check - ! field_in - ! field_out - - call ESMF_FieldGet(field_in, ungriddedUBound=ungriddedUbound_out1, rc=rc) - write (tmpString, *) ungriddedUbound_out1(1) - call ESMF_LogWrite('Input ungridded ubound: ' // trim(tmpString), ESMF_LogMsg_Info, rc=rc) - - call ESMF_FieldGet(field_out, ungriddedUBound=ungriddedUbound_out1, rc=rc) - write (tmpString, *) ungriddedUbound_out1(1) - call ESMF_LogWrite('Output ungridded ubound: ' // trim(tmpString), ESMF_LogMsg_Info, rc=rc) - - - if (ungriddedUBound_out(1) > 0) then call ESMF_FieldGet(field_in, farrayPtr=dpf2, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return From 996d1661ba0052d8fb27a6a9255046baccffaeba Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Tue, 18 Mar 2025 11:10:17 +1100 Subject: [PATCH 19/41] Implement time-travelling ice in post atm --- mediator/med_phases_post_atm_mod.F90 | 75 +++++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) diff --git a/mediator/med_phases_post_atm_mod.F90 b/mediator/med_phases_post_atm_mod.F90 index 333497a6..e5d23e96 100644 --- a/mediator/med_phases_post_atm_mod.F90 +++ b/mediator/med_phases_post_atm_mod.F90 @@ -33,7 +33,7 @@ subroutine med_phases_post_atm(gcomp, rc) use med_map_mod , only : med_map_field_packed use med_constants_mod , only : dbug_flag => med_constants_dbug_flag use med_utils_mod , only : chkerr => med_utils_ChkErr - use med_internalstate_mod , only : compocn, compatm, compice, complnd, compwav + use med_internalstate_mod , only : compocn, compatm, compice, complnd, compwav, coupling_mode use perf_mod , only : t_startf, t_stopf ! input/output variables @@ -58,6 +58,11 @@ subroutine med_phases_post_atm(gcomp, rc) call ESMF_GridCompGetInternalState(gcomp, is_local, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return + if (trim(coupling_mode) == 'access') then + call med_phases_post_atm_custom_access(gcomp, rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + end if + ! map atm to ocn if (is_local%wrap%med_coupling_active(compatm,compocn)) then call t_startf('MED:'//trim(subname)//' map_atm2ocn') @@ -128,4 +133,72 @@ subroutine med_phases_post_atm(gcomp, rc) end subroutine med_phases_post_atm + subroutine med_phases_post_atm_custom_access(gcomp, rc) + use med_kind_mod , only : CX=>SHR_KIND_CX, CS=>SHR_KIND_CS, CL=>SHR_KIND_CL, R8=>SHR_KIND_R8 + use med_internalstate_mod , only : compocn, compatm, compice, coupling_mode + use med_internalstate_mod , only : InternalState + use ESMF , only : ESMF_GridComp, ESMF_FieldBundleGet + use ESMF , only : ESMF_FieldGet, ESMF_Field + use ESMF , only : ESMF_LogWrite, ESMF_LOGMSG_INFO, ESMF_SUCCESS + use med_constants_mod , only : dbug_flag => med_constants_dbug_flag + use perf_mod , only : t_startf, t_stopf + + ! input/output variables + type(ESMF_GridComp) :: gcomp + integer, intent(out) :: rc + + ! local variables + type(InternalState) :: is_local + real(R8), pointer :: ice_frac_cat_ptr(:, :), ice_flux_cat_ptr(:, :) + type(ESMF_Field) :: ice_frac_cat, ice_flux_cat + integer :: lsize1, lsize2, i, j, n + character(len=*), parameter :: subname='(med_phases_post_atm_custom_access)' + character(len=CS) :: fld_names(4) + !--------------------------------------- + + rc = ESMF_SUCCESS + + call t_startf('MED:'//subname) + if (dbug_flag > 20) then + call ESMF_LogWrite(subname//' called', ESMF_LOGMSG_INFO) + end if + + ! Get the internal state + nullify(is_local%wrap) + call ESMF_GridCompGetInternalState(gcomp, is_local, rc) + + call ESMF_FieldBundleGet(is_local%wrap%FBImp(compice, compatm), fieldName='ia_aicen', field=ice_frac_cat, rc=rc) + call ESMF_FieldGet(ice_frac_cat, farrayptr=ice_frac_cat_ptr) + + lsize1 = size(ice_frac_cat_ptr, dim=1) + lsize2 = size(ice_frac_cat_ptr, dim=2) + + fld_names = [character(len=CS) :: & + 'topmelt', & + 'botmelt', & + 'sublim', & + 'pen_rad'] + + do n = 1,size(fld_names) + + call ESMF_FieldBundleGet(is_local%wrap%FBImp(compatm, compatm), fieldName=trim(fld_names(n)), field=ice_flux_cat, rc=rc) + call ESMF_FieldGet(ice_flux_cat, farrayptr=ice_flux_cat_ptr) + + do j = 1,lsize2 + do i = 1,lsize1 + if (ice_frac_cat_ptr(i, j) > 0.0) then + ice_flux_cat_ptr(i, j) = ice_flux_cat_ptr(i, j) / ice_frac_cat_ptr(i, j) + end if + end do + end do + + end do + + if (dbug_flag > 20) then + call ESMF_LogWrite(subname//' done', ESMF_LOGMSG_INFO) + end if + call t_stopf('MED:'//subname) + + end subroutine med_phases_post_atm_custom_access + end module med_phases_post_atm_mod From 63e4c6debb5fbea5dffd9b9ee38bb48ad368ad83 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Tue, 23 Dec 2025 11:12:09 +1100 Subject: [PATCH 20/41] map wind stress atm->ocn with patch interpolation --- mediator/esmFldsExchange_access_mod.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 index 8f13572c..872720d4 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -508,12 +508,12 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) ! momentum transfer call addmap_from(compice, 'Fioi_taux', compocn, mapfcopy, 'unset', 'unset') call addmrg_to(compocn, 'Foxx_taux', mrg_from=compice, mrg_fld='Fioi_taux', mrg_type='merge', mrg_fracname='ifrac') - call addmap_from(compatm, 'Faxa_taux', compocn, mapconsf, 'one', 'unset') + call addmap_from(compatm, 'Faxa_taux', compocn, mappatch, 'one', 'unset') call addmrg_to(compocn, 'Foxx_taux', mrg_from=compatm, mrg_fld='Faxa_taux', mrg_type='merge', mrg_fracname='ofrac') call addmap_from(compice, 'Fioi_tauy', compocn, mapfcopy, 'unset', 'unset') call addmrg_to(compocn, 'Foxx_tauy', mrg_from=compice, mrg_fld='Fioi_tauy', mrg_type='merge', mrg_fracname='ifrac') - call addmap_from(compatm, 'Faxa_tauy', compocn, mapconsf, 'one', 'unset') + call addmap_from(compatm, 'Faxa_tauy', compocn, mappatch, 'one', 'unset') call addmrg_to(compocn, 'Foxx_tauy', mrg_from=compatm, mrg_fld='Faxa_tauy', mrg_type='merge', mrg_fracname='ofrac') !===================================================================== From 06629b256499670dda1305f82cc86bbe5d74fbd3 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Mon, 16 Feb 2026 10:09:41 +1100 Subject: [PATCH 21/41] Update mediator/esmFldsExchange_access_mod.F90 Co-authored-by: Anton Steketee <79179784+anton-seaice@users.noreply.github.com> --- mediator/esmFldsExchange_access_mod.F90 | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 index 872720d4..830f4bd8 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -3,10 +3,7 @@ module esmFldsExchange_access_mod use ESMF use NUOPC use med_utils_mod , only : chkerr => med_utils_chkerr - use med_kind_mod , only : CX=>SHR_KIND_CX - use med_kind_mod , only : CS=>SHR_KIND_CS - use med_kind_mod , only : CL=>SHR_KIND_CL - use med_kind_mod , only : R8=>SHR_KIND_R8 + use med_kind_mod , only : CX=>SHR_KIND_CX, CS=>SHR_KIND_CS, CL=>SHR_KIND_CL, R8=>SHR_KIND_R8 use med_internalstate_mod , only : compmed, compatm, compocn, compwav, compice use med_internalstate_mod , only : ncomps use med_internalstate_mod , only : coupling_mode From 5eea76b3b6c8213fa6dfd27d50875ba5a87a062d Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Mon, 16 Feb 2026 10:10:05 +1100 Subject: [PATCH 22/41] Update mediator/esmFldsExchange_access_mod.F90 Co-authored-by: Anton Steketee <79179784+anton-seaice@users.noreply.github.com> --- mediator/esmFldsExchange_access_mod.F90 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 index 830f4bd8..ad69e9aa 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -4,8 +4,7 @@ module esmFldsExchange_access_mod use NUOPC use med_utils_mod , only : chkerr => med_utils_chkerr use med_kind_mod , only : CX=>SHR_KIND_CX, CS=>SHR_KIND_CS, CL=>SHR_KIND_CL, R8=>SHR_KIND_R8 - use med_internalstate_mod , only : compmed, compatm, compocn, compwav, compice - use med_internalstate_mod , only : ncomps + use med_internalstate_mod , only : compmed, compatm, compocn, compice, ncomps use med_internalstate_mod , only : coupling_mode use esmFlds , only : med_fldList_type use esmFlds , only : addfld_to => med_fldList_addfld_to From 7c61389b1498f46fe02bb99a58469c69a75e91d3 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Mon, 16 Feb 2026 10:14:54 +1100 Subject: [PATCH 23/41] Update mediator/esmFldsExchange_access_mod.F90 Co-authored-by: Anton Steketee <79179784+anton-seaice@users.noreply.github.com> --- mediator/esmFldsExchange_access_mod.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 index ad69e9aa..0b116663 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -212,7 +212,7 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) F_flds(3,:) = (/'Fioi_meltw', 'Fioi_meltw'/) F_flds(4,:) = (/'Fioi_melth', 'Fioi_melth'/) ! heat flux sea-ice to ocean F_flds(5,:) = (/'Fioi_taux', 'Foxx_taux'/) - F_flds(6,:) = (/'Fioi_tauy', 'Foxx_tauy'/) ! heat flux sea-ice to ocean + F_flds(6,:) = (/'Fioi_tauy', 'Foxx_tauy'/) ! surface stress sea-ice to ocean do n = 1,size(F_flds,1) fldname1 = trim(F_flds(n,1)) fldname2 = trim(F_flds(n,2)) From da756ffdce8f1144541964d2246fa8c65e22d7fc Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Mon, 16 Feb 2026 14:30:08 +1100 Subject: [PATCH 24/41] - check array in time travelling ice routine - rename tti routine and add description - rename coupling mode to "access-esm" - delete unfinished comments - delete unused fields --- mediator/esmFldsExchange_access_mod.F90 | 58 +++++++++++-------------- mediator/med.F90 | 4 +- mediator/med_phases_post_atm_mod.F90 | 22 +++++++--- 3 files changed, 44 insertions(+), 40 deletions(-) diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 index 0b116663..e67ab7c8 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -128,7 +128,7 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) ! to atm: from ocn ! --------------------------------------------------------------------- allocate(S_flds(3)) - S_flds = (/'So_t', 'So_u', 'So_v'/) ! sea_surface_temperature + S_flds = (/'So_t', 'So_u', 'So_v'/) do n = 1,size(S_flds) fldname = trim(S_flds(n)) call addfld_from(compocn, trim(fldname)) @@ -141,15 +141,15 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) ! --------------------------------------------------------------------- allocate(S_flds(9)) S_flds = (/'Si_t', & - 'ia_aicen', & - 'ia_snown', & - 'ia_thikn', & + 'Si_ifrac_n', & + 'Si_vsno_n', & + 'Si_vice_n', & 'ia_itopt', & 'ia_itopk', & 'ia_pndfn', & 'ia_pndtn', & 'sstfrz' & - /) ! sea_surface_temperature + /) do n = 1,size(S_flds) fldname = trim(S_flds(n)) call addfld_from(compice, trim(fldname)) @@ -165,8 +165,8 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) ! to ocn: state fields ! --------------------------------------------------------------------- allocate(S_flds(2)) - S_flds = (/'Sa_pslv', & ! inst_zonal_wind_height10m - 'So_duu10n' /) ! inst_temp_height_surface + S_flds = (/'Sa_pslv', & + 'So_duu10n' /) do n = 1,size(S_flds) fldname = trim(S_flds(n)) call addfld_from(compatm, trim(fldname)) @@ -207,9 +207,9 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) ! from ice allocate(F_flds(6, 2)) - F_flds(1,:) = (/'Fioi_salt', 'Fioi_salt'/) + F_flds(1,:) = (/'Fioi_salt', 'Fioi_salt'/) ! salt flux sea-ice to ocean F_flds(2,:) = (/'Si_ifrac', 'Si_ifrac'/) ! ice_fraction - F_flds(3,:) = (/'Fioi_meltw', 'Fioi_meltw'/) + F_flds(3,:) = (/'Fioi_meltw', 'Fioi_meltw'/) ! melt water flux sea-ice to ocean F_flds(4,:) = (/'Fioi_melth', 'Fioi_melth'/) ! heat flux sea-ice to ocean F_flds(5,:) = (/'Fioi_taux', 'Foxx_taux'/) F_flds(6,:) = (/'Fioi_tauy', 'Foxx_tauy'/) ! surface stress sea-ice to ocean @@ -230,7 +230,7 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) ! --------------------------------------------------------------------- ! from atm - allocate(S_flds(10)) + allocate(S_flds(8)) S_flds = (/'Sa_z', & 'Sa_u', & 'Sa_v', & @@ -238,9 +238,7 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) 'Sa_tbot', & 'Sa_pbot', & 'Sa_dens', & - 'Sa_ptem', & - 'um_icesth', & - 'um_icenth' /) + 'Sa_ptem'/) do n = 1,size(S_flds) fldname = trim(S_flds(n)) call addfld_from(compatm, trim(fldname)) @@ -250,13 +248,13 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) ! from ocn allocate(S_flds(7)) - S_flds = (/'So_dhdx', & + S_flds = (/'So_dhdx', & 'So_dhdy', & - 'So_t', & - 'So_s', & - 'So_u', & - 'So_v', & - 'Fioo_q' /) + 'So_t', & + 'So_s', & + 'So_u', & + 'So_v', & + 'Fioo_q' /) do n = 1,size(S_flds) fldname = trim(S_flds(n)) call addfld_from(compocn, trim(fldname)) @@ -296,7 +294,7 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) call addfld_to(compice, 'Faxa_rain') call addfld_to(compice, 'Faxa_snow') - + call ESMF_LogWrite(trim(subname)//": done", ESMF_LOGMSG_INFO) end subroutine esmFldsExchange_access_advt @@ -401,23 +399,21 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) call addmap_from(compice, 'sstfrz', compatm, mapconsf, 'none', 'unset') call addmrg_to(compatm, 'sstfrz', mrg_from=compice, mrg_fld='sstfrz', mrg_type='copy') - + allocate(S_flds(7)) - S_flds = (/'ia_aicen', & - 'ia_snown', & - 'ia_thikn', & + S_flds = (/'Si_ifrac_n', & + 'Si_vsno_n', & + 'Si_vice_n', & 'ia_itopt', & 'ia_itopk', & 'ia_pndfn', & - 'ia_pndtn'/) ! sea_surface_temperature + 'ia_pndtn'/) do n = 1,size(S_flds) fldname = trim(S_flds(n)) call addmap_from(compice, trim(fldname), compatm, mapconsf, 'none', 'unset') call addmrg_to(compatm, trim(fldname), mrg_from=compice, mrg_fld=trim(fldname), mrg_type='copy') end do deallocate(S_flds) - ! call addmap(fldListFr(compice)%flds, 'Si_t', compatm, mapconsf, 'ifrac', 'unset') - ! call addmrg(fldListTo(compatm)%flds, 'Si_t', mrg_from=compice, mrg_fld='Si_t', mrg_type='copy') !===================================================================== ! FIELDS TO OCEAN (compocn) @@ -471,7 +467,7 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) deallocate(F_flds) ! precip - call addmap_from(compatm, 'Faxa_rainc', compocn, mapconsf, 'one', 'unset') ! TODO: weight by ocean fraction + call addmap_from(compatm, 'Faxa_rainc', compocn, mapconsf, 'one', 'unset') call addmap_from(compatm, 'Faxa_rainl', compocn, mapconsf, 'one', 'unset') call addmrg_to(compocn, 'Faxa_rain' , mrg_from=compatm, mrg_fld='Faxa_rainc:Faxa_rainl', & mrg_type='sum_with_weights', mrg_fracname='ofrac') @@ -521,7 +517,7 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) ! --------------------------------------------------------------------- ! from atm - allocate(S_flds(10)) + allocate(S_flds(8)) S_flds = (/'Sa_z', & 'Sa_u', & 'Sa_v', & @@ -529,9 +525,7 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) 'Sa_tbot', & 'Sa_pbot', & 'Sa_dens', & - 'Sa_ptem', & - 'um_icesth', & - 'um_icenth' /) + 'Sa_ptem' /) do n = 1,size(S_flds) fldname = trim(S_flds(n)) diff --git a/mediator/med.F90 b/mediator/med.F90 index bec9766e..b2d72727 100644 --- a/mediator/med.F90 +++ b/mediator/med.F90 @@ -843,7 +843,7 @@ subroutine AdvertiseFields(gcomp, importState, exportState, clock, rc) else if (coupling_mode(1:4) == 'hafs') then call esmFldsExchange_hafs(gcomp, phase='advertise', rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - else if (trim(coupling_mode) == 'access') then + else if (trim(coupling_mode) == 'access-esm') then call esmFldsExchange_access(gcomp, phase='advertise', rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return else @@ -1863,7 +1863,7 @@ subroutine DataInitialize(gcomp, rc) else if (coupling_mode(1:4) == 'hafs') then call esmFldsExchange_hafs(gcomp, phase='initialize', rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - else if (trim(coupling_mode) == 'access') then + else if (trim(coupling_mode) == 'access-esm') then call esmFldsExchange_access(gcomp, phase='initialize', rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return end if diff --git a/mediator/med_phases_post_atm_mod.F90 b/mediator/med_phases_post_atm_mod.F90 index e5d23e96..5e8104a7 100644 --- a/mediator/med_phases_post_atm_mod.F90 +++ b/mediator/med_phases_post_atm_mod.F90 @@ -58,8 +58,8 @@ subroutine med_phases_post_atm(gcomp, rc) call ESMF_GridCompGetInternalState(gcomp, is_local, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - if (trim(coupling_mode) == 'access') then - call med_phases_post_atm_custom_access(gcomp, rc) + if (trim(coupling_mode) == 'access-esm') then + call med_phases_post_atm_time_travelling_ice(gcomp, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return end if @@ -133,7 +133,14 @@ subroutine med_phases_post_atm(gcomp, rc) end subroutine med_phases_post_atm - subroutine med_phases_post_atm_custom_access(gcomp, rc) + subroutine med_phases_post_atm_time_travelling_ice(gcomp, rc) + + !--------------------------------------- + ! Scale atmosphere to sea-ice fluxes by the current ice fraction prior to regridding to the sea-ice grid. + ! This converts the fluxes from averages over sea-ice+ocean area to averages over the sea-ice area, + ! and ensures conservation. + !--------------------------------------- + use med_kind_mod , only : CX=>SHR_KIND_CX, CS=>SHR_KIND_CS, CL=>SHR_KIND_CL, R8=>SHR_KIND_R8 use med_internalstate_mod , only : compocn, compatm, compice, coupling_mode use med_internalstate_mod , only : InternalState @@ -152,7 +159,7 @@ subroutine med_phases_post_atm_custom_access(gcomp, rc) real(R8), pointer :: ice_frac_cat_ptr(:, :), ice_flux_cat_ptr(:, :) type(ESMF_Field) :: ice_frac_cat, ice_flux_cat integer :: lsize1, lsize2, i, j, n - character(len=*), parameter :: subname='(med_phases_post_atm_custom_access)' + character(len=*), parameter :: subname='(med_phases_post_atm_time_travelling_ice)' character(len=CS) :: fld_names(4) !--------------------------------------- @@ -166,8 +173,10 @@ subroutine med_phases_post_atm_custom_access(gcomp, rc) ! Get the internal state nullify(is_local%wrap) call ESMF_GridCompGetInternalState(gcomp, is_local, rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return - call ESMF_FieldBundleGet(is_local%wrap%FBImp(compice, compatm), fieldName='ia_aicen', field=ice_frac_cat, rc=rc) + call ESMF_FieldBundleGet(is_local%wrap%FBImp(compice, compatm), fieldName='Si_ifrac_n', field=ice_frac_cat, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return call ESMF_FieldGet(ice_frac_cat, farrayptr=ice_frac_cat_ptr) lsize1 = size(ice_frac_cat_ptr, dim=1) @@ -182,6 +191,7 @@ subroutine med_phases_post_atm_custom_access(gcomp, rc) do n = 1,size(fld_names) call ESMF_FieldBundleGet(is_local%wrap%FBImp(compatm, compatm), fieldName=trim(fld_names(n)), field=ice_flux_cat, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return call ESMF_FieldGet(ice_flux_cat, farrayptr=ice_flux_cat_ptr) do j = 1,lsize2 @@ -199,6 +209,6 @@ subroutine med_phases_post_atm_custom_access(gcomp, rc) end if call t_stopf('MED:'//subname) - end subroutine med_phases_post_atm_custom_access + end subroutine med_phases_post_atm_time_travelling_ice end module med_phases_post_atm_mod From a1695257c0884caf71b34f5d033ca27a46c33d98 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Tue, 17 Feb 2026 13:31:59 +1100 Subject: [PATCH 25/41] add missing import --- mediator/med_phases_post_atm_mod.F90 | 1 + 1 file changed, 1 insertion(+) diff --git a/mediator/med_phases_post_atm_mod.F90 b/mediator/med_phases_post_atm_mod.F90 index 5e8104a7..bcae3670 100644 --- a/mediator/med_phases_post_atm_mod.F90 +++ b/mediator/med_phases_post_atm_mod.F90 @@ -148,6 +148,7 @@ subroutine med_phases_post_atm_time_travelling_ice(gcomp, rc) use ESMF , only : ESMF_FieldGet, ESMF_Field use ESMF , only : ESMF_LogWrite, ESMF_LOGMSG_INFO, ESMF_SUCCESS use med_constants_mod , only : dbug_flag => med_constants_dbug_flag + use med_utils_mod , only : chkerr => med_utils_ChkErr use perf_mod , only : t_startf, t_stopf ! input/output variables From f029178c901189aaeb0cfac5667b6dae0ba93592 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Wed, 25 Feb 2026 16:16:45 +1100 Subject: [PATCH 26/41] field name changes --- mediator/esmFldsExchange_access_mod.F90 | 36 ++++++++++++------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 index e67ab7c8..5c6c8d12 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -144,10 +144,10 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) 'Si_ifrac_n', & 'Si_vsno_n', & 'Si_vice_n', & - 'ia_itopt', & - 'ia_itopk', & - 'ia_pndfn', & - 'ia_pndtn', & + 'Si_topt', & + 'Si_topk', & + 'Si_pndf_n', & + 'Si_pndt_n', & 'sstfrz' & /) do n = 1,size(S_flds) @@ -272,11 +272,11 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) F_flds(3,:) = (/'Faxa_swvdf', 'Faxa_swvdf'/) F_flds(4,:) = (/'Faxa_swndf', 'Faxa_swndf'/) F_flds(5,:) = (/'Faxa_lwdn', 'Faxa_lwdn'/) - F_flds(6,:) = (/'pen_rad', 'pen_rad'/) - F_flds(7,:) = (/'topmelt', 'topmelt'/) - F_flds(8,:) = (/'botmelt', 'botmelt'/) - F_flds(9,:) = (/'tstar_sice', 'tstar_sice'/) - F_flds(10,:) = (/'sublim', 'sublim'/) + F_flds(6,:) = (/'Faxa_swpen_n', 'Faxa_swpen_n'/) + F_flds(7,:) = (/'Faxa_melthtop_n', 'Faxa_melthtop_n'/) + F_flds(8,:) = (/'Faxa_condtop_n', 'Faxa_condtop_n'/) + F_flds(9,:) = (/'Sa_tskn_n', 'Sa_tskn_n'/) + F_flds(10,:) = (/'Faxa_sublim_n', 'Faxa_sublim_n'/) F_flds(11,:) = (/'Foxx_sen', 'Foxx_sen'/) F_flds(12,:) = (/'Faxa_swdn', 'Faxa_swdn'/) do n = 1,size(F_flds,1) @@ -404,10 +404,10 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) S_flds = (/'Si_ifrac_n', & 'Si_vsno_n', & 'Si_vice_n', & - 'ia_itopt', & - 'ia_itopk', & - 'ia_pndfn', & - 'ia_pndtn'/) + 'Si_topt', & + 'Si_topk', & + 'Si_pndf_n', & + 'Si_pndt_n'/) do n = 1,size(S_flds) fldname = trim(S_flds(n)) call addmap_from(compice, trim(fldname), compatm, mapconsf, 'none', 'unset') @@ -568,11 +568,11 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) ! from atm allocate(F_flds(12, 2)) - F_flds(1,:) = (/'pen_rad', 'pen_rad'/) - F_flds(2,:) = (/'topmelt', 'topmelt'/) - F_flds(3,:) = (/'botmelt', 'botmelt'/) - F_flds(4,:) = (/'tstar_sice', 'tstar_sice'/) - F_flds(5,:) = (/'sublim', 'sublim'/) + F_flds(1,:) = (/'Faxa_swpen_n', 'Faxa_swpen_n'/) + F_flds(2,:) = (/'Faxa_melthtop_n', 'Faxa_melthtop_n'/) + F_flds(3,:) = (/'Faxa_condtop_n', 'Faxa_condtop_n'/) + F_flds(4,:) = (/'Sa_tskn_n', 'Sa_tskn_n'/) + F_flds(5,:) = (/'Faxa_sublim_n', 'Faxa_sublim_n'/) F_flds(6,:) = (/'Faxa_swvdr ', 'Faxa_swvdr '/) F_flds(7,:) = (/'Faxa_swndr ', 'Faxa_swndr '/) F_flds(8,:) = (/'Faxa_swvdf', 'Faxa_swvdf'/) From 6cf9974aed9f8ac46ae144c5be4d66aa563807fe Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Tue, 3 Mar 2026 12:08:27 +1100 Subject: [PATCH 27/41] revert CMakeLists.txt and Makefile --- mediator/CMakeLists.txt | 2 +- mediator/Makefile | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/mediator/CMakeLists.txt b/mediator/CMakeLists.txt index b95c62a1..b65004c3 100644 --- a/mediator/CMakeLists.txt +++ b/mediator/CMakeLists.txt @@ -1,6 +1,6 @@ project(cmeps Fortran) -set(SRCFILES esmFldsExchange_access_mod.F90 esmFldsExchange_cesm_mod.F90 med_fraction_mod.F90 +set(SRCFILES esmFldsExchange_cesm_mod.F90 med_fraction_mod.F90 med_field_info_mod.F90 med_methods_mod.F90 med_phases_prep_ice_mod.F90 med_phases_restart_mod.F90 esmFldsExchange_hafs_mod.F90 diff --git a/mediator/Makefile b/mediator/Makefile index d7ad9570..a353ff9a 100644 --- a/mediator/Makefile +++ b/mediator/Makefile @@ -36,14 +36,13 @@ esmFlds.o : med_kind_mod.o esmFldsExchange_cesm_mod.o : med_kind_mod.o med_methods_mod.o esmFlds.o med_internalstate_mod.o med_utils_mod.o esmFldsExchange_ufs_mod.o : med_kind_mod.o med_methods_mod.o esmFlds.o med_internalstate_mod.o med_utils_mod.o esmFldsExchange_hafs_mod.o : med_kind_mod.o med_methods_mod.o esmFlds.o med_internalstate_mod.o med_utils_mod.o -esmFldsExchange_access_mod.o : med_kind_mod.o med_methods_mod.o esmFlds.o med_internalstate_mod.o med_utils_mod.o med.o : med_kind_mod.o med_phases_profile_mod.o med_utils_mod.o med_phases_prep_rof_mod.o med_phases_aofluxes_mod.o \ med_phases_prep_ice_mod.o med_fraction_mod.o med_map_mod.o med_constants_mod.o med_phases_prep_wav_mod.o \ med_phases_prep_lnd_mod.o med_phases_history_mod.o med_phases_ocnalb_mod.o med_phases_restart_mod.o \ med_internalstate_mod.o med_phases_prep_atm_mod.o esmFldsExchange_cesm_mod.o esmFldsExchange_ufs_mod.o \ - esmFldsExchange_hafs_mod.o esmFldsExchange_access_mod.o med_phases_prep_glc_mod.o esmFlds.o med_io_mod.o med_methods_mod.o \ - med_phases_prep_ocn_mod.o med_phases_post_atm_mod.o med_phases_post_ice_mod.o med_phases_post_lnd_mod.o med_phases_post_glc_mod.o \ - med_phases_post_rof_mod.o med_phases_post_wav_mod.o + esmFldsExchange_hafs_mod.o med_phases_prep_glc_mod.o esmFlds.o med_io_mod.o med_methods_mod.o med_phases_prep_ocn_mod.o \ + med_phases_post_atm_mod.o med_phases_post_ice_mod.o med_phases_post_lnd_mod.o med_phases_post_glc_mod.o med_phases_post_rof_mod.o \ + med_phases_post_wav_mod.o med_fraction_mod.o : med_kind_mod.o med_utils_mod.o med_internalstate_mod.o med_constants_mod.o med_map_mod.o med_methods_mod.o esmFlds.o med_internalstate_mod.o : med_kind_mod.o esmFlds.o med_io_mod.o : med_kind_mod.o med_methods_mod.o med_constants_mod.o med_internalstate_mod.o med_utils_mod.o From 7bc2df01722a4b3b0106790545864586010aa626 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Tue, 3 Mar 2026 12:09:37 +1100 Subject: [PATCH 28/41] check ice_frac_cat_ptr > 1e-11 (puny) before division --- mediator/med_phases_post_atm_mod.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediator/med_phases_post_atm_mod.F90 b/mediator/med_phases_post_atm_mod.F90 index bcae3670..8e8ed383 100644 --- a/mediator/med_phases_post_atm_mod.F90 +++ b/mediator/med_phases_post_atm_mod.F90 @@ -197,7 +197,7 @@ subroutine med_phases_post_atm_time_travelling_ice(gcomp, rc) do j = 1,lsize2 do i = 1,lsize1 - if (ice_frac_cat_ptr(i, j) > 0.0) then + if (ice_frac_cat_ptr(i, j) > 1e-11) then ice_flux_cat_ptr(i, j) = ice_flux_cat_ptr(i, j) / ice_frac_cat_ptr(i, j) end if end do From c9e2fae24fd49bd0bc522a53ffad95648d9a9f13 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Wed, 11 Mar 2026 10:33:36 +1100 Subject: [PATCH 29/41] update coupled names in post_atm tti --- mediator/med_phases_post_atm_mod.F90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mediator/med_phases_post_atm_mod.F90 b/mediator/med_phases_post_atm_mod.F90 index 8e8ed383..e7fd1aa0 100644 --- a/mediator/med_phases_post_atm_mod.F90 +++ b/mediator/med_phases_post_atm_mod.F90 @@ -184,10 +184,10 @@ subroutine med_phases_post_atm_time_travelling_ice(gcomp, rc) lsize2 = size(ice_frac_cat_ptr, dim=2) fld_names = [character(len=CS) :: & - 'topmelt', & - 'botmelt', & - 'sublim', & - 'pen_rad'] + 'Faxa_melthtop_n', & + 'Faxa_condtop_n', & + 'Faxa_sublim_n', & + 'Faxa_swpen_n'] do n = 1,size(fld_names) From 19e77ae2e6c06c1df3c9e5da49063399ef88ca1c Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Wed, 11 Mar 2026 12:27:54 +1100 Subject: [PATCH 30/41] update coupling mode check --- mediator/med_phases_prep_ocn_mod.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediator/med_phases_prep_ocn_mod.F90 b/mediator/med_phases_prep_ocn_mod.F90 index 43833568..e9f4a67b 100644 --- a/mediator/med_phases_prep_ocn_mod.F90 +++ b/mediator/med_phases_prep_ocn_mod.F90 @@ -255,7 +255,7 @@ subroutine med_phases_prep_ocn_accum(gcomp, rc) end if ! custom merges to ocean - if (trim(coupling_mode) /= "access") then + if (trim(coupling_mode) /= "access-esm") then call med_phases_prep_ocn_custom(gcomp, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return end if From 24e5ff06407480cbdb3c584fc5d666597b2c1321 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Mon, 16 Mar 2026 12:06:01 +1100 Subject: [PATCH 31/41] Indent changes Co-authored-by: Anton Steketee <79179784+anton-seaice@users.noreply.github.com> --- mediator/esmFldsExchange_access_mod.F90 | 40 ++++++++++++------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 index 5c6c8d12..4e122271 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -141,14 +141,14 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) ! --------------------------------------------------------------------- allocate(S_flds(9)) S_flds = (/'Si_t', & - 'Si_ifrac_n', & - 'Si_vsno_n', & - 'Si_vice_n', & - 'Si_topt', & - 'Si_topk', & - 'Si_pndf_n', & - 'Si_pndt_n', & - 'sstfrz' & + 'Si_ifrac_n', & + 'Si_vsno_n', & + 'Si_vice_n', & + 'Si_topt', & + 'Si_topk', & + 'Si_pndf_n', & + 'Si_pndt_n', & + 'Si_Tf' & /) do n = 1,size(S_flds) fldname = trim(S_flds(n)) @@ -166,7 +166,7 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) ! --------------------------------------------------------------------- allocate(S_flds(2)) S_flds = (/'Sa_pslv', & - 'So_duu10n' /) + 'So_duu10n' /) do n = 1,size(S_flds) fldname = trim(S_flds(n)) call addfld_from(compatm, trim(fldname)) @@ -209,7 +209,7 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) allocate(F_flds(6, 2)) F_flds(1,:) = (/'Fioi_salt', 'Fioi_salt'/) ! salt flux sea-ice to ocean F_flds(2,:) = (/'Si_ifrac', 'Si_ifrac'/) ! ice_fraction - F_flds(3,:) = (/'Fioi_meltw', 'Fioi_meltw'/) ! melt water flux sea-ice to ocean + F_flds(3,:) = (/'Fioi_meltw', 'Fioi_meltw'/) ! freshwater flux sea-ice to ocean F_flds(4,:) = (/'Fioi_melth', 'Fioi_melth'/) ! heat flux sea-ice to ocean F_flds(5,:) = (/'Fioi_taux', 'Foxx_taux'/) F_flds(6,:) = (/'Fioi_tauy', 'Foxx_tauy'/) ! surface stress sea-ice to ocean @@ -232,13 +232,14 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) ! from atm allocate(S_flds(8)) S_flds = (/'Sa_z', & - 'Sa_u', & - 'Sa_v', & - 'Sa_shum', & - 'Sa_tbot', & - 'Sa_pbot', & - 'Sa_dens', & - 'Sa_ptem'/) + 'Sa_u', & + 'Sa_v', & + 'Sa_shum', & + 'Sa_tbot', & + 'Sa_pbot', & + 'Sa_dens', & + 'Sa_ptem' & + /) do n = 1,size(S_flds) fldname = trim(S_flds(n)) call addfld_from(compatm, trim(fldname)) @@ -384,9 +385,6 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) ! FIELDS TO ATMOSPHERE !===================================================================== - ! --------------------------------------------------------------------- - ! to atm: sea surface temperature - ! --------------------------------------------------------------------- call addmap_from(compocn, 'So_t', compatm, mapconsf, 'ofrac', 'unset') call addmrg_to(compatm, 'So_t', mrg_from=compocn, mrg_fld='So_t', mrg_type='copy') call addmap_from(compocn, 'So_u', compatm, mapconsf, 'ofrac', 'unset') @@ -424,7 +422,7 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) ! --------------------------------------------------------------------- allocate(S_flds(2)) S_flds = (/'Sa_pslv', & ! inst_zonal_wind_height10m - 'So_duu10n' /) ! inst_temp_height_surface + 'So_duu10n' /) ! inst_temp_height_surface do n = 1,size(S_flds) fldname = trim(S_flds(n)) if (fldchk(is_local%wrap%FBExp(compocn), trim(fldname), rc=rc) .and. & From ec8cccc1224d7ea5da83be5df58a5c6db2a0607b Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Mon, 16 Mar 2026 12:32:17 +1100 Subject: [PATCH 32/41] Delete duplicate rainc and snowc Co-authored-by: Anton Steketee <79179784+anton-seaice@users.noreply.github.com> --- mediator/esmFldsExchange_access_mod.F90 | 2 -- 1 file changed, 2 deletions(-) diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 index 4e122271..02ab40dc 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -202,8 +202,6 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) end do deallocate(F_flds) - call addfld_from(compatm, 'Faxa_rainc') - call addfld_from(compatm, 'Faxa_snowc') ! from ice allocate(F_flds(6, 2)) From 70deab3039ed3daecab5bbc328340c4c659335a4 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Mon, 16 Mar 2026 12:34:55 +1100 Subject: [PATCH 33/41] fix comments --- mediator/esmFldsExchange_access_mod.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 index 02ab40dc..3205bd9f 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -542,8 +542,8 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) 'So_dhdy', & ! inst_merid_wind_height10m 'So_t ', & ! inst_temp_height2m 'So_s ', & ! inst_spec_humid_height2m - 'So_u', & ! Sa_pslv - 'So_v', & ! Sa_pslv + 'So_u', & ! ocean surface zonal current + 'So_v', & ! ocean surface meridional current 'Fioo_q' /) ! inst_temp_height_surface do n = 1,size(S_flds) fldname = trim(S_flds(n)) From 8578c31a897c83bc072bbb15a2d3420020c212c2 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Mon, 16 Mar 2026 12:37:01 +1100 Subject: [PATCH 34/41] fix indentation --- mediator/esmFldsExchange_access_mod.F90 | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_access_mod.F90 index 3205bd9f..e5c83d0e 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_access_mod.F90 @@ -397,13 +397,16 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) call addmrg_to(compatm, 'sstfrz', mrg_from=compice, mrg_fld='sstfrz', mrg_type='copy') allocate(S_flds(7)) - S_flds = (/'Si_ifrac_n', & - 'Si_vsno_n', & - 'Si_vice_n', & - 'Si_topt', & - 'Si_topk', & - 'Si_pndf_n', & - 'Si_pndt_n'/) + S_flds = (/'Si_t', & + 'Si_ifrac_n', & + 'Si_vsno_n', & + 'Si_vice_n', & + 'Si_topt', & + 'Si_topk', & + 'Si_pndf_n', & + 'Si_pndt_n', & + 'Si_Tf' & + /) do n = 1,size(S_flds) fldname = trim(S_flds(n)) call addmap_from(compice, trim(fldname), compatm, mapconsf, 'none', 'unset') From e261526a3edbfff6e1f2b5e2ec3b0ead1d148039 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Mon, 16 Mar 2026 12:41:36 +1100 Subject: [PATCH 35/41] rename `access->accessesm` --- ....F90 => esmFldsExchange_accessesm_mod.F90} | 36 +++++++++---------- mediator/med.F90 | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) rename mediator/{esmFldsExchange_access_mod.F90 => esmFldsExchange_accessesm_mod.F90} (96%) diff --git a/mediator/esmFldsExchange_access_mod.F90 b/mediator/esmFldsExchange_accessesm_mod.F90 similarity index 96% rename from mediator/esmFldsExchange_access_mod.F90 rename to mediator/esmFldsExchange_accessesm_mod.F90 index e5c83d0e..a93c221c 100644 --- a/mediator/esmFldsExchange_access_mod.F90 +++ b/mediator/esmFldsExchange_accessesm_mod.F90 @@ -1,4 +1,4 @@ -module esmFldsExchange_access_mod +module esmFldsExchange_accessesm_mod use ESMF use NUOPC @@ -21,7 +21,7 @@ module esmFldsExchange_access_mod implicit none public - public :: esmFldsExchange_access + public :: esmFldsExchange_accessesm character(*), parameter :: u_FILE_u = & __FILE__ @@ -30,7 +30,7 @@ module esmFldsExchange_access_mod contains !=============================================================================== - subroutine esmFldsExchange_access(gcomp, phase, rc) + subroutine esmFldsExchange_accessesm(gcomp, phase, rc) ! input/output parameters: type(ESMF_GridComp) :: gcomp @@ -38,20 +38,20 @@ subroutine esmFldsExchange_access(gcomp, phase, rc) integer , intent(inout) :: rc ! local variables: - character(len=*) , parameter :: subname='(esmFldsExchange_access)' + character(len=*) , parameter :: subname='(esmFldsExchange_accessesm)' !-------------------------------------- call ESMF_LogWrite(trim(subname)//": called", ESMF_LOGMSG_INFO) rc = ESMF_SUCCESS if (phase == 'advertise') then - call esmFldsExchange_access_advt(gcomp, phase, rc) + call esmFldsExchange_accessesm_advt(gcomp, phase, rc) if (chkerr(rc,__LINE__,u_FILE_u)) return elseif (phase == 'fieldcheck') then - call esmFldsExchange_access_fchk(gcomp, phase, rc) + call esmFldsExchange_accessesm_fchk(gcomp, phase, rc) if (chkerr(rc,__LINE__,u_FILE_u)) return elseif (phase == 'initialize') then - call esmFldsExchange_access_init(gcomp, phase, rc) + call esmFldsExchange_accessesm_init(gcomp, phase, rc) if (chkerr(rc,__LINE__,u_FILE_u)) return else call ESMF_LogSetError(ESMF_FAILURE, & @@ -62,11 +62,11 @@ subroutine esmFldsExchange_access(gcomp, phase, rc) call ESMF_LogWrite(trim(subname)//": done", ESMF_LOGMSG_INFO) - end subroutine esmFldsExchange_access + end subroutine esmFldsExchange_accessesm !----------------------------------------------------------------------------- - subroutine esmFldsExchange_access_advt(gcomp, phase, rc) + subroutine esmFldsExchange_accessesm_advt(gcomp, phase, rc) ! input/output parameters: type(ESMF_GridComp) :: gcomp @@ -83,7 +83,7 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) character(len=CS), allocatable :: S_flds(:) character(len=CS), allocatable :: F_flds(:,:) character(len=CS), allocatable :: suffix(:) - character(len=*) , parameter :: subname='(esmFldsExchange_access_advt)' + character(len=*) , parameter :: subname='(esmFldsExchange_accessesm_advt)' !-------------------------------------- call ESMF_LogWrite(trim(subname)//": called", ESMF_LOGMSG_INFO) @@ -296,11 +296,11 @@ subroutine esmFldsExchange_access_advt(gcomp, phase, rc) call ESMF_LogWrite(trim(subname)//": done", ESMF_LOGMSG_INFO) - end subroutine esmFldsExchange_access_advt + end subroutine esmFldsExchange_accessesm_advt !----------------------------------------------------------------------------- - subroutine esmFldsExchange_access_fchk(gcomp, phase, rc) + subroutine esmFldsExchange_accessesm_fchk(gcomp, phase, rc) use med_methods_mod , only : fldchk => med_methods_FB_FldChk use med_internalstate_mod , only : InternalState @@ -312,7 +312,7 @@ subroutine esmFldsExchange_access_fchk(gcomp, phase, rc) ! local variables: type(InternalState) :: is_local - character(len=*) , parameter :: subname='(esmFldsExchange_access_fchk)' + character(len=*) , parameter :: subname='(esmFldsExchange_accessesm_fchk)' !-------------------------------------- call ESMF_LogWrite(trim(subname)//": called", ESMF_LOGMSG_INFO) @@ -337,11 +337,11 @@ subroutine esmFldsExchange_access_fchk(gcomp, phase, rc) call ESMF_LogWrite(trim(subname)//": done", ESMF_LOGMSG_INFO) - end subroutine esmFldsExchange_access_fchk + end subroutine esmFldsExchange_accessesm_fchk !----------------------------------------------------------------------------- - subroutine esmFldsExchange_access_init(gcomp, phase, rc) + subroutine esmFldsExchange_accessesm_init(gcomp, phase, rc) use med_methods_mod , only : fldchk => med_methods_FB_FldChk use med_internalstate_mod , only : InternalState @@ -366,7 +366,7 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) character(len=CS), allocatable :: S_flds(:) character(len=CS), allocatable :: F_flds(:,:) character(len=CS), allocatable :: suffix(:) - character(len=*) , parameter :: subname='(esmFldsExchange_access_init)' + character(len=*) , parameter :: subname='(esmFldsExchange_accessesm_init)' !-------------------------------------- call ESMF_LogWrite(trim(subname)//": called", ESMF_LOGMSG_INFO) @@ -607,8 +607,8 @@ subroutine esmFldsExchange_access_init(gcomp, phase, rc) call ESMF_LogWrite(trim(subname)//": done", ESMF_LOGMSG_INFO) - end subroutine esmFldsExchange_access_init + end subroutine esmFldsExchange_accessesm_init !----------------------------------------------------------------------------- - end module esmFldsExchange_access_mod + end module esmFldsExchange_accessesm_mod diff --git a/mediator/med.F90 b/mediator/med.F90 index b2d72727..89c46cc2 100644 --- a/mediator/med.F90 +++ b/mediator/med.F90 @@ -52,7 +52,7 @@ module MED use esmFldsExchange_ufs_mod , only : esmFldsExchange_ufs use esmFldsExchange_cesm_mod , only : esmFldsExchange_cesm use esmFldsExchange_hafs_mod , only : esmFldsExchange_hafs - use esmFldsExchange_access_mod , only : esmFldsExchange_access + use esmFldsExchange_accessesm_mod , only : esmFldsExchange_accessesm use med_phases_profile_mod , only : med_phases_profile_finalize use shr_log_mod , only : shr_log_error From e712bea9cf7919c93adc7507c63303199b1dc499 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Mon, 16 Mar 2026 12:43:40 +1100 Subject: [PATCH 36/41] delete fieldcheck --- mediator/esmFldsExchange_accessesm_mod.F90 | 44 ---------------------- 1 file changed, 44 deletions(-) diff --git a/mediator/esmFldsExchange_accessesm_mod.F90 b/mediator/esmFldsExchange_accessesm_mod.F90 index a93c221c..f4792c4a 100644 --- a/mediator/esmFldsExchange_accessesm_mod.F90 +++ b/mediator/esmFldsExchange_accessesm_mod.F90 @@ -47,9 +47,6 @@ subroutine esmFldsExchange_accessesm(gcomp, phase, rc) if (phase == 'advertise') then call esmFldsExchange_accessesm_advt(gcomp, phase, rc) if (chkerr(rc,__LINE__,u_FILE_u)) return - elseif (phase == 'fieldcheck') then - call esmFldsExchange_accessesm_fchk(gcomp, phase, rc) - if (chkerr(rc,__LINE__,u_FILE_u)) return elseif (phase == 'initialize') then call esmFldsExchange_accessesm_init(gcomp, phase, rc) if (chkerr(rc,__LINE__,u_FILE_u)) return @@ -300,47 +297,6 @@ end subroutine esmFldsExchange_accessesm_advt !----------------------------------------------------------------------------- - subroutine esmFldsExchange_accessesm_fchk(gcomp, phase, rc) - - use med_methods_mod , only : fldchk => med_methods_FB_FldChk - use med_internalstate_mod , only : InternalState - - ! input/output parameters: - type(ESMF_GridComp) :: gcomp - character(len=*) , intent(in) :: phase - integer , intent(inout) :: rc - - ! local variables: - type(InternalState) :: is_local - character(len=*) , parameter :: subname='(esmFldsExchange_accessesm_fchk)' - !-------------------------------------- - - call ESMF_LogWrite(trim(subname)//": called", ESMF_LOGMSG_INFO) - rc = ESMF_SUCCESS - - !--------------------------------------- - ! Get the internal state - !--------------------------------------- - nullify(is_local%wrap) - call ESMF_GridCompGetInternalState(gcomp, is_local, rc) - if (chkerr(rc,__LINE__,u_FILE_u)) return - - if (fldchk(is_local%wrap%FBImp(compocn,compocn),'So_omask',rc=rc)) then - call ESMF_LogWrite(trim(subname)//": Field connected "//"So_omask", & - ESMF_LOGMSG_INFO) - else - call ESMF_LogSetError(ESMF_FAILURE, & - msg=trim(subname)//": Field is not connected "//"So_omask", & - line=__LINE__, file=__FILE__, rcToReturn=rc) - return ! bail out - endif - - call ESMF_LogWrite(trim(subname)//": done", ESMF_LOGMSG_INFO) - - end subroutine esmFldsExchange_accessesm_fchk - - !----------------------------------------------------------------------------- - subroutine esmFldsExchange_accessesm_init(gcomp, phase, rc) use med_methods_mod , only : fldchk => med_methods_FB_FldChk From 929fe0fb24de5f56ff971d3932df742a0d74da14 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Mon, 16 Mar 2026 14:57:55 +1100 Subject: [PATCH 37/41] delete unecessary fields going into CICE --- mediator/esmFldsExchange_accessesm_mod.F90 | 43 +++++++++------------- 1 file changed, 17 insertions(+), 26 deletions(-) diff --git a/mediator/esmFldsExchange_accessesm_mod.F90 b/mediator/esmFldsExchange_accessesm_mod.F90 index f4792c4a..baba6b18 100644 --- a/mediator/esmFldsExchange_accessesm_mod.F90 +++ b/mediator/esmFldsExchange_accessesm_mod.F90 @@ -176,7 +176,7 @@ subroutine esmFldsExchange_accessesm_advt(gcomp, phase, rc) ! --------------------------------------------------------------------- ! from atm - allocate(F_flds(13, 2)) + allocate(F_flds(11, 2)) F_flds(1,:) = (/'Faxa_taux ', 'Foxx_taux'/) F_flds(2,:) = (/'Faxa_tauy ', 'Foxx_tauy'/) F_flds(3,:) = (/'Foxx_sen', 'Foxx_sen'/) @@ -186,10 +186,8 @@ subroutine esmFldsExchange_accessesm_advt(gcomp, phase, rc) F_flds(7,:) = (/'Foxx_swnet_vdf', 'Foxx_swnet_vdf'/) F_flds(8,:) = (/'Foxx_swnet_idr', 'Foxx_swnet_idr'/) F_flds(9,:) = (/'Foxx_swnet_idf', 'Foxx_swnet_idf'/) - F_flds(10,:) = (/'Faxa_rainc', 'Faxa_rain'/) - F_flds(11,:) = (/'Faxa_snowc', 'Faxa_snow'/) - F_flds(12,:) = (/'Foxx_rofl', 'Foxx_rofl'/) ! mean runoff rate (liquid) - F_flds(13,:) = (/'Foxx_rofi', 'Foxx_rofi'/) ! mean runnof rate (frozen) + F_flds(10,:) = (/'Foxx_rofl', 'Foxx_rofl'/) ! mean runoff rate (liquid) + F_flds(11,:) = (/'Foxx_rofi', 'Foxx_rofi'/) ! mean runnof rate (frozen) do n = 1,size(F_flds,1) fldname1 = trim(F_flds(n,1)) @@ -262,19 +260,12 @@ subroutine esmFldsExchange_accessesm_advt(gcomp, phase, rc) ! to ice: flux fields ! --------------------------------------------------------------------- - allocate(F_flds(12, 2)) - F_flds(1,:) = (/'Faxa_swvdr ', 'Faxa_swvdr '/) - F_flds(2,:) = (/'Faxa_swndr ', 'Faxa_swndr '/) - F_flds(3,:) = (/'Faxa_swvdf', 'Faxa_swvdf'/) - F_flds(4,:) = (/'Faxa_swndf', 'Faxa_swndf'/) - F_flds(5,:) = (/'Faxa_lwdn', 'Faxa_lwdn'/) - F_flds(6,:) = (/'Faxa_swpen_n', 'Faxa_swpen_n'/) - F_flds(7,:) = (/'Faxa_melthtop_n', 'Faxa_melthtop_n'/) - F_flds(8,:) = (/'Faxa_condtop_n', 'Faxa_condtop_n'/) - F_flds(9,:) = (/'Sa_tskn_n', 'Sa_tskn_n'/) - F_flds(10,:) = (/'Faxa_sublim_n', 'Faxa_sublim_n'/) - F_flds(11,:) = (/'Foxx_sen', 'Foxx_sen'/) - F_flds(12,:) = (/'Faxa_swdn', 'Faxa_swdn'/) + allocate(F_flds(5, 2)) + F_flds(1,:) = (/'Faxa_swpen_n', 'Faxa_swpen_n'/) + F_flds(2,:) = (/'Faxa_melthtop_n', 'Faxa_melthtop_n'/) + F_flds(3,:) = (/'Faxa_condtop_n', 'Faxa_condtop_n'/) + F_flds(4,:) = (/'Sa_tskn_n', 'Sa_tskn_n'/) + F_flds(5,:) = (/'Faxa_sublim_n', 'Faxa_sublim_n'/) do n = 1,size(F_flds,1) fldname1 = trim(F_flds(n,1)) fldname2 = trim(F_flds(n,2)) @@ -283,11 +274,18 @@ subroutine esmFldsExchange_accessesm_advt(gcomp, phase, rc) end do deallocate(F_flds) + ! --------------------------------------------------------------------- + ! precipitation + ! --------------------------------------------------------------------- + call addfld_from(compatm, 'Faxa_rainc') call addfld_from(compatm, 'Faxa_snowc') call addfld_from(compatm, 'Faxa_rainl') call addfld_from(compatm, 'Faxa_snowl') + call addfld_to(compocn, 'Faxa_rain') + call addfld_to(compocn, 'Faxa_snow') + call addfld_to(compice, 'Faxa_rain') call addfld_to(compice, 'Faxa_snow') @@ -522,19 +520,12 @@ subroutine esmFldsExchange_accessesm_init(gcomp, phase, rc) ! --------------------------------------------------------------------- ! from atm - allocate(F_flds(12, 2)) + allocate(F_flds(5, 2)) F_flds(1,:) = (/'Faxa_swpen_n', 'Faxa_swpen_n'/) F_flds(2,:) = (/'Faxa_melthtop_n', 'Faxa_melthtop_n'/) F_flds(3,:) = (/'Faxa_condtop_n', 'Faxa_condtop_n'/) F_flds(4,:) = (/'Sa_tskn_n', 'Sa_tskn_n'/) F_flds(5,:) = (/'Faxa_sublim_n', 'Faxa_sublim_n'/) - F_flds(6,:) = (/'Faxa_swvdr ', 'Faxa_swvdr '/) - F_flds(7,:) = (/'Faxa_swndr ', 'Faxa_swndr '/) - F_flds(8,:) = (/'Faxa_swvdf', 'Faxa_swvdf'/) - F_flds(9,:) = (/'Faxa_swndf', 'Faxa_swndf'/) - F_flds(10,:) = (/'Faxa_lwdn', 'Faxa_lwdn'/) - F_flds(11,:) = (/'Foxx_sen', 'Foxx_sen'/) - F_flds(12,:) = (/'Faxa_swdn', 'Faxa_swdn'/) do n = 1,size(F_flds,1) fldname1 = trim(F_flds(n,1)) From 581dc2efa0aea2a79aa80e4bee0f1947df3e8add Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Mon, 16 Mar 2026 15:40:58 +1100 Subject: [PATCH 38/41] add fieldchecks around re-mapping --- mediator/esmFldsExchange_accessesm_mod.F90 | 126 ++++++++++++++------- mediator/med_phases_post_atm_mod.F90 | 9 +- 2 files changed, 87 insertions(+), 48 deletions(-) diff --git a/mediator/esmFldsExchange_accessesm_mod.F90 b/mediator/esmFldsExchange_accessesm_mod.F90 index baba6b18..5cf949d2 100644 --- a/mediator/esmFldsExchange_accessesm_mod.F90 +++ b/mediator/esmFldsExchange_accessesm_mod.F90 @@ -337,20 +337,20 @@ subroutine esmFldsExchange_accessesm_init(gcomp, phase, rc) ! FIELDS TO ATMOSPHERE !===================================================================== - call addmap_from(compocn, 'So_t', compatm, mapconsf, 'ofrac', 'unset') - call addmrg_to(compatm, 'So_t', mrg_from=compocn, mrg_fld='So_t', mrg_type='copy') - call addmap_from(compocn, 'So_u', compatm, mapconsf, 'ofrac', 'unset') - call addmrg_to(compatm, 'So_u', mrg_from=compocn, mrg_fld='So_u', mrg_type='copy') - call addmap_from(compocn, 'So_v', compatm, mapconsf, 'ofrac', 'unset') - call addmrg_to(compatm, 'So_v', mrg_from=compocn, mrg_fld='So_v', mrg_type='copy') - - call addmap_from(compice, 'Si_t', compatm, mapconsd, 'ifrac', 'unset') - call addmrg_to(compatm, 'Si_t', mrg_from=compice, mrg_fld='Si_t', mrg_type='copy') - - call addmap_from(compice, 'sstfrz', compatm, mapconsf, 'none', 'unset') - call addmrg_to(compatm, 'sstfrz', mrg_from=compice, mrg_fld='sstfrz', mrg_type='copy') + allocate(S_flds(3)) + S_flds = (/'So_t', 'So_u', 'So_v'/) + do n = 1,size(S_flds) + fldname = trim(S_flds(n)) + if (fldchk(is_local%wrap%FBExp(compatm), trim(fldname), rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compocn, compocn), trim(fldname), rc=rc) & + ) then + call addmap_from(compocn, trim(fldname), compatm, mapconsf, 'ofrac', 'unset') + call addmrg_to(compatm, trim(fldname), mrg_from=compocn, mrg_fld=trim(fldname), mrg_type='copy') + end if + end do + deallocate(S_flds) - allocate(S_flds(7)) + allocate(S_flds(9)) S_flds = (/'Si_t', & 'Si_ifrac_n', & 'Si_vsno_n', & @@ -363,8 +363,12 @@ subroutine esmFldsExchange_accessesm_init(gcomp, phase, rc) /) do n = 1,size(S_flds) fldname = trim(S_flds(n)) - call addmap_from(compice, trim(fldname), compatm, mapconsf, 'none', 'unset') - call addmrg_to(compatm, trim(fldname), mrg_from=compice, mrg_fld=trim(fldname), mrg_type='copy') + if (fldchk(is_local%wrap%FBExp(compatm), trim(fldname), rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compice, compice), trim(fldname), rc=rc) & + ) then + call addmap_from(compice, trim(fldname), compatm, mapconsf, 'none', 'unset') + call addmrg_to(compatm, trim(fldname), mrg_from=compice, mrg_fld=trim(fldname), mrg_type='copy') + end if end do deallocate(S_flds) @@ -420,24 +424,32 @@ subroutine esmFldsExchange_accessesm_init(gcomp, phase, rc) deallocate(F_flds) ! precip - call addmap_from(compatm, 'Faxa_rainc', compocn, mapconsf, 'one', 'unset') - call addmap_from(compatm, 'Faxa_rainl', compocn, mapconsf, 'one', 'unset') - call addmrg_to(compocn, 'Faxa_rain' , mrg_from=compatm, mrg_fld='Faxa_rainc:Faxa_rainl', & + if (fldchk(is_local%wrap%FBExp(compocn), trim('Faxa_rain'), rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compatm, compatm), trim('Faxa_rainc'),rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compatm, compatm), trim('Faxa_rainl'),rc=rc) .and. & + ) then + call addmap_from(compatm, 'Faxa_rainc', compocn, mapconsf, 'one', 'unset') + call addmap_from(compatm, 'Faxa_rainl', compocn, mapconsf, 'one', 'unset') + call addmrg_to(compocn, 'Faxa_rain' , mrg_from=compatm, mrg_fld='Faxa_rainc:Faxa_rainl', & mrg_type='sum_with_weights', mrg_fracname='ofrac') - - call addmap_from(compatm, 'Faxa_snowc', compocn, mapconsf, 'one', 'unset') - call addmap_from(compatm, 'Faxa_snowl', compocn, mapconsf, 'one', 'unset') - call addmrg_to(compocn, 'Faxa_snow' , mrg_from=compatm, mrg_fld='Faxa_snowc:Faxa_snowl', & + end if + + if (fldchk(is_local%wrap%FBExp(compocn), trim('Faxa_snow'), rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compatm, compatm), trim('Faxa_snowc'),rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compatm, compatm), trim('Faxa_snowl'),rc=rc) .and. & + ) then + call addmap_from(compatm, 'Faxa_snowc', compocn, mapconsf, 'one', 'unset') + call addmap_from(compatm, 'Faxa_snowl', compocn, mapconsf, 'one', 'unset') + call addmrg_to(compocn, 'Faxa_snow' , mrg_from=compatm, mrg_fld='Faxa_snowc:Faxa_snowl', & mrg_type='sum_with_weights', mrg_fracname='ofrac') + end if ! from ice - call addmap_from(compice, 'Si_ifrac', compocn, mapfcopy, 'unset', 'unset') - call addmrg_to(compocn, 'Si_ifrac', mrg_from=compice, mrg_fld='Si_ifrac', mrg_type='copy') - - allocate(F_flds(3, 2)) + allocate(F_flds(4, 2)) F_flds(1,:) = (/'Fioi_salt', 'Fioi_salt'/) F_flds(2,:) = (/'Fioi_meltw', 'Fioi_meltw'/) - F_flds(3,:) = (/'Fioi_melth', 'Fioi_melth'/) ! heat flux sea-ice to ocean + F_flds(3,:) = (/'Fioi_melth', 'Fioi_melth'/) + F_flds(4,:) = (/'Si_ifrac', 'Si_ifrac'/) do n = 1,size(F_flds,1) fldname1 = trim(F_flds(n,1)) fldname2 = trim(F_flds(n,2)) @@ -451,15 +463,33 @@ subroutine esmFldsExchange_accessesm_init(gcomp, phase, rc) deallocate(F_flds) ! momentum transfer - call addmap_from(compice, 'Fioi_taux', compocn, mapfcopy, 'unset', 'unset') - call addmrg_to(compocn, 'Foxx_taux', mrg_from=compice, mrg_fld='Fioi_taux', mrg_type='merge', mrg_fracname='ifrac') - call addmap_from(compatm, 'Faxa_taux', compocn, mappatch, 'one', 'unset') - call addmrg_to(compocn, 'Foxx_taux', mrg_from=compatm, mrg_fld='Faxa_taux', mrg_type='merge', mrg_fracname='ofrac') + if (fldchk(is_local%wrap%FBExp(compocn), trim('Foxx_taux'), rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compice, compice), trim('Fioi_taux'),rc=rc) & + ) then + call addmap_from(compice, trim('Fioi_taux'), compocn, mapfcopy, 'unset', 'unset') + call addmrg_to(compocn, trim('Foxx_taux'), mrg_from=compice, mrg_fld=trim('Fioi_taux'), mrg_type='merge', mrg_fracname='ifrac') + end if - call addmap_from(compice, 'Fioi_tauy', compocn, mapfcopy, 'unset', 'unset') - call addmrg_to(compocn, 'Foxx_tauy', mrg_from=compice, mrg_fld='Fioi_tauy', mrg_type='merge', mrg_fracname='ifrac') - call addmap_from(compatm, 'Faxa_tauy', compocn, mappatch, 'one', 'unset') - call addmrg_to(compocn, 'Foxx_tauy', mrg_from=compatm, mrg_fld='Faxa_tauy', mrg_type='merge', mrg_fracname='ofrac') + if (fldchk(is_local%wrap%FBExp(compocn), trim('Foxx_tauy'), rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compice, compice), trim('Fioi_tauy'),rc=rc) & + ) then + call addmap_from(compice, trim('Fioi_tauy'), compocn, mapfcopy, 'unset', 'unset') + call addmrg_to(compocn, trim('Foxx_tauy'), mrg_from=compice, mrg_fld=trim('Fioi_tauy'), mrg_type='merge', mrg_fracname='ifrac') + end if + + if (fldchk(is_local%wrap%FBExp(compocn), trim('Foxx_taux'), rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compatm, compatm), trim('Faxa_taux'),rc=rc) & + ) then + call addmap_from(compatm, trim('Faxa_taux'), compocn, mappatch, 'one', 'unset') + call addmrg_to(compocn, trim('Foxx_taux'), mrg_from=compatm, mrg_fld=trim('Faxa_taux'), mrg_type='merge', mrg_fracname='ofrac') + end if + + if (fldchk(is_local%wrap%FBExp(compocn), trim('Foxx_tauy'), rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compatm, compatm), trim('Faxa_tauy'),rc=rc) & + ) then + call addmap_from(compatm, trim('Faxa_tauy'), compocn, mappatch, 'one', 'unset') + call addmrg_to(compocn, trim('Foxx_tauy'), mrg_from=compatm, mrg_fld=trim('Faxa_tauy'), mrg_type='merge', mrg_fracname='ofrac') + end if !===================================================================== ! FIELDS TO ICE (compice) @@ -534,7 +564,7 @@ subroutine esmFldsExchange_accessesm_init(gcomp, phase, rc) fldchk(is_local%wrap%FBImp(compatm, compatm), trim(fldname1), rc=rc) & ) then - call addmap_from(compatm, trim(fldname1), compice, mapconsf, 'one', 'unset') ! mapping with total ifrac, should use category fractions + call addmap_from(compatm, trim(fldname1), compice, mapconsf, 'one', 'unset') call addmrg_to(compice, trim(fldname2), mrg_from=compatm, mrg_fld=trim(fldname1), mrg_type='copy') end if @@ -542,15 +572,25 @@ subroutine esmFldsExchange_accessesm_init(gcomp, phase, rc) deallocate(F_flds) ! precip - call addmap_from(compatm, 'Faxa_rainc', compice, mapconsf, 'one', 'unset') - call addmap_from(compatm, 'Faxa_rainl', compice, mapconsf, 'one', 'unset') - call addmrg_to(compice, 'Faxa_rain' , mrg_from=compatm, mrg_fld='Faxa_rainc:Faxa_rainl', & + if (fldchk(is_local%wrap%FBExp(compice), trim('Faxa_rain'), rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compatm, compatm), trim('Faxa_rainc'),rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compatm, compatm), trim('Faxa_rainl'),rc=rc) .and. & + ) then + call addmap_from(compatm, 'Faxa_rainc', compice, mapconsf, 'one', 'unset') + call addmap_from(compatm, 'Faxa_rainl', compice, mapconsf, 'one', 'unset') + call addmrg_to(compice, 'Faxa_rain' , mrg_from=compatm, mrg_fld='Faxa_rainc:Faxa_rainl', & mrg_type='sum') - - call addmap_from(compatm, 'Faxa_snowc', compice, mapconsf, 'one', 'unset') - call addmap_from(compatm, 'Faxa_snowl', compice, mapconsf, 'one', 'unset') - call addmrg_to(compice, 'Faxa_snow' , mrg_from=compatm, mrg_fld='Faxa_snowc:Faxa_snowl', & + end if + + if (fldchk(is_local%wrap%FBExp(compice), trim('Faxa_snow'), rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compatm, compatm), trim('Faxa_snowc'),rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compatm, compatm), trim('Faxa_snowl'),rc=rc) .and. & + ) then + call addmap_from(compatm, 'Faxa_snowc', compice, mapconsf, 'one', 'unset') + call addmap_from(compatm, 'Faxa_snowl', compice, mapconsf, 'one', 'unset') + call addmrg_to(compice, 'Faxa_snow' , mrg_from=compatm, mrg_fld='Faxa_snowc:Faxa_snowl', & mrg_type='sum') + end if call ESMF_LogWrite(trim(subname)//": done", ESMF_LOGMSG_INFO) diff --git a/mediator/med_phases_post_atm_mod.F90 b/mediator/med_phases_post_atm_mod.F90 index e7fd1aa0..c275c0eb 100644 --- a/mediator/med_phases_post_atm_mod.F90 +++ b/mediator/med_phases_post_atm_mod.F90 @@ -58,11 +58,6 @@ subroutine med_phases_post_atm(gcomp, rc) call ESMF_GridCompGetInternalState(gcomp, is_local, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - if (trim(coupling_mode) == 'access-esm') then - call med_phases_post_atm_time_travelling_ice(gcomp, rc) - if (ChkErr(rc,__LINE__,u_FILE_u)) return - end if - ! map atm to ocn if (is_local%wrap%med_coupling_active(compatm,compocn)) then call t_startf('MED:'//trim(subname)//' map_atm2ocn') @@ -80,6 +75,10 @@ subroutine med_phases_post_atm(gcomp, rc) ! map atm->ice if (is_local%wrap%med_coupling_active(compatm,compice)) then call t_startf('MED:'//trim(subname)//' map_atm2ice') + if (trim(coupling_mode) == 'access-esm') then + call med_phases_post_atm_time_travelling_ice(gcomp, rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + end if call med_map_field_packed( & FBSrc=is_local%wrap%FBImp(compatm,compatm), & FBDst=is_local%wrap%FBImp(compatm,compice), & From 87dde088cc83a1e3a0657f3fe189659f16acfff2 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Mon, 16 Mar 2026 16:17:15 +1100 Subject: [PATCH 39/41] fix syntax errors --- mediator/esmFldsExchange_accessesm_mod.F90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mediator/esmFldsExchange_accessesm_mod.F90 b/mediator/esmFldsExchange_accessesm_mod.F90 index 5cf949d2..46cc8cb2 100644 --- a/mediator/esmFldsExchange_accessesm_mod.F90 +++ b/mediator/esmFldsExchange_accessesm_mod.F90 @@ -426,7 +426,7 @@ subroutine esmFldsExchange_accessesm_init(gcomp, phase, rc) ! precip if (fldchk(is_local%wrap%FBExp(compocn), trim('Faxa_rain'), rc=rc) .and. & fldchk(is_local%wrap%FBImp(compatm, compatm), trim('Faxa_rainc'),rc=rc) .and. & - fldchk(is_local%wrap%FBImp(compatm, compatm), trim('Faxa_rainl'),rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compatm, compatm), trim('Faxa_rainl'),rc=rc) & ) then call addmap_from(compatm, 'Faxa_rainc', compocn, mapconsf, 'one', 'unset') call addmap_from(compatm, 'Faxa_rainl', compocn, mapconsf, 'one', 'unset') @@ -436,7 +436,7 @@ subroutine esmFldsExchange_accessesm_init(gcomp, phase, rc) if (fldchk(is_local%wrap%FBExp(compocn), trim('Faxa_snow'), rc=rc) .and. & fldchk(is_local%wrap%FBImp(compatm, compatm), trim('Faxa_snowc'),rc=rc) .and. & - fldchk(is_local%wrap%FBImp(compatm, compatm), trim('Faxa_snowl'),rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compatm, compatm), trim('Faxa_snowl'),rc=rc) & ) then call addmap_from(compatm, 'Faxa_snowc', compocn, mapconsf, 'one', 'unset') call addmap_from(compatm, 'Faxa_snowl', compocn, mapconsf, 'one', 'unset') @@ -574,7 +574,7 @@ subroutine esmFldsExchange_accessesm_init(gcomp, phase, rc) ! precip if (fldchk(is_local%wrap%FBExp(compice), trim('Faxa_rain'), rc=rc) .and. & fldchk(is_local%wrap%FBImp(compatm, compatm), trim('Faxa_rainc'),rc=rc) .and. & - fldchk(is_local%wrap%FBImp(compatm, compatm), trim('Faxa_rainl'),rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compatm, compatm), trim('Faxa_rainl'),rc=rc) & ) then call addmap_from(compatm, 'Faxa_rainc', compice, mapconsf, 'one', 'unset') call addmap_from(compatm, 'Faxa_rainl', compice, mapconsf, 'one', 'unset') @@ -584,7 +584,7 @@ subroutine esmFldsExchange_accessesm_init(gcomp, phase, rc) if (fldchk(is_local%wrap%FBExp(compice), trim('Faxa_snow'), rc=rc) .and. & fldchk(is_local%wrap%FBImp(compatm, compatm), trim('Faxa_snowc'),rc=rc) .and. & - fldchk(is_local%wrap%FBImp(compatm, compatm), trim('Faxa_snowl'),rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compatm, compatm), trim('Faxa_snowl'),rc=rc) & ) then call addmap_from(compatm, 'Faxa_snowc', compice, mapconsf, 'one', 'unset') call addmap_from(compatm, 'Faxa_snowl', compice, mapconsf, 'one', 'unset') From 14888794edaef9205dceea3df4ba370d7cfb2dd8 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Mon, 16 Mar 2026 16:29:29 +1100 Subject: [PATCH 40/41] fix import error --- mediator/med.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediator/med.F90 b/mediator/med.F90 index 89c46cc2..c8bfe277 100644 --- a/mediator/med.F90 +++ b/mediator/med.F90 @@ -1864,7 +1864,7 @@ subroutine DataInitialize(gcomp, rc) call esmFldsExchange_hafs(gcomp, phase='initialize', rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return else if (trim(coupling_mode) == 'access-esm') then - call esmFldsExchange_access(gcomp, phase='initialize', rc=rc) + call esmFldsExchange_accessesm(gcomp, phase='initialize', rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return end if From fa99a31b4bdeca6225e7149855321dc9b0545fa5 Mon Sep 17 00:00:00 2001 From: Kieran Ricardo Date: Mon, 16 Mar 2026 16:45:45 +1100 Subject: [PATCH 41/41] fix import error --- mediator/med.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediator/med.F90 b/mediator/med.F90 index c8bfe277..ec79f9b7 100644 --- a/mediator/med.F90 +++ b/mediator/med.F90 @@ -844,7 +844,7 @@ subroutine AdvertiseFields(gcomp, importState, exportState, clock, rc) call esmFldsExchange_hafs(gcomp, phase='advertise', rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return else if (trim(coupling_mode) == 'access-esm') then - call esmFldsExchange_access(gcomp, phase='advertise', rc=rc) + call esmFldsExchange_accessesm(gcomp, phase='advertise', rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return else call shr_log_error(trim(coupling_mode)//' is not a valid coupling_mode', rc=rc)