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
|
UseTab: Always
|
||||||
BreakBeforeBraces: Attach
|
BreakBeforeBraces: Attach
|
||||||
ColumnLimit: 100
|
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
|
.DEFAULT_GOAL = MD
|
||||||
|
|
||||||
MD: $(SRC)/MD.cpp
|
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
|
MDorig: $(SRC)/MD-original.cpp
|
||||||
$(CC) $(CFLAGS) $(SRC)MD-original.cpp -lm -O2 -pg -o ./out/MD-original
|
$(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 <math.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
@ -475,22 +476,26 @@ double Kinetic() { // Write Function here!
|
||||||
return kin;
|
return kin;
|
||||||
}
|
}
|
||||||
|
|
||||||
// void
|
void transposeMatrix(double mat[MAXPART][3], double matT[3][MAXPART]) {
|
||||||
// transposeMatrix (double mat[MAXPART][3], double matT[3][MAXPART]) {
|
for (int i = 0; i < 3; i++) {
|
||||||
// for (int i = 0; i < 3; i++) {
|
for (int j = 0; j < MAXPART; j++) {
|
||||||
// for (int j = 0; j < MAXPART; j++) {
|
matT[i][j] = mat[j][i];
|
||||||
// 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));
|
memset(a, 0, sizeof(a));
|
||||||
double Pot = 0.;
|
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++) {
|
for (int j = i + 1; j < N; j++) {
|
||||||
double quot, rnorm, term1, term2;
|
double quot, rnorm, term1, term2;
|
||||||
// CALCULATE POTENTIAL ENERGY
|
// CALCULATE POTENTIAL ENERGY
|
||||||
|
|
@ -504,23 +509,24 @@ double PotentialAndAcceleration() {
|
||||||
// ACCEL
|
// ACCEL
|
||||||
posItoJ[k] = distTmp;
|
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
|
// From derivative of Lennard-Jones with sigma and epsilon
|
||||||
// set equal to 1 in natural units!
|
// set equal to 1 in natural units!
|
||||||
double distSqd = dist * dist;
|
double distSqd = dist * dist * dist;
|
||||||
double rSqd_inv4 = 1.0 / (distSqd * distSqd);
|
double rSqd_inv7 = distSqd * distSqd * dist;
|
||||||
double rSqd_inv7 = rSqd_inv4 / (distSqd * dist);
|
double f = (48. - (24. * distSqd)) / rSqd_inv7;
|
||||||
double f = 48.0 * rSqd_inv7 - 24 * rSqd_inv4;
|
|
||||||
// from F = ma, where m = 1 in natural units!
|
// from F = ma, where m = 1 in natural units!
|
||||||
for (int k = 0; k < 3; k++) {
|
for (int k = 0; k < 3; k++) {
|
||||||
double tmp = posItoJ[k] * f;
|
double tmp = posItoJ[k] * f;
|
||||||
a[i][k] += tmp;
|
a[i][k] += tmp;
|
||||||
a[j][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;
|
return Pot;
|
||||||
|
|
@ -603,21 +609,22 @@ double VelocityVerlet(double dt, int iter, double *PE, FILE *fp) {
|
||||||
// printf(" Updated Positions!\n");
|
// printf(" Updated Positions!\n");
|
||||||
for (i = 0; i < N; i++) {
|
for (i = 0; i < N; i++) {
|
||||||
for (j = 0; j < 3; j++) {
|
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]);
|
// printf(" %i %6.4e %6.4e %6.4e\n",i,r[i][0],r[i][1],r[i][2]);
|
||||||
}
|
}
|
||||||
// Update accellerations from updated positions
|
// Update accellerations from updated positions
|
||||||
// computeAccelerations ();
|
// computeAccelerations ();
|
||||||
*PE = PotentialAndAcceleration();
|
*PE = PotentialAndAcceleration(dt);
|
||||||
// Update velocity with updated acceleration
|
// Update velocity with updated acceleration
|
||||||
for (i = 0; i < N; i++) {
|
// for (i = 0; i < N; i++) {
|
||||||
for (j = 0; j < 3; j++) {
|
// for (j = 0; j < 3; j++) {
|
||||||
v[i][j] += 0.5 * a[i][j] * dt;
|
// v[i][j] += 0.5 * a[i][j] * dt;
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
|
||||||
// Elastic walls
|
// Elastic walls
|
||||||
for (i = 0; i < N; i++) {
|
for (i = 0; i < N; i++) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue