Spherical Extrapolations#
Spherical runs use data.geometry: spherical and train a global or large-field-of-view volume in spherical coordinates. They are intended for full-disk vector maps, synoptic maps, and combined full-disk plus synoptic constraints.
The full-disk plus synoptic bundled config name is:
nf2/spherical/hmi_full_disk.yaml
How The YAML Is Configured#
Spherical YAML files set data.geometry: spherical, define an outer radius, then list map boundaries:
path: "<<run_path>>"
work_path: "<<work_path>>"
data:
geometry: spherical
max_radius: 1.3
boundaries:
- id: full_disk
type: map
files:
Br: "<<full_disk_Br>>"
Bt: "<<full_disk_Bt>>"
Bp: "<<full_disk_Bp>>"
- id: synoptic
type: map
files:
Br: "<<synoptic_Br>>"
Bt: "<<synoptic_Bt>>"
Bp: "<<synoptic_Bp>>"
Fill the placeholders from the command line:
nf2-extrapolate \
--config nf2/spherical/hmi_full_disk.yaml \
--run_path ./runs/hmi_spherical \
--work_path ./runs/hmi_spherical/work \
--full_disk_Br ./data/full_disk/Br.fits \
--full_disk_Bt ./data/full_disk/Bt.fits \
--full_disk_Bp ./data/full_disk/Bp.fits \
--full_disk_Br_err ./data/full_disk/Br_err.fits \
--full_disk_Bt_err ./data/full_disk/Bt_err.fits \
--full_disk_Bp_err ./data/full_disk/Bp_err.fits \
--synoptic_Br ./data/synoptic/Br.fits \
--synoptic_Bt ./data/synoptic/Bt.fits \
--synoptic_Bp ./data/synoptic/Bp.fits
For a fixed local config, write the file paths directly in the YAML:
data:
geometry: spherical
max_radius: 1.3
boundaries:
- id: full_disk
type: map
files:
Br: ./data/full_disk/Br.fits
Bt: ./data/full_disk/Bt.fits
Bp: ./data/full_disk/Bp.fits
Spherical Single-Run Example#
Spherical runs combine full-disk HMI vector data with synoptic maps and train in a spherical coordinate volume. The example config is nf2/spherical/hmi_full_disk.yaml.
1. Download Full-Disk HMI Data#
This command downloads a full-disk vector field and converts it to spherical Br/Bt/Bp components through JSOC’s HmiB2ptr processing step.
nf2-download \
--source hmi_full_disk \
--download_dir "./data/hmi_spherical/full_disk" \
--email "you@example.org" \
--t_start 2011-02-15T00:00:00 \
--series B_720s
2. Download Carrington Synoptic Maps#
nf2-download \
--source hmi_synoptic \
--download_dir "./data/hmi_spherical/synoptic" \
--email "you@example.org" \
--t_start "2011-02-15T00:00:00" \
--series b_synoptic \
--segments Br,Bt,Bp
You can also pass --carrington_rotation directly. Use --synoptic_product mr_polfil to download files such as hmi.synoptic_mr_polfil_720s.2173.Mr_polfil.fits.
3. Run The Spherical Config#
Fill the placeholders with the downloaded files. The full-disk error placeholders point to optional uncertainty maps; omit the --full_disk_*_err arguments if those files are not available.
nf2-extrapolate \
--config "nf2/spherical/hmi_full_disk.yaml" \
--run_path "./runs/spherical_hmi" \
--work_path "./runs/spherical_hmi/work" \
--wandb_project "nf2" \
--run_name "Spherical HMI" \
--full_disk_Br "./data/hmi_spherical/full_disk/*Br.fits" \
--full_disk_Bt "./data/hmi_spherical/full_disk/*Bt.fits" \
--full_disk_Bp "./data/hmi_spherical/full_disk/*Bp.fits" \
--full_disk_Br_err "./data/hmi_spherical/full_disk/*Br_err.fits" \
--full_disk_Bt_err "./data/hmi_spherical/full_disk/*Bt_err.fits" \
--full_disk_Bp_err "./data/hmi_spherical/full_disk/*Bp_err.fits" \
--synoptic_Br "./data/hmi_spherical/synoptic/*Br.fits" \
--synoptic_Bt "./data/hmi_spherical/synoptic/*Bt.fits" \
--synoptic_Bp "./data/hmi_spherical/synoptic/*Bp.fits"
4. Memory Notes#
Spherical runs are usually heavier than compact Cartesian cutouts. Reduce batch_size, n_lat_lon_sample, validation sampling, or radial/latitude/longitude ranges if you hit out-of-memory errors.
Boundary Data#
The map dataset reads spherical Br, Bt, and Bp maps. Error maps can be supplied under errors; NF2 merges them into the dataset internally:
boundaries:
- id: full_disk
type: map
batch_size: 8192
requires_jacobian: false
files:
Br: "<<full_disk_Br>>"
Bt: "<<full_disk_Bt>>"
Bp: "<<full_disk_Bp>>"
errors:
Br_err: "<<full_disk_Br_err>>"
Bt_err: "<<full_disk_Bt_err>>"
Bp_err: "<<full_disk_Bp_err>>"
mask_configs:
type: mu_filter
min: 0.2
The mask_configs block is commonly used to suppress low-confidence limb pixels in full-disk observations. Synoptic maps usually omit the error files and mask.
Samplers, Validation, And Losses#
If data.samplers is omitted, NF2 adds a random_radial_grouped sampler. For explicit control:
data:
iterations: 10000
samplers:
- id: random
type: random_radial_grouped
batch_size: 16384
n_lat_lon_sample: 64
radial_sampling_exponent: 2
validation:
- id: sphere
type: sphere
resolution: 128
- id: slices
type: spherical_slices
longitude_resolution: 128
n_slices: 5
Spherical losses usually combine boundary matching with volume regularization:
losses:
- type: boundary
name: boundary
weight: 1.0
datasets: [full_disk, synoptic]
- type: force_free
name: force_free
weight: { start: 1.0e-4, end: 1.0e-2, iterations: 50000 }
datasets: [random]
- type: potential
name: potential
weight: { start: 1.0e-4, end: 1.0e-2, iterations: 50000 }
datasets: [random]
Use loss_scaling.type: radial to scale selected volume losses across radius.
Python API#
Use nf2.run(...) with geometry: spherical for programmatic runs:
import nf2
nf2.run(
path="./runs/hmi_spherical",
data={
"geometry": "spherical",
"max_radius": 1.3,
"boundaries": [
{
"id": "full_disk",
"type": "map",
"files": {
"Br": "./data/full_disk/Br.fits",
"Bt": "./data/full_disk/Bt.fits",
"Bp": "./data/full_disk/Bp.fits",
},
},
{
"id": "synoptic",
"type": "map",
"files": {
"Br": "./data/synoptic/Br.fits",
"Bt": "./data/synoptic/Bt.fits",
"Bp": "./data/synoptic/Bp.fits",
},
},
],
},
training={"epochs": 100},
)
The primary output helper is selected automatically by nf2.load(...):
from astropy import units as u
import nf2
out = nf2.load("./runs/hmi_spherical/extrapolation_result.nf2")
volume = out.load_spherical(
radius_range=[1.0, 1.3] * u.solRad,
sampling=[100, 180, 360],
metrics=["j", "alpha"],
)