SURFEX v8.1
General documentation of Surfex
lfiems.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 lfiems_fort &
5 & (lfi, knumer, knimes, kcode, ldfata, &
6 & cdmess, cdnspr, cdacti )
7 USE lfimod, ONLY : lficom
8 USE parkind1, ONLY : jprb
9 USE yomhook , ONLY : lhook, dr_hook
10 USE lfi_precision
11 IMPLICIT NONE
12 !****
13 ! CE SOUS-PROGRAMME EST CHARGE DE FAIRE L'ECHO DES MESSAGES
14 ! EMIS PAR LE LOGICIEL DE FICHIERS INDEXES LFI, EN FAISANT SI
15 ! BESOIN EST L'"ABORT" DU PROGRAMME .
16 ! En l'occurrence, il s'agit d'un "chapeau" qui aiguille sur
17 ! LFIEFR ou LFIENG en fonction de la variable logique LFI%LFRANC.
18 !**
19 ! ARGUMENTS : KNUMER ==> Numero eventuel de l'Unite Logique;
20 ! ( tous ( si LFI%JPNIL ==> pas d'Unite Logique )
21 ! d'Entree ) KNIMES ==> Niveau (0,1,2) du Message;
22 ! KCODE ==> CODE CORRESPONDANT A L'ACTION;
23 ! LDFATA ==> VRAI SI ON DOIT AVORTER LE PROGRAMME;
24 ! CDMESS ==> SI KNIMES#0, MESSAGE A EMETTRE;
25 ! CDNSPR ==> NOM DU SOUS-PROGRAMME APPELANT;
26 ! CDACTI ==> NOM DE L'ACTION D'ENTREE/SORTIE FORTRAN
27 ! (SI KCODE >0), SINON FOURRE-TOUT (!) .
28 !*
29 ! Pour la table des codes-reponses possibles, voir LFIEFR/LFIENG.
30 !
31 !
32 TYPE(lficom) :: LFI
33 INTEGER (KIND=JPLIKB) KNUMER, KNIMES, KCODE, ICODE, IREPON
34 !
35 LOGICAL LDFATA, LLEXUL
36 !
37 CHARACTER CDNSPR*(*), CDMESS*(*), CDACTI*(*)
38 
39 !**
40 ! 1. - MODIFICATION EVENTUELLE DU CODE-REPONSE S'IL VAUT (-1).
41 !-----------------------------------------------------------------------
42 !*
43 ! Il s'agit en effet de discriminer entre un numero d'unite
44 ! logique licite pour le FORTRAN, mais effectivement non ouvert pour
45 ! le logiciel LFI, auquel cas le code-reponse est laisse a (-1),
46 ! et un numero d'unite logique FORTRAN carrement illicite, que l'on
47 ! traduit par le code-reponse (-30).
48 !
49 REAL(KIND=JPRB) :: ZHOOK_HANDLE
50 IF (lhook) CALL dr_hook('LFIEMS_FORT',0,zhook_handle)
51 IF (kcode.EQ.-1) THEN
52  icode=-30
53  IF (knumer > 0) THEN
54  INQUIRE (unit=knumer,exist=llexul,err=101,iostat=irepon)
55  ELSE
56  llexul=.true.
57  ENDIF
58  IF (llexul) icode=kcode
59 ELSE
60  icode=kcode
61 ENDIF
62 !
63 101 CONTINUE
64 !**
65 ! 2. - APPEL AU SOUS-PROGRAMME AD HOC EN FONCTION DE *LFI%LFRANC*.
66 !-----------------------------------------------------------------------
67 !
68 IF (lfi%LFRANC) THEN
69  CALL lfiefr_fort &
70 & (lfi, knumer,knimes,icode,ldfata, &
71 & cdmess,cdnspr,cdacti)
72 ELSE
73  CALL lfieng_fort &
74 & (lfi, knumer,knimes,icode,ldfata, &
75 & cdmess,cdnspr,cdacti)
76 ENDIF
77 !
78 IF (lhook) CALL dr_hook('LFIEMS_FORT',1,zhook_handle)
79 END SUBROUTINE lfiems_fort
80 
81 
82 
83 ! Oct-2012 P. Marguinaud 64b LFI
84 SUBROUTINE lfiems64 &
85 & (knumer, knimes, kcode, ldfata, cdmess, cdnspr, &
86 & cdacti)
87 USE lfimod, ONLY : lfi => lficom_default, &
90 USE lfi_precision
91 IMPLICIT NONE
92 ! Arguments
93 INTEGER (KIND=JPLIKB) KNUMER ! IN
94 INTEGER (KIND=JPLIKB) KNIMES ! IN
95 INTEGER (KIND=JPLIKB) KCODE ! IN
96 LOGICAL LDFATA ! IN
97 CHARACTER (LEN=*) CDMESS ! IN
98 CHARACTER (LEN=*) CDNSPR ! IN
99 CHARACTER (LEN=*) CDACTI ! IN
100 
101 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
102 
103 CALL lfiems_fort &
104 & (lfi, knumer, knimes, kcode, ldfata, cdmess, cdnspr, &
105 & cdacti)
106 
107 END SUBROUTINE lfiems64
108 
109 SUBROUTINE lfiems &
110 & (knumer, knimes, kcode, ldfata, cdmess, cdnspr, &
111 & cdacti)
112 USE lfimod, ONLY : lfi => lficom_default, &
115 USE lfi_precision
116 IMPLICIT NONE
117 ! Arguments
118 INTEGER (KIND=JPLIKM) KNUMER ! IN
119 INTEGER (KIND=JPLIKM) KNIMES ! IN
120 INTEGER (KIND=JPLIKM) KCODE ! IN
121 LOGICAL LDFATA ! IN
122 CHARACTER (LEN=*) CDMESS ! IN
123 CHARACTER (LEN=*) CDNSPR ! IN
124 CHARACTER (LEN=*) CDACTI ! IN
125 
126 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
127 
128 CALL lfiems_mt &
129 & (lfi, knumer, knimes, kcode, ldfata, cdmess, cdnspr, &
130 & cdacti)
131 
132 END SUBROUTINE lfiems
133 
134 SUBROUTINE lfiems_mt &
135 & (lfi, knumer, knimes, kcode, ldfata, cdmess, cdnspr, &
136 & cdacti)
137 USE lfimod, ONLY : lficom
138 USE lfi_precision
139 IMPLICIT NONE
140 ! Arguments
141 type(lficom) lfi ! INOUT
142 INTEGER (KIND=JPLIKM) KNUMER ! IN
143 INTEGER (KIND=JPLIKM) KNIMES ! IN
144 INTEGER (KIND=JPLIKM) KCODE ! IN
145 LOGICAL LDFATA ! IN
146 CHARACTER (LEN=*) CDMESS ! IN
147 CHARACTER (LEN=*) CDNSPR ! IN
148 CHARACTER (LEN=*) CDACTI ! IN
149 ! Local integers
150 INTEGER (KIND=JPLIKB) INUMER ! IN
151 INTEGER (KIND=JPLIKB) INIMES ! IN
152 INTEGER (KIND=JPLIKB) ICODE ! IN
153 ! Convert arguments
154 
155 inumer = int( knumer, jplikb)
156 inimes = int( knimes, jplikb)
157 icode = int( kcode, jplikb)
158 
159 CALL lfiems_fort &
160 & (lfi, inumer, inimes, icode, ldfata, cdmess, cdnspr, &
161 & cdacti)
162 
163 
164 END SUBROUTINE lfiems_mt
165 
166 !INTF KNUMER IN
167 !INTF KNIMES IN
168 !INTF KCODE IN
169 !INTF LDFATA IN
170 !INTF CDMESS IN
171 !INTF CDNSPR IN
172 !INTF CDACTI IN
integer, parameter jplikb
subroutine new_lfi_default()
Definition: lfimod.F90:376
subroutine lfiems(KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI)
Definition: lfiems.F90:112
subroutine lfiefr_fort(LFI, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI)
Definition: lfiefr.F90:7
logical, save lficom_default_init
Definition: lfimod.F90:371
integer, parameter jprb
Definition: parkind1.F90:32
subroutine lfieng_fort(LFI, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI)
Definition: lfieng.F90:6
type(lficom), target, save lficom_default
Definition: lfimod.F90:370
logical lhook
Definition: yomhook.F90:15
subroutine lfiems64(KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI)
Definition: lfiems.F90:87
subroutine lfiems_fort(LFI, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI)
Definition: lfiems.F90:7
subroutine lfiems_mt(LFI, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI)
Definition: lfiems.F90:137
Definition: lfimod.F90:1