source: codes/icosagcm/branches/SATURN_DYNAMICO/LMDZ.COMMON/libf/phystd/inistats.F

Last change on this file was 313, checked in by ymipsl, 10 years ago
  • implement splitting of XIOS file for lmdz physics
  • Termination is done properly in parallel by calling MPI_ABORT instead of abort or stop

YM

File size: 3.7 KB
Line 
1      subroutine inistats(ierr)
2
3      use mod_phys_lmdz_para, only : is_master
4      implicit none
5
6#include "dimensions.h"
7#include "paramet.h"
8#include "comgeom.h"
9#include "comvert.h"
10#include "comconst.h"
11#include "statto.h"
12#include "netcdf.inc"
13
14      integer,intent(out) :: ierr
15      integer :: nid
16      integer :: l,nsteppd
17      real, dimension(llm) ::  sig_s
18      integer :: idim_lat,idim_lon,idim_llm,idim_llmp1,idim_time
19      real, dimension(istime) :: lt
20      integer :: nvarid
21
22      write (*,*) 
23      write (*,*) '                        || STATS ||'
24      write (*,*) 
25      write (*,*) 'daysec',daysec
26      write (*,*) 'dtphys',dtphys
27      nsteppd=nint(daysec/dtphys)
28      write (*,*) 'nsteppd=',nsteppd
29      if (abs(float(nsteppd)-daysec/dtphys).gt.1.e-8*daysec) THEN
30        PRINT *,'Dans Instat:  1jour .ne. n pas physiques'
31        CALL abort_physiq
32      endif
33
34      if(mod(nsteppd,istime).ne.0) THEN
35        PRINT*,'Dans Instat:  1jour .ne. n*istime pas physiques'
36        CALL abort_physiq
37      endif       
38
39      istats=nsteppd/istime
40      write (*,*) 'istats=',istats
41      write (*,*) 'Storing ',istime,'times per day'
42      write (*,*) 'thus every ',istats,'physical timestep '
43      write (*,*) 
44
45      do l= 1, llm
46         sig_s(l)=((ap(l)+ap(l+1))/preff+bp(l)+bp(l+1))/2.
47         pseudoalt(l)=-10.*log(presnivs(l)/preff)   
48      enddo
49
50      if (is_master) then
51      ! only the master needs do this
52
53      ierr = NF_CREATE("stats.nc",IOR(NF_CLOBBER,NF_64BIT_OFFSET),nid)
54      if (ierr.ne.NF_NOERR) then
55         write (*,*) NF_STRERROR(ierr)
56         CALL abort_physiq
57      endif
58
59      ierr = NF_DEF_DIM (nid, "latitude", jjp1, idim_lat)
60      ierr = NF_DEF_DIM (nid, "longitude", iip1, idim_lon)
61      ierr = NF_DEF_DIM (nid, "altitude", llm, idim_llm)
62      ierr = NF_DEF_DIM (nid, "llmp1", llm+1, idim_llmp1)
63      ierr = NF_DEF_DIM (nid, "Time", NF_UNLIMITED, idim_time)
64
65      ierr = NF_ENDDEF(nid)
66      call def_var_stats(nid,"Time","Time",
67     &            "days since 0000-00-0 00:00:00",1,
68     &            idim_time,nvarid,ierr)
69! Time is initialised later by mkstats subroutine
70
71      call def_var_stats(nid,"latitude","latitude",
72     &            "degrees_north",1,idim_lat,nvarid,ierr)
73#ifdef NC_DOUBLE
74      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlatu/pi*180)
75#else
76      ierr = NF_PUT_VAR_REAL (nid,nvarid,rlatu/pi*180)
77#endif
78      call def_var_stats(nid,"longitude","East longitude",
79     &            "degrees_east",1,idim_lon,nvarid,ierr)
80#ifdef NC_DOUBLE
81      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlonv/pi*180)
82#else
83      ierr = NF_PUT_VAR_REAL (nid,nvarid,rlonv/pi*180)
84#endif
85
86! Niveaux verticaux, aps et bps
87      ierr = NF_REDEF (nid)
88#ifdef NC_DOUBLE
89      ierr = NF_DEF_VAR (nid,"altitude", NF_DOUBLE, 1,idim_llm,nvarid)
90#else
91      ierr = NF_DEF_VAR (nid,"altitude", NF_FLOAT, 1,idim_llm,nvarid)
92#endif
93      ierr = NF_PUT_ATT_TEXT (nid,nvarid,"long_name",8,"altitude")
94      ierr = NF_PUT_ATT_TEXT (nid,nvarid,'units',2,"km")
95      ierr = NF_PUT_ATT_TEXT (nid,nvarid,'positive',2,"up")
96      ierr = NF_ENDDEF(nid)
97#ifdef NC_DOUBLE
98      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,pseudoalt)
99#else
100      ierr = NF_PUT_VAR_REAL (nid,nvarid,pseudoalt)
101#endif
102      call def_var_stats(nid,"aps","hybrid pressure at midlayers"
103     & ," ",1,idim_llm,nvarid,ierr)
104#ifdef NC_DOUBLE
105      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,aps)
106#else
107      ierr = NF_PUT_VAR_REAL (nid,nvarid,aps)
108#endif
109
110      call def_var_stats(nid,"bps","hybrid sigma at midlayers"
111     & ," ",1,idim_llm,nvarid,ierr)
112#ifdef NC_DOUBLE
113      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,bps)
114#else
115      ierr = NF_PUT_VAR_REAL (nid,nvarid,bps)
116#endif
117
118      ierr=NF_CLOSE(nid)
119
120      endif ! of if (is_master)
121      end subroutine inistats
122
Note: See TracBrowser for help on using the repository browser.