Skip to content

Commit e868330

Browse files
committed
further improvements in dynamicCollision.jl
1 parent 4e05ddc commit e868330

File tree

2 files changed

+13
-7
lines changed

2 files changed

+13
-7
lines changed

src/Composition/dynamicCollision.jl

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55
# (see file ...\ContactDetectionMPR\handler.jl)
66
# after computing all distances between colliding shapes response calculations are done
77
function computeContactForcesAndTorques(sim::Modia.SimulationModel, scene, world, time, file)
8-
ch = scene.options.contactDetection
9-
# Compute signed distances of all contact shapes during zero-crossing computation
10-
#try
8+
if typeof(scene.options.contactDetection) <: Modia3D.ContactDetectionMPR_handler
9+
ch::Modia3D.ContactDetectionMPR_handler = scene.options.contactDetection
10+
# Compute signed distances of all contact shapes during zero-crossing computation
11+
#try
1112
setComputationFlag(ch)
1213
if Modia.isEvent(sim) # with Event
1314
# handle event
@@ -20,9 +21,14 @@ function computeContactForcesAndTorques(sim::Modia.SimulationModel, scene, world
2021
TimerOutputs.@timeit sim.timer "Modia3D_1 getDistances!" getDistances!(scene, ch, world)
2122
end
2223
TimerOutputs.@timeit sim.timer "Modia3D_1 dealWithContacts!" dealWithContacts!(sim, scene, ch, world, time, file)
24+
# dealWithContacts!(sim, scene, ch, world, time, file)
2325
#catch e
2426
#println("Bug in Modia3D/src/Composition/dynamicCollision.jl: error curing collision detection at time = ", time)
2527
#end
28+
else
29+
error("No contact detection handler is defined")
30+
end
31+
return nothing
2632
end
2733

2834
# each shape pair in contact is stored in ch.contactDict
@@ -33,15 +39,15 @@ end
3339
# (see file ...\Composition\responseCalculation\elasticCollisionResponse.jl)
3440
# further, at an event simulation status is updated, contact material is replaced
3541
# and the actual contactDict is stored
36-
function dealWithContacts!(sim::Modia.SimulationModel, scene::Scene{F}, ch::Composition.ContactDetectionMPR_handler, world::Composition.Object3D{F}, time::Float64, file::Nothing)::Nothing where F <: Modia3D.VarFloatType
42+
function dealWithContacts!(sim::Modia.SimulationModel{F, T}, scene::Scene{F}, ch::Composition.ContactDetectionMPR_handler{M,F}, world::Composition.Object3D{F}, time::Float64, file::Nothing)::Nothing where {F <: Modia3D.VarFloatType, T, M}
3743

38-
simh::Modia.EventHandler = sim.eventHandler
44+
simh::Modia.EventHandler{F,T} = sim.eventHandler
3945
f1::SVector{3,F}=Modia3D.ZeroVector3D(F)
4046
f2::SVector{3,F}=Modia3D.ZeroVector3D(F)
4147
t1::SVector{3,F}=Modia3D.ZeroVector3D(F)
4248
t2::SVector{3,F}=Modia3D.ZeroVector3D(F)
4349

44-
for (pairID, pair) in ch.contactDict
50+
for (pairID::Int64, pair::ContactPair{F}) in ch.contactDict
4551
obj1::Composition.Object3D{F} = pair.obj1
4652
obj2::Composition.Object3D{F} = pair.obj2
4753
rContact::SVector{3,F} = (pair.contactPoint1 + pair.contactPoint2)/F(2.0)

src/Composition/scene.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ struct SceneOptions{F <: Modia3D.VarFloatType}
202202

203203
### Contact detection ###
204204
enableContactDetection::Bool # = true, if contact detection is enabled
205-
contactDetection::Modia3D.AbstractContactDetection
205+
contactDetection::ContactDetectionMPR_handler{Modia3D.MPRFloatType, F}
206206
elasticContactReductionFactor::F # c_res_used = c_res * elasticContactReductionFactor (> 0)
207207
maximumContactDamping::F
208208
gap::Float64

0 commit comments

Comments
 (0)