From 4d4dd9d1209a02c6fee2c1df29a6a76d80f889c6 Mon Sep 17 00:00:00 2001
From: Pietro Incardona <incardon@mpi-cbg.de>
Date: Sat, 14 Apr 2018 22:41:46 +0200
Subject: [PATCH] Adding missing file

---
 example/Vector/3_molecular_dynamic/config.cfg |   2 +-
 .../3_molecular_dynamic/main_expr_paper.cpp   | 107 ++++++++++++++++++
 2 files changed, 108 insertions(+), 1 deletion(-)
 create mode 100644 example/Vector/3_molecular_dynamic/main_expr_paper.cpp

diff --git a/example/Vector/3_molecular_dynamic/config.cfg b/example/Vector/3_molecular_dynamic/config.cfg
index affb9522..5853db22 100644
--- a/example/Vector/3_molecular_dynamic/config.cfg
+++ b/example/Vector/3_molecular_dynamic/config.cfg
@@ -1,2 +1,2 @@
 [pack]
-files = main.cpp main_expr.cpp main_vl.cpp Makefile
+files = main.cpp main_expr.cpp main_expr_paper.cpp main_vl.cpp Makefile
diff --git a/example/Vector/3_molecular_dynamic/main_expr_paper.cpp b/example/Vector/3_molecular_dynamic/main_expr_paper.cpp
new file mode 100644
index 00000000..cfe7b19e
--- /dev/null
+++ b/example/Vector/3_molecular_dynamic/main_expr_paper.cpp
@@ -0,0 +1,107 @@
+#include "Vector/vector_dist.hpp"
+#include "Plot/GoogleChart.hpp"
+#include "Operators/Vector/vector_dist_operators.hpp"
+#include "timer.hpp"
+
+
+void Init_grid(size_t (& sz)[3],
+					 vector_dist<3,double, aggregate<Point<3,double>,Point<3,double>> > & particles)
+{
+	auto it = particles.getGridIterator(sz);
+
+	while (it.isNext())
+	{
+		particles.add();
+
+		auto key = it.get();
+
+		particles.getLastPos()[0] = key.get(0) * it.getSpacing(0);
+		particles.getLastPos()[1] = key.get(1) * it.getSpacing(1);
+		particles.getLastPos()[2] = key.get(2) * it.getSpacing(2);
+
+		++it;
+	}
+}
+
+double sigma12;
+double sigma6;
+double r_cut2;
+
+constexpr int velocity_prop = 0;
+constexpr int force_prop = 1;
+
+///// Define lennard_jones interaction to be used in applyKernel_in_sim
+DEFINE_INTERACTION_3D(ln_force)
+	Point<3,double> r = xp - xq;
+	double rn = norm2(r);
+
+	if (rn > r_cut2)	return 0.0;
+
+	return 24.0*(2.0 * sigma12 / (rn*rn*rn*rn*rn*rn*rn) -  sigma6 / (rn*rn*rn*rn)) * r;
+END_INTERACTION
+
+int main(int argc, char* argv[])
+{
+	///// Initialize the library /////
+	openfpm_init(&argc,&argv);
+
+	///// Initialize constants and initial configuration /////
+	double dt = 0.0005, sigma = 0.1, r_cut = 3.0*sigma;
+	sigma6 = pow(sigma,6), sigma12 = pow(sigma,12);
+	double rc2 = r_cut * r_cut;
+
+	///// Define initialization grid, simulation box, periodicity
+	///// and ghost
+	size_t sz[3] = {10,10,10};
+	Box<3,float> box({0.0,0.0,0.0},{1.0,1.0,1.0});
+	size_t bc[3]={PERIODIC,PERIODIC,PERIODIC};
+	Ghost<3,float> ghost(r_cut);
+
+	///// Lennard_jones potential object used in applyKernel_in
+	ln_force lennard_jones;
+
+	////// Define particle and initialize on a grid
+	////// the value 0 mean we start with 0 particles, Init_grid
+	////// create them
+	vector_dist<3,double, aggregate<Point<3,double>,Point<3,double>> > particles(0,box,bc,ghost);
+	Init_grid(sz,particles);
+
+	// Take aliases for the particle force, velocity and position
+	// we use them to write math expressions
+	auto force = getV<force_prop>(particles);
+	auto velocity = getV<velocity_prop>(particles);
+	auto position = getV<PROP_POS>(particles);
+
+	// set the velocity to zero (a math expression)
+	velocity = 0;
+
+	///// Get the cell-list and calculate the force using lennard_jones
+	///// potential
+	auto NN = particles.getCellListSym(r_cut);
+	force = applyKernel_in_sim(particles,NN,lennard_jones);
+
+	// Molecula Dynamic time stepping
+	for (size_t i = 0; i < 10000 ; i++)
+	{
+		// 1-step Verlet velocity
+		// v(t + 1/2*dt) = v(t) + 1/2*force(t)*dt
+		// x(t + dt) = x(t) + v(t + 1/2*dt)
+		velocity = velocity + 0.5*dt*force;
+		position = position + velocity*dt;
+
+		// redistribute particles and fill ghost
+		particles.map();
+		particles.ghost_get<>();
+
+		// Calculate the force at t + dt
+		particles.updateCellListSym(NN);
+		force = applyKernel_in_sim(particles,NN,lennard_jones);
+
+		// 2-step Verlet velocity
+		// v(t+dt) = v(t + 1/2*dt) + 1/2*force(t+dt)*dt
+		velocity = velocity + 0.5*dt*force;
+	}
+
+	openfpm_finalize();
+}
+
-- 
GitLab