9 |
|
|
10 |
INTERFACE flinget |
INTERFACE flinget |
11 |
MODULE PROCEDURE flinget_r3d, flinget_r2d |
MODULE PROCEDURE flinget_r3d, flinget_r2d |
12 |
|
! The difference between the procedures is the rank of argument "var". |
13 |
END INTERFACE |
END INTERFACE |
14 |
|
|
15 |
CONTAINS |
CONTAINS |
16 |
|
|
17 |
SUBROUTINE flinget_r2d & |
SUBROUTINE flinget_r2d(fid_in, varname, iim, jjm, llm, ttm, itau_dep, & |
18 |
(fid_in,varname,iim,jjm,llm,ttm,itau_dep,itau_fin,var) |
itau_fin, var) |
|
!--------------------------------------------------------------------- |
|
|
IMPLICIT NONE |
|
19 |
|
|
20 |
INTEGER :: fid_in |
INTEGER, intent(in):: fid_in |
21 |
CHARACTER(LEN=*) :: varname |
CHARACTER(LEN=*), intent(in):: varname |
22 |
INTEGER :: iim, jjm, llm, ttm, itau_dep, itau_fin |
INTEGER, intent(in):: iim, jjm, llm, ttm, itau_dep, itau_fin |
23 |
REAL :: var(:,:) |
REAL, intent(out):: var(:, :) |
24 |
|
|
25 |
|
! Local: |
26 |
INTEGER :: jl, jj, ji |
INTEGER :: jl, jj, ji |
27 |
REAL,DIMENSION(:),ALLOCATABLE,SAVE :: buff_tmp |
REAL, DIMENSION(:), ALLOCATABLE, SAVE :: buff_tmp |
28 |
LOGICAL :: check = .FALSE. |
LOGICAL :: check = .FALSE. |
29 |
|
|
30 |
!--------------------------------------------------------------------- |
!--------------------------------------------------------------------- |
31 |
|
|
32 |
IF (.NOT.ALLOCATED(buff_tmp)) THEN |
IF (.NOT.ALLOCATED(buff_tmp)) THEN |
33 |
IF (check) WRITE(*,*) & |
IF (check) WRITE(*, *) & |
34 |
"flinget_r2d : allocate buff_tmp for buff_sz = ",SIZE(var) |
"flinget_r2d : allocate buff_tmp for buff_sz = ", SIZE(var) |
35 |
ALLOCATE (buff_tmp(SIZE(var))) |
ALLOCATE (buff_tmp(SIZE(var))) |
36 |
ELSE IF (SIZE(var) > SIZE(buff_tmp)) THEN |
ELSE IF (SIZE(var) > SIZE(buff_tmp)) THEN |
37 |
IF (check) WRITE(*,*) & |
IF (check) WRITE(*, *) & |
38 |
"flinget_r2d : re-allocate buff_tmp for buff_sz = ",SIZE(var) |
"flinget_r2d : re-allocate buff_tmp for buff_sz = ", SIZE(var) |
39 |
DEALLOCATE (buff_tmp) |
DEALLOCATE (buff_tmp) |
40 |
ALLOCATE (buff_tmp(SIZE(var))) |
ALLOCATE (buff_tmp(SIZE(var))) |
41 |
ENDIF |
ENDIF |
42 |
|
|
43 |
CALL flinget_mat (fid_in,varname,iim,jjm,llm,ttm, & |
CALL flinget_mat(fid_in, varname, iim, jjm, llm, ttm, itau_dep, & |
44 |
itau_dep,itau_fin,1,iim,1,jjm,buff_tmp) |
itau_fin, 1, iim, 1, jjm, buff_tmp) |
45 |
|
|
46 |
jl=0 |
jl=0 |
47 |
DO jj=1,SIZE(var,2) |
DO jj=1, SIZE(var, 2) |
48 |
DO ji=1,SIZE(var,1) |
DO ji=1, SIZE(var, 1) |
49 |
jl=jl+1 |
jl=jl+1 |
50 |
var(ji,jj) = buff_tmp(jl) |
var(ji, jj) = buff_tmp(jl) |
51 |
ENDDO |
ENDDO |
52 |
ENDDO |
ENDDO |
53 |
!------------------------- |
|
54 |
END SUBROUTINE flinget_r2d |
END SUBROUTINE flinget_r2d |
55 |
|
|
56 |
!=== |
!**************************************************************** |
57 |
|
|
58 |
SUBROUTINE flinget_r3d(fid_in,varname,iim,jjm,llm,ttm,itau_dep,itau_fin,var) |
SUBROUTINE flinget_r3d(fid_in, varname, iim, jjm, llm, ttm, itau_dep, & |
59 |
!--------------------------------------------------------------------- |
itau_fin, var) |
|
IMPLICIT NONE |
|
60 |
|
|
61 |
INTEGER, intent(in):: fid_in |
INTEGER, intent(in):: fid_in |
62 |
CHARACTER(LEN=*), intent(in):: varname |
CHARACTER(LEN=*), intent(in):: varname |
63 |
INTEGER, intent(in):: iim, jjm, llm, ttm, itau_dep, itau_fin |
INTEGER, intent(in):: iim, jjm, llm, ttm, itau_dep, itau_fin |
64 |
REAL, intent(out):: var(:,:,:) |
REAL, intent(out):: var(:, :, :) |
65 |
|
|
66 |
|
! Local: |
67 |
INTEGER :: jl, jk, jj, ji |
INTEGER :: jl, jk, jj, ji |
68 |
REAL,DIMENSION(:),ALLOCATABLE,SAVE :: buff_tmp |
REAL, DIMENSION(:), ALLOCATABLE, SAVE :: buff_tmp |
69 |
LOGICAL :: check = .FALSE. |
LOGICAL :: check = .FALSE. |
70 |
|
|
71 |
!--------------------------------------------------------------------- |
!--------------------------------------------------------------------- |
72 |
|
|
73 |
IF (.NOT.ALLOCATED(buff_tmp)) THEN |
IF (.NOT.ALLOCATED(buff_tmp)) THEN |
74 |
IF (check) WRITE(*,*) & |
IF (check) WRITE(*, *) & |
75 |
"flinget_r3d : allocate buff_tmp for buff_sz = ",SIZE(var) |
"flinget_r3d : allocate buff_tmp for buff_sz = ", SIZE(var) |
76 |
ALLOCATE (buff_tmp(SIZE(var))) |
ALLOCATE (buff_tmp(SIZE(var))) |
77 |
ELSE IF (SIZE(var) > SIZE(buff_tmp)) THEN |
ELSE IF (SIZE(var) > SIZE(buff_tmp)) THEN |
78 |
IF (check) WRITE(*,*) & |
IF (check) WRITE(*, *) & |
79 |
"flinget_r3d : re-allocate buff_tmp for buff_sz = ",SIZE(var) |
"flinget_r3d : re-allocate buff_tmp for buff_sz = ", SIZE(var) |
80 |
DEALLOCATE (buff_tmp) |
DEALLOCATE (buff_tmp) |
81 |
ALLOCATE (buff_tmp(SIZE(var))) |
ALLOCATE (buff_tmp(SIZE(var))) |
82 |
ENDIF |
ENDIF |
83 |
|
|
84 |
CALL flinget_mat (fid_in,varname,iim,jjm,llm,ttm, & |
CALL flinget_mat (fid_in, varname, iim, jjm, llm, ttm, & |
85 |
itau_dep,itau_fin,1,iim,1,jjm,buff_tmp) |
itau_dep, itau_fin, 1, iim, 1, jjm, buff_tmp) |
86 |
|
|
87 |
jl=0 |
jl=0 |
88 |
DO jk=1,SIZE(var,3) |
DO jk=1, SIZE(var, 3) |
89 |
DO jj=1,SIZE(var,2) |
DO jj=1, SIZE(var, 2) |
90 |
DO ji=1,SIZE(var,1) |
DO ji=1, SIZE(var, 1) |
91 |
jl=jl+1 |
jl=jl+1 |
92 |
var(ji,jj,jk) = buff_tmp(jl) |
var(ji, jj, jk) = buff_tmp(jl) |
93 |
ENDDO |
ENDDO |
94 |
ENDDO |
ENDDO |
95 |
ENDDO |
ENDDO |
96 |
!------------------------- |
|
97 |
END SUBROUTINE flinget_r3d |
END SUBROUTINE flinget_r3d |
98 |
|
|
99 |
!=== |
!**************************************************************** |
100 |
|
|
101 |
SUBROUTINE flinget_mat & |
SUBROUTINE flinget_mat(fid_in, varname, iim, jjm, llm, ttm, itau_dep, & |
|
(fid_in, varname, iim, jjm, llm, ttm, itau_dep, & |
|
102 |
itau_fin, iideb, iilen, jjdeb, jjlen, var) |
itau_fin, iideb, iilen, jjdeb, jjlen, var) |
103 |
!--------------------------------------------------------------------- |
|
104 |
!- This subroutine will read the variable named varname from |
!- This subroutine will read the variable named varname from |
105 |
!- the file previously opened by flinopen and identified by fid |
!- the file previously opened by flinopen and identified by fid |
106 |
|
|
136 |
!- OUTPUT |
!- OUTPUT |
137 |
|
|
138 |
!- var : array that will contain the data |
!- var : array that will contain the data |
139 |
!--------------------------------------------------------------------- |
|
140 |
USE strlowercase_m, ONLY : strlowercase |
USE strlowercase_m, ONLY : strlowercase |
141 |
USE errioipsl, ONLY : histerr |
USE errioipsl, ONLY : histerr |
142 |
USE netcdf, ONLY : nf90_byte, nf90_double, nf90_float, nf90_get_att, & |
USE netcdf, ONLY : nf90_byte, nf90_double, nf90_float, nf90_get_att, & |
145 |
nf90_max_var_dims, nf90_noerr, nf90_short, nf90_strerror |
nf90_max_var_dims, nf90_noerr, nf90_short, nf90_strerror |
146 |
use flincom, only: ncids |
use flincom, only: ncids |
147 |
|
|
|
IMPLICIT NONE |
|
|
|
|
148 |
! ARGUMENTS |
! ARGUMENTS |
149 |
|
|
150 |
INTEGER, intent(in):: fid_in |
INTEGER, intent(in):: fid_in |
161 |
INTEGER, SAVE :: cind_vid |
INTEGER, SAVE :: cind_vid |
162 |
INTEGER, SAVE :: cind_fid |
INTEGER, SAVE :: cind_fid |
163 |
INTEGER, SAVE :: cind_len |
INTEGER, SAVE :: cind_len |
164 |
INTEGER,DIMENSION(:),ALLOCATABLE,SAVE :: cindex |
INTEGER, DIMENSION(:), ALLOCATABLE, SAVE :: cindex |
165 |
INTEGER,DIMENSION(4) :: w_sta, w_len, w_dim |
INTEGER, DIMENSION(4) :: w_sta, w_len, w_dim |
166 |
INTEGER :: iret, fid |
INTEGER :: iret, fid |
167 |
INTEGER :: vid, cvid, clen |
INTEGER :: vid, cvid, clen |
168 |
CHARACTER(LEN=70) :: str1 |
CHARACTER(LEN=70) :: str1 |
169 |
CHARACTER(LEN=250) :: att_n, tmp_n |
CHARACTER(LEN=250) :: att_n, tmp_n |
170 |
INTEGER :: tmp_i |
INTEGER :: tmp_i |
171 |
REAL,SAVE :: mis_v=0. |
REAL, SAVE :: mis_v=0. |
172 |
REAL :: tmp_r |
REAL :: tmp_r |
173 |
INTEGER :: ndims, x_typ, nb_atts |
INTEGER :: ndims, x_typ, nb_atts |
174 |
INTEGER,DIMENSION(NF90_MAX_VAR_DIMS) :: dimids |
INTEGER, DIMENSION(NF90_MAX_VAR_DIMS) :: dimids |
175 |
INTEGER :: i, i2d, cnd |
INTEGER :: i, i2d, cnd |
176 |
REAL,DIMENSION(:),ALLOCATABLE,SAVE :: var_tmp |
REAL, DIMENSION(:), ALLOCATABLE, SAVE :: var_tmp |
177 |
LOGICAL :: uncompress = .FALSE. |
LOGICAL :: uncompress = .FALSE. |
178 |
LOGICAL :: check = .FALSE. |
LOGICAL :: check = .FALSE. |
179 |
|
|
180 |
!--------------------------------------------------------------------- |
!--------------------------------------------------------------------- |
181 |
|
|
182 |
fid = ncids(fid_in) |
fid = ncids(fid_in) |
183 |
|
|
184 |
IF (check) THEN |
IF (check) THEN |
185 |
WRITE(*,*) & |
WRITE(*, *) & |
186 |
'flinget_mat : fid_in, fid, varname :', fid_in, fid, TRIM(varname) |
'flinget_mat : fid_in, fid, varname :', fid_in, fid, TRIM(varname) |
187 |
WRITE(*,*) & |
WRITE(*, *) & |
188 |
'flinget_mat : iim, jjm, llm, ttm, itau_dep, itau_fin :', & |
'flinget_mat : iim, jjm, llm, ttm, itau_dep, itau_fin :', & |
189 |
iim, jjm, llm, ttm, itau_dep, itau_fin |
iim, jjm, llm, ttm, itau_dep, itau_fin |
190 |
WRITE(*,*) & |
WRITE(*, *) & |
191 |
'flinget_mat : iideb, iilen, jjdeb, jjlen :', & |
'flinget_mat : iideb, iilen, jjdeb, jjlen :', & |
192 |
iideb, iilen, jjdeb, jjlen |
iideb, iilen, jjdeb, jjlen |
193 |
ENDIF |
ENDIF |
200 |
iret = NF90_INQ_VARID (fid, varname, vid) |
iret = NF90_INQ_VARID (fid, varname, vid) |
201 |
|
|
202 |
IF (vid < 0 .OR. iret /= NF90_NOERR) THEN |
IF (vid < 0 .OR. iret /= NF90_NOERR) THEN |
203 |
CALL histerr (3,'flinget', & |
CALL histerr (3, 'flinget', & |
204 |
'Variable '//TRIM(varname)//' not found in file',' ',' ') |
'Variable '//TRIM(varname)//' not found in file', ' ', ' ') |
205 |
ENDIF |
ENDIF |
206 |
|
|
207 |
iret = NF90_INQUIRE_VARIABLE (fid, vid, & |
iret = NF90_INQUIRE_VARIABLE (fid, vid, & |
208 |
ndims=ndims, dimids=dimids, nAtts=nb_atts) |
ndims=ndims, dimids=dimids, nAtts=nb_atts) |
209 |
IF (check) THEN |
IF (check) THEN |
210 |
WRITE(*,*) & |
WRITE(*, *) & |
211 |
'flinget_mat : fid, vid :', fid, vid |
'flinget_mat : fid, vid :', fid, vid |
212 |
WRITE(*,*) & |
WRITE(*, *) & |
213 |
'flinget_mat : ndims, dimids(1:ndims), nb_atts :', & |
'flinget_mat : ndims, dimids(1:ndims), nb_atts :', & |
214 |
ndims, dimids(1:ndims), nb_atts |
ndims, dimids(1:ndims), nb_atts |
215 |
ENDIF |
ENDIF |
216 |
|
|
217 |
w_dim(:) = 0 |
w_dim(:) = 0 |
218 |
DO i=1,ndims |
DO i=1, ndims |
219 |
iret = NF90_INQUIRE_DIMENSION (fid, dimids(i), len=w_dim(i)) |
iret = NF90_INQUIRE_DIMENSION (fid, dimids(i), len=w_dim(i)) |
220 |
ENDDO |
ENDDO |
221 |
IF (check) WRITE(*,*) & |
IF (check) WRITE(*, *) & |
222 |
'flinget_mat : w_dim :', w_dim(1:ndims) |
'flinget_mat : w_dim :', w_dim(1:ndims) |
223 |
|
|
224 |
mis_v = 0.0 |
mis_v = 0.0 |
225 |
|
|
226 |
IF (nb_atts > 0) THEN |
IF (nb_atts > 0) THEN |
227 |
IF (check) THEN |
IF (check) THEN |
228 |
WRITE(*,*) 'flinget_mat : attributes for variable :' |
WRITE(*, *) 'flinget_mat : attributes for variable :' |
229 |
ENDIF |
ENDIF |
230 |
ENDIF |
ENDIF |
231 |
DO i=1,nb_atts |
DO i=1, nb_atts |
232 |
iret = NF90_INQ_ATTNAME (fid, vid, i, att_n) |
iret = NF90_INQ_ATTNAME (fid, vid, i, att_n) |
233 |
iret = NF90_INQUIRE_ATTRIBUTE (fid, vid, att_n, xtype=x_typ) |
iret = NF90_INQUIRE_ATTRIBUTE (fid, vid, att_n, xtype=x_typ) |
234 |
CALL strlowercase (att_n) |
CALL strlowercase (att_n) |
236 |
.OR.(x_typ == NF90_BYTE) ) THEN |
.OR.(x_typ == NF90_BYTE) ) THEN |
237 |
iret = NF90_GET_ATT (fid, vid, att_n, tmp_i) |
iret = NF90_GET_ATT (fid, vid, att_n, tmp_i) |
238 |
IF (check) THEN |
IF (check) THEN |
239 |
WRITE(*,*) ' ',TRIM(att_n),' : ',tmp_i |
WRITE(*, *) ' ', TRIM(att_n), ' : ', tmp_i |
240 |
ENDIF |
ENDIF |
241 |
ELSE IF ( (x_typ == NF90_FLOAT).OR.(x_typ == NF90_DOUBLE) ) THEN |
ELSE IF ( (x_typ == NF90_FLOAT).OR.(x_typ == NF90_DOUBLE) ) THEN |
242 |
iret = NF90_GET_ATT (fid, vid, att_n, tmp_r) |
iret = NF90_GET_ATT (fid, vid, att_n, tmp_r) |
243 |
IF (check) THEN |
IF (check) THEN |
244 |
WRITE(*,*) ' ',TRIM(att_n),' : ',tmp_r |
WRITE(*, *) ' ', TRIM(att_n), ' : ', tmp_r |
245 |
ENDIF |
ENDIF |
246 |
IF (index(att_n,'missing_value') > 0) THEN |
IF (index(att_n, 'missing_value') > 0) THEN |
247 |
mis_v = tmp_r |
mis_v = tmp_r |
248 |
ENDIF |
ENDIF |
249 |
ELSE |
ELSE |
250 |
tmp_n = '' |
tmp_n = '' |
251 |
iret = NF90_GET_ATT (fid, vid, att_n, tmp_n) |
iret = NF90_GET_ATT (fid, vid, att_n, tmp_n) |
252 |
IF (check) THEN |
IF (check) THEN |
253 |
WRITE(*,*) ' ',TRIM(att_n),' : ',TRIM(tmp_n) |
WRITE(*, *) ' ', TRIM(att_n), ' : ', TRIM(tmp_n) |
254 |
ENDIF |
ENDIF |
255 |
ENDIF |
ENDIF |
256 |
ENDDO |
ENDDO |
270 |
name=tmp_n, len=clen) |
name=tmp_n, len=clen) |
271 |
iret = NF90_INQ_VARID (fid, tmp_n, cvid) |
iret = NF90_INQ_VARID (fid, tmp_n, cvid) |
272 |
!--- |
!--- |
273 |
IF (check) WRITE(*,*) & |
IF (check) WRITE(*, *) & |
274 |
'Dimname, iret , NF90_NOERR : ',TRIM(tmp_n),iret,NF90_NOERR |
'Dimname, iret , NF90_NOERR : ', TRIM(tmp_n), iret, NF90_NOERR |
275 |
!--- |
!--- |
276 |
!-- If we have an axis which has the same name |
!-- If we have an axis which has the same name |
277 |
!-- as the dimension we can see if it is compressed |
!-- as the dimension we can see if it is compressed |
282 |
iret = NF90_GET_ATT (fid, cvid, 'compress', str1) |
iret = NF90_GET_ATT (fid, cvid, 'compress', str1) |
283 |
!----- |
!----- |
284 |
IF (iret == NF90_NOERR) THEN |
IF (iret == NF90_NOERR) THEN |
285 |
iret = NF90_INQUIRE_VARIABLE (fid,cvid,xtype=x_typ,ndims=cnd) |
iret = NF90_INQUIRE_VARIABLE (fid, cvid, xtype=x_typ, ndims=cnd) |
286 |
!------- |
!------- |
287 |
IF ( cnd /= 1 .AND. x_typ /= NF90_INT) THEN |
IF ( cnd /= 1 .AND. x_typ /= NF90_INT) THEN |
288 |
CALL histerr (3,'flinget', & |
CALL histerr (3, 'flinget', & |
289 |
'Variable '//TRIM(tmp_n)//' can not be a compressed axis', & |
'Variable '//TRIM(tmp_n)//' can not be a compressed axis', & |
290 |
'Either it has too many dimensions'// & |
'Either it has too many dimensions'// & |
291 |
' or it is not of type integer', ' ') |
' or it is not of type integer', ' ') |
312 |
ENDIF |
ENDIF |
313 |
ELSE |
ELSE |
314 |
str1 = 'The horizontal dimensions of '//varname |
str1 = 'The horizontal dimensions of '//varname |
315 |
CALL histerr (3,'flinget',str1, & |
CALL histerr (3, 'flinget', str1, & |
316 |
'is not compressed and does not'// & |
'is not compressed and does not'// & |
317 |
' correspond to the requested size',' ') |
' correspond to the requested size', ' ') |
318 |
ENDIF |
ENDIF |
319 |
ELSE |
ELSE |
320 |
IF (w_dim(1) /= iim) THEN |
IF (w_dim(1) /= iim) THEN |
321 |
str1 = 'The longitude dimension of '//varname |
str1 = 'The longitude dimension of '//varname |
322 |
CALL histerr (3,'flinget',str1, & |
CALL histerr (3, 'flinget', str1, & |
323 |
'in the file is not equal to the dimension', & |
'in the file is not equal to the dimension', & |
324 |
'that should be read') |
'that should be read') |
325 |
ENDIF |
ENDIF |
326 |
IF (w_dim(2) /= jjm) THEN |
IF (w_dim(2) /= jjm) THEN |
327 |
str1 = 'The latitude dimension of '//varname |
str1 = 'The latitude dimension of '//varname |
328 |
CALL histerr (3,'flinget',str1, & |
CALL histerr (3, 'flinget', str1, & |
329 |
'in the file is not equal to the dimension', & |
'in the file is not equal to the dimension', & |
330 |
'that should be read') |
'that should be read') |
331 |
ENDIF |
ENDIF |
348 |
IF (llm == 1 .AND. ndims == i2d+2 .OR. llm == w_dim(i2d+1)) THEN |
IF (llm == 1 .AND. ndims == i2d+2 .OR. llm == w_dim(i2d+1)) THEN |
349 |
!----- |
!----- |
350 |
IF (w_dim(i2d+1) /= llm) THEN |
IF (w_dim(i2d+1) /= llm) THEN |
351 |
CALL histerr (3,'flinget', & |
CALL histerr (3, 'flinget', & |
352 |
'The vertical dimension of '//varname, & |
'The vertical dimension of '//varname, & |
353 |
'in the file is not equal to the dimension', & |
'in the file is not equal to the dimension', & |
354 |
'that should be read') |
'that should be read') |
363 |
!----- |
!----- |
364 |
IF ((itau_fin-itau_dep) >= 0) THEN |
IF ((itau_fin-itau_dep) >= 0) THEN |
365 |
IF (ndims /= i2d+2) THEN |
IF (ndims /= i2d+2) THEN |
366 |
CALL histerr (3,'flinget', & |
CALL histerr (3, 'flinget', & |
367 |
'You attempt to read a time slab', & |
'You attempt to read a time slab', & |
368 |
'but there is no time axis on this variable', varname) |
'but there is no time axis on this variable', varname) |
369 |
ELSE IF ((itau_fin - itau_dep) <= w_dim(i2d+2)) THEN |
ELSE IF ((itau_fin - itau_dep) <= w_dim(i2d+2)) THEN |
370 |
w_sta(i2d+2) = itau_dep |
w_sta(i2d+2) = itau_dep |
371 |
w_len(i2d+2) = itau_fin-itau_dep+1 |
w_len(i2d+2) = itau_fin-itau_dep+1 |
372 |
ELSE |
ELSE |
373 |
CALL histerr (3,'flinget', & |
CALL histerr (3, 'flinget', & |
374 |
'The time step you try to read is not', & |
'The time step you try to read is not', & |
375 |
'in the file (1)', varname) |
'in the file (1)', varname) |
376 |
ENDIF |
ENDIF |
377 |
ELSE IF (ndims == i2d+2 .AND. w_dim(i2d+2) > 1) THEN |
ELSE IF (ndims == i2d+2 .AND. w_dim(i2d+2) > 1) THEN |
378 |
CALL histerr (3,'flinget', & |
CALL histerr (3, 'flinget', & |
379 |
'There is a time axis in the file but no', & |
'There is a time axis in the file but no', & |
380 |
'time step give in the call', varname) |
'time step give in the call', varname) |
381 |
ELSE |
ELSE |
387 |
!---- 2.3.2 We do not have any vertical axis |
!---- 2.3.2 We do not have any vertical axis |
388 |
!----- |
!----- |
389 |
IF (ndims == i2d+2) THEN |
IF (ndims == i2d+2) THEN |
390 |
CALL histerr (3,'flinget', & |
CALL histerr (3, 'flinget', & |
391 |
'The file contains 4 dimensions', & |
'The file contains 4 dimensions', & |
392 |
'but only 3 are requestes for variable ', varname) |
'but only 3 are requestes for variable ', varname) |
393 |
ENDIF |
ENDIF |
397 |
w_sta(i2d+1) = itau_dep |
w_sta(i2d+1) = itau_dep |
398 |
w_len(i2d+1) = itau_fin-itau_dep+1 |
w_len(i2d+1) = itau_fin-itau_dep+1 |
399 |
ELSE |
ELSE |
400 |
CALL histerr (3,'flinget', & |
CALL histerr (3, 'flinget', & |
401 |
'The time step you try to read is not', & |
'The time step you try to read is not', & |
402 |
'in the file (2)', varname) |
'in the file (2)', varname) |
403 |
ENDIF |
ENDIF |
404 |
ELSE |
ELSE |
405 |
CALL histerr (3,'flinget', & |
CALL histerr (3, 'flinget', & |
406 |
'From your input you sould have 3 dimensions', & |
'From your input you sould have 3 dimensions', & |
407 |
'in the file but there are 4', varname) |
'in the file but there are 4', varname) |
408 |
ENDIF |
ENDIF |
409 |
ELSE |
ELSE |
410 |
IF (ndims == i2d+1 .AND. w_dim(i2d+1) > 1) THEN |
IF (ndims == i2d+1 .AND. w_dim(i2d+1) > 1) THEN |
411 |
CALL histerr (3,'flinget', & |
CALL histerr (3, 'flinget', & |
412 |
'There is a time axis in the file but no', & |
'There is a time axis in the file but no', & |
413 |
'time step given in the call', varname) |
'time step given in the call', varname) |
414 |
ELSE |
ELSE |
427 |
|
|
428 |
! 3.0 Reading the data |
! 3.0 Reading the data |
429 |
|
|
430 |
IF (check) WRITE(*,*) & |
IF (check) WRITE(*, *) & |
431 |
'flinget_mat 3.0 : ', uncompress, w_sta, w_len |
'flinget_mat 3.0 : ', uncompress, w_sta, w_len |
432 |
!--- |
!--- |
433 |
IF (uncompress) THEN |
IF (uncompress) THEN |
452 |
start=w_sta(:), count=w_len(:)) |
start=w_sta(:), count=w_len(:)) |
453 |
ENDIF |
ENDIF |
454 |
|
|
455 |
IF (check) WRITE(*,*) 'flinget_mat 3.1 : ',NF90_STRERROR (iret) |
IF (check) WRITE(*, *) 'flinget_mat 3.1 : ', NF90_STRERROR (iret) |
456 |
!-------------------------- |
|
457 |
END SUBROUTINE flinget_mat |
END SUBROUTINE flinget_mat |
458 |
|
|
459 |
END MODULE flinget_m |
END MODULE flinget_m |