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])