Skip to content

Commit ea0a7ef

Browse files
author
contuandrea
committed
Fix diffusion for groups of particles
1 parent fce0150 commit ea0a7ef

File tree

2 files changed

+15
-13
lines changed

2 files changed

+15
-13
lines changed

include/deposits/deposit.h

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ namespace deposit{
3838
std::string _cached_path;
3939
RunningStateHost_t _cached_data;
4040
size_t _cached_nparticles;
41-
size_t cached_group;
41+
size_t _cached_group;
4242
double _cached_length;
4343

4444
std::string _path;
@@ -62,13 +62,13 @@ namespace deposit{
6262
//initialise
6363

6464
void init(singleconf& cf){
65-
this->init(std::get<std::string>(cf.get("path")), std::get<size_t>(cf.get("nparticles")),std::get<double>(cf.get("length"),,std::get<size_t>(cf.get("group")));
65+
this->init(std::get<std::string>(cf.get("path")), std::get<size_t>(cf.get("nparticles")),std::get<double>(cf.get("length")),std::get<size_t>(cf.get("group")));
6666
}
6767

6868
void init(std::string path, size_t nparticles, double length, size_t group=DEFAULT_GROUP){
6969
if(_path==DEFAULT_PATH){
7070
if(nparticles!=_cached_nparticles || length!=_cached_length || group!=_cached_group){
71-
_data = this->gendummy(nparticles,length);
71+
this->gendummy(nparticles,length,group);
7272
}
7373
else{
7474
_data.resize(_nparticles);
@@ -110,11 +110,10 @@ namespace deposit{
110110
hydra::Random<> Generator( std::chrono::system_clock::now().time_since_epoch().count());
111111
size_t np=(nparticles<=0) ? MAXPARTICLES : nparticles;
112112
if(np==1){
113-
auto data_d1=RunningStateHost_t(np,RunningTuple_t(std::copysign(1.,length),0.,0.,0., 0.,1.,0.,0.,0.,0.,0.,0.));
114-
return data_d1;
113+
_data=RunningStateHost_t(np,RunningTuple_t(std::copysign(1.,length),0.,0.,0., 0.,1.,0.,0.,0.,0.,0.,0.));
115114
}
116115
size_t halfsize=np/2;
117-
RunningStateHost_t data_d(halfsize*2);
116+
_data.resize(halfsize*2);
118117
auto data_de=RunningStateHost_t(halfsize,RunningTuple_t(-1.,0.,0.,0., 1.,0.,0.,0.,0.,0.,0.,0.));
119118
auto data_dh=RunningStateHost_t(halfsize,RunningTuple_t(1.,0.,0.,0., 1.,0.,0.,0.,0.,0.,0.,0.));
120119

@@ -127,17 +126,18 @@ namespace deposit{
127126
Generator.SetSeed(seed);
128127
Generator.Uniform(0., length, data_dh.begin(_tc_z), data_dh.end(_tc_z));
129128
}
130-
hydra::copy(data_de,hydra::make_range(data_d.begin(),data_d.begin()+halfsize));
131-
hydra::copy(data_dh,hydra::make_range(data_d.begin()+halfsize,data_d.end()));
129+
hydra::copy(data_de,hydra::make_range(_data.begin(),_data.begin()+halfsize));
130+
hydra::copy(data_dh,hydra::make_range(_data.begin()+halfsize,_data.end()));
131+
132132
}
133133

134134
//get deposit
135135
RunningStateHost_t getdata(){return _data;}
136136

137137
//get deposit and change if different
138-
void SendToDevice(RunningStateDev_t& todev, singleconf)
139-
140-
}
138+
// void SendToDevice(RunningStateDev_t& todev, singleconf)
139+
//
140+
// }
141141
};
142142
}
143143

include/simulation/Evolve.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,9 @@ namespace evolve{
226226
hydra::Vector3R wfvec(hydra::get<5>(entry8),hydra::get<6>(entry8),hydra::get<7>(entry8));
227227

228228
//calculate diffusion velocity
229-
double s = sqrt(2*(_fDiff*mobility)/_fStep)*hydra::get<_tc_gauss_x>(p);
229+
//
230+
//
231+
double s = sqrt(2*(_fDiff*mobility)/_fStep/fabs(hydra::get<_tc_charge>(p)))*hydra::get<_tc_gauss_x>(p); //divide by square root of group size
230232

231233
hydra::Vector3R ref(s*sin(hydra::get<_tc_angle_2>(p))*cos(hydra::get<_tc_angle_1>(p)),s*sin(hydra::get<_tc_angle_2>(p))*sin(hydra::get<_tc_angle_1>(p)),s*cos(hydra::get<_tc_angle_2>(p)));
232234

@@ -358,7 +360,7 @@ namespace evolve{
358360
auto wfvec = interpolITvec(vvec, _beginmap_wf, ind8);
359361

360362
//calculate diffusion velocity
361-
double s = sqrt(2*(_fDiff*mobility)/_fStep)*hydra::get<_tc_gauss_x>(p);
363+
double s = sqrt(2*(_fDiff*mobility)/_fStep/fabs(hydra::get<_tc_charge>(p)))*hydra::get<_tc_gauss_x>(p); //divide by square root of group size
362364

363365
hydra::Vector3R ref(s*sin(hydra::get<_tc_angle_2>(p))*cos(hydra::get<_tc_angle_1>(p)),s*sin(hydra::get<_tc_angle_2>(p))*sin(hydra::get<_tc_angle_1>(p)),s*cos(hydra::get<_tc_angle_2>(p)));
364366

0 commit comments

Comments
 (0)