Developer Reference

  • 2020.2
  • 07/15/2020
  • Public Content
Contents

Poisson Solver Implementation Details

Several aspects of the
Intel® MKL
Poisson Solver interface are platform-specific and language-specific. To promote portability of the
Intel® MKL
Poisson Solver interface across platforms and ease of use across different languages,
Intel® MKL
provides you with the Poisson Solver language-specific header file to include in your code:
  • mkl_poisson.f90
    , to be used together with
    mkl_dfti.f90
    .
  • Intel® MKL
    Poisson Solver interface supports Fortran versions starting with Fortran 90.
  • Use of the
    Intel® MKL
    Poisson Solver software without including the above language-specific header files is not supported.

Header File

The header file defines the following function prototypes for the Cartesian solver:
SUBROUTINE D_INIT_HELMHOLTZ_2D (AX, BX, AY, BY, NX, NY, BCTYPE, Q, IPAR, DPAR, STAT) USE MKL_DFTI INTEGER NX, NY, STAT INTEGER IPAR(*) DOUBLE PRECISION AX, BX, AY, BY, Q DOUBLE PRECISION DPAR(*) CHARACTER(4) BCTYPE END SUBROUTINE SUBROUTINE D_COMMIT_HELMHOLTZ_2D (F, BD_AX, BD_BX, BD_AY, BD_BY, XHANDLE, IPAR, DPAR, STAT) USE MKL_DFTI INTEGER STAT INTEGER IPAR(*) DOUBLE PRECISION F(IPAR(11)+1,*) DOUBLE PRECISION DPAR(*) DOUBLE PRECISION BD_AX(*), BD_BX(*), BD_AY(*), BD_BY(*) TYPE(DFTI_DESCRIPTOR), POINTER :: XHANDLE END SUBROUTINE SUBROUTINE D_HELMHOLTZ_2D (F, BD_AX, BD_BX, BD_AY, BD_BY, XHANDLE, IPAR, DPAR, STAT) USE MKL_DFTI INTEGER STAT INTEGER IPAR(*) DOUBLE PRECISION F(IPAR(11)+1,*) DOUBLE PRECISION DPAR(*) DOUBLE PRECISION BD_AX(*), BD_BX(*), BD_AY(*), BD_BY(*) TYPE(DFTI_DESCRIPTOR), POINTER :: XHANDLE END SUBROUTINE SUBROUTINE S_INIT_HELMHOLTZ_2D (AX, BX, AY, BY, NX, NY, BCTYPE, Q, IPAR, SPAR, STAT) USE MKL_DFTI INTEGER NX, NY, STAT INTEGER IPAR(*) REAL AX, BX, AY, BY, Q REAL SPAR(*) CHARACTER(4) BCTYPE END SUBROUTINE SUBROUTINE S_COMMIT_HELMHOLTZ_2D (F, BD_AX, BD_BX, BD_AY, BD_BY, XHANDLE, IPAR, SPAR, STAT) USE MKL_DFTI INTEGER STAT INTEGER IPAR(*) REAL F(IPAR(11)+1,*) REAL SPAR(*) REAL BD_AX(*), BD_BX(*), BD_AY(*), BD_BY(*) TYPE(DFTI_DESCRIPTOR), POINTER :: XHANDLE END SUBROUTINE SUBROUTINE S_HELMHOLTZ_2D (F, BD_AX, BD_BX, BD_AY, BD_BY, XHANDLE, IPAR, SPAR, STAT) USE MKL_DFTI INTEGER STAT INTEGER IPAR(*) REAL F(IPAR(11)+1,*) REAL SPAR(*) REAL BD_AX(*), BD_BX(*), BD_AY(*), BD_BY(*) TYPE(DFTI_DESCRIPTOR), POINTER :: XHANDLE END SUBROUTINE SUBROUTINE FREE_HELMHOLTZ_2D (XHANDLE, IPAR, STAT) USE MKL_DFTI INTEGER STAT INTEGER IPAR(*) TYPE(DFTI_DESCRIPTOR), POINTER :: XHANDLE END SUBROUTINE SUBROUTINE D_INIT_HELMHOLTZ_3D (AX, BX, AY, BY, AZ, BZ, NX, NY, NZ, BCTYPE, Q, IPAR, DPAR, STAT) USE MKL_DFTI INTEGER NX, NY, NZ, STAT INTEGER IPAR(*) DOUBLE PRECISION AX, BX, AY, BY, AZ, BZ, Q DOUBLE PRECISION DPAR(*) CHARACTER(6) BCTYPE END SUBROUTINE SUBROUTINE D_COMMIT_HELMHOLTZ_3D (F, BD_AX, BD_BX, BD_AY, BD_BY, BD_AZ, BD_BZ, XHANDLE, YHANDLE, IPAR, DPAR, STAT) USE MKL_DFTI INTEGER STAT INTEGER IPAR(*) DOUBLE PRECISION F(IPAR(11)+1,IPAR(12)+1,*) DOUBLE PRECISION DPAR(*) DOUBLE PRECISION BD_AX(IPAR(12)+1,*), BD_BX(IPAR(12)+1,*), BD_AY(IPAR(11)+1,*) DOUBLE PRECISION BD_BY(IPAR(11)+1,*), BD_AZ(IPAR(11)+1,*), BD_BZ(IPAR(11)+1,*) TYPE(DFTI_DESCRIPTOR), POINTER :: XHANDLE, YHANDLE END SUBROUTINE SUBROUTINE D_HELMHOLTZ_3D (F, BD_AX, BD_BX, BD_AY, BD_BY, BD_AZ, BD_BZ, XHANDLE, YHANDLE, IPAR, DPAR, STAT) USE MKL_DFTI INTEGER STAT INTEGER IPAR(*) DOUBLE PRECISION F(IPAR(11)+1,IPAR(12)+1,*) DOUBLE PRECISION DPAR(*) DOUBLE PRECISION BD_AX(IPAR(12)+1,*), BD_BX(IPAR(12)+1,*), BD_AY(IPAR(11)+1,*) DOUBLE PRECISION BD_BY(IPAR(11)+1,*), BD_AZ(IPAR(11)+1,*), BD_BZ(IPAR(11)+1,*) TYPE(DFTI_DESCRIPTOR), POINTER :: XHANDLE, YHANDLE END SUBROUTINE SUBROUTINE S_INIT_HELMHOLTZ_3D (AX, BX, AY, BY, AZ, BZ, NX, NY, NZ, BCTYPE, Q, IPAR, SPAR, STAT) USE MKL_DFTI INTEGER NX, NY, NZ, STAT INTEGER IPAR(*) REAL AX, BX, AY, BY, AZ, BZ, Q REAL SPAR(*) CHARACTER(6) BCTYPE END SUBROUTINE SUBROUTINE S_COMMIT_HELMHOLTZ_3D (F, BD_AX, BD_BX, BD_AY, BD_BY, BD_AZ, BD_BZ, XHANDLE, YHANDLE, IPAR, SPAR, STAT) USE MKL_DFTI INTEGER STAT INTEGER IPAR(*) REAL F(IPAR(11)+1,IPAR(12)+1,*) REAL SPAR(*) REAL BD_AX(IPAR(12)+1,*), BD_BX(IPAR(12)+1,*), BD_AY(IPAR(11)+1,*) REAL BD_BY(IPAR(11)+1,*), BD_AZ(IPAR(11)+1,*), BD_BZ(IPAR(11)+1,*) TYPE(DFTI_DESCRIPTOR), POINTER :: XHANDLE, YHANDLE END SUBROUTINE SUBROUTINE S_HELMHOLTZ_3D (F, BD_AX, BD_BX, BD_AY, BD_BY, BD_AZ, BD_BZ, XHANDLE, YHANDLE, IPAR, SPAR, STAT) USE MKL_DFTI INTEGER STAT INTEGER IPAR(*) REAL F(IPAR(11)+1,IPAR(12)+1,*) REAL SPAR(*) REAL BD_AX(IPAR(12)+1,*), BD_BX(IPAR(12)+1,*), BD_AY(IPAR(11)+1,*) REAL BD_BY(IPAR(11)+1,*), BD_AZ(IPAR(11)+1,*), BD_BZ(IPAR(11)+1,*) TYPE(DFTI_DESCRIPTOR), POINTER :: XHANDLE, YHANDLE END SUBROUTINE SUBROUTINE FREE_HELMHOLTZ_3D (XHANDLE, YHANDLE, IPAR, STAT) USE MKL_DFTI INTEGER STAT INTEGER IPAR(*) TYPE(DFTI_DESCRIPTOR), POINTER :: XHANDLE, YHANDLE END SUBROUTINE
The header file defines the following function prototypes for the spherical solver:
SUBROUTINE D_INIT_SPH_P(AP,BP,AT,BT,NP,NT,Q,IPAR,DPAR,STAT) USE MKL_DFTI INTEGER NP, NT, STAT INTEGER IPAR(*) DOUBLE PRECISION AP,BP,AT,BT,Q DOUBLE PRECISION DPAR(*) END SUBROUTINE SUBROUTINE D_COMMIT_SPH_P(F,HANDLE_S,HANDLE_C,IPAR,DPAR,STAT) USE MKL_DFTI INTEGER STAT INTEGER IPAR(*) DOUBLE PRECISION DPAR(*) DOUBLE PRECISION F(IPAR(11)+1,*) TYPE(DFTI_DESCRIPTOR), POINTER :: HANDLE_C, HANDLE_S END SUBROUTINE SUBROUTINE D_SPH_P(F,HANDLE_S,HANDLE_C,IPAR,DPAR,STAT) USE MKL_DFTI INTEGER STAT INTEGER IPAR(*) DOUBLE PRECISION DPAR(*) DOUBLE PRECISION F(IPAR(11)+1,*) TYPE(DFTI_DESCRIPTOR), POINTER :: HANDLE_C, HANDLE_S END SUBROUTINE SUBROUTINE S_INIT_SPH_P(AP,BP,AT,BT,NP,NT,Q,IPAR,SPAR,STAT) USE MKL_DFTI INTEGER NP, NT, STAT INTEGER IPAR(*) REAL AP,BP,AT,BT,Q REAL SPAR(*) END SUBROUTINE SUBROUTINE S_COMMIT_SPH_P(F,HANDLE_S,HANDLE_C,IPAR,SPAR,STAT) USE MKL_DFTI INTEGER STAT INTEGER IPAR(*) REAL SPAR(*) REAL F(IPAR(11)+1,*) TYPE(DFTI_DESCRIPTOR), POINTER :: HANDLE_C, HANDLE_S END SUBROUTINE SUBROUTINE S_SPH_P(F,HANDLE_S,HANDLE_C,IPAR,SPAR,STAT) USE MKL_DFTI INTEGER STAT INTEGER IPAR(*) REAL SPAR(*) REAL F(IPAR(11)+1,*) TYPE(DFTI_DESCRIPTOR), POINTER :: HANDLE_C, HANDLE_S END SUBROUTINE SUBROUTINE FREE_SPH_P(HANDLE_S,HANDLE_C,IPAR,STAT) USE MKL_DFTI INTEGER STAT INTEGER IPAR(*) TYPE(DFTI_DESCRIPTOR), POINTER :: HANDLE_S, HANDLE_C END SUBROUTINE SUBROUTINE D_INIT_SPH_NP(AP,BP,AT,BT,NP,NT,Q,IPAR,DPAR,STAT) USE MKL_DFTI INTEGER NP, NT, STAT INTEGER IPAR(*) DOUBLE PRECISION AP,BP,AT,BT,Q DOUBLE PRECISION DPAR(*) END SUBROUTINE SUBROUTINE D_COMMIT_SPH_NP(F,HANDLE,IPAR,DPAR,STAT) USE MKL_DFTI INTEGER STAT INTEGER IPAR(*) DOUBLE PRECISION DPAR(*) DOUBLE PRECISION F(IPAR(11)+1,*) TYPE(DFTI_DESCRIPTOR), POINTER :: HANDLE END SUBROUTINE SUBROUTINE D_SPH_NP(F,HANDLE,IPAR,DPAR,STAT) USE MKL_DFTI INTEGER STAT INTEGER IPAR(*) DOUBLE PRECISION DPAR(*) DOUBLE PRECISION F(IPAR(11)+1,*) TYPE(DFTI_DESCRIPTOR), POINTER :: HANDLE END SUBROUTINE SUBROUTINE S_INIT_SPH_NP(AP,BP,AT,BT,NP,NT,Q,IPAR,SPAR,STAT) USE MKL_DFTI INTEGER NP, NT, STAT INTEGER IPAR(*) REAL AP,BP,AT,BT,Q REAL SPAR(*) END SUBROUTINE SUBROUTINE S_COMMIT_SPH_NP(F,HANDLE,IPAR,SPAR,STAT) USE MKL_DFTI INTEGER STAT INTEGER IPAR(*) REAL SPAR(*) REAL F(IPAR(11)+1,*) TYPE(DFTI_DESCRIPTOR), POINTER :: HANDLE END SUBROUTINE SUBROUTINE S_SPH_NP(F,HANDLE,IPAR,SPAR,STAT) USE MKL_DFTI INTEGER STAT INTEGER IPAR(*) REAL SPAR(*) REAL F(IPAR(11)+1,*) TYPE(DFTI_DESCRIPTOR), POINTER :: HANDLE END SUBROUTINE SUBROUTINE FREE_SPH_NP(HANDLE,IPAR,STAT) USE MKL_DFTI INTEGER STAT INTEGER IPAR(*) TYPE(DFTI_DESCRIPTOR), POINTER :: HANDLE END SUBROUTINE
Fortran specifics of the Poisson Solver routines usage are similar for all
Intel® MKL
PDE support tools and described inCalling PDE Support Routines from Fortran.

Product and Performance Information

1

Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.

Notice revision #20110804