source: trunk/LMDZ.GENERIC/libf/phystd/iniwrite_specVI.F @ 526

Last change on this file since 526 was 526, checked in by jleconte, 13 years ago

13/02/2012 == JL + AS

  • All outputs are now in netCDF format. Even in 1D (No more G1D)
  • Clean up of the call to callcorrk when CLFvarying=true
  • Corrects a bug in writediagspecIR/VI. Output are now in W/m2/cm-1 as a function of the wavenumber in cm-1
  • Enable writediagspecIR/V to work in the CLFvarying=true case (output now done in Physiq after writediagfi)
  • Add a simple treatment for the supersaturation of CO2 (see forget et al 2012)
  • corrects a small bug when no clouds are present in aeropacity
File size: 11.8 KB
Line 
1      SUBROUTINE iniwrite_specVI(nid,idayref,phis)
2
3      use radinc_h, only: L_NSPECTV
4      use radcommon_h, only: WNOV
5
6      implicit none
7
8c=======================================================================
9c
10c   Auteur:  L. Fairhead  ,  P. Le Van, Y. Wanherdrick, F. Forget
11c   -------
12c
13c   Objet:
14c   ------
15c
16c   'Initialize' the diagfi_spec.nc file: write down dimensions as well
17c   as time-independent fields (e.g: geopotential, mesh area, ...)
18c
19c=======================================================================
20c-----------------------------------------------------------------------
21c   Declarations:
22c   -------------
23
24#include "dimensions.h"
25#include "paramet.h"
26!include "comconst.h"
27#include "comcstfi.h"
28#include "comvert.h"
29#include "comgeom.h"
30#include "temps.h"
31#include "ener.h"
32#include "logic.h"
33#include "netcdf.inc"
34#include "description.h"
35#include "serre.h"
36#include"dimphys.h"
37#include"comsoil.h"
38
39c   Arguments:
40c   ----------
41
42      integer nid        ! NetCDF file ID
43      INTEGER*4 idayref  ! date (initial date for this run)
44      REAL phis(ip1jmp1) ! surface geopotential
45
46c   Local:
47c   ------
48      INTEGER length,l
49      parameter (length = 100)
50      REAL tab_cntrl(length) ! run parameters are stored in this array
51      INTEGER ierr
52
53      integer :: nvarid,idim_index,idim_rlonu,idim_rlonv
54      integer :: idim_rlatu,idim_rlatv,idim_llmp1,idim_llm
55 !     integer :: idim_nsoilmx ! "subsurface_layers" dimension ID #
56      integer :: idim_bandsVI ! "VI Wavenumber" dimension ID #
57      integer, dimension(2) :: id 
58
59c-----------------------------------------------------------------------
60
61      DO l=1,length
62         tab_cntrl(l)=0.
63      ENDDO
64      tab_cntrl(1)  = FLOAT(iim)
65      tab_cntrl(2)  = FLOAT(jjm)
66      tab_cntrl(3)  = FLOAT(llm)
67      tab_cntrl(4)  = FLOAT(idayref)
68      tab_cntrl(5)  = rad
69      tab_cntrl(6)  = omeg
70      tab_cntrl(7)  = g
71      tab_cntrl(8)  = mugaz
72      tab_cntrl(9)  = rcp
73      tab_cntrl(10) = daysec
74      tab_cntrl(11) = dtphys
75      tab_cntrl(12) = etot0
76      tab_cntrl(13) = ptot0
77      tab_cntrl(14) = ztot0
78      tab_cntrl(15) = stot0
79      tab_cntrl(16) = ang0
80c
81c    ..........    P.Le Van  ( ajout le 8/04/96 )    .........
82c         .....        parametres  pour le zoom          ......   
83      tab_cntrl(17)  = clon
84      tab_cntrl(18)  = clat
85      tab_cntrl(19)  = grossismx
86      tab_cntrl(20)  = grossismy
87c
88c     .....   ajout  le 6/05/97 et le 15/10/97  .......
89c
90      IF ( fxyhypb )   THEN
91        tab_cntrl(21) = 1.
92        tab_cntrl(22) = dzoomx
93        tab_cntrl(23) = dzoomy
94      ELSE
95        tab_cntrl(21) = 0.
96        tab_cntrl(22) = dzoomx
97        tab_cntrl(23) = dzoomy
98        tab_cntrl(24) = 0.
99        IF( ysinus )  tab_cntrl(24) = 1.
100      ENDIF
101
102c    .........................................................
103
104! Define dimensions
105   
106      ierr = NF_REDEF (nid)
107
108      ierr = NF_DEF_DIM (nid, "index", length, idim_index)
109!      ierr = NF_DEF_DIM (nid, "rlonu", iip1, idim_rlonu)
110      ierr = NF_DEF_DIM (nid, "latitude", jjp1, idim_rlatu)
111      ierr = NF_DEF_DIM (nid, "longitude", iip1, idim_rlonv)
112!      ierr = NF_DEF_DIM (nid, "rlatv", jjm, idim_rlatv)
113!      ierr = NF_DEF_DIM (nid, "interlayer", (llm+1), idim_llmp1)
114      ierr = NF_DEF_DIM (nid, "altitude", llm, idim_llm)
115!      ierr = NF_DEF_DIM (nid, "subsurface_layers",nsoilmx,idim_nsoilmx)
116      ierr = NF_DEF_DIM (nid, "VI Wavenumber",L_NSPECTV,idim_bandsVI)
117
118      ierr = NF_ENDDEF(nid)
119
120c  Contol parameters for this run
121      ierr = NF_REDEF (nid)
122#ifdef NC_DOUBLE
123      ierr = NF_DEF_VAR (nid, "controle", NF_DOUBLE, 1,
124     .       idim_index,nvarid)
125#else
126      ierr = NF_DEF_VAR (nid, "controle", NF_FLOAT, 1,
127     .       idim_index,nvarid)
128#endif
129      ierr = NF_PUT_ATT_TEXT (nid,nvarid,"title", 18,
130     .                       "Control parameters")
131      ierr = NF_ENDDEF(nid)
132#ifdef NC_DOUBLE
133      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,tab_cntrl)
134#else
135      ierr = NF_PUT_VAR_REAL (nid,nvarid,tab_cntrl)
136#endif
137
138c --------------------------
139c  longitudes and latitudes
140
141
142c$$$      ierr = NF_REDEF (nid)
143c$$$#ifdef NC_DOUBLE
144c$$$      ierr = NF_DEF_VAR (nid, "rlonu", NF_DOUBLE, 1, idim_rlonu,nvarid)
145c$$$#else
146c$$$      ierr = NF_DEF_VAR (nid, "rlonu", NF_FLOAT, 1, idim_rlonu,nvarid)
147c$$$#endif
148c$$$      ierr = NF_PUT_ATT_TEXT (nid,nvarid,"title", 21,
149c$$$     .                       "Longitudes at u nodes")
150c$$$      ierr = NF_ENDDEF(nid)
151c$$$#ifdef NC_DOUBLE
152c$$$      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlonu/pi*180)
153c$$$#else
154c$$$      ierr = NF_PUT_VAR_REAL (nid,nvarid,rlonu/pi*180)
155c$$$#endif
156
157c --------------------------
158      ierr = NF_REDEF (nid)
159#ifdef NC_DOUBLE
160      ierr =NF_DEF_VAR(nid, "latitude", NF_DOUBLE, 1, idim_rlatu,nvarid)
161#else
162      ierr =NF_DEF_VAR (nid, "latitude", NF_FLOAT, 1, idim_rlatu,nvarid)
163#endif
164      ierr =NF_PUT_ATT_TEXT(nid,nvarid,'units',13,"degrees_north")
165      ierr = NF_PUT_ATT_TEXT (nid,nvarid,"long_name", 14,
166     .      "North latitude")
167      ierr = NF_ENDDEF(nid)
168#ifdef NC_DOUBLE
169      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlatu/pi*180)
170#else
171      ierr = NF_PUT_VAR_REAL (nid,nvarid,rlatu/pi*180)
172#endif
173c
174c --------------------------
175      ierr = NF_REDEF (nid)
176#ifdef NC_DOUBLE
177      ierr =NF_DEF_VAR(nid,"longitude", NF_DOUBLE, 1, idim_rlonv,nvarid)
178#else
179      ierr = NF_DEF_VAR(nid,"longitude", NF_FLOAT, 1, idim_rlonv,nvarid)
180#endif
181      ierr = NF_PUT_ATT_TEXT (nid,nvarid,"long_name", 14,
182     .      "East longitude")
183      ierr = NF_PUT_ATT_TEXT(nid,nvarid,'units',12,"degrees_east")
184      ierr = NF_ENDDEF(nid)
185#ifdef NC_DOUBLE
186      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlonv/pi*180)
187#else
188      ierr = NF_PUT_VAR_REAL (nid,nvarid,rlonv/pi*180)
189#endif
190c
191c --------------------------
192      ierr = NF_REDEF (nid)
193#ifdef NC_DOUBLE
194      ierr = NF_DEF_VAR (nid, "altitude", NF_DOUBLE, 1,
195     .       idim_llm,nvarid)
196#else
197      ierr = NF_DEF_VAR (nid, "altitude", NF_FLOAT, 1,
198     .       idim_llm,nvarid)
199#endif
200      ierr = NF_PUT_ATT_TEXT (nid,nvarid,"long_name",10,"pseudo-alt")
201      ierr = NF_PUT_ATT_TEXT (nid,nvarid,'units',2,"km")
202      ierr = NF_PUT_ATT_TEXT (nid,nvarid,'positive',2,"up")
203
204      ierr = NF_ENDDEF(nid)
205#ifdef NC_DOUBLE
206      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,pseudoalt)
207#else
208      ierr = NF_PUT_VAR_REAL (nid,nvarid,pseudoalt)
209#endif
210
211
212c$$$c --------------------------
213c$$$      ierr = NF_REDEF (nid)
214c$$$#ifdef NC_DOUBLE
215c$$$      ierr = NF_DEF_VAR (nid, "rlatv", NF_DOUBLE, 1, idim_rlatv,nvarid)
216c$$$#else
217c$$$      ierr = NF_DEF_VAR (nid, "rlatv", NF_FLOAT, 1, idim_rlatv,nvarid)
218c$$$#endif
219c$$$      ierr = NF_PUT_ATT_TEXT (nid,nvarid,"title", 20,
220c$$$     .                       "Latitudes at v nodes")
221c$$$      ierr = NF_ENDDEF(nid)
222c$$$#ifdef NC_DOUBLE
223c$$$      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlatv/pi*180)
224c$$$#else
225c$$$      ierr = NF_PUT_VAR_REAL (nid,nvarid,rlatv/pi*180)
226c$$$#endif
227
228
229c$$$c --------------------------
230c$$$c  Vertical levels
231c$$$      call def_var(nid,"aps","hybrid pressure at midlayers ","Pa",
232c$$$     .            1,idim_llm,nvarid,ierr)
233c$$$#ifdef NC_DOUBLE
234c$$$      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,aps)
235c$$$#else
236c$$$      ierr = NF_PUT_VAR_REAL (nid,nvarid,aps)
237c$$$#endif
238c$$$
239c$$$      call def_var(nid,"bps","hybrid sigma at midlayers"," ",
240c$$$     .            1,idim_llm,nvarid,ierr)
241c$$$#ifdef NC_DOUBLE
242c$$$      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,bps)
243c$$$#else
244c$$$      ierr = NF_PUT_VAR_REAL (nid,nvarid,bps)
245c$$$#endif
246c$$$
247c$$$      call def_var(nid,"ap","hybrid pressure at interlayers","Pa",
248c$$$     .            1,idim_llmp1,nvarid,ierr)
249c$$$#ifdef NC_DOUBLE
250c$$$      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,ap)
251c$$$#else
252c$$$      ierr = NF_PUT_VAR_REAL (nid,nvarid,ap)
253c$$$#endif
254c$$$
255c$$$      call def_var(nid,"bp","hybrid sigma at interlayers"," ",
256c$$$     .            1,idim_llmp1,nvarid,ierr)
257c$$$#ifdef NC_DOUBLE
258c$$$      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,bp)
259c$$$#else
260c$$$      ierr = NF_PUT_VAR_REAL (nid,nvarid,bp)
261c$$$#endif
262
263c$$$!-------------------------------
264c$$$! (soil) depth variable mlayer() (known from comsoil.h)
265c$$$!-------------------------------
266c$$$      ierr=NF_REDEF (nid) ! Enter NetCDF (re-)define mode
267c$$$      ! define variable
268c$$$#ifdef NC_DOUBLE
269c$$$      ierr=NF_DEF_VAR(nid,"soildepth",NF_DOUBLE,1,idim_nsoilmx,nvarid)
270c$$$#else
271c$$$      ierr=NF_DEF_VAR(nid,"soildepth",NF_FLOAT,1,idim_nsoilmx,nvarid)
272c$$$#endif
273c$$$      ierr=NF_PUT_ATT_TEXT (nid,nvarid,"long_name", 20,
274c$$$     .                        "Soil mid-layer depth")
275c$$$      ierr=NF_PUT_ATT_TEXT (nid,nvarid,"units",1,"m")
276c$$$      ierr=NF_PUT_ATT_TEXT (nid,nvarid,"positive",4,"down")
277c$$$      ierr=NF_ENDDEF(nid) ! Leave NetCDF define mode
278c$$$      ! write variable
279c$$$#ifdef NC_DOUBLE
280c$$$      ierr=NF_PUT_VAR_DOUBLE (nid,nvarid,mlayer)
281c$$$#else
282c$$$      ierr=NF_PUT_VAR_REAL (nid,nvarid,mlayer)
283c$$$#endif
284
285!-------------------------------
286! Number of bands in the IR
287!-------------------------------
288
289      ierr=NF_REDEF (nid) ! Enter NetCDF (re-)define mode
290      ! define variable
291#ifdef NC_DOUBLE
292      ierr=NF_DEF_VAR(nid,"VI Wavenumber",NF_DOUBLE,1,
293     .                          idim_bandsVI,nvarid)
294#else
295      ierr=NF_DEF_VAR(nid,"VI Wavenumber",NF_FLOAT,1,
296     .                          idim_bandsVI,nvarid)
297#endif
298      ierr=NF_PUT_ATT_TEXT (nid,nvarid,"long_name", 33,
299     .                        "Band mid frequency in the visible")
300      ierr=NF_PUT_ATT_TEXT (nid,nvarid,"units",5,"cm^-1")
301      ierr=NF_ENDDEF(nid) ! Leave NetCDF define mode
302      ! write variable
303#ifdef NC_DOUBLE
304      ierr=NF_PUT_VAR_DOUBLE (nid,nvarid,dble(WNOV))
305#else
306      ierr=NF_PUT_VAR_REAL (nid,nvarid,real(WNOV))
307#endif
308
309c
310c --------------------------
311c  Mesh area and conversion coefficients cov. <-> contra. <--> natural
312
313      id(1)=idim_rlonu
314      id(2)=idim_rlatu
315c
316      ierr = NF_REDEF (nid)
317#ifdef NC_DOUBLE
318      ierr = NF_DEF_VAR (nid, "cu", NF_DOUBLE, 2, id,nvarid)
319#else
320      ierr = NF_DEF_VAR (nid, "cu", NF_FLOAT, 2, id,nvarid)
321#endif
322      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 40,
323     .             "Conversion coefficients cov <--> natural")
324      ierr = NF_ENDDEF(nid)
325#ifdef NC_DOUBLE
326      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,cu)
327#else
328      ierr = NF_PUT_VAR_REAL (nid,nvarid,cu)
329#endif
330c
331      id(1)=idim_rlonv
332      id(2)=idim_rlatv
333c
334c --------------------------
335      ierr = NF_REDEF (nid)
336#ifdef NC_DOUBLE
337      ierr = NF_DEF_VAR (nid, "cv", NF_DOUBLE, 2, id,nvarid)
338#else
339      ierr = NF_DEF_VAR (nid, "cv", NF_FLOAT, 2, id,nvarid)
340#endif
341      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 40,
342     .             "Conversion coefficients cov <--> natural")
343      ierr = NF_ENDDEF(nid)
344#ifdef NC_DOUBLE
345      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,cv)
346#else
347      ierr = NF_PUT_VAR_REAL (nid,nvarid,cv)
348#endif
349c
350      id(1)=idim_rlonv
351      id(2)=idim_rlatu
352c
353c --------------------------
354      ierr = NF_REDEF (nid)
355#ifdef NC_DOUBLE
356      ierr = NF_DEF_VAR (nid, "aire", NF_DOUBLE, 2, id,nvarid)
357#else
358      ierr = NF_DEF_VAR (nid, "aire", NF_FLOAT, 2, id,nvarid)
359#endif
360      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 9,
361     .                       "Mesh area")
362      ierr = NF_ENDDEF(nid)
363#ifdef NC_DOUBLE
364      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,aire)
365#else
366      ierr = NF_PUT_VAR_REAL (nid,nvarid,aire)
367#endif
368
369c  Surface geopotential
370      id(1)=idim_rlonv
371      id(2)=idim_rlatu
372
373      ierr = NF_REDEF (nid)
374#ifdef NC_DOUBLE
375      ierr = NF_DEF_VAR (nid, "phisinit", NF_DOUBLE, 2, id,nvarid)
376#else
377      ierr = NF_DEF_VAR (nid, "phisinit", NF_FLOAT, 2, id,nvarid)
378#endif
379      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 27,
380     .                       "Geopotential at the surface")
381      ierr = NF_ENDDEF(nid)
382#ifdef NC_DOUBLE
383      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,phis)
384#else
385      ierr = NF_PUT_VAR_REAL (nid,nvarid,phis)
386#endif,
387
388
389!      write(*,*)'iniwrite: iim,jjm,llm,idayref',iim,jjm,llm,idayref
390!      write(*,*)'iniwrite: rad,omeg,g,mugaz,rcp',rad,omeg,g,mugaz,rcp
391!      write(*,*)'iniwrite: daysec,dtphys',daysec,dtphys
392
393      END
Note: See TracBrowser for help on using the repository browser.