Lemina
A molecular dynamics package for network, granular material and point particles with a range of interaction potential.
 
Loading...
Searching...
No Matches
main.c
Go to the documentation of this file.
1#include<stdio.h>
2#include<string.h>
3#include<stdlib.h>
4#include <stdbool.h>
5#include <time.h>
6//#include <mpi.h> //For future parallel version
7#define DEFINE_GLOBALS
8#include "global.h"
9#include "ComputeBondForce.h"
10#include "ComputePairForce.h"
11
12
13char *prefix = NULL; // Definition of prefix
14void Init();
15void SetupJob();
17void Trajectory();
18void DumpState();
21void EvalProps();
22void AccumProps(int icode);
23void PrintSummary();
24void PrintVrms();
25void VelocityVerletStep(int icode);
26void ApplyForce();
28void PrintStress();
29void Close();
30void PrintMomentum();
31void DisplaceAtoms();
32void DumpRestart();
33bool HaltConditionCheck(double value);
34void EvalCom();
35void PrintCom();
36void EvalVrms();
37void EvalUnwrap();
38void DumpBonds();
39void DumpPairs();
41void PrintForceSum();
42
43int main(int argc, char **argv) {
44 time_t t1 = 0, t2;
45 if (argc < 2) {
46 fprintf(stderr, "Usage: %s <output_prefix>\n", argv[0]);
47 return 1;
48 }
49
50 int prefix_size = snprintf(NULL, 0, "../output/%s", argv[1]) + 1; // +1 for the null terminator
51 prefix = malloc(prefix_size);
52 if(prefix == NULL) {
53 fprintf(stderr, "Memory allocation failed\n");
54 return 1;
55 }
56
57 // Write the formatted string into the allocated space
58 snprintf(prefix, prefix_size, "../output/%s", argv[1]);
59 sprintf(result, "%s.result", prefix);
60 fpresult = fopen(result, "w");
61 sprintf(xyz, "%s.xyz", prefix);
62 fpxyz = fopen(xyz, "w");
63 sprintf(vrms, "%s.vrms", prefix);
64 fpvrms = fopen(vrms, "w");
65 sprintf(bond, "%s.bond", prefix);
66 fpbond = fopen(bond, "w");
67 sprintf(com, "%s.com", prefix);
68 fpcom = fopen(com, "w");
69 sprintf(pair, "%s.pair", prefix);
70 fppair = fopen(pair, "w");
71 sprintf(force, "%s.force", prefix);
72 fpforce = fopen(force, "w");
73
74 /* //Uncomment the following as per your acquirement
75 sprintf(dnsty, "%s.curr-dnsty", prefix);
76 fpdnsty = fopen(dnsty, "w");
77 sprintf(visc, "%s.viscosity", prefix);
78 fpvisc = fopen(visc, "w");
79 sprintf(rdf, "%s.rdf", prefix);
80 fprdf = fopen(rdf, "w");
81 sprintf(stress, "%s.stress", prefix);
82 fpstress = fopen(stress, "w");
83 sprintf(momentum, "%s.momentum", prefix);
84 fpmomentum = fopen(momentum, "w");
85 */
86
87 Init();
88 SetupJob();
89 t1 = time(NULL);
90 moreCycles = 1;
91 if(stepCount >= 0) {
92 if (timeNow == 0.0) {
93 printf(">>> Run type: Fresh simulation <<<\n");
97 ApplyForce();
98 } else {
99 printf(">>> Run type: Restart simulation <<<\n");
100 }
101 DumpBonds();
102 DumpPairs();
103 Trajectory();
104 EvalUnwrap();
106 EvalProps();
107 EvalVrms();
108 EvalCom();
109 PrintVrms();
110 PrintCom();
111 PrintSummary();
113 }
114
115//Here starts the main loop of the program
116 while(moreCycles){
117 if(stepLimit == 0){
118 printf("Error occured: stepLimit must be > 0\n");
119 printf("Exiting now ...\n");
120 exit(0);
121 }
122
123 stepCount ++;
124 timeNow += deltaT ; //stepCount * deltaT; //for adaptive step size: timeNow += deltaT
125
127 EvalUnwrap();
131 ApplyForce();
134 EvalProps();
135 EvalVrms();
136 EvalCom();
137 if(stepCount % stepAvg == 0){
138 PrintSummary();
139 PrintVrms();
140 PrintCom();
142 }
143 if(stepCount % stepTraj == 0){
144 Trajectory();
145 DumpBonds();
146 DumpPairs();
147 }
148 if(stepCount % stepDump == 0){
149 DumpRestart(); // Save the current state for input
150 DumpState(); // Save the current state for config
152 }
154 DumpRestart(); // Save the current state for input
155 DumpState(); // Save the current state for config
157 break; // Exit the loop when the halt condition is met
158 }
159
160 moreCycles ++;
161 if(moreCycles >= stepLimit)
162 moreCycles = 0;
163 }
164
165
166 t2 = time(NULL);
167 fprintf(fpresult, "#Execution time %lf secs\n", difftime(t2,t1));
168 fprintf(fpresult, "#Execution speed %lf steps per secs\n", stepLimit/difftime(t2,t1));
169 printf(">>> Simulation run completed <<<\n");
170 printf(">>> Execution time %lf secs <<<\n", difftime(t2,t1));
171 printf(">>> Execution speed %lf steps per secs <<< \n", stepLimit/difftime(t2,t1));
172
173 fclose(fpresult);
174 fclose(fpxyz);
175 fclose(fpvrms);
176 fclose(fpbond);
177 fclose(fppair);
178 fclose(fpcom);
179 fclose(fpforce);
180
181/*//Uncomment the following as per your acquirement
182 fclose(fpdnsty);
183 fclose(fpvisc);
184 fclose(fprdf);
185 fclose(fpstress);
186 fclose(fpmomentum);
187*/
188
189 free(prefix);
190 Close();
191 return 0;
192}
void ComputeBondForce()
void ComputePairForce(int normFlag)
int moreCycles
Definition global.h:24
FILE * fpxyz
int stepTraj
Definition global.h:24
double VRootMeanSqr
Definition global.h:46
char vrms[256]
char pair[256]
int stepLimit
Definition global.h:24
char xyz[256]
FILE * fpforce
FILE * fpresult
double deltaT
Definition global.h:20
char com[256]
FILE * fpbond
int stepAvg
Definition global.h:24
char force[256]
FILE * fpvrms
FILE * fpcom
char result[250]
FILE * fppair
double timeNow
Definition global.h:20
int stepCount
Definition global.h:24
char bond[256]
char * prefix
Definition main.c:13
int stepDump
Definition global.h:24
void Trajectory()
Definition Trajectory.c:25
void PrintStress()
Definition PrintStress.c:25
void EvalUnwrap()
Definition EvalUnwrap.c:27
void Init()
Definition Init.c:31
void VelocityVerletStep(int icode)
void EvalProps()
Definition EvalProps.c:26
void EvalVrms()
Definition EvalVrms.c:27
void PrintForceSum()
int main(int argc, char **argv)
Definition main.c:43
void DisplaceAtoms()
void AccumProps(int icode)
Definition AccumProps.c:25
void ComputeForcesCells()
void ApplyBoundaryCond()
void WriteBinaryRestart()
void DumpState()
Definition DumpState.c:25
void EvalCom()
Definition EvalCom.c:27
void Close()
Definition Close.c:25
void DumpPairs()
Definition DumpPairs.c:25
void PrintSummary()
void PrintMomentum()
void SetupJob()
Definition SetupJob.c:27
void DumpBonds()
Definition DumpBonds.c:24
void DumpRestart()
Definition DumpRestart.c:25
void PrintCom()
Definition PrintCom.c:28
void EvalSpacetimeCorr()
void ApplyForce()
Definition ApplyForce.c:25
void PrintVrms()
Definition PrintVrms.c:27
bool HaltConditionCheck(double value)
Definition Halt.c:27
void ApplyLeesEdwardsBoundaryCond()