Add FEM validation plotting script and data files

- Introduced `plot_fem_validation.py` to visualize FEM validation curves against experimental measurements. - The script reads hysteresis and cumulative dissipated energy data from text files and generates a two-panel figure. - Added `skeleton.txt` containing sample data for hysteresis and force measurements. - Configured plot aesthetics for clarity and consistency in presentation.
parent e81bd157
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
"""
Plot FEM validation curves against experimental measurements.
The script reads the hysteresis and cumulative dissipated energy curves stored
in this folder and saves a two-panel figure as PNG, SVG, and PDF.
"""
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams.update(
{
"font.family": "serif",
"font.serif": ["Times New Roman", "DejaVu Serif"],
"mathtext.fontset": "stix",
"font.size": 11,
"axes.labelsize": 11,
"axes.titlesize": 11,
"xtick.labelsize": 11,
"ytick.labelsize": 11,
"axes.linewidth": 0.7,
"axes.spines.top": False,
"axes.spines.right": False,
"figure.dpi": 300,
"savefig.dpi": 300,
}
)
COLOR_EXPERIMENTAL = "#1a6faf"
COLOR_NUMERICAL = "#E07060"
COLOR_GRID = "#d8d8d8"
ENERGY_X_LABEL = "Cumulative displacement path (mm)"
ENERGY_Y_LABEL = "Cumulative dissipated energy (kN m)"
HYSTERESIS_X_LABEL = "Displacement (mm)"
HYSTERESIS_Y_LABEL = "Force (kN)"
def load_curve(path):
data = np.loadtxt(path)
if data.ndim != 2 or data.shape[1] < 2:
raise ValueError(f"{path.name} must contain at least two numeric columns.")
return data[:, 0], data[:, 1]
def style_axis(ax):
ax.grid(True, color=COLOR_GRID, linewidth=0.55, alpha=0.75)
ax.tick_params(axis="both", which="major", direction="in", length=4, width=0.7)
ax.tick_params(axis="both", which="minor", direction="in", length=2.5, width=0.6)
ax.minorticks_on()
def save_figure_all_formats(fig, out_base):
fig.savefig(f"{out_base}.png", format="png", bbox_inches="tight", dpi=300)
fig.savefig(f"{out_base}.svg", format="svg", bbox_inches="tight")
fig.savefig(f"{out_base}.pdf", format="pdf", bbox_inches="tight")
def main():
base_dir = Path(__file__).resolve().parent
hysteresis_exp = load_curve(base_dir / "histeresis_1_exp.txt")
hysteresis_num = load_curve(base_dir / "histeresis_2_num.txt")
energy_exp = load_curve(base_dir / "energy_1_exp.txt")
energy_num = load_curve(base_dir / "energy_2_num.txt")
fig, axes = plt.subplots(1, 2, figsize=(8.25, 3.8))
fig.subplots_adjust(left=0.085, right=0.985, bottom=0.28, top=0.86, wspace=0.30)
ax_hysteresis, ax_energy = axes
ax_hysteresis.plot(
*hysteresis_exp,
color=COLOR_EXPERIMENTAL,
linewidth=1.4,
label="Experimental",
)
ax_hysteresis.plot(
*hysteresis_num,
color=COLOR_NUMERICAL,
linewidth=1.4,
linestyle="--",
label="Numerical",
)
ax_hysteresis.axhline(0, color="black", linewidth=0.55, alpha=0.65)
ax_hysteresis.axvline(0, color="black", linewidth=0.55, alpha=0.65)
ax_hysteresis.set_xlabel(HYSTERESIS_X_LABEL)
ax_hysteresis.set_ylabel(HYSTERESIS_Y_LABEL)
style_axis(ax_hysteresis)
handles, labels = ax_hysteresis.get_legend_handles_labels()
fig.legend(
handles,
labels,
loc="lower center",
ncol=2,
frameon=False,
framealpha=0.95,
edgecolor="#cccccc",
bbox_to_anchor=(0.5, 0.055),
)
ax_energy.plot(
*energy_exp,
color=COLOR_EXPERIMENTAL,
linewidth=1.8,
label="Experimental",
)
ax_energy.plot(
*energy_num,
color=COLOR_NUMERICAL,
linewidth=1.8,
linestyle="--",
label="Numerical",
)
ax_energy.set_xlabel(ENERGY_X_LABEL)
ax_energy.set_ylabel(ENERGY_Y_LABEL)
style_axis(ax_energy)
output_base = base_dir / "FEM_validation_comparison"
save_figure_all_formats(fig, output_base)
plt.close(fig)
print(f"Saved: {output_base}.png/.svg/.pdf")
if __name__ == "__main__":
main()
......@@ -103,7 +103,7 @@ The BDSL dampers analysed in this work, with one representative configuration sh
\label{fig:Device}
\end{figure}
This separation of functions leads to a non-trivial design problem. Thin windows may enhance ductility and dissipative activation, but they may also promote excessive damage localization. Conversely, thicker windows may increase strength while transferring inelastic demand to the frame. Since severe frame damage may compromise the structural integrity of the device, frame damage must be penalized more strongly than window damage. At the same time, the dissipative demand should be distributed as uniformly as possible among the windows, avoiding configurations in which a single window absorbs most of the deformation while the remaining windows remain underused. Consequently, the design problem cannot be reduced to maximizing force or total dissipated energy alone, but must also control where damage develops and how the windows participate in the dissipative process.
This separation of functions leads to a non-trivial design problem. Thin windows may enhance ductility and dissipative activation, but they may also promote excessive damage localization. Conversely, thicker windows may increase strength while transferring inelastic demand to the frame. Since severe frame damage may compromise the structural integrity of the device, frame damage must be penalized more strongly than window damage. At the same time, the dissipative demand should be distributed as uniformly as possible among the windows, avoiding configurations in which a single window absorbs most of the deformation while the remaining windows stay underused. Consequently, the design problem cannot be reduced to maximizing force or total dissipated energy alone, but must also control where damage develops and how the windows participate in the dissipative process.
The design variables considered in this work are the window thicknesses
\begin{equation}
......@@ -144,9 +144,11 @@ H60\_B34 & 60 cm & 34 cm & 5 & 30 mm & $t_{w,1},\ldots,t_{w,5}$ & 5--12 mm \\
\section{Validation of the FEM numerical model}\label{sec:fem}
The surrogate models developed in this work are trained using data generated from three-dimensional FEM simulations. The numerical model is based on a previously calibrated and validated representation of the BDSL device, described in detail in Ramirez et al. \cite{RamirezMachado2025}. The model was developed using the COMPACK code, an explicit dynamic FEM solver based on an incremental formulation \cite{Martinez2011}. It accounts for large displacements, material and geometric nonlinearities, contact interactions, and the boundary conditions associated with the experimental setup.
The surrogate models developed in this work were trained using data generated from three-dimensional FEM simulations. The numerical model is based on a previously calibrated and validated representation of the BDSL device, described in detail in Ramirez et al. \cite{RamirezMachado2025}. An example of the numerical setup is shown in Figure \ref{fig:FEMsetup}. The simulations were carried out using the COMPACK code, an explicit dynamic FEM solver based on an incremental formulation \cite{Martinez2011}. The model accounts for large displacements, material and geometric nonlinearities, contact interactions and the boundary conditions associated with the experimental configuration.
The dissipative steel component is modelled as ASTM A36 steel, whose cyclic plastic behaviour is represented by the Yoshida--Uemori model \cite{Yoshida2002,Jia2014}. This constitutive law allows the model to reproduce cyclic hardening, softening, and Bauschinger-type effects under large plastic deformation. The steel component is discretized using linear eight-node hexahedral solid elements, providing a structured three-dimensional mesh suitable for extracting local stress, strain, and damage-related fields.
The dissipative steel component is modelled as ASTM A36 steel, whose cyclic plastic behaviour is represented by the Yoshida--Uemori model \cite{Yoshida2002,Jia2014}. This constitutive law allows the model to reproduce cyclic hardening, softening and Bauschinger-type effects under large plastic deformation. The steel component is discretized using linear eight-node hexahedral solid elements, providing a structured three-dimensional mesh suitable for extracting local stress, strain and damage-related fields.
The imposed displacement is applied through an actuator-like connector that transfers horizontal displacement while preventing axial load transmission, thereby reproducing the kinematic condition required to promote a shear-dominated response. Three experimental tests were performed following the loading protocols defined in the ANSI/AISC 341-16 \cite{American2002} and ASCE 7-22 \cite{American2017} qualification standards for seismic energy dissipation devices. Those protocols involve cyclic loading with progressively increasing amplitudes. Additional contact and confinement conditions are included to represent the experimental anti-buckling system and to control local and global instability.
\begin{figure}[!ht]
\centering
......@@ -155,18 +157,16 @@ The dissipative steel component is modelled as ASTM A36 steel, whose cyclic plas
\label{fig:FEMsetup}
\end{figure}
The imposed displacement is applied through an actuator-like connector that transfers horizontal displacement while preventing axial load transmission, thereby reproducing the kinematic condition required to promote a shear-dominated response. Three experimental tests were performed following the loading protocols defined in the ANSI/AISC 341-16 \cite{American2002} and ASCE 7-22 \cite{American2017} qualification standards for seismic energy dissipation devices. Those protocols involve cyclic loading with progressively increasing amplitudes. Additional contact and confinement conditions are included to represent the experimental anti-buckling system and to control local and global instability.
The model was calibrated and validated against cyclic experimental tests performed on representative BDSL specimens. The calibration involved the material parameters, assembled geometry, contact definitions, support flexibility, and boundary conditions. The validated model accurately reproduces the main global experimental responses, including hysteretic force--displacement loops, cumulative dissipated energy, stiffness degradation, and the skeleton curve. Figure \ref{fig:CalibrationCurves} shows the comparison between experimental and numerical results, confirming the suitability of the FEM model as a numerical reference for configurations beyond those experimentally tested.
The model was calibrated and validated against cyclic experimental tests performed on representative BDSL specimens. The calibration involved the material parameters, assembled geometry, contact definitions, support flexibility and boundary conditions. The validated model accurately reproduces the main global experimental responses. Figure \ref{fig:FEM_validation_comparison} shows the comparison between experimental and numerical results, confirming the suitability of the FEM model as a numerical reference for configurations beyond those experimentally tested.
\begin{figure}[!ht]
\centering
\includegraphics[width=1.0\textwidth]{./Figures/CalibrationCurves.png}
\caption{Experimental--numerical validation of the BDSL model: (a) hysteretic response, (b) cumulative dissipated energy, and (c) skeleton curve.}
\label{fig:CalibrationCurves}
\includegraphics[width=0.80\textwidth]{./Figures/plot_FEM_validation/FEM_validation_comparison.png}
\caption{Experimental--numerical validation of the BDSL model: hysteretic response (left) and cumulative dissipated energy (right).}
\label{fig:FEM_validation_comparison}
\end{figure}
Once validated, the FEM model is used to generate the datasets required for surrogate training and optimization. The optimization strategy relies on local damage indicators in the dissipative windows and surrounding frame, together with local distortion measures associated with the activation of the dissipative mechanism. Since these quantities are difficult to measure experimentally with sufficient spatial resolution, the use of a high-fidelity FEM model provides access to the internal state variables and local fields governing damage evolution and energy dissipation.
Once validated, the FEM model is used to generate the datasets required for surrogate training and optimization. The optimization strategy relies on local damage indicators in the dissipative windows and surrounding frame, together with local distortion measures associated with the activation of the dissipative mechanism. Since these quantities are difficult to measure experimentally, the use of a high-fidelity FEM model provides valuable access to the internal state variables and local fields governing damage evolution and energy dissipation.
The damage indicator adopted in this work is the Triaxial Failure Damage Map (TFDMap) \cite{Rastellini2016}. This stress-triaxiality-based indicator evaluates the proximity of each material point to ductile failure by comparing its stress triaxiality and accumulated equivalent plastic strain with a reference failure envelope \cite{Rice1969,Bao2004,Wierzbicki2005,Bai2008}. In this study, the TFDMap is used as a post-processing damage-screening indicator, not as a constitutive fracture criterion. Its purpose is therefore not to explicitly predict crack initiation, but to compare geometrical configurations and ensure that optimized designs remain within acceptable damage levels.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment