SlowDown Algorithmic Regularization (SDAR)
Algorithmic Regularization with slowdown method for integrating few-body motions
|
Go to the documentation of this file.
18 fwrite(
this,
sizeof(*
this),1,_fp);
25 size_t rcount = fread(
this,
sizeof(*
this),1,_fin);
27 std::cerr<<
"Error: Data reading fails! requiring data number is 1, only obtain "<<rcount<<
".\n";
38 Binary::printColumnTitle(_fout, _width);
48 Binary::printColumn(_fout, _width);
71 template <
class Tparticle>
89 template <
class Tparticle,
class Tpcm>
132 return 0.19634954084*sqrt(_G*_bin.semi/(_bin.m1+_bin.m2))*(_bin.m1*_bin.m2);
137 return 0.0245436926*sqrt(-_G*_bin.semi/(_bin.m1+_bin.m2))*(_bin.m1*_bin.m2);
142 Float nest_sd = _nest_sd_up * _bin.slowdown.getSlowDownFactor();
144 Float pert_ratio = (_bin.slowdown.pert_out>0&&_bin.slowdown.pert_in>0)? _bin.slowdown.pert_in/_bin.slowdown.pert_out: 1.0;
146 Float scale_factor = std::min(
Float(1.0),pow(1e-1*pert_ratio,1.0/
Float(_intergrator_order)));
147 for (
int k=0; k<2; k++) {
153 if (_bin.m1>0&&_bin.m2>0) {
157 Float ebin_sd = _G*(_bin.m1*_bin.m2)/(2*_bin.semi*nest_sd);
158 ASSERT(dsi>0&&ebin_sd>0);
159 Float ds_over_ebin = dsi*scale_factor/ebin_sd;
160 if (ds_over_ebin<_ds_over_ebin_min_bin) {
161 _ds_over_ebin_min_bin = ds_over_ebin;
162 _ds_min_bin = dsi*scale_factor;
170 _ds_min_hyp = std::min(dsi, _ds_min_hyp);
183 calcDsMinKeplerIter(ds_over_ebin_min, ds_min_bin, ds_min_hyp, etot_sd, _G, 1.0, _bin, _int_order);
186 return _ds_scale*std::min(ds_min_bin,ds_min_hyp);
203 const int n_particle = bin_root.getMemberN();
230 const int n_particle = _particles.
getSize();
231 ASSERT(n_particle>1);
233 int particle_index_local[n_particle];
234 int particle_index_unused[n_particle];
235 int n_particle_real = 0;
236 int n_particle_unused=0;
237 for (
int i=0; i<n_particle; i++) {
238 if (_particles[i].mass>0.0) particle_index_local[n_particle_real++] = i;
239 else particle_index_unused[n_particle_unused++] = i;
241 if (n_particle_real>1)
245 if (n_particle_real==0) {
246 binarytree[0].setMembers(&(_particles[0]), &(_particles[1]), 0, 1);
250 for (
int i=2; i<n_particle; i++) {
257 else if (n_particle_real==1) {
258 int i1 = particle_index_local[0];
259 int i2 = particle_index_unused[0];
260 binarytree[0].setMembers(&(_particles[i1]), &(_particles[i2]), i1 ,i2);
270 for (
int i=1; i<n_particle_unused; i++) {
271 int k = particle_index_unused[i];
285 for (
int i=0; i<n_particle_unused; i++) {
286 int ilast = n_particle_real-1+i;
287 ASSERT(ilast<n_particle-1);
288 int k = particle_index_unused[i];
309 bool return_flag=
true;
312 for (
int i=0; i<2; i++) {
317 for (
int i=0; i<2; i++) {
319 auto pair_id = p[1-i]->id;
320 return_flag = return_flag & (p[i]->getBinaryPairID()==pair_id);
321 if (_reset_flag) p[i]->setBinaryPairID(0);
322 else p[i]->setBinaryPairID(pair_id);
325 if (p[0]->
id<p[1]->
id) _bin.id = p[0]->id;
326 else _bin.id = p[1]->id;
348 _fout<<std::setw(_width)<<
"ds";
349 _fout<<std::setw(_width)<<
"Time_offset";
350 _fout<<std::setw(_width)<<
"r_break_crit";
359 _fout<<std::setw(_width)<<
ds;
368 fwrite(&
ds,
sizeof(
int),1,_fout);
378 size_t rcount = fread(&
ds,
sizeof(
int),1,_fin);
380 std::cerr<<
"Error: Data reading fails! requiring data number is 1, only obtain "<<rcount<<
".\n";
385 std::cerr<<
"Error: Data reading fails! requiring data number is 1, only obtain "<<rcount<<
".\n";
390 std::cerr<<
"Error: Data reading fails! requiring data number is 1, only obtain "<<rcount<<
".\n";
395 std::cerr<<
"Error: Data reading fails! requiring data number is 1, only obtain "<<rcount<<
".\n";
Tparticle * getDataAddress() const
return member data array address
Definition: list.h:170
void readBinary(FILE *_fin)
read class data to file with binary format
Definition: information.h:24
void writeBinary(FILE *_fp) const
write class data to file with binary format
Definition: information.h:17
void printColumn(std::ostream &_fout, const int _width=20)
print data of class members using column style
Definition: information.h:47
Algorithmic regularization (time transformed explicit symplectic integrator) namespace.
Definition: force.h:5
const Float NUMERIC_FLOAT_MAX
Definition: Float.h:29
Binary parameter class.
Definition: binary_tree.h:12
static void printColumnTitle(std::ostream &_fout, const int _width=20)
print titles of class members using column style
Definition: slow_down.h:193
Tptcl * getLeftMember() const
get left member
Definition: binary_tree.h:963
SlowDown slowdown
Definition: information.h:11
static void generateBinaryTree(BinaryTreeLocal _bins[], int _ptcl_list[], const int _n, Tptcl *_ptcl, const Float _G)
Generate kepler binary tree for a group of particles.
Definition: binary_tree.h:666
Particle group class to store and manage a group of particle.
Definition: particle_group.h:13
int getSize() const
get current member number
Definition: list.h:151
double Float
Definition: Float.h:25
bool isMemberTree(const size_t i) const
Definition: binary_tree.h:957
static void printColumnTitle(std::ostream &_fout, const int _width=20)
print titles of class members using column style
Definition: information.h:37
BinaryTreeLocal * getMemberAsTree(const size_t i) const
get member as tree
Definition: binary_tree.h:946
Tptcl * getRightMember() const
get right member
Definition: binary_tree.h:973
FixStepOption
Fix step options for integration with adjusted step (not for time sychronizatio phase)
Definition: information.h:79
list class to store and manage a group of member
Definition: list.h:19
binary parameter with slowdown
Definition: information.h:9
Binary tree cell.
Definition: binary_tree.h:492
Float stab_check_time
Definition: information.h:12
Slow-down parameter control class.
Definition: slow_down.h:11
void printColumn(std::ostream &_fout, const int _width=20)
print data of class members using column style
Definition: slow_down.h:204