SURFEX v8.1
General documentation of Surfex
fareor.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 fareor_fort &
4 & (fa, krep, knumer, pchamm, pchamf, ldftom)
5 USE fa_mod, ONLY : fa_com
6 USE parkind1, ONLY : jprb
7 USE yomhook , ONLY : lhook, dr_hook
9 IMPLICIT NONE
10 !****
11 ! Sous-programme de REORDONNANCEMENT des coefficients d'un champ horizontal spectral
12 ! destine a etre ecrit sur un fichier ARPEGE/ALADIN, ou bien qui vient
13 ! d'etre lu.
14 !
15 !**
16 ! Arguments : KREP (Sortie) ==> Code-reponse du sous-programme;
17 ! KNUMER (Entree) ==> Numero de l'unite logique;
18 ! ( Tableau ) PCHAMM (Entree/Sortie) ==> Valeurs du champ, rangement modele
19 ! ( Tableau ) PCHAMF (Entree/Sortie) ==> Valeurs du champ, rangement fichier
20 ! LDFTOM (Entree) ==> Fichier vers modele (T), modele vers
21 ! fichier (F)
22 !
23 !
24 TYPE(fa_com) :: FA
25 INTEGER (KIND=JPLIKB) KREP, KNUMER
26 !
27 REAL (KIND=JPDBLR) PCHAMM (*), PCHAMF (*)
28 !
29 LOGICAL LDFTOM
30 !
31 INTEGER (KIND=JPLIKB) IRANG, IRANGC, INIMES
32 INTEGER (KIND=JPLIKB) ISMAX
33 INTEGER (KIND=JPLIKB), POINTER :: IISMAX (:), IDIM0GG (:)
34 CHARACTER(LEN=FA%JPLSPX) CLNSPR
35 CHARACTER(LEN=FA%JPLMES) CLMESS
36 LOGICAL LLMLAM, LLFATA, LLRLFI
37 
38 REAL(KIND=JPRB) :: ZHOOK_HANDLE
39 IF (lhook) CALL dr_hook('FAREOR_MT',0,zhook_handle)
40 
41 krep = 0
42 llrlfi = .false.
43 
44 CALL fanumu_fort (fa, knumer,irang)
45 
46 IF (irang .EQ. 0) THEN
47  krep = -51
48  GOTO 1001
49 ENDIF
50 
51 irangc=fa%FICHIER(irang)%NUCADR
52 llmlam=fa%CADRE(irangc)%LIMLAM
53 
54 ismax = fa%CADRE(irangc)%NSMAX
55 iismax => fa%CADRE(irangc)%NISMAX
56 idim0gg => fa%CADRE(irangc)%NDIM0GG
57 
58 IF (llmlam) THEN
59  CALL fareor_lam
60 ELSE
61  CALL fareor_glo
62 ENDIF
63 
64 1001 CONTINUE
65 
66 llfata=llmoer(krep,irang)
67 
68 IF (llfata) THEN
69  inimes=2
70 ELSE
71  inimes=ixnvms(irang)
72 ENDIF
73 
74 IF (.NOT.llfata.AND.inimes.NE.2) THEN
75  IF (lhook) CALL dr_hook('FAREOR_MT',1,zhook_handle)
76  RETURN
77 ENDIF
78 
79 clnspr='FAREOR'
80 
81 WRITE (unit=clmess,fmt='(''KREP='',I5,'', KNUMER='',I3)') &
82 & krep,knumer
83 
84 CALL faipar_fort &
85 & (fa, knumer,inimes,krep,llfata,clmess, &
86 & clnspr, '',llrlfi)
87 
88 IF (lhook) CALL dr_hook('FAREOR_MT',1,zhook_handle)
89 
90 CONTAINS
91 
92 SUBROUTINE fareor_lam
93 
94 INTEGER (KIND=JPLIKB) :: II, ISP, JM, JN
95 
96 ii=0
97 IF (ldftom) THEN
98  DO jn=0,ismax
99  DO jm=0,iismax(jn)
100  isp=idim0gg(jm)+4*jn
101  ii=ii+4
102  pchamm(isp:isp+3)=pchamf(ii-3:ii)
103  ENDDO
104  ENDDO
105 ELSE
106  DO jn=0,ismax
107  DO jm=0,iismax(jn)
108  isp=idim0gg(jm)+4*jn
109  ii=ii+4
110  pchamf(ii-3:ii)=pchamm(isp:isp+3)
111  ENDDO
112  ENDDO
113 ENDIF
114 
115 END SUBROUTINE fareor_lam
116 
117 SUBROUTINE fareor_glo
119 INTEGER(KIND=JPLIKB) :: II, IM, ISP, JM, JN
120 
121 IF (ldftom) THEN
122  ii=0
123  DO jn=0,ismax
124  DO jm=-jn,-1
125  isp=idim0gg(-jm)+(jn+jm)*2 +1
126  ii = ii + 1
127  pchamm(isp)=pchamf(ii)
128  ENDDO
129  isp=idim0gg(0)+jn*2
130  ii = ii + 1
131  pchamm(isp)=pchamf(ii)
132  pchamm(isp+1)=0.0_jprb
133  DO jm=1,jn
134  isp=idim0gg(jm)+(jn-jm)*2
135  ii = ii + 1
136  pchamm(isp)=pchamf(ii)
137  ENDDO
138  ENDDO
139 ELSE
140  ii=0
141  DO jn=0,ismax
142  DO jm=-jn,jn
143  im=abs(jm)
144  IF (jm < 0) THEN
145  isp=idim0gg(im)+(jn-im)*2 +1
146  ELSE
147  isp=idim0gg(im)+(jn-im)*2
148  ENDIF
149  ii = ii + 1
150  pchamf(ii)=pchamm(isp)
151  ENDDO
152  ENDDO
153 ENDIF
154 
155 END SUBROUTINE fareor_glo
156 
157 
158 #include "facom2.llmoer.h"
159 #include "facom2.ixnvms.h"
160 
161 END SUBROUTINE fareor_fort
162 
163 ! Oct-2012 P. Marguinaud 64b LFI
164 SUBROUTINE fareor64 &
165 & (krep, knumer, pchamm, pchamf, ldftom)
166 USE fa_mod, ONLY : fa => fa_com_default, &
169 USE lfi_precision
170 IMPLICIT NONE
171 ! Arguments
172 INTEGER (KIND=JPLIKB) KREP ! OUT
173 INTEGER (KIND=JPLIKB) KNUMER ! IN
174 REAL (KIND=JPDBLR) PCHAMM (*) ! INOUT
175 REAL (KIND=JPDBLR) PCHAMF (*) ! INOUT
176 LOGICAL LDFTOM ! IN
177 
178 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
179 
180 CALL fareor_fort &
181 & (fa, krep, knumer, pchamm, pchamf, ldftom)
182 
183 END SUBROUTINE fareor64
184 
185 SUBROUTINE fareor &
186 & (krep, knumer, pchamm, pchamf, ldftom)
187 USE fa_mod, ONLY : fa => fa_com_default, &
190 USE lfi_precision
191 IMPLICIT NONE
192 ! Arguments
193 INTEGER (KIND=JPLIKM) KREP ! OUT
194 INTEGER (KIND=JPLIKM) KNUMER ! IN
195 INTEGER (KIND=JPDBLR) PCHAMM (*) ! INOUT
196 INTEGER (KIND=JPDBLR) PCHAMF (*) ! INOUT
197 LOGICAL LDFTOM ! IN
198 
199 IF (.NOT. fa_com_default_init) CALL new_fa_default ()
200 
201 CALL fareor_mt &
202 & (fa, krep, knumer, pchamm, pchamf, ldftom)
203 
204 END SUBROUTINE fareor
205 
206 SUBROUTINE fareor_mt &
207 & (fa, krep, knumer, pchamm, pchamf, ldftom)
208 USE fa_mod, ONLY : fa_com
209 USE lfi_precision
210 IMPLICIT NONE
211 ! Arguments
212 TYPE(fa_com) FA
213 INTEGER (KIND=JPLIKM) KREP ! OUT
214 INTEGER (KIND=JPLIKM) KNUMER ! IN
215 INTEGER (KIND=JPDBLR) PCHAMM (*) ! INOUT
216 INTEGER (KIND=JPDBLR) PCHAMF (*) ! INOUT
217 LOGICAL LDFTOM ! IN
218 ! Local integers
219 INTEGER (KIND=JPLIKB) IREP ! OUT
220 INTEGER (KIND=JPLIKB) INUMER ! IN
221 ! Convert arguments
222 
223 inumer = int( knumer, jplikb)
224 
225 CALL fareor_fort &
226 & (fa, irep, inumer, pchamm, pchamf, ldftom)
227 
228 krep = int( irep, jplikm)
229 
230 END SUBROUTINE fareor_mt
231 
232 !INTF KREP OUT
233 !INTF KNUMER IN
234 !INTF PCHAMM INOUT DIMS=* KIND=JPDBLR
235 !INTF PCHAMF INOUT DIMS=* KIND=JPDBLR
236 !INTF LDCOSP IN
237 
subroutine fareor_mt(FA, KREP, KNUMER, PCHAMM, PCHAMF, LDFTOM)
Definition: fareor.F90:208
integer, parameter jplikb
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
integer, parameter jprb
Definition: parkind1.F90:32
subroutine fareor64(KREP, KNUMER, PCHAMM, PCHAMF, LDFTOM)
Definition: fareor.F90:166
logical lhook
Definition: yomhook.F90:15
subroutine fareor_fort(FA, KREP, KNUMER, PCHAMM, PCHAMF, LDFTOM)
Definition: fareor.F90:5
integer, parameter jplikm
type(fa_com), target, save fa_com_default
Definition: fa_mod.F90:476
subroutine fareor_glo
Definition: fareor.F90:118
subroutine fareor_lam
Definition: fareor.F90:93
subroutine faipar_fort(FA, KNUMER, KNIMES, KCODE, LDFATA, CDMESS, CDNSPR, CDACTI, LDRLFI)
Definition: faipar.F90:6
subroutine fareor(KREP, KNUMER, PCHAMM, PCHAMF, LDFTOM)
Definition: fareor.F90:187
subroutine fanumu_fort(FA, KNUMER, KRANG)
Definition: fanumu.F90:5