SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
coupling_seafluxn.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! ###############################################################################
6 SUBROUTINE coupling_seaflux_n (SM, DST, SLT, &
7  hprogram, hcoupling, ptimec, &
8  ptstep, kyear, kmonth, kday, ptime, ki, ksv, ksw, ptsun, pzenith, pzenith2, &
9  pazim, pzref, puref, pu, pv, pqa, pta, prhoa, psv, pco2, hsv, &
10  prain, psnow, plw, pdir_sw, psca_sw, psw_bands, pps, ppa, &
11  psftq, psfth, psfts, psfco2, psfu, psfv, &
12  ptrad, pdir_alb, psca_alb, pemis, ptsurf, pz0, pz0h, pqsurf, &
13  ppew_a_coef, ppew_b_coef, &
14  ppet_a_coef, ppeq_a_coef, ppet_b_coef, ppeq_b_coef, &
15  htest )
16 ! ###############################################################################
17 !
18 !!**** *COUPLING_SEAFLUX_n * - Driver of the WATER_FLUX scheme for sea
19 !!
20 !! PURPOSE
21 !! -------
22 !
23 !!** METHOD
24 !! ------
25 !!
26 !! REFERENCE
27 !! ---------
28 !!
29 !!
30 !! AUTHOR
31 !! ------
32 !! V. Masson
33 !!
34 !! MODIFICATIONS
35 !! -------------
36 !! Original 01/2004
37 !! Modified 01/2006 : sea flux parameterization.
38 !! Modified 09/2006 : P. Tulet Introduce Sea salt aerosol Emission/Deposition
39 !! Modified 03/2009 : B. Decharme SST could change during a run => ALB and EMIS
40 !! Modified 05/2009 : V. Masson : implicitation of momentum fluxes
41 !! Modified 09/2009 : B. Decharme Radiative properties at time t+1
42 !! Modified 01/2010 : B. Decharme Add XTTS
43 !! Modified 09/2012 : B. Decharme New wind implicitation
44 !! Modified 10/2012 : P. Le Moigne CMO1D update
45 !! Modified 04/2013 : P. Le Moigne Wind implicitation and SST update displaced
46 !! Modified 04/2013 : B. Decharme new coupling variables
47 !! Modified 01/2014 : S. Senesi : handle sea-ice cover, sea-ice model interface,
48 !! and apply to Gelato
49 !! Modified 01/2014 : S. Belamari Remove MODE_THERMOS and XLVTT
50 !! Modified 05/2014 : S. Belamari New ECUME : Include salinity & atm. pressure impact
51 !! Modified 01/2015 : R. Séférian interactive ocaen surface albedo
52 !!
53 !!---------------------------------------------------------------------
54 !
55 !
56 !
58 !
59 USE modd_dst_n, ONLY : dst_t
60 USE modd_slt_n, ONLY : slt_t
61 !
62 USE modd_reprod_oper, ONLY : cimplicit_wind
63 !
64 USE modd_csts, ONLY : xrd, xcpd, xp00, xtt, xtts, xttsi, xday
65 USE modd_surf_par, ONLY : xundef
66 USE modd_sfx_oasis, ONLY : lcpl_sea, lcpl_seaice
67 USE modd_water_par, ONLY : xemiswat, xemiswatice
68 !
69 USE modd_water_par, ONLY : xalbseaice
70 !
71 !
72 USE modi_water_flux
73 USE modi_mr98
74 USE modi_ecume_seaflux
75 USE modi_coare30_seaflux
76 USE modi_add_forecast_to_date_surf
77 USE modi_mod1d_n
78 USE modi_diag_inline_seaflux_n
79 USE modi_ch_aer_dep
80 USE modi_ch_dep_water
81 USE modi_dslt_dep
82 USE modi_sst_update
83 USE modi_interpol_sst_mth
84 USE modi_update_rad_sea
85 !
87 USE modd_dst_surf
88 USE modd_slt_surf
89 !
90 USE modd_ocean_grid, ONLY : nockmin
91 !
92 USE yomhook ,ONLY : lhook, dr_hook
93 USE parkind1 ,ONLY : jprb
94 !
95 USE modi_abor1_sfx
96 !
97 USE modi_coupling_iceflux_n
98 USE modi_seaice_gelato1d_n
99 !
100 USE modi_coupling_slt_n
101 !
102 IMPLICIT NONE
103 !
104 !* 0.1 declarations of arguments
105 !
106 !
107 TYPE(seaflux_model_t), INTENT(INOUT) :: sm
108 TYPE(dst_t), INTENT(INOUT) :: dst
109 TYPE(slt_t), INTENT(INOUT) :: slt
110 !
111  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling surf. schemes
112  CHARACTER(LEN=1), INTENT(IN) :: hcoupling ! type of coupling
113  ! 'E' : explicit
114  ! 'I' : implicit
115 REAL, INTENT(IN) :: ptimec ! current duration since start of the run (s)
116 INTEGER, INTENT(IN) :: kyear ! current year (UTC)
117 INTEGER, INTENT(IN) :: kmonth ! current month (UTC)
118 INTEGER, INTENT(IN) :: kday ! current day (UTC)
119 REAL, INTENT(IN) :: ptime ! current time since midnight (UTC, s)
120 INTEGER, INTENT(IN) :: ki ! number of points
121 INTEGER, INTENT(IN) :: ksv ! number of scalars
122 INTEGER, INTENT(IN) :: ksw ! number of short-wave spectral bands
123 REAL, DIMENSION(KI), INTENT(IN) :: ptsun ! solar time (s from midnight)
124 REAL, INTENT(IN) :: ptstep ! atmospheric time-step (s)
125 REAL, DIMENSION(KI), INTENT(IN) :: pzref ! height of T,q forcing (m)
126 REAL, DIMENSION(KI), INTENT(IN) :: puref ! height of wind forcing (m)
127 !
128 REAL, DIMENSION(KI), INTENT(IN) :: pta ! air temperature forcing (K)
129 REAL, DIMENSION(KI), INTENT(IN) :: pqa ! air humidity forcing (kg/m3)
130 REAL, DIMENSION(KI), INTENT(IN) :: prhoa ! air density (kg/m3)
131 REAL, DIMENSION(KI,KSV),INTENT(IN) :: psv ! scalar variables
132 ! ! chemistry: first char. in HSV: '#' (molecule/m3)
133 ! !
134  CHARACTER(LEN=6), DIMENSION(KSV),INTENT(IN):: hsv ! name of all scalar variables
135 REAL, DIMENSION(KI), INTENT(IN) :: pu ! zonal wind (m/s)
136 REAL, DIMENSION(KI), INTENT(IN) :: pv ! meridian wind (m/s)
137 REAL, DIMENSION(KI,KSW),INTENT(IN) :: pdir_sw ! direct solar radiation (on horizontal surf.)
138 ! ! (W/m2)
139 REAL, DIMENSION(KI,KSW),INTENT(IN) :: psca_sw ! diffuse solar radiation (on horizontal surf.)
140 ! ! (W/m2)
141 REAL, DIMENSION(KSW),INTENT(IN) :: psw_bands ! mean wavelength of each shortwave band (m)
142 REAL, DIMENSION(KI), INTENT(IN) :: pzenith ! zenithal angle at t (radian from the vertical)
143 REAL, DIMENSION(KI), INTENT(IN) :: pzenith2 ! zenithal angle at t+1(radian from the vertical)
144 REAL, DIMENSION(KI), INTENT(IN) :: pazim ! azimuthal angle (radian from North, clockwise)
145 REAL, DIMENSION(KI), INTENT(IN) :: plw ! longwave radiation (on horizontal surf.)
146 ! ! (W/m2)
147 REAL, DIMENSION(KI), INTENT(IN) :: pps ! pressure at atmospheric model surface (Pa)
148 REAL, DIMENSION(KI), INTENT(IN) :: ppa ! pressure at forcing level (Pa)
149 REAL, DIMENSION(KI), INTENT(IN) :: pco2 ! CO2 concentration in the air (kg/m3)
150 REAL, DIMENSION(KI), INTENT(IN) :: psnow ! snow precipitation (kg/m2/s)
151 REAL, DIMENSION(KI), INTENT(IN) :: prain ! liquid precipitation (kg/m2/s)
152 !
153 REAL, DIMENSION(KI), INTENT(OUT) :: psfth ! flux of heat (W/m2)
154 REAL, DIMENSION(KI), INTENT(OUT) :: psftq ! flux of water vapor (kg/m2/s)
155 REAL, DIMENSION(KI), INTENT(OUT) :: psfu ! zonal momentum flux (Pa)
156 REAL, DIMENSION(KI), INTENT(OUT) :: psfv ! meridian momentum flux (Pa)
157 REAL, DIMENSION(KI), INTENT(OUT) :: psfco2 ! flux of CO2 (m/s*kg_CO2/kg_air)
158 REAL, DIMENSION(KI,KSV),INTENT(OUT):: psfts ! flux of scalar var. (kg/m2/s)
159 !
160 REAL, DIMENSION(KI), INTENT(OUT) :: ptrad ! radiative temperature (K)
161 REAL, DIMENSION(KI,KSW),INTENT(OUT):: pdir_alb! direct albedo for each spectral band (-)
162 REAL, DIMENSION(KI,KSW),INTENT(OUT):: psca_alb! diffuse albedo for each spectral band (-)
163 REAL, DIMENSION(KI), INTENT(OUT) :: pemis ! emissivity (-)
164 !
165 REAL, DIMENSION(KI), INTENT(OUT) :: ptsurf ! surface effective temperature (K)
166 REAL, DIMENSION(KI), INTENT(OUT) :: pz0 ! roughness length for momentum (m)
167 REAL, DIMENSION(KI), INTENT(OUT) :: pz0h ! roughness length for heat (m)
168 REAL, DIMENSION(KI), INTENT(OUT) :: pqsurf ! specific humidity at surface (kg/kg)
169 !
170 REAL, DIMENSION(KI), INTENT(IN) :: ppew_a_coef! implicit coefficients (m2s/kg)
171 REAL, DIMENSION(KI), INTENT(IN) :: ppew_b_coef! needed if HCOUPLING='I' (m/s)
172 REAL, DIMENSION(KI), INTENT(IN) :: ppet_a_coef
173 REAL, DIMENSION(KI), INTENT(IN) :: ppeq_a_coef
174 REAL, DIMENSION(KI), INTENT(IN) :: ppet_b_coef
175 REAL, DIMENSION(KI), INTENT(IN) :: ppeq_b_coef
176  CHARACTER(LEN=2), INTENT(IN) :: htest ! must be equal to 'OK'
177 !
178 !* 0.2 declarations of local variables
179 !
180 REAL, DIMENSION(KI,KSW) :: zdir_alb ! Direct albedo at time t
181 REAL, DIMENSION(KI,KSW) :: zsca_alb ! Diffuse albedo at time t
182 !
183 REAL, DIMENSION(KI) :: zexna ! Exner function at forcing level
184 REAL, DIMENSION(KI) :: zexns ! Exner function at surface level
185 REAL, DIMENSION(KI) :: zu ! zonal wind
186 REAL, DIMENSION(KI) :: zv ! meridian wind
187 REAL, DIMENSION(KI) :: zwind ! Wind
188 REAL, DIMENSION(KI) :: zcd ! Drag coefficient on open sea
189 REAL, DIMENSION(KI) :: zcd_ice ! " " on seaice
190 REAL, DIMENSION(KI) :: zcdn ! Neutral Drag coefficient on open sea
191 REAL, DIMENSION(KI) :: zcdn_ice ! " " on seaice
192 REAL, DIMENSION(KI) :: zch ! Heat transfer coefficient on open sea
193 REAL, DIMENSION(KI) :: zch_ice ! " " on seaice
194 REAL, DIMENSION(KI) :: zce ! Vaporization heat transfer coefficient on open sea
195 REAL, DIMENSION(KI) :: zce_ice ! " " on seaice
196 REAL, DIMENSION(KI) :: zri ! Richardson number on open sea
197 REAL, DIMENSION(KI) :: zri_ice ! " " on seaice
198 REAL, DIMENSION(KI) :: zresa_sea ! aerodynamical resistance on open sea
199 REAL, DIMENSION(KI) :: zresa_sea_ice ! " " on seaice
200 REAL, DIMENSION(KI) :: zustar ! friction velocity (m/s) on open sea
201 REAL, DIMENSION(KI) :: zustar_ice ! " " on seaice
202 REAL, DIMENSION(KI) :: zz0 ! roughness length over open sea
203 REAL, DIMENSION(KI) :: zz0_ice ! roughness length over seaice
204 REAL, DIMENSION(KI) :: zz0h ! heat roughness length over open sea
205 REAL, DIMENSION(KI) :: zz0h_ice ! heat roughness length over seaice
206 REAL, DIMENSION(KI) :: zz0w ! Work array for Z0 and Z0H computation
207 REAL, DIMENSION(KI) :: zqsat ! humidity at saturation on open sea
208 REAL, DIMENSION(KI) :: zqsat_ice ! " " on seaice
209 !
210 REAL, DIMENSION(KI) :: zsfth ! Heat flux for open sea (and for sea-ice points if merged)
211 REAL, DIMENSION(KI) :: zsftq ! Water vapor flux on open sea (and for sea-ice points if merged)
212 REAL, DIMENSION(KI) :: zsfu ! zonal momentum flux on open sea (and for sea-ice points if merged)(Pa)
213 REAL, DIMENSION(KI) :: zsfv ! meridional momentum flux on open sea (and for sea-ice points if merged)(Pa)
214 !
215 REAL, DIMENSION(KI) :: zsfth_ice ! Heat flux on sea ice
216 REAL, DIMENSION(KI) :: zsftq_ice ! Sea-ice sublimation flux
217 REAL, DIMENSION(KI) :: zsfu_ice ! zonal momentum flux on seaice (Pa)
218 REAL, DIMENSION(KI) :: zsfv_ice ! meridional momentum flux on seaice (Pa)
219 
220 REAL, DIMENSION(KI) :: zhu ! Near surface relative humidity
221 REAL, DIMENSION(KI) :: zqa ! specific humidity (kg/kg)
222 REAL, DIMENSION(KI) :: zemis ! Emissivity at time t
223 REAL, DIMENSION(KI) :: ztrad ! Radiative temperature at time t
224 !
225 REAL, DIMENSION(KI) :: zsst ! XSST corrected for anomalously low values (which actually are sea-ice temp)
226 REAL, DIMENSION(KI) :: zmask ! A mask for diagnosing where seaice exists (or, for coupling_iceflux, may appear)
227 !
228 REAL :: zconvertfacm0_slt, zconvertfacm0_dst
229 REAL :: zconvertfacm3_slt, zconvertfacm3_dst
230 REAL :: zconvertfacm6_slt, zconvertfacm6_dst
231 !
232 INTEGER :: isize_water ! number of points with some sea water
233 INTEGER :: isize_ice ! number of points with some sea ice
234 !
235 INTEGER :: iswb ! number of shortwave spectral bands
236 INTEGER :: jswb ! loop counter on shortwave spectral bands
237 INTEGER :: islt ! number of sea salt variable
238 !
239 REAL(KIND=JPRB) :: zhook_handle
240 !-------------------------------------------------------------------------------------
241 ! Preliminaries:
242 !-------------------------------------------------------------------------------------
243 IF (lhook) CALL dr_hook('COUPLING_SEAFLUX_N',0,zhook_handle)
244 IF (htest/='OK') THEN
245  CALL abor1_sfx('COUPLING_SEAFLUXN: FATAL ERROR DURING ARGUMENT TRANSFER')
246 END IF
247 !-------------------------------------------------------------------------------------
248 !
249 zexna(:) = xundef
250 zexns(:) = xundef
251 zu(:) = xundef
252 zv(:) = xundef
253 zwind(:) = xundef
254 zsftq(:) = xundef
255 zsfth(:) = xundef
256 zcd(:) = xundef
257 zcdn(:) = xundef
258 zch(:) = xundef
259 zce(:) = xundef
260 zri(:) = xundef
261 zhu(:) = xundef
262 zresa_sea(:) = xundef
263 zustar(:) = xundef
264 zz0(:) = xundef
265 zz0h(:) = xundef
266 zqsat(:) = xundef
267 !
268 zsftq_ice(:) = xundef
269 zsfth_ice(:) = xundef
270 zcd_ice(:) = xundef
271 zcdn_ice(:) = xundef
272 zch_ice(:) = xundef
273 zce_ice(:) = xundef
274 zri_ice(:) = xundef
275 zresa_sea_ice= xundef
276 zustar_ice(:) = xundef
277 zz0_ice(:) = xundef
278 zz0h_ice(:) = xundef
279 zqsat_ice(:) = xundef
280 !
281 zemis(:) = xundef
282 ztrad(:) = xundef
283 zdir_alb(:,:) = xundef
284 zsca_alb(:,:) = xundef
285 !
286 !-------------------------------------------------------------------------------------
287 !
288 zexns(:) = (pps(:)/xp00)**(xrd/xcpd)
289 zexna(:) = (ppa(:)/xp00)**(xrd/xcpd)
290 !
291 IF(lcpl_sea)THEN
292  !Sea currents are taken into account
293  zu(:)=pu(:)-sm%S%XUMER(:)
294  zv(:)=pv(:)-sm%S%XVMER(:)
295 ELSE
296  zu(:)=pu(:)
297  zv(:)=pv(:)
298 ENDIF
299 !
300 zwind(:) = sqrt(zu(:)**2+zv(:)**2)
301 !
302 psfts(:,:) = 0.
303 !
304 zhu = 1.
305 !
306 zqa(:) = pqa(:) / prhoa(:)
307 !
308 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
309 ! Time evolution
310 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
311 !
312 sm%S%TTIME%TIME = sm%S%TTIME%TIME + ptstep
313  CALL add_forecast_to_date_surf(sm%S%TTIME%TDATE%YEAR,sm%S%TTIME%TDATE%MONTH,sm%S%TTIME%TDATE%DAY,sm%S%TTIME%TIME)
314 !
315 !--------------------------------------------------------------------------------------
316 ! Fluxes over water according to Charnock formulae
317 !--------------------------------------------------------------------------------------
318 !
319 IF (sm%S%LHANDLE_SIC) THEN
320  ! Flux for sea are computed everywhere
321  isize_water = SIZE(zmask)
322  ! Ensure freezing SST values where XSST actually has very low (sea-ice) values (old habits)
323  zsst(:)=max(sm%S%XSST(:), xttsi)
324  ! Flux over sea-ice will not be computed by next calls, but by coupling_iceflux. Hence :
325  isize_ice = 0
326  ! Flux over sea-ice will be computed by coupling_iceflux anywhere sea-ice could form in one
327  ! time-step (incl. under forcing). ZMASK value is set to 1. on these points
328  zmask(:)=0.
329  WHERE ( sm%S%XSIC(:) > 0. ) zmask(:)=1.
330  ! To be large, assume that seaice may form where SST is < 10C
331  WHERE ( sm%S%XSST(:) - xtts <= 10. ) zmask(:)=1.
332  IF (sm%S%LINTERPOL_SIC) WHERE (sm%S%XFSIC(:) > 0. ) zmask(:)=1.
333  IF (sm%S%LINTERPOL_SIT) WHERE (sm%S%XFSIT(:) > 0. ) zmask(:)=1.
334 ELSE
335  zsst(:) = sm%S%XSST(:)
336  zmask(:) = sm%S%XSST(:) - xtts
337  isize_water = count(zmask(:)>=0.)
338  isize_ice = SIZE(sm%S%XSST) - isize_water
339 ENDIF
340 !
341 SELECT CASE (sm%S%CSEA_FLUX)
342  CASE ('DIRECT')
343  CALL water_flux(sm%S%XZ0, &
344  pta, zexna, prhoa, zsst, zexns, zqa, prain, &
345  psnow, xtts, &
346  zwind, pzref, puref, &
347  pps, sm%S%LHANDLE_SIC, zqsat, &
348  zsfth, zsftq, zustar, &
349  zcd, zcdn, zch, zri, zresa_sea, zz0h )
350  CASE ('ITERAT')
351  CALL mr98(sm%S%XZ0, &
352  pta, zexna, prhoa, sm%S%XSST, zexns, zqa, &
353  xtts, &
354  zwind, pzref, puref, &
355  pps, zqsat, &
356  zsfth, zsftq, zustar, &
357  zcd, zcdn, zch, zri, zresa_sea, zz0h )
358 
359  CASE ('ECUME ','ECUME6')
360  CALL ecume_seaflux(sm%S%XZ0, zmask, isize_water, isize_ice, &
361  pta, zexna ,prhoa, zsst, sm%S%XSSS, zexns, zqa, &
362  prain, psnow, &
363  zwind, pzref, puref, pps, ppa, &
364  sm%S%XICHCE, sm%S%LPRECIP, sm%S%LPWEBB, sm%S%LPWG, sm%S%NZ0, &
365  sm%S%LHANDLE_SIC, zqsat, zsfth, zsftq, zustar, &
366  zcd, zcdn, zch, zce, zri, zresa_sea, zz0h, &
367  sm%S%LPERTFLUX, sm%S%XPERTFLUX, sm%S%CSEA_FLUX )
368  CASE ('COARE3')
369  CALL coare30_seaflux(sm%S, &
370  zmask, isize_water, isize_ice, &
371  pta, zexna ,prhoa, zsst, zexns, zqa, prain, &
372  psnow, &
373  zwind, pzref, puref, &
374  pps, zqsat, &
375  zsfth, zsftq, zustar, &
376  zcd, zcdn, zch, zce, zri, zresa_sea, zz0h )
377 END SELECT
378 !
379 !-------------------------------------------------------------------------------------
380 !radiative properties at time t
381 !-------------------------------------------------------------------------------------
382 !
383 iswb = SIZE(psw_bands)
384 !
385 DO jswb=1,iswb
386  zdir_alb(:,jswb) = sm%S%XDIR_ALB(:)
387  zsca_alb(:,jswb) = sm%S%XSCA_ALB(:)
388 END DO
389 !
390 IF (sm%S%LHANDLE_SIC) THEN
391  zemis(:) = (1 - sm%S%XSIC(:)) * xemiswat + sm%S%XSIC(:) * xemiswatice
392  ztrad(:) = (((1 - sm%S%XSIC(:)) * xemiswat * sm%S%XSST (:)**4 + &
393  sm%S%XSIC(:) * xemiswatice * sm%S%XTICE(:)**4)/ &
394  zemis(:)) ** 0.25
395 ELSE
396  ztrad(:) = sm%S%XSST (:)
397  zemis(:) = sm%S%XEMIS(:)
398 END IF
399 !
400 !-------------------------------------------------------------------------------------
401 !Specific fields for seaice model (when using earth system model or embedded
402 !seaice scheme)
403 !-------------------------------------------------------------------------------------
404 !
405 IF(lcpl_seaice.OR.sm%S%LHANDLE_SIC)THEN
406  CALL coupling_iceflux_n(ki, pta, zexna, prhoa, sm%S%XTICE, zexns, &
407  zqa, prain, psnow, zwind, pzref, puref, &
408  pps, sm%S%XSST, xtts, zsfth_ice, zsftq_ice, &
409  sm%S%LHANDLE_SIC, zmask, zqsat_ice, zz0_ice, &
410  zustar_ice, zcd_ice, zcdn_ice, zch_ice, &
411  zri_ice, zresa_sea_ice, zz0h_ice )
412 ENDIF
413 !
414 IF (sm%S%LHANDLE_SIC) CALL complement_each_other_flux
415 !
416 !-------------------------------------------------------------------------------------
417 ! Momentum fluxes over sea or se-ice
418 !-------------------------------------------------------------------------------------
419 !
420  CALL sea_momentum_fluxes(zcd, zsfu, zsfv)
421 !
422 ! Momentum fluxes over sea-ice if embedded seaice scheme is used
423 !
424 IF (sm%S%LHANDLE_SIC) CALL sea_momentum_fluxes(zcd_ice, zsfu_ice, zsfv_ice)
425 !
426 ! CO2 flux
427 !
428 psfco2(:) = 0.0
429 !
430 !IF(LCPL_SEA.AND.CSEACO2=='NONE')THEN
431 ! PSFCO2(:) = XSEACO2(:)
432 !ELSEIF(CSEACO2=='CST ')THEN
433 ! PSFCO2 = E * deltapCO2
434 ! According to Wanninkhof (medium hypothesis) :
435 ! E = 1.13.10^-3 * WIND^2 CO2mol.m-2.yr-1.uatm-1
436 ! = 1.13.10^-3 * WIND^2 * Mco2.10^-3 * (1/365*24*3600)
437 ! deltapCO2 = -8.7 uatm (Table 1 half hypothesis)
438 psfco2(:) = - zwind(:)**2 * 1.13e-3 * 8.7 * 44.e-3 / ( 365*24*3600 )
439 !ENDIF
440 !
441 !-------------------------------------------------------------------------------------
442 ! Scalar fluxes:
443 !-------------------------------------------------------------------------------------
444 !
445 IF (sm%CHS%SVS%NBEQ>0) THEN
446  IF (sm%CHS%CCH_DRY_DEP == "WES89") THEN
447 
448  CALL ch_dep_water(zresa_sea, zustar, pta, ztrad, &
449  psv(:,sm%CHS%SVS%NSV_CHSBEG:sm%CHS%SVS%NSV_CHSEND), &
450  sm%CHS%SVS%CSV(sm%CHS%SVS%NSV_CHSBEG:sm%CHS%SVS%NSV_CHSEND), &
451  sm%CHS%XDEP(:,1:sm%CHS%SVS%NBEQ) )
452 
453  psfts(:,sm%CHS%SVS%NSV_CHSBEG:sm%CHS%SVS%NSV_CHSEND) = - psv(:,sm%CHS%SVS%NSV_CHSBEG:sm%CHS%SVS%NSV_CHSEND) &
454  * sm%CHS%XDEP(:,1:sm%CHS%SVS%NBEQ)
455  IF (sm%CHS%SVS%NAEREQ > 0 ) THEN
456  CALL ch_aer_dep(psv(:,sm%CHS%SVS%NSV_AERBEG:sm%CHS%SVS%NSV_AEREND),&
457  psfts(:,sm%CHS%SVS%NSV_AERBEG:sm%CHS%SVS%NSV_AEREND),&
458  zustar,zresa_sea,pta,prhoa)
459  END IF
460 
461  ELSE
462  psfts(:,sm%CHS%SVS%NSV_CHSBEG:sm%CHS%SVS%NSV_CHSEND) =0.
463  IF (sm%CHS%SVS%NSV_AEREND.GT.sm%CHS%SVS%NSV_AERBEG) psfts(:,sm%CHS%SVS%NSV_AERBEG:sm%CHS%SVS%NSV_AEREND) =0.
464  ENDIF
465 ENDIF
466 !
467 IF (sm%CHS%SVS%NSLTEQ>0) THEN
468  islt = sm%CHS%SVS%NSV_SLTEND - sm%CHS%SVS%NSV_SLTBEG + 1
469 
470  CALL coupling_slt_n(slt, &
471  SIZE(zustar,1), & !I [nbr] number of sea point
472  islt, & !I [nbr] number of sea salt variables
473  zwind, & !I [m/s] wind velocity
474  psfts(:,sm%CHS%SVS%NSV_SLTBEG:sm%CHS%SVS%NSV_SLTEND) )
475 ENDIF
476 !
477 IF (sm%CHS%SVS%NDSTEQ>0) THEN
478  CALL dslt_dep(psv(:,sm%CHS%SVS%NSV_DSTBEG:sm%CHS%SVS%NSV_DSTEND), psfts(:,sm%CHS%SVS%NSV_DSTBEG:sm%CHS%SVS%NSV_DSTEND), &
479  zustar, zresa_sea, pta, prhoa, dst%XEMISSIG_DST, dst%XEMISRADIUS_DST, &
480  jpmode_dst, xdensity_dst, xmolarweight_dst, zconvertfacm0_dst, &
481  zconvertfacm6_dst, zconvertfacm3_dst, lvarsig_dst, lrgfix_dst, &
482  cvermod )
483 
484  CALL massflux2momentflux( &
485  psfts(:,sm%CHS%SVS%NSV_DSTBEG:sm%CHS%SVS%NSV_DSTEND), & !I/O ![kg/m2/sec] In: flux of only mass, out: flux of moments
486  prhoa, & !I [kg/m3] air density
487  dst%XEMISRADIUS_DST, &!I [um] emitted radius for the modes (max 3)
488  dst%XEMISSIG_DST, &!I [-] emitted sigma for the different modes (max 3)
489  ndstmde, &
490  zconvertfacm0_dst, &
491  zconvertfacm6_dst, &
492  zconvertfacm3_dst, &
493  lvarsig_dst, lrgfix_dst )
494 ENDIF
495 
496 
497 IF (sm%CHS%SVS%NSLTEQ>0) THEN
498  CALL dslt_dep(psv(:,sm%CHS%SVS%NSV_SLTBEG:sm%CHS%SVS%NSV_SLTEND), psfts(:,sm%CHS%SVS%NSV_SLTBEG:sm%CHS%SVS%NSV_SLTEND), &
499  zustar, zresa_sea, pta, prhoa, slt%XEMISSIG_SLT, slt%XEMISRADIUS_SLT, &
500  jpmode_slt, xdensity_slt, xmolarweight_slt, zconvertfacm0_slt, &
501  zconvertfacm6_slt, zconvertfacm3_slt, lvarsig_slt, lrgfix_slt, &
502  cvermod )
503 
504  CALL massflux2momentflux( &
505  psfts(:,sm%CHS%SVS%NSV_SLTBEG:sm%CHS%SVS%NSV_SLTEND), & !I/O ![kg/m2/sec] In: flux of only mass, out: flux of moments
506  prhoa, & !I [kg/m3] air density
507  slt%XEMISRADIUS_SLT, &!I [um] emitted radius for the modes (max 3)
508  slt%XEMISSIG_SLT, &!I [-] emitted sigma for the different modes (max 3)
509  nsltmde, &
510  zconvertfacm0_slt, &
511  zconvertfacm6_slt, &
512  zconvertfacm3_slt, &
513  lvarsig_slt, lrgfix_slt )
514 ENDIF
515 !
516 !-------------------------------------------------------------------------------
517 ! Inline diagnostics at time t for SST and TRAD
518 !-------------------------------------------------------------------------------
519 !
520  CALL diag_inline_seaflux_n(sm%DGS, sm%DGSI, sm%S, &
521  ptstep, pta, zqa, ppa, pps, prhoa, pu, &
522  pv, pzref, puref, zcd, zcdn, zch, zce, zri, zhu, &
523  zz0h, zqsat, zsfth, zsftq, zsfu, zsfv, &
524  pdir_sw, psca_sw, plw, zdir_alb, zsca_alb, &
525  zemis, ztrad, prain, psnow, &
526  zcd_ice, zcdn_ice, zch_ice, zce_ice, zri_ice, &
527  zz0_ice, zz0h_ice, zqsat_ice, zsfth_ice, zsftq_ice, &
528  zsfu_ice, zsfv_ice)
529 !
530 !-------------------------------------------------------------------------------
531 ! A kind of "average_flux"
532 !-------------------------------------------------------------------------------
533 !
534 IF (sm%S%LHANDLE_SIC) THEN
535  psfth(:) = zsfth(:) * ( 1 - sm%S%XSIC (:)) + zsfth_ice(:) * sm%S%XSIC(:)
536  psftq(:) = zsftq(:) * ( 1 - sm%S%XSIC (:)) + zsftq_ice(:) * sm%S%XSIC(:)
537  psfu(:) = zsfu(:) * ( 1 - sm%S%XSIC (:)) + zsfu_ice(:) * sm%S%XSIC(:)
538  psfv(:) = zsfv(:) * ( 1 - sm%S%XSIC (:)) + zsfv_ice(:) * sm%S%XSIC(:)
539 ELSE
540  psfth(:) = zsfth(:)
541  psftq(:) = zsftq(:)
542  psfu(:) = zsfu(:)
543  psfv(:) = zsfv(:)
544 ENDIF
545 !
546 !-------------------------------------------------------------------------------
547 ! IMPOSED SSS OR INTERPOLATED SSS AT TIME t+1
548 !-------------------------------------------------------------------------------
549 !
550 ! Daily update Sea surface salinity from monthly data
551 !
552 IF (sm%S%LINTERPOL_SSS .AND. mod(sm%S%TTIME%TIME,xday) == 0.) THEN
553  CALL interpol_sst_mth(sm%S, &
554  sm%S%TTIME%TDATE%YEAR,sm%S%TTIME%TDATE%MONTH,sm%S%TTIME%TDATE%DAY,'S',sm%S%XSSS)
555  IF (any(sm%S%XSSS(:)<0.0)) THEN
556  CALL abor1_sfx('COUPLING_SEAFLUX_N: XSSS should be >=0')
557  ENDIF
558 ENDIF
559 !
560 !-------------------------------------------------------------------------------
561 ! SEA-ICE coupling at time t+1
562 !-------------------------------------------------------------------------------
563 !
564 IF (sm%S%LHANDLE_SIC) THEN
565  IF (sm%S%LINTERPOL_SIC) THEN
566  IF ((mod(sm%S%TTIME%TIME,xday) == 0.) .OR. (ptimec <= ptstep )) THEN
567  ! Daily update Sea Ice Cover constraint from monthly data
568  CALL interpol_sst_mth(sm%S, &
569  sm%S%TTIME%TDATE%YEAR,sm%S%TTIME%TDATE%MONTH,sm%S%TTIME%TDATE%DAY,'C',sm%S%XFSIC)
570  IF (any(sm%S%XFSIC(:)>1.0).OR.any(sm%S%XFSIC(:)<0.0)) THEN
571  CALL abor1_sfx('COUPLING_SEAFLUX_N: FSIC should be >=0 and <=1')
572  ENDIF
573  ENDIF
574  ENDIF
575  IF (sm%S%LINTERPOL_SIT) THEN
576  IF ((mod(sm%S%TTIME%TIME,xday) == 0.) .OR. (ptimec <= ptstep )) THEN
577  ! Daily update Sea Ice Thickness constraint from monthly data
578  CALL interpol_sst_mth(sm%S, &
579  sm%S%TTIME%TDATE%YEAR,sm%S%TTIME%TDATE%MONTH,sm%S%TTIME%TDATE%DAY,'H',sm%S%XFSIT)
580  IF (any(sm%S%XFSIT(:)<0.0)) THEN
581  CALL abor1_sfx('COUPLING_SEAFLUX_N: XFSIT should be >=0')
582  ENDIF
583  ENDIF
584  ENDIF
585  IF (sm%S%CSEAICE_SCHEME=='GELATO') THEN
586  CALL seaice_gelato1d_n(sm%S, &
587  hprogram,ptimec, ptstep, sm%S%TGLT, sm%S%XSST, sm%S%XSSS, &
588  sm%S%XFSIC, sm%S%XFSIT, sm%S%XSIC, sm%S%XTICE, sm%S%XICE_ALB)
589  ENDIF
590  ! Update of cell-averaged albedo, emissivity and radiative
591  ! temperature is done later
592 ENDIF
593 !
594 !-------------------------------------------------------------------------------
595 ! OCEANIC COUPLING, IMPOSED SST OR INTERPOLATED SST AT TIME t+1
596 !-------------------------------------------------------------------------------
597 !
598 IF (sm%O%LMERCATOR) THEN
599  !
600  ! Update SST reference profile for relaxation purpose
601  IF (sm%DTS%LSST_DATA) THEN
602  CALL sst_update(sm%DTS, sm%S, &
603  sm%OR%XSEAT_REL(:,nockmin+1), sm%S%TTIME)
604  !
605  ! Convert to degree C for ocean model
606  sm%OR%XSEAT_REL(:,nockmin+1) = sm%OR%XSEAT_REL(:,nockmin+1) - xtt
607  ENDIF
608  !
609  CALL mod1d_n(sm%DGO, sm%O, sm%OR, sm%SG, sm%S, &
610  hprogram,ptime,zemis(:),zdir_alb(:,1:ksw),zsca_alb(:,1:ksw),&
611  plw(:),psca_sw(:,1:ksw),pdir_sw(:,1:ksw),psfth(:), &
612  psftq(:),psfu(:),psfv(:),prain(:),sm%S%XSST(:))
613  !
614 ELSEIF(sm%DTS%LSST_DATA)THEN
615  !
616  ! Imposed SST
617  !
618  CALL sst_update(sm%DTS, sm%S, &
619  sm%S%XSST, sm%S%TTIME)
620  !
621 ELSEIF (sm%S%LINTERPOL_SST.AND.mod(sm%S%TTIME%TIME,xday) == 0.) THEN
622  !
623  ! Imposed monthly SST
624  !
625  CALL interpol_sst_mth(sm%S, &
626  sm%S%TTIME%TDATE%YEAR,sm%S%TTIME%TDATE%MONTH,sm%S%TTIME%TDATE%DAY,'T',sm%S%XSST)
627  !
628 ENDIF
629 !
630 !-------------------------------------------------------------------------------
631 !Physical properties see by the atmosphere in order to close the energy budget
632 !between surfex and the atmosphere. All variables should be at t+1 but very
633 !difficult to do. Maybe it will be done later. However, Ts is at time t+1
634 !-------------------------------------------------------------------------------
635 !
636 IF (sm%S%LHANDLE_SIC) THEN
637  IF (sm%S%CSEAICE_SCHEME/='GELATO') THEN
638  sm%S%XTICE=sm%S%XSST
639  sm%S%XSIC=sm%S%XFSIC
640  sm%S%XICE_ALB=xalbseaice
641  ENDIF
642  ptsurf(:) = sm%S%XSST (:) * ( 1 - sm%S%XSIC (:)) + sm%S%XTICE(:) * sm%S%XSIC(:)
643  pqsurf(:) = zqsat(:) * ( 1 - sm%S%XSIC (:)) + zqsat_ice(:) * sm%S%XSIC(:)
644  zz0w(:) = ( 1 - sm%S%XSIC(:) ) * 1.0/(log(puref(:)/zz0(:)) **2) + &
645  sm%S%XSIC(:) * 1.0/(log(puref(:)/zz0_ice(:))**2)
646  pz0(:) = puref(:) * exp( - sqrt( 1./ zz0w(:) ))
647  zz0w(:) = ( 1 - sm%S%XSIC(:) ) * 1.0/(log(pzref(:)/zz0h(:)) **2) + &
648  sm%S%XSIC(:) * 1.0/(log(pzref(:)/zz0h_ice(:))**2)
649  pz0h(:) = pzref(:) * exp( - sqrt( 1./ zz0w(:) ))
650 ELSE
651  ptsurf(:) = sm%S%XSST (:)
652  pqsurf(:) = zqsat(:)
653  pz0(:) = sm%S%XZ0 (:)
654  pz0h(:) = zz0h(:)
655 ENDIF
656 !
657 !-------------------------------------------------------------------------------
658 !Radiative properties at time t+1 (see by the atmosphere) in order to close
659 !the energy budget between surfex and the atmosphere
660 !-------------------------------------------------------------------------------
661 !
662  CALL update_rad_sea(sm%S%CSEA_ALB,sm%S%XSST,pzenith2,xtts,sm%S%XEMIS, &
663  sm%S%XDIR_ALB,sm%S%XSCA_ALB,pdir_alb,psca_alb,&
664  pemis,ptrad,sm%S%LHANDLE_SIC,sm%S%XTICE,sm%S%XSIC, &
665  sm%S%XICE_ALB,pu,pv)
666 !
667 !=======================================================================================
668 !
669 IF (lhook) CALL dr_hook('COUPLING_SEAFLUX_N',1,zhook_handle)
670 !
671 !=======================================================================================
672 !
673  CONTAINS
674 !
675 SUBROUTINE sea_momentum_fluxes(PCD, PSFU, PSFV)
676 !
677 IMPLICIT NONE
678 !
679 REAL, DIMENSION(KI), INTENT(IN) :: pcd ! Drag coefficient (on open sea or seaice)
680 REAL, DIMENSION(KI), INTENT(OUT) :: psfu ! zonal momentum flux (Pa)
681 REAL, DIMENSION(KI), INTENT(OUT) :: psfv ! meridian momentum flux (Pa)
682 !
683 REAL, DIMENSION(KI) :: zustar2 ! square of friction velocity (m2/s2)
684 REAL, DIMENSION(KI) :: zwork ! Work array
685 !
686 REAL(KIND=JPRB) :: zhook_handle
687 !
688 IF (lhook) CALL dr_hook('COUPLING_SEAFLUX_N: SEA_MOMENTUM_FLUXES',0,zhook_handle)
689 !
690 zwork(:) = xundef
691 zustar2(:) = xundef
692 !
693 IF(cimplicit_wind=='OLD')THEN
694 ! old implicitation (m2/s2)
695  zustar2(:) = (pcd(:)*zwind(:)*ppew_b_coef(:)) / &
696  (1.0-prhoa(:)*pcd(:)*zwind(:)*ppew_a_coef(:))
697 ELSE
698 ! new implicitation (m2/s2)
699  zustar2(:) = (pcd(:)*zwind(:)*(2.*ppew_b_coef(:)-zwind(:))) /&
700  (1.0-2.0*prhoa(:)*pcd(:)*zwind(:)*ppew_a_coef(:))
701 !
702  zwork(:) = prhoa(:)*ppew_a_coef(:)*zustar2(:) + ppew_b_coef(:)
703  zwork(:) = max(zwork(:),0.)
704 !
705  WHERE(ppew_a_coef(:)/= 0.)
706  zustar2(:) = max( ( zwork(:) - ppew_b_coef(:) ) / (prhoa(:)*ppew_a_coef(:)), 0.)
707  ENDWHERE
708 !
709 ENDIF
710 !
711 psfu = 0.
712 psfv = 0.
713 WHERE (zwind(:)>0.)
714  psfu(:) = - prhoa(:) * zustar2(:) * zu(:) / zwind(:)
715  psfv(:) = - prhoa(:) * zustar2(:) * zv(:) / zwind(:)
716 END WHERE
717 !
718 IF (lhook) CALL dr_hook('COUPLING_SEAFLUX_N: SEA_MOMENTUM_FLUXES',1,zhook_handle)
719 !
720 END SUBROUTINE sea_momentum_fluxes
721 !
722 !=======================================================================================
723 !
725 !
726 ! Provide dummy fluxes on places with no open-sea or no sea-ice
727 ! Allows a smooth computing of CLS parameters in all cases while avoiding
728 ! having to pack arrays (in routines PARAM_CLS and CLS_TQ)
729 !
730 IMPLICIT NONE
731 !
732 REAL(KIND=JPRB) :: zhook_handle
733 !
734 IF (lhook) CALL dr_hook('COUPLING_SEAFLUX_N: COMPLEMENT_EACH_OTHER_FLUX',0,zhook_handle)
735 !
736  WHERE (sm%S%XSIC(:) == 1.)
737  zsfth=zsfth_ice
738  zsftq=zsftq_ice
739  zsfu=zsfu_ice
740  zsfv=zsfv_ice
741  zqsat=zqsat_ice
742  zcd=zcd_ice
743  zcdn=zcdn_ice
744  zch=zch_ice
745  zce=zce_ice
746  zri=zri_ice
747  zz0h=zz0h_ice
748  END WHERE
749  WHERE (sm%S%XSIC(:) == 0.)
750  zsfth_ice=zsfth
751  zsftq_ice=zsftq
752  zsfu_ice=zsfu
753  zsfv_ice=zsfv
754  zqsat_ice=zqsat
755  zcd_ice=zcd
756  zcdn_ice=zcdn
757  zch_ice=zch
758  zce_ice=zce
759  zri_ice=zri
760  zz0h_ice=zz0h
761  END WHERE
762 !
763 IF (lhook) CALL dr_hook('COUPLING_SEAFLUX_N: COMPLEMENT_EACH_OTHER_FLUX',1,zhook_handle)
764 !
765 END SUBROUTINE complement_each_other_flux
766 !
767 !=======================================================================================
768 !
769 END SUBROUTINE coupling_seaflux_n
subroutine update_rad_sea(HALB, PSST, PZENITH, PTT, PEMIS, PDIR_ALB, PSCA_ALB, PDIR_ALB_ATMOS, PSCA_ALB_ATMOS, PEMIS_ATMOS, PTRAD, OHANDLE_SIC, PTICE, PSIC, PICE_ALB, PU, PV)
subroutine seaice_gelato1d_n(S, HPROGRAM, PTIMEC, PTSTEP, TPGLT, PSST, PSSS, PFSIC, PFSIT, PSIC, PTICE, PICE_ALB)
subroutine sea_momentum_fluxes(PCD, PSFU, PSFV)
subroutine sst_update(DTS, S, PSST, TTIME)
Definition: sst_update.F90:6
subroutine coupling_slt_n(SLT, KI, KSLT, PWIND, PSFSLT)
subroutine coupling_iceflux_n(KI, PTA, PEXNA, PRHOA, PTICE, PEXNS, PQA, PRAIN, PSNOW, PWIND, PZREF, PUREF, PPS, PTWAT, PTTS, PSFTH, PSFTQ, OHANDLE_SIC, PMASK, PQSAT, PZ0, PUSTAR, PCD, PCDN, PCH, PRI, PRESA, PZ0H)
subroutine ch_aer_dep(PSVT, PFSVT, PUSTAR, PRESA, PTA, PRHODREF)
Definition: ch_aer_dep.F90:6
subroutine coupling_seaflux_n(SM, DST, SLT, HPROGRAM, HCOUPLING, PTIMEC, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, PAZIM, PZREF, PUREF, PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV, PRAIN, PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV, PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF, PZ0, PZ0H, PQSURF, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, HTEST)
subroutine diag_inline_seaflux_n(DGS, DGSI, S, PTSTEP, PTA, PQA, PPA, PPS, PRHOA, PZONA, PMERA, PHT, PHW, PCD, PCDN, PCH, PCE, PRI, PHU, PZ0H, PQSAT, PSFTH, PSFTQ, PSFZON, PSFMER, PDIR_SW, PSCA_SW, PLW, PDIR_ALB, PSCA_ALB, PEMIS, PTRAD, PRAIN, PSNOW, PCD_ICE, PCDN_ICE, PCH_ICE, PCE_ICE, PRI_ICE, PZ0_ICE, PZ0H_ICE, PQSAT_ICE, PSFTH_ICE, PSFTQ_ICE, PSFZON_ICE, PSFMER_ICE)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine complement_each_other_flux
subroutine mr98(PZ0SEA, PTA, PEXNA, PRHOA, PSST, PEXNS, PQA, PTT, PVMOD, PZREF, PUREF, PPS, PQSAT, PSFTH, PSFTQ, PUSTAR, PCD, PCDN, PCH, PRI, PRESA, PZ0HSEA)
Definition: mr98.F90:6
subroutine massflux2momentflux(PFLUX, PRHODREF, PEMISRADIUS, PEMISSIG, KMDE, PCONVERTFACM0, PCONVERTFACM6, PCONVERTFACM3, OVARSIG, ORGFIX)
subroutine dslt_dep(PSVT, PFSVT, PUSTAR, PRESA, PTA, PRHODREF, PEMISSIG, PEMISRADIUS, KPMODE, PDENSITY, PMOLARWEIGHT, PCONVERTFACM0, PCONVERTFACM6, PCONVERTFACM3, OVARSIG, ORGFIX, HVERMOD)
Definition: dslt_dep.F90:6
subroutine interpol_sst_mth(S, KYEAR, KMONTH, KDAY, HFLAG, POUT)
subroutine add_forecast_to_date_surf(KYEAR, KMONTH, KDAY, PSEC)
subroutine ch_dep_water(PRESA, PUSTAR, PTA, PTRAD, PSV, HSV, PDEP)
Definition: ch_dep_water.F90:6
subroutine mod1d_n(DGO, O, OR, SG, S, HPROGRAM, PTIME, PEMIS, PDIR_ALB, PSCA_ALB, PLW, PSCA_SW, PDIR_SW, PSFTH, PSFTQ, PSFU, PSFV, PRAIN, PSST)
Definition: mod1dn.F90:6
subroutine ecume_seaflux(PZ0SEA, PMASK, KSIZE_WATER, KSIZE_ICE, PTA, PEXNA, PRHOA, PSST, PSSS, PEXNS, PQA, PRAIN, PSNOW, PVMOD, PZREF, PUREF, PPS, PPA, PICHCE, OPRECIP, OPWEBB, OPWG, KZ0, OHANDLE_SIC, PQSAT, PSFTH, PSFTQ, PUSTAR, PCD, PCDN, PCH, PCE, PRI, PRESA, PZ0HSEA, OPERTFLUX, PPERTFLUX, HECUME)
subroutine water_flux(PZ0SEA, PTA, PEXNA, PRHOA, PSST, PEXNS, PQA, PRR, PRS, PTT, PVMOD, PZREF, PUREF, PPS, OHANDLE_SIC, PQSAT, PSFTH, PSFTQ, PUSTAR, PCD, PCDN, PCH, PRI, PRESA, PZ0HSEA)
Definition: water_flux.F90:6
subroutine coare30_seaflux(S, PMASK, KSIZE_WATER, KSIZE_ICE, PTA, PEXNA, PRHOA, PSST, PEXNS, PQA, PRAIN, PSNOW, PVMOD, PZREF, PUREF, PPS, PQSAT, PSFTH, PSFTQ, PUSTAR, PCD, PCDN, PCH, PCE, PRI, PRESA, PZ0HSEA)