Implement multi-cell finite element method for interpolated flexes.
This change introduces a `flex_cellcount` field to `mjModel` to specify the number of cells in each dimension for interpolated flexes. The stiffness computation, passive force calculation, and Jacobian derivatives are updated to operate on a per-cell basis, significantly improving performance by localizing computations to the nodes within each cell. PiperOrigin-RevId: 901216393 Change-Id: Ic23132e609de11e71bb7fef8d1f139daad2ec264
This commit is contained in:
committed by
Copybara-Service
parent
8415dff307
commit
6c7ed66781
@@ -978,6 +978,7 @@ struct mjModel_ {
|
||||
int* flex_matid; // material id for rendering (nflex x 1)
|
||||
int* flex_group; // group for visibility (nflex x 1)
|
||||
int* flex_interp; // interpolation (0: vertex, 1: nodes) (nflex x 1)
|
||||
int* flex_cellnum; // finite cell num per dimension (nflex x 3)
|
||||
int* flex_nodeadr; // first node address (nflex x 1)
|
||||
int* flex_nodenum; // number of nodes (nflex x 1)
|
||||
int* flex_vertadr; // first vertex address (nflex x 1)
|
||||
|
||||
@@ -454,6 +454,8 @@ typedef struct mjsFlex_ { // flex specification
|
||||
double damping; // Rayleigh's damping
|
||||
double thickness; // thickness (2D only)
|
||||
int elastic2d; // 2D passive forces; 0: none, 1: bending, 2: stretching, 3: both
|
||||
int cellcount[3]; // grid cell count for finite cell method
|
||||
int order; // interpolation order (1: trilinear, 2: quadratic)
|
||||
|
||||
// mesh properties
|
||||
mjStringVec* nodebody; // node body names
|
||||
|
||||
@@ -454,6 +454,7 @@
|
||||
X ( int, flex_matid, nflex, 1 ) \
|
||||
X ( int, flex_group, nflex, 1 ) \
|
||||
X ( int, flex_interp, nflex, 1 ) \
|
||||
X ( int, flex_cellnum, nflex, 3 ) \
|
||||
X ( int, flex_nodeadr, nflex, 1 ) \
|
||||
X ( int, flex_nodenum, nflex, 1 ) \
|
||||
X ( int, flex_vertadr, nflex, 1 ) \
|
||||
|
||||
Reference in New Issue
Block a user