GCC Code Coverage Report


Directory: ./
File: phys/yamada_c.f90
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 0 177 0.0%
Branches: 0 218 0.0%

Line Branch Exec Source
1 !
2 ! $Header$
3 !
4 SUBROUTINE yamada_c(ngrid,timestep,plev,play &
5 & ,pu,pv,pt,d_u,d_v,d_t,cd,q2,km,kn,kq,d_t_diss,ustar &
6 & ,iflag_pbl)
7 USE dimphy, ONLY: klon, klev
8 USE print_control_mod, ONLY: prt_level
9 USE ioipsl_getin_p_mod, ONLY : getin_p
10
11 IMPLICIT NONE
12 !
13 ! $Header$
14 !
15 ! ATTENTION!!!!: ce fichier include est compatible format fixe/format libre
16 ! veillez � n'utiliser que des ! pour les commentaires
17 ! et � bien positionner les & des lignes de continuation
18 ! (les placer en colonne 6 et en colonne 73)
19 !
20 !
21 ! A1.0 Fundamental constants
22 REAL RPI,RCLUM,RHPLA,RKBOL,RNAVO
23 ! A1.1 Astronomical constants
24 REAL RDAY,REA,REPSM,RSIYEA,RSIDAY,ROMEGA
25 ! A1.1.bis Constantes concernant l'orbite de la Terre:
26 REAL R_ecc, R_peri, R_incl
27 ! A1.2 Geoide
28 REAL RA,RG,R1SA
29 ! A1.3 Radiation
30 ! REAL RSIGMA,RI0
31 REAL RSIGMA
32 ! A1.4 Thermodynamic gas phase
33 REAL RMO3,RMCO2,RMC,RMCH4,RMN2O,RMCFC11,RMCFC12
34 REAL R,RMD,RMV,RD,RV,RCPD,RCPV,RCVD,RCVV
35 REAL RKAPPA,RETV, eps_w
36 ! A1.5,6 Thermodynamic liquid,solid phases
37 REAL RCW,RCS
38 ! A1.7 Thermodynamic transition of phase
39 REAL RLVTT,RLSTT,RLMLT,RTT,RATM
40 ! A1.8 Curve of saturation
41 REAL RESTT,RALPW,RBETW,RGAMW,RALPS,RBETS,RGAMS
42 REAL RALPD,RBETD,RGAMD
43 !
44 COMMON/YOMCST/RPI ,RCLUM ,RHPLA ,RKBOL ,RNAVO &
45 & ,RDAY ,REA ,REPSM ,RSIYEA,RSIDAY,ROMEGA &
46 & ,R_ecc, R_peri, R_incl &
47 & ,RA ,RG ,R1SA &
48 & ,RSIGMA &
49 & ,R ,RMD ,RMV ,RD ,RV ,RCPD &
50 & ,RMO3 ,RMCO2 ,RMC ,RMCH4 ,RMN2O ,RMCFC11 ,RMCFC12 &
51 & ,RCPV ,RCVD ,RCVV ,RKAPPA,RETV, eps_w &
52 & ,RCW ,RCS &
53 & ,RLVTT ,RLSTT ,RLMLT ,RTT ,RATM &
54 & ,RESTT ,RALPW ,RBETW ,RGAMW ,RALPS ,RBETS ,RGAMS &
55 & ,RALPD ,RBETD ,RGAMD
56 ! ------------------------------------------------------------------
57 !$OMP THREADPRIVATE(/YOMCST/)
58 !
59 ! timestep : pas de temps
60 ! g : g
61 ! zlev : altitude a chaque niveau (interface inferieure de la couche
62 ! de meme indice)
63 ! zlay : altitude au centre de chaque couche
64 ! u,v : vitesse au centre de chaque couche
65 ! (en entree : la valeur au debut du pas de temps)
66 ! teta : temperature potentielle au centre de chaque couche
67 ! (en entree : la valeur au debut du pas de temps)
68 ! cd : cdrag
69 ! (en entree : la valeur au debut du pas de temps)
70 ! q2 : $q^2$ au bas de chaque couche
71 ! (en entree : la valeur au debut du pas de temps)
72 ! (en sortie : la valeur a la fin du pas de temps)
73 ! km : diffusivite turbulente de quantite de mouvement (au bas de chaque
74 ! couche)
75 ! (en sortie : la valeur a la fin du pas de temps)
76 ! kn : diffusivite turbulente des scalaires (au bas de chaque couche)
77 ! (en sortie : la valeur a la fin du pas de temps)
78 !
79 ! iflag_pbl doit valoir entre 6 et 9
80 ! l=6, on prend systematiquement une longueur d'equilibre
81 ! iflag_pbl=6 : MY 2.0
82 ! iflag_pbl=7 : MY 2.0.Fournier
83 ! iflag_pbl=8/9 : MY 2.5
84 ! iflag_pbl=8 with special obsolete treatments for convergence
85 ! with Cmpi5 NPv3.1 simulations
86 ! iflag_pbl=10/11 : New scheme M2 and N2 explicit and dissiptation exact
87 ! iflag_pbl=12 = 11 with vertical diffusion off q2
88 !
89 ! 2013/04/01 (FH hourdin@lmd.jussieu.fr)
90 ! Correction for very stable PBLs (iflag_pbl=10 and 11)
91 ! iflag_pbl=8 converges numerically with NPv3.1
92 ! iflag_pbl=11 -> the model starts with NP from start files created by ce0l
93 ! -> the model can run with longer time-steps.
94 !.......................................................................
95
96 REAL, DIMENSION(klon,klev) :: d_u,d_v,d_t
97 REAL, DIMENSION(klon,klev) :: pu,pv,pt
98 REAL, DIMENSION(klon,klev) :: d_t_diss
99
100 REAL timestep
101 real plev(klon,klev+1)
102 real play(klon,klev)
103 real ustar(klon)
104 real kmin,qmin,pblhmin(klon),coriol(klon)
105 REAL zlev(klon,klev+1)
106 REAL zlay(klon,klev)
107 REAL zu(klon,klev)
108 REAL zv(klon,klev)
109 REAL zt(klon,klev)
110 REAL teta(klon,klev)
111 REAL cd(klon)
112 REAL q2(klon,klev+1),qpre
113 REAL unsdz(klon,klev)
114 REAL unsdzdec(klon,klev+1)
115
116 REAL km(klon,klev)
117 REAL kmpre(klon,klev+1),tmp2
118 REAL mpre(klon,klev+1)
119 REAL kn(klon,klev)
120 REAL kq(klon,klev)
121 real ff(klon,klev+1),delta(klon,klev+1)
122 real aa(klon,klev+1),aa0,aa1
123 integer iflag_pbl,ngrid
124 integer nlay,nlev
125
126 logical first
127 integer ipas
128 save first,ipas
129 !FH/IM data first,ipas/.true.,0/
130 data first,ipas/.false.,0/
131 !$OMP THREADPRIVATE( first,ipas)
132 INTEGER, SAVE :: iflag_tke_diff=0
133 !$OMP THREADPRIVATE(iflag_tke_diff)
134
135
136 integer ig,k
137
138
139 real ri,zrif,zalpha,zsm,zsn
140 real rif(klon,klev+1),sm(klon,klev+1),alpha(klon,klev)
141
142 real m2(klon,klev+1),dz(klon,klev+1),zq,n2(klon,klev+1)
143 REAL, DIMENSION(klon,klev+1) :: km2,kn2,sqrtq
144 real dtetadz(klon,klev+1)
145 real m2cstat,mcstat,kmcstat
146 real l(klon,klev+1)
147 real leff(klon,klev+1)
148 real,allocatable,save :: l0(:)
149 !$OMP THREADPRIVATE(l0)
150 real sq(klon),sqz(klon),zz(klon,klev+1)
151 integer iter
152
153 real ric,rifc,b1,kap
154 save ric,rifc,b1,kap
155 data ric,rifc,b1,kap/0.195,0.191,16.6,0.4/
156 !$OMP THREADPRIVATE(ric,rifc,b1,kap)
157 real frif,falpha,fsm
158 real fl,zzz,zl0,zq2,zn2
159
160 real rino(klon,klev+1),smyam(klon,klev),styam(klon,klev)
161 real lyam(klon,klev),knyam(klon,klev)
162 real w2yam(klon,klev),t2yam(klon,klev)
163 logical,save :: firstcall=.true.
164 !$OMP THREADPRIVATE(firstcall)
165 CHARACTER(len=20),PARAMETER :: modname="yamada_c"
166 REAL, DIMENSION(klon,klev+1) :: fluxu,fluxv,fluxt
167 REAL, DIMENSION(klon,klev+1) :: dddu,dddv,dddt
168 REAL, DIMENSION(klon,klev) :: exner,masse
169 REAL, DIMENSION(klon,klev+1) :: masseb,q2old,q2neg
170 LOGICAL okiophys
171
172 frif(ri)=0.6588*(ri+0.1776-sqrt(ri*ri-0.3221*ri+0.03156))
173 falpha(ri)=1.318*(0.2231-ri)/(0.2341-ri)
174 fsm(ri)=1.96*(0.1912-ri)*(0.2341-ri)/((1.-ri)*(0.2231-ri))
175 fl(zzz,zl0,zq2,zn2)= &
176 & max(min(l0(ig)*kap*zlev(ig,k)/(kap*zlev(ig,k)+l0(ig)) &
177 & ,0.5*sqrt(q2(ig,k))/sqrt(max(n2(ig,k),1.e-10))) ,1.)
178
179
180 okiophys=klon==1
181 if (firstcall) then
182 CALL getin_p('iflag_tke_diff',iflag_tke_diff)
183 allocate(l0(klon))
184 ! call iophys_ini(timestep)
185 firstcall=.false.
186 endif
187
188 IF (ngrid<=0) RETURN ! Bizarre : on n a pas ce probeleme pour coef_diff_turb
189
190 if (okiophys) then
191 call iophys_ecrit('q2i',klev,'q2 debut my','m2/s2',q2(:,1:klev))
192 call iophys_ecrit('kmi',klev,'Kz debut my','m/s2',km(:,1:klev))
193 endif
194
195 nlay=klev
196 nlev=klev+1
197
198
199 !-------------------------------------------------------------------------
200 ! Computation of conservative source terms from the turbulent tendencies
201 !-------------------------------------------------------------------------
202
203
204 zalpha=0.5 ! Anciennement 0.5. Essayer de voir pourquoi ?
205 zu(:,:)=pu(:,:)+zalpha*d_u(:,:)
206 zv(:,:)=pv(:,:)+zalpha*d_v(:,:)
207 zt(:,:)=pt(:,:)+zalpha*d_t(:,:)
208
209 do k=1,klev
210 exner(:,k)=(play(:,k)/plev(:,1))**RKAPPA
211 masse(:,k)=(plev(:,k)-plev(:,k+1))/RG
212 teta(:,k)=zt(:,k)/exner(:,k)
213 enddo
214
215 ! Atmospheric mass at layer interfaces, where the TKE is computed
216 masseb(:,:)=0.
217 do k=1,klev
218 masseb(:,k)=masseb(:,k)+masse(:,k)
219 masseb(:,k+1)=masseb(:,k+1)+masse(:,k)
220 enddo
221 masseb(:,:)=0.5*masseb(:,:)
222
223 zlev(:,1)=0.
224 zlay(:,1)=RCPD*teta(:,1)*(1.-exner(:,1))
225 do k=1,klev-1
226 zlay(:,k+1)=zlay(:,k)+0.5*RCPD*(teta(:,k)+teta(:,k+1))*(exner(:,k)-exner(:,k+1))/RG
227 zlev(:,k)=0.5*(zlay(:,k)+zlay(:,k+1)) ! PASBO
228 enddo
229
230 fluxu(:,klev+1)=0.
231 fluxv(:,klev+1)=0.
232 fluxt(:,klev+1)=0.
233
234 do k=klev,1,-1
235 fluxu(:,k)=fluxu(:,k+1)+masse(:,k)*d_u(:,k)
236 fluxv(:,k)=fluxv(:,k+1)+masse(:,k)*d_v(:,k)
237 fluxt(:,k)=fluxt(:,k+1)+masse(:,k)*d_t(:,k)/exner(:,k) ! Flux de theta
238 enddo
239
240 dddu(:,1)=2*zu(:,1)*fluxu(:,1)
241 dddv(:,1)=2*zv(:,1)*fluxv(:,1)
242 dddt(:,1)=(exner(:,1)-1.)*fluxt(:,1)
243
244 do k=2,klev
245 dddu(:,k)=(zu(:,k)-zu(:,k-1))*fluxu(:,k)
246 dddv(:,k)=(zv(:,k)-zv(:,k-1))*fluxv(:,k)
247 dddt(:,k)=(exner(:,k)-exner(:,k-1))*fluxt(:,k)
248 enddo
249 dddu(:,klev+1)=0.
250 dddv(:,klev+1)=0.
251 dddt(:,klev+1)=0.
252
253 if (okiophys) then
254 call iophys_ecrit('zlay',klev,'Geop','m',zlay)
255 call iophys_ecrit('teta',klev,'teta','K',teta)
256 call iophys_ecrit('temp',klev,'temp','K',zt)
257 call iophys_ecrit('pt',klev,'temp','K',pt)
258 call iophys_ecrit('pu',klev,'u','m/s',pu)
259 call iophys_ecrit('pv',klev,'v','m/s',pv)
260 call iophys_ecrit('d_u',klev,'d_u','m/s2',d_u)
261 call iophys_ecrit('d_v',klev,'d_v','m/s2',d_v)
262 call iophys_ecrit('d_t',klev,'d_t','K/s',d_t)
263 call iophys_ecrit('exner',klev,'exner','',exner)
264 call iophys_ecrit('masse',klev,'masse','',masse)
265 call iophys_ecrit('masseb',klev,'masseb','',masseb)
266 endif
267
268
269
270 ipas=ipas+1
271
272
273 !.......................................................................
274 ! les increments verticaux
275 !.......................................................................
276 !
277 !!!!!! allerte !!!!!c
278 !!!!!! zlev n'est pas declare a nlev !!!!!c
279 !!!!!! ---->
280 DO ig=1,ngrid
281 zlev(ig,nlev)=zlay(ig,nlay) &
282 & +( zlay(ig,nlay) - zlev(ig,nlev-1) )
283 ENDDO
284 !!!!!! <----
285 !!!!!! allerte !!!!!c
286 !
287 DO k=1,nlay
288 DO ig=1,ngrid
289 unsdz(ig,k)=1.E+0/(zlev(ig,k+1)-zlev(ig,k))
290 ENDDO
291 ENDDO
292 DO ig=1,ngrid
293 unsdzdec(ig,1)=1.E+0/(zlay(ig,1)-zlev(ig,1))
294 ENDDO
295 DO k=2,nlay
296 DO ig=1,ngrid
297 unsdzdec(ig,k)=1.E+0/(zlay(ig,k)-zlay(ig,k-1))
298 ENDDO
299 ENDDO
300 DO ig=1,ngrid
301 unsdzdec(ig,nlay+1)=1.E+0/(zlev(ig,nlay+1)-zlay(ig,nlay))
302 ENDDO
303 !
304 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
305 ! Computing M^2, N^2, Richardson numbers, stability functions
306 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
307
308
309 do k=2,klev
310 do ig=1,ngrid
311 dz(ig,k)=zlay(ig,k)-zlay(ig,k-1)
312 m2(ig,k)=((zu(ig,k)-zu(ig,k-1))**2+(zv(ig,k)-zv(ig,k-1))**2)/(dz(ig,k)*dz(ig,k))
313 dtetadz(ig,k)=(teta(ig,k)-teta(ig,k-1))/dz(ig,k)
314 n2(ig,k)=RG*2.*dtetadz(ig,k)/(teta(ig,k-1)+teta(ig,k))
315 ! n2(ig,k)=0.
316 ri=n2(ig,k)/max(m2(ig,k),1.e-10)
317 if (ri.lt.ric) then
318 rif(ig,k)=frif(ri)
319 else
320 rif(ig,k)=rifc
321 endif
322 if(rif(ig,k)<0.16) then
323 alpha(ig,k)=falpha(rif(ig,k))
324 sm(ig,k)=fsm(rif(ig,k))
325 else
326 alpha(ig,k)=1.12
327 sm(ig,k)=0.085
328 endif
329 zz(ig,k)=b1*m2(ig,k)*(1.-rif(ig,k))*sm(ig,k)
330 enddo
331 enddo
332
333
334
335 !====================================================================
336 ! Computing the mixing length
337 !====================================================================
338
339 ! Mise a jour de l0
340 if (iflag_pbl==8.or.iflag_pbl==10) then
341
342 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
343 ! Iterative computation of l0
344 ! This version is kept for iflag_pbl only for convergence
345 ! with NPv3.1 Cmip5 simulations
346 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
347
348 do ig=1,ngrid
349 sq(ig)=1.e-10
350 sqz(ig)=1.e-10
351 enddo
352 do k=2,klev-1
353 do ig=1,ngrid
354 zq=sqrt(q2(ig,k))
355 sqz(ig)=sqz(ig)+zq*zlev(ig,k)*(zlay(ig,k)-zlay(ig,k-1))
356 sq(ig)=sq(ig)+zq*(zlay(ig,k)-zlay(ig,k-1))
357 enddo
358 enddo
359 do ig=1,ngrid
360 l0(ig)=0.2*sqz(ig)/sq(ig)
361 enddo
362 do k=2,klev
363 do ig=1,ngrid
364 l(ig,k)=fl(zlev(ig,k),l0(ig),q2(ig,k),n2(ig,k))
365 enddo
366 enddo
367 ! print*,'L0 cas 8 ou 10 ',l0
368
369 else
370
371 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
372 ! In all other case, the assymptotic mixing length l0 is imposed (100m)
373 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
374
375 l0(:)=150.
376 do k=2,klev
377 do ig=1,ngrid
378 l(ig,k)=fl(zlev(ig,k),l0(ig),q2(ig,k),n2(ig,k))
379 enddo
380 enddo
381 ! print*,'L0 cas autres ',l0
382
383 endif
384
385
386 if (okiophys) then
387 call iophys_ecrit('rif',klev,'Flux Richardson','m',rif(:,1:klev))
388 call iophys_ecrit('m2',klev,'m2 ','m/s',m2(:,1:klev))
389 call iophys_ecrit('Km2app',klev,'m2 conserv','m/s',km(:,1:klev)*m2(:,1:klev))
390 call iophys_ecrit('Km',klev,'Km','m2/s',km(:,1:klev))
391 endif
392
393
394 IF (iflag_pbl<20) then
395 ! For diagnostics only
396 RETURN
397
398 ELSE
399
400 ! print*,'OK1'
401
402 ! Evolution of TKE under source terms K M2 and K N2
403 leff(:,:)=max(l(:,:),1.)
404
405 !##################################################################
406 !# IF (iflag_pbl==29) THEN
407 !# STOP'Ne pas utiliser iflag_pbl=29'
408 !# km2(:,:)=km(:,:)*m2(:,:)
409 !# kn2(:,:)=kn2(:,:)*rif(:,:)
410 !# ELSEIF (iflag_pbl==25) THEN
411 ! VERSION AVEC LA TKE EN MILIEU DE COUCHE
412 !# STOP'Ne pas utiliser iflag_pbl=25'
413 !# DO k=1,klev
414 !# km2(:,k)=-0.5*(dddu(:,k)+dddv(:,k)+dddu(:,k+1)+dddv(:,k+1)) &
415 !# & /(masse(:,k)*timestep)
416 !# kn2(:,k)=rcpd*0.5*(dddt(:,k)+dddt(:,k+1))/(masse(:,k)*timestep)
417 !# leff(:,k)=0.5*(leff(:,k)+leff(:,k+1))
418 !# ENDDO
419 !# km2(:,klev+1)=0. ; kn2(:,klev+1)=0.
420 !# ELSE
421 !#################################################################
422
423 km2(:,:)=-(dddu(:,:)+dddv(:,:))/(masseb(:,:)*timestep)
424 kn2(:,:)=rcpd*dddt(:,:)/(masseb(:,:)*timestep)
425 ! ENDIF
426 q2neg(:,:)=q2(:,:)+timestep*(km2(:,:)-kn2(:,:))
427 q2(:,:)=min(max(q2neg(:,:),1.e-10),1.e4)
428
429
430 if (okiophys) then
431 call iophys_ecrit('km2',klev,'m2 conserv','m/s',km2(:,1:klev))
432 call iophys_ecrit('kn2',klev,'n2 conserv','m/s',kn2(:,1:klev))
433 endif
434
435 ! Dissipation of TKE
436 q2old(:,:)=q2(:,:)
437 q2(:,:)=1./(1./sqrt(q2(:,:))+timestep/(2*leff(:,:)*b1))
438 q2(:,:)=q2(:,:)*q2(:,:)
439 ! IF (iflag_pbl<=24) THEN
440 DO k=1,klev
441 d_t_diss(:,k)=(masseb(:,k)*(q2neg(:,k)-q2(:,k))+masseb(:,k+1)*(q2neg(:,k+1)-q2(:,k+1)))/(2.*rcpd*masse(:,k))
442 ENDDO
443
444 !###################################################################
445 ! ELSE IF (iflag_pbl<=27) THEN
446 ! DO k=1,klev
447 ! d_t_diss(:,k)=(q2neg(:,k)-q2(:,k))/rcpd
448 ! ENDDO
449 ! ENDIF
450 ! print*,'iflag_pbl ',d_t_diss
451 !###################################################################
452
453
454 ! Compuation of stability functions
455 ! IF (iflag_pbl/=29) THEN
456 DO k=1,klev
457 DO ig=1,ngrid
458 IF (ABS(km2(ig,k))<=1.e-20) THEN
459 rif(ig,k)=0.
460 ELSE
461 rif(ig,k)=min(kn2(ig,k)/km2(ig,k),rifc)
462 ENDIF
463 IF (rif(ig,k).lt.0.16) THEN
464 alpha(ig,k)=falpha(rif(ig,k))
465 sm(ig,k)=fsm(rif(ig,k))
466 else
467 alpha(ig,k)=1.12
468 sm(ig,k)=0.085
469 endif
470 ENDDO
471 ENDDO
472 ! ENDIF
473
474 ! Computation of turbulent diffusivities
475 ! IF (25<=iflag_pbl.and.iflag_pbl<=28) THEN
476 ! DO k=2,klev
477 ! sqrtq(:,k)=sqrt(0.5*(q2(:,k)+q2(:,k-1)))
478 ! ENDDO
479 ! ELSE
480 kq(:,:)=0.
481 DO k=1,klev
482 ! Coefficient au milieu des couches pour diffuser la TKE
483 kq(:,k)=0.5*leff(:,k)*sqrt(q2(:,k))*0.2
484 ENDDO
485
486 if (okiophys) then
487 call iophys_ecrit('q2b',klev,'KTE inter','m2/s',q2(:,1:klev))
488 endif
489
490 IF (iflag_tke_diff==1) THEN
491 CALL vdif_q2(timestep, RG, RD, ngrid, plev, pt, kq, q2)
492 ENDIF
493
494 km(:,:)=0.
495 kn(:,:)=0.
496 DO k=1,klev
497 km(:,k)=leff(:,k)*sqrt(q2(:,k))*sm(:,k)
498 kn(:,k)=km(:,k)*alpha(:,k)
499 ENDDO
500
501
502 if (okiophys) then
503 call iophys_ecrit('mixingl',klev,'Mixing length','m',leff(:,1:klev))
504 call iophys_ecrit('rife',klev,'Flux Richardson','m',rif(:,1:klev))
505 call iophys_ecrit('q2f',klev,'KTE finale','m2/s',q2(:,1:klev))
506 call iophys_ecrit('q2neg',klev,'KTE non bornee','m2/s',q2neg(:,1:klev))
507 call iophys_ecrit('alpha',klev,'alpha','',alpha(:,1:klev))
508 call iophys_ecrit('sm',klev,'sm','',sm(:,1:klev))
509 call iophys_ecrit('q2f',klev,'KTE finale','m2/s',q2(:,1:klev))
510 call iophys_ecrit('kmf',klev,'Kz final','m2/s',km(:,1:klev))
511 call iophys_ecrit('knf',klev,'Kz final','m2/s',kn(:,1:klev))
512 call iophys_ecrit('kqf',klev,'Kz final','m2/s',kq(:,1:klev))
513 endif
514
515
516 ENDIF
517
518
519 ! print*,'OK2'
520 RETURN
521 END
522