LMDZ
posnam.F90
Go to the documentation of this file.
1 SUBROUTINE posnam(KULNAM,CDNAML)
2 
3 !**** *POSNAM* - position namelist file for reading
4 
5 ! Purpose.
6 ! --------
7 ! To position namelist file at correct place for reading
8 ! namelist CDNAML. Replaces use of Cray specific ability
9 ! to skip to the correct namelist.
10 
11 !** Interface.
12 ! ----------
13 ! *CALL* *POSNAM*(..)
14 
15 ! Explicit arguments : KULNAM - file unit number (input)
16 ! -------------------- CDNAML - namelist name (input)
17 
18 ! Implicit arguments : None
19 ! --------------------
20 
21 ! Method.
22 ! -------
23 ! See documentation
24 
25 ! Externals. None
26 ! ----------
27 
28 ! Reference.
29 ! ----------
30 ! ECMWF Research Department documentation of the IFS
31 
32 ! Author.
33 ! -------
34 ! Mats Hamrud *ECMWF*
35 
36 ! Modifications.
37 ! --------------
38 ! Original : 93-06-22
39 ! M.Hamrud 01-Oct-2003 CY28 Cleaning
40 ! M.Hamrud 01-Dec-2003 CY28R1 Cleaning
41 ! R. El Khatib 04-08-10 Apply norms + proper abort if namelist is missing
42 ! --------------------------------------------------------------
43 
44 USE parkind1 ,ONLY : jpim ,jprb
45 USE yomhook ,ONLY : lhook, dr_hook
46 
47 IMPLICIT NONE
48 
49 INTEGER(KIND=JPIM),INTENT(IN) :: KULNAM
50 CHARACTER(LEN=*) ,INTENT(IN) :: CDNAML
51 
52 
53 CHARACTER (LEN = 40) :: CLINE
54 CHARACTER (LEN = 1) :: CLTEST
55 
56 INTEGER(KIND=JPIM) :: ILEN, IND1, ISTATUS, ISCAN
57 REAL(KIND=JPRB) :: ZHOOK_HANDLE
58 
59 #include "abor1.intfb.h"
60 
61 ! -----------------------------------------------------------
62 
63 !* 1. POSITION FILE
64 ! -------------
65 
66 IF (lhook) CALL dr_hook('POSNAM',0,zhook_handle)
67 
68 cline=' '
69 rewind(kulnam)
70 ilen=len(cdnaml)
71 istatus=0
72 iscan=0
73 print *,'On cherche a lire:',cdnaml
74 DO WHILE (istatus==0 .AND. iscan==0)
75  READ(kulnam,'(A)',iostat=istatus) cline
76 ! print *,'CLINE,ISTATUS= ',CLINE,ISTATUS
77  SELECT CASE (istatus)
78  CASE (:-1)
79  cline='POSNAM:CANNOT LOCATE '//cdnaml//' '
80  CALL abor1(cline)
81  CASE (0)
82  IF (index(cline(1:10),'&') == 0) THEN
83  iscan=0
84  ELSE
85  ind1=index(cline,'&'//cdnaml)
86  IF (ind1 == 0) THEN
87  iscan=0
88  ELSE
89  cltest=cline(ind1+ilen+1:ind1+ilen+1)
90  IF ( (lge(cltest,'0').AND.lle(cltest,'9')) &
91  & .OR.(lge(cltest,'A').AND.lle(cltest,'Z')) ) THEN
92  iscan=0
93  ELSE
94  iscan=1
95  ENDIF
96  ENDIF
97  ENDIF
98  CASE (1:)
99  cline='POSNAM:READ ERROR IN NAMELIST FILE'
100  CALL abor1(cline)
101  END SELECT
102 ENDDO
103 backspace(kulnam)
104 
105 ! ------------------------------------------------------------------
106 
107 IF (lhook) CALL dr_hook('POSNAM',1,zhook_handle)
108 END SUBROUTINE posnam
subroutine posnam(KULNAM, CDNAML)
Definition: posnam.F90:2
subroutine abor1(CDTEXT)
Definition: abor1.F90:2
integer, parameter jprb
Definition: parkind1.F90:31
logical lhook
Definition: yomhook.F90:12
subroutine dr_hook(CDNAME, KSWITCH, PKEY)
Definition: yomhook.F90:17
integer, parameter jpim
Definition: parkind1.F90:13