00001 00002 #ifndef _lsh_mkb_pardiso_ 00003 #define _lsh_mkb_pardiso_ 00004 00005 #include "mkl.h" 00006 00007 // API for all mkb solvers with some constants... 00008 #include "../lsh_mkb_intf.h" 00009 00010 00011 00012 /*** DATA TYPES ***/ 00013 typedef struct{ 00014 int mtype; // Matrix type 00015 int maxfct; // Maximum number of numerical factorizations. 00016 int mnum; // Which factorization to use. 00017 int msglvl; // Print statistical information in file 00018 00019 int iparm1; //use solver defaults? 00020 int iparm2; //fill-in reducing ordering. 00021 int iparm3; //currently is not used. 00022 int iparm4; //preconditioned CGS. 00023 int iparm5; //user permutation. 00024 int iparm6; //write solution on x. 00025 00026 int iparm8; //iterative refinement step. 00027 int iparm9; //must be set to 0. 00028 int iparm10; //pivoting perturbation. 00029 int iparm11; //scaling vectors. 00030 int iparm12; //must be set to 0. 00031 int iparm13; //improved accuracy using (non-)symmetric weighted matchings. 00032 00033 int iparm18; //-1 00034 int iparm19; //MFlops of factorization. 00035 00036 int iparm21; //pivoting for symmetric indefinite matrices. 00037 00038 int iparm27; //matrix checker. default is 0 00039 int iparm28; //single or double precision of MKB_PARDISO. 00040 int iparm60; //version of MKB_PARDISO. 00041 00042 00043 } lst_mkb_pardiso_config; 00044 00045 /* definition of lst_mkb_solvers - data type for multi-level iterative solver */ 00046 typedef struct { 00047 00048 int solver_id; /* solver_id */ 00049 int SM_and_LV_id; 00050 00051 int monitor; 00052 00053 lst_mkb_pardiso_config pardiso_config; //PARDISO control data 00054 bool isPardisoConfigInitializedext; 00055 int pt[64]; 00056 int *iparm; 00057 00058 int *crs_row; 00059 int *crs_col; 00060 double *crs_val; 00061 double *rhs; 00062 int Ndof; 00063 int offset; 00064 int analysis; 00065 int free_flag; //flag - 0 if not needed delete crs matrices 00066 00067 } lst_mkb_pardiso_solvers; 00068 00069 /*** Data types ***/ 00070 00071 /* GLOBAL VARIABLES */ 00072 //extern int lsv_mkb_pardiso_cur_solver_id; /* ID of the current solver */ 00073 extern lst_mkb_pardiso_solvers lsv_mkb_pardiso_solver[LSC_MAX_NUM_SOLV]; /* array of solvers */ 00074 00075 #endif