initial commit FESurrogateModelTutorial

This commit is contained in:
김경종
2026-05-21 17:03:51 +09:00
parent 93665d9ee6
commit 43b86669fa
122 changed files with 7929 additions and 0 deletions
@@ -0,0 +1,33 @@
import numpy as np
from scipy.sparse.linalg import spsolve
from femsurrogate.fea.assembly import (
assemble_global_stiffness,
assemble_load_vector,
constrained_dofs,
node_ids,
)
from femsurrogate.fea.model import BeamModel, Displacement
def solve_linear_static(model: BeamModel) -> dict[int, Displacement]:
stiffness = assemble_global_stiffness(model)
loads = assemble_load_vector(model)
fixed = np.array(constrained_dofs(model), dtype=int)
all_dofs = np.arange(loads.size)
free = np.setdiff1d(all_dofs, fixed, assume_unique=True)
displacements = np.zeros_like(loads)
displacements[free] = spsolve(stiffness[free][:, free], loads[free])
result: dict[int, Displacement] = {}
for position, node_id in enumerate(node_ids(model)):
base = position * 3
result[node_id] = Displacement(
node_id=node_id,
ux=float(displacements[base]),
uy=float(displacements[base + 1]),
rz=float(displacements[base + 2]),
)
return result