!-------------------------------------- LICENCE BEGIN ------------------------------------
!Environment Canada - Atmospheric Science and Technology License/Disclaimer,
! version 3; Last Modified: May 7, 2008.
!This is free but copyrighted software; you can use/redistribute/modify it under the terms
!of the Environment Canada - Atmospheric Science and Technology License/Disclaimer
!version 3 or (at your option) any later version that should be found at:
!http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html
!
!This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
!without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
!See the above mentioned License/Disclaimer for more details.
!You should have received a copy of the License/Disclaimer along with this software;
!if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec),
!CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca
!-------------------------------------- LICENCE END --------------------------------------
***S/P SERIE - PROCESSEUR DE SERIES TEMPORELLES DES MODELES SEF, MC2 ET GEM
#include "phy_macros_f.h"
SUBROUTINE SERIE(INPUNIT,SERSTD,STATUS,ECHO,COMPRESS,HOUR64, 1,16
$ F_DIAG,F_NIG,F_NK_HYBM,F_NK_HYBT,F_NCOEF)
use Grid_Descriptors, only:grid_descriptor,gd_new,gd_print,gd_write,GD_OK
IMPLICIT NONE
INTEGER INPUNIT,SERSTD,STATUS,F_NIG,F_NK_HYBM,
$ F_NK_HYBT,F_NCOEF
LOGICAL ECHO,COMPRESS,HOUR64,F_DIAG
*
*Author
* Robert Benoit(July 1984)
*
*Revision
* 001 Pierre Sarrazin(November 84)
* V1.1 Documentation
* Introduce modules CCARD,FNOM,FCLOS
* Exit error with comments
* 002 Jean Cote(February 85)
* RFE-SEF Compatible version
* Dynamic allocation of memory
* 003 V.Alex (February 87)
* Standard verification
* 004 M. Lepine - RFE model code revision project (Mar 87)
* Organization of code
* 006 J. Cote (Mar 88) Other models that SEF and FE allowed
* by decoding DGRW before ETIKET
* 005 R Benoit - Remove error due to PHYS(20,NPHYSP) when
* number of points >20 (Dec 88)
* 007 R. Benoit (Nov 89) Correction of a bug for short
* series(4 time steps)
* 008 N. Brunet (May91)
* New version of thermodynamic functions
* and file of constants
* 009 B. Bilodeau (July 1991)- Adaptation to UNIX
* 010 B. Bilodeau (August 1992)-
* Eliminate the variable DYNAM and test only
* the first letter of the label
* 011 G. Pellerin (April 1992)- Adaptation to PASTEMP
* read variables directly in vector NOMVAR
* and code clean-up for zonal diagnostics
* 012 G. Pellerin (Dec 1994) - Add 0.5 to ITYP to calculate MG
* 013 B. Bilodeau (Jan 1997) - PTOIT and ETATOIT for hybrid
* coordinates. Wind rotation for GEF.
* 014 B. Bilodeau (June 1997) - Maximum number of levels : 75.
* Maximum number of variables : 256.
* 015 S. Chamberland and B. Bilodeau (June 1997) -
* IBM32 to IEEE format conversion
* 016 B. Bilodeau (July 1998) - Automate IBM32 to IEEE conversion
* 017 B. Bilodeau (Sept 1999) - Add MG, GL and SD
* 018 B. Bilodeau (Sept 2000) - Replace MEMOIR by STKMEMW for SX5
* 019 B. Bilodeau (Jan 2001) - Allocatable arrays
* 020 B. Bilodeau (Feb 2002) - Allocate PHYSE in serie; write some
* records in E32 format instead of R32
* 021 B. Bilodeau (Jul 2002) - Optimization
* 022 K. Winger (Apr 2006) - Adapt to time series version 2.00
* (12 characters etiket, real*8 heure,
* account for accumulators, and HY record added)
* 023 K. Winger (Jul 2006) - Account for 4 character variables
* 024 B. Bilodeau (Mar 2007) - Compression
* 025 R. McTaggart-Cowan (Mar 2009) - Use ptop, pref and coef for vertical
* coordinate description
*
*Object
* to process time-series of RFE and SEF models. It reads the
* sequential file generated by FEMAIN (RFE) or REXSEF (SEF)
* and reformats the data in a standard RPN file for input to
* graphic programs.
*
*Arguments
*
* - Input -
* INPUNIT unit number attached to sequential input file
* SERSTD unit number attached to standard RPN output file
*
* - Output -
* STATUS =1 if no records read
* =2 if no surface variables
* =4 if too much space is required
*
* - Input -
* ECHO .TRUE. to write out debug statements
* .FALSE. to not write debug statements
* COMPRESS .TRUE. compressed output
* .FALSE. uncompressed output
* HOUR64 .TRUE. to write a 64-bit real (double) for the forecast hour
* .FALSE. to write a 32-bit real (float) for the forecast hour
* F_DIAG .TRUE. to run diagnostics
* .FALSE. to shut off diagnostic calculation
*
*
*Note
* Reference: "PASTEMP" J.Caveen October 1989
*
*parametres
*
#include "maxlev.cdk"
*
*IMPLICITES
#include "sercmdk.cdk"
*
*MODULES
*
INTEGER FSTECR,FSTECR_S
EXTERNAL FSTECR,FSTECR_S
EXTERNAL SERPAT2
EXTERNAL SERFIN
EXTERNAL SERECRI2
INTEGER INDSERI
EXTERNAL INDSERI
EXTERNAL DIFUVD8
INTEGER HYBREF_TO_IG
EXTERNAL HYBREF_TO_IG
*
*NOTE
* REFERENCE: "GRAPHIQUES POUR LES DIAGNOSTIQUES PONCTUELS
* COMMUNICATION NO 6 GROUPE DU MODELE SPECTRAL" OCT 83.
**
*
* AUTOMATIC ARRAYS
integer, dimension(F_nig) :: ig
integer, dimension(F_nk_hybm) :: ip1m
integer, dimension(F_nk_hybt) :: ip1t
real, dimension(F_nk_hybm) :: hybm
real, dimension(F_nk_hybt) :: hybt
real, dimension(F_ncoef) :: rcoef
real(kind=8), dimension(F_nk_hybm) :: am_8,bm_8
real(kind=8), dimension(F_nk_hybt) :: at_8,bt_8
*
* VARIABLES ALLOUEES DYNAMIQUEMENT
*
REAL*8 , DIMENSION(:) , ALLOCATABLE:: HH8
REAL , DIMENSION(:) , ALLOCATABLE:: HH, STOK, DIAG
REAL , DIMENSION(:,:) , ALLOCATABLE:: PHYSE,SER_SFC,SER_PROF
REAL , DIMENSION(:,:,:) , ALLOCATABLE:: SERS_T
REAL , DIMENSION(:,:,:,:) , ALLOCATABLE:: SERP_T
*
INTEGER, PARAMETER :: STDOUT=6
*
INTEGER TMP,AL,MG,Z0,HS,CND,LAT,LON,GL,NE,MAP,SD,NIG
INTEGER NK_HYBM,NK_HYBT,NCOEF,VCODE,ERR
CHARACTER *4 NOMVAR(NVAR), MODELE*3
*
REAL DGRW,RGAS,GRAV
CHARACTER *8 ETIKET8
CHARACTER *12 ETIKET, ETIKMAJ
INTEGER DATE(14),NK,ITYP,NTYPES,IECR
CHARACTER *1 TV
REAL SH(LEVMAX) ,PHS
INTEGER I,K,L,M,LP,NT,NREC,NSKIP,IP2,NPAK,NPHYE,DATYP,VKIND
LOGICAL SATUES, SATUCO
REAL(KIND=8) :: PTOP_8,PREF_8
*
REAL DEGRAD ,scrap
REAL CONVERTI
REAL IG1,IG2,IG3,IG4,X1,X2
LOGICAL IBM32_2_IEEE
*
TYPE(GRID_DESCRIPTOR) :: gd
*
REWIND INPUNIT
*
NREC = 1
*
* CHAMPS PHYSIQUES INVARIANTS
*
NSKIP = 3
READ (inpunit,end=2) CONVERTI, NSTAT,
X (NAME(L),IJSTAT(L,1),JSTAT(L),L=1,NSTAT),
Y NPHYE,(NOMVAR(M),M=1,NPHYE),
Z NPROF,(PROFILS(M,1),M=1,NPROF),
T (DATE(K),K=1,14),ETIKET,NK,NIG,(IG(K),K=1,NIG),
W DGRW, RGAS, GRAV, SATUES, SATUCO,
X TSMOYHR, SRWRI, NK_HYBM,
Y (HYBM(M),AM_8(M),BM_8(M),M=1,NK_HYBM),NK_HYBT,
A (HYBT(M),AT_8(M),BT_8(M),M=1,NK_HYBT),NCOEF,
B (RCOEF(M),M=1,NCOEF),PTOP_8,PREF_8,VCODE
*
* INITIALISATION DE LA CLE IBM32_2_IEE
IBM32_2_IEEE = .TRUE.
IF (CONVERTI.EQ.100.) THEN
IBM32_2_IEEE = .FALSE.
ENDIF
*
IF (IBM32_2_IEEE) THEN
*
PRINT *
PRINT *,'****************************************************'
PRINT *,'* CONVERSION DU FORMAT IBM 32 BITS VERS IEEE *'
PRINT *,'****************************************************'
PRINT *
*
* CONVERSION DES REELS DU FORMAT IBM 32 BITS AU FORMAT IEEE
print*, 'STOP!!! 64 bit conversion unimplemented'
stop
!call ibm64_ieee(PTOP_8,1)
call ibm32_ieee(RCOEF,size(RCOEF))
call ibm32_ieee(DGRW,1)
call ibm32_ieee(RGAS,1)
call ibm32_ieee(GRAV,1)
*
ENDIF
*
NREC = NREC + 1
*
WRITE ( STDOUT , * ) 'NSTAT = ',NSTAT
WRITE ( STDOUT , * ) 'IJSTAT = ',(IJSTAT(L,1),L=1,NSTAT)
WRITE ( STDOUT , * ) 'JSTAT = ',(JSTAT(L),L=1,NSTAT)
WRITE ( STDOUT , * ) 'NK = ',NK,' HYBRID(M) = ',(HYBM(K),K=1,NK_HYBM)
WRITE ( STDOUT , * ) 'PTOP_8 ',PTOP_8,' RCOEF = ',RCOEF
WRITE ( STDOUT , * ) 'DGRW = ',DGRW,' RGAS = ',RGAS,' GRAV = ',GRAV
WRITE ( STDOUT , '(1X,I3,20(1X,A4))' )
Y NPHYE,(NOMVAR(M),M=1,NPHYE)
WRITE ( STDOUT , '(1X,I3,20(1X,A4))' )
Z NPROF,(PROFILS(M,1),M=1,NPROF)
WRITE ( STDOUT , '(1X,9HETIKET = ,A12)' ) ETIKET
WRITE ( STDOUT , 6060 ) DATE
6060 FORMAT(22H DATE-TIME GROUP ,2X,6I6,6A4,A1,I12)
*
WRITE(6,612)SATUES,SATUCO
612 FORMAT(/,10X,'SATUES,SATUCO=',2(L1,2X),/)
*
*--------------------------------------------------------------------
*
* ALLOCATE ARRAY PHYSE
ALLOCATE ( PHYSE(NSTAT,NPHYE) )
*
READ ( INPUNIT , END=2 ) HEURE,((PHYSE(L,M),L=1,NSTAT),M=1,NPHYE)
*
* CONVERSION DES REELS DU FORMAT IBM 32 BITS AU FORMAT IEEE
IF (ibm32_2_ieee) THEN
print*, 'STOP!!! 64 bit conversion unimplemented'
stop
!call ibm64_ieee(HEURE,1)
call ibm32_ieee(PHYSE,MXSTT*NPHYE)
ENDIF
*
WRITE ( STDOUT , * ) HEURE,((PHYSE(L,M),L=1,NSTAT),M=1,NPHYE)
*
* TROUVER LE NOMBRE DE PAS DE TEMPS SAUVES
*
1 READ ( INPUNIT , END=2 )
NREC = NREC + 1
GO TO 1
2 NT = NREC - NSKIP
*
IF ( NT.LE.0 ) THEN
STATUS = 1
RETURN
ENDIF
*
* POINTEURS DES CHAMPS PHYSIQUES
*
IF ( NPHYE .LE. 0 ) THEN
PRINT *,'NPHYE = ',NPHYE
STATUS = 2
RETURN
ELSE
*
MAP=indseri
('MA',nomvar,nphye)
LAT=indseri
('LA',nomvar,nphye)
LON=indseri
('LO',nomvar,nphye)
NE=indseri
('NE',nomvar,nphye)
GL=indseri
('GL',nomvar,nphye)
MG=indseri
('MG',nomvar,nphye)
HS=indseri
('HS',nomvar,nphye)
Z0=indseri
('ZP',nomvar,nphye)
AL=indseri
('AL',nomvar,nphye)
TMP=indseri
('TM',nomvar,nphye)
CND=indseri
('TP',nomvar,nphye)
SD=indseri
('SD',nomvar,nphye)
*
ENDIF
*
* VERIFIER SI CERTAINS CHAMPS MANQUENT
*
*
* CHARGER L'ENTETE
*
REWIND INPUNIT
DO 5 I=1,NSKIP-1
5 READ ( INPUNIT )
READ ( INPUNIT , END=2 ) CONVERTI, NSTAT,
X (NAME(L),IJSTAT(L,1),JSTAT(L),L=1,NSTAT),
Y NSURF,(SURFACE(M,1),M=1,NSURF),
Z NPROF,(PROFILS(M,1),M=1,NPROF),
T (DATE(K),K=1,14),ETIKET,NK,NIG,(IG(K),K=1,NIG),
W DGRW, RGAS, GRAV, SATUES, SATUCO,
X TSMOYHR, SRWRI, NK_HYBM,
Y (HYBM(M),AM_8(M),BM_8(M),M=1,NK_HYBM),
Z NK_HYBT,
A (HYBT(M),AT_8(M),BT_8(M),M=1,NK_HYBT),
B NCOEF,(RCOEF(M),M=1,NCOEF),
C PTOP_8,VCODE
*
* CONVERSION DES REELS DU FORMAT IBM 32 BITS AU FORMAT IEEE
IF (ibm32_2_ieee) THEN
print*, 'STOP!!! 64 bit conversion unimplemented'
stop
!call ibm64_ieee(PTOP_8,1)
call ibm32_ieee(RCOEF,size(RCOEF))
call ibm32_ieee(DGRW,1)
call ibm32_ieee(RGAS,1)
call ibm32_ieee(GRAV,1)
ENDIF
*
WRITE ( STDOUT , * ) 'NSTAT = ',NSTAT
WRITE ( STDOUT , * ) 'IJSTAT = ',(IJSTAT(L,1),L=1,NSTAT)
WRITE ( STDOUT , * ) 'JSTAT = ',(JSTAT(L),L=1,NSTAT)
WRITE ( STDOUT , * ) 'NK = ',NK,' HYBRID(M) = ',(HYBM(K),K=1,NK_HYBM)
WRITE ( STDOUT , * ) 'PTOP_8 = ',PTOP_8,' RCOEF = ',RCOEF
WRITE ( STDOUT , * ) 'TSMOYHR = ',TSMOYHR,' SRWRI = ',SRWRI
WRITE ( STDOUT , * ) 'DGRW = ',DGRW,' RGAS = ',RGAS,' GRAV = ',GRAV
WRITE ( STDOUT , '(1X,I3,20(1X,A4))' )
Y NSURF,(SURFACE(M,1),M=1,NSURF)
WRITE ( STDOUT , '(1X,I3,20(1X,A4))' )
Z NPROF,(PROFILS(M,1),M=1,NPROF)
WRITE ( STDOUT , '(1X,9HETIKET = ,A12)' ) ETIKET
WRITE ( STDOUT , 6060 ) DATE
*
WRITE ( STDOUT , 6060 ) DATE
*
* VERIFICATION DE L'ETIQUETTE
*
* CONVERSION DE L'ETIQUETTE EN MAJUSCULES
CALL LOW2UP(ETIKET,ETIKMAJ)
*
IF ( ETIKMAJ(1:1) .EQ. 'S' ) THEN
*
MODELE = 'SEF'
WRITE ( STDOUT , * ) 'MODELE SEF'
*
ELSE IF ( ETIKMAJ(1:1) .EQ. 'F' ) THEN
*
MODELE = 'EFR'
WRITE ( STDOUT , * ) 'MODELE EFR'
*
ELSE IF ( ETIKMAJ(1:1) .EQ. 'G' ) THEN
*
MODELE = 'GEF'
WRITE ( STDOUT , * ) 'MODELE GEF'
*
ELSE
*
* PAR DEFAUT, PAS DE ROTATION POUR LES AUTRES MODELES
*
ENDIF
*
* ALLOUER LA MEMOIRE
*
ALLOCATE ( HH8(NT) )
ALLOCATE ( HH(NT) )
ALLOCATE ( STOK(NT*NK) )
ALLOCATE ( DIAG(NT*NK) )
ALLOCATE ( SERS_T(NT,NSURF,NSTAT) )
ALLOCATE ( SERP_T(NK,NT,NPROF,NSTAT) )
*
*
* CHERCHER LES HEURES
*
REWIND INPUNIT
DO 6 I=1,NSKIP
6 READ ( INPUNIT )
DO 7 I=1,NT
READ ( INPUNIT) HH8(I)
*
* CONVERSION DES REELS DU FORMAT IBM 32 BITS AU FORMAT IEEE
IF (ibm32_2_ieee) THEN
print*, 'STOP!!! 64 bit conversion unimplemented'
stop
!call ibm64_ieee(HH8(I),1)
ENDIF
*
7 continue
WRITE ( STDOUT , * ) 'HEURES = ',(HH8(I),I=1,NT)
*
*
* AJOUTER L'HEURE INITIALE
*
DO 8 I=1,NT
8 HH8(I) = HH8(I) + dble(DATE(5))
WRITE ( STDOUT , * ) 'HEURES = ',(HH8(I),I=1,NT)
HH = real(HH8)
*
* WRITE LIST OF FORECAST HOURS
*
TV='T'
NPAK=-32
DATYP=5
IP2 =FLOAT(DATE(5))*100
IF ( HOUR64 ) then
IECR = FSTECR(HH8,STOK,-64,SERSTD,DATE(14),0,0,NT,1,1,
1 0,0,0,TV,'HH',ETIKET,'T',0,0,0,0,DATYP,.TRUE.)
ELSE
IECR = FSTECR(HH,STOK,NPAK,SERSTD,DATE(14),0,0,NT,1,1,
1 0,0,0,TV,'HH',ETIKET,'T',0,0,0,0,DATYP,.TRUE.)
ENDIF
*
* WRITE LIST OF STATION NAMES (64-bit limit in FSTD)
*
IECR = FSTECR_S(NAME,STOK,-8,SERSTD,DATE(14),0,0,
1 STN_STRING_LENGTH,NSTAT,1,0,0,0,TV,
2 'STNS',ETIKET,'T',0,0,0,0,7,.TRUE.)
*
* GENERATE HYBRID COORDINATE DESCRIPTION
*
vkind = 5 !hybrid coordinate
do i=2,size(hybm)
call convip(ip1m(i),hybm(i),vkind,+2,'',.false.)
enddo
do i=1,size(hybt)
call convip(ip1t(i),hybt(i),vkind,+2,'',.false.)
enddo
status = gd_new(self=gd, !descriptor instance
$ kind=vkind, !coordinate type
$ version=2, !staggered (see dynamics level.cdk)
$ nk=F_NK_HYBM-2, !number of vertical levels
$ ptop_8=PTOP_8, !pressure of model top
$ pref_8=PREF_8, !reference pressure
$ rcoef1=RCOEF(1), !first R-coefficient
$ rcoef2=RCOEF(2), !second R-coefficient
$ a_m_8=AM_8(2:), !momentum level A-values
$ b_m_8=BM_8(2:), !momentum level B-values
$ a_t_8=AT_8, !thermodynamic level A-values
$ b_t_8=BT_8, !thermodynamic level B-values
$ ip1_m=ip1m(2:), !list of IP1s for momentum levels
$ ip1_t=ip1t) !list of IP1s for thermodynamic levels
if (status /= GD_OK) then
write(STDOUT,*) 'WARNING: grid descriptor constructor returned error ',status
else
status = gd_print(gd,stdout=STDOUT)
status = gd_write(gd,unit=serstd,format='fst')
if (status /= GD_OK) then
write(STDOUT,*) 'WARNING: error writing grid descriptor: ',status
endif
endif
*
* OUTPUT A LIST OF HYBRID COORDINATES FOR PLOTTING
*
IECR = FSTECR(HYBT,STOK,NPAK,SERSTD,DATE(14),0,0,size(HYBT),1,1,
1 0,0,0,TV,'SH',ETIKET,'T',0,0,0,0,DATYP,.TRUE.)
IECR = FSTECR(HYBM,STOK,NPAK,SERSTD,DATE(14),0,0,size(HYBM),1,1,
1 0,0,0,TV,'SV',ETIKET,'T',0,0,0,0,DATYP,.TRUE.)
*
*-----------------------------------------------------------------
*
DEGRAD = ACOS ( -1.0 )/180.0
*
*
REWIND INPUNIT
DO 9 K=1,NSKIP
9 READ ( INPUNIT ) scrap
*
DO 10 I=1,NT
*
READ ( INPUNIT ) HEURE,((SERS(LP,M),LP=1,NSTAT),M=1,NSURF),
X (((SERP(K,LP,M),K=1,NK),LP=1,NSTAT),M=1,NPROF)
*
IF (ibm32_2_ieee) THEN
print*, 'STOP - 64-bit conversion unimplenented'
stop
!call ibm64_ieee(HEURE,1)
call ibm32_ieee(SERS,MXSTT*NSURF)
call ibm32_ieee(SERP,MXNVO*MXSTT*NPROF)
ENDIF
*
IF (ECHO) THEN
WRITE (STDOUT,*) ' HEURE=',HEURE
DO L=1,NSTAT
WRITE (STDOUT,*) ' STATION NO.',L
WRITE (STDOUT,*) ' SURFACES=',(SERS(L,M),M=1,NSURF)
DO 20 M=1,NPROF
20 WRITE (STDOUT,*) ' PROFIL NO.=',M,' ',(SERP(K,L,M),K=1,NK)
END DO
ENDIF
*
* TRANSFERER SERIES DE POINTS A TEMPS
* TRANSFERER SERIES DE POINTS A TEMPS
*
CALL SERPAT2
( SERS_T , SERP_T , I , NT , NK ,
+ NSURF, NPROF, NSTAT )
*
*
10 CONTINUE
*
*
DO 100 L=1,NSTAT
*
* BOUCLE SUR LES POINTS (DO 100)
* L=POINT, I=TEMPS
*
* FINALISER LES SERIES EN TEMPS
*
CALL SERFIN
( SERS_T(1,1,L) , SERP_T(1,1,1,L) , SURFACE , PROFILS ,
1 NT , NK , NSURF , NPROF ,
2 DGRW , PHYSE(L,MAP) , PHYSE(L,LAT), PHYSE(L,LON),
3 DEGRAD, MODELE, IG)
*
* ACCOUNT FOR ACCUMULATORS IN CASE THEY WERE
* NOT RESET TO ZERO EVERY TIME SERIES OUTPUT TIME STEP
*
IF (TSMOYHR > 0 .and. SRWRI > 0)
1 CALL SERACC
(SERS_T(1,1,L),HH8,NSURF,NT,SURFACE,TSMOYHR,SRWRI)
*
* ECRIRE SERIES POUR CE POINT SUR SERSTD
*
CALL SERECRI2
(SERS_T(1,1,L),SERP_T(1,1,1,L),SERSTD,NSURF,
1 NPROF,NT,SURFACE,PROFILS,L,PHYSE(L,LAT),PHYSE(L,LON),
2 STOK,size(AT_8),AT_8,BT_8,real(PTOP_8),DIAG,DATE(14),
3 ETIKET,FLOAT(DATE(5)), NK, SATUES, SATUCO, COMPRESS, F_DIAG)
*
*
*
100 CONTINUE
*
*
IECR = FSTECR (PHYSE(1,MG),STOK,NPAK,serstd,date(14),0,0,NSTAT,
1 1,1,0,IP2,0,TV,'MG',ETIKET,'Y',0,IP2,0,0,DATYP,.FALSE.)
*
* CARACTERISTIQUES DU SOL DANS TEMPORAIRES POUR STOCKAGE
*
DO 110 l=1,NSTAT
*
ITYP=PHYSE(L,MG) + 0.5
IF (ITYP.LE.0) THEN
PHS=PHYSE(L,GL)
ELSE
PHS=PHYSE(L,HS)
IF (PHS .LT. 0) PHS = 0
ENDIF
PHYSE(L,HS)=PHS
*
IF(ITYP.LE.0) THEN
IF(PHYSE(L,GL).LT.0.9) THEN
NTYPES=0
ELSE
NTYPES=2
ENDIF
ELSE IF(ITYP.GE.1) THEN
IF(PHYSE(L,NE).GT.0.) THEN
NTYPES=1
ELSE
NTYPES=-1
ENDIF
ENDIF
PHYSE(L,MG)=NTYPES
PHYSE(L,TMP)=PHYSE(L,TMP)-273.15
PHYSE(L,Z0)=MAX(0.,PHYSE(L,Z0))
*
110 CONTINUE
*
* ECRITURE DES ENREGISTREMENTS SUR serstd
*
*
IECR = FSTECR (PHYSE(1,LAT),STOK,NPAK,serstd,date(14),0,0,NSTAT,
1 1,1,0,IP2,0,TV,'^^',ETIKET,'T',0,0,0,0,DATYP,.FALSE.)
*
IECR = FSTECR (PHYSE(1,LON),STOK,NPAK,serstd,date(14),0,0,NSTAT,
1 1,1,0,IP2,0,TV,'>>',ETIKET,'T',0,0,0,0,DATYP,.FALSE.)
*
IECR = FSTECR (PHYSE(1,MG),STOK,NPAK,serstd,date(14),0,0,NSTAT,
1 1,1,0,IP2,0,TV,'GS',ETIKET,'Y',0,IP2,0,0,DATYP,.FALSE.)
*
IECR = FSTECR (PHYSE(1,HS),STOK,NPAK,serstd,date(14),0,0,NSTAT,
1 1,1,0,IP2,0,TV,'HS',ETIKET,'Y',0,IP2,0,0,DATYP,.FALSE.)
*
IECR = FSTECR (PHYSE(1,AL),STOK,NPAK,serstd,date(14),0,0,NSTAT,
1 1,1,0,IP2,0,TV,'AL',ETIKET,'Y',0,IP2,0,0,DATYP,.FALSE.)
*
IECR = FSTECR (PHYSE(1,TMP),STOK,NPAK,serstd,date(14),0,0,NSTAT,
1 1,1,0,IP2,0,TV,'TP',ETIKET,'Y',0,IP2,0,0,DATYP,.FALSE.)
*
IECR = FSTECR (PHYSE(1,Z0),STOK,NPAK,serstd,date(14),0,0,NSTAT,
1 1,1,0,IP2,0,TV,'Z0',ETIKET,'Y',0,IP2,0,0,DATYP,.FALSE.)
*
IECR = FSTECR (PHYSE(1,CND),STOK,NPAK,serstd,date(14),0,0,NSTAT,
1 1,1,0,IP2,0,TV,'PS',ETIKET,'Y',0,IP2,0,0,DATYP,.FALSE.)
*
IECR = FSTECR (PHYSE(1,SD),STOK,NPAK,serstd,date(14),0,0,NSTAT,
1 1,1,0,IP2,0,TV,'SD',ETIKET,'Y',0,IP2,0,0,DATYP,.FALSE.)
*
IECR = FSTECR (PHYSE(1,GL),STOK,NPAK,serstd,date(14),0,0,NSTAT,
1 1,1,0,IP2,0,TV,'GL',ETIKET,'Y',0,IP2,0,0,DATYP,.FALSE.)
*
*
* ------------------------------------------------------
*
* DESALLOUER LA MEMOIRE
*
DEALLOCATE (HH8 )
DEALLOCATE (HH )
DEALLOCATE (STOK )
DEALLOCATE (DIAG )
DEALLOCATE (PHYSE)
DEALLOCATE (SERS_T )
DEALLOCATE (SERP_T )
*
RETURN
END