{
  "page": "https://arunshar.com/projects/pcrf/",
  "review_date": "2026-10-01",
  "files": {
    "serving_bench_a100.json": {
      "source": "results/serving_bench_a100.json",
      "sha256": "575ca49ae8c69b1a215f03ada77f3d0e4463aeca29d3934e672f20506d365247"
    },
    "serving_bench_a100_tf32off.json": {
      "source": "results/serving_bench_a100_tf32off.json",
      "sha256": "f255ef0fb55cfa50d1376dd121c9a935bca856e876ba43053dd14fb8367696d4"
    },
    "scaling_results.csv": {
      "source": "results/scaling_a100_4/scaling_results.csv",
      "sha256": "9764240423c48a61a81cb13e8363e74105fb5ff58688cb0f0f7b90a595cd0f2f"
    },
    "pytorch2026.pdf": {
      "source": "Previously prepared conference PDF, output/pdf/pcrf_pytorchconf2026_redesign.pdf",
      "sha256": "f1fe88e39093c158a8718acb76ffe544d2b25987dc99ad1f3398ed5597175370",
      "pages": 24,
      "scope": "The PDF preserves the conference version. Later scientific scope corrections appear on the project page."
    }
  },
  "architecture": {
    "source_files": [
      "src/pcrf/model.py",
      "src/pcrf/flow.py",
      "src/pcrf/data.py",
      "talks/NUMBERS.md"
    ],
    "params": 7565251,
    "state_channels": 3,
    "conditioning_channels": 7,
    "zero_filled_conditioning_channels": 4,
    "fine_tile": [
      128,
      128
    ],
    "levels": [
      128,
      64,
      32
    ],
    "bottleneck": [
      16,
      16
    ],
    "base": 64,
    "attention": "Self-attention at the 32-by-32 level and bottleneck.",
    "FiLM": "Time-only modulation after the input convolution.",
    "conditioning": "Concatenated upsampled coarse precipitation and wind, plus four zero-filled channels.",
    "Sentinel_2_results": false
  },
  "benchmark_method": {
    "source_files": [
      "apps/training/bench_serving.py",
      "apps/training/bench_serving.sbatch",
      "talks/NUMBERS.md"
    ],
    "recorded_source_revision": "ecaba28",
    "weights": "random",
    "velocity_warmups": 10,
    "velocity_iterations": 100,
    "full_sample_warmups": 2,
    "full_sample_iterations": 30,
    "Euler_steps": 20,
    "timing_boundary": "CUDA-synchronized local backend execution. Full sample includes host Euler integration and terminal projection.",
    "excluded": [
      "export compilation",
      "input generation",
      "HTTP",
      "gRPC",
      "queueing",
      "cold startup",
      "Ray Serve",
      "Go and Temporal",
      "LLM agent"
    ],
    "ONNX_copy_scope": "Every velocity call includes host input and output copies.",
    "CPU_threads": "The script requests 16 CPU cores. Actual thread counts are not recorded in JSON."
  },
  "scaling": {
    "source_files": [
      "results/scaling_a100_4/PROVENANCE.md",
      "apps/training/train_ray.py",
      "tests/test_train_ray_ddp.py",
      "talks/NUMBERS.md"
    ],
    "run_date": "2026-09-23",
    "data": "synthetic",
    "topology": "One A100 node, corrected DDP.",
    "workers": [
      1,
      2,
      4
    ],
    "batch_per_worker": 32,
    "epochs": 40,
    "fine": 128,
    "base": 64,
    "throughput": "All-reduced sample count divided by slowest-rank epoch duration.",
    "efficiency": "throughput(W)/(W*throughput(1))",
    "old_eight_worker_results": "Invalid as data-parallel scaling; not reproduced here."
  },
  "implementation_scope": {
    "source_files": [
      "src/pcrf/physics.py",
      "src/pcrf/serving/math.py",
      "services/inference-rs/src/physics.rs",
      "apps/training/SERVING_SMOKE.md",
      "apps/training/serve_ray.py",
      "services/gateway-go/README.md",
      "agent/README.md"
    ],
    "updated_local_projection": "Training/evaluation code supports masks, area weights, block constraints, and uniform fallback.",
    "legacy_numpy_projection": "Positive coarse mean is divided by max(clamped mean, 1e-8). A nonpositive target skips rescaling.",
    "legacy_rust_projection": "The projection skips rescaling when clamped mean is at most 1e-8. A nonpositive target skips rescaling.",
    "legacy_serving_MCE": "The legacy helper reports zero when the target magnitude is below 1e-8. It can hide dry-target failures.",
    "serving_update": "The separate conference serving copies have not received the newer projection fallback.",
    "Rust_artifact": "ONNX Runtime; no evidence that Rust executes the AOTInductor package.",
    "Ray_Serve": "The recorded small CPU smoke uses the root-path app. The request-coalescing handler processes individual requests sequentially.",
    "Go_Temporal": "Implemented orchestration lies outside the A100 timed boundary.",
    "LLM_agent": "vLLM or SGLang serves a separate language model that calls the downscaler as a tool.",
    "production_deployment_claim": false
  },
  "scientific_scope": {
    "source_record": "Later research handoff Section 5 and completed Stage A report.",
    "climate_tables": "Superseded archival records. The page does not reuse their numbers.",
    "baseline_superiority": "Not established. Old baseline configurations were invalid.",
    "penalty_benefit": "No established detectable climate-skill benefit.",
    "divergence": "Old ERA5 DE values are invalid as physical divergence.",
    "ERA5_Land_reference": "Interpolated precipitation forcing does not establish independent fine-scale predictive skill.",
    "time_window_mismatch": "The old loader compared mismatched accumulation windows.",
    "checkpoints": "Old climate outputs cannot currently be re-derived from the surviving metric files.",
    "projection_novelty": "The global rescale is prior art.",
    "references": [
      "https://jmlr.org/papers/v24/23-0158.html",
      "https://www.nature.com/articles/s42256-022-00540-1",
      "https://confluence.ecmwf.int/display/CKB/ERA5-Land%3A+data+documentation"
    ]
  },
  "proposed_study": {
    "source_record": "Later research plan and Stage A report.",
    "status": "Proposed evaluation improvements, not a committed paper direction or completed model experiment.",
    "data_pair": "Independent-reference ERA5 to IMERG, with self-coarsened ERA5 control.",
    "windows": "Matching six-hour precipitation accumulations.",
    "factors": "Penalty on/off crossed with projection on/off; matched baseline projection and budgets.",
    "metrics": "Precipitation-only fixed-range quality, fair CRPS, per-member and per-block validity, paired pre/post projection scores, and projection statistics.",
    "uncertainty": "Seeded pilot and paired day-block resampling.",
    "available_foundations": "Local data-window, remap, projection and evaluation utilities. Their existence is not a trained-model result."
  },
  "public_resources": {
    "materials_repo": "https://github.com/arunshar/pcrf-aias2026-talk",
    "implementation_public": false,
    "released_paper": {
      "url": "https://github.com/arunshar/pcrf-aias2026-talk/blob/main/paper/PCRF_AIAS2026_paper.pdf",
      "title": "Physics-Constrained Rectified Flow for Climate Downscaling",
      "pages": 13,
      "sha256": "aa1ede9122dd21aca2232d9831ad23e47397bbd680820f18ff345b6f2382ad57",
      "scope": "Already-public anonymous conference version, not a newly published private revision."
    },
    "AIAS_video": "https://www.youtube.com/watch?v=xyiUB-ehX8g",
    "PyTorch_video": "https://www.youtube.com/watch?v=k1FH2Pu953w",
    "PyTorch_artifact": "https://claude.ai/artifact/2zHx8smgcUjfj8VfGPDK82"
  },
  "interactive_example": {
    "source": "static/js/pcrf.js, illustrative browser calculation designed for this page.",
    "scientific_measurement": false,
    "candidate_fields": {
      "mixed": [
        -1,
        1,
        2,
        6
      ],
      "all_clamped": [
        -1,
        -2,
        -1,
        -1
      ],
      "uniform": [
        3,
        3,
        3,
        3
      ],
      "different_pattern": [
        1,
        5,
        5,
        1
      ]
    },
    "default_target_mean": 3
  }
}
