source: trunk/LMDZ.COMMON/libf/dynlonlat_phylonlat/phytitan/write_archive.F @ 1442

Last change on this file since 1442 was 1442, checked in by slebonnois, 9 years ago

SL: update of the Venus GCM, + corrections on routines used for newstart/start2archive for Titan and Venus, + some modifications on tools

File size: 5.3 KB
Line 
1c=======================================================================
2      subroutine write_archive(nid,nom,titre,unite,dim,px)
3c=======================================================================
4c
5c
6c   Date:    01/1997
7c   ----
8c
9c   Objet:   Ecriture de champs sur grille scalaire (iip1*jjp1)
10c   -----    dans un fichier DRS nomme "start_archive"
11c
12c    Il faut au prealable avoir cree un entete avec un "call ini_archive".
13c    Ces variables peuvent etre 3d (ex: temperature), 2d (ex: temperature
14c    de surface), ou 0d (pour un scalaire qui ne depend que du temps)
15c    (ex: la longitude solaire)
16c
17c
18c   Arguments:
19c   ----------
20c
21c     Inputs:
22c     ------
23c
24c                 nid      Unite logique du fichier "start_archive"
25c         nom      nom du champ a ecrire dans le fichier "start_archive"
26c         titre    titre de la variable dans le fichier DRS "start_archive"
27c         unite    unite de la variable ....
28c         dim      dimension de la variable a ecrire
29c         px       tableau contenant la variable a ecrire
30c
31c
32c=======================================================================
33
34      USE control_mod
35      USE comvert_mod, ONLY: ap,bp,presnivs,pa,preff,nivsigs,nivsig,
36     .                       aps,bps,scaleheight,pseudoalt,
37     .                       disvert_type,pressure_exner
38
39      implicit none
40
41#include "dimensions.h"
42#include "paramet.h"
43#include "comgeom.h"
44#include "description.h"
45#include "temps.h"
46#include "netcdf.inc"
47
48c-----------------------------------------------------------------------
49c       Declarations   
50c-----------------------------------------------------------------------
51
52c Arguments:
53
54      INTEGER nid,ntime,dim
55      REAL px(iip1,jjp1,llm)
56
57      CHARACTER*(*) nom, titre, unite
58
59      integer ierr
60
61
62c local
63      integer, dimension(4) :: edges,corner,id
64      integer :: varid,i,j,l
65
66      ntime = 1
67     
68c-----------------------------------------------------------------------
69c      Ecriture du champs dans le fichier            (3 cas)     
70c-----------------------------------------------------------------------
71
72!Cas Variable 3D
73!---------------
74        if (dim.eq.3) then
75
76!         Ecriture du champs
77
78! nom de la variable
79           ierr= NF_INQ_VARID(nid,nom,varid)
80           if (ierr /= NF_NOERR) then
81! choix du nom des coordonnees
82              ierr= NF_INQ_DIMID(nid,"rlonv",id(1))
83              ierr= NF_INQ_DIMID(nid,"rlatu",id(2))
84              ierr= NF_INQ_DIMID(nid,"sigs",id(3))
85              ierr= NF_INQ_DIMID(nid,"Time",id(4))
86
87! Creation de la variable si elle n'existait pas
88
89              write (*,*) "====================="
90              write (*,*) "creation de ",nom
91              call def_var(nid,nom,titre,unite,4,id,varid,ierr)
92
93           endif
94
95           corner(1)=1
96           corner(2)=1
97           corner(3)=1
98           corner(4)=ntime
99
100           edges(1)=iip1
101           edges(2)=jjp1
102           edges(3)=llm
103           edges(4)=1
104#ifdef NC_DOUBLE
105           ierr= NF_PUT_VARA_DOUBLE(nid,varid,corner,edges,px)
106#else
107           ierr= NF_PUT_VARA_REAL(nid,varid,corner,edges,px)
108#endif
109
110           if (ierr.ne.NF_NOERR) then
111              write(*,*) "***** PUT_VAR matter in write_archive"
112              write(*,*) "***** with ",nom," ",nf_STRERROR(ierr)
113              call abort
114           endif
115
116!Cas Variable 2D
117!---------------
118
119        else if (dim.eq.2) then
120
121!         Ecriture du champs
122
123           ierr= NF_INQ_VARID(nid,nom,varid)
124           if (ierr /= NF_NOERR) then
125!  choix du nom des coordonnees
126              ierr= NF_INQ_DIMID(nid,"rlonv",id(1))
127              ierr= NF_INQ_DIMID(nid,"rlatu",id(2))
128              ierr= NF_INQ_DIMID(nid,"Time",id(3))
129
130! Creation de la variable si elle n'existait pas
131
132              write (*,*) "====================="
133              write (*,*) "creation de ",nom
134
135              call def_var(nid,nom,titre,unite,3,id,varid,ierr)
136
137           endif
138
139           corner(1)=1
140           corner(2)=1
141           corner(3)=ntime
142           edges(1)=iip1
143           edges(2)=jjp1
144           edges(3)=1
145
146
147#ifdef NC_DOUBLE
148           ierr = NF_PUT_VARA_DOUBLE (nid,varid,corner,edges,px)
149#else         
150           ierr= NF_PUT_VARA_REAL(nid,varid,corner,edges,px)
151#endif     
152
153           if (ierr.ne.NF_NOERR) then
154              write(*,*) "***** PUT_VAR matter in write_archive"
155              write(*,*) "***** with ",nom,nf_STRERROR(ierr)
156              call abort
157           endif
158
159
160!Cas Variable 0D (scalaire dependant du temps)
161!---------------------------------------------
162
163        else if (dim.eq.0) then
164
165!         Ecriture du champs
166
167           ierr= NF_INQ_VARID(nid,nom,varid)
168           if (ierr /= NF_NOERR) then
169!  choix du nom des coordonnees
170              ierr= NF_INQ_DIMID(nid,"temps",id(1))
171
172! Creation de la variable si elle n'existait pas
173
174              write (*,*) "====================="
175              write (*,*) "creation de ",nom
176
177              call def_var(nid,nom,titre,unite,1,id,varid,ierr)
178
179           endif
180
181           corner(1)=ntime
182           edges(1)=1
183
184#ifdef NC_DOUBLE
185           ierr = NF_PUT_VARA_DOUBLE (nid,varid,corner,edges,px)
186#else
187           ierr= NF_PUT_VARA_REAL(nid,varid,corner,edges,px)
188#endif
189           if (ierr.ne.NF_NOERR) then
190              write(*,*) "***** PUT_VAR matter in write_archive"
191              write(*,*) "***** with ",nom,nf_STRERROR(ierr)
192              call abort
193           endif
194
195        endif
196
197      return
198      end
199
Note: See TracBrowser for help on using the repository browser.