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

Last change on this file since 3977 was 3977, checked in by fhourdin, 3 years ago

Modification des routines iotd* pour mieux gerer les coordonnees.
Utile notamment pour la physique a 20 parametres.

File size: 4.2 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
64
65      pi=2.*asin(1.)
66
67! Define dimensions
68   
69      ! Create the NetCDF file
70      ierr=NF_CREATE(fichnom, NF_CLOBBER, nid)
71      ierr=NF_DEF_DIM(nid, "lon", iim, dim_coord(1))
72      ierr=NF_DEF_DIM(nid, "lat", jjm, dim_coord(2))
73      ierr=NF_DEF_DIM(nid, "lev", llm, dim_coord(3))
74      ierr=NF_DEF_DIM(nid,"time",NF_UNLIMITED,dim_coord(4))
75      ierr = NF_PUT_ATT_TEXT(nid,NF_GLOBAL,'Conventions',6,"CF-1.1")
76      !ierr = NF_PUT_ATT_TEXT(nid,NF_GLOBAL,'file_name',TRIM(fname))
77      ierr=NF_ENDDEF(nid)
78
79      ! Switch out of NetCDF Define mode
80
81
82      ierr=NF_ENDDEF(nid)
83!
84!  Contol parameters for this run
85! ---- longitude -----------
86
87      ierr=NF_REDEF(nid)
88      ierr=NF_DEF_VAR(nid,"lon", NF_FLOAT, 1, dim_coord(1),nvarid)
89      ierr = NF_PUT_ATT_TEXT(nid,nvarid,'axis',1,'X')
90      ierr=NF_PUT_ATT_TEXT(nid,nvarid,'units',12,"degrees_east")
91      ierr=NF_ENDDEF(nid)
92      ierr=NF_PUT_VAR_REAL(nid,nvarid,rlon)
93       print*,ierr
94
95! ---- latitude ------------
96      ierr=NF_REDEF(nid)
97      ierr=NF_DEF_VAR(nid, "lat", NF_FLOAT, 1, dim_coord(2),nvarid)
98      ierr = NF_PUT_ATT_TEXT(nid,nvarid,'axis',1,'Y')
99      ierr=NF_PUT_ATT_TEXT(nid,nvarid,'units',13,"degrees_north")
100      ierr=NF_ENDDEF(nid)
101      ierr=NF_PUT_VAR_REAL(nid,nvarid,rlat)
102!
103! ---- vertical ------------
104      ierr=NF_REDEF(nid)
105      ierr=NF_DEF_VAR(nid, "lev", NF_FLOAT, 1,dim_coord(3),nvarid)
106      ierr=NF_PUT_ATT_TEXT(nid,nvarid,"long_name",10,"vert level")
107      if ( coordv(2)>coordv(1) ) then
108         ierr=NF_PUT_ATT_TEXT(nid,nvarid,"long_name",10,"pseudo-alt")
109         ierr=NF_PUT_ATT_TEXT(nid,nvarid,'positive',2,"up")
110      else
111         ierr=NF_PUT_ATT_TEXT(nid,nvarid,"long_name",8,"pressure")
112         ierr = NF_PUT_ATT_TEXT (nid,nvarid,'positive',4,"down")
113      endif
114      ierr=NF_ENDDEF(nid)
115      ierr=NF_PUT_VAR_REAL(nid,nvarid,coordv)
116
117!
118! ---- time ----------------
119      ierr=NF_REDEF(nid)
120      ! Define the 'time' variable
121      ierr=NF_DEF_VAR(nid, "time", NF_FLOAT, 1, dim_coord(4),nvarid)
122!     ! Add attributes
123      ierr = NF_PUT_ATT_TEXT(nid,nvarid,'axis',1,'T')
124      ierr = NF_PUT_ATT_TEXT(nid,nvarid,'standard_name',4,'time')
125      WRITE(date0,'(i4.4,"-",i2.2,"-",i2.2)') an0,mois0,jour0
126      ierr=NF_PUT_ATT_TEXT(nid, nvarid,'units',33, &
127     & "seconds since "//date0//" 00:00:00")
128      ierr = NF_PUT_ATT_TEXT(nid,nvarid,'calendar',9,calendrier)
129      !ierr = NF_PUT_ATT_TEXT(nid,nvarid,'calendar',4,'360d')
130      ierr = NF_PUT_ATT_TEXT(nid,nvarid,'title',4,'Time')
131      ierr = NF_PUT_ATT_TEXT(nid,nvarid,'long_name',9,'Time axis')
132      WRITE(date0b,'(i4.4,"-",a3,"-",i2.2)') an0,cmois(mois0),jour0
133      ierr = NF_PUT_ATT_TEXT(nid,nvarid,'time_origin',20, &
134     &        date0b//' 00:00:00')
135      ierr=NF_ENDDEF(nid)
136
137
138      END
Note: See TracBrowser for help on using the repository browser.