!copyright (C) 2001 MSC-RPN COMM %%%RPNPHY%%%
***S/P DIFVER6
*
SUBROUTINE DIFVER6 (DB, DSIZ, F, FSIZ, V, VSIZ, 1,35
+ G, ESPG, TL, SELOC, TAU,
+ KOUNT, TRNCH, N, NK, STACK)
*
#include "impnone.cdk"
*
INTEGER DSIZ,FSIZ,VSIZ,KOUNT,TRNCH,N,NK,STACK,IERROR,ESPG
REAL DB(DSIZ),F(FSIZ),V(VSIZ),G(ESPG)
REAL TL(N,NK),SELOC(N,NK)
REAL TAU
*
*Author
* J. Cote (Oct 1984)
*
*Revision
* 001 B. Bilodeau (Spring 1994) - New physics interface.
* Change name from POSTIMP (SEF model) to DIFVER.
* 002 R. Sarrazin, J. Mailhot and B. Bilodeau (Jan 1996) -
* Bug fixes for time-series extraction of "KM"
* Change name from DIFVER to DIFVER2.
* 003 M. Desgagne (Oct 1995) - Unified physics interface.
* Change name from DIFVER2 to DIFVER3.
* 004 B. Bilodeau (Sept 96) - Install the new memory
* management system (STK).
* 005 B. Bilodeau (Nov 96) - Replace common block pntclp by
* common block turbus
* 006 C. Girard (Feb 1996) - New option ISHLCVT, diffusion
* of temperature and cloud water.
* 007 G. Pellerin (mars 97) - New calling sequence and change
* name to difver4.
* 008 Y. Delage and B. Bilodeau (Jul 97)
* Move FQ calculation from flxsurf to difver
* 009 M. Desgagne (Spring 97) - Diffuse W
* 010 M. Roch (Nov 1997) - Introduce sponge modulation factor
* 011 S. Belair (June 1998) - Turulent fluxes as output
* (subroutine ATMFLUX)
* 012 J. Mailhot (Oct 1998) - New SURFACE interface and
* change name to DIFVER5
* 013 B. Bilodeau (Nov 1998) - Merge phyexe and param4
* 014 B. Bilodeau (Dec 1999) - NSLOFLUX
* 015 B. Bilodeau (Nov 2000) - New comdeck phybus.cdk
* 016 B. Bilodeau (Aug 2001) - Add call to CTMDIAG and
* change name to difver6
* 017 J. Mailhot (May 2000) - Changes to add MOISTKE option (ifluvert=3)
* 018 J. Mailhot (Jun 2000) - Changes to add mixed-phase mode in
* MOISTKE option (ifluvert=3)
* 019 J. Mailhot (Oct 2000) - New calling sequence and
* change name to DIFVER6
* 020 B. Dugas (Nov 2001) - Save the USTRESS and VSTRESS vector
* components as well as their module FQ
* 021 B. Bilodeau (Mar 2002) - HU tendency=0 if wet=.false.
* 022 B. Bilodeau (Mar 2002) - Eliminate unit conversion for
* KM, KT, BM and BT
* 023 J. Mailhot (Avr 2002) - New calling sequence and
* change name to BAKTOTQ1
* 024 J. Mailhot (Feb 2003) - MOISTKE option based on implicit clouds only
* Change call to baktotq2
*
* 025 A-M. Leduc (Jan 2003) - ISHLCVT becomes ISHLCVT(1)
* 026 A. Plante (Jun 2003) - IBM conversion
* - divisions replaced by reciprocals (call to vsrec from massvp4 library)
* 027 F. Lemay (Spring 2003) - use average of BT for implicit boundary condition
*
*Object
* to perform the implicit vertical diffusion
*
*Arguments
* - Input/Output -
* DB dynamic bus
* F field for permanent physics variables
* V volatile bus
* DSIZ dimension of DB
* FSIZ dimension of F
* VSIZ dimension of V
* G physics work space
* ESPG dimension of G
*
* - Output -
* TU U tendency
* TV V tendency
* TT T tendency
* TQ Q tendency
* TL L tendency
* T temperature
* UU x component of the wind
* VV y component of the wind
* Q specific humidity
* QL liquid water
* PS surface pressure
* TM temperature at time t-dt
*
* - Input -
* SG sigma levels
* SELOC staggered sigma levels
* SPONMOD sponge modulation factor
* TAU timestep * factdt * facdifv
* see common block "options"
* KOUNT timestep number
* TRNCH row number
* N horizontal dimension
* NK vertical dimension
* STACK task number
*
**
*
EXTERNAL DIFUVDFJ,SERXST,SERGET,MZONXST
EXTERNAL DIFUVDF, ATMFLUX
EXTERNAL BAKTOTQ2, FICEMXP
*
REAL HEURSER,DQ,gsrt,rhortvsg,mrhocmu
REAL tplusnk,qplusnk,uplusnk,vplusnk
INTEGER J,K
LOGICAL shconly
REAL MAXIMUM, MINIMUM, RSG
*
#include "indx_sfc.cdk"
#include "consphy.cdk"
#include "options.cdk"
#include "phy_macros_f.h"
#include "phybus.cdk"
#include "stk.cdk"
*
************************************************************************
* AUTOMATIC ARRAYS
************************************************************************
*
*
AUTOMATIC ( KMSG , REAL , (N,NK ) )
AUTOMATIC ( KTSG , REAL , (N,NK ) )
AUTOMATIC ( BMSG , REAL , (N ) )
AUTOMATIC ( BTSG , REAL , (N ) )
AUTOMATIC ( RGAM0, REAL , (N,NK ) )
*
*
************************************************************************
* POINTEURS POUR ALLOCATION DYNAMIQUE
REAL A,C,D,R,R1,R2,ZERO
REAL AQ, BQ, SE, SIG, LSCP
REAL UFLUX, VFLUX, TFLUX, QFLUX, GAM0, FSLOFLX
REAL QCLOCAL, FICELOCAL
POINTER (PAA, A(N)), (PAC,C(N,NK)),( PAD,D(N,NK)), (PAR,R(N,NK))
POINTER (PAR1, R1(N,NK)), (PAR2,R2(N,NK)), (PAZERO,ZERO(N,NK))
POINTER (IAQ, AQ(N)), (IBQ, BQ(N)), (ISE, SE (NK)), (ISIG,SIG(NK))
POINTER ( IUFLUX , UFLUX (N,NK+1) )
POINTER ( IVFLUX , VFLUX (N,NK+1) )
POINTER ( ITFLUX , TFLUX (N,NK+1) )
POINTER ( IQFLUX , QFLUX (N,NK+1) )
POINTER ( IGAM0 , GAM0 (N,NK+1) )
POINTER ( IFSLOFLX , FSLOFLX (N ) )
POINTER ( IQCLOCAL , QCLOCAL (N,NK ) )
POINTER ( IFICELOCAL, FICELOCAL(N,NK ) )
*
* POINTEURS POUR CHAMPS DEJA DEFINIS DANS LES BUS
REAL TU, TV, TW, TT, TQ, UU, VV, W
REAL T, Q, QL, SG, PS, SPONMOD, TM
POINTER ( TU_ , TU (N,NK))
POINTER ( TV_ , TV (N,NK))
POINTER ( TW_ , TW (N,NK))
POINTER ( TT_ , TT (N,NK))
POINTER ( TQ_ , TQ (N,NK))
POINTER ( UU_ , UU (N,NK))
POINTER ( VV_ , VV (N,NK))
POINTER ( W _ , W (N,NK))
POINTER ( T _ , T (N,NK))
POINTER ( Q _ , Q (N,NK))
POINTER ( QL_ , QL (N,NK))
POINTER ( SG_ , SG (N,NK))
POINTER ( TM_ , TM (N,NK))
POINTER ( PS_ , PS (N ))
POINTER ( SP_ , SPONMOD (N ))
*
DATA shconly /.TRUE./
SAVE shconly
*
integer jk
* fonction-formule
jk(j,k) = (k-1)*n + j - 1
*
*---------------------------------------------------------------------
*
IF(IFLUVERT.EQ.0) RETURN
*
* EQUIVALENCES AVEC CHAMPS DEJA INCLUS DANS LES BUS
TU_ = LOC(V (UDIFV ))
TV_ = LOC(V (VDIFV ))
TW_ = LOC(V (WDIFV ))
TT_ = LOC(V (TDIFV ))
TQ_ = LOC(V (QDIFV ))
UU_ = LOC(DB(UPLUS ))
VV_ = LOC(DB(VPLUS ))
W _ = LOC(DB(OMEGAP ))
T _ = LOC(DB(TPLUS ))
Q _ = LOC(DB(HUPLUS ))
QL_ = LOC(DB(QCPLUS ))
SP_ = LOC(DB(EPONMOD))
SG_ = LOC(DB(SIGM ))
TM_ = LOC(DB(TMOINS ))
PS_ = LOC(DB(PMOINS ))
*
* INITIALISATION DU SYSTEME DE GESTION DE L'ESPACE DE TRAVAIL
STK_INITA(G,ESPG)
*
*
* ALLOCATION DES POINTEURS
STK_ALLOC(PAA , N )
STK_ALLOC(IAQ , N )
STK_ALLOC(IBQ , N )
STK_ALLOC(ISE , NK )
STK_ALLOC(ISIG , NK )
STK_ALLOC(PAC , N*NK )
STK_ALLOC(PAD , N*NK )
STK_ALLOC(PAR , N*NK )
STK_ALLOC(PAR1 , N*NK )
STK_ALLOC(PAR2 , N*NK )
STK_ALLOC(PAZERO , N*NK )
STK_ALLOC(IUFLUX , N*(NK+1) )
STK_ALLOC(IVFLUX , N*(NK+1) )
STK_ALLOC(ITFLUX , N*(NK+1) )
STK_ALLOC(IQFLUX , N*(NK+1) )
STK_ALLOC(IGAM0 , N*(NK+1) )
STK_ALLOC(IFSLOFLX , N )
STK_ALLOC(IQCLOCAL , N*NK )
STK_ALLOC(IFICELOCAL, N*NK )
*
*
* normalization factors for vertical diffusion in sigma coordinates
*
RSG = (GRAV/RGASD)
DO K=1,NK-1
*VDIR NODEP
DO J=1,N
GAM0(J,K) = RSG*SELOC(J,K)/V(TVE+jk(J,K))
KMSG(J,K) = V(KM +JK(J,K))*GAM0(J,K)**2
KTSG(J,K) = V(KT +JK(J,K))*GAM0(J,K)**2
END DO
END DO
CALL VSREC(RGAM0,GAM0,N*(NK-1))
DO K=1,NK-1
*VDIR NODEP
DO J=1,N
V(GTE+JK(J,K)) = V(GTE+JK(J,K))*RGAM0(J,K)
V(GQ +JK(J,K)) = V(GQ +JK(J,K))*RGAM0(J,K)
V(GQL+JK(J,K)) = V(GQL+JK(J,K))*RGAM0(J,K)
END DO
END DO
*
* "SLOW START"
*
DO J=1,N
FSLOFLX(J) = 1.
END DO
*
IF (NSLOFLUX.GT.0) THEN
DO J=1,N
* OVER THE CONTINENT, WE PERFORM A SLOW START FOR
* FLUXES "FC" AND "FV" UNTIL TIMESTEP "NSLOFLUX",
* BECAUSE OF IMBALANCES BETWEEN ANALYSES OF TEMPERATURE
* AT THE GROUND AND JUST ABOVE THE SURFACE.
IF (F(MG+J-1).GT.0.5) THEN
* MAX IS USED TO AVOID DIVISION BY ZERO
FSLOFLX(J) = (FLOAT(KOUNT-1))/MAX(FLOAT(NSLOFLUX),1.)
IF (KOUNT.EQ.0) FSLOFLX(J) = 0.0
ENDIF
END DO
ENDIF
*
*
*VDIR NODEP
DO J=1,N
AQ(J)=-RSG/(F(TSURF+J-1)*(1. +
+ DELTA * F(QSURF+ (indx_agrege-1)*N + J-1)))
BMSG(J) = V(BM +J-1)*AQ(J)
BTSG(J) = V(BT + (indx_agrege-1)*N +J-1)*AQ(J)
V(ALFAT+J-1) = V(ALFAT+J-1)*AQ(J)*FSLOFLX(J)
V(ALFAQ+J-1) = V(ALFAQ+J-1)*AQ(J)*FSLOFLX(J)
END DO
*
*
DO K=1,NK+1
DO J=1,N
GAM0(J,K) = 0.0
END DO
END DO
*
DO K=1,NK
SE (K) = SELOC(1,K)
SIG(K) = SG (1,K)
END DO
*
* DIFFUSION VERTICALE IMPLICITE
*
gsrt = grav/(rgasd*250.)
DO 1 K=1,NK
*VDIR NODEP
DO 1 J=1,N
ZERO(J,K)=0.
* couche eponge
IF (SPONMOD(J)*EPONGE(K).GT.0.0) THEN
V(KM+JK(J,K)) = SPONMOD(J)*EPONGE(K)
KMSG(J,K) = MAX( KMSG(J,K),
+ V(KM+JK(J,K)) * (seloc(j,k)*gsrt)**2 )
ENDIF
1 CONTINUE
*
* DIFFUSE U
*
CALL DIFUVDFJ
(TU,UU,KMSG,ZERO,ZERO,ZERO,BMSG,SG,SEloc,TAU,
+ 1,1.,C,D,R,R1,N,N,N,NK)
*
CALL ATMFLUX
(UFLUX,UU,TU,KMSG,GAM0,ZERO(1,NK),
1 BMSG,PS,T,Q,TAU,SG,
1 SELOC,C,D,0,N,NK,TRNCH)
*
*
* DIFFUSE V
*
CALL DIFUVDFJ
(TV,VV,KMSG,ZERO,ZERO,ZERO,BMSG,SG,SEloc,TAU,
+ 1,1.,C,D,R,R1,N,N,N,NK)
*
CALL ATMFLUX
(VFLUX,VV,TV,KMSG,GAM0,ZERO(1,NK),
1 BMSG,PS,T,Q,TAU,SG,
1 SELOC,C,D,1,N,NK,TRNCH)
*
*
* DIFFUSE W (OMEGAP)
*
if (diffuw) then
CALL DIFUVDFJ
(TW,W,KMSG,ZERO,ZERO,ZERO,ZERO,SG,SEloc,TAU,
+ 1,1.,C,D,R,R1,N,N,N,NK)
endif
*
* DIFFUSE MOISTURE
*
IF(EVAP) THEN
DO J=1,N
AQ(J) = V(ALFAQ+J-1)
BQ(J) = BTSG(J)
END DO
*
ELSE
*
* LA CLE 'EVAP' EST VALIDE POUR PARAMETRAGES CLEF ET SIMPLIFIES
* METTRE TERMES DE SURFACE A ZERO
DO J=1,N
AQ(J) = 0.0
BQ(J) = 0.0
END DO
*
ENDIF
*
IF(IFLUVERT.EQ.3) THEN
* diffuse conservative variable qw
*
* QCBL contains the implicit cloud water from previous time step.
DO K=1,NK
DO J=1,N
QCLOCAL(J,K) = MAX( 0.0 , F(QCBL+JK(J,K)) )
Q(J,K) = Q(J,K) + MAX( 0.0 , QCLOCAL(J,K) )
END DO
END DO
*
ENDIF
*
CALL DIFUVDFJ
(TQ,Q,KTSG,V(GQ),ZERO,AQ,BQ,SG,SEloc,TAU,
+ 1,1.,C,D,R,R1,N,N,N,NK)
*
IF (.NOT.WET) THEN
DO J=1,N*NK
TQ(J,1) = 0.0
END DO
ENDIF
*
CALL ATMFLUX
(QFLUX,Q,TQ,KTSG,GAM0,
1 AQ,BQ,PS,T,Q,TAU,SG,
1 SELOC,C,D,2,N,NK,TRNCH)
*
*
*
* DIFFUSE L'EAU LIQUIDE OPTIONNELLEMENT
*
if( ISHLCVT(1).eq.4 ) then
*
DO J=1,N
BQ(J) = 0.
END DO
*
CALL DIFUVDFJ
(TL,QL,KTSG,V(GQL),ZERO,ZERO,BQ,SG,SEloc,TAU,
+ 1,1.,C,D,R,R1,N,N,N,NK)
*
endif
*
* DIFFUSE TEMPERATURE
*
IF (CHAUF) THEN
DO J=1,N
AQ(J) = V(ALFAT+J-1)
BQ(J) = BTSG(J)
END DO
*
ELSE
*
* LA CLE 'CHAUF' EST VALIDE POUR PARAMETRAGES CLEF ET SIMPLIFIES
* METTRE TERMES DE SURFACE A ZERO
DO J=1,N
AQ(J) = 0.0
BQ(J) = 0.0
END DO
*
ENDIF
*
*
IF(IFLUVERT.EQ.3) THEN
* diffuse conservative variable thetal
*
CALL FICEMXP
(FICELOCAL,R1,R2,TM,N,N,NK)
DO K=1,NK
DO J=1,N
* copy current T in R2 for later use in BAKTOTQ
R2(J,K) = T(J,K)
T(J,K) = T(J,K)
1 - ((CHLC+FICELOCAL(J,K)*CHLF)/CPD)
1 *MAX( 0.0 , QCLOCAL(J,K) )
T(J,K) = T(J,K) * SG(J,K)**(-CAPPA)
END DO
END DO
ENDIF
*
CALL DIFUVDFJ
(TT,T,KTSG,V(GTE),ZERO,AQ,BQ,SG,SEloc,TAU,
+ 1,1.,C,D,R,R1,N,N,N,NK)
*
*
IF(IFLUVERT.EQ.3) THEN
* back to non-conservative variables T and Q
* and their tendencies
*
CALL BAKTOTQ2
(T, Q, QCLOCAL, R2, SG, PS, TM, FICELOCAL,
1 TT, TQ, TL, V(TVE), F(QCBL),
1 F(FNN), F(FN), F(ZN), F(ZD),
1 TAU, N, N, NK)
*
*
ENDIF
*
*
* Counter-gradient term = -g/cp
* because temperature is used in
* subroutine DIFUVDF (instead of
* potential temperature).
*
DO K=1,NK+1
DO J=1,N
GAM0(J,K) = -GRAV/CPD
END DO
END DO
*
CALL ATMFLUX
(TFLUX,T,TT,KTSG,GAM0,
1 AQ,BQ,
1 PS,T,Q,TAU,SG,SELOC,C,D,3,N,NK,TRNCH)
*
*
* DIFFUSE AVEC CONDENSATION OPTIONNELLEMENT
*
IF( ISHLCVT(1).eq.4 ) THEN
*
* soit avec condensation seulement
*
* lscp permet de convertir les variables du type
* ps*dq/dt en flux d'energie (W/m2)
lscp = chlc/cpd
*
if( shconly ) then
*
DO k = 1, NK
DO j = 1, N
DQ = min(TL(j,k),-QL(j,k)/TAU)+QL(j,k)/TAU
TQ(j,k) = TQ(j,k) + DQ
TL(j,k) = max( TL(j,k) , - QL(j,k)/TAU )
TT(j,k) = TT(j,k) - lscp*DQ
END DO
END DO
*
else
*
* soit avec condensation/evaporation
*
DO k = 1, NK
DO j = 1, N
DQ = TL(j,k)
TQ(j,k) = TQ(j,k) + DQ
TL(j,k) = 0.0
TT(j,k) = TT(j,k) - lscp*DQ
END DO
END DO
endif
*
ENDIF
*
* CALCUL FINAL DU BILAN DE SURFACE
*
*VDIR NODEP
do j = 1, n
rhortvsg = ps(j)/grav
mrhocmu = ps(j)/grav*bmsg(j)
tplusnk = t (j,nk)+tau*tt(j,nk)
qplusnk = q (j,nk)+tau*tq(j,nk)
uplusnk = uu(j,nk)+tau*tu(j,nk)
vplusnk = vv(j,nk)+tau*tv(j,nk)
*
* RECALCULER LES FLUX PARTOUT
*
* USTRESS et VSTRESS sont calcules apres diffusion car
* on utilise toujours une formulation implicite pour
* la condition aux limites de surface pour les vents.
* Par contre, la formulation est explicite pour
* la temperature et l'humidite.
* A noter que, puisque la formulation est explicite,
* on agrege les flux FC et FV dans le sous-programme
* AGREGE; on pourrait aussi les calculer ici en tout
* temps, mais on ne le fait que pendant le "depart lent".
* Si on utilisait une formulation implicite pour
* FC et FV, il faudrait que ces derniers soient
* toujours calcules ici.
*
IF (NSLOFLUX.GT.0.AND.KOUNT.LE.NSLOFLUX) THEN
v(fc+(indx_agrege-1)*N+j-1) = CPD * rhortvsg *
$ (v(alfat+j-1)+btsg(j)*tplusnk)
v(fv+(indx_agrege-1)*N+j-1) = CHLC * rhortvsg *
$ (v(alfaq+j-1)+btsg(j)*qplusnk)
ENDIF
*
v(ustress+j-1) = -mrhocmu*uplusnk
v(vstress+j-1) = -mrhocmu*vplusnk
f(fq+j-1) = -mrhocmu*sqrt(uplusnk**2 + vplusnk**2)
*
IF (.NOT.CHAUF) v(FC+(indx_agrege-1)*N+j-1) = 0.0
IF (.NOT.EVAP ) v(FV+(indx_agrege-1)*N+j-1) = 0.0
*
A(j) = f(FDSI+j-1)*f(EPSTFN+j-1)/STEFAN
V(FNSI+J-1) = A(j)-f(EPSTFN+j-1)*f(TSRAD+j-1)**4
V(FL +J-1) = V(FNSI +j-1) +
$ f(FDSS +j-1) -
$ V(FV+(indx_agrege-1)*n+j-1) -
$ V(FC+(indx_agrege-1)*n+j-1)
enddo
*
* DIAGNOSTICS
*
CALL SERGET ('HEURE', HEURSER, 1, IERROR )
CALL SERXST
( TU, 'TU', TRNCH, N, 0.0, 1.0, -1 )
CALL SERXST
( TV , 'TV', TRNCH, N, 0.0, 1.0, -1 )
CALL MVZNXST(TU,TV,'TU','TV',TRNCH, N, 1., -1, stack )
*
CALL SERXST
( TT, 'TF', TRNCH, N, 0.0, 1.0, -1 )
CALL MZONXST ( TT, 'TF', TRNCH, N, HEURSER,PS, -2, stack )
CALL SERXST
( TQ, 'QF', TRNCH, N, 0.0, 1.0, -1 )
CALL MZONXST ( TQ, 'QF', TRNCH, N, HEURSER,PS, -2, stack )
CALL SERXST
( TL, 'LF', TRNCH, N, 0.0, 1.0, -1 )
CALL MZONXST ( TL, 'LF', TRNCH, N, HEURSER,PS, -2, stack )
*
CALL SERXST
(F(FQ), 'FQ', TRNCH, N, 0., 1., -1 )
CALL MZONXST (F(FQ), 'FQ', TRNCH, N, HEURSER,1., -1, stack )
*
CALL SERXST
(V(FC+(indx_soil -1)*N), 'F4', TRNCH, N, 0., 1., -1 )
CALL MZONXST (V(FC+(indx_soil -1)*N), 'F4', TRNCH, N, HEURSER,1., -1, stack )
CALL SERXST
(V(FC+(indx_glacier-1)*N), 'F5', TRNCH, N, 0., 1., -1 )
CALL MZONXST (V(FC+(indx_glacier-1)*N), 'F5', TRNCH, N, HEURSER,1., -1, stack )
CALL SERXST
(V(FC+(indx_water -1)*N), 'F6', TRNCH, N, 0., 1., -1 )
CALL MZONXST (V(FC+(indx_water -1)*N), 'F6', TRNCH, N, HEURSER,1., -1, stack )
CALL SERXST
(V(FC+(indx_ice -1)*N), 'F7', TRNCH, N, 0., 1., -1 )
CALL MZONXST (V(FC+(indx_ice -1)*N), 'F7', TRNCH, N, HEURSER,1., -1, stack )
CALL SERXST
(V(FC+(indx_agrege -1)*N), 'FC', TRNCH, N, 0., 1., -1 )
CALL MZONXST (V(FC+(indx_agrege -1)*N), 'FC', TRNCH, N, HEURSER,1., -1, stack )
*
CALL SERXST
(V(FV+(indx_soil -1)*N), 'H4', TRNCH, N, 0., 1., -1 )
CALL MZONXST (V(FV+(indx_soil -1)*N), 'H4', TRNCH, N, HEURSER,1., -1, stack )
CALL SERXST
(V(FV+(indx_glacier-1)*N), 'H5', TRNCH, N, 0., 1., -1 )
CALL MZONXST (V(FV+(indx_glacier-1)*N), 'H5', TRNCH, N, HEURSER,1., -1, stack )
CALL SERXST
(V(FV+(indx_water -1)*N), 'H6', TRNCH, N, 0., 1., -1 )
CALL MZONXST (V(FV+(indx_water -1)*N), 'H6', TRNCH, N, HEURSER,1., -1, stack )
CALL SERXST
(V(FV+(indx_ice -1)*N), 'H7', TRNCH, N, 0., 1., -1 )
CALL MZONXST (V(FV+(indx_ice -1)*N), 'H7', TRNCH, N, HEURSER,1., -1, stack )
CALL SERXST
(V(FV+(indx_agrege -1)*N), 'FV', TRNCH, N, 0., 1., -1 )
CALL MZONXST (V(FV+(indx_agrege -1)*N), 'FV', TRNCH, N, HEURSER,1., -1, stack )
*
CALL SERXST
( A, 'FI', TRNCH, N, 0., 1., -1 )
CALL MZONXST ( A, 'FI', TRNCH, N, HEURSER,1., -1, stack )
CALL SERXST
(V(FNSI),'SI', TRNCH, N, 0.,1.,-1 )
CALL MZONXST (V(FNSI),'SI', TRNCH, N, HEURSER,1., -1, stack )
CALL SERXST
(V(FL) ,'FL', TRNCH, N, 0., 1., -1 )
CALL MZONXST (V(FL) ,'FL', TRNCH, N, HEURSER,1., -1, stack )
*
*
* KM ET KT DEFINIS AU NIVEAU NK POUR LES DIAGNOSTICS
*VDIR NODEP
DO J=1,N
V(KM+jk(J,NK )) = V(KM+jk(J,NK-1))
V(KT+jk(J,NK )) = V(KT+jk(J,NK-1))
END DO
*
* DIAGNOSTICS POUR LE MODELE CTM
IF (IFLUVERT.EQ.2.OR.IFLUVERT.EQ.3) THEN
CALL CTMDIAG
(DB,F,V,DSIZ,FSIZ,VSIZ,N,NK)
CALL SERXST
( v(ue), 'UE', TRNCH, N, 0.0, 1.0, -1 )
ENDIF
*
*
CALL SERXST
( V(KM), 'KM', TRNCH, N, 0.0, 1.0, -1 )
CALL MZONXST ( V(KM), 'KM', TRNCH, N, HEURSER,1.0, -1, stack )
CALL SERXST
( V(KT), 'KT', TRNCH, N, 0.0, 1.0, -1 )
CALL MZONXST ( V(KT), 'KT', TRNCH, N, HEURSER,1.0, -1, stack )
*
*
* RELACHEMENT DES POINTEURS
STK_DEALL(PAA)
STK_FREE
*
RETURN
END