Newer
Older
!SURFEX_LIC Copyright 1994-2014 Meteo-France
!SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
!SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
!SURFEX_LIC for details. version 1.
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
! ###############################################################################
SUBROUTINE COUPLING_SEAFLUX_n(HPROGRAM, HCOUPLING, &
PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, &
PAZIM, PZREF, PUREF, PZS, 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, &
PPEW_A_COEF, PPEW_B_COEF, &
PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, &
HTEST )
! ###############################################################################
!
!!**** *COUPLING_SEAFLUX_n * - Driver of the WATER_FLUX scheme for sea
!!
!! PURPOSE
!! -------
!
!!** METHOD
!! ------
!!
!! REFERENCE
!! ---------
!!
!!
!! AUTHOR
!! ------
!! V. Masson
!!
!! MODIFICATIONS
!! -------------
!! Original 01/2004
!! Modified 01/2006 : sea flux parameterization.
!! Modified 09/2006 : P. Tulet Introduce Sea salt aerosol Emission/Deposition
!! Modified 03/2009 : B. Decharme SST could change during a run => ALB and EMIS
!! Modified 05/2009 : V. Masson : implicitation of momentum fluxes
!! Modified 09/2009 : B. Decharme Radiative properties at time t+1
!! Modified 01/2010 : B. Decharme Add XTTS
!! Modified 09/2012 : B. Decharme New wind implicitation
!! Modified 10/2012 : P. Le Moigne CMO1D update
!!---------------------------------------------------------------------
!
USE MODD_CSTS, ONLY : XRD, XCPD, XP00, XLVTT, XTT, XTTS, XDAY
USE MODD_SURF_PAR, ONLY : XUNDEF
USE MODD_SURF_ATM, ONLY : LCPL_ESM, CIMPLICIT_WIND
!
USE MODD_DATA_SEAFLUX_n, ONLY : LSST_DATA
USE MODD_SEAFLUX_n, ONLY : XSST, XTICE, XZ0, XDIR_ALB, XSCA_ALB, XEMIS, TTIME, &
CSEA_ALB, CSEA_FLUX, XUMER, XVMER, LINTERPOL_SST, &
XICHCE, LPRECIP, LPWEBB , LPWG
USE MODD_OCEAN_n, ONLY : LMERCATOR
USE MODD_CH_SEAFLUX_n, ONLY : CSV, CCH_DRY_DEP, XDEP, NBEQ, NSV_CHSBEG, NSV_CHSEND,&
NSV_DSTBEG, NSV_DSTEND, NAEREQ, NDSTEQ, NSLTEQ, &
NSV_AERBEG, NSV_AEREND, NSV_SLTBEG, NSV_SLTEND
!
USE MODI_WATER_FLUX
USE MODI_MR98
USE MODI_ECUME_SEAFLUX
USE MODI_COARE30_SEAFLUX
USE MODI_ADD_FORECAST_TO_DATE_SURF
USE MODI_MOD1D_n
USE MODI_DIAG_INLINE_SEAFLUX_n
USE MODI_CH_AER_DEP
USE MODI_CH_DEP_WATER
USE MODI_DSLT_DEP
USE MODI_SST_UPDATE
USE MODI_INTERPOL_SST_MTH
USE MODI_UPDATE_RAD_SEAWAT
!
USE MODE_DSLT_SURF
USE MODD_DST_SURF
USE MODD_SLT_SURF
USE MODD_DST_n, ONLY: XEMISRADIUS_DST, XEMISSIG_DST
USE MODD_SLT_n, ONLY: XEMISRADIUS_SLT, XEMISSIG_SLT
!
USE MODD_SEAFLUX_GRID_n, ONLY : XLAT
USE MODD_OCEAN_CSTS, ONLY : NOCKMIN
USE MODD_OCEAN_REL_n, ONLY : XSEAT_REL
!
USE YOMHOOK ,ONLY : LHOOK, DR_HOOK
USE PARKIND1 ,ONLY : JPRB
!
USE MODI_ABOR1_SFX
!
USE MODI_COUPLING_ICEFLUX_n
!
USE MODI_COUPLING_SLT_n
!
IMPLICIT NONE
!
!* 0.1 declarations of arguments
!
CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
CHARACTER(LEN=1), INTENT(IN) :: HCOUPLING ! type of coupling
! 'E' : explicit
! 'I' : implicit
INTEGER, INTENT(IN) :: KYEAR ! current year (UTC)
INTEGER, INTENT(IN) :: KMONTH ! current month (UTC)
INTEGER, INTENT(IN) :: KDAY ! current day (UTC)
REAL, INTENT(IN) :: PTIME ! current time since midnight (UTC, s)
INTEGER, INTENT(IN) :: KI ! number of points
INTEGER, INTENT(IN) :: KSV ! number of scalars
INTEGER, INTENT(IN) :: KSW ! number of short-wave spectral bands
REAL, DIMENSION(KI), INTENT(IN) :: PTSUN ! solar time (s from midnight)
REAL, INTENT(IN) :: PTSTEP ! atmospheric time-step (s)
REAL, DIMENSION(KI), INTENT(IN) :: PZREF ! height of T,q forcing (m)
REAL, DIMENSION(KI), INTENT(IN) :: PUREF ! height of wind forcing (m)
!
REAL, DIMENSION(KI), INTENT(IN) :: PTA ! air temperature forcing (K)
REAL, DIMENSION(KI), INTENT(IN) :: PQA ! air humidity forcing (kg/m3)
REAL, DIMENSION(KI), INTENT(IN) :: PRHOA ! air density (kg/m3)
REAL, DIMENSION(KI,KSV),INTENT(IN) :: PSV ! scalar variables
! ! chemistry: first char. in HSV: '#' (molecule/m3)
! !
CHARACTER(LEN=6), DIMENSION(KSV),INTENT(IN):: HSV ! name of all scalar variables
REAL, DIMENSION(KI), INTENT(IN) :: PU ! zonal wind (m/s)
REAL, DIMENSION(KI), INTENT(IN) :: PV ! meridian wind (m/s)
REAL, DIMENSION(KI,KSW),INTENT(IN) :: PDIR_SW ! direct solar radiation (on horizontal surf.)
! ! (W/m2)
REAL, DIMENSION(KI,KSW),INTENT(IN) :: PSCA_SW ! diffuse solar radiation (on horizontal surf.)
! ! (W/m2)
REAL, DIMENSION(KSW),INTENT(IN) :: PSW_BANDS ! mean wavelength of each shortwave band (m)
REAL, DIMENSION(KI), INTENT(IN) :: PZENITH ! zenithal angle at t (radian from the vertical)
REAL, DIMENSION(KI), INTENT(IN) :: PZENITH2 ! zenithal angle at t+1(radian from the vertical)
REAL, DIMENSION(KI), INTENT(IN) :: PAZIM ! azimuthal angle (radian from North, clockwise)
REAL, DIMENSION(KI), INTENT(IN) :: PLW ! longwave radiation (on horizontal surf.)
! ! (W/m2)
REAL, DIMENSION(KI), INTENT(IN) :: PPS ! pressure at atmospheric model surface (Pa)
REAL, DIMENSION(KI), INTENT(IN) :: PPA ! pressure at forcing level (Pa)
REAL, DIMENSION(KI), INTENT(IN) :: PZS ! atmospheric model orography (m)
REAL, DIMENSION(KI), INTENT(IN) :: PCO2 ! CO2 concentration in the air (kg/m3)
REAL, DIMENSION(KI), INTENT(IN) :: PSNOW ! snow precipitation (kg/m2/s)
REAL, DIMENSION(KI), INTENT(IN) :: PRAIN ! liquid precipitation (kg/m2/s)
!
!
REAL, DIMENSION(KI), INTENT(OUT) :: PSFTH ! flux of heat (W/m2)
REAL, DIMENSION(KI), INTENT(OUT) :: PSFTQ ! flux of water vapor (kg/m2/s)
REAL, DIMENSION(KI), INTENT(OUT) :: PSFU ! zonal momentum flux (Pa)
REAL, DIMENSION(KI), INTENT(OUT) :: PSFV ! meridian momentum flux (Pa)
REAL, DIMENSION(KI), INTENT(OUT) :: PSFCO2 ! flux of CO2 (kg/m2/s)
REAL, DIMENSION(KI,KSV),INTENT(OUT):: PSFTS ! flux of scalar var. (kg/m2/s)
!
REAL, DIMENSION(KI), INTENT(OUT) :: PTRAD ! radiative temperature (K)
REAL, DIMENSION(KI,KSW),INTENT(OUT):: PDIR_ALB! direct albedo for each spectral band (-)
REAL, DIMENSION(KI,KSW),INTENT(OUT):: PSCA_ALB! diffuse albedo for each spectral band (-)
REAL, DIMENSION(KI), INTENT(OUT) :: PEMIS ! emissivity (-)
!
REAL, DIMENSION(KI), INTENT(IN) :: PPEW_A_COEF! implicit coefficients (m2s/kg)
REAL, DIMENSION(KI), INTENT(IN) :: PPEW_B_COEF! needed if HCOUPLING='I' (m/s)
REAL, DIMENSION(KI), INTENT(IN) :: PPET_A_COEF
REAL, DIMENSION(KI), INTENT(IN) :: PPEQ_A_COEF
REAL, DIMENSION(KI), INTENT(IN) :: PPET_B_COEF
REAL, DIMENSION(KI), INTENT(IN) :: PPEQ_B_COEF
CHARACTER(LEN=2), INTENT(IN) :: HTEST ! must be equal to 'OK'
!
!* 0.2 declarations of local variables
!
REAL, DIMENSION(KI,KSW) :: ZDIR_ALB ! Direct albedo at time t
REAL, DIMENSION(KI,KSW) :: ZSCA_ALB ! Diffuse albedo at time t
!
REAL, DIMENSION(KI) :: ZEXNA ! Exner function at forcing level
REAL, DIMENSION(KI) :: ZEXNS ! Exner function at surface level
REAL, DIMENSION(KI) :: ZU ! zonal wind
REAL, DIMENSION(KI) :: ZV ! meridian wind
REAL, DIMENSION(KI) :: ZWIND ! Wind
REAL, DIMENSION(KI) :: ZCD ! Drag coefficient
REAL, DIMENSION(KI) :: ZCDN ! Neutral Drag coefficient
REAL, DIMENSION(KI) :: ZCH ! Heat transfer coefficient
REAL, DIMENSION(KI) :: ZCE ! Vaporization heat transfer coefficient
REAL, DIMENSION(KI) :: ZRI ! Richardson number
REAL, DIMENSION(KI) :: ZHU ! Near surface relative humidity
REAL, DIMENSION(KI) :: ZRESA_SEA ! aerodynamical resistance
REAL, DIMENSION(KI) :: ZUSTAR ! friction velocity (m/s)
REAL, DIMENSION(KI) :: ZUSTAR2 ! square of friction velocity (m2/s2)
REAL, DIMENSION(KI) :: ZZ0H ! heat roughness length over sea
REAL, DIMENSION(KI) :: ZQSAT ! humidity at saturation
REAL, DIMENSION(KI) :: ZQA ! specific humidity (kg/kg)
REAL, DIMENSION(KI) :: ZEMIS ! Emissivity at time t
REAL, DIMENSION(KI) :: ZTRAD ! Radiative temperature at time t
REAL, DIMENSION(KI) :: ZSFTH_ICE ! Sea ice flux of heat
REAL, DIMENSION(KI) :: ZSFTQ_ICE ! Sea ice flux of ice sublimation
!
REAL, DIMENSION(KI) :: ZMASK
!
REAL :: ZCONVERTFACM0_SLT, ZCONVERTFACM0_DST
REAL :: ZCONVERTFACM3_SLT, ZCONVERTFACM3_DST
REAL :: ZCONVERTFACM6_SLT, ZCONVERTFACM6_DST
!
INTEGER :: ISIZE_WATER ! number of points of sea water
INTEGER :: ISIZE_ICE ! and of sea ice
!
INTEGER :: ISWB ! number of shortwave spectral bands
INTEGER :: JSWB ! loop counter on shortwave spectral bands
INTEGER :: ISLT ! number of sea salt variable
!
REAL(KIND=JPRB) :: ZHOOK_HANDLE
!-------------------------------------------------------------------------------------
! Preliminaries:
!-------------------------------------------------------------------------------------
IF (LHOOK) CALL DR_HOOK('COUPLING_SEAFLUX_N',0,ZHOOK_HANDLE)
IF (HTEST/='OK') THEN
CALL ABOR1_SFX('COUPLING_SEAFLUXN: FATAL ERROR DURING ARGUMENT TRANSFER')
END IF
!-------------------------------------------------------------------------------------
!
ZEXNA (:) = XUNDEF
ZEXNS (:) = XUNDEF
ZU (:) = XUNDEF
ZV (:) = XUNDEF
ZWIND (:) = XUNDEF
ZCD (:) = XUNDEF
ZCDN (:) = XUNDEF
ZCH (:) = XUNDEF
ZCE (:) = XUNDEF
ZRI (:) = XUNDEF
ZHU (:) = XUNDEF
ZRESA_SEA(:) = XUNDEF
ZUSTAR (:) = XUNDEF
ZUSTAR2 (:) = XUNDEF
ZZ0H (:) = XUNDEF
ZQSAT (:) = XUNDEF
ZEMIS (:) = XUNDEF
ZTRAD (:) = XUNDEF
ZDIR_ALB (:,:) = XUNDEF
ZSCA_ALB (:,:) = XUNDEF
!
IF(LCPL_ESM)THEN
ZSFTQ_ICE(:) = XUNDEF
ZSFTH_ICE(:) = XUNDEF
ENDIF
!
!-------------------------------------------------------------------------------------
!
ZEXNS(:) = (PPS(:)/XP00)**(XRD/XCPD)
ZEXNA(:) = (PPA(:)/XP00)**(XRD/XCPD)
!
IF(LCPL_ESM)THEN
!Sea currents are taken into account
ZU(:)=PU(:)-XUMER(:)
ZV(:)=PV(:)-XVMER(:)
ELSE
ZU(:)=PU(:)
ZV(:)=PV(:)
ENDIF
!
ZWIND(:) = SQRT(ZU(:)**2+ZV(:)**2)
!
PSFTS(:,:) = 0.
!
ZHU = 1.
!
ZQA(:) = PQA(:) / PRHOA(:)
!
! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! update sea surface temperature
! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!
IF (LSST_DATA .AND. (.NOT. LMERCATOR)) CALL SST_UPDATE(XSST, TTIME)
!
! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! Time evolution
! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!
TTIME%TIME = TTIME%TIME + PTSTEP
CALL ADD_FORECAST_TO_DATE_SURF(TTIME%TDATE%YEAR,TTIME%TDATE%MONTH,TTIME%TDATE%DAY,TTIME%TIME)
!
!--------------------------------------------------------------------------------------
! Fluxes over water according to Charnock formulae
!--------------------------------------------------------------------------------------
!
ZMASK(:) = XSST(:) - XTTS
ISIZE_WATER = COUNT(ZMASK(:)>=0.)
ISIZE_ICE = SIZE(XSST) - ISIZE_WATER
!
SELECT CASE (CSEA_FLUX)
CASE ('DIRECT')
CALL WATER_FLUX(XZ0, &
PTA, ZEXNA, PRHOA, XSST, ZEXNS, ZQA, PRAIN, &
PSNOW, XTTS, &
ZWIND, PZREF, PUREF, &
PPS, ZQSAT, &
PSFTH, PSFTQ, ZUSTAR, &
ZCD, ZCDN, ZCH, ZRI, ZRESA_SEA, ZZ0H )
CASE ('ITERAT')
CALL MR98 (XZ0, &
PTA, ZEXNA, PRHOA, XSST, ZEXNS, ZQA, &
XTTS, &
ZWIND, PZREF, PUREF, &
PPS, ZQSAT, &
PSFTH, PSFTQ, ZUSTAR, &
ZCD, ZCDN, ZCH, ZRI, ZRESA_SEA, ZZ0H )
CASE ('ECUME ')
CALL ECUME_SEAFLUX(XZ0, ZMASK, ISIZE_WATER, ISIZE_ICE, &
PTA, ZEXNA ,PRHOA, XSST, ZEXNS, ZQA, PRAIN, &
PSNOW, &
ZWIND, PZREF, PUREF, &
PPS, XICHCE, LPRECIP, LPWEBB, LPWG, ZQSAT, &
PSFTH, PSFTQ, ZUSTAR, &
ZCD, ZCDN, ZCH, ZCE, ZRI, ZRESA_SEA, ZZ0H )
CASE ('COARE3')
CALL COARE30_SEAFLUX(XZ0, ZMASK, ISIZE_WATER, ISIZE_ICE, &
PTA, ZEXNA ,PRHOA, XSST, ZEXNS, ZQA, PRAIN, &
PSNOW, &
ZWIND, PZREF, PUREF, &
PPS, ZQSAT, &
PSFTH, PSFTQ, ZUSTAR, &
ZCD, ZCDN, ZCH, ZCE, ZRI, ZRESA_SEA, ZZ0H )
END SELECT
!
!-------------------------------------------------------------------------------------
! Outputs:
!-------------------------------------------------------------------------------------
!
! Momentum fluxes
!
IF(CIMPLICIT_WIND=='OLD')THEN
! old implicitation (m2/s2)
ZUSTAR2(:) = (ZCD(:)*ZWIND(:)*PPEW_B_COEF(:)) / &
(1.0-PRHOA(:)*ZCD(:)*ZWIND(:)*PPEW_A_COEF(:))
ELSE
! new implicitation (m2/s2)
ZUSTAR2(:) = (ZCD(:)*ZWIND(:)*(2.*PPEW_B_COEF(:)-ZWIND(:))) /&
(1.0-2.0*PRHOA(:)*ZCD(:)*ZWIND(:)*PPEW_A_COEF(:))
!
ZWIND(:) = PRHOA(:)*PPEW_A_COEF(:)*ZUSTAR2(:) + PPEW_B_COEF(:)
ZWIND(:) = MAX(ZWIND(:),0.)
!
WHERE(PPEW_A_COEF(:)/= 0.)
ZUSTAR2(:) = MAX( ( ZWIND(:) - PPEW_B_COEF(:) ) / (PRHOA(:)*PPEW_A_COEF(:)), 0.)
ENDWHERE
!
ENDIF
!
PSFU = 0.
PSFV = 0.
WHERE (ZWIND(:)>0.)
PSFU(:) = - PRHOA(:) * ZUSTAR2(:) * ZU(:) / ZWIND(:)
PSFV(:) = - PRHOA(:) * ZUSTAR2(:) * ZV(:) / ZWIND(:)
END WHERE
!
! CO2 flux
!
! PSFCO2 = E * deltapCO2
! According to Wanninkhof (medium hypothesis) :
! E = 1.13.10^-3 * WIND^2 CO2mol.m-2.yr-1.µatm-1
! = 1.13.10^-3 * WIND^2 * Mco2.10^-3 * (1/365*24*3600)
! deltapCO2 = -8.7 µatm (Table 1 half hypothesis)
PSFCO2(:) = - ZWIND(:)**2 * 1.13E-3 * 8.7 * 44.E-3 / ( 365*24*3600 )
!
!
!-------------------------------------------------------------------------------------
!radiative properties at time t
!-------------------------------------------------------------------------------------
!
ISWB = SIZE(PSW_BANDS)
!
DO JSWB=1,ISWB
ZDIR_ALB(:,JSWB) = XDIR_ALB(:)
ZSCA_ALB(:,JSWB) = XSCA_ALB(:)
END DO
!
ZEMIS = XEMIS
ZTRAD = XSST
!
!-------------------------------------------------------------------------------------
!Specific fields for GELATO when using earth system model
!(intermediate step before explicit sea and ice fluxes comutation)
!-------------------------------------------------------------------------------------
!
IF(LCPL_ESM)THEN
CALL COUPLING_ICEFLUX_n(KI, PTA, ZEXNA, PRHOA, XTICE, ZEXNS, &
ZQA, PRAIN, PSNOW, ZWIND, PZREF, PUREF, &
PPS, XSST, XTTS, ZSFTH_ICE, ZSFTQ_ICE )
ENDIF
!
!-------------------------------------------------------------------------------------
! Scalar fluxes:
!-------------------------------------------------------------------------------------
!
IF (NBEQ>0) THEN
IF (CCH_DRY_DEP == "WES89") THEN
CALL CH_DEP_WATER (ZRESA_SEA, ZUSTAR, PTA, ZTRAD, &
PSV(:,NSV_CHSBEG:NSV_CHSEND), &
CSV(NSV_CHSBEG:NSV_CHSEND), &
XDEP(:,1:NBEQ) )
PSFTS(:,NSV_CHSBEG:NSV_CHSEND) = - PSV(:,NSV_CHSBEG:NSV_CHSEND) &
* XDEP(:,1:NBEQ)
IF (NAEREQ > 0 ) THEN
CALL CH_AER_DEP(PSV(:,NSV_AERBEG:NSV_AEREND),&
PSFTS(:,NSV_AERBEG:NSV_AEREND),&
ZUSTAR,ZRESA_SEA,PTA,PRHOA)
END IF
ELSE
PSFTS(:,NSV_CHSBEG:NSV_CHSEND) =0.
IF (NSV_AEREND.GT.NSV_AERBEG) PSFTS(:,NSV_AERBEG:NSV_AEREND) =0.
ENDIF
ENDIF
!
IF (NSLTEQ>0) THEN
ISLT = NSV_SLTEND - NSV_SLTBEG + 1
CALL COUPLING_SLT_n( &
SIZE(ZUSTAR,1), & !I [nbr] number of sea point
ISLT, & !I [nbr] number of sea salt variables
ZWIND, & !I [m/s] wind velocity
PSFTS(:,NSV_SLTBEG:NSV_SLTEND) )
ENDIF
!
IF (NDSTEQ>0) THEN
CALL DSLT_DEP(PSV(:,NSV_DSTBEG:NSV_DSTEND), PSFTS(:,NSV_DSTBEG:NSV_DSTEND), &
ZUSTAR, ZRESA_SEA, PTA, PRHOA, XEMISSIG_DST, XEMISRADIUS_DST, &
JPMODE_DST, XDENSITY_DST, XMOLARWEIGHT_DST, ZCONVERTFACM0_DST, &
ZCONVERTFACM6_DST, ZCONVERTFACM3_DST, LVARSIG_DST, LRGFIX_DST, &
CVERMOD )
CALL MASSFLUX2MOMENTFLUX( &
PSFTS(:,NSV_DSTBEG:NSV_DSTEND), & !I/O ![kg/m2/sec] In: flux of only mass, out: flux of moments
PRHOA, & !I [kg/m3] air density
XEMISRADIUS_DST, &!I [um] emitted radius for the modes (max 3)
XEMISSIG_DST, &!I [-] emitted sigma for the different modes (max 3)
NDSTMDE, &
ZCONVERTFACM0_DST, &
ZCONVERTFACM6_DST, &
ZCONVERTFACM3_DST, &
LVARSIG_DST, LRGFIX_DST )
ENDIF
IF (NSLTEQ>0) THEN
CALL DSLT_DEP(PSV(:,NSV_SLTBEG:NSV_SLTEND), PSFTS(:,NSV_SLTBEG:NSV_SLTEND), &
ZUSTAR, ZRESA_SEA, PTA, PRHOA, XEMISSIG_SLT, XEMISRADIUS_SLT, &
JPMODE_SLT, XDENSITY_SLT, XMOLARWEIGHT_SLT, ZCONVERTFACM0_SLT, &
ZCONVERTFACM6_SLT, ZCONVERTFACM3_SLT, LVARSIG_SLT, LRGFIX_SLT, &
CVERMOD )
CALL MASSFLUX2MOMENTFLUX( &
PSFTS(:,NSV_SLTBEG:NSV_SLTEND), & !I/O ![kg/m2/sec] In: flux of only mass, out: flux of moments
PRHOA, & !I [kg/m3] air density
XEMISRADIUS_SLT, &!I [um] emitted radius for the modes (max 3)
XEMISSIG_SLT, &!I [-] emitted sigma for the different modes (max 3)
NSLTMDE, &
ZCONVERTFACM0_SLT, &
ZCONVERTFACM6_SLT, &
ZCONVERTFACM3_SLT, &
LVARSIG_SLT, LRGFIX_SLT )
ENDIF
!
!-------------------------------------------------------------------------------
! OCEANIC COUPLING
!-------------------------------------------------------------------------------
IF (LMERCATOR) THEN
! Update SST reference profile for relaxation purpose
IF (LSST_DATA) THEN
CALL SST_UPDATE(XSEAT_REL(:,NOCKMIN+1), TTIME)
!
! Convert to degree C for ocean model
XSEAT_REL(:,NOCKMIN+1) = XSEAT_REL(:,NOCKMIN+1) - XTT
ENDIF
!
CALL MOD1D_n(HPROGRAM,PTIME,ZEMIS(:),ZDIR_ALB(:,1:KSW),ZSCA_ALB(:,1:KSW),&
PLW(:),PSCA_SW(:,1:KSW),PDIR_SW(:,1:KSW),PSFTH(:), &
PSFTQ(:),PSFU(:),PSFV(:),PRAIN(:),XSST(:))
ENDIF
!
!-------------------------------------------------------------------------------
! Inline diagnostics at time t
!-------------------------------------------------------------------------------
!
CALL DIAG_INLINE_SEAFLUX_n(PTSTEP, PTA, XSST, ZQA, PPA, PPS, PRHOA, PU, PV, PZREF,&
PUREF,ZCD, ZCDN, ZCH, ZCE, ZRI, ZHU, XZ0, ZZ0H, ZQSAT, &
PSFTH, PSFTQ, PSFU, PSFV, PDIR_SW, PSCA_SW, PLW, &
ZDIR_ALB, ZSCA_ALB, ZEMIS, ZTRAD, PRAIN, PSNOW, &
XTICE, ZSFTH_ICE, ZSFTQ_ICE )
!
!-------------------------------------------------------------------------------
!Radiative properties at time t+1 (see by the atmosphere) in order to close
!the energy budget between surfex and the atmosphere
!-------------------------------------------------------------------------------
!
IF (LINTERPOL_SST.AND.MOD(TTIME%TIME,XDAY) == 0.) THEN
CALL INTERPOL_SST_MTH(TTIME%TDATE%YEAR,TTIME%TDATE%MONTH,TTIME%TDATE%DAY,XSST)
ENDIF
!
CALL UPDATE_RAD_SEAWAT(CSEA_ALB,XSST,PZENITH2,XTTS,XEMIS,XDIR_ALB, &
XSCA_ALB,PDIR_ALB,PSCA_ALB,PEMIS,PTRAD )
!
!=======================================================================================
!
IF (LHOOK) CALL DR_HOOK('COUPLING_SEAFLUX_N',1,ZHOOK_HANDLE)
END SUBROUTINE COUPLING_SEAFLUX_n