Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
feff10
Rust wrapper for FEFF10, a real-space multiple-scattering code for ab initio calculations of X-ray absorption spectra (EXAFS, XANES) and related properties.
Quick Start
// One-liner: parse, validate, and run
let result = run?;
for sr in &result.stages
Also accepts raw feff.inp text or a FeffInput object:
// From raw text
let content = read_to_string?;
let result = run_str?;
// From a FeffInput object
let mut inp = from_file?;
inp.s02 = Some;
let result = run_input?;
Validation
// Validate a file without running
validate?;
// Validate a FeffInput object
let inp = from_file?;
inp.validate?;
Checks: absorber potential (ipot=0) exists, atoms reference valid potentials, no duplicate ipot values, atomic numbers in range (1-103), and more.
Parser Behavior
- Uses FEFF-style 4-character keyword tokenization (same matching style as Fortran
itoken). - Accepts
include/loaddirectives infeff.inpfiles (FeffInput::from_file) with nested include support. - Treats full-line comments using FEFF prefixes
;,*,%,#. - Rejects unknown keywords (Fortran-compatible strict behavior).
Programmatic helpers:
let input = from_file?;
let resolved = input.resolve_defaults; // explicit defaults model
let typed = input.typed_cards; // typed per-card view
input.validate_fortran_rules?; // FEFF consistency.f90 card checks
Writers:
write_to()preserves parsed card order when card stream metadata is available.write_canonical()writes normalized CONTROL/PRINT + sections layout.
Full Control
For advanced use cases (custom stages, timeouts, progress callbacks), use the builder API:
use ;
use Duration;
let input = from_file?;
let config = new
.work_dir
.input
.stages
.stage_timeout
.build?;
let result = new.run_with_progress?;
Parsing Output
let result = run?;
let outputs = result.outputs?;
let xmu = result.read_xmu?; // convenience
let paths = result.read_paths?; // structured paths.dat parser
let chi = outputs.read_chi?; // via discovered output registry
let reference = from_file?;
let rsq = xmu.r_squared;
println!;
println!;
println!;
println!;
Stage isolation and path output
Each FEFF stage needs a fresh process because Fortran module allocations persist between calls. Rust applications should install the worker hook before application initialization:
StageIsolation::Auto forks on ordinary Unix hosts and uses workers on Windows
or in macOS hosts with an initialized NSApplication. A missing required worker
hook returns a configuration error before changing input files. Explicit Worker
also requires the hook. The CLI installs it automatically.
InProcess is only for a single stage in a fresh host process; it rejects
multi-stage pipelines and timeouts. Sequential calls can still retain allocations,
and a Fortran fatal error can terminate that host.
To request individual feffNNNN.dat files, use PRINT 0 0 0 0 0 3 and include the
ff2x stage. paths.dat contains enumerated paths; amplitude filtering can produce
fewer individual path files. For the bundled Cu input with RPATH 5.2, the regression
test checks 14 files, finite amplitudes, and first-path geometry.
Features
prebuilt— Skip Fortran compilation and use a prebuilt library
See the main project README for build instructions, benchmarks, and architecture details.