SURFEX v8.1
General documentation of Surfex
lfinaf.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 lfinaf_fort &
5 & (lfi, krep, knumer, knaldo, kntrou, &
6 & knares, knamax )
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 ! SOUS-PROGRAMME DONNANT DES NOMBRES D'ARTICLES LOGIQUES DIVERS
14 ! ( DE DONNEES, "TROUS", POSSIBLE, MAXIMUM ) POUR UNE UNITE LOGIQUE
15 ! OUVERTE POUR LE LOGICIEL DE FICHIERS INDEXES *LFI* .
16 !**
17 ! ARGUMENTS : KREP (SORTIE) ==> CODE-REPONSE DU SOUS-PROGRAMME;
18 ! KNUMER (ENTREE) ==> LFI%NUMERO DE L'UNITE LOGIQUE;
19 ! KNALDO (SORTIE) ==> NOMBRE D'ARTICLES LOGIQUES
20 ! *DE DONNEES* (TROUS EXCLUS) PRESENTS;
21 ! KNTROU (SORTIE) ==> NOMBRE D'ARTICLES LOGIQUES QUI SONT
22 ! DEVENUS DES "TROUS", PAR SUITE DE
23 ! REECRITURES D'ARTICLES PLUS LONGUES
24 ! QU'INITIALEMENT, ET QUI N'ONT PAS
25 ! PU ETRE (ENCORE) RECYCLES;
26 ! KNARES (SORTIE) ==> NOMBRE D'ARTICLES LOGIQUES POUVANT
27 ! ETRE ECRITS DANS LA PARTIE "PRERER-
28 ! VEE" DE L'INDEX (TROUS COMPRIS);
29 ! KNAMAX (SORTIE) ==> NOMBRE D'ARTICLES LOGIQUES MAXIMUM
30 ! POUVANT ETRE ECRITS SUR L'UNITE
31 ! LOGIQUE, EN "DEBORDANT" AU MAXIMUM
32 ! DE LA PARTIE PRERESERVEE DE L'INDEX.
33 ! ( TROUS COMPRIS )
34 !
35 !
36 TYPE(lficom) :: LFI
37 INTEGER (KIND=JPLIKB) KREP, KNUMER, KNALDO, KNTROU, KNARES, KNAMAX
38 INTEGER (KIND=JPLIKB) IRANG, IREP, IFACTM, ILARPH, INALPP, INIMES
39 !
40 CHARACTER(LEN=LFI%JPLSPX) CLNSPR
41 CHARACTER(LEN=LFI%JPLMES) CLMESS
42 CHARACTER(LEN=LFI%JPLFTX) CLACTI
43 LOGICAL LLFATA
44 
45 !**
46 ! 1. - CONTROLES DU PARAMETRE D'APPEL, PUIS INITIALISATIONS.
47 !-----------------------------------------------------------------------
48 !
49 REAL(KIND=JPRB) :: ZHOOK_HANDLE
50 IF (lhook) CALL dr_hook('LFINAF_FORT',0,zhook_handle)
51 clacti=''
52 CALL lfinum_fort &
53 & (lfi, knumer,irang)
54 !
55 IF (irang.EQ.0) THEN
56  kntrou=0
57  knaldo=0
58  knares=0
59  knamax=0
60  irep=-1
61  GOTO 1001
62 ENDIF
63 !
64  IF (lfi%LMULTI) CALL lfiver_fort &
65 & (lfi, lfi%VERRUE(irang),'ON')
66 !**
67 ! 2. - CALCUL DIRECT DES ARGUMENTS DE SORTIE DU SOUS-PROGRAMME.
68 !-----------------------------------------------------------------------
69 !
70 ifactm=lfi%MFACTM(irang)
71 ilarph=lfi%JPLARD*ifactm
72 inalpp=lfi%JPNAPP*ifactm
73 kntrou=lfi%MDES1D(ixm(lfi%JPNTRU,irang))+lfi%NBTROU(irang)
74 knaldo=lfi%MDES1D(ixm(lfi%JPNALO,irang))-kntrou
75 knares=inalpp*lfi%MDES1D(ixm(lfi%JPNPIR,irang))
76 knamax=knares+inalpp*(ilarph-lfi%JPLDOC)
77 irep=0
78 !**
79 ! 10. - PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
80 ! VIA LE SOUS-PROGRAMME "LFIEMS" .
81 !-----------------------------------------------------------------------
82 !
83 1001 CONTINUE
84 krep=irep
85 llfata=llmoer(irep,irang)
86 !
87 IF (irang.NE.0) THEN
88  lfi%NDEROP(irang)=12
89  lfi%NDERCO(irang)=irep
90  IF (lfi%LMULTI) CALL lfiver_fort &
91 & (lfi, lfi%VERRUE(irang),'OFF')
92 ENDIF
93 !
94 IF (llfata.OR.ixnims(irang).EQ.2) THEN
95  inimes=2
96 ELSE
97  IF (lhook) CALL dr_hook('LFINAF_FORT',1,zhook_handle)
98  RETURN
99 ENDIF
100 !
101 clnspr='LFINAF'
102 WRITE (unit=clmess,fmt='(''KREP='',I4,'', KNUMER='',I3, &
103 & '', KNALDO='',I6,'', KNTROU='',I6,'', KNARES='',I6, &
104 & '', KNAMAX='',I6)') krep,knumer,knaldo,kntrou,knares,knamax
105 CALL lfiems_fort &
106 & (lfi, knumer,inimes,irep,llfata, &
107 & clmess,clnspr,clacti)
108 !
109 IF (lhook) CALL dr_hook('LFINAF_FORT',1,zhook_handle)
110 
111 CONTAINS
112 
113 #include "lficom2.ixm.h"
114 #include "lficom2.ixnims.h"
115 #include "lficom2.llmoer.h"
116 
117 END SUBROUTINE lfinaf_fort
118 
119 
120 
121 ! Oct-2012 P. Marguinaud 64b LFI
122 SUBROUTINE lfinaf64 &
123 & (krep, knumer, knaldo, kntrou, knares, knamax)
124 USE lfimod, ONLY : lfi => lficom_default, &
127 USE lfi_precision
128 IMPLICIT NONE
129 ! Arguments
130 INTEGER (KIND=JPLIKB) KREP ! OUT
131 INTEGER (KIND=JPLIKB) KNUMER ! IN
132 INTEGER (KIND=JPLIKB) KNALDO ! OUT
133 INTEGER (KIND=JPLIKB) KNTROU ! OUT
134 INTEGER (KIND=JPLIKB) KNARES ! OUT
135 INTEGER (KIND=JPLIKB) KNAMAX ! OUT
136 
137 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
138 
139 CALL lfinaf_fort &
140 & (lfi, krep, knumer, knaldo, kntrou, knares, knamax)
141 
142 END SUBROUTINE lfinaf64
143 
144 SUBROUTINE lfinaf &
145 & (krep, knumer, knaldo, kntrou, knares, knamax)
146 USE lfimod, ONLY : lfi => lficom_default, &
149 USE lfi_precision
150 IMPLICIT NONE
151 ! Arguments
152 INTEGER (KIND=JPLIKM) KREP ! OUT
153 INTEGER (KIND=JPLIKM) KNUMER ! IN
154 INTEGER (KIND=JPLIKM) KNALDO ! OUT
155 INTEGER (KIND=JPLIKM) KNTROU ! OUT
156 INTEGER (KIND=JPLIKM) KNARES ! OUT
157 INTEGER (KIND=JPLIKM) KNAMAX ! OUT
158 
159 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
160 
161 CALL lfinaf_mt &
162 & (lfi, krep, knumer, knaldo, kntrou, knares, knamax)
163 
164 END SUBROUTINE lfinaf
165 
166 SUBROUTINE lfinaf_mt &
167 & (lfi, krep, knumer, knaldo, kntrou, knares, knamax)
168 USE lfimod, ONLY : lficom
169 USE lfi_precision
170 IMPLICIT NONE
171 ! Arguments
172 type(lficom) lfi ! INOUT
173 INTEGER (KIND=JPLIKM) KREP ! OUT
174 INTEGER (KIND=JPLIKM) KNUMER ! IN
175 INTEGER (KIND=JPLIKM) KNALDO ! OUT
176 INTEGER (KIND=JPLIKM) KNTROU ! OUT
177 INTEGER (KIND=JPLIKM) KNARES ! OUT
178 INTEGER (KIND=JPLIKM) KNAMAX ! OUT
179 ! Local integers
180 INTEGER (KIND=JPLIKB) IREP ! OUT
181 INTEGER (KIND=JPLIKB) INUMER ! IN
182 INTEGER (KIND=JPLIKB) INALDO ! OUT
183 INTEGER (KIND=JPLIKB) INTROU ! OUT
184 INTEGER (KIND=JPLIKB) INARES ! OUT
185 INTEGER (KIND=JPLIKB) INAMAX ! OUT
186 ! Convert arguments
187 
188 inumer = int( knumer, jplikb)
189 
190 CALL lfinaf_fort &
191 & (lfi, irep, inumer, inaldo, introu, inares, inamax)
192 
193 krep = int( irep, jplikm)
194 knaldo = int( inaldo, jplikm)
195 kntrou = int( introu, jplikm)
196 knares = int( inares, jplikm)
197 knamax = int( inamax, jplikm)
198 
199 END SUBROUTINE lfinaf_mt
200 
201 !INTF KREP OUT
202 !INTF KNUMER IN
203 !INTF KNALDO OUT
204 !INTF KNTROU OUT
205 !INTF KNARES OUT
206 !INTF KNAMAX OUT
subroutine lfinaf_mt(LFI, KREP, KNUMER, KNALDO, KNTROU, KNARES, KNAMAX)
Definition: lfinaf.F90:168
integer, parameter jplikb
subroutine lfinaf(KREP, KNUMER, KNALDO, KNTROU, KNARES, KNAMAX)
Definition: lfinaf.F90:146
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
type(lficom), target, save lficom_default
Definition: lfimod.F90:370
logical lhook
Definition: yomhook.F90:15
subroutine lfinaf64(KREP, KNUMER, KNALDO, KNTROU, KNARES, KNAMAX)
Definition: lfinaf.F90:124
integer, parameter jplikm
subroutine lfiems_fort(LFI, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI)
Definition: lfiems.F90:7
subroutine lfinaf_fort(LFI, KREP, KNUMER, KNALDO, KNTROU, KNARES, KNAMAX)
Definition: lfinaf.F90:7
Definition: lfimod.F90:1