Skip to content

Commit

Permalink
update coupling interface
Browse files Browse the repository at this point in the history
  • Loading branch information
massonseb committed Jul 18, 2024
1 parent b11c63e commit e75a359
Show file tree
Hide file tree
Showing 8 changed files with 470 additions and 108 deletions.
2 changes: 2 additions & 0 deletions Registry/Registry.EM_COMMON
Original file line number Diff line number Diff line change
Expand Up @@ -884,6 +884,8 @@ state real DTW ij misc 1 - r
# Ocean surface currents
state real UOCE ij misc 1 - i0124rd=(interp_mask_water_field:lu_index,iswater) "UOCE" "SEA SURFACE ZONAL CURRENTS" "m s-1"
state real VOCE ij misc 1 - i0124rd=(interp_mask_water_field:lu_index,iswater) "VOCE" "SEA SURFACE MERIDIONAL CURRENTS" "m s-1"
# Charnock coefficient from wave model
state real CHA_COEF ij misc 1 - i0124rd=(interp_mask_water_field:lu_index,iswater) "CHA_COEF" "CHARNOCK COEFFICIENT" ""

# DFI variables
state real hcoeff {ndfi} misc 1 - - "HCOEFF" "initialization weights"
Expand Down
3 changes: 2 additions & 1 deletion dyn_em/module_first_rk_step_part1.F
Original file line number Diff line number Diff line change
Expand Up @@ -663,11 +663,12 @@ SUBROUTINE first_rk_step_part1 ( grid , config_flags &
& ,UDRUNOFF=grid%udrunoff ,UST=grid%ust ,UZ0=grid%uz0 &
& ,U_FRAME=grid%u_frame ,U_PHY=grid%u_phy ,V10=grid%v10 &
& ,U10E=grid%u10e ,V10E=grid%v10e &
& ,UOCE=grid%uoce ,VOCE=grid%voce &
& ,UOCE=grid%uoce ,VOCE=grid%voce ,CHA_COEF=grid%cha_coef &
& ,VEGFRA=grid%vegfra ,VZ0=grid%vz0 ,V_FRAME=grid%v_frame &
& ,V_PHY=grid%v_phy ,WARM_RAIN=grid%warm_rain &
& ,WSPD=grid%wspd ,XICE=grid%xice ,XLAND=grid%xland &
& ,MAX_EDOM=grid%num_ext_model_couple_dom ,CPLMASK=grid%cplmask &
& ,COSA=grid%cosa ,SINA=grid%sina &
& ,Z0=grid%z0 ,Z=grid%z ,ZNT=grid%znt &
& ,ZS=grid%zs ,ALBSI=grid%albsi , ICEDEPTH=grid%icedepth &
& ,SNOWSI=grid%snowsi &
Expand Down
489 changes: 406 additions & 83 deletions frame/module_cpl.F

Large diffs are not rendered by default.

18 changes: 17 additions & 1 deletion phys/module_sf_sfclay.F
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ SUBROUTINE SFCLAY(U3D,V3D,T3D,QV3D,P3D,dz8w, &
SVP1,SVP2,SVP3,SVPT0,EP1,EP2, &
KARMAN,EOMEG,STBOLT, &
P1000mb,LAKEMASK, &
CHA_COEF, &
ids,ide, jds,jde, kds,kde, &
ims,ime, jms,jme, kms,kme, &
its,ite, jts,jte, kts,kte, &
Expand Down Expand Up @@ -51,6 +52,7 @@ SUBROUTINE SFCLAY(U3D,V3D,T3D,QV3D,P3D,dz8w, &
!-- UST u* in similarity theory (m/s)
!-- USTM u* in similarity theory (m/s) without vconv correction
! used to couple with TKE scheme
!-- CHA_COEF charnock coefficient from wave model
!-- PBLH PBL height from previous time (m)
!-- MAVAIL surface moisture availability (between 0 and 1)
!-- ZOL z/L height over Monin-Obukhov length
Expand Down Expand Up @@ -161,6 +163,7 @@ SUBROUTINE SFCLAY(U3D,V3D,T3D,QV3D,P3D,dz8w, &
INTENT(INOUT) :: ZNT, &
ZOL, &
UST, &
CHA_COEF, &
CPM, &
CHS2, &
CQS2, &
Expand Down Expand Up @@ -244,6 +247,7 @@ SUBROUTINE SFCLAY(U3D,V3D,T3D,QV3D,P3D,dz8w, &
GZ1OZ0(ims,j),WSPD(ims,j),BR(ims,j),ISFFLX,DX2D, &
SVP1,SVP2,SVP3,SVPT0,EP1,EP2,KARMAN,EOMEG,STBOLT, &
P1000mb,LAKEMASK(ims,j), &
CHA_COEF(ims,j), &
ids,ide, jds,jde, kds,kde, &
ims,ime, jms,jme, kms,kme, &
its,ite, jts,jte, kts,kte &
Expand All @@ -269,6 +273,7 @@ SUBROUTINE SFCLAY1D(J,UX,VX,T1D,QV1D,P1D,dz8w1d, &
SVP1,SVP2,SVP3,SVPT0,EP1,EP2, &
KARMAN,EOMEG,STBOLT, &
P1000mb,LAKEMASK, &
CHA_COEF, &
ids,ide, jds,jde, kds,kde, &
ims,ime, jms,jme, kms,kme, &
its,ite, jts,jte, kts,kte, &
Expand Down Expand Up @@ -317,6 +322,7 @@ SUBROUTINE SFCLAY1D(J,UX,VX,T1D,QV1D,P1D,dz8w1d, &
INTENT(INOUT) :: ZNT, &
ZOL, &
UST, &
CHA_COEF, &
CPM, &
CHS2, &
CQS2, &
Expand Down Expand Up @@ -854,7 +860,17 @@ SUBROUTINE SFCLAY1D(J,UX,VX,T1D,QV1D,P1D,dz8w1d, &
! ZNT(I)=CZC*UST(I)*UST(I)/G+0.11*1.5E-5/UST(I)
! AHW: change roughness length, and hence the drag coefficients Ck and Cd
IF ( PRESENT(ISFTCFLX) ) THEN
IF ( ISFTCFLX.NE.0 ) THEN
IF ( ISFTCFLX.EQ.5 ) THEN
! isftcflx=5 is for coupling with a wave model
! varying charnock coefficient CHA_COEF from the wave model is used instead
! of CZO in the computation of roughness length ZNT
ZNT(I)=CHA_COEF(I)*UST(I)*UST(I)/G+0.11*1.5E-5/UST(I)
ELSEIF ( ISFTCFLX.EQ.6 ) THEN
! isftcflx=6 is for saturating classical charnock coefficient
! to a given level
ZNT(I)=CZO*UST(I)*UST(I)/G+0.11*1.5E-5/UST(I)
ZNT(I)=MIN(ZNT(I),7.0e-3)
ELSEIF ( ISFTCFLX.EQ.1 .OR. ISFTCFLX.EQ.2 ) THEN
! ZNT(I)=10.*exp(-9.*UST(I)**(-.3333))
! ZNT(I)=10.*exp(-9.5*UST(I)**(-.3333))
! ZNT(I)=ZNT(I) + 0.11*1.5E-5/AMAX1(UST(I),0.01)
Expand Down
6 changes: 5 additions & 1 deletion phys/module_sf_sfclayrev.F
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ subroutine sfclayrev(u3d,v3d,t3d,qv3d,p3d,dz8w, &
gz1oz0,wspd,br,isfflx,dx, &
svp1,svp2,svp3,svpt0,ep1,ep2, &
karman,p1000mb,lakemask, &
cha_coef, &
ids,ide,jds,jde,kds,kde, &
ims,ime,jms,jme,kms,kme, &
its,ite,jts,jte,kts,kte, &
Expand Down Expand Up @@ -53,6 +54,7 @@ subroutine sfclayrev(u3d,v3d,t3d,qv3d,p3d,dz8w, &
tsk, &
xland, &
lakemask, &
cha_coef, &
water_depth

real(kind=kind_phys),intent(in),dimension(ims:ime,kms:kme,jms:jme):: &
Expand Down Expand Up @@ -119,7 +121,7 @@ subroutine sfclayrev(u3d,v3d,t3d,qv3d,p3d,dz8w, &
real(kind=kind_phys),dimension(its:ite):: dz1d,u1d,v1d,qv1d,p1d,t1d

real(kind=kind_phys),dimension(its:ite):: &
dx_hv,mavail_hv,pblh_hv,psfc_hv,tsk_hv,xland_hv,water_depth_hv,lakemask_hv
dx_hv,mavail_hv,pblh_hv,psfc_hv,tsk_hv,xland_hv,water_depth_hv,lakemask_hv,cha_coef_hv
real(kind=kind_phys),dimension(its:ite,kts:kte):: &
dz_hv,u_hv,v_hv,qv_hv,p_hv,t_hv

Expand Down Expand Up @@ -155,6 +157,7 @@ subroutine sfclayrev(u3d,v3d,t3d,qv3d,p3d,dz8w, &
tsk_hv(i) = tsk(i,j)
xland_hv(i) = xland(i,j)
lakemask_hv(i) = lakemask(i,j)
cha_coef_hv(i) = cha_coef(i,j)
water_depth_hv(i) = water_depth(i,j)

do k = kts,kte
Expand Down Expand Up @@ -208,6 +211,7 @@ subroutine sfclayrev(u3d,v3d,t3d,qv3d,p3d,dz8w, &
rmol=rmol_hv,znt=znt_hv,ust=ust_hv,mavail=mavail_hv, &
zol=zol_hv,mol=mol_hv,regime=regime_hv,psim=psim_hv, &
psih=psih_hv,fm=fm_hv,fh=fh_hv,xland=xland_hv,lakemask=lakemask_hv, &
cha_coef=ch_coef_hv, &
hfx=hfx_hv,qfx=qfx_hv,tsk=tsk_hv,u10=u10_hv, &
v10=v10_hv,th2=th2_hv,t2=t2_hv,q2=q2_hv,flhc=flhc_hv, &
flqc=flqc_hv,qgh=qgh_hv,qsfc=qsfc_hv,lh=lh_hv, &
Expand Down
40 changes: 21 additions & 19 deletions phys/module_surface_driver.F
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ SUBROUTINE surface_driver( &
& ,t_phy,u10,udrunoff,ust,uz0 &
& ,u_frame,u_phy,v10,vegfra,u10e,v10e,uoce,voce &
& ,vz0,v_frame,v_phy,warm_rain,wspd,xice,xland,z,znt &
& ,max_edom,cplmask &
& ,max_edom,cplmask,cosa,sina,cha_coef &
& ,zs &
& ,albsi, icedepth,snowsi &
& ,xicem,isice,iswater,ct,tke_pbl &
Expand Down Expand Up @@ -395,7 +395,7 @@ SUBROUTINE surface_driver( &
USE module_sf_sstskin
USE module_sf_tmnupdate
USE module_sf_lake
USE module_cpl, ONLY : coupler_on, cpl_rcv
USE module_cpl, ONLY : coupler_on, cpl_rcv_sfcdrv
use module_ra_gfdleta, only: cal_mon_day
!
! This driver calls subroutines for the surface parameterizations.
Expand Down Expand Up @@ -500,6 +500,7 @@ SUBROUTINE surface_driver( &
!-- v10 diagnostic 10-m v component from surface layer
!-- UOCE sea surface zonal currents (m s-1)
!-- VOCE sea surface meridional currents (m s-1)
!-- CHA_COEF charnock coefficient from wave model ()
!-- th2 diagnostic 2-m theta from surface layer and lsm
!-- t2 diagnostic 2-m temperature from surface layer and lsm
!-- q2 diagnostic 2-m mixing ratio from surface layer and lsm
Expand Down Expand Up @@ -690,6 +691,7 @@ SUBROUTINE surface_driver( &
REAL, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: XLAND
INTEGER, INTENT(IN ) :: MAX_EDOM
REAL, DIMENSION( ims:ime , 1:max_edom, jms:jme ), INTENT(IN ), OPTIONAL :: CPLMASK
REAL, DIMENSION( ims:ime , jms:jme ), INTENT(IN ):: COSA, SINA
REAL, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: XICEM
REAL, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: MAVAIL
REAL, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: SNOALB
Expand Down Expand Up @@ -829,6 +831,7 @@ SUBROUTINE surface_driver( &
REAL, DIMENSION( ims:ime, jms:jme ), INTENT(OUT):: V10E
REAL, DIMENSION( ims:ime, jms:jme ), INTENT(OUT):: UOCE
REAL, DIMENSION( ims:ime, jms:jme ), INTENT(OUT):: VOCE
REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT):: CHA_COEF
REAL, DIMENSION( ims:ime, jms:jme ), INTENT(OUT):: PSFC
REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT):: ACSNOM
REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT):: SFCEVP
Expand Down Expand Up @@ -1506,25 +1509,12 @@ SUBROUTINE surface_driver( &
endif

IF ( coupler_on .and. present(cplmask) .and. present(sst_input) ) THEN

CALL cpl_rcv( id, 'SST', &
& ids, ide, jds, jde, kds, kde, &
& ims, ime, jms, jme, kms, kme, &
& ips, ipe, jps, jpe, kps, kpe, &
& max_edom, cplmask, SST, SST_INPUT )

CALL cpl_rcv( id, 'UOCE', &
CALL cpl_rcv_sfcdrv( id, max_edom, cplmask, cosa, sina, &
& SST_INPUT, SST, UOCE, VOCE, &
& CHA_COEF, &
& ids, ide, jds, jde, kds, kde, &
& ims, ime, jms, jme, kms, kme, &
& ips, ipe, jps, jpe, kps, kpe, &
& max_edom, cplmask, UOCE )

CALL cpl_rcv( id, 'VOCE', &
& ids, ide, jds, jde, kds, kde, &
& ims, ime, jms, jme, kms, kme, &
& ips, ipe, jps, jpe, kps, kpe, &
& max_edom, cplmask, VOCE )

& ips, ipe, jps, jpe, kps, kpe )
END IF

#if (EM_CORE==1)
Expand Down Expand Up @@ -2049,6 +2039,7 @@ SUBROUTINE surface_driver( &
gz1oz0,wspd,br,isfflx,dx2d, &
svp1,svp2,svp3,svpt0,ep_1,ep_2,karman,eomeg,stbolt, &
P1000mb,lakemask, &
CHA_COEF, &
XICE,SST,TSK_SEA, &
CHS2_SEA,CHS_SEA,CPM_SEA,CQS2_SEA,FLHC_SEA,FLQC_SEA, &
HFX_SEA,LH_SEA,QFX_SEA,QGH_SEA,QSFC_SEA,ZNT_SEA, &
Expand All @@ -2067,6 +2058,7 @@ SUBROUTINE surface_driver( &
gz1oz0,wspd,br,isfflx,dx2d, &
svp1,svp2,svp3,svpt0,ep_1,ep_2,karman,eomeg,stbolt, &
P1000mb,lakemask, &
cha_coef, &
ids,ide, jds,jde, kds,kde, &
ims,ime, jms,jme, kms,kme, &
i_start(ij),i_end(ij), j_start(ij),j_end(ij), kts,kte, &
Expand Down Expand Up @@ -2102,6 +2094,7 @@ SUBROUTINE surface_driver( &
gz1oz0,wspd,br,isfflx,dx2d, &
svp1,svp2,svp3,svpt0,ep_1,ep_2,karman, &
P1000mb,lakemask, &
CHA_COEF, &
XICE,SST,TSK_SEA, &
CHS2_SEA,CHS_SEA,CPM_SEA,CQS2_SEA,FLHC_SEA,FLQC_SEA, &
HFX_SEA,LH_SEA,QFX_SEA,QGH_SEA,QSFC_SEA,ZNT_SEA, &
Expand All @@ -2121,6 +2114,7 @@ SUBROUTINE surface_driver( &
gz1oz0,wspd,br,isfflx,dx2d, &
svp1,svp2,svp3,svpt0,ep_1,ep_2,karman, &
P1000mb,lakemask, &
cha_coef, &
ids,ide, jds,jde, kds,kde, &
ims,ime, jms,jme, kms,kme, &
i_start(ij),i_end(ij), j_start(ij),j_end(ij), kts,kte, &
Expand Down Expand Up @@ -5828,6 +5822,7 @@ SUBROUTINE sfclayrev_seaice_wrapper(U3D,V3D,T3D,QV3D,P3D,dz8w, &
SVP1,SVP2,SVP3,SVPT0,EP1,EP2, &
KARMAN, &
P1000,LAKEMASK, &
CHA_COEF, &
XICE,SST,TSK_SEA, &
CHS2_SEA,CHS_SEA,CPM_SEA,CQS2_SEA,FLHC_SEA,FLQC_SEA, &
HFX_SEA,LH_SEA,QFX_SEA,QGH_SEA,QSFC_SEA,ZNT_SEA, &
Expand Down Expand Up @@ -5895,6 +5890,7 @@ SUBROUTINE sfclayrev_seaice_wrapper(U3D,V3D,T3D,QV3D,P3D,dz8w, &
INTENT(INOUT) :: ZNT, &
ZOL, &
UST, &
CHA_COEF, &
CPM, &
CHS2, &
CQS2, &
Expand Down Expand Up @@ -6095,6 +6091,7 @@ SUBROUTINE sfclayrev_seaice_wrapper(U3D,V3D,T3D,QV3D,P3D,dz8w, &
SVP1,SVP2,SVP3,SVPT0,EP1,EP2, &
KARMAN, &
P1000,lakemask, &
CHA_COEF, &
ids,ide, jds,jde, kds,kde, &
ims,ime, jms,jme, kms,kme, &
its,ite, jts,jte, kts,kte, &
Expand Down Expand Up @@ -6189,6 +6186,7 @@ SUBROUTINE sfclayrev_seaice_wrapper(U3D,V3D,T3D,QV3D,P3D,dz8w, &
SVP1,SVP2,SVP3,SVPT0,EP1,EP2, &
KARMAN, &
P1000,lakemask, &
CHA_COEF, &
ids,ide, jds,jde, kds,kde, &
ims,ime, jms,jme, kms,kme, &
its,ite, jts,jte, kts,kte, & ! 0
Expand Down Expand Up @@ -6264,6 +6262,7 @@ SUBROUTINE sfclay_seaice_wrapper(U3D,V3D,T3D,QV3D,P3D,dz8w, &
SVP1,SVP2,SVP3,SVPT0,EP1,EP2, &
KARMAN,EOMEG,STBOLT, &
P1000,lakemask, &
CHA_COEF, &
XICE,SST,TSK_SEA, &
CHS2_SEA,CHS_SEA,CPM_SEA,CQS2_SEA,FLHC_SEA,FLQC_SEA, &
HFX_SEA,LH_SEA,QFX_SEA,QGH_SEA,QSFC_SEA,ZNT_SEA, &
Expand Down Expand Up @@ -6329,6 +6328,7 @@ SUBROUTINE sfclay_seaice_wrapper(U3D,V3D,T3D,QV3D,P3D,dz8w, &
INTENT(INOUT) :: ZNT, &
ZOL, &
UST, &
CHA_COEF, &
CPM, &
CHS2, &
CQS2, &
Expand Down Expand Up @@ -6526,6 +6526,7 @@ SUBROUTINE sfclay_seaice_wrapper(U3D,V3D,T3D,QV3D,P3D,dz8w, &
SVP1,SVP2,SVP3,SVPT0,EP1,EP2, &
KARMAN,EOMEG,STBOLT, &
P1000,lakemask, &
CHA_COEF, &
ids,ide, jds,jde, kds,kde, &
ims,ime, jms,jme, kms,kme, &
its,ite, jts,jte, kts,kte, &
Expand Down Expand Up @@ -6620,6 +6621,7 @@ SUBROUTINE sfclay_seaice_wrapper(U3D,V3D,T3D,QV3D,P3D,dz8w, &
SVP1,SVP2,SVP3,SVPT0,EP1,EP2, &
KARMAN,EOMEG,STBOLT, &
P1000,lakemask, &
CHA_COEF, &
ids,ide, jds,jde, kds,kde, &
ims,ime, jms,jme, kms,kme, &
its,ite, jts,jte, kts,kte, & ! 0
Expand Down
Loading

0 comments on commit e75a359

Please sign in to comment.