source: trunk/MESOSCALE/LMDZ.MARS/libf_gcm/bibio/mywrite.F @ 3553

Last change on this file since 3553 was 57, checked in by aslmd, 14 years ago

mineur LMD_MM_MARS: ajout du GCM ancienne physique, systeme maintenant complet sur SVN (ne manque que la base de donnees d'etats initiaux)

File size: 5.1 KB
Line 
1      SUBROUTINE mywrite(champ,icount,titre,unit,format,nom
2     &                  , entete, date0, date, deltpas, nbeta
3     &                  , deltajour, filenum, files)
4C----------------------------------------------------------
5C Subroutine qui ecrit les fichiers dans le format de transfert
6C vers le LMD.
7C format etabli par Zhao-Xin Li, Frederique Hourdin, Emmanuelle Cohen-Solal,
8C Jan Polcher . Il peut etre utilise pour sortire  des evolutions
9C temporelles, des champs 2D (iim,jjm ou jjm,llm) ou des champs 3D.
10C le character # place devant le format determine la fin de la
11C description du champ et permet eventulellement de rajouter
12C des informations (avant le #).
13C le programme de lecture lit , dans la description, les variables
14C qu'il connait et saute apres jusquau #. A partir de la
15C il commence a lire le champ dans le format specifie.
16c------------------------------------------------------------
17C       ARGUMENTS
18C       +++++++++
19C champ: REAL (icount)
20C        champ contenant les valeurs et de longeur icount
21C icount: INTEGER
22C         nombre d'element dans le champ
23C titre: CHARACTER*100
24C        nom d'ecrivant le champ
25C unit: CHARACTER*20
26C       unites du champ
27C format: CHARACTER*20
28C         format dans le quel le champ doit etre ecrit.
29C         au choix:
30C                  - tous les format FORTRAN
31C                  - compactage de L.Li (zxliN) ou N peut valoir 1, 2 ou 3
32C nom: CHARACTER*20
33C      nom du fichier dans le quel le champ sera ecris, eventuellement
34C      avec directory (ex: evol/tsol)
35C entete: CHARACTER*100
36C         une entete du fichier pouvant par exemple decrire le run
37C date0: CHARACTER*8
38C        date de depart de la moyenne ou de l'evolution temporelle que contient
39C        le fichier
40C date : CHARACTER*8
41C        date de fin de la moyenne ou de l'evolution temporelle que contient
42C        le fichier
43C deltpas: INTEGER (bandmax)
44C          decript le nombre de pas de temps entre deux sorties pour chamque
45C          bande (necesaire pour les evolutions temporelles)
46C nbeta: INTEGER (bandmax)
47C        donne le nombre d'etas par bande (necesaire pour les evolutions
48C        temporelles)
49C deltajour: REAL (bandmax)
50C             l'ecart en jours des iscriptions sur chaque bande (necesaire
51C             pour les evolutions temporelles)
52C filenum: INTEGER
53C          nombre d'elements dans la liste files des champs desires
54C          si filenum = 0 alors tous les champs sont sortis 
55C files: CHARACTER*20 (100)
56C        list des champ que l'on desire sortire
57C
58C        PARAMETER
59C        +++++++++
60C bandmax: INTEGER
61C          le nombre maximale que peut traiter le programme
62C
63
64
65      IMPLICIT NONE
66
67      INTEGER bandmax
68      PARAMETER (bandmax = 24)
69      INTEGER icount,i,imin,imax
70      REAL champ(icount)
71      CHARACTER*100 titre, entete
72      CHARACTER unit*20,nom*80
73      CHARACTER*20 format
74      CHARACTER*8 date0, date
75      INTEGER deltpas(bandmax), nbeta(bandmax)
76      REAL deltajour(bandmax)
77      LOGICAL check, writeornot
78      INTEGER lnblnk,ismin,ismax
79      INTEGER filenum
80      CHARACTER*20 files(100)
81      EXTERNAL lnblnk,ismin,ismax, isitor, to36
82
83      check = .FALSE.
84
85      IF (filenum .EQ. 0) THEN
86        writeornot = .TRUE.
87      ELSE
88        CALL isitor(nom,writeornot,filenum, files)
89      ENDIF
90
91      IF (check) THEN
92        WRITE(*,*) 'MYWRITE:: writeornot=',writeornot
93      ENDIF
94
95      IF (writeornot) THEN
96      imin = ismin(icount,champ,1)
97      imax = ismax(icount,champ,1)
98      IF (check) THEN
99        WRITE(*,*) entete(1:lnblnk(entete))
100        WRITE(*,*) titre(1:lnblnk(titre))
101        WRITE(*,*) date0
102        WRITE(*,*) date
103        WRITE(*,*) unit(1:lnblnk(unit))
104        WRITE(*,*) deltpas, nbeta
105        WRITE(*,*) deltajour
106        WRITE(*,*) champ(imin),champ(imax)
107        WRITE(*,*) format(1:lnblnk(format))
108        WRITE(*,*) icount
109      ENDIF
110      WRITE(*,*) titre(1:lnblnk(titre)),'min,max:',
111     &           champ(imin),champ(imax),'  ',unit(1:lnblnk(unit))
112     
113      OPEN (unit=55, file=nom(1:lnblnk(nom)))
114      WRITE(55,'(a)') entete(1:lnblnk(entete))
115      WRITE(55,'(a)') titre(1:lnblnk(titre))
116      WRITE(55,'(a)') date0
117      WRITE(55,'(a)') date
118      WRITE(55,'(a)') unit(1:lnblnk(unit))
119      WRITE(55,*) deltpas, nbeta
120      WRITE(55,*) deltajour
121      WRITE(55,*) champ(imin),champ(imax)
122      WRITE(55,'(a)') '#'//format(1:lnblnk(format))
123      WRITE(55,*) icount
124
125      IF (check) THEN
126        WRITE(*,'('//format(1:lnblnk(format))//')') champ(1)
127      ENDIF
128
129      IF (format(1:lnblnk(format)) .EQ. 'zxli1') THEN
130        CALL to36 (champ,icount,champ(imin),champ(imax),55, 1)
131      ELSE
132        IF (format(1:lnblnk(format)) .EQ. 'zxli2') THEN
133          CALL to36 (champ, icount,champ(imin), champ(imax),55, 2)
134        ELSE
135          IF (format(1:lnblnk(format)) .EQ. 'zxli3') THEN
136            CALL to36 (champ,icount,champ(imin),champ(imax),55, 3)
137          ELSE
138            DO 2233 i=1,icount
139              WRITE(55,'('//format(1:lnblnk(format))//')')
140     &             champ(i)
141 2233       CONTINUE
142          ENDIF
143        ENDIF
144      ENDIF
145
146      CLOSE (unit=55)
147
148      ELSE
149        WRITE(*,*) 'FILE    ',nom,'WAS NOT WRITEN'
150      ENDIF
151     
152      RETURN
153      END
154
Note: See TracBrowser for help on using the repository browser.