10 SUBROUTINE init_filtre_fft(coeffu,modfrstu,jfiltnu,jfiltsu,coeffv,modfrstv,jfiltnv,jfiltsv)
13 include
'dimensions.h'
14 REAL,
INTENT(IN) :: coeffu(
iim,jjm)
15 INTEGER,
INTENT(IN) :: modfrstu(jjm)
16 INTEGER,
INTENT(IN) :: jfiltnu
17 INTEGER,
INTENT(IN) :: jfiltsu
18 REAL,
INTENT(IN) :: coeffv(
iim,jjm)
19 INTEGER,
INTENT(IN) :: modfrstv(jjm)
20 INTEGER,
INTENT(IN) :: jfiltnv
21 INTEGER,
INTENT(IN) :: jfiltsv
23 INTEGER :: index_vp(
iim)
32 index_vp(
iim/2+i+1)=
iim-2*i+1
42 IF (index_vp(i) < modfrstu(j))
THEN
52 IF (index_vp(i) < modfrstu(j))
THEN
62 IF (index_vp(i) < modfrstv(j))
THEN
72 IF (index_vp(i) < modfrstv(j))
THEN
82 IF (index_vp(i) < modfrstu(j))
THEN
85 filtre_inv(i,j)=coeffu(index_vp(i),j)/(1.+coeffu(index_vp(i),j))
92 IF (index_vp(i) < modfrstu(j))
THEN
95 filtre_inv(i,j)=coeffu(index_vp(i),j)/(1.+coeffu(index_vp(i),j))
106 SUBROUTINE filtre_u_fft(vect_inout,jjb,jje,jj_begin,jj_end,nbniv)
112 include
'dimensions.h'
113 INTEGER,
INTENT(IN) :: jjb
114 INTEGER,
INTENT(IN) :: jje
115 INTEGER,
INTENT(IN) :: jj_begin
116 INTEGER,
INTENT(IN) :: jj_end
117 INTEGER,
INTENT(IN) :: nbniv
118 REAL,
INTENT(INOUT) :: vect_inout(
iim+1,jjb:jje,nbniv)
120 REAL :: vect(
iim+inc,jj_end-jj_begin+1,nbniv)
121 COMPLEX :: TF_vect(
iim/2+1,jj_end-jj_begin+1,nbniv)
131 DO j=1,jj_end-jj_begin+1
133 vect(i,j,ll_nb)=vect_inout(i,j+jj_begin-1,l)
139 nb_vect=(jj_end-jj_begin+1)*ll_nb
143 CALL fft_forward(vect,tf_vect,nb_vect)
154 DO j=1,jj_end-jj_begin+1
156 tf_vect(i,j,l)=tf_vect(i,j,l)*
filtre_u(i,jj_begin+j-1)
161 CALL fft_backward(tf_vect,vect,nb_vect)
175 DO j=1,jj_end-jj_begin+1
177 vect_inout(i,j+jj_begin-1,l)=vect(i,j,ll_nb)
186 SUBROUTINE filtre_v_fft(vect_inout,jjb,jje,jj_begin,jj_end,nbniv)
192 include
'dimensions.h'
193 INTEGER,
INTENT(IN) :: jjb
194 INTEGER,
INTENT(IN) :: jje
195 INTEGER,
INTENT(IN) :: jj_begin
196 INTEGER,
INTENT(IN) :: jj_end
197 INTEGER,
INTENT(IN) :: nbniv
198 REAL,
INTENT(INOUT) :: vect_inout(
iim+1,jjb:jje,nbniv)
200 REAL :: vect(
iim+inc,jj_end-jj_begin+1,nbniv)
201 COMPLEX :: TF_vect(
iim/2+1,jj_end-jj_begin+1,nbniv)
210 DO j=1,jj_end-jj_begin+1
212 vect(i,j,ll_nb)=vect_inout(i,j+jj_begin-1,l)
219 nb_vect=(jj_end-jj_begin+1)*ll_nb
221 CALL fft_forward(vect,tf_vect,nb_vect)
224 DO j=1,jj_end-jj_begin+1
226 tf_vect(i,j,l)=tf_vect(i,j,l)*
filtre_v(i,jj_begin+j-1)
231 CALL fft_backward(tf_vect,vect,nb_vect)
238 DO j=1,jj_end-jj_begin+1
240 vect_inout(i,j+jj_begin-1,l)=vect(i,j,ll_nb)
249 SUBROUTINE filtre_inv_fft(vect_inout,jjb,jje,jj_begin,jj_end,nbniv)
255 include
'dimensions.h'
256 INTEGER,
INTENT(IN) :: jjb
257 INTEGER,
INTENT(IN) :: jje
258 INTEGER,
INTENT(IN) :: jj_begin
259 INTEGER,
INTENT(IN) :: jj_end
260 INTEGER,
INTENT(IN) :: nbniv
261 REAL,
INTENT(INOUT) :: vect_inout(
iim+1,jjb:jje,nbniv)
263 REAL :: vect(
iim+inc,jj_end-jj_begin+1,nbniv)
264 COMPLEX :: TF_vect(
iim/2+1,jj_end-jj_begin+1,nbniv)
273 DO j=1,jj_end-jj_begin+1
275 vect(i,j,ll_nb)=vect_inout(i,j+jj_begin-1,l)
281 nb_vect=(jj_end-jj_begin+1)*ll_nb
283 CALL fft_forward(vect,tf_vect,nb_vect)
286 DO j=1,jj_end-jj_begin+1
288 tf_vect(i,j,l)=tf_vect(i,j,l)*
filtre_inv(i,jj_begin+j-1)
293 CALL fft_backward(tf_vect,vect,nb_vect)
299 DO j=1,jj_end-jj_begin+1
301 vect_inout(i,j+jj_begin-1,l)=vect(i,j,ll_nb)
subroutine filtre_u_fft(vect_inout, jjb, jje, jj_begin, jj_end, nbniv)
logical, save use_filtre_fft
subroutine init_filtre_fft(coeffu, modfrstu, jfiltnu, jfiltsu, coeffv, modfrstv, jfiltnv, jfiltsv)
subroutine filtre_inv_fft(vect_inout, jjb, jje, jj_begin, jj_end, nbniv)
c c zjulian c cym CALL iim cym klev iim
real, dimension(:,:), allocatable, save filtre_u
real, dimension(:,:), allocatable, save filtre_inv
real, dimension(:,:), allocatable, save filtre_v
subroutine filtre_v_fft(vect_inout, jjb, jje, jj_begin, jj_end, nbniv)