source: LMDZ6/trunk/libf/phylmd/iotd_ini.F90 @ 5171

Last change on this file since 5171 was 5084, checked in by Laurent Fairhead, 12 months ago

Reverting to r4065. Updating fortran standard broke too much stuff. Will do it by smaller chunks
AB, LF

File size: 5.1 KB
Line 
1      SUBROUTINE iotd_ini(fichnom,iim,jjm,llm,prlon,prlat,pcoordv,jour0,mois0,an0,t0,timestep,calendrier)
2      IMPLICIT NONE
3
4!=======================================================================
5!
6!   Auteur:  F. Hourdin
7!   -------
8!
9!   Objet:
10!   ------
11!   Light interface for netcdf outputs. can be used outside LMDZ
12!
13!=======================================================================
14!-----------------------------------------------------------------------
15!   Declarations:
16!   -------------
17
18      INCLUDE "netcdf.inc"
19      INCLUDE "iotd.h"
20
21!   Arguments:
22!   ----------
23
24      integer iim,jjm,llm
25      real prlon(iim),prlat(jjm),pcoordv(llm),timestep,t0
26      INTEGER id_FOCE
27      INTEGER jour0,mois0,an0
28      CHARACTER*(*) calendrier
29
30      integer corner(4),edges(4),ndim
31      real  px(1000)
32      character (len=10) :: nom
33      real*4 rlon(iim),rlat(jjm),coordv(llm)
34
35!   Local:
36!   ------
37      CHARACTER*3,DIMENSION(12) :: cmois=(/'JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC'/)
38      CHARACTER*10 date0
39      CHARACTER*11 date0b
40
41      INTEGER :: ierr
42
43      integer :: nvarid
44      integer, dimension(2) :: id 
45
46      character*(*) fichnom
47
48      real pi
49
50      iotd_ts=timestep
51      iotd_t0=t0
52      print*,'iotd_ini, ',timestep,iotd_ts
53      imax=iim
54      jmax=jjm
55      lmax=llm
56      ! Utile pour passer en real*4 pour les ecritures
57      rlon=prlon
58      rlat=prlat
59      coordv=pcoordv
60
61
62      !-----------------------------------------------------------------------
63      ! Possibilité de spécifier une liste de variables à sortir
64      ! dans iotd.def
65      ! Si iotd.def existe et est non vide,
66      ! seules les variables faisant à la fois l'objet d'un call iotd_ecrit
67      ! et étant spécifiées dans iotd.def sont sorties.
68      ! Sinon, toutes les variables faisant l'objet d'un call iotd_ecrit
69      ! sont sorties
70      !-----------------------------------------------------------------------
71      n_names_iotd_def=0
72      open(99,file='iotd.def',form='formatted',status='old',iostat=ierr)
73         if ( ierr.eq.0 ) then
74            ierr=0
75            do while (ierr==0)
76               read(99,*,iostat=ierr) un_nom
77               if (ierr==0) then
78                  n_names_iotd_def=n_names_iotd_def+1
79                  names_iotd_def(n_names_iotd_def)=un_nom
80               endif
81            enddo
82         endif
83         print*,n_names_iotd_def,names_iotd_def(1:n_names_iotd_def)
84      close(99)
85
86
87      pi=2.*asin(1.)
88
89! Define dimensions
90   
91      ! Create the NetCDF file
92      ierr=NF_CREATE(fichnom, NF_CLOBBER, nid)
93      ierr=NF_DEF_DIM(nid, "lon", iim, dim_coord(1))
94      ierr=NF_DEF_DIM(nid, "lat", jjm, dim_coord(2))
95      ierr=NF_DEF_DIM(nid, "lev", llm, dim_coord(3))
96      ierr=NF_DEF_DIM(nid,"time",NF_UNLIMITED,dim_coord(4))
97      ierr = NF_PUT_ATT_TEXT(nid,NF_GLOBAL,'Conventions',6,"CF-1.1")
98      !ierr = NF_PUT_ATT_TEXT(nid,NF_GLOBAL,'file_name',TRIM(fname))
99      ierr=NF_ENDDEF(nid)
100
101      ! Switch out of NetCDF Define mode
102
103
104      ierr=NF_ENDDEF(nid)
105!
106!  Contol parameters for this run
107! ---- longitude -----------
108
109      ierr=NF_REDEF(nid)
110      ierr=NF_DEF_VAR(nid,"lon", NF_FLOAT, 1, dim_coord(1),nvarid)
111      ierr = NF_PUT_ATT_TEXT(nid,nvarid,'axis',1,'X')
112      ierr=NF_PUT_ATT_TEXT(nid,nvarid,'units',12,"degrees_east")
113      ierr=NF_ENDDEF(nid)
114      ierr=NF_PUT_VAR_REAL(nid,nvarid,rlon)
115       print*,ierr
116
117! ---- latitude ------------
118      ierr=NF_REDEF(nid)
119      ierr=NF_DEF_VAR(nid, "lat", NF_FLOAT, 1, dim_coord(2),nvarid)
120      ierr = NF_PUT_ATT_TEXT(nid,nvarid,'axis',1,'Y')
121      ierr=NF_PUT_ATT_TEXT(nid,nvarid,'units',13,"degrees_north")
122      ierr=NF_ENDDEF(nid)
123      ierr=NF_PUT_VAR_REAL(nid,nvarid,rlat)
124!
125! ---- vertical ------------
126      ierr=NF_REDEF(nid)
127      ierr=NF_DEF_VAR(nid, "lev", NF_FLOAT, 1,dim_coord(3),nvarid)
128      ierr=NF_PUT_ATT_TEXT(nid,nvarid,"long_name",10,"vert level")
129      if ( coordv(2)>coordv(1) ) then
130         ierr=NF_PUT_ATT_TEXT(nid,nvarid,"long_name",10,"pseudo-alt")
131         ierr=NF_PUT_ATT_TEXT(nid,nvarid,'positive',2,"up")
132      else
133         ierr=NF_PUT_ATT_TEXT(nid,nvarid,"long_name",8,"pressure")
134         ierr = NF_PUT_ATT_TEXT (nid,nvarid,'positive',4,"down")
135      endif
136      ierr=NF_ENDDEF(nid)
137      ierr=NF_PUT_VAR_REAL(nid,nvarid,coordv)
138
139!
140! ---- time ----------------
141      ierr=NF_REDEF(nid)
142      ! Define the 'time' variable
143      ierr=NF_DEF_VAR(nid, "time", NF_FLOAT, 1, dim_coord(4),nvarid)
144!     ! Add attributes
145      ierr = NF_PUT_ATT_TEXT(nid,nvarid,'axis',1,'T')
146      ierr = NF_PUT_ATT_TEXT(nid,nvarid,'standard_name',4,'time')
147      WRITE(date0,'(i4.4,"-",i2.2,"-",i2.2)') an0,mois0,jour0
148      ierr=NF_PUT_ATT_TEXT(nid, nvarid,'units',33, &
149     & "seconds since "//date0//" 00:00:00")
150      ierr = NF_PUT_ATT_TEXT(nid,nvarid,'calendar',9,calendrier)
151      !ierr = NF_PUT_ATT_TEXT(nid,nvarid,'calendar',4,'360d')
152      ierr = NF_PUT_ATT_TEXT(nid,nvarid,'title',4,'Time')
153      ierr = NF_PUT_ATT_TEXT(nid,nvarid,'long_name',9,'Time axis')
154      WRITE(date0b,'(i4.4,"-",a3,"-",i2.2)') an0,cmois(mois0),jour0
155      ierr = NF_PUT_ATT_TEXT(nid,nvarid,'time_origin',20, &
156     &        date0b//' 00:00:00')
157      ierr=NF_ENDDEF(nid)
158
159
160      END
Note: See TracBrowser for help on using the repository browser.