Skip to content
Snippets Groups Projects
Commit c4d90c4f authored by Giovanni La Mura's avatar Giovanni La Mura
Browse files

Introduce a data structure for scattering angles

parent f9e9f4b4
No related branches found
No related tags found
No related merge requests found
......@@ -385,4 +385,106 @@ public:
*/
~C9();
};
/*! \brief A data structure representing the angles to be evaluated in the problem.
*
*/
class ScatteringAngles {
protected:
//! \brief Number of incident field azimuth angles.
int _nth;
//! \brief Number of scattered field azimuth angles.
int _nths;
//! \brief Number of incident field elevation angles.
int _nph;
//! \brief Number of scattered field elevation angles.
int _nphs;
//! \brief Number of incident field propagation angles.
int _nk;
//! \brief Number of scattered field propagation angles.
int _nks;
//! \brief Total number of field propagation angles.
int _nkks;
//! \brief First incident field azimuth angle.
double _th;
//! \brief Incident field azimuth angle increment.
double _thstp;
//! \brief Last incident field azimuth angle.
double _thlst;
//! \brief First scattered field azimuth angle.
double _ths;
//! \brief Scattered field azimuth angle increment.
double _thsstp;
//! \brief Last scattered field azimuth angle.
double _thslst;
//! \brief First incident field elevation angle.
double _ph;
//! \brief Incident field elevation angle increment.
double _phstp;
//! \brief Last incident field elevation angle.
double _phlst;
//! \brief First scattered field elevation angle.
double _phs;
//! \brief Scattered field elevation angle increment.
double _phsstp;
//! \brief Last scattered field elevation angle.
double _phslst;
//! \brief Azimuth scattering deflection.
double _thsca;
public:
//! \brief Read only view of `_nth`.
const int& nth = _nth;
//! \brief Read only view of `_nths`.
const int& nths = _nths;
//! \brief Read only view of `_nph`.
const int& nph = _nph;
//! \brief Read only view of `_nphs`.
const int& nphs = _nphs;
//! \brief Read only view of `_nk`.
const int& nk = _nk;
//! \brief Read only view of `_nks`.
const int& nks = _nks;
//! \brief Read only view of `_nkks`.
const int& nkks = _nkks;
//! \brief Read only view of `_th`.
const double& th = _th;
//! \brief Read only view of `_thstp`.
const double& thstp = _thstp;
//! \brief Read only view of `_thlst`.
const double& thlst = _thlst;
//! \brief Read only view of `_ths`.
const double& ths = _ths;
//! \brief Read only view of `_thsstp`.
const double& thsstp = _thsstp;
//! \brief Read only view of `_thslst`.
const double& thslst = _thslst;
//! \brief Read only view of `_ph`.
const double& ph = _ph;
//! \brief Read only view of `_phstp`.
const double& phstp = _phstp;
//! \brief Read only view of `_phlst`.
const double& phlst = _phlst;
//! \brief Read only view of `_phs`.
const double& phs = _phs;
//! \brief Read only view of `_phsstp`.
const double& phsstp = _phsstp;
//! \brief Read only view of `_phslst`.
const double& phslst = _phslst;
//! \brief Read only view of `_thsca`.
const double& thsca = _thsca;
/*! \brief ScatteringAngles instance constructor.
*
* \param gconf: `GeometryConfiguration*` Pointer to a GeometryConfiguration object.
*/
ScatteringAngles(GeometryConfiguration *gconf);
/*! \brief ScatteringAngles copy constructor.
*
* \param rhs: `ScatteringAngles&` Reference to the ScatteringAngles object to be copied.
*/
ScatteringAngles(const ScatteringAngles &rhs);
};
#endif
......@@ -2,15 +2,7 @@
/*! \file Commons.cpp
*
* DEVELOPMENT NOTE:
* The construction of common blocks requires some information
* that is stored in configuration objects and is needed to compute
* the allocation size of vectors and matrices. Currently, this
* information is passed as arguments to the constructors of the
* common blocks. A simpler and more logical way to operate would
* be to design the constructors to take as arguments only pointers
* to the configuration objects. These, on their turn, need to
* expose methods to access the relevant data in read-only mode.
* \brief Implementation of the common data structures.
*/
#ifndef INCLUDE_TYPES_H_
#include "../include/types.h"
......@@ -536,3 +528,70 @@ C9::~C9() {
for (int si = sam_size_0 - 1; si > -1; si--) delete[] sam[si];
delete[] sam;
}
ScatteringAngles::ScatteringAngles(GeometryConfiguration *gconf) {
int isam = (int)gconf->get_param("meridional_type");
_th = gconf->get_param("in_theta_start");
_thstp = gconf->get_param("in_theta_step");
_thlst = gconf->get_param("in_theta_end");
_ths = gconf->get_param("sc_theta_start");
_thsstp = gconf->get_param("sc_theta_step");
_thslst = gconf->get_param("sc_theta_end");
_ph = gconf->get_param("in_phi_start");
_phstp = gconf->get_param("in_phi_step");
_phlst = gconf->get_param("in_phi_end");
_phs = gconf->get_param("sc_phi_start");
_phsstp = gconf->get_param("sc_phi_step");
_phslst = gconf->get_param("sc_phi_end");
double small = 1.0e-3;
_nth = 0;
_nph = 0;
if (_thstp != 0.0) _nth = int((_thlst - _th) / _thstp + small);
_nth++;
if (_phstp != 0.0) _nph = int((_phlst - _ph) / _phstp + small);
_nph++;
_nths = 0;
_nphs = 0;
_thsca = 0.0;
if (isam > 1) {
_nths = 1;
_thsca = _ths - _th;
} else { // ISAM <= 1
if (_thsstp == 0.0) _nths = 0;
else _nths = int ((_thslst - _ths) / _thsstp + small);
_nths++;
}
if (isam >= 1) {
_nphs = 1;
} else {
if (_phsstp == 0.0) _nphs = 0;
else _nphs = int((_phslst - _phs) / _phsstp + small);
_nphs++;
}
_nk = nth * nph;
_nks = nths * nphs;
_nkks = nk * nks;
}
ScatteringAngles::ScatteringAngles(const ScatteringAngles &rhs) {
_th = rhs._th;
_thstp = rhs._thstp;
_thlst = rhs._thlst;
_ths = rhs._ths;
_thsstp = rhs._thsstp;
_thslst = rhs._thslst;
_ph = rhs._ph;
_phstp = rhs._phstp;
_phlst = rhs._phlst;
_phs = rhs._phs;
_phsstp = rhs._phsstp;
_phslst = rhs._phslst;
_nth = rhs._nth;
_nph = rhs._nph;
_nths = rhs._nths;
_nphs = rhs._nphs;
_thsca = rhs._thsca;
_nk = rhs._nk;
_nks = rhs._nks;
_nkks = rhs._nkks;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment