Loading src/include/Configuration.h +29 −4 Original line number Diff line number Diff line Loading @@ -177,7 +177,7 @@ public: //! \brief Read-only view on scattered field final elevation. const double& sc_phi_end = _sc_phi_end; //! \brief Read-only view on flag for matrix inversion refinement. const short& refine_flag = _refine_flag; const bool& refine_flag = _refine_flag; //! \brief Read-only view on flag for dynamic order management. const short& dyn_order_flag = _dyn_order_flag; //! \brief Read-only view on host RAM in GB. Loading Loading @@ -327,36 +327,61 @@ class RuntimeSettings { protected: //! \brief Inversion mode flag. short _invert_mode; //! \brief Target matrix inversion accuracy. double _accuracy_goal; //! \brief GPU memory in GiB. double _gpu_ram_gb; //! \brief Host system memory in GiB. double _host_ram_gb; //! \brief Maximum number of refinement iterations. int _max_ref_iters; //! \brief Refinement flag. bool _use_refinement; public: //! \brief Flag for LU factorization inversion. const static short INV_MODE_LU = 0; //! \brief Flag for singular value decomposition inversion. const static short INV_MODE_SVD = 1; //! \brief Flag for linear system solver. const static short INV_MODE_GESV = 1; //! \brief Flag for random butterfly transformation inversion. const static short INV_MODE_RBT = 2; //! \brief Flag for singular value decomposition. const static short INV_MODE_SVD = 3; //! \brief Read-only view on inversion mode flag. const short& invert_mode = _invert_mode; //! \brief Read-only view on target matrix inversion accuracy. const double& accuracy_goal = _accuracy_goal; //! \brief Read-only view on GPU memory in GiB. const double& gpu_ram_gb = _gpu_ram_gb; //! \brief Read-only view on host system memory in GiB. const double& host_ram_gb = _host_ram_gb; //! \brief Read-only view on maximum number of refinement iterations. const int& max_ref_iters = _max_ref_iters; //! \brief Read-only view on refinement flag. const bool& use_refinement = _use_refinement; //! \brief Pointer to a Logger instance. const Logger *logger; /** * \brief Default RuntimeSettings instance constructor. */ RuntimeSettings(); /** * \brief RuntimeSettings instance constructor. * * \param gconf: `GeometryConfiguration *` Pointer to a `GeometryConfiguration` instance. * \param ptr_logger: `Logger *` Pointer to a Logger instance (optional). */ RuntimeSettings(GeometryConfiguration *gconf, Logger *ptr_logger=NULL); /** * \brief Update matrix inversion accuracy to new value. * * \param goal: `const double` Desired new accuracy value. */ RuntimeSettings(GeometryConfiguration *gconf); void set_accuracy_goal(const double goal) { _accuracy_goal = goal; } }; /** Loading src/libnptm/Configuration.cpp +23 −5 Original line number Diff line number Diff line Loading @@ -49,6 +49,10 @@ #include "../include/Parsers.h" #endif #ifndef INCLUDE_LOGGING_H_ #include "../include/logging.h" #endif #ifndef INCLUDE_CONFIGURATION_H_ #include "../include/Configuration.h" #endif Loading Loading @@ -401,9 +405,10 @@ GeometryConfiguration* GeometryConfiguration::from_legacy(const std::string& fil if (str_target.substr(0, 10).compare("INVERSION=") == 0) { string str_inv_mode = str_target.substr(10, str_target.length()); short inv_mode = 0; if (str_inv_mode.compare("LU") == 0) inv_mode = 0; else if (str_inv_mode.compare("SVD") == 0) inv_mode = 1; else if (str_inv_mode.compare("RBT") == 0) inv_mode = 2; if (str_inv_mode.compare("LU") == 0) inv_mode = RuntimeSettings::INV_MODE_LU; else if (str_inv_mode.compare("GESV") == 0) inv_mode = RuntimeSettings::INV_MODE_GESV; else if (str_inv_mode.compare("RBT") == 0) inv_mode = RuntimeSettings::INV_MODE_RBT; else if (str_inv_mode.compare("SVD") == 0) inv_mode = RuntimeSettings::INV_MODE_SVD; else { throw(UnrecognizedConfigurationException("ERROR: unrecognized option \"" + str_target + "\"!\n")); } Loading @@ -428,11 +433,24 @@ GeometryConfiguration* GeometryConfiguration::from_legacy(const std::string& fil // >>> END OF GeometryConfiguration CLASS IMPLEMENTATION <<< // >>> RuntimeSettings CLASS IMPLEMENTATION <<< RuntimeSettings::RuntimeSettings(GeometryConfiguration *gconf) { RuntimeSettings::RuntimeSettings() { _invert_mode = RuntimeSettings::INV_MODE_LU; _accuracy_goal = 1.0e-14; _gpu_ram_gb = 0.0; _host_ram_gb = 0.0; _max_ref_iters = 5; _use_refinement = false; logger = NULL; } RuntimeSettings::RuntimeSettings(GeometryConfiguration *gconf, Logger *ptr_logger) { _invert_mode = gconf->invert_mode; _accuracy_goal = 1.0e-14; // TODO: make this option configurable. _gpu_ram_gb = gconf->gpu_ram_gb; _host_ram_gb = gconf->host_ram_gb; _use_refinement = gconf->refinement_flag; _max_ref_iters = 5; // TODO: make this option configurable. _use_refinement = gconf->refine_flag; logger = ptr_logger; } // >>> END OF RuntimeSettings CLASS IMPLEMENTATION <<< Loading Loading
src/include/Configuration.h +29 −4 Original line number Diff line number Diff line Loading @@ -177,7 +177,7 @@ public: //! \brief Read-only view on scattered field final elevation. const double& sc_phi_end = _sc_phi_end; //! \brief Read-only view on flag for matrix inversion refinement. const short& refine_flag = _refine_flag; const bool& refine_flag = _refine_flag; //! \brief Read-only view on flag for dynamic order management. const short& dyn_order_flag = _dyn_order_flag; //! \brief Read-only view on host RAM in GB. Loading Loading @@ -327,36 +327,61 @@ class RuntimeSettings { protected: //! \brief Inversion mode flag. short _invert_mode; //! \brief Target matrix inversion accuracy. double _accuracy_goal; //! \brief GPU memory in GiB. double _gpu_ram_gb; //! \brief Host system memory in GiB. double _host_ram_gb; //! \brief Maximum number of refinement iterations. int _max_ref_iters; //! \brief Refinement flag. bool _use_refinement; public: //! \brief Flag for LU factorization inversion. const static short INV_MODE_LU = 0; //! \brief Flag for singular value decomposition inversion. const static short INV_MODE_SVD = 1; //! \brief Flag for linear system solver. const static short INV_MODE_GESV = 1; //! \brief Flag for random butterfly transformation inversion. const static short INV_MODE_RBT = 2; //! \brief Flag for singular value decomposition. const static short INV_MODE_SVD = 3; //! \brief Read-only view on inversion mode flag. const short& invert_mode = _invert_mode; //! \brief Read-only view on target matrix inversion accuracy. const double& accuracy_goal = _accuracy_goal; //! \brief Read-only view on GPU memory in GiB. const double& gpu_ram_gb = _gpu_ram_gb; //! \brief Read-only view on host system memory in GiB. const double& host_ram_gb = _host_ram_gb; //! \brief Read-only view on maximum number of refinement iterations. const int& max_ref_iters = _max_ref_iters; //! \brief Read-only view on refinement flag. const bool& use_refinement = _use_refinement; //! \brief Pointer to a Logger instance. const Logger *logger; /** * \brief Default RuntimeSettings instance constructor. */ RuntimeSettings(); /** * \brief RuntimeSettings instance constructor. * * \param gconf: `GeometryConfiguration *` Pointer to a `GeometryConfiguration` instance. * \param ptr_logger: `Logger *` Pointer to a Logger instance (optional). */ RuntimeSettings(GeometryConfiguration *gconf, Logger *ptr_logger=NULL); /** * \brief Update matrix inversion accuracy to new value. * * \param goal: `const double` Desired new accuracy value. */ RuntimeSettings(GeometryConfiguration *gconf); void set_accuracy_goal(const double goal) { _accuracy_goal = goal; } }; /** Loading
src/libnptm/Configuration.cpp +23 −5 Original line number Diff line number Diff line Loading @@ -49,6 +49,10 @@ #include "../include/Parsers.h" #endif #ifndef INCLUDE_LOGGING_H_ #include "../include/logging.h" #endif #ifndef INCLUDE_CONFIGURATION_H_ #include "../include/Configuration.h" #endif Loading Loading @@ -401,9 +405,10 @@ GeometryConfiguration* GeometryConfiguration::from_legacy(const std::string& fil if (str_target.substr(0, 10).compare("INVERSION=") == 0) { string str_inv_mode = str_target.substr(10, str_target.length()); short inv_mode = 0; if (str_inv_mode.compare("LU") == 0) inv_mode = 0; else if (str_inv_mode.compare("SVD") == 0) inv_mode = 1; else if (str_inv_mode.compare("RBT") == 0) inv_mode = 2; if (str_inv_mode.compare("LU") == 0) inv_mode = RuntimeSettings::INV_MODE_LU; else if (str_inv_mode.compare("GESV") == 0) inv_mode = RuntimeSettings::INV_MODE_GESV; else if (str_inv_mode.compare("RBT") == 0) inv_mode = RuntimeSettings::INV_MODE_RBT; else if (str_inv_mode.compare("SVD") == 0) inv_mode = RuntimeSettings::INV_MODE_SVD; else { throw(UnrecognizedConfigurationException("ERROR: unrecognized option \"" + str_target + "\"!\n")); } Loading @@ -428,11 +433,24 @@ GeometryConfiguration* GeometryConfiguration::from_legacy(const std::string& fil // >>> END OF GeometryConfiguration CLASS IMPLEMENTATION <<< // >>> RuntimeSettings CLASS IMPLEMENTATION <<< RuntimeSettings::RuntimeSettings(GeometryConfiguration *gconf) { RuntimeSettings::RuntimeSettings() { _invert_mode = RuntimeSettings::INV_MODE_LU; _accuracy_goal = 1.0e-14; _gpu_ram_gb = 0.0; _host_ram_gb = 0.0; _max_ref_iters = 5; _use_refinement = false; logger = NULL; } RuntimeSettings::RuntimeSettings(GeometryConfiguration *gconf, Logger *ptr_logger) { _invert_mode = gconf->invert_mode; _accuracy_goal = 1.0e-14; // TODO: make this option configurable. _gpu_ram_gb = gconf->gpu_ram_gb; _host_ram_gb = gconf->host_ram_gb; _use_refinement = gconf->refinement_flag; _max_ref_iters = 5; // TODO: make this option configurable. _use_refinement = gconf->refine_flag; logger = ptr_logger; } // >>> END OF RuntimeSettings CLASS IMPLEMENTATION <<< Loading