SURFEX v8.1
General documentation of Surfex
lfinfo.F90
Go to the documentation of this file.
1 ! Oct-2012 P. Marguinaud 64b LFI
2 ! Jan-2011 P. Marguinaud Thread-safe LFI
3 
4 SUBROUTINE lfinfo_fort &
5 & (lfi, krep, knumer, cdnoma, klong, kposex )
6 USE lfimod, ONLY : lficom
7 USE parkind1, ONLY : jprb
8 USE yomhook , ONLY : lhook, dr_hook
10 IMPLICIT NONE
11 !****
12 ! SOUS-PROGRAMME CHARGE DE RENSEIGNER SUR EXISTENCE ET CARACTERI-
13 ! STIQUES ( LONGUEUR, POSITION ) D'UN ARTICLE LOGIQUE, POUR UNE
14 ! UNITE LOGIQUE OUVERTE PAR LE LOGICIEL DE FICHIERS INDEXES *LFI*.
15 !**
16 ! ARGUMENTS : KREP (SORTIE) ==> CODE-REPONSE DU SOUS-PROGRAMME;
17 ! KNUMER (ENTREE) ==> LFI%NUMERO DE L'UNITE LOGIQUE;
18 ! CDNOMA (ENTREE) ==> NOM DE L'ARTICLE A CHERCHER;
19 ! KLONG (SORTIE) ==> LONGUEUR DE L'ARTICLE;
20 ! KPOSEX (SORTIE) ==> POSITION ( DANS LE FICHIER, DU PRE-
21 ! MIER MOT ) DE L'ARTICLE SUIVANT.
22 !
23 ! Noter que si l'unite logique est ouverte pour le logiciel LFI et
24 ! que l'article demande n'y est pas trouve, KREP, KLONG et KPOSEX
25 ! sont retournes a ZERO.
26 !
27 !
28 TYPE(lficom) :: LFI
29 CHARACTER CDNOMA*(*), CLNOMA*(lfi%jpncpn)
30 !
31 INTEGER (KIND=JPLIKB) KREP, KNUMER, KLONG, KPOSEX
32 INTEGER (KIND=JPLIKB) IREP, IRANG, ILCLNO, ILCDNO
33 INTEGER (KIND=JPLIKB) IDECBL, IPOSBL, IARTEX, IRGPIM
34 INTEGER (KIND=JPLIKB) INIMES, INBALO, IRETIN
35 !
36 LOGICAL LLVERF
37 !
38 CHARACTER(LEN=LFI%JPLSPX) CLNSPR
39 CHARACTER(LEN=LFI%JPLMES) CLMESS
40 CHARACTER(LEN=LFI%JPLFTX) CLACTI
41 LOGICAL LLFATA
42 
43 !**
44 ! 1. - CONTROLES DES PARAMETRES D'APPEL, PUIS INITIALISATIONS.
45 !-----------------------------------------------------------------------
46 !
47 ! Appel legerement anticipe a LFINUM, garantissant l'initialisa-
48 ! tion des variables globales du logiciel a la 1ere utilisation.
49 !
50 REAL(KIND=JPRB) :: ZHOOK_HANDLE
51 IF (lhook) CALL dr_hook('LFINFO_FORT',0,zhook_handle)
52 
53 clacti=''
54 
55 CALL lfinum_fort &
56 & (lfi, knumer,irang)
57 llverf=.false.
58 ilcdno=int(len(cdnoma), jplikb)
59 klong=0
60 kposex=0
61 !
62 IF (ilcdno.LE.0) THEN
63  irep=-15
64  clnoma=lfi%CHINCO(:lfi%JPNCPN)
65  ilclno=lfi%JPNCPN
66  GOTO 1001
67 ELSEIF (cdnoma.EQ.' ') THEN
68  irep=-18
69  clnoma=' '
70  ilclno=1
71  GOTO 1001
72 ENDIF
73 !
74 ! Recherche de la longueur "utile" du nom d'article specifie.
75 ! (c'est-a-dire sans tenir compte des blancs terminaux eventuels)
76 !
77 idecbl=0
78 !
79 101 CONTINUE
80 iposbl=idecbl+int(index(cdnoma(idecbl+1:),' '), jplikb)
81 !
82 IF (iposbl.LE.idecbl) THEN
83  ilclno=ilcdno
84 ELSEIF (cdnoma(iposbl:).EQ.' ') THEN
85  ilclno=iposbl-1
86 ELSE
87  idecbl=iposbl
88  GOTO 101
89 ENDIF
90 !
91 IF (ilclno.LE.lfi%JPNCPN) THEN
92  clnoma=cdnoma(:ilclno)
93 ELSE
94  clnoma=cdnoma(:lfi%JPNCPN)
95  ilclno=lfi%JPNCPN
96  irep=-15
97  GOTO 1001
98 ENDIF
99 !
100 IF (irang.EQ.0) THEN
101  irep=-1
102  GOTO 1001
103 ENDIF
104 !
105  IF (lfi%LMULTI) CALL lfiver_fort &
106 & (lfi, lfi%VERRUE(irang),'ON')
107 llverf=lfi%LMULTI
108 !
109 inbalo=lfi%MDES1D(ixm(lfi%JPNALO,irang))
110 !
111 IF (inbalo.NE.0) THEN
112 !**
113 ! 2. - EXPLORATION DES (PAIRES DE) PAGES ET ARTICLES D'INDEX,
114 ! A LA RECHERCHE DE L'ARTICLE LOGIQUE DEMANDE.
115 !-----------------------------------------------------------------------
116 !
117  CALL lfiran_fort &
118 & (lfi, irep,irang,clnoma(:ilclno), &
119 & irgpim,iartex,iretin)
120 !
121  IF (iretin.EQ.1) THEN
122  GOTO 903
123  ELSEIF (iretin.EQ.2) THEN
124  GOTO 904
125  ELSEIF (iretin.NE.0) THEN
126  GOTO 1001
127  ENDIF
128 !
129 ELSE
130  iartex=0
131  irep=0
132 ENDIF
133 !
134 IF (iartex.EQ.0) THEN
135  klong=0
136  kposex=0
137 ELSE
138 !
139 ! ON COMPLETE LES CARACTERISTIQUES DE L'ARTICLE.
140 !
141  IF (.NOT.lfi%LPHASP(irgpim)) THEN
142 !
143  CALL lfipha_fort &
144 & (lfi, irep,irang,irgpim,iretin)
145 !
146  IF (iretin.EQ.1) THEN
147  GOTO 903
148  ELSEIF (iretin.EQ.2) THEN
149  GOTO 904
150  ELSEIF (iretin.NE.0) THEN
151  GOTO 1001
152  ENDIF
153 !
154  ENDIF
155 !
156  klong=lfi%MLGPOS(ixm(2*iartex-1,irgpim))
157  kposex=lfi%MLGPOS(ixm(2*iartex,irgpim))
158 !
159 ! On met a jour ce qui a trait aux acces pseudo-sequentiels...
160 ! ceci surtout pour ne pas faire 2 recherches dans l'index lors
161 ! d'un appel a LFILEC qui suivrait l'appel a LFINFO.
162 !
163  lfi%NDERGF(irang)=lfi%JPNAPP*lfi%MFACTM(irang)* &
164 & (lfi%MRGPIF(irgpim)-1)+iartex
165  lfi%CNDERA(irang)=clnoma(:ilclno)
166  lfi%NSUIVF(irang)=lfi%JPNIL
167  lfi%NPRECF(irang)=lfi%JPNIL
168 ENDIF
169 !
170 GOTO 1001
171 !**
172 ! 9. - CI-DESSOUS, ETIQUETTES DE BRANCHEMENT EN CAS D'ERREUR E/S.
173 !-----------------------------------------------------------------------
174 !
175 903 CONTINUE
176 clacti='WRITE'
177 GOTO 909
178 !
179 904 CONTINUE
180 clacti='READ'
181 !
182 909 CONTINUE
183 !
184 ! AU CAS OU, ON FORCE LE CODE-REPONSE ENTREE/SORTIE A ETRE POSITIF.
185 !
186 irep=abs(irep)
187 !**
188 ! 10. - PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
189 ! VIA LE SOUS-PROGRAMME "LFIEMS" .
190 !-----------------------------------------------------------------------
191 !
192 1001 CONTINUE
193 krep=irep
194 llfata=llmoer(irep,irang)
195 !
196 IF (irang.NE.0) THEN
197  lfi%NDEROP(irang)=7
198  lfi%NDERCO(irang)=irep
199  IF (llverf) CALL lfiver_fort &
200 & (lfi, lfi%VERRUE(irang),'OFF')
201 ENDIF
202 !
203 IF (llfata.OR.ixnims(irang).EQ.2) THEN
204  inimes=2
205 ELSE
206  IF (lhook) CALL dr_hook('LFINFO_FORT',1,zhook_handle)
207  RETURN
208 ENDIF
209 !
210 clnspr='LFINFO'
211 WRITE (unit=clmess,fmt='(''KREP='',I4,'', KNUMER='',I3, &
212 & '', CDNOMA='''''',A,'''''', KLONG='',I7,'',KPOSEX='',I10)') &
213 & krep,knumer,clnoma(:ilclno),klong,kposex
214 CALL lfiems_fort &
215 & (lfi, knumer,inimes,irep,llfata, &
216 & clmess,clnspr,clacti)
217 !
218 IF (lhook) CALL dr_hook('LFINFO_FORT',1,zhook_handle)
219 
220 CONTAINS
221 
222 #include "lficom2.ixm.h"
223 #include "lficom2.ixnims.h"
224 #include "lficom2.llmoer.h"
225 
226 END SUBROUTINE lfinfo_fort
227 
228 
229 
230 ! Oct-2012 P. Marguinaud 64b LFI
231 SUBROUTINE lfinfo64 &
232 & (krep, knumer, cdnoma, klong, kposex)
233 USE lfimod, ONLY : lfi => lficom_default, &
236 USE lfi_precision
237 IMPLICIT NONE
238 ! Arguments
239 INTEGER (KIND=JPLIKB) KREP ! OUT
240 INTEGER (KIND=JPLIKB) KNUMER ! IN
241 CHARACTER (LEN=*) CDNOMA ! IN
242 INTEGER (KIND=JPLIKB) KLONG ! OUT
243 INTEGER (KIND=JPLIKB) KPOSEX ! OUT
244 
245 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
246 
247 CALL lfinfo_fort &
248 & (lfi, krep, knumer, cdnoma, klong, kposex)
249 
250 END SUBROUTINE lfinfo64
251 
252 SUBROUTINE lfinfo &
253 & (krep, knumer, cdnoma, klong, kposex)
254 USE lfimod, ONLY : lfi => lficom_default, &
257 USE lfi_precision
258 IMPLICIT NONE
259 ! Arguments
260 INTEGER (KIND=JPLIKM) KREP ! OUT
261 INTEGER (KIND=JPLIKM) KNUMER ! IN
262 CHARACTER (LEN=*) CDNOMA ! IN
263 INTEGER (KIND=JPLIKM) KLONG ! OUT
264 INTEGER (KIND=JPLIKM) KPOSEX ! OUT
265 
266 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
267 
268 CALL lfinfo_mt &
269 & (lfi, krep, knumer, cdnoma, klong, kposex)
270 
271 END SUBROUTINE lfinfo
272 
273 SUBROUTINE lfinfo_mt &
274 & (lfi, krep, knumer, cdnoma, klong, kposex)
275 USE lfimod, ONLY : lficom
276 USE lfi_precision
277 IMPLICIT NONE
278 ! Arguments
279 type(lficom) lfi ! INOUT
280 INTEGER (KIND=JPLIKM) KREP ! OUT
281 INTEGER (KIND=JPLIKM) KNUMER ! IN
282 CHARACTER (LEN=*) CDNOMA ! IN
283 INTEGER (KIND=JPLIKM) KLONG ! OUT
284 INTEGER (KIND=JPLIKM) KPOSEX ! OUT
285 ! Local integers
286 INTEGER (KIND=JPLIKB) IREP ! OUT
287 INTEGER (KIND=JPLIKB) INUMER ! IN
288 INTEGER (KIND=JPLIKB) ILONG ! OUT
289 INTEGER (KIND=JPLIKB) IPOSEX ! OUT
290 ! Convert arguments
291 
292 inumer = int( knumer, jplikb)
293 
294 CALL lfinfo_fort &
295 & (lfi, irep, inumer, cdnoma, ilong, iposex)
296 
297 krep = int( irep, jplikm)
298 klong = int( ilong, jplikm)
299 kposex = int( iposex, jplikm)
300 
301 END SUBROUTINE lfinfo_mt
302 
303 !INTF KREP OUT
304 !INTF KNUMER IN
305 !INTF CDNOMA IN
306 !INTF KLONG OUT
307 !INTF KPOSEX OUT
integer, parameter jplikb
subroutine lfiran_fort(LFI, KREP, KRANG, CDNOMA, KRGPIM, KARTEX, KRETIN)
Definition: lfiran.F90:6
subroutine lfinfo64(KREP, KNUMER, CDNOMA, KLONG, KPOSEX)
Definition: lfinfo.F90:233
subroutine new_lfi_default()
Definition: lfimod.F90:376
subroutine lfinfo_fort(LFI, KREP, KNUMER, CDNOMA, KLONG, KPOSEX)
Definition: lfinfo.F90:6
logical, save lficom_default_init
Definition: lfimod.F90:371
subroutine lfinum_fort(LFI, KNUMER, KRANG)
Definition: lfinum.F90:6
subroutine lfiver_fort(LFI, PVEROU, CDSENS)
Definition: lfiver.F90:6
integer, parameter jprb
Definition: parkind1.F90:32
subroutine lfinfo_mt(LFI, KREP, KNUMER, CDNOMA, KLONG, KPOSEX)
Definition: lfinfo.F90:275
type(lficom), target, save lficom_default
Definition: lfimod.F90:370
logical lhook
Definition: yomhook.F90:15
subroutine lfipha_fort(LFI, KREP, KRANG, KRGPIM, KRETIN)
Definition: lfipha.F90:5
integer, parameter jplikm
subroutine lfinfo(KREP, KNUMER, CDNOMA, KLONG, KPOSEX)
Definition: lfinfo.F90:254
subroutine lfiems_fort(LFI, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI)
Definition: lfiems.F90:7
Definition: lfimod.F90:1
ERROR in index
Definition: ecsort_shared.h:90