From 7ce3e23d42adca20de9bcb1bc2653870b46b1aac Mon Sep 17 00:00:00 2001 From: "Bin.Li" Date: Sat, 6 Apr 2024 10:46:35 +0000 Subject: [PATCH 1/5] Update esmFldsExchange_hafs_mod.F90 for ocean-wave coupling --- mediator/esmFldsExchange_hafs_mod.F90 | 64 ++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/mediator/esmFldsExchange_hafs_mod.F90 b/mediator/esmFldsExchange_hafs_mod.F90 index b545b9b1c..24aeb4424 100644 --- a/mediator/esmFldsExchange_hafs_mod.F90 +++ b/mediator/esmFldsExchange_hafs_mod.F90 @@ -280,6 +280,18 @@ subroutine esmFldsExchange_hafs_advt(gcomp, phase, rc) end if end if + ! to ocn: partitioned stokes drift from wav + if (hafs_attr%wav_present .and. hafs_attr%ocn_present) then + allocate(S_flds(2)) + S_flds = (/'Sw_pstokes_x', 'Sw_pstokes_y'/) + do n = 1,size(S_flds) + fldname = trim(S_flds(n)) + call addfld_from(compwav , fldname) + call addfld_to(compocn , fldname) + end do + deallocate(S_flds) + end if + !===================================================================== ! FIELDS TO WAVE (compwav) !===================================================================== @@ -298,6 +310,22 @@ subroutine esmFldsExchange_hafs_advt(gcomp, phase, rc) deallocate(S_flds) end if + ! --------------------------------------------------------------------- + ! to wav: states from ocn + ! - zonal sea water velocity from ocn + ! - meridional sea water velocity from ocn + ! --------------------------------------------------------------------- + if (hafs_attr%ocn_present .and. hafs_attr%wav_present) then + allocate(S_flds(2)) + S_flds = (/'So_u', 'So_v'/) + do n = 1,size(S_flds) + fldname = trim(S_flds(n)) + call addfld_from(compocn , fldname) + call addfld_to(compwav , fldname) + end do + deallocate(S_flds) + end if + call ESMF_LogWrite(trim(subname)//": done", ESMF_LOGMSG_INFO) end subroutine esmFldsExchange_hafs_advt @@ -351,7 +379,7 @@ subroutine esmFldsExchange_hafs_init(gcomp, phase, rc) 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 : mapfillv_bilnr,mapbilnr_nstod use med_internalstate_mod , only : mapnstod_consf use esmFlds , only : addmap_from => med_fldList_addmap_from use esmFlds , only : addmrg_to => med_fldList_addmrg_to @@ -461,7 +489,7 @@ subroutine esmFldsExchange_hafs_init(gcomp, phase, rc) fldchk(is_local%wrap%FBImp(compwav,compwav),trim(fldname),rc=rc) & ) then call addmap_from(compwav, trim(fldname), compatm, & - mapfillv_bilnr, hafs_attr%mapnorm, hafs_attr%wav2atm_smap) + mapbilnr_nstod, hafs_attr%mapnorm, hafs_attr%wav2atm_smap) call addmrg_to(compatm, trim(fldname), & mrg_from=compwav, mrg_fld=trim(fldname), mrg_type='copy') end if @@ -569,6 +597,21 @@ subroutine esmFldsExchange_hafs_init(gcomp, phase, rc) end if end if + ! --------------------------------------------------------------------- + ! to ocn: partitioned stokes drift from wav + ! --------------------------------------------------------------------- + allocate(S_flds(2)) + S_flds = (/'Sw_pstokes_x', 'Sw_pstokes_y'/) + do n = 1,size(S_flds) + fldname = trim(S_flds(n)) + if ( fldchk(is_local%wrap%FBexp(compocn) , fldname, rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compwav,compwav), fldname, rc=rc)) then + call addmap_from(compwav, fldname, compocn, mapbilnr_nstod, 'one', 'unset') + call addmrg_to(compocn, fldname, mrg_from=compwav, mrg_fld=fldname, mrg_type='copy') + end if + end do + deallocate(S_flds) + !===================================================================== ! FIELDS TO WAVE (compwav) !===================================================================== @@ -593,6 +636,23 @@ subroutine esmFldsExchange_hafs_init(gcomp, phase, rc) deallocate(S_flds) end if + ! --------------------------------------------------------------------- + ! to wav: states from ocn + ! - zonal sea water velocity from ocn + ! - meridional sea water velocity from ocn + ! --------------------------------------------------------------------- + allocate(S_flds(2)) + S_flds = (/'So_u', 'So_v'/) + do n = 1,size(S_flds) + fldname = trim(S_flds(n)) + if ( fldchk(is_local%wrap%FBexp(compwav) , fldname, rc=rc) .and. & + fldchk(is_local%wrap%FBImp(compocn,compocn), fldname, rc=rc)) then + call addmap_from(compocn, fldname, compwav, mapbilnr_nstod , 'one', 'unset') + call addmrg_to(compwav, fldname, mrg_from=compocn, mrg_fld=fldname, mrg_type='copy') + end if + end do + deallocate(S_flds) + call ESMF_LogWrite(trim(subname)//": done", ESMF_LOGMSG_INFO) end subroutine esmFldsExchange_hafs_init From 7571f6706a324bb15eacfdddb36b5d285c484e1c Mon Sep 17 00:00:00 2001 From: "Bin.Li" Date: Fri, 12 Jul 2024 19:04:11 +0000 Subject: [PATCH 2/5] Update interpolation method. --- mediator/esmFldsExchange_hafs_mod.F90 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mediator/esmFldsExchange_hafs_mod.F90 b/mediator/esmFldsExchange_hafs_mod.F90 index 24aeb4424..5f586def6 100644 --- a/mediator/esmFldsExchange_hafs_mod.F90 +++ b/mediator/esmFldsExchange_hafs_mod.F90 @@ -379,7 +379,7 @@ subroutine esmFldsExchange_hafs_init(gcomp, phase, rc) 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,mapbilnr_nstod + use med_internalstate_mod , only : mapfillv_bilnr, mapbilnr_nstod use med_internalstate_mod , only : mapnstod_consf use esmFlds , only : addmap_from => med_fldList_addmap_from use esmFlds , only : addmrg_to => med_fldList_addmrg_to @@ -489,7 +489,8 @@ subroutine esmFldsExchange_hafs_init(gcomp, phase, rc) fldchk(is_local%wrap%FBImp(compwav,compwav),trim(fldname),rc=rc) & ) then call addmap_from(compwav, trim(fldname), compatm, & - mapbilnr_nstod, hafs_attr%mapnorm, hafs_attr%wav2atm_smap) + !mapbilnr_nstod, hafs_attr%mapnorm, hafs_attr%wav2atm_smap) + mapfillv_bilnr, hafs_attr%mapnorm, hafs_attr%wav2atm_smap) call addmrg_to(compatm, trim(fldname), & mrg_from=compwav, mrg_fld=trim(fldname), mrg_type='copy') end if From ed03725b32bf23707a4344c9b1fdbeefac57de23 Mon Sep 17 00:00:00 2001 From: "Bin.Li" Date: Sat, 28 Dec 2024 09:57:16 +0000 Subject: [PATCH 3/5] Code cleanup. --- mediator/esmFldsExchange_hafs_mod.F90 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mediator/esmFldsExchange_hafs_mod.F90 b/mediator/esmFldsExchange_hafs_mod.F90 index 5f586def6..8c8bdf0c4 100644 --- a/mediator/esmFldsExchange_hafs_mod.F90 +++ b/mediator/esmFldsExchange_hafs_mod.F90 @@ -379,7 +379,7 @@ subroutine esmFldsExchange_hafs_init(gcomp, phase, rc) 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, mapbilnr_nstod + use med_internalstate_mod , only : mapfillv_bilnr use med_internalstate_mod , only : mapnstod_consf use esmFlds , only : addmap_from => med_fldList_addmap_from use esmFlds , only : addmrg_to => med_fldList_addmrg_to @@ -489,7 +489,6 @@ subroutine esmFldsExchange_hafs_init(gcomp, phase, rc) fldchk(is_local%wrap%FBImp(compwav,compwav),trim(fldname),rc=rc) & ) then call addmap_from(compwav, trim(fldname), compatm, & - !mapbilnr_nstod, hafs_attr%mapnorm, hafs_attr%wav2atm_smap) mapfillv_bilnr, hafs_attr%mapnorm, hafs_attr%wav2atm_smap) call addmrg_to(compatm, trim(fldname), & mrg_from=compwav, mrg_fld=trim(fldname), mrg_type='copy') From d6ebecc35552fda494a71f5ce2c62248c6126c63 Mon Sep 17 00:00:00 2001 From: "Bin.Li" Date: Fri, 17 Jan 2025 18:11:22 +0000 Subject: [PATCH 4/5] Update esmFldsExchange_hafs_mod.F90. --- mediator/esmFldsExchange_hafs_mod.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mediator/esmFldsExchange_hafs_mod.F90 b/mediator/esmFldsExchange_hafs_mod.F90 index 8c8bdf0c4..4f1da8656 100644 --- a/mediator/esmFldsExchange_hafs_mod.F90 +++ b/mediator/esmFldsExchange_hafs_mod.F90 @@ -606,7 +606,7 @@ subroutine esmFldsExchange_hafs_init(gcomp, phase, rc) fldname = trim(S_flds(n)) if ( fldchk(is_local%wrap%FBexp(compocn) , fldname, rc=rc) .and. & fldchk(is_local%wrap%FBImp(compwav,compwav), fldname, rc=rc)) then - call addmap_from(compwav, fldname, compocn, mapbilnr_nstod, 'one', 'unset') + call addmap_from(compwav, fldname, compocn, mapfillv_bilnr, 'one', 'unset') call addmrg_to(compocn, fldname, mrg_from=compwav, mrg_fld=fldname, mrg_type='copy') end if end do @@ -647,7 +647,7 @@ subroutine esmFldsExchange_hafs_init(gcomp, phase, rc) fldname = trim(S_flds(n)) if ( fldchk(is_local%wrap%FBexp(compwav) , fldname, rc=rc) .and. & fldchk(is_local%wrap%FBImp(compocn,compocn), fldname, rc=rc)) then - call addmap_from(compocn, fldname, compwav, mapbilnr_nstod , 'one', 'unset') + call addmap_from(compocn, fldname, compwav, mapfillv_bilnr , 'one', 'unset') call addmrg_to(compwav, fldname, mrg_from=compocn, mrg_fld=fldname, mrg_type='copy') end if end do From b23b5fa5655d79a45b0e5614ab1efd08cc779bdd Mon Sep 17 00:00:00 2001 From: "Bin.Li" Date: Mon, 24 Feb 2025 12:30:28 +0000 Subject: [PATCH 5/5] Update esmFldsExchange_hafs_mod.F90. --- mediator/esmFldsExchange_hafs_mod.F90 | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/mediator/esmFldsExchange_hafs_mod.F90 b/mediator/esmFldsExchange_hafs_mod.F90 index 4f1da8656..0515c8707 100644 --- a/mediator/esmFldsExchange_hafs_mod.F90 +++ b/mediator/esmFldsExchange_hafs_mod.F90 @@ -606,7 +606,8 @@ subroutine esmFldsExchange_hafs_init(gcomp, phase, rc) fldname = trim(S_flds(n)) if ( fldchk(is_local%wrap%FBexp(compocn) , fldname, rc=rc) .and. & fldchk(is_local%wrap%FBImp(compwav,compwav), fldname, rc=rc)) then - call addmap_from(compwav, fldname, compocn, mapfillv_bilnr, 'one', 'unset') + call addmap_from(compwav, fldname, compocn, mapfillv_bilnr, & + hafs_attr%mapnorm, 'unset') call addmrg_to(compocn, fldname, mrg_from=compwav, mrg_fld=fldname, mrg_type='copy') end if end do @@ -624,7 +625,7 @@ subroutine esmFldsExchange_hafs_init(gcomp, phase, rc) S_flds = (/'Sa_u10m', 'Sa_v10m'/) do n = 1,size(S_flds) fldname = trim(S_flds(n)) - if (fldchk(is_local%wrap%FBexp(compwav),trim(fldname),rc=rc) .and. & + if (fldchk(is_local%wrap%FBexp(compwav), trim(fldname),rc=rc) .and. & fldchk(is_local%wrap%FBImp(compatm,compatm), trim(fldname),rc=rc) & ) then call addmap_from(compatm, trim(fldname), compwav, & @@ -647,7 +648,8 @@ subroutine esmFldsExchange_hafs_init(gcomp, phase, rc) fldname = trim(S_flds(n)) if ( fldchk(is_local%wrap%FBexp(compwav) , fldname, rc=rc) .and. & fldchk(is_local%wrap%FBImp(compocn,compocn), fldname, rc=rc)) then - call addmap_from(compocn, fldname, compwav, mapfillv_bilnr , 'one', 'unset') + call addmap_from(compocn, fldname, compwav, mapfillv_bilnr, & + hafs_attr%mapnorm, 'unset') call addmrg_to(compwav, fldname, mrg_from=compocn, mrg_fld=fldname, mrg_type='copy') end if end do