Skip to content
Snippets Groups Projects
Commit 6ce99624 authored by Pietro Incardona's avatar Pietro Incardona
Browse files

Improving documentation

parent 0195313f
No related branches found
No related tags found
No related merge requests found
# Change Log
All notable changes to this project will be documented in this file.
## [1.1.0]
### Added
- Interface for Multi-vector dynamic load balancing
### Fixed
- Installation/detection of PETSC
- 2D Fixing IO in binary for vector
## [1.0.0] 13 September 2017
### Added
......
......@@ -100,42 +100,75 @@ struct init_prop
}
};
// Unknown type
//! Type check in case of unknown type
template<typename tcheck, bool foundamental>
struct typeCheck
{
//! It check if the type is Nan, data type to check
/*! \brief It check if the type is Nan, data type to check
*
* \param data to check
*
* \return true if is Nan
*
*/
static bool isNan(const tcheck & data)
{
return false;
}
//! It check is the type is infinity, data type to checl
/*! \brief It check if the type is Infinity, data type to check
*
* \param data to check
*
* \return false if is infinity
*
*/
static bool isInf(const tcheck & data)
{
return false;
}
};
// Unknown type
//! Type check in case of supported type
template<typename tcheck>
struct typeCheck<tcheck,true>
{
/*! \brief It check if the type is Nan, data type to check
*
* \param data to check
*
* \return true if is Nan
*
*/
static bool isNan(const tcheck & data)
{
return std::isnan(data);
}
/*! \brief It check if the type is Infinity, data type to check
*
* \param data to check
*
* \return true if is infinity
*
*/
static bool isInf(const tcheck & data)
{
return std::isinf(data);
}
};
// Array
//! Type check in case of supported array type
template<typename tcheck, bool foundamental, unsigned int N1>
struct typeCheck<tcheck[N1], foundamental>
{
/*! \brief It check if the type is Nan, data type to check
*
* \param data to check
*
* \return true if is Nan
*
*/
static bool isNan(tcheck (& data)[N1])
{
bool nn = false;
......@@ -149,6 +182,13 @@ struct typeCheck<tcheck[N1], foundamental>
return nn;
}
/*! \brief It check if the type is Infinity, data type to check
*
* \param data to check
*
* \return true if is infinity
*
*/
static bool isInf(tcheck (& data)[N1])
{
bool nn = false;
......@@ -163,10 +203,17 @@ struct typeCheck<tcheck[N1], foundamental>
}
};
// Array2d
//! Type check in case of supported 2D array type
template<typename tcheck, bool foundamental, unsigned int N1, unsigned int N2>
struct typeCheck<tcheck[N1][N2], foundamental>
{
/*! \brief It check if the type is Nan, data type to check
*
* \param data to check
*
* \return true if is Nan
*
*/
static bool isNan(tcheck (& data)[N1][N2])
{
bool nn = false;
......@@ -183,6 +230,13 @@ struct typeCheck<tcheck[N1][N2], foundamental>
return nn;
}
/*! \brief It check if the type is Infinity, data type to check
*
* \param data to check
*
* \return true if is infinity
*
*/
static bool isInf(tcheck (& data)[N1][N2])
{
bool nn = false;
......@@ -219,7 +273,8 @@ struct propCheckNAN
/*! \brief constructor
*
* \param
* \param data vector to check for Nan properties
* \param id element to check
*
*/
inline propCheckNAN(const vector & data, size_t id)
......@@ -252,7 +307,7 @@ struct propCheckNAN
/*! \brief this class is a functor for "for_each" algorithm
*
* This class is a functor for "for_each" algorithm. For each
* property it check that there are not NAN properties
* property it check that there are not infinity properties
*
* \param T boost::fusion::vector
*
......@@ -269,7 +324,7 @@ struct propCheckINF
/*! \brief constructor
*
* \param check the the property is infinity
* \param data vector to check
* \param id element
*
*/
......@@ -389,6 +444,13 @@ class se_class3_vector
//! last write
size_t l_wrt;
/*! \brief It check if the particle is in the internal ghost area
*
* \param p particle to check
*
* \return true if the particle is in that area
*
*/
bool isLocalHalo(const Point<dim,T> & p)
{
for (size_t i = 0; i < dec.getNLocalSub(); i++)
......@@ -448,7 +510,13 @@ class se_class3_vector
return type;
}
template<unsigned int ... prp> void create_NNP( const size_t (& gg)[sizeof...(prp)+1] )
/*! \brief Fill non_NP with the properties that are not synchronized
*
* \param gg vector of properties synchronized
*
*/
template<unsigned int ... prp>
void create_NNP( const size_t (& gg)[sizeof...(prp)+1] )
{
non_NP.clear();
......@@ -470,6 +538,13 @@ class se_class3_vector
}
/*! \brief Get property name
*
* \param i property
*
* \return the property name
*
*/
std::string getPrpName(size_t i) const
{
if (i == Np_real)
......@@ -480,17 +555,30 @@ class se_class3_vector
public:
//! Constructor all properties are uninitialized
/*! Constructor all properties are uninitialized
*
* \param dec decomposition
* \param vd vector we are cheking with SE_CLASS3 checks
*
*/
se_class3_vector(Decomposition & dec, vector & vd)
:dec(dec),vd(vd)
:dec(dec),vd(vd),l_wrt(-1)
{
}
/*! \brief return the status of the ghosts
*
* \return the status of the ghosts
*
*/
template<unsigned int prp> size_t isGhostSync()
{
return sync[GHOST][prp];
}
/*! \brief Initialize the se_class2 structure
*
*/
void Initialize()
{
auto it = vd.getDomainIterator_no_se3();
......@@ -702,6 +790,10 @@ class se_class3_vector
}
}
/*! \brief Operation to do after map
*
*
*/
void map_post()
{
for (size_t j = 0 ; j < Np_real + 1 ; j++)
......
......@@ -913,11 +913,13 @@ public:
* \tparam CellL CellList type to construct
*
* \param r_cut interation radius, or size of each cell
* \param no_se3 avoid SE_CLASS3 checking
*
* \return the Cell list
*
*/
template<typename CellL = CellList_gen<dim, St, Process_keys_lin, Mem_fast, shift<dim, St> > > CellL getCellList(St r_cut, bool no_se3 = false)
template<typename CellL = CellList_gen<dim, St, Process_keys_lin, Mem_fast, shift<dim, St> > >
CellL getCellList(St r_cut, bool no_se3 = false)
{
#ifdef SE_CLASS3
if (no_se3 == false)
......@@ -943,7 +945,8 @@ public:
* \return the Cell list
*
*/
template<typename CellL = CellList_gen<dim, St, Process_keys_hilb, Mem_fast, shift<dim, St> > > CellL getCellList_hilb(St r_cut)
template<typename CellL = CellList_gen<dim, St, Process_keys_hilb, Mem_fast, shift<dim, St> > >
CellL getCellList_hilb(St r_cut)
{
#ifdef SE_CLASS3
se3.getNN();
......@@ -964,6 +967,7 @@ public:
* \tparam CellL CellList type to construct
*
* \param cell_list Cell list to update
* \param no_se3 avoid se class 3 checking
*
*/
template<typename CellL> void updateCellList(CellL & cell_list, bool no_se3 = false)
......@@ -1045,11 +1049,13 @@ public:
*
* \param r_cut interation radius, or size of each cell
* \param enlarge In case of padding particles the cell list must be enlarged, like a ghost this parameter say how much must be enlarged
* \param no_se3 avoid se_class3 cheking default false
*
* \return the CellList
*
*/
template<typename CellL = CellList_gen<dim, St, Process_keys_lin, Mem_fast, shift<dim, St> > > CellL getCellList(St r_cut, const Ghost<dim, St> & enlarge, bool no_se3 = false)
template<typename CellL = CellList_gen<dim, St, Process_keys_lin, Mem_fast, shift<dim, St> > >
CellL getCellList(St r_cut, const Ghost<dim, St> & enlarge, bool no_se3 = false)
{
#ifdef SE_CLASS3
if (no_se3 == false)
......@@ -1525,11 +1531,15 @@ public:
}
/*! \brief Get an iterator that traverse the particles in the domain
* using a cell list
*
* \return an iterator
* \param NN Cell-list
*
* \return an iterator over the particles
*
*/
template<typename CellList> ParticleIt_Cells<dim,CellList> getDomainIteratorCells(CellList & NN)
template<typename CellList> ParticleIt_Cells<dim,CellList>
getDomainIteratorCells(CellList & NN)
{
#ifdef SE_CLASS3
se3.getIterator();
......@@ -1741,9 +1751,7 @@ public:
* from the particles
*
* \param md Model to use
* \param vd vector to add for the computational cost
* \param ts It is an optional parameter approximately should be the number of ghost get between two
* rebalancing at first decomposition this number can be ignored (default = 1) because not used
* \param vd external vector to add for the computational cost
*
*/
template <typename Model=ModelLin>inline void addComputationCosts(const self & vd, Model md=Model())
......@@ -1766,6 +1774,14 @@ public:
}
}
/*! \brief Add the computation cost on the decomposition coming
* from the particles
*
* \param md Model to use
* \param ts It is an optional parameter approximately should be the number of ghost get between two
* rebalancing at first decomposition this number can be ignored (default = 1) because not used
*
*/
template <typename Model=ModelLin> void finalizeComputationCosts(Model md=Model(), size_t ts = 1)
{
Decomposition & dec = getDecomposition();
......@@ -1808,36 +1824,6 @@ public:
addComputationCosts(*this,md);
finalizeComputationCosts(md,ts);
/* CellDecomposer_sm<dim, St, shift<dim,St>> cdsm;
Decomposition & dec = getDecomposition();
auto & dist = getDecomposition().getDistribution();
cdsm.setDimensions(dec.getDomain(), dec.getDistGrid().getSize(), 0);
for (size_t i = 0; i < dist.getNOwnerSubSubDomains() ; i++)
dec.setSubSubDomainComputationCost(dist.getOwnerSubSubDomain(i) , 1);
auto it = getDomainIterator();
while (it.isNext())
{
size_t v = cdsm.getCell(this->getPos(it.get()));
md.addComputation(dec,*this,v,it.get().getKey());
++it;
}
dec.computeCommunicationAndMigrationCosts(ts);
// Go throught all the sub-sub-domains and apply the model
for (size_t i = 0 ; i < dist.getNOwnerSubSubDomains(); i++)
md.applyModel(dec,dist.getOwnerSubSubDomain(i));
dist.setDistTol(md.distributionTol());*/
}
/*! \brief Save the distributed vector on HDF5 file
......
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