|
Download docs/USAGE.md from aibergman/minducer: direct link, hf CLI and curl.
- Browser
- Download file 6.28 kB
-
https://huggingface.co/spaces/aibergman/minducer/resolve/main/docs/USAGE.md
- Command line
-
hf download hf://spaces/aibergman/minducer/docs/USAGE.md
-
curl -L -o USAGE.md https://huggingface.co/spaces/aibergman/minducer/resolve/main/docs/USAGE.md
6.28 kB
| # Usage guide | |
| ## Install | |
| The interactive application includes all optional runtime dependencies: | |
| ```bash | |
| python -m pip install -r requirements.txt | |
| python app.py | |
| ``` | |
| For the library and command-line inspector only: | |
| ```bash | |
| python -m pip install -e . | |
| python -m pip install -e '.[symmetry,paths]' | |
| ``` | |
| The second command adds `spglib` for symmetry expansion and `seekpath` for | |
| standard high-symmetry paths. Run tests with `PYTHONPATH=src pytest -q`. | |
| ## Prepare an UppASD input set | |
| The loader uses the literal UppASD ordered-pair convention | |
| `H = -sum_(i != j) Jij e_i·e_j`. Do not halve or double values from a | |
| pair-complete jfile. Conversion helpers for other Hamiltonian conventions are | |
| available as `convert_exchange_to_uppasd` at the Python API boundary. | |
| The loader starts from `inpsd.dat`, which must name the position, moment, and | |
| exchange files and provide the cell for reciprocal-space work: | |
| ```text | |
| simid FePtFM25 | |
| ncell 12 12 12 | |
| BC P P P | |
| cell 1.0 0.0 0.0 | |
| 0.5 0.5 0.0 | |
| 0.0 0.0 0.9525 | |
| alat 2.87e-10 | |
| posfile ./posfile | |
| exchange ./jfile | |
| momfile ./momfile | |
| ``` | |
| Paths are resolved relative to `inpsd.dat`. Canonical UppASD keywords are | |
| `posfile`, `momfile`, and `exchange`; `positions`, `moments`, and `jfile` are | |
| accepted as fallback aliases. | |
| `posfile` stores a basis-site number, atom type, and position. By default the | |
| three position values are Cartesian (`posfiletype C`). With `posfiletype D`, | |
| they are direct/fractional coordinates and are converted using the cell: | |
| ```text | |
| posfiletype D | |
| ``` | |
| ```text | |
| # site atom_type x y z | |
| 1 1 0.0 0.0 0.0 | |
| ``` | |
| The `jfile` vector convention is selected with `maptype` (default `1`): | |
| - `maptype 1`: the vector is already a bond vector; it is Cartesian for | |
| `posfiletype C` and direct/fractional for `posfiletype D`. | |
| - `maptype 2`: the vector contains lattice-translation coefficients and the | |
| folded basis-position difference is added. | |
| - `maptype 3`: the vector contains lattice-translation coefficients and the | |
| raw, pre-folded basis-position difference is added. | |
| For maptypes 2 and 3, `ncell N1 N2 N3` and `BC P/F P/F P/F` optionally enable | |
| periodic offset reduction or free-boundary range checks. Cell vectors are rows | |
| and all mapped exchange vectors are stored as Cartesian vectors internally. | |
| The input readers consume the required leading fields and ignore trailing | |
| columns or text. This applies to recognized `inpsd.dat` records, `posfile`, | |
| `momfile`, and `jfile` rows. `inpsd.dat` keywords not used by this package are | |
| also silently ignored, so a deck may retain settings intended for other | |
| UppASD executables. | |
| `momfile` stores the reference moment in `mu_B`, optionally followed by a | |
| spin direction: | |
| ```text | |
| # site moment_field moment [sx sy sz] | |
| 1 1 2.9913824 0.0 0.0 1.0 | |
| ``` | |
| The atom type in `posfile` identifies species for symmetry handling. The | |
| second `momfile` field is UppASD metadata, not a species identifier. | |
| The exchange file stores scalar isotropic exchange: | |
| ```text | |
| # i j rx ry rz Jij [distance] | |
| 1 1 0.5 0.5 0.0 12.5 0.70710678 | |
| ``` | |
| The displacement is used exactly as supplied. The optional distance is checked | |
| only as a diagnostic. | |
| ## Use the web application | |
| 1. Run `python app.py` and open the local address printed by Gradio. | |
| 2. In **Input**, choose a bundled example or upload `inpsd.dat` plus its | |
| referenced files. Browser uploads are matched by basename; inspect and | |
| correct the mapping if needed. | |
| 3. Confirm the input energy unit. Choose **symmetry-reduced** only when the | |
| exchange file contains orbit representatives rather than all neighbours. | |
| 4. Review the proposed robust/induced sites and change them to match your | |
| physical model. The moment-size suggestion is not a physical conclusion. | |
| 5. Run the analysis. The tabs show raw exchange, induced response, dressed | |
| exchange, and FM magnon diagnostics; all successful-analysis data can be | |
| downloaded from the application. | |
| Warnings are part of the result. In particular, address unresolved files, | |
| asymmetric reciprocal bonds, ill-conditioned induced response, and a | |
| path-restricted ordering candidate before drawing physical conclusions. | |
| ## Inspect input on the command line | |
| ```bash | |
| induced-exchange-uppasd examples/fept_style/inpsd.dat | |
| ``` | |
| Specify units or expand a symmetry-reduced exchange file explicitly: | |
| ```bash | |
| induced-exchange-uppasd examples/uppasd_style/inpsd.dat \ | |
| --energy-unit meV --expand-symmetry | |
| ``` | |
| ## Python workflow | |
| ```python | |
| from induced_exchange import ( | |
| InducedExchangeDownfolding, | |
| InducedMomentResponse, | |
| exchange_eigensystem, | |
| fm_magnon_spectrum, | |
| high_symmetry_path, | |
| load_uppasd, | |
| ) | |
| loaded = load_uppasd("examples/fept_style/inpsd.dat", energy_unit="mRy") | |
| model = loaded.model | |
| path = high_symmetry_path(model, n_per_segment=16) | |
| raw = exchange_eigensystem(model, path.q_fractional, coordinates="fractional") | |
| response = InducedMomentResponse( | |
| model, | |
| robust_sites=[1], | |
| induced_sites=[2], | |
| mode="j_weighted", | |
| x={2: 0.12}, # or leave unset and inspect response.infer_x() | |
| ) | |
| downfolded = InducedExchangeDownfolding(response).evaluate( | |
| path.q_fractional, coordinates="fractional" | |
| ) | |
| magnons = fm_magnon_spectrum( | |
| downfolded, | |
| model="mryasov", | |
| moment_magnitudes=[model.site_by_index[1].moment], | |
| input_energy_unit=model.units.energy, | |
| ) | |
| ``` | |
| Use real site indices from the input, not zero-based array offsets. Read the | |
| warnings and conditioning fields on returned objects. For a complete ordering | |
| search, replace the path with `regular_q_mesh(model, (16, 16, 16), | |
| coordinates="fractional")`. | |
| ## Compare datasets | |
| To compare two exchange models sharing the same structure: | |
| ```python | |
| from induced_exchange import ExchangeDataset, compare_exchange_datasets | |
| a = ExchangeDataset(model_a, label="dataset A", robust_sites=[1], induced_sites=[2], x=0.12) | |
| b = ExchangeDataset(model_b, label="dataset B", robust_sites=[1], induced_sites=[2], x=0.12) | |
| result = compare_exchange_datasets(a, b, path.q_fractional, include_magnons=True) | |
| result.export("results", prefix="a_vs_b") | |
| ``` | |
| Compatibility checks deliberately distinguish incompatible geometry/site | |
| layouts from expected differences in exchange values. The comparison is a | |
| diagnostic; it does not assign causal blame to either input dataset. | |