```{raw} latex \clearpage ``` (sec-item-nodepoint2d)= # NodePoint2D A 2D point node for point masses or solid finite elements which has 2 displacement degrees of freedom for {ref}`ODE2 `. ## Interface - Python names: `NodePoint2D` or `Point2D`, and `VPoint2D` for its visualization - Provides: `Position2D` - Node markers that can be attached: [](#sec-item-markernodeposition) - Objects that take this node: [](#sec-item-objectmasspoint2d) ## Parameters The parameters of the item; in a dictionary, its type is 'Point2D': | name | type | size | default | description | |---|---|---|---|---| | **name** | String | | '' | node's unique name | | **referenceCoordinates** | Vector2D | 2 | [0.,0.] | (symbol: $\qv\cRef = [q_0,\,q_1]\tp\cRef = \pv\cRef = [r_0,\,r_1]\tp$) reference coordinates of node ==> e.g. ref. coordinates for finite elements; global position of node without displacement | | **initialCoordinates** | Vector2D | 2 | [0.,0.] | (symbol: $\qv\cIni = [q_0,\,q_1]\cIni\tp = [u_0,\,u_1]\cIni\tp$) initial displacement coordinate | | **initialVelocities** | Vector2D | 2 | [0.,0.] | (symbol: $\dot\qv\cIni = \vv\cIni = [\dot q_0,\,\dot q_1]\cIni\tp$) initial velocity coordinate | | **visualization** | VNodePoint2D | | | parameters for visualization of item | ## Visualization parameters The parameters of `VNodePoint2D`, 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,\,0]\cConfig\tp= \uv\cConfig + \pv\cRef$ | global 3D position vector of node; $\uv\cRef=0$ | | Displacement | $\uv\cConfig = [q_0,\,q_1,\,0]\cConfig\tp$ | global 3D displacement vector of node | | Velocity | $\vv\cConfig = [\dot q_0,\,\dot q_1,\,0]\cConfig\tp$ | global 3D velocity vector of node | | Acceleration | $\av\cConfig = [\ddot q_0,\,\ddot q_1,\,0]\cConfig\tp$ | global 3D acceleration vector of node | | CoordinatesTotal | $\cv\cConfig = \uv\cConfig + \pv\cRef$ | displacement plus reference coordinates of node | | Coordinates | $\cv\cConfig = [q_0,\,q_1]\tp\cConfig$ | coordinate vector of node | | Coordinates_t | $\dot\cv\cConfig = [\dot q_0,\,\dot q_1]\tp\cConfig$ | velocity coordinates vector of node | | Coordinates_tt | $\ddot\cv\cConfig = \av\cConfig = [\ddot q_0,\,\ddot q_1]\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-nodepoint2d)= ## Detailed description ### Coordinates | index | symbol | kind | meaning | frame | |---|---|---|---|---| | 0, 1 | $q_0,\,q_1$ | {ref}`ODE2 ` | displacement of the node in $x$ and $y$ | global | ### Configuration In any configuration, the position of the node is its reference position plus its displacement, with a third component that is always zero, $$ \pv\cConfig = \vr{r_{0}}{r_{1}}{0}\cRef + \vr{q_0}{q_1}{0}\cConfig . $$ ### Frame and interpretation The coordinates are displacements in the global $x$-$y$ plane; `ObjectMassPoint2D` is the object that uses them. ### Action on the equations of motion The two coordinates lead to two {ref}`ODE2 ` equations, the residuals of the forces in $x$ and $y$; a force of a load or connector enters them with its first two components. **Example**: see [](#sec-item-objectmasspoint2d) (miniexample-nodepoint2d)= ## Mini example ```python #a planar point mass under gravity, thrown with an initial velocity node = mbs.AddNode(NodePoint2D(referenceCoordinates=[0,0], initialVelocities=[1,2])) oMass = mbs.AddObject(ObjectMassPoint2D(nodeNumber=node, mass=1)) mMass = mbs.AddMarker(MarkerNodePosition(nodeNumber=node)) mbs.AddLoad(LoadForceVector(markerNumber=mMass, loadVector=[0,-9.81,0])) mbs.Assemble() mbs.SolveDynamic() #y = v0*t - g/2*t^2 at t=1 exu.sys['testResult'] = mbs.GetNodeOutput(node, exu.OutputVariableType.Position)[1] #2-4.905=-2.905 ``` Examples (Ex) and TestModels (TM) that show this item, with weblink to github: [`pendulum2Dconstraint.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/Examples/pendulum2Dconstraint.py) (Ex), [`SliderCrank.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/Examples/SliderCrank.py) (Ex), [`SpringDamperMassUserFunction.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/Examples/SpringDamperMassUserFunction.py) (Ex), [`slidercrankWithMassSpring.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/Examples/slidercrankWithMassSpring.py) (Ex)