otko/examples/portal_frame.osmodel
smill f361fee969 feat: named case-result load combinations with full GUI support
Snapshots the current development tree, headlined by proper load
combinations (user request): a reusable LoadCombination entity of
weighted completed static-case results (e.g. 1.2xDead + 1.6xLive).

- core: LoadCombination/LoadCombinationItem entities, Project
  integration (lookup, unique ids, reference validation)
- services: combinations.py (linear superposition + envelope),
  exported via services __init__
- commands: undoable Add/Delete/Update for combinations
- GUI: Load Combinations manager dialog, Run-dialog evaluation,
  envelope display in Results panel, Combinations tab in Table dock
- tests: unit coverage (validation, math, error paths) + integration
  superposition check vs a single factored run
2026-09-11 13:19:59 -04:00

516 lines
No EOL
8.3 KiB
Text

{
"schema_version": 1,
"meta": {
"name": "Portal Frame",
"description": "",
"author": "Ozan",
"units": "SI (m, N, kg, s, Pa)"
},
"ndm": 3,
"ndf": 6,
"coord_systems": [
{
"name": "Global",
"coord": {
"origin": [
0.0,
0.0,
0.0
],
"rotation_deg": [
0.0,
0.0,
0.0
]
},
"grid": {
"x_grid_lines": [],
"y_grid_lines": [],
"z_grid_lines": [],
"visible": true,
"is_general": false,
"hide_all": false,
"glue_to_grid": false,
"bubble_size": 20
}
}
],
"nodes": [
{
"id": 1,
"name": "Base-L",
"coords": [
0.0,
0.0,
0.0
],
"mass": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
"restraint": [
true,
true,
true,
true,
true,
true
]
},
{
"id": 2,
"name": "Base-R",
"coords": [
6.0,
0.0,
0.0
],
"mass": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
"restraint": [
true,
true,
true,
true,
true,
true
]
},
{
"id": 3,
"name": "Top-L",
"coords": [
0.0,
0.0,
3.0
],
"mass": [
5000.0,
5000.0,
5000.0,
0.0,
0.0,
0.0
],
"restraint": [
false,
false,
false,
false,
false,
false
]
},
{
"id": 4,
"name": "Top-R",
"coords": [
6.0,
0.0,
3.0
],
"mass": [
5000.0,
5000.0,
5000.0,
0.0,
0.0,
0.0
],
"restraint": [
false,
false,
false,
false,
false,
false
]
}
],
"materials": [
{
"id": 1,
"name": "S420",
"type": "Steel01",
"Fy": 420000000.0,
"E0": 200000000000.0,
"b": 0.01,
"a1": null,
"a2": null,
"a3": null,
"a4": null
}
],
"sections": [
{
"id": 1,
"name": "W14x90",
"type": "ElasticSection",
"E": 200000000000.0,
"A": 0.017,
"Iz": 0.000416,
"Iy": 0.000129,
"G": 80000000000.0,
"J": 2.04e-06
}
],
"elements": [
{
"id": 1,
"name": "Col-L",
"type": "ElasticBeamColumn",
"nodes": [
1,
3
],
"section_id": 1,
"geom_transf": "Linear",
"rho": 0.0
},
{
"id": 2,
"name": "Col-R",
"type": "ElasticBeamColumn",
"nodes": [
2,
4
],
"section_id": 1,
"geom_transf": "Linear",
"rho": 0.0
},
{
"id": 3,
"name": "Beam",
"type": "ElasticBeamColumn",
"nodes": [
3,
4
],
"section_id": 1,
"geom_transf": "Linear",
"rho": 0.0
}
],
"time_series": [
{
"id": 1,
"name": "Ramp",
"type": "Linear",
"factor": 1.0
},
{
"id": 2,
"name": "SineGust",
"type": "Path",
"factor": 1.0,
"dt": 0.01,
"times": null,
"values": [
0.0,
0.06279051952931337,
0.12533323356430426,
0.1873813145857246,
0.2486898871648548,
0.3090169943749474,
0.3681245526846779,
0.42577929156507266,
0.4817536741017153,
0.5358267949789967,
0.5877852522924731,
0.6374239897486896,
0.6845471059286886,
0.7289686274214116,
0.7705132427757893,
0.8090169943749473,
0.8443279255020151,
0.8763066800438637,
0.9048270524660196,
0.9297764858882513,
0.9510565162951535,
0.9685831611286311,
0.9822872507286886,
0.9921147013144778,
0.9980267284282716,
1.0,
0.9980267284282716,
0.9921147013144779,
0.9822872507286887,
0.9685831611286311,
0.9510565162951536,
0.9297764858882515,
0.9048270524660195,
0.8763066800438635,
0.844327925502015,
0.8090169943749475,
0.7705132427757893,
0.7289686274214114,
0.6845471059286888,
0.6374239897486899,
0.5877852522924732,
0.535826794978997,
0.4817536741017152,
0.4257792915650729,
0.36812455268467814,
0.3090169943749475,
0.24868988716485524,
0.18738131458572457,
0.12533323356430454,
0.06279051952931358,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
"file_path": null
}
],
"load_patterns": [
{
"id": 1,
"name": "Lateral",
"type": "Plain",
"time_series_id": 1,
"nodal_loads": [
{
"node_id": 3,
"forces": [
50000.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
}
],
"element_loads": []
},
{
"id": 2,
"name": "SineGustPattern",
"type": "Plain",
"time_series_id": 2,
"nodal_loads": [
{
"node_id": 3,
"forces": [
100000.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
}
],
"element_loads": []
}
],
"spectra": [],
"analyses": [
{
"id": 1,
"name": "Linear-Static",
"type": "Static",
"pattern_ids": [
1
],
"n_steps": 1,
"load_factor_increment": 1.0,
"system": "BandGeneral",
"constraints": "Plain",
"integrator": "LoadControl",
"algorithm": "Linear",
"test": "NormDispIncr",
"tolerance": 1e-08,
"max_iter": 25
},
{
"id": 2,
"name": "Modal-3",
"type": "Modal",
"n_modes": 3,
"solver": "genBandArpack"
},
{
"id": 3,
"name": "Sine-Gust-2s",
"type": "Transient",
"pattern_ids": [
2
],
"dt": 0.01,
"n_steps": 200,
"system": "BandGeneral",
"constraints": "Plain",
"integrator": "Newmark",
"integrator_params": [
0.5,
0.25
],
"algorithm": "Newton",
"test": "NormDispIncr",
"tolerance": 1e-06,
"max_iter": 25,
"rayleigh_alpha_m": 0.0,
"rayleigh_beta_k": 0.0
}
]
}