|
#include <stdio.h> |
|
#include <stdlib.h> |
|
#include <time.h> |
|
#include <math.h> |
|
#include "atoms.h" |
|
#include "header.h" |
|
|
|
#define XMUL 2 |
|
#define YMUL 1 |
|
#define ZMUL 4 |
|
#define N 100 |
|
|
|
#define TEMP 350.0 |
|
|
|
const double sqrt2 = 1.4142135623730950488016887242097; |
|
const double sqrt3 = 1.7320508075688772935274463415059; |
|
const double kB = 1.380658E-23; |
|
const double RMo2 = (double)RAND_MAX / 2.0; |
|
|
|
int main() |
|
{ |
|
Headerinfo tempheader; |
|
Atom* allatoms; |
|
int currentatom; |
|
int numatoms; |
|
FILE* file; |
|
int i,j,k,l,n; |
|
double currentT; |
|
double vMul; |
|
double netmx,netmy,netmz; |
|
double a; |
|
|
|
file = fopen("infile.atm", "wb"); |
|
if(file == NULL) |
|
{ |
|
printf("Failed to open infile.atm for writing\n\n"); |
|
exit(6); |
|
} |
|
|
|
numatoms = (2+6*N)*XMUL*YMUL*ZMUL; |
|
|
|
allatoms = (Atom*)malloc(numatoms*sizeof(Atom)); |
|
if(allatoms == NULL) |
|
{ |
|
printf("unable to allocate memory for allatoms\n\n"); |
|
fclose(file); |
|
exit(5); |
|
} |
|
|
|
/*srand((unsigned int)time(NULL));*/ |
|
srand(2197); |
|
|
|
a = (elements[(enum AtomTypes)H].radius + elements[(enum AtomTypes)C].radius) * 2.0 / sqrt3; |
|
|
|
netmx = netmy = netmz = 0.0; |
|
currentT = 0.0; |
|
tempheader.iterations = 1000000; |
|
tempheader.mincutoff = 10.0 * a; |
|
tempheader.dt = 1.0E-15; |
|
tempheader.bigX = a + 6.4 * (double)XMUL * a + a*(double)N; |
|
tempheader.bigY = a + 8.4 * (double)YMUL * a + a*(double)N; |
|
tempheader.bigZ = a + 7.8 * (double)ZMUL * a + a*(double)(N/4); |
|
tempheader.T = TEMP; |
|
tempheader.desiredT = TEMP; |
|
tempheader.numatoms = numatoms; |
|
|
|
currentatom = 0; |
|
for(i=0; i<XMUL; i++) |
|
{ |
|
for(j=0; j<YMUL; j++) |
|
{ |
|
for(k=0; k<ZMUL; k++) |
|
{ |
|
allatoms[currentatom].type = C; |
|
allatoms[currentatom].x = 2.0 * a + 6.4 * (double)i * a; |
|
allatoms[currentatom].y = 2.0 * a + 8.4 * (double)j * a; |
|
allatoms[currentatom].z = 2.0 * a + 7.8 * (double)k * a + 0.25 * a * (double)(N/4); |
|
allatoms[currentatom].vx = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vy = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vz = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].ax = 0.0; |
|
allatoms[currentatom].ay = 0.0; |
|
allatoms[currentatom].az = 0.0; |
|
allatoms[currentatom].ndx = 0.0; |
|
allatoms[currentatom].ndy = 0.0; |
|
allatoms[currentatom].ndz = 0.0; |
|
allatoms[currentatom].potential = 0.0; |
|
allatoms[currentatom].newpotential = 0.0; |
|
for(l=0; l<NUMBONDS; l++) allatoms[currentatom].bonds[l] = 0; |
|
allatoms[currentatom].bonds[0] = 1; |
|
allatoms[currentatom].bonds[1] = 2; |
|
allatoms[currentatom].bonds[2] = 3; |
|
allatoms[currentatom].bonds[3] = 4; |
|
currentT += 0.5 * elements[allatoms[currentatom].type].mass * (allatoms[currentatom].vx*allatoms[currentatom].vx + allatoms[currentatom].vy*allatoms[currentatom].vy + allatoms[currentatom].vz*allatoms[currentatom].vz); |
|
netmx += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vx; |
|
netmy += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vy; |
|
netmz += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vz; |
|
currentatom++; |
|
|
|
allatoms[currentatom].type = H; |
|
allatoms[currentatom].x = 1.5 * a + 6.4 * (double)i * a; |
|
allatoms[currentatom].y = 1.5 * a + 8.4 * (double)j * a; |
|
allatoms[currentatom].z = 1.5 * a + 7.8 * (double)k * a + 0.25 * a * (double)(N/4); |
|
allatoms[currentatom].vx = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vy = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vz = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].ax = 0.0; |
|
allatoms[currentatom].ay = 0.0; |
|
allatoms[currentatom].az = 0.0; |
|
allatoms[currentatom].ndx = 0.0; |
|
allatoms[currentatom].ndy = 0.0; |
|
allatoms[currentatom].ndz = 0.0; |
|
allatoms[currentatom].potential = 0.0; |
|
allatoms[currentatom].newpotential = 0.0; |
|
for(l=0; l<NUMBONDS; l++) allatoms[currentatom].bonds[l] = 0; |
|
allatoms[currentatom].bonds[0] = -1; |
|
currentT += 0.5 * elements[allatoms[currentatom].type].mass * (allatoms[currentatom].vx*allatoms[currentatom].vx + allatoms[currentatom].vy*allatoms[currentatom].vy + allatoms[currentatom].vz*allatoms[currentatom].vz); |
|
netmx += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vx; |
|
netmy += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vy; |
|
netmz += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vz; |
|
currentatom++; |
|
|
|
allatoms[currentatom].type = H; |
|
allatoms[currentatom].x = 1.5 * a + 6.4 * (double)i * a; |
|
allatoms[currentatom].y = 2.5 * a + 8.4 * (double)j * a; |
|
allatoms[currentatom].z = 2.5 * a + 7.8 * (double)k * a + 0.25 * a * (double)(N/4); |
|
allatoms[currentatom].vx = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vy = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vz = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].ax = 0.0; |
|
allatoms[currentatom].ay = 0.0; |
|
allatoms[currentatom].az = 0.0; |
|
allatoms[currentatom].ndx = 0.0; |
|
allatoms[currentatom].ndy = 0.0; |
|
allatoms[currentatom].ndz = 0.0; |
|
allatoms[currentatom].potential = 0.0; |
|
allatoms[currentatom].newpotential = 0.0; |
|
for(l=0; l<NUMBONDS; l++) allatoms[currentatom].bonds[l] = 0; |
|
allatoms[currentatom].bonds[0] = -2; |
|
currentT += 0.5 * elements[allatoms[currentatom].type].mass * (allatoms[currentatom].vx*allatoms[currentatom].vx + allatoms[currentatom].vy*allatoms[currentatom].vy + allatoms[currentatom].vz*allatoms[currentatom].vz); |
|
netmx += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vx; |
|
netmy += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vy; |
|
netmz += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vz; |
|
currentatom++; |
|
|
|
allatoms[currentatom].type = H; |
|
allatoms[currentatom].x = 2.5 * a + 6.4 * (double)i * a; |
|
allatoms[currentatom].y = 1.5 * a + 8.4 * (double)j * a; |
|
allatoms[currentatom].z = 2.5 * a + 7.8 * (double)k * a + 0.25 * a * (double)(N/4); |
|
allatoms[currentatom].vx = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vy = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vz = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].ax = 0.0; |
|
allatoms[currentatom].ay = 0.0; |
|
allatoms[currentatom].az = 0.0; |
|
allatoms[currentatom].ndx = 0.0; |
|
allatoms[currentatom].ndy = 0.0; |
|
allatoms[currentatom].ndz = 0.0; |
|
allatoms[currentatom].potential = 0.0; |
|
allatoms[currentatom].newpotential = 0.0; |
|
for(l=0; l<NUMBONDS; l++) allatoms[currentatom].bonds[l] = 0; |
|
allatoms[currentatom].bonds[0] = -3; |
|
currentT += 0.5 * elements[allatoms[currentatom].type].mass * (allatoms[currentatom].vx*allatoms[currentatom].vx + allatoms[currentatom].vy*allatoms[currentatom].vy + allatoms[currentatom].vz*allatoms[currentatom].vz); |
|
netmx += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vx; |
|
netmy += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vy; |
|
netmz += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vz; |
|
currentatom++; |
|
|
|
for(n=0; n<N-1; n++) |
|
{ |
|
allatoms[currentatom].type = C; |
|
allatoms[currentatom].x = 2.5 * a + 6.4 * (double)i * a + a*n; |
|
allatoms[currentatom].y = 2.5 * a + 8.4 * (double)j * a + a*n; |
|
allatoms[currentatom].z = 1.5 * a + 7.8 * (double)k * a + 0.25 * a * (double)(N/4) + 0.00*a*n; |
|
allatoms[currentatom].vx = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vy = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vz = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].ax = 0.0; |
|
allatoms[currentatom].ay = 0.0; |
|
allatoms[currentatom].az = 0.0; |
|
allatoms[currentatom].ndx = 0.0; |
|
allatoms[currentatom].ndy = 0.0; |
|
allatoms[currentatom].ndz = 0.0; |
|
allatoms[currentatom].potential = 0.0; |
|
allatoms[currentatom].newpotential = 0.0; |
|
for(l=0; l<NUMBONDS; l++) allatoms[currentatom].bonds[l] = 0; |
|
allatoms[currentatom].bonds[0] = -4; |
|
allatoms[currentatom].bonds[1] = 1; |
|
allatoms[currentatom].bonds[2] = 2; |
|
allatoms[currentatom].bonds[3] = 3; |
|
currentT += 0.5 * elements[allatoms[currentatom].type].mass * (allatoms[currentatom].vx*allatoms[currentatom].vx + allatoms[currentatom].vy*allatoms[currentatom].vy + allatoms[currentatom].vz*allatoms[currentatom].vz); |
|
netmx += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vx; |
|
netmy += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vy; |
|
netmz += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vz; |
|
currentatom++; |
|
|
|
allatoms[currentatom].type = H; |
|
allatoms[currentatom].x = 2.0 * a + 6.4 * (double)i * a + a*n; |
|
allatoms[currentatom].y = 3.0 * a + 8.4 * (double)j * a + a*n; |
|
allatoms[currentatom].z = 1.0 * a + 7.8 * (double)k * a + 0.25 * a * (double)(N/4) + 0.00*a*n; |
|
allatoms[currentatom].vx = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vy = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vz = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].ax = 0.0; |
|
allatoms[currentatom].ay = 0.0; |
|
allatoms[currentatom].az = 0.0; |
|
allatoms[currentatom].ndx = 0.0; |
|
allatoms[currentatom].ndy = 0.0; |
|
allatoms[currentatom].ndz = 0.0; |
|
allatoms[currentatom].potential = 0.0; |
|
allatoms[currentatom].newpotential = 0.0; |
|
for(l=0; l<NUMBONDS; l++) allatoms[currentatom].bonds[l] = 0; |
|
allatoms[currentatom].bonds[0] = -1; |
|
currentT += 0.5 * elements[allatoms[currentatom].type].mass * (allatoms[currentatom].vx*allatoms[currentatom].vx + allatoms[currentatom].vy*allatoms[currentatom].vy + allatoms[currentatom].vz*allatoms[currentatom].vz); |
|
netmx += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vx; |
|
netmy += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vy; |
|
netmz += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vz; |
|
currentatom++; |
|
|
|
allatoms[currentatom].type = H; |
|
allatoms[currentatom].x = 3.0 * a + 6.4 * (double)i * a + a*n; |
|
allatoms[currentatom].y = 2.0 * a + 8.4 * (double)j * a + a*n; |
|
allatoms[currentatom].z = 1.0 * a + 7.8 * (double)k * a + 0.25 * a * (double)(N/4) + 0.00*a*n; |
|
allatoms[currentatom].vx = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vy = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vz = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].ax = 0.0; |
|
allatoms[currentatom].ay = 0.0; |
|
allatoms[currentatom].az = 0.0; |
|
allatoms[currentatom].ndx = 0.0; |
|
allatoms[currentatom].ndy = 0.0; |
|
allatoms[currentatom].ndz = 0.0; |
|
allatoms[currentatom].potential = 0.0; |
|
allatoms[currentatom].newpotential = 0.0; |
|
for(l=0; l<NUMBONDS; l++) allatoms[currentatom].bonds[l] = 0; |
|
allatoms[currentatom].bonds[0] = -2; |
|
currentT += 0.5 * elements[allatoms[currentatom].type].mass * (allatoms[currentatom].vx*allatoms[currentatom].vx + allatoms[currentatom].vy*allatoms[currentatom].vy + allatoms[currentatom].vz*allatoms[currentatom].vz); |
|
netmx += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vx; |
|
netmy += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vy; |
|
netmz += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vz; |
|
currentatom++; |
|
|
|
allatoms[currentatom].type = C; |
|
allatoms[currentatom].x = 2.0 * a + 6.4 * (double)i * a + a*(n+1); |
|
allatoms[currentatom].y = 2.0 * a + 8.4 * (double)j * a + a*(n+1); |
|
allatoms[currentatom].z = 2.0 * a + 7.8 * (double)k * a + 0.25 * a * (double)(N/4) + 0.00*a*n; |
|
allatoms[currentatom].vx = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vy = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vz = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].ax = 0.0; |
|
allatoms[currentatom].ay = 0.0; |
|
allatoms[currentatom].az = 0.0; |
|
allatoms[currentatom].ndx = 0.0; |
|
allatoms[currentatom].ndy = 0.0; |
|
allatoms[currentatom].ndz = 0.0; |
|
allatoms[currentatom].potential = 0.0; |
|
allatoms[currentatom].newpotential = 0.0; |
|
for(l=0; l<NUMBONDS; l++) allatoms[currentatom].bonds[l] = 0; |
|
allatoms[currentatom].bonds[0] = -3; |
|
allatoms[currentatom].bonds[1] = 1; |
|
allatoms[currentatom].bonds[2] = 2; |
|
allatoms[currentatom].bonds[3] = 3; |
|
currentT += 0.5 * elements[allatoms[currentatom].type].mass * (allatoms[currentatom].vx*allatoms[currentatom].vx + allatoms[currentatom].vy*allatoms[currentatom].vy + allatoms[currentatom].vz*allatoms[currentatom].vz); |
|
netmx += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vx; |
|
netmy += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vy; |
|
netmz += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vz; |
|
currentatom++; |
|
|
|
allatoms[currentatom].type = H; |
|
allatoms[currentatom].x = 1.5 * a + 6.4 * (double)i * a + a*(n+1); |
|
allatoms[currentatom].y = 2.5 * a + 8.4 * (double)j * a + a*(n+1); |
|
allatoms[currentatom].z = 2.5 * a + 7.8 * (double)k * a + 0.25 * a * (double)(N/4) + 0.00*a*n; |
|
allatoms[currentatom].vx = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vy = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vz = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].ax = 0.0; |
|
allatoms[currentatom].ay = 0.0; |
|
allatoms[currentatom].az = 0.0; |
|
allatoms[currentatom].ndx = 0.0; |
|
allatoms[currentatom].ndy = 0.0; |
|
allatoms[currentatom].ndz = 0.0; |
|
allatoms[currentatom].potential = 0.0; |
|
allatoms[currentatom].newpotential = 0.0; |
|
for(l=0; l<NUMBONDS; l++) allatoms[currentatom].bonds[l] = 0; |
|
allatoms[currentatom].bonds[0] = -1; |
|
currentT += 0.5 * elements[allatoms[currentatom].type].mass * (allatoms[currentatom].vx*allatoms[currentatom].vx + allatoms[currentatom].vy*allatoms[currentatom].vy + allatoms[currentatom].vz*allatoms[currentatom].vz); |
|
netmx += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vx; |
|
netmy += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vy; |
|
netmz += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vz; |
|
currentatom++; |
|
|
|
allatoms[currentatom].type = H; |
|
allatoms[currentatom].x = 2.5 * a + 6.4 * (double)i * a + a*(n+1); |
|
allatoms[currentatom].y = 1.5 * a + 8.4 * (double)j * a + a*(n+1); |
|
allatoms[currentatom].z = 2.5 * a + 7.8 * (double)k * a + 0.25 * a * (double)(N/4) + 0.00*a*n; |
|
allatoms[currentatom].vx = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vy = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vz = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].ax = 0.0; |
|
allatoms[currentatom].ay = 0.0; |
|
allatoms[currentatom].az = 0.0; |
|
allatoms[currentatom].ndx = 0.0; |
|
allatoms[currentatom].ndy = 0.0; |
|
allatoms[currentatom].ndz = 0.0; |
|
allatoms[currentatom].potential = 0.0; |
|
allatoms[currentatom].newpotential = 0.0; |
|
for(l=0; l<NUMBONDS; l++) allatoms[currentatom].bonds[l] = 0; |
|
allatoms[currentatom].bonds[0] = -2; |
|
currentT += 0.5 * elements[allatoms[currentatom].type].mass * (allatoms[currentatom].vx*allatoms[currentatom].vx + allatoms[currentatom].vy*allatoms[currentatom].vy + allatoms[currentatom].vz*allatoms[currentatom].vz); |
|
netmx += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vx; |
|
netmy += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vy; |
|
netmz += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vz; |
|
currentatom++; |
|
} |
|
|
|
allatoms[currentatom].type = C; |
|
allatoms[currentatom].x = 2.5 * a + 6.4 * (double)i * a + a*(N-1); |
|
allatoms[currentatom].y = 2.5 * a + 8.4 * (double)j * a + a*(N-1); |
|
allatoms[currentatom].z = 1.5 * a + 7.8 * (double)k * a + 0.25 * a * (double)(N/4) + 0.00*a*(N-1); |
|
allatoms[currentatom].vx = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vy = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vz = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].ax = 0.0; |
|
allatoms[currentatom].ay = 0.0; |
|
allatoms[currentatom].az = 0.0; |
|
allatoms[currentatom].ndx = 0.0; |
|
allatoms[currentatom].ndy = 0.0; |
|
allatoms[currentatom].ndz = 0.0; |
|
allatoms[currentatom].potential = 0.0; |
|
allatoms[currentatom].newpotential = 0.0; |
|
for(l=0; l<NUMBONDS; l++) allatoms[currentatom].bonds[l] = 0; |
|
allatoms[currentatom].bonds[0] = -4; |
|
allatoms[currentatom].bonds[1] = 1; |
|
allatoms[currentatom].bonds[2] = 2; |
|
allatoms[currentatom].bonds[3] = 3; |
|
currentT += 0.5 * elements[allatoms[currentatom].type].mass * (allatoms[currentatom].vx*allatoms[currentatom].vx + allatoms[currentatom].vy*allatoms[currentatom].vy + allatoms[currentatom].vz*allatoms[currentatom].vz); |
|
netmx += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vx; |
|
netmy += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vy; |
|
netmz += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vz; |
|
currentatom++; |
|
|
|
allatoms[currentatom].type = H; |
|
allatoms[currentatom].x = 2.0 * a + 6.4 * (double)i * a + a*(N-1); |
|
allatoms[currentatom].y = 3.0 * a + 8.4 * (double)j * a + a*(N-1); |
|
allatoms[currentatom].z = 1.0 * a + 7.8 * (double)k * a + 0.25 * a * (double)(N/4) + 0.00*a*(N-1); |
|
allatoms[currentatom].vx = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vy = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vz = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].ax = 0.0; |
|
allatoms[currentatom].ay = 0.0; |
|
allatoms[currentatom].az = 0.0; |
|
allatoms[currentatom].ndx = 0.0; |
|
allatoms[currentatom].ndy = 0.0; |
|
allatoms[currentatom].ndz = 0.0; |
|
allatoms[currentatom].potential = 0.0; |
|
allatoms[currentatom].newpotential = 0.0; |
|
for(l=0; l<NUMBONDS; l++) allatoms[currentatom].bonds[l] = 0; |
|
allatoms[currentatom].bonds[0] = -1; |
|
currentT += 0.5 * elements[allatoms[currentatom].type].mass * (allatoms[currentatom].vx*allatoms[currentatom].vx + allatoms[currentatom].vy*allatoms[currentatom].vy + allatoms[currentatom].vz*allatoms[currentatom].vz); |
|
netmx += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vx; |
|
netmy += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vy; |
|
netmz += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vz; |
|
currentatom++; |
|
|
|
allatoms[currentatom].type = H; |
|
allatoms[currentatom].x = 3.0 * a + 6.4 * (double)i * a + a*(N-1); |
|
allatoms[currentatom].y = 2.0 * a + 8.4 * (double)j * a + a*(N-1); |
|
allatoms[currentatom].z = 1.0 * a + 7.8 * (double)k * a + 0.25 * a * (double)(N/4) + 0.00*a*(N-1); |
|
allatoms[currentatom].vx = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vy = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vz = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].ax = 0.0; |
|
allatoms[currentatom].ay = 0.0; |
|
allatoms[currentatom].az = 0.0; |
|
allatoms[currentatom].ndx = 0.0; |
|
allatoms[currentatom].ndy = 0.0; |
|
allatoms[currentatom].ndz = 0.0; |
|
allatoms[currentatom].potential = 0.0; |
|
allatoms[currentatom].newpotential = 0.0; |
|
for(l=0; l<NUMBONDS; l++) allatoms[currentatom].bonds[l] = 0; |
|
allatoms[currentatom].bonds[0] = -2; |
|
currentT += 0.5 * elements[allatoms[currentatom].type].mass * (allatoms[currentatom].vx*allatoms[currentatom].vx + allatoms[currentatom].vy*allatoms[currentatom].vy + allatoms[currentatom].vz*allatoms[currentatom].vz); |
|
netmx += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vx; |
|
netmy += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vy; |
|
netmz += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vz; |
|
currentatom++; |
|
|
|
allatoms[currentatom].type = H; |
|
allatoms[currentatom].x = 3.0 * a + 6.4 * (double)i * a + a*(N-1); |
|
allatoms[currentatom].y = 3.0 * a + 8.4 * (double)j * a + a*(N-1); |
|
allatoms[currentatom].z = 2.0 * a + 7.8 * (double)k * a + 0.25 * a * (double)(N/4) + 0.00*a*(N-1); |
|
allatoms[currentatom].vx = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vy = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].vz = ((double)rand()-RMo2)/RMo2; |
|
allatoms[currentatom].ax = 0.0; |
|
allatoms[currentatom].ay = 0.0; |
|
allatoms[currentatom].az = 0.0; |
|
allatoms[currentatom].ndx = 0.0; |
|
allatoms[currentatom].ndy = 0.0; |
|
allatoms[currentatom].ndz = 0.0; |
|
allatoms[currentatom].potential = 0.0; |
|
allatoms[currentatom].newpotential = 0.0; |
|
for(l=0; l<NUMBONDS; l++) allatoms[currentatom].bonds[l] = 0; |
|
allatoms[currentatom].bonds[0] = -3; |
|
currentT += 0.5 * elements[allatoms[currentatom].type].mass * (allatoms[currentatom].vx*allatoms[currentatom].vx + allatoms[currentatom].vy*allatoms[currentatom].vy + allatoms[currentatom].vz*allatoms[currentatom].vz); |
|
netmx += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vx; |
|
netmy += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vy; |
|
netmz += elements[allatoms[currentatom].type].mass * allatoms[currentatom].vz; |
|
currentatom++; |
|
} |
|
} |
|
} |
|
|
|
currentT /= (double)numatoms; |
|
currentT /= 1.5 * kB; |
|
|
|
netmx /= (double)numatoms; |
|
netmy /= (double)numatoms; |
|
netmz /= (double)numatoms; |
|
|
|
vMul = sqrt(TEMP/currentT); |
|
|
|
for(i=0; i<numatoms; i++) |
|
{ |
|
while(allatoms[i].x > tempheader.bigX) allatoms[i].x -= tempheader.bigX; |
|
while(allatoms[i].x < 0.0) allatoms[i].x += tempheader.bigX; |
|
while(allatoms[i].y > tempheader.bigY) allatoms[i].y -= tempheader.bigY; |
|
while(allatoms[i].y < 0.0) allatoms[i].y += tempheader.bigY; |
|
while(allatoms[i].z > tempheader.bigZ) allatoms[i].z -= tempheader.bigZ; |
|
while(allatoms[i].z < 0.0) allatoms[i].z += tempheader.bigZ; |
|
|
|
allatoms[i].vx = (allatoms[i].vx - netmx/elements[allatoms[i].type].mass) * vMul; |
|
allatoms[i].vy = (allatoms[i].vy - netmy/elements[allatoms[i].type].mass) * vMul; |
|
allatoms[i].vz = (allatoms[i].vz - netmz/elements[allatoms[i].type].mass) * vMul; |
|
} |
|
|
|
fwrite(&tempheader, sizeof(Headerinfo), 1, file); |
|
fwrite(allatoms, sizeof(Atom), numatoms, file); |
|
|
|
free(allatoms); |
|
fclose(file); |
|
|
|
return 1; |
|
} |