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
196 lines
5.8 KiB
HTML
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'>× </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>
|