SURFEX v8.1
General documentation of Surfex
fairno.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 fairno_fort &
4 & (fa, krep, knumer, cdsttu )
6 USE parkind1, ONLY : jprb
7 USE yomhook , ONLY : lhook, dr_hook
9 IMPLICIT NONE
10 !****
11 ! Sous-programme de FERMETURE d'une unite logique "Fichier ARPEGE"
12 !**
13 ! Arguments : KREP (Sortie) ==> Code-reponse du sous-programme;
14 ! KNUMER (Entree) ==> Numero de l'unite logique;
15 ! CDSTTU (Entree) ==> "STATUS" eventuel pour "CLOSE".
16 !
17 !
18 !
19 TYPE(fa_com) :: FA
20 INTEGER (KIND=JPLIKB) KREP, KNUMER
21 !
22 INTEGER (KIND=JPLIKB) IREP, IRANG, J, IPOSNU
23 INTEGER (KIND=JPLIKB) IRANGC, INIMES, ILNOMC
24 !
25 CHARACTER(LEN=*) CDSTTU
26 CHARACTER(LEN=7) CLSTTU
27 !
28 LOGICAL LLSTTU, LLVERF, LLRLFI
29 !
30 CHARACTER(LEN=FA%JPXNOM) CLACTI
31 CHARACTER(LEN=FA%JPLMES) CLMESS
32 CHARACTER(LEN=FA%JPLSPX) CLNSPR
33 LOGICAL LLFATA
34 
35 !**
36 ! 1. - CONTROLES DES PARAMETRES D'APPEL, PUIS INITIALISATIONS.
37 !-----------------------------------------------------------------------
38 !
39 REAL(KIND=JPRB) :: ZHOOK_HANDLE
40 IF (lhook) CALL dr_hook('FAIRNO_MT',0,zhook_handle)
41 clacti=''
42 irep=0
43 llverf=.false.
44 llrlfi=.false.
45 CALL fanumu_fort &
46 & (fa, knumer,irang)
47 !
48 ! Verrouillage global eventuel.
49 !
50 IF (fa%LFAMUL) CALL lfiver_fort &
51 & (fa%LFI, fa%VRGLAS,'ON')
52 !
53 IF (irang.EQ.0) THEN
54  irep=-51
55  GOTO 1001
56 ELSEIF (int(len(cdsttu), jplikb).LE.0) THEN
57  irep=-65
58  GOTO 1001
59 ELSE
60  llsttu=cdsttu.EQ.'KEEP'.OR.cdsttu.EQ.'DELETE'
61 !
62  IF (llsttu) THEN
63  clsttu=cdsttu(1:min(int(len(cdsttu), jplikb), &
64 & int(len(clsttu), jplikb)))
65  ELSE
66  clsttu='DEFAUT'
67  ENDIF
68 !
69 ENDIF
70 !
71 IF (fa%LFAMUL) CALL lfiver_fort &
72 & (fa%LFI, fa%FICHIER(irang)%VRFICH,'ON')
73 llverf=fa%LFAMUL
74 !
75 IF (fa%FICHIER(irang)%LCREAF.AND..NOT.llsttu) THEN
76 !
77 ! On force le relachement d'un fichier "parasite".
78 !
79  llsttu=.true.
80  clsttu='DELETE'
81 ENDIF
82 !**
83 ! 2. - FERMETURE DU FICHIER, AU SENS DU LOGICIEL LFI.
84 !-----------------------------------------------------------------------
85 !
86 !**
87 ! 3. - "NETTOYAGE" DES TABLES AYANT PERMIS DE GERER LE FICHIER.
88 ! ( au moins celles ayant un caractere "global" )
89 !-----------------------------------------------------------------------
90 !
91 fa%FICHIER(irang)%NULOGI=jpniil
92 !
93 DO j=1,fa%NFIOUV
94 !
95 IF (fa%NULIND(j).EQ.irang) THEN
96  iposnu=j
97  GOTO 302
98 ENDIF
99 !
100 ENDDO
101 !
102 irep=-66
103 GOTO 1001
104 !
105 302 CONTINUE
106 !
107 fa%NFIOUV=fa%NFIOUV-1
108 !
109 DO j=iposnu,fa%NFIOUV
110 fa%NULIND(j)=fa%NULIND(j+1)
111 ENDDO
112 !
113 IF (fa%LFAMUL) THEN
114  CALL lfiver_fort &
115 & (fa%LFI, fa%FICHIER(irang)%VRFICH,'OFF')
116  CALL lfiver_fort &
117 & (fa%LFI, fa%FICHIER(irang)%VRFICH,'REL')
118 ENDIF
119 !
120 llverf=.false.
121 irangc=fa%FICHIER(irang)%NUCADR
122 fa%CADRE(irangc)%NULCAD=fa%CADRE(irangc)%NULCAD-1
123 !
124 ! Si le cadre auquel etait rattache le fichier n'a plus d'autre
125 ! fichier rattache, et qu'on ne devait pas conserver ce cadre,
126 ! on le supprime.
127 !
128 IF (fa%CADRE(irangc)%NULCAD.LE.0.AND. &
129 & (fa%CADRE(irangc)%NGARDE.EQ.0.OR. &
130 & (fa%CADRE(irangc)%NGARDE.EQ.1.AND. &
131 & .NOT.fa%LIGARD))) &
132 & CALL factui_fort &
133 & (fa, irep,irangc)
134 CALL free_fichier (fa%FICHIER(irang))
135 !**
136 ! 10. - PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
137 ! VIA LE SOUS-PROGRAMME "FAIPAR" .
138 !-----------------------------------------------------------------------
139 !
140 1001 CONTINUE
141 krep=irep
142 llfata=llmoer(irep,irang)
143 !
144 ! Deverrouillage(s) eventuel(s).
145 !
146 IF (llverf) CALL lfiver_fort &
147 & (fa%LFI, fa%FICHIER(irang)%VRFICH,'OFF')
148 IF (fa%LFAMUL) CALL lfiver_fort &
149 & (fa%LFI, fa%VRGLAS,'OFF')
150 !
151 IF (llfata) THEN
152  inimes=2
153 ELSE
154  inimes=ixnvms(irang)
155 ENDIF
156 !
157 IF (inimes.EQ.0) THEN
158  IF (lhook) CALL dr_hook('FAIRNO_MT',1,zhook_handle)
159  RETURN
160 ENDIF
161 !
162 clnspr='FAIRME'
163 !
164 IF (irep.EQ.-65) THEN
165  ilnomc=8
166  clacti(1:ilnomc)=fa%CHAINC(:ilnomc)
167  ELSE
168  ilnomc=min( int(len(clacti), jplikb), &
169 & int(len(cdsttu), jplikb) )
170  clacti(1:ilnomc)=cdsttu(1:ilnomc)
171 ENDIF
172 !
173 IF (inimes.EQ.2) THEN
174 !
175  ilnomc=min(ilnomc,fa%NCPCAD)
176  WRITE (unit=clmess,fmt='(''KREP='',I4,'', KNUMER='',I3, &
177 & '', CDSTTU='''''',A,'''''''')') krep,knumer, &
178 & clacti(1:ilnomc)
179  CALL faipar_fort &
180 & (fa, knumer,inimes,irep,llfata,clmess, &
181 & clnspr,clacti(1:ilnomc),llrlfi)
182 !
183 ENDIF
184 !
185 IF (lhook) CALL dr_hook('FAIRNO_MT',1,zhook_handle)
186 
187 CONTAINS
188 
189 #include "facom2.llmoer.h"
190 #include "facom2.ixnvms.h"
191 
192 END SUBROUTINE fairno_fort
193 
194 
195 
196 ! Oct-2012 P. Marguinaud 64b LFI
197 SUBROUTINE fairno64 &
198 & (krep, knumer, cdsttu)
199 USE fa_mod, ONLY : fa => fa_com_default, &
202 USE lfi_precision
203 IMPLICIT NONE
204 ! Arguments
205 INTEGER (KIND=JPLIKB) KREP ! OUT
206 INTEGER (KIND=JPLIKB) KNUMER ! IN
207 CHARACTER (LEN=*) CDSTTU ! IN
208 
209 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
210 
211 CALL fairno_fort &
212 & (fa, krep, knumer, cdsttu)
213 
214 END SUBROUTINE fairno64
215 
216 SUBROUTINE fairno &
217 & (krep, knumer, cdsttu)
218 USE fa_mod, ONLY : fa => fa_com_default, &
221 USE lfi_precision
222 IMPLICIT NONE
223 ! Arguments
224 INTEGER (KIND=JPLIKM) KREP ! OUT
225 INTEGER (KIND=JPLIKM) KNUMER ! IN
226 CHARACTER (LEN=*) CDSTTU ! IN
227 
228 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
229 
230 CALL fairno_mt &
231 & (fa, krep, knumer, cdsttu)
232 
233 END SUBROUTINE fairno
234 
235 SUBROUTINE fairno_mt &
236 & (fa, krep, knumer, cdsttu)
237 USE fa_mod, ONLY : fa_com
238 USE lfi_precision
239 IMPLICIT NONE
240 ! Arguments
241 type(fa_com) fa ! INOUT
242 INTEGER (KIND=JPLIKM) KREP ! OUT
243 INTEGER (KIND=JPLIKM) KNUMER ! IN
244 CHARACTER (LEN=*) CDSTTU ! IN
245 ! Local integers
246 INTEGER (KIND=JPLIKB) IREP ! OUT
247 INTEGER (KIND=JPLIKB) INUMER ! IN
248 ! Convert arguments
249 
250 inumer = int( knumer, jplikb)
251 
252 CALL fairno_fort &
253 & (fa, irep, inumer, cdsttu)
254 
255 krep = int( irep, jplikm)
256 
257 END SUBROUTINE fairno_mt
258 
259 
260 
261 !INTF KREP OUT
262 !INTF KNUMER IN
263 !INTF CDSTTU IN
subroutine factui_fort(FA, KREP, KRANGC)
Definition: factui.F90:5
integer, parameter jplikb
subroutine fairno_fort(FA, KREP, KNUMER, CDSTTU)
Definition: fairno.F90:5
logical, save fa_com_default_init
Definition: fa_mod.F90:477
subroutine fairno(KREP, KNUMER, CDSTTU)
Definition: fairno.F90:218
subroutine new_fa_default()
Definition: fa_mod.F90:649
subroutine fairno_mt(FA, KREP, KNUMER, CDSTTU)
Definition: fairno.F90:237
subroutine fairno64(KREP, KNUMER, CDSTTU)
Definition: fairno.F90:199
Definition: fa_mod.F90:1
subroutine lfiver_fort(LFI, PVEROU, CDSENS)
Definition: lfiver.F90:6
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
integer, parameter jplikm
type(fa_com), target, save fa_com_default
Definition: fa_mod.F90:476
subroutine faipar_fort(FA, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI, LDRLFI)
Definition: faipar.F90:6
subroutine fanumu_fort(FA, KNUMER, KRANG)
Definition: fanumu.F90:5
integer(kind=jplikb), parameter jpniil
Definition: fa_mod.F90:31
subroutine free_fichier(FI)
Definition: fa_mod.F90:634