mirror of
https://bitbucket.org/cosmicvoids/vide_public.git
synced 2025-07-07 00:31:11 +00:00
Imported Healpix, cfitsio, cosmotool. Added cmake tool to build dependencies (cfitsio, hdf5, netcdf, boost, healpix, gsl, ..). Adjusted CMakeLists.txt
This commit is contained in:
parent
4bfb62f177
commit
51f6798f88
241 changed files with 243806 additions and 0 deletions
94
external/cosmotool/src/dinterpolate.hpp
vendored
Normal file
94
external/cosmotool/src/dinterpolate.hpp
vendored
Normal file
|
@ -0,0 +1,94 @@
|
|||
#ifndef __COSMO_DINTERPOLATE_HPP
|
||||
#define __COSMO_DINTERPOLATE_HPP
|
||||
|
||||
#include "config.hpp"
|
||||
#include "mykdtree.hpp"
|
||||
#include "kdtree_splitters.hpp"
|
||||
#include <gsl/gsl_eigen.h>
|
||||
|
||||
namespace CosmoTool {
|
||||
|
||||
template<typename PType, typename IType, int N>
|
||||
class DelaunayInterpolate {
|
||||
public:
|
||||
struct SimplexAccess {
|
||||
int32_t *simplex_list;
|
||||
};
|
||||
|
||||
typedef KDTree<N, SimplexAccess, PType, KD_homogeneous_cell_splitter<N, SimplexAccess> > QuickTree;
|
||||
typedef typename QuickTree::Cell QuickCell;
|
||||
typedef PType CoordType[N];
|
||||
|
||||
QuickTree *quickAccess;
|
||||
QuickCell *cells;
|
||||
PType *all_preweight;
|
||||
int32_t *point_to_simplex_list_base;
|
||||
IType *values;
|
||||
CoordType *positions;
|
||||
uint32_t numPoints;
|
||||
uint32_t numSimplex;
|
||||
uint32_t *simplex_list;
|
||||
gsl_eigen_symmv_workspace *eigen_work;
|
||||
bool *disable_simplex;
|
||||
|
||||
/**
|
||||
* This construct the interpolator. The construction is time consuming so
|
||||
* please do it the less possible number of times, especially if you have
|
||||
* a large number of points.
|
||||
*
|
||||
* @param positions list of the positions
|
||||
* @param values list of the values taken at each position
|
||||
* @param simplex_list list of points for each simplex. The packing
|
||||
* is the following:
|
||||
* [t(0,1),t(0,2),...,t(0,n+1),t(1,0),t(1,1),...,t(1,n+1),..],
|
||||
* with t(i,j) the i-th simplex and j-th point of the simplex. The indexes
|
||||
* refer to the previous list of points.
|
||||
* @param numPoints the number of points
|
||||
*/
|
||||
DelaunayInterpolate(CoordType *positions, IType *values, uint32_t *simplex_list,
|
||||
uint32_t numPoints, uint32_t numSimplex)
|
||||
throw (InvalidArgumentException)
|
||||
{
|
||||
this->positions = positions;
|
||||
this->values = values;
|
||||
this->simplex_list = simplex_list;
|
||||
this->numPoints = numPoints;
|
||||
this->numSimplex = numSimplex;
|
||||
this->disable_simplex = new bool[numSimplex];
|
||||
|
||||
buildPreweight();
|
||||
buildQuickAccess();
|
||||
|
||||
eigen_work = gsl_eigen_symmv_alloc(N);
|
||||
|
||||
}
|
||||
|
||||
~DelaunayInterpolate()
|
||||
{
|
||||
delete[] cells;
|
||||
delete quickAccess;
|
||||
delete[] point_to_simplex_list_base;
|
||||
delete[] all_preweight;
|
||||
delete[] disable_simplex;
|
||||
|
||||
gsl_eigen_symmv_free(eigen_work);
|
||||
}
|
||||
|
||||
void buildPreweight()
|
||||
throw (InvalidArgumentException);
|
||||
void buildQuickAccess();
|
||||
void buildHyperplane(const PType *v, CoordType& hyper);
|
||||
|
||||
bool checkPointInSimplex(const CoordType& pos, uint32_t simplex);
|
||||
|
||||
uint32_t findSimplex(const CoordType& pos)
|
||||
throw (InvalidArgumentException);
|
||||
|
||||
IType computeValue(const CoordType& pos)
|
||||
throw (InvalidArgumentException);
|
||||
};
|
||||
};
|
||||
|
||||
#include "dinterpolate.tcc"
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue