@@ -38,35 +38,35 @@ struct DEMSystem{NDIMS, ELTYPE <: Real, IC, ARRAY1D, ST,
3838 acceleration :: SVector{NDIMS, ELTYPE}
3939 source_terms :: ST
4040 contact_model :: CM
41+ end
4142
42- function DEMSystem (initial_condition, contact_model; damping_coefficient = 0.0001 ,
43- acceleration = ntuple (_ -> 0.0 ,
44- ndims (initial_condition)), source_terms = nothing ,
45- radius = nothing )
46- NDIMS = ndims (initial_condition)
47- ELTYPE = eltype (initial_condition )
48-
49- mass = copy (initial_condition. mass )
43+ # The default constructor needs to be accessible for Adapt.jl to work with this struct.
44+ # See the comments in general/gpu.jl for more details.
45+ function DEMSystem (initial_condition, contact_model; damping_coefficient = 0.0001 ,
46+ acceleration = ntuple (_ -> 0.0 ,
47+ ndims (initial_condition)), source_terms = nothing ,
48+ radius = nothing )
49+ NDIMS = ndims (initial_condition)
50+ ELTYPE = eltype (initial_condition)
5051
51- if isnothing (radius)
52- radius = 0.5 * initial_condition. particle_spacing * ones (length (mass))
53- else
54- mass = (radius / (0.5 * initial_condition. particle_spacing))^ 3 * mass
55- radius = radius * ones (length (mass))
56- end
52+ mass = copy (initial_condition. mass)
5753
58- # Make acceleration an SVector
59- acceleration_ = SVector (acceleration... )
60- if length (acceleration_) != NDIMS
61- throw (ArgumentError (" `acceleration` must be of length $NDIMS for a $(NDIMS) D problem" ))
62- end
54+ if isnothing (radius)
55+ radius = initial_condition. particle_spacing * ones (ELTYPE, length (mass)) / 2
56+ else
57+ mass = (radius / (initial_condition. particle_spacing / 2 ))^ 3 * mass
58+ radius = radius * ones (ELTYPE, length (mass))
59+ end
6360
64- return new{NDIMS, ELTYPE, typeof (initial_condition),
65- typeof (mass), typeof (source_terms),
66- typeof (contact_model)}(initial_condition, mass, radius,
67- damping_coefficient, acceleration_, source_terms,
68- contact_model)
61+ # Make acceleration an SVector
62+ acceleration_ = SVector (acceleration... )
63+ if length (acceleration_) != NDIMS
64+ throw (ArgumentError (" `acceleration` must be of length $NDIMS for a $(NDIMS) D problem" ))
6965 end
66+
67+ return DEMSystem (initial_condition, mass, radius,
68+ damping_coefficient, acceleration_, source_terms,
69+ contact_model)
7070end
7171
7272function Base. show (io:: IO , system:: DEMSystem )
@@ -118,12 +118,12 @@ end
118118timer_name (:: DEMSystem ) = " solid"
119119
120120function TrixiParticles. write_u0! (u0, system:: DEMSystem )
121- u0 . = system. initial_condition. coordinates
121+ copyto! (u0, system. initial_condition. coordinates)
122122 return u0
123123end
124124
125125function TrixiParticles. write_v0! (v0, system:: DEMSystem )
126- v0 . = system. initial_condition. velocity
126+ copyto! (v0, system. initial_condition. velocity)
127127 return v0
128128end
129129
0 commit comments