source: trunk/LMDZ.TITAN/libf/phytitan/writeg1d.F @ 134

Last change on this file since 134 was 3, checked in by slebonnois, 14 years ago

Creation de repertoires:

  • chantiers : pour communiquer sur nos projets de modifs
  • documentation : pour stocker les docs

Ajout de:

  • libf/phytitan : physique de Titan
  • libf/chimtitan: chimie de Titan
  • libf/phyvenus : physique de Venus
File size: 7.3 KB
Line 
1      SUBROUTINE writeg1d(ngrid,nx,x,nom,titre)
2      IMPLICIT NONE
3c.......................................................................
4c
5c  ecriture de x pour GRADS-1D
6c
7c  in :
8c         * ngrid      ---> pour controler que l'on est bien en 1D
9c         * nx         ---> taille du vecteur a stocker
10c                             "1" pour une variable de surface
11c                             "nlayer" pour une variable de centre de couche
12c                             "nlayer+1" pour une variable d'interface
13c         * x          ---> variable a stocker
14c         * nom        ---> nom "pour grads"
15c         * titre      ---> titre "pour grads"
16c
17c.......................................................................
18c
19#include "comg1d.h"
20
21c
22c.......................................................................
23c  declaration des arguments
24c
25      INTEGER ngrid,nx,i
26      REAL*4 xr4(1000)
27      REAL x(nx)
28      CHARACTER*(*) nom,titre
29c
30c  declaration des arguments
31c.......................................................................
32c  declaration des variables locales
33c
34      INTEGER ilayer,ivar
35      LOGICAL test
36
37
38      integer isortie  ! les sorties ne se font qu'une fois tous les
39      logical oksortie ! nbphypers appels de la physique
40      save    isortie
41c
42c  declaration des variables locales
43c.......................................................................
44c  controle 1D
45c
46c     print*,'ngrid=',ngrid
47      IF (ngrid.NE.1) return
48c
49c  controle 1D
50c.......................................................................
51c  copy => force en reel 4 pour l'ecriture dans grads1d.dat
52
53      do i=1,nx
54        xr4(i) = x(i)
55      enddo
56
57c  copy => force en reel 4 pour l'ecriture dans grads1d.dat
58c.......................................................................
59c  ouverture du fichier au premier appel
60c
61      IF (g1d_premier) THEN
62        OPEN (g1d_unitfich,FILE=g1d_nomfich
63     &       ,FORM='unformatted',ACCESS='direct',RECL=4)
64        g1d_irec=0
65        g1d_nvar=0
66       
67        oksortie= .true.
68        isortie = nbphypers
69      ENDIF
70c
71c  ouverture du fichier au premier appel
72c.......................................................................
73c  rythme des sorties
74      if (.not.g1d_premier) then
75        oksortie=.false.
76        if (nom.eq.g1d_nomvar(1)) then
77          if (isortie.eq.nbphypers) then
78            isortie = 1
79          else
80            if (isortie.eq.(nbphypers-1)) then
81              oksortie=.true.
82              isortie = nbphypers
83            else
84              isortie = isortie+1
85            endif
86          endif
87        else
88          if (isortie.eq.nbphypers) then
89            oksortie=.true.
90          endif
91        endif
92      endif
93c  rythme des sorties
94c.......................................................................
95c  pour l'ecriture du fichier ctl
96c
97      test=.true.
98      DO ivar=1,g1d_nvar
99        IF (nom.EQ.g1d_nomvar(ivar)) test=.false.
100        IF (nx .GT. 1000) then
101          print*,'ERROR:  nx > 1000 dans writeg1d.F'
102          print*,'Changer la dimension de xr4'
103          call exit(1)
104        ENDIF
105      ENDDO
106      IF (test) THEN
107        g1d_nvar=g1d_nvar+1
108        g1d_nomvar(g1d_nvar)=nom
109        g1d_titrevar(g1d_nvar)=titre
110        IF (nx.EQ.1) THEN
111           g1d_dimvar(g1d_nvar)=0
112        ELSEIF (nx.EQ.g1d_nlayer) THEN
113           g1d_dimvar(g1d_nvar)=g1d_nlayer
114        ELSEIF (nx.EQ.g1d_nlayer+1) THEN
115           g1d_dimvar(g1d_nvar)=g1d_nlayer+1
116        ELSE
117           PRINT *,'._. probleme de dimension dans GRADS-1D ._.'
118           print*,'NX = ',nx
119           print*,'g1d_nlayer = ',g1d_nlayer
120        ENDIF
121      ENDIF
122c
123c  pour l'ecriture du fichier ctl
124c.......................................................................
125c  test pour rythme des sorties
126      if (oksortie) then
127c             print*,nom,isortie,' ok'
128c.......................................................................
129c  ecriture
130c
131      IF (nx.EQ.1) THEN
132        g1d_irec=g1d_irec+1
133        WRITE(g1d_unitfich,REC=g1d_irec) xr4(1)
134      ELSE
135        DO ilayer=1,g1d_nlayer
136          g1d_irec=g1d_irec+1
137          WRITE(g1d_unitfich,REC=g1d_irec) xr4(ilayer)
138        ENDDO
139      ENDIF
140c
141c  ecriture
142c.......................................................................
143c     else
144c             print*,nom,isortie
145      endif
146c  test pour rythme des sorties
147c.......................................................................
148c
149        g1d_premier=.false.
150      RETURN
151      END
152
153
154
155
156
157c *********************************************************************
158c *********************************************************************
159
160      SUBROUTINE endg1d(ngrid,nlayer,zlayer,ndt)
161      IMPLICIT NONE
162c.......................................................................
163c
164c  ecriture du fichier de controle pour GRADS-1D
165c
166c  in :
167c         * ngrid      ---> pour controler que l'on est bien en 1D
168c         * nlayer     ---> nombre de couches
169c         * zlayer     ---> altitude au centre de chaque couche (km)
170c         * ndt        ---> nombre de pas de temps
171c
172c.......................................................................
173c
174#include "comg1d.h"
175#include "comcstfi.h"
176c
177c.......................................................................
178c  declaration des arguments
179c
180      INTEGER ngrid,nlayer
181      REAL zlayer(nlayer)
182      INTEGER ndt
183c
184c  declaration des arguments
185c.......................................................................
186c  declaration des variables locales
187c
188      INTEGER ivar,ilayer
189c
190c  declaration des variables locales
191c.......................................................................
192c  contole 1D
193c
194      IF (ngrid.NE.1) GOTO 10001
195c
196c  contole 1D
197c.......................................................................
198c
199      IF (nlayer.ne.g1d_nlayer)
200     &PRINT *,'._. probleme de dimension dans GRADS-1D (endg1d.F) '
201c
202c.......................................................................
203c
204      CLOSE (g1d_unitfich)
205c
206c.......................................................................
207c
208      OPEN (g1d_unitctl,FILE=g1d_nomctl,FORM='formatted',RECL=4*100)
209      WRITE (g1d_unitctl,'(a4,2x,a1,a20)') 'DSET','^',g1d_nomfich
210      WRITE (g1d_unitctl,'(a5,2x,a20)') 'UNDEF ','1.E+30'
211      WRITE (g1d_unitctl,'(a11)') 'FORMAT YREV'
212      WRITE (g1d_unitctl,'(a5,2x,a30)') 'TITLE ','champs 1D'
213      WRITE (g1d_unitctl,'(a5,i4,a20)') 'XDEF ',1,' LINEAR 0 1'
214      WRITE (g1d_unitctl,'(a5,i4,a20)') 'YDEF ',1,' LINEAR 0 1'
215      WRITE (g1d_unitctl,'(a5,i4,a20)') 'ZDEF ',g1d_nlayer,' LEVELS'
216      WRITE (g1d_unitctl,'(5(1x,f13.5))')
217     &      (zlayer(ilayer),ilayer=1,g1d_nlayer)
218
219c     Writing true timestep in g1d.ctl (in planet "minutes"= sol/(60*24)
220      ivar =min( max(int(1440.*dtphys*nbphypers/daysec +0.5),1) , 99)   
221      WRITE (g1d_unitctl,'(a4,2x,i10,a19,i2,a2)')
222     &      'TDEF ',ndt/nbphypers,' LINEAR 01JAN2000 ', ivar,'MN '
223
224      WRITE (g1d_unitctl,'(a5,i5)') 'VARS ',g1d_nvar
225      DO ivar=1,g1d_nvar
226      WRITE (g1d_unitctl,'(a9,3x,i4,i3,1x,a39)')
227     &       g1d_nomvar(ivar),g1d_dimvar(ivar),99,g1d_titrevar(ivar)
228      ENDDO
229      WRITE (g1d_unitctl,'(a7)') 'ENDVARS'
230      CLOSE (g1d_unitctl)
231c
232c.......................................................................
233c
23410001 CONTINUE
235c
236c.......................................................................
237c
238      RETURN
239      END
Note: See TracBrowser for help on using the repository browser.