334SUBROUTINE jmccm1d(m,n,fact,nfact,ifact,table,ntable,itable,work,nwork,ioff)
339 INTEGER,
INTENT(in) :: m, n
340 INTEGER,
INTENT(in) :: nfact, ifact
341 INTEGER,
INTENT(in),
DIMENSION(0:nfact-1) :: fact
342 INTEGER,
INTENT(in) :: ntable,itable
343 REAL(kind=
gft_prec),
INTENT(in),
DIMENSION(0:ntable-1) :: table
344 INTEGER,
INTENT(in) :: nwork
345 REAL(kind=
gft_prec),
INTENT(inout),
DIMENSION(0:nwork-1) :: work
346 INTEGER,
INTENT(inout) :: ioff
350 INTEGER :: np, pp, lastnp, premier
351 INTEGER :: nprod, nprod1, nprod2
352 INTEGER :: n2, p2, n3, p3, n5, p5
365 nprod = nprod*fact(ifact+i+1)**fact(ifact+i)
370 CALL jmccm1d2(p2,n2,m*(nprod/n2),table,ntable,itable,n,n/n2,work,nwork,ioff)
375 IF (n2 /= 1 .AND. nprod /= n2)
THEN
376 CALL jmcctranspcs(m,n,n2,nprod/n2,table,ntable,itable,work,nwork,ioff)
381 CALL jmccm1d3(p3,n3,m*(nprod/n3),table,ntable,itable,n,n/n3,work,nwork,ioff)
386 IF (n3 /= 1 .AND. nprod /= n3)
THEN
388 & table,ntable,itable,work,nwork,ioff)
393 CALL jmccm1d5(p5,n5,m*(nprod/n5),table,ntable,itable,n,n/n5,work,nwork,ioff)
398 IF (n5 /= 1 .AND. nprod /= n5 .AND. nterms > 7)
THEN
400 & table,ntable,itable,work,nwork,ioff)
410 premier = fact(ifact+i+1)
413 CALL jmccm1dp(premier,pp,m*(nprod/np), &
414 & table,ntable,itable,n,n/np,work,nwork,ioff)
416 nprod1 = nprod1 * lastnp
418 IF (np /= 1 .AND. nprod /= np .AND. nterms > i+1)
THEN
420 & table,ntable,itable,work,nwork,ioff)
428SUBROUTINE jmccm1d2(p,n,m,table,ntable,itable,ntable2,mtable,work,nwork,ioff)
433 INTEGER,
INTENT(in) :: p, n, m
434 INTEGER,
INTENT(in) :: ntable,itable,ntable2,mtable
435 REAL(kind=
gft_prec),
INTENT(in),
DIMENSION(0:ntable-1) :: table
436 INTEGER,
INTENT(in) :: nwork
437 REAL(kind=
gft_prec),
INTENT(inout),
DIMENSION(0:nwork-1) :: work
438 INTEGER,
INTENT(inout) :: ioff
442 INTEGER :: it1,iu1,it2,iu2
443 INTEGER :: jt1,ju1,jt2,ju2
444 REAL(kind=
gft_prec) :: x1, x2, y1, y2
446 INTEGER :: ioff1, ioff2
450 ioff2 = nwork/2-ioff1
452 IF (mod(p,2)==0)
THEN
455 CALL jmccm1d4(p/2,n,m,table,ntable,itable,ntable2,mtable,work,nwork,ioff1)
461 CALL jmccm1d4(p/2,n,2*m,table,ntable,itable,ntable2,mtable*2,work,nwork,ioff1)
462 ioff2 = nwork/2-ioff1
464 IF (m >= 16 .OR. 2**(p-1) < 8)
THEN
468 c = table(itable+ mtable*k)
469 s = table(itable+ntable2+mtable*k)
472 it1 = ioff1 +m*(k*2 )
473 iu1 = ioff1+nwork/4+m*(k*2 )
474 it2 = ioff1 +m*(k*2+1)
475 iu2 = ioff1+nwork/4+m*(k*2+1)
477 ju1 = ioff2+nwork/4+m*( k )
478 jt2 = ioff2 +m*((k+2**(p-1)))
479 ju2 = ioff2+nwork/4+m*((k+2**(p-1)))
489 work(jt1+jl) = x1 + ( x2*c - y2*s )
490 work(ju1+jl) = y1 + ( x2*s + y2*c )
491 work(jt2+jl) = x1 - ( x2*c - y2*s )
492 work(ju2+jl) = y1 - ( x2*s + y2*c )
501 x1 = work(ioff1+jl +m*(k*2 ))
502 y1 = work(ioff1+jl+nwork/4+m*(k*2 ))
503 x2 = work(ioff1+jl +m*(k*2+1))
504 y2 = work(ioff1+jl+nwork/4+m*(k*2+1))
506 c = table(itable+ mtable*k)
507 s = table(itable+ntable2+mtable*k)
508 work(ioff2+jl +m*( k )) = x1 + ( x2*c - y2*s )
509 work(ioff2+jl+nwork/4+m*( k )) = y1 + ( x2*s + y2*c )
510 work(ioff2+jl +m*((k+2**(p-1)))) = x1 - ( x2*c - y2*s )
511 work(ioff2+jl+nwork/4+m*((k+2**(p-1)))) = y1 - ( x2*s + y2*c )
522SUBROUTINE jmccm1d3(p,n,m,table,ntable,itable,ntable2,mtable,work,nwork,ioff)
527 INTEGER,
INTENT(in) :: p, n, m
528 INTEGER,
INTENT(in) :: ntable,itable,ntable2, mtable
529 REAL(kind=
gft_prec),
INTENT(in),
DIMENSION(0:ntable-1) :: table
530 INTEGER,
INTENT(in) :: nwork
531 REAL(kind=
gft_prec),
INTENT(inout),
DIMENSION(0:nwork-1) :: work
532 INTEGER,
INTENT(inout) :: ioff
536 REAL(kind=
gft_prec) :: x1, x2, x3, y1, y2, y3, t1, t2, t3, u1, u2, u3
537 REAL(kind=
gft_prec) :: c2, s2, c3, s3
538 INTEGER :: it1,iu1,it2,iu2,it3,iu3
539 INTEGER :: jt1,ju1,jt2,ju2,jt3,ju3
543 REAL(kind=
gft_prec),
SAVE :: ctwopi3, stwopi3
544 LOGICAL,
SAVE :: first = .true.
546 INTEGER :: ioff1, ioff2
551 ctwopi3 = -1.0_gft_prec/2.0_gft_prec
552 stwopi3 = sqrt(3.0_gft_prec)/2.0_gft_prec
557 ioff2 = nwork/2-ioff1
562 IF (m*3**(p-i-1) >= 16 .OR. 3**i < 8)
THEN
567 c2 = table(itable+ mtable* 3**(p-i-1)*k)
568 s2 = table(itable+ntable2+mtable* 3**(p-i-1)*k)
569 c3 = table(itable+ mtable*2*3**(p-i-1)*k)
570 s3 = table(itable+ntable2+mtable*2*3**(p-i-1)*k)
573 it1 = ioff1 +m*(k*3**(p-i) )
574 iu1 = ioff1+nwork/4+m*(k*3**(p-i) )
575 it2 = ioff1 +m*(k*3**(p-i)+ 3**(p-i-1))
576 iu2 = ioff1+nwork/4+m*(k*3**(p-i)+ 3**(p-i-1))
577 it3 = ioff1 +m*(k*3**(p-i)+2*3**(p-i-1))
578 iu3 = ioff1+nwork/4+m*(k*3**(p-i)+2*3**(p-i-1))
579 jt1 = ioff2 +m*( k *3**(p-i-1))
580 ju1 = ioff2+nwork/4+m*( k *3**(p-i-1))
581 jt2 = ioff2 +m*((k+ 3**i)*3**(p-i-1))
582 ju2 = ioff2+nwork/4+m*((k+ 3**i)*3**(p-i-1))
583 jt3 = ioff2 +m*((k+2*3**i)*3**(p-i-1))
584 ju3 = ioff2+nwork/4+m*((k+2*3**i)*3**(p-i-1))
589 DO jl = 0,m*3**(p-i-1)-1
591 r = (c2*work(it2+jl))-(s2*work(iu2+jl))
592 s = (c2*work(iu2+jl))+(s2*work(it2+jl))
593 t = (c3*work(it3+jl))-(s3*work(iu3+jl))
594 u = (c3*work(iu3+jl))+(s3*work(it3+jl))
597 work(jt1+jl) = x1 + r + t
598 work(ju1+jl) = y1 + s + u
599 work(jt2+jl) = x1 + ctwopi3*(r+t) - stwopi3*(s-u)
600 work(ju2+jl) = y1 + ctwopi3*(s+u) + stwopi3*(r-t)
601 work(jt3+jl) = x1 + ctwopi3*(r+t) + stwopi3*(s-u)
602 work(ju3+jl) = y1 + ctwopi3*(s+u) - stwopi3*(r-t)
610 DO jl = 0,m*3**(p-i-1)-1
617 t1 = work(ioff1+jl +m*(k*3**(p-i) ))
618 u1 = work(ioff1+jl+nwork/4+m*(k*3**(p-i) ))
619 t2 = work(ioff1+jl +m*(k*3**(p-i)+ 3**(p-i-1)))
620 u2 = work(ioff1+jl+nwork/4+m*(k*3**(p-i)+ 3**(p-i-1)))
621 t3 = work(ioff1+jl +m*(k*3**(p-i)+2*3**(p-i-1)))
622 u3 = work(ioff1+jl+nwork/4+m*(k*3**(p-i)+2*3**(p-i-1)))
625 c2 = table(itable+ mtable* 3**(p-i-1)*k)
626 s2 = table(itable+ntable2+mtable* 3**(p-i-1)*k)
627 c3 = table(itable+ mtable*2*3**(p-i-1)*k)
628 s3 = table(itable+ntable2+mtable*2*3**(p-i-1)*k)
639 work(ioff2+jl +m*( k *3**(p-i-1))) = &
641 work(ioff2+jl+nwork/4+m*( k *3**(p-i-1))) = &
643 work(ioff2+jl +m*((k+ 3**i)*3**(p-i-1))) = &
644 & x1 + ctwopi3*x2-stwopi3*y2 + ctwopi3*x3+stwopi3*y3
645 work(ioff2+jl+nwork/4+m*((k+ 3**i)*3**(p-i-1))) = &
646 & y1 + ctwopi3*y2+stwopi3*x2 + ctwopi3*y3-stwopi3*x3
647 work(ioff2+jl +m*((k+2*3**i)*3**(p-i-1))) = &
648 & x1 + ctwopi3*x2+stwopi3*y2 + ctwopi3*x3-stwopi3*y3
649 work(ioff2+jl+nwork/4+m*((k+2*3**i)*3**(p-i-1))) = &
650 & y1 + ctwopi3*y2-stwopi3*x2 + ctwopi3*y3+stwopi3*x3
659 ioff1 = nwork/2-ioff1
660 ioff2 = nwork/2-ioff2
669SUBROUTINE jmccm1d4(p,n,m,table,ntable,itable,ntable2,mtable,work,nwork,ioff)
674 INTEGER,
INTENT(in) :: p, n, m
675 INTEGER,
INTENT(in) :: ntable,itable,ntable2, mtable
676 REAL(kind=
gft_prec),
INTENT(in),
DIMENSION(0:ntable-1) :: table
677 INTEGER,
INTENT(in) :: nwork
678 REAL(kind=
gft_prec),
INTENT(inout),
DIMENSION(0:nwork-1) :: work
679 INTEGER,
INTENT(inout) :: ioff
683 REAL(kind=
gft_prec) :: x0,x1,x2,x3,y0,y1,y2,y3,t0,t1,t2,t3,u0,u1,u2,u3
684 REAL(kind=
gft_prec) :: x0px2,x0mx2,x1px3,x1mx3
685 REAL(kind=
gft_prec) :: y0py2,y0my2,y1py3,y1my3
686 REAL(kind=
gft_prec) :: c1, s1, c2, s2, c3, s3
687 INTEGER :: ioff1, ioff2
688 INTEGER :: it0,iu0,it1,iu1,it2,iu2,it3,iu3
689 INTEGER :: jt0,ju0,jt1,ju1,jt2,ju2,jt3,ju3
693 ioff2 = nwork/2-ioff1
698 IF (m*4**(p-i-1) >= 16 .OR. 4**i < 8)
THEN
703 c1 = table(itable+ mtable* 4**(p-i-1)*k)
704 s1 = table(itable+ntable2+mtable* 4**(p-i-1)*k)
705 c2 = table(itable+ mtable*2*4**(p-i-1)*k)
706 s2 = table(itable+ntable2+mtable*2*4**(p-i-1)*k)
707 c3 = table(itable+ mtable*3*4**(p-i-1)*k)
708 s3 = table(itable+ntable2+mtable*3*4**(p-i-1)*k)
711 it0 = ioff1 +m*(k*4**(p-i) )
712 iu0 = ioff1+nwork/4+m*(k*4**(p-i) )
713 it1 = ioff1 +m*(k*4**(p-i)+ 4**(p-i-1))
714 iu1 = ioff1+nwork/4+m*(k*4**(p-i)+ 4**(p-i-1))
715 it2 = ioff1 +m*(k*4**(p-i)+2*4**(p-i-1))
716 iu2 = ioff1+nwork/4+m*(k*4**(p-i)+2*4**(p-i-1))
717 it3 = ioff1 +m*(k*4**(p-i)+3*4**(p-i-1))
718 iu3 = ioff1+nwork/4+m*(k*4**(p-i)+3*4**(p-i-1))
719 jt0 = ioff2 +m*( k *4**(p-i-1))
720 ju0 = ioff2+nwork/4+m*( k *4**(p-i-1))
721 jt1 = ioff2 +m*((k+ 4**i)*4**(p-i-1))
722 ju1 = ioff2+nwork/4+m*((k+ 4**i)*4**(p-i-1))
723 jt2 = ioff2 +m*((k+2*4**i)*4**(p-i-1))
724 ju2 = ioff2+nwork/4+m*((k+2*4**i)*4**(p-i-1))
725 jt3 = ioff2 +m*((k+3*4**i)*4**(p-i-1))
726 ju3 = ioff2+nwork/4+m*((k+3*4**i)*4**(p-i-1))
731 DO jl = 0,m*4**(p-i-1)-1
733 x0px2 = work(it0+jl) + (c2*work(it2+jl)-s2*work(iu2+jl))
734 x0mx2 = work(it0+jl) - (c2*work(it2+jl)-s2*work(iu2+jl))
735 y0py2 = work(iu0+jl) + (c2*work(iu2+jl)+s2*work(it2+jl))
736 y0my2 = work(iu0+jl) - (c2*work(iu2+jl)+s2*work(it2+jl))
737 x1px3 = (c1*work(it1+jl)-s1*work(iu1+jl))+(c3*work(it3+jl)-s3*work(iu3+jl))
738 x1mx3 = (c1*work(it1+jl)-s1*work(iu1+jl))-(c3*work(it3+jl)-s3*work(iu3+jl))
739 y1py3 = (c1*work(iu1+jl)+s1*work(it1+jl))+(c3*work(iu3+jl)+s3*work(it3+jl))
740 y1my3 = (c1*work(iu1+jl)+s1*work(it1+jl))-(c3*work(iu3+jl)+s3*work(it3+jl))
743 work(jt0+jl) = (x0px2)+(x1px3)
744 work(jt2+jl) = (x0px2)-(x1px3)
745 work(ju0+jl) = (y0py2)+(y1py3)
746 work(ju2+jl) = (y0py2)-(y1py3)
747 work(jt1+jl) = (x0mx2)-(y1my3)
748 work(jt3+jl) = (x0mx2)+(y1my3)
749 work(ju1+jl) = (y0my2)+(x1mx3)
750 work(ju3+jl) = (y0my2)-(x1mx3)
758 DO jl = 0,m*4**(p-i-1)-1
765 t0 = work(ioff1+jl +m*(k*4**(p-i) ))
766 u0 = work(ioff1+jl+nwork/4+m*(k*4**(p-i) ))
767 t1 = work(ioff1+jl +m*(k*4**(p-i)+ 4**(p-i-1)))
768 u1 = work(ioff1+jl+nwork/4+m*(k*4**(p-i)+ 4**(p-i-1)))
769 t2 = work(ioff1+jl +m*(k*4**(p-i)+2*4**(p-i-1)))
770 u2 = work(ioff1+jl+nwork/4+m*(k*4**(p-i)+2*4**(p-i-1)))
771 t3 = work(ioff1+jl +m*(k*4**(p-i)+3*4**(p-i-1)))
772 u3 = work(ioff1+jl+nwork/4+m*(k*4**(p-i)+3*4**(p-i-1)))
775 c1 = table(itable+ mtable* 4**(p-i-1)*k)
776 s1 = table(itable+ntable2+mtable* 4**(p-i-1)*k)
777 c2 = table(itable+ mtable*2*4**(p-i-1)*k)
778 s2 = table(itable+ntable2+mtable*2*4**(p-i-1)*k)
779 c3 = table(itable+ mtable*3*4**(p-i-1)*k)
780 s3 = table(itable+ntable2+mtable*3*4**(p-i-1)*k)
793 work(ioff2+jl +m*( k *4**(p-i-1))) = x0+x1+x2+x3
794 work(ioff2+jl+nwork/4+m*( k *4**(p-i-1))) = y0+y1+y2+y3
795 work(ioff2+jl +m*((k+ 4**i)*4**(p-i-1))) = x0-y1-x2+y3
796 work(ioff2+jl+nwork/4+m*((k+ 4**i)*4**(p-i-1))) = y0+x1-y2-x3
797 work(ioff2+jl +m*((k+2*4**i)*4**(p-i-1))) = x0-x1+x2-x3
798 work(ioff2+jl+nwork/4+m*((k+2*4**i)*4**(p-i-1))) = y0-y1+y2-y3
799 work(ioff2+jl +m*((k+3*4**i)*4**(p-i-1))) = x0+y1-x2-y3
800 work(ioff2+jl+nwork/4+m*((k+3*4**i)*4**(p-i-1))) = y0-x1-y2+x3
809 ioff1 = nwork/2-ioff1
810 ioff2 = nwork/2-ioff2
819SUBROUTINE jmccm1d5(p,n,m,table,ntable,itable,ntable2,mtable,work,nwork,ioff)
824 INTEGER,
INTENT(in) :: p, n, m
825 INTEGER,
INTENT(in) :: ntable,itable,ntable2, mtable
826 REAL(kind=
gft_prec),
INTENT(in),
DIMENSION(0:ntable-1) :: table
827 INTEGER,
INTENT(in) :: nwork
828 REAL(kind=
gft_prec),
INTENT(inout),
DIMENSION(0:nwork-1) :: work
829 INTEGER,
INTENT(inout) :: ioff
833 REAL(kind=
gft_prec) :: x0,x1,x2,x3,x4,y0,y1,y2,y3,y4,t0,t1,t2,t3,t4,u0,u1,u2,u3,u4
834 REAL(kind=
gft_prec) :: c1, s1, c2, s2, c3, s3, c4, s4
835 INTEGER :: ioff1, ioff2
839 REAL(kind=
gft_prec),
SAVE :: ctwopi51, ctwopi52, ctwopi53, ctwopi54
840 REAL(kind=
gft_prec),
SAVE :: stwopi51, stwopi52, stwopi53, stwopi54
841 LOGICAL,
SAVE :: first = .true.
846 twopi5 = 2.0_gft_prec*acos(-1.0_gft_prec)/5.0_gft_prec
847 ctwopi51 = cos( twopi5)
848 stwopi51 = sin( twopi5)
849 ctwopi52 = cos(2.0_gft_prec*twopi5)
850 stwopi52 = sin(2.0_gft_prec*twopi5)
851 ctwopi53 = cos(3.0_gft_prec*twopi5)
852 stwopi53 = sin(3.0_gft_prec*twopi5)
853 ctwopi54 = cos(4.0_gft_prec*twopi5)
854 stwopi54 = sin(4.0_gft_prec*twopi5)
859 ioff2 = nwork/2-ioff1
864 IF (m*5**(p-i-1) >= 16 .OR. 5**i < 8)
THEN
871 DO jl = 0,m*5**(p-i-1)-1
873 t0 = work(ioff1+jl +m*(k*5**(p-i) ))
874 u0 = work(ioff1+jl+nwork/4+m*(k*5**(p-i) ))
875 t1 = work(ioff1+jl +m*(k*5**(p-i)+ 5**(p-i-1)))
876 u1 = work(ioff1+jl+nwork/4+m*(k*5**(p-i)+ 5**(p-i-1)))
877 t2 = work(ioff1+jl +m*(k*5**(p-i)+2*5**(p-i-1)))
878 u2 = work(ioff1+jl+nwork/4+m*(k*5**(p-i)+2*5**(p-i-1)))
879 t3 = work(ioff1+jl +m*(k*5**(p-i)+3*5**(p-i-1)))
880 u3 = work(ioff1+jl+nwork/4+m*(k*5**(p-i)+3*5**(p-i-1)))
881 t4 = work(ioff1+jl +m*(k*5**(p-i)+4*5**(p-i-1)))
882 u4 = work(ioff1+jl+nwork/4+m*(k*5**(p-i)+4*5**(p-i-1)))
885 c1 = table(itable+ mtable* 5**(p-i-1)*k)
886 s1 = table(itable+ntable2+mtable* 5**(p-i-1)*k)
887 c2 = table(itable+ mtable*2*5**(p-i-1)*k)
888 s2 = table(itable+ntable2+mtable*2*5**(p-i-1)*k)
889 c3 = table(itable+ mtable*3*5**(p-i-1)*k)
890 s3 = table(itable+ntable2+mtable*3*5**(p-i-1)*k)
891 c4 = table(itable+ mtable*4*5**(p-i-1)*k)
892 s4 = table(itable+ntable2+mtable*4*5**(p-i-1)*k)
907 work(ioff2+jl +m*( k *5**(p-i-1))) = &
910 work(ioff2+jl+nwork/4+m*( k *5**(p-i-1))) = &
913 work(ioff2+jl +m*((k+ 5**i)*5**(p-i-1))) = &
914 & x0 + ctwopi51*x1 - stwopi51*y1 &
915 & + ctwopi52*x2 - stwopi52*y2 &
916 & + ctwopi53*x3 - stwopi53*y3 &
917 & + ctwopi54*x4 - stwopi54*y4
918 work(ioff2+jl+nwork/4+m*((k+ 5**i)*5**(p-i-1))) = &
919 & y0 + ctwopi51*y1 + stwopi51*x1 &
920 & + ctwopi52*y2 + stwopi52*x2 &
921 & + ctwopi53*y3 + stwopi53*x3 &
922 & + ctwopi54*y4 + stwopi54*x4
923 work(ioff2+jl +m*((k+2*5**i)*5**(p-i-1))) = &
924 & x0 + ctwopi52*x1 - stwopi52*y1 &
925 & + ctwopi54*x2 - stwopi54*y2 &
926 & + ctwopi51*x3 - stwopi51*y3 &
927 & + ctwopi53*x4 - stwopi53*y4
928 work(ioff2+jl+nwork/4+m*((k+2*5**i)*5**(p-i-1))) = &
929 & y0 + ctwopi52*y1 + stwopi52*x1 &
930 & + ctwopi54*y2 + stwopi54*x2 &
931 & + ctwopi51*y3 + stwopi51*x3 &
932 & + ctwopi53*y4 + stwopi53*x4
933 work(ioff2+jl +m*((k+3*5**i)*5**(p-i-1))) = &
934 & x0 + ctwopi53*x1 - stwopi53*y1 &
935 & + ctwopi51*x2 - stwopi51*y2 &
936 & + ctwopi54*x3 - stwopi54*y3 &
937 & + ctwopi52*x4 - stwopi52*y4
938 work(ioff2+jl+nwork/4+m*((k+3*5**i)*5**(p-i-1))) = &
939 & y0 + ctwopi53*y1 + stwopi53*x1 &
940 & + ctwopi51*y2 + stwopi51*x2 &
941 & + ctwopi54*y3 + stwopi54*x3 &
942 & + ctwopi52*y4 + stwopi52*x4
943 work(ioff2+jl +m*((k+4*5**i)*5**(p-i-1))) = &
944 & x0 + ctwopi54*x1 - stwopi54*y1 &
945 & + ctwopi53*x2 - stwopi53*y2 &
946 & + ctwopi52*x3 - stwopi52*y3 &
947 & + ctwopi51*x4 - stwopi51*y4
948 work(ioff2+jl+nwork/4+m*((k+4*5**i)*5**(p-i-1))) = &
949 & y0 + ctwopi54*y1 + stwopi54*x1 &
950 & + ctwopi53*y2 + stwopi53*x2 &
951 & + ctwopi52*y3 + stwopi52*x3 &
952 & + ctwopi51*y4 + stwopi51*x4
960 DO jl = 0,m*5**(p-i-1)-1
967 t0 = work(ioff1+jl +m*(k*5**(p-i) ))
968 u0 = work(ioff1+jl+nwork/4+m*(k*5**(p-i) ))
969 t1 = work(ioff1+jl +m*(k*5**(p-i)+ 5**(p-i-1)))
970 u1 = work(ioff1+jl+nwork/4+m*(k*5**(p-i)+ 5**(p-i-1)))
971 t2 = work(ioff1+jl +m*(k*5**(p-i)+2*5**(p-i-1)))
972 u2 = work(ioff1+jl+nwork/4+m*(k*5**(p-i)+2*5**(p-i-1)))
973 t3 = work(ioff1+jl +m*(k*5**(p-i)+3*5**(p-i-1)))
974 u3 = work(ioff1+jl+nwork/4+m*(k*5**(p-i)+3*5**(p-i-1)))
975 t4 = work(ioff1+jl +m*(k*5**(p-i)+4*5**(p-i-1)))
976 u4 = work(ioff1+jl+nwork/4+m*(k*5**(p-i)+4*5**(p-i-1)))
979 c1 = table(itable+ mtable* 5**(p-i-1)*k)
980 s1 = table(itable+ntable2+mtable* 5**(p-i-1)*k)
981 c2 = table(itable+ mtable*2*5**(p-i-1)*k)
982 s2 = table(itable+ntable2+mtable*2*5**(p-i-1)*k)
983 c3 = table(itable+ mtable*3*5**(p-i-1)*k)
984 s3 = table(itable+ntable2+mtable*3*5**(p-i-1)*k)
985 c4 = table(itable+ mtable*4*5**(p-i-1)*k)
986 s4 = table(itable+ntable2+mtable*4*5**(p-i-1)*k)
1001 work(ioff2+jl +m*( k *5**(p-i-1))) = &
1004 work(ioff2+jl+nwork/4+m*( k *5**(p-i-1))) = &
1007 work(ioff2+jl +m*((k+ 5**i)*5**(p-i-1))) = &
1008 & x0 + ctwopi51*x1 - stwopi51*y1 &
1009 & + ctwopi52*x2 - stwopi52*y2 &
1010 & + ctwopi53*x3 - stwopi53*y3 &
1011 & + ctwopi54*x4 - stwopi54*y4
1012 work(ioff2+jl+nwork/4+m*((k+ 5**i)*5**(p-i-1))) = &
1013 & y0 + ctwopi51*y1 + stwopi51*x1 &
1014 & + ctwopi52*y2 + stwopi52*x2 &
1015 & + ctwopi53*y3 + stwopi53*x3 &
1016 & + ctwopi54*y4 + stwopi54*x4
1017 work(ioff2+jl +m*((k+2*5**i)*5**(p-i-1))) = &
1018 & x0 + ctwopi52*x1 - stwopi52*y1 &
1019 & + ctwopi54*x2 - stwopi54*y2 &
1020 & + ctwopi51*x3 - stwopi51*y3 &
1021 & + ctwopi53*x4 - stwopi53*y4
1022 work(ioff2+jl+nwork/4+m*((k+2*5**i)*5**(p-i-1))) = &
1023 & y0 + ctwopi52*y1 + stwopi52*x1 &
1024 & + ctwopi54*y2 + stwopi54*x2 &
1025 & + ctwopi51*y3 + stwopi51*x3 &
1026 & + ctwopi53*y4 + stwopi53*x4
1027 work(ioff2+jl +m*((k+3*5**i)*5**(p-i-1))) = &
1028 & x0 + ctwopi53*x1 - stwopi53*y1 &
1029 & + ctwopi51*x2 - stwopi51*y2 &
1030 & + ctwopi54*x3 - stwopi54*y3 &
1031 & + ctwopi52*x4 - stwopi52*y4
1032 work(ioff2+jl+nwork/4+m*((k+3*5**i)*5**(p-i-1))) = &
1033 & y0 + ctwopi53*y1 + stwopi53*x1 &
1034 & + ctwopi51*y2 + stwopi51*x2 &
1035 & + ctwopi54*y3 + stwopi54*x3 &
1036 & + ctwopi52*y4 + stwopi52*x4
1037 work(ioff2+jl +m*((k+4*5**i)*5**(p-i-1))) = &
1038 & x0 + ctwopi54*x1 - stwopi54*y1 &
1039 & + ctwopi53*x2 - stwopi53*y2 &
1040 & + ctwopi52*x3 - stwopi52*y3 &
1041 & + ctwopi51*x4 - stwopi51*y4
1042 work(ioff2+jl+nwork/4+m*((k+4*5**i)*5**(p-i-1))) = &
1043 & y0 + ctwopi54*y1 + stwopi54*x1 &
1044 & + ctwopi53*y2 + stwopi53*x2 &
1045 & + ctwopi52*y3 + stwopi52*x3 &
1046 & + ctwopi51*y4 + stwopi51*x4
1055 ioff1 = nwork/2-ioff1
1056 ioff2 = nwork/2-ioff2
1173SUBROUTINE jmcsm1d(m,n,fact,nfact,ifact,table,ntable,itable,work,nwork,ioff)
1178 INTEGER,
INTENT(in) :: m, n
1179 INTEGER,
INTENT(in) :: nfact, ifact
1180 INTEGER,
INTENT(inout),
DIMENSION(0:nfact-1) :: fact
1181 INTEGER,
INTENT(in) :: ntable,itable
1182 REAL(kind=
gft_prec),
INTENT(inout),
DIMENSION(0:ntable-1) :: table
1183 INTEGER,
INTENT(in) :: nwork
1184 REAL(kind=
gft_prec),
INTENT(inout),
DIMENSION(0:nwork-1) :: work
1185 INTEGER,
INTENT(inout) :: ioff
1188 INTEGER :: ioff1, ioff2
1190 REAL(kind=
gft_prec) :: t, u, v, w, tt, uu, vv, ww
1196 ioff2 = nwork/2 - ioff1
1200 IF (mod(m,2) == 0)
THEN
1204 IF (m/2 >= 16 .OR. n/2 < 8)
THEN
1213 t = work(ioff1 +i*m+j )
1214 u = work(ioff1+nwork/4+i*m+j )
1215 v = work(ioff1 +i*m+j+m/2)
1216 w = work(ioff1+nwork/4+i*m+j+m/2)
1217 work(ioff2 + i*m/2+j) = (t-w)
1218 work(ioff2+nwork/4+ i*m/2+j) = (u+v)
1219 work(ioff2 +it*m/2+j) = (t+w)
1220 work(ioff2+nwork/4+it*m/2+j) = (v-u)
1233 t = work(ioff1 +i*m+j )
1234 u = work(ioff1+nwork/4+i*m+j )
1235 v = work(ioff1 +i*m+j+m/2)
1236 w = work(ioff1+nwork/4+i*m+j+m/2)
1237 work(ioff2 + i*m/2+j) = (t-w)
1238 work(ioff2+nwork/4+ i*m/2+j) = (u+v)
1239 work(ioff2 +it*m/2+j) = (t+w)
1240 work(ioff2+nwork/4+it*m/2+j) = (v-u)
1247 CALL jmccm1d(m/2,n,fact,nfact,ifact,table,ntable,itable,work,nwork,ioff2)
1248 ioff1 = nwork/2 - ioff2
1252 IF (m/2 >= 16 .OR. n < 8)
THEN
1259 work(ioff1+i*m+j ) = work(ioff2 +i*m/2+j)
1260 work(ioff1+i*m+j+m/2) = work(ioff2+nwork/4+i*m/2+j)
1271 work(ioff1+i*m+j ) = work(ioff2 +i*m/2+j)
1272 work(ioff1+i*m+j+m/2) = work(ioff2+nwork/4+i*m/2+j)
1279 ELSE IF (mod(n,2) == 0)
THEN
1283 IF (m >= 16 .OR. n/2 < 8)
THEN
1291 t = work(ioff1 + i*m+j)
1292 u = -work(ioff1+nwork/4+ i*m+j)
1293 v = work(ioff1 +(n/2-i)*m+j)
1294 w = -work(ioff1+nwork/4+(n/2-i)*m+j)
1296 s = table(itable+i+n)
1297 tt = (t+v)/2.0_gft_prec
1298 uu = (u-w)/2.0_gft_prec
1299 vv = (c*(t-v)+s*(u+w))/2.0_gft_prec
1300 ww = (c*(u+w)-s*(t-v))/2.0_gft_prec
1302 work(ioff2 +m*i+j) = 2.0_gft_prec*(tt-ww)
1303 work(ioff2+nwork/4+m*i+j) = -2.0_gft_prec*(uu+vv)
1315 t = work(ioff1 + i*m+j)
1316 u = -work(ioff1+nwork/4+ i*m+j)
1317 v = work(ioff1 +(n/2-i)*m+j)
1318 w = -work(ioff1+nwork/4+(n/2-i)*m+j)
1320 s = table(itable+i+n)
1321 tt = (t+v)/2.0_gft_prec
1322 uu = (u-w)/2.0_gft_prec
1323 vv = (c*(t-v)+s*(u+w))/2.0_gft_prec
1324 ww = (c*(u+w)-s*(t-v))/2.0_gft_prec
1326 work(ioff2 +m*i+j) = 2.0_gft_prec*(tt-ww)
1327 work(ioff2+nwork/4+m*i+j) = -2.0_gft_prec*(uu+vv)
1334 fact(ifact+1) = fact(ifact+1)/2
1335 fact(ifact+2) = fact(ifact+2)-1
1336 CALL jmccm1d(m,n,fact,nfact,ifact,table,ntable,itable,work,nwork,ioff2)
1337 fact(ifact+1) = fact(ifact+1)*2
1338 fact(ifact+2) = fact(ifact+2)+1
1339 ioff1 = nwork/2 - ioff2
1343 IF (m >= 16 .OR. n/2 < 8)
THEN
1351 work(ioff1+m*(2*i )+j) = work(ioff2 +m*i+j)
1352 work(ioff1+m*(2*i+1)+j) = -work(ioff2+nwork/4+m*i+j)
1364 work(ioff1+m*(2*i )+j) = work(ioff2 +m*i+j)
1365 work(ioff1+m*(2*i+1)+j) = -work(ioff2+nwork/4+m*i+j)
1378SUBROUTINE jmcsm1dxy(m,n,fact,nfact,ifact,table,ntable,itable,work,nwork,x,dimx,debx,incx,jumpx,y,dimy,deby,incy,jumpy,isign,scale)
1383 INTEGER,
INTENT(in) :: m, n
1384 INTEGER,
INTENT(in) :: nfact, ifact
1385 INTEGER,
INTENT(inout),
DIMENSION(0:nfact-1) :: fact
1386 INTEGER,
INTENT(in) :: ntable,itable
1387 REAL(kind=
gft_prec),
INTENT(in),
DIMENSION(0:ntable-1) :: table
1388 INTEGER,
INTENT(in) :: nwork
1389 REAL(kind=
gft_prec),
INTENT(inout),
DIMENSION(0:nwork-1) :: work
1390 INTEGER,
INTENT(in) :: dimx, debx, incx, jumpx
1391 INTEGER,
INTENT(in) :: dimy, deby, incy, jumpy
1392 REAL(kind=
gft_prec),
INTENT(in),
DIMENSION(0:dimx-1) :: x
1393 REAL(kind=
gft_prec),
INTENT(out),
DIMENSION(0:dimy-1) :: y
1394 INTEGER,
INTENT(in) :: isign
1395 REAL(kind=
gft_prec),
INTENT(in) :: scale
1399 REAL(kind=
gft_prec) :: t, u, v, w, tt, uu, vv, ww
1406 IF (mod(m,2) == 0)
THEN
1410 IF (m/2 >= 16 .OR. n/2 < 8)
THEN
1419 t = scale*x(debx+incx*(2*i )+jumpx*(j ))
1420 u = isign*scale*x(debx+incx*(2*i+1)+jumpx*(j ))
1421 v = scale*x(debx+incx*(2*i )+jumpx*(j+m/2))
1422 w = isign*scale*x(debx+incx*(2*i+1)+jumpx*(j+m/2))
1423 work( i*m/2+j) = (t-w)
1424 work(nwork/4+ i*m/2+j) = (u+v)
1425 work( it*m/2+j) = (t+w)
1426 work(nwork/4+it*m/2+j) = (v-u)
1439 t = scale*x(debx+incx*(2*i )+jumpx*(j ))
1440 u = isign*scale*x(debx+incx*(2*i+1)+jumpx*(j ))
1441 v = scale*x(debx+incx*(2*i )+jumpx*(j+m/2))
1442 w = isign*scale*x(debx+incx*(2*i+1)+jumpx*(j+m/2))
1443 work( i*m/2+j) = (t-w)
1444 work(nwork/4+ i*m/2+j) = (u+v)
1445 work( it*m/2+j) = (t+w)
1446 work(nwork/4+it*m/2+j) = (v-u)
1454 CALL jmccm1d(m/2,n,fact,nfact,ifact,table,ntable,itable,work,nwork,ioff)
1458 IF (m/2 >= 16 .OR. n < 8)
THEN
1465 y(deby+jumpy*(j )+incy*i) = work(ioff +i*m/2+j)
1466 y(deby+jumpy*(j+m/2)+incy*i) = work(ioff+nwork/4+i*m/2+j)
1477 y(deby+jumpy*(j )+incy*i) = work(ioff +i*m/2+j)
1478 y(deby+jumpy*(j+m/2)+incy*i) = work(ioff+nwork/4+i*m/2+j)
1485 ELSE IF (mod(n,2) == 0)
THEN
1489 IF (m >= 16 .OR. n/2 < 8)
THEN
1497 t = scale*x(debx+(2*i) *incx+j*jumpx)
1498 u = -isign*scale*x(debx+(2*i+1)*incx+j*jumpx)
1499 v = scale*x(debx+(2*(n/2-i) )*incx+j*jumpx)
1500 w = -isign*scale*x(debx+(2*(n/2-i)+1)*incx+j*jumpx)
1502 s = table(itable+i+n)
1503 tt = (t+v)/2.0_gft_prec
1504 uu = (u-w)/2.0_gft_prec
1505 vv = (c*(t-v)+s*(u+w))/2.0_gft_prec
1506 ww = (c*(u+w)-s*(t-v))/2.0_gft_prec
1508 work( m*i+j) = 2.0_gft_prec*(tt-ww)
1509 work(nwork/4+m*i+j) = -2.0_gft_prec*(uu+vv)
1521 t = scale*x(debx+(2*i) *incx+j*jumpx)
1522 u = -isign*scale*x(debx+(2*i+1)*incx+j*jumpx)
1523 v = scale*x(debx+(2*(n/2-i) )*incx+j*jumpx)
1524 w = -isign*scale*x(debx+(2*(n/2-i)+1)*incx+j*jumpx)
1526 s = table(itable+i+n)
1527 tt = (t+v)/2.0_gft_prec
1528 uu = (u-w)/2.0_gft_prec
1529 vv = (c*(t-v)+s*(u+w))/2.0_gft_prec
1530 ww = (c*(u+w)-s*(t-v))/2.0_gft_prec
1532 work( m*i+j) = 2.0_gft_prec*(tt-ww)
1533 work(nwork/4+m*i+j) = -2.0_gft_prec*(uu+vv)
1541 fact(ifact+1) = fact(ifact+1)/2
1542 fact(ifact+2) = fact(ifact+2)-1
1543 CALL jmccm1d(m,n,fact,nfact,ifact,table,ntable,itable,work,nwork,ioff)
1544 fact(ifact+1) = fact(ifact+1)*2
1545 fact(ifact+2) = fact(ifact+2)+1
1549 IF (m >= 16 .OR. n/2 < 8)
THEN
1557 y(deby+incy*(2*i )+jumpy*j) = work(ioff +m*i+j)
1558 y(deby+incy*(2*i+1)+jumpy*j) = -work(ioff+nwork/4+m*i+j)
1570 y(deby+incy*(2*i )+jumpy*j) = work(ioff +m*i+j)
1571 y(deby+incy*(2*i+1)+jumpy*j) = -work(ioff+nwork/4+m*i+j)
1581SUBROUTINE jmscm1d(m,n,fact,nfact,ifact,table,ntable,itable,work,nwork,ioff)
1586 INTEGER,
INTENT(in) :: m, n
1587 INTEGER,
INTENT(in) :: nfact, ifact
1588 INTEGER,
INTENT(inout),
DIMENSION(0:nfact-1) :: fact
1589 INTEGER,
INTENT(in) :: ntable,itable
1590 REAL(kind=
gft_prec),
INTENT(in),
DIMENSION(0:ntable-1) :: table
1591 INTEGER,
INTENT(in) :: nwork
1592 REAL(kind=
gft_prec),
INTENT(inout),
DIMENSION(0:nwork-1) :: work
1593 INTEGER,
INTENT(inout) :: ioff
1596 INTEGER :: ioff1, ioff2
1604 ioff2 = nwork/2 - ioff1
1608 IF (mod(m,2) == 0)
THEN
1611 IF (m/2 >= 16 .OR. n < 8)
THEN
1618 work(ioff2 +i*m/2+j) = work(ioff1+i*m+j )
1619 work(ioff2+nwork/4+i*m/2+j) = work(ioff1+i*m+j+m/2)
1630 work(ioff2 +i*m/2+j) = work(ioff1+i*m+j )
1631 work(ioff2+nwork/4+i*m/2+j) = work(ioff1+i*m+j+m/2)
1638 CALL jmccm1d(m/2,n,fact,nfact,ifact,table,ntable,itable,work,nwork,ioff2)
1639 ioff1 = nwork/2 - ioff2
1642 IF (m/2 >= 16 .OR. n/2 < 8)
THEN
1651 t = work(ioff2 + i*m/2+j)
1652 u = work(ioff2+nwork/4+ i*m/2+j)
1653 v = work(ioff2 +it*m/2+j)
1654 w = work(ioff2+nwork/4+it*m/2+j)
1655 work(ioff1 +i*m+j ) = (t+v)/2.0_gft_prec
1656 work(ioff1+nwork/4+i*m+j ) = (u-w)/2.0_gft_prec
1657 work(ioff1 +i*m+j+m/2) = (u+w)/2.0_gft_prec
1658 work(ioff1+nwork/4+i*m+j+m/2) = (v-t)/2.0_gft_prec
1671 t = work(ioff2 + i*m/2+j)
1672 u = work(ioff2+nwork/4+ i*m/2+j)
1673 v = work(ioff2 +it*m/2+j)
1674 w = work(ioff2+nwork/4+it*m/2+j)
1675 work(ioff1 +i*m+j ) = (t+v)/2.0_gft_prec
1676 work(ioff1+nwork/4+i*m+j ) = (u-w)/2.0_gft_prec
1677 work(ioff1 +i*m+j+m/2) = (u+w)/2.0_gft_prec
1678 work(ioff1+nwork/4+i*m+j+m/2) = (v-t)/2.0_gft_prec
1685 ELSE IF (mod(n,2) == 0)
THEN
1689 IF (m >= 16 .OR. n/2 < 8)
THEN
1696 work(ioff2+ m*i+j) = work(ioff1+m*(2*i )+j)
1697 work(ioff2+nwork/4+m*i+j) = work(ioff1+m*(2*i+1)+j)
1708 work(ioff2+ m*i+j) = work(ioff1+m*(2*i )+j)
1709 work(ioff2+nwork/4+m*i+j) = work(ioff1+m*(2*i+1)+j)
1716 fact(ifact+1) = fact(ifact+1)/2
1717 fact(ifact+2) = fact(ifact+2)-1
1718 CALL jmccm1d(m,n,fact,nfact,ifact,table,ntable,itable,work,nwork,ioff2)
1719 fact(ifact+1) = fact(ifact+1)*2
1720 fact(ifact+2) = fact(ifact+2)+1
1721 ioff1 = nwork/2 - ioff2
1725 IF (m >= 16 .OR. n/2 < 8)
THEN
1734 IF (i == 0 .OR. i == n/2)
THEN
1738 t = work(ioff2 +is*m+j)
1739 u = work(ioff2+nwork/4+is*m+j)
1740 v = work(ioff2 +it*m+j)
1741 w = work(ioff2+nwork/4+it*m+j)
1743 s = table(itable+i+n)
1744 work(ioff1 +i*m+j) = (t+v)/2.0_gft_prec + c*(u+w)/2.0_gft_prec - s*(v-t)/2.0_gft_prec
1745 work(ioff1+nwork/4+i*m+j) = (u-w)/2.0_gft_prec + c*(v-t)/2.0_gft_prec + s*(u+w)/2.0_gft_prec
1758 IF (i == 0 .OR. i == n/2)
THEN
1762 t = work(ioff2 +is*m+j)
1763 u = work(ioff2+nwork/4+is*m+j)
1764 v = work(ioff2 +it*m+j)
1765 w = work(ioff2+nwork/4+it*m+j)
1767 s = table(itable+i+n)
1768 work(ioff1 +i*m+j) = (t+v)/2.0_gft_prec + c*(u+w)/2.0_gft_prec - s*(v-t)/2.0_gft_prec
1769 work(ioff1+nwork/4+i*m+j) = (u-w)/2.0_gft_prec + c*(v-t)/2.0_gft_prec + s*(u+w)/2.0_gft_prec
1782SUBROUTINE jmscm1dxy(m,n,fact,nfact,ifact,table,ntable,itable,work,nwork,x,dimx,debx,incx,jumpx,y,dimy,deby,incy,jumpy,isign,scale)
1787 INTEGER,
INTENT(in) :: m, n
1788 INTEGER,
INTENT(in) :: nfact, ifact
1789 INTEGER,
INTENT(inout),
DIMENSION(0:nfact-1) :: fact
1790 INTEGER,
INTENT(in) :: ntable,itable
1791 REAL(kind=
gft_prec),
INTENT(in),
DIMENSION(0:ntable-1) :: table
1792 INTEGER,
INTENT(in) :: nwork
1793 REAL(kind=
gft_prec),
INTENT(inout),
DIMENSION(0:nwork-1) :: work
1794 INTEGER,
INTENT(in) :: dimx, debx, incx, jumpx
1795 INTEGER,
INTENT(in) :: dimy, deby, incy, jumpy
1796 REAL(kind=
gft_prec),
INTENT(in) :: scale
1797 REAL(kind=
gft_prec),
INTENT(in),
DIMENSION(0:dimx-1) :: x
1798 REAL(kind=
gft_prec),
INTENT(out),
DIMENSION(0:dimy-1) :: y
1799 INTEGER,
INTENT(in) :: isign
1810 IF (mod(m,2) == 0)
THEN
1813 IF (m/2 >= 16 .OR. n < 8)
THEN
1820 work( i*m/2+j) = x(debx+i*incx+(j) *jumpx)
1821 work(nwork/4+i*m/2+j) = x(debx+i*incx+(j+m/2)*jumpx)
1832 work( i*m/2+j) = x(debx+i*incx+(j) *jumpx)
1833 work(nwork/4+i*m/2+j) = x(debx+i*incx+(j+m/2)*jumpx)
1841 CALL jmccm1d(m/2,n,fact,nfact,ifact,table,ntable,itable,work,nwork,ioff)
1844 IF (m/2 >= 16 .OR. n/2 < 8)
THEN
1853 t = work(ioff + i*m/2+j)
1854 u = work(ioff+nwork/4+ i*m/2+j)
1855 v = work(ioff +it*m/2+j)
1856 w = work(ioff+nwork/4+it*m/2+j)
1857 y(deby+(2*i) *incy+(j) *jumpy) = scale*(t+v)/2.0_gft_prec
1858 y(deby+(2*i+1)*incy+(j) *jumpy) = isign*scale*(u-w)/2.0_gft_prec
1859 y(deby+(2*i) *incy+(j+m/2)*jumpy) = scale*(u+w)/2.0_gft_prec
1860 y(deby+(2*i+1)*incy+(j+m/2)*jumpy) = isign*scale*(v-t)/2.0_gft_prec
1873 t = work(ioff + i*m/2+j)
1874 u = work(ioff+nwork/4+ i*m/2+j)
1875 v = work(ioff +it*m/2+j)
1876 w = work(ioff+nwork/4+it*m/2+j)
1877 y(deby+(2*i) *incy+(j) *jumpy) = scale*(t+v)/2.0_gft_prec
1878 y(deby+(2*i+1)*incy+(j) *jumpy) = isign*scale*(u-w)/2.0_gft_prec
1879 y(deby+(2*i) *incy+(j+m/2)*jumpy) = scale*(u+w)/2.0_gft_prec
1880 y(deby+(2*i+1)*incy+(j+m/2)*jumpy) = isign*scale*(v-t)/2.0_gft_prec
1887 ELSE IF (mod(n,2) == 0)
THEN
1891 IF (m >= 16 .OR. n/2 < 8)
THEN
1898 work( m*i+j) = x(debx+incx*(2*i )+jumpx*j)
1899 work(nwork/4+m*i+j) = x(debx+incx*(2*i+1)+jumpx*j)
1910 work( m*i+j) = x(debx+incx*(2*i )+jumpx*j)
1911 work(nwork/4+m*i+j) = x(debx+incx*(2*i+1)+jumpx*j)
1919 fact(ifact+1) = fact(ifact+1)/2
1920 fact(ifact+2) = fact(ifact+2)-1
1921 CALL jmccm1d(m,n,fact,nfact,ifact,table,ntable,itable,work,nwork,ioff)
1922 fact(ifact+1) = fact(ifact+1)*2
1923 fact(ifact+2) = fact(ifact+2)+1
1927 IF (m >= 16 .OR. n/2 < 8)
THEN
1936 IF (i == 0 .OR. i == n/2)
THEN
1940 t = work(ioff +is*m+j)
1941 u = work(ioff+nwork/4+is*m+j)
1942 v = work(ioff +it*m+j)
1943 w = work(ioff+nwork/4+it*m+j)
1945 s = table(itable+i+n)
1946 y(deby+(2*i )*incy+j*jumpy) = &
1947 & scale*((t+v)/2.0_gft_prec + c*(u+w)/2.0_gft_prec - s*(v-t)/2.0_gft_prec)
1948 y(deby+(2*i+1)*incy+j*jumpy) = &
1949 & isign*scale*((u-w)/2.0_gft_prec + c*(v-t)/2.0_gft_prec + s*(u+w)/2.0_gft_prec)
1962 IF (i == 0 .OR. i == n/2)
THEN
1966 t = work(ioff +is*m+j)
1967 u = work(ioff+nwork/4+is*m+j)
1968 v = work(ioff +it*m+j)
1969 w = work(ioff+nwork/4+it*m+j)
1971 s = table(itable+i+n)
1972 y(deby+(2*i )*incy+j*jumpy) = &
1973 & scale*((t+v)/2.0_gft_prec + c*(u+w)/2.0_gft_prec - s*(v-t)/2.0_gft_prec)
1974 y(deby+(2*i+1)*incy+j*jumpy) = &
1975 & isign*scale*((u-w)/2.0_gft_prec + c*(v-t)/2.0_gft_prec + s*(u+w)/2.0_gft_prec)