otko/examples/sdof_pushover.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

202 lines
No EOL
3.3 KiB
Text

{
"schema_version": 1,
"meta": {
"name": "SDOF Pushover",
"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",
"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": "Top",
"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
]
}
],
"materials": [
{
"id": 1,
"name": "HingeSteel",
"type": "Hysteretic",
"s1p": 50000.0,
"e1p": 0.002,
"s2p": 150000.0,
"e2p": 0.01,
"s3p": 165000.0,
"e3p": 0.05,
"s1n": -50000.0,
"e1n": -0.002,
"s2n": -150000.0,
"e2n": -0.01,
"s3n": -165000.0,
"e3n": -0.05,
"px": 1.0,
"py": 1.0,
"d1": 0.0,
"d2": 0.0,
"beta": 0.0
}
],
"sections": [
{
"id": 1,
"name": "W12x40",
"type": "ElasticSection",
"E": 200000000000.0,
"A": 0.0076,
"Iz": 0.0002,
"Iy": 4.5e-05,
"G": 80000000000.0,
"J": 8.5e-07
}
],
"elements": [
{
"id": 1,
"name": "Col",
"type": "ElasticBeamColumn",
"nodes": [
1,
2
],
"section_id": 1,
"geom_transf": "Linear",
"rho": 0.0
}
],
"time_series": [
{
"id": 1,
"name": "Ramp",
"type": "Linear",
"factor": 1.0
}
],
"load_patterns": [
{
"id": 1,
"name": "PushRef",
"type": "Plain",
"time_series_id": 1,
"nodal_loads": [
{
"node_id": 2,
"forces": [
1.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
}
],
"element_loads": []
}
],
"spectra": [],
"analyses": [
{
"id": 1,
"name": "Push-X",
"type": "Pushover",
"pattern_ids": [
1
],
"control_node": 2,
"control_dof": 1,
"target_disp": 0.1,
"step_size": 0.001,
"base_nodes": [
1
],
"system": "BandGeneral",
"constraints": "Plain",
"algorithm": "Newton",
"test": "NormDispIncr",
"tolerance": 1e-06,
"max_iter": 25
},
{
"id": 2,
"name": "Modal-3",
"type": "Modal",
"n_modes": 3,
"solver": "genBandArpack"
}
]
}