AGX Dynamics 2.40.0.0
Loading...
Searching...
No Matches
FrictionControllerNlCallback.h
Go to the documentation of this file.
1/*
2Copyright 2007-2025. Algoryx Simulation AB.
3
4All AGX source code, intellectual property, documentation, sample code,
5tutorials, scene files and technical white papers, are copyrighted, proprietary
6and confidential material of Algoryx Simulation AB. You may not download, read,
7store, distribute, publish, copy or otherwise disseminate, use or expose this
8material unless having a written signed agreement with Algoryx Simulation AB, or having been
9advised so by Algoryx Simulation AB for a time limited evaluation, or having purchased a
10valid commercial license from Algoryx Simulation AB.
11
12Algoryx Simulation AB disclaims all responsibilities for loss or damage caused
13from using this software, unless otherwise stated in written agreements with
14Algoryx Simulation AB.
15*/
16
17#pragma once
18
19#include <agx/NlmcpCallback.h>
20
21namespace agx
22{
23 class FrictionController;
24
29 {
30 public:
32 {
34 {
36 ecIndices[ 0 ] = ecIndices[ 1 ] = InvalidIndex;
37 }
38
42 };
43
44
45 public:
46 static ContextData findContextData( const FrictionController* frictionController, const ConstraintImplementation* context );
47 static Real calculateNormalForce( const ConstraintImplementation* context, ContextData contextData );
48
49 static RangeReal calculateBound( Real normalImpact,
50 Real frictionCoefficient,
51 // Minimum (close to zero) bound - default [0, 0], i.e.,
52 // the bound may be zero if the normal force is zero. This
53 // is the FrictionController::setMinimumStaticFrictionForceRange
54 // but scaled with the time step size.
55 RangeReal minBound = RangeReal{ 0.0 } );
56
57 public:
62
65
66 virtual Bool initialize( const NlmcpCallback::Args& args ) override;
67
68 virtual Real calculateResidual( const NlmcpCallback::Args& args ) const override;
69
70 virtual void update( const NlmcpCallback::Args& args ) const override;
71
72 virtual void postIterativeSolve( const NlmcpCallback::Args& /*args*/ ) const override;
73
74 protected:
76
77 virtual void onSetContext( const NlmcpCallbackSolverData& ) override;
78
79 protected:
81
82 private:
83 const FrictionController* m_frictionController;
84 ContextData m_contextData;
85 };
86}
Constraint solver callback interface with context and start rows for context.
Solver callback class for elementary FrictionController.
static ContextData findContextData(const FrictionController *frictionController, const ConstraintImplementation *context)
Real calculateNormalForce(const ConstraintImplementation *context) const
virtual void postIterativeSolve(const NlmcpCallback::Args &) const override
Before direct solve, after iterative solve.
virtual void update(const NlmcpCallback::Args &args) const override
Update call when bounds and/or q may be updated given the current solution z.
static Real calculateNormalForce(const ConstraintImplementation *context, ContextData contextData)
virtual Real calculateResidual(const NlmcpCallback::Args &args) const override
Calculate residual given current solution.
virtual void onSetContext(const NlmcpCallbackSolverData &) override
Called when context constraint has been set and all data is valid.
static RangeReal calculateBound(Real normalImpact, Real frictionCoefficient, RangeReal minBound=RangeReal{ 0.0 })
FrictionControllerNlCallback(const FrictionController *frictionController)
Default constructor.
virtual Bool initialize(const NlmcpCallback::Args &args) override
This method is a test for the non-linear solver if this callback is active for non-linear solve.
Real calculateNormalImpact(const RealValarray &z) const
Translational or rotational friction controller for Hinge, Prismatic and CylindricalJoint.
The agx namespace contains the dynamics/math part of the AGX Dynamics API.
bool Bool
Definition: Integer.h:40
uint64_t UInt
Definition: Integer.h:27
double Real
Definition: Real.h:42
std::valarray< agx::Real > RealValarray
For this module, vectors are defined using valarray.
AGXCORE_EXPORT const InvalidIndexStruct InvalidIndex
Data from the solver the ConstraintNlmcpCallback is part of.