/[escript]/trunk/pasowrap/src/SystemMatrixAdapter.cpp
ViewVC logotype

Diff of /trunk/pasowrap/src/SystemMatrixAdapter.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 4820 by jfenwick, Thu Feb 6 06:12:20 2014 UTC revision 4821 by sshaw, Tue Apr 1 04:58:33 2014 UTC
# Line 15  Line 15 
15  *****************************************************************************/  *****************************************************************************/
16    
17  #include "SystemMatrixAdapter.h"  #include "SystemMatrixAdapter.h"
18    #include <escript/SolverOptions.h>
19    
20  using namespace std;  using namespace std;
21    
# Line 87  PASOWRAP_DLL_API Line 88  PASOWRAP_DLL_API
88  int SystemMatrixAdapter::mapOptionToPaso(const int option)  {  int SystemMatrixAdapter::mapOptionToPaso(const int option)  {
89    
90     switch (option) {     switch (option) {
91         case  ESCRIPT_DEFAULT:         case  escript::ESCRIPT_DEFAULT:
92            return PASO_DEFAULT;            return PASO_DEFAULT;
93         case  ESCRIPT_DIRECT:         case  escript::ESCRIPT_DIRECT:
94            return PASO_DIRECT;            return PASO_DIRECT;
95         case  ESCRIPT_CHOLEVSKY:         case  escript::ESCRIPT_CHOLEVSKY:
96            return PASO_CHOLEVSKY;            return PASO_CHOLEVSKY;
97         case  ESCRIPT_PCG:         case  escript::ESCRIPT_PCG:
98            return PASO_PCG;            return PASO_PCG;
99         case  ESCRIPT_CR:         case  escript::ESCRIPT_CR:
100            return PASO_CR;            return PASO_CR;
101         case  ESCRIPT_CGS:         case  escript::ESCRIPT_CGS:
102            return PASO_CGS;            return PASO_CGS;
103         case  ESCRIPT_BICGSTAB:         case  escript::ESCRIPT_BICGSTAB:
104            return PASO_BICGSTAB;            return PASO_BICGSTAB;
105         case  ESCRIPT_ILU0:         case  escript::ESCRIPT_ILU0:
106            return PASO_ILU0;            return PASO_ILU0;
107         case  ESCRIPT_ILUT:         case  escript::ESCRIPT_ILUT:
108            return PASO_ILUT;            return PASO_ILUT;
109         case  ESCRIPT_JACOBI:         case  escript::ESCRIPT_JACOBI:
110            return PASO_JACOBI;            return PASO_JACOBI;
111         case  ESCRIPT_GMRES:         case  escript::ESCRIPT_GMRES:
112            return PASO_GMRES;            return PASO_GMRES;
113         case  ESCRIPT_PRES20:         case  escript::ESCRIPT_PRES20:
114            return PASO_PRES20;            return PASO_PRES20;
115         case  ESCRIPT_LUMPING:         case  escript::ESCRIPT_LUMPING:
116            return PASO_LUMPING;            return PASO_LUMPING;
117         case  ESCRIPT_NO_REORDERING:         case  escript::ESCRIPT_NO_REORDERING:
118            return PASO_NO_REORDERING;            return PASO_NO_REORDERING;
119         case  ESCRIPT_MINIMUM_FILL_IN:         case  escript::ESCRIPT_MINIMUM_FILL_IN:
120            return PASO_MINIMUM_FILL_IN;            return PASO_MINIMUM_FILL_IN;
121         case  ESCRIPT_NESTED_DISSECTION:         case  escript::ESCRIPT_NESTED_DISSECTION:
122            return PASO_NESTED_DISSECTION;            return PASO_NESTED_DISSECTION;
123         case  ESCRIPT_MKL:         case  escript::ESCRIPT_MKL:
124            return PASO_MKL;            return PASO_MKL;
125         case  ESCRIPT_UMFPACK:         case  escript::ESCRIPT_UMFPACK:
126            return PASO_UMFPACK;            return PASO_UMFPACK;
127         case  ESCRIPT_ITERATIVE:         case  escript::ESCRIPT_ITERATIVE:
128            return PASO_ITERATIVE;            return PASO_ITERATIVE;
129         case  ESCRIPT_PASO:         case  escript::ESCRIPT_PASO:
130            return PASO_PASO;            return PASO_PASO;
131         case  ESCRIPT_AMG:         case  escript::ESCRIPT_AMG:
132            return PASO_AMG;            return PASO_AMG;
133         case  ESCRIPT_AMLI:         case  escript::ESCRIPT_AMLI:
134            return PASO_AMLI;            return PASO_AMLI;
135         case  ESCRIPT_REC_ILU:         case  escript::ESCRIPT_REC_ILU:
136            return PASO_REC_ILU;            return PASO_REC_ILU;
137         case  ESCRIPT_TRILINOS:         case  escript::ESCRIPT_TRILINOS:
138            return PASO_TRILINOS;            return PASO_TRILINOS;
139         case  ESCRIPT_NONLINEAR_GMRES:         case  escript::ESCRIPT_NONLINEAR_GMRES:
140            return PASO_NONLINEAR_GMRES;            return PASO_NONLINEAR_GMRES;
141         case  ESCRIPT_TFQMR :         case  escript::ESCRIPT_TFQMR :
142            return PASO_TFQMR;            return PASO_TFQMR;
143         case  ESCRIPT_MINRES:         case  escript::ESCRIPT_MINRES:
144            return PASO_MINRES;            return PASO_MINRES;
145         case  ESCRIPT_GAUSS_SEIDEL:         case  escript::ESCRIPT_GAUSS_SEIDEL:
146            return PASO_GAUSS_SEIDEL;            return PASO_GAUSS_SEIDEL;
147         case  ESCRIPT_RILU:         case  escript::ESCRIPT_RILU:
148            return PASO_RILU;            return PASO_RILU;
149         case  ESCRIPT_DEFAULT_REORDERING:         case  escript::ESCRIPT_DEFAULT_REORDERING:
150            return PASO_DEFAULT_REORDERING;            return PASO_DEFAULT_REORDERING;
151         case  ESCRIPT_SUPER_LU:         case  escript::ESCRIPT_SUPER_LU:
152            return PASO_SUPER_LU;            return PASO_SUPER_LU;
153         case  ESCRIPT_PASTIX:         case  escript::ESCRIPT_PASTIX:
154            return PASO_PASTIX;            return PASO_PASTIX;
155         case  ESCRIPT_YAIR_SHAPIRA_COARSENING:         case  escript::ESCRIPT_YAIR_SHAPIRA_COARSENING:
156            return PASO_YAIR_SHAPIRA_COARSENING;            return PASO_YAIR_SHAPIRA_COARSENING;
157         case  ESCRIPT_RUGE_STUEBEN_COARSENING:         case  escript::ESCRIPT_RUGE_STUEBEN_COARSENING:
158            return PASO_RUGE_STUEBEN_COARSENING;            return PASO_RUGE_STUEBEN_COARSENING;
159         case  ESCRIPT_STANDARD_COARSENING:         case  escript::ESCRIPT_STANDARD_COARSENING:
160            return PASO_STANDARD_COARSENING;              return PASO_STANDARD_COARSENING;  
161         case  ESCRIPT_AGGREGATION_COARSENING:         case  escript::ESCRIPT_AGGREGATION_COARSENING:
162            return PASO_AGGREGATION_COARSENING;            return PASO_AGGREGATION_COARSENING;
163         case  ESCRIPT_NO_PRECONDITIONER:         case  escript::ESCRIPT_NO_PRECONDITIONER:
164            return PASO_NO_PRECONDITIONER;            return PASO_NO_PRECONDITIONER;
165         case ESCRIPT_CLASSIC_INTERPOLATION_WITH_FF_COUPLING:         case escript::ESCRIPT_CLASSIC_INTERPOLATION_WITH_FF_COUPLING:
166           return PASO_CLASSIC_INTERPOLATION_WITH_FF_COUPLING;           return PASO_CLASSIC_INTERPOLATION_WITH_FF_COUPLING;
167         case ESCRIPT_CLASSIC_INTERPOLATION:         case escript::ESCRIPT_CLASSIC_INTERPOLATION:
168           return PASO_CLASSIC_INTERPOLATION;           return PASO_CLASSIC_INTERPOLATION;
169         case ESCRIPT_DIRECT_INTERPOLATION:         case escript::ESCRIPT_DIRECT_INTERPOLATION:
170           return PASO_DIRECT_INTERPOLATION;           return PASO_DIRECT_INTERPOLATION;
171         case ESCRIPT_BOOMERAMG:         case escript::ESCRIPT_BOOMERAMG:
172       return PASO_BOOMERAMG;           return PASO_BOOMERAMG;
173         case ESCRIPT_CIJP_FIXED_RANDOM_COARSENING:         case escript::ESCRIPT_CIJP_FIXED_RANDOM_COARSENING:
174       return PASO_CIJP_FIXED_RANDOM_COARSENING;           return PASO_CIJP_FIXED_RANDOM_COARSENING;
175         case ESCRIPT_CIJP_COARSENING:         case escript::ESCRIPT_CIJP_COARSENING:
176       return PASO_CIJP_COARSENING;           return PASO_CIJP_COARSENING;
177         case ESCRIPT_FALGOUT_COARSENING:         case escript::ESCRIPT_FALGOUT_COARSENING:
178       return PASO_FALGOUT_COARSENING;           return PASO_FALGOUT_COARSENING;
179         case ESCRIPT_PMIS_COARSENING:         case escript::ESCRIPT_PMIS_COARSENING:
180       return PASO_PMIS_COARSENING;           return PASO_PMIS_COARSENING;
181         case ESCRIPT_HMIS_COARSENING:         case escript::ESCRIPT_HMIS_COARSENING:
182       return PASO_HMIS_COARSENING;           return PASO_HMIS_COARSENING;
183         case  ESCRIPT_LINEAR_CRANK_NICOLSON:         case  escript::ESCRIPT_LINEAR_CRANK_NICOLSON:
184       return PASO_LINEAR_CRANK_NICOLSON;           return PASO_LINEAR_CRANK_NICOLSON;
185         case  ESCRIPT_CRANK_NICOLSON:         case  escript::ESCRIPT_CRANK_NICOLSON:
186       return PASO_CRANK_NICOLSON;           return PASO_CRANK_NICOLSON;
187         case  ESCRIPT_BACKWARD_EULER:             case  escript::ESCRIPT_BACKWARD_EULER:        
188       return PASO_BACKWARD_EULER;           return PASO_BACKWARD_EULER;
189         default:         default:
190             stringstream temp;             stringstream temp;
191             temp << "Error - Cannot map option value "<< option << " onto Paso";             temp << "Error - Cannot map option value "<< option << " onto Paso";
# Line 206  int SystemMatrixAdapter::getSystemMatrix Line 207  int SystemMatrixAdapter::getSystemMatrix
207  PASOWRAP_DLL_API  PASOWRAP_DLL_API
208  void SystemMatrixAdapter::Print_Matrix_Info(const bool full=false) const  void SystemMatrixAdapter::Print_Matrix_Info(const bool full=false) const
209  {  {
210     Paso_SystemMatrix* mat=m_system_matrix.get();      Paso_SystemMatrix* mat=m_system_matrix.get();
211     int first_row_index  = mat->row_distribution->first_component[mat->mpi_info->rank];      int first_row_index  = mat->row_distribution->first_component[mat->mpi_info->rank];
212     int last_row_index   = mat->row_distribution->first_component[mat->mpi_info->rank+1]-1;      int last_row_index   = mat->row_distribution->first_component[mat->mpi_info->rank+1]-1;
213     int first_col_index  = mat->col_distribution->first_component[mat->mpi_info->rank];      int first_col_index  = mat->col_distribution->first_component[mat->mpi_info->rank];
214     int last_col_index   = mat->col_distribution->first_component[mat->mpi_info->rank+1]-1;      int last_col_index   = mat->col_distribution->first_component[mat->mpi_info->rank+1]-1;
215    
216     fprintf(stdout, "Print_Matrix_Info running on CPU %d of %d\n", mat->mpi_info->rank, mat->mpi_info->size);      fprintf(stdout, "Print_Matrix_Info running on CPU %d of %d\n", mat->mpi_info->rank, mat->mpi_info->size);
217    
218     switch (mat->type) {      switch (mat->type) {
219     case MATRIX_FORMAT_DEFAULT:      fprintf(stdout, "\tMatrix type MATRIX_FORMAT_DEFAULT\n"); break;          case MATRIX_FORMAT_DEFAULT:      
220     case MATRIX_FORMAT_CSC:      fprintf(stdout, "\tMatrix type MATRIX_FORMAT_CSC\n"); break;              fprintf(stdout, "\tMatrix type MATRIX_FORMAT_DEFAULT\n");
221     case MATRIX_FORMAT_BLK1:     fprintf(stdout, "\tMatrix type MATRIX_FORMAT_BLK1\n"); break;              break;
222     case MATRIX_FORMAT_OFFSET1:      fprintf(stdout, "\tMatrix type MATRIX_FORMAT_OFFSET1\n"); break;          case MATRIX_FORMAT_CSC:
223     case MATRIX_FORMAT_TRILINOS_CRS: fprintf(stdout, "\tMatrix type MATRIX_FORMAT_TRILINOS_CRS\n"); break;              fprintf(stdout, "\tMatrix type MATRIX_FORMAT_CSC\n");
224     default:             fprintf(stdout, "\tMatrix type unknown\n"); break;              break;
225            case MATRIX_FORMAT_BLK1:
226                fprintf(stdout, "\tMatrix type MATRIX_FORMAT_BLK1\n");
227                break;
228            case MATRIX_FORMAT_OFFSET1:
229                fprintf(stdout, "\tMatrix type MATRIX_FORMAT_OFFSET1\n");
230                break;
231            case MATRIX_FORMAT_TRILINOS_CRS:
232                fprintf(stdout, "\tMatrix type MATRIX_FORMAT_TRILINOS_CRS\n");
233                break;
234            default:
235                fprintf(stdout, "\tMatrix type unknown\n");
236                break;
237     }     }
238    
239     fprintf(stdout, "\trow indices run from %d to %d\n", first_row_index, last_row_index);     fprintf(stdout, "\trow indices run from %d to %d\n", first_row_index, last_row_index);
# Line 260  void SystemMatrixAdapter::setToSolution( Line 273  void SystemMatrixAdapter::setToSolution(
273     }     }
274     out.expand();     out.expand();
275     in.expand();     in.expand();
276     double* out_dp=out.getSampleDataRW(0);       double* out_dp=out.getSampleDataRW(0);        
277     double* in_dp=in.getSampleDataRW(0);         double* in_dp=in.getSampleDataRW(0);                
278     Paso_solve(mat,out_dp,in_dp,&paso_options);     Paso_solve(mat,out_dp,in_dp,&paso_options);
279     pasoToEscriptOptions(&paso_options,options);     pasoToEscriptOptions(&paso_options,options);
280     checkPasoError();     checkPasoError();
281    
282  }  }
283    
284  PASOWRAP_DLL_API  PASOWRAP_DLL_API
# Line 299  void SystemMatrixAdapter::saveMM(const s Line 313  void SystemMatrixAdapter::saveMM(const s
313     }     }
314    
315     char *fName = TMPMEMALLOC(fileName.size()+1,char);     char *fName = TMPMEMALLOC(fileName.size()+1,char);
316                
317     strcpy(fName,fileName.c_str());     strcpy(fName,fileName.c_str());
318     Paso_SystemMatrix* mat = getPaso_SystemMatrix();     Paso_SystemMatrix* mat = getPaso_SystemMatrix();
319     Paso_SystemMatrix_saveMM(mat,fName);     Paso_SystemMatrix_saveMM(mat,fName);
# Line 356  void SystemMatrixAdapter::pasoToEscriptO Line 370  void SystemMatrixAdapter::pasoToEscriptO
370  PASOWRAP_DLL_API  PASOWRAP_DLL_API
371  void SystemMatrixAdapter::escriptToPasoOptions(Paso_Options* paso_options, const boost::python::object& options)  void SystemMatrixAdapter::escriptToPasoOptions(Paso_Options* paso_options, const boost::python::object& options)
372  {  {
373  #define EXTRACT(__key__,__val__,__type__) paso_options->__val__=boost::python::extract<__type__>(options.attr(__key__)())  
374  #define EXTRACT_OPTION(__key__,__val__,__type__) paso_options->__val__=mapOptionToPaso(boost::python::extract<__type__>(options.attr(__key__)()))      escript::SolverBuddy sb = boost::python::extract<escript::SolverBuddy>(options);
375    
376     Paso_Options_setDefaults(paso_options);      Paso_Options_setDefaults(paso_options);
377     EXTRACT_OPTION("getSolverMethod",method,index_t);      paso_options->method = mapOptionToPaso(sb.getSolverMethod());
378     EXTRACT_OPTION("getPackage",package,index_t);      paso_options->package = mapOptionToPaso(sb.getPackage());
379     EXTRACT("isVerbose",verbose,bool);      paso_options->verbose = sb.isVerbose();
380     EXTRACT("isSymmetric",symmetric,bool);      paso_options->symmetric = sb.isSymmetric();
381     EXTRACT("getTolerance",tolerance, double);      paso_options->tolerance = sb.getTolerance();
382     EXTRACT("getAbsoluteTolerance",absolute_tolerance, double);      paso_options->absolute_tolerance = sb.getAbsoluteTolerance();
383     EXTRACT("getInnerTolerance",inner_tolerance, double);      paso_options->inner_tolerance = sb.getInnerTolerance();
384     EXTRACT("adaptInnerTolerance",adapt_inner_tolerance, bool);      paso_options->adapt_inner_tolerance = sb.adaptInnerTolerance();
385     EXTRACT_OPTION("getReordering", reordering, index_t);      paso_options->reordering = mapOptionToPaso(sb.getReordering());
386     EXTRACT_OPTION("getPreconditioner", preconditioner, index_t);      paso_options->preconditioner = mapOptionToPaso(sb.getPreconditioner());
387     EXTRACT("getIterMax", iter_max, dim_t);      paso_options->iter_max = sb.getIterMax();
388     EXTRACT("getInnerIterMax", inner_iter_max, dim_t);      paso_options->inner_iter_max = sb.getInnerIterMax();
389     EXTRACT("getDropTolerance", drop_tolerance, double);      paso_options->drop_tolerance = sb.getDropTolerance();
390     EXTRACT("getDropStorage", drop_storage, double);      paso_options->drop_storage = sb.getDropStorage();
391     EXTRACT("getTruncation", truncation, dim_t);      paso_options->truncation = sb.getTruncation();
392     EXTRACT("_getRestartForC", restart, index_t);      paso_options->restart = sb._getRestartForC();
393     EXTRACT("getNumSweeps", sweeps, index_t);      paso_options->sweeps = sb.getNumSweeps();
394     EXTRACT("getNumPreSweeps", pre_sweeps, dim_t);      paso_options->pre_sweeps = sb.getNumPreSweeps();
395     EXTRACT("getNumPostSweeps", post_sweeps, dim_t);      paso_options->post_sweeps = sb.getNumPostSweeps();
396     EXTRACT("getLevelMax", level_max, dim_t);      paso_options->level_max = sb.getLevelMax();
397     EXTRACT("getMinCoarseMatrixSize", min_coarse_matrix_size, dim_t);      paso_options->min_coarse_matrix_size = sb.getMinCoarseMatrixSize();
398     EXTRACT("getCoarseningThreshold", coarsening_threshold, double);      paso_options->coarsening_threshold = sb.getCoarseningThreshold();
399     EXTRACT("acceptConvergenceFailure", accept_failed_convergence, bool);      paso_options->accept_failed_convergence = sb.acceptConvergenceFailure();
400     EXTRACT_OPTION("getCoarsening", coarsening_method, index_t);      paso_options->coarsening_method = mapOptionToPaso(sb.getCoarsening());
401     EXTRACT_OPTION("getSmoother", smoother, index_t);      paso_options->smoother = mapOptionToPaso(sb.getSmoother());
402     EXTRACT("getRelaxationFactor",  relaxation_factor,  double);      paso_options->relaxation_factor = sb.getRelaxationFactor();
403     EXTRACT("useLocalPreconditioner",  use_local_preconditioner,  bool);      paso_options->use_local_preconditioner = sb.useLocalPreconditioner();
404     EXTRACT("getMinCoarseMatrixSparsity",min_coarse_sparsity, double);      paso_options->min_coarse_sparsity = sb.getMinCoarseMatrixSparsity();
405     EXTRACT("getNumRefinements",refinements, dim_t);      paso_options->refinements = sb.getNumRefinements();
406     EXTRACT("getNumCoarseMatrixRefinements",coarse_matrix_refinements, dim_t);      paso_options->coarse_matrix_refinements = sb.getNumCoarseMatrixRefinements();
407     EXTRACT("usePanel",usePanel, bool);      paso_options->usePanel = sb.usePanel();
408     EXTRACT("getAMGInterpolation", interpolation_method, index_t);      paso_options->interpolation_method = sb.getAMGInterpolation();
409     EXTRACT("getDiagonalDominanceThreshold", diagonal_dominance_threshold, double);      paso_options->diagonal_dominance_threshold = sb.getDiagonalDominanceThreshold();
410     EXTRACT("getODESolver", ode_solver, dim_t);      paso_options->ode_solver = sb.getODESolver();
 #undef EXTRACT  
 #undef EXTRACT_OPTION  
411  }  }
412    
413    

Legend:
Removed from v.4820  
changed lines
  Added in v.4821

  ViewVC Help
Powered by ViewVC 1.1.26