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