Visible to Intel only — GUID: GUID-234B9969-B1F3-4BFB-BD72-DFE0DD57C9B0
Visible to Intel only — GUID: GUID-234B9969-B1F3-4BFB-BD72-DFE0DD57C9B0
Poisson Solver Implementation Details
Several aspects of the Intel® oneAPI Math Kernel Library (oneMKL) Poisson Solver interface are platform-specific and language-specific. To promote portability of the Intel® oneAPI Math Kernel Library (oneMKL) Poisson Solver interface across platforms and ease of use across different languages, Intel® oneAPI Math Kernel Library (oneMKL) 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® oneAPI Math Kernel Library (oneMKL) Poisson Solver interface supports Fortran versions starting with Fortran 90.
- Use of the Intel® oneAPI Math Kernel Library (oneMKL) 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® oneAPI Math Kernel Library (oneMKL) PDE support tools and described inCalling PDE Support Routines from Fortran.