escript  Revision_
MKL.h
Go to the documentation of this file.
00001 
00002 /*****************************************************************************
00003 *
00004 * Copyright (c) 2003-2014 by University of Queensland
00005 * http://www.uq.edu.au
00006 *
00007 * Primary Business: Queensland, Australia
00008 * Licensed under the Open Software License version 3.0
00009 * http://www.opensource.org/licenses/osl-3.0.php
00010 *
00011 * Development until 2012 by Earth Systems Science Computational Center (ESSCC)
00012 * Development 2012-2013 by School of Earth Sciences
00013 * Development from 2014 by Centre for Geoscience Computing (GeoComp)
00014 *
00015 *****************************************************************************/
00016 
00017 
00018 /****************************************************************************/
00019 
00020 /* Paso: interface to intel MKL sparse solver */
00021 
00022 /****************************************************************************/
00023 
00024 /* Copyrights by ACcESS Australia 2006 */
00025 /* Author: Lutz Gross, l.gross@uq.edu.au */
00026 
00027 /****************************************************************************/
00028 
00029 #ifndef __PASO_MKL_H__
00030 #define __PASO_MKL_H__
00031 
00032 #include "SparseMatrix.h"
00033 #include "performance.h"
00034 
00035 namespace paso {
00036 
00037 #if defined(_WIN32) || defined(_WIN64)
00038 #define PARDISO pardiso
00039 #else
00040 #define PARDISO pardiso_
00041 #endif
00042 
00043 #ifdef MKL
00044 #include "mkl_pardiso.h"
00045 #endif
00046 
00047 
00048 #define MKL_ERROR_NO 0
00049 #define MKL_MTYPE_SYM -2
00050 #define MKL_MTYPE_UNSYM 11
00051 
00052 #define MKL_REORDERING_MINIMUM_DEGREE 0
00053 #define MKL_REORDERING_NESTED_DISSECTION 2
00054 #define MKL_PHASE_SYMBOLIC_FACTORIZATION 11
00055 #define MKL_PHASE_FACTORIZATION 22
00056 #define MKL_PHASE_SOLVE 33
00057 #define MKL_PHASE_RELEASE_MEMORY -1
00058 
00059 /* extern int PARDISO
00060 #         (void *, int *, int *, int *, int *, int *,
00061 #         double *, int *, int *, int *, int *, int *,
00062 #         int *, double *, double *, int *);
00063 */
00064 
00065 
00066 void MKL_free(SparseMatrix* A);
00067 void MKL_solve(SparseMatrix_ptr A, double* out, double* in, index_t reordering,
00068                dim_t numRefinements, bool verbose);
00069 
00070 } // namespace paso
00071 
00072 #endif // __PASO_MKL_H__
00073