SURFEX v8.1
General documentation of Surfex
falais.F90
Go to the documentation of this file.
1 ! Oct-2012 P. Marguinaud 64b LFI
2 ! Jan-2011 P. Marguinaud Thread-safe FA
3 SUBROUTINE falais_fort &
4 & (fa, krep, knumer, cdnoma, kdonne, klongd )
5 USE fa_mod, ONLY : fa_com
6 USE parkind1, ONLY : jprb
7 USE yomhook , ONLY : lhook, dr_hook
9 IMPLICIT NONE
10 !****
11 ! Sous-programme de lecture d'un article de donnees non assimila-
12 ! bles a un champ horizontal sur un fichier ARPEGE.
13 ! ( Lecture d'un Article Integre Simplement, non code )
14 !**
15 ! Arguments : KREP (Sortie) ==> Code-reponse du sous-programme;
16 ! KNUMER (Entree) ==> Numero de l'unite logique;
17 ! CDNOMA (Entree) ==> Nom de l'article;
18 ! ( Tableau ) KDONNE (Sortie) ==> Donnees a ecrire;
19 ! KLONGD (Entree) ==> Nombre de mots a ecrire.
20 !
21 !
22 !
23 TYPE(fa_com) :: FA
24 INTEGER (KIND=JPLIKB) KREP, KNUMER, KLONGD
25 !
26 INTEGER (KIND=JPLIKB) ILCDNO, IREP, IRANG
27 INTEGER (KIND=JPLIKB) ILNOMA, INIMES, ILACTI
28 !
29 INTEGER (KIND=JPLIKB) KDONNE (klongd)
30 !
31 LOGICAL LLVERF, LLRLFI
32 !
33 CHARACTER CDNOMA*(*)
34 !
35 CHARACTER(LEN=FA%JPXNOM) CLACTI
36 CHARACTER(LEN=FA%JPXNOM) CLNOMA
37 CHARACTER(LEN=FA%JPLMES) CLMESS
38 CHARACTER(LEN=FA%JPLSPX) CLNSPR
39 LOGICAL LLFATA
40 
41 !**
42 ! 1. - CONTROLES ET INITIALISATIONS.
43 !-----------------------------------------------------------------------
44 !
45 REAL(KIND=JPRB) :: ZHOOK_HANDLE
46 IF (lhook) CALL dr_hook('FALAIS_MT',0,zhook_handle)
47 clacti=''
48 llverf=.false.
49 llrlfi=.false.
50 ilcdno=int(len(cdnoma), jplikb)
51 CALL fanumu_fort &
52 & (fa, knumer,irang)
53 !
54 IF (irang.EQ.0) THEN
55  irep=-51
56  GOTO 1001
57 ELSEIF (klongd.LE.0) THEN
58  irep=-64
59  GOTO 1001
60 ELSEIF (ilcdno.LE.0) THEN
61  irep=-65
62  GOTO 1001
63 ENDIF
64 !
65 ! Verrouillage eventuel du fichier.
66 !
67 IF (fa%LFAMUL) CALL lfiver_fort &
68 & (fa%LFI, fa%FICHIER(irang)%VRFICH,'ON')
69 llverf=fa%LFAMUL
70 !
71 IF (fa%FICHIER(irang)%LCREAF) THEN
72  irep=-85
73  GOTO 1001
74 ELSEIF (cdnoma.EQ.fa%CPCACH.OR.cdnoma.EQ.fa%CPCADI.OR. &
75 & cdnoma.EQ.fa%CPCAFS.OR.cdnoma.EQ.fa%CPCARP.OR. &
76 & cdnoma.EQ.fa%CPDATE.OR.cdnoma.EQ.fa%CPDATX) THEN
77  irep=-111
78  GOTO 1001
79 ENDIF
80 !**
81 ! 2. - LECTURE DE L'ARTICLE DE DONNEES SUR LE FICHIER.
82 !-----------------------------------------------------------------------
83 !
84 ilnoma=min( fa%NCPCAD, int(len(cdnoma), jplikb) )
85 clnoma(1:ilnoma)=cdnoma(1:ilnoma)
86 !
87 CALL lfilec_fort &
88 & (fa%LFI, irep,knumer,clnoma(1:ilnoma), &
89 & kdonne,klongd)
90 llrlfi=irep.NE.0
91 !**
92 ! 10. - PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
93 ! VIA LE SOUS-PROGRAMME "FAIPAR" .
94 !-----------------------------------------------------------------------
95 !
96 1001 CONTINUE
97 krep=irep
98 llfata=llmoer(irep,irang)
99 !
100 ! Deverrouillage eventuel du fichier.
101 !
102 IF (llverf) CALL lfiver_fort &
103 & (fa%LFI, fa%FICHIER(irang)%VRFICH,'OFF')
104 !
105 IF (llfata) THEN
106  inimes=2
107 ELSE
108  inimes=ixnvms(irang)
109 ENDIF
110 !
111 IF (.NOT.llfata.AND.inimes.NE.2) THEN
112  IF (lhook) CALL dr_hook('FALAIS_MT',1,zhook_handle)
113  RETURN
114 ENDIF
115 !
116 clnspr='FALAIS'
117 !
118 IF (irep.NE.-65) THEN
119  ilacti=min(ilcdno,fa%NCPCAD)
120  clacti(1:ilacti)=cdnoma(:ilacti)
121 ELSE
122  ilacti=8
123  clacti(1:ilacti)=fa%CHAINC(:ilacti)
124 ENDIF
125 !
126 WRITE (unit=clmess,fmt='(''KREP='',I4,'', KNUMER='',I3, &
127 & '', CDNOMA='''''',A,'''''', KLONGD='',I8)') &
128 & krep,knumer,clacti(1:ilacti),klongd
129 CALL faipar_fort &
130 & (fa, knumer,inimes,irep,llfata,clmess, &
131 & clnspr,clacti(1:ilacti),llrlfi)
132 !
133 IF (lhook) CALL dr_hook('FALAIS_MT',1,zhook_handle)
134 
135 CONTAINS
136 
137 #include "facom2.llmoer.h"
138 #include "facom2.ixnvms.h"
139 
140 END SUBROUTINE falais_fort
141 
142 
143 
144 ! Oct-2012 P. Marguinaud 64b LFI
145 SUBROUTINE falais64 &
146 & (krep, knumer, cdnoma, kdonne, klongd)
147 USE fa_mod, ONLY : fa => fa_com_default, &
150 USE lfi_precision
151 IMPLICIT NONE
152 ! Arguments
153 INTEGER (KIND=JPLIKB) KREP ! OUT
154 INTEGER (KIND=JPLIKB) KNUMER ! IN
155 CHARACTER (LEN=*) CDNOMA ! IN
156 INTEGER (KIND=JPLIKB) KLONGD ! IN
157 INTEGER (KIND=JPLIKB) KDONNE (klongd) ! IN
158 
159 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
160 
161 CALL falais_fort &
162 & (fa, krep, knumer, cdnoma, kdonne, klongd)
163 
164 END SUBROUTINE falais64
165 
166 SUBROUTINE falais &
167 & (krep, knumer, cdnoma, kdonne, klongd)
168 USE fa_mod, ONLY : fa => fa_com_default, &
171 USE lfi_precision
172 IMPLICIT NONE
173 ! Arguments
174 INTEGER (KIND=JPLIKM) KREP ! OUT
175 INTEGER (KIND=JPLIKM) KNUMER ! IN
176 CHARACTER (LEN=*) CDNOMA ! IN
177 INTEGER (KIND=JPLIKM) KLONGD ! IN
178 REAL (KIND=JPLIKB) KDONNE (klongd) ! IN
179 
180 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
181 
182 CALL falais_mt &
183 & (fa, krep, knumer, cdnoma, kdonne, klongd)
184 
185 END SUBROUTINE falais
186 
187 SUBROUTINE falais_mt &
188 & (fa, krep, knumer, cdnoma, kdonne, klongd)
189 USE fa_mod, ONLY : fa_com
190 USE lfi_precision
191 IMPLICIT NONE
192 ! Arguments
193 type(fa_com) fa ! INOUT
194 INTEGER (KIND=JPLIKM) KREP ! OUT
195 INTEGER (KIND=JPLIKM) KNUMER ! IN
196 CHARACTER (LEN=*) CDNOMA ! IN
197 INTEGER (KIND=JPLIKM) KLONGD ! IN
198 INTEGER (KIND=JPLIKB) KDONNE (klongd) ! IN
199 ! Local integers
200 INTEGER (KIND=JPLIKB) IREP ! OUT
201 INTEGER (KIND=JPLIKB) INUMER ! IN
202 INTEGER (KIND=JPLIKB) ILONGD ! IN
203 ! Convert arguments
204 
205 inumer = int( knumer, jplikb)
206 ilongd = int( klongd, jplikb)
207 
208 CALL falais_fort &
209 & (fa, irep, inumer, cdnoma, kdonne, ilongd)
210 
211 krep = int( irep, jplikm)
212 
213 END SUBROUTINE falais_mt
214 
215 !INTF KREP OUT
216 !INTF KNUMER IN
217 !INTF CDNOMA IN
218 !INTF KDONNE IN DIMS=KLONGD
219 !INTF KLONGD IN
integer, parameter jplikb
logical, save fa_com_default_init
Definition: fa_mod.F90:477
subroutine new_fa_default()
Definition: fa_mod.F90:649
Definition: fa_mod.F90:1
subroutine lfiver_fort(LFI, PVEROU, CDSENS)
Definition: lfiver.F90:6
integer, parameter jprb
Definition: parkind1.F90:32
subroutine lfilec_fort(LFI, KREP, KNUMER, CDNOMA, KTAB, KLONG)
Definition: lfilec.F90:6
logical lhook
Definition: yomhook.F90:15
subroutine falais(KREP, KNUMER, CDNOMA, KDONNE, KLONGD)
Definition: falais.F90:168
subroutine falais_fort(FA, KREP, KNUMER, CDNOMA, KDONNE, KLONGD)
Definition: falais.F90:5
integer, parameter jplikm
type(fa_com), target, save fa_com_default
Definition: fa_mod.F90:476
subroutine falais_mt(FA, KREP, KNUMER, CDNOMA, KDONNE, KLONGD)
Definition: falais.F90:189
subroutine faipar_fort(FA, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI, LDRLFI)
Definition: faipar.F90:6
subroutine falais64(KREP, KNUMER, CDNOMA, KDONNE, KLONGD)
Definition: falais.F90:147
subroutine fanumu_fort(FA, KNUMER, KRANG)
Definition: fanumu.F90:5