Skip to content

Commit

Permalink
update cobjects
Browse files Browse the repository at this point in the history
  • Loading branch information
rdemaria committed Apr 14, 2021
1 parent 4976313 commit d63a8ba
Show file tree
Hide file tree
Showing 7 changed files with 122 additions and 92 deletions.
20 changes: 20 additions & 0 deletions release.sh
Original file line number Diff line number Diff line change
@@ -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
4 changes: 2 additions & 2 deletions xfields/beam_elements/beambeam.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from xfields import BiGaussianFieldMap
from xobjects.context import ContextDefault
from xobjects.context import context_default

class BeamBeamBiGaussian2D(object):
"""
Expand Down Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions xfields/beam_elements/spacecharge.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from xfields import TriLinearInterpolatedFieldMap

from xobjects.context import ContextDefault
from xobjects.context import context_default

class SpaceCharge3D(object):
"""
Expand Down Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions xfields/fieldmaps/bigaussian.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -53,7 +53,7 @@ def __init__(self,


if context is None:
context = ContextDefault()
context = context_default

add_default_kernels(context)

Expand Down
4 changes: 2 additions & 2 deletions xfields/fieldmaps/interpolated.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -74,7 +74,7 @@ def __init__(self,


if context is None:
context = ContextDefault()
context = context_default

add_default_kernels(context)

Expand Down
6 changes: 3 additions & 3 deletions xfields/solvers/fftsolvers.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from .base import Solver

from xobjects.context import ContextDefault
from xobjects.context import context_default

class FFTSolver2D(Solver):

Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand Down
172 changes: 91 additions & 81 deletions xfields/src/linear_interpolators.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -26,44 +26,54 @@
#pragma omp parallel for //only_for_context cpu_openmp
for (int pidx=0; pidx<nparticles; pidx++){ //vectorize_over pidx nparticles

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);
}
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
Expand Down Expand Up @@ -93,47 +103,47 @@
#pragma omp parallel for //only_for_context cpu_openmp
for (int pidx=0; pidx<nparticles; pidx++){ //vectorize_over pidx nparticles

int offset_mq;
int iq;

// 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 = (1.-dxi/dx)*(1.-dyi/dy)*(1.-dzi/dz);
double wi1jk = (1.-dxi/dx)*(dyi/dy) *(1.-dzi/dz);
double wij1k = (dxi/dx) *(1.-dyi/dy)*(1.-dzi/dz);
double wi1j1k = (dxi/dx) *(dyi/dy) *(1.-dzi/dz);
double wijk1 = (1.-dxi/dx)*(1.-dyi/dy)*(dzi/dz);
double wi1jk1 = (1.-dxi/dx)*(dyi/dy) *(dzi/dz);
double wij1k1 = (dxi/dx) *(1.-dyi/dy)*(dzi/dz);
double wi1j1k1 = (dxi/dx) *(dyi/dy) *(dzi/dz);

if (jx >= 0 && jx < nx - 1 && ix >= 0 && ix < ny - 1
&& kx >= 0 && kx < nz - 1){
for (iq=0; iq<n_quantities; iq++){
offset_mq = offsets_mesh_quantities[iq];
particles_quantity[iq*nparticles + pidx] = (
wijk * mesh_quantity[offset_mq + jx + ix*nx + kx*nx*ny]
+ wij1k * mesh_quantity[offset_mq + jx+1 + ix*nx + kx*nx*ny]
+ wi1jk * mesh_quantity[offset_mq + jx+ + (ix+1)*nx + kx*nx*ny]
+ wi1j1k * mesh_quantity[offset_mq + jx+1 + (ix+1)*nx + kx*nx*ny]
+ wijk1 * mesh_quantity[offset_mq + jx + ix*nx + (kx+1)*nx*ny]
+ wij1k1 * mesh_quantity[offset_mq + jx+1 + ix*nx + (kx+1)*nx*ny]
+ wi1jk1 * mesh_quantity[offset_mq + jx+ + (ix+1)*nx + (kx+1)*nx*ny]
+ wi1j1k1* mesh_quantity[offset_mq + jx+1 + (ix+1)*nx + (kx+1)*nx*ny]);
}
} else {
for (iq=0; iq<n_quantities; iq++){
particles_quantity[iq*nparticles + pidx] = 0;
}
}
//end_vectorize
int offset_mq;
int iq;

// 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 = (1.-dxi/dx)*(1.-dyi/dy)*(1.-dzi/dz);
double wi1jk = (1.-dxi/dx)*(dyi/dy) *(1.-dzi/dz);
double wij1k = (dxi/dx) *(1.-dyi/dy)*(1.-dzi/dz);
double wi1j1k = (dxi/dx) *(dyi/dy) *(1.-dzi/dz);
double wijk1 = (1.-dxi/dx)*(1.-dyi/dy)*(dzi/dz);
double wi1jk1 = (1.-dxi/dx)*(dyi/dy) *(dzi/dz);
double wij1k1 = (dxi/dx) *(1.-dyi/dy)*(dzi/dz);
double wi1j1k1 = (dxi/dx) *(dyi/dy) *(dzi/dz);

if (jx >= 0 && jx < nx - 1 && ix >= 0 && ix < ny - 1
&& kx >= 0 && kx < nz - 1){
for (iq=0; iq<n_quantities; iq++){
offset_mq = offsets_mesh_quantities[iq];
particles_quantity[iq*nparticles + pidx] = (
wijk * mesh_quantity[offset_mq + jx + ix*nx + kx*nx*ny]
+ wij1k * mesh_quantity[offset_mq + jx+1 + ix*nx + kx*nx*ny]
+ wi1jk * mesh_quantity[offset_mq + jx+ + (ix+1)*nx + kx*nx*ny]
+ wi1j1k * mesh_quantity[offset_mq + jx+1 + (ix+1)*nx + kx*nx*ny]
+ wijk1 * mesh_quantity[offset_mq + jx + ix*nx + (kx+1)*nx*ny]
+ wij1k1 * mesh_quantity[offset_mq + jx+1 + ix*nx + (kx+1)*nx*ny]
+ wi1jk1 * mesh_quantity[offset_mq + jx+ + (ix+1)*nx + (kx+1)*nx*ny]
+ wi1j1k1* mesh_quantity[offset_mq + jx+1 + (ix+1)*nx + (kx+1)*nx*ny]);
}
} else {
for (iq=0; iq<n_quantities; iq++){
particles_quantity[iq*nparticles + pidx] = 0;
}
}
//end_vectorize
}

0 comments on commit d63a8ba

Please sign in to comment.