source: codes/icosagcm/branches/SATURN_DYNAMICO/LMDZ.COMMON/config/ppsrc/dyn/wrgrads.f @ 224

Last change on this file since 224 was 224, checked in by ymipsl, 10 years ago
File size: 4.3 KB
Line 
1!
2! $Header$
3!
4      subroutine wrgrads(if,nl,field,name,titlevar)
5      implicit none
6
7c   Declarations
8c    if indice du fichier
9c    nl nombre de couches
10c    field   champ
11c    name    petit nom
12c    titlevar   Titre
13
14!
15! $Header$
16!
17      integer nfmx,imx,jmx,lmx,nvarmx
18      parameter(nfmx=10,imx=200,jmx=150,lmx=200,nvarmx=1000)
19
20      real xd(imx,nfmx),yd(jmx,nfmx),zd(lmx,nfmx),dtime(nfmx)
21
22      integer imd(imx),jmd(jmx),lmd(lmx)
23      integer iid(imx),jid(jmx)
24      integer ifd(imx),jfd(jmx)
25      integer unit(nfmx),irec(nfmx),itime(nfmx),nld(nvarmx,nfmx)
26
27      integer nvar(nfmx),ivar(nfmx)
28      logical firsttime(nfmx)
29
30      character*10 var(nvarmx,nfmx),fichier(nfmx)
31      character*40 title(nfmx),tvar(nvarmx,nfmx)
32
33      common/gradsdef/xd,yd,zd,dtime,
34     s   imd,jmd,lmd,iid,jid,ifd,jfd,
35     s   unit,irec,nvar,ivar,itime,nld,firsttime,
36     s   var,fichier,title,tvar
37
38c   arguments
39      integer if,nl
40      real field(imx*jmx*lmx)
41
42      integer, parameter:: wp = selected_real_kind(p=6, r=36)
43      real(wp) field4(imx*jmx*lmx)
44
45      character*10 name,file
46      character*10 titlevar
47
48c   local
49
50      integer im,jm,lm,i,j,l,iv,iii,iji,iif,ijf
51
52      logical writectl
53
54
55      writectl=.false.
56
57c     print*,if,iid(if),jid(if),ifd(if),jfd(if)
58      iii=iid(if)
59      iji=jid(if)
60      iif=ifd(if)
61      ijf=jfd(if)
62      im=iif-iii+1
63      jm=ijf-iji+1
64      lm=lmd(if)
65
66c     print*,'im,jm,lm,name,firsttime(if)'
67c     print*,im,jm,lm,name,firsttime(if)
68
69      if(firsttime(if)) then
70         if(name.eq.var(1,if)) then
71            firsttime(if)=.false.
72            ivar(if)=1
73         print*,'fin de l initialiation de l ecriture du fichier'
74         print*,file
75           print*,'fichier no: ',if
76           print*,'unit ',unit(if)
77           print*,'nvar  ',nvar(if)
78           print*,'vars ',(var(iv,if),iv=1,nvar(if))
79         else
80            ivar(if)=ivar(if)+1
81            nvar(if)=ivar(if)
82            var(ivar(if),if)=name
83            tvar(ivar(if),if)=trim(titlevar)
84            nld(ivar(if),if)=nl
85c           print*,'initialisation ecriture de ',var(ivar(if),if)
86c           print*,'if ivar(if) nld ',if,ivar(if),nld(ivar(if),if)
87         endif
88         writectl=.true.
89         itime(if)=1
90      else
91         ivar(if)=mod(ivar(if),nvar(if))+1
92         if (ivar(if).eq.nvar(if)) then
93            writectl=.true.
94            itime(if)=itime(if)+1
95         endif
96
97         if(var(ivar(if),if).ne.name) then
98           print*,'Il faut stoker la meme succession de champs a chaque'
99           print*,'pas de temps'
100           print*,'fichier no: ',if
101           print*,'unit ',unit(if)
102           print*,'nvar  ',nvar(if)
103           print*,'vars ',(var(iv,if),iv=1,nvar(if))
104
105           stop
106         endif
107      endif
108
109c     print*,'ivar(if),nvar(if),var(ivar(if),if),writectl'
110c     print*,ivar(if),nvar(if),var(ivar(if),if),writectl
111      field4(1:imd(if)*jmd(if)*nl)=field(1:imd(if)*jmd(if)*nl)
112      do l=1,nl
113         irec(if)=irec(if)+1
114c        print*,'Ecrit rec=',irec(if),iii,iif,iji,ijf,
115c    s (l-1)*imd(if)*jmd(if)+(iji-1)*imd(if)+iii
116c    s ,(l-1)*imd(if)*jmd(if)+(ijf-1)*imd(if)+iif
117         write(unit(if)+1,rec=irec(if))
118     s   ((field4((l-1)*imd(if)*jmd(if)+(j-1)*imd(if)+i)
119     s   ,i=iii,iif),j=iji,ijf)
120      enddo
121      if (writectl) then
122
123      file=fichier(if)
124c   WARNING! on reecrase le fichier .ctl a chaque ecriture
125      open(unit(if),file=trim(file)//'.ctl'
126     &         ,form='formatted',status='unknown')
127      write(unit(if),'(a5,1x,a40)')
128     &       'DSET ','^'//trim(file)//'.dat'
129
130      write(unit(if),'(a12)') 'UNDEF 1.0E30'
131      write(unit(if),'(a5,1x,a40)') 'TITLE ',title(if)
132      call formcoord(unit(if),im,xd(iii,if),1.,.false.,'XDEF')
133      call formcoord(unit(if),jm,yd(iji,if),1.,.true.,'YDEF')
134      call formcoord(unit(if),lm,zd(1,if),1.,.false.,'ZDEF')
135      write(unit(if),'(a4,i10,a30)')
136     &       'TDEF ',itime(if),' LINEAR 02JAN1987 1MO '
137      write(unit(if),'(a4,2x,i5)') 'VARS',nvar(if)
138      do iv=1,nvar(if)
139c        print*,'if,var(iv,if),nld(iv,if),nld(iv,if)-1/nld(iv,if)'
140c        print*,if,var(iv,if),nld(iv,if),nld(iv,if)-1/nld(iv,if)
141         write(unit(if),1000) var(iv,if),nld(iv,if)-1/nld(iv,if)
142     &     ,99,tvar(iv,if)
143      enddo
144      write(unit(if),'(a7)') 'ENDVARS'
145c
1461000  format(a5,3x,i4,i3,1x,a39)
147
148      close(unit(if))
149
150      endif ! writectl
151
152      return
153
154      END
155
Note: See TracBrowser for help on using the repository browser.