LMDZ
dynredem_mod.F90
Go to the documentation of this file.
2 
3  USE netcdf
4  PRIVATE
7  include "dimensions.h"
8  include "paramet.h"
9  CHARACTER(LEN=256), SAVE :: fil, modname
10  INTEGER, SAVE :: nvarid
11 
12 
13 CONTAINS
14 
15 
16 !===============================================================================
17 !
18 SUBROUTINE dynredem_write_u(ncid,id,var,ll)
19 !
20 !===============================================================================
21  IMPLICIT NONE
22 !===============================================================================
23 ! Arguments:
24  INTEGER, INTENT(IN) :: ncid
25  CHARACTER(LEN=*), INTENT(IN) :: id
26  REAL, INTENT(IN) :: var(iip1,jjp1,ll)
27  INTEGER, INTENT(IN) :: ll
28 !===============================================================================
29 ! Local variables:
30  INTEGER :: start(4), count(4)
31 !===============================================================================
32  start(:)=[1,1,1,1]; count(:)=[iip1,jjp1,ll,1]
33  CALL err(nf90_inq_varid(ncid,id,nvarid),"inq",id)
34  CALL err(nf90_put_var(ncid,nvarid,var,start,count),"put",id)
35 
36 END SUBROUTINE dynredem_write_u
37 !
38 !===============================================================================
39 
40 
41 !===============================================================================
42 !
43 SUBROUTINE dynredem_write_v(ncid,id,var,ll)
44 !
45 !===============================================================================
46  IMPLICIT NONE
47 !===============================================================================
48 ! Arguments:
49  INTEGER, INTENT(IN) :: ncid
50  CHARACTER(LEN=*), INTENT(IN) :: id
51  REAL, INTENT(IN) :: var(iip1,jjm,ll)
52  INTEGER, INTENT(IN) :: ll
53 !===============================================================================
54 ! Local variables:
55  INTEGER :: start(4), count(4)
56 !===============================================================================
57  start(:)=[1,1,1,1]; count(:)=[iip1,jjm,ll,1]
58  CALL err(nf90_inq_varid(ncid,id,nvarid),"inq",id)
59  CALL err(nf90_put_var(ncid,nvarid,var,start,count),"put",id)
60 
61 END SUBROUTINE dynredem_write_v
62 !
63 !===============================================================================
64 
65 
66 !===============================================================================
67 !
68 SUBROUTINE dynredem_read_u(ncid,id,var,ll)
69 !
70 !===============================================================================
71  IMPLICIT NONE
72 !===============================================================================
73 ! Arguments:
74  INTEGER, INTENT(IN) :: ncid
75  CHARACTER(LEN=*), INTENT(IN) :: id
76  REAL, INTENT(OUT) :: var(iip1,jjp1,ll)
77  INTEGER, INTENT(IN) :: ll
78 !===============================================================================
79 ! Local variables:
80  INTEGER :: start(4), count(4)
81 !===============================================================================
82  start(:)=[1,1,1,1]; count(:)=[iip1,jjp1,ll,1]
83  CALL err(nf90_inq_varid(ncid,id,nvarid),"inq",id)
84  CALL err(nf90_get_var(ncid,nvarid,var,start,count),"get",id)
85 
86 END SUBROUTINE dynredem_read_u
87 !
88 !===============================================================================
89 
90 
91 !===============================================================================
92 !
93 SUBROUTINE cre_var(ncid,var,title,did,units)
94 !
95 !===============================================================================
96  IMPLICIT NONE
97 !===============================================================================
98 ! Arguments:
99  INTEGER, INTENT(IN) :: ncid
100  CHARACTER(LEN=*), INTENT(IN) :: var, title
101  INTEGER, INTENT(IN) :: did(:)
102  CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: units
103 !===============================================================================
104 #ifdef NC_DOUBLE
105  CALL err(nf90_def_var(ncid,var,nf90_double,did,nvarid),"inq",var)
106 #else
107  CALL err(nf90_def_var(ncid,var,nf90_float ,did,nvarid),"inq",var)
108 #endif
109  IF(title/="") CALL err(nf90_put_att(ncid,nvarid,"title",title),var)
110  IF(PRESENT(units)) CALL err(nf90_put_att(ncid,nvarid,"units",units),var)
111 
112 END SUBROUTINE cre_var
113 !
114 !===============================================================================
115 
116 
117 !===============================================================================
118 !
119 SUBROUTINE put_var1(ncid,var,title,did,v,units)
120 !
121 !===============================================================================
122  IMPLICIT NONE
123 !===============================================================================
124 ! Arguments:
125  INTEGER, INTENT(IN) :: ncid
126  CHARACTER(LEN=*), INTENT(IN) :: var, title
127  INTEGER, INTENT(IN) :: did(1)
128  REAL, INTENT(IN) :: v(:)
129  CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: units
130 !===============================================================================
131  IF( PRESENT(units)) CALL cre_var(ncid,var,title,did,units)
132  IF(.NOT.PRESENT(units)) CALL cre_var(ncid,var,title,did)
133  CALL err(nf90_enddef(ncid))
134  CALL err(nf90_put_var(ncid,nvarid,v),"put",var)
135  CALL err(nf90_redef(ncid))
136 
137 END SUBROUTINE put_var1
138 !
139 !===============================================================================
140 
141 
142 !===============================================================================
143 !
144 SUBROUTINE put_var2(ncid,var,title,did,v,units)
145 !
146 !===============================================================================
147  IMPLICIT NONE
148 !===============================================================================
149 ! Arguments:
150  INTEGER, INTENT(IN) :: ncid
151  CHARACTER(LEN=*), INTENT(IN) :: var, title
152  INTEGER, INTENT(IN) :: did(2)
153  REAL, INTENT(IN) :: v(:,:)
154  CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: units
155 !===============================================================================
156  IF( PRESENT(units)) CALL cre_var(ncid,var,title,did,units)
157  IF(.NOT.PRESENT(units)) CALL cre_var(ncid,var,title,did)
158  CALL err(nf90_enddef(ncid))
159  CALL err(nf90_put_var(ncid,nvarid,v),"put",var)
160  CALL err(nf90_redef(ncid))
161 
162 END SUBROUTINE put_var2
163 !
164 !===============================================================================
165 
166 
167 !===============================================================================
168 !
169 FUNCTION msg(typ,nam)
170 !
171 !===============================================================================
172  IMPLICIT NONE
173 !===============================================================================
174 ! Arguments:
175  CHARACTER(LEN=256) :: msg !--- STANDARDIZED MESSAGE
176  CHARACTER(LEN=*), INTENT(IN) :: typ !--- TYPE OF OPERATION
177  CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: nam !--- FIELD NAME
178 !===============================================================================
179  SELECT CASE(typ)
180  CASE('open'); msg="Opening failed for <"//trim(fil)//">"
181  CASE('close'); msg="Closing failed for <"//trim(fil)//">"
182  CASE('get'); msg="Reading failed for <"//trim(nam)//">"
183  CASE('put'); msg="Writting failed for <"//trim(nam)//">"
184  CASE('inq'); msg="Missing field <"//trim(nam)//">"
185  CASE('fnd'); msg="Found field <"//trim(nam)//">"
186  END SELECT
187  msg=trim(msg)//" in file <"//trim(fil)//">"
188 
189 END FUNCTION msg
190 !
191 !===============================================================================
192 
193 
194 !===============================================================================
195 !
196 SUBROUTINE err(ierr,typ,nam)
197 !
198 !===============================================================================
199  IMPLICIT NONE
200 !===============================================================================
201 ! Arguments:
202  INTEGER, INTENT(IN) :: ierr !--- NetCDF ERROR CODE
203  CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: typ !--- TYPE OF OPERATION
204  CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: nam !--- FIELD NAME
205 !===============================================================================
206  IF(ierr==nf90_noerr) RETURN
207  IF(.NOT.PRESENT(typ)) THEN
208  CALL abort_gcm(modname,nf90_strerror(ierr),ierr)
209  ELSE
210  CALL abort_gcm(modname,msg(typ,nam),ierr)
211  END IF
212 
213 END SUBROUTINE err
214 !
215 !===============================================================================
216 
217 END MODULE dynredem_mod
218 
219 
subroutine, public put_var2(ncid, var, title, did, v, units)
subroutine get_var1(var, v)
Definition: dynetat0.f90:165
subroutine, public dynredem_write_u(ncid, id, var, ll)
character(len=256), save, public fil
Definition: dynredem_mod.F90:9
subroutine abort_gcm(modname, message, ierr)
Definition: abort_gcm.F:7
subroutine err(ierr, typ, nam)
Definition: dynetat0.f90:189
integer, save nvarid
character(len=256), save, public modname
Definition: dynredem_mod.F90:9
!$Header jjp1
Definition: paramet.h:14
character(len=256) function, public msg(typ, nam)
subroutine, public dynredem_write_v(ncid, id, var, ll)
!$Id Turb_fcg!implicit none!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc!cette routine permet d obtenir hq et ainsi de!pouvoir calculer la convergence et le cisaillement dans la physiq!cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc INTEGER klev REAL ll
Definition: 1Dconv.h:27
subroutine, public put_var1(ncid, var, title, did, v, units)
subroutine, public dynredem_read_u(ncid, id, var, ll)
subroutine, public cre_var(ncid, var, title, did, units)