FEDEM Solver
R8.0
Source code of the dynamics solver
|
Module with subroutines for contact surface point calculations. More...
Functions/Subroutines | |
subroutine | getposoncurve (jointId, interpolationOrder, curvePts, slideVar, loopLength, isExtended, isLooping, PosOnCurveG, tanVec, coeff, rotGrad, ierr) |
Computes position variables along a contact curve. More... | |
subroutine | getposoncircsection (Pos, DefPrev, CP1, CP2, thickness, width, radius, isInDomain, PosOnCurveG, Xsi, Def) |
Checks if a given point Pos is on a circular curve segment. More... | |
subroutine | getposcornersection (Pos, DefPrev, CP1, thickness, width, radius, isInDomain, PosOnCurveG, Def) |
Checks if Pos is in a corner section of a curve. More... | |
subroutine | rotateaboutz (PosMat, theta) |
Transforms the given position matrix by rotating it the given angle theta about its local Z-axis. More... | |
subroutine, private | adjusttheta (oldTheta, newTheta) |
Adjust an angular quantity such that it is within the range [-2π,2π]. More... | |
subroutine, private | cubic3d (PNod, S, PPt, tanVec, ShapeFunc, dirVec) |
Finds the position of a point on a cubic curve in space. More... | |
Module with subroutines for contact surface point calculations.
|
private |
Adjust an angular quantity such that it is within the range [-2π,2π].
|
private |
Finds the position of a point on a cubic curve in space.
subroutine curvetypemodule::getposcornersection | ( | real(dp), dimension(:,:), intent(in) | Pos, |
real(dp), dimension(3), intent(in) | DefPrev, | ||
type(curvepointtype), intent(in) | CP1, | ||
real(dp), intent(in) | thickness, | ||
real(dp), intent(in) | width, | ||
real(dp), intent(in) | radius, | ||
logical, intent(out) | isInDomain, | ||
real(dp), dimension(:,:), intent(out) | PosOnCurveG, | ||
real(dp), dimension(:), intent(out) | Def | ||
) |
Checks if Pos is in a corner section of a curve.
Compute position data if the point is in a corner.
subroutine curvetypemodule::getposoncircsection | ( | real(dp), dimension(:,:), intent(in) | Pos, |
real(dp), dimension(3), intent(in) | DefPrev, | ||
type(curvepointtype), intent(inout) | CP1, | ||
type(curvepointtype), intent(inout) | CP2, | ||
real(dp), intent(in) | thickness, | ||
real(dp), intent(in) | width, | ||
real(dp), intent(in) | radius, | ||
logical, intent(out) | isInDomain, | ||
real(dp), dimension(:,:), intent(out) | PosOnCurveG, | ||
real(dp), intent(out) | Xsi, | ||
real(dp), dimension(:), intent(out) | Def | ||
) |
Checks if a given point Pos is on a circular curve segment.
The curve segment is defined from two points CP1 and CP2. If the point is found to be on the segment, compute the local position and orientation (Xsi and Def) of the point w.r.t. to the curve segment. The curve tangent vectors at the curve points are also updated based on current triad configuration (for use in the subsequent corner test).
subroutine curvetypemodule::getposoncurve | ( | character(len=*), intent(in) | jointId, |
integer, intent(in) | interpolationOrder, | ||
type(curvepointtype), dimension(:), intent(in) | curvePts, | ||
real(dp), intent(in) | slideVar, | ||
real(dp), intent(in) | loopLength, | ||
logical, intent(in) | isExtended, | ||
logical, intent(in) | isLooping, | ||
real(dp), dimension(3,4), intent(out) | PosOnCurveG, | ||
real(dp), dimension(3), intent(out) | tanVec, | ||
real(dp), dimension(:), intent(out) | coeff, | ||
real(dp), dimension(3), intent(out), optional | rotGrad, | ||
integer, intent(out) | ierr | ||
) |
Computes position variables along a contact curve.
subroutine curvetypemodule::rotateaboutz | ( | real(dp), dimension(:,:), intent(inout) | PosMat, |
real(dp), intent(in) | theta | ||
) |
Transforms the given position matrix by rotating it the given angle theta about its local Z-axis.