1 !WRF:MODEL_LAYER:PHYSICS
3 MODULE module_sf_ocean_driver
7 !----------------------------------------------------------------
8 SUBROUTINE OCEAN_DRIVER(tml,t0ml,hml,h0ml,huml,hvml,ust,u_phy,v_phy, &
10 XLAND,HFX,LH,TSK,GSW,GLW,EMISS, &
11 DELTSM,STBOLT,OML_RELAXATION_TIME, &
12 ids,ide, jds,jde, kds,kde, &
13 ims,ime, jms,jme, kms,kme, &
14 its,ite, jts,jte, kts,kte, &
15 sf_ocean_physics,okms, okme, & !cyl
16 om_tmp,om_s,om_u, om_v, om_depth, om_ml, & !cyl
17 om_lat, om_lon, & !cyl
19 rdx, rdy, msfu, msfv, msft,xtime,om_tini,om_sini,id,omdt, & !cyl
22 !----------------------------------------------------------------
24 USE module_state_description, ONLY : OMLSCHEME , PWP3DSCHEME
30 !----------------------------------------------------------------
32 ! SUBROUTINE OCEANML CALCULATES THE SEA SURFACE TEMPERATURE (TSK)
33 ! FROM A SIMPLE OCEAN MIXED LAYER MODEL BASED ON
34 ! (Pollard, Rhines and Thompson (1973).
36 !-- TML ocean mixed layer temperature (K)
37 !-- T0ML ocean mixed layer temperature (K) at initial time
38 !-- TMOML top 200 m ocean mean temperature (K) at initial time
39 !-- HML ocean mixed layer depth (m)
40 !-- H0ML ocean mixed layer depth (m) at initial time
41 !-- HUML ocean mixed layer u component of wind
42 !-- HVML ocean mixed layer v component of wind
43 !-- OML_GAMMA deep water lapse rate (K m-1)
44 !-- OML_RELAXATION_TIME Time scale (s) to relax TML to T0ML, H to H0,
45 ! HUML and HVML to 0; value <=0 means no relaxation
46 !-- UAIR,VAIR lowest model level wind component
47 !-- UST frictional velocity
48 !-- HFX upward heat flux at the surface (W/m^2)
49 !-- LH latent heat flux at the surface (W/m^2)
50 !-- TSK surface temperature (K)
51 !-- GSW downward short wave flux at ground surface (W/m^2)
52 !-- GLW downward long wave flux at ground surface (W/m^2)
53 !-- EMISS emissivity of the surface
54 !-- XLAND land mask (1 for land, 2 for water)
55 !-- STBOLT Stefan-Boltzmann constant (W/m^2/K^4)
56 !-- F Coriolis parameter
57 !-- DT time step (second)
58 !-- G acceleration due to gravity
60 INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde, &
61 ims,ime, jms,jme, kms,kme, &
62 its,ite, jts,jte, kts,kte
64 REAL, INTENT(IN ) :: DELTSM, STBOLT
66 REAL, DIMENSION( ims:ime, jms:jme ) , &
67 INTENT(IN ) :: EMISS, &
74 REAL, DIMENSION( ims:ime, jms:jme ) , &
77 REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: &
78 TML,T0ML,HML,H0ML,HUML,HVML
80 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(IN ) :: &
83 REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN ) :: &
86 REAL, INTENT(IN ) :: G
87 REAL, INTENT(IN ) :: OML_GAMMA, OML_RELAXATION_TIME
93 ! variables for subrouting Dpwp
95 INTEGER, OPTIONAL, INTENT(IN ):: sf_ocean_physics
97 real, dimension(ims:ime, okms:okme, jms:jme), INTENT(INOUT):: OM_TMP,OM_S,OM_U,OM_V,OM_DEPTH
98 real, dimension(ims:ime, okms:okme, jms:jme):: om_density
99 real, dimension(ims:ime, okms:okme, jms:jme), INTENT(IN):: OM_TINI,OM_SINI
100 real, dimension(ims:ime, jms:jme),INTENT(INOUT):: OM_ML, OM_LAT, OM_LON
101 REAL, INTENT(IN ) :: rdx, rdy,xtime,omdt
102 REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(IN ) :: msfu, msfv, msft,qfx
103 INTEGER , INTENT(IN) :: id,itimestep
107 ! calculate the steps of om
109 stepom=nint(omdt*60/deltsm)
110 stepom = max(stepom,1)
114 if ( sf_ocean_physics .eq. OMLSCHEME ) then
119 IF (XLAND(I,J).GT.1.5) THEN
120 CALL OML1D(I,J,TML(i,j),T0ML(i,j),HML(i,j),H0ML(i,j), &
121 HUML(i,j),HVML(i,j),TSK(i,j),HFX(i,j), &
122 LH(i,j),GSW(i,j),GLW(i,j),TMOML(i,j), &
123 U_PHY(i,kts,j),V_PHY(i,kts,j),UST(i,j),F(i,j), &
124 EMISS(i,j),STBOLT,G,DELTSM,OML_GAMMA, &
125 OML_RELAXATION_TIME, &
126 ids,ide, jds,jde, kds,kde, &
127 ims,ime, jms,jme, kms,kme, &
128 its,ite, jts,jte, kts,kte )
136 elseif ( sf_ocean_physics .eq. PWP3DSCHEME ) then
137 call wrf_debug ( 100, 'call 3DPWP' )
138 if ( itimestep .eq. 1 .or. mod(itimestep, stepom) .eq. 0 ) then
139 ! run 3DPWP only when the grid resolution larger than 3.0 km
141 if ( 1.0/rdx .ge. 3000.0 .and. 1.0/rdy .ge. 3000.0 ) then
142 call DPWP(ims,ime, jms,jme, kms,kme,its,ite, jts,jte, kts,kte, &
143 ids,ide, jds,jde, kds,kde,okms, okme, &
144 om_tmp,om_s,om_u, om_v, om_density, om_depth, om_ml, &
146 HFX, QFX, GSW, GLW, UST, U_PHY, V_PHY, &
147 STBOLT, DELTSM, TSK, LH, XLAND, &
148 rdx, rdy, msfu, msfv, msft,xtime,om_tini,om_sini,id,omdt)
150 print*,'Domain',id,' no ocean'
153 if (XLAND(i,j).GE.1.5)then
154 TSK(i,j) = om_tmp(i, 1, j)
164 END SUBROUTINE OCEAN_DRIVER
166 !----------------------------------------------------------------
168 END MODULE module_sf_ocean_driver