37 SUBROUTINE gft_do_cc_1d(FFT, isign, scale, c_in, c_out, code)
42 TYPE(
gft_cc),
INTENT(inout) :: FFT
43 INTEGER,
INTENT(in) :: isign
44 REAL(kind=
gft_prec),
INTENT(in) :: scale
45 COMPLEX(kind=GFT_prec),
INTENT(in),
DIMENSION(0:) :: c_in
48 COMPLEX(kind=GFT_prec),
INTENT(out),
DIMENSION(0:) :: c_out
49 INTEGER,
OPTIONAL,
INTENT(out) :: code
52 REAL(kind=
gft_prec),
DIMENSION(0:2*SIZE(c_in)-1) :: x
53 REAL(kind=
gft_prec),
DIMENSION(0:2*SIZE(c_out)-1) :: y
54 INTEGER :: i, ioff, nfact
55 INTEGER,
DIMENSION(0:99) :: fact
56 CHARACTER(len=*),
PARAMETER :: spname=
"GFT_do_cc_1d"
61 IF (.NOT.fft%Init)
CALL gft_error(spname//
": Error: GFT_init routine has not been called prior to this routine")
62 IF (
SIZE(c_in) < fft%Nx)
CALL gft_error(spname//
": Error: Size(C_IN) < Nx")
63 IF (
SIZE(c_out) < fft%Nx)
CALL gft_error(spname//
": Error: Size(C_OUT) < Nx")
64 IF (isign /=-1 .AND. isign /= 1)
CALL gft_error(spname//
": Error: sign has invalid value")
74 x(2*i+1) = aimag(c_in(i))
76 nfact = nint(fft%Table(0))
77 fact(0:nfact-1) = nint(fft%Table(0:nfact-1))
82 fft%Work(i) = scale* x(2*i)
83 fft%Work(fft%Nx+i) = isign*scale* x(2*i+1)
88 CALL jmccm1d(1,fft%Nx,fact,100,0,fft%Table,fft%TableSize,100+0,fft%Work,fft%WorkSize,ioff)
92 y(2*i) = fft%Work(ioff +i)
93 y(2*i+1) = isign * fft%Work(ioff+fft%Nx+i)
100 c_out(i) = cmplx(y(2*i),y(2*i+1),kind=
gft_prec)
103 IF(
PRESENT(code) ) code=0
106SUBROUTINE gft_do_cc_2d(FFT, isign, scale, c_in, c_out, code)
110 TYPE(
gft_cc),
INTENT(inout) :: FFT
111 INTEGER,
INTENT(in) :: isign
112 REAL(kind=
gft_prec),
INTENT(in) :: scale
113 COMPLEX(kind=GFT_prec),
INTENT(in),
DIMENSION(0:,0:) :: c_in
116 COMPLEX(kind=GFT_prec),
INTENT(out),
DIMENSION(0:,0:) :: c_out
117 INTEGER,
OPTIONAL,
INTENT(out) :: code
120 REAL(kind=
gft_prec),
DIMENSION(0:2*SIZE(c_in)-1) :: x
121 REAL(kind=
gft_prec),
DIMENSION(0:2*SIZE(c_out)-1) :: y
122 INTEGER :: i, j, ioff
123 INTEGER :: nfact, mfact
124 INTEGER,
DIMENSION(0:99) :: fact
125 INTEGER :: ideb, ifin, jdeb, jfin, n_temp, m_temp, nwork_temp
126 LOGICAL :: debut, fin
127 CHARACTER(len=*),
PARAMETER :: spname=
"GFT_do_cc_2d"
131 IF (.NOT.fft%Init)
CALL gft_error(spname//
": Error: GFT_init must be called prior to this routine")
132 fft%Ldx1 =
SIZE(c_in ,dim=1)
133 fft%Ldy1 =
SIZE(c_out,dim=1)
134 IF (
SIZE(c_in) < fft%Nx*fft%Ny )
CALL gft_error(spname//
": Error: Size(C_IN) < Nx*Ny")
135 IF (
SIZE(c_out) < fft%Nx*fft%Ny )
CALL gft_error(spname//
": Error: Size(C_OUT) < Nx*Ny")
136 IF ( fft%Ldx1 < fft%Nx )
CALL gft_error(spname//
": Error: Size(C_IN,dim=1) < Nx")
137 IF ( fft%Ldy1 < fft%Nx )
CALL gft_error(spname//
": Error: Size(C_OUT,dim=1) < Nx")
138 IF (isign /=-1 .AND. isign /= 1)
CALL gft_error(spname//
": Error: isign value is invalid")
148 x(2*i +j*2*fft%Ldx1) = real(c_in(i,j),kind=
gft_prec)
149 x(2*i+1+j*2*fft%Ldx1) = aimag(c_in(i,j))
153 nfact = nint(fft%Table(0))
154 mfact = nint(fft%Table(nfact)) + nfact
155 fact(0:mfact-1) = nint(fft%Table(0:mfact-1))
163 CALL jmdecoup(fft%Ny,4*fft%Nx,fft%WorkSize,debut,.true.,m_temp,jdeb,jfin,nwork_temp,fin)
173 fft%Work(j-jdeb+m_temp*i) = scale*x(2*i +j*2*fft%Ldx1)
174 fft%Work(j-jdeb+m_temp*(fft%Nx+i)) = isign*scale*x(2*i+1+j*2*fft%Ldx1)
180 CALL jmccm1d(m_temp,fft%Nx,fact,100,0 ,fft%Table,fft%TableSize,100+0 ,fft%Work,nwork_temp,ioff)
188 y(2*i +j*2*fft%Ldy1) = fft%Work(ioff+j-jdeb+m_temp*i)
189 y(2*i+1+j*2*fft%Ldy1) = fft%Work(ioff+j-jdeb+m_temp*(fft%Nx+i))
208 CALL jmdecoup(fft%Nx,4*fft%Ny,fft%WorkSize,debut,.true.,n_temp,ideb,ifin,nwork_temp,fin)
216 fft%Work(i-ideb+n_temp*j) = y(2*i +j*2*fft%Ldy1)
217 fft%Work(i-ideb+n_temp*(fft%Ny+j)) = y(2*i+1+j*2*fft%Ldy1)
222 CALL jmccm1d(n_temp,fft%Ny,fact,100,nfact,fft%Table,fft%TableSize,100+2*fft%Nx,fft%Work,nwork_temp,ioff)
230 y(2*i +j*2*fft%Ldy1) = fft%Work(ioff+i-ideb+n_temp*j)
231 y(2*i+1+j*2*fft%Ldy1) = isign*fft%Work(ioff+i-ideb+n_temp*(fft%Ny+j))
250 c_out(i,j) = cmplx(y(2*i+j*2*fft%Ldy1), y(2*i+1+j*2*fft%Ldy1),kind=
gft_prec)
254 IF(
PRESENT(code) ) code=0
257SUBROUTINE gft_do_cc_3d(FFT, isign, scale, c_in, c_out, code)
261 TYPE(
gft_cc),
INTENT(inout) :: FFT
262 INTEGER,
INTENT(in) :: isign
263 REAL(kind=
gft_prec),
INTENT(in) :: scale
264 COMPLEX(kind=GFT_prec),
INTENT(in),
DIMENSION(0:,0:,0:) :: c_in
267 COMPLEX(kind=GFT_prec),
INTENT(out),
DIMENSION(0:,0:,0:) :: c_out
268 INTEGER,
OPTIONAL,
INTENT(out) :: code
271 INTEGER :: i, j, k, ioff
272 INTEGER :: nfact, mfact, lfact
273 INTEGER,
DIMENSION(0:99) :: fact
274 INTEGER :: ideb, ifin, i1, i2, jdeb, jfin, j1, j2, kdeb, kfin
275 INTEGER :: nwork_temp, nmtemp, mltemp, nltemp, iwork
276 LOGICAL :: debut, fini
277 CHARACTER(len=*),
PARAMETER :: spname=
"GFT_do_cc_3d"
278 REAL(kind=8), dimension(0:2*
SIZE(c_in)-1) :: x
279 REAL(kind=8), dimension(0:2*
SIZE(c_out)-1) :: y
284 IF (.NOT.fft%Init)
CALL gft_error(spname//
": Error: GFT_init must be called prior to this routine")
285 fft%Ldx1 =
SIZE(c_in,dim=1)
286 fft%Ldx2 =
SIZE(c_in,dim=2)
287 fft%Ldy1 =
SIZE(c_out,dim=1)
288 fft%Ldy2 =
SIZE(c_out,dim=2)
289 IF (
SIZE(c_in) < fft%Nx*fft%Ny*fft%Nz)
CALL gft_error(spname//
": Error: Size(C_IN) < Nx*Ny*Nz")
290 IF (
SIZE(c_out) < fft%Nx*fft%Ny*fft%Nz)
CALL gft_error(spname//
": Error: Size(C_OUT) < Nx*Ny*Nz")
291 IF ( fft%Ldx1 < fft%Nx )
CALL gft_error(spname//
": Error: size(C_IN,dim=1) < Nx")
292 IF ( fft%Ldx2 < fft%Ny )
CALL gft_error(spname//
": Error: size(C_IN,dim=2) < Ny")
293 IF ( fft%Ldy1 < fft%Nx )
CALL gft_error(spname//
": Error: size(C_OUT,dim=1) < Nx")
294 IF ( fft%Ldy2 < fft%Ny )
CALL gft_error(spname//
": Error: size(C_OUT,dim=2) < Ny")
295 IF (isign /=-1 .AND. isign /= 1)
CALL gft_error(spname//
": Error: sign has an invalid value")
307 x(2*i +2*fft%Ldx1*j+2*fft%Ldx1*fft%Ldx2*k) = real(c_in(i,j,k),kind=
gft_prec)
308 x(2*i+1+2*fft%Ldx1*j+2*fft%Ldx1*fft%Ldx2*k) = aimag(c_in(i,j,k))
313 nfact = nint(fft%Table(0))
314 mfact = nint(fft%Table(nfact)) + nfact
315 lfact = nint(fft%Table(mfact)) + mfact
316 fact(0:lfact-1) = nint(fft%Table(0:lfact-1))
326 CALL jmdecoup3(fft%Nx,fft%Ny,4*fft%Nz,fft%WorkSize,debut,.true.,ideb,ifin,jdeb,jfin,nmtemp,nwork_temp,fini)
337 IF (j == jdeb) i1 = ideb
338 IF (j == jfin) i2 = ifin
343 fft%Work( iwork+k*nmtemp) = scale*x(2*i +2*fft%Ldx1*j+2*fft%Ldx1*fft%Ldx2*k)
344 fft%Work(nwork_temp/4+iwork+k*nmtemp) = isign*scale*x(2*i+1+2*fft%Ldx1*j+2*fft%Ldx1*fft%Ldx2*k)
352 CALL jmccm1d(nmtemp,fft%Nz,fact,100,mfact,fft%Table,fft%TableSize,100+2*(fft%Nx+fft%Ny),fft%Work,nwork_temp,ioff)
360 IF (j == jdeb) i1 = ideb
361 IF (j == jfin) i2 = ifin
366 y(2*i +2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k) = fft%Work(ioff +iwork+k*nmtemp)
367 y(2*i+1+2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k) = fft%Work(ioff+nwork_temp/4+iwork+k*nmtemp)
382 CALL jmdecoup3(fft%Nx,fft%Nz,4*fft%Ny,fft%WorkSize,debut,.true.,ideb,ifin,kdeb,kfin,nltemp,nwork_temp,fini)
392 IF (k == kdeb) i1 = ideb
393 IF (k == kfin) i2 = ifin
398 fft%Work( iwork+j*nltemp) = y(2*i +2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k)
399 fft%Work(nwork_temp/4+iwork+j*nltemp) = y(2*i+1+2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k)
407 CALL jmccm1d(nltemp,fft%Ny,fact,100,nfact,fft%table,fft%TableSize,100+2*fft%Nx ,fft%Work,nwork_temp,ioff)
415 IF (k == kdeb) i1 = ideb
416 IF (k == kfin) i2 = ifin
421 y(2*i +2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k) = fft%Work(ioff +iwork+j*nltemp)
422 y(2*i+1+2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k) = fft%Work(ioff+nwork_temp/4+iwork+j*nltemp)
437 CALL jmdecoup3(fft%Ny,fft%Nz,4*fft%Nx,fft%WorkSize,debut,.true.,jdeb,jfin,kdeb,kfin,mltemp,nwork_temp,fini)
447 IF (k == kdeb) j1 = jdeb
448 IF (k == kfin) j2 = jfin
453 fft%Work( iwork+i*mltemp) = y(2*i +2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k)
454 fft%Work(nwork_temp/4+iwork+i*mltemp) = y(2*i+1+2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k)
462 CALL jmccm1d(mltemp,fft%Nx,fact,100,0 ,fft%Table,fft%TableSize,100+0 ,fft%Work,nwork_temp,ioff)
470 IF (k == kdeb) j1 = jdeb
471 IF (k == kfin) j2 = jfin
476 y(2*i +2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k) = fft%Work(ioff +iwork+i*mltemp)
477 y(2*i+1+2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k) = isign*fft%Work(ioff+nwork_temp/4+iwork+i*mltemp)
492 c_out(i,j,k) = cmplx(y(2*i+2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k),y(2*i+1+2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k),kind=
gft_prec)
497 IF(
PRESENT(code) ) code = 0
500SUBROUTINE gft_do_cr_1d(FFT, isign, scale, c_in, r_out, code)
504 TYPE(
gft_rcr),
INTENT(inout) :: fft
505 INTEGER,
INTENT(in) :: isign
506 REAL(kind=
gft_prec),
INTENT(in) :: scale
507 COMPLEX(kind=GFT_prec),
INTENT(in),
DIMENSION(0:) :: c_in
510 REAL(kind=
gft_prec),
INTENT(out),
DIMENSION(0:) :: r_out
511 INTEGER,
OPTIONAL,
INTENT(out) :: code
514 REAL(kind=
gft_prec),
DIMENSION(0:2*(SIZE(r_out)/2)+1) :: x
516 INTEGER,
DIMENSION(0:99) :: fact
517 INTEGER :: dimx, debx, incx, jumpx
518 INTEGER :: dimy, deby, incy, jumpy
519 CHARACTER(len=*),
PARAMETER :: spname =
"GFT_do_cr_1d"
523 IF (.NOT.fft%Init)
CALL gft_error(spname//
": Error: GFT_init must be called prior to this routine")
524 fft%Ldx1 =
SIZE(c_in)
525 fft%Ldy1 =
SIZE(r_out)
526 IF ( fft%Ldx1 < fft%Nx/2+1)
CALL gft_error(spname//
": Error: Size(C_IN) < Nx/2+1")
527 IF ( fft%Ldy1 < fft%Nx)
CALL gft_error(spname//
": Error: Size(R_OUT) < Nx")
528 IF (isign /=-1 .AND. isign /= 1)
CALL gft_error(spname//
": Error: sign has an invalid value")
534 x(2*i) = real(c_in(i),kind=
gft_prec)
535 x(2*i+1) = aimag(c_in(i))
537 nfact = nint(fft%Table(0))
538 fact(0:nfact-1) = nint(fft%Table(0:nfact-1))
541 dimx = 2*(fft%Nx/2)+2 ; debx = 0 ; incx = 1 ; jumpx = 0
542 dimy = fft%Nx ; deby = 0 ; incy = 1 ; jumpy = 0
543 CALL jmcsm1dxy(1,fft%Nx,fact,100,0,fft%Table,fft%TableSize,100+0, &
544 fft%Work,fft%WorkSize,x,dimx,debx,incx,jumpy,r_out,dimy, &
545 deby,incy,jumpy,isign,scale)
547 IF(
PRESENT(code) ) code = 0
550SUBROUTINE gft_do_cr_2d(FFT, isign, scale, c_in, r_out, code)
554 TYPE(
gft_rcr),
INTENT(inout) :: FFT
555 INTEGER,
INTENT(in) :: isign
556 REAL(kind=
gft_prec),
INTENT(in) :: scale
557 COMPLEX(kind=GFT_prec),
INTENT(in),
DIMENSION(0:,0:) :: c_in
560 REAL(kind=
gft_prec),
INTENT(out),
DIMENSION(0:,0:) :: r_out
561 INTEGER,
OPTIONAL,
INTENT(out) :: code
564 REAL(kind=
gft_prec),
DIMENSION(0:2*SIZE(c_in)-1) :: x
565 REAL(kind=
gft_prec),
DIMENSION(0:SIZE(r_out)-1) :: y
566 INTEGER :: i, j, ioff, nfact, mfact
567 INTEGER,
DIMENSION(0:99) :: fact
568 INTEGER :: ideb, ifin, jdeb, jfin
569 INTEGER :: n_temp, m_temp, nwork_temp
570 LOGICAL :: debut, fin
571 INTEGER :: dimy, deby, incy, jumpy
574 CHARACTER(len=*),
PARAMETER :: spname =
"GFT_do_cr_2d"
578 IF (.NOT.fft%Init)
CALL gft_error(spname//
": Error: GFT_init must be called prior to this routine")
579 fft%Ldx1 =
SIZE(c_in ,dim=1)
580 fft%Ldy1 =
SIZE(r_out,dim=1)
581 IF ( fft%Ldx1 < fft%Nx/2+1 )
CALL gft_error(spname//
": Error: Size(C_IN,dim=1) < Nx/2+1")
582 IF ( fft%Ldy1 < fft%Nx+2 )
CALL gft_error(spname//
": Error: Size(R_OUT,dim=1) < Nx+2")
583 IF (
SIZE(r_out) < (fft%Nx+2)*fft%Ny )
CALL gft_error(spname//
": Error: Size(R_OUT) < (Nx+2)*Ny")
584 IF (
SIZE(c_in) < (fft%Nx/2+1)*fft%Ny )
CALL gft_error(spname//
": Error: Size(C_IN) < (Nx/2+1)*Ny")
585 IF (isign /=-1 .AND. isign /= 1)
CALL gft_error(spname//
": Error: isign has an invalid value")
595 x(2*i +2*fft%Ldx1*j) = real(c_in(i,j),kind=
gft_prec)
596 x(2*i+1+2*fft%Ldx1*j) = aimag(c_in(i,j))
600 nfact = nint(fft%Table(0))
601 mfact = nint(fft%Table(nfact)) + nfact
602 fact(0:mfact-1) = nint(fft%Table(0:mfact-1))
609 CALL jmdecoup(fft%Nx/2+1,4*fft%Ny,fft%WorkSize,debut,fft%even_y,n_temp,ideb,ifin,nwork_temp,fin)
619 fft%Work( n_temp*j+i-ideb) = scale*x(2*i +2*fft%Ldx1*j)
620 fft%Work(nwork_temp/4+n_temp*j+i-ideb) = isign*scale*x(2*i+1+2*fft%Ldx1*j)
626 CALL jmccm1d(n_temp,fft%Ny,fact,100,nfact,fft%Table,fft%TableSize,100+2*fft%Nx,fft%Work,nwork_temp,ioff)
634 y(2*i +fft%Ldy1*j) = fft%Work(ioff+ n_temp*j+i-ideb)
635 y(2*i+1+fft%Ldy1*j) = fft%Work(ioff+nwork_temp/4+n_temp*j+i-ideb)
654 CALL jmdecoup(fft%Ny,2*fft%Nx,fft%WorkSize,debut,fft%even_x,m_temp,jdeb,jfin,nwork_temp,fin)
657 dimy = fft%Ldy1*fft%Ny ; deby = jdeb*fft%Ldy1 ; incy = 1 ; jumpy = fft%Ldy1
660 CALL jmcsm1dxy(m_temp,fft%Nx,fact,100,0,fft%Table,fft%TableSize,100+0, &
661 fft%Work,nwork_temp, y,dimy,deby,incy,jumpy,y,dimy,deby, &
662 incy,jumpy,signe,scale_temp)
679 r_out(i,j) = y(i+fft%Ldy1*j)
683 IF(
PRESENT(code) ) code = 0
686SUBROUTINE gft_do_cr_3d(FFT, isign, scale, c_in, r_out, code)
690 TYPE(
gft_rcr),
INTENT(inout) :: FFT
691 INTEGER,
INTENT(in) :: isign
692 REAL(kind=
gft_prec),
INTENT(in) :: scale
693 COMPLEX(kind=GFT_prec),
INTENT(in),
DIMENSION(0:,0:,0:) :: c_in
696 REAL(kind=
gft_prec),
INTENT(out),
DIMENSION(0:,0:,0:) :: r_out
697 INTEGER,
OPTIONAL,
INTENT(out) :: code
700 REAL(kind=
gft_prec),
DIMENSION(0:2*SIZE(c_in)-1) :: x
701 REAL(kind=
gft_prec),
DIMENSION(0:SIZE(r_out)-1) :: y
702 INTEGER :: i, j, k, ioff
703 INTEGER :: nfact, mfact, lfact
704 INTEGER,
DIMENSION(0:99) :: fact
705 INTEGER :: ideb, ifin, jdeb, jfin, kdeb, kfin, i1, i2, j1, j2
706 INTEGER :: nltemp, nmtemp, mltemp, nwork_temp, iwork
707 LOGICAL :: debut, fini
708 CHARACTER(len=*),
PARAMETER :: spname =
"GFT_do_cr_3d"
713 IF (.NOT.fft%Init)
CALL gft_error(spname//
": Error: GFT_init must be called prior to this routine")
714 fft%Ldx1 =
SIZE(c_in ,dim=1)
715 fft%Ldx2 =
SIZE(c_in ,dim=2)
716 fft%Ldy1 =
SIZE(r_out,dim=1)
717 fft%Ldy2 =
SIZE(r_out,dim=2)
718 IF (fft%Ldx1 < fft%Nx/2+1)
CALL gft_error(spname//
": Error: Size(C_IN,dim=1) < Nx/2+1")
719 IF (fft%Ldy1 < fft%Nx+2 )
CALL gft_error(spname//
": Error: Size(R_OUT,dim=1) < Nx+2")
720 IF (fft%Ldx2 < fft%Ny )
CALL gft_error(spname//
": Error: Size(C_IN,dim=2) < Ny")
721 IF (fft%Ldy2 < fft%Ny )
CALL gft_error(spname//
": Error: Size(R_OUT,dim=2) < Ny")
722 IF (
SIZE(r_out) < (fft%Nx+2)*fft%Ny*fft%Nz ) &
723 CALL gft_error(spname//
": Error: Size(R_OUT) < (Nx+2)*Ny*Nz")
724 IF (
SIZE(c_in) < (fft%Nx/2+1)*fft%Ny*fft%Nz ) &
725 CALL gft_error(spname//
": Error: Size(C_IN) < (Nx/2+1)*Ny*Nz")
726 IF (isign /=-1 .AND. isign /= 1) &
727 CALL gft_error(spname//
": Error: isign has an invalid value")
738 x(2*i +2*fft%Ldx1*j+2*fft%Ldx1*fft%Ldx2*k) = real(c_in(i,j,k),kind=
gft_prec)
739 x(2*i+1+2*fft%Ldx1*j+2*fft%Ldx1*fft%Ldx2*k) = aimag(c_in(i,j,k))
744 nfact = nint(fft%Table(0))
745 mfact = nint(fft%Table(nfact)) + nfact
746 lfact = nint(fft%Table(mfact)) + mfact
747 fact(0:lfact-1) = nint(fft%Table(0:lfact-1))
757 CALL jmdecoup3(fft%Nx/2+1,fft%Ny,4*fft%Nz,fft%WorkSize,debut,.true.,ideb,ifin,jdeb,jfin,nmtemp,nwork_temp,fini)
768 IF (j == jdeb) i1 = ideb
769 IF (j == jfin) i2 = ifin
774 fft%Work( iwork+k*nmtemp) = &
775 & scale*x(2*i +2*fft%Ldx1*j+2*fft%Ldx1*fft%Ldx2*k)
776 fft%Work(nwork_temp/4+iwork+k*nmtemp) = &
777 & isign*scale*x(2*i+1+2*fft%Ldx1*j+2*fft%Ldx1*fft%Ldx2*k)
785 CALL jmccm1d(nmtemp,fft%Nz,fact,100,mfact,fft%Table,fft%TableSize,100+2*(fft%Nx+fft%Ny),fft%Work,nwork_temp,ioff)
793 IF (j == jdeb) i1 = ideb
794 IF (j == jfin) i2 = ifin
799 y(2*i +fft%Ldy1*j+fft%Ldy1*fft%Ldy2*k) = fft%Work(ioff+ iwork+k*nmtemp)
800 y(2*i+1+fft%Ldy1*j+fft%Ldy1*fft%Ldy2*k) = fft%Work(ioff+nwork_temp/4+iwork+k*nmtemp)
815 CALL jmdecoup3(fft%Nx/2+1,fft%Nz,4*fft%Ny,fft%WorkSize,debut,.true.,ideb,ifin,kdeb,kfin,nltemp,nwork_temp,fini)
825 IF (k == kdeb) i1 = ideb
826 IF (k == kfin) i2 = ifin
831 fft%Work( iwork+j*nltemp) = &
832 & y(2*i +fft%Ldy1*j+fft%Ldy1*fft%Ldy2*k)
833 fft%Work(nwork_temp/4+iwork+j*nltemp) = &
834 & y(2*i+1+fft%Ldy1*j+fft%Ldy1*fft%Ldy2*k)
842 CALL jmccm1d(nltemp,fft%Ny,fact,100,nfact,fft%Table,fft%TableSize,100+2*fft%Nx ,fft%Work,nwork_temp,ioff)
850 IF (k == kdeb) i1 = ideb
851 IF (k == kfin) i2 = ifin
856 y(2*i +fft%Ldy1*j+fft%Ldy1*fft%Ldy2*k) = fft%Work(ioff +iwork+j*nltemp)
857 y(2*i+1+fft%Ldy1*j+fft%Ldy1*fft%Ldy2*k) = fft%Work(ioff+nwork_temp/4+iwork+j*nltemp)
872 CALL jmdecoup3(fft%Ny,fft%Nz,4*(fft%Nx/2+1),fft%WorkSize,debut,fft%even_x,jdeb,jfin,kdeb,kfin,mltemp,nwork_temp,fini)
882 IF (k == kdeb) j1 = jdeb
883 IF (k == kfin) j2 = jfin
888 fft%Work( iwork+i*mltemp) = y(2*i +fft%Ldy1*j+fft%Ldy1*fft%Ldy2*k)
889 fft%Work(nwork_temp/4+iwork+i*mltemp) = y(2*i+1+fft%Ldy1*j+fft%Ldy1*fft%Ldy2*k)
897 CALL jmcsm1d(mltemp,fft%Nx,fact,100,0 ,fft%Table,fft%TableSize,100+0 ,fft%Work,nwork_temp,ioff)
905 IF (k == kdeb) j1 = jdeb
906 IF (k == kfin) j2 = jfin
911 y(i+fft%Ldy1*j+fft%Ldy1*fft%Ldy2*k) = fft%Work(ioff+iwork+i*mltemp)
925 r_out(i,j,k) = y(i+fft%Ldy1*j+fft%Ldy1*fft%Ldy2*k)
929 IF(
PRESENT(code) ) code = 0
932SUBROUTINE gft_do_rc_1d(FFT, isign, scale, r_in, c_out, code)
936 TYPE(
gft_rcr),
INTENT(inout) :: FFT
937 INTEGER,
INTENT(in) :: isign
938 REAL(kind=
gft_prec),
INTENT(in) :: scale
939 REAL(kind=
gft_prec),
INTENT(in),
DIMENSION(0:) :: r_in
942 COMPLEX(kind=GFT_prec),
INTENT(out),
DIMENSION(0:) :: c_out
943 INTEGER,
OPTIONAL,
INTENT(out) :: code
946 REAL(kind=
gft_prec),
DIMENSION(0:2*(SIZE(r_in)/2)+1) :: y
948 INTEGER,
DIMENSION(0:99) :: fact
949 INTEGER :: dimx, debx, incx, jumpx
950 INTEGER :: dimy, deby, incy, jumpy
951 CHARACTER(len=*),
PARAMETER :: spname =
"GFT_do_rc_1d"
955 IF (.NOT.fft%Init)
CALL gft_error(spname//
": Error: GFT_init must be called prior to this routine")
956 fft%Ldx1 =
SIZE(r_in)
957 fft%Ldy1 =
SIZE(c_out)
958 IF ( fft%Ldx1 < fft%Nx)
CALL gft_error(spname//
": Error: Size(R_IN) < Nx")
959 IF ( fft%Ldy1 < fft%Nx/2+1)
CALL gft_error(spname//
": Error: Size(C_OUT) < Nx/2+1")
960 IF (isign /=-1 .AND. isign /= 1)
CALL gft_error(spname//
": Error: sign has invalid value")
965 nfact = nint(fft%Table(0))
966 fact(0:nfact-1) = nint(fft%Table(0:nfact-1))
969 dimx = fft%Nx ; debx = 0 ; incx = 1 ; jumpx = 0
970 dimy = 2*(fft%Nx/2)+2 ; deby = 0 ; incy = 1 ; jumpy = 0
971 CALL jmscm1dxy(1,fft%Nx,fact,100,0,fft%Table,fft%TableSize,100+0, &
972 fft%Work,fft%WorkSize,r_in,dimx,debx,incx,jumpx,y, &
973 dimy,deby,incy,jumpy,isign,scale)
978 c_out(i) = cmplx(y(2*i), y(2*i+1),kind=
gft_prec)
981 IF(
PRESENT(code) ) code = 0
984SUBROUTINE gft_do_rc_2d(FFT, isign, scale, r_in, c_out, code)
988 TYPE(
gft_rcr),
INTENT(inout) :: FFT
989 INTEGER,
INTENT(in) :: isign
990 REAL(kind=
gft_prec),
INTENT(in) :: scale
991 REAL(kind=
gft_prec),
INTENT(in),
DIMENSION(0:,0:) :: r_in
994 COMPLEX(kind=GFT_prec),
INTENT(out),
DIMENSION(0:,0:) :: c_out
995 INTEGER,
OPTIONAL,
INTENT(out) :: code
998 REAL(kind=
gft_prec),
DIMENSION(0:SIZE(r_in)-1) :: x
999 REAL(kind=
gft_prec),
DIMENSION(0:2*SIZE(c_out)-1) :: y
1000 INTEGER :: i, j, ioff, nfact, mfact
1001 INTEGER,
DIMENSION(0:99) :: fact
1002 INTEGER :: ideb, ifin, jdeb, jfin, n_temp, m_temp, nwork_temp
1003 LOGICAL :: debut, fin
1004 INTEGER :: dimx, debx, incx, jumpx
1005 INTEGER :: dimy, deby, incy, jumpy
1007 CHARACTER(len=*),
PARAMETER :: spname =
"GFT_do_rc_2d"
1014 IF (.NOT.fft%Init)
CALL gft_error(spname//
": Error: GFT_init must be called prior to this routine")
1015 fft%Ldx1 =
SIZE(r_in ,dim=1)
1016 fft%Ldy1 =
SIZE(c_out,dim=1)
1017 IF (fft%Ldx1 < fft%Nx )
CALL gft_error(spname//
": Error: Size(R_IN,dim=1) < Nx")
1018 IF (fft%Ldy1 < fft%Nx/2+1)
CALL gft_error(spname//
": Error: Size(C_OUT,dim=1) < Nx/2+1")
1019 IF (
SIZE(r_in) < fft%Nx*fft%Ny)
CALL gft_error(spname//
": Error: Size(R_IN) < Nx*Ny")
1020 IF (
SIZE(c_out) < (fft%Nx/2+1)*fft%Ny)
CALL gft_error(spname//
": Error: Size(C_OUT) < (Nx/2+1)*Ny")
1022 nfact = nint(fft%Table(0))
1023 mfact = nint(fft%Table(nfact)) + nfact
1024 fact(0:mfact-1) = nint(fft%Table(0:mfact-1))
1031 x(i+fft%Ldx1*j) = r_in(i,j)
1040 CALL jmdecoup(fft%Ny,2*fft%Nx,fft%WorkSize,debut,fft%even_x,m_temp,jdeb,jfin,nwork_temp,fin)
1044 dimx = fft%Ldx1*fft%Ny ; debx = jdeb*fft%Ldx1 ; incx = 1 ; jumpx = fft%Ldx1
1045 dimy = 2*fft%Ldy1*fft%Ny ; deby = jdeb*2*fft%Ldy1 ; incy = 1 ; jumpy = 2*fft%Ldy1
1047 CALL jmscm1dxy(m_temp,fft%Nx,fact,100,0,fft%Table,fft%TableSize,100+0, &
1048 fft%Work,nwork_temp, x,dimx,debx,incx,jumpx,y,dimy,deby,incy,jumpy, &
1066 CALL jmdecoup(fft%Nx/2+1,4*fft%Ny,fft%WorkSize,debut,fft%even_y,n_temp,ideb,ifin,nwork_temp,fin)
1074 fft%Work( n_temp*j+i-ideb) = y(2*i +2*fft%Ldy1*j)
1075 fft%Work(nwork_temp/4+n_temp*j+i-ideb) = y(2*i+1+2*fft%Ldy1*j)
1082 CALL jmccm1d(n_temp,fft%Ny,fact,100,nfact,fft%Table,fft%TableSize,100+2*fft%Nx,fft%Work,nwork_temp,ioff)
1090 y(2*i +2*fft%Ldy1*j) = fft%Work(ioff +n_temp*j+i-ideb)
1091 y(2*i+1+2*fft%Ldy1*j) = isign*fft%Work(ioff+nwork_temp/4+n_temp*j+i-ideb)
1110 c_out(i,j) = cmplx(y(2*i+2*fft%Ldy1*j), y(2*i+1+2*fft%Ldy1*j),kind=
gft_prec)
1114 IF(
PRESENT(code) ) code = 0
1117SUBROUTINE gft_do_rc_3d(FFT, isign, scale, r_in, c_out, code)
1121 TYPE(
gft_rcr),
INTENT(inout) :: FFT
1122 INTEGER,
INTENT(in) :: isign
1123 REAL(kind=
gft_prec),
INTENT(in) :: scale
1124 REAL(kind=
gft_prec),
INTENT(in),
DIMENSION(0:,0:,0:) :: r_in
1127 COMPLEX(kind=GFT_prec),
INTENT(out),
DIMENSION(0:,0:,0:) :: c_out
1128 INTEGER,
OPTIONAL,
INTENT(out) :: code
1131 REAL(kind=
gft_prec),
DIMENSION(0:SIZE(r_in)-1) :: x
1132 REAL(kind=
gft_prec),
DIMENSION(0:2*SIZE(c_out)-1) :: y
1133 INTEGER :: i, j, k, ioff, nfact, mfact, lfact
1134 INTEGER,
DIMENSION(0:99) :: fact
1135 INTEGER :: ideb, ifin, jdeb, jfin, kdeb, kfin, i1, i2, j1, j2
1136 INTEGER :: nltemp, nmtemp, mltemp, nwork_temp, iwork
1137 LOGICAL :: debut, fini
1138 CHARACTER(len=*),
PARAMETER :: spname =
"GFT_do_rc_3d"
1142 IF (.NOT.fft%Init) &
1143 CALL gft_error(spname//
": Error: GFT_init must be called prior to this routine")
1144 fft%Ldx1 =
SIZE(r_in ,dim=1)
1145 fft%Ldx2 =
SIZE(r_in ,dim=2)
1146 fft%Ldy1 =
SIZE(c_out,dim=1)
1147 fft%Ldy2 =
SIZE(c_out,dim=2)
1148 IF (fft%Ldx1 < fft%Nx )
CALL gft_error(spname//
": Error: Size(R_IN,dim=1) < Nx")
1149 IF (fft%Ldx2 < fft%Ny )
CALL gft_error(spname//
": Error: Size(R_IN,dim=2) < Ny")
1150 IF (fft%Ldy1 < fft%Nx/2+1)
CALL gft_error(spname//
": Error: Size(C_OUT,dim=1) < Nx/2+1")
1151 IF (fft%Ldy2 < fft%Ny)
CALL gft_error(spname//
": Error: Size(C_OUT,dim=2) < Ny")
1152 IF (
SIZE(r_in) < fft%Nx*fft%Ny*fft%Nz ) &
1153 CALL gft_error(spname//
": Error: Size(R_IN) < Nx*Ny*Nz")
1154 IF (
SIZE(c_out) < (fft%Nx/2+1)*fft%Ny*fft%Nz ) &
1155 CALL gft_error(spname//
": Error: Size(C_OUT) < (Nx/2+1)*Ny*Nz")
1156 IF (isign /=-1 .AND. isign /= 1) &
1157 CALL gft_error(spname//
": Error: isign has an invalid value")
1168 x(i+fft%Ldx1*j+fft%Ldx1*fft%Ldx2*k) = r_in(i,j,k)
1173 nfact = nint(fft%Table(0))
1174 mfact = nint(fft%Table(nfact)) + nfact
1175 lfact = nint(fft%Table(mfact)) + mfact
1176 fact(0:lfact-1) = nint(fft%Table(0:lfact-1))
1182 DO WHILE (.NOT.fini)
1185 CALL jmdecoup3(fft%Ny,fft%Nz,4*(fft%Nx/2+1),fft%WorkSize,debut,fft%even_x,jdeb,jfin,kdeb,kfin,mltemp,nwork_temp,fini)
1195 IF (k == kdeb) j1 = jdeb
1196 IF (k == kfin) j2 = jfin
1201 fft%Work(iwork+i*mltemp) = scale*x(i+fft%Ldx1*j+fft%Ldx1*fft%Ldx2*k)
1209 CALL jmscm1d(mltemp,fft%Nx,fact,100,0 ,fft%Table,fft%TableSize,100+0 ,fft%Work,nwork_temp,ioff)
1217 IF (k == kdeb) j1 = jdeb
1218 IF (k == kfin) j2 = jfin
1223 y(2*i +2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k) = fft%Work(ioff+ iwork+i*mltemp)
1224 y(2*i+1+2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k) = fft%Work(ioff+nwork_temp/4+iwork+i*mltemp)
1236 DO WHILE (.NOT.fini)
1240 CALL jmdecoup3(fft%Nx/2+1,fft%Ny,4*fft%Nz,fft%WorkSize,debut,.true.,ideb,ifin,jdeb,jfin,nmtemp,nwork_temp,fini)
1251 IF (j == jdeb) i1 = ideb
1252 IF (j == jfin) i2 = ifin
1257 fft%work( iwork+k*nmtemp) = y(2*i +2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k)
1258 fft%Work(nwork_temp/4+iwork+k*nmtemp) = y(2*i+1+2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k)
1266 CALL jmccm1d(nmtemp,fft%Nz,fact,100,mfact,fft%Table,fft%TableSize,100+2*(fft%Nx+fft%Ny),fft%Work,nwork_temp,ioff)
1274 IF (j == jdeb) i1 = ideb
1275 IF (j == jfin) i2 = ifin
1280 y(2*i +2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k) = fft%work(ioff+ iwork+k*nmtemp)
1281 y(2*i+1+2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k) = fft%work(ioff+nwork_temp/4+iwork+k*nmtemp)
1293 DO WHILE (.NOT.fini)
1296 CALL jmdecoup3(fft%Nx/2+1,fft%Nz,4*fft%Ny,fft%WorkSize,debut,.true.,ideb,ifin,kdeb,kfin,nltemp,nwork_temp,fini)
1306 IF (k == kdeb) i1 = ideb
1307 IF (k == kfin) i2 = ifin
1312 fft%work( iwork+j*nltemp) = y(2*i +2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k)
1313 fft%work(nwork_temp/4+iwork+j*nltemp) = y(2*i+1+2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k)
1321 CALL jmccm1d(nltemp,fft%Ny,fact,100,nfact,fft%Table,fft%TableSize,100+2*fft%Nx ,fft%Work,nwork_temp,ioff)
1329 IF (k == kdeb) i1 = ideb
1330 IF (k == kfin) i2 = ifin
1335 y(2*i +2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k) = &
1336 & fft%Work(ioff +iwork+j*nltemp)
1337 y(2*i+1+2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k) = &
1338 & isign*fft%Work(ioff+nwork_temp/4+iwork+j*nltemp)
1352 c_out(i,j,k) = cmplx(y(2*i+2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k), &
1353 y(2*i+1+2*fft%Ldy1*j+2*fft%Ldy1*fft%Ldy2*k),kind=
gft_prec)
1358 IF(
PRESENT(code) ) code = 0
1361SUBROUTINE gft_do_mcc_1d(FFT, isign, scale, c_in, c_out, code)
1365 TYPE(
gft_mcc),
INTENT(inout) :: FFT
1366 INTEGER,
INTENT(in) :: isign
1367 REAL(kind=
gft_prec),
INTENT(in) :: scale
1368 COMPLEX(kind=GFT_prec),
INTENT(in),
DIMENSION(0:,0:) :: c_in
1371 COMPLEX(kind=GFT_prec),
INTENT(out),
DIMENSION(0:,0:) :: c_out
1372 INTEGER,
OPTIONAL,
INTENT(out) :: code
1376 REAL(kind=
gft_prec),
DIMENSION(0:2*SIZE(c_in)-1) :: x
1377 REAL(kind=
gft_prec),
DIMENSION(0:2*SIZE(c_out)-1) :: y
1378 INTEGER :: i, j, ioff, nfact
1379 INTEGER,
DIMENSION(0:99) :: fact
1380 CHARACTER(len=*),
PARAMETER :: spname =
'GFT_do_mcc_1d'
1384 IF (.NOT.fft%Init)
CALL gft_error(spname//
": Error: GFT_init must be called prior to this routine")
1385 fft%Ldx1 =
SIZE(c_in ,dim=1)
1386 fft%Ldy1 =
SIZE(c_out,dim=1)
1387 IF (
SIZE(c_in) < fft%Nx*fft%Ny )
CALL gft_error(spname//
": Error: Size(C_IN) < Nx*Ny")
1388 IF (
SIZE(c_out) < fft%Nx*fft%Ny )
CALL gft_error(spname//
": Error: Size(C_OUT) < Nx*Ny")
1389 IF ( fft%Ldx1 < fft%Nx )
CALL gft_error(spname//
": Error: Size(C_IN,dim=1) < Nx")
1390 IF ( fft%Ldy1 < fft%Nx )
CALL gft_error(spname//
": Error: Size(C_OUT,dim=1) < Nx")
1391 IF (isign /=-1 .AND. isign /= 1)
CALL gft_error(spname//
": Error: isign value is invalid")
1401 x(2*i +j*2*fft%Ldx1) = real(c_in(i,j),kind=
gft_prec)
1402 x(2*i+1+j*2*fft%Ldx1) = aimag(c_in(i,j))
1406 nfact = nint(fft%table(0))
1407 fact(0:nfact-1) = nint(fft%table(0:nfact-1))
1416 fft%Work(j+fft%Ny*i) = scale*x(2*i +2*fft%Ldx1*j)
1417 fft%Work(j+fft%Ny*(fft%Nx+i)) = isign*scale*x(2*i+1+2*fft%Ldx1*j)
1423 CALL jmccm1d(fft%Ny, fft%Nx,fact,100,0,fft%Table,fft%TableSize,100+0,fft%Work,fft%WorkSize,ioff)
1431 y(2*i +2*fft%Ldy1*j) = fft%work(ioff+j+fft%Ny*i)
1432 y(2*i+1+2*fft%Ldy1*j) = isign*fft%work(ioff+j+fft%Ny*(fft%Nx+i))
1438 c_out(i,j) = cmplx(y(2*i+2*fft%Ldy1*j), y(2*i+1+2*fft%Ldy1*j),kind=
gft_prec)
1442 IF(
PRESENT(code) ) code = 0
1445SUBROUTINE gft_do_mcr_1d(FFT, isign, scale, c_in, r_out, code)
1449 TYPE(
gft_mrcr),
INTENT(inout) :: FFT
1450 INTEGER,
INTENT(in) :: isign
1451 REAL(kind=
gft_prec),
INTENT(in) :: scale
1452 COMPLEX(kind=GFT_prec),
INTENT(in),
DIMENSION(0:,0:) :: c_in
1455 REAL(kind=
gft_prec),
INTENT(out),
DIMENSION(0:,0:) :: r_out
1456 INTEGER,
OPTIONAL,
INTENT(out) :: code
1459 REAL(kind=
gft_prec),
DIMENSION(0:2*SIZE(c_in)-1) :: x
1460 REAL(kind=
gft_prec),
DIMENSION(0:SIZE(r_out)-1) :: y
1461 INTEGER :: i, j, nfact
1462 INTEGER,
DIMENSION(0:99) :: fact
1463 INTEGER :: dimx, debx, incx, jumpx
1464 INTEGER :: dimy, deby, incy, jumpy
1465 CHARACTER(len=*),
PARAMETER :: spname =
"GFT_do_mcr_1d"
1469 IF (.NOT.fft%Init)
CALL gft_error(spname//
": Error: GFT_init must be called prior to this routine")
1470 fft%Ldx1 =
SIZE(c_in ,dim=1)
1471 fft%Ldy1 =
SIZE(r_out,dim=1)
1472 IF ( fft%Ldx1 < fft%Nx/2+1 )
CALL gft_error(spname//
": Error: Size(C_IN,dim=1) < Nx/2+1")
1473 IF ( fft%Ldy1 < fft%Nx )
CALL gft_error(spname//
": Error: Size(R_OUT,dim=1) < Nx")
1474 IF (
SIZE(r_out) < fft%Nx*fft%Ny )
CALL gft_error(spname//
": Error: Size(R_OUT) < Nx*Ny")
1475 IF (
SIZE(c_in) < (fft%Nx/2+1)*fft%Ny )
CALL gft_error(spname//
": Error: Size(C_IN) < (Nx/2+1)*Ny")
1476 IF (isign /=-1 .AND. isign /= 1)
CALL gft_error(spname//
": Error: isign has an invalid value")
1486 x(2*i +2*fft%Ldx1*j) = real(c_in(i,j),kind=
gft_prec)
1487 x(2*i+1+2*fft%Ldx1*j) = aimag(c_in(i,j))
1491 nfact = nint(fft%Table(0))
1492 fact(0:nfact-1) = nint(fft%Table(0:nfact-1))
1495 dimx = 2*fft%Ldx1*fft%Ny ; debx = 0 ; incx = 1 ; jumpx = 2*fft%Ldx1
1496 dimy = fft%Ldy1*fft%Ny ; deby = 0 ; incy = 1 ; jumpy = fft%Ldy1
1497 CALL jmcsm1dxy(fft%Ny,fft%Nx,fact,100,0,fft%Table,fft%TableSize,100+0, &
1498 fft%Work,fft%WorkSize,x,dimx,debx,incx,jumpx,y,dimy,deby,&
1499 incy,jumpy,isign,scale)
1503 r_out(i,j) = y(i + fft%Ldy1*j)
1507 IF(
PRESENT(code) ) code = 0
1510SUBROUTINE gft_do_mrc_1d(FFT, isign, scale, r_in, c_out, code)
1514 TYPE(
gft_mrcr),
INTENT(inout) :: FFT
1515 INTEGER,
INTENT(in) :: isign
1516 REAL(kind=
gft_prec),
INTENT(in) :: scale
1517 REAL(kind=
gft_prec),
INTENT(in),
DIMENSION(0:,0:) :: r_in
1520 COMPLEX(kind=GFT_prec),
INTENT(out),
DIMENSION(0:,0:) :: c_out
1521 INTEGER,
OPTIONAL,
INTENT(out) :: code
1524 REAL(kind=
gft_prec),
DIMENSION(0:SIZE(r_in)-1) :: x
1525 REAL(kind=
gft_prec),
DIMENSION(0:2*SIZE(c_out)-1) :: y
1526 INTEGER :: i, j, nfact
1527 INTEGER,
DIMENSION(0:99) :: fact
1528 INTEGER :: dimx, debx, incx, jumpx
1529 INTEGER :: dimy, deby, incy, jumpy
1530 CHARACTER(len=*),
PARAMETER :: spname =
"GFT_do_mrc_1d"
1534 IF (.NOT.fft%Init)
CALL gft_error(spname//
": Error: GFT_init must be called prior to this routine")
1535 fft%Ldx1 =
SIZE(r_in ,dim=1)
1536 fft%Ldy1 =
SIZE(c_out,dim=1)
1537 IF (fft%Ldx1 < fft%Nx )
CALL gft_error(spname//
": Error: Size(R_IN,dim=1) < Nx")
1538 IF (fft%Ldy1 < fft%Nx/2+1)
CALL gft_error(spname//
": Error: Size(C_OUT,dim=1) < Nx/2+1")
1539 IF (
SIZE(r_in) < fft%Nx*fft%Ny)
CALL gft_error(spname//
": Error: Size(R_IN) < Nx*Ny")
1540 IF (
SIZE(c_out) < (fft%Nx/2+1)*fft%Ny)
CALL gft_error(spname//
": Error: Size(C_OUT) < (Nx/2+1)*Ny")
1547 x(i+fft%Ldx1*j) = r_in(i,j)
1551 nfact = nint(fft%Table(0))
1552 fact(0:nfact-1) = nint(fft%Table(0:nfact-1))
1555 dimx = fft%Ldx1*fft%Ny ; debx = 0 ; incx = 1 ; jumpx = fft%Ldx1
1556 dimy = 2*fft%Ldy1*fft%Ny ; deby = 0 ; incy = 1 ; jumpy = 2*fft%Ldy1
1557 CALL jmscm1dxy(fft%Ny,fft%Nx,fact,100,0,fft%Table,fft%TableSize,100+0, &
1558 fft%Work,fft%WorkSize,x,dimx,debx,incx,jumpx,y,dimy,deby,&
1559 incy,jumpy,isign,scale)
1563 c_out(i,j) = cmplx(y(2*i+2*fft%Ldy1*j), y(2*i+1+2*fft%Ldy1*j),kind=
gft_prec)
1567 IF(
PRESENT(code) ) code = 0
subroutine jmscm1dxy(m, n, fact, nfact, ifact, table, ntable, itable, work, nwork, x, dimx, debx, incx, jumpx, y, dimy, deby, incy, jumpy, isign, scale)
subroutine jmcsm1dxy(m, n, fact, nfact, ifact, table, ntable, itable, work, nwork, x, dimx, debx, incx, jumpx, y, dimy, deby, incy, jumpy, isign, scale)