deleteItemsTest.py
You can view and download this file on Github: deleteItemsTest.py
1#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2# This is an EXUDYN example
3#
4# Details: Test for deleting items; we make a chain of 3 mass points and remove the first mass point
5#
6# Author: Johannes Gerstmayr
7# Date: 2025-05-08
8#
9# Copyright:This file is part of Exudyn. Exudyn is free software. You can redistribute it and/or modify it under the terms of the Exudyn license. See 'LICENSE.txt' for more details.
10#
11#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12
13import exudyn as exu
14from exudyn.utilities import *
15import exudyn.graphics as graphics
16import numpy as np
17
18useGraphics = True #without test
19#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
20#you can erase the following lines and all exudynTestGlobals related operations if this is not intended to be used as TestModel:
21try: #only if called from test suite
22 from modelUnitTests import exudynTestGlobals #for globally storing test results
23 useGraphics = exudynTestGlobals.useGraphics
24except:
25 class ExudynTestGlobals:
26 pass
27 exudynTestGlobals = ExudynTestGlobals()
28#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
29
30
31SC = exu.SystemContainer()
32mbs = SC.AddSystem()
33
34oGround = mbs.CreateGround()
35
36nMasses=3
37mass=0.5
38length=0.25
39gravity=9.81
40initialVelocity=0.5
41
42createMassDicts = []
43nodeNumbers = []
44bodyNumbers = []
45loadNumbers = []
46jointNumbers = []
47sensorNumbers = []
48lastBody = oGround
49for i in range(nMasses):
50 oDict = mbs.CreateMassPoint(referencePosition=[length*(i+1),0,0],
51 initialVelocity=[0,-initialVelocity,0],
52 physicsMass=mass,
53 gravity=[0,-gravity,0],
54 returnDict=True)
55 oMass = oDict['bodyNumber']
56 createMassDicts.append(oDict)
57 bodyNumbers.append(oDict['bodyNumber'])
58 nodeNumbers.append(oDict['nodeNumber'])
59 loadNumbers.append(oDict['loadNumber'])
60
61 oJoint = mbs.CreateDistanceConstraint(bodyNumbers=[lastBody,oMass])
62 jointNumbers.append(oJoint)
63 lastBody = oMass
64
65 #add sensors:
66 sPos = mbs.AddSensor(SensorBody(bodyNumber=lastBody, storeInternal=True,
67 outputVariableType=exu.OutputVariableType.Position))
68 sensorNumbers.append(sPos)
69
70#for debugging, look at this output:
71# mbs.systemData.Info()
72
73#for test cases we delete some connectors and mass point
74# exu.Print('*******************************************\n')
75delID0 = 0
76delID1 = 1
77
78exu.Print('delete object:',jointNumbers[delID0])
79mbs.DeleteObject(jointNumbers[delID0],suppressWarnings=False) #incl. markers
80#delete also the second joint
81exu.Print('delete object:',jointNumbers[delID1]-1)
82mbs.DeleteObject(jointNumbers[delID1]-1,suppressWarnings=False) #incl. markers
83
84
85exu.Print('delete sensor:',sensorNumbers[delID0])
86mbs.DeleteSensor(sensorNumbers[delID0],suppressWarnings=False)
87
88exu.Print('delete load:',loadNumbers[delID0])
89mbs.DeleteLoad(loadNumbers[delID0],suppressWarnings=False) #incl. marker
90exu.Print('delete object:',bodyNumbers[delID0])
91mbs.DeleteObject(bodyNumbers[delID0],suppressWarnings=False) #incl. markers
92
93#for debugging, look at this output:
94# exu.Print('*******************************************\n')
95# mbs.systemData.Info()
96
97#now add constraint again ... delID0 is now the new body; would be easier if names are used
98oJoint = mbs.CreateDistanceConstraint(bodyNumbers=[oGround,bodyNumbers[delID0]])
99
100#%%
101mbs.Assemble()
102
103tEnd = 0.5
104stepSize = 0.002
105
106simulationSettings = exu.SimulationSettings()
107#simulationSettings.solutionSettings.solutionWritePeriod = 1e-1
108simulationSettings.solutionSettings.sensorsWritePeriod = 1e-2
109simulationSettings.timeIntegration.numberOfSteps = int(tEnd/stepSize) #must be integer
110simulationSettings.timeIntegration.endTime = tEnd
111simulationSettings.timeIntegration.verboseMode = 1
112
113SC.visualizationSettings.nodes.drawNodesAsPoint=False
114SC.visualizationSettings.nodes.defaultSize=0.05
115SC.visualizationSettings.nodes.tiling = 8
116
117if useGraphics:
118 SC.renderer.Start()
119 SC.renderer.DoIdleTasks()
120
121mbs.SolveDynamic(simulationSettings)
122
123if useGraphics:
124 SC.renderer.DoIdleTasks()
125 SC.renderer.Stop()
126
127#+++++++++++++++++++++++++++++++++++++++++++++
128uTotal = sum(mbs.GetSensorValues(mbs.systemData.NumberOfSensors()-1))
129exu.Print('uTotal=',uTotal)
130
131exudynTestGlobals.testResult = uTotal
132#+++++++++++++++++++++++++++++++++++++++++++++
133
134if useGraphics:
135 if len(sensorNumbers):
136 mbs.PlotSensor(sensorNumbers[1],components=[0,1,2])