本文整理汇总了C++中System::acceleration方法的典型用法代码示例。如果您正苦于以下问题:C++ System::acceleration方法的具体用法?C++ System::acceleration怎么用?C++ System::acceleration使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System
的用法示例。
在下文中一共展示了System::acceleration方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
void
SolveStep::verlet(double delta_t,
int objectNumber,
Object &mainbody,
System &newSystem,
double addtime,
std::string dimension)
{
int i = objectNumber;
System tempSystem = newSystem;
Object &tempBody = tempSystem.objectlist[i];
tempBody.setPosition(mainbody.getPosition()+mainbody.getVelocity()*delta_t +
mainbody.getAcceleration()*delta_t*delta_t*0.5); //pos_i+1
tempSystem.acceleration(tempBody, i, addtime,dimension);
tempBody.setVelocity(mainbody.getVelocity() + 0.5*
(mainbody.getAcceleration()+
tempBody.getAcceleration())*delta_t); //vel_i+1
mainbody.setPosition(tempBody.getPosition());
mainbody.setVelocity(tempBody.getVelocity());
mysolarsystem_.acceleration(mainbody, i, addtime,dimension);
}
示例2: energy
int
SolveStep::solve(double timestep,
double time,
std::string name,
std::string method,
std::string dimension)
{
/* Solves given system with given parametres using
* given method
* timestep: size of timestep
* time: total simulation time
* name: name of files where the position of the
* particles are saved at some timesteps
* method: verlet or RK4
* dimension: ly or AU
*
* Ditterent timers have not been used at the
* same time.*/
clock_t start, finish;
Distance d;
//declaration and intialisation
omp_set_num_threads(8); //parallelisation
double limit = 60; //definition of bound system
arma::Col<double> center(3), position(3);
center.zeros();
double t = 0.;
System newsystem = mysolarsystem_;
int n = time/timestep;
//file to store energy of the system
std::ofstream energy("energy.m");
energy << "A = [";
//file to store energy of the bound system
std::ofstream bound("BoundEnergy.m");
bound << "A = [";
//update the objects initial acceleration
for (int i = 0 ; i < size() ; ++i)
{
Object &mainbody = newsystem.objectlist[i];
newsystem.acceleration(mainbody, i, 0.0,dimension);
}
// start = clock(); //start timer
//start simulation
for (int k = 0 ; k < n ; ++k)
{
t += timestep;
//file to store position of particles
name.append("t");
std::string filename = name;
filename.append(".m");
std::ofstream fout(filename.c_str());
fout << "t = " << t << "\n A = [";
//variable needed for calculating intermediate steps
double addtime = 0.0;
//simulate all particles for one timestep
#pragma omp parallel for private(i)
for (int i = 0 ; i < size() ; ++i)
{
Object &mainbody = newsystem.objectlist[i];
System tempSystem = mysolarsystem_;
double dt = timestep;
int j = 0;
double maxTimestep;
//chose the smallest timestep
if (mainbody.maxTimestep() < tempSystem.maxTimestep(i))
{
maxTimestep = mainbody.maxTimestep();
}
else
{
maxTimestep = tempSystem.maxTimestep(i);
}
//make sure to use small endough timesteps
while(dt > maxTimestep)
{
dt = dt/2.0;
j += 1;
}
//simulate timesteps
for (int kk = 0 ; kk < std::pow(2,j); ++kk)
{
if (method == "rk4")
{
start = clock(); //start timer
rk4Step(dt, i, mainbody, tempSystem, addtime, dimension);
finish = clock(); //stop timer
//.........这里部分代码省略.........