SURFEX v8.1
General documentation of Surfex
lfiini.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 lfiini_fort &
5 & (lfi, koptio )
6 USE lfimod, ONLY : lficom
7 USE parkind1, ONLY : jprb
8 USE yomhook , ONLY : lhook, dr_hook
10 IMPLICIT NONE
11 !****
12 ! CE SOUS-PROGRAMME EST CHARGE DES INITIALISATIONS DU LOGICIEL
13 ! DE FICHIERS INDEXES LFI .
14 !**
15 ! ARGUMENT : KOPTIO ==> OPTION CONCERNANT LE MODE D'UTILISATION.
16 ! (ENTREE) (MULTI-TACHE OU NON)
17 ! VALEURS POSSIBLES : 0 ==> MODE MONO-TACHE PRESCRIT
18 ! 1 ==> MODE MULTI-TACHE PRESCRIT
19 ! 2 ==> UTILISATION DU MODE PAR DEFAUT SI C'EST
20 ! LE PREMIER APPEL; SINON ON GARDE LE MODE
21 ! PRESCRIT ANTERIEUREMENT .
22 !
23 !
24 TYPE(lficom) :: LFI
25 INTEGER (KIND=JPLIKB) KOPTIO, JNPAGE, J, JRANG, IREP
26 INTEGER (KIND=JPLIKB) INIMES, INUMER, IRGPIM
27 !
28 LOGICAL LLNMUL, LLASGN, LLREL
29 CHARACTER(LEN=LFI%JPLSPX) CLNSPR
30 CHARACTER(LEN=LFI%JPLMES) CLMESS
31 CHARACTER(LEN=LFI%JPLFTX) CLACTI
32 LOGICAL LLFATA
33 
34 !
35 REAL(KIND=JPRB) :: ZHOOK_HANDLE
36 IF (lhook) CALL dr_hook('LFIINI_FORT',0,zhook_handle)
37 clacti=''
38 IF (lfi%LFIINI_LLPREA) THEN
39 !
40 ! C'EST LE PREMIER APPEL AU SOUS-PROGRAMME - INITIALISATIONS .
41 !
42  lfi%NBFIOU=0
43  lfi%NFACTM=0
44  lfi%NULOFM=0
45  lfi%NUIMEX=0
46  lfi%NERFAG=1
47  lfi%NISTAG=1
48  lfi%NIMESG=1
49  lfi%NPISAF=0
50  lfi%LTAMLG=.false.
51  lfi%LTAMEG=.true.
52  lfi%LMISOP=.false.
53  lfi%LFRANC=.true.
54  lfi%LERFAT(0)=.true.
55  lfi%NIVMES(0)=0
56 !
57 ! L'indice zero dans LFI%MFACTU correspond au facteur multiplicatif
58 ! "par defaut" .
59 !
60 #ifdef HIGHRES
61  lfi%MFACTU(0)=6
62 #else
63  lfi%MFACTU(0)=1
64 #endif
65  lfi%MFACTM(0)=0
66  lfi%NUMAPH(0)=lfi%JPNIL
67 !
68  lfi%CFGMXD(0)='locale'
69  lfi%NBMOSD(0)=lfi%JPNBIM
70  lfi%NBCASD(0)=lfi%JPNBIC
71  lfi%CFGMXD(1)='ieee'
72  lfi%NBMOSD(1)=32
73  lfi%NBCASD(1)=8
74  lfi%CFGMXD(2)='ultrix'
75  lfi%NBMOSD(2)=32
76  lfi%NBCASD(2)=8
77  lfi%CFGMXD(3)='ieee_dp'
78  lfi%NBMOSD(3)=64
79  lfi%NBCASD(3)=8
80  lfi%CFGMXD(4)='ultrix_dp'
81  lfi%NBMOSD(4)=64
82  lfi%NBCASD(4)=8
83  lfi%CTYPMX='ircdl'
84 !
85  DO jnpage=1,lfi%JPNXPI
86  lfi%MCOPIF(jnpage)=lfi%JPNIL
87  lfi%MRGPIF(jnpage)=lfi%JPNIL
88  lfi%LECRPI(jnpage,1)=.false.
89  lfi%LECRPI(jnpage,2)=.false.
90  ENDDO
91 !
92  DO j=1,lfi%JPNPIA
93 !
94  DO jrang=1,lfi%JPNXFI
95  irgpim=jrang+(j-1)*lfi%JPNXFI
96  lfi%MCOPIF(irgpim)=jrang
97  lfi%MRGPIM(j,jrang)=irgpim
98  ENDDO
99 !
100  ENDDO
101 !
102  DO jrang=1,lfi%JPNXFI
103  lfi%MRGPIF(jrang)=1
104  lfi%NUMERO(jrang)=lfi%JPNIL
105  lfi%NUMAPH(jrang)=lfi%JPNIL
106  ENDDO
107 !
108  DO j=1,lfi%JPNCPN
109  lfi%CHINCO(j:j)='?'
110  ENDDO
111 !
112  DO j=1,lfi%JPIMEX
113  lfi%MNUIEX(j)=lfi%JPNIL
114  lfi%NREXPL(0,j)=0
115  ENDDO
116 !
117  lfi%LFIINI_LLPREA=.false.
118  llnmul=(koptio.EQ.1).OR.(koptio.EQ.2.AND.lfi%LFIINI_LLDEFM)
119  llasgn=llnmul
120  llrel=.false.
121 !
122 ELSEIF (koptio.EQ.2) THEN
123 !
124 ! CE N'EST PAS LE PREMIER APPEL, MAIS COMME L'ARGUMENT VAUT 2,
125 ! ON LAISSE LES CHOSES EN PLACE .
126 !
127  llnmul=lfi%LMULTI
128  llasgn=.false.
129  llrel =.false.
130 ELSE
131 !
132 ! CE N'EST PAS LE PREMIER APPEL ET LE MODE EST PASSE 'EXPLICITEMENT'
133 !
134  llnmul=koptio.EQ.1
135  llasgn=llnmul.AND.(.NOT.lfi%LMULTI)
136  llrel =(.NOT.llnmul).AND.lfi%LMULTI
137 !
138  IF ((llasgn.OR.llrel).AND.lfi%NBFIOU.NE.0) THEN
139  irep=-4
140  GOTO 1001
141  ENDIF
142 !
143 ENDIF
144 !
145 lfi%LMULTI=llnmul
146 !
147 ! Le controle de coherence ci-dessous ne peut etre fait qu'apres
148 ! l'initialisation eventuelle des variables globales du logiciel.
149 !
150 IF (koptio.LT.0.OR.koptio.GT.2) THEN
151  irep=-2
152  GOTO 1001
153 ENDIF
154 !
155 irep=0
156 !
157 IF (llasgn) THEN
158  CALL lfiver_fort &
159 & (lfi, lfi%VERGLA,'ASGN')
160 ELSEIF (llrel) THEN
161  CALL lfiver_fort &
162 & (lfi, lfi%VERGLA,'REL')
163 ENDIF
164 !
165 1001 CONTINUE
166 !
167 ! MESSAGERIE EVENTUELLE, AVEC ABORT SI NECESSAIRE .
168 !
169 llfata=irep.NE.0.AND.lfi%NERFAG.NE.2
170 !
171 IF (llfata) THEN
172  inimes=2
173 ELSEIF (irep.NE.0) THEN
174  inimes=0
175 ELSEIF (lfi%NIMESG.EQ.2.OR.(lfi%NIMESG.EQ.1.AND.koptio.NE.2)) THEN
176  inimes=lfi%NIMESG
177 ELSE
178  IF (lhook) CALL dr_hook('LFIINI_FORT',1,zhook_handle)
179  RETURN
180 ENDIF
181 !
182 clnspr='LFIINI'
183 inumer=lfi%JPNIL
184 !
185 IF (max(inimes,lfi%NIMESG).EQ.2) THEN
186 !
187  IF (lfi%LFRANC) THEN
188  WRITE (unit=clmess, &
189 & fmt='(''KOPTIO='',I5,'', CODE INTERNE='', &
190 & I4)') koptio,irep
191  ELSE
192  WRITE (unit=clmess, &
193 & fmt='(''KOPTIO='',I5,'', INTERNAL CODE='', &
194 & I4)') koptio,irep
195  ENDIF
196 !
197  IF (inimes.NE.2) CALL lfiems_fort &
198 & (lfi, inumer,lfi%NIMESG,irep, &
199 & .false.,clmess, &
200 & clnspr,clacti)
201 ENDIF
202 !
203 CALL lfiems_fort &
204 & (lfi, inumer,inimes,irep,llfata, &
205 & clmess,clnspr,clacti)
206 !
207 IF (inimes.GE.1.AND.koptio.NE.2) THEN
208 !
209 ! Cette messagerie de niveau 1 n'est pas emise en cas d'erreur,
210 ! meme non fatale.
211 !
212  IF (lfi%LFRANC) THEN
213 !
214  IF (koptio.EQ.0) THEN
215  clmess='$ Mode MONO-TACHE Prescrit explicitement... $'
216  ELSE
217  clmess='$ Mode MULTI-TACHE Prescrit explicitement... $'
218  ENDIF
219 !
220  ELSE
221 !
222  IF (koptio.EQ.0) THEN
223  clmess='$ MONO-TASKING Mode explicitely Specified... $'
224  ELSE
225  clmess='$ MULTI-TASKING Mode explicitely Specified... $'
226  ENDIF
227 !
228  ENDIF
229 !
230  CALL lfiems_fort &
231 & (lfi, inumer,inimes,irep,.false., &
232 & clmess,clnspr,clacti)
233 ENDIF
234 !
235 IF (lhook) CALL dr_hook('LFIINI_FORT',1,zhook_handle)
236 END SUBROUTINE lfiini_fort
237 
238 
239 
240 ! Oct-2012 P. Marguinaud 64b LFI
241 SUBROUTINE lfiini64 &
242 & (koptio)
243 USE lfimod, ONLY : lfi => lficom_default, &
246 USE lfi_precision
247 IMPLICIT NONE
248 ! Arguments
249 INTEGER (KIND=JPLIKB) KOPTIO ! IN
250 
251 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
252 
253 CALL lfiini_fort &
254 & (lfi, koptio)
255 
256 END SUBROUTINE lfiini64
257 
258 SUBROUTINE lfiini &
259 & (koptio)
260 USE lfimod, ONLY : lfi => lficom_default, &
263 USE lfi_precision
264 IMPLICIT NONE
265 ! Arguments
266 INTEGER (KIND=JPLIKM) KOPTIO ! IN
267 
268 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
269 
270 CALL lfiini_mt &
271 & (lfi, koptio)
272 
273 END SUBROUTINE lfiini
274 
275 SUBROUTINE lfiini_mt &
276 & (lfi, koptio)
277 USE lfimod, ONLY : lficom
278 USE lfi_precision
279 IMPLICIT NONE
280 ! Arguments
281 type(lficom) lfi ! INOUT
282 INTEGER (KIND=JPLIKM) KOPTIO ! IN
283 ! Local integers
284 INTEGER (KIND=JPLIKB) IOPTIO ! IN
285 ! Convert arguments
286 
287 ioptio = int( koptio, jplikb)
288 
289 CALL lfiini_fort &
290 & (lfi, ioptio)
291 
292 
293 END SUBROUTINE lfiini_mt
294 
295 !INTF KOPTIO IN
integer, parameter jplikb
subroutine new_lfi_default()
Definition: lfimod.F90:376
logical, save lficom_default_init
Definition: lfimod.F90:371
subroutine lfiver_fort(LFI, PVEROU, CDSENS)
Definition: lfiver.F90:6
integer, parameter jprb
Definition: parkind1.F90:32
subroutine lfiini_fort(LFI, KOPTIO)
Definition: lfiini.F90:6
subroutine lfiini64(KOPTIO)
Definition: lfiini.F90:243
type(lficom), target, save lficom_default
Definition: lfimod.F90:370
logical lhook
Definition: yomhook.F90:15
subroutine lfiini(KOPTIO)
Definition: lfiini.F90:260
subroutine lfiems_fort(LFI, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI)
Definition: lfiems.F90:7
Definition: lfimod.F90:1
subroutine lfiini_mt(LFI, KOPTIO)
Definition: lfiini.F90:277