@@ -27,7 +27,7 @@ module med_phases_aofluxes_mod
27
27
use ESMF , only : ESMF_XGridGet, ESMF_MeshCreate, ESMF_MeshWrite, ESMF_KIND_R8
28
28
use med_kind_mod , only : CX= >SHR_KIND_CX, CS= >SHR_KIND_CS, CL= >SHR_KIND_CL, R8 = >SHR_KIND_R8
29
29
use med_internalstate_mod , only : InternalState, maintask, logunit
30
- use med_internalstate_mod , only : compatm, compocn, coupling_mode, aoflux_code, mapconsd, mapconsf, mapfcopy
30
+ use med_internalstate_mod , only : compatm, compocn, compwav, coupling_mode, aoflux_code, mapconsd, mapconsf, mapfcopy
31
31
use med_constants_mod , only : dbug_flag = > med_constants_dbug_flag
32
32
use med_utils_mod , only : memcheck = > med_memcheck
33
33
use med_utils_mod , only : chkerr = > med_utils_chkerr
@@ -487,6 +487,7 @@ subroutine med_aofluxes_init_ogrid(gcomp, aoflux_in, aoflux_out, rc)
487
487
use esmFlds , only : med_fldlist_GetaofluxfldList
488
488
use esmFlds , only : med_fldList_type
489
489
use med_map_mod , only : med_map_packed_field_create
490
+ use med_methods_mod , only : FB_fldchk = > med_methods_FB_FldChk
490
491
491
492
! Arguments
492
493
type (ESMF_GridComp) , intent (inout ) :: gcomp
@@ -565,15 +566,13 @@ subroutine med_aofluxes_init_ogrid(gcomp, aoflux_in, aoflux_out, rc)
565
566
if (is_local% wrap% aoflux_grid == ' ogrid' ) then
566
567
if ( ESMF_FieldBundleIsCreated(is_local% wrap% FBMed_aoflux_o) .and. &
567
568
ESMF_FieldBundleIsCreated(is_local% wrap% FBMed_aoflux_a)) then
568
-
569
569
call med_map_packed_field_create(destcomp= compatm, &
570
570
flds_scalar_name= is_local% wrap% flds_scalar_name, &
571
571
fieldsSrc= fldListMed_aoflux, &
572
572
FBSrc= is_local% wrap% FBMed_aoflux_o, &
573
573
FBDst= is_local% wrap% FBMed_aoflux_a, &
574
574
packed_data= is_local% wrap% packed_data_aoflux_o2a(:), rc= rc)
575
575
if (ChkErr(rc,__LINE__,u_FILE_u)) return
576
-
577
576
end if
578
577
end if
579
578
@@ -950,6 +949,9 @@ subroutine med_aofluxes_update(gcomp, aoflux_in, aoflux_out, rc)
950
949
use ESMF , only : ESMF_GridComp
951
950
use ESMF , only : ESMF_LogWrite, ESMF_LogMsg_Info, ESMF_SUCCESS
952
951
use med_map_mod , only : med_map_field_packed, med_map_rh_is_created
952
+ use med_map_mod , only : med_map_routehandles_init
953
+ use med_methods_mod, only : FB_fldchk = > med_methods_FB_fldchk
954
+ use med_methods_mod, only : FB_diagnose = > med_methods_FB_diagnose
953
955
#ifdef CESMCOUPLED
954
956
use shr_flux_mod , only : flux_atmocn
955
957
#else
@@ -972,6 +974,9 @@ subroutine med_aofluxes_update(gcomp, aoflux_in, aoflux_out, rc)
972
974
real (r8 ), parameter :: p0 = 100000.0_r8 ! reference pressure in Pa
973
975
real (r8 ), parameter :: rcp = 0.286_r8 ! gas constant of air / specific heat capacity at a constant pressure
974
976
real (r8 ), parameter :: rdair = 287.058_r8 ! dry air gas constant in J/K/kg
977
+ integer :: maptype
978
+ type (ESMF_Field) :: field_src
979
+ type (ESMF_Field) :: field_dst
975
980
character (* ),parameter :: subName = ' (med_aofluxes_update) '
976
981
!- ----------------------------------------------------------------------
977
982
@@ -1117,6 +1122,35 @@ subroutine med_aofluxes_update(gcomp, aoflux_in, aoflux_out, rc)
1117
1122
1118
1123
end if
1119
1124
1125
+ ! map taux and tauy from ocean to wave grid if stresses are needed on the wave grid
1126
+ if ( FB_fldchk(is_local% wrap% FBExp(compwav), ' Fwxx_taux' , rc= rc) .and. &
1127
+ FB_fldchk(is_local% wrap% FBExp(compwav), ' Fwxx_tauy' , rc= rc)) then
1128
+ maptype = mapconsf
1129
+ if (.not. med_map_RH_is_created(is_local% wrap% RH(compocn,compwav,:), maptype, rc= rc)) then
1130
+ call med_map_routehandles_init( compocn, compwav, &
1131
+ FBSrc= is_local% wrap% FBImp(compocn,compocn), &
1132
+ FBDst= is_local% wrap% FBImp(compwav,compwav), &
1133
+ mapindex= maptype, RouteHandle= is_local% wrap% RH, rc= rc)
1134
+ if (ChkErr(rc,__LINE__,u_FILE_u)) return
1135
+ end if
1136
+ call ESMF_FieldBundleGet(is_local% wrap% FBMed_aoflux_o, ' Faox_taux' , field= field_src, rc= rc)
1137
+ if (chkerr(rc,__LINE__,u_FILE_u)) return
1138
+ call ESMF_FieldBundleGet(is_local% wrap% FBExp(compwav), ' Fwxx_taux' , field= field_dst, rc= rc)
1139
+ if (chkerr(rc,__LINE__,u_FILE_u)) return
1140
+ call ESMF_FieldRegrid(field_src, field_dst, &
1141
+ routehandle= is_local% wrap% RH(compocn, compwav, maptype), &
1142
+ termorderflag= ESMF_TERMORDER_SRCSEQ, zeroregion= ESMF_REGION_TOTAL, rc= rc)
1143
+ if (chkerr(rc,__LINE__,u_FILE_u)) return
1144
+ call ESMF_FieldBundleGet(is_local% wrap% FBMed_aoflux_o, ' Faox_tauy' , field= field_src, rc= rc)
1145
+ if (chkerr(rc,__LINE__,u_FILE_u)) return
1146
+ call ESMF_FieldBundleGet(is_local% wrap% FBExp(compwav), ' Fwxx_tauy' , field= field_dst, rc= rc)
1147
+ if (chkerr(rc,__LINE__,u_FILE_u)) return
1148
+ call ESMF_FieldRegrid(field_src, field_dst, &
1149
+ routehandle= is_local% wrap% RH(compocn, compwav, maptype), &
1150
+ termorderflag= ESMF_TERMORDER_SRCSEQ, zeroregion= ESMF_REGION_TOTAL, rc= rc)
1151
+ if (chkerr(rc,__LINE__,u_FILE_u)) return
1152
+ end if
1153
+
1120
1154
call t_stopf(' MED:' // subname)
1121
1155
1122
1156
end subroutine med_aofluxes_update
0 commit comments