SURFEX v8.1
General documentation of Surfex
lfichi.F90
Go to the documentation of this file.
1 ! Oct-2012 P. Marguinaud 64b LFI
2 ! Jan-2011 P. Marguinaud Thread-safe LFI
3 SUBROUTINE lfichi_fort &
4 & (lfi, krep, cdstru, kval, kposc2 )
5 USE lfimod, ONLY : lficom
6 USE parkind1, ONLY : jprb
7 USE yomhook , ONLY : lhook, dr_hook
9 IMPLICIT NONE
10 !****
11 ! SOUS-PROGRAMME *INTERNE* DU LOGICIEL DE FICHIERS INDEXES LFI;
12 ! permet de decoder une valeur entiere (CHIffres)
13 ! dans une chaine de caracteres.
14 !**
15 ! ARGUMENTS : KREP (Sortie) ==> Code-Reponse du sous-programme;
16 ! CDSTRU (Entree) ==> Chaine a decoder;
17 ! KVAL (Sortie) ==> Valeur entiere decodee;
18 ! KPOSC2 (Sortie) ==> Position du dernier chiffre.
19 !
20 TYPE(lficom) :: LFI
21 CHARACTER(LEN=*) CDSTRU
22 CHARACTER(LEN=7) CLFORM
23 !
24 INTEGER (KIND=JPLIKB) KREP, KVAL, KPOSC2
25 INTEGER (KIND=JPLIKB) ILUSTR, J, IPOSC1, IPOSC2
26 
27 !
28 REAL(KIND=JPRB) :: ZHOOK_HANDLE
29 IF (lhook) CALL dr_hook('LFICHI_FORT',0,zhook_handle)
30 krep=0
31 ilustr=int(len(cdstru), jplikb)
32 !
33 DO j=1,ilustr
34 !
35 IF (cdstru(j:j).NE.' ') THEN
36 !
37  iposc1=int(index(lfi%LFICHI_CLCHIF,cdstru(j:j)), jplikb)
38 !
39  IF (iposc1.EQ.0) THEN
40  krep=-40
41  GOTO 1001
42  ENDIF
43 !
44  iposc1=j
45  GOTO 223
46 !
47 ENDIF
48 !
49 ENDDO
50 !
51 iposc1=1
52 !
53 223 CONTINUE
54 !
55 DO j=iposc1+1,ilustr
56 !
57 IF (int(index(lfi%LFICHI_CLCHIF,cdstru(j:j)), jplikb).EQ.0) THEN
58  iposc2=j-1
59  GOTO 225
60 ENDIF
61 !
62 ENDDO
63 !
64 iposc2=ilustr
65 !
66 225 CONTINUE
67 !
68 WRITE (unit=clform,fmt='(''(BN,I'',I1,'')'')') iposc2-iposc1+1
69 READ (unit=cdstru(iposc1:iposc2),fmt=clform,err=226) kval
70 kposc2=iposc2
71 GOTO 1001
72 !
73 226 CONTINUE
74 !
75 krep=-40
76 !
77 1001 CONTINUE
78 !
79 IF (lhook) CALL dr_hook('LFICHI_FORT',1,zhook_handle)
80 END SUBROUTINE lfichi_fort
81 
82 
83 
84 ! Oct-2012 P. Marguinaud 64b LFI
85 SUBROUTINE lfichi64 &
86 & (krep, cdstru, kval, kposc2)
87 USE lfimod, ONLY : lfi => lficom_default, &
90 USE lfi_precision
91 IMPLICIT NONE
92 ! Arguments
93 INTEGER (KIND=JPLIKB) KREP ! OUT
94 CHARACTER (LEN=*) CDSTRU ! IN
95 INTEGER (KIND=JPLIKB) KVAL ! OUT
96 INTEGER (KIND=JPLIKB) KPOSC2 ! OUT
97 
98 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
99 
100 CALL lfichi_fort &
101 & (lfi, krep, cdstru, kval, kposc2)
102 
103 END SUBROUTINE lfichi64
104 
105 SUBROUTINE lfichi &
106 & (krep, cdstru, kval, kposc2)
107 USE lfimod, ONLY : lfi => lficom_default, &
110 USE lfi_precision
111 IMPLICIT NONE
112 ! Arguments
113 INTEGER (KIND=JPLIKM) KREP ! OUT
114 CHARACTER (LEN=*) CDSTRU ! IN
115 INTEGER (KIND=JPLIKM) KVAL ! OUT
116 INTEGER (KIND=JPLIKM) KPOSC2 ! OUT
117 
118 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
119 
120 CALL lfichi_mt &
121 & (lfi, krep, cdstru, kval, kposc2)
122 
123 END SUBROUTINE lfichi
124 
125 SUBROUTINE lfichi_mt &
126 & (lfi, krep, cdstru, kval, kposc2)
127 USE lfimod, ONLY : lficom
128 USE lfi_precision
129 IMPLICIT NONE
130 ! Arguments
131 type(lficom) lfi ! INOUT
132 INTEGER (KIND=JPLIKM) KREP ! OUT
133 CHARACTER (LEN=*) CDSTRU ! IN
134 INTEGER (KIND=JPLIKM) KVAL ! OUT
135 INTEGER (KIND=JPLIKM) KPOSC2 ! OUT
136 ! Local integers
137 INTEGER (KIND=JPLIKB) IREP ! OUT
138 INTEGER (KIND=JPLIKB) IVAL ! OUT
139 INTEGER (KIND=JPLIKB) IPOSC2 ! OUT
140 ! Convert arguments
141 
142 
143 CALL lfichi_fort &
144 & (lfi, irep, cdstru, ival, iposc2)
145 
146 krep = int( irep, jplikm)
147 kval = int( ival, jplikm)
148 kposc2 = int( iposc2, jplikm)
149 
150 END SUBROUTINE lfichi_mt
151 
152 !INTF KREP OUT
153 !INTF CDSTRU IN
154 !INTF KVAL OUT
155 !INTF KPOSC2 OUT
integer, parameter jplikb
subroutine lfichi(KREP, CDSTRU, KVAL, KPOSC2)
Definition: lfichi.F90:107
subroutine new_lfi_default()
Definition: lfimod.F90:376
subroutine lfichi_fort(LFI, KREP, CDSTRU, KVAL, KPOSC2)
Definition: lfichi.F90:5
logical, save lficom_default_init
Definition: lfimod.F90:371
integer, parameter jprb
Definition: parkind1.F90:32
type(lficom), target, save lficom_default
Definition: lfimod.F90:370
subroutine lfichi64(KREP, CDSTRU, KVAL, KPOSC2)
Definition: lfichi.F90:87
logical lhook
Definition: yomhook.F90:15
integer, parameter jplikm
subroutine lfichi_mt(LFI, KREP, CDSTRU, KVAL, KPOSC2)
Definition: lfichi.F90:127
Definition: lfimod.F90:1
ERROR in index
Definition: ecsort_shared.h:90