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