Skip to content

Commit 1ff4c6b

Browse files
committed
Get rid of extraneous abstract types
1 parent 85586c9 commit 1ff4c6b

File tree

1 file changed

+59
-59
lines changed

1 file changed

+59
-59
lines changed

src/nbody_to_ode.jl

Lines changed: 59 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ function gather_bodies_initial_coordinates(simulation::NBodySimulation)
22
system = simulation.system
33
bodies = system.bodies;
44
len = n = length(bodies)
5-
5+
66
if simulation.thermostat isa NoseHooverThermostat
77
len +=1
88
end
@@ -11,9 +11,9 @@ function gather_bodies_initial_coordinates(simulation::NBodySimulation)
1111
v0 = zeros(3, len)
1212

1313
for i = 1:n
14-
u0[:, i] = bodies[i].r
14+
u0[:, i] = bodies[i].r
1515
v0[:, i] = bodies[i].v
16-
end
16+
end
1717

1818
(u0, v0, n)
1919
end
@@ -23,7 +23,7 @@ function gather_bodies_initial_coordinates(simulation::NBodySimulation{<:WaterSP
2323
molecules = system.bodies;
2424
n = length(molecules)
2525
len = 3*n
26-
26+
2727
if simulation.thermostat isa NoseHooverThermostat
2828
len = 3*n+1
2929
end
@@ -42,13 +42,13 @@ function gather_atom_coordinates(system::WaterSPCFw{<:MassBody}, len)
4242
for i = 1:n
4343
p = system.scpfw_parameters
4444
indO, indH1, indH2 = 3 * (i - 1) + 1, 3 * (i - 1) + 2, 3 * (i - 1) + 3
45-
u0[:, indO] = molecules[i].r
45+
u0[:, indO] = molecules[i].r
4646
u0[:, indH1] = molecules[i].r .+ [p.rOH, 0.0, 0.0]
4747
u0[:, indH2] = molecules[i].r .+ [cos(p.aHOH) * p.rOH, 0.0, sin(p.aHOH) * p.rOH]
4848
v0[:, indO] = molecules[i].v
4949
v0[:, indH1] = molecules[i].v
5050
v0[:, indH2] = molecules[i].v
51-
end
51+
end
5252
(u0, v0)
5353
end
5454

@@ -61,7 +61,7 @@ function gather_atom_coordinates(system::WaterSPCFw{<:WaterMolecule}, len)
6161
for i = 1:n
6262
p = system.scpfw_parameters
6363
indO, indH1, indH2 = 3 * (i - 1) + 1, 3 * (i - 1) + 2, 3 * (i - 1) + 3
64-
u0[:, indO] = molecules[i].O.r
64+
u0[:, indO] = molecules[i].O.r
6565
u0[:, indH1] = molecules[i].H1.r
6666
u0[:, indH2] = molecules[i].H2.r
6767
v0[:, indO] = molecules[i].O.v
@@ -79,7 +79,7 @@ end
7979

8080
function gather_accelerations_for_potentials(simulation::NBodySimulation{<:PotentialNBodySystem})
8181
acceleration_functions = []
82-
82+
8383
for (potential, parameters) in simulation.system.potentials
8484
push!(acceleration_functions, get_accelerating_function(parameters, simulation))
8585
end
@@ -90,7 +90,7 @@ end
9090
function gather_group_accelerations(simulation::NBodySimulation{<:WaterSPCFw})
9191
acelerations = []
9292
push!(acelerations, get_group_accelerating_function(simulation.system.scpfw_parameters, simulation))
93-
acelerations
93+
acelerations
9494
end
9595

9696
function get_accelerating_function(parameters::LennardJonesParameters, simulation::NBodySimulation)
@@ -124,7 +124,7 @@ end
124124
function obtain_data_for_harmonic_bond_interaction(system::WaterSPCFw, p::SPCFwParameters)
125125
neighbouhoods = Dict{Int, Vector{Tuple{Int,Float64}}}()
126126
n = length(system.bodies)
127-
ms = zeros(3 * n)
127+
ms = zeros(typeof(first(system.bodies).m), 3 * n)
128128
for i in 1:n
129129
indO, indH1, indH2 = 3 * (i - 1) + 1, 3 * (i - 1) + 2, 3 * (i - 1) + 3
130130
ms[indO] = system.mO
@@ -143,56 +143,56 @@ function obtain_data_for_harmonic_bond_interaction(system::WaterSPCFw, p::SPCFwP
143143
neighbouhoods[indH1] = neighbours_h1
144144
neighbouhoods[indH2] = neighbours_h2
145145
end
146-
146+
147147
(ms, neighbouhoods)
148148
end
149149

150150
function obtain_data_for_lennard_jones_interaction(system::PotentialNBodySystem)
151151
bodies = system.bodies
152152
n = length(bodies)
153-
ms = zeros(Real, n)
154-
indxs = zeros(Integer, n)
153+
ms = zeros(typeof(first(bodies).m), n)
154+
indxs = zeros(Int, n)
155155
for i = 1:n
156156
ms[i] = bodies[i].m
157157
indxs[i] = i
158-
end
158+
end
159159
return (ms, indxs)
160160
end
161161

162162
function obtain_data_for_lennard_jones_interaction(system::WaterSPCFw)
163163
bodies = system.bodies
164164
n = length(bodies)
165-
ms = zeros(Real, 3 * n)
166-
indxs = zeros(Integer, n)
165+
ms = zeros(typeof(first(bodies).m), 3 * n)
166+
indxs = zeros(Int, n)
167167
for i = 1:n
168168
indxs[i] = 3 * (i - 1) + 1
169169
ms[3 * (i - 1) + 1] = system.mO
170170
ms[3 * (i - 1) + 2] = system.mH
171171
ms[3 * (i - 1) + 3] = system.mH
172-
end
172+
end
173173
return (ms, indxs)
174174
end
175175

176176
function obtain_data_for_electrostatic_interaction(system::PotentialNBodySystem)
177177
bodies = system.bodies
178178
n = length(bodies)
179-
qs = zeros(Real, n)
180-
ms = zeros(Real, n)
179+
qs = zeros(typeof(first(bodies).q), n)
180+
ms = zeros(typeof(first(bodies).m), n)
181181
indxs = collect(1:n)
182182
exclude = Dict{Int, Vector{Int}}()
183183
for i = 1:n
184184
qs[i] = bodies[i].q
185185
ms[i] = bodies[i].m
186186
exclude[i] = [i]
187-
end
187+
end
188188
return (qs, ms, indxs, exclude)
189189
end
190190

191191
function obtain_data_for_electrostatic_interaction(system::WaterSPCFw)
192192
bodies = system.bodies
193193
n = length(bodies)
194-
qs = zeros(Real, 3 * n)
195-
ms = zeros(Real, 3 * n)
194+
qs = zeros(typeof(first(bodies).m), 3 * n)
195+
ms = zeros(typeof(first(bodies).m), 3 * n)
196196
indxs = collect(1:3*n)
197197
exclude = Dict{Int, Vector{Int}}()
198198
for i = 1:n
@@ -206,30 +206,30 @@ function obtain_data_for_electrostatic_interaction(system::WaterSPCFw)
206206
exclude[Oind] = [Oind, Oind+1, Oind+2,3*n+1]
207207
exclude[Oind+1] = [Oind, Oind+1, Oind+2,3*n+1]
208208
exclude[Oind+2] = [Oind, Oind+1, Oind+2,3*n+1]
209-
end
209+
end
210210
return (qs, ms, indxs, exclude)
211211
end
212212

213213
function obtain_data_for_electrostatic_interaction(system::NBodySystem)
214214
bodies = system.bodies
215215
n = length(bodies)
216-
qs = zeros(Real, n)
217-
ms = zeros(Real, n)
216+
qs = zeros(typeof(first(bodies).m), n)
217+
ms = zeros(typeof(first(bodies).m), n)
218218
return (qs, ms)
219219
end
220220

221221
function obtain_data_for_valence_angle_harmonic_interaction(system::WaterSPCFw)
222222
p = system.scpfw_parameters
223223
bonds = Vector{Tuple{Int, Int, Int, Float64, Float64}}()
224224
n = length(system.bodies)
225-
ms = zeros(Real, 3 * n)
225+
ms = zeros(typeof(first(bodies).m), 3 * n)
226226
for i = 1:n
227227
indO, indH1, indH2 = 3 * (i - 1) + 1, 3 * (i - 1) + 2, 3 * (i - 1) + 3
228228
ms[indO] = system.mO
229229
ms[indH1] = system.mH
230230
ms[indH2] = system.mH
231231
push!(bonds, (indH1, indO, indH2, p.aHOH, p.ka))
232-
end
232+
end
233233
return (ms, bonds)
234234
end
235235

@@ -293,77 +293,77 @@ end
293293

294294
function DiffEqBase.ODEProblem(simulation::NBodySimulation{<:PotentialNBodySystem})
295295
(u0, v0, n) = gather_bodies_initial_coordinates(simulation)
296-
297-
acceleration_functions = gather_accelerations_for_potentials(simulation)
296+
297+
acceleration_functions = gather_accelerations_for_potentials(simulation)
298298

299299
function ode_system!(du, u, p, t)
300300
du[:, 1:n] = @view u[:, n + 1:2n];
301301

302302
@inbounds for i = 1:n
303303
a = MVector(0.0, 0.0, 0.0)
304304
for acceleration! in acceleration_functions
305-
acceleration!(a, u[:, 1:n], u[:, n + 1:end], t, i);
305+
acceleration!(a, u[:, 1:n], u[:, n + 1:end], t, i);
306306
end
307307
du[:, n + i] .= a
308-
end
308+
end
309309
end
310310

311311
return ODEProblem(ode_system!, hcat(u0, v0), simulation.tspan)
312312
end
313313

314314
function DiffEqBase.SecondOrderODEProblem(simulation::NBodySimulation{<:PotentialNBodySystem})
315-
315+
316316
(u0, v0, n) = gather_bodies_initial_coordinates(simulation)
317317

318-
acceleration_functions = gather_accelerations_for_potentials(simulation)
318+
acceleration_functions = gather_accelerations_for_potentials(simulation)
319319
simultaneous_acceleration = gather_simultaneous_acceleration(simulation)
320320

321321
function soode_system!(dv, v, u, p, t)
322322
@inbounds for i = 1:n
323323
a = MVector(0.0, 0.0, 0.0)
324324
for acceleration! in acceleration_functions
325-
acceleration!(a, u, v, t, i);
325+
acceleration!(a, u, v, t, i);
326326
end
327327
dv[:, i] .= a
328-
end
328+
end
329329
for acceleration! in simultaneous_acceleration
330-
acceleration!(dv, u, v, t);
330+
acceleration!(dv, u, v, t);
331331
end
332332
end
333333

334334
SecondOrderODEProblem(soode_system!, v0, u0, simulation.tspan)
335335
end
336336

337337
function DiffEqBase.SecondOrderODEProblem(simulation::NBodySimulation{<:WaterSPCFw})
338-
338+
339339
(u0, v0, n) = gather_bodies_initial_coordinates(simulation)
340340

341341
(o_acelerations, h_acelerations) = gather_accelerations_for_potentials(simulation)
342-
group_accelerations = gather_group_accelerations(simulation)
342+
group_accelerations = gather_group_accelerations(simulation)
343343
simultaneous_acceleration = gather_simultaneous_acceleration(simulation)
344344

345345
function soode_system!(dv, v, u, p, t)
346346
@inbounds for i = 1:n
347347
a = MVector(0.0, 0.0, 0.0)
348348
for acceleration! in o_acelerations
349-
acceleration!(a, u, v, t, 3 * (i - 1) + 1);
349+
acceleration!(a, u, v, t, 3 * (i - 1) + 1);
350350
end
351351
dv[:, 3 * (i - 1) + 1] .= a
352352
end
353353
@inbounds for i in 1:n, j in (2, 3)
354354
a = MVector(0.0, 0.0, 0.0)
355355
for acceleration! in h_acelerations
356-
acceleration!(a, u, v, t, 3 * (i - 1) + j);
356+
acceleration!(a, u, v, t, 3 * (i - 1) + j);
357357
end
358358
dv[:, 3 * (i - 1) + j] .= a
359-
end
359+
end
360360
@inbounds for i = 1:n
361361
for acceleration! in group_accelerations
362-
acceleration!(dv, u, v, t, i);
362+
acceleration!(dv, u, v, t, i);
363363
end
364364
end
365365
for acceleration! in simultaneous_acceleration
366-
acceleration!(dv, u, v, t);
366+
acceleration!(dv, u, v, t);
367367
end
368368
end
369369

@@ -373,7 +373,7 @@ end
373373
function gather_accelerations_for_potentials(simulation::NBodySimulation{<:WaterSPCFw})
374374
o_acelerations = []
375375
h_acelerations = []
376-
376+
377377
push!(o_acelerations, get_accelerating_function(simulation.system.e_parameters, simulation))
378378
push!(o_acelerations, get_accelerating_function(simulation.system.scpfw_parameters, simulation))
379379
push!(o_acelerations, get_accelerating_function(simulation.system.lj_parameters, simulation))
@@ -386,8 +386,8 @@ end
386386

387387
function DiffEqBase.SDEProblem(simulation::NBodySimulation{<:PotentialNBodySystem})
388388
(u0, v0, n) = gather_bodies_initial_coordinates(simulation)
389-
390-
acceleration_functions = gather_accelerations_for_potentials(simulation)
389+
390+
acceleration_functions = gather_accelerations_for_potentials(simulation)
391391

392392
therm = simulation.thermostat
393393

@@ -397,7 +397,7 @@ function DiffEqBase.SDEProblem(simulation::NBodySimulation{<:PotentialNBodySyste
397397
@inbounds for i = 1:n
398398
a = MVector(0.0, 0.0, 0.0)
399399
for acceleration! in acceleration_functions
400-
acceleration!(a, (@view u[:, 1:n]), (@view u[:, n + 1:end]), t, i);
400+
acceleration!(a, (@view u[:, 1:n]), (@view u[:, n + 1:end]), t, i);
401401
end
402402
du[:, n + i] .= a
403403
end
@@ -408,15 +408,15 @@ function DiffEqBase.SDEProblem(simulation::NBodySimulation{<:PotentialNBodySyste
408408
function noise!(du, u, p, t)
409409
@. du[:, n + 1:end] += σ
410410
end
411-
411+
412412
return SDEProblem(deterministic_acceleration!, noise!, hcat(u0, v0), simulation.tspan)
413413
end
414414

415415
function DiffEqBase.SDEProblem(simulation::NBodySimulation{<:WaterSPCFw})
416416
(u0, v0, n) = gather_bodies_initial_coordinates(simulation)
417-
417+
418418
(o_acelerations, h_acelerations) = gather_accelerations_for_potentials(simulation)
419-
group_accelerations = gather_group_accelerations(simulation)
419+
group_accelerations = gather_group_accelerations(simulation)
420420
simultaneous_acceleration = gather_simultaneous_acceleration(simulation)
421421

422422
therm = simulation.thermostat
@@ -429,7 +429,7 @@ function DiffEqBase.SDEProblem(simulation::NBodySimulation{<:WaterSPCFw})
429429
@inbounds for i = 1:n
430430
a = MVector(0.0, 0.0, 0.0)
431431
for acceleration! in o_acelerations
432-
acceleration!(a, (@view u[:, 1:3*n]), (@view u[:, 3*n+1 : 2*3*n]), t, 3 * (i - 1) + 1);
432+
acceleration!(a, (@view u[:, 1:3*n]), (@view u[:, 3*n+1 : 2*3*n]), t, 3 * (i - 1) + 1);
433433
end
434434
du[:, 3*n+3 * (i - 1) + 1] .= a
435435

@@ -440,31 +440,31 @@ function DiffEqBase.SDEProblem(simulation::NBodySimulation{<:WaterSPCFw})
440440
@inbounds for i in 1:n, j in (2, 3)
441441
a = MVector(0.0, 0.0, 0.0)
442442
for acceleration! in h_acelerations
443-
acceleration!(a, (@view u[:, 1:3*n]), (@view u[:, 3*n+1 : 2*3*n]), t, 3 * (i - 1) + j);
443+
acceleration!(a, (@view u[:, 1:3*n]), (@view u[:, 3*n+1 : 2*3*n]), t, 3 * (i - 1) + j);
444444
end
445445
du[:, 3*n+3 * (i - 1) + j] .= a
446-
end
446+
end
447447
@inbounds for i = 1:n
448448
for acceleration! in group_accelerations
449-
acceleration!((@view du[ :, 3*n+1 : 2*3*n]), (@view u[:, 1:3*n]), (@view u[:, 3*n+1 : 2*3*n]), t, i);
449+
acceleration!((@view du[ :, 3*n+1 : 2*3*n]), (@view u[:, 1:3*n]), (@view u[:, 3*n+1 : 2*3*n]), t, i);
450450
end
451451
end
452452
for acceleration! in simultaneous_acceleration
453-
acceleration!((@view du[:, 3*n+1 : 2*3*n]), (@view u[:, 1:3*n]), (@view u[:, 3*n+1 : 2*3*n]), t);
453+
acceleration!((@view du[:, 3*n+1 : 2*3*n]), (@view u[:, 1:3*n]), (@view u[:, 3*n+1 : 2*3*n]), t);
454454
end
455455
@. du[:, 3*n+1 : 2*3*n] -= therm.γ*u[:, 3*n+1 : 2*3*n]
456456
end
457-
457+
458458
σO = sqrt(2*therm.γ*simulation.kb*therm.T)/mO
459459
σH = sqrt(2*therm.γ*simulation.kb*therm.T)/mH
460-
460+
461461
function noise!(du, u, p, t)
462462
@inbounds for i = 1:n
463463
@. du[:, 3*n+3 * (i - 1) + 1] += σO
464464
@. du[:, 3*n+3 * (i - 1) + 2] += σH
465465
@. du[:, 3*n+3 * (i - 1) + 3] += σH
466466
end
467467
end
468-
468+
469469
return SDEProblem(deterministic_acceleration!, noise!, hcat(u0, v0), simulation.tspan)
470-
end
470+
end

0 commit comments

Comments
 (0)