Files
Atomizer/examples/bracket/bracket_sim1-solution_1_Solution_Monitor_Graphs.html

196 lines
5.8 KiB
HTML
Raw Normal View History

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
<!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>