SURFEX v8.1
General documentation of Surfex
lfiofm.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 lfiofm_fort &
5 & (lfi, krep, knumer, kfactm, ldouvr )
6 USE lfimod, ONLY : lficom
7 USE parkind1, ONLY : jprb
8 USE yomhook , ONLY : lhook, dr_hook
10 IMPLICIT NONE
11 !****
12 ! Sous-Programme permettant d'obtenir le Facteur Multiplicatif:
13 !
14 ! - effectif d'une Unite Logique FORTRAN deja ouverte pour le
15 ! logiciel de Fichiers Indexes *LFI*;
16 ! - prevu pour une Unite Logique FORTRAN, destinee a etre ouverte
17 ! ULTERIEUREMENT par le Logiciel de Fichiers Indexes *LFI*, en
18 ! supposant que l'on n'appelle pas ensuite LFIAFM ou LFIFMD
19 ! avant LFIOUV.
20 !
21 ! L'argument de sortie LDOUVR permet de savoir dans quel cas on se
22 ! trouve.
23 !**
24 ! ARGUMENTS : KREP (Sortie) ==> Code-REPonse du sous-programme;
25 ! KNUMER (Entree) ==> NUMERo de l'unite logique;
26 ! KFACTM (Sortie) ==> FACteur Multiplicatif;
27 ! LDOUVR (Sortie) ==> Vrai si l'unite logique est deja
28 ! ouverte pour le logiciel LFI.
29 !
30 TYPE(lficom) :: LFI
31 INTEGER (KIND=JPLIKB) KREP, KNUMER, KFACTM
32 INTEGER (KIND=JPLIKB) IRANG, IREP, IRANFM, INIMES
33 !
34 LOGICAL LLEXUL, LDOUVR
35 !
36 CHARACTER(LEN=LFI%JPLSPX) CLNSPR
37 CHARACTER(LEN=LFI%JPLMES) CLMESS
38 CHARACTER(LEN=LFI%JPLFTX) CLACTI
39 LOGICAL LLFATA
40 
41 !
42 REAL(KIND=JPRB) :: ZHOOK_HANDLE
43 IF (lhook) CALL dr_hook('LFIOFM_FORT',0,zhook_handle)
44 clacti=''
45 CALL lfinum_fort &
46 & (lfi, knumer,irang)
47 ldouvr=irang.NE.0
48 !
49 IF (ldouvr) THEN
50 !
51 ! Unite logique deja ouverte pour le logiciel, on renvoie le
52 ! facteur multiplicatif effectif sous verrouillage eventuel.
53 !
54  IF (lfi%LMULTI) CALL lfiver_fort &
55 & (lfi, lfi%VERRUE(irang),'ON')
56  kfactm=lfi%MFACTM(irang)
57  IF (lfi%LMULTI) CALL lfiver_fort &
58 & (lfi, lfi%VERRUE(irang),'OFF')
59 ELSE
60 !
61 ! Unite logique non (encore) ouverte pour le logiciel.
62 !
63 ! Controle de validite FORTRAN du Numero d'Unite Logique.
64 !
65  IF (knumer > 0) THEN
66  INQUIRE (unit=knumer,exist=llexul,err=901,iostat=irep)
67  ELSE
68  llexul=.true.
69  ENDIF
70 !
71  IF (.NOT.llexul) THEN
72  irep=-30
73  GOTO 1001
74  ENDIF
75 !
76 ! On renvoie le facteur multiplicatif prevu,
77 ! sous verrouillage Global eventuel.
78 !
79  IF (lfi%LMULTI) CALL lfiver_fort &
80 & (lfi, lfi%VERGLA,'ON')
81  CALL lfifmp_fort &
82 & (lfi, knumer,iranfm)
83  kfactm=lfi%MFACTU(iranfm)
84  IF (lfi%LMULTI) CALL lfiver_fort &
85 & (lfi, lfi%VERGLA,'OFF')
86 ENDIF
87 !
88 irep=0
89 GOTO 1001
90 !**
91 ! 9. - CI-DESSOUS, ETIQUETTE DE BRANCHEMENT EN CAS D'ERREUR INQUIRE
92 !-----------------------------------------------------------------------
93 !
94 901 CONTINUE
95 clacti='INQUIRE'
96 !
97 ! AU CAS OU, ON FORCE LE CODE-REPONSE ENTREE/SORTIE A ETRE POSITIF.
98 !
99 irep=abs(irep)
100 !**
101 ! 10. - PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
102 ! VIA LE SOUS-PROGRAMME "LFIEMS" .
103 !-----------------------------------------------------------------------
104 !
105 1001 CONTINUE
106 krep=irep
107 llfata=llmoer(irep,irang)
108 !
109 IF (llfata) THEN
110  inimes=2
111 ELSEIF (irang.EQ.0) THEN
112  inimes=lfi%NIMESG
113 ELSE
114  inimes=ixnims(irang)
115 ENDIF
116 !
117 IF (inimes.EQ.2) THEN
118  clnspr='LFIOFM'
119  WRITE (unit=clmess,fmt='(''KREP='',I4,'', KNUMER='',I3, &
120 & '', KFACTM='',I4,'', LDOUVR= '',L1)') &
121 & krep,knumer,kfactm,ldouvr
122  CALL lfiems_fort &
123 & (lfi, knumer,inimes,irep,llfata, &
124 & clmess,clnspr,clacti)
125 ENDIF
126 !
127 IF (lhook) CALL dr_hook('LFIOFM_FORT',1,zhook_handle)
128 
129 CONTAINS
130 
131 #include "lficom2.ixnims.h"
132 #include "lficom2.llmoer.h"
133 
134 END SUBROUTINE lfiofm_fort
135 
136 
137 
138 ! Oct-2012 P. Marguinaud 64b LFI
139 SUBROUTINE lfiofm64 &
140 & (krep, knumer, kfactm, ldouvr)
141 USE lfimod, ONLY : lfi => lficom_default, &
144 USE lfi_precision
145 IMPLICIT NONE
146 ! Arguments
147 INTEGER (KIND=JPLIKB) KREP ! OUT
148 INTEGER (KIND=JPLIKB) KNUMER ! IN
149 INTEGER (KIND=JPLIKB) KFACTM ! OUT
150 LOGICAL LDOUVR ! OUT
151 
152 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
153 
154 CALL lfiofm_fort &
155 & (lfi, krep, knumer, kfactm, ldouvr)
156 
157 END SUBROUTINE lfiofm64
158 
159 SUBROUTINE lfiofm &
160 & (krep, knumer, kfactm, ldouvr)
161 USE lfimod, ONLY : lfi => lficom_default, &
164 USE lfi_precision
165 IMPLICIT NONE
166 ! Arguments
167 INTEGER (KIND=JPLIKM) KREP ! OUT
168 INTEGER (KIND=JPLIKM) KNUMER ! IN
169 INTEGER (KIND=JPLIKM) KFACTM ! OUT
170 LOGICAL LDOUVR ! OUT
171 
172 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
173 
174 CALL lfiofm_mt &
175 & (lfi, krep, knumer, kfactm, ldouvr)
176 
177 END SUBROUTINE lfiofm
178 
179 SUBROUTINE lfiofm_mt &
180 & (lfi, krep, knumer, kfactm, ldouvr)
181 USE lfimod, ONLY : lficom
182 USE lfi_precision
183 IMPLICIT NONE
184 ! Arguments
185 type(lficom) lfi ! INOUT
186 INTEGER (KIND=JPLIKM) KREP ! OUT
187 INTEGER (KIND=JPLIKM) KNUMER ! IN
188 INTEGER (KIND=JPLIKM) KFACTM ! OUT
189 LOGICAL LDOUVR ! OUT
190 ! Local integers
191 INTEGER (KIND=JPLIKB) IREP ! OUT
192 INTEGER (KIND=JPLIKB) INUMER ! IN
193 INTEGER (KIND=JPLIKB) IFACTM ! OUT
194 ! Convert arguments
195 
196 inumer = int( knumer, jplikb)
197 
198 CALL lfiofm_fort &
199 & (lfi, irep, inumer, ifactm, ldouvr)
200 
201 krep = int( irep, jplikm)
202 kfactm = int( ifactm, jplikm)
203 
204 END SUBROUTINE lfiofm_mt
205 
206 !INTF KREP OUT
207 !INTF KNUMER IN
208 !INTF KFACTM OUT
209 !INTF LDOUVR OUT
integer, parameter jplikb
subroutine lfifmp_fort(LFI, KNUMER, KRANFM)
Definition: lfifmp.F90:5
subroutine new_lfi_default()
Definition: lfimod.F90:376
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 lfiofm_mt(LFI, KREP, KNUMER, KFACTM, LDOUVR)
Definition: lfiofm.F90:181
subroutine lfiofm64(KREP, KNUMER, KFACTM, LDOUVR)
Definition: lfiofm.F90:141
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
subroutine lfiofm_fort(LFI, KREP, KNUMER, KFACTM, LDOUVR)
Definition: lfiofm.F90:6
subroutine lfiofm(KREP, KNUMER, KFACTM, LDOUVR)
Definition: lfiofm.F90:161