Skip to content

SOFAx v3

Previous Versions

Class Diagram

TODO: Change physical fields into energy fields:

Class Diagram
classDiagram class Legend { + : dynamic pytree leaf #40;JAX-traced#41; - : static over steps #40;GPU constant#41; DOFs x = #123;u,v,a#125; } %% ======================= %% Scene Graph Hierarchy %% ======================= class SceneNode { -NodeDOFs dofs -MeshTopology mesh -Tuple~SceneNode~ children -Tuple~PhysicalField~ fields } class SolverNode { -SolverState solver -ProjectiveBC bc } class MappedNode { -Mapping mapping_to_parent } SceneNode <|-- SolverNode SceneNode <|-- MappedNode %% ======================= %% Dynamic State %% ======================= class NodeDOFs { +jnp.ndarray u +jnp.ndarray v +jnp.ndarray a } class SolverState { -float dt +float time +int step_id -int max_iters -float tol } %% ======================= %% Topology & Geometry %% ======================= class MeshTopology { -jnp.ndarray points -jnp.ndarray connectivity -Dict~str,jnp.ndarray~ point_data -Dict~str,jnp.ndarray~ cell_data -GraphData graph -FiniteElementData fe } class GraphData { -jnp.ndarray adjacency } class FiniteElementData { -jnp.ndarray jacobian_det -jnp.ndarray shape_fn_derivatives } %% ======================= %% Mappings & Constraints %% ======================= class Mapping { -jnp.ndarray parent_node_indices -jnp.ndarray weights apply_P(x) jnp.ndarray apply_PT(x) jnp.ndarray } class ProjectiveBC { -jnp.ndarray mask_free_dofs -jnp.ndarray fixed_values apply_Pc(x) jnp.ndarray } %% ======================= %% Physical Fields %% ======================= class PhysicalField { +jnp.ndarray parameters add_M(a) LinearOp add_B(v) LinearOp add_K(u) LinearOp add_f() jnp.ndarray evaluate(node, x) FieldContribution } class ConstraintField { +jnp.ndarray lambda add_c(u) LinearOp } class FieldContribution { +jnp.ndarray Ma +jnp.ndarray Bv +jnp.ndarray Ku +jnp.ndarray f } PhysicalField <|-- ConstraintField PhysicalField ..> FieldContribution : evaluates ConstraintField ..> FieldContribution : evaluates %% ======================= %% Relationships %% ======================= SceneNode *-- NodeDOFs SceneNode *-- MeshTopology SceneNode *-- PhysicalField SolverNode *-- SolverState SolverNode *-- ProjectiveBC MappedNode *-- Mapping MeshTopology *-- GraphData MeshTopology *-- FiniteElementData