My Project
 All Classes Files Functions Variables Macros
inistats.F
Go to the documentation of this file.
1  subroutine inistats(ierr)
2 
3  implicit none
4 
5 #include "dimensions.h"
6 #include "paramet.h"
7 #include "comgeom.h"
8 #include "comvert.h"
9 #include "comconst.h"
10 #include "statto.h"
11 #include "netcdf.inc"
12 
13  integer,intent(out) :: ierr
14  integer :: nid
15  integer :: l,nsteppd
16  real, dimension(llm) :: sig_s
17  integer :: idim_lat,idim_lon,idim_llm,idim_llmp1,idim_time
18  real, dimension(istime) :: lt
19  integer :: nvarid
20 
21  write (*,*)
22  write (*,*) ' || STATS ||'
23  write (*,*)
24  write (*,*) 'daysec',daysec
25  write (*,*) 'dtphys',dtphys
26  nsteppd=nint(daysec/dtphys)
27  write (*,*) 'nsteppd=',nsteppd
28  if (abs(float(nsteppd)-daysec/dtphys).gt.1.e-8*daysec)
29  & stop.ne.'Dans Instat: 1jour n pas physiques'
30 
31  if(mod(nsteppd,istime).ne.0)
32  & stop.ne.'Dans Instat: 1jour n*istime pas physiques'
33 
34  istats=nsteppd/istime
35  write (*,*) 'istats=',istats
36  write (*,*) 'Storing ',istime,'times per day'
37  write (*,*) 'thus every ',istats,'physical timestep '
38  write (*,*)
39 
40  do l= 1, llm
41  sig_s(l)=((ap(l)+ap(l+1))/preff+bp(l)+bp(l+1))/2.
42  pseudoalt(l)=log(preff/presnivs(l))*8.
43  enddo
44 
45  ierr = nf_create("stats.nc",nf_clobber,nid)
46  if (ierr.ne.nf_noerr) then
47  write (*,*) nf_strerror(ierr)
48  stop ""
49  endif
50 
51  ierr = nf_def_dim(nid, "latitude", jjp1, idim_lat)
52  ierr = nf_def_dim(nid, "longitude", iip1, idim_lon)
53  ierr = nf_def_dim(nid, "altitude", llm, idim_llm)
54  ierr = nf_def_dim(nid, "llmp1", llm+1, idim_llmp1)
55  ierr = nf_def_dim(nid, "Time", nf_unlimited, idim_time)
56 
57  ierr = nf_enddef(nid)
58  call def_var_stats(nid,"Time","Time",
59  & "hours since 0000-00-0 00:00:00",1,
60  & idim_time,nvarid,ierr)
61 ! Time is initialised later by mkstats subroutine
62 
63  call def_var_stats(nid,"latitude","latitude",
64  & "degrees_north",1,idim_lat,nvarid,ierr)
65 #ifdef NC_DOUBLE
66  ierr = nf_put_var_double(nid,nvarid,rlatu/pi*180)
67 #else
68  ierr = nf_put_var_real(nid,nvarid,rlatu/pi*180)
69 #endif
70  call def_var_stats(nid,"longitude","East longitude",
71  & "degrees_east",1,idim_lon,nvarid,ierr)
72 #ifdef NC_DOUBLE
73  ierr = nf_put_var_double(nid,nvarid,rlonv/pi*180)
74 #else
75  ierr = nf_put_var_real(nid,nvarid,rlonv/pi*180)
76 #endif
77 
78 ! Niveaux verticaux, aps et bps
79  ierr = nf_redef(nid)
80 ! presnivs
81 #ifdef NC_DOUBLE
82  ierr = nf_def_var(nid,"presnivs", nf_double, 1,idim_llm,nvarid)
83 #else
84  ierr = nf_def_var(nid,"presnivs", nf_float, 1,idim_llm,nvarid)
85 #endif
86  ierr = nf_put_att_text(nid,nvarid,"long_name",15,
87  & "Vertical levels")
88  ierr = nf_put_att_text(nid,nvarid,'units',2,"Pa")
89  ierr = nf_put_att_text(nid,nvarid,'positive',4,"down")
90  ierr = nf_enddef(nid)
91 #ifdef NC_DOUBLE
92  ierr = nf_put_var_double(nid,nvarid,
93  & presnivs(1:llm))
94 #else
95  ierr = nf_put_var_real(nid,nvarid,
96  & presnivs(1:llm))
97 #endif
98 ! Pseudo alts
99 #ifdef NC_DOUBLE
100  ierr = nf_def_var(nid,"altitude", nf_double, 1,idim_llm,nvarid)
101 #else
102  ierr = nf_def_var(nid,"altitude", nf_float, 1,idim_llm,nvarid)
103 #endif
104  ierr = nf_put_att_text(nid,nvarid,"long_name",8,"altitude")
105  ierr = nf_put_att_text(nid,nvarid,'units',2,"km")
106  ierr = nf_put_att_text(nid,nvarid,'positive',2,"up")
107  ierr = nf_enddef(nid)
108 #ifdef NC_DOUBLE
109  ierr = nf_put_var_double(nid,nvarid,pseudoalt)
110 #else
111  ierr = nf_put_var_real(nid,nvarid,pseudoalt)
112 #endif
113 ! call def_var_stats(nid,"aps","hybrid pressure at midlayers"," ",
114 ! & 1,idim_llm,nvarid,ierr)
115 !#ifdef NC_DOUBLE
116 ! ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,aps)
117 !#else
118 ! ierr = NF_PUT_VAR_REAL (nid,nvarid,aps)
119 !#endif
120 
121 ! call def_var_stats(nid,"bps","hybrid sigma at midlayers"," ",
122 ! & 1,idim_llm,nvarid,ierr)
123 !#ifdef NC_DOUBLE
124 ! ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,bps)
125 !#else
126 ! ierr = NF_PUT_VAR_REAL (nid,nvarid,bps)
127 !#endif
128 
129  ierr=nf_close(nid)
130 
131  end subroutine inistats
132