From d63a8baa02c8911174f37bf223f0c68d3ace92b6 Mon Sep 17 00:00:00 2001 From: Riccardo De Maria Date: Wed, 14 Apr 2021 12:25:13 +0200 Subject: [PATCH] update cobjects --- release.sh | 20 ++++ xfields/beam_elements/beambeam.py | 4 +- xfields/beam_elements/spacecharge.py | 4 +- xfields/fieldmaps/bigaussian.py | 4 +- xfields/fieldmaps/interpolated.py | 4 +- xfields/solvers/fftsolvers.py | 6 +- xfields/src/linear_interpolators.h | 172 ++++++++++++++------------- 7 files changed, 122 insertions(+), 92 deletions(-) create mode 100755 release.sh diff --git a/release.sh b/release.sh new file mode 100755 index 00000000..c12c3115 --- /dev/null +++ b/release.sh @@ -0,0 +1,20 @@ +#!/bin/bash +set -euo pipefail; IFS=$'\n\t' + +NAME=$( python setup.py --name ) +VER=$( python setup.py --version ) + +echo "========================================================================" +echo "Tagging $NAME v$VER" +echo "========================================================================" + +git tag -a v$VER +git push origin v$VER + +echo "========================================================================" +echo "Releasing $NAME v$VER on PyPI" +echo "========================================================================" + +python setup.py sdist +twine upload dist/* +rm -r dist/ *.egg-info diff --git a/xfields/beam_elements/beambeam.py b/xfields/beam_elements/beambeam.py index c51ebc3d..aba2ac46 100644 --- a/xfields/beam_elements/beambeam.py +++ b/xfields/beam_elements/beambeam.py @@ -1,5 +1,5 @@ from xfields import BiGaussianFieldMap -from xobjects.context import ContextDefault +from xobjects.context import context_default class BeamBeamBiGaussian2D(object): """ @@ -39,7 +39,7 @@ def __init__(self, min_sigma_diff=1e-10): if context is None: - context = ContextDefault() + context = context_default self.context = context self.n_particles = n_particles diff --git a/xfields/beam_elements/spacecharge.py b/xfields/beam_elements/spacecharge.py index 06fca2b8..e61d9c24 100644 --- a/xfields/beam_elements/spacecharge.py +++ b/xfields/beam_elements/spacecharge.py @@ -1,6 +1,6 @@ from xfields import TriLinearInterpolatedFieldMap -from xobjects.context import ContextDefault +from xobjects.context import context_default class SpaceCharge3D(object): """ @@ -71,7 +71,7 @@ def __init__(self, gamma0=None): if context is None: - context = ContextDefault() + context = context_default self.length = length self.update_on_track = update_on_track diff --git a/xfields/fieldmaps/bigaussian.py b/xfields/fieldmaps/bigaussian.py index 12d03e76..6aa38a6b 100644 --- a/xfields/fieldmaps/bigaussian.py +++ b/xfields/fieldmaps/bigaussian.py @@ -1,5 +1,5 @@ import numpy as np -from xobjects.context import ContextDefault +from xobjects.context import context_default from .base import FieldMap from ..contexts import add_default_kernels @@ -53,7 +53,7 @@ def __init__(self, if context is None: - context = ContextDefault() + context = context_default add_default_kernels(context) diff --git a/xfields/fieldmaps/interpolated.py b/xfields/fieldmaps/interpolated.py index e5f1c117..b22a4797 100644 --- a/xfields/fieldmaps/interpolated.py +++ b/xfields/fieldmaps/interpolated.py @@ -1,6 +1,6 @@ import numpy as np -from xobjects.context import ContextDefault +from xobjects.context import context_default import xobjects as xo from .base import FieldMap @@ -74,7 +74,7 @@ def __init__(self, if context is None: - context = ContextDefault() + context = context_default add_default_kernels(context) diff --git a/xfields/solvers/fftsolvers.py b/xfields/solvers/fftsolvers.py index 7a8956e7..c8a22d39 100644 --- a/xfields/solvers/fftsolvers.py +++ b/xfields/solvers/fftsolvers.py @@ -4,7 +4,7 @@ from .base import Solver -from xobjects.context import ContextDefault +from xobjects.context import context_default class FFTSolver2D(Solver): @@ -33,7 +33,7 @@ class FFTSolver3D(Solver): def __init__(self, dx, dy, dz, nx, ny, nz, context=None): if context is None: - context = ContextDefault() + context = context_default self.context = context @@ -139,7 +139,7 @@ class FFTSolver2p5D(FFTSolver3D): def __init__(self, dx, dy, dz, nx, ny, nz, context=None): if context is None: - context = ContextDefault() + context = context_default self.context = context # Prepare arrays diff --git a/xfields/src/linear_interpolators.h b/xfields/src/linear_interpolators.h index 1c9b617a..6a2745bb 100644 --- a/xfields/src/linear_interpolators.h +++ b/xfields/src/linear_interpolators.h @@ -7,10 +7,10 @@ const int nparticles, // particle positions /*gpuglmem*/ const double* x, - /*gpuglmem*/ const double* y, - /*gpuglmem*/ const double* z, - // particle weights - /*gpuglmem*/ const double* part_weights, + /*gpuglmem*/ const double* y, + /*gpuglmem*/ const double* z, + // particle weights + /*gpuglmem*/ const double* part_weights, // mesh origin const double x0, const double y0, const double z0, // mesh distances per cell @@ -26,44 +26,54 @@ #pragma omp parallel for //only_for_context cpu_openmp for (int pidx=0; pidx= 0 && jx < nx - 1 && ix >= 0 && ix < ny - 1 - && kx >= 0 && kx < nz - 1) - { - atomicAdd(&grid1d[jx + ix*nx + kx*nx*ny], wijk); - atomicAdd(&grid1d[jx+1 + ix*nx + kx*nx*ny], wij1k); - atomicAdd(&grid1d[jx + (ix+1)*nx + kx*nx*ny], wi1jk); - atomicAdd(&grid1d[jx+1 + (ix+1)*nx + kx*nx*ny], wi1j1k); - atomicAdd(&grid1d[jx + ix*nx + (kx+1)*nx*ny], wijk1); - atomicAdd(&grid1d[jx+1 + ix*nx + (kx+1)*nx*ny], wij1k1); - atomicAdd(&grid1d[jx + (ix+1)*nx + (kx+1)*nx*ny], wi1jk1); - atomicAdd(&grid1d[jx+1 + (ix+1)*nx + (kx+1)*nx*ny], wi1j1k1); - } + double pwei = part_weights[pidx]; + + // indices + int jx = floor((x[pidx] - x0) / dx); + int ix = floor((y[pidx] - y0) / dy); + int kx = floor((z[pidx] - z0) / dz); + + // distances + double dxi = x[pidx] - (x0 + jx * dx); + double dyi = y[pidx] - (y0 + ix * dy); + double dzi = z[pidx] - (z0 + kx * dz); + + // weights + double wijk = pwei * vol_m1 * (1.-dxi/dx) * (1.-dyi/dy) * (1.-dzi/dz); + double wi1jk = pwei * vol_m1 * (1.-dxi/dx) * (dyi/dy) * (1.-dzi/dz); + double wij1k = pwei * vol_m1 * (dxi/dx) * (1.-dyi/dy) * (1.-dzi/dz); + double wi1j1k = pwei * vol_m1 * (dxi/dx) * (dyi/dy) * (1.-dzi/dz); + double wijk1 = pwei * vol_m1 * (1.-dxi/dx) * (1.-dyi/dy) * (dzi/dz); + double wi1jk1 = pwei * vol_m1 * (1.-dxi/dx) * (dyi/dy) * (dzi/dz); + double wij1k1 = pwei * vol_m1 * (dxi/dx) * (1.-dyi/dy) * (dzi/dz); + double wi1j1k1 = pwei * vol_m1 * (dxi/dx) * (dyi/dy) * (dzi/dz); + + if (jx >= 0 && jx < nx - 1 && ix >= 0 && ix < ny - 1 + && kx >= 0 && kx < nz - 1) + { + atomicAdd(&grid1d[jx + ix*nx + kx*nx*ny], wijk); + atomicAdd(&grid1d[jx+1 + ix*nx + kx*nx*ny], wij1k); + atomicAdd(&grid1d[jx + (ix+1)*nx + kx*nx*ny], wi1jk); + atomicAdd(&grid1d[jx+1 + (ix+1)*nx + kx*nx*ny], wi1j1k); + atomicAdd(&grid1d[jx + ix*nx + (kx+1)*nx*ny], wijk1); + atomicAdd(&grid1d[jx+1 + ix*nx + (kx+1)*nx*ny], wij1k1); + atomicAdd(&grid1d[jx + (ix+1)*nx + (kx+1)*nx*ny], wi1jk1); + atomicAdd(&grid1d[jx+1 + (ix+1)*nx + (kx+1)*nx*ny], wi1j1k1); + } }//end_vectorize } +void spacecharge_track(SpaceCharge* el, Particle* pp){ + FieldMap* fm = SpaceCharge_get_fieldmap(el); + + void FieldMap_field_at_point(); + +}; + + + + /*gpukern*/ void m2p_rectmesh3d( // INPUTS: // length of x, y, z arrays @@ -93,47 +103,47 @@ #pragma omp parallel for //only_for_context cpu_openmp for (int pidx=0; pidx= 0 && jx < nx - 1 && ix >= 0 && ix < ny - 1 - && kx >= 0 && kx < nz - 1){ - for (iq=0; iq= 0 && jx < nx - 1 && ix >= 0 && ix < ny - 1 + && kx >= 0 && kx < nz - 1){ + for (iq=0; iq