Skip to content

Commit 7f19215

Browse files
committed
Merge pull request ComputationalRadiationPhysics#845 from Heikman/feature-FieldPrinter2D
Feature SliceFieldPrint 2D
2 parents 9b9696e + 6153d13 commit 7f19215

File tree

4 files changed

+31
-22
lines changed

4 files changed

+31
-22
lines changed

src/picongpu/include/plugins/PluginController.hpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@
6565

6666
#if(SIMDIM==DIM3)
6767
#include "plugins/IntensityPlugin.hpp"
68-
#include "plugins/SliceFieldPrinterMulti.hpp"
6968
#endif
69+
#include "plugins/SliceFieldPrinterMulti.hpp"
7070

7171
#include "plugins/output/images/Visualisation.hpp"
7272

@@ -141,9 +141,7 @@ class PluginController : public ILightweightPlugin
141141

142142
/* define field plugins */
143143
typedef bmpl::vector<
144-
#if(SIMDIM==DIM3)
145144
SliceFieldPrinterMulti<bmpl::_1>
146-
#endif
147145
> UnspecializedFieldPlugins;
148146

149147
typedef bmpl::vector< FieldB, FieldE, FieldJ> AllFields;

src/picongpu/include/plugins/SliceFieldPrinter.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2013-2014 Heiko Burau, Rene Widera, Felix Schmitt,
2+
* Copyright 2013-2015 Heiko Burau, Rene Widera, Felix Schmitt,
33
* Richard Pausch
44
*
55
* This file is part of PIConGPU.
@@ -47,7 +47,7 @@ class SliceFieldPrinter : public ILightweightPlugin
4747
int plane;
4848
float_X slicePoint;
4949
MappingDesc *cellDescription;
50-
container::DeviceBuffer<float3_64, 2>* dBuffer_SI;
50+
container::DeviceBuffer<float3_64, simDim-1>* dBuffer_SI;
5151

5252
void pluginLoad();
5353
void pluginUnload();

src/picongpu/include/plugins/SliceFieldPrinter.tpp

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2013-2014 Heiko Burau, Rene Widera, Felix Schmitt,
2+
* Copyright 2013-2015 Heiko Burau, Rene Widera, Felix Schmitt,
33
* Richard Pausch
44
*
55
* This file is part of PIConGPU.
@@ -66,10 +66,10 @@ void SliceFieldPrinter<Field>::pluginLoad()
6666
namespace vec = ::PMacc::math;
6767
typedef SuperCellSize BlockDim;
6868

69-
vec::Size_t<3> size = vec::Size_t<3>(this->cellDescription->getGridSuperCells()) * precisionCast<size_t>(BlockDim::toRT())
69+
vec::Size_t<simDim> size = vec::Size_t<simDim>(this->cellDescription->getGridSuperCells()) * precisionCast<size_t>(BlockDim::toRT())
7070
- precisionCast<size_t>(2 * BlockDim::toRT());
71-
this->dBuffer_SI = new container::DeviceBuffer<float3_64, 2>(
72-
size.shrink<2>((this->plane+1)%3));
71+
this->dBuffer_SI = new container::DeviceBuffer<float3_64, simDim-1>(
72+
size.shrink<simDim-1>((this->plane+1)%simDim));
7373
}
7474
else
7575
{
@@ -126,39 +126,50 @@ void SliceFieldPrinter<Field>::printSlice(const TField& field, int nAxis, float
126126
namespace vec = PMacc::math;
127127
using namespace vec::tools;
128128

129-
PMacc::GridController<3>& con = PMacc::Environment<3>::get().GridController();
130-
vec::Size_t<3> gpuDim = (vec::Size_t<3>)con.getGpuNodes();
131-
vec::Size_t<3> globalGridSize = gpuDim * field.size();
129+
PMacc::GridController<simDim>& con = PMacc::Environment<simDim>::get().GridController();
130+
vec::Size_t<simDim> gpuDim = (vec::Size_t<simDim>)con.getGpuNodes();
131+
vec::Size_t<simDim> globalGridSize = gpuDim * field.size();
132132
int globalPlane = globalGridSize[nAxis] * slicePoint;
133133
int localPlane = globalPlane % field.size()[nAxis];
134134
int gpuPlane = globalPlane / field.size()[nAxis];
135135

136-
vec::Int<3> nVector(vec::Int<3>::create(0));
136+
vec::Int<simDim> nVector(vec::Int<simDim>::create(0));
137137
nVector[nAxis] = 1;
138138

139-
zone::SphericZone<3> gpuGatheringZone(vec::Size_t<3>(gpuDim.x(), gpuDim.y(), gpuDim.z()),
140-
nVector * gpuPlane);
139+
zone::SphericZone<simDim> gpuGatheringZone(gpuDim, nVector * gpuPlane);
141140
gpuGatheringZone.size[nAxis] = 1;
142141

143-
algorithm::mpi::Gather<3> gather(gpuGatheringZone);
142+
algorithm::mpi::Gather<simDim> gather(gpuGatheringZone);
144143
if(!gather.participate()) return;
145144

146145
using namespace lambda;
147-
vec::UInt32<3> twistedVector((nAxis+1)%3, (nAxis+2)%3, nAxis);
146+
#if(SIMDIM==DIM3)
147+
vec::UInt32<3> twistedAxesVec((nAxis+1)%3, (nAxis+2)%3, nAxis);
148148

149149
/* convert data to higher precision and to SI units */
150150
SliceFieldPrinterHelper::ConversionFunctor<Field> cf;
151151
algorithm::kernel::Foreach<vec::CT::UInt32<4,4,1> >()(
152152
dBuffer_SI->zone(), dBuffer_SI->origin(),
153-
cursor::tools::slice(field.originCustomAxes(twistedVector)(0,0,localPlane)),
153+
cursor::tools::slice(field.originCustomAxes(twistedAxesVec)(0,0,localPlane)),
154154
cf );
155+
#endif
156+
#if(SIMDIM==DIM2)
157+
vec::UInt32<2> twistedAxesVec((nAxis+1)%2, nAxis);
158+
159+
/* convert data to higher precision and to SI units */
160+
SliceFieldPrinterHelper::ConversionFunctor<Field> cf;
161+
algorithm::kernel::Foreach<vec::CT::UInt32<16,1,1> >()(
162+
dBuffer_SI->zone(), dBuffer_SI->origin(),
163+
cursor::tools::slice(field.originCustomAxes(twistedAxesVec)(0,localPlane)),
164+
cf );
165+
#endif
155166

156167
/* copy selected plane from device to host */
157-
container::HostBuffer<float3_64, 2> hBuffer(dBuffer_SI->size());
168+
container::HostBuffer<float3_64, simDim-1> hBuffer(dBuffer_SI->size());
158169
hBuffer = *dBuffer_SI;
159170

160171
/* collect data from all nodes/GPUs */
161-
container::HostBuffer<float3_64, 2> globalBuffer(hBuffer.size() * gpuDim.shrink<2>((nAxis+1)%3));
172+
container::HostBuffer<float3_64, simDim-1> globalBuffer(hBuffer.size() * gpuDim.shrink<simDim-1>((nAxis+1)%simDim));
162173
gather(globalBuffer, hBuffer, nAxis);
163174
if(!gather.root()) return;
164175
std::ofstream file(filename.c_str());

src/picongpu/include/plugins/SliceFieldPrinterMulti.tpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2013-2014 Heiko Burau, Rene Widera, Felix Schmitt,
2+
* Copyright 2013-2015 Heiko Burau, Rene Widera, Felix Schmitt,
33
* Richard Pausch
44
*
55
* This file is part of PIConGPU.
@@ -44,7 +44,7 @@ namespace picongpu
4444

4545
template<typename Field>
4646
SliceFieldPrinterMulti<Field>::SliceFieldPrinterMulti()
47-
: name("SliceFieldPrinterMulti: prints a slice of a field"),
47+
: name("SliceFieldPrinter: prints a slice of a field"),
4848
prefix(Field::getName() + std::string("_slice"))
4949
{
5050
Environment<>::get().PluginConnector().registerPlugin(this);

0 commit comments

Comments
 (0)