1#include "Vector/vector_dist.hpp"
2#include "Plot/GoogleChart.hpp"
3#include "Operators/Vector/vector_dist_operators.hpp"
6constexpr int velocity = 0;
7constexpr int force = 1;
11 double sigma12,sigma6,r_cut2,
shift;
13 ln_potential(
double sigma12_,
double sigma6_,
double r_cut2_,
double shift_) {sigma12 = sigma12_; sigma6 = sigma6_; r_cut2 = r_cut2_;
shift = shift_;}
17 double rn = norm2(xp - xq);
18 if (rn >= r_cut2)
return 0.0;
28 double sigma12,sigma6,r_cut2;
30 ln_force(
double sigma12_,
double sigma6_,
double r_cut2_) {sigma12 = sigma12_; sigma6 = sigma6_;r_cut2 = r_cut2_;}
37 if (rn > r_cut2)
return 0.0;
39 return 24.0*(2.0 * sigma12 / (rn*rn*rn*rn*rn*rn*rn) - sigma6 / (rn*rn*rn*rn)) * r;
43int main(
int argc,
char* argv[])
45 double dt = 0.0005, sigma = 0.1, r_cut = 3.0*sigma;
47 double sigma6 = pow(sigma,6), sigma12 = pow(sigma,12);
48 double rc2 = r_cut * r_cut;
49 double shift = 2.0 * ( sigma12 / (rc2*rc2*rc2*rc2*rc2*rc2) - sigma6 / ( rc2*rc2*rc2) );
55 openfpm_init(&argc,&argv);
58 size_t sz[3] = {10,10,10};
60 size_t bc[3]={PERIODIC,PERIODIC,PERIODIC};
63 ln_force lf(sigma12,sigma6,r_cut*r_cut);
68 auto v_force = getV<force>(vd);
69 auto v_velocity = getV<velocity>(vd);
70 auto v_pos = getV<PROP_POS>(vd);
72 auto it = vd.getGridIterator(sz);
80 vd.getLastPos()[0] = key.get(0) * it.getSpacing(0);
81 vd.getLastPos()[1] = key.get(1) * it.getSpacing(1);
82 vd.getLastPos()[2] = key.get(2) * it.getSpacing(2);
93 auto NN = vd.getCellList(r_cut);
95 vd.updateCellList(NN);
96 v_force = applyKernel_in_sim(vd,NN,lf);
97 unsigned long int f = 0;
100 for (
size_t i = 0; i < 10000 ; i++)
102 assign(v_velocity, v_velocity + 0.5*dt*v_force,
103 v_pos, v_pos + v_velocity*dt);
106 vd.template ghost_get<>();
109 vd.updateCellList(NN);
110 v_force = applyKernel_in_sim(vd,NN,lf);
112 v_velocity = v_velocity + 0.5*dt*v_force;
117 vd.write_frame(
"particles_",f);
120 vd.updateCellList(NN);
121 Point<2,double> E = rsum(applyKernel_in_sim(vd,NN,lp) + (v_velocity * v_velocity)/2.0).get();
131 std::cout <<
"Energy Total: " << E.
get(0) <<
" Kinetic: " << E.
get(1) <<
" Potential: " << E.
get(0) - E.
get(1) << std::endl;
138 std::cout <<
"Time: " << tsim.
getwct() << std::endl;
141 options.
title = std::string(
"Energy with time");
142 options.
yAxis = std::string(
"Energy");
143 options.
xAxis = std::string(
"iteration");
148 cg.
write(
"gc_plot2_out.html");
This class represent an N-dimensional box.
Small class to produce graph with Google chart in HTML.
void write(std::string file)
It write the graphs on file in html format using Google charts.
void AddLinesGraph(openfpm::vector< X > &x, openfpm::vector< Y > &y, const GCoptions &opt)
Add a simple lines graph.
This class implement the point shape in an N-dimensional space.
__device__ __host__ const T & get(unsigned int i) const
Get coordinate.
void execute()
Execute all the requests.
void sum(T &num)
Sum the numbers across all processors and get the result.
size_t getProcessUnitID()
Get the process unit id.
Implementation of VCluster class.
Implementation of 1-D std::vector like structure.
Class for cpu time benchmarking.
void stop()
Stop the timer.
void start()
Start the timer.
double getwct()
Return the elapsed real time.
std::string xAxis
X axis name.
size_t lineWidth
Width of the line.
std::string title
Title of the chart.
std::string yAxis
Y axis name.