Commit cb40dba7 authored by Giovanni La Mura's avatar Giovanni La Mura
Browse files

Enable use of Logger class in RuntimeSettings

parent 88561f95
Loading
Loading
Loading
Loading
+29 −4
Original line number Diff line number Diff line
@@ -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.
@@ -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; }
};

/**
+23 −5
Original line number Diff line number Diff line
@@ -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
@@ -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"));
	}
@@ -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 <<<