```{raw} latex \clearpage ``` (sec-item-nodepointground)= # NodePointGround A 3D point node fixed to ground which is similar to NodePoint, but it does not generate coordinates. Applied or reaction forces do not have any effect. This node can be used for 'blind' or 'dummy' {ref}`ODE2 ` and {ref}`ODE1 ` coordinates to which CoordinateSpringDamper or CoordinateConstraint objects are attached to. ## Interface - Python names: `NodePointGround` or `PointGround`, and `VPointGround` for its visualization - Provides: `Position`, `Position2D`, `Orientation`, `GenericODE2`, `Ground` - Node markers that can be attached: [](#sec-item-markernodeposition), [](#sec-item-markernoderigid), [](#sec-item-markernoderotationcoordinate) - Objects that take this node: [](#sec-item-objectmasspoint), [](#sec-item-objectmasspoint2d), [](#sec-item-objectmass1d), [](#sec-item-objectrotationalmass1d), [](#sec-item-objectkinematictree), [](#sec-item-objectbeamgeometricallyexact) ## Parameters The parameters of the item; in a dictionary, its type is 'PointGround': | name | type | size | default | description | |---|---|---|---|---| | **name** | String | | '' | node's unique name | | **referenceCoordinates** | Vector3D | 3 | [0.,0.,0.] | (symbol: $\qv\cRef = [q_0,\,q_1,\,q_2]\tp\cRef = \pv\cRef = [r_0,\,r_1,\,r_2]\tp$) reference coordinates of node ==> e.g. ref. coordinates for finite elements; global position of node without displacement | | **visualization** | VNodePointGround | | | parameters for visualization of item | ## Visualization parameters The parameters of `VNodePointGround`, given as `visualization`: | name | type | size | default | description | |---|---|---|---|---| | **show** | Bool | | True | set true, if item is shown in visualization and false if it is not shown | | **drawSize** | float | | -1. | drawing size (diameter, dimensions of underlying cube, etc.) for item; size == -1.f means that default size is used | | **color** | Float4 | 4 | [-1.,-1.,-1.,-1.] | Default RGBA color for nodes; 4th value is alpha-transparency; R=-1.f means, that default color is used | ## Drawing Drawn as [all nodes](#sec-drawing-nodes). ## Output variables Available as `OutputVariableType` in sensors, `Get...Output()` and other functions: ```{tabularcolumns} \Y{0.25}\Y{0.25}\Y{0.5} ``` | output variable | symbol | description | |---|---|---| | Position | $\pv\cConfig = [p_0,\,p_1,\,p_2]\cConfig\tp = \pv\cRef$ | global 3D position vector of node (=reference position) | | Displacement | $\uv\cConfig = [0,\,0,\,0]\cConfig\tp$ | zero 3D vector | | Velocity | $\vv\cConfig = [0,\,0,\,0]\cConfig\tp$ | zero 3D vector | | CoordinatesTotal | $\cv\cConfig =[]$ | vector of length zero | | Coordinates | $\cv\cConfig =[]$ | vector of length zero | | Coordinates_t | $\dot\cv\cConfig =[]$ | vector of length zero | | RotationMatrix | | identity matrix (only for completeness) | | Rotation | $[0,0,0]$ | (only for completeness) | | AngularVelocity | $[0,0,0]$ | (only for completeness) | | AngularVelocityLocal | $[0,0,0]$ | (only for completeness) | (description-nodepointground)= ## Detailed description ### Coordinates None: the node is fixed at its reference position $\pv\cRef$, and does not add a coordinate to the system. It provides a position (and, formally, an orientation) so that markers can be attached to it. ### Frame and interpretation The reference position is global. Forces applied to the node, and reaction forces of connectors or constraints attached to it, have no effect. ### Use The node is the ground for coordinate markers: a `CoordinateSpringDamper` or a `CoordinateConstraint` between a coordinate of a node and the ground needs a marker on both sides, and `MarkerNodeCoordinate` on a `NodePointGround` is that side. `CreateCoordinateConstraint` creates it when one side is the ground. (miniexample-nodepointground)= ## Mini example ```python #a ground node: a fixed point that markers and connectors can use, without coordinates node = mbs.AddNode(NodePoint(referenceCoordinates=[1,0,0])) mbs.AddObject(ObjectMassPoint(nodeNumber=node, mass=1)) mNode = mbs.AddMarker(MarkerNodePosition(nodeNumber=node)) nFixed = mbs.AddNode(NodePointGround(referenceCoordinates=[0,0,0])) mFixed = mbs.AddMarker(MarkerNodePosition(nodeNumber=nFixed)) mbs.AddObject(ObjectConnectorCartesianSpringDamper(markerNumbers=[mFixed, mNode], stiffness=[100,100,100], offset=[1,0,0])) mbs.AddLoad(LoadForceVector(markerNumber=mNode, loadVector=[10,0,0])) mbs.Assemble() mbs.SolveStatic() #the spring is stretched by F/k exu.sys['testResult'] = mbs.GetNodeOutput(node, exu.OutputVariableType.Displacement)[0] #0.1 ``` Examples (Ex) and TestModels (TM) that show this item, with weblink to github: [`tutorialSpringDamper.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/Examples/notebooks/tutorialSpringDamper.py) (Ex), [`coordinateSpringDamper.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/Examples/coordinateSpringDamper.py) (Ex), [`SliderCrank.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/Examples/SliderCrank.py) (Ex), [`plotSensorExamples.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/Examples/plotSensorExamples.py) (Ex), [`SpringDamperMassUserFunction.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/Examples/SpringDamperMassUserFunction.py) (Ex)