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
18testIsActive = exu.sys.get('testIsActive', False)
19
20
21SC = exu.SystemContainer()
22mbs = SC.AddSystem()
23
24oGround = mbs.CreateGround()
25
26nMasses=3
27mass=0.5
28length=0.25
29gravity=9.81
30initialVelocity=0.5
31
32createMassDicts = []
33nodeNumbers = []
34bodyNumbers = []
35loadNumbers = []
36jointNumbers = []
37sensorNumbers = []
38lastBody = oGround
39for i in range(nMasses):
40 oDict = mbs.CreateMassPoint(referencePosition=[length*(i+1),0,0],
41 initialVelocity=[0,-initialVelocity,0],
42 mass=mass,
43 gravity=[0,-gravity,0],
44 returnDict=True)
45 oMass = oDict['bodyNumber']
46 createMassDicts.append(oDict)
47 bodyNumbers.append(oDict['bodyNumber'])
48 nodeNumbers.append(oDict['nodeNumber'])
49 loadNumbers.append(oDict['loadNumber'])
50
51 oJoint = mbs.CreateDistanceConstraint(itemNumbers=[lastBody,oMass])
52 jointNumbers.append(oJoint)
53 lastBody = oMass
54
55 #add sensors:
56 sPos = mbs.AddSensor(SensorBody(bodyNumber=lastBody, storeInternal=True,
57 outputVariableType=exu.OutputVariableType.Position))
58 sensorNumbers.append(sPos)
59
60#for debugging, look at this output:
61# mbs.systemData.Info()
62
63#for test cases we delete some connectors and mass point
64# exu.Print('*******************************************\n')
65delID0 = 0
66delID1 = 1
67
68exu.Print('delete object:',jointNumbers[delID0])
69mbs.DeleteObject(jointNumbers[delID0],suppressWarnings=False) #incl. markers
70#delete also the second joint
71exu.Print('delete object:',jointNumbers[delID1]-1)
72mbs.DeleteObject(jointNumbers[delID1]-1,suppressWarnings=False) #incl. markers
73
74
75exu.Print('delete sensor:',sensorNumbers[delID0])
76mbs.DeleteSensor(sensorNumbers[delID0],suppressWarnings=False)
77
78exu.Print('delete load:',loadNumbers[delID0])
79mbs.DeleteLoad(loadNumbers[delID0],suppressWarnings=False) #incl. marker
80exu.Print('delete object:',bodyNumbers[delID0])
81mbs.DeleteObject(bodyNumbers[delID0],suppressWarnings=False) #incl. markers
82
83#for debugging, look at this output:
84# exu.Print('*******************************************\n')
85# mbs.systemData.Info()
86
87#now add constraint again ... delID0 is now the new body; would be easier if names are used
88oJoint = mbs.CreateDistanceConstraint(itemNumbers=[oGround,bodyNumbers[delID0]])
89
90#%%
91mbs.Assemble()
92
93tEnd = 0.5
94stepSize = 0.002
95
96simulationSettings = exu.SimulationSettings()
97simulationSettings.timeIntegration.newton.useModifiedNewton = False #Just for the test; modified Newton is usually faster
98#simulationSettings.solution.file.writePeriod = 1e-1
99simulationSettings.solution.sensors.writePeriod = 1e-2
100simulationSettings.timeIntegration.numberOfSteps = int(tEnd/stepSize) #must be integer
101simulationSettings.timeIntegration.endTime = tEnd
102simulationSettings.timeIntegration.verboseMode = 1
103
104SC.visualizationSettings.nodes.drawNodesAsPoint=False
105SC.visualizationSettings.nodes.defaultSize=0.05
106SC.visualizationSettings.nodes.tiling = 8
107
108if not testIsActive:
109 SC.renderer.Start()
110 SC.renderer.DoIdleTasks()
111
112mbs.SolveDynamic(simulationSettings)
113
114if not testIsActive:
115 SC.renderer.DoIdleTasks()
116 SC.renderer.Stop()
117
118#+++++++++++++++++++++++++++++++++++++++++++++
119uTotal = sum(mbs.GetSensorValues(mbs.systemData.NumberOfSensors()-1))
120exu.Print('uTotal=',uTotal)
121
122exu.sys['testResult'] = uTotal
123#+++++++++++++++++++++++++++++++++++++++++++++
124
125if not testIsActive:
126 if len(sensorNumbers):
127 mbs.PlotSensor(sensorNumbers[1],components=[0,1,2])