SURFEX v8.1
General documentation of Surfex
read_dimlen.F90
Go to the documentation of this file.
1 ! ######
2 SUBROUTINE read_dimlen(KLUOUT,HFILE,HVAR,KDIM,KDIMLEN)
3 !#############################################################
4 !
5 USE modi_abort_trip
6 !
7 USE yomhook ,ONLY : lhook, dr_hook
8 USE parkind1 ,ONLY : jprb
9 !
10 USE netcdf
11 !
12 IMPLICIT NONE
13 !
14 !* 0.1 Declarations of arguments
15 !
16 INTEGER, INTENT(IN) :: KLUOUT
17  CHARACTER(LEN=*), INTENT(IN) :: HFILE
18  CHARACTER(LEN=*), INTENT(IN) :: HVAR
19 INTEGER, INTENT(IN) :: KDIM
20 INTEGER, DIMENSION(KDIM), INTENT(OUT) :: KDIMLEN
21 !
22 !* 0.2 Declarations of local variables
23 !
24 INTEGER,DIMENSION(:),ALLOCATABLE :: IDIMIDS
25 !
26  CHARACTER(LEN=NF90_MAX_NAME) :: YFNAME
27  CHARACTER(LEN=NF90_MAX_NAME) :: YVAR
28 !
29 INTEGER :: IFILE_ID
30 INTEGER :: IVAR_ID
31 INTEGER :: INDIMS
32 INTEGER :: IRET
33 INTEGER :: JRET
34 INTEGER :: JDIM
35 !
36 REAL(KIND=JPRB) :: ZHOOK_HANDLE
37 !
38 !-------------------------------------------------------------------------------
39 IF (lhook) CALL dr_hook('READ_DIMLEN',0,zhook_handle)
40 !
41 yfname = hfile(1:len_trim(hfile))
42 yvar = hvar(1:len_trim(hvar))
43 !
44 iret=nf90_open(yfname,nf90_nowrite,ifile_id)
45 IF(iret/=nf90_noerr)THEN
46  WRITE(kluout,*)'READ_DIMLEN : error in NF90_OPEN'
47  CALL abort_trip('READ_DIMLEN : error in NF90_OPEN')
48 ENDIF
49 !
50 iret=nf90_inq_varid(ifile_id,yvar,ivar_id)
51 IF(iret/=nf90_noerr)THEN
52  WRITE(kluout,*)'READ_DIMLEN : error in NF90_INQ_VARID'
53  CALL abort_trip('READ_DIMLEN : error in NF90_INQ_VARID')
54 ENDIF
55 !
56 iret=nf90_inquire_variable(ifile_id,ivar_id,ndims=indims)
57 IF(iret/=nf90_noerr)THEN
58  WRITE(kluout,*)'READ_DIMLEN : error in NF90_INQ_VARNDIMS'
59  CALL abort_trip('READ_DIMLEN : error in NF90_INQ_VARNDIMS')
60 ENDIF
61 !
62 IF(indims/=kdim)THEN
63  WRITE(kluout,*)'READ_DIMLEN from TRIP_CONF90_FRC :'
64  WRITE(kluout,*)'Size read (',indims,') /= size expected (',kdim,')'
65  CALL abort_trip('READ_DIMLEN : sizes not good')
66 ENDIF
67 !
68 ALLOCATE(idimids(kdim))
69 !
70 iret=nf90_inquire_variable(ifile_id,ivar_id,dimids=idimids(1:indims))
71 IF(iret/=nf90_noerr)THEN
72  WRITE(kluout,*)'READ_DIMLEN : error in NF90_INQ_VARDIMID'
73  CALL abort_trip('READ_DIMLEN : error in NF90_INQ_VARDIMID')
74 ENDIF
75 !
76 DO jdim=1,indims
77  iret=nf90_inquire_dimension(ifile_id,idimids(jdim),len=kdimlen(jdim))
78  IF(iret/=nf90_noerr)THEN
79  WRITE(kluout,*)'READ_DIMLEN : error in NF90_INQ_DIMLEN for dimension ',jdim
80  CALL abort_trip('READ_DIMLEN : error in NF90_INQ_DIMLEN')
81  ENDIF
82 ENDDO
83 !
84 iret=nf90_close(ifile_id)
85 IF(iret/=nf90_noerr)THEN
86  WRITE(kluout,*)'READ_DIMLEN : error in NF90_CLOSE'
87  CALL abort_trip('READ_DIMLEN : error in NF90_CLOSE')
88 ENDIF
89 !
90 DEALLOCATE(idimids)
91 !
92 IF (lhook) CALL dr_hook('READ_DIMLEN',1,zhook_handle)
93 !-------------------------------------------------------------------------------
94 END SUBROUTINE read_dimlen
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
subroutine read_dimlen(KLUOUT, HFILE, HVAR, KDIM, KDIMLEN)
Definition: read_dimlen.F90:3
subroutine abort_trip(YTEXT)
Definition: abort_trip.F90:3