escript  Revision_
SolverOptions.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 #ifndef SOLVER_OPTIONS_H
00018 #define SOLVER_OPTIONS_H
00019 
00020 #include <boost/python/object.hpp>
00021 #include "system_dep.h"
00022 namespace escript {
00023 
00080 enum SolverOptions {
00081     ESCRIPT_DEFAULT,
00082     ESCRIPT_DIRECT = 1,
00083     ESCRIPT_CHOLEVSKY = 2,
00084     ESCRIPT_PCG = 3,
00085     ESCRIPT_CR = 4,
00086     ESCRIPT_CGS = 5,
00087     ESCRIPT_BICGSTAB = 6,
00088     ESCRIPT_ILU0 = 8,
00089     ESCRIPT_ILUT = 9,
00090     ESCRIPT_JACOBI = 10,
00091     ESCRIPT_GMRES = 11,
00092     ESCRIPT_PRES20 = 12,
00093     ESCRIPT_LUMPING = 13,
00094     ESCRIPT_ROWSUM_LUMPING = 13,
00095     ESCRIPT_HRZ_LUMPING = 14,
00096     ESCRIPT_NO_REORDERING = 17,
00097     ESCRIPT_MINIMUM_FILL_IN = 18,
00098     ESCRIPT_NESTED_DISSECTION = 19,
00099     ESCRIPT_MKL = 15,
00100     ESCRIPT_UMFPACK = 16,
00101     ESCRIPT_ITERATIVE = 20,
00102     ESCRIPT_PASO = 21,
00103     ESCRIPT_AMG = 22,
00104     ESCRIPT_REC_ILU = 23,
00105     ESCRIPT_TRILINOS = 24,
00106     ESCRIPT_NONLINEAR_GMRES = 25,
00107     ESCRIPT_TFQMR = 26,
00108     ESCRIPT_MINRES = 27,
00109     ESCRIPT_GAUSS_SEIDEL = 28,
00110     ESCRIPT_RILU = 29,
00111     ESCRIPT_DEFAULT_REORDERING = 30,
00112     ESCRIPT_SUPER_LU = 31,
00113     ESCRIPT_PASTIX = 32,
00114     ESCRIPT_YAIR_SHAPIRA_COARSENING = 33,
00115     ESCRIPT_RUGE_STUEBEN_COARSENING = 34,
00116     ESCRIPT_AGGREGATION_COARSENING = 35,
00117     ESCRIPT_NO_PRECONDITIONER = 36,
00118     ESCRIPT_MIN_COARSE_MATRIX_SIZE = 37,
00119     ESCRIPT_AMLI = 38,
00120     ESCRIPT_STANDARD_COARSENING = 39,
00121     ESCRIPT_CLASSIC_INTERPOLATION_WITH_FF_COUPLING = 50,
00122     ESCRIPT_CLASSIC_INTERPOLATION = 51,
00123     ESCRIPT_DIRECT_INTERPOLATION = 52,
00124     ESCRIPT_BOOMERAMG = 60,
00125     ESCRIPT_CIJP_FIXED_RANDOM_COARSENING = 61,
00126     ESCRIPT_CIJP_COARSENING = 62,
00127     ESCRIPT_FALGOUT_COARSENING = 63,
00128     ESCRIPT_PMIS_COARSENING = 64,
00129     ESCRIPT_HMIS_COARSENING = 65,
00130     ESCRIPT_LINEAR_CRANK_NICOLSON = 66,
00131     ESCRIPT_CRANK_NICOLSON = 67,
00132     ESCRIPT_BACKWARD_EULER = 68
00133 };
00134 
00135 class SolverBuddy {
00136 public:
00137     ESCRIPT_DLL_API SolverBuddy();
00141     ESCRIPT_DLL_API std::string getSummary() const;
00142 
00148     ESCRIPT_DLL_API const char *getName(int key) const;
00149 
00156     ESCRIPT_DLL_API void resetDiagnostics(bool all=false);
00157 
00166     ESCRIPT_DLL_API void updateDiagnostics(std::string key, boost::python::object value);
00167 
00195     ESCRIPT_DLL_API double getDiagnostics(std::string name) const;
00196 
00203     ESCRIPT_DLL_API bool hasConverged() const;
00204 
00215     ESCRIPT_DLL_API void setCoarsening(int coarsening);
00216 
00222     ESCRIPT_DLL_API SolverOptions getCoarsening() const;
00223 
00229     ESCRIPT_DLL_API void setMinCoarseMatrixSize(int size);
00230 
00234     ESCRIPT_DLL_API int getMinCoarseMatrixSize() const;
00235 
00250     ESCRIPT_DLL_API void setPreconditioner(int preconditioner);
00251 
00256     ESCRIPT_DLL_API SolverOptions getPreconditioner() const;
00257 
00268     ESCRIPT_DLL_API void setSmoother(int smoother);
00269 
00274     ESCRIPT_DLL_API SolverOptions getSmoother() const;
00275 
00293     ESCRIPT_DLL_API void setSolverMethod(int method);
00294 
00299     ESCRIPT_DLL_API SolverOptions getSolverMethod() const;
00300 
00312     ESCRIPT_DLL_API void setPackage(int package);
00313 
00318     ESCRIPT_DLL_API SolverOptions getPackage() const;
00319 
00329     ESCRIPT_DLL_API void setReordering(int ordering);
00330 
00336     ESCRIPT_DLL_API SolverOptions getReordering() const;
00337 
00344     ESCRIPT_DLL_API void setRestart(int restart);
00345 
00351     ESCRIPT_DLL_API int getRestart() const;
00352 
00358     ESCRIPT_DLL_API int _getRestartForC() const;
00359 
00365     ESCRIPT_DLL_API void setDiagonalDominanceThreshold(double threshold);
00366 
00372     ESCRIPT_DLL_API double getDiagonalDominanceThreshold() const;
00373 
00379     ESCRIPT_DLL_API void setTruncation(int truncation);
00380 
00385     ESCRIPT_DLL_API int getTruncation() const;
00386 
00392     ESCRIPT_DLL_API void setInnerIterMax(int iter_max);
00393 
00398     ESCRIPT_DLL_API int getInnerIterMax() const;
00399 
00405     ESCRIPT_DLL_API void setIterMax(int iter_max);
00406 
00411     ESCRIPT_DLL_API int getIterMax() const;
00412 
00419     ESCRIPT_DLL_API void setLevelMax(int level_max);
00420 
00426     ESCRIPT_DLL_API int getLevelMax() const;
00427 
00434     ESCRIPT_DLL_API void setCycleType(int cycle_type);
00435 
00441     ESCRIPT_DLL_API int getCycleType() const;
00442 
00449     ESCRIPT_DLL_API void setCoarseningThreshold(double theta);
00450 
00456     ESCRIPT_DLL_API double getCoarseningThreshold() const;
00457 
00463     ESCRIPT_DLL_API void setNumSweeps(int sweeps);
00464 
00469     ESCRIPT_DLL_API int getNumSweeps() const;
00470 
00477     ESCRIPT_DLL_API void setNumPreSweeps(int sweeps);
00478 
00484     ESCRIPT_DLL_API int getNumPreSweeps() const;
00485 
00492     ESCRIPT_DLL_API void setNumPostSweeps(int sweeps);
00493 
00499     ESCRIPT_DLL_API int getNumPostSweeps() const;
00500 
00506     ESCRIPT_DLL_API void setTolerance(double rtol);
00507 
00512     ESCRIPT_DLL_API double getTolerance() const;
00513 
00519     ESCRIPT_DLL_API void setAbsoluteTolerance(double atol);
00520 
00525     ESCRIPT_DLL_API double getAbsoluteTolerance() const;
00526 
00533     ESCRIPT_DLL_API void setInnerTolerance(double rtol);
00534 
00539     ESCRIPT_DLL_API double getInnerTolerance() const;
00540 
00546     ESCRIPT_DLL_API void setDropTolerance(double drop_tol);
00547 
00552     ESCRIPT_DLL_API double getDropTolerance() const;
00553 
00561     ESCRIPT_DLL_API void setDropStorage(double drop);
00562 
00567     ESCRIPT_DLL_API double getDropStorage() const;
00568 
00576     ESCRIPT_DLL_API void setRelaxationFactor(double factor);
00577 
00578 
00584     ESCRIPT_DLL_API double getRelaxationFactor() const;
00585 
00591     ESCRIPT_DLL_API bool isSymmetric() const;
00592 
00596     ESCRIPT_DLL_API void setSymmetryOn();
00597 
00601     ESCRIPT_DLL_API void setSymmetryOff();
00602 ESCRIPT_DLL_API void setSymmetry(bool symmetry);
00608 
00614     ESCRIPT_DLL_API bool isVerbose() const;
00615 
00619     ESCRIPT_DLL_API void setVerbosityOn();
00620 
00624     ESCRIPT_DLL_API void setVerbosityOff();
00625 
00631     ESCRIPT_DLL_API void setVerbosity(bool verbosity);
00632 
00640     ESCRIPT_DLL_API bool adaptInnerTolerance() const;
00641 
00645     ESCRIPT_DLL_API void setInnerToleranceAdaptionOn();
00646 
00650     ESCRIPT_DLL_API void setInnerToleranceAdaptionOff();
00651 
00657     ESCRIPT_DLL_API void setInnerToleranceAdaption(bool adaption);
00658 
00669     ESCRIPT_DLL_API bool acceptConvergenceFailure() const;
00670 
00674     ESCRIPT_DLL_API void setAcceptanceConvergenceFailureOn();
00675 
00679     ESCRIPT_DLL_API void setAcceptanceConvergenceFailureOff();
00680 
00686     ESCRIPT_DLL_API void setAcceptanceConvergenceFailure(bool acceptance);
00687 
00694     ESCRIPT_DLL_API bool useLocalPreconditioner() const;
00695 
00699     ESCRIPT_DLL_API void setLocalPreconditionerOn();
00700 
00704     ESCRIPT_DLL_API void setLocalPreconditionerOff();
00705 
00711     ESCRIPT_DLL_API void setLocalPreconditioner(bool local);
00712 
00720     ESCRIPT_DLL_API void setMinCoarseMatrixSparsity(double sparsity);
00721 
00729     ESCRIPT_DLL_API double getMinCoarseMatrixSparsity() const;
00730 
00737     ESCRIPT_DLL_API void setNumRefinements(int refinements);
00738 
00744     ESCRIPT_DLL_API int getNumRefinements() const;
00745 
00752     ESCRIPT_DLL_API void setNumCoarseMatrixRefinements(int refinements);
00753 
00759     ESCRIPT_DLL_API int getNumCoarseMatrixRefinements() const;
00760 
00767     ESCRIPT_DLL_API bool usePanel() const;
00768 
00772     ESCRIPT_DLL_API void setUsePanelOn();
00773 
00777     ESCRIPT_DLL_API void setUsePanelOff();
00778 
00784     ESCRIPT_DLL_API void setUsePanel(bool use);
00785 
00793     ESCRIPT_DLL_API void setAMGInterpolation(int interpolation);
00794 
00799     ESCRIPT_DLL_API SolverOptions getAMGInterpolation() const;
00800 
00808     ESCRIPT_DLL_API void setODESolver(int solver);
00809 
00814     ESCRIPT_DLL_API SolverOptions getODESolver() const;
00815 
00816 
00817 protected:
00818     int level_max;
00819     double coarsening_threshold;
00820     SolverOptions smoother;
00821     int sweeps;
00822     int pre_sweeps;
00823     int post_sweeps;
00824     double tolerance;
00825     double absolute_tolerance;
00826     double inner_tolerance;
00827     double drop_tolerance;
00828     double drop_storage;
00829     int iter_max;
00830     int inner_iter_max;
00831     int truncation;
00832     int restart; //0 will have to be None in python, will get tricky
00833     bool symmetric;
00834     bool verbose;
00835     bool adapt_inner_tolerance;
00836     bool accept_convergence_failure;
00837     SolverOptions reordering;
00838     SolverOptions package;
00839     SolverOptions method;
00840     SolverOptions preconditioner;
00841     SolverOptions coarsening;
00842     int MinCoarseMatrixSize;
00843     double relaxation;
00844     bool use_local_preconditioner;
00845     double min_sparsity;
00846     int refinements;
00847     int coarse_refinements;
00848     bool use_panel;
00849     double diagonal_dominance_threshold;
00850     SolverOptions amg_interpolation_method;
00851     int cycle_type;
00852     SolverOptions ode_solver;
00853 
00854     int num_iter;
00855     int num_level;
00856     int num_inner_iter;
00857     double time;
00858     double set_up_time;
00859     double net_time;
00860     double residual_norm;
00861     bool converged;
00862     int preconditioner_size;
00863     bool time_step_backtracking_used;
00864     int cum_num_inner_iter;
00865     int cum_num_iter;
00866     double cum_time;
00867     double cum_set_up_time;
00868     double cum_net_time;
00869     double coarse_level_sparsity;
00870     int num_coarse_unknowns;
00871 };
00872 
00873 typedef boost::shared_ptr<SolverBuddy> SB_ptr;
00874 
00875 }
00876 
00877 #endif