AgentFEM-DENIM / inference.py
HaomingLuo's picture
Add expanded DENIM boundary checkpoint
5629df0 verified
Raw History Blame Contribute Delete
1.36 kB
"""Minimal material-point inference for original or expanded DENIM weights."""
import argparse
from pathlib import Path
import torch
from src.t2_graybox_discrete_energy import DENIM, rollout
ROOT = Path(__file__).resolve().parent
parser = argparse.ArgumentParser()
parser.add_argument(
"--checkpoint",
choices=("denim.pt", "denim-expanded.pt"),
default="denim-expanded.pt",
)
args = parser.parse_args()
checkpoint = torch.load(ROOT / args.checkpoint, map_location="cpu", weights_only=False)
model = DENIM(channels=2)
model.load_state_dict(checkpoint["state_dict"])
model.eval()
points = 121
coordinate = torch.linspace(0.0, 1.0, points)
amplitude = torch.where(coordinate <= 0.5, 2.0 * coordinate, 2.0 * (1.0 - coordinate))
scalar = 0.008 * torch.sin(2.0 * torch.pi * coordinate) * amplitude
basis = torch.tensor((1.0, -0.5, -0.5, 0.0, 0.0, 0.0))
strain = (scalar[:, None] * basis).unsqueeze(0)
with torch.no_grad():
result = rollout(
strain,
torch.tensor((190.0e9,)),
torch.tensor((0.30,)),
torch.tensor((280.0e6,)),
model,
)
print("checkpoint", args.checkpoint)
print("steps", points)
print("maximum_abs_stress_mpa", float(result["stress"].abs().max() / 1.0e6))
print("final_peeq", float(result["peeq"][0, -1]))
print("maximum_yield_residual_pa", float(result["yield_residual"].abs().max()))