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
13
char
*
prefix
= NULL;
// Definition of prefix
14
void
Init
();
15
void
SetupJob
();
16
void
EvalSpacetimeCorr
();
17
void
Trajectory
();
18
void
DumpState
();
19
void
ComputeForcesCells
();
20
void
ApplyBoundaryCond
();
21
void
EvalProps
();
22
void
AccumProps
(
int
icode);
23
void
PrintSummary
();
24
void
PrintVrms
();
25
void
VelocityVerletStep
(
int
icode);
26
void
ApplyForce
();
27
void
ApplyLeesEdwardsBoundaryCond
();
28
void
PrintStress
();
29
void
Close
();
30
void
PrintMomentum
();
31
void
DisplaceAtoms
();
32
void
DumpRestart
();
33
bool
HaltConditionCheck
(
double
value);
34
void
EvalCom
();
35
void
PrintCom
();
36
void
EvalVrms
();
37
void
EvalUnwrap
();
38
void
DumpBonds
();
39
void
DumpPairs
();
40
void
WriteBinaryRestart
();
41
void
PrintForceSum
();
42
43
int
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"
);
94
DisplaceAtoms
();
95
ComputePairForce
(1);
96
ComputeBondForce
();
97
ApplyForce
();
98
}
else
{
99
printf(
">>> Run type: Restart simulation <<<\n"
);
100
}
101
DumpBonds
();
102
DumpPairs
();
103
Trajectory
();
104
EvalUnwrap
();
105
ApplyBoundaryCond
();
106
EvalProps
();
107
EvalVrms
();
108
EvalCom
();
109
PrintVrms
();
110
PrintCom
();
111
PrintSummary
();
112
PrintForceSum
();
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
126
VelocityVerletStep
(1);
127
EvalUnwrap
();
128
ApplyBoundaryCond
();
129
ComputePairForce
(1);
130
ComputeBondForce
();
131
ApplyForce
();
132
VelocityVerletStep
(2);
133
ApplyBoundaryCond
();
134
EvalProps
();
135
EvalVrms
();
136
EvalCom
();
137
if
(
stepCount
%
stepAvg
== 0){
138
PrintSummary
();
139
PrintVrms
();
140
PrintCom
();
141
PrintForceSum
();
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
151
WriteBinaryRestart
();
152
}
153
if
(
HaltConditionCheck
(
VRootMeanSqr
)) {
154
DumpRestart
();
// Save the current state for input
155
DumpState
();
// Save the current state for config
156
WriteBinaryRestart
();
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
}
ComputeBondForce
void ComputeBondForce()
Definition
ComputeBondForce.c:28
ComputeBondForce.h
ComputePairForce
void ComputePairForce(int normFlag)
Definition
ComputePairForce.c:27
ComputePairForce.h
global.h
moreCycles
int moreCycles
Definition
global.h:24
fpxyz
FILE * fpxyz
stepTraj
int stepTraj
Definition
global.h:24
VRootMeanSqr
double VRootMeanSqr
Definition
global.h:46
vrms
char vrms[256]
pair
char pair[256]
stepLimit
int stepLimit
Definition
global.h:24
xyz
char xyz[256]
fpforce
FILE * fpforce
fpresult
FILE * fpresult
deltaT
double deltaT
Definition
global.h:20
com
char com[256]
fpbond
FILE * fpbond
stepAvg
int stepAvg
Definition
global.h:24
force
char force[256]
fpvrms
FILE * fpvrms
fpcom
FILE * fpcom
result
char result[250]
fppair
FILE * fppair
timeNow
double timeNow
Definition
global.h:20
stepCount
int stepCount
Definition
global.h:24
bond
char bond[256]
prefix
char * prefix
Definition
main.c:13
stepDump
int stepDump
Definition
global.h:24
Trajectory
void Trajectory()
Definition
Trajectory.c:25
PrintStress
void PrintStress()
Definition
PrintStress.c:25
EvalUnwrap
void EvalUnwrap()
Definition
EvalUnwrap.c:27
Init
void Init()
Definition
Init.c:31
VelocityVerletStep
void VelocityVerletStep(int icode)
Definition
VelocityVerletStep.c:26
EvalProps
void EvalProps()
Definition
EvalProps.c:26
EvalVrms
void EvalVrms()
Definition
EvalVrms.c:27
PrintForceSum
void PrintForceSum()
Definition
PrintForceSum.c:28
main
int main(int argc, char **argv)
Definition
main.c:43
DisplaceAtoms
void DisplaceAtoms()
Definition
DisplaceAtoms.c:25
AccumProps
void AccumProps(int icode)
Definition
AccumProps.c:25
ComputeForcesCells
void ComputeForcesCells()
Definition
ComputeForcesCells.c:25
ApplyBoundaryCond
void ApplyBoundaryCond()
Definition
ApplyBoundaryCond.c:27
WriteBinaryRestart
void WriteBinaryRestart()
Definition
WriteRestartBinary.c:60
DumpState
void DumpState()
Definition
DumpState.c:25
EvalCom
void EvalCom()
Definition
EvalCom.c:27
Close
void Close()
Definition
Close.c:25
DumpPairs
void DumpPairs()
Definition
DumpPairs.c:25
PrintSummary
void PrintSummary()
Definition
PrintSummary.c:25
PrintMomentum
void PrintMomentum()
Definition
PrintMomentum.c:25
SetupJob
void SetupJob()
Definition
SetupJob.c:27
DumpBonds
void DumpBonds()
Definition
DumpBonds.c:24
DumpRestart
void DumpRestart()
Definition
DumpRestart.c:25
PrintCom
void PrintCom()
Definition
PrintCom.c:28
EvalSpacetimeCorr
void EvalSpacetimeCorr()
Definition
EvalSpacetimeCorr.c:26
ApplyForce
void ApplyForce()
Definition
ApplyForce.c:25
PrintVrms
void PrintVrms()
Definition
PrintVrms.c:27
HaltConditionCheck
bool HaltConditionCheck(double value)
Definition
Halt.c:27
ApplyLeesEdwardsBoundaryCond
void ApplyLeesEdwardsBoundaryCond()
Definition
ApplyLeesEdwardsBoundaryCond.c:25
source
main.c
Generated by
1.13.2