```{raw} latex \clearpage ``` (sec-item-markernodecoordinates)= # MarkerNodeCoordinates A node-Marker attached to all {ref}`ODE2 ` coordinates of a node. IN CONTRAST to MarkerNodeCoordinate, the marker coordinates INCLUDE the reference values! For {ref}`ODE1 ` coordinates use `MarkerNodeODE1Coordinates`. ## Interface - Provides: `Coordinates` - Connectors, constraints and loads that can use it: [](#sec-item-objectconnectorcoordinatevector) ## Parameters The parameters of the item; in a dictionary, its type is 'NodeCoordinates': | name | type | size | default | description | |---|---|---|---|---| | **name** | String | | '' | marker's unique name | | **nodeNumber** | NodeIndex | | invalid (-1) | node number to which marker is attached to | | **visualization** | VMarkerNodeCoordinates | | | parameters for visualization of item | ## Visualization parameters `VMarkerNodeCoordinates` has no parameters. ## Drawing The item draws nothing. (description-markernodecoordinates)= ## Detailed description ### Marker quantities | quantity | symbol | as computed | |---|---|---| | coordinates | $\cv = \qv\cRef + \qv$ | **all** {ref}`ODE2 ` coordinates of the node, **including** their reference values | | their velocities | $\dot\cv = \dot\qv$ | the time derivatives | Unlike `MarkerNodeCoordinate`, the values include the reference values. ### Jacobians The unit matrix of the size of the node's coordinates: a vector of forces acts on the coordinates one by one. On a node without {ref}`ODE2 ` coordinates the values and the Jacobian are empty. (miniexample-markernodecoordinates)= ## Mini example ```python #all coordinates of two nodes, tied by a coordinate vector constraint X1 qB - X0 qA = offset; the #coordinates INCLUDE the reference values, so qB - qA = [1,0,0] keeps the two points where they are nA = mbs.AddNode(NodePoint(referenceCoordinates=[0,0,0])) nB = mbs.AddNode(NodePoint(referenceCoordinates=[1,0,0])) mbs.AddObject(ObjectMassPoint(nodeNumber=nA, mass=1)) mbs.AddObject(ObjectMassPoint(nodeNumber=nB, mass=1)) mA = mbs.AddMarker(MarkerNodeCoordinates(nodeNumber=nA)) mB = mbs.AddMarker(MarkerNodeCoordinates(nodeNumber=nB)) mbs.AddObject(ObjectConnectorCoordinateVector(markerNumbers=[mA, mB], scalingMarker0=np.eye(3), scalingMarker1=np.eye(3), offset=[1,0,0])) mbs.AddLoad(LoadForceVector(markerNumber=mbs.AddMarker(MarkerNodePosition(nodeNumber=nA)), loadVector=[2,0,0])) mbs.Assemble() mbs.SolveDynamic() #both masses move together: a = F/(2m) = 1, x = a/2*t^2 at t=1 exu.sys['testResult'] = mbs.GetNodeOutput(nB, exu.OutputVariableType.Displacement)[0] #0.5 ``` Relevant Examples (Ex) and TestModels (TM) with weblink to github: [`coordinateVectorConstraint.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/TestModels/coordinateVectorConstraint.py) (TM), [`coordinateVectorConstraintGenericODE2.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/TestModels/coordinateVectorConstraintGenericODE2.py) (TM), [`rigidBodyAsUserFunctionTest.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/TestModels/rigidBodyAsUserFunctionTest.py) (TM)