[38] | 1 | SUBROUTINE writestd(champ,icount) |
---|
| 2 | |
---|
| 3 | c======================================================================= |
---|
| 4 | c |
---|
| 5 | c Auteurs: Jan Polcher, Frederic Hourdin |
---|
| 6 | c -------- |
---|
| 7 | c |
---|
| 8 | c Objet: |
---|
| 9 | c ------ |
---|
| 10 | c |
---|
| 11 | c Subroutine qui ecrit les fichiers dans le format de transfert |
---|
| 12 | c vers le LMD. |
---|
| 13 | c format etabli par : |
---|
| 14 | c Zhao-Xin Li, Frederic Hourdin, Emmanuelle Cohen-Solal, |
---|
| 15 | c Jan Polcher . |
---|
| 16 | c Il peut etre utilise pour sortire des evolutions |
---|
| 17 | c temporelles, des champs 2D (iim,jjm ou jjm,llm) ou des champs 3D. |
---|
| 18 | c le character # place devant le format determine la fin de la |
---|
| 19 | c description du champ et permet eventulellement de rajouter |
---|
| 20 | c des informations (avant le #). |
---|
| 21 | c le programme de lecture lit , dans la description, les variables |
---|
| 22 | c qu'il connait et saute apres jusquau #. A partir de la |
---|
| 23 | c il commence a lire le champ dans le format specifie. |
---|
| 24 | c |
---|
| 25 | c----------------------------------------------------------------------- |
---|
| 26 | c |
---|
| 27 | c Interface: |
---|
| 28 | c ---------- |
---|
| 29 | c |
---|
| 30 | c ARGUMENTS |
---|
| 31 | c --------- |
---|
| 32 | c |
---|
| 33 | c champ: REAL (icount) |
---|
| 34 | c champ contenant les valeurs et de longeur icount |
---|
| 35 | c icount: INTEGER |
---|
| 36 | c nombre d'element dans le champ |
---|
| 37 | c |
---|
| 38 | c COMMON: |
---|
| 39 | c ------- |
---|
| 40 | c |
---|
| 41 | c======================================================================= |
---|
| 42 | c INCLUDE '/usr/local/lmdgraph/libio/lmdstd.h' |
---|
| 43 | c |
---|
| 44 | c INTEGER bandmax |
---|
| 45 | c PARAMETER(bandmax=24) |
---|
| 46 | c |
---|
| 47 | c COMMON/lmdstdch/gtitre,gunites,gformat,gfichier,glistfich(100), |
---|
| 48 | c $ gentete,gdatedep,gdatefin |
---|
| 49 | c |
---|
| 50 | c CHARACTER*100 gtitre !du champ |
---|
| 51 | c CHARACTER*20 gunites !unites du champ |
---|
| 52 | c CHARACTER*20 gformat !formats FORTRAN ou zxliN (N=1,2,3) ou '' |
---|
| 53 | c CHARACTER*100 gfichier !nom du fichier contenant le champ |
---|
| 54 | c CHARACTER*100 gentete !nom generique (exemple desript. du RUN) |
---|
| 55 | c CHARACTER*8 gdatedep !date de depart de la moy. ou evol. temp. |
---|
| 56 | c CHARACTER*8 gdatefin !date de fin '' si une seule datefin |
---|
| 57 | c CHARACTER*20 glistfich !liste de champs a sortir |
---|
| 58 | c |
---|
| 59 | c COMMON/lmdstdnu/ gminimum,gmaximum, |
---|
| 60 | c $ gdeltajour(bandmax),gdeltapas(bandmax), |
---|
| 61 | c $ gnbetats(bandmax),gnbfich |
---|
| 62 | c |
---|
| 63 | c REAL gminimum ! \ min et max |
---|
| 64 | c REAL gmaximum ! / du champ |
---|
| 65 | c INTEGER gnbfich ! nombre de fichier a sortir |
---|
| 66 | c pour les evolutions temporelles: |
---|
| 67 | c INTEGER gnbetats ! nombre d'etats par bande |
---|
| 68 | c INTEGER gdeltapas ! nombre de pas de temps entre 2 sorties |
---|
| 69 | c REAL gdeltajour ! ecart en jour des sorties sur bandes |
---|
| 70 | c |
---|
| 71 | c======================================================================= |
---|
| 72 | c----------------------------------------------------------------------- |
---|
| 73 | c Declarations: |
---|
| 74 | c ------------- |
---|
| 75 | |
---|
| 76 | IMPLICIT NONE |
---|
| 77 | #include "lmdstd.h" |
---|
| 78 | |
---|
| 79 | c Arguments: |
---|
| 80 | c ---------- |
---|
| 81 | |
---|
| 82 | INTEGER icount |
---|
| 83 | REAL champ(icount) |
---|
| 84 | |
---|
| 85 | c Local: |
---|
| 86 | c ------ |
---|
| 87 | |
---|
| 88 | INTEGER i,imin,imax |
---|
| 89 | LOGICAL check, writeornot |
---|
| 90 | INTEGER lnblnk,ismin,ismax |
---|
| 91 | EXTERNAL lnblnk,ismin,ismax, isitor, to36 |
---|
| 92 | |
---|
| 93 | INTEGER indexfil |
---|
| 94 | COMMON/indexfil/indexfil |
---|
| 95 | |
---|
| 96 | c----------------------------------------------------------------------- |
---|
| 97 | c verification que le champ est dans la liste predefinie: |
---|
| 98 | c ------------------------------------------------------- |
---|
| 99 | |
---|
| 100 | check = .FALSE. |
---|
| 101 | |
---|
| 102 | IF (gnbfich .EQ. 0) THEN |
---|
| 103 | writeornot = .TRUE. |
---|
| 104 | ELSE |
---|
| 105 | CALL isitor(gfichier,writeornot,gnbfich, glistfich) |
---|
| 106 | ENDIF |
---|
| 107 | |
---|
| 108 | IF (check) THEN |
---|
| 109 | WRITE(*,*) 'MYWRITE:: writeornot=',writeornot |
---|
| 110 | ENDIF |
---|
| 111 | |
---|
| 112 | c----------------------------------------------------------------------- |
---|
| 113 | IF (writeornot) THEN |
---|
| 114 | c----------------------------------------------------------------------- |
---|
| 115 | |
---|
| 116 | imin = ismin(icount,champ,1) |
---|
| 117 | imax = ismax(icount,champ,1) |
---|
| 118 | IF (check) THEN |
---|
| 119 | WRITE(*,*) gentete(1:lnblnk(gentete)) |
---|
| 120 | WRITE(*,*) gtitre(1:lnblnk(gtitre)) |
---|
| 121 | WRITE(*,*) gdatedep |
---|
| 122 | WRITE(*,*) gdatefin |
---|
| 123 | WRITE(*,*) gunites(1:lnblnk(gunites)) |
---|
| 124 | WRITE(*,*) gdeltapas, gnbetats |
---|
| 125 | WRITE(*,*) gdeltajour |
---|
| 126 | WRITE(*,*) champ(imin),champ(imax) |
---|
| 127 | WRITE(*,*) gformat(1:lnblnk(gformat)) |
---|
| 128 | WRITE(*,*) icount |
---|
| 129 | ENDIF |
---|
| 130 | WRITE(*,*) gtitre(1:lnblnk(gtitre)),'min,max:', |
---|
| 131 | & champ(imin),champ(imax),' ',gunites(1:lnblnk(gunites)) |
---|
| 132 | |
---|
| 133 | c----------------------------------------------------------------------- |
---|
| 134 | c creation eventuelle d'un nom pour le fichier d'ecriture du champ: |
---|
| 135 | c ----------------------------------------------------------------- |
---|
| 136 | |
---|
| 137 | IF(lnblnk(gfichier).LT.1.OR.lnblnk(gfichier).GE.100) THEN |
---|
| 138 | gfichier(1:5)='champ' |
---|
| 139 | IF(indexfil.LT.1) indexfil=49 |
---|
| 140 | gfichier(6:6)=char(indexfil) |
---|
| 141 | indexfil=indexfil+1 |
---|
| 142 | PRINT*,'nom du fichier ',gfichier |
---|
| 143 | ENDIF |
---|
| 144 | |
---|
| 145 | c----------------------------------------------------------------------- |
---|
| 146 | c ecriture sur le fichier de sorties: |
---|
| 147 | c ----------------------------------- |
---|
| 148 | |
---|
| 149 | OPEN (unit=55, file=gfichier(1:lnblnk(gfichier))) |
---|
| 150 | WRITE(55,'(a)') gentete(1:lnblnk(gentete)) |
---|
| 151 | WRITE(55,'(a)') gtitre(1:lnblnk(gtitre)) |
---|
| 152 | WRITE(55,'(a)') gdatedep |
---|
| 153 | WRITE(55,'(a)') gdatefin |
---|
| 154 | WRITE(55,'(a)') gunites(1:lnblnk(gunites)) |
---|
| 155 | WRITE(55,*) gdeltapas, gnbetats |
---|
| 156 | WRITE(55,*) gdeltajour |
---|
| 157 | WRITE(55,*) champ(imin),champ(imax) |
---|
| 158 | WRITE(55,'(a)') '#'//gformat(1:lnblnk(gformat)) |
---|
| 159 | WRITE(55,*) icount |
---|
| 160 | |
---|
| 161 | IF (check) THEN |
---|
| 162 | WRITE(*,'('//gformat(1:lnblnk(gformat))//')') champ(1) |
---|
| 163 | ENDIF |
---|
| 164 | |
---|
| 165 | IF (lnblnk(gformat).LE.1.OR.lnblnk(gformat).GE.20) THEN |
---|
| 166 | DO 2230 i=1,icount |
---|
| 167 | WRITE(55,*) champ(i) |
---|
| 168 | 2230 CONTINUE |
---|
| 169 | ELSE |
---|
| 170 | IF (gformat(1:lnblnk(gformat)) .EQ. 'zxli1') THEN |
---|
[690] | 171 | CALL to36 (champ,icount,champ(imin),champ(imax),55,1) |
---|
[38] | 172 | ELSE |
---|
| 173 | IF (gformat(1:lnblnk(gformat)) .EQ. 'zxli2') THEN |
---|
[690] | 174 | CALL to36(champ,icount,champ(imin),champ(imax),55,2) |
---|
[38] | 175 | ELSE |
---|
| 176 | IF (gformat(1:lnblnk(gformat)) .EQ. 'zxli3') THEN |
---|
[690] | 177 | CALL to36(champ,icount,champ(imin),champ(imax),55,3) |
---|
[38] | 178 | ELSE |
---|
| 179 | WRITE(55,'('//gformat(1:lnblnk(gformat))//')') |
---|
| 180 | & (champ(i),i=1,icount) |
---|
| 181 | ENDIF |
---|
| 182 | ENDIF |
---|
| 183 | ENDIF |
---|
| 184 | ENDIF |
---|
| 185 | |
---|
| 186 | CLOSE (unit=55) |
---|
| 187 | |
---|
| 188 | gfichier=' ' |
---|
| 189 | |
---|
| 190 | c----------------------------------------------------------------------- |
---|
| 191 | c si on ecrit pas le champ (writeornot.EQ..f.): |
---|
| 192 | c --------------------------------------------- |
---|
| 193 | |
---|
| 194 | ELSE |
---|
| 195 | WRITE(*,*) 'FILE ',gfichier,'WAS NOT WRITEN' |
---|
| 196 | ENDIF |
---|
| 197 | |
---|
| 198 | RETURN |
---|
| 199 | END |
---|
| 200 | |
---|