Line data Source code
1 : !===============================================================================
2 : ! Copyright 2002-2022 Intel Corporation.
3 : !
4 : ! This software and the related documents are Intel copyrighted materials, and
5 : ! your use of them is governed by the express license under which they were
6 : ! provided to you (License). Unless the License provides otherwise, you may not
7 : ! use, modify, copy, publish, distribute, disclose or transmit this software or
8 : ! the related documents without Intel's prior written permission.
9 : !
10 : ! This software and the related documents are provided as is, with no express
11 : ! or implied warranties, other than those that are expressly stated in the
12 : ! License.
13 : !===============================================================================
14 :
15 : ! Content:
16 : ! Intel(R) oneAPI Math Kernel Library (oneMKL)
17 : ! Discrete Fourier Transform Interface (DFTI)
18 : !*****************************************************************************
19 :
20 : MODULE MKL_DFT_TYPE
21 :
22 : TYPE, PUBLIC :: DFTI_DESCRIPTOR
23 : PRIVATE
24 : INTEGER :: dontuse
25 : ! Structure of this type is not used in Fortran code
26 : ! the pointer to this type is used only
27 : END TYPE DFTI_DESCRIPTOR
28 :
29 : !======================================================================
30 : ! These real type kind parameters are not for direct use
31 : !======================================================================
32 :
33 : INTEGER, PARAMETER :: DFTI_SPKP = SELECTED_REAL_KIND(6,37)
34 : INTEGER, PARAMETER :: DFTI_DPKP = SELECTED_REAL_KIND(15,307)
35 :
36 : !======================================================================
37 : ! Descriptor configuration parameters [default values in brackets]
38 : !======================================================================
39 :
40 : ! Domain for forward transform. No default value
41 : INTEGER, PARAMETER :: DFTI_FORWARD_DOMAIN = 0
42 :
43 : ! Dimensionality, or rank. No default value
44 : INTEGER, PARAMETER :: DFTI_DIMENSION = 1
45 :
46 : ! Length(s) of transform. No default value
47 : INTEGER, PARAMETER :: DFTI_LENGTHS = 2
48 :
49 : ! Floating point precision. No default value
50 : INTEGER, PARAMETER :: DFTI_PRECISION = 3
51 :
52 : ! Scale factor for forward transform [1.0]
53 : INTEGER, PARAMETER :: DFTI_FORWARD_SCALE = 4
54 :
55 : ! Scale factor for backward transform [1.0]
56 : INTEGER, PARAMETER :: DFTI_BACKWARD_SCALE = 5
57 :
58 : ! Exponent sign for forward transform [DFTI_NEGATIVE]
59 : ! INTEGER, PARAMETER :: DFTI_FORWARD_SIGN = 6 ! NOT IMPLEMENTED
60 :
61 : ! Number of data sets to be transformed [1]
62 : INTEGER, PARAMETER :: DFTI_NUMBER_OF_TRANSFORMS = 7
63 :
64 : ! Storage of finite complex-valued sequences in complex domain
65 : ! [DFTI_COMPLEX_COMPLEX]
66 : INTEGER, PARAMETER :: DFTI_COMPLEX_STORAGE = 8
67 :
68 : ! Storage of finite real-valued sequences in real domain
69 : ! [DFTI_REAL_REAL]
70 : INTEGER, PARAMETER :: DFTI_REAL_STORAGE = 9
71 :
72 : ! Storage of finite complex-valued sequences in conjugate-even
73 : ! domain [DFTI_COMPLEX_REAL]
74 : INTEGER, PARAMETER :: DFTI_CONJUGATE_EVEN_STORAGE = 10
75 :
76 : ! Placement of result [DFTI_INPLACE]
77 : INTEGER, PARAMETER :: DFTI_PLACEMENT = 11
78 :
79 : ! Generalized strides for input data layout
80 : ! [tight, col-major for Fortran]
81 : INTEGER, PARAMETER :: DFTI_INPUT_STRIDES = 12
82 :
83 : ! Generalized strides for output data layout
84 : ! [tight, col-major for Fortran]
85 : INTEGER, PARAMETER :: DFTI_OUTPUT_STRIDES = 13
86 :
87 : ! Distance between first input elements for multiple transforms [0]
88 : INTEGER, PARAMETER :: DFTI_INPUT_DISTANCE = 14
89 :
90 : ! Distance between first output elements for multiple transforms [0]
91 : INTEGER, PARAMETER :: DFTI_OUTPUT_DISTANCE = 15
92 :
93 : ! Effort spent in initialization [DFTI_MEDIUM]
94 : ! INTEGER, PARAMETER :: DFTI_INITIALIZATION_EFFORT = 16 ! NOT IMPLEMENTED
95 :
96 : ! Use of workspace during computation [DFTI_ALLOW]
97 : INTEGER, PARAMETER :: DFTI_WORKSPACE = 17
98 :
99 : ! Ordering of the result [DFTI_ORDERED]
100 : INTEGER, PARAMETER :: DFTI_ORDERING = 18
101 :
102 : ! Possible transposition of result [DFTI_NONE]
103 : INTEGER, PARAMETER :: DFTI_TRANSPOSE = 19
104 :
105 : ! User-settable descriptor name [""]
106 : INTEGER, PARAMETER :: DFTI_DESCRIPTOR_NAME = 20
107 :
108 : ! Packing format for DFTI_COMPLEX_REAL storage of finite
109 : ! conjugate-even sequences [DFTI_CCS_FORMAT]
110 : INTEGER, PARAMETER :: DFTI_PACKED_FORMAT = 21
111 :
112 : ! Commit status of the descriptor. Read-only parameter
113 : INTEGER, PARAMETER :: DFTI_COMMIT_STATUS = 22
114 :
115 : ! Version string for this DFTI implementation. Read-only parameter
116 : INTEGER, PARAMETER :: DFTI_VERSION = 23
117 :
118 : ! Ordering of the forward transform. Read-only parameter
119 : ! INTEGER, PARAMETER :: DFTI_FORWARD_ORDERING = 24 ! NOT IMPLEMENTED
120 :
121 : ! Ordering of the backward transform. Read-only parameter
122 : ! INTEGER, PARAMETER :: DFTI_BACKWARD_ORDERING = 25 ! NOT IMPLEMENTED
123 :
124 : ! Number of user threads that share the descriptor [1]
125 : INTEGER, PARAMETER :: DFTI_NUMBER_OF_USER_THREADS = 26
126 :
127 : ! Limit the number of threads used by this descriptor [0 = don't care]
128 : INTEGER, PARAMETER :: DFTI_THREAD_LIMIT = 27
129 :
130 : !======================================================================
131 : ! Values of the descriptor configuration parameters
132 : !======================================================================
133 :
134 : ! DFTI_COMMIT_STATUS
135 : INTEGER, PARAMETER :: DFTI_COMMITTED = 30
136 : INTEGER, PARAMETER :: DFTI_UNCOMMITTED = 31
137 :
138 : ! DFTI_FORWARD_DOMAIN
139 : INTEGER, PARAMETER :: DFTI_COMPLEX = 32
140 : INTEGER, PARAMETER :: DFTI_REAL = 33
141 : ! INTEGER, PARAMETER :: DFTI_CONJUGATE_EVEN = 34 ! NOT IMPLEMENTED
142 :
143 : ! DFTI_PRECISION
144 : INTEGER, PARAMETER :: DFTI_SINGLE = 35
145 : INTEGER, PARAMETER :: DFTI_DOUBLE = 36
146 :
147 : ! DFTI_PRECISION for reduced size of statically linked application.
148 : ! Recommended use: modify statement 'USE MKL_DFTI' in your program,
149 : ! so that it reads as either of:
150 : ! USE MKL_DFTI, FORGET=>DFTI_SINGLE, DFTI_SINGLE=>DFTI_SINGLE_R
151 : ! USE MKL_DFTI, FORGET=>DFTI_DOUBLE, DFTI_DOUBLE=>DFTI_DOUBLE_R
152 : ! where word 'FORGET' can be any name not used in the program.
153 : REAL(DFTI_SPKP), PARAMETER :: DFTI_SINGLE_R = REAL(35)
154 : REAL(DFTI_DPKP), PARAMETER :: DFTI_DOUBLE_R = REAL(36)
155 :
156 : ! DFTI_FORWARD_SIGN
157 : ! INTEGER, PARAMETER :: DFTI_NEGATIVE = 37 ! NOT IMPLEMENTED
158 : ! INTEGER, PARAMETER :: DFTI_POSITIVE = 38 ! NOT IMPLEMENTED
159 :
160 : ! DFTI_COMPLEX_STORAGE and DFTI_CONJUGATE_EVEN_STORAGE
161 : INTEGER, PARAMETER :: DFTI_COMPLEX_COMPLEX = 39
162 : INTEGER, PARAMETER :: DFTI_COMPLEX_REAL = 40
163 :
164 : ! DFTI_REAL_STORAGE
165 : INTEGER, PARAMETER :: DFTI_REAL_COMPLEX = 41
166 : INTEGER, PARAMETER :: DFTI_REAL_REAL = 42
167 :
168 : ! DFTI_PLACEMENT
169 : INTEGER, PARAMETER :: DFTI_INPLACE = 43 ! Result overwrites input
170 : INTEGER, PARAMETER :: DFTI_NOT_INPLACE = 44 ! Have another place for result
171 :
172 : ! DFTI_INITIALIZATION_EFFORT
173 : ! INTEGER, PARAMETER :: DFTI_LOW = 45 ! NOT IMPLEMENTED
174 : ! INTEGER, PARAMETER :: DFTI_MEDIUM = 46 ! NOT IMPLEMENTED
175 : ! INTEGER, PARAMETER :: DFTI_HIGH = 47 ! NOT IMPLEMENTED
176 :
177 : ! DFTI_ORDERING
178 : INTEGER, PARAMETER :: DFTI_ORDERED = 48
179 : INTEGER, PARAMETER :: DFTI_BACKWARD_SCRAMBLED = 49
180 : ! INTEGER, PARAMETER :: DFTI_FORWARD_SCRAMBLED = 50 ! NOT IMPLEMENTED
181 :
182 : ! Allow/avoid certain usages
183 : INTEGER, PARAMETER :: DFTI_ALLOW = 51 ! Allow transposition or workspace
184 : INTEGER, PARAMETER :: DFTI_AVOID = 52 ! Avoid auxiliary storage
185 : INTEGER, PARAMETER :: DFTI_NONE = 53
186 :
187 : ! DFTI_PACKED_FORMAT
188 : ! (for storing congugate-even finite sequence in real array)
189 : INTEGER, PARAMETER :: DFTI_CCS_FORMAT = 54 ! Complex conjugate-symmetric
190 : INTEGER, PARAMETER :: DFTI_PACK_FORMAT = 55 ! Pack format for real DFT
191 : INTEGER, PARAMETER :: DFTI_PERM_FORMAT = 56 ! Perm format for real DFT
192 : INTEGER, PARAMETER :: DFTI_CCE_FORMAT = 57 ! Complex conjugate-even
193 :
194 : !======================================================================
195 : ! Error classes
196 : !======================================================================
197 : INTEGER, PARAMETER :: DFTI_NO_ERROR = 0
198 : INTEGER, PARAMETER :: DFTI_MEMORY_ERROR = 1
199 : INTEGER, PARAMETER :: DFTI_INVALID_CONFIGURATION = 2
200 : INTEGER, PARAMETER :: DFTI_INCONSISTENT_CONFIGURATION = 3
201 : INTEGER, PARAMETER :: DFTI_MULTITHREADED_ERROR = 4
202 : INTEGER, PARAMETER :: DFTI_BAD_DESCRIPTOR = 5
203 : INTEGER, PARAMETER :: DFTI_UNIMPLEMENTED = 6
204 : INTEGER, PARAMETER :: DFTI_MKL_INTERNAL_ERROR = 7
205 : INTEGER, PARAMETER :: DFTI_NUMBER_OF_THREADS_ERROR = 8
206 : INTEGER, PARAMETER :: DFTI_1D_LENGTH_EXCEEDS_INT32 = 9
207 : INTEGER, PARAMETER :: DFTI_1D_MEMORY_EXCEEDS_INT32 = 9
208 :
209 : ! Maximum length of error string
210 : INTEGER, PARAMETER :: DFTI_MAX_MESSAGE_LENGTH = 80
211 :
212 : ! Maximum length of user-settable descriptor name
213 : INTEGER, PARAMETER :: DFTI_MAX_NAME_LENGTH = 10
214 :
215 : ! Maximum length of oneMKL version string
216 : INTEGER, PARAMETER :: DFTI_VERSION_LENGTH = 198
217 :
218 0 : END MODULE MKL_DFT_TYPE
219 :
220 : MODULE MKL_DFTI
221 :
222 : USE MKL_DFT_TYPE
223 :
224 : INTERFACE DftiCreateDescriptor
225 :
226 : ! overloading of DftiCreateDescriptor for 1D DFT
227 : FUNCTION dfti_create_descriptor_1d(desc, precision, domain, dim, length)
228 : USE MKL_DFT_TYPE
229 : !DEC$ ATTRIBUTES C :: dfti_create_descriptor_1d
230 : !DEC$ ATTRIBUTES REFERENCE :: dfti_create_descriptor_1d
231 : INTEGER dfti_create_descriptor_1d
232 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
233 : INTEGER, INTENT(IN) :: precision
234 : INTEGER, INTENT(IN) :: domain
235 : INTEGER, INTENT(IN) :: dim, length
236 : END FUNCTION dfti_create_descriptor_1d
237 :
238 : ! overloading of DftiCreateDescriptor for nD DFT
239 : FUNCTION dfti_create_descriptor_highd(desc, precision, domain, dim,length)
240 : USE MKL_DFT_TYPE
241 : !DEC$ ATTRIBUTES C :: dfti_create_descriptor_highd
242 : !DEC$ ATTRIBUTES REFERENCE :: dfti_create_descriptor_highd
243 : INTEGER dfti_create_descriptor_highd
244 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
245 : INTEGER, INTENT(IN) :: precision
246 : INTEGER, INTENT(IN) :: domain
247 : INTEGER, INTENT(IN) :: dim
248 : INTEGER, INTENT(IN), DIMENSION(*) :: length
249 : END FUNCTION dfti_create_descriptor_highd
250 :
251 : ! overloading of DftiCreateDescriptor for SP 1D DFT
252 : ! second parameter (precision) should be any REAL*4 value
253 : ! for dispatching during compile time
254 : FUNCTION dfti_create_descriptor_s_1d(desc, s, dom, one, dim)
255 : USE MKL_DFT_TYPE
256 : !DEC$ ATTRIBUTES C :: dfti_create_descriptor_s_1d
257 : !DEC$ ATTRIBUTES REFERENCE :: dfti_create_descriptor_s_1d
258 : INTEGER dfti_create_descriptor_s_1d
259 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
260 : REAL(DFTI_SPKP), INTENT(IN) :: s
261 : INTEGER, INTENT(IN) :: dom
262 : INTEGER, INTENT(IN) :: one
263 : INTEGER, INTENT(IN) :: dim
264 : END FUNCTION dfti_create_descriptor_s_1d
265 :
266 : ! overloading of DftiCreateDescriptor for SP nD DFT
267 : ! second parameter (precision) should be any REAL*4 value
268 : ! for dispatching during compile time
269 : FUNCTION dfti_create_descriptor_s_md(desc, s, dom, many, dims)
270 : USE MKL_DFT_TYPE
271 : !DEC$ ATTRIBUTES C :: dfti_create_descriptor_s_md
272 : !DEC$ ATTRIBUTES REFERENCE :: dfti_create_descriptor_s_md
273 : INTEGER dfti_create_descriptor_s_md
274 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
275 : REAL(DFTI_SPKP), INTENT(IN) :: s
276 : INTEGER, INTENT(IN) :: dom
277 : INTEGER, INTENT(IN) :: many
278 : INTEGER, INTENT(IN), DIMENSION(*) :: dims
279 : END FUNCTION dfti_create_descriptor_s_md
280 :
281 : ! overloading of DftiCreateDescriptor for DP 1D DFT
282 : ! second parameter (precision) should be any REAL*8 value
283 : ! for dispatching during compile time
284 : FUNCTION dfti_create_descriptor_d_1d(desc, d, dom, one, dim)
285 : USE MKL_DFT_TYPE
286 : !DEC$ ATTRIBUTES C :: dfti_create_descriptor_d_1d
287 : !DEC$ ATTRIBUTES REFERENCE :: dfti_create_descriptor_d_1d
288 : INTEGER dfti_create_descriptor_d_1d
289 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
290 : REAL(DFTI_DPKP), INTENT(IN) :: d
291 : INTEGER, INTENT(IN) :: dom
292 : INTEGER, INTENT(IN) :: one
293 : INTEGER, INTENT(IN) :: dim
294 : END FUNCTION dfti_create_descriptor_d_1d
295 :
296 : ! overloading of DftiCreateDescriptor for DP nD DFT
297 : ! second parameter (precision) should be any REAL*8 value
298 : ! for dispatching during compile time
299 : FUNCTION dfti_create_descriptor_d_md(desc, d, dom, many, dims)
300 : USE MKL_DFT_TYPE
301 : !DEC$ ATTRIBUTES C :: dfti_create_descriptor_d_md
302 : !DEC$ ATTRIBUTES REFERENCE :: dfti_create_descriptor_d_md
303 : INTEGER dfti_create_descriptor_d_md
304 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
305 : REAL(DFTI_DPKP), INTENT(IN) :: d
306 : INTEGER, INTENT(IN) :: dom
307 : INTEGER, INTENT(IN) :: many
308 : INTEGER, INTENT(IN), DIMENSION(*) :: dims
309 : END FUNCTION dfti_create_descriptor_d_md
310 :
311 : END INTERFACE
312 :
313 : INTERFACE DftiCopyDescriptor
314 :
315 : FUNCTION dfti_copy_descriptor_external(desc, new_desc)
316 : USE MKL_DFT_TYPE
317 : !DEC$ ATTRIBUTES C :: dfti_copy_descriptor_external
318 : !DEC$ ATTRIBUTES REFERENCE :: dfti_copy_descriptor_external
319 : INTEGER dfti_copy_descriptor_external
320 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
321 : TYPE(DFTI_DESCRIPTOR), POINTER :: new_desc
322 : END FUNCTION dfti_copy_descriptor_external
323 :
324 : END INTERFACE
325 :
326 : INTERFACE DftiCommitDescriptor
327 :
328 : FUNCTION dfti_commit_descriptor_external(desc)
329 : USE MKL_DFT_TYPE
330 : !DEC$ ATTRIBUTES C :: dfti_commit_descriptor_external
331 : !DEC$ ATTRIBUTES REFERENCE :: dfti_commit_descriptor_external
332 : INTEGER dfti_commit_descriptor_external
333 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
334 : END FUNCTION dfti_commit_descriptor_external
335 :
336 : END INTERFACE
337 :
338 : INTERFACE DftiSetValue
339 :
340 : ! overloading of DftiSetValue for integer value
341 : FUNCTION dfti_set_value_intval(desc, OptName, IntVal)
342 : USE MKL_DFT_TYPE
343 : !DEC$ ATTRIBUTES C :: dfti_set_value_intval
344 : !DEC$ ATTRIBUTES REFERENCE :: dfti_set_value_intval
345 : INTEGER dfti_set_value_intval
346 : INTEGER, INTENT(IN) :: OptName
347 : INTEGER, INTENT(IN) :: IntVal
348 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
349 : END FUNCTION dfti_set_value_intval
350 :
351 : ! overloading of DftiSetValue for SP value
352 : FUNCTION dfti_set_value_sglval(desc, OptName, sglval)
353 : USE MKL_DFT_TYPE
354 : !DEC$ ATTRIBUTES C :: dfti_set_value_sglval
355 : !DEC$ ATTRIBUTES REFERENCE :: dfti_set_value_sglval
356 : INTEGER dfti_set_value_sglval
357 : INTEGER, INTENT(IN) :: OptName
358 : REAL(DFTI_SPKP), INTENT(IN) :: sglval
359 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
360 : END FUNCTION dfti_set_value_sglval
361 :
362 : ! overloading of DftiSetValue for DP value
363 : FUNCTION dfti_set_value_dblval(desc, OptName, DblVal)
364 : USE MKL_DFT_TYPE
365 : !DEC$ ATTRIBUTES C :: dfti_set_value_dblval
366 : !DEC$ ATTRIBUTES REFERENCE :: dfti_set_value_dblval
367 : INTEGER dfti_set_value_dblval
368 : INTEGER, INTENT(IN) :: OptName
369 : REAL(DFTI_DPKP), INTENT(IN) :: DblVal
370 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
371 : END FUNCTION dfti_set_value_dblval
372 :
373 : ! overloading of DftiSetValue for integer vector
374 : FUNCTION dfti_set_value_intvec(desc, OptName, IntVec)
375 : USE MKL_DFT_TYPE
376 : !DEC$ ATTRIBUTES C :: dfti_set_value_intvec
377 : !DEC$ ATTRIBUTES REFERENCE :: dfti_set_value_intvec
378 : INTEGER dfti_set_value_intvec
379 : INTEGER, INTENT(IN) :: OptName
380 : INTEGER, INTENT(IN), DIMENSION(*) :: IntVec
381 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
382 : END FUNCTION dfti_set_value_intvec
383 :
384 : ! overloading of DftiSetValue for char vector
385 : FUNCTION dfti_set_value_chars(desc, OptName, Chars)
386 : USE MKL_DFT_TYPE
387 : !DEC$ ATTRIBUTES C :: dfti_set_value_chars
388 : !DEC$ ATTRIBUTES REFERENCE :: dfti_set_value_chars
389 : INTEGER dfti_set_value_chars
390 : INTEGER, INTENT(IN) :: OptName
391 : CHARACTER(*), INTENT(IN) :: Chars
392 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
393 : END FUNCTION dfti_set_value_chars
394 :
395 : END INTERFACE
396 :
397 : INTERFACE DftiGetValue
398 :
399 : ! overloading of DftiGetValue for integer value
400 : FUNCTION dfti_get_value_intval(desc, OptName, IntVal)
401 : USE MKL_DFT_TYPE
402 : !DEC$ ATTRIBUTES C :: dfti_get_value_intval
403 : !DEC$ ATTRIBUTES REFERENCE :: dfti_get_value_intval
404 : INTEGER dfti_get_value_intval
405 : INTEGER, INTENT(IN) :: OptName
406 : INTEGER, INTENT(OUT) :: IntVal
407 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
408 : END FUNCTION dfti_get_value_intval
409 :
410 : ! overloading of DftiGetValue for SP value
411 : FUNCTION dfti_get_value_sglval(desc, OptName, sglval)
412 : USE MKL_DFT_TYPE
413 : !DEC$ ATTRIBUTES C :: dfti_get_value_sglval
414 : !DEC$ ATTRIBUTES REFERENCE :: dfti_get_value_sglval
415 : INTEGER dfti_get_value_sglval
416 : INTEGER, INTENT(IN) :: OptName
417 : REAL(DFTI_SPKP), INTENT(OUT) :: sglval
418 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
419 : END FUNCTION dfti_get_value_sglval
420 :
421 : ! overloading of DftiGetValue for DP value
422 : FUNCTION dfti_get_value_dblval(desc, OptName, DblVal)
423 : USE MKL_DFT_TYPE
424 : !DEC$ ATTRIBUTES C :: dfti_get_value_dblval
425 : !DEC$ ATTRIBUTES REFERENCE :: dfti_get_value_dblval
426 : INTEGER dfti_get_value_dblval
427 : INTEGER, INTENT(IN) :: OptName
428 : REAL(DFTI_DPKP), INTENT(OUT) :: DblVal
429 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
430 : END FUNCTION dfti_get_value_dblval
431 :
432 : ! overloading of DftiGetValue for integer vector
433 : FUNCTION dfti_get_value_intvec(desc, OptName, IntVec)
434 : USE MKL_DFT_TYPE
435 : !DEC$ ATTRIBUTES C :: dfti_get_value_intvec
436 : !DEC$ ATTRIBUTES REFERENCE :: dfti_get_value_intvec
437 : INTEGER dfti_get_value_intvec
438 : INTEGER, INTENT(IN) :: OptName
439 : INTEGER, INTENT(OUT), DIMENSION(*) :: IntVec
440 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
441 : END FUNCTION dfti_get_value_intvec
442 :
443 : ! overloading of DftiGetValue for char vector
444 : FUNCTION dfti_get_value_chars(desc, OptName, Chars)
445 : USE MKL_DFT_TYPE
446 : !DEC$ ATTRIBUTES C :: dfti_get_value_chars
447 : !DEC$ ATTRIBUTES REFERENCE :: dfti_get_value_chars
448 : INTEGER dfti_get_value_chars
449 : INTEGER, INTENT(IN) :: OptName
450 : CHARACTER(*), INTENT(OUT) :: Chars
451 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
452 : END FUNCTION dfti_get_value_chars
453 :
454 : END INTERFACE
455 :
456 : INTERFACE DftiComputeForward
457 :
458 : ! overloading of DftiComputeForward for SP R2C DFT (inplace)
459 : FUNCTION dfti_compute_forward_s(desc,sSrcDst)
460 : USE MKL_DFT_TYPE
461 : !DEC$ ATTRIBUTES C :: dfti_compute_forward_s
462 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_s
463 : INTEGER dfti_compute_forward_s
464 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
465 : REAL(DFTI_SPKP), INTENT(INOUT), DIMENSION(*) :: sSrcDst
466 : END FUNCTION dfti_compute_forward_s
467 :
468 : ! overloading of DftiComputeForward for SP C2C DFT (inplace)
469 : FUNCTION dfti_compute_forward_c(desc,cSrcDst)
470 : USE MKL_DFT_TYPE
471 : !DEC$ ATTRIBUTES C :: dfti_compute_forward_c
472 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_c
473 : INTEGER dfti_compute_forward_c
474 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
475 : COMPLEX(DFTI_SPKP), INTENT(INOUT), DIMENSION(*) :: cSrcDst
476 : END FUNCTION dfti_compute_forward_c
477 :
478 : ! overloading of DftiComputeForward for SP C2C DFT (inplace, split complex)
479 : FUNCTION dfti_compute_forward_ss(desc,sSrcDstRe,sSrcDstIm)
480 : USE MKL_DFT_TYPE
481 : !DEC$ ATTRIBUTES C :: dfti_compute_forward_ss
482 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_ss
483 : INTEGER dfti_compute_forward_ss
484 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
485 : REAL(DFTI_SPKP), DIMENSION(*) :: sSrcDstRe
486 : REAL(DFTI_SPKP), DIMENSION(*) :: sSrcDstIm
487 : END FUNCTION dfti_compute_forward_ss
488 :
489 : ! overloading of DftiComputeForward for SP R2C DFT (out-of-place)
490 : FUNCTION dfti_compute_forward_sc(desc,sSrc,cDst)
491 : USE MKL_DFT_TYPE
492 : !DEC$ ATTRIBUTES C :: dfti_compute_forward_sc
493 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_sc
494 : INTEGER dfti_compute_forward_sc
495 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
496 : REAL(DFTI_SPKP), INTENT(IN), DIMENSION(*) :: sSrc
497 : COMPLEX(DFTI_SPKP), INTENT(OUT), DIMENSION(*) :: cDst
498 : END FUNCTION dfti_compute_forward_sc
499 :
500 : ! overloading of DftiComputeForward for SP C2C DFT (out-of-place)
501 : FUNCTION dfti_compute_forward_cc(desc,cSrc,cDst)
502 : USE MKL_DFT_TYPE
503 : !DEC$ ATTRIBUTES C :: dfti_compute_forward_cc
504 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_cc
505 : INTEGER dfti_compute_forward_cc
506 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
507 : COMPLEX(DFTI_SPKP), INTENT(IN), DIMENSION(*) :: cSrc
508 : COMPLEX(DFTI_SPKP), INTENT(OUT), DIMENSION(*) :: cDst
509 : END FUNCTION dfti_compute_forward_cc
510 :
511 : ! overloading of DftiComputeForward for SP C2C DFT (out-of-place, split
512 : ! complex)
513 : FUNCTION dfti_compute_forward_ssss(desc,sSrcRe,sSrcIm,sDstRe,sDstIm)
514 : USE MKL_DFT_TYPE
515 : !DEC$ ATTRIBUTES C :: dfti_compute_forward_ssss
516 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_ssss
517 : INTEGER dfti_compute_forward_ssss
518 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
519 : REAL(DFTI_SPKP), INTENT(IN), DIMENSION(*) :: sSrcRe
520 : REAL(DFTI_SPKP), INTENT(IN), DIMENSION(*) :: sSrcIm
521 : REAL(DFTI_SPKP), INTENT(OUT), DIMENSION(*) :: sDstRe
522 : REAL(DFTI_SPKP), INTENT(OUT), DIMENSION(*) :: sDstIm
523 : END FUNCTION dfti_compute_forward_ssss
524 :
525 : ! overloading of DftiComputeForward for DP R2C DFT (inplace)
526 : FUNCTION dfti_compute_forward_d(desc,dSrcDst)
527 : USE MKL_DFT_TYPE
528 : !DEC$ ATTRIBUTES C :: dfti_compute_forward_d
529 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_d
530 : INTEGER dfti_compute_forward_d
531 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
532 : REAL(DFTI_DPKP), INTENT(INOUT), DIMENSION(*) :: dSrcDst
533 : END FUNCTION dfti_compute_forward_d
534 :
535 : ! overloading of DftiComputeForward for DP C2C DFT (inplace)
536 : FUNCTION dfti_compute_forward_z(desc,zSrcDst)
537 : USE MKL_DFT_TYPE
538 : !DEC$ ATTRIBUTES C :: dfti_compute_forward_z
539 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_z
540 : INTEGER dfti_compute_forward_z
541 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
542 : COMPLEX(DFTI_DPKP), INTENT(INOUT), DIMENSION(*) :: zSrcDst
543 : END FUNCTION dfti_compute_forward_z
544 :
545 : ! overloading of DftiComputeForward for DP C2C DFT (inplace, split complex)
546 : FUNCTION dfti_compute_forward_dd(desc,dSrcDstRe,dSrcDstIm)
547 : USE MKL_DFT_TYPE
548 : !DEC$ ATTRIBUTES C :: dfti_compute_forward_dd
549 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_dd
550 : INTEGER dfti_compute_forward_dd
551 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
552 : REAL(DFTI_DPKP), DIMENSION(*) :: dSrcDstRe
553 : REAL(DFTI_DPKP), DIMENSION(*) :: dSrcDstIm
554 : END FUNCTION dfti_compute_forward_dd
555 :
556 : ! overloading of DftiComputeForward for DP R2C DFT (out-of-place)
557 : FUNCTION dfti_compute_forward_dz(desc,dSrc,zDst)
558 : USE MKL_DFT_TYPE
559 : !DEC$ ATTRIBUTES C :: dfti_compute_forward_dz
560 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_dz
561 : INTEGER dfti_compute_forward_dz
562 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
563 : REAL(DFTI_DPKP), INTENT(IN), DIMENSION(*) :: dSrc
564 : COMPLEX(DFTI_DPKP), INTENT(OUT), DIMENSION(*) :: zDst
565 : END FUNCTION dfti_compute_forward_dz
566 :
567 : ! overloading of DftiComputeForward for DP C2C DFT (out-of-place)
568 : FUNCTION dfti_compute_forward_zz(desc,zSrc,zDst)
569 : USE MKL_DFT_TYPE
570 : !DEC$ ATTRIBUTES C :: dfti_compute_forward_zz
571 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_zz
572 : INTEGER dfti_compute_forward_zz
573 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
574 : COMPLEX(DFTI_DPKP), INTENT(IN), DIMENSION(*) :: zSrc
575 : COMPLEX(DFTI_DPKP), INTENT(OUT), DIMENSION(*) :: zDst
576 : END FUNCTION dfti_compute_forward_zz
577 :
578 : ! overloading of DftiComputeForward for DP C2C DFT (out-of-place, split
579 : ! complex)
580 : FUNCTION dfti_compute_forward_dddd(desc,dSrcRe,dSrcIm,dDstRe,dDstIm)
581 : USE MKL_DFT_TYPE
582 : !DEC$ ATTRIBUTES C :: dfti_compute_forward_dddd
583 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_dddd
584 : INTEGER dfti_compute_forward_dddd
585 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
586 : REAL(DFTI_DPKP), INTENT(IN), DIMENSION(*) :: dSrcRe
587 : REAL(DFTI_DPKP), INTENT(IN), DIMENSION(*) :: dSrcIm
588 : REAL(DFTI_DPKP), INTENT(OUT), DIMENSION(*) :: dDstRe
589 : REAL(DFTI_DPKP), INTENT(OUT), DIMENSION(*) :: dDstIm
590 : END FUNCTION dfti_compute_forward_dddd
591 :
592 : END INTERFACE DftiComputeForward
593 :
594 : INTERFACE DftiComputeBackward
595 :
596 :
597 : ! overloading of DftiComputeBackward for SP C2R DFT (inplace)
598 : FUNCTION dfti_compute_backward_s(desc,sSrcDst)
599 : USE MKL_DFT_TYPE
600 : !DEC$ ATTRIBUTES C :: dfti_compute_backward_s
601 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_s
602 : INTEGER dfti_compute_backward_s
603 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
604 : REAL(DFTI_SPKP), INTENT(INOUT), DIMENSION(*) :: sSrcDst
605 : END FUNCTION dfti_compute_backward_s
606 :
607 : ! overloading of DftiComputeBackward for SP C2C DFT (inplace)
608 : FUNCTION dfti_compute_backward_c(desc,cSrcDst)
609 : USE MKL_DFT_TYPE
610 : !DEC$ ATTRIBUTES C :: dfti_compute_backward_c
611 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_c
612 : INTEGER dfti_compute_backward_c
613 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
614 : COMPLEX(DFTI_SPKP), INTENT(INOUT), DIMENSION(*) :: cSrcDst
615 : END FUNCTION dfti_compute_backward_c
616 :
617 : ! overloading of DftiComputeBackward for SP C2C DFT (inplace, split complex)
618 : FUNCTION dfti_compute_backward_ss(desc,sSrcDstRe,sSrcDstIm)
619 : USE MKL_DFT_TYPE
620 : !DEC$ ATTRIBUTES C :: dfti_compute_backward_ss
621 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_ss
622 : INTEGER dfti_compute_backward_ss
623 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
624 : REAL(DFTI_SPKP), DIMENSION(*) :: sSrcDstRe
625 : REAL(DFTI_SPKP), DIMENSION(*) :: sSrcDstIm
626 : END FUNCTION dfti_compute_backward_ss
627 :
628 : ! overloading of DftiComputeBackward for SP C2R DFT (out-of-place)
629 : FUNCTION dfti_compute_backward_cs(desc,cSrc,sDst)
630 : USE MKL_DFT_TYPE
631 : !DEC$ ATTRIBUTES C :: dfti_compute_backward_cs
632 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_cs
633 : INTEGER dfti_compute_backward_cs
634 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
635 : COMPLEX(DFTI_SPKP), INTENT(IN), DIMENSION(*) :: cSrc
636 : REAL(DFTI_SPKP), INTENT(OUT), DIMENSION(*) :: sDst
637 : END FUNCTION dfti_compute_backward_cs
638 :
639 : ! overloading of DftiComputeBackward for SP C2C DFT (out-of-place)
640 : FUNCTION dfti_compute_backward_cc(desc,cSrc,cDst)
641 : USE MKL_DFT_TYPE
642 : !DEC$ ATTRIBUTES C :: dfti_compute_backward_cc
643 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_cc
644 : INTEGER dfti_compute_backward_cc
645 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
646 : COMPLEX(DFTI_SPKP), INTENT(IN), DIMENSION(*) :: cSrc
647 : COMPLEX(DFTI_SPKP), INTENT(OUT), DIMENSION(*) :: cDst
648 : END FUNCTION dfti_compute_backward_cc
649 :
650 : ! overloading of DftiComputeBackward for SP C2C DFT (out-of-place, split
651 : ! complex)
652 : FUNCTION dfti_compute_backward_ssss(desc,sSrcRe,sSrcIm,sDstRe,sDstIm)
653 : USE MKL_DFT_TYPE
654 : !DEC$ ATTRIBUTES C :: dfti_compute_backward_ssss
655 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_ssss
656 : INTEGER dfti_compute_backward_ssss
657 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
658 : REAL(DFTI_SPKP), INTENT(IN), DIMENSION(*) :: sSrcRe
659 : REAL(DFTI_SPKP), INTENT(IN), DIMENSION(*) :: sSrcIm
660 : REAL(DFTI_SPKP), INTENT(OUT), DIMENSION(*) :: sDstRe
661 : REAL(DFTI_SPKP), INTENT(OUT), DIMENSION(*) :: sDstIm
662 : END FUNCTION dfti_compute_backward_ssss
663 :
664 : ! overloading of DftiComputeBackward for DP C2R DFT (inplace)
665 : FUNCTION dfti_compute_backward_d(desc,dSrcDst)
666 : USE MKL_DFT_TYPE
667 : !DEC$ ATTRIBUTES C :: dfti_compute_backward_d
668 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_d
669 : INTEGER dfti_compute_backward_d
670 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
671 : REAL(DFTI_DPKP), INTENT(INOUT), DIMENSION(*) :: dSrcDst
672 : END FUNCTION dfti_compute_backward_d
673 :
674 : ! overloading of DftiComputeBackward for DP C2C DFT (inplace)
675 : FUNCTION dfti_compute_backward_z(desc,zSrcDst)
676 : USE MKL_DFT_TYPE
677 : !DEC$ ATTRIBUTES C :: dfti_compute_backward_z
678 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_z
679 : INTEGER dfti_compute_backward_z
680 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
681 : COMPLEX(DFTI_DPKP), INTENT(INOUT), DIMENSION(*) :: zSrcDst
682 : END FUNCTION dfti_compute_backward_z
683 :
684 : ! overloading of DftiComputeBackward for DP C2C DFT (inplace, split complex)
685 : FUNCTION dfti_compute_backward_dd(desc,dSrcDstRe,dSrcDstIm)
686 : USE MKL_DFT_TYPE
687 : !DEC$ ATTRIBUTES C :: dfti_compute_backward_dd
688 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_dd
689 : INTEGER dfti_compute_backward_dd
690 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
691 : REAL(DFTI_DPKP), DIMENSION(*) :: dSrcDstRe
692 : REAL(DFTI_DPKP), DIMENSION(*) :: dSrcDstIm
693 : END FUNCTION dfti_compute_backward_dd
694 :
695 : ! overloading of DftiComputeBackward for DP C2R DFT (out-of-place)
696 : FUNCTION dfti_compute_backward_zd(desc,zSrc,dDst)
697 : USE MKL_DFT_TYPE
698 : !DEC$ ATTRIBUTES C :: dfti_compute_backward_zd
699 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_zd
700 : INTEGER dfti_compute_backward_zd
701 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
702 : COMPLEX(DFTI_DPKP), INTENT(IN), DIMENSION(*) :: zSrc
703 : REAL(DFTI_DPKP), INTENT(OUT), DIMENSION(*) :: dDst
704 : END FUNCTION dfti_compute_backward_zd
705 :
706 : ! overloading of DftiComputeBackward for DP C2C DFT (out-of-place)
707 : FUNCTION dfti_compute_backward_zz(desc,zSrc,zDst)
708 : USE MKL_DFT_TYPE
709 : !DEC$ ATTRIBUTES C :: dfti_compute_backward_zz
710 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_zz
711 : INTEGER dfti_compute_backward_zz
712 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
713 : COMPLEX(DFTI_DPKP), INTENT(IN), DIMENSION(*) :: zSrc
714 : COMPLEX(DFTI_DPKP), INTENT(OUT), DIMENSION(*) :: zDst
715 : END FUNCTION dfti_compute_backward_zz
716 :
717 : ! overloading of DftiComputeBackward for DP C2C DFT (out-of-place, split
718 : ! complex)
719 : FUNCTION dfti_compute_backward_dddd(desc,dSrcRe,dSrcIm,dDstRe,dDstIm)
720 : USE MKL_DFT_TYPE
721 : !DEC$ ATTRIBUTES C :: dfti_compute_backward_dddd
722 : !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_dddd
723 : INTEGER dfti_compute_backward_dddd
724 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
725 : REAL(DFTI_DPKP), INTENT(IN), DIMENSION(*) :: dSrcRe
726 : REAL(DFTI_DPKP), INTENT(IN), DIMENSION(*) :: dSrcIm
727 : REAL(DFTI_DPKP), INTENT(OUT), DIMENSION(*) :: dDstRe
728 : REAL(DFTI_DPKP), INTENT(OUT), DIMENSION(*) :: dDstIm
729 : END FUNCTION dfti_compute_backward_dddd
730 :
731 : END INTERFACE DftiComputeBackward
732 :
733 : INTERFACE DftiFreeDescriptor
734 :
735 : FUNCTION dfti_free_descriptor_external(desc)
736 : USE MKL_DFT_TYPE
737 : !DEC$ ATTRIBUTES C :: dfti_free_descriptor_external
738 : !DEC$ ATTRIBUTES REFERENCE :: dfti_free_descriptor_external
739 : INTEGER dfti_free_descriptor_external
740 : TYPE(DFTI_DESCRIPTOR), POINTER :: desc
741 : END FUNCTION dfti_free_descriptor_external
742 :
743 : END INTERFACE
744 :
745 : INTERFACE DftiErrorClass
746 :
747 : FUNCTION dfti_error_class_external(Status, ErrorClass)
748 : USE MKL_DFT_TYPE
749 : !DEC$ ATTRIBUTES C :: dfti_error_class_external
750 : !DEC$ ATTRIBUTES REFERENCE :: dfti_error_class_external
751 : LOGICAL dfti_error_class_external
752 : INTEGER, INTENT(IN) :: Status
753 : INTEGER, INTENT(IN) :: ErrorClass
754 : END FUNCTION dfti_error_class_external
755 :
756 : END INTERFACE
757 :
758 : INTERFACE DftiErrorMessage
759 :
760 : FUNCTION dfti_error_message_external(Status)
761 : USE MKL_DFT_TYPE
762 : !DEC$ ATTRIBUTES C :: dfti_error_message_external
763 : !DEC$ ATTRIBUTES REFERENCE :: dfti_error_message_external
764 : CHARACTER(LEN=DFTI_MAX_MESSAGE_LENGTH) :: dfti_error_message_external
765 : INTEGER, INTENT(IN) :: Status
766 : END FUNCTION dfti_error_message_external
767 :
768 : END INTERFACE
769 :
770 : END MODULE MKL_DFTI
|