moved stuff into function to remove a for loop
This commit is contained in:
parent
763c84739f
commit
1b0a9ab380
5 changed files with 524 additions and 539 deletions
|
@ -4,3 +4,4 @@ TabWidth: 4
|
|||
UseTab: Always
|
||||
BreakBeforeBraces: Attach
|
||||
ColumnLimit: 100
|
||||
AlignReturnType: Always
|
||||
|
|
2
Makefile
2
Makefile
|
@ -6,7 +6,7 @@ ts := $(shell /usr/bin/date "+%d-%m__%H_%M_%S")
|
|||
.DEFAULT_GOAL = MD
|
||||
|
||||
MD: $(SRC)/MD.cpp
|
||||
$(CC) $(CFLAGS) $(SRC)MD.cpp -lm -march=native -mavx -O2 -ftree-vectorize -funroll-loops -pg -g -o ./out/MD
|
||||
$(CC) $(CFLAGS) $(SRC)MD.cpp -lm -march=native -O2 -ftree-vectorize -funroll-loops -pg -g -o ./out/MD
|
||||
|
||||
MDorig: $(SRC)/MD-original.cpp
|
||||
$(CC) $(CFLAGS) $(SRC)MD-original.cpp -lm -O2 -pg -o ./out/MD-original
|
||||
|
|
BIN
out/MD
BIN
out/MD
Binary file not shown.
File diff suppressed because it is too large
Load diff
65
src/MD.cpp
65
src/MD.cpp
|
@ -25,6 +25,7 @@
|
|||
|
||||
*/
|
||||
|
||||
#include <emmintrin.h>
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -475,22 +476,26 @@ double Kinetic() { // Write Function here!
|
|||
return kin;
|
||||
}
|
||||
|
||||
// void
|
||||
// transposeMatrix (double mat[MAXPART][3], double matT[3][MAXPART]) {
|
||||
// for (int i = 0; i < 3; i++) {
|
||||
// for (int j = 0; j < MAXPART; j++) {
|
||||
// matT[i][j] = mat[j][i];
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
void transposeMatrix(double mat[MAXPART][3], double matT[3][MAXPART]) {
|
||||
for (int i = 0; i < 3; i++) {
|
||||
for (int j = 0; j < MAXPART; j++) {
|
||||
matT[i][j] = mat[j][i];
|
||||
}
|
||||
}
|
||||
}
|
||||
void transposeMatrix2(double matT[MAXPART][3], double mat[3][MAXPART]) {
|
||||
for (int i = 0; i < MAXPART; i++) {
|
||||
for (int j = 0; j < 3; j++) {
|
||||
matT[i][j] = mat[j][i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
double PotentialAndAcceleration() {
|
||||
double PotentialAndAcceleration(double dt) {
|
||||
memset(a, 0, sizeof(a));
|
||||
double Pot = 0.;
|
||||
// double rT[3][MAXPART];
|
||||
// transposeMatrix (r, rT);
|
||||
|
||||
for (int i = 0; i < N - 1; i++) {
|
||||
for (int i = 0; i < N; i++) {
|
||||
for (int j = i + 1; j < N; j++) {
|
||||
double quot, rnorm, term1, term2;
|
||||
// CALCULATE POTENTIAL ENERGY
|
||||
|
@ -504,23 +509,24 @@ double PotentialAndAcceleration() {
|
|||
// ACCEL
|
||||
posItoJ[k] = distTmp;
|
||||
}
|
||||
|
||||
quot = sigma * sigma / dist;
|
||||
term2 = quot * quot * quot;
|
||||
Pot += epsilon_8 * term2 * (term2 - 1);
|
||||
|
||||
// From derivative of Lennard-Jones with sigma and epsilon
|
||||
// set equal to 1 in natural units!
|
||||
double distSqd = dist * dist;
|
||||
double rSqd_inv4 = 1.0 / (distSqd * distSqd);
|
||||
double rSqd_inv7 = rSqd_inv4 / (distSqd * dist);
|
||||
double f = 48.0 * rSqd_inv7 - 24 * rSqd_inv4;
|
||||
double distSqd = dist * dist * dist;
|
||||
double rSqd_inv7 = distSqd * distSqd * dist;
|
||||
double f = (48. - (24. * distSqd)) / rSqd_inv7;
|
||||
// from F = ma, where m = 1 in natural units!
|
||||
for (int k = 0; k < 3; k++) {
|
||||
double tmp = posItoJ[k] * f;
|
||||
a[i][k] += tmp;
|
||||
a[j][k] -= tmp;
|
||||
}
|
||||
|
||||
quot = sigma * sigma / dist;
|
||||
term2 = quot * quot * quot;
|
||||
Pot += epsilon_8 * term2 * (term2 - 1.);
|
||||
}
|
||||
for (int j = 0; j < 3; j++) {
|
||||
v[i][j] += 0.5 * a[i][j] * dt;
|
||||
}
|
||||
}
|
||||
return Pot;
|
||||
|
@ -603,21 +609,22 @@ double VelocityVerlet(double dt, int iter, double *PE, FILE *fp) {
|
|||
// printf(" Updated Positions!\n");
|
||||
for (i = 0; i < N; i++) {
|
||||
for (j = 0; j < 3; j++) {
|
||||
r[i][j] += v[i][j] * dt + 0.5 * a[i][j] * dt * dt;
|
||||
double tmp = 0.5 * a[i][j] * dt;
|
||||
r[i][j] += v[i][j] * dt + tmp * dt;
|
||||
|
||||
v[i][j] += 0.5 * a[i][j] * dt;
|
||||
v[i][j] += tmp;
|
||||
}
|
||||
// printf(" %i %6.4e %6.4e %6.4e\n",i,r[i][0],r[i][1],r[i][2]);
|
||||
}
|
||||
// Update accellerations from updated positions
|
||||
// computeAccelerations ();
|
||||
*PE = PotentialAndAcceleration();
|
||||
*PE = PotentialAndAcceleration(dt);
|
||||
// Update velocity with updated acceleration
|
||||
for (i = 0; i < N; i++) {
|
||||
for (j = 0; j < 3; j++) {
|
||||
v[i][j] += 0.5 * a[i][j] * dt;
|
||||
}
|
||||
}
|
||||
// for (i = 0; i < N; i++) {
|
||||
// for (j = 0; j < 3; j++) {
|
||||
// v[i][j] += 0.5 * a[i][j] * dt;
|
||||
// }
|
||||
//}
|
||||
|
||||
// Elastic walls
|
||||
for (i = 0; i < N; i++) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue