SURFEX v8.1
General documentation of Surfex
farflu.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 farflu_fort &
4 & (fa, kxnivv, kxtron, kxlati, kxlong )
5 USE fa_mod, ONLY : fa_com, jpniil
6 USE parkind1, ONLY : jprb
7 USE yomhook , ONLY : lhook, dr_hook
9 IMPLICIT NONE
10 !****
11 ! Sous-programme servant a specifier des Limites Utilisateur
12 ! en termes de Resolutions horizontale et verticale, valides
13 ! globalement pour tous les Fichiers et Cadres ARPEGE.
14 ! ( Resolution Fichiers - Limites Utilisateur )
15 !**
16 ! Arguments : KXNIVV ==> Nombre maximum de niveaux verticaux;
17 ! (tous d'Entree) KXTRON ==> Troncature maximum;
18 ! KXLATI ==> Nombre maximum de latitudes pole a pole;
19 ! KXLONG ==> Nombre maxi de longitudes par parallele.
20 !*
21 ! S'il y a des cadres deja definis (dynamiquement ou non) avec
22 ! des valeurs correspondantes plus grandes, cela provoque une erreur
23 ! globale.
24 ! Si les valeurs donnees en argument depassent les limites cor-
25 ! repondantes du logiciel, elles sont ecretees, avec un message.
26 ! Une messagerie de niveau 1 est emise dans le cas normal ou
27 ! ci-dessus.
28 !
29 !
30 !
31 TYPE(fa_com) :: FA
32 INTEGER (KIND=JPLIKB) KXNIVV, KXTRON, KXLATI, KXLONG
33 !
34 INTEGER (KIND=JPLIKB) INUMER, INIMES, IREP, IMINIM
35 INTEGER (KIND=JPLIKB) IXNIVV, IXTRON, IXLATI, J
36 INTEGER (KIND=JPLIKB) IXLONG, IRANGC
37 !
38 LOGICAL LLDEPA, LLVERG
39 !
40 !
41 !
42 CHARACTER(LEN=FA%JPXNOM) CLACTI
43 CHARACTER(LEN=FA%JPLMES) CLMESS
44 CHARACTER(LEN=FA%JPLSPX) CLNSPR
45 LOGICAL LLFATA
46 
47 !**
48 ! 1. - SI PREMIERE UTILISATION, APPEL AU SOUS-PROGRAMME "FARINE".
49 !-----------------------------------------------------------------------
50 !
51 REAL(KIND=JPRB) :: ZHOOK_HANDLE
52 IF (lhook) CALL dr_hook('FARFLU_MT',0,zhook_handle)
53 clacti=''
54 IF (fa%FARFLU_LLPREA) THEN
55  CALL farine_fort &
56 & (fa, 2_jplikb )
57  fa%FARFLU_LLPREA=.false.
58 ENDIF
59 !**
60 ! 2. - CONTROLES.
61 !-----------------------------------------------------------------------
62 !
63 iminim=min(kxnivv,kxtron,kxlati,kxlong)
64 !
65 IF (iminim.LE.0) THEN
66  llverg=.false.
67  lldepa=.false.
68  irep=-64
69  GOTO 1001
70 ELSE
71  lldepa=kxnivv.GT.fa%JPXNIV.OR.kxtron.GT.fa%JPXTRO.OR. &
72 & kxlati.GT.fa%JPXLAT.OR.kxlong.GT.fa%JPXLON
73  ixnivv=min(kxnivv,fa%JPXNIV)
74  ixtron=min(kxtron,fa%JPXTRO)
75  ixlati=min(kxlati,fa%JPXLAT)
76  ixlong=min(kxlong,fa%JPXLON)
77 ENDIF
78 !
79 ! Verrouillage global, si necessaire.
80 !
81 IF (fa%LFAMUL) CALL lfiver_fort &
82 & (fa%LFI, fa%VRGLAS,'ON')
83 llverg=fa%LFAMUL
84 !
85 IF (ixtron.LE.fa%NSTROI) THEN
86  irep=-99
87  GOTO 1001
88 ENDIF
89 !
90 ! Controles vis-a-vis des cadres deja definis, s'il y en a.
91 !
92 DO j=1,fa%NCADEF
93 irangc=fa%NCAIND(j)
94 !
95 IF (fa%CADRE(irangc)%MTRONC.GT.ixtron) THEN
96  irep=-104
97  GOTO 1001
98 ELSEIF (fa%CADRE(irangc)%NNIVER.GT.ixnivv) THEN
99  irep=-105
100  GOTO 1001
101 ELSEIF (fa%CADRE(irangc)%NLATIT.GT.ixlati) THEN
102  irep=-106
103  GOTO 1001
104 ELSEIF (fa%CADRE(irangc)%NXLOPA.GT.ixlong) THEN
105  irep=-107
106  GOTO 1001
107 ENDIF
108 !
109 ENDDO
110 !**
111 ! 3. - MODIFICATION DES LIMITES USAGER.
112 !-----------------------------------------------------------------------
113 !
114 fa%NXNIVV=ixnivv
115 fa%NXTRON=ixtron
116 fa%NXLATI=ixlati
117 fa%NXLONG=ixlong
118 irep=0
119 !**
120 ! 10. - PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
121 ! VIA LE sous-programme "FAIPAR" .
122 !-----------------------------------------------------------------------
123 !
124 1001 CONTINUE
125 !
126 ! Deverrouillage global eventuel.
127 !
128 IF (llverg) CALL lfiver_fort &
129 & (fa%LFI, fa%VRGLAS,'OFF')
130 !
131 llfata=irep.NE.0.AND.fa%NRFAGA.NE.2
132 !
133 IF (llfata) THEN
134  inimes=2
135 ELSEIF (fa%NIMSGA.EQ.0) THEN
136  IF (lhook) CALL dr_hook('FARFLU_MT',1,zhook_handle)
137  RETURN
138 ELSE
139  inimes=fa%NIMSGA
140 ENDIF
141 !
142 clnspr='FARFLU'
143 inumer=jpniil
144 !
145 IF (inimes.EQ.2) THEN
146  WRITE (unit=clmess,fmt='(''KXNIVV='',I4,'', KXTRON='',I4, &
147 & '', KXLATI='',I4,'', KXLONG='',I4)') &
148 & kxnivv,kxtron,kxlati,kxlong
149  CALL faipar_fort &
150 & (fa, inumer,inimes,irep,llfata,clmess, &
151 & clnspr,clacti,.false.)
152 ENDIF
153 !
154 IF (inimes.GE.1) THEN
155 !
156  IF (lldepa) THEN
157  WRITE (unit=clmess,fmt= &
158 & '(''LIMITES USAGER (***ECRETEES***): FA%NXNIVV='',I4, &
159 & '', FA%NXTRON='',I4,'', FA%NXLATI='',I4,'', FA%NXLONG='',I4)') &
160 & fa%NXNIVV,fa%NXTRON,fa%NXLATI,fa%NXLONG
161  ELSE
162  WRITE (unit=clmess,fmt= &
163 & '(''LIMITES USAGER EFFECTIVES: FA%NXNIVV='',I4, &
164 & '', FA%NXTRON='',I4,'', FA%NXLATI='',I4,'', FA%NXLONG='',I4)') &
165 & fa%NXNIVV,fa%NXTRON,fa%NXLATI,fa%NXLONG
166  ENDIF
167 !
168  CALL faipar_fort &
169 & (fa, inumer,inimes,irep,.false.,clmess, &
170 & clnspr,clacti,.false.)
171 ENDIF
172 !
173 IF (lhook) CALL dr_hook('FARFLU_MT',1,zhook_handle)
174 END SUBROUTINE farflu_fort
175 
176 
177 
178 ! Oct-2012 P. Marguinaud 64b LFI
179 SUBROUTINE farflu64 &
180 & (kxnivv, kxtron, kxlati, kxlong)
181 USE fa_mod, ONLY : fa => fa_com_default, &
184 USE lfi_precision
185 IMPLICIT NONE
186 ! Arguments
187 INTEGER (KIND=JPLIKB) KXNIVV ! IN
188 INTEGER (KIND=JPLIKB) KXTRON ! IN
189 INTEGER (KIND=JPLIKB) KXLATI ! IN
190 INTEGER (KIND=JPLIKB) KXLONG ! IN
191 
192 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
193 
194 CALL farflu_fort &
195 & (fa, kxnivv, kxtron, kxlati, kxlong)
196 
197 END SUBROUTINE farflu64
198 
199 SUBROUTINE farflu &
200 & (kxnivv, kxtron, kxlati, kxlong)
201 USE fa_mod, ONLY : fa => fa_com_default, &
204 USE lfi_precision
205 IMPLICIT NONE
206 ! Arguments
207 INTEGER (KIND=JPLIKM) KXNIVV ! IN
208 INTEGER (KIND=JPLIKM) KXTRON ! IN
209 INTEGER (KIND=JPLIKM) KXLATI ! IN
210 INTEGER (KIND=JPLIKM) KXLONG ! IN
211 
212 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
213 
214 CALL farflu_mt &
215 & (fa, kxnivv, kxtron, kxlati, kxlong)
216 
217 END SUBROUTINE farflu
218 
219 SUBROUTINE farflu_mt &
220 & (fa, kxnivv, kxtron, kxlati, kxlong)
221 USE fa_mod, ONLY : fa_com
222 USE lfi_precision
223 IMPLICIT NONE
224 ! Arguments
225 type(fa_com) fa ! INOUT
226 INTEGER (KIND=JPLIKM) KXNIVV ! IN
227 INTEGER (KIND=JPLIKM) KXTRON ! IN
228 INTEGER (KIND=JPLIKM) KXLATI ! IN
229 INTEGER (KIND=JPLIKM) KXLONG ! IN
230 ! Local integers
231 INTEGER (KIND=JPLIKB) IXNIVV ! IN
232 INTEGER (KIND=JPLIKB) IXTRON ! IN
233 INTEGER (KIND=JPLIKB) IXLATI ! IN
234 INTEGER (KIND=JPLIKB) IXLONG ! IN
235 ! Convert arguments
236 
237 ixnivv = int( kxnivv, jplikb)
238 ixtron = int( kxtron, jplikb)
239 ixlati = int( kxlati, jplikb)
240 ixlong = int( kxlong, jplikb)
241 
242 CALL farflu_fort &
243 & (fa, ixnivv, ixtron, ixlati, ixlong)
244 
245 
246 END SUBROUTINE farflu_mt
247 
248 !INTF KXNIVV IN
249 !INTF KXTRON IN
250 !INTF KXLATI IN
251 !INTF KXLONG IN
integer, parameter jplikb
subroutine farflu64(KXNIVV, KXTRON, KXLATI, KXLONG)
Definition: farflu.F90:181
subroutine farflu(KXNIVV, KXTRON, KXLATI, KXLONG)
Definition: farflu.F90:201
logical, save fa_com_default_init
Definition: fa_mod.F90:477
subroutine new_fa_default()
Definition: fa_mod.F90:649
Definition: fa_mod.F90:1
subroutine lfiver_fort(LFI, PVEROU, CDSENS)
Definition: lfiver.F90:6
integer, parameter jprb
Definition: parkind1.F90:32
subroutine farine_fort(FA, KOPTIO)
Definition: farine.F90:5
logical lhook
Definition: yomhook.F90:15
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 farflu_fort(FA, KXNIVV, KXTRON, KXLATI, KXLONG)
Definition: farflu.F90:5
subroutine farflu_mt(FA, KXNIVV, KXTRON, KXLATI, KXLONG)
Definition: farflu.F90:221
integer(kind=jplikb), parameter jpniil
Definition: fa_mod.F90:31