```{raw} latex \clearpage ``` (sec-item-markernodecoordinate)= # MarkerNodeCoordinate A node-Marker attached to a {ref}`ODE2 ` coordinate of a node; this marker allows to connect a coordinate-based constraint or connector to a nodal coordinate (also NodeGround); for {ref}`ODE1 ` coordinates use `MarkerNodeODE1Coordinate`. ## Interface - Provides: `Coordinate` - Connectors, constraints and loads that can use it: [](#sec-item-objectconnectorcoordinatespringdamper), [](#sec-item-objectconnectorcoordinatespringdamperext), [](#sec-item-objectconnectorcoordinate), [](#sec-item-objectcontactcoordinate), [](#sec-item-loadcoordinate) ## Parameters The parameters of the item; in a dictionary, its type is 'NodeCoordinate': | name | type | size | default | description | |---|---|---|---|---| | **name** | String | | '' | marker's unique name | | **nodeNumber** | NodeIndex | | invalid (-1) | node number to which marker is attached to | | **coordinate** | UInt | | invalid (-1) | coordinate of node to which marker is attached to; **must be given**: the default is only a placeholder | | **visualization** | VMarkerNodeCoordinate | | | parameters for visualization of item | ## Visualization parameters `VMarkerNodeCoordinate` has no parameters. ## Drawing The item draws nothing. (description-markernodecoordinate)= ## Detailed description ### Marker quantities | quantity | symbol | as computed | |---|---|---| | coordinate | $c = q_i$ | the **current** {ref}`ODE2 ` coordinate `coordinate` $= i$ of the node, **without** its reference value | | its velocity | $\dot c = \dot q_i$ | the time derivative of that coordinate | ### Jacobians $\Jm = \ev_i\tp$, a row of the unit matrix: a force $f$ acts on coordinate $i$ only, $Q_i = f$. On a node without {ref}`ODE2 ` coordinates - `NodePointGround` - the coordinate is zero and the Jacobian empty, so nothing acts: this is the ground side of a `CoordinateSpringDamper` or a `CoordinateConstraint`. (miniexample-markernodecoordinate)= ## Mini example ```python #one coordinate of a node: a coordinate spring between the ground node and a 1D mass node = mbs.AddNode(Node1D(referenceCoordinates=[0])) mbs.AddObject(ObjectMass1D(nodeNumber=node, mass=1)) mCoord = mbs.AddMarker(MarkerNodeCoordinate(nodeNumber=node, coordinate=0)) mGround = mbs.AddMarker(MarkerNodeCoordinate(nodeNumber=nGround, coordinate=0)) mbs.AddObject(ObjectConnectorCoordinateSpringDamper(markerNumbers=[mGround, mCoord], stiffness=100)) mbs.AddLoad(LoadCoordinate(markerNumber=mCoord, load=10)) mbs.Assemble() mbs.SolveStatic() #the spring is stretched by F/k exu.sys['testResult'] = mbs.GetNodeOutput(node, exu.OutputVariableType.Coordinates) #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)