Skip to content

Commit 15e2e8d

Browse files
committed
implement
1 parent f3efab2 commit 15e2e8d

4 files changed

Lines changed: 22 additions & 28 deletions

File tree

examples/n_body/n_body_system.jl

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ struct NBodySystem{NDIMS, ELTYPE <: Real, IC, GR} <: TrixiParticles.AbstractSyst
1111

1212
function NBodySystem(initial_condition, gravity::NewtonianGravity)
1313
mass = copy(initial_condition.mass)
14-
gravity_ = TrixiParticles.copy_gravity_model(gravity, eltype(mass))
14+
gravity_ = nbody_gravity_model(gravity, eltype(mass))
1515
gravitational_constant = gravity_.gravitational_constant
1616

1717
new{size(initial_condition.coordinates, 1),
@@ -23,6 +23,21 @@ struct NBodySystem{NDIMS, ELTYPE <: Real, IC, GR} <: TrixiParticles.AbstractSyst
2323
end
2424
end
2525

26+
function nbody_gravity_model(gravity::NewtonianGravity, ::Type{ELTYPE}) where {ELTYPE}
27+
return NewtonianGravity(;
28+
gravitational_constant=convert(ELTYPE,
29+
gravity.gravitational_constant),
30+
softening=nbody_gravity_softening(gravity.softening, ELTYPE),
31+
cutoff_radius=convert(ELTYPE, gravity.cutoff_radius))
32+
end
33+
34+
@inline nbody_gravity_softening(::NoSoftening,
35+
::Type{ELTYPE}) where {ELTYPE} = NoSoftening()
36+
@inline function nbody_gravity_softening(softening::PlummerSoftening,
37+
::Type{ELTYPE}) where {ELTYPE}
38+
return PlummerSoftening(convert(ELTYPE, softening.softening_length))
39+
end
40+
2641
function NBodySystem(initial_condition, gravitational_constant)
2742
gravity = NewtonianGravity(; gravitational_constant)
2843

src/general/gravity.jl

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,9 @@ struct NewtonianGravity{ELTYPE <: Real, SOFTENING <: AbstractGravitySoftening,
5656

5757
function NewtonianGravity(; gravitational_constant,
5858
softening=NoSoftening(),
59-
softening_length=nothing,
6059
cutoff_radius=oftype(float(gravitational_constant), Inf))
61-
if softening_length !== nothing
62-
softening isa NoSoftening ||
63-
throw(ArgumentError("`softening` and `softening_length` cannot both be set"))
64-
softening = iszero(softening_length) ? NoSoftening() :
65-
PlummerSoftening(softening_length)
66-
end
60+
softening isa AbstractGravitySoftening ||
61+
throw(ArgumentError("`softening` must be a gravitational softening model"))
6762

6863
gravitational_constant_, _,
6964
cutoff_radius_ = promote(gravitational_constant,
@@ -110,14 +105,6 @@ end
110105
@inline softening_length_for_promotion(softening,
111106
gravitational_constant) = softening.softening_length
112107

113-
function copy_gravity_model(gravity::NewtonianGravity, ::Type{ELTYPE}) where {ELTYPE}
114-
return NewtonianGravity(;
115-
gravitational_constant=convert(ELTYPE,
116-
gravity.gravitational_constant),
117-
softening=copy_softening_model(gravity.softening, ELTYPE),
118-
cutoff_radius=convert(ELTYPE, gravity.cutoff_radius))
119-
end
120-
121108
@inline copy_softening_model(::NoSoftening, ::Type{ELTYPE}) where {ELTYPE} = NoSoftening()
122109
@inline function copy_softening_model(softening::PlummerSoftening,
123110
::Type{ELTYPE}) where {ELTYPE}

test/examples/n_body_system.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
mass=energy_masses, particle_spacing=-1.0)
4949
softened_energy_system = NBodySystem(energy_ic,
5050
NewtonianGravity(; gravitational_constant=5.0,
51-
softening_length=4.0,
51+
softening=PlummerSoftening(4.0),
5252
cutoff_radius=10.0))
5353
softened_energy_semi = Semidiscretization(softened_energy_system,
5454
neighborhood_search=nothing)

test/general/gravity.jl

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,6 @@
1515
@test gravity_float32.softening isa NoSoftening
1616
@test gravity_float32.cutoff_radius === Inf32
1717

18-
gravity_softening_length = NewtonianGravity(; gravitational_constant=1.0,
19-
softening_length=0.1)
20-
@test gravity_softening_length.softening isa PlummerSoftening
21-
@test gravity_softening_length.softening.softening_length == 0.1
22-
2318
@test NoSoftening()(2.0) == 0.125
2419
@test NoSoftening()(SVector(2.0, 0.0)) == SVector(0.25, 0.0)
2520
@test NoSoftening()(SVector(2.0, 0.0), 2.0) == SVector(0.25, 0.0)
@@ -33,14 +28,11 @@
3328
@test_throws ArgumentError NewtonianGravity(; gravitational_constant=Inf)
3429
@test_throws ArgumentError NewtonianGravity(; gravitational_constant=NaN)
3530
@test_throws ArgumentError NewtonianGravity(; gravitational_constant=1.0,
36-
softening_length=-0.1)
31+
softening=nothing)
32+
@test_throws ArgumentError NewtonianGravity(; gravitational_constant=1.0,
33+
softening=0.1)
3734
@test_throws ArgumentError PlummerSoftening(-0.1)
3835
@test_throws ArgumentError PlummerSoftening(Inf)
39-
@test_throws ArgumentError NewtonianGravity(; gravitational_constant=1.0,
40-
softening=PlummerSoftening(0.1),
41-
softening_length=0.1)
42-
@test_throws ArgumentError NewtonianGravity(; gravitational_constant=1.0,
43-
softening_length=NaN)
4436
@test_throws ArgumentError NewtonianGravity(; gravitational_constant=1.0,
4537
cutoff_radius=0.0)
4638
@test_throws ArgumentError NewtonianGravity(; gravitational_constant=1.0,

0 commit comments

Comments
 (0)