mkl_df.f90 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823
  1. ! file: mkl_df.f90
  2. !===============================================================================
  3. ! Copyright 2006-2022 Intel Corporation.
  4. !
  5. ! This software and the related documents are Intel copyrighted materials, and
  6. ! your use of them is governed by the express license under which they were
  7. ! provided to you (License). Unless the License provides otherwise, you may not
  8. ! use, modify, copy, publish, distribute, disclose or transmit this software or
  9. ! the related documents without Intel's prior written permission.
  10. !
  11. ! This software and the related documents are provided as is, with no express
  12. ! or implied warranties, other than those that are expressly stated in the
  13. ! License.
  14. !===============================================================================
  15. !++
  16. ! Fortran 90 DF interface.
  17. !--
  18. MODULE MKL_DF_TYPE
  19. !++
  20. ! Definitions for DF functions return values (errors, warnings)
  21. !--
  22. ! "No error" status
  23. INTEGER(KIND=4) DF_STATUS_OK
  24. PARAMETER (DF_STATUS_OK = 0)
  25. ! Common errors (-1..-999)
  26. INTEGER(KIND=4) DF_ERROR_CPU_NOT_SUPPORTED
  27. PARAMETER (DF_ERROR_CPU_NOT_SUPPORTED = -1)
  28. ! Data fitting errors (-1000..-1999)
  29. INTEGER(KIND=4) DF_ERROR_NULL_TASK_DESCRIPTOR
  30. INTEGER(KIND=4) DF_ERROR_MEM_FAILURE
  31. INTEGER(KIND=4) DF_ERROR_METHOD_NOT_SUPPORTED
  32. INTEGER(KIND=4) DF_ERROR_COMP_TYPE_NOT_SUPPORTED
  33. INTEGER(KIND=4) DF_ERROR_NULL_PTR
  34. INTEGER(KIND=4) DF_ERROR_BAD_NX
  35. INTEGER(KIND=4) DF_ERROR_BAD_X
  36. INTEGER(KIND=4) DF_ERROR_BAD_X_HINT
  37. INTEGER(KIND=4) DF_ERROR_BAD_NY
  38. INTEGER(KIND=4) DF_ERROR_BAD_Y
  39. INTEGER(KIND=4) DF_ERROR_BAD_Y_HINT
  40. INTEGER(KIND=4) DF_ERROR_BAD_SPLINE_ORDER
  41. INTEGER(KIND=4) DF_ERROR_BAD_SPLINE_TYPE
  42. INTEGER(KIND=4) DF_ERROR_BAD_IC_TYPE
  43. INTEGER(KIND=4) DF_ERROR_BAD_IC
  44. INTEGER(KIND=4) DF_ERROR_BAD_BC_TYPE
  45. INTEGER(KIND=4) DF_ERROR_BAD_BC
  46. INTEGER(KIND=4) DF_ERROR_BAD_PP_COEFF
  47. INTEGER(KIND=4) DF_ERROR_BAD_PP_COEFF_HINT
  48. INTEGER(KIND=4) DF_ERROR_BAD_PERIODIC_VAL
  49. INTEGER(KIND=4) DF_ERROR_BAD_DATA_ATTR
  50. INTEGER(KIND=4) DF_ERROR_BAD_DATA_IDX
  51. INTEGER(KIND=4) DF_ERROR_BAD_NSITE
  52. INTEGER(KIND=4) DF_ERROR_BAD_SITE
  53. INTEGER(KIND=4) DF_ERROR_BAD_SITE_HINT
  54. INTEGER(KIND=4) DF_ERROR_BAD_NDORDER
  55. INTEGER(KIND=4) DF_ERROR_BAD_DORDER
  56. INTEGER(KIND=4) DF_ERROR_BAD_DATA_HINT
  57. INTEGER(KIND=4) DF_ERROR_BAD_INTERP
  58. INTEGER(KIND=4) DF_ERROR_BAD_INTERP_HINT
  59. INTEGER(KIND=4) DF_ERROR_BAD_CELL_IDX
  60. INTEGER(KIND=4) DF_ERROR_BAD_NLIM
  61. INTEGER(KIND=4) DF_ERROR_BAD_LLIM
  62. INTEGER(KIND=4) DF_ERROR_BAD_RLIM
  63. INTEGER(KIND=4) DF_ERROR_BAD_INTEGR
  64. INTEGER(KIND=4) DF_ERROR_BAD_INTEGR_HINT
  65. INTEGER(KIND=4) DF_ERROR_BAD_LOOKUP_INTERP_SITE
  66. INTEGER(KIND=4) DF_ERROR_BAD_CHECK_FLAG
  67. PARAMETER (DF_ERROR_NULL_TASK_DESCRIPTOR = -1000)
  68. PARAMETER (DF_ERROR_MEM_FAILURE = -1001)
  69. PARAMETER (DF_ERROR_METHOD_NOT_SUPPORTED = -1002)
  70. PARAMETER (DF_ERROR_COMP_TYPE_NOT_SUPPORTED = -1003)
  71. PARAMETER (DF_ERROR_NULL_PTR = -1037)
  72. PARAMETER (DF_ERROR_BAD_NX = -1004)
  73. PARAMETER (DF_ERROR_BAD_X = -1005)
  74. PARAMETER (DF_ERROR_BAD_X_HINT = -1006)
  75. PARAMETER (DF_ERROR_BAD_NY = -1007)
  76. PARAMETER (DF_ERROR_BAD_Y = -1008)
  77. PARAMETER (DF_ERROR_BAD_Y_HINT = -1009)
  78. PARAMETER (DF_ERROR_BAD_SPLINE_ORDER = -1010)
  79. PARAMETER (DF_ERROR_BAD_SPLINE_TYPE = -1011)
  80. PARAMETER (DF_ERROR_BAD_IC_TYPE = -1012)
  81. PARAMETER (DF_ERROR_BAD_IC = -1013)
  82. PARAMETER (DF_ERROR_BAD_BC_TYPE = -1014)
  83. PARAMETER (DF_ERROR_BAD_BC = -1015)
  84. PARAMETER (DF_ERROR_BAD_PP_COEFF = -1016)
  85. PARAMETER (DF_ERROR_BAD_PP_COEFF_HINT = -1017)
  86. PARAMETER (DF_ERROR_BAD_PERIODIC_VAL = -1018)
  87. PARAMETER (DF_ERROR_BAD_DATA_ATTR = -1019)
  88. PARAMETER (DF_ERROR_BAD_DATA_IDX = -1020)
  89. PARAMETER (DF_ERROR_BAD_NSITE = -1021)
  90. PARAMETER (DF_ERROR_BAD_SITE = -1022)
  91. PARAMETER (DF_ERROR_BAD_SITE_HINT = -1023)
  92. PARAMETER (DF_ERROR_BAD_NDORDER = -1024)
  93. PARAMETER (DF_ERROR_BAD_DORDER = -1025)
  94. PARAMETER (DF_ERROR_BAD_DATA_HINT = -1026)
  95. PARAMETER (DF_ERROR_BAD_INTERP = -1027)
  96. PARAMETER (DF_ERROR_BAD_INTERP_HINT = -1028)
  97. PARAMETER (DF_ERROR_BAD_CELL_IDX = -1029)
  98. PARAMETER (DF_ERROR_BAD_NLIM = -1030)
  99. PARAMETER (DF_ERROR_BAD_LLIM = -1031)
  100. PARAMETER (DF_ERROR_BAD_RLIM = -1032)
  101. PARAMETER (DF_ERROR_BAD_INTEGR = -1033)
  102. PARAMETER (DF_ERROR_BAD_INTEGR_HINT = -1034)
  103. PARAMETER (DF_ERROR_BAD_LOOKUP_INTERP_SITE = -1035)
  104. PARAMETER (DF_ERROR_BAD_CHECK_FLAG = -1036)
  105. ! Internal errors caused by internal routines of the functions
  106. INTEGER(KIND=4) VSL_DF_ERROR_INTERNAL_C1
  107. INTEGER(KIND=4) VSL_DF_ERROR_INTERNAL_C2
  108. PARAMETER (VSL_DF_ERROR_INTERNAL_C1 = -1500)
  109. PARAMETER (VSL_DF_ERROR_INTERNAL_C2 = -1501)
  110. ! User-defined callback status
  111. INTEGER(KIND=4) DF_STATUS_EXACT_RESULT
  112. PARAMETER (DF_STATUS_EXACT_RESULT = 1000)
  113. !++
  114. ! MACROS USED IN DATA FITTING EDIT AND COMPUTE ROUTINES
  115. !--
  116. ! DF EditTask routine is way to edit input and output parameters of the task
  117. ! Macros below define parameters available for modification
  118. INTEGER DF_X
  119. INTEGER DF_Y
  120. INTEGER DF_IC
  121. INTEGER DF_BC
  122. INTEGER DF_PP_SCOEFF
  123. INTEGER DF_NX
  124. INTEGER DF_XHINT
  125. INTEGER DF_NY
  126. INTEGER DF_YHINT
  127. INTEGER DF_SPLINE_ORDER
  128. INTEGER DF_SPLINE_TYPE
  129. INTEGER DF_IC_TYPE
  130. INTEGER DF_BC_TYPE
  131. INTEGER DF_PP_COEFF_HINT
  132. INTEGER DF_CHECK_FLAG
  133. PARAMETER (DF_X = 1)
  134. PARAMETER (DF_Y = 2)
  135. PARAMETER (DF_IC = 3)
  136. PARAMETER (DF_BC = 4)
  137. PARAMETER (DF_PP_SCOEFF = 5)
  138. PARAMETER (DF_NX = 14)
  139. PARAMETER (DF_XHINT = 15)
  140. PARAMETER (DF_NY = 16)
  141. PARAMETER (DF_YHINT = 17)
  142. PARAMETER (DF_SPLINE_ORDER = 18)
  143. PARAMETER (DF_SPLINE_TYPE = 19)
  144. PARAMETER (DF_IC_TYPE = 20)
  145. PARAMETER (DF_BC_TYPE = 21)
  146. PARAMETER (DF_PP_COEFF_HINT = 22)
  147. PARAMETER (DF_CHECK_FLAG = 23)
  148. !++
  149. ! SPLINE ORDERS SUPPORTED IN DATA FITTING ROUTINES
  150. !--
  151. INTEGER(KIND=4) DF_PP_STD
  152. INTEGER(KIND=4) DF_PP_LINEAR
  153. INTEGER(KIND=4) DF_PP_QUADRATIC
  154. INTEGER(KIND=4) DF_PP_CUBIC
  155. PARAMETER (DF_PP_STD = 0)
  156. PARAMETER (DF_PP_LINEAR = 2)
  157. PARAMETER (DF_PP_QUADRATIC = 3)
  158. PARAMETER (DF_PP_CUBIC = 4)
  159. !++
  160. ! SPLINE TYPES SUPPORTED IN DATA FITTING ROUTINES
  161. !--
  162. INTEGER(KIND=4) DF_PP_DEFAULT
  163. INTEGER(KIND=4) DF_PP_SUBBOTIN
  164. INTEGER(KIND=4) DF_PP_NATURAL
  165. INTEGER(KIND=4) DF_PP_HERMITE
  166. INTEGER(KIND=4) DF_PP_BESSEL
  167. INTEGER(KIND=4) DF_PP_AKIMA
  168. INTEGER(KIND=4) DF_LOOKUP_INTERPOLANT
  169. INTEGER(KIND=4) DF_CR_STEPWISE_CONST_INTERPOLANT
  170. INTEGER(KIND=4) DF_CL_STEPWISE_CONST_INTERPOLANT
  171. INTEGER(KIND=4) DF_PP_HYMAN
  172. PARAMETER (DF_PP_DEFAULT = 0)
  173. PARAMETER (DF_PP_SUBBOTIN = 1)
  174. PARAMETER (DF_PP_NATURAL = 2)
  175. PARAMETER (DF_PP_HERMITE = 3)
  176. PARAMETER (DF_PP_BESSEL = 4)
  177. PARAMETER (DF_PP_AKIMA = 5)
  178. PARAMETER (DF_LOOKUP_INTERPOLANT = 6)
  179. PARAMETER (DF_CR_STEPWISE_CONST_INTERPOLANT = 7)
  180. PARAMETER (DF_CL_STEPWISE_CONST_INTERPOLANT = 8)
  181. PARAMETER (DF_PP_HYMAN = 9)
  182. !++
  183. ! TYPES OF BOUNDARY CONDITIONS USED IN SPLINE CONSTRUCTION
  184. !--
  185. INTEGER DF_NO_BC
  186. INTEGER DF_BC_NOT_A_KNOT
  187. INTEGER DF_BC_FREE_END
  188. INTEGER DF_BC_1ST_LEFT_DER
  189. INTEGER DF_BC_1ST_RIGHT_DER
  190. INTEGER DF_BC_2ND_LEFT_DER
  191. INTEGER DF_BC_2ND_RIGHT_DER
  192. INTEGER DF_BC_PERIODIC
  193. INTEGER DF_BC_Q_VAL
  194. PARAMETER (DF_NO_BC = 0)
  195. PARAMETER (DF_BC_NOT_A_KNOT = 1)
  196. PARAMETER (DF_BC_FREE_END = 2)
  197. PARAMETER (DF_BC_1ST_LEFT_DER = 4)
  198. PARAMETER (DF_BC_1ST_RIGHT_DER = 8)
  199. PARAMETER (DF_BC_2ND_LEFT_DER = 16)
  200. PARAMETER (DF_BC_2ND_RIGHT_DER = 32)
  201. PARAMETER (DF_BC_PERIODIC = 64)
  202. PARAMETER (DF_BC_Q_VAL = 128)
  203. !++
  204. ! TYPES OF INTERNAL CONDITIONS USED IN SPLINE CONSTRUCTION
  205. !--
  206. INTEGER DF_NO_IC
  207. INTEGER DF_IC_1ST_DER
  208. INTEGER DF_IC_2ND_DER
  209. INTEGER DF_IC_Q_KNOT
  210. PARAMETER (DF_NO_IC = 0)
  211. PARAMETER (DF_IC_1ST_DER = 1)
  212. PARAMETER (DF_IC_2ND_DER = 2)
  213. PARAMETER (DF_IC_Q_KNOT = 8)
  214. !++
  215. ! TYPES OF SUPPORTED HINTS
  216. !--
  217. INTEGER(KIND=4) DF_NO_HINT
  218. INTEGER(KIND=4) DF_NON_UNIFORM_PARTITION
  219. INTEGER(KIND=4) DF_QUASI_UNIFORM_PARTITION
  220. INTEGER(KIND=4) DF_UNIFORM_PARTITION
  221. INTEGER(KIND=4) DF_MATRIX_STORAGE_ROWS
  222. INTEGER(KIND=4) DF_MATRIX_STORAGE_COLS
  223. INTEGER(KIND=4) DF_SORTED_DATA
  224. INTEGER(KIND=4) DF_1ST_COORDINATE
  225. INTEGER(KIND=4) DF_MATRIX_STORAGE_FUNCS_SITES_DERS
  226. INTEGER(KIND=4) DF_MATRIX_STORAGE_FUNCS_DERS_SITES
  227. INTEGER(KIND=4) DF_MATRIX_STORAGE_SITES_FUNCS_DERS
  228. INTEGER(KIND=4) DF_MATRIX_STORAGE_SITES_DERS_FUNCS
  229. PARAMETER (DF_NO_HINT = INT(Z"00000000", 4))
  230. PARAMETER (DF_NON_UNIFORM_PARTITION = INT(Z"00000001", 4))
  231. PARAMETER (DF_QUASI_UNIFORM_PARTITION = INT(Z"00000002", 4))
  232. PARAMETER (DF_UNIFORM_PARTITION = INT(Z"00000004", 4))
  233. PARAMETER (DF_MATRIX_STORAGE_ROWS = INT(Z"00000010", 4))
  234. PARAMETER (DF_MATRIX_STORAGE_COLS = INT(Z"00000020", 4))
  235. PARAMETER (DF_SORTED_DATA = INT(Z"00000040", 4))
  236. PARAMETER (DF_1ST_COORDINATE = INT(Z"00000080", 4))
  237. PARAMETER (DF_MATRIX_STORAGE_FUNCS_SITES_DERS = &
  238. & DF_MATRIX_STORAGE_ROWS)
  239. PARAMETER (DF_MATRIX_STORAGE_FUNCS_DERS_SITES = &
  240. & DF_MATRIX_STORAGE_COLS)
  241. PARAMETER (DF_MATRIX_STORAGE_SITES_FUNCS_DERS = &
  242. & INT(Z"00000100", 4))
  243. PARAMETER (DF_MATRIX_STORAGE_SITES_DERS_FUNCS = &
  244. & INT(Z"00000200", 4))
  245. !++
  246. ! TYPES OF APRIORI INFORMATION ABOUT DATA STRUCTURE
  247. !--
  248. INTEGER(KIND=4) DF_NO_APRIORI_INFO
  249. INTEGER(KIND=4) DF_APRIORI_MOST_LIKELY_CELL
  250. PARAMETER (DF_NO_APRIORI_INFO = INT(Z"00000000", 4))
  251. PARAMETER (DF_APRIORI_MOST_LIKELY_CELL = INT(Z"00000001", 4))
  252. !++
  253. ! ESTIMATES TO BE COMUTED WITH DATA FITTING COMPUTE ROUTINE
  254. !--
  255. INTEGER(KIND=4) DF_INTERP
  256. INTEGER(KIND=4) DF_CELL
  257. INTEGER(KIND=4) DF_INTERP_USER_CELL
  258. PARAMETER (DF_INTERP = INT(Z"00000001", 4))
  259. PARAMETER (DF_CELL = INT(Z"00000002", 4))
  260. PARAMETER (DF_INTERP_USER_CELL = INT(Z"00000004", 4))
  261. !++
  262. ! METHODS TO BE USED FOR EVALUATION OF THE SPLINE RELATED ESTIMATES
  263. !--
  264. INTEGER DF_METHOD_STD
  265. INTEGER DF_METHOD_PP
  266. PARAMETER (DF_METHOD_STD = 0)
  267. PARAMETER (DF_METHOD_PP = 1)
  268. !++
  269. ! POSSIBLE VALUES FOR DF_CHECK_FLAG
  270. !--
  271. INTEGER DF_ENABLE_CHECK_FLAG
  272. INTEGER DF_DISABLE_CHECK_FLAG
  273. PARAMETER (DF_ENABLE_CHECK_FLAG = 0)
  274. PARAMETER (DF_DISABLE_CHECK_FLAG = 1)
  275. !++
  276. ! SPLINE FORMATS SUPPORTED IN SPLINE CONSTRUCTION ROUTINE
  277. !--
  278. INTEGER DF_PP_SPLINE
  279. PARAMETER (DF_PP_SPLINE = 0)
  280. !++
  281. ! VALUES OF FLAG INDICATING WHICH, LEFT OR RIGHT, INTEGRATION LIMITS
  282. ! ARE PASSED BY INTEGRATION ROUTINE INTO SEARCH CALLBACK
  283. !--
  284. INTEGER(KIND=4) DF_INTEGR_SEARCH_CB_LLIM_FLAG
  285. INTEGER(KIND=4) DF_INTEGR_SEARCH_CB_RLIM_FLAG
  286. PARAMETER (DF_INTEGR_SEARCH_CB_LLIM_FLAG = INT(Z"00000000", 4))
  287. PARAMETER (DF_INTEGR_SEARCH_CB_RLIM_FLAG = INT(Z"00000001", 4))
  288. !++
  289. ! TYPEDEFS
  290. !--
  291. TYPE DF_TASK
  292. INTEGER(KIND=4) descriptor1
  293. INTEGER(KIND=4) descriptor2
  294. END TYPE DF_TASK
  295. !++
  296. ! DATA FITTING INTERPOLATION CALLBACK INTERNAL PARAMETERS STRUCTURE
  297. !--
  298. TYPE DF_INTERP_CALLBACK_LIBRARY_PARAMS
  299. INTEGER(KIND=4) ::reserved1
  300. END TYPE DF_INTERP_CALLBACK_LIBRARY_PARAMS
  301. !++
  302. ! DATA FITTING INTEGRATION CALLBACK INTERNAL PARAMETERS STRUCTURE
  303. !--
  304. TYPE DF_INTEGR_CALLBACK_LIBRARY_PARAMS
  305. INTEGER(KIND=4) ::reserved1
  306. END TYPE DF_INTEGR_CALLBACK_LIBRARY_PARAMS
  307. !++
  308. ! DATA FITTING SEARCH CALLBACK INTERNAL PARAMETERS STRUCTURE
  309. !--
  310. TYPE DF_SEARCH_CALLBACK_LIBRARY_PARAMS
  311. INTEGER(KIND=4) ::limit_type_flag
  312. END TYPE DF_SEARCH_CALLBACK_LIBRARY_PARAMS
  313. END MODULE MKL_DF_TYPE
  314. MODULE MKL_DF
  315. USE MKL_DF_TYPE
  316. !++
  317. ! DF CONSTRUCTOR FUNCTION DECLARATIONS.
  318. !--
  319. ! NewTask1D - 1d task creation/initialization
  320. INTERFACE
  321. INTEGER FUNCTION dfsnewtask1d(task,nx,x,xhint,ny,y,yhint)
  322. USE MKL_DF_TYPE
  323. TYPE(DF_TASK) :: task
  324. INTEGER,INTENT(IN) :: nx
  325. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: x
  326. INTEGER,INTENT(IN),OPTIONAL :: xhint
  327. INTEGER,INTENT(IN),OPTIONAL :: ny
  328. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: y
  329. INTEGER,INTENT(IN),OPTIONAL :: yhint
  330. END FUNCTION
  331. END INTERFACE
  332. INTERFACE
  333. INTEGER FUNCTION dfdnewtask1d(task,nx,x,xhint,ny,y,yhint)
  334. USE MKL_DF_TYPE
  335. TYPE(DF_TASK) :: task
  336. INTEGER,INTENT(IN) :: nx
  337. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: x
  338. INTEGER,INTENT(IN),OPTIONAL :: xhint
  339. INTEGER,INTENT(IN),OPTIONAL :: ny
  340. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: y
  341. INTEGER,INTENT(IN),OPTIONAL :: yhint
  342. END FUNCTION
  343. END INTERFACE
  344. !++
  345. ! DF EDITOR FUNCTION DECLARATIONS.
  346. !--
  347. ! Modifies a pointer to an array held in a Data Fitting task descriptor
  348. INTERFACE
  349. INTEGER FUNCTION dfseditptr(task,ptr_attr,ptr)
  350. USE MKL_DF_TYPE
  351. TYPE(DF_TASK) :: task
  352. INTEGER,INTENT(IN) :: ptr_attr
  353. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: ptr
  354. END FUNCTION
  355. END INTERFACE
  356. INTERFACE
  357. INTEGER FUNCTION dfdeditptr(task,ptr_attr,ptr)
  358. USE MKL_DF_TYPE
  359. TYPE(DF_TASK) :: task
  360. INTEGER,INTENT(IN) :: ptr_attr
  361. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: ptr
  362. END FUNCTION
  363. END INTERFACE
  364. ! Modifies a parameter value in a Data Fitting task descriptor
  365. INTERFACE
  366. INTEGER FUNCTION dfieditval(task,val_attr,val)
  367. USE MKL_DF_TYPE
  368. TYPE(DF_TASK) :: task
  369. INTEGER,INTENT(IN) :: val_attr
  370. INTEGER,INTENT(IN) :: val
  371. END FUNCTION
  372. END INTERFACE
  373. ! Modifies a pointer to the memory representing a coordinate of the data
  374. ! stored in matrix format (function or spline coefficients)
  375. INTERFACE
  376. INTEGER FUNCTION dfseditidxptr(task,ptr_attr,idx,ptr)
  377. USE MKL_DF_TYPE
  378. TYPE(DF_TASK) :: task
  379. INTEGER,INTENT(IN) :: ptr_attr
  380. INTEGER,INTENT(IN) :: idx
  381. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: ptr
  382. END FUNCTION
  383. END INTERFACE
  384. INTERFACE
  385. INTEGER FUNCTION dfdeditidxptr(task,ptr_attr,idx,ptr)
  386. USE MKL_DF_TYPE
  387. TYPE(DF_TASK) :: task
  388. INTEGER,INTENT(IN) :: ptr_attr
  389. INTEGER,INTENT(IN) :: idx
  390. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: ptr
  391. END FUNCTION
  392. END INTERFACE
  393. ! Modifies parameters of Piece-wise Polynomial (PP) spline
  394. INTERFACE
  395. INTEGER FUNCTION dfseditppspline1d(task,s_order,s_type, &
  396. & bc_type,bc,ic_type,ic,scoeff,scoeffhint)
  397. USE MKL_DF_TYPE
  398. TYPE(DF_TASK) :: task
  399. INTEGER,INTENT(IN) :: s_order
  400. INTEGER,INTENT(IN) :: s_type
  401. INTEGER,INTENT(IN),OPTIONAL :: bc_type
  402. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: bc
  403. INTEGER,INTENT(IN),OPTIONAL :: ic_type
  404. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: ic
  405. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: scoeff
  406. INTEGER,INTENT(IN),OPTIONAL :: scoeffhint
  407. END FUNCTION
  408. END INTERFACE
  409. INTERFACE
  410. INTEGER FUNCTION dfdeditppspline1d(task,s_order,s_type, &
  411. & bc_type,bc,ic_type,ic,scoeff,scoeffhint)
  412. USE MKL_DF_TYPE
  413. TYPE(DF_TASK) :: task
  414. INTEGER,INTENT(IN) :: s_order
  415. INTEGER,INTENT(IN) :: s_type
  416. INTEGER,INTENT(IN),OPTIONAL :: bc_type
  417. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: bc
  418. INTEGER,INTENT(IN),OPTIONAL :: ic_type
  419. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: ic
  420. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: scoeff
  421. INTEGER,INTENT(IN),OPTIONAL :: scoeffhint
  422. END FUNCTION
  423. END INTERFACE
  424. !++
  425. ! DF TASK QUERYING FUNCTION DECLARATIONS.
  426. !--
  427. ! Reads a pointer to an array held in a Data Fitting task descriptor
  428. INTERFACE
  429. INTEGER FUNCTION dfsqueryptr(task,ptr_attr,ptr)
  430. USE MKL_DF_TYPE
  431. TYPE(DF_TASK) :: task
  432. INTEGER,INTENT(IN) :: ptr_attr
  433. INTEGER(KIND=8),INTENT(OUT) :: ptr
  434. END FUNCTION
  435. END INTERFACE
  436. INTERFACE
  437. INTEGER FUNCTION dfdqueryptr(task,ptr_attr,ptr)
  438. USE MKL_DF_TYPE
  439. TYPE(DF_TASK) :: task
  440. INTEGER,INTENT(IN) :: ptr_attr
  441. INTEGER(KIND=8),INTENT(OUT) :: ptr
  442. END FUNCTION
  443. END INTERFACE
  444. ! Reads a parameter value in a Data Fitting task descriptor
  445. INTERFACE
  446. INTEGER FUNCTION dfiqueryval(task,val_attr,val)
  447. USE MKL_DF_TYPE
  448. TYPE(DF_TASK) :: task
  449. INTEGER,INTENT(IN) :: val_attr
  450. INTEGER,INTENT(OUT) :: val
  451. END FUNCTION
  452. END INTERFACE
  453. ! Reads a pointer to the memory representing a coordinate of the data
  454. ! stored in matrix format (function or spline coefficients)
  455. INTERFACE
  456. INTEGER FUNCTION dfsqueryidxptr(task,ptr_attr,idx,ptr)
  457. USE MKL_DF_TYPE
  458. TYPE(DF_TASK) :: task
  459. INTEGER,INTENT(IN) :: ptr_attr
  460. INTEGER,INTENT(IN) :: idx
  461. INTEGER(KIND=8),INTENT(OUT) :: ptr
  462. END FUNCTION
  463. END INTERFACE
  464. INTERFACE
  465. INTEGER FUNCTION dfdqueryidxptr(task,ptr_attr,idx,ptr)
  466. USE MKL_DF_TYPE
  467. TYPE(DF_TASK) :: task
  468. INTEGER,INTENT(IN) :: ptr_attr
  469. INTEGER,INTENT(IN) :: idx
  470. INTEGER(KIND=8),INTENT(OUT) :: ptr
  471. END FUNCTION
  472. END INTERFACE
  473. !++
  474. ! DF COMPUTE FUNCTION DECLARATIONS.
  475. !--
  476. INTERFACE
  477. INTEGER FUNCTION dfsconstruct1d(task,s_format,method)
  478. USE MKL_DF_TYPE
  479. TYPE(DF_TASK) :: task
  480. INTEGER,INTENT(IN) :: s_format
  481. INTEGER,INTENT(IN) :: method
  482. END FUNCTION
  483. END INTERFACE
  484. INTERFACE
  485. INTEGER FUNCTION dfdconstruct1d(task,s_format,method)
  486. USE MKL_DF_TYPE
  487. TYPE(DF_TASK) :: task
  488. INTEGER,INTENT(IN) :: s_format
  489. INTEGER,INTENT(IN) :: method
  490. END FUNCTION
  491. END INTERFACE
  492. ! Interpolate1d
  493. INTERFACE
  494. INTEGER FUNCTION dfsinterpolate1d(task, type, method, nsite, &
  495. & site, sitehint, ndorder, dorder, datahint, r, rhint, cell)
  496. USE MKL_DF_TYPE
  497. TYPE(DF_TASK) :: task
  498. INTEGER,INTENT(IN) :: type
  499. INTEGER,INTENT(IN) :: method
  500. INTEGER,INTENT(IN) :: nsite
  501. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: site
  502. INTEGER,INTENT(IN),OPTIONAL :: sitehint
  503. INTEGER,INTENT(IN),OPTIONAL :: ndorder
  504. INTEGER, DIMENSION(*),INTENT(IN),OPTIONAL :: dorder
  505. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: datahint
  506. REAL(KIND=4),DIMENSION(*),INTENT(OUT) :: r
  507. INTEGER,INTENT(IN),OPTIONAL :: rhint
  508. INTEGER,DIMENSION(*),INTENT(OUT),OPTIONAL :: cell
  509. END FUNCTION
  510. END INTERFACE
  511. INTERFACE
  512. INTEGER FUNCTION dfdinterpolate1d(task, type, method, nsite, &
  513. & site, sitehint, ndorder, dorder, datahint, r, rhint, cell)
  514. USE MKL_DF_TYPE
  515. TYPE(DF_TASK) :: task
  516. INTEGER,INTENT(IN) :: type
  517. INTEGER,INTENT(IN) :: method
  518. INTEGER,INTENT(IN) :: nsite
  519. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: site
  520. INTEGER,INTENT(IN),OPTIONAL :: sitehint
  521. INTEGER,INTENT(IN),OPTIONAL :: ndorder
  522. INTEGER, DIMENSION(*),INTENT(IN),OPTIONAL :: dorder
  523. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: datahint
  524. REAL(KIND=8),DIMENSION(*),INTENT(OUT) :: r
  525. INTEGER,INTENT(IN),OPTIONAL :: rhint
  526. INTEGER,DIMENSION(*),INTENT(OUT),OPTIONAL :: cell
  527. END FUNCTION
  528. END INTERFACE
  529. ! InterpolateEx1d
  530. INTERFACE
  531. INTEGER FUNCTION dfsinterpolateex1d(task, type, method, nsite, &
  532. & site, sitehint, ndorder, dorder, datahint, r, rhint, cell, &
  533. & le_cb, le_params, re_cb, re_params, i_cb, i_params, search_cb, &
  534. & search_params)
  535. USE MKL_DF_TYPE
  536. TYPE(DF_TASK) :: task
  537. INTEGER,INTENT(IN) :: type
  538. INTEGER,INTENT(IN) :: method
  539. INTEGER,INTENT(IN) :: nsite
  540. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: site
  541. INTEGER,INTENT(IN),OPTIONAL :: sitehint
  542. INTEGER,INTENT(IN),OPTIONAL :: ndorder
  543. INTEGER, DIMENSION(*),INTENT(IN),OPTIONAL :: dorder
  544. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: datahint
  545. REAL(KIND=4),DIMENSION(*),INTENT(OUT) :: r
  546. INTEGER,INTENT(IN),OPTIONAL :: rhint
  547. INTEGER,DIMENSION(*),INTENT(OUT),OPTIONAL :: cell
  548. INTEGER,EXTERNAL,OPTIONAL :: le_cb
  549. INTEGER,DIMENSION(*),OPTIONAL :: le_params
  550. INTEGER,EXTERNAL,OPTIONAL :: re_cb
  551. INTEGER,DIMENSION(*),OPTIONAL :: re_params
  552. INTEGER,EXTERNAL,OPTIONAL :: i_cb
  553. INTEGER,DIMENSION(*),OPTIONAL :: i_params
  554. INTEGER,EXTERNAL,OPTIONAL :: search_cb
  555. INTEGER,DIMENSION(*),OPTIONAL :: search_params
  556. END FUNCTION
  557. END INTERFACE
  558. INTERFACE
  559. INTEGER FUNCTION dfdinterpolateex1d(task, type, method, nsite, &
  560. & site, sitehint, ndorder, dorder, datahint, r, rhint, cell, &
  561. & le_cb, le_params, re_cb, re_params, i_cb, i_params, search_cb, &
  562. & search_params)
  563. USE MKL_DF_TYPE
  564. TYPE(DF_TASK) :: task
  565. INTEGER,INTENT(IN) :: type
  566. INTEGER,INTENT(IN) :: method
  567. INTEGER,INTENT(IN) :: nsite
  568. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: site
  569. INTEGER,INTENT(IN),OPTIONAL :: sitehint
  570. INTEGER,INTENT(IN),OPTIONAL :: ndorder
  571. INTEGER, DIMENSION(*),INTENT(IN),OPTIONAL :: dorder
  572. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: datahint
  573. REAL(KIND=8),DIMENSION(*),INTENT(OUT) :: r
  574. INTEGER,INTENT(IN),OPTIONAL :: rhint
  575. INTEGER,DIMENSION(*),INTENT(OUT),OPTIONAL :: cell
  576. INTEGER,EXTERNAL,OPTIONAL :: le_cb
  577. INTEGER,DIMENSION(*),OPTIONAL :: le_params
  578. INTEGER,EXTERNAL,OPTIONAL :: re_cb
  579. INTEGER,DIMENSION(*),OPTIONAL :: re_params
  580. INTEGER,EXTERNAL,OPTIONAL :: i_cb
  581. INTEGER,DIMENSION(*),OPTIONAL :: i_params
  582. INTEGER,EXTERNAL,OPTIONAL :: search_cb
  583. INTEGER,DIMENSION(*),OPTIONAL :: search_params
  584. END FUNCTION
  585. END INTERFACE
  586. ! Integrate1d
  587. INTERFACE
  588. INTEGER FUNCTION dfsintegrate1d(task, method, nlim, llim, &
  589. & llimhint, rlim, rlimhint, ldatahint, rdatahint, r, rhint)
  590. USE MKL_DF_TYPE
  591. TYPE(DF_TASK) :: task
  592. INTEGER,INTENT(IN) :: method
  593. INTEGER,INTENT(IN) :: nlim
  594. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: llim
  595. INTEGER,INTENT(IN),OPTIONAL :: llimhint
  596. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: rlim
  597. INTEGER,INTENT(IN),OPTIONAL :: rlimhint
  598. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: ldatahint
  599. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: rdatahint
  600. REAL(KIND=4),DIMENSION(*),INTENT(OUT) :: r
  601. INTEGER,INTENT(IN),OPTIONAL :: rhint
  602. END FUNCTION
  603. END INTERFACE
  604. INTERFACE
  605. INTEGER FUNCTION dfdintegrate1d(task, method, nlim, llim, &
  606. & llimhint, rlim, rlimhint, ldatahint, rdatahint, r, rhint)
  607. USE MKL_DF_TYPE
  608. TYPE(DF_TASK) :: task
  609. INTEGER,INTENT(IN) :: method
  610. INTEGER,INTENT(IN) :: nlim
  611. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: llim
  612. INTEGER,INTENT(IN),OPTIONAL :: llimhint
  613. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: rlim
  614. INTEGER,INTENT(IN),OPTIONAL :: rlimhint
  615. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: ldatahint
  616. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: rdatahint
  617. REAL(KIND=8),DIMENSION(*),INTENT(OUT) :: r
  618. INTEGER,INTENT(IN),OPTIONAL :: rhint
  619. END FUNCTION
  620. END INTERFACE
  621. ! IntegrateEx1d
  622. INTERFACE
  623. INTEGER FUNCTION dfsintegrateex1d(task, method, nlim, llim, &
  624. & llimhint, rlim, rlimhint, ldatahint, rdatahint, r, rhint, &
  625. & le_cb, le_params, re_cb, re_params, i_cb, i_params, search_cb, &
  626. & search_params)
  627. USE MKL_DF_TYPE
  628. TYPE(DF_TASK) :: task
  629. INTEGER,INTENT(IN) :: method
  630. INTEGER,INTENT(IN) :: nlim
  631. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: llim
  632. INTEGER,INTENT(IN),OPTIONAL :: llimhint
  633. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: rlim
  634. INTEGER,INTENT(IN),OPTIONAL :: rlimhint
  635. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: ldatahint
  636. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: rdatahint
  637. REAL(KIND=4),DIMENSION(*),INTENT(OUT) :: r
  638. INTEGER,INTENT(IN),OPTIONAL :: rhint
  639. INTEGER,EXTERNAL,OPTIONAL :: le_cb
  640. INTEGER,DIMENSION(*),OPTIONAL :: le_params
  641. INTEGER,EXTERNAL,OPTIONAL :: re_cb
  642. INTEGER,DIMENSION(*),OPTIONAL :: re_params
  643. INTEGER,EXTERNAL,OPTIONAL :: i_cb
  644. INTEGER,DIMENSION(*),OPTIONAL :: i_params
  645. INTEGER,EXTERNAL,OPTIONAL :: search_cb
  646. INTEGER,DIMENSION(*),OPTIONAL :: search_params
  647. END FUNCTION
  648. END INTERFACE
  649. INTERFACE
  650. INTEGER FUNCTION dfdintegrateex1d(task, method, nlim, llim, &
  651. & llimhint, rlim, rlimhint, ldatahint, rdatahint, r, rhint, &
  652. & le_cb, le_params, re_cb, re_params, i_cb, i_params, search_cb, &
  653. & search_params)
  654. USE MKL_DF_TYPE
  655. TYPE(DF_TASK) :: task
  656. INTEGER,INTENT(IN) :: method
  657. INTEGER,INTENT(IN) :: nlim
  658. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: llim
  659. INTEGER,INTENT(IN),OPTIONAL :: llimhint
  660. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: rlim
  661. INTEGER,INTENT(IN),OPTIONAL :: rlimhint
  662. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: ldatahint
  663. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: rdatahint
  664. REAL(KIND=8),DIMENSION(*),INTENT(OUT) :: r
  665. INTEGER,INTENT(IN),OPTIONAL :: rhint
  666. INTEGER,EXTERNAL,OPTIONAL :: le_cb
  667. INTEGER,DIMENSION(*),OPTIONAL :: le_params
  668. INTEGER,EXTERNAL,OPTIONAL :: re_cb
  669. INTEGER,DIMENSION(*),OPTIONAL :: re_params
  670. INTEGER,EXTERNAL,OPTIONAL :: i_cb
  671. INTEGER,DIMENSION(*),OPTIONAL :: i_params
  672. INTEGER,EXTERNAL,OPTIONAL :: search_cb
  673. INTEGER,DIMENSION(*),OPTIONAL :: search_params
  674. END FUNCTION
  675. END INTERFACE
  676. ! SearchCells1d
  677. INTERFACE
  678. INTEGER FUNCTION dfssearchcells1d(task, method, nsite, site, &
  679. & sitehint, datahint, cell)
  680. USE MKL_DF_TYPE
  681. TYPE(DF_TASK) :: task
  682. INTEGER,INTENT(IN) :: method
  683. INTEGER,INTENT(IN) :: nsite
  684. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: site
  685. INTEGER,INTENT(IN),OPTIONAL :: sitehint
  686. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: datahint
  687. INTEGER,DIMENSION(*),INTENT(OUT) :: cell
  688. END FUNCTION
  689. END INTERFACE
  690. INTERFACE
  691. INTEGER FUNCTION dfdsearchcells1d(task, method, nsite, site, &
  692. & sitehint, datahint, cell)
  693. USE MKL_DF_TYPE
  694. TYPE(DF_TASK) :: task
  695. INTEGER,INTENT(IN) :: method
  696. INTEGER,INTENT(IN) :: nsite
  697. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: site
  698. INTEGER,INTENT(IN),OPTIONAL :: sitehint
  699. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: datahint
  700. INTEGER,DIMENSION(*),INTENT(OUT) :: cell
  701. END FUNCTION
  702. END INTERFACE
  703. ! SearchCellsEx1d
  704. INTERFACE
  705. INTEGER FUNCTION dfssearchcellsex1d(task, method, nsite, site, &
  706. & sitehint, datahint, cell, search_cb, search_params)
  707. USE MKL_DF_TYPE
  708. TYPE(DF_TASK) :: task
  709. INTEGER,INTENT(IN) :: method
  710. INTEGER,INTENT(IN) :: nsite
  711. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: site
  712. INTEGER,INTENT(IN),OPTIONAL :: sitehint
  713. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: datahint
  714. INTEGER,DIMENSION(*),INTENT(OUT) :: cell
  715. INTEGER,EXTERNAL,OPTIONAL :: search_cb
  716. INTEGER,DIMENSION(*),OPTIONAL :: search_params
  717. END FUNCTION
  718. END INTERFACE
  719. INTERFACE
  720. INTEGER FUNCTION dfdsearchcellsex1d(task, method, nsite, site, &
  721. & sitehint, datahint, cell, search_cb, search_params)
  722. USE MKL_DF_TYPE
  723. TYPE(DF_TASK) :: task
  724. INTEGER,INTENT(IN) :: method
  725. INTEGER,INTENT(IN) :: nsite
  726. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: site
  727. INTEGER,INTENT(IN),OPTIONAL :: sitehint
  728. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: datahint
  729. INTEGER,DIMENSION(*),INTENT(OUT) :: cell
  730. INTEGER,EXTERNAL,OPTIONAL :: search_cb
  731. INTEGER,DIMENSION(*),OPTIONAL :: search_params
  732. END FUNCTION
  733. END INTERFACE
  734. !++
  735. ! DF DESTRUCTOR FUNCTION DECLARATIONS.
  736. !--
  737. INTERFACE
  738. INTEGER FUNCTION dfdeletetask(task)
  739. USE MKL_DF_TYPE
  740. TYPE(DF_TASK) :: task
  741. END FUNCTION
  742. END INTERFACE
  743. END MODULE MKL_DF