1 /*! \file Dissection.hpp 2 \brief Fortran style interface named as Dissectino-fortran interface 3 \author Atsushi Suzuki, Laboratoire Jacques-Louis Lions 4 \date Mar. 30th 2012 5 \date Jul. 12th 2015 6 \date Nov. 30th 2016 7 */ 8 9 // This file is part of Dissection 10 // 11 // Dissection is free software: you can redistribute it and/or modify 12 // it under the terms of the GNU General Public License as published by 13 // the Free Software Foundation, either version 3 of the License, or 14 // (at your option) any later version. 15 // 16 // Linking Dissection statically or dynamically with other modules is making 17 // a combined work based on Disssection. Thus, the terms and conditions of 18 // the GNU General Public License cover the whole combination. 19 // 20 // As a special exception, the copyright holders of Dissection give you 21 // permission to combine Dissection program with free software programs or 22 // libraries that are released under the GNU LGPL and with independent modules 23 // that communicate with Dissection solely through the Dissection-fortran 24 // interface. You may copy and distribute such a system following the terms of 25 // the GNU GPL for Dissection and the licenses of the other code concerned, 26 // provided that you include the source code of that other code when and as 27 // the GNU GPL requires distribution of source code and provided that you do 28 // not modify the Dissection-fortran interface. 29 // 30 // Note that people who make modified versions of Dissection are not obligated 31 // to grant this special exception for their modified versions; it is their 32 // choice whether to do so. The GNU General Public License gives permission to 33 // release a modified version without this exception; this exception also makes 34 // it possible to release a modified version which carries forward this 35 // exception. If you modify the Dissection-fortran interface, this exception 36 // does not apply to your modified version of Dissection, and you must remove 37 // this exception when you distribute your modified version. 38 // 39 // This exception is an additional permission under section 7 of the GNU 40 // General Public License, version 3 ("GPLv3") 41 // 42 // Dissection is distributed in the hope that it will be useful, 43 // but WITHOUT ANY WARRANTY; without even the implied warranty of 44 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 45 // GNU General Public License for more details. 46 // 47 // You should have received a copy of the GNU General Public License 48 // along with Dissection. If not, see <http://www.gnu.org/licenses/>. 49 // 50 51 #ifndef _INTERFACE_CPPAPI_HPP 52 # define _INTERFACE_CPPAPI_HPP 53 54 #define _COMPILER_OPTIONCOMPILER_H 55 #define FORTRAN_DECL_WL(x_windows,x_linux) x_linux 56 #define FORTRAN_DECL(x) x##_ 57 #define DISSECTION_API 58 59 #ifdef BLAS_MKL 60 #include <mkl_service.h> 61 #endif 62 #include <stdint.h> 63 # include <cstdlib> 64 65 #define DISSECTION_REAL_MATRIX 1 66 #define DISSECTION_COMPLEX_MATRIX 2 67 68 #define DISS_VERSION FORTRAN_DECL_WL(DISS_VERSION, diss_version) 69 #define DISS_INIT FORTRAN_DECL_WL(DISS_INIT, diss_init) 70 #define DISS_FREE FORTRAN_DECL_WL(DISS_FREE, diss_free) 71 #define DISS_NUMERIC_FREE FORTRAN_DECL_WL(DISS_NUMERIC_FREE, diss_numeric_free) 72 #define DISS_S_FACT FORTRAN_DECL_WL(DISS_S_FACT, diss_s_fact) 73 #define DISS_N_FACT FORTRAN_DECL_WL(DISS_N_FACT, diss_n_fact) 74 #define DISS_GET_COLORS FORTRAN_DECL_WL(DISS_GET_COLORS, diss_get_colors) 75 #define DISS_GET_KERN_DIM FORTRAN_DECL_WL(DISS_GET_KERN_DIM, diss_get_kern_dim) 76 #define DISS_GET_NULLPIVOTS FORTRAN_DECL_WL(DISS_GET_NULLPIVOTS, diss_get_nullpivots) 77 #define DISS_GET_SMALLPIVOTS FORTRAN_DECL_WL(DISS_GET_SMALLPIVOTS, diss_get_smallpivots) 78 #define DISS_GET_KERN_VECS FORTRAN_DECL_WL(DISS_GET_KERN_VECS, diss_get_kern_vecs) 79 #define DISS_GET_KERNT_VECS FORTRAN_DECL_WL(DISS_GET_KERNT_VECS, diss_get_kernt_vecs) 80 #define DISS_PROJECT FORTRAN_DECL_WL(DISS_PROJECT, diss_project) 81 #define DISS_SOLVE_1 FORTRAN_DECL_WL(DISS_SOLVE_1, diss_solve_1) 82 #define DISS_SOLVE_N FORTRAN_DECL_WL(DISS_SOLVE_N, diss_solve_n) 83 #define DISS_MATRIX_PRODUCT FORTRAN_DECL_WL(DISS_MATRIX_PRODUCT, diss_matrix_product) 84 #define COMPUTE_DIM_KERN FORTRAN_DECL_WL(COMPUTE_DIM_KERN, compute_dim_kern) 85 86 extern "C" { 87 DISSECTION_API void DISS_VERSION(int *versn, 88 int *reles, 89 int *patch); 90 91 DISSECTION_API void DISS_INIT(uint64_t &dslv_, 92 const int &called, 93 const int &real_or_complex, 94 const int &nthreads, 95 const int &verbose); 96 97 DISSECTION_API void DISS_FREE(uint64_t &dslv_); 98 99 DISSECTION_API void DISS_NUMERIC_FREE(uint64_t &dslv_); 100 101 DISSECTION_API void DISS_S_FACT(uint64_t &dslv_, 102 const int &dim, 103 const int *ptRows, 104 const int *indCols, 105 const int &sym, 106 const int &decomposer); 107 108 DISSECTION_API void DISS_N_FACT(uint64_t &dslv_, 109 const double *coefs, 110 const int &scaling, 111 const double &eps_pivot, 112 const int &indefinite_flag); 113 114 DISSECTION_API void DISS_GET_COLORS(uint64_t &dslv_, int *n); 115 DISSECTION_API void DISS_GET_KERN_DIM(uint64_t &dslv_, int *n0); 116 117 DISSECTION_API void DISS_GET_NULLPIVOTS(uint64_t &dslv_, int *pivots); 118 DISSECTION_API void DISS_GET_SMALLPIVOTS(uint64_t &dslv_, 119 const int &n, 120 int *pivots); 121 122 DISSECTION_API void DISS_GET_KERN_VECS(uint64_t &dslv_, double *vec); 123 DISSECTION_API void DISS_GET_KERNT_VECS(uint64_t &dslv_, double *vec); 124 125 DISSECTION_API void DISS_PROJECT(uint64_t &dslv_, double *x); 126 127 DISSECTION_API void DISS_SOLVE_1(uint64_t &dslv_, double *x, 128 const int &projection, 129 const int &trans); 130 131 DISSECTION_API void DISS_SOLVE_N(uint64_t &dslv_, double *x, 132 const int &nrhs, const int &projection, 133 const int &trans); 134 135 DISSECTION_API void DISS_MATRIX_PRODUCT(uint64_t &dslv_, 136 const double* x, double* y); 137 138 DISSECTION_API void COMPUTE_DIM_KERN(int* flag, 139 int* n0, 140 double *a_ini, 141 const int &n, 142 const int &dim_ag, 143 const double &eps, 144 const double &machine_eps0, 145 const int &flag_sym, 146 const int *print_cntrl); 147 } 148 #endif 149