Update to allow accumulators in CIC projection

This commit is contained in:
Guilhem Lavaux 2021-08-05 08:50:31 +03:00
parent a16ae60382
commit 6cafdd50b2
3 changed files with 167 additions and 148 deletions

View File

@ -116,8 +116,17 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cosmotool/config.py.in ${CMAKE_CURREN
INSTALL(TARGETS INSTALL(TARGETS
${ct_TARGETS} ${ct_TARGETS}
COMPONENT python
LIBRARY DESTINATION ${PYTHON_SITE_PACKAGES}/cosmotool LIBRARY DESTINATION ${PYTHON_SITE_PACKAGES}/cosmotool
) )
INSTALL(DIRECTORY cosmotool ${CMAKE_CURRENT_BINARY_DIR}/cosmotool DESTINATION ${PYTHON_SITE_PACKAGES} INSTALL(DIRECTORY cosmotool ${CMAKE_CURRENT_BINARY_DIR}/cosmotool
COMPONENT python DESTINATION ${PYTHON_SITE_PACKAGES}
FILES_MATCHING PATTERN "*.py") FILES_MATCHING PATTERN "*.py")
add_custom_target(
python-install
DEPENDS ${ct_TARGETS}
COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=python -P
"${CMAKE_BINARY_DIR}/cmake_install.cmake")

View File

@ -247,6 +247,9 @@ class PySimulationAdaptor(PySimulationBase):
def __init__(self,sim): def __init__(self,sim):
self.simu = sim self.simu = sim
def getNumParticles(self):
return self.simu.numParticles
def getBoxsize(self): def getBoxsize(self):
return self.simu.BoxSize return self.simu.BoxSize

View File

@ -533,12 +533,13 @@ cdef void INTERNAL_project_cic_with_mass_periodic(DTYPE_t[:,:,:] g,
def project_cic(npx.ndarray[DTYPE_t, ndim=2] x not None, npx.ndarray[DTYPE_t, ndim=1] mass, int Ngrid, def project_cic(npx.ndarray[DTYPE_t, ndim=2] x not None, npx.ndarray[DTYPE_t, ndim=1] mass, int Ngrid,
double Lbox, bool periodic = False, centered=True): double Lbox, bool periodic = False, centered=True, output=None):
""" """
project_cic(x array (N,3), mass (may be None), Ngrid, Lbox, periodict, centered=True) project_cic(x array (N,3), mass (may be None), Ngrid, Lbox, periodict, centered=True, output=None)
This function does a Cloud-In-Cell projection of a 3d unstructured dataset. First argument is a Nx3 array of coordinates. This function does a Cloud-In-Cell projection of a 3d unstructured dataset. First argument is a Nx3 array of coordinates.
Second argument is an optinal mass. Ngrid is the size output grid and Lbox is the physical size of the grid. Second argument is an optinal mass. Ngrid is the size output grid and Lbox is the physical size of the grid.
if output is not None, it must be a numpy array with dimension NgridxNgridxNgrid. The result will be accumulated in that array.
""" """
cdef npx.ndarray[DTYPE_t, ndim=3] g cdef npx.ndarray[DTYPE_t, ndim=3] g
cdef double shifter cdef double shifter
@ -558,7 +559,13 @@ def project_cic(npx.ndarray[DTYPE_t, ndim=2] x not None, npx.ndarray[DTYPE_t, nd
if mass is not None and mass.shape[0] != x.shape[0]: if mass is not None and mass.shape[0] != x.shape[0]:
raise ValueError("Mass array and coordinate array must have the same number of elements") raise ValueError("Mass array and coordinate array must have the same number of elements")
if output is None:
g = np.zeros((Ngrid,Ngrid,Ngrid),dtype=DTYPE) g = np.zeros((Ngrid,Ngrid,Ngrid),dtype=DTYPE)
else:
if type(output) != np.ndarray:
raise ValueError("Invalid array type")
g = output
cdef DTYPE_t[:,:,:] d_g = g cdef DTYPE_t[:,:,:] d_g = g
cdef DTYPE_t[:,:] d_x = x cdef DTYPE_t[:,:] d_x = x