Skip to content

Commit 92e46c4

Browse files
committed
Change store function to track duplicates and use it
1 parent cd29ecc commit 92e46c4

File tree

2 files changed

+24
-15
lines changed

2 files changed

+24
-15
lines changed

Exec/ParticleFilterTest/DarkMatterParticleContainer.H

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ AMREX_GPU_HOST_DEVICE AMREX_INLINE void store_dm_particle_single (amrex::Particl
6464
amrex::GpuArray<amrex::Real,AMREX_SPACEDIM> const& phi,
6565
amrex::GpuArray<amrex::Real,AMREX_SPACEDIM> const& dxi,
6666
const amrex::Real& dt, const amrex::Real& a_prev,
67-
const amrex::Real& a_cur, const int& do_move, const amrex::Real& radius_inner, const amrex::Real& radius_outer);
67+
const amrex::Real& a_cur, const int& do_move, const amrex::Real& radius_inner, const amrex::Real& radius_outer, int index);
6868

6969
#endif /* _DarkMatterParticleContainer_H_ */
7070

Exec/ParticleFilterTest/DarkMatterParticleContainer.cpp

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ struct ShellFilter
9292
const Box& domain)
9393
: m_plo(plo), m_phi(phi), m_center(center), m_radius_inner(radius_inner), m_radius_outer(radius_outer), m_z(z), m_t(t), m_dt(dt), m_domain(domain)
9494
{}
95-
#ifdef AMREX_USE_GPU
95+
#if 1
9696
//c_light is the constant for speed of light [cm/s]
9797
template <typename SrcData>
9898
AMREX_GPU_HOST_DEVICE
@@ -461,18 +461,21 @@ DarkMatterParticleContainer::moveKickDrift (amrex::MultiFab& acceleration,
461461

462462
int nc=AMREX_SPACEDIM;
463463
int num_output=0;
464-
amrex::ParallelFor(np,
465-
[=] AMREX_GPU_HOST_DEVICE ( long i)
466-
{
464+
for(int i=0;i<np;i++) {
465+
int index=0;
467466
store_dm_particle_single(pstruct[i],pstruct2[i],nc,
468467
accel,plo,phi,dxi,dt,a_old,
469-
a_half,do_move, radius_inner, radius_outer);
470-
});
471-
for(int i=0;i<np;i++) {
468+
a_half,do_move, radius_inner, radius_outer,index);
472469
const amrex::ParticleContainer<1+AMREX_SPACEDIM+6, 0>::SuperParticleType p = pstruct2[i];
473-
if(shell_filter_test(ptile.getConstParticleTileData(),i)) {
470+
int mask=shell_filter_test(ptile.getConstParticleTileData(),i);
471+
if(mask>0) {
472+
for(int j=0;j<mask;j++) {
473+
store_dm_particle_single(pstruct[i],pstruct2[i],nc,
474+
accel,plo,phi,dxi,dt,a_old,
475+
a_half,do_move, radius_inner, radius_outer,j);
474476
ptile_tmp.push_back(pstruct2[i]);
475477
num_output++;
478+
}
476479
}
477480
}
478481
// auto num_output = amrex::filterParticles(ptile_tmp, ptile, shell_filter_test);
@@ -706,7 +709,7 @@ void store_dm_particle_single (amrex::ParticleContainer<1+AMREX_SPACEDIM, 0>::Su
706709
amrex::GpuArray<amrex::Real,AMREX_SPACEDIM> const& phi,
707710
amrex::GpuArray<amrex::Real,AMREX_SPACEDIM> const& dxi,
708711
const amrex::Real& dt, const amrex::Real& a_prev,
709-
const amrex::Real& a_cur, const int& do_move, const Real& radius_inner, const Real& radius_outer)
712+
const amrex::Real& a_cur, const int& do_move, const Real& radius_inner, const Real& radius_outer, int index)
710713
{
711714
amrex::Real half_dt = 0.5 * dt;
712715
amrex::Real a_cur_inv = 1.0 / a_cur;
@@ -727,7 +730,7 @@ void store_dm_particle_single (amrex::ParticleContainer<1+AMREX_SPACEDIM, 0>::Su
727730

728731
Real xlen, ylen, zlen;
729732
//printf("Value is %d\n", maxind);
730-
733+
int local_index=0;
731734
for(int idir=-maxind[0];idir<=maxind[0];idir++)
732735
for(int jdir=-maxind[1];jdir<=maxind[1];jdir++)
733736
for(int kdir=-maxind[2];kdir<=maxind[2];kdir++)
@@ -737,8 +740,11 @@ void store_dm_particle_single (amrex::ParticleContainer<1+AMREX_SPACEDIM, 0>::Su
737740
zlen = p.pos(2)+(kdir)*(phi[2]-plo[2]) - center[2];
738741
Real mag = sqrt(xlen*xlen+ylen*ylen+zlen*zlen);
739742
result=result? true : (mag>radius_inner && mag<radius_outer);
740-
if((mag>radius_inner && mag<radius_outer)) {
741-
int comp=0;
743+
if(int(mag>radius_inner && mag<radius_outer))
744+
local_index++;
745+
746+
if(local_index==index) {
747+
int comp=0;
742748
p2.pos(comp) = p.pos(comp)+(idir)*(phi[comp]-plo[comp]);
743749
Real x1 = p2.pos(comp);
744750
Real vx = p.rdata(comp+1);
@@ -751,9 +757,9 @@ void store_dm_particle_single (amrex::ParticleContainer<1+AMREX_SPACEDIM, 0>::Su
751757
Real z1 = p2.pos(comp);
752758
Real vz = p.rdata(comp+1);
753759
// printf("%0.15g, %0.15g, %0.15g, %0.15g, %0.15g, %0.15g \n", x1, y1, z1, vx, vy, vz);
754-
}
760+
755761
// Print()<<xlen<<"\t"<<ylen<<"\t"<<zlen<<"\t"<<mag<<"\t"<<m_radius_inner<<"\t"<<m_radius_outer<<"\t"<<result<<std::endl;
756-
}
762+
757763
for (int comp=0; comp < nc; ++comp) {
758764
p2.rdata(comp+1+3)=p.pos(comp);
759765
p2.rdata(comp+1+3+3) = p.pos(comp) + dt_a_cur_inv * p.rdata(comp+1);
@@ -762,6 +768,9 @@ void store_dm_particle_single (amrex::ParticleContainer<1+AMREX_SPACEDIM, 0>::Su
762768
p2.id()=p.id();
763769
p2.cpu()=p.cpu();
764770
}
771+
return;
772+
}
773+
}
765774
}
766775

767776
}

0 commit comments

Comments
 (0)