-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconfiguration.h
168 lines (141 loc) · 4.35 KB
/
configuration.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#pragma once
#include <string>
#include <omp.h>
#include <vector>
#include <string>
// Global parameters of simulations -> define iterations and steps
struct SimulationParameters
{
double expTime = 1e-12;
double simulationTime = 3e-3;
unsigned int iterationsbetweenSavings = 15'000'000;
unsigned int iterationsbetweenTrapsUpdate = 15'000'000;
unsigned int totalsavings = int((simulationTime / expTime) / iterationsbetweenSavings);
unsigned int randomsPeriter = 4;
std::size_t buffsize = 15'000'000 * randomsPeriter;
unsigned int stepsperbuffer = static_cast<unsigned int>(std::floor(buffsize / randomsPeriter));
unsigned int savingsPerMacrostep = stepsperbuffer / iterationsbetweenSavings;
unsigned int macrostepMax = totalsavings / savingsPerMacrostep;
unsigned int trapsUpdateTest = iterationsbetweenTrapsUpdate / iterationsbetweenSavings;
unsigned short rndThreads = 4;
};
// Classes for objects that store simulation configs: LoggerParameters, ModelParameters, InitialConditions
struct LoggerParameters
{
//enum class FilenameTemplate { PrefixName };
//FilenameTemplate filenametemplate;
std::string filepath;
std::string name;
};
struct ModelParameters
{
/////
//Global paramters
std::string name = "";
double T; //temperature
double kT;
//Parameters of potential
double G, G2; // (* kT | Depth of the potential *)
double L; //(* um | period of the periodic potential *)
double sigma; //(* um | width of the binding well *)
double A; // width of asymmetric potential, um
double m; // center of well, um
//Parameters of diffusion
double DMol; //(* um^2/s | free diffusion coefficient of the protein in water *)
double DBeadL; // (* um^2/s | free diffusion coefficient of 0.5 um bead in water *)
double DBeadR;
double DMT;
double gammaMol; //(* pN s/um | friction drag coefficient for protein *)
double gammaBeadL; //(* pN s/um | friction drag coefficient for 0.5 um bead *)
double gammaBeadR;
double gammaMT; //(* pN s/um | friction drag coefficient for 0.5 um for MT *)
double gammaQuasiviscous;
// Parameters of stiffness
double trapstiffL; //(* pN/um | stiffness of the trap *)
double trapstiffR;
double MTstiffWeakSlopeL;
double MTstiffWeakBoundaryL;
double MTstiffParabolicAL;
double MTstiffParabolicBL;
double MTstiffParabolicCL;
double MTstiffStrongBoundaryL;
double MTstiffStrongSlopeL;
double MTstiffStrongIntersectL;
double MTstiffWeakSlopeR;
double MTstiffWeakBoundaryR;
double MTstiffParabolicAR;
double MTstiffParabolicBR;
double MTstiffParabolicCR;
double MTstiffStrongBoundaryR;
double MTstiffStrongSlopeR;
double MTstiffStrongIntersectR;
double molStiffWeakSlope;
double molStiffBoundary;
double molStiffStrongSlope;
double MTlength;
double molstiff; //(*pN / um| stiffness of the NDC80 *)
double feedbackFreq;
double DmblMoveAmplitude;
double prestretchTotalForce;
double movementTotalForce;
double rotFriction;
double rotStiffness;
double molLength;
double domainsDistance;
double rotWellWidth;
double rotWellDepth;
double iniPhi;
int numStates = 2;
double kOn1, kOff1;
// double kOn2, kOff2;
double** transitionMatrix;
bool bindingDynamics = true;
double B = 0.0;
};
struct SystemState
{
double xMol;
double xMT;
double xBeadl;
double xBeadr;
double xTrapl;
double xTrapr;
double Time = 0.0;
double direction = 1.0;
double logpotentialForce;
double binding = 0.0;
double currentWell = 0.0;
double phi = 0.0;
double potTorque = 0.0;
double deltaG = 0.0;
//#pragma omp declare simd
template <typename F>
static void iterateFields(F&& f) {
f(&SystemState::xMol, "xMol");
f(&SystemState::xMT, "xMT");
f(&SystemState::xBeadl, "xBeadl");
f(&SystemState::xBeadr, "xBeadr");
f(&SystemState::xTrapl, "xTrapl");
f(&SystemState::xTrapr, "xTrapr");
f(&SystemState::Time, "Time");
f(&SystemState::direction, "direction");
f(&SystemState::logpotentialForce, "logpotentialForce");
f(&SystemState::binding, "binding");
f(&SystemState::phi, "phi");
f(&SystemState::potTorque, "potTorque");
f(&SystemState::deltaG, "deltaG");
}
};
struct InitialConditions
{
SystemState initialState;
};
// Composition of parameters
struct Configuration
{
SimulationParameters simulationParameters;
LoggerParameters loggerParameters;
ModelParameters modelParameters;
InitialConditions initialConditions;
SystemState currentState;
};