SURFEX v8.1
General documentation of Surfex
ol_find_file_read.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #########
6  SUBROUTINE ol_find_file_read(HNAME,IFILE_ID)
7 ! ###############################
8 !
9 !!**** *OL_FIND_FILE_READ
10 !!
11 !! PURPOSE
12 !! -------
13 !!
14 !!** METHOD
15 !! ------
16 !!
17 !! EXTERNAL
18 !! --------
19 !!
20 !!
21 !! IMPLICIT ARGUMENTS
22 !! ------------------
23 !!
24 !! REFERENCE
25 !! ---------
26 !!
27 !!
28 !! AUTHOR
29 !! ------
30 !! F. Habets *Meteo France*
31 !!
32 !! MODIFICATIONS
33 !! -------------
34 !! Original 07-03
35 !-------------------------------------------------------------------------------
36 !
37 !* 0. DECLARATIONS
38 ! ------------
39 
41 
42 
43 !
44 USE yomhook ,ONLY : lhook, dr_hook
45 USE parkind1 ,ONLY : jprb
46 !
47 USE modi_abor1_sfx
48 USE netcdf
49 !
50 IMPLICIT NONE
51 
52 
53 !
54  CHARACTER(LEN=*), INTENT(IN) :: HNAME
55 INTEGER, INTENT(OUT):: IFILE_ID
56 
57 INTEGER, DIMENSION(:), ALLOCATABLE :: ITEMP
58  CHARACTER(LEN=100), DIMENSION(:), ALLOCATABLE :: HTEMP
59 LOGICAL :: LFIND_VAR
60  CHARACTER(LEN=100) :: HFILE_PAS,HNAME_PAS
61 INTEGER :: JRET
62 INTEGER :: JFILE,JVAR,IVAR_ID
63 REAL(KIND=JPRB) :: ZHOOK_HANDLE
64 
65 !******************************************
66 
67 IF (lhook) CALL dr_hook('OL_FIND_FILE_READ',0,zhook_handle)
68 hname_pas=hname(:len_trim(hname))
69 
70 lfind_var=.false.
71 ifile_id=0
72 
73 IF (SIZE(xid_varin).GT.0) THEN
74  DO jvar=1,SIZE(xvar_to_filein)
75  IF (trim(xvar_to_filein(jvar))==hname_pas) THEN
76  ifile_id=xid_varin(jvar)
77  lfind_var=.true.
78  EXIT
79  ENDIF
80  ENDDO
81 ENDIF
82 
83 IF (.NOT.lfind_var) THEN
84 
85  jfile=1
86 
87  jret=nf90_noerr+1
88  DO WHILE ((jfile<= SIZE(xid_in)) .AND. (jret /= nf90_noerr))
89  ifile_id=xid_in(jfile)
90  jret=nf90_inq_varid(ifile_id,hname_pas,ivar_id)
91  jfile=jfile+1
92  ENDDO
93 
94  IF (jret == nf90_noerr) THEN
95  xin=xin+1
96  ALLOCATE(itemp(xin))
97  ALLOCATE(htemp(xin))
98  itemp(xin)=ifile_id
99  htemp(xin)=hname_pas
100  IF (xin.GT.1) THEN
101  itemp(1:xin-1)=xid_varin(:)
102  htemp(1:xin-1)=xvar_to_filein(:)
103  ENDIF
104  !
105  DEALLOCATE(xid_varin)
106  DEALLOCATE(xvar_to_filein)
107  ALLOCATE(xid_varin(xin))
108  ALLOCATE(xvar_to_filein(xin))
109  xid_varin=itemp
110  xvar_to_filein=htemp
111  DEALLOCATE(itemp)
112  DEALLOCATE(htemp)
113  ELSE
114  CALL abor1_sfx("OL_FIND_FILE_READ: "//hname_pas//" NOT FOUND IN INPUT NC FILES")
115  ENDIF
116 
117 ENDIF
118 IF (lhook) CALL dr_hook('OL_FIND_FILE_READ',1,zhook_handle)
119 
120 
121 END SUBROUTINE ol_find_file_read
integer *4, dimension(:), allocatable xid_in
subroutine ol_find_file_read(HNAME, IFILE_ID)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
integer, parameter jprb
Definition: parkind1.F90:32
integer *4, dimension(:), allocatable xid_varin
logical lhook
Definition: yomhook.F90:15
character(len=20), dimension(:), allocatable xvar_to_filein