ParaMonte Fortran 2.0.0
Parallel Monte Carlo and Machine Learning Library
See the latest version documentation.
pm_fftpack.F90
Go to the documentation of this file.
1!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3!!!! !!!!
4!!!! ParaMonte: Parallel Monte Carlo and Machine Learning Library. !!!!
5!!!! !!!!
6!!!! Copyright (C) 2012-present, The Computational Data Science Lab !!!!
7!!!! !!!!
8!!!! This file is part of the ParaMonte library. !!!!
9!!!! !!!!
10!!!! LICENSE !!!!
11!!!! !!!!
12!!!! https://github.com/cdslaborg/paramonte/blob/main/LICENSE.md !!!!
13!!!! !!!!
14!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
15!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
16
202
203!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
204
206
207 use pm_kind, only: SK, IK, LK
209
210 implicit none
211
212 character(*, SK), parameter :: MODULE_NAME = "@pm_fftpack"
213
214!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
215
292 interface getFactorFFT
293
294 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
295 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
296 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
297
298 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
299
300#if CK5_ENABLED
301 PURE module function setFactorFFTDXX_CK5(data) result(factor)
302#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
303 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDXX_CK5
304#endif
305 use pm_kind, only: CKG => CK5
306 complex(CKG), intent(in) , contiguous :: data(:)
307 integer(IK) , allocatable :: factor(:)
308 end function
309#endif
310
311#if CK4_ENABLED
312 PURE module function setFactorFFTDXX_CK4(data) result(factor)
313#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
314 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDXX_CK4
315#endif
316 use pm_kind, only: CKG => CK4
317 complex(CKG), intent(in) , contiguous :: data(:)
318 integer(IK) , allocatable :: factor(:)
319 end function
320#endif
321
322#if CK3_ENABLED
323 PURE module function setFactorFFTDXX_CK3(data) result(factor)
324#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
325 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDXX_CK3
326#endif
327 use pm_kind, only: CKG => CK3
328 complex(CKG), intent(in) , contiguous :: data(:)
329 integer(IK) , allocatable :: factor(:)
330 end function
331#endif
332
333#if CK2_ENABLED
334 PURE module function setFactorFFTDXX_CK2(data) result(factor)
335#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
336 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDXX_CK2
337#endif
338 use pm_kind, only: CKG => CK2
339 complex(CKG), intent(in) , contiguous :: data(:)
340 integer(IK) , allocatable :: factor(:)
341 end function
342#endif
343
344#if CK1_ENABLED
345 PURE module function setFactorFFTDXX_CK1(data) result(factor)
346#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
347 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDXX_CK1
348#endif
349 use pm_kind, only: CKG => CK1
350 complex(CKG), intent(in) , contiguous :: data(:)
351 integer(IK) , allocatable :: factor(:)
352 end function
353#endif
354
355 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
356
357#if RK5_ENABLED
358 PURE module function setFactorFFTDXX_RK5(data) result(factor)
359#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
360 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDXX_RK5
361#endif
362 use pm_kind, only: RKG => RK5
363 real(RKG) , intent(in) , contiguous :: data(:)
364 integer(IK) , allocatable :: factor(:)
365 end function
366#endif
367
368#if RK4_ENABLED
369 PURE module function setFactorFFTDXX_RK4(data) result(factor)
370#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
371 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDXX_RK4
372#endif
373 use pm_kind, only: RKG => RK4
374 real(RKG) , intent(in) , contiguous :: data(:)
375 integer(IK) , allocatable :: factor(:)
376 end function
377#endif
378
379#if RK3_ENABLED
380 PURE module function setFactorFFTDXX_RK3(data) result(factor)
381#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
382 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDXX_RK3
383#endif
384 use pm_kind, only: RKG => RK3
385 real(RKG) , intent(in) , contiguous :: data(:)
386 integer(IK) , allocatable :: factor(:)
387 end function
388#endif
389
390#if RK2_ENABLED
391 PURE module function setFactorFFTDXX_RK2(data) result(factor)
392#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
393 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDXX_RK2
394#endif
395 use pm_kind, only: RKG => RK2
396 real(RKG) , intent(in) , contiguous :: data(:)
397 integer(IK) , allocatable :: factor(:)
398 end function
399#endif
400
401#if RK1_ENABLED
402 PURE module function setFactorFFTDXX_RK1(data) result(factor)
403#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
404 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDXX_RK1
405#endif
406 use pm_kind, only: RKG => RK1
407 real(RKG) , intent(in) , contiguous :: data(:)
408 integer(IK) , allocatable :: factor(:)
409 end function
410#endif
411
412 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
413
414 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
415 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
416 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
417
418 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
419
420#if CK5_ENABLED
421 impure module function setFactorFFTDCX_CK5(data, coef) result(factor)
422#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
423 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDCX_CK5
424#endif
425 use pm_kind, only: CKG => CK5
426 complex(CKG), intent(in) , contiguous :: data(:)
427 complex(CKG), intent(out) , contiguous :: coef(:)
428 integer(IK) , allocatable :: factor(:)
429 end function
430#endif
431
432#if CK4_ENABLED
433 impure module function setFactorFFTDCX_CK4(data, coef) result(factor)
434#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
435 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDCX_CK4
436#endif
437 use pm_kind, only: CKG => CK4
438 complex(CKG), intent(in) , contiguous :: data(:)
439 complex(CKG), intent(out) , contiguous :: coef(:)
440 integer(IK) , allocatable :: factor(:)
441 end function
442#endif
443
444#if CK3_ENABLED
445 impure module function setFactorFFTDCX_CK3(data, coef) result(factor)
446#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
447 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDCX_CK3
448#endif
449 use pm_kind, only: CKG => CK3
450 complex(CKG), intent(in) , contiguous :: data(:)
451 complex(CKG), intent(out) , contiguous :: coef(:)
452 integer(IK) , allocatable :: factor(:)
453 end function
454#endif
455
456#if CK2_ENABLED
457 impure module function setFactorFFTDCX_CK2(data, coef) result(factor)
458#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
459 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDCX_CK2
460#endif
461 use pm_kind, only: CKG => CK2
462 complex(CKG), intent(in) , contiguous :: data(:)
463 complex(CKG), intent(out) , contiguous :: coef(:)
464 integer(IK) , allocatable :: factor(:)
465 end function
466#endif
467
468#if CK1_ENABLED
469 impure module function setFactorFFTDCX_CK1(data, coef) result(factor)
470#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
471 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDCX_CK1
472#endif
473 use pm_kind, only: CKG => CK1
474 complex(CKG), intent(in) , contiguous :: data(:)
475 complex(CKG), intent(out) , contiguous :: coef(:)
476 integer(IK) , allocatable :: factor(:)
477 end function
478#endif
479
480 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
481
482#if RK5_ENABLED
483 impure module function setFactorFFTDCX_RK5(data, coef) result(factor)
484#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
485 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDCX_RK5
486#endif
487 use pm_kind, only: RKG => RK5
488 real(RKG) , intent(in) , contiguous :: data(:)
489 real(RKG) , intent(out) , contiguous :: coef(:)
490 integer(IK) , allocatable :: factor(:)
491 end function
492#endif
493
494#if RK4_ENABLED
495 impure module function setFactorFFTDCX_RK4(data, coef) result(factor)
496#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
497 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDCX_RK4
498#endif
499 use pm_kind, only: RKG => RK4
500 real(RKG) , intent(in) , contiguous :: data(:)
501 real(RKG) , intent(out) , contiguous :: coef(:)
502 integer(IK) , allocatable :: factor(:)
503 end function
504#endif
505
506#if RK3_ENABLED
507 impure module function setFactorFFTDCX_RK3(data, coef) result(factor)
508#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
509 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDCX_RK3
510#endif
511 use pm_kind, only: RKG => RK3
512 real(RKG) , intent(in) , contiguous :: data(:)
513 real(RKG) , intent(out) , contiguous :: coef(:)
514 integer(IK) , allocatable :: factor(:)
515 end function
516#endif
517
518#if RK2_ENABLED
519 impure module function setFactorFFTDCX_RK2(data, coef) result(factor)
520#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
521 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDCX_RK2
522#endif
523 use pm_kind, only: RKG => RK2
524 real(RKG) , intent(in) , contiguous :: data(:)
525 real(RKG) , intent(out) , contiguous :: coef(:)
526 integer(IK) , allocatable :: factor(:)
527 end function
528#endif
529
530#if RK1_ENABLED
531 impure module function setFactorFFTDCX_RK1(data, coef) result(factor)
532#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
533 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDCX_RK1
534#endif
535 use pm_kind, only: RKG => RK1
536 real(RKG) , intent(in) , contiguous :: data(:)
537 real(RKG) , intent(out) , contiguous :: coef(:)
538 integer(IK) , allocatable :: factor(:)
539 end function
540#endif
541
542 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
543
544 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
545 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
546 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
547
548 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
549
550#if CK5_ENABLED
551 impure module function setFactorFFTDCA_CK5(data, coef, attr) result(factor)
552#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
553 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDCA_CK5
554#endif
555 use pm_kind, only: CKG => CK5
556 complex(CKG), intent(in) , contiguous :: data(:)
557 complex(CKG), intent(out) , allocatable :: coef(:)
558 integer(IK) , allocatable :: factor(:)
559 type(allocatable_type) , intent(in) :: attr
560 end function
561#endif
562
563#if CK4_ENABLED
564 impure module function setFactorFFTDCA_CK4(data, coef, attr) result(factor)
565#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
566 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDCA_CK4
567#endif
568 use pm_kind, only: CKG => CK4
569 complex(CKG), intent(in) , contiguous :: data(:)
570 complex(CKG), intent(out) , allocatable :: coef(:)
571 integer(IK) , allocatable :: factor(:)
572 type(allocatable_type) , intent(in) :: attr
573 end function
574#endif
575
576#if CK3_ENABLED
577 impure module function setFactorFFTDCA_CK3(data, coef, attr) result(factor)
578#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
579 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDCA_CK3
580#endif
581 use pm_kind, only: CKG => CK3
582 complex(CKG), intent(in) , contiguous :: data(:)
583 complex(CKG), intent(out) , allocatable :: coef(:)
584 integer(IK) , allocatable :: factor(:)
585 type(allocatable_type) , intent(in) :: attr
586 end function
587#endif
588
589#if CK2_ENABLED
590 impure module function setFactorFFTDCA_CK2(data, coef, attr) result(factor)
591#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
592 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDCA_CK2
593#endif
594 use pm_kind, only: CKG => CK2
595 complex(CKG), intent(in) , contiguous :: data(:)
596 complex(CKG), intent(out) , allocatable :: coef(:)
597 integer(IK) , allocatable :: factor(:)
598 type(allocatable_type) , intent(in) :: attr
599 end function
600#endif
601
602#if CK1_ENABLED
603 impure module function setFactorFFTDCA_CK1(data, coef, attr) result(factor)
604#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
605 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDCA_CK1
606#endif
607 use pm_kind, only: CKG => CK1
608 complex(CKG), intent(in) , contiguous :: data(:)
609 complex(CKG), intent(out) , allocatable :: coef(:)
610 integer(IK) , allocatable :: factor(:)
611 type(allocatable_type) , intent(in) :: attr
612 end function
613#endif
614
615 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
616
617#if RK5_ENABLED
618 impure module function setFactorFFTDCA_RK5(data, coef, attr) result(factor)
619#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
620 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDCA_RK5
621#endif
622 use pm_kind, only: RKG => RK5
623 real(RKG) , intent(in) , contiguous :: data(:)
624 real(RKG) , intent(out) , allocatable :: coef(:)
625 integer(IK) , allocatable :: factor(:)
626 type(allocatable_type) , intent(in) :: attr
627 end function
628#endif
629
630#if RK4_ENABLED
631 impure module function setFactorFFTDCA_RK4(data, coef, attr) result(factor)
632#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
633 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDCA_RK4
634#endif
635 use pm_kind, only: RKG => RK4
636 real(RKG) , intent(in) , contiguous :: data(:)
637 real(RKG) , intent(out) , allocatable :: coef(:)
638 integer(IK) , allocatable :: factor(:)
639 type(allocatable_type) , intent(in) :: attr
640 end function
641#endif
642
643#if RK3_ENABLED
644 impure module function setFactorFFTDCA_RK3(data, coef, attr) result(factor)
645#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
646 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDCA_RK3
647#endif
648 use pm_kind, only: RKG => RK3
649 real(RKG) , intent(in) , contiguous :: data(:)
650 real(RKG) , intent(out) , allocatable :: coef(:)
651 integer(IK) , allocatable :: factor(:)
652 type(allocatable_type) , intent(in) :: attr
653 end function
654#endif
655
656#if RK2_ENABLED
657 impure module function setFactorFFTDCA_RK2(data, coef, attr) result(factor)
658#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
659 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDCA_RK2
660#endif
661 use pm_kind, only: RKG => RK2
662 real(RKG) , intent(in) , contiguous :: data(:)
663 real(RKG) , intent(out) , allocatable :: coef(:)
664 integer(IK) , allocatable :: factor(:)
665 type(allocatable_type) , intent(in) :: attr
666 end function
667#endif
668
669#if RK1_ENABLED
670 impure module function setFactorFFTDCA_RK1(data, coef, attr) result(factor)
671#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
672 !DEC$ ATTRIBUTES DLLEXPORT :: setFactorFFTDCA_RK1
673#endif
674 use pm_kind, only: RKG => RK1
675 real(RKG) , intent(in) , contiguous :: data(:)
676 real(RKG) , intent(out) , allocatable :: coef(:)
677 integer(IK) , allocatable :: factor(:)
678 type(allocatable_type) , intent(in) :: attr
679 end function
680#endif
681
682 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
683
684 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
685 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
686 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
687
688 end interface
689
690!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
691
746 interface getFFTF
747
748 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
749
750#if CK5_ENABLED
751 impure module function getFFTF_CK5(data) result(fft)
752#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
753 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTF_CK5
754#endif
755 use pm_kind, only: CKG => CK5
756 complex(CKG), intent(in) , contiguous :: data(:)
757 complex(CKG) :: fft(size(data, 1, IK))
758 end function
759#endif
760
761#if CK4_ENABLED
762 impure module function getFFTF_CK4(data) result(fft)
763#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
764 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTF_CK4
765#endif
766 use pm_kind, only: CKG => CK4
767 complex(CKG), intent(in) , contiguous :: data(:)
768 complex(CKG) :: fft(size(data, 1, IK))
769 end function
770#endif
771
772#if CK3_ENABLED
773 impure module function getFFTF_CK3(data) result(fft)
774#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
775 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTF_CK3
776#endif
777 use pm_kind, only: CKG => CK3
778 complex(CKG), intent(in) , contiguous :: data(:)
779 complex(CKG) :: fft(size(data, 1, IK))
780 end function
781#endif
782
783#if CK2_ENABLED
784 impure module function getFFTF_CK2(data) result(fft)
785#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
786 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTF_CK2
787#endif
788 use pm_kind, only: CKG => CK2
789 complex(CKG), intent(in) , contiguous :: data(:)
790 complex(CKG) :: fft(size(data, 1, IK))
791 end function
792#endif
793
794#if CK1_ENABLED
795 impure module function getFFTF_CK1(data) result(fft)
796#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
797 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTF_CK1
798#endif
799 use pm_kind, only: CKG => CK1
800 complex(CKG), intent(in) , contiguous :: data(:)
801 complex(CKG) :: fft(size(data, 1, IK))
802 end function
803#endif
804
805 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
806
807#if RK5_ENABLED
808 impure module function getFFTF_RK5(data) result(fft)
809#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
810 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTF_RK5
811#endif
812 use pm_kind, only: RKG => RK5
813 real(RKG) , intent(in) , contiguous :: data(:)
814 real(RKG) :: fft(size(data, 1, IK))
815 end function
816#endif
817
818#if RK4_ENABLED
819 impure module function getFFTF_RK4(data) result(fft)
820#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
821 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTF_RK4
822#endif
823 use pm_kind, only: RKG => RK4
824 real(RKG) , intent(in) , contiguous :: data(:)
825 real(RKG) :: fft(size(data, 1, IK))
826 end function
827#endif
828
829#if RK3_ENABLED
830 impure module function getFFTF_RK3(data) result(fft)
831#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
832 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTF_RK3
833#endif
834 use pm_kind, only: RKG => RK3
835 real(RKG) , intent(in) , contiguous :: data(:)
836 real(RKG) :: fft(size(data, 1, IK))
837 end function
838#endif
839
840#if RK2_ENABLED
841 impure module function getFFTF_RK2(data) result(fft)
842#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
843 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTF_RK2
844#endif
845 use pm_kind, only: RKG => RK2
846 real(RKG) , intent(in) , contiguous :: data(:)
847 real(RKG) :: fft(size(data, 1, IK))
848 end function
849#endif
850
851#if RK1_ENABLED
852 impure module function getFFTF_RK1(data) result(fft)
853#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
854 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTF_RK1
855#endif
856 use pm_kind, only: RKG => RK1
857 real(RKG) , intent(in) , contiguous :: data(:)
858 real(RKG) :: fft(size(data, 1, IK))
859 end function
860#endif
861
862 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
863
864 end interface
865
866!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
867
949 interface setFFTF
950
951 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
952
953#if CK5_ENABLED
954 PURE module subroutine setFFTF_CK5(factor, coef, data, work, inwork)
955#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
956 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTF_CK5
957#endif
958 use pm_kind, only: CKG => CK5
959 integer(IK) , intent(in) , contiguous :: factor(:)
960 complex(CKG), intent(in) , contiguous :: coef(:)
961 complex(CKG), intent(inout) , contiguous :: data(:)
962 complex(CKG), intent(out) , contiguous :: work(:)
963 logical(LK) , intent(out) :: inwork
964 end subroutine
965#endif
966
967#if CK4_ENABLED
968 PURE module subroutine setFFTF_CK4(factor, coef, data, work, inwork)
969#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
970 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTF_CK4
971#endif
972 use pm_kind, only: CKG => CK4
973 integer(IK) , intent(in) , contiguous :: factor(:)
974 complex(CKG), intent(in) , contiguous :: coef(:)
975 complex(CKG), intent(inout) , contiguous :: data(:)
976 complex(CKG), intent(out) , contiguous :: work(:)
977 logical(LK) , intent(out) :: inwork
978 end subroutine
979#endif
980
981#if CK3_ENABLED
982 PURE module subroutine setFFTF_CK3(factor, coef, data, work, inwork)
983#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
984 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTF_CK3
985#endif
986 use pm_kind, only: CKG => CK3
987 integer(IK) , intent(in) , contiguous :: factor(:)
988 complex(CKG), intent(in) , contiguous :: coef(:)
989 complex(CKG), intent(inout) , contiguous :: data(:)
990 complex(CKG), intent(out) , contiguous :: work(:)
991 logical(LK) , intent(out) :: inwork
992 end subroutine
993#endif
994
995#if CK2_ENABLED
996 PURE module subroutine setFFTF_CK2(factor, coef, data, work, inwork)
997#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
998 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTF_CK2
999#endif
1000 use pm_kind, only: CKG => CK2
1001 integer(IK) , intent(in) , contiguous :: factor(:)
1002 complex(CKG), intent(in) , contiguous :: coef(:)
1003 complex(CKG), intent(inout) , contiguous :: data(:)
1004 complex(CKG), intent(out) , contiguous :: work(:)
1005 logical(LK) , intent(out) :: inwork
1006 end subroutine
1007#endif
1008
1009#if CK1_ENABLED
1010 PURE module subroutine setFFTF_CK1(factor, coef, data, work, inwork)
1011#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1012 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTF_CK1
1013#endif
1014 use pm_kind, only: CKG => CK1
1015 integer(IK) , intent(in) , contiguous :: factor(:)
1016 complex(CKG), intent(in) , contiguous :: coef(:)
1017 complex(CKG), intent(inout) , contiguous :: data(:)
1018 complex(CKG), intent(out) , contiguous :: work(:)
1019 logical(LK) , intent(out) :: inwork
1020 end subroutine
1021#endif
1022
1023 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1024
1025#if RK5_ENABLED
1026 PURE module subroutine setFFTF_RK5(factor, coef, data, work, inwork)
1027#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1028 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTF_RK5
1029#endif
1030 use pm_kind, only: RKG => RK5
1031 integer(IK) , intent(in) , contiguous :: factor(:)
1032 real(RKG) , intent(in) , contiguous :: coef(:)
1033 real(RKG) , intent(inout) , contiguous :: data(:)
1034 real(RKG) , intent(out) , contiguous :: work(:)
1035 logical(LK) , intent(out) :: inwork
1036 end subroutine
1037#endif
1038
1039#if RK4_ENABLED
1040 PURE module subroutine setFFTF_RK4(factor, coef, data, work, inwork)
1041#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1042 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTF_RK4
1043#endif
1044 use pm_kind, only: RKG => RK4
1045 integer(IK) , intent(in) , contiguous :: factor(:)
1046 real(RKG) , intent(in) , contiguous :: coef(:)
1047 real(RKG) , intent(inout) , contiguous :: data(:)
1048 real(RKG) , intent(out) , contiguous :: work(:)
1049 logical(LK) , intent(out) :: inwork
1050 end subroutine
1051#endif
1052
1053#if RK3_ENABLED
1054 PURE module subroutine setFFTF_RK3(factor, coef, data, work, inwork)
1055#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1056 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTF_RK3
1057#endif
1058 use pm_kind, only: RKG => RK3
1059 integer(IK) , intent(in) , contiguous :: factor(:)
1060 real(RKG) , intent(in) , contiguous :: coef(:)
1061 real(RKG) , intent(inout) , contiguous :: data(:)
1062 real(RKG) , intent(out) , contiguous :: work(:)
1063 logical(LK) , intent(out) :: inwork
1064 end subroutine
1065#endif
1066
1067#if RK2_ENABLED
1068 PURE module subroutine setFFTF_RK2(factor, coef, data, work, inwork)
1069#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1070 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTF_RK2
1071#endif
1072 use pm_kind, only: RKG => RK2
1073 integer(IK) , intent(in) , contiguous :: factor(:)
1074 real(RKG) , intent(in) , contiguous :: coef(:)
1075 real(RKG) , intent(inout) , contiguous :: data(:)
1076 real(RKG) , intent(out) , contiguous :: work(:)
1077 logical(LK) , intent(out) :: inwork
1078 end subroutine
1079#endif
1080
1081#if RK1_ENABLED
1082 PURE module subroutine setFFTF_RK1(factor, coef, data, work, inwork)
1083#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1084 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTF_RK1
1085#endif
1086 use pm_kind, only: RKG => RK1
1087 integer(IK) , intent(in) , contiguous :: factor(:)
1088 real(RKG) , intent(in) , contiguous :: coef(:)
1089 real(RKG) , intent(inout) , contiguous :: data(:)
1090 real(RKG) , intent(out) , contiguous :: work(:)
1091 logical(LK) , intent(out) :: inwork
1092 end subroutine
1093#endif
1094
1095 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1096
1097 end interface
1098
1099!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1100
1156 interface getFFTR
1157
1158 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1159
1160#if CK5_ENABLED
1161 impure module function getFFTR_CK5(data) result(fft)
1162#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1163 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTR_CK5
1164#endif
1165 use pm_kind, only: CKG => CK5
1166 complex(CKG), intent(in) , contiguous :: data(:)
1167 complex(CKG) :: fft(size(data, 1, IK))
1168 end function
1169#endif
1170
1171#if CK4_ENABLED
1172 impure module function getFFTR_CK4(data) result(fft)
1173#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1174 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTR_CK4
1175#endif
1176 use pm_kind, only: CKG => CK4
1177 complex(CKG), intent(in) , contiguous :: data(:)
1178 complex(CKG) :: fft(size(data, 1, IK))
1179 end function
1180#endif
1181
1182#if CK3_ENABLED
1183 impure module function getFFTR_CK3(data) result(fft)
1184#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1185 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTR_CK3
1186#endif
1187 use pm_kind, only: CKG => CK3
1188 complex(CKG), intent(in) , contiguous :: data(:)
1189 complex(CKG) :: fft(size(data, 1, IK))
1190 end function
1191#endif
1192
1193#if CK2_ENABLED
1194 impure module function getFFTR_CK2(data) result(fft)
1195#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1196 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTR_CK2
1197#endif
1198 use pm_kind, only: CKG => CK2
1199 complex(CKG), intent(in) , contiguous :: data(:)
1200 complex(CKG) :: fft(size(data, 1, IK))
1201 end function
1202#endif
1203
1204#if CK1_ENABLED
1205 impure module function getFFTR_CK1(data) result(fft)
1206#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1207 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTR_CK1
1208#endif
1209 use pm_kind, only: CKG => CK1
1210 complex(CKG), intent(in) , contiguous :: data(:)
1211 complex(CKG) :: fft(size(data, 1, IK))
1212 end function
1213#endif
1214
1215 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1216
1217#if RK5_ENABLED
1218 impure module function getFFTR_RK5(data) result(fft)
1219#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1220 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTR_RK5
1221#endif
1222 use pm_kind, only: RKG => RK5
1223 real(RKG) , intent(in) , contiguous :: data(:)
1224 real(RKG) :: fft(size(data, 1, IK))
1225 end function
1226#endif
1227
1228#if RK4_ENABLED
1229 impure module function getFFTR_RK4(data) result(fft)
1230#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1231 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTR_RK4
1232#endif
1233 use pm_kind, only: RKG => RK4
1234 real(RKG) , intent(in) , contiguous :: data(:)
1235 real(RKG) :: fft(size(data, 1, IK))
1236 end function
1237#endif
1238
1239#if RK3_ENABLED
1240 impure module function getFFTR_RK3(data) result(fft)
1241#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1242 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTR_RK3
1243#endif
1244 use pm_kind, only: RKG => RK3
1245 real(RKG) , intent(in) , contiguous :: data(:)
1246 real(RKG) :: fft(size(data, 1, IK))
1247 end function
1248#endif
1249
1250#if RK2_ENABLED
1251 impure module function getFFTR_RK2(data) result(fft)
1252#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1253 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTR_RK2
1254#endif
1255 use pm_kind, only: RKG => RK2
1256 real(RKG) , intent(in) , contiguous :: data(:)
1257 real(RKG) :: fft(size(data, 1, IK))
1258 end function
1259#endif
1260
1261#if RK1_ENABLED
1262 impure module function getFFTR_RK1(data) result(fft)
1263#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1264 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTR_RK1
1265#endif
1266 use pm_kind, only: RKG => RK1
1267 real(RKG) , intent(in) , contiguous :: data(:)
1268 real(RKG) :: fft(size(data, 1, IK))
1269 end function
1270#endif
1271
1272 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1273
1274 end interface
1275
1276!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1277
1361 interface setFFTR
1362
1363 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1364
1365#if CK5_ENABLED
1366 PURE module subroutine setFFTR_CK5(factor, coef, data, work, inwork)
1367#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1368 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTR_CK5
1369#endif
1370 use pm_kind, only: CKG => CK5
1371 integer(IK) , intent(in) , contiguous :: factor(:)
1372 complex(CKG), intent(in) , contiguous :: coef(:)
1373 complex(CKG), intent(inout) , contiguous :: data(:)
1374 complex(CKG), intent(out) , contiguous :: work(:)
1375 logical(LK) , intent(out) :: inwork
1376 end subroutine
1377#endif
1378
1379#if CK4_ENABLED
1380 PURE module subroutine setFFTR_CK4(factor, coef, data, work, inwork)
1381#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1382 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTR_CK4
1383#endif
1384 use pm_kind, only: CKG => CK4
1385 integer(IK) , intent(in) , contiguous :: factor(:)
1386 complex(CKG), intent(in) , contiguous :: coef(:)
1387 complex(CKG), intent(inout) , contiguous :: data(:)
1388 complex(CKG), intent(out) , contiguous :: work(:)
1389 logical(LK) , intent(out) :: inwork
1390 end subroutine
1391#endif
1392
1393#if CK3_ENABLED
1394 PURE module subroutine setFFTR_CK3(factor, coef, data, work, inwork)
1395#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1396 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTR_CK3
1397#endif
1398 use pm_kind, only: CKG => CK3
1399 integer(IK) , intent(in) , contiguous :: factor(:)
1400 complex(CKG), intent(in) , contiguous :: coef(:)
1401 complex(CKG), intent(inout) , contiguous :: data(:)
1402 complex(CKG), intent(out) , contiguous :: work(:)
1403 logical(LK) , intent(out) :: inwork
1404 end subroutine
1405#endif
1406
1407#if CK2_ENABLED
1408 PURE module subroutine setFFTR_CK2(factor, coef, data, work, inwork)
1409#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1410 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTR_CK2
1411#endif
1412 use pm_kind, only: CKG => CK2
1413 integer(IK) , intent(in) , contiguous :: factor(:)
1414 complex(CKG), intent(in) , contiguous :: coef(:)
1415 complex(CKG), intent(inout) , contiguous :: data(:)
1416 complex(CKG), intent(out) , contiguous :: work(:)
1417 logical(LK) , intent(out) :: inwork
1418 end subroutine
1419#endif
1420
1421#if CK1_ENABLED
1422 PURE module subroutine setFFTR_CK1(factor, coef, data, work, inwork)
1423#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1424 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTR_CK1
1425#endif
1426 use pm_kind, only: CKG => CK1
1427 integer(IK) , intent(in) , contiguous :: factor(:)
1428 complex(CKG), intent(in) , contiguous :: coef(:)
1429 complex(CKG), intent(inout) , contiguous :: data(:)
1430 complex(CKG), intent(out) , contiguous :: work(:)
1431 logical(LK) , intent(out) :: inwork
1432 end subroutine
1433#endif
1434
1435 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1436
1437#if RK5_ENABLED
1438 PURE module subroutine setFFTR_RK5(factor, coef, data, work, inwork)
1439#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1440 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTR_RK5
1441#endif
1442 use pm_kind, only: RKG => RK5
1443 integer(IK) , intent(in) , contiguous :: factor(:)
1444 real(RKG) , intent(in) , contiguous :: coef(:)
1445 real(RKG) , intent(inout) , contiguous :: data(:)
1446 real(RKG) , intent(out) , contiguous :: work(:)
1447 logical(LK) , intent(out) :: inwork
1448 end subroutine
1449#endif
1450
1451#if RK4_ENABLED
1452 PURE module subroutine setFFTR_RK4(factor, coef, data, work, inwork)
1453#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1454 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTR_RK4
1455#endif
1456 use pm_kind, only: RKG => RK4
1457 integer(IK) , intent(in) , contiguous :: factor(:)
1458 real(RKG) , intent(in) , contiguous :: coef(:)
1459 real(RKG) , intent(inout) , contiguous :: data(:)
1460 real(RKG) , intent(out) , contiguous :: work(:)
1461 logical(LK) , intent(out) :: inwork
1462 end subroutine
1463#endif
1464
1465#if RK3_ENABLED
1466 PURE module subroutine setFFTR_RK3(factor, coef, data, work, inwork)
1467#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1468 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTR_RK3
1469#endif
1470 use pm_kind, only: RKG => RK3
1471 integer(IK) , intent(in) , contiguous :: factor(:)
1472 real(RKG) , intent(in) , contiguous :: coef(:)
1473 real(RKG) , intent(inout) , contiguous :: data(:)
1474 real(RKG) , intent(out) , contiguous :: work(:)
1475 logical(LK) , intent(out) :: inwork
1476 end subroutine
1477#endif
1478
1479#if RK2_ENABLED
1480 PURE module subroutine setFFTR_RK2(factor, coef, data, work, inwork)
1481#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1482 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTR_RK2
1483#endif
1484 use pm_kind, only: RKG => RK2
1485 integer(IK) , intent(in) , contiguous :: factor(:)
1486 real(RKG) , intent(in) , contiguous :: coef(:)
1487 real(RKG) , intent(inout) , contiguous :: data(:)
1488 real(RKG) , intent(out) , contiguous :: work(:)
1489 logical(LK) , intent(out) :: inwork
1490 end subroutine
1491#endif
1492
1493#if RK1_ENABLED
1494 PURE module subroutine setFFTR_RK1(factor, coef, data, work, inwork)
1495#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1496 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTR_RK1
1497#endif
1498 use pm_kind, only: RKG => RK1
1499 integer(IK) , intent(in) , contiguous :: factor(:)
1500 real(RKG) , intent(in) , contiguous :: coef(:)
1501 real(RKG) , intent(inout) , contiguous :: data(:)
1502 real(RKG) , intent(out) , contiguous :: work(:)
1503 logical(LK) , intent(out) :: inwork
1504 end subroutine
1505#endif
1506
1507 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1508
1509 end interface
1510
1511!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1512
1567 interface getFFTI
1568
1569 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1570
1571#if CK5_ENABLED
1572 impure module function getFFTI_CK5(data) result(fft)
1573#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1574 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTI_CK5
1575#endif
1576 use pm_kind, only: CKG => CK5
1577 complex(CKG), intent(in) , contiguous :: data(:)
1578 complex(CKG) :: fft(size(data, 1, IK))
1579 end function
1580#endif
1581
1582#if CK4_ENABLED
1583 impure module function getFFTI_CK4(data) result(fft)
1584#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1585 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTI_CK4
1586#endif
1587 use pm_kind, only: CKG => CK4
1588 complex(CKG), intent(in) , contiguous :: data(:)
1589 complex(CKG) :: fft(size(data, 1, IK))
1590 end function
1591#endif
1592
1593#if CK3_ENABLED
1594 impure module function getFFTI_CK3(data) result(fft)
1595#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1596 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTI_CK3
1597#endif
1598 use pm_kind, only: CKG => CK3
1599 complex(CKG), intent(in) , contiguous :: data(:)
1600 complex(CKG) :: fft(size(data, 1, IK))
1601 end function
1602#endif
1603
1604#if CK2_ENABLED
1605 impure module function getFFTI_CK2(data) result(fft)
1606#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1607 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTI_CK2
1608#endif
1609 use pm_kind, only: CKG => CK2
1610 complex(CKG), intent(in) , contiguous :: data(:)
1611 complex(CKG) :: fft(size(data, 1, IK))
1612 end function
1613#endif
1614
1615#if CK1_ENABLED
1616 impure module function getFFTI_CK1(data) result(fft)
1617#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1618 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTI_CK1
1619#endif
1620 use pm_kind, only: CKG => CK1
1621 complex(CKG), intent(in) , contiguous :: data(:)
1622 complex(CKG) :: fft(size(data, 1, IK))
1623 end function
1624#endif
1625
1626 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1627
1628#if RK5_ENABLED
1629 impure module function getFFTI_RK5(data) result(fft)
1630#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1631 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTI_RK5
1632#endif
1633 use pm_kind, only: RKG => RK5
1634 real(RKG) , intent(in) , contiguous :: data(:)
1635 real(RKG) :: fft(size(data, 1, IK))
1636 end function
1637#endif
1638
1639#if RK4_ENABLED
1640 impure module function getFFTI_RK4(data) result(fft)
1641#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1642 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTI_RK4
1643#endif
1644 use pm_kind, only: RKG => RK4
1645 real(RKG) , intent(in) , contiguous :: data(:)
1646 real(RKG) :: fft(size(data, 1, IK))
1647 end function
1648#endif
1649
1650#if RK3_ENABLED
1651 impure module function getFFTI_RK3(data) result(fft)
1652#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1653 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTI_RK3
1654#endif
1655 use pm_kind, only: RKG => RK3
1656 real(RKG) , intent(in) , contiguous :: data(:)
1657 real(RKG) :: fft(size(data, 1, IK))
1658 end function
1659#endif
1660
1661#if RK2_ENABLED
1662 impure module function getFFTI_RK2(data) result(fft)
1663#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1664 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTI_RK2
1665#endif
1666 use pm_kind, only: RKG => RK2
1667 real(RKG) , intent(in) , contiguous :: data(:)
1668 real(RKG) :: fft(size(data, 1, IK))
1669 end function
1670#endif
1671
1672#if RK1_ENABLED
1673 impure module function getFFTI_RK1(data) result(fft)
1674#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1675 !DEC$ ATTRIBUTES DLLEXPORT :: getFFTI_RK1
1676#endif
1677 use pm_kind, only: RKG => RK1
1678 real(RKG) , intent(in) , contiguous :: data(:)
1679 real(RKG) :: fft(size(data, 1, IK))
1680 end function
1681#endif
1682
1683 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1684
1685 end interface
1686
1687!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1688
1754 interface setFFTI
1755
1756 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1757
1758#if CK5_ENABLED
1759 PURE module subroutine setFFTI_CK5(factor, coef, data, work, inwork)
1760#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1761 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTI_CK5
1762#endif
1763 use pm_kind, only: CKG => CK5
1764 integer(IK) , intent(in) , contiguous :: factor(:)
1765 complex(CKG), intent(in) , contiguous :: coef(:)
1766 complex(CKG), intent(inout) , contiguous :: data(:)
1767 complex(CKG), intent(out) , contiguous :: work(:)
1768 logical(LK) , intent(out) :: inwork
1769 end subroutine
1770#endif
1771
1772#if CK4_ENABLED
1773 PURE module subroutine setFFTI_CK4(factor, coef, data, work, inwork)
1774#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1775 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTI_CK4
1776#endif
1777 use pm_kind, only: CKG => CK4
1778 integer(IK) , intent(in) , contiguous :: factor(:)
1779 complex(CKG), intent(in) , contiguous :: coef(:)
1780 complex(CKG), intent(inout) , contiguous :: data(:)
1781 complex(CKG), intent(out) , contiguous :: work(:)
1782 logical(LK) , intent(out) :: inwork
1783 end subroutine
1784#endif
1785
1786#if CK3_ENABLED
1787 PURE module subroutine setFFTI_CK3(factor, coef, data, work, inwork)
1788#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1789 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTI_CK3
1790#endif
1791 use pm_kind, only: CKG => CK3
1792 integer(IK) , intent(in) , contiguous :: factor(:)
1793 complex(CKG), intent(in) , contiguous :: coef(:)
1794 complex(CKG), intent(inout) , contiguous :: data(:)
1795 complex(CKG), intent(out) , contiguous :: work(:)
1796 logical(LK) , intent(out) :: inwork
1797 end subroutine
1798#endif
1799
1800#if CK2_ENABLED
1801 PURE module subroutine setFFTI_CK2(factor, coef, data, work, inwork)
1802#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1803 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTI_CK2
1804#endif
1805 use pm_kind, only: CKG => CK2
1806 integer(IK) , intent(in) , contiguous :: factor(:)
1807 complex(CKG), intent(in) , contiguous :: coef(:)
1808 complex(CKG), intent(inout) , contiguous :: data(:)
1809 complex(CKG), intent(out) , contiguous :: work(:)
1810 logical(LK) , intent(out) :: inwork
1811 end subroutine
1812#endif
1813
1814#if CK1_ENABLED
1815 PURE module subroutine setFFTI_CK1(factor, coef, data, work, inwork)
1816#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1817 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTI_CK1
1818#endif
1819 use pm_kind, only: CKG => CK1
1820 integer(IK) , intent(in) , contiguous :: factor(:)
1821 complex(CKG), intent(in) , contiguous :: coef(:)
1822 complex(CKG), intent(inout) , contiguous :: data(:)
1823 complex(CKG), intent(out) , contiguous :: work(:)
1824 logical(LK) , intent(out) :: inwork
1825 end subroutine
1826#endif
1827
1828 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1829
1830#if RK5_ENABLED
1831 PURE module subroutine setFFTI_RK5(factor, coef, data, work, inwork)
1832#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1833 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTI_RK5
1834#endif
1835 use pm_kind, only: RKG => RK5
1836 integer(IK) , intent(in) , contiguous :: factor(:)
1837 real(RKG) , intent(in) , contiguous :: coef(:)
1838 real(RKG) , intent(inout) , contiguous :: data(:)
1839 real(RKG) , intent(out) , contiguous :: work(:)
1840 logical(LK) , intent(out) :: inwork
1841 end subroutine
1842#endif
1843
1844#if RK4_ENABLED
1845 PURE module subroutine setFFTI_RK4(factor, coef, data, work, inwork)
1846#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1847 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTI_RK4
1848#endif
1849 use pm_kind, only: RKG => RK4
1850 integer(IK) , intent(in) , contiguous :: factor(:)
1851 real(RKG) , intent(in) , contiguous :: coef(:)
1852 real(RKG) , intent(inout) , contiguous :: data(:)
1853 real(RKG) , intent(out) , contiguous :: work(:)
1854 logical(LK) , intent(out) :: inwork
1855 end subroutine
1856#endif
1857
1858#if RK3_ENABLED
1859 PURE module subroutine setFFTI_RK3(factor, coef, data, work, inwork)
1860#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1861 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTI_RK3
1862#endif
1863 use pm_kind, only: RKG => RK3
1864 integer(IK) , intent(in) , contiguous :: factor(:)
1865 real(RKG) , intent(in) , contiguous :: coef(:)
1866 real(RKG) , intent(inout) , contiguous :: data(:)
1867 real(RKG) , intent(out) , contiguous :: work(:)
1868 logical(LK) , intent(out) :: inwork
1869 end subroutine
1870#endif
1871
1872#if RK2_ENABLED
1873 PURE module subroutine setFFTI_RK2(factor, coef, data, work, inwork)
1874#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1875 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTI_RK2
1876#endif
1877 use pm_kind, only: RKG => RK2
1878 integer(IK) , intent(in) , contiguous :: factor(:)
1879 real(RKG) , intent(in) , contiguous :: coef(:)
1880 real(RKG) , intent(inout) , contiguous :: data(:)
1881 real(RKG) , intent(out) , contiguous :: work(:)
1882 logical(LK) , intent(out) :: inwork
1883 end subroutine
1884#endif
1885
1886#if RK1_ENABLED
1887 PURE module subroutine setFFTI_RK1(factor, coef, data, work, inwork)
1888#if __INTEL_COMPILER && DLL_ENABLED && (_WIN32 || _WIN64)
1889 !DEC$ ATTRIBUTES DLLEXPORT :: setFFTI_RK1
1890#endif
1891 use pm_kind, only: RKG => RK1
1892 integer(IK) , intent(in) , contiguous :: factor(:)
1893 real(RKG) , intent(in) , contiguous :: coef(:)
1894 real(RKG) , intent(inout) , contiguous :: data(:)
1895 real(RKG) , intent(out) , contiguous :: work(:)
1896 logical(LK) , intent(out) :: inwork
1897 end subroutine
1898#endif
1899
1900 !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1901
1902 end interface
1903
1904!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1905
1906end module pm_fftpack
Generate and return the Forward Fourier Transform (a.k.a. Fourier Analysis) of a periodic sequence of...
Definition: pm_fftpack.F90:746
Generate and return the Inverse (normalized) Fourier Transform of a periodic sequence of type complex...
Generate and return the Reverse (unnormalized) Fourier Transform of a periodic sequence of type compl...
Generate and return the factorization vector factor of the specified input sequence length and the co...
Definition: pm_fftpack.F90:292
Return the Forward Fourier Transform (or equivalently, the Fourier coefficients) of a periodic sequen...
Definition: pm_fftpack.F90:949
Return the Inverse (normalized) Fourier Transform of a periodic sequence of type complex or real of a...
Return the Reverse (unnormalized) Fourier Transform of a periodic sequence of type complex or real of...
This module contains abstract and concrete derived types that are required for compile-time resolutio...
Definition: pm_array.F90:44
character(*, SK), parameter MODULE_NAME
Definition: pm_array.F90:50
type(allocatable_type), parameter allocatable
This is a scalar parameter object of type allocatable_type that is exclusively used to signify that a...
Definition: pm_array.F90:1260
This module contains procedures and generic interfaces for computing the Discrete Fourier Transform o...
Definition: pm_fftpack.F90:205
This module defines the relevant Fortran kind type-parameters frequently used in the ParaMonte librar...
Definition: pm_kind.F90:268
integer, parameter RK5
Definition: pm_kind.F90:478
integer, parameter RK4
Definition: pm_kind.F90:489
integer, parameter RK2
Definition: pm_kind.F90:511
integer, parameter CK1
Definition: pm_kind.F90:464
integer, parameter RK3
Definition: pm_kind.F90:500
integer, parameter LK
The default logical kind in the ParaMonte library: kind(.true.) in Fortran, kind(....
Definition: pm_kind.F90:541
integer, parameter CK5
Definition: pm_kind.F90:420
integer, parameter CK4
Definition: pm_kind.F90:431
integer, parameter CK2
Definition: pm_kind.F90:453
integer, parameter CK3
Definition: pm_kind.F90:442
integer, parameter IK
The default integer kind in the ParaMonte library: int32 in Fortran, c_int32_t in C-Fortran Interoper...
Definition: pm_kind.F90:540
integer, parameter SK
The default character kind in the ParaMonte library: kind("a") in Fortran, c_char in C-Fortran Intero...
Definition: pm_kind.F90:539
integer, parameter RK1
Definition: pm_kind.F90:522
This is a concrete derived type whose instances are exclusively used to signify that an array of arbi...
Definition: pm_array.F90:1242