Files
Atomizer/examples/bracket/bracket_sim1-solution_1_Solution_Monitor_Graphs.html
Claude 4afb46327a feat: Add complete Bracket example with validated OP2 extraction
Added complete working example with all NX result files for testing
and validation of the OP2 result extractor.

Files Added (examples/bracket/):
- Bracket.prt: Part geometry with expressions
- Bracket_sim1.sim: Simulation definition (SOL 101 Linear Statics)
- Bracket_fem1.fem: Finite element mesh
- bracket_sim1-solution_1.op2: Binary results (666 KB)
- bracket_sim1-solution_1.f06: ASCII results log
- bracket_sim1-solution_1.dat: Nastran input deck
- Supporting files: .diag, .f04, .log, .html, .png

Validated Results from OP2:
✓ Max Displacement: 0.362 mm (node 91)
  - Primary direction: -Z (-0.354 mm)
  - Load application point

✓ Max von Mises Stress: 122.91 MPa (element 79, CHEXA)
  - Material: Aluminum 6061-T6 (yield = 276 MPa)
  - Safety Factor: 2.25  SAFE
  - Well below yield strength

Units Handling:
- NX units: mm, mN (milli-newton), kg
- Stress in OP2: mN/mm² = kPa
- Conversion required: kPa / 1000 = MPa
- Displacement: mm (direct)

Model Properties:
- Analysis Type: SOL 101 Linear Statics
- Elements: 585 (CHEXA hexahedral)
- Load: ~1000 N in -Z direction (3 application points)
- Constraints: Fixed supports at base
- Material: Al 6061-T6

Optimization Potential:
Current design has good margins:
- Displacement: 0.36 mm (could allow up to ~1.0 mm)
- Stress: 122.91 MPa (could allow up to ~200 MPa)
→ Weight reduction opportunity while maintaining safety!

This validates:
- pyNastran OP2 extraction works correctly
- Units conversion handling (mN → N, kPa → MPa)
- Multi-objective optimization is feasible
- Example ready for testing optimization workflow
2025-11-15 14:52:15 +00:00

196 lines
5.8 KiB
HTML

<!DOCTYPE html>
<!-- saved from url=(0014)about:internet -->
<html>
<head>
<title>Solution Monitor Graphs</title>
<script type = "text/javascript">
var isPluginLoaded = false;
function PluginLoaded() {
isPluginLoaded = true;
}
</script>
<script src = "plotly-latest.min.js" onload="PluginLoaded()"></script>
<script src = "file:///C:/Program Files/Siemens/NX2412/nxcae_extras/tmg/js/plotly-latest.min.js" onload="PluginLoaded()"></script>
<script src = "https://cdn.plot.ly/plotly-latest.min.js" onload="PluginLoaded()"></script>
</head>
<body>
<div id = 'Sparse Matrix Solver'></div>
<script>
var xData = [
[1,3,8,11,16,18,21,23,25,29,31,34,37,38,40,43,46,52,56,58,60]
];
var yData = [
[15,81,189,243,336,390,462,558,612,702,783,855,963,1008,1071,1143,1224,1296,1386,1458,1602]
];
var colors = ['rgba( 12, 36, 97,1.0)','rgba(106,176, 76,1.0)','rgba(179, 57, 57,1.0)',
'rgba(250,152, 58,1.0)','rgba(115,115,115,1.0)','rgba( 49,130,189,1.0)','rgba(189,189,189,1.0)'];
var colors2 = ['rgba( 12, 36, 97,0.5)','rgba(106,176, 76,0.5)','rgba(179, 57, 57,0.5)',
'rgba(250,152, 58,0.5)','rgba(115,115,115,0.5)','rgba( 49,130,189,0.5)','rgba(189,189,189,0.5)'];
var lineSize = [2, 4, 2, 2, 2, 2];
var labels = [''];
var data = [];
for (var i = 0; i < xData.length; i++) {
var result = {
x: xData[i],
y : yData[i],
type : 'scatter',
showlegend: true,
legendgroup: labels[i],
mode : 'lines',
name : labels[i],
line : {
color: colors[i],
width : lineSize[i]
}
};
var result2 = {
x: [xData[i][0], xData[i][20]],
y : [yData[i][0], yData[i][20]],
type : 'scatter',
showlegend: false,
legendgroup: labels[i],
mode : 'markers',
name : '',
hoverinfo : 'skip',
marker : {
color: colors2[i],
size : 12
}
};
data.push(result, result2);
}
var layout = {
height : 900,
width : 1200,
xaxis : {
showline: true,
showgrid : false,
zeroline : false,
showticklabels : true,
linecolor : 'rgb(204,204,204)',
linewidth : 2,
autotick : true,
ticks : 'outside',
tickcolor : 'rgb(204,204,204)',
tickwidth : 2,
ticklen : 5,
tickfont : {
family: 'Arial',
size : 12,
color : 'rgb(82, 82, 82)'
}
},
yaxis: {
showline: true,
showgrid : false,
zeroline : false,
showticklabels : true,
linecolor : 'rgb(204,204,204)',
linewidth : 2,
autotick : true,
ticks : 'outside',
tickcolor : 'rgb(204,204,204)',
tickwidth : 2,
ticklen : 5,
tickfont : {
family: 'Arial',
size : 12,
color : 'rgb(82, 82, 82)'
},
},
autosize : false,
margin : {
autoexpand: true,
l : 100,
r : 150,
t : 110
},
annotations : [
{
xref: 'paper',
yref : 'paper',
x : 0.0,
y : 1.05,
xanchor : 'left',
yanchor : 'bottom',
text : 'Sparse Matrix Solver',
font : {
family: 'Arial',
size : 30,
color : 'rgb(37,37,37)'
},
showarrow : false
},
{
xref: 'paper',
yref : 'paper',
x : 0.5,
y : -0.1,
xanchor : 'center',
yanchor : 'top',
text : 'Supernode',
showarrow : false,
font : {
family: 'Arial',
size : 22,
color : 'rgb(150,150,150)'
}
}
]
};
for (var i = 0; i < xData.length; i++) {
var result = {
xref: 'paper',
x : 0.05,
y : yData[i][0],
text : yData[i][0],
xanchor : 'right',
yanchor : 'middle',
showarrow : false,
clicktoshow : 'onout',
font : {
family: 'Arial',
size : 16,
color : 'black'
}
};
var result2 = {
xref: 'paper',
x : 0.95,
y : yData[i][20],
text : yData[i][20],
xanchor : 'left',
yanchor : 'middle',
font : {
family: 'Arial',
size : 16,
color : 'black'
},
showarrow : false,
clicktoshow : 'onout'
};
layout.annotations.push(result, result2);
}
var config = {responsive: true,
displaylogo: false};
Plotly.newPlot('Sparse Matrix Solver', data, layout, config);
</script>
<div class="plotly" id="plotly">
<span onclick="document.getElementById('plotly').style.display='none'" class='none'>&times; </span>
<p>The Javascript file required for visualization is not located<br>
in the current directory.Please follow the link:<br>
<a href="https://cdn.plot.ly/plotly-latest.min.js" target="_blank">plotly-latest.min.js</a></p>
Click Control + S and save it to the current directory.
</div>
<script>
if (!isPluginLoaded) {
document.getElementById('plotly').style.margin="10px 10% 60px 50%";
}
else {
document.getElementById('plotly').style.display='none';
}
</script>
</body>
</html>