{
  "$defs": {
    "Axis": {
      "description": "A line through ``origin`` along ``direction``, in the authored model's frame.",
      "properties": {
        "origin": {
          "description": "`[mm]`: A point on the axis.",
          "properties": {
            "x": {
              "type": "number"
            },
            "y": {
              "type": "number"
            },
            "z": {
              "type": "number"
            }
          },
          "required": [
            "x",
            "y",
            "z"
          ],
          "title": "Origin",
          "type": "object"
        },
        "direction": {
          "description": "`[-]`: The axis direction; a scaled direction is the same axis.",
          "properties": {
            "x": {
              "type": "number"
            },
            "y": {
              "type": "number"
            },
            "z": {
              "type": "number"
            }
          },
          "required": [
            "x",
            "y",
            "z"
          ],
          "title": "Direction",
          "type": "object"
        }
      },
      "required": [
        "direction"
      ],
      "title": "Axis",
      "type": "object"
    },
    "Axisymmetric": {
      "description": "Solve the r\u2013z half-plane of a model symmetric about ``axis``: X = radial, Y = along the axis, Z = 0.",
      "properties": {
        "kind": {
          "const": "axisymmetric",
          "default": "axisymmetric",
          "description": "Discriminator that names this frame in a serialized config.",
          "title": "Kind",
          "type": "string"
        },
        "axis": {
          "$ref": "#/$defs/Axis",
          "default": {
            "origin": {
              "x": 0,
              "y": 0,
              "z": 0
            },
            "direction": {
              "x": 0.0,
              "y": 0.0,
              "z": 1.0
            }
          },
          "description": "The authored model's axis of symmetry."
        },
        "radial": {
          "anyOf": [
            {
              "description": "Unit direction {x, y, z}, normalized on load",
              "properties": {
                "x": {
                  "type": "number"
                },
                "y": {
                  "type": "number"
                },
                "z": {
                  "type": "number"
                }
              },
              "required": [
                "x",
                "y",
                "z"
              ],
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "`[-]`: The direction from the axis toward the sectioned half-plane, stored as its unit part perpendicular to the\naxis; None picks the world axis least aligned with the symmetry axis.",
          "title": "Radial"
        }
      },
      "title": "Axisymmetric",
      "type": "object"
    },
    "Solid": {
      "description": "Solve the authored 3D model as-is.",
      "properties": {
        "kind": {
          "const": "solid",
          "default": "solid",
          "description": "Discriminator that names this frame in a serialized config.",
          "title": "Kind",
          "type": "string"
        }
      },
      "title": "Solid",
      "type": "object"
    }
  },
  "additionalProperties": false,
  "description": "The typed outcome of one solve.\n\nQuantities stay pint-typed; they are stripped to floats only at the analysis boundary (``Study.to_dataframe``).",
  "properties": {
    "status": {
      "description": "Terminal state of the solve.",
      "enum": [
        "ok",
        "diverged",
        "error"
      ],
      "title": "Status",
      "type": "string"
    },
    "run_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The run's identity (== the manifest's ``run_id`` and the bundle directory name \u2014 the memorable name derived\nfrom the cache key); the driver stamps it after parsing, so a bare parse (no run lifecycle) leaves it None.",
      "title": "Run Id"
    },
    "run_dir": {
      "anyOf": [
        {
          "format": "path",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The bundle directory this result lives in, stamped by the driver and ``load_result``; never serialized, and None once retention removed the directory.",
      "title": "Run Dir"
    },
    "force": {
      "anyOf": [
        {
          "description": "vector pint quantity (Vec3 magnitude) with dimensionality [force]",
          "properties": {
            "x": {
              "type": "number"
            },
            "y": {
              "type": "number"
            },
            "z": {
              "type": "number"
            },
            "units": {
              "type": "string"
            }
          },
          "required": [
            "x",
            "y",
            "z",
            "units"
          ],
          "type": "object",
          "x-unit-dimensionality": "[force]"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "`F\u20d7` `[N]`: Net force on the moving array, as a vector pint quantity.",
      "title": "Force"
    },
    "torque": {
      "anyOf": [
        {
          "description": "vector pint quantity (Vec3 magnitude) with dimensionality [force]*[length]",
          "properties": {
            "x": {
              "type": "number"
            },
            "y": {
              "type": "number"
            },
            "z": {
              "type": "number"
            },
            "units": {
              "type": "string"
            }
          },
          "required": [
            "x",
            "y",
            "z",
            "units"
          ],
          "type": "object",
          "x-unit-dimensionality": "[force]*[length]"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "`M\u20d7` `[N\u00b7m]`: Net torque on the moving array, as a vector pint quantity.",
      "title": "Torque"
    },
    "flux_density_max": {
      "anyOf": [
        {
          "description": "pint quantity with dimensionality [mass]/[current]/[time]**2",
          "type": "string",
          "x-unit-dimensionality": "[mass]/[current]/[time]**2"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "`|B|_max` `[T]`: Peak flux density magnitude in the domain.",
      "title": "Flux Density Max"
    },
    "temperature_max": {
      "anyOf": [
        {
          "description": "pint quantity with dimensionality [temperature]",
          "type": "string",
          "x-unit-dimensionality": "[temperature]"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "`T_max` `[K]`: Peak temperature in the domain, from the thermal or coupled joule-heating solve \u2014 the max-current search observable.",
      "title": "Temperature Max"
    },
    "residual": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "`\u0394_rel` `[-]`: Final linear/nonlinear relative change reported by the solver.",
      "title": "Residual"
    },
    "wall_time": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "`t_wall` `[s]`: Solver wall-clock time.",
      "title": "Wall Time"
    },
    "elmer_version": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "ElmerSolver version parsed from the log, if present.",
      "title": "Elmer Version"
    },
    "frame": {
      "description": "The run's solve frame. Every vector stays in solve coordinates; under ``Axisymmetric`` the typed force/torque fields\nare full-revolution totals with the radial component zeroed (zero net by symmetry), while ``raw`` keeps Elmer's per-radian columns.",
      "discriminator": {
        "mapping": {
          "axisymmetric": "#/$defs/Axisymmetric",
          "solid": "#/$defs/Solid"
        },
        "propertyName": "kind"
      },
      "oneOf": [
        {
          "$ref": "#/$defs/Solid"
        },
        {
          "$ref": "#/$defs/Axisymmetric"
        }
      ],
      "title": "Frame"
    },
    "component_forces": {
      "additionalProperties": {
        "description": "vector pint quantity (Vec3 magnitude) with dimensionality [force]",
        "properties": {
          "x": {
            "type": "number"
          },
          "y": {
            "type": "number"
          },
          "z": {
            "type": "number"
          },
          "units": {
            "type": "string"
          }
        },
        "required": [
          "x",
          "y",
          "z",
          "units"
        ],
        "type": "object",
        "x-unit-dimensionality": "[force]"
      },
      "description": "`F\u20d7` `[N]`: Lumped magnetic force on each force-carrying sif Component, keyed by its ``components.yml`` name.",
      "title": "Component Forces",
      "type": "object"
    },
    "component_torques": {
      "additionalProperties": {
        "description": "vector pint quantity (Vec3 magnitude) with dimensionality [force]*[length]",
        "properties": {
          "x": {
            "type": "number"
          },
          "y": {
            "type": "number"
          },
          "z": {
            "type": "number"
          },
          "units": {
            "type": "string"
          }
        },
        "required": [
          "x",
          "y",
          "z",
          "units"
        ],
        "type": "object",
        "x-unit-dimensionality": "[force]*[length]"
      },
      "description": "`M\u20d7` `[N\u00b7m]`: Lumped magnetic torque (about the authored origin/axis) on each sif Component, keyed by its ``components.yml`` name.",
      "title": "Component Torques",
      "type": "object"
    },
    "raw": {
      "additionalProperties": {
        "type": "number"
      },
      "description": "`[?]`: Escape hatch for un-modelled scalars the parser found but Result doesn't type yet, in whatever unit Elmer printed them.",
      "title": "Raw",
      "type": "object"
    }
  },
  "required": [
    "status",
    "frame"
  ],
  "title": "Result",
  "type": "object"
}
