SURFEX v8.1
General documentation of Surfex
lfisfm.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 lfisfm_fort &
5 & (lfi, krep, knumer )
6 USE lfimod, ONLY : lficom
7 USE parkind1, ONLY : jprb
8 USE yomhook , ONLY : lhook, dr_hook
10 IMPLICIT NONE
11 !****
12 ! Sous-Programme Suprimant un Facteur Multiplicatif
13 ! d'une Unite Logique FORTRAN, qui a ete fermee PRECEDEMMENT
14 ! par le Logiciel de Fichiers Indexes *LFI* .
15 ! (ou du moins, n'est pas ouverte pour ce logiciel)
16 !
17 ! Ce sous-programme permet de faire de la place dans les tables
18 ! decrivant les associations Unite Logique/facteur Multiplicatif.
19 !**
20 ! ARGUMENTS : KREP (Sortie) ==> Code-REPonse du sous-programme;
21 ! KNUMER (Entree) ==> NUMERo de l'unite logique.
22 !
23 !
24 TYPE(lficom) :: LFI
25 INTEGER (KIND=JPLIKB) KREP, KNUMER, IRANG, IREP
26 INTEGER (KIND=JPLIKB) IRANFM, INIMES, IFACTM, J
27 !
28 LOGICAL LLVERG, LLEXUL
29 !
30 CHARACTER(LEN=LFI%JPLSPX) CLNSPR
31 CHARACTER(LEN=LFI%JPLMES) CLMESS
32 CHARACTER(LEN=LFI%JPLFTX) CLACTI
33 LOGICAL LLFATA
34 
35 !**
36 ! 1. - CONTROLES DES PARAMETRES D'APPEL, INITIALISATIONS.
37 !-----------------------------------------------------------------------
38 !
39 ! Appel a LFINUM, permettant (le cas echeant) l'initialisation
40 ! variables globales du logiciel a la 1ere utilisation.
41 !
42 REAL(KIND=JPRB) :: ZHOOK_HANDLE
43 IF (lhook) CALL dr_hook('LFISFM_FORT',0,zhook_handle)
44 clacti=''
45 ifactm=0
46 llverg=.false.
47 CALL lfinum_fort &
48 & (lfi, knumer,irang)
49 !
50 IF (irang.NE.0) THEN
51  irep=-5
52  GOTO 1001
53 ENDIF
54 !
55 ! Controle de validite FORTRAN du Numero d'Unite Logique.
56 !
57 IF (knumer > 0) THEN
58  INQUIRE (unit=knumer,exist=llexul,err=901,iostat=irep)
59 ELSE
60  llexul=.true.
61 ENDIF
62 !
63 IF (.NOT.llexul) THEN
64  irep=-30
65  GOTO 1001
66 ENDIF
67 !
68 ! Verrouillage Global eventuel.
69 !
70  IF (lfi%LMULTI) CALL lfiver_fort &
71 & (lfi, lfi%VERGLA,'ON')
72 llverg=lfi%LMULTI
73 !**
74 ! 2. - TRAVAIL EFFECTIF SUR LES TABLES DECRIVANT LES ASSOCIATIONS
75 ! UNITES LOGIQUES/FACTEURS.
76 !-----------------------------------------------------------------------
77 !
78 CALL lfifmp_fort &
79 & (lfi, knumer,iranfm)
80 !
81 IF (iranfm.EQ.0) THEN
82 !
83 ! Unite logique non trouvee dans la table *LFI%MULOFM*.
84 !
85  irep=-31
86  GOTO 1001
87 ENDIF
88 !
89 ifactm=lfi%MFACTU(iranfm)
90 lfi%NULOFM=lfi%NULOFM-1
91 !
92 DO j=iranfm,lfi%NULOFM
93 lfi%MFACTU(j)=lfi%MFACTU(j+1)
94 lfi%MULOFM(j)=lfi%MULOFM(j+1)
95 ENDDO
96 !
97 irep=0
98 GOTO 1001
99 !**
100 ! 9. - CI-DESSOUS, ETIQUETTE DE BRANCHEMENT EN CAS D'ERREUR INQUIRE
101 !-----------------------------------------------------------------------
102 !
103 901 CONTINUE
104 clacti='INQUIRE'
105 !
106 ! AU CAS OU, ON FORCE LE CODE-REPONSE ENTREE/SORTIE A ETRE POSITIF.
107 !
108 irep=abs(irep)
109 !**
110 ! 10. - PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
111 ! VIA LE SOUS-PROGRAMME "LFIEMS" .
112 !-----------------------------------------------------------------------
113 !
114 1001 CONTINUE
115 krep=irep
116 llfata=llmoer(irep,irang)
117 !
118 IF (llverg) CALL lfiver_fort &
119 & (lfi, lfi%VERGLA,'OFF')
120 !
121 IF (llfata) THEN
122  inimes=2
123 ELSEIF (irang.EQ.0) THEN
124  inimes=lfi%NIMESG
125 ELSE
126  inimes=ixnims(irang)
127 ENDIF
128 !
129 IF (inimes.EQ.0) THEN
130  IF (lhook) CALL dr_hook('LFISFM_FORT',1,zhook_handle)
131  RETURN
132 ENDIF
133 clnspr='LFISFM'
134 !
135 IF (inimes.EQ.2) THEN
136  WRITE (unit=clmess,fmt='(''KREP='',I4,'', KNUMER='',I3)') &
137 & krep,knumer
138  CALL lfiems_fort &
139 & (lfi, knumer,inimes,irep,llfata, &
140 & clmess,clnspr,clacti)
141 ENDIF
142 !
143 IF (lfi%LFRANC) THEN
144  WRITE (unit=clmess,fmt= &
145 & '(''Suppression du Facteur Multiplicatif'',I3, &
146 & '', Unite Logique'',I3)') ifactm,knumer
147 ELSE
148  WRITE (unit=clmess,fmt= &
149 & '(''Multiply Factor'',I3, &
150 & '' suppressed, Logical Unit'',I3)') ifactm,knumer
151 ENDIF
152 !
153 CALL lfiems_fort &
154 & (lfi, knumer,inimes,irep,.false., &
155 & clmess,clnspr,clacti)
156 !
157 IF (lhook) CALL dr_hook('LFISFM_FORT',1,zhook_handle)
158 
159 CONTAINS
160 
161 #include "lficom2.ixnims.h"
162 #include "lficom2.llmoer.h"
163 
164 END SUBROUTINE lfisfm_fort
165 
166 
167 
168 ! Oct-2012 P. Marguinaud 64b LFI
169 SUBROUTINE lfisfm64 &
170 & (krep, knumer)
171 USE lfimod, ONLY : lfi => lficom_default, &
174 USE lfi_precision
175 IMPLICIT NONE
176 ! Arguments
177 INTEGER (KIND=JPLIKB) KREP ! OUT
178 INTEGER (KIND=JPLIKB) KNUMER ! IN
179 
180 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
181 
182 CALL lfisfm_fort &
183 & (lfi, krep, knumer)
184 
185 END SUBROUTINE lfisfm64
186 
187 SUBROUTINE lfisfm &
188 & (krep, knumer)
189 USE lfimod, ONLY : lfi => lficom_default, &
192 USE lfi_precision
193 IMPLICIT NONE
194 ! Arguments
195 INTEGER (KIND=JPLIKM) KREP ! OUT
196 INTEGER (KIND=JPLIKM) KNUMER ! IN
197 
198 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
199 
200 CALL lfisfm_mt &
201 & (lfi, krep, knumer)
202 
203 END SUBROUTINE lfisfm
204 
205 SUBROUTINE lfisfm_mt &
206 & (lfi, krep, knumer)
207 USE lfimod, ONLY : lficom
208 USE lfi_precision
209 IMPLICIT NONE
210 ! Arguments
211 type(lficom) lfi ! INOUT
212 INTEGER (KIND=JPLIKM) KREP ! OUT
213 INTEGER (KIND=JPLIKM) KNUMER ! IN
214 ! Local integers
215 INTEGER (KIND=JPLIKB) IREP ! OUT
216 INTEGER (KIND=JPLIKB) INUMER ! IN
217 ! Convert arguments
218 
219 inumer = int( knumer, jplikb)
220 
221 CALL lfisfm_fort &
222 & (lfi, irep, inumer)
223 
224 krep = int( irep, jplikm)
225 
226 END SUBROUTINE lfisfm_mt
227 
228 !INTF KREP OUT
229 !INTF KNUMER IN
subroutine lfisfm_mt(LFI, KREP, KNUMER)
Definition: lfisfm.F90:207
integer, parameter jplikb
subroutine lfifmp_fort(LFI, KNUMER, KRANFM)
Definition: lfifmp.F90:5
subroutine lfisfm64(KREP, KNUMER)
Definition: lfisfm.F90:171
subroutine new_lfi_default()
Definition: lfimod.F90:376
subroutine lfisfm_fort(LFI, KREP, KNUMER)
Definition: lfisfm.F90:6
subroutine lfisfm(KREP, KNUMER)
Definition: lfisfm.F90:189
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
type(lficom), target, save lficom_default
Definition: lfimod.F90:370
logical lhook
Definition: yomhook.F90:15
integer, parameter jplikm
subroutine lfiems_fort(LFI, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI)
Definition: lfiems.F90:7
Definition: lfimod.F90:1