SpringWithConstraints.py

You can view and download this file on Github: SpringWithConstraints.py

 1#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2# This is an EXUDYN example
 3#
 4# Details:  example of SpringDampers and CoordinateConstraints
 5#
 6# Author:   Johannes Gerstmayr
 7# Date:     2019-11-22
 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.itemInterface import *
15
16SC = exu.SystemContainer()
17mbs = SC.AddSystem()
18
19#add constraints for testing:
20L = 1
21nGround = mbs.AddNode(NodePointGround(referenceCoordinates=[0,0,0])) #ground node for coordinate constraint
22mGroundCoordinate = mbs.AddMarker(MarkerNodeCoordinate(nodeNumber = nGround, coordinate=0)) #Ground node ==> no action
23mGroundPosition = mbs.AddMarker(MarkerNodePosition(nodeNumber = nGround)) #Ground node ==> no action
24
25n0 = mbs.AddNode(NodePoint(referenceCoordinates=[0,0,0]))
26n1 = mbs.AddNode(NodePoint(referenceCoordinates=[L,0,0]))
27mN0 = mbs.AddMarker(MarkerNodePosition(nodeNumber = n0))
28mN1 = mbs.AddMarker(MarkerNodePosition(nodeNumber = n1))
29
30mbs.AddObject(SpringDamper(markerNumbers = [mN0, mN1], stiffness = 1000, referenceLength=L))
31mbs.AddLoad(Force(markerNumber=mN1, loadVector=[10,0,0]))
32
33
34mNC1 = mbs.AddMarker(MarkerNodeCoordinate(nodeNumber = n1, coordinate=2))
35mNC2 = mbs.AddMarker(MarkerNodeCoordinate(nodeNumber = n1, coordinate=1))
36
37mbs.AddObject(CoordinateConstraint(markerNumbers=[mGroundCoordinate,mNC1]))
38mbs.AddObject(CoordinateConstraint(markerNumbers=[mGroundCoordinate,mNC2]))
39
40mNC00 = mbs.AddMarker(MarkerNodeCoordinate(nodeNumber = n0, coordinate=0))
41mNC01 = mbs.AddMarker(MarkerNodeCoordinate(nodeNumber = n0, coordinate=1))
42mNC02 = mbs.AddMarker(MarkerNodeCoordinate(nodeNumber = n0, coordinate=2))
43
44mbs.AddObject(CoordinateConstraint(markerNumbers=[mGroundCoordinate,mNC00]))
45mbs.AddObject(CoordinateConstraint(markerNumbers=[mGroundCoordinate,mNC01]))
46mbs.AddObject(CoordinateConstraint(markerNumbers=[mGroundCoordinate,mNC02]))
47
48
49
50mbs.Assemble()
51print(mbs)
52
53simulationSettings = exu.SimulationSettings() #takes currently set values or default values
54
55f = 100000
56simulationSettings.timeIntegration.numberOfSteps = 1*f
57simulationSettings.timeIntegration.endTime = 0.002*f
58simulationSettings.solutionSettings.writeSolutionToFile = True
59simulationSettings.solutionSettings.solutionWritePeriod = simulationSettings.timeIntegration.endTime/f
60simulationSettings.displayComputationTime = True
61simulationSettings.timeIntegration.verboseMode = 1
62
63simulationSettings.timeIntegration.newton.relativeTolerance = 1e-8*1000 #10000
64simulationSettings.timeIntegration.newton.absoluteTolerance = 1e-10*100
65
66simulationSettings.timeIntegration.newton.useModifiedNewton = False
67simulationSettings.timeIntegration.newton.maxModifiedNewtonIterations = 5
68simulationSettings.timeIntegration.newton.numericalDifferentiation.minimumCoordinateSize = 1
69simulationSettings.timeIntegration.newton.numericalDifferentiation.relativeEpsilon = 6.055454452393343e-06*0.1 #eps^(1/3)
70simulationSettings.timeIntegration.newton.modifiedNewtonContractivity = 1000
71simulationSettings.timeIntegration.generalizedAlpha.useIndex2Constraints = False
72simulationSettings.timeIntegration.generalizedAlpha.useNewmark = False
73simulationSettings.timeIntegration.generalizedAlpha.spectralRadius = 0.6
74simulationSettings.displayStatistics = True
75
76#SC.visualizationSettings.nodes.showNumbers = True
77SC.visualizationSettings.bodies.showNumbers = True
78#SC.visualizationSettings.connectors.showNumbers = True
79SC.visualizationSettings.nodes.defaultSize = 0.05
80
81simulationSettings.solutionSettings.solutionInformation = "Planar four-bar-mechanism with initial angular velocity and gravity"
82
83#exu.StartRenderer()
84##exu.InfoStat()
85#mbs.SolveDynamic(simulationSettings)
86##exu.InfoStat()
87#SC.WaitForRenderEngineStopFlag()
88#exu.StopRenderer() #safely close rendering window!
89
90simulationSettings.staticSolver.newton.numericalDifferentiation.relativeEpsilon = 0.1
91simulationSettings.staticSolver.verboseMode = 3
92exu.StartRenderer()
93mbs.SolveStatic(simulationSettings)
94SC.WaitForRenderEngineStopFlag()
95exu.StopRenderer() #safely close rendering window!