SURFEX v8.1
General documentation of Surfex
trip_posnam.F90
Go to the documentation of this file.
1 !! ##############################################
2  SUBROUTINE trip_posnam(KULNAM,HDNAML,OFOUND,KLISTING)
3 !! ##############################################
4 !!
5 !!*** *TRIP_POSNAM*
6 !!
7 !! PURPOSE
8 !! -------
9 ! To position namelist file at correct place for reading
10 ! namelist CDNAML.
11 !!
12 !!** METHOD
13 !! ------
14 !!
15 !! EXTERNAL
16 !! --------
17 !!
18 !! IMPLICIT ARGUMENT
19 !! -----------------
20 !!
21 !! REFERENCE
22 !! ----------
23 !! ECMWF Research Department documentation of the IFS (Hamrud)
24 !!
25 !! AUTHOR
26 !! -------
27 !! I. Mallet 15/10/01
28 !!
29 !! MODIFICATIONS
30 !! --------------
31 !! I. Mallet 15/10/01 adaptation to MesoNH (F90 norm)
32 !------------------------------------------------------------------------------
33 !
34 USE modi_abort_trip
35 !
36 USE yomhook ,ONLY : lhook, dr_hook
37 USE parkind1 ,ONLY : jprb
38 !
39 IMPLICIT NONE
40 !
41 !* 0. DECLARATIONS
42 ! ------------
43 !
44 !* 0.1 Declarations of arguments
45 !
46 INTEGER, INTENT(IN) :: KULNAM
47  CHARACTER(LEN=*), INTENT(IN) :: HDNAML
48 LOGICAL, INTENT(OUT):: OFOUND
49 INTEGER, OPTIONAL,INTENT(IN) :: KLISTING
50 !
51 !* 0.2 Declarations of local variables
52 !
53  CHARACTER(LEN=120) :: YLINE
54  CHARACTER(LEN=1) :: YLTEST
55 INTEGER :: ILEN,ILEY,INDL,IND1,IRET
56 INTEGER :: J,JA, JFILE
57 LOGICAL :: LLOPENED
58 !
59  CHARACTER(LEN=1),DIMENSION(26) :: YLO=(/'a','b','c','d','e','f','g','h', &
60  'i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'/)
61  CHARACTER(LEN=1),DIMENSION(26) :: YUP=(/'A','B','C','D','E','F','G','H', &
62  'I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'/)
63 REAL(KIND=JPRB) :: ZHOOK_HANDLE
64 !
65 !* 1. POSITION FILE
66 ! -------------
67 !
68 IF (lhook) CALL dr_hook('TRIP_POSNAM',0,zhook_handle)
69 ofound=.false.
70 ilen=len(hdnaml)
71 !
72 ! CONTINUE READING THE FILE, THEN REWIND IF NOT FOUND
73 DO jfile=1,2
74  search_nam : DO
75  yline=' '
76  READ(unit=kulnam,fmt='(A)',iostat=iret,end=100) yline
77 ! If file does not exist, most compilers would just create it and jump
78 ! to the END label ; but a few of them would report an error:
79  IF (iret /=0 ) THEN
80  INQUIRE(kulnam,opened=llopened)
81  IF (llopened) THEN
82  IF (PRESENT(klisting)) &
83  WRITE(klisting,fmt=*) 'MODE_POS_TRIP : error reading from unit ',&
84  kulnam,' file ',hdnaml,' line ',yline
85  CALL abort_trip('MODE_POS_TRIP: read error in namelist file')
86  ELSE
87  EXIT search_nam
88  END IF
89  ELSE
90 ! FIRST SEARCH for "&" IN THE LINE, THEN CORRECT LINE AND TEST :
91  indl=index(yline,'&')
92  IF (indl .NE. 0 ) THEN
93  iley=len(yline)
94  DO j=1,iley
95  DO ja=1,26
96  IF (yline(j:j)==ylo(ja)) yline(j:j)=yup(ja)
97  END DO
98  END DO
99  ind1=index(yline,'&'//hdnaml)
100  IF(ind1.NE.0) THEN
101  yltest=yline(ind1+ilen+1:ind1+ilen+1)
102  IF(yltest == ' ') THEN
103 ! NAMELIST FOUND : RETURN
104  backspace(kulnam)
105  ofound=.true.
106  IF (PRESENT(klisting)) WRITE(klisting,fmt=*) '-- namelist ',hdnaml,' read'
107  IF (lhook) CALL dr_hook('TRIP_POSNAM',1,zhook_handle)
108  RETURN
109  ENDIF
110  ENDIF
111  ENDIF
112  ENDIF
113  ENDDO search_nam
114  100 CONTINUE
115  IF(jfile == 1) rewind(kulnam)
116 ENDDO
117 
118 backspace(kulnam)
119 ! end of file: namelist name not found
120 IF (PRESENT(klisting)) &
121 WRITE(klisting,fmt=*) &
122 '-- namelist ',hdnaml,' not found: default values used if required'
123 IF (lhook) CALL dr_hook('TRIP_POSNAM',1,zhook_handle)
124 !------------------------------------------------------------------
125 END SUBROUTINE trip_posnam
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
subroutine abort_trip(YTEXT)
Definition: abort_trip.F90:3
ERROR in index
Definition: ecsort_shared.h:90
subroutine trip_posnam(KULNAM, HDNAML, OFOUND, KLISTING)
Definition: trip_posnam.F90:3