SURFEX v8.1
General documentation of Surfex
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, PLAT, PFSOL,PFNSOL,PSFTEAU,PSFU,PSFV,PSEATEMP)
7 ! #######################################################################
8 !
9 !!**** *MIXTLN (1D MODEL)*
10 !!
11 !! PURPOSE
12 !! -------
13 ! Oceanic 1D model in TKE Closure scheme
14 !
15 !!** METHOD
16 !! ------
17 !
18 !! EXTERNAL
19 !! --------
20 !!
21 !! IMPLICIT ARGUMENTS
22 !! ------------------
23 !!
24 !! REFERENCE
25 !! ---------
26 ! Gaspar et al, 1990 : A simple eddy kinetic energy model for simulations of
27 ! the oceanic vertical mixing : Tests at station Papa and Long-term upper ocean
28 ! study site, JGR, 95,C9, 16,179--16,193.
29 !!
30 !! AUTHOR
31 !! ------
32 !! C. Lebeaupin *Météo-France*
33 !!
34 !! MODIFICATIONS
35 !! -------------
36 !! Original 02/2008
37 !! 01/2012 : H. Giordani, P. Peyrille
38 !! Add FLAGS:
39 !! LREL_TS: relaxation on T, S
40 !! LREL_CUR: damping on current
41 !! FOR LREL_CUR: implicit and explicit codinf is made
42 !! for conveniency, DTREL=Ucur term, DSREL=VCURterm
43 !! Corrections:
44 !! coriolis terms in current equation,
45 !! richardson nb in diapycnal mixing,
46 !! remove threshold value for mixing tendency
47 !! 07/2012, P. Le Moigne : CMO1D phasing
48 !! 09/2016, C. Lebeaupin Brossier: XSEATEND and initialization
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
57 !
58 USE modd_csts
61 !
62 USE modd_surf_par, ONLY : xundef
63 !
64 ! Module containing relaxation fields
65 !
66 !
67 USE yomhook ,ONLY : lhook, dr_hook
68 USE parkind1 ,ONLY : jprb
69 !
70 IMPLICIT NONE
71 !
72 !* 0.1 declarations of arguments
73 !
74 !
75 !
76 TYPE(ocean_t), INTENT(INOUT) :: O
77 TYPE(ocean_rel_t), INTENT(INOUT) :: OR
78 !
79 REAL, DIMENSION(:), INTENT(IN) :: PLAT
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 = plat(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  zseat(:) = o%XSEAT(jpt,:)
247  zseas(:) = o%XSEAS(jpt,:)
248  zseau(:) = o%XSEAU(jpt,:)
249  zseav(:) = o%XSEAV(jpt,:)
250  zseae(:) = o%XSEAE(jpt,:)
251  !
252  zseau_rel(:) = or%XSEAU_REL(jpt,:)
253  zseav_rel(:) = or%XSEAV_REL(jpt,:)
254  zseat_rel(:) = or%XSEAT_REL(jpt,:)
255  zseas_rel(:) = or%XSEAS_REL(jpt,:)
256  !
257  zseahmo = 0.
258  DO j=iup-1,ibot
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  zu(:) = 0.
265  zv(:) = 0.
266  zt(:) = 0.
267  zs(:) = 0.
268  ze(:) = 0.
269  advt(:) = 0.
270  advs(:) = 0.
271  advu(:) = 0.
272  advv(:) = 0.
273  adve(:) = 0.
274  zzdrho(:) = (zseat(:)-zt1)*(zt2+zt3*(zseat(:)-zt1)) + zs2*(zseas(:)-zs1)
275  zudtrel(:) = 0.
276  zvdtrel(:) = 0.
277  ztdtrel(:) = 0.
278  zsdtrel(:) = 0.
279  zdtfsol(:) = 0.
280  !
281  zdtfnsol=0.
282 !
283 ! Control print
284 !IF (LREL_CUR) WRITE(*,*) "WARNING :: Damping on current will be done"
285 !IF (LREL_TS) WRITE(*,*) "WARNING :: Relaxation on T, S ocean will be done "
286 !IF (LDIAPYCNAL) WRITE(*,*) "WARNING :: diapycnal mixing has been activated"
287 !IF (LFLX_CORR) WRITE(*,*) "WARNING :: ocean fluxes correctin has been activated"
288 !
289 !------------------------------------------------------------------------------
290 !
291 ! 2. Oceanic vertical mixing
292 ! -----------------------
293 !!
294 !! 2.a Diapycnal mixing
295 !! ----------------
296 !!
297  DO j=ibot-1,iup,-1
298  zkmes(j) =0.
299  zkmewm(j)=0.
300  zkmews(j)=0.
301  zkmed(j) =0.
302  IF ((ztest==0.).AND.(zseae(j)>=zseuil)) THEN
303  ikhml=j
304  ztest=1.
305  ENDIF
306  ENDDO
307 
308  !! Modif PP - HG : flag diapycnal
309  IF (or%LDIAPYCNAL) THEN
310  !
311  DO j=ikhml,ibot-1
312  zdrhodz=(zzdrho(j)-zzdrho(j+1))/xdz1(j)
313  zdu=zseau(j+1)-zseau(j)
314  zdv=zseav(j+1)-zseav(j)
315  IF((zdu*zdu+zdv*zdv).LE.1.e-7) THEN
316  zrich = 0.8
317  ELSE
318  zrich = -zalg*zdrhodz/(zdu**2+zdv**2)/xk4(j)
319  ENDIF
320 !coefficient de mélange aux ondes internes
321  zkmewm(j)=1.e-3
322  zkmews(j)=1.e-4
323 !coefficient de mélange du au cisaillement
324  IF(zrich>0.7) THEN
325  zkmes(j) = 0.
326  ELSEIF(zrich>=0.) THEN
327  zkmes(j) = 5.e-3*(1.-(zrich/0.7)*(zrich/0.7))**3
328  ELSE
329  zkmes(j) = 5.e-3
330  ENDIF
331  ENDDO
332  !plm si ldiapycnal=F zkmes non modofie et zrich ne sert a rien !
333  !plm ELSE
334  !plm ZRICH=-ZALG*ZDRHODZ / (ZDU**2+ZDV**2) / XK4(J)
335  !
336  ENDIF
337 !
338 ! 2.b Mixing length and coefficient
339 ! -----------------------------
340 !
341  DO j=iup,ibot-1
342 
343  zee=zseae(j)**2/zalg
344  zxrod=(zzdrho(j)+ zzdrho(j+1))*0.5
345 
346  zxlme=0.
347  zpot=0.
348  jin=j
349  DO jj=j+1,ibot
350  zaux=zpot + xdz2(jj)*(zzdrho(jj)-zxrod)
351  IF (zaux<zee) THEN
352  jin=jj
353  zpot=zaux
354  zxlme=zxlme+xdz2(jj)
355  ENDIF
356  ENDDO
357  IF (jin==j) THEN
358  zxlme=2.*(xz2(j)-xzhoc(j+1))/(zzdrho(j+1)-zxrod)/zalg
359  zxlme=sqrt(zxlme)*zseae(j)
360  ELSE
361  IF (jin/=ibot) THEN
362  zxdl=(zee-zpot)/(zzdrho(jin+1)-zxrod)
363  zxlme=zxlme+zxdl
364  ENDIF
365  ENDIF
366 
367  zxlpe=0.
368  zpot=0.
369  jin=j
370  DO jj=j-1,nockmin,-1
371  zaux=zpot + xdz2(jj+1)*(zxrod-zzdrho(jj+1))
372  IF (zaux<zee) THEN
373  jin=jj
374  zpot=zaux
375  zxlpe=zxlpe+xdz2(jj+1)
376  ENDIF
377  ENDDO
378  IF (jin==j) THEN
379  zxlpe=2.*(xz2(j)-xzhoc(j))/(zzdrho(j)-zxrod)/zalg
380  zxlpe=sqrt(zxlpe)*zseae(j)
381  ELSE
382  IF (jin/=nockmin) THEN
383  zxdl=- (zee-zpot)/(zzdrho(jin)-zxrod)
384  zxlpe=zxlpe+zxdl
385  ENDIF
386  ENDIF
387 
388  zle(j)=sqrt(zxlme*zxlpe)
389  zkmel(j)=xckl*zle(j)*zseae(j)
390 
391  ENDDO
392 
393  zle(ibot)=zle(ibot-1)
394  zkmel(ibot)=xckl*zle(ibot)*zseae(ibot)
395 
396  !first coef at all levels: because needed at j+1 further
397  zkmelm(iup)=zkmel(iup)
398  DO j=iup+1,ibot
399  zkmelm(j)= (zkmel(j)+zkmel(j-1))/2.
400  ENDDO
401 
402 !--------------------------------------------------------------------------------------------------------
403 !
404 !! 2.c Numerical resolution of evolution equations
405 !! -------------------------------------------
406 !
407  IF (or%LREL_CUR) THEN
408  DO j=iup,ibot
409  zudtrel(j) = - (zseau(j)-zseau_rel(j)) / or%XTAU_REL
410  zvdtrel(j) = - (zseav(j)-zseav_rel(j)) / or%XTAU_REL
411  ENDDO
412  ENDIF
413  !
414  DO j=iup,ibot
415  ! flux solaire
416  zdtfsol(j) = xray(j)*zfsol/xdz2(j)
417  ENDDO
418 !
419  IF (or%LREL_TS) THEN
420 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
421 ! RELAXATION IS MADE INSTEAD OF FLUX CORRECTION
422 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
423  DO j=iup,ibot
424  ! flux non solaire
425  ztdtrel(j) = - (zseat(j)-zseat_rel(j)) / or%XTAU_REL
426  zsdtrel(j) = - (zseas(j)-zseas_rel(j)) / or%XTAU_REL
427  ENDDO
428  ENDIF
429 !
430  IF (or%LFLX_CORR) THEN
431  ! NO relaxation
432  ! Barnier correction on surface fluxes
433  ! flux non solaire corrige
434  ztdtrel(iup) = or%XQCORR *(zseat_rel(iup)-zseat(iup)) / (xrhosw*xcpsw)
435  zfnsol = zfnsol + ztdtrel(iup)
436  ENDIF
437 !
438 ! flux non solaire
439  zdtfnsol = zfnsol/xdz2(iup)
440 !
441 !!
442 !loop on levels
443  za(:) = 0.
444  zai(:) = 0.
445  za2(:) = 0.
446  zc(:) = 0.
447  zci(:) = 0.
448  zc2(:) = 0.
449  DO j=iup,ibot
450 
451  IF (j<ibot) THEN
452  IF (j>iup) THEN
453  za(j) = o%XOCEAN_TSTEP * xk1(j) * (zkmel(j-1) + zkmes(j-1) + zkmews(j-1) + zkmed(j-1))
454  zai(j) = o%XOCEAN_TSTEP * xk1(j) * (zkmel(j-1) + zkmes(j-1) + zkmewm(j-1) + zkmed(j-1))
455  za2(j) = o%XOCEAN_TSTEP * xk2(j) * zkmelm(j)
456  ENDIF
457  zc(j) = o%XOCEAN_TSTEP * xk2(j) * (zkmel(j) + zkmes(j) + zkmews(j) + zkmed(j))
458  zci(j) = o%XOCEAN_TSTEP * xk2(j) * (zkmel(j) + zkmes(j) + zkmewm(j) + zkmed(j))
459  zc2(j) = o%XOCEAN_TSTEP * xk3(j) * zkmelm(j+1)
460  ENDIF
461 
462  zb(j) = 1. - za(j) - zc(j)
463  zbi(j) = 1. - zai(j) - zci(j)
464  zb2(j) = 1. - za2(j) - zc2(j) + o%XOCEAN_TSTEP * zseae(j)/zle(j)/xzce
465 
466  zau(j) = zai(j) * (1.,0.)
467  zcu(j) = zci(j) * (1.,0.)
468  zbu(j) = zbi(j) * (1.,0.) + o%XOCEAN_TSTEP * zf * xgama * (0.,1.)
469 
470 
471  zomt(j) = 1./(zb(j) - za(j) * zomt(j-1) * zc(j-1))
472  zoms(j) = 1./(zb(j) - za(j) * zoms(j-1) * zc(j-1))
473  zomu(j) = 1./(zbu(j) - zau(j) * zomu(j-1) * zcu(j-1))
474  zome(j) = 1./(zb2(j) - za2(j) * zome(j-1) * zc2(j-1))
475 
476 
477  zyt(j) = zseat(j) + o%XOCEAN_TSTEP * (zdtfsol(j) + advt(j))
478  zys(j) = zseas(j) + o%XOCEAN_TSTEP * ( advs(j))
479  IF (or%LREL_TS) THEN
480  IF (.NOT.or%LFLX_CORR) zyt(j) = zyt(j) + o%XOCEAN_TSTEP * ztdtrel(j)
481  zys(j) = zys(j) + o%XOCEAN_TSTEP * zsdtrel(j)
482  ENDIF
483 
484  zuc(j,1) = zseau(j)*(1.,0.) + zseav(j)*(0.,1.)
485  zyu(j) = zuc(j,1) + o%XOCEAN_TSTEP * (zuc(j,1)*zf*(1.-xgama)*(0.,-1.) + advu(j)*(1.,0.) + advv(j)*(0.,1.))
486  ! damping on current if LREL_CUR=T in explicit scheme
487  IF (or%LREL_CUR) zyu(j) = zyu(j) + o%XOCEAN_TSTEP * (zudtrel(j)*(1.,0.) + zvdtrel(j)*(0.,1.))
488 
489  IF (j<ibot) THEN
490  zdrhodz = (zzdrho(j)-zzdrho(j+1))/xdz1(j)
491  zdu = zseau(j+1)-zseau(j)
492  zdv = zseav(j+1)-zseav(j)
493 
494  zpth(j) = xckl * zle(j) * zalg * zdrhodz
495  zpdy(j) = xckl * zle(j) * xk4(j) * (zdu**2+zdv**2)
496  ELSE
497  zpth(j) = zpth(j-1)
498  zpdy(j) = zpdy(j-1)
499  ENDIF
500 
501  zye(j) = zseae(j) + o%XOCEAN_TSTEP * (0.5 * zseae(j)**2/zle(j)/xzce + adve(j)) + zpth(j) + zpdy(j)
502 
503  IF (j==iup) THEN
504  zyt(j) = zyt(j) + o%XOCEAN_TSTEP * zdtfnsol
505  zys(j) = zys(j) + o%XOCEAN_TSTEP * zseas(iup) * zsfteau / xdz2(iup)
506  zyu(j) = zyu(j) - o%XOCEAN_TSTEP * ( zsfu*(1.,0.) + zsfv*(0.,1.) ) / xdz2(iup) / xrhosw
507  zye(j) = zye(j) + o%XOCEAN_TSTEP * zews / xdz1(iup)
508  ENDIF
509 
510 
511  zwt(j) = zomt(j) * (zyt(j)- za(j)*zwt(j-1))
512  zws(j) = zoms(j) * (zys(j)- za(j)*zws(j-1))
513  zwu(j) = zomu(j) * (zyu(j)- zau(j)*zwu(j-1))
514  zwe(j) = zome(j) * (zye(j)- za2(j)*zwe(j-1))
515 
516  ENDDO
517 !
518 !---------------------------------------------------------------------------------------------------
519 !
520  zt(ibot) = zwt(ibot)
521  zs(ibot) = zws(ibot)
522  zuc(ibot,2) = zwu(ibot)
523  ze(ibot) = zwe(ibot)
524  DO j=ibot-1,iup,-1
525  zt(j) = zwt(j) - zc(j) * zomt(j) * zt(j+1)
526  zs(j) = zws(j) - zc(j) * zoms(j) * zs(j+1)
527  zuc(j,2) = zwu(j) - zcu(j) * zomu(j) * zuc(j+1,2)
528  ze(j) = zwe(j) - zc2(j) * zome(j) * ze(j+1)
529  ENDDO
530 !
531 !
532  DO j=iup,ibot
533  zu(j) = real(zuc(j,2))
534  zv(j) = aimag(zuc(j,2))
535  !
536  ze(j) = max(zemin,ze(j))
537  ! Transformation to preserve E <EMAX; secure if mixt crash
538  ze(j) = min(ze(j),zemax)
539  !bilan TKE
540  !ZTENDE(J) = (ZE(J)*ZE(J)-ZSEAE(J)**2)/O%XOCEAN_TSTEP
541  !ZDIFFV(J) = ZTENDE(J) - ZSEAE(J)*(ZPDY(J) + ZPTH(J))
542  !
543  zseat(j) = zt(j)
544  zseas(j) = zs(j)
545  zseau(j) = zu(j)
546  zseav(j) = zv(j)
547  zseae(j) = ze(j)
548  ENDDO
549 !
550 !------------------------------------------------------------------------------
551 !! 3. New oceanic profiles
552 !! --------------------
553 !!
554  IF (o%LPROGSST) o%XSEATEND(jpt) = (zt(iup)-o%XSEAT(jpt,iup)) / o%XOCEAN_TSTEP
555  zseat(nockmin) = zt(iup)
556  zseas(nockmin) = zs(iup)
557  zseau(nockmin) = zu(iup)
558  zseav(nockmin) = zv(iup)
559  zseae(nockmin) = ze(iup)
560 
561  !bathymetrie
562  DO j=iup,ibot
563  IF (o%XSEABATH(jpt,j)==0.) THEN
564  zseat(j) = zseat(j-1)
565  zseas(j) = zseas(j-1)
566  zseau(j) = zseau(j-1)
567  zseav(j) = zseav(j-1)
568  zseae(j) = zseae(j-1)
569  ENDIF
570  ENDDO
571 !
572 !SST diagnosticed with 1D oceanic model
573  zseatemp = zseat(iup) + xtt
574  pseatemp(jpt) = zseatemp
575 !
576  DO j=iup,ibot
577  o%XLE (jpt,j) = zle(j)
578  o%XLK (jpt,j) = zle(j)
579  o%XKMEL (jpt,j) = zkmel(j)
580  o%XKMELM(jpt,j) = zkmelm(j)
581  ENDDO
582 
583  DO j=iup-1,ibot
584  o%XSEAT(jpt,j) = zseat(j)
585  o%XSEAS(jpt,j) = zseas(j)
586  o%XSEAU(jpt,j) = zseau(j)
587  o%XSEAV(jpt,j) = zseav(j)
588  o%XSEAE(jpt,j) = zseae(j)
589  o%XDTFSOL(jpt,j) = zdtfsol(j)
590  ENDDO
591 
592  o%XDTFNSOL(jpt) = zdtfnsol
593 
594 ENDDO
595 !
596 IF (lhook) CALL dr_hook('MIXTL_N',1,zhook_handle)
597 !
598 !!-------------------------------------------------------------------------------
599 !!
600 !ENDDO !end of iterations on sea surfex grid points
601 !!------------------------------------------------------------------------------
602 !
603 END SUBROUTINE mixtl_n
real, dimension(:), pointer xk4
real, dimension(:), pointer xzhoc
real, save xpi
Definition: modd_csts.F90:43
real, parameter xundef
real, save xg
Definition: modd_csts.F90:55
integer, parameter jprb
Definition: parkind1.F90:32
real, dimension(:), pointer xk1
real, dimension(:), pointer xdz2
logical lhook
Definition: yomhook.F90:15
integer, save nockmax
real, dimension(:), pointer xk3
real, dimension(:), pointer xk2
real, save xtt
Definition: modd_csts.F90:66
subroutine mixtl_n(O, OR, PLAT, PFSOL, PFNSOL, PSFTEAU, PSFU, PSFV, PSEATEMP)
Definition: mixtln.F90:7
real, dimension(:), pointer xz2
real, dimension(:), pointer xdz1
integer, save nockmin
real, dimension(:), pointer xray
real8 real
Definition: privpub.h:396