Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

An contact smoothing radius #93

Merged
merged 2 commits into from
Feb 11, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 38 additions & 25 deletions src/Shapes/boundingBoxes.jl
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,16 @@ that is the most extreme in direction of unit vector `e`.
r_abs + R_abs'*supportPoint_abs_Box(shape, R_abs*e, collisionSmoothingRadius) + e*collisionSmoothingRadius
#
@inline supportPoint_Cylinder( shape::Cylinder, r_abs::SVector{3,T}, R_abs::SMatrix{3,3,T,9}, e::SVector{3,T}, collisionSmoothingRadius::T) where {T} =
r_abs + R_abs'*supportPoint_abs_Cylinder(shape, R_abs*e) + e*collisionSmoothingRadius
r_abs + R_abs'*supportPoint_abs_Cylinder(shape, R_abs*e, collisionSmoothingRadius) + e*collisionSmoothingRadius

@inline supportPoint_Cone(shape::Cone, r_abs::SVector{3,T}, R_abs::SMatrix{3,3,T,9}, e::SVector{3,T}, collisionSmoothingRadius::T) where {T} =
r_abs + R_abs'*supportPoint_abs_Cone(shape, R_abs*e) + e*collisionSmoothingRadius
r_abs + R_abs'*supportPoint_abs_Cone(shape, R_abs*e, collisionSmoothingRadius) + e*collisionSmoothingRadius

@inline supportPoint_Capsule(shape::Capsule, r_abs::SVector{3,T}, R_abs::SMatrix{3,3,T,9}, e::SVector{3,T}) where {T} =
r_abs + R_abs'*supportPoint_abs_Capsule(shape, R_abs*e)

@inline supportPoint_Beam(shape::Beam, r_abs::SVector{3,T}, R_abs::SMatrix{3,3,T,9}, e::SVector{3,T}, collisionSmoothingRadius::T) where {T} =
r_abs + R_abs'*supportPoint_abs_Beam(shape, R_abs*e) + e*collisionSmoothingRadius
r_abs + R_abs'*supportPoint_abs_Beam(shape, R_abs*e, collisionSmoothingRadius) + e*collisionSmoothingRadius

@inline supportPoint_Sphere(shape::Sphere, r_abs::SVector{3,T}, R_abs::SMatrix{3,3,T,9}, e::SVector{3,T}) where {T} =
r_abs + (shape.diameter/2)*e
Expand Down Expand Up @@ -61,21 +61,21 @@ end
# [Gino v.d. Bergen, p. 135]
@inline function supportPoint_abs_Box(shape::Box, e_abs::SVector{3,T}, collisionSmoothingRadius::T) where {T}
@inbounds begin
halfLengthX = T(0.5*shape.lengthX)
halfLengthY = T(0.5*shape.lengthY)
halfLengthZ = T(0.5*shape.lengthZ)
halfLengthX = T(0.5*shape.lengthX) - collisionSmoothingRadius
halfLengthY = T(0.5*shape.lengthY) - collisionSmoothingRadius
halfLengthZ = T(0.5*shape.lengthZ) - collisionSmoothingRadius
return SVector{3,T}(
Basics.sign_eps(e_abs[1])*(halfLengthX-collisionSmoothingRadius),
Basics.sign_eps(e_abs[2])*(halfLengthY-collisionSmoothingRadius),
Basics.sign_eps(e_abs[3])*(halfLengthZ-collisionSmoothingRadius) )
Basics.sign_eps(e_abs[1])*(halfLengthX),
Basics.sign_eps(e_abs[2])*(halfLengthY),
Basics.sign_eps(e_abs[3])*(halfLengthZ) )
end
end

# [Gino v.d. Bergen, p. 136, XenoCollide, p. 168, 169]
@inline function supportPoint_abs_Cylinder(shape::Cylinder, e_abs::SVector{3,T}) where {T}
@inline function supportPoint_abs_Cylinder(shape::Cylinder, e_abs::SVector{3,T}, collisionSmoothingRadius::T) where {T}
@inbounds begin
halfLength = T(0.5*shape.length)
halfDiameter = T(0.5*shape.diameter)
halfLength = T(0.5*shape.length) - collisionSmoothingRadius
halfDiameter = T(0.5*shape.diameter) - collisionSmoothingRadius
if shape.axis == 1
enorm = norm(SVector(e_abs[2], e_abs[3]))
if enorm <= Modia3D.nepsType(T)
Expand Down Expand Up @@ -118,17 +118,30 @@ end

# for cone: [Gino v.d. Bergen, p. 136]]
# for frustum of a cone: A. Neumayr, G. Hippmann
@inline function supportPoint_abs_Cone(shape::Cone, e_abs::SVector{3,T}) where {T}
@inline function supportPoint_abs_Cone(shape::Cone, e_abs::SVector{3,T}, collisionSmoothingRadius::T) where {T}
@inbounds begin
baseRadius = T(0.5*shape.diameter)
rightCone = T(shape.topDiameter) == T(0.0)
shapeLength = T(shape.length)
R = T(0.5*shape.diameter)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please do not use single character variable names.

H = T(shape.length)
r = collisionSmoothingRadius

Rright = (R*H-R*r-r*sqrt(H^2 + R^2))/H
Hright = Rright/(R/H)

if rightCone
baseRadius = Rright
shapeLength = Hright
sin_phi = T(baseRadius/sqrt(baseRadius^2 + shapeLength^2)) # sin of base angle
else
topRadius = T(0.5*shape.topDiameter)
diffRadius = T(baseRadius - topRadius)
sin_phi = T(diffRadius/sqrt(diffRadius^2 + shapeLength^2)) # sin of base angle
Rt = T(0.5*shape.topDiameter)
Hcone = H - 2*r
diffRadius = R - Rt
Rcone = diffRadius*Hcone/H
topRadius = Rt - Rright + Rcone
@assert(topRadius > 0.0)
shapeLength = Hcone
baseRadius = topRadius + Rcone
sin_phi = T(Rcone/sqrt(Rcone^2 + shapeLength^2)) # sin of base angle
end
if shape.axis == 1
value = e_abs[1] / norm(SVector(e_abs[1], e_abs[2], e_abs[3]))
Expand Down Expand Up @@ -198,11 +211,11 @@ end
end

# G. Hippmann: Outer half circles of beam
@inline function supportPoint_abs_Beam(shape::Beam, e_abs::SVector{3,T}) where {T}
@inline function supportPoint_abs_Beam(shape::Beam, e_abs::SVector{3,T}, collisionSmoothingRadius::T) where {T}
@inbounds begin
halfLength = T(0.5*shape.length)
halfWidth = T(0.5*shape.width)
halfThickness = T(0.5*shape.thickness)
halfLength = T(0.5*shape.length) - collisionSmoothingRadius
halfWidth = T(0.5*shape.width) - collisionSmoothingRadius
halfThickness = T(0.5*shape.thickness) - collisionSmoothingRadius
if shape.axis == 1
enorm = norm(SVector(e_abs[1], e_abs[2]))
if enorm <= Modia3D.nepsType(T)
Expand Down Expand Up @@ -266,16 +279,16 @@ Returns the *Axis Aligned Bounding Box* of solid `shape` in argument `AABB`.
r_absi + R_absi'*supportPoint_abs_Box(shape, isign*R_absi, collisionSmoothingRadius) + isign*collisionSmoothingRadius

@inline supportPoint_i_Cylinder(shape::Cylinder{F}, r_absi::F, R_absi::SVector{3,F}, isign::Int, collisionSmoothingRadius) where F <: Modia3D.VarFloatType =
r_absi + R_absi'*supportPoint_abs_Cylinder(shape, isign*R_absi) + isign*collisionSmoothingRadius
r_absi + R_absi'*supportPoint_abs_Cylinder(shape, isign*R_absi, collisionSmoothingRadius) + isign*collisionSmoothingRadius

@inline supportPoint_i_Cone(shape::Cone{F}, r_absi::F, R_absi::SVector{3,F}, isign::Int, collisionSmoothingRadius) where F <: Modia3D.VarFloatType =
r_absi + R_absi'*supportPoint_abs_Cone(shape, isign*R_absi) + isign*collisionSmoothingRadius
r_absi + R_absi'*supportPoint_abs_Cone(shape, isign*R_absi, collisionSmoothingRadius) + isign*collisionSmoothingRadius

@inline supportPoint_i_Capsule(shape::Capsule{F}, r_absi::F, R_absi::SVector{3,F}, isign::Int) where F <: Modia3D.VarFloatType =
r_absi + R_absi'*supportPoint_abs_Capsule(shape, isign*R_absi)
#
@inline supportPoint_i_Beam(shape::Beam{F}, r_absi::F, R_absi::SVector{3,F}, isign::Int, collisionSmoothingRadius) where F <: Modia3D.VarFloatType =
r_absi + R_absi'*supportPoint_abs_Beam(shape, isign*R_absi) + isign*collisionSmoothingRadius
r_absi + R_absi'*supportPoint_abs_Beam(shape, isign*R_absi, collisionSmoothingRadius) + isign*collisionSmoothingRadius

@inline supportPoint_i_Ellipsoid(shape::Ellipsoid{F}, r_absi::F, R_absi::SVector{3,F}, isign::Int) where F <: Modia3D.VarFloatType =
r_absi + dot(R_absi, supportPoint_abs_Ellipsoid(shape, isign*R_absi))
Expand Down
4 changes: 2 additions & 2 deletions src/Shapes/solid.jl
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ Generate a [Solid](@ref) with physical behavior of a rigid body with mass, visua
If undefined `solidMaterial` is used as contact material. Only contact material combinations defined in
palettes/contactPairMaterials.json can be used.

- `collisionSmoothingRadius`: Defines a collision smoothing radius for surface edges.
- `collisionSmoothingRadius`: Defines a collision smoothing radius for surface edges, its default value is `0.001`. It takes the minimum value of your collision smoothing radius and 10% of the smallest shape length, like `min(collisionSmoothingRadius, 0.1 min(shape dimensions))`. If it is set to `0.0` no `collisionSmoothingRadius` is used. A `collisionSmoothingRadius` is used for `Box`, `Cylinder`, `Cone`, and `Beam`.

- `visualMaterial`: Defines the material of the solid used for visualization. A pre-defined [Visual material](@ref)
from palettes/visualMaterials.json (e.g. `"RedTransparent"`) or a user-defined [Visual material](@ref) (e.g.
Expand Down Expand Up @@ -66,7 +66,7 @@ struct Solid{F <: Modia3D.VarFloatType} <: Modia3D.AbstractObject3DFeature
massProperties::Union{Modia3D.AbstractMassProperties, Number, AbstractString, SolidMaterial, Nothing} = nothing,
collision::Bool = false,
contactMaterial::AbstractString = "",
collisionSmoothingRadius=F(0.0),
collisionSmoothingRadius=F(0.001),
visualMaterial::Union{Shapes.VisualMaterial,AbstractString,Nothing} = Shapes.VisualMaterial(),
visualMaterialConvexDecomposition::Union{Shapes.VisualMaterial,AbstractString,Nothing} = Shapes.VisualMaterial()) where F <: Modia3D.VarFloatType

Expand Down
5 changes: 4 additions & 1 deletion test/Collision/Billard16Balls.jl
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,10 @@ stopTime = 5.0
testTime = 1.5
tolerance = 1e-7
interval = 0.01
requiredFinalStates = [0.932366799335576, -0.1809055453453808, 0.029998498134144663, -0.7103630227248175, 0.6377388248964195, 1.1444288897717778e-6, -13.566618270564867, -0.42919381686392427, -51.78988526736147, 11.493760035228535, -28.18604746494348, -9.274500717106385, 0.3251486817061108, 0.0277286799792369, 0.029997667871541817, -0.045386147393685815, 0.02494087446146572, 7.071173322231522e-8, 0.9632466512796863, -0.5878042027751957, 1.5143706927695095, -0.861956899427833, -0.045669513590901455, 1.493862089438712, 0.39298296990029624, 0.31443841595786626, 0.02999755995288625, -0.029579270256977687, 0.25850852424613885, 6.562293682475234e-8, -7.840310943130716, -0.22781027762967296, -0.00022046380069404116, -8.61621588049777, -0.015376628222091354, 0.9855966966155278, 0.3526455762477307, -0.14552368823544187, 0.029998721963160897, -0.057011659723902604, -0.09065452423116344, -8.653552121260222e-8, 6.459748235199671, 0.5652530149121028, -0.6639862633740976, 3.0209995132661214, -0.010982860555903253, 1.8999736576736441, 0.47670063132250745, 0.3099048889509481, 0.029997421532352294, -0.0006769792995982574, 0.2229955863299179, 2.9194050230091563e-8, -6.655801757380954, -0.004141770772412782, 0.0028176900827465165, -7.4323933372165625, -7.305657972955619e-5, 0.022568896128615564, 0.37840319713002285, -0.012963232464096818, 0.02999875966729973, -0.04484612026412316, -0.01870915329881244, -7.208399687395234e-8, 1.6965213695410617, 0.1977224261883109, 3.2954869765056243, -0.34490572158434835, -0.13607654959318882, 1.5757582373497208, 0.4633742499427428, -0.09378070068856673, 0.029998896986446838, -0.0015652873740667117, -0.003652848226545061, -2.4987276746535646e-9, 2.656356306554525, 0.23639487319578706, 0.38604413792469905, 0.12085277944201457, 0.0003287441742882174, 0.05178620920634418, 0.5428863683537681, 0.2943322001786872, 0.029997306661373246, -0.13768336551274443, -0.1851622791468273, 2.0078211428767719e-7, -5.375047117690531, -0.20203914599329129, 0.10653255747034371, 6.433295956341206, -3.5272618482549762, 2.3057689265206, 0.5280309277659228, 0.02942739270768953, 0.02999734541680833, -5.044121808188397e-20, 9.428347202819351e-21, -5.466235560496825e-16, 1.5889609635189603, 0.0005115878793856781, 0.046982911615666534, -2.4228143760058907e-19, 3.2624724384601617e-20, 1.1673908074254789e-18, 0.5298438682763498, -0.03183946031101317, 0.029999002925936664, -8.142477014259519e-21, 1.1761024407502177e-19, 1.0608751087429057e-15, 1.6267922291325265, -0.0001256272854985119, -0.005205072094840777, -2.7673423988914685e-18, -3.6811347353528955e-21, 1.9164480962300681e-19, 0.5381967274955715, -0.09511668839776263, 0.02999893597287435, 1.3871304758602952e-19, 7.498953839924982e-20, -8.143802396256386e-16, 1.730158036566943, -0.022588130601776637, -0.281024412874448, -1.5665221939228563e-18, -9.961009508542885e-19, -3.2119014261001362e-18, 0.5929249250619509, 0.3675391345013976, 0.02999723614557378, 0.15871532013868042, -0.02163412259019427, -2.6738370458370294e-7, -6.138533187062709, 0.39137705412259355, -0.06719579923842542, 0.6037384255409345, 5.286894168535472, -0.4297978224995873, 0.6237332809243649, 0.06693523635562337, 0.02999718716466229, -0.7831165950290768, 0.006322740845781519, 1.2540953236069932e-6, 1.5553640384963576, -0.0007184754118179108, -0.4076245039066669, -0.01658144207454254, -0.44593094784613335, 26.100631753797174, 0.7644111449675985, -0.10684189228601401, 0.029998770977235967, 0.15888713100972973, -0.09284933646323527, -2.556184630160367e-7, 1.9038535203035778, -0.10274628247224886, -6.876920865937453, 3.0945607771911487, 3.0099334930590755e-6, -5.295522727127085, 0.7873309564302046, -0.17885480694204717, 0.02999873419045156, 0.18240369275975934, -0.10527901745690532, -2.9341893832220583e-7, 2.1544733025511604, -0.43524252418696596, -7.552219570239919, 3.508900484679646, 4.884908275674251e-8, -6.079425693001544, 0.7976927318357205, -0.2449410071153632, 0.029998695463387254, 0.19310925173414872, -0.11146304026743674, -1.7919890060996748e-7, 2.1859301340330397, -0.6276845534744078, -7.87553854587797, 3.7150403761585165, 4.196632621604925e-7, -6.436287097720782]
requiredFinalStates = [0.9332483106072544, -0.18187312532441693, 0.02999849671681763, -0.7095832048149922, 0.6368707654369432, 1.143171041101384e-6, -13.553942563593557, -0.4195243794435807, -51.79233008660278, 11.807007209726729, -27.975810451969565, -9.384295654892883, 0.3251502055431403, 0.02772819926252931, 0.0299976678693217, -0.04538254491852899, 0.024939912003186206, 7.070612097816354e-8, 0.9632341714743309, -0.5877775478177794, 1.5143189193110465, -0.8619057261773254, -0.04563751290039998, 1.493753202547408, 0.3929865232660756, 0.3144313176017014, 0.02999755994676683, -0.029575936325025438, 0.2585011782116537, 6.561905218417997e-8, -7.840063597155187, -0.2277908945852809, -0.00019226199038493234, -8.615970964912231, -0.015375784664400687, 0.9854859077520338, 0.35264619603819136, -0.1455217831653319, 0.029998721964137057, -0.057010908229208075,
-0.09065260935706018, -8.653447595525189e-8, 6.459702521706873, 0.5652888666079168, -0.6639992091264718, 3.020935678454475, -0.010981861879533573, 1.8999486180785712, 0.4767000746505306, 0.3099041129858934, 0.029997421533340347, -0.000677475986573399, 0.22299475711912944, 2.9194977603015673e-8, -6.655776509123009, -0.004144753260705207, 0.0028197921641742747, -7.432365696094535, -7.313664045288635e-5, 0.022585451684508966, 0.37840223311722093, -0.012962335005372607, 0.029998759665832785, -0.04484894718050894, -0.018709076016894303, -7.208853680055674e-8, 1.6964858028612126, 0.1977112296712567, 3.295519051579319, -0.3448993355673044, -0.1360257577294032, 1.575852345040146, 0.4633745589270613, -0.09377988839444025, 0.029998896986993488, -0.0015649341362523825, -0.003652013551363397, -2.4981817856544117e-9, 2.656330472428428, 0.23638530230275412, 0.38603973735519714, 0.1208249566227207, 0.00032866611117734275, 0.051774433544048655, 0.543108869560303, 0.294825435037727, 0.029997306373749883, -0.13739876028170375, -0.18509290020490796, 2.0018394912833252e-7, -5.392323206693009, -0.19893911728985575, 0.09891875505772645, 6.433873311561829,
-3.5319763124007437, 2.2716379105590336, 0.5280319930400308, 0.029427616694857592, 0.029997345415267766, 6.188799580920981e-20, 2.4903463163550593e-21, 4.911639361450669e-16, 1.58895399725716, 0.0005110489112549728, 0.04694833800247477, -6.34969334816791e-20, -2.3228133668370105e-20, -1.4418272517450767e-18, 0.5298438369751591, -0.03183889801132204, 0.029999002925945182, -3.528350416143663e-21, 6.617194627952165e-20, 1.0661056375916704e-15, 1.6267735556275007, -0.00012555443489016495, -0.005204036469135774, -1.5570145480554775e-18, -3.457487981432338e-21, 8.309401741933345e-20, 0.5381964461760903, -0.09511652750222786, 0.029998935973198977, 3.3952835589304447e-19, 4.564806492215736e-20, -1.5820947449642875e-16, 1.7301528615002686, -0.022586636896998424, -0.28101511497365944, -8.512851070761004e-19, -1.56519884944499e-18, -7.861488949920675e-18, 0.5927031648245079, 0.36786146767471367, 0.029997236552983333, 0.15845614558647408, -0.021331046796790255, -2.6683180694948455e-7, -6.1506936540955435, 0.3850250268876852, -0.06208674136021588, 0.5943245171790156, 5.281798549535106, -0.3795624991282996, 0.6246051141249892, 0.06692601485006958,
0.029997185771465026, -0.7827343505535713, 0.0063040893634809525, 1.253509421990429e-6, 1.5554333188869556, -0.0003679414861786754, -0.43663920366531234, -0.012217027572522585, -0.4480160765048617, 26.087850149346753, 0.7644107912334863, -0.10684167972512111, 0.029998770977880018, 0.15888674304279835, -0.09284910325102662, -2.5561782366711e-7, 1.9038478829272165, -0.10274259951709455, -6.876910249442725, 3.0945533634136773, 2.7134425786966793e-6, -5.295509584063961, 0.7873305258304856, -0.17885453451990208, 0.029998734191221205, 0.18240322785924398, -0.10527871347180867, -2.9341817035907206e-7, 2.154470220878549, -0.43523449284704646, -7.552206447838509, 3.5088892765009883, 9.132940300022019e-8, -6.07941081639718, 0.797699578168697, -0.2449449301094816, 0.029998695457177985, 0.19311625283414027, -0.11146703795842461, -1.7920530914190386e-7, 2.1859263471360704, -0.6278127900525268, -7.875763426542622, 3.7151718402931464, 1.9768906588609457e-7, -6.436521510513785]
simulate!(billard, stopTime=testTime, tolerance=tolerance, interval=interval, log=true, useRecursiveFactorizationUptoSize=500, logStates=false, logEvents=false, requiredFinalStates=requiredFinalStates) # logTiming=true,

@usingModiaPlot
Expand Down
3 changes: 2 additions & 1 deletion test/Collision/Billard4Balls.jl
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,8 @@ stopTime = 5.0
testTime = 2.5
tolerance = 1e-8
interval = 0.01
requiredFinalStates = [-0.07460364471173221, 0.2469233096172712, 0.02999808173004779, -0.8140655302596929, 0.5084317411521541, -1.3068678733294896e-6, -42.7652633611384, 1.047560394408595, -60.72880165368908, 7.38708629975639, 31.06670049188193, -1.960629264729011, -0.16442543215744446, 0.18417112667173485, 0.029997936572327664, -0.5830364755926802, 0.19967781792799022, -9.364111798032492e-7, 1.7112859000107352, -0.030080471477740935, 18.428349235400127, -6.655783301501015, 2.608416752777656e-5, 19.434131145447342, 0.4157205359423622, -0.26151248132958926, 0.02999752999578585, -0.004227558410584902, -0.5010189719266817, 4.451418189102991e-9, 11.8212750686071, 0.004051667523321807, 0.009243543858720088, 16.69866719227009, -0.25793872649482263, -0.027881848697937514, 0.14732605173091393, -0.19152425557632252, 0.029997960148676502, -0.3029387840817542, -0.18019916669264857, 4.874004906675558e-7, 0.9559962768568293, 0.514303198441921, 13.15248045495156, -2.245358300329699, -5.500137730579288, 10.136046562118707]
requiredFinalStates = [-0.07276225904925236, 0.2453456530297493, 0.029998084681964913, -0.8131729732525697, 0.5077564852782904, -1.3054330162748875e-6, -42.63423883478191, 1.057147543314802, -60.857759531439584, 6.792698034233983, 31.176405211463067, -1.7514957638408275, -0.16326113730274155, 0.18382050752887918, 0.029997938439605354, -0.5825412482752137, 0.19956045698679084, -9.35615015465449e-7, 1.7229244023445067, -0.035543362353461956, 18.391320766547988,
-6.6518712571402085, 2.4718947541234226e-5, 19.417623095449052, 0.41573795678955616, -0.26010343483884174, 0.029997529974735922, -0.004214932154558947, -0.5004735821234532, 4.336935240904981e-9, 11.774329191872447, 0.0041356928296786815, 0.009594145569267762, 16.680464236463397, -0.25872571383738985, -0.03100956782463096, 0.14788438085905078, -0.19122222797434096, 0.029997959251799728, -0.3027500332956257, -0.18012193238323354, 4.870923313573792e-7, 0.9532991179253845, 0.5248074513493877, 13.134794408356132, -2.240587263789671, -5.501727604570828, 10.128445467657514]
simulate!(billard, stopTime=testTime, tolerance=tolerance, interval=interval, log=true, logStates=false, logEvents=false, useRecursiveFactorizationUptoSize=500, requiredFinalStates=requiredFinalStates) # logTiming=true,

@usingModiaPlot
Expand Down
Loading