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
@@ -89,8 +89,20 @@ MJAPI void mju_defGradient(mjtNum res[9], const mjtNum p[3], const mjtNum* dof,
|
||||
// evaluate the basis function at x for the i-th node
|
||||
MJAPI mjtNum mju_evalBasis(const mjtNum x[3], int i, int order);
|
||||
|
||||
// map global parametric coord to cell-local coord and build node indices
|
||||
MJAPI int mju_cellLookup(const mjtNum coord[3], const int cellnum[3], int order, mjtNum local[3],
|
||||
int* nodeindices);
|
||||
|
||||
// interpolate a function at x with given interpolation coefficients and order n
|
||||
MJAPI void mju_interpolate3D(mjtNum res[3], const mjtNum x[3], const mjtNum* coeff, int order);
|
||||
MJAPI void mju_interpolate3D(mjtNum res[3], const mjtNum x[3], const mjtNum* coeff, int order,
|
||||
const int* nodeindices);
|
||||
|
||||
// gather cell-local quantities and optionally compute rotation
|
||||
MJAPI void mju_flexGatherCellState(int order, int cy, int cz, int ci, int cj, int ck,
|
||||
const mjtNum* xpos_g, const mjtNum* vel_g,
|
||||
const mjtNum* xpos0_g, mjtNum* xpos_c, mjtNum* vel_c,
|
||||
mjtNum* xpos0_c, int* nodeindices, mjtNum* quat);
|
||||
|
||||
|
||||
// ----------------------------- Base64 ------------------------------------------------------------
|
||||
|
||||
|
||||
Reference in New Issue
Block a user