SURFEX v8.1
General documentation of Surfex
lfirec.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 lfirec_fort &
4 & (lfi, krgpif, krang, krec )
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 ! DETERMINATION DU LFI%NUMERO D'ENREGISTREMENT D'UNE PAIRE D'ARTICLES
13 ! D'INDEX ( LFI%NUMERO DE L'ARTICLE "NOMS", EN FAIT ) .
14 !**
15 ! ARGUMENTS : KRGPIF (ENTREE) ==> RANG DE LA P.P.I. DANS LE FICHIER;
16 ! KRANG (ENTREE) ==> RANG DE L'UNITE DANS LFI%NUMERO.
17 ! KREC (SORTIE) ==> LFI%NUMERO D'ENREGISTREMENT DE LA P.A.I
18 !
19 !
20 TYPE(lficom) :: LFI
21 INTEGER (KIND=JPLIKB) KRGPIF, KRANG, KREC, INBPIR
22 INTEGER (KIND=JPLIKB) INBALO, IFACTM, INALPP
23 INTEGER (KIND=JPLIKB) ILARPH, INTPPI, IREP, INIMES, INUMER
24 !
25 CHARACTER(LEN=LFI%JPLSPX) CLNSPR
26 CHARACTER(LEN=LFI%JPLMES) CLMESS
27 CHARACTER(LEN=LFI%JPLFTX) CLACTI
28 LOGICAL LLFATA
29 
30 !
31 REAL(KIND=JPRB) :: ZHOOK_HANDLE
32 IF (lhook) CALL dr_hook('LFIREC_FORT',0,zhook_handle)
33 clacti=''
34 inbpir=lfi%MDES1D(ixm(lfi%JPNPIR,krang))
35 inbalo=lfi%MDES1D(ixm(lfi%JPNALO,krang))
36 ifactm=lfi%MFACTM(krang)
37 inalpp=lfi%JPNAPP*ifactm
38 ilarph=lfi%JPLARD*ifactm
39 intppi=(inbalo-1+inalpp)/inalpp
40 !
41 IF (krgpif.LE.inbpir) THEN
42  krec=2*krgpif
43 ELSEIF (krgpif.LE.intppi) THEN
44 !
45 ! CAS OU LES ARTICLES D'INDEX "RESERVES" A LA CREATION DU FICHIER
46 ! N'ONT PAS SUFFI A STOCKER TOUS LES DESCRIPTEURS D'ARTICLES LOGI-
47 ! QUES: L'EMPLACEMENT DES PAIRES D'ARTICLES D'INDEX EXCEDENTAIRES
48 ! EST ALORS STOCKE DANS L'ARTICLE DOCUMENTAIRE, APRES LES VALEURS
49 ! "UTILES" (LFI%JPLDOC MOTS), EN COMMENCANT PAR LA FIN DE CET ARTICLE.
50 ! ( CECI POUR MENAGER UNE EVENTUELLE AUGMENTATION DE *LFI%JPLDOC*,
51 ! EN CAS D'EVOLUTION DU LOGICIEL )
52 !
53  krec=lfi%MDES1D(ixm(ilarph+1-(krgpif-inbpir),krang))
54 ELSE
55 !
56 ! CAS OU IL Y A INCOHERENCE ENTRE TABLES ET ARGUMENTS D'APPEL
57 !
58  krec=0
59  irep=-16
60 !
61 ! MESSAGERIE EVENTUELLE, AVEC ABORT SI NECESSAIRE .
62 !
63  llfata=llmoer(irep,krang)
64 !
65  IF (llfata.OR.lfi%NIMESG.NE.0) THEN
66  inimes=2
67  clnspr='LFIREC'
68  inumer=lfi%NUMERO(krang)
69 !
70  IF (lfi%LFRANC) THEN
71  WRITE (unit=clmess,fmt='(''KRGPIF='',I4,'', KRANG='',I3, &
72 & '', KREC='',I6,'', CODE "INTERNE"='',I4)') &
73 & krgpif,krang,krec,irep
74  ELSE
75  WRITE (unit=clmess,fmt='(''KRGPIF='',I4,'', KRANG='',I3, &
76 & '', KREC='',I6,'', "INTERNAL" CODE='',I4)') &
77 & krgpif,krang,krec,irep
78  ENDIF
79 !
80  CALL lfiems_fort &
81 & (lfi, inumer,inimes,irep,llfata, &
82 & clmess,clnspr,clacti)
83  ENDIF
84 !
85 ENDIF
86 !
87 IF (lhook) CALL dr_hook('LFIREC_FORT',1,zhook_handle)
88 
89 CONTAINS
90 
91 #include "lficom2.ixm.h"
92 #include "lficom2.llmoer.h"
93 
94 END SUBROUTINE lfirec_fort
95 
96 
97 
98 ! Oct-2012 P. Marguinaud 64b LFI
99 SUBROUTINE lfirec64 &
100 & (krgpif, krang, krec)
101 USE lfimod, ONLY : lfi => lficom_default, &
104 USE lfi_precision
105 IMPLICIT NONE
106 ! Arguments
107 INTEGER (KIND=JPLIKB) KRGPIF ! IN
108 INTEGER (KIND=JPLIKB) KRANG ! IN
109 INTEGER (KIND=JPLIKB) KREC ! OUT
110 
111 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
112 
113 CALL lfirec_fort &
114 & (lfi, krgpif, krang, krec)
115 
116 END SUBROUTINE lfirec64
117 
118 SUBROUTINE lfirec &
119 & (krgpif, krang, krec)
120 USE lfimod, ONLY : lfi => lficom_default, &
123 USE lfi_precision
124 IMPLICIT NONE
125 ! Arguments
126 INTEGER (KIND=JPLIKM) KRGPIF ! IN
127 INTEGER (KIND=JPLIKM) KRANG ! IN
128 INTEGER (KIND=JPLIKM) KREC ! OUT
129 
130 IF (.NOT. lficom_default_init) CALL new_lfi_default ()
131 
132 CALL lfirec_mt &
133 & (lfi, krgpif, krang, krec)
134 
135 END SUBROUTINE lfirec
136 
137 SUBROUTINE lfirec_mt &
138 & (lfi, krgpif, krang, krec)
139 USE lfimod, ONLY : lficom
140 USE lfi_precision
141 IMPLICIT NONE
142 ! Arguments
143 type(lficom) lfi ! INOUT
144 INTEGER (KIND=JPLIKM) KRGPIF ! IN
145 INTEGER (KIND=JPLIKM) KRANG ! IN
146 INTEGER (KIND=JPLIKM) KREC ! OUT
147 ! Local integers
148 INTEGER (KIND=JPLIKB) IRGPIF ! IN
149 INTEGER (KIND=JPLIKB) IRANG ! IN
150 INTEGER (KIND=JPLIKB) IREC ! OUT
151 ! Convert arguments
152 
153 irgpif = int( krgpif, jplikb)
154 irang = int( krang, jplikb)
155 
156 CALL lfirec_fort &
157 & (lfi, irgpif, irang, irec)
158 
159 krec = int( irec, jplikm)
160 
161 END SUBROUTINE lfirec_mt
162 
163 !INTF KRGPIF IN
164 !INTF KRANG IN
165 !INTF KREC OUT
integer, parameter jplikb
subroutine lfirec(KRGPIF, KRANG, KREC)
Definition: lfirec.F90:120
subroutine lfirec_fort(LFI, KRGPIF, KRANG, KREC)
Definition: lfirec.F90:5
subroutine new_lfi_default()
Definition: lfimod.F90:376
subroutine lfirec64(KRGPIF, KRANG, KREC)
Definition: lfirec.F90:101
logical, save lficom_default_init
Definition: lfimod.F90:371
integer, parameter jprb
Definition: parkind1.F90:32
subroutine lfirec_mt(LFI, KRGPIF, KRANG, KREC)
Definition: lfirec.F90:139
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