SURFEX v8.1
General documentation of Surfex
lfivid.F90
Go to the documentation of this file.
1 ! Oct-2012 P. Marguinaud 64b LFI
2 ! Jan-2011 P. Marguinaud Thread-safe LFI
3 SUBROUTINE lfivid_fort &
4 & (lfi, krep, krang, knumpd, ktampo, kretin )
5 USE lfimod, ONLY : lficom
6 USE parkind1, ONLY : jprb
7 USE yomhook , ONLY : lhook, dr_hook
9 IMPLICIT NONE
10 !****
11 ! SOUS-PROGRAMME *INTERNE* DU LOGICIEL DE FICHIERS INDEXES LFI
12 ! "VIDAGE" SUR FICHIER D'UNE PAGE DE DONNEES, APRES L'AVOIR DUMENT
13 ! COMPLETEE SI NECESSAIRE ( AVEC LES DONNEES DEJA PRESENTES SUR
14 ! FICHIER, OU AVEC DES ZEROS DANS LE CAS DU DERNIER ARTICLE ).
15 !**
16 ! ARGUMENTS : KREP (SORTIE) ==> CODE-REPONSE DE L'ECRITURE FORTRAN;
17 ! KRANG (ENTREE) ==> RANG EN MEMOIRE DE L'UNITE LOGIQUE;
18 ! KNUMPD (ENTREE) ==> LFI%NUMERO DE LA PAGE DE DONNEES;
19 ! KTAMPO (ENTREE) ==> ZONE SERVANT A RELIRE L'ARTICLE
20 ! PHYSIQUE CORRESPONDANT SUR FICHIER,
21 ! SI NECESSAIRE. (LONGUEUR: LFI%JPLARX)
22 ! KRETIN (SORTIE) ==> CODE-RETOUR INTERNE.
23 !
24 !
25 TYPE(lficom) :: LFI
26 INTEGER (KIND=JPLIKB) KREP, KRANG, KNUMPD, KRETIN
27 INTEGER (KIND=JPLIKB) KTAMPO (lfi%jplarx)
28 INTEGER (KIND=JPLIKB) INUMER, ILONPD, INUMAE, IFACTM
29 INTEGER (KIND=JPLIKB) ILARPH, JD, INAPHY, IRETOU
30 INTEGER (KIND=JPLIKB) INIMES, IRETIN
31 !
32 LOGICAL LLADON
33 !
34 CHARACTER(LEN=LFI%JPLSPX) CLNSPR
35 CHARACTER(LEN=LFI%JPLMES) CLMESS
36 CHARACTER(LEN=LFI%JPLFTX) CLACTI
37 LOGICAL LLFATA
38 
39 !**
40 ! 1. - CONTROLES ET INITIALISATIONS.
41 !-----------------------------------------------------------------------
42 !
43 REAL(KIND=JPRB) :: ZHOOK_HANDLE
44 IF (lhook) CALL dr_hook('LFIVID_FORT',0,zhook_handle)
45 clacti=''
46 IF (krang.LE.0.OR.krang.GT.lfi%JPNXFI) THEN
47  inumer=lfi%JPNIL
48 ELSE
49  inumer=lfi%NUMERO(krang)
50  krep=0
51 ENDIF
52 !
53 iretou=0
54 !
55 IF (inumer.EQ.lfi%JPNIL) THEN
56  krep=-14
57  GOTO 1001
58 ENDIF
59 !
60 ilonpd=lfi%NLONPD(knumpd,krang)
61 inumae=lfi%NUMAPD(knumpd,krang)
62 ifactm=lfi%MFACTM(krang)
63 ilarph=lfi%JPLARD*ifactm
64 !**
65 ! 2. - COMPLEMENT EVENTUEL DE LA PAGE DE DONNEES A TRAITER.
66 !-----------------------------------------------------------------------
67 !
68 IF (ilonpd.NE.ilarph) THEN
69 !
70 ! PAGE DE DONNEES INSUFFISAMMENT REMPLIE.
71 !
72  IF (inumae.GT.lfi%MDES1D(ixm(lfi%JPAXPD,krang))) THEN
73 !*
74 ! 2.1 - PAS D'ARTICLE PHYSIQUE ASSOCIE SUR FICHIER,
75 ! ON LA COMPLETE AVEC DES ZEROS.
76 !-----------------------------------------------------------------------
77 !
78  DO jd=ilonpd+1,ilarph
79  lfi%MTAMPD(ixt(jd,knumpd,krang))=0
80  ENDDO
81 !
82  ELSE
83 !*
84 ! 2.2 - NECESSITE D'ALLER RELIRE L'ARTICLE PHYSIQUE DE DONNEES
85 ! SUR FICHIER, ET DE "RECOLLER LES MORCEAUX".
86 !-----------------------------------------------------------------------
87 !
88  inaphy=inumae
89  CALL lfildo_fort &
90 & (lfi, krep,inumer,inumae,ktampo,&
91 & lfi%NBREAD(krang),ifactm, &
92 & lfi%YLFIC (krang),iretin)
93 !
94  IF (iretin.NE.0) THEN
95  GOTO 904
96  ENDIF
97 !
98  DO jd=ilonpd+1,ilarph
99  lfi%MTAMPD(ixt(jd,knumpd,krang))=ktampo(jd)
100  ENDDO
101 !
102  ENDIF
103 !
104 ENDIF
105 !**
106 ! 3. - ECRITURE OU REECRITURE DE LA PAGE DE DONNEES COMPLETE
107 ! OU COMPLETEE SUR FICHIER.
108 !-----------------------------------------------------------------------
109 !
110 lladon=.true.
111 inaphy=0
112 CALL lfiecx_fort &
113 & (lfi,krep,krang,inumae, &
114 & lfi%MTAMPD(ixt(1_jplikb ,knumpd,krang)), &
115 & lladon,iretin)
116 !
117 IF (iretin.EQ.1) THEN
118  GOTO 903
119 ELSEIF (iretin.EQ.2) THEN
120  GOTO 904
121 ELSEIF (iretin.NE.0) THEN
122  GOTO 1001
123 ENDIF
124 !
125 lfi%LECRPD(knumpd,krang)=.false.
126 GOTO 1001
127 !**
128 ! 9. - CI-DESSOUS, ETIQUETTES DE BRANCHEMENT EN CAS D'ERREUR E/S.
129 ! AU CAS OU, ON FORCE LE CODE-REPONSE ENTREE/SORTIE A ETRE POSITIF.
130 !-----------------------------------------------------------------------
131 !
132 903 CONTINUE
133 iretou=1
134 clacti='WRITE'
135 GOTO 909
136 !
137 904 CONTINUE
138 iretou=2
139 clacti='READ'
140 !
141 909 CONTINUE
142 krep=abs(krep)
143 IF (inaphy.NE.0) lfi%NUMAPH(krang)=inaphy
144 !**
145 ! 10. - PHASE TERMINALE : MESSAGERIE INTERNE EVENTUELLE,
146 ! VIA LE SOUS-PROGRAMME "LFIEMS", PUIS RETOUR.
147 !-----------------------------------------------------------------------
148 !
149 1001 CONTINUE
150 llfata=llmoer(krep,krang)
151 !
152 IF (krep.EQ.0) THEN
153  kretin=0
154 ELSEIF (krep.GT.0) THEN
155  kretin=iretou
156 ELSE
157  kretin=3
158 ENDIF
159 !
160 IF (lfi%LMISOP.OR.llfata) THEN
161  inimes=2
162  clnspr='LFIVID'
163  WRITE (unit=clmess,fmt='(''KREP='',I4,'', KRANG='',I3, &
164 & '', KNUMPD='',I3,'', KRETIN='',I2)') &
165 & krep,krang,knumpd,kretin
166  CALL lfiems_fort &
167 & (lfi, inumer,inimes,krep,.false., &
168 & clmess,clnspr,clacti)
169 ENDIF
170 !
171 IF (lhook) CALL dr_hook('LFIVID_FORT',1,zhook_handle)
172 
173 CONTAINS
174 
175 #include "lficom2.ixm.h"
176 #include "lficom2.ixt.h"
177 #include "lficom2.llmoer.h"
178 
179 END SUBROUTINE lfivid_fort
180 
181 
182 
183 ! Oct-2012 P. Marguinaud 64b LFI
184 SUBROUTINE lfivid64 &
185 & (krep, krang, knumpd, ktampo, kretin)
186 USE lfimod, ONLY : lfi => lficom_default, &
189 USE lfi_precision
190 IMPLICIT NONE
191 ! Arguments
192 INTEGER (KIND=JPLIKB) KREP ! OUT
193 INTEGER (KIND=JPLIKB) KRANG ! IN
194 INTEGER (KIND=JPLIKB) KNUMPD ! IN
195 INTEGER (KIND=JPLIKB) KTAMPO (*) ! IN
196 INTEGER (KIND=JPLIKB) KRETIN ! OUT
197 
198 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
199 
200 CALL lfivid_fort &
201 & (lfi, krep, krang, knumpd, ktampo, kretin)
202 
203 END SUBROUTINE lfivid64
204 
205 SUBROUTINE lfivid &
206 & (krep, krang, knumpd, ktampo, kretin)
207 USE lfimod, ONLY : lfi => lficom_default, &
210 USE lfi_precision
211 IMPLICIT NONE
212 ! Arguments
213 INTEGER (KIND=JPLIKM) KREP ! OUT
214 INTEGER (KIND=JPLIKM) KRANG ! IN
215 INTEGER (KIND=JPLIKM) KNUMPD ! IN
216 INTEGER (KIND=JPLIKB) KTAMPO (*) ! IN
217 INTEGER (KIND=JPLIKM) KRETIN ! OUT
218 
219 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
220 
221 CALL lfivid_mt &
222 & (lfi, krep, krang, knumpd, ktampo, kretin)
223 
224 END SUBROUTINE lfivid
225 
226 SUBROUTINE lfivid_mt &
227 & (lfi, krep, krang, knumpd, ktampo, kretin)
228 USE lfimod, ONLY : lficom
229 USE lfi_precision
230 IMPLICIT NONE
231 ! Arguments
232 type(lficom) lfi ! INOUT
233 INTEGER (KIND=JPLIKM) KREP ! OUT
234 INTEGER (KIND=JPLIKM) KRANG ! IN
235 INTEGER (KIND=JPLIKM) KNUMPD ! IN
236 INTEGER (KIND=JPLIKB) KTAMPO (lfi%jplarx) ! IN
237 INTEGER (KIND=JPLIKM) KRETIN ! OUT
238 ! Local integers
239 INTEGER (KIND=JPLIKB) IREP ! OUT
240 INTEGER (KIND=JPLIKB) IRANG ! IN
241 INTEGER (KIND=JPLIKB) INUMPD ! IN
242 INTEGER (KIND=JPLIKB) IRETIN ! OUT
243 ! Convert arguments
244 
245 irang = int( krang, jplikb)
246 inumpd = int( knumpd, jplikb)
247 
248 CALL lfivid_fort &
249 & (lfi, irep, irang, inumpd, ktampo, iretin)
250 
251 krep = int( irep, jplikm)
252 kretin = int( iretin, jplikm)
253 
254 END SUBROUTINE lfivid_mt
255 
256 !INTF KREP OUT
257 !INTF KRANG IN
258 !INTF KNUMPD IN
259 !INTF KTAMPO IN DIMS=LFI%JPLARX KIND=JPLIKB
260 !INTF KRETIN OUT
integer, parameter jplikb
subroutine lfiecx_fort(LFI, KREP, KRANG, KREC, KZONE, LDADON, KRETIN)
Definition: lfiecx.F90:6
subroutine lfildo_fort(LFI, KREP, KNUMER, KREC, KTAB, KNBLEC, KFACTM, YDFIC, KRETIN)
Definition: lfildo.F90:6
subroutine new_lfi_default()
Definition: lfimod.F90:376
subroutine lfivid(KREP, KRANG, KNUMPD, KTAMPO, KRETIN)
Definition: lfivid.F90:207
logical, save lficom_default_init
Definition: lfimod.F90:371
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
subroutine lfivid_mt(LFI, KREP, KRANG, KNUMPD, KTAMPO, KRETIN)
Definition: lfivid.F90:228
subroutine lfivid_fort(LFI, KREP, KRANG, KNUMPD, KTAMPO, KRETIN)
Definition: lfivid.F90:5
Definition: lfimod.F90:1
subroutine lfivid64(KREP, KRANG, KNUMPD, KTAMPO, KRETIN)
Definition: lfivid.F90:186