Skip to main content

ParamDocument

Struct ParamDocument 

Source
pub struct ParamDocument {
Show 18 fields pub general: GeneralParams, pub electronic: ElectronicParams, pub basis_set: BasisSetParams, pub exchange_correlation: ExchangeCorrelationParams, pub electronic_minimisation: ElectronicMinimisationParams, pub geometry_optimization: GeometryOptimizationParams, pub phonon: PhononParams, pub band_structure: BandStructureParams, pub molecular_dynamics: MolecularDynamicsParams, pub electric_field: ElectricFieldParams, pub pseudopotential: PseudopotentialParams, pub density_mixing: DensityMixingParams, pub population_analysis: PopulationAnalysisParams, pub optics: OpticsParams, pub nmr: NmrParams, pub solvation: SolvationParams, pub electronic_excitations: ElectronicExcitationsParams, pub transition_state: TransitionStateParams,
}
Expand description

Complete representation of a CASTEP .param file.

This is the primary type for working with CASTEP parameter files. It organizes the 100+ CASTEP parameters into 18 logical groups, making it easier to discover related parameters and maintain the codebase.

§Organization

Each field represents a group of related parameters. All groups default to empty (all parameters None), allowing you to specify only the parameters you need.

§Validation

The document automatically validates inter-group constraints during parsing:

  • Band count parameters (NBANDS, NEXTRA_BANDS, PERC_EXTRA_BANDS) are mutually exclusive
  • Band structure parameters (BS_NBANDS, BS_NEXTRA_BANDS, BS_PERC_EXTRA_BANDS) are mutually exclusive
  • Optics parameters (OPTICS_NBANDS, OPTICS_NEXTRA_BANDS, OPTICS_PERC_EXTRA_BANDS) are mutually exclusive

Each parameter group also validates its own internal constraints.

§Construction

Use the builder pattern (via bon):

use castep_cell_io::ParamDocument;

let doc = ParamDocument::builder()
    .general(Default::default())
    .electronic(Default::default())
    .basis_set(Default::default())
    .exchange_correlation(Default::default())
    .electronic_minimisation(Default::default())
    .geometry_optimization(Default::default())
    .phonon(Default::default())
    .band_structure(Default::default())
    .molecular_dynamics(Default::default())
    .electric_field(Default::default())
    .pseudopotential(Default::default())
    .density_mixing(Default::default())
    .population_analysis(Default::default())
    .optics(Default::default())
    .nmr(Default::default())
    .solvation(Default::default())
    .electronic_excitations(Default::default())
    .transition_state(Default::default())
    .build();

Or use Default for an empty document:

use castep_cell_io::ParamDocument;

let doc = ParamDocument::default();
assert!(doc.general.task.is_none());

§Parsing and Serialization

Implements FromCellFile for parsing and ToCellFile for serialization. Parsing automatically applies validation.

See the module-level documentation for examples.

Fields§

§general: GeneralParams

General calculation parameters.

Controls task type, output verbosity, continuation, and runtime limits. See GeneralParams for available parameters.

§electronic: ElectronicParams

Electronic structure parameters.

Controls charge, spin, band counts, and electronic smearing. See ElectronicParams for available parameters.

§basis_set: BasisSetParams

Basis set parameters.

Controls plane-wave cutoff energy and finite basis corrections. See BasisSetParams for available parameters.

§exchange_correlation: ExchangeCorrelationParams

Exchange-correlation functional parameters.

Controls XC functional choice, spin polarization, and DFT+U. See ExchangeCorrelationParams for available parameters.

§electronic_minimisation: ElectronicMinimisationParams

Electronic minimization (SCF) parameters.

Controls SCF convergence criteria and mixing schemes. See ElectronicMinimisationParams for available parameters.

§geometry_optimization: GeometryOptimizationParams

Geometry optimization parameters.

Controls optimization method and convergence criteria. See GeometryOptimizationParams for available parameters.

§phonon: PhononParams

Phonon calculation parameters.

Controls phonon calculation settings and convergence. See PhononParams for available parameters.

§band_structure: BandStructureParams

Band structure calculation parameters.

Controls band structure calculation settings. See BandStructureParams for available parameters.

§molecular_dynamics: MolecularDynamicsParams

Molecular dynamics parameters.

Controls MD ensemble, timestep, temperature, and thermostat. See MolecularDynamicsParams for available parameters.

§electric_field: ElectricFieldParams

Electric field parameters.

Controls finite electric field calculations. See ElectricFieldParams for available parameters.

§pseudopotential: PseudopotentialParams

Pseudopotential parameters.

Controls pseudopotential generation and testing. See PseudopotentialParams for available parameters.

§density_mixing: DensityMixingParams

Density mixing parameters.

Controls charge density mixing during SCF. See DensityMixingParams for available parameters.

§population_analysis: PopulationAnalysisParams

Population analysis parameters.

Controls Mulliken and Hirshfeld population analysis. See PopulationAnalysisParams for available parameters.

§optics: OpticsParams

Optical properties parameters.

Controls optical property calculations. See OpticsParams for available parameters.

§nmr: NmrParams

NMR parameters.

Controls NMR chemical shift calculations. See NmrParams for available parameters.

§solvation: SolvationParams

Solvation parameters.

Controls implicit solvent models. See SolvationParams for available parameters.

§electronic_excitations: ElectronicExcitationsParams

Electronic excitations parameters.

Controls excited state calculations. See ElectronicExcitationsParams for available parameters.

§transition_state: TransitionStateParams

Transition state search parameters.

Controls transition state search methods. See TransitionStateParams for available parameters.

Implementations§

Source§

impl ParamDocument

Source

pub fn builder() -> ParamDocumentBuilder

Create an instance of ParamDocument using the builder syntax

Trait Implementations§

Source§

impl Clone for ParamDocument

Source§

fn clone(&self) -> ParamDocument

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ParamDocument

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for ParamDocument

Source§

fn default() -> ParamDocument

Returns the “default value” for a type. Read more
Source§

impl FromCellFile for ParamDocument

Source§

fn from_cell_file(tokens: &[Cell<'_>]) -> CResult<Self>

Parse a ParamDocument from a slice of parsed Cell tokens.

This method is called by [castep_cell_fmt::parse] after tokenizing the input text. It delegates parsing to each parameter group, then validates the complete document.

§Parsing Strategy

Each parameter group independently scans the token stream for its keywords. This allows parameters to appear in any order in the file. Unknown keywords are silently ignored (CASTEP’s behavior).

§Validation

After parsing all groups, validation is automatically called to check inter-group and intra-group constraints.

§Errors

Returns Error if:

  • Any parameter value is malformed
  • Validation constraints are violated
  • Required parameter combinations are missing
§Example
use castep_cell_io::ParamDocument;

let input = r#"
TASK : GeometryOptimization
XC_FUNCTIONAL : PBE
CUT_OFF_ENERGY : 500 eV
"#;

let doc = castep_cell_fmt::parse::<ParamDocument>(input)?;
Source§

impl ToCellFile for ParamDocument

Source§

fn to_cell_file(&self) -> Vec<Cell<'_>>

Serialize this document to a vector of Cell tokens.

Converts the structured document back to the token representation used by castep_cell_fmt. The tokens can then be formatted to text with castep_cell_fmt::format.

§Group Order

Parameters are emitted in a standard order matching the field declaration order:

  1. General parameters
  2. Electronic structure
  3. Basis set
  4. Exchange-correlation
  5. Electronic minimization
  6. Geometry optimization
  7. Phonon calculations
  8. Band structure
  9. Molecular dynamics
  10. Electric field
  11. Pseudopotentials
  12. Density mixing
  13. Population analysis
  14. Optics
  15. NMR
  16. Solvation
  17. Electronic excitations
  18. Transition state search

Parameters that are None are omitted from the output.

§Example
use castep_cell_io::ParamDocument;
use castep_cell_fmt::{ToCellFile, format::to_string_many_spaced};

let doc = ParamDocument::default();
let cells = doc.to_cell_file();
let output = to_string_many_spaced(&cells);

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<'src, T> IntoMaybe<'src, T> for T
where T: 'src,

Source§

type Proj<U: 'src> = U

Source§

fn map_maybe<R>( self, _f: impl FnOnce(&'src T) -> &'src R, g: impl FnOnce(T) -> R, ) -> <T as IntoMaybe<'src, T>>::Proj<R>
where R: 'src,

Source§

impl<T> Paint for T
where T: ?Sized,

Source§

fn fg(&self, value: Color) -> Painted<&T>

Returns a styled value derived from self with the foreground set to value.

This method should be used rarely. Instead, prefer to use color-specific builder methods like red() and green(), which have the same functionality but are pithier.

§Example

Set foreground color to white using fg():

use yansi::{Paint, Color};

painted.fg(Color::White);

Set foreground color to white using white().

use yansi::Paint;

painted.white();
Source§

fn primary(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Primary].

§Example
println!("{}", value.primary());
Source§

fn fixed(&self, color: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Fixed].

§Example
println!("{}", value.fixed(color));
Source§

fn rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Rgb].

§Example
println!("{}", value.rgb(r, g, b));
Source§

fn black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Black].

§Example
println!("{}", value.black());
Source§

fn red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Red].

§Example
println!("{}", value.red());
Source§

fn green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Green].

§Example
println!("{}", value.green());
Source§

fn yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Yellow].

§Example
println!("{}", value.yellow());
Source§

fn blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Blue].

§Example
println!("{}", value.blue());
Source§

fn magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Magenta].

§Example
println!("{}", value.magenta());
Source§

fn cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Cyan].

§Example
println!("{}", value.cyan());
Source§

fn white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: White].

§Example
println!("{}", value.white());
Source§

fn bright_black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlack].

§Example
println!("{}", value.bright_black());
Source§

fn bright_red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightRed].

§Example
println!("{}", value.bright_red());
Source§

fn bright_green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightGreen].

§Example
println!("{}", value.bright_green());
Source§

fn bright_yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightYellow].

§Example
println!("{}", value.bright_yellow());
Source§

fn bright_blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlue].

§Example
println!("{}", value.bright_blue());
Source§

fn bright_magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.bright_magenta());
Source§

fn bright_cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightCyan].

§Example
println!("{}", value.bright_cyan());
Source§

fn bright_white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightWhite].

§Example
println!("{}", value.bright_white());
Source§

fn bg(&self, value: Color) -> Painted<&T>

Returns a styled value derived from self with the background set to value.

This method should be used rarely. Instead, prefer to use color-specific builder methods like on_red() and on_green(), which have the same functionality but are pithier.

§Example

Set background color to red using fg():

use yansi::{Paint, Color};

painted.bg(Color::Red);

Set background color to red using on_red().

use yansi::Paint;

painted.on_red();
Source§

fn on_primary(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Primary].

§Example
println!("{}", value.on_primary());
Source§

fn on_fixed(&self, color: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Fixed].

§Example
println!("{}", value.on_fixed(color));
Source§

fn on_rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Rgb].

§Example
println!("{}", value.on_rgb(r, g, b));
Source§

fn on_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Black].

§Example
println!("{}", value.on_black());
Source§

fn on_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Red].

§Example
println!("{}", value.on_red());
Source§

fn on_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Green].

§Example
println!("{}", value.on_green());
Source§

fn on_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Yellow].

§Example
println!("{}", value.on_yellow());
Source§

fn on_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Blue].

§Example
println!("{}", value.on_blue());
Source§

fn on_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Magenta].

§Example
println!("{}", value.on_magenta());
Source§

fn on_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Cyan].

§Example
println!("{}", value.on_cyan());
Source§

fn on_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: White].

§Example
println!("{}", value.on_white());
Source§

fn on_bright_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlack].

§Example
println!("{}", value.on_bright_black());
Source§

fn on_bright_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightRed].

§Example
println!("{}", value.on_bright_red());
Source§

fn on_bright_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightGreen].

§Example
println!("{}", value.on_bright_green());
Source§

fn on_bright_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightYellow].

§Example
println!("{}", value.on_bright_yellow());
Source§

fn on_bright_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlue].

§Example
println!("{}", value.on_bright_blue());
Source§

fn on_bright_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.on_bright_magenta());
Source§

fn on_bright_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightCyan].

§Example
println!("{}", value.on_bright_cyan());
Source§

fn on_bright_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightWhite].

§Example
println!("{}", value.on_bright_white());
Source§

fn attr(&self, value: Attribute) -> Painted<&T>

Enables the styling Attribute value.

This method should be used rarely. Instead, prefer to use attribute-specific builder methods like bold() and underline(), which have the same functionality but are pithier.

§Example

Make text bold using attr():

use yansi::{Paint, Attribute};

painted.attr(Attribute::Bold);

Make text bold using using bold().

use yansi::Paint;

painted.bold();
Source§

fn bold(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Bold].

§Example
println!("{}", value.bold());
Source§

fn dim(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Dim].

§Example
println!("{}", value.dim());
Source§

fn italic(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Italic].

§Example
println!("{}", value.italic());
Source§

fn underline(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Underline].

§Example
println!("{}", value.underline());

Returns self with the attr() set to [Attribute :: Blink].

§Example
println!("{}", value.blink());

Returns self with the attr() set to [Attribute :: RapidBlink].

§Example
println!("{}", value.rapid_blink());
Source§

fn invert(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Invert].

§Example
println!("{}", value.invert());
Source§

fn conceal(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Conceal].

§Example
println!("{}", value.conceal());
Source§

fn strike(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Strike].

§Example
println!("{}", value.strike());
Source§

fn quirk(&self, value: Quirk) -> Painted<&T>

Enables the yansi Quirk value.

This method should be used rarely. Instead, prefer to use quirk-specific builder methods like mask() and wrap(), which have the same functionality but are pithier.

§Example

Enable wrapping using .quirk():

use yansi::{Paint, Quirk};

painted.quirk(Quirk::Wrap);

Enable wrapping using wrap().

use yansi::Paint;

painted.wrap();
Source§

fn mask(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Mask].

§Example
println!("{}", value.mask());
Source§

fn wrap(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Wrap].

§Example
println!("{}", value.wrap());
Source§

fn linger(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Linger].

§Example
println!("{}", value.linger());
Source§

fn clear(&self) -> Painted<&T>

👎Deprecated since 1.0.1:

renamed to resetting() due to conflicts with Vec::clear(). The clear() method will be removed in a future release.

Returns self with the quirk() set to [Quirk :: Clear].

§Example
println!("{}", value.clear());
Source§

fn resetting(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Resetting].

§Example
println!("{}", value.resetting());
Source§

fn bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Bright].

§Example
println!("{}", value.bright());
Source§

fn on_bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: OnBright].

§Example
println!("{}", value.on_bright());
Source§

fn whenever(&self, value: Condition) -> Painted<&T>

Conditionally enable styling based on whether the Condition value applies. Replaces any previous condition.

See the crate level docs for more details.

§Example

Enable styling painted only when both stdout and stderr are TTYs:

use yansi::{Paint, Condition};

painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);
Source§

fn new(self) -> Painted<Self>
where Self: Sized,

Create a new Painted with a default Style. Read more
Source§

fn paint<S>(&self, style: S) -> Painted<&Self>
where S: Into<Style>,

Apply a style wholesale to self. Any previous style is replaced. Read more
Source§

impl<'p, T> Seq<'p, T> for T
where T: Clone,

Source§

type Item<'a> = &'a T where T: 'a

The item yielded by the iterator.
Source§

type Iter<'a> = Once<&'a T> where T: 'a

An iterator over the items within this container, by reference.
Source§

fn seq_iter(&self) -> <T as Seq<'p, T>>::Iter<'_>

Iterate over the elements of the container.
Source§

fn contains(&self, val: &T) -> bool
where T: PartialEq,

Check whether an item is contained within this sequence.
Source§

fn to_maybe_ref<'b>(item: <T as Seq<'p, T>>::Item<'b>) -> Maybe<T, &'p T>
where 'p: 'b,

Convert an item of the sequence into a MaybeRef.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> OrderedSeq<'_, T> for T
where T: Clone,