{
  "encoding": "Little-endian Fortran sequential unformatted; each record wrapped in equal4byte signed lengths. Integers int32 and reals float32; magic labels16ASCII bytes. Serialized active extents only.",
  "nx": 201,
  "ny": 201,
  "nz": 10,
  "order": "3D arrays are k,j,i with i fastest; reshape C-order (nz,ny,nx). 2D j,i. UB serialized k,side,j; VB k,side,i. W includes groundface when noted.",
  "timeMetadata": "ndathrb,nsecb,ndathre,nsece; the model interval date/hour and start/endseconds; exact CALMET field metadata reused.",
  "files": {
    "stages.bin": {
      "magic": "VST_UV_V1",
      "header": "16s,3i nx ny nz,2f dx dy",
      "staticRecords": [
        "ZFACE[nz+1] f32"
      ],
      "perSample": [
        "5i stage,timeMetadata",
        "U[nz,ny,nx]",
        "V[nz,ny,nx]"
      ],
      "samples": 120,
      "stages": {
        "1": "pre-FRADJ UG/VG (after disabled kinematics)",
        "2": "post-FRADJ UG/VG",
        "3": "post-slope-addition UG/VG",
        "4": "pre-SMOOTH U/V after no-observation transfer",
        "5": "post-SMOOTH U/V"
      }
    },
    "boundaries.bin": {
      "magic": "VST_BND_V1",
      "header": "16s,3i nx ny nz",
      "perSample": [
        "5i stage,timeMetadata",
        "UB[nz,2,ny] f32",
        "VB[nz,2,nx] f32"
      ],
      "samples": 48,
      "stages": {
        "1": "immediately before SMOOTH",
        "2": "after SMOOTH and Wzero, immediately before DIVCEL"
      }
    },
    "environment.bin": {
      "magic": "VST_ENV_V1",
      "header": "16s,3i nx ny nz",
      "perSample": [
        "6i stage,timeMetadata,ISURFT;2f TINF,CRITFN",
        "GAMMA[ny,nx]",
        "TEMP2D[ny,nx]",
        "HTOPO[ny,nx]",
        "HMAX[ny,nx]"
      ],
      "samples": 48,
      "stages": {
        "1": "pre-FRADJ",
        "2": "pre-SLOPE after heat-flux calculations"
      }
    },
    "slope.bin": {
      "magic": "VST_SLP_V1",
      "header": "16s,3i nx ny nz",
      "perSample": [
        "4i timeMetadata",
        "USLOPE[nz,ny,nx]",
        "VSLOPE[nz,ny,nx]",
        "QH[ny,nx]",
        "RHO[ny,nx]",
        "QSW[ny,nx]"
      ],
      "samples": 24,
      "qualification": "Captured immediately after SLOPE before addition. QH from actual SLOPE input stage; RHO/QSW supporting fields, not claimed direct slope inputs."
    },
    "before-divergence-w.bin": {
      "magic": "VST_W0_V1",
      "header": "16s,3i nx ny nz",
      "perSample": [
        "4i timeMetadata",
        "W[nz+1,ny,nx] including ground"
      ],
      "samples": 24,
      "expectation": "All zero, because DIVCEL is evaluated before integration."
    },
    "final.bin": {
      "magic": "VST_FIN_V1",
      "header": "16s,3i nx ny nz",
      "perSample": [
        "4i timeMetadata",
        "U[nz,ny,nx]",
        "V[nz,ny,nx]",
        "DIV[nz,ny,nx]",
        "W[nz+1,ny,nx] including ground"
      ],
      "samples": 24,
      "qualification": "At DIAGNOreturn after IOBR/MINIM branch (disabled). DIV is pre-integration horizontal divergence. U/V/W must match CALMET.DAT."
    },
    "static.bin": {
      "magic": "VST_STA_V1",
      "header": "16s,5i nx ny nz IWAT1 IWAT2,2f dx dy",
      "staticRecords": [
        "ZFACE[nz+1] f32",
        "HMIN[ny,nx] f32",
        "DISTHMAX[ny,nx] f32",
        "DISTHMIN[ny,nx] f32",
        "ILANDU[ny,nx] int32"
      ],
      "samples": 1
    }
  }
}
