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
@@ -141,6 +141,13 @@ void mjXWriter::OneFlex(XMLElement* elem, const mjCFlex* flex) {
|
||||
WriteAttrKey(elem, "flatskin", bool_map, 2, flex->flatskin, defflex.flatskin);
|
||||
WriteAttrInt(elem, "dim", flex->dim, defflex.dim);
|
||||
WriteAttrInt(elem, "group", flex->group, defflex.group);
|
||||
WriteAttr(elem, "cellcount", 3, flex->spec.cellcount, defflex.spec.cellcount);
|
||||
if (flex->spec.order != defflex.spec.order) {
|
||||
string dof_str = "full";
|
||||
if (flex->spec.order == 1) dof_str = "trilinear";
|
||||
else if (flex->spec.order == 2) dof_str = "quadratic";
|
||||
WriteAttrTxt(elem, "dof", dof_str);
|
||||
}
|
||||
|
||||
// data vectors
|
||||
if (!flex->get_vertbody().empty()) {
|
||||
|
||||
Reference in New Issue
Block a user