-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
112 lines (107 loc) · 5.46 KB
/
README
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
NAME
MDevolve: Integrator framework for Molecular Dynamic evolutions
DESCRIPTION
To use:
1. Create individual integrators from update procedures,
using one of the `newIntegratorPair`.
2. Compose integrators using `mk...`.
3. Start the integration with `evolve`.
4. Finish the integration with `finish`.
SYNOPSIS
const mdevolveVersion*:int = 1
type
Integrator* = ref object
ParIntegrator* = ref object
nonZeroStep*:float
nonZeroStepWarn*:float
Integrators* = ref object
func `$`*(x:Integrator):string
func `$`*(x:ParIntegrator):string
proc steps*(x:Integrator):int
proc steps*(x:ParIntegrator):int
proc `steps=`*(x:Integrator, n:int)
proc `steps=`*(x:ParIntegrator, n:int)
proc forceGradient*(x:Integrator):Integrator
proc `forceGradient=`*(x:Integrator, G:Integrator)
proc `[]`*(xs:Integrators, n:int):Integrator
template newIntegratorPair*(f,g:proc(t:float)):(Integrator,Integrator)
template newIntegratorPair*(f:proc(ts:openarray[float]),g:proc(t:float)):(Integrators,Integrator)
template newIntegratorPair*(f:proc(t:float),g:proc(ts:openarray[float])):(Integrator,Integrators)
template newIntegratorPair*(f:proc(ts:openarray[float]),g:proc(ts:openarray[float])):(Integrators,Integrators)
template newIntegratorPair*(f:proc(ts,ss:openarray[float]),g:proc(t:float)):(Integrators,Integrator)
template newIntegratorPair*(f:proc(t:float),g:proc(ts,ss:openarray[float])):(Integrator,Integrators)
macro newIntegratorPair*(fs:tuple, g:proc(t:float)):auto
macro newIntegratorPair*(f:proc(t:float), gs:tuple):auto
macro newIntegratorPair*(fs:tuple, gs:tuple):auto
proc newSerialEvolution*(id:string, mds:seq[tuple[i:Integrator,f:float]], steps:int, order:int):Integrator
proc add*(r:ParIntegrator, xs:varargs[Integrator])
proc newParallelEvolution*(xs:varargs[Integrator]):ParIntegrator
proc evolve*(x:Integrator, t:float)
proc evolve*(x:ParIntegrator, t:float)
proc finish*(x:Integrator)
proc finish*(x:ParIntegrator)
proc approximateFGcoeff*(cv,cg:float):tuple[tf:float,tg:float]
proc approximateFGcoeff2*(cv,cg:float, b = 0.2):tuple[tf:array[2,float],tg:array[2,float]]
proc mkLeapFrog*(T,V:Integrator, steps = 1):Integrator
proc mkOmelyan2MN*(T,V:Integrator, steps = 1,
lambda = 0.1931833275037836):Integrator
proc mkSW92*(T,V:Integrator, steps = 1):Integrator
proc mkOmelyan4MN4FP*(T,V:Integrator, steps = 1,
rho = 0.1786178958448091,
theta = -0.06626458266981843,
lambda = 0.7123418310626056):Integrator
proc mkOmelyan4MN5FV*(T,V:Integrator, steps = 1,
rho = 0.2539785108410595,
theta = -0.03230286765269967,
vartheta = 0.08398315262876693,
lambda = 0.6822365335719091):Integrator
proc mkOmelyan4MN5FP*(T,V:Integrator, steps = 1,
rho = 0.2750081212332419,
theta = -0.1347950099106792,
vartheta= -0.08442961950707149,
lambda = 0.3549000571574260):Integrator
proc mkOmelyan6MN7FV*(T,V:Integrator, steps = 1):Integrator
proc mkOmelyan4MN2F2GV*(T,V:Integrator, steps = 1,
xi = -17.0/18000.0):Integrator
proc mkOmelyan4MN2F1GV*(T,V:Integrator, steps = 1):Integrator
proc mkOmelyan4MN3F3GP*(T,V:Integrator, steps = 1,
lambda = 0.2825633404177051,
chi = 0.003035236056708454):Integrator
proc mkOmelyan4MN3F2GP*(T,V:Integrator, steps = 1,
lambda = 0.3152315246820299):Integrator
proc mkOmelyan4MN3F1GP*(T,V:Integrator, steps = 1,
lambda = 0.2470939580390842):Integrator
proc mkOmelyan4MN3F3GV*(T,V:Integrator, steps = 1,
theta = 0.2728983001988755,
chi = 0.002960781208329478):Integrator
proc mkOmelyan4MN3F2GV*(T,V:Integrator, steps = 1,
theta = 0.2813980611667719):Integrator
proc mkOmelyan4MN3F1GV*(T,V:Integrator, steps = 1,
theta = 0.2409202729169543):Integrator
proc mkOmelyan4MN4F2GVG*(T,V:Integrator, steps = 1):Integrator
proc mkOmelyan4MN4F2GV*(T,V:Integrator, steps = 1):Integrator
proc mkOmelyan4MN5F2GV*(T,V:Integrator, steps = 1):Integrator
proc mkOmelyan4MN5F1GV*(T,V:Integrator, steps = 1):Integrator
proc mkOmelyan4MN5F2GP*(T,V:Integrator, steps = 1):Integrator
proc mkOmelyan4MN5F1GP*(T,V:Integrator, steps = 1):Integrator
proc mkOmelyan6MN5F5GV*(T,V:Integrator, steps = 1):Integrator
proc mkOmelyan6MN5F4GV*(T,V:Integrator, steps = 1):Integrator
proc mkOmelyan6MN5F5GP*(T,V:Integrator, steps = 1):Integrator
proc mkOmelyan6MN5F3GP*(T,V:Integrator, steps = 1):Integrator
proc mkOmelyan8S11F11GP*(T,V:Integrator, steps = 1):Integrator
proc mkCreutzGocksch*(S:Integrator, steps = 1):Integrator
proc mkOmelyan8CK4P4*(S4:Integrator, steps = 1):Integrator
proc mkOmelyan10CK4P7*(S4:Integrator, steps = 1):Integrator
proc mkOmelyan12CK4P12*(S4:Integrator, steps = 1):Integrator
proc mkOmelyan10CK6P4*(S6:Integrator, steps = 1):Integrator
proc mkOmelyan12CK6P7*(S6:Integrator, steps = 1):Integrator
EXAMPLES
See tests.
LICENSE
This work is licensed under the MIT license. See file
LICENSE for details.
SEE ALSO
Creutz and Gocksch, https://doi.org/10.1103/PhysRevLett.63.9
Omelyan, Mryglod, and Folk, https://doi.org/10.1103/PhysRevE.66.026701
Omelyan, Mryglod, and Folk, https://doi.org/10.1016/S0010-4655(02)00754-3
Yin and Mawhinney, https://doi.org/10.22323/1.139.0051