Avaliação do piloto update–forecast

Modelo: linhas; medições: pontos. Mesmas referências provisórias. Dados anteriores preservados e observações atualizadas em 29/10. Sem novas simulações, ajuste de parâmetros, deslocamento de relógios ou preenchimento de lacunas.

CicloEstaçãonRMSE (cm)Obs−modelo (cm)
update_20261027Cantareira B5778.974.48
update_20261028Cantareira B5769.76.16
forecast_20261028_qconstantCantareira B0nannan
update_20261027Cais dos Banhos7713.56-0.71
update_20261028Cais dos Banhos2914.74-0.18
forecast_20261028_qconstantCais dos Banhos0nannan

O forecast foi calculado depois de T0 e usa caudal constante: confronto diagnóstico, não demonstração de previsão operacional independente. A igualdade na sobreposição verifica reprodutibilidade com os mesmos dados.

Evidências completas

{
  "state": "PILOT_REVIEW_COMPLETED_WITH_LIMITATIONS",
  "created_utc": "2026-10-29T09:24:28.187550+00:00",
  "no_simulations_rerun": true,
  "references_unchanged": true,
  "observation_coverage": {
    "Cantareira B": {
      "n": 864,
      "start_utc": "2026-10-25T00:00:00Z",
      "end_utc": "2026-10-27T23:55:00Z",
      "changed_values_from_previous_snapshot": 0,
      "gaps_filled": false
    },
    "Cais dos Banhos": {
      "n": 77,
      "start_utc": "2026-10-25T00:00:00Z",
      "end_utc": "2026-10-26T14:00:00Z",
      "changed_values_from_previous_snapshot": 0,
      "gaps_filled": false
    }
  },
  "metrics": [
    {
      "cycle": "update_20261027",
      "station": "Cantareira B",
      "selection": "whole_window",
      "n": 577,
      "start_utc": "2026-10-25T00:00:00Z",
      "end_utc": "2026-10-27T00:00:00Z",
      "bias_m": 0.04476595895357778,
      "rmse_m": 0.0896513436382326,
      "centered_rmse_m": 0.07767478571008135,
      "correlation": 0.9973699273680854,
      "residual_definition": "observation minus model",
      "paired_span_hours": 48.0,
      "dominant_amplitude_model_over_observed": 0.9799534444506585,
      "model_lag_minutes": 5.984868175750937,
      "harmonic_caution": "Single 12.4206h proxy, not resolved M2/S2"
    },
    {
      "cycle": "update_20261027",
      "station": "Cantareira B",
      "selection": "after_calibration_26Oct",
      "n": 289,
      "start_utc": "2026-10-26T00:00:00Z",
      "end_utc": "2026-10-27T00:00:00Z",
      "bias_m": 0.03815565473692021,
      "rmse_m": 0.08545700909024698,
      "centered_rmse_m": 0.0764659820720789,
      "correlation": 0.9977977285045512,
      "residual_definition": "observation minus model",
      "paired_span_hours": 24.0,
      "dominant_amplitude_model_over_observed": 0.9669403779148187,
      "model_lag_minutes": 5.591756074653009,
      "harmonic_caution": "Single 12.4206h proxy, not resolved M2/S2"
    },
    {
      "cycle": "update_20261028",
      "station": "Cantareira B",
      "selection": "whole_window",
      "n": 576,
      "start_utc": "2026-10-26T00:00:00Z",
      "end_utc": "2026-10-27T23:55:00Z",
      "bias_m": 0.06158349397632344,
      "rmse_m": 0.09697314260160815,
      "centered_rmse_m": 0.07490836839566031,
      "correlation": 0.9978076320157383,
      "residual_definition": "observation minus model",
      "paired_span_hours": 47.916666666666664,
      "dominant_amplitude_model_over_observed": 0.9754626252243537,
      "model_lag_minutes": 5.018096533283624,
      "harmonic_caution": "Single 12.4206h proxy, not resolved M2/S2"
    },
    {
      "cycle": "update_20261028",
      "station": "Cantareira B",
      "selection": "after_calibration_26Oct",
      "n": 576,
      "start_utc": "2026-10-26T00:00:00Z",
      "end_utc": "2026-10-27T23:55:00Z",
      "bias_m": 0.06158349397632344,
      "rmse_m": 0.09697314260160815,
      "centered_rmse_m": 0.07490836839566031,
      "correlation": 0.9978076320157383,
      "residual_definition": "observation minus model",
      "paired_span_hours": 47.916666666666664,
      "dominant_amplitude_model_over_observed": 0.9754626252243537,
      "model_lag_minutes": 5.018096533283624,
      "harmonic_caution": "Single 12.4206h proxy, not resolved M2/S2"
    },
    {
      "cycle": "forecast_20261028_qconstant",
      "station": "Cantareira B",
      "selection": "whole_window",
      "n": 0,
      "start_utc": null,
      "end_utc": null
    },
    {
      "cycle": "forecast_20261028_qconstant",
      "station": "Cantareira B",
      "selection": "after_calibration_26Oct",
      "n": 0,
      "start_utc": null,
      "end_utc": null
    },
    {
      "cycle": "update_20261027",
      "station": "Cais dos Banhos",
      "selection": "whole_window",
      "n": 77,
      "start_utc": "2026-10-25T00:00:00Z",
      "end_utc": "2026-10-26T14:00:00Z",
      "bias_m": -0.007084847565034945,
      "rmse_m": 0.13555581372110737,
      "centered_rmse_m": 0.13537054173110108,
      "correlation": 0.9952560854025497,
      "residual_definition": "observation minus model",
      "paired_span_hours": 38.0,
      "dominant_amplitude_model_over_observed": 0.9153665082007099,
      "model_lag_minutes": 9.24558687962224,
      "harmonic_caution": "Single 12.4206h proxy, not resolved M2/S2"
    },
    {
      "cycle": "update_20261027",
      "station": "Cais dos Banhos",
      "selection": "after_calibration_26Oct",
      "n": 29,
      "start_utc": "2026-10-26T00:00:00Z",
      "end_utc": "2026-10-26T14:00:00Z",
      "bias_m": -0.0017725747818846393,
      "rmse_m": 0.14742803382889372,
      "centered_rmse_m": 0.14741737732471047,
      "correlation": 0.9946847651724217,
      "residual_definition": "observation minus model",
      "paired_span_hours": 14.0
    },
    {
      "cycle": "update_20261028",
      "station": "Cais dos Banhos",
      "selection": "whole_window",
      "n": 29,
      "start_utc": "2026-10-26T00:00:00Z",
      "end_utc": "2026-10-26T14:00:00Z",
      "bias_m": -0.0017725747818846393,
      "rmse_m": 0.14742803382889372,
      "centered_rmse_m": 0.14741737732471047,
      "correlation": 0.9946847651724217,
      "residual_definition": "observation minus model",
      "paired_span_hours": 14.0
    },
    {
      "cycle": "update_20261028",
      "station": "Cais dos Banhos",
      "selection": "after_calibration_26Oct",
      "n": 29,
      "start_utc": "2026-10-26T00:00:00Z",
      "end_utc": "2026-10-26T14:00:00Z",
      "bias_m": -0.0017725747818846393,
      "rmse_m": 0.14742803382889372,
      "centered_rmse_m": 0.14741737732471047,
      "correlation": 0.9946847651724217,
      "residual_definition": "observation minus model",
      "paired_span_hours": 14.0
    },
    {
      "cycle": "forecast_20261028_qconstant",
      "station": "Cais dos Banhos",
      "selection": "whole_window",
      "n": 0,
      "start_utc": null,
      "end_utc": null
    },
    {
      "cycle": "forecast_20261028_qconstant",
      "station": "Cais dos Banhos",
      "selection": "after_calibration_26Oct",
      "n": 0,
      "start_utc": null,
      "end_utc": null
    }
  ],
  "forcing_transitions": [
    {
      "to": "update_20261028",
      "at_utc": "2026-10-26T00:00:00Z",
      "Atlantic_": {
        "preceding_cycle_at_same_time": 0.698583342405,
        "new_cycle_initial": 0.698583342405,
        "difference": 0.0
      },
      "Crestuma_": {
        "preceding_cycle_at_same_time": 0.0,
        "new_cycle_initial": 0.0,
        "difference": 0.0
      }
    },
    {
      "to": "forecast_20261028_qconstant",
      "at_utc": "2026-10-28T00:00:00Z",
      "Atlantic_": {
        "preceding_cycle_at_same_time": -0.208416700675,
        "new_cycle_initial": -0.208416700675,
        "difference": 0.0
      },
      "Crestuma_": {
        "preceding_cycle_at_same_time": 469.66,
        "new_cycle_initial": 469.66,
        "difference": 0.0
      }
    }
  ],
  "numerical_QA": {
    "update_20261027": {
      "gate": "PASS",
      "checks": {
        "inputs_unchanged": true,
        "exact_duration": true,
        "finite_active_levels": true,
        "boundary_Q": true,
        "closed_walls_zero_flux": true,
        "finite_bounded_speed": true,
        "mass_balance": true,
        "restart_exists": true,
        "restart_exact_UTC": true
      },
      "finished_check_utc": "2026-10-28T10:37:16.013643+00:00",
      "duration_seconds": 172800,
      "map_frames": 577,
      "max_Q_error_m3s": 7.568359376364242e-05,
      "max_volume_error_m3": 3.361701965332031e-05,
      "max_closed_wall_flux_m3s": 0.0,
      "missing_active_levels": 0,
      "max_speed_ms": 8.056971549987793,
      "max_water_level_m": 2.2211806774139404,
      "max_northern_water_level_m": 1.8422024250030518,
      "expected_river_volume_m3": 17876232.0,
      "map_sampled_river_volume_m3": 17947344.007873535,
      "volume_sampling_note": "MAP five-minute quadrature is diagnostic; boundary jumps may require endpoint convention review; exact target from hourly BC",
      "restart": "[ficheiro local]
      "scientific_validation": false,
      "spinup_gate": "PHYSICAL_REVIEW_REQUIRED; 48h duration alone does not establish spinup convergence",
      "update_automatic_launch": false,
      "interpretation": "Cold initialization excluded from update. Review extrema, final state and forcing continuity before admitting restart."
    },
    "update_20261028": {
      "gate": "PASS",
      "checks": {
        "inputs_unchanged": true,
        "exact_duration": true,
        "finite_active_levels": true,
        "boundary_Q": true,
        "closed_walls_zero_flux": true,
        "finite_bounded_speed": true,
        "mass_balance": true,
        "restart_exists": true,
        "restart_exact_UTC": true
      },
      "finished_check_utc": "2026-10-28T14:53:40.836956+00:00",
      "duration_seconds": 172800,
      "map_frames": 577,
      "max_Q_error_m3s": 0.0001220703125,
      "max_volume_error_m3": 3.0875205993652344e-05,
      "max_closed_wall_flux_m3s": 0.0,
      "missing_active_levels": 0,
      "max_speed_ms": 8.056971549987793,
      "max_water_level_m": 2.8228492736816406,
      "max_northern_water_level_m": 1.8422024250030518,
      "expected_river_volume_m3": 48421728.0,
      "map_sampled_river_volume_m3": 48562625.97885132,
      "volume_sampling_note": "MAP five-minute quadrature is diagnostic; boundary jumps may require endpoint convention review; exact target from hourly BC",
      "restart": "[ficheiro local]
      "scientific_validation": false,
      "spinup_gate": "PHYSICAL_REVIEW_REQUIRED; 48h duration alone does not establish spinup convergence",
      "update_automatic_launch": false,
      "interpretation": "Cold initialization excluded from update. Review extrema, final state and forcing continuity before admitting restart."
    },
    "forecast_20261028_qconstant": {
      "gate": "PASS",
      "checks": {
        "inputs_unchanged": true,
        "exact_duration": true,
        "finite_active_levels": true,
        "boundary_Q": true,
        "closed_walls_zero_flux": true,
        "finite_bounded_speed": true,
        "mass_balance": true,
        "restart_exists": true,
        "restart_exact_UTC": true
      },
      "finished_check_utc": "2026-10-28T18:16:08.070471+00:00",
      "duration_seconds": 259200,
      "map_frames": 865,
      "max_Q_error_m3s": 6.46972655999889e-05,
      "max_volume_error_m3": 2.682209014892578e-05,
      "max_closed_wall_flux_m3s": 0.0,
      "missing_active_levels": 0,
      "max_speed_ms": 8.445511817932129,
      "max_water_level_m": 2.267791748046875,
      "max_northern_water_level_m": 1.7824652194976807,
      "expected_river_volume_m3": 121735871.99999999,
      "map_sampled_river_volume_m3": 121735872.30834961,
      "volume_sampling_note": "MAP five-minute quadrature is diagnostic; boundary jumps may require endpoint convention review; exact target from hourly BC",
      "restart": "[ficheiro local]
      "scientific_validation": false,
      "spinup_gate": "PHYSICAL_REVIEW_REQUIRED; 48h duration alone does not establish spinup convergence",
      "update_automatic_launch": false,
      "interpretation": "Cold initialization excluded from update. Review extrema, final state and forcing continuity before admitting restart."
    }
  },
  "forecast_is_constant_Q_scenario": true,
  "forecast_issue_not_T0": "Computed 28Oct afternoon, not archived operational forecast at midnight",
  "limitations": [
    "Empirical vertical reference, no independent levelling",
    "Synthetic deepening awaiting measured bathymetry",
    "One T0 cannot establish operational forecast skill",
    "Native speed extrema require local wet-depth review",
    "Brown overlay upstream Arrabida is a viewer defect, not dry model at selected face"
  ]
}

Continuidade nativa

{
  "restart_transitions": [
    {
      "to": "update_20261027",
      "time_utc": "2026-10-25T00:00:00Z",
      "checks": {
        "mesh2d_s1": {
          "valid_pairs": 70341,
          "max_abs_difference": 0.0,
          "rms_difference": 0.0,
          "mask_changes": 0
        },
        "mesh2d_waterdepth": {
          "valid_pairs": 104043,
          "max_abs_difference": 0.0,
          "rms_difference": 0.0,
          "mask_changes": 0
        },
        "mesh2d_ucmag": {
          "valid_pairs": 104043,
          "max_abs_difference": 0.0,
          "rms_difference": 0.0,
          "mask_changes": 0
        },
        "restart_copy_identical": true
      }
    },
    {
      "to": "update_20261028",
      "time_utc": "2026-10-26T00:00:00Z",
      "checks": {
        "mesh2d_s1": {
          "valid_pairs": 69589,
          "max_abs_difference": 0.0,
          "rms_difference": 0.0,
          "mask_changes": 0
        },
        "mesh2d_waterdepth": {
          "valid_pairs": 104043,
          "max_abs_difference": 0.0,
          "rms_difference": 0.0,
          "mask_changes": 0
        },
        "mesh2d_ucmag": {
          "valid_pairs": 104043,
          "max_abs_difference": 0.0,
          "rms_difference": 0.0,
          "mask_changes": 0
        },
        "restart_copy_identical": true
      }
    },
    {
      "to": "forecast_20261028_qconstant",
      "time_utc": "2026-10-28T00:00:00Z",
      "checks": {
        "mesh2d_s1": {
          "valid_pairs": 66415,
          "max_abs_difference": 0.0,
          "rms_difference": 0.0,
          "mask_changes": 0
        },
        "mesh2d_waterdepth": {
          "valid_pairs": 104043,
          "max_abs_difference": 0.0,
          "rms_difference": 0.0,
          "mask_changes": 0
        },
        "mesh2d_ucmag": {
          "valid_pairs": 104043,
          "max_abs_difference": 0.0,
          "rms_difference": 0.0,
          "mask_changes": 0
        },
        "restart_copy_identical": true
      }
    }
  ],
  "rolling_overlap": {
    "mesh2d_s1": {
      "common_5minute_frames": 289,
      "max_abs_difference": 0.001381993293762207,
      "mask_changes": 0
    },
    "mesh2d_waterdepth": {
      "common_5minute_frames": 289,
      "max_abs_difference": 0.001381993293762207,
      "mask_changes": 0
    },
    "mesh2d_ucmag": {
      "common_5minute_frames": 289,
      "max_abs_difference": 0.0,
      "mask_changes": 0
    }
  },
  "same_forcings_not_independent_validation": true
}

Conclusão da revisão

Restarts contínuos em nível, profundidade e velocidade; nenhuma alteração de máscara inicial. Na sobreposição dos updates, diferença máxima de nível de 1,382 mm. Oceano, caudal e vento/pressão contínuos em T0. Calibração mantida para uso piloto dos níveis, com referências verticais provisórias. Picos de velocidade de 8,06 m/s nos updates e 7,08 m/s no forecast são isolados e contrastam com as velocidades das arestas; requerem revisão da reconstrução/geometria local. Não são velocidades físicas validadas.

Próxima fase: resultados FEWS no gémeo

O objetivo é apresentar os resultados do Delft3D clássico já executado pelo FEWS. Não se pretende ativar o FM no FEWS operacional. O levantamento encontrou mapas e séries exportados, mas os cabeçalhos ASCII usam índices M/N: a georreferenciação e a orientação devem ser verificadas antes da publicação. Ainda não há cenário clássico publicado.