SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
mixtln.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 mixtl_n (O, OR, SG, &
7  pfsol,pfnsol,psfteau,psfu,psfv,pseatemp)
8 ! #######################################################################
9 !
10 !!**** *MIXTLN (1D MODEL)*
11 !!
12 !! PURPOSE
13 !! -------
14 ! Oceanic 1D model in TKE Closure scheme
15 !
16 !!** METHOD
17 !! ------
18 !
19 !! EXTERNAL
20 !! --------
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !!
25 !! REFERENCE
26 !! ---------
27 ! Gaspar et al, 1990 : A simple eddy kinetic energy model for simulations of
28 ! the oceanic vertical mixing : Tests at station Papa and Long-term upper ocean
29 ! study site, JGR, 95,C9, 16,179--16,193.
30 !!
31 !! AUTHOR
32 !! ------
33 !! C. Lebeaupin *Météo-France*
34 !!
35 !! MODIFICATIONS
36 !! -------------
37 !! Original 02/2008
38 !! 01/2012 : H. Giordani, P. Peyrille
39 !! Add FLAGS:
40 !! LREL_TS: relaxation on T, S
41 !! LREL_CUR: damping on current
42 !! FOR LREL_CUR: implicit and explicit codinf is made
43 !! for conveniency, DTREL=Ucur term, DSREL=VCURterm
44 !! Corrections:
45 !! coriolis terms in current equation,
46 !! richardson nb in diapycnal mixing,
47 !! remove threshold value for mixing tendency
48 !! 07/2012, P. Le Moigne : CMO1D phasing
49 !-------------------------------------------------------------------------------
50 !
51 !* 0. DECLARATIONS
52 ! ------------
53 !
54 !
55 USE modd_ocean_n, ONLY : ocean_t
56 USE modd_ocean_rel_n, ONLY : ocean_rel_t
58 !
59 USE modd_csts
62 !
63 USE modd_surf_par, ONLY : xundef
64 !
65 ! Module containing relaxation fields
66 !
67 !
68 USE yomhook ,ONLY : lhook, dr_hook
69 USE parkind1 ,ONLY : jprb
70 !
71 IMPLICIT NONE
72 !
73 !* 0.1 declarations of arguments
74 !
75 !
76 !
77 TYPE(ocean_t), INTENT(INOUT) :: o
78 TYPE(ocean_rel_t), INTENT(INOUT) :: or
79 TYPE(seaflux_grid_t), INTENT(INOUT) :: sg
80 !
81 REAL, DIMENSION(:) ,INTENT(IN) :: pfsol ! solar flux (W/m2)
82 REAL, DIMENSION(:) ,INTENT(IN) :: pfnsol ! non solar flux (W/m2)
83 REAL, DIMENSION(:) ,INTENT(IN) :: psfteau ! fresh water flux(kg/m2/s)
84 REAL, DIMENSION(:) ,INTENT(IN) :: psfu ! zonal stress (Pa)
85 REAL, DIMENSION(:) ,INTENT(IN) :: psfv ! meridian stress (Pa)
86 !
87 REAL, DIMENSION(:) ,INTENT(OUT) :: pseatemp! sea surface temperature (K)
88 !* 0.2 declarations of local variables
89 !
90  COMPLEX, DIMENSION(NOCKMIN:NOCKMAX,2) :: zuc ! vecteur vent en ecriture complexe
91  COMPLEX, DIMENSION(NOCKMIN:NOCKMAX) :: zai, zbi, zci !matrices pour resolution numérique
92  COMPLEX, DIMENSION(NOCKMIN:NOCKMAX) :: zau, zbu, zcu, zyu !matrices pour resolution numérique
93  COMPLEX, DIMENSION(NOCKMIN:NOCKMAX) :: zomu,zwu
94 !
95 REAL, DIMENSION(NOCKMIN:NOCKMAX) :: zseat, zseas, zseae, zseav, zseau
96 REAL, DIMENSION(NOCKMIN:NOCKMAX) :: zseat_rel, zseas_rel, zseav_rel, zseau_rel
97 !
98 REAL, DIMENSION(NOCKMIN:NOCKMAX) :: za, zb, zc, za2, zb2, zc2, zyt, zys, zye !matrices pour resolution numérique
99 !
100 REAL, DIMENSION(NOCKMIN:NOCKMAX) :: advt,advs !advection horiz. temperature and salinity
101 REAL, DIMENSION(NOCKMIN:NOCKMAX) :: advu,advv !advection horiz. of current
102 REAL, DIMENSION(NOCKMIN:NOCKMAX) :: adve !advection of turbulent kinetic energy
103 !
104 REAL, DIMENSION(NOCKMIN:NOCKMAX) :: ztdtrel ! Tendancy derived from relxation (K/s)
105 REAL, DIMENSION(NOCKMIN:NOCKMAX) :: zsdtrel ! ---- salinity ---------- (%/s)
106 REAL, DIMENSION(NOCKMIN:NOCKMAX) :: zudtrel ! Tendancy term derived from relaxation on U current (m/s2)
107 REAL, DIMENSION(NOCKMIN:NOCKMAX) :: zvdtrel ! ------------------------------------ V (m/s2)
108 !
109 REAL, DIMENSION(NOCKMIN:NOCKMAX) :: zle,zkmel,zkmelm
110 REAL, DIMENSION(NOCKMIN:NOCKMAX) :: zkmes,zkmed,zkmewm,zkmews
111 REAL, DIMENSION(NOCKMIN:NOCKMAX) :: zpth,zpdy
112 REAL, DIMENSION(NOCKMIN:NOCKMAX) :: ztende,zdiffv
113 REAL, DIMENSION(NOCKMIN:NOCKMAX) :: zomt, zoms, zome !vector for matrix inversion
114 REAL, DIMENSION(NOCKMIN:NOCKMAX) :: zwt, zws, zwe
115 REAL, DIMENSION(NOCKMIN:NOCKMAX) :: zu,zv,zt,zs,ze
116 REAL, DIMENSION(NOCKMIN:NOCKMAX) :: zzdrho
117 REAL, DIMENSION(NOCKMIN:NOCKMAX) :: zdtfsol
118 !
119 REAL :: zdtfnsol
120 !
121 REAL :: zsfu, zsfv, zfnsol, zfsol, zsfteau, zlat
122 REAL :: zseahmo, zseatemp
123 !
124 REAL :: zseuil,zemin,zemax,ztest
125 !
126 REAL :: zf, zews
127 REAL :: zalg
128 REAL :: zee,zpot,zxlme,zxlpe,zxrod,zaux,zxdl
129 REAL :: zdu,zdv,zrich,zdrhodz
130 REAL :: zt1, zt2, zt3, zs1, zs2
131 !
132 INTEGER :: iup,ibot
133 INTEGER :: j,jj,jpt,jin,ikhml
134 !
135 REAL(KIND=JPRB) :: zhook_handle
136 !
137 !----------------------------------------------------------------------------
138 ! 1. Initializations
139 !__________________________________________________________________________
140 !Take account of an horizontale advection
141 
142 !-------------------------------------------------------------------------------
143 !
144 IF (lhook) CALL dr_hook('MIXTL_N',0,zhook_handle)
145 iup=nockmin+1
146 ibot=nockmax
147 !
148 zseuil=2.23e-3
149 zemin=1.e-3
150 zemax=0.1
151 !
152 zt1=13.5
153 zt2=-0.19494
154 zt3=-0.49038e-2
155 zs1=32.6
156 zs2=0.77475
157 !
158 zalg = xg / xrhosw
159 !
160 zuc(:,:) = (0.,0.)
161 zai(:) = (0.,0.)
162 zbi(:) = (0.,0.)
163 zci(:) = (0.,0.)
164 zau(:) = (0.,0.)
165 zbu(:) = (0.,0.)
166 zcu(:) = (0.,0.)
167 zyu(:) = (0.,0.)
168 zomu(:) = (0.,0.)
169 zwu(:) = (0.,0.)
170 !
171 zseat(:) = 0.
172 zseas(:) = 0.
173 zseav(:) = 0.
174 zseae(:) = 0.
175 zseau(:) = 0.
176 !
177 zseat_rel(:) = 0.
178 zseas_rel(:) = 0.
179 zseav_rel(:) = 0.
180 zseau_rel(:) = 0.
181 !
182 za(:) = 0.
183 zb(:) = 0.
184 zc(:) = 0.
185 za2(:) = 0.
186 zb2(:) = 0.
187 zc2(:) = 0.
188 zyt(:) = 0.
189 zys(:) = 0.
190 zye(:) = 0.
191 !
192 advt(:) = 0.
193 advs(:) = 0.
194 advu(:) = 0.
195 advv(:) = 0.
196 adve(:) = 0.
197 !
198 ztdtrel(:) = 0.
199 zsdtrel(:) = 0.
200 zudtrel(:) = 0.
201 zvdtrel(:) = 0.
202 !
203 zle(:) = 0.
204 zkmel(:) = 0.
205 zkmelm(:) = 0.
206 zkmes(:) = 0.
207 zkmed(:) = 0.
208 zkmewm(:) = 0.
209 zkmews(:) = 0.
210 zpth(:) = 0.
211 zpdy(:) = 0.
212 ztende(:) = 0.
213 zdiffv(:) = 0.
214 zomt(:) = 0.
215 zoms(:) = 0.
216 zome(:) = 0.
217 zwt(:) = 0.
218 zws(:) = 0.
219 zwe(:) = 0.
220 zzdrho(:) = 0.
221 zdtfsol(:) = 0.
222 zt(:) = 0.
223 zs(:) = 0.
224 zu(:) = 0.
225 zv(:) = 0.
226 ze(:) = 0.
227 !
228 !-------------------------------------------------------------------------------
229 !
230 !iterations on grid points
231 DO jpt=1,SIZE(pfsol)
232 !
233  ztest=0.
234  ikhml=1
235 !
236  !simplified variables inside this loop
237  zlat = sg%XLAT (jpt)
238  zfsol = pfsol(jpt)
239  zfnsol = pfnsol(jpt)
240  zsfteau = psfteau(jpt)
241  zsfu = psfu(jpt)
242  zsfv = psfv(jpt)
243  zews = sqrt(zsfu**2+zsfv**2)/xrhosw
244  zf = 4.*xpi*sin(zlat*xpi/180.)/86400.
245 
246  zseahmo=0.
247  DO j=iup-1,ibot
248  zseat(j) = o%XSEAT(jpt,j)
249  zseas(j) = o%XSEAS(jpt,j)
250  zseau(j) = o%XSEAU(jpt,j)
251  zseav(j) = o%XSEAV(jpt,j)
252  zseae(j) = o%XSEAE(jpt,j)
253  !
254  zseau_rel(j) = or%XSEAU_REL(jpt,j)
255  zseav_rel(j) = or%XSEAV_REL(jpt,j)
256  zseat_rel(j) = or%XSEAT_REL(jpt,j)
257  zseas_rel(j) = or%XSEAS_REL(jpt,j)
258  !
259  IF (j>=iup .AND. zseae(j)>=(zemin*sqrt(2.))) zseahmo = zseahmo-xdz1(j)
260  ENDDO
261  o%XSEAHMO(jpt) = zseahmo
262 
263  !precalculation of DRHO
264  DO j=iup-1,ibot
265  zu(j)=0.
266  zv(j)=0.
267  zt(j)=0.
268  zs(j)=0.
269  ze(j)=0.
270  advt(j)=0.
271  advs(j)=0.
272  advu(j)=0.
273  advv(j)=0.
274  adve(j)=0.
275  zzdrho(j)=(zseat(j)-zt1)*(zt2+zt3*(zseat(j)-zt1)) + zs2*(zseas(j)-zs1)
276  zudtrel(j)=0.
277  zvdtrel(j)=0.
278  ztdtrel(j)=0.
279  zsdtrel(j)=0.
280  zdtfsol(j)=0.
281  ENDDO
282  zdtfnsol=0.
283 !
284 ! Control print
285 !IF (LREL_CUR) WRITE(*,*) "WARNING :: Damping on current will be done"
286 !IF (LREL_TS) WRITE(*,*) "WARNING :: Relaxation on T, S ocean will be done "
287 !IF (LDIAPYCNAL) WRITE(*,*) "WARNING :: diapycnal mixing has been activated"
288 !IF (LFLX_CORR) WRITE(*,*) "WARNING :: ocean fluxes correctin has been activated"
289 !
290 !------------------------------------------------------------------------------
291 !
292 ! 2. Oceanic vertical mixing
293 ! -----------------------
294 !!
295 !! 2.a Diapycnal mixing
296 !! ----------------
297 !!
298  DO j=ibot-1,iup,-1
299  zkmes(j) =0.
300  zkmewm(j)=0.
301  zkmews(j)=0.
302  zkmed(j) =0.
303  IF ((ztest==0.).AND.(zseae(j)>=zseuil)) THEN
304  ikhml=j
305  ztest=1.
306  ENDIF
307  ENDDO
308 
309  !! Modif PP - HG : flag diapycnal
310  IF (or%LDIAPYCNAL) THEN
311  !
312  DO j=ikhml,ibot-1
313  zdrhodz=(zzdrho(j)-zzdrho(j+1))/xdz1(j)
314  zdu=zseau(j+1)-zseau(j)
315  zdv=zseav(j+1)-zseav(j)
316  IF((zdu*zdu+zdv*zdv).LE.1.e-7) THEN
317  zrich = 0.8
318  ELSE
319  zrich = -zalg*zdrhodz/(zdu**2+zdv**2)/xk4(j)
320  ENDIF
321 !coefficient de mélange aux ondes internes
322  zkmewm(j)=1.e-3
323  zkmews(j)=1.e-4
324 !coefficient de mélange du au cisaillement
325  IF(zrich>0.7) THEN
326  zkmes(j) = 0.
327  ELSEIF(zrich>=0.) THEN
328  zkmes(j) = 5.e-3*(1.-(zrich/0.7)*(zrich/0.7))**3
329  ELSE
330  zkmes(j) = 5.e-3
331  ENDIF
332  ENDDO
333  !plm si ldiapycnal=F zkmes non modofie et zrich ne sert a rien !
334  !plm ELSE
335  !plm ZRICH=-ZALG*ZDRHODZ / (ZDU**2+ZDV**2) / XK4(J)
336  !
337  ENDIF
338 !
339 ! 2.b Mixing length and coefficient
340 ! -----------------------------
341 !
342  DO j=iup,ibot-1
343 
344  zee=zseae(j)**2/zalg
345  zxrod=(zzdrho(j)+ zzdrho(j+1))*0.5
346 
347  zxlme=0.
348  zpot=0.
349  jin=j
350  DO jj=j+1,ibot
351  zaux=zpot + xdz2(jj)*(zzdrho(jj)-zxrod)
352  IF (zaux<zee) THEN
353  jin=jj
354  zpot=zaux
355  zxlme=zxlme+xdz2(jj)
356  ENDIF
357  ENDDO
358  IF (jin==j) THEN
359  zxlme=2.*(xz2(j)-xzhoc(j+1))/(zzdrho(j+1)-zxrod)/zalg
360  zxlme=sqrt(zxlme)*zseae(j)
361  ELSE
362  IF (jin/=ibot) THEN
363  zxdl=(zee-zpot)/(zzdrho(jin+1)-zxrod)
364  zxlme=zxlme+zxdl
365  ENDIF
366  ENDIF
367 
368  zxlpe=0.
369  zpot=0.
370  jin=j
371  DO jj=j-1,nockmin,-1
372  zaux=zpot + xdz2(jj+1)*(zxrod-zzdrho(jj+1))
373  IF (zaux<zee) THEN
374  jin=jj
375  zpot=zaux
376  zxlpe=zxlpe+xdz2(jj+1)
377  ENDIF
378  ENDDO
379  IF (jin==j) THEN
380  zxlpe=2.*(xz2(j)-xzhoc(j))/(zzdrho(j)-zxrod)/zalg
381  zxlpe=sqrt(zxlpe)*zseae(j)
382  ELSE
383  IF (jin/=nockmin) THEN
384  zxdl=- (zee-zpot)/(zzdrho(jin)-zxrod)
385  zxlpe=zxlpe+zxdl
386  ENDIF
387  ENDIF
388 
389  zle(j)=sqrt(zxlme*zxlpe)
390  zkmel(j)=xckl*zle(j)*zseae(j)
391 
392  ENDDO
393 
394  zle(ibot)=zle(ibot-1)
395  zkmel(ibot)=xckl*zle(ibot)*zseae(ibot)
396 
397  !first coef at all levels: because needed at j+1 further
398  zkmelm(iup)=zkmel(iup)
399  DO j=iup+1,ibot
400  zkmelm(j)= (zkmel(j)+zkmel(j-1))/2.
401  ENDDO
402 
403 !--------------------------------------------------------------------------------------------------------
404 !
405 !! 2.c Numerical resolution of evolution equations
406 !! -------------------------------------------
407 !
408  DO j=iup,ibot
409  IF (or%LREL_CUR) THEN
410  zudtrel(j) = - (zseau(j)-zseau_rel(j)) / or%XTAU_REL
411  zvdtrel(j) = - (zseav(j)-zseav_rel(j)) / or%XTAU_REL
412  ENDIF
413  ! flux solaire
414  zdtfsol(j) = xray(j)*zfsol/xdz2(j)
415  ENDDO
416 !
417  IF (or%LREL_TS) THEN
418 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
419 ! RELAXATION IS MADE INSTEAD OF FLUX CORRECTION
420 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
421  DO j=iup,ibot
422  ! flux non solaire
423  ztdtrel(j) = - (zseat(j)-zseat_rel(j)) / or%XTAU_REL
424  zsdtrel(j) = - (zseas(j)-zseas_rel(j)) / or%XTAU_REL
425  ENDDO
426  ENDIF
427 !
428  IF (or%LFLX_CORR) THEN
429  ! NO relaxation
430  ! Barnier correction on surface fluxes
431  ! flux non solaire corrige
432  ztdtrel(iup) = or%XQCORR *(zseat_rel(iup)-zseat(iup)) / (xrhosw*xcpsw)
433  zfnsol = zfnsol + ztdtrel(iup)
434  ENDIF
435 !
436 ! flux non solaire
437  zdtfnsol = zfnsol/xdz2(iup)
438 !
439 !!
440 !loop on levels
441  za(:) = 0.
442  zai(:) = 0.
443  za2(:) = 0.
444  zc(:) = 0.
445  zci(:) = 0.
446  zc2(:) = 0.
447  DO j=iup,ibot
448 
449  IF (j<ibot) THEN
450  IF (j>iup) THEN
451  za(j) = o%XOCEAN_TSTEP * xk1(j) * (zkmel(j-1) + zkmes(j-1) + zkmews(j-1) + zkmed(j-1))
452  zai(j) = o%XOCEAN_TSTEP * xk1(j) * (zkmel(j-1) + zkmes(j-1) + zkmewm(j-1) + zkmed(j-1))
453  za2(j) = o%XOCEAN_TSTEP * xk2(j) * zkmelm(j)
454  ENDIF
455  zc(j) = o%XOCEAN_TSTEP * xk2(j) * (zkmel(j) + zkmes(j) + zkmews(j) + zkmed(j))
456  zci(j) = o%XOCEAN_TSTEP * xk2(j) * (zkmel(j) + zkmes(j) + zkmewm(j) + zkmed(j))
457  zc2(j) = o%XOCEAN_TSTEP * xk3(j) * zkmelm(j+1)
458  ENDIF
459 
460  zb(j) = 1. - za(j) - zc(j)
461  zbi(j) = 1. - zai(j) - zci(j)
462  zb2(j) = 1. - za2(j) - zc2(j) + o%XOCEAN_TSTEP * zseae(j)/zle(j)/xzce
463 
464  zau(j) = zai(j) * (1.,0.)
465  zcu(j) = zci(j) * (1.,0.)
466  zbu(j) = zbi(j) * (1.,0.) + o%XOCEAN_TSTEP * zf * xgama * (0.,1.)
467 
468 
469  zomt(j) = 1./(zb(j) - za(j) * zomt(j-1) * zc(j-1))
470  zoms(j) = 1./(zb(j) - za(j) * zoms(j-1) * zc(j-1))
471  zomu(j) = 1./(zbu(j) - zau(j) * zomu(j-1) * zcu(j-1))
472  zome(j) = 1./(zb2(j) - za2(j) * zome(j-1) * zc2(j-1))
473 
474 
475  zyt(j) = zseat(j) + o%XOCEAN_TSTEP * (zdtfsol(j) + advt(j))
476  zys(j) = zseas(j) + o%XOCEAN_TSTEP * ( advs(j))
477  IF (or%LREL_TS) THEN
478  IF (.NOT.or%LFLX_CORR) zyt(j) = zyt(j) + o%XOCEAN_TSTEP * ztdtrel(j)
479  zys(j) = zys(j) + o%XOCEAN_TSTEP * zsdtrel(j)
480  ENDIF
481 
482  zuc(j,1) = zseau(j)*(1.,0.) + zseav(j)*(0.,1.)
483  zyu(j) = zuc(j,1) + o%XOCEAN_TSTEP * (zuc(j,1)*zf*(1.-xgama)*(0.,-1.) + advu(j)*(1.,0.) + advv(j)*(0.,1.))
484  ! damping on current if LREL_CUR=T in explicit scheme
485  IF (or%LREL_CUR) zyu(j) = zyu(j) + o%XOCEAN_TSTEP * (zudtrel(j)*(1.,0.) + zvdtrel(j)*(0.,1.))
486 
487  IF (j<ibot) THEN
488  zdrhodz = (zzdrho(j)-zzdrho(j+1))/xdz1(j)
489  zdu = zseau(j+1)-zseau(j)
490  zdv = zseav(j+1)-zseav(j)
491 
492  zpth(j) = xckl * zle(j) * zalg * zdrhodz
493  zpdy(j) = xckl * zle(j) * xk4(j) * (zdu**2+zdv**2)
494  ELSE
495  zpth(j) = zpth(j-1)
496  zpdy(j) = zpdy(j-1)
497  ENDIF
498 
499  zye(j) = zseae(j) + o%XOCEAN_TSTEP * (0.5 * zseae(j)**2/zle(j)/xzce + adve(j)) + zpth(j) + zpdy(j)
500 
501  IF (j==iup) THEN
502  zyt(j) = zyt(j) + o%XOCEAN_TSTEP * zdtfnsol
503  zys(j) = zys(j) + o%XOCEAN_TSTEP * zseas(iup) * zsfteau / xdz2(iup)
504  zyu(j) = zyu(j) - o%XOCEAN_TSTEP * ( zsfu*(1.,0.) + zsfv*(0.,1.) ) / xdz2(iup) / xrhosw
505  zye(j) = zye(j) + o%XOCEAN_TSTEP * zews / xdz1(iup)
506  ENDIF
507 
508 
509  zwt(j) = zomt(j) * (zyt(j)- za(j)*zwt(j-1))
510  zws(j) = zoms(j) * (zys(j)- za(j)*zws(j-1))
511  zwu(j) = zomu(j) * (zyu(j)- zau(j)*zwu(j-1))
512  zwe(j) = zome(j) * (zye(j)- za2(j)*zwe(j-1))
513 
514  ENDDO
515 !
516 !---------------------------------------------------------------------------------------------------
517 !
518  zt(ibot) = zwt(ibot)
519  zs(ibot) = zws(ibot)
520  zuc(ibot,2) = zwu(ibot)
521  ze(ibot) = zwe(ibot)
522  DO j=ibot-1,iup,-1
523  zt(j) = zwt(j) - zc(j) * zomt(j) * zt(j+1)
524  zs(j) = zws(j) - zc(j) * zoms(j) * zs(j+1)
525  zuc(j,2) = zwu(j) - zcu(j) * zomu(j) * zuc(j+1,2)
526  ze(j) = zwe(j) - zc2(j) * zome(j) * ze(j+1)
527  ENDDO
528 !
529 !
530  DO j=iup,ibot
531  zu(j) = real(zuc(j,2))
532  zv(j) = aimag(zuc(j,2))
533  !
534  ze(j) = max(zemin,ze(j))
535  ! Transformation to preserve E <EMAX; secure if mixt crash
536  ze(j) = min(ze(j),zemax)
537  !bilan TKE
538  !ZTENDE(J) = (ZE(J)*ZE(J)-ZSEAE(J)**2)/O%XOCEAN_TSTEP
539  !ZDIFFV(J) = ZTENDE(J) - ZSEAE(J)*(ZPDY(J) + ZPTH(J))
540  !
541  zseat(j) = zt(j)
542  zseas(j) = zs(j)
543  zseau(j) = zu(j)
544  zseav(j) = zv(j)
545  zseae(j) = ze(j)
546  ENDDO
547 !
548 !------------------------------------------------------------------------------
549 !! 3. New oceanic profiles
550 !! --------------------
551 !!
552  IF (o%LPROGSST) o%XSEATEND(jpt) = (zt(iup)-zseat(iup)) / o%XOCEAN_TSTEP
553  zseat(nockmin) = zt(iup)
554  zseas(nockmin) = zs(iup)
555  zseau(nockmin) = zu(iup)
556  zseav(nockmin) = zv(iup)
557  zseae(nockmin) = ze(iup)
558 
559  !bathymetrie
560  DO j=iup,ibot
561  IF (o%XSEABATH(jpt,j)==0.) THEN
562  zseat(j) = zseat(j-1)
563  zseas(j) = zseas(j-1)
564  zseau(j) = zseau(j-1)
565  zseav(j) = zseav(j-1)
566  zseae(j) = zseae(j-1)
567  ENDIF
568  ENDDO
569 !
570 !SST diagnosticed with 1D oceanic model
571  zseatemp = zseat(iup) + xtt
572  pseatemp(jpt) = zseatemp
573 !
574  DO j=iup,ibot
575  o%XLE (jpt,j) = zle(j)
576  o%XLK (jpt,j) = zle(j)
577  o%XKMEL (jpt,j) = zkmel(j)
578  o%XKMELM(jpt,j) = zkmelm(j)
579  ENDDO
580 
581  DO j=iup-1,ibot
582  o%XSEAT(jpt,j) = zseat(j)
583  o%XSEAS(jpt,j) = zseas(j)
584  o%XSEAU(jpt,j) = zseau(j)
585  o%XSEAV(jpt,j) = zseav(j)
586  o%XSEAE(jpt,j) = zseae(j)
587  o%XDTFSOL(jpt,j) = zdtfsol(j)
588  ENDDO
589 
590  o%XDTFNSOL(jpt) = zdtfnsol
591 
592 ENDDO
593 !
594 IF (lhook) CALL dr_hook('MIXTL_N',1,zhook_handle)
595 !
596 !!-------------------------------------------------------------------------------
597 !!
598 !ENDDO !end of iterations on sea surfex grid points
599 !!------------------------------------------------------------------------------
600 !
601 END SUBROUTINE mixtl_n
subroutine mixtl_n(O, OR, SG, PFSOL, PFNSOL, PSFTEAU, PSFU, PSFV, PSEATEMP)
Definition: mixtln.F90:6