Changeset 1992 for LMDZ5/trunk/libf/phylmd/inistats.F90
- Timestamp:
- Mar 5, 2014, 2:19:12 PM (11 years ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/inistats.F90
r1988 r1992 1 subroutineinistats(ierr)1 SUBROUTINE inistats(ierr) 2 2 3 implicit none3 IMPLICIT NONE 4 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"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 12 13 integer,intent(out) :: ierr14 integer:: nid15 integer :: l,nsteppd16 real, dimension(llm) ::sig_s17 integer :: idim_lat,idim_lon,idim_llm,idim_llmp1,idim_time18 real, dimension(istime) :: lt19 integer:: nvarid13 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 20 21 write (*,*)22 write (*,*) ' || STATS ||'23 write (*,*)24 write (*,*) 'daysec',daysec25 write (*,*) 'dtphys',dtphys26 nsteppd=nint(daysec/dtphys)27 write (*,*) 'nsteppd=',nsteppd28 if (abs(float(nsteppd)-daysec/dtphys).gt.1.e-8*daysec)29 & stop'Dans Instat: 1jour .ne. n pas physiques'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)>1.E-8*daysec) & 29 STOP 'Dans Instat: 1jour .ne. n pas physiques' 30 30 31 if(mod(nsteppd,istime).ne.0)32 & stop'Dans Instat: 1jour .ne. n*istime pas physiques'31 IF (mod(nsteppd,istime)/=0) STOP & 32 'Dans Instat: 1jour .ne. n*istime pas physiques' 33 33 34 istats=nsteppd/istime35 write (*,*) 'istats=',istats36 write (*,*) 'Storing ',istime,'times per day'37 write (*,*) 'thus every ',istats,'physical timestep '38 write (*,*)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 39 40 do l= 1, llm41 sig_s(l)=((ap(l)+ap(l+1))/preff+bp(l)+bp(l+1))/2.42 pseudoalt(l)=log(preff/presnivs(l))*8.43 enddo40 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 END DO 44 44 45 ierr = NF_CREATE("stats.nc",NF_CLOBBER,nid)46 if (ierr.ne.NF_NOERR) then47 write (*,*) NF_STRERROR(ierr)48 stop ""49 endif45 ierr = nf_create('stats.nc', nf_clobber, nid) 46 IF (ierr/=nf_noerr) THEN 47 WRITE (*, *) nf_strerror(ierr) 48 STOP '' 49 END IF 50 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)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 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 57 ierr = nf_enddef(nid) 58 CALL def_var_stats(nid, 'Time', 'Time', 'hours since 0000-00-0 00:00:00', & 59 1, idim_time, nvarid, ierr) 60 ! Time is initialised later by mkstats subroutine 62 61 63 call def_var_stats(nid,"latitude","latitude",64 & "degrees_north",1,idim_lat,nvarid,ierr)62 CALL def_var_stats(nid, 'latitude', 'latitude', 'degrees_north', 1, & 63 idim_lat, nvarid, ierr) 65 64 #ifdef NC_DOUBLE 66 ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlatu/pi*180)65 ierr = nf_put_var_double(nid, nvarid, rlatu/pi*180) 67 66 #else 68 ierr = NF_PUT_VAR_REAL (nid,nvarid,rlatu/pi*180)67 ierr = nf_put_var_real(nid, nvarid, rlatu/pi*180) 69 68 #endif 70 call def_var_stats(nid,"longitude","East longitude",71 & "degrees_east",1,idim_lon,nvarid,ierr)69 CALL def_var_stats(nid, 'longitude', 'East longitude', 'degrees_east', 1, & 70 idim_lon, nvarid, ierr) 72 71 #ifdef NC_DOUBLE 73 ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlonv/pi*180)72 ierr = nf_put_var_double(nid, nvarid, rlonv/pi*180) 74 73 #else 75 ierr = NF_PUT_VAR_REAL (nid,nvarid,rlonv/pi*180)74 ierr = nf_put_var_real(nid, nvarid, rlonv/pi*180) 76 75 #endif 77 76 78 ! Niveaux verticaux, aps et bps79 ierr = NF_REDEF(nid)80 ! presnivs77 ! Niveaux verticaux, aps et bps 78 ierr = nf_redef(nid) 79 ! presnivs 81 80 #ifdef NC_DOUBLE 82 ierr = NF_DEF_VAR (nid,"presnivs", NF_DOUBLE, 1,idim_llm,nvarid)81 ierr = nf_def_var(nid, 'presnivs', nf_double, 1, idim_llm, nvarid) 83 82 #else 84 ierr = NF_DEF_VAR (nid,"presnivs", NF_FLOAT, 1,idim_llm,nvarid)83 ierr = nf_def_var(nid, 'presnivs', nf_float, 1, idim_llm, nvarid) 85 84 #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) 85 ierr = nf_put_att_text(nid, nvarid, 'long_name', 15, 'Vertical levels') 86 ierr = nf_put_att_text(nid, nvarid, 'units', 2, 'Pa') 87 ierr = nf_put_att_text(nid, nvarid, 'positive', 4, 'down') 88 ierr = nf_enddef(nid) 91 89 #ifdef NC_DOUBLE 92 ierr = NF_PUT_VAR_DOUBLE (nid,nvarid, 93 & presnivs(1:llm)) 90 ierr = nf_put_var_double(nid, nvarid, presnivs(1:llm)) 94 91 #else 95 ierr = NF_PUT_VAR_REAL (nid,nvarid, 96 & presnivs(1:llm)) 97 #endif 98 ! Pseudo alts 92 ierr = nf_put_var_real(nid, nvarid, presnivs(1:llm)) 93 #endif 94 ! Pseudo alts 99 95 #ifdef NC_DOUBLE 100 ierr = NF_DEF_VAR (nid,"altitude", NF_DOUBLE, 1,idim_llm,nvarid)96 ierr = nf_def_var(nid, 'altitude', nf_double, 1, idim_llm, nvarid) 101 97 #else 102 ierr = NF_DEF_VAR (nid,"altitude", NF_FLOAT, 1,idim_llm,nvarid)98 ierr = nf_def_var(nid, 'altitude', nf_float, 1, idim_llm, nvarid) 103 99 #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)100 ierr = nf_put_att_text(nid, nvarid, 'long_name', 8, 'altitude') 101 ierr = nf_put_att_text(nid, nvarid, 'units', 2, 'km') 102 ierr = nf_put_att_text(nid, nvarid, 'positive', 2, 'up') 103 ierr = nf_enddef(nid) 108 104 #ifdef NC_DOUBLE 109 ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,pseudoalt)105 ierr = nf_put_var_double(nid, nvarid, pseudoalt) 110 106 #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_DOUBLE116 !ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,aps)117 !#else118 !ierr = NF_PUT_VAR_REAL (nid,nvarid,aps)119 !#endif107 ierr = nf_put_var_real(nid, nvarid, pseudoalt) 108 #endif 109 ! call def_var_stats(nid,"aps","hybrid pressure at midlayers"," ", 110 ! & 1,idim_llm,nvarid,ierr) 111 ! #ifdef NC_DOUBLE 112 ! ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,aps) 113 ! #else 114 ! ierr = NF_PUT_VAR_REAL (nid,nvarid,aps) 115 ! #endif 120 116 121 ! call def_var_stats(nid,"bps","hybrid sigma at midlayers"," ", 122 !& 1,idim_llm,nvarid,ierr)123 !#ifdef NC_DOUBLE124 !ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,bps)125 !#else 126 !ierr = NF_PUT_VAR_REAL (nid,nvarid,bps)127 !#endif117 ! call def_var_stats(nid,"bps","hybrid sigma at midlayers"," ", 118 ! & 1,idim_llm,nvarid,ierr) 119 ! #ifdef NC_DOUBLE 120 ! ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,bps) 121 ! #else 122 ! ierr = NF_PUT_VAR_REAL (nid,nvarid,bps) 123 ! #endif 128 124 129 ierr=NF_CLOSE(nid)125 ierr = nf_close(nid) 130 126 131 end subroutineinistats127 END SUBROUTINE inistats 132 128
Note: See TracChangeset
for help on using the changeset viewer.