```{raw} latex \clearpage ``` (sec-item-nodepoint)= # NodePoint A 3D point node for point masses or solid finite elements which has 3 displacement degrees of freedom for {ref}`ODE2 `. ## Interface - Python names: `NodePoint` or `Point`, and `VPoint` for its visualization - Provides: `Position` - Node markers that can be attached: [](#sec-item-markernodeposition) - Objects that take this node: [](#sec-item-objectmasspoint) ## Parameters The parameters of the item; in a dictionary, its type is 'Point': | 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 | | **initialCoordinates** | Vector3D | 3 | [0.,0.,0.] | (symbol: $\qv\cIni = [q_0,\,q_1,\,q_2]\cIni\tp = \uv\cIni = [u_0,\,u_1,\,u_2]\cIni\tp$) initial displacement coordinate | | **initialVelocities** | Vector3D | 3 | [0.,0.,0.] | (symbol: $\dot\qv\cIni = \vv\cIni = [\dot q_0,\,\dot q_1,\,\dot q_2]\cIni\tp$) initial velocity coordinate | | **visualization** | VNodePoint | | | parameters for visualization of item | ## Visualization parameters The parameters of `VNodePoint`, 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= \uv\cConfig + \pv\cRef$ | global 3D position vector of node; $\uv\cRef=0$ | | Displacement | $\uv\cConfig = [q_0,\,q_1,\,q_2]\cConfig\tp$ | global 3D displacement vector of node | | Velocity | $\vv\cConfig = [\dot q_0,\,\dot q_1,\,\dot q_2]\cConfig\tp$ | global 3D velocity vector of node | | Acceleration | $\av\cConfig = \ddot \qv\cConfig = [\ddot q_0,\,\ddot q_1,\,\ddot q_2]\cConfig\tp$ | global 3D acceleration vector of node | | CoordinatesTotal | $\cv\cConfig = \uv\cConfig + \pv\cRef$ | displacement plus reference coordinates of node | | Coordinates | $\cv\cConfig = \uv\cConfig = [q_0,\,q_1,\,q_2]\tp\cConfig$ | coordinate vector of node | | Coordinates_t | $\dot\cv\cConfig = \vv\cConfig = [\dot q_0,\,\dot q_1,\,\dot q_2]\tp\cConfig$ | velocity coordinates vector of node | | Coordinates_tt | $\ddot\cv\cConfig = \av\cConfig = [\ddot q_0,\,\ddot q_1,\,\ddot q_2]\tp\cConfig$ | acceleration coordinates vector of node | | 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-nodepoint)= ## Detailed description ### Coordinates | index | symbol | kind | meaning | frame | |---|---|---|---|---| | 0, 1, 2 | $q_0,\,q_1,\,q_2$ | {ref}`ODE2 ` | displacement of the node in $x$, $y$ and $z$ | the frame of the object, usually global | ### Configuration In any configuration, the position of the node is its reference position plus its displacement, $$ \pv\cConfig = \pv\cRef + \uv\cConfig, \quad \uv\cConfig = [q_0,\,q_1,\,q_2]\cConfig\tp . $$ The coordinates are the displacements themselves, and their time derivatives are the velocity and the acceleration of the node. ### Frame and interpretation The node defines no frame; the object that uses it does. `ObjectMassPoint` reads the coordinates in the global frame. `ObjectFFRF` uses points as the nodes of its finite element mesh and reads their coordinates in the frame of its rigid body node (node 0): there, the global position of a mesh node follows from the object, not from the node alone. ### Action on the equations of motion The three coordinates lead to three {ref}`ODE2 ` equations, which the object provides; for `ObjectMassPoint` they are the residuals of the forces in the global frame. A force $\fv$ acting on the node through `MarkerNodePosition` enters them with the position Jacobian $\partial \pv / \partial \qv = \ImThree$, that is, as it is. **Example**: see [](#sec-item-objectmasspoint) (miniexample-nodepoint)= ## Mini example ```python #a point mass moving freely: reference position, initial displacement and initial velocity node = mbs.AddNode(NodePoint(referenceCoordinates=[1,0,0], initialCoordinates=[0,0.5,0], #displacement from the reference initialVelocities=[2,0,0])) mbs.AddObject(ObjectMassPoint(nodeNumber=node, mass=1)) mbs.Assemble() mbs.SolveDynamic() #default: 1 second #position = reference + displacement: [1+0+2*1, 0.5, 0] exu.sys['testResult'] = sum(mbs.GetNodeOutput(node, exu.OutputVariableType.Position)) #3.5 ``` Examples (Ex) and TestModels (TM) that show this item, with weblink to github: [`basicTutorial2024.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/Examples/basicTutorial2024.py) (Ex), [`tutorialSpringDamper.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/Examples/notebooks/tutorialSpringDamper.py) (Ex), [`tutorialSpringDamperCreate.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/Examples/notebooks/tutorialSpringDamperCreate.py) (Ex), [`cartesianSpringDamper.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/Examples/cartesianSpringDamper.py) (Ex), [`coordinateSpringDamper.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/Examples/coordinateSpringDamper.py) (Ex)