schrodinger.application.matsci.anharmonic module

Utilities for the anharmonic corrections workflow.

Copyright Schrodinger, LLC. All rights reserved.

class schrodinger.application.matsci.anharmonic.SeqData(start, step, n_points)

Bases: tuple

n_points

Alias for field number 2

start

Alias for field number 0

step

Alias for field number 1

schrodinger.application.matsci.anharmonic.get_seq_data(options, flag)

Return a sequence data for the given flag.

Parameters:
  • options (argparse.Namespace) – the options

  • flag (str) – the flag

Return type:

SeqData

Returns:

the sequence data

schrodinger.application.matsci.anharmonic.evaluate_f(x, deriv_idx, coeffs)

Evaluate the nth derivative of a polynomial described by the given coefficients.

Parameters:
  • x (float) – the point at which to evaluate

  • deriv_idx (int) – indicates what derivative of the polynomial to evaluate, 0 is the polynomial itself, 1 is the first derivative, etc.

  • coeffs (tuple) – the coefficents of the polynomial, for a mth order polynomial must be of lenth m + 1

Return type:

float

Returns:

the evaluated value

schrodinger.application.matsci.anharmonic.angular_freq_to_freq(angular_freq)

Convert the given angular frequency to frequency.

Parameters:

angular_freq (float) – the angular frequency in s**-1

Return type:

float

Returns:

the frequency in cm**-1

schrodinger.application.matsci.anharmonic.freq_to_angular_freq(freq)

Convert the given frequency to angular frequency.

Parameters:

freq (float) – the frequency in cm**-1

Return type:

float

Returns:

the angular frequency in s**-1

schrodinger.application.matsci.anharmonic.plotter(x_min, x_max, x_e_min, x_e_max, x_step, y_func, file_name, title, y_label, x_values=None)

Plot the given function.

Parameters:
  • x_min (float) – the minimum value on the x-axis

  • x_max (float) – the maximum value on the x-axis

  • x_e_min (float) – the minimum value on the extended x-axis

  • x_e_max (float) – the maximum value on the extended x-axis

  • x_step (float) – the step size to use on the x-axis

  • y_func (function) – the function to use to obtain y-axis values

  • file_name (str) – the file name used to write the plot image

  • title (str) – the title for the plot image

  • y_label (str) – the y-axis label for the plot image

  • x_values (list or None) – if not None then contains x values for points to show in the plot

schrodinger.application.matsci.anharmonic.get_normal_modes(jagout, max_i_freq=-inf)

Return the normal modes from the given JaguarOutput.

Parameters:
Return type:

list

Returns:

contains pair tuples, (normal mode index (1-based), schrodinger.application.jaguar.results.NormalMode)

schrodinger.application.matsci.anharmonic.check_imaginary_frequencies(jag_out, jag_in, max_i_freq=0)

Check imaginary frequencies.

Parameters:
  • jag_out (JaguarOutput) – the Jaguar output object

  • jag_in (JaguarInput) – the Jaguar input object

  • max_i_freq (float) – tolerate small imaginary frequencies less than this value in wavenumbers (cm^-1)

Raises:

AnharmonicException – if there is an issue

schrodinger.application.matsci.anharmonic.get_st_jaguar_output(jagout_file_name, allow_new_dummies=False)

Return a structure from the given Jaguar output file.

Parameters:
  • jagout_file_name (str) – the name of a Jaguar output file

  • allow_new_dummies (bool) – whether to allow mmjag’s lewis structure build to possibly add new dummy atoms

Return type:

schrodinger.structure.Structure

Returns:

the structure

exception schrodinger.application.matsci.anharmonic.AnharmonicException

Bases: Exception

class schrodinger.application.matsci.anharmonic.AnharmonicPotentials(st=None, jagout_file_name=None, jagrin_file_name=None, max_freq=300, factor_data=None, jaguar_kwargs={'basis': 'LACVP**', 'dftname': 'B3LYP', 'igeopt': 1, 'molchg': 0, 'multip': 1}, temperature_data=None, pressure_data=None, max_i_freq=0, plot=False, process_no_anharmonicities=False, tpp=1, logger=None, robust=False)

Bases: object

__init__(st=None, jagout_file_name=None, jagrin_file_name=None, max_freq=300, factor_data=None, jaguar_kwargs={'basis': 'LACVP**', 'dftname': 'B3LYP', 'igeopt': 1, 'molchg': 0, 'multip': 1}, temperature_data=None, pressure_data=None, max_i_freq=0, plot=False, process_no_anharmonicities=False, tpp=1, logger=None, robust=False)

Create an instance.

Parameters:
  • st (schrodinger.structure.Structure or None) – a structure for which to calculate anharmonic potentials or None if using Jaguar frequency files directly

  • jagout_file_name (str or None) – the name of a Jaguar frequency output file for which to calculate anharmonic potentials or None if using an input structure

  • jagrin_file_name (str or None) – the name of a Jaguar freqency restart input file for which to calculate anharmonic potentials or None if using an input structure

  • max_freq (float) – anharmonic potentials are created for normal modes with harmonic frequencies less than this value in wavenumbers (cm^-1)

  • factor_data (SeqData or None) – unitless factor data for factors that multiply a normal mode displacement, if None then the defaults are used, the number of points is in the positive direction only, excluding zero and the negative direction, for example using a value of 4 in turn means 2 * 4 + 1 = 9 points total

  • jaguar_kwargs (dict) – Jaguar &gen section keyword arguments, used only if the anharmonic potentials are being calculated from an input structure rather than directly from Jaguar frequency files

  • temperature_data (SeqData or None) – temperature data in K, if None then the defaults are used

  • pressure_data (SeqData or None) – pressure data in atm, if None then the defaults are used

  • max_i_freq (float) – tolerate small imaginary frequencies less than this value in wavenumbers (cm^-1)

  • plot (bool) – if True then return plots of the potentials and particle densities

  • process_no_anharmonicities (bool) – if True then do not exit with an error if the given max_freq results in zero normal modes to be treated anharmonically

  • tpp (int) – the threads-per-process to use for running Jaguar calculations

  • logger (logging.Logger or None) – output logger or None if there isn’t one

  • robust (bool) – If True, use the robust Jaguar driver to run Jaguar jobs. If False, use Jaguar directly.

getJaguarJob(base_name, input_name)

Get the job to run Jaguar with the given job base name and input name. The job will run either Jaguar directly or the robust Jaguar driver based on the current robust setting.

Parameters:
  • base_name (str) – The base name of this job

  • input_name (str) – The name of the input file

Return type:

jobutils.RobustSubmissionJob

Returns:

The job (suitable for JobDJ that will run Jaguar

runFrequencyJob()

Run a Jaguar frequency job on the input structure.

Raises:

AnharmonicException – if there is an issue

static getFactors(factor_data)

Return the factors.

Parameters:

factor_data (SeqData) – unitless factor data for factors that multiply a normal mode displacement, the number of points is in the positive direction only, excluding zero and the negative direction, for example using a value of 4 in turn means 2 * 4 + 1 = 9 points total

Return type:

tuple

Returns:

the factors

getExtendedFactors()

Return the extended factors.

Return type:

tuple

Returns:

the extended factors

runSinglePointJobs()

Run the Jaguar single point jobs from which to calculate the anharmonic potentials.

Raises:

AnharmonicException – if there is an issue

collectEnergies()

Update self.potentials with the Jaguar single point energies.

Raises:

AnharmonicException – if there is an issue

getEnergies(idx)

Return the energies (Hartree) used to build the potential for the given normal mode.

Parameters:

idx (int) – the normal mode index, 1-based

Raises:

AnharmonicException – if there is an issue

Return type:

list

Returns:

the energies

collectFits()

Update self.potentials with the anharmonic fit data.

Raises:

AnharmonicException – if there is an issue

evaluate_f(idx, factor, deriv_idx, convert_to_si=False)

Evaluate the nth derivative of the anharmonic potential for the given normal mode index.

Parameters:
  • idx (int) – the normal mode index, 1-based

  • factor (float) – the point at which to evaluate

  • deriv_idx (int) – indicates what derivative of the polynomial to evaluate, 0 is the polynomial itself, 1 is the first derivative, etc.

  • convert_to_si (bool) – if True convert the returned value from units of H/Ang.**deriv_idx to J/m**deriv_idx

Raises:

AnharmonicException – if there is an issue

Return type:

float

Returns:

the evaluated value in units of H/Ang.**deriv_idx or if convert_to_si is True in units of J/m**deriv_idx

getReducedMass1(idx)

Return the reduced mass of the given normal mode using the Jaguar definition.

Parameters:

idx (int) – the normal mode index, 1-based

Return type:

float

Returns:

the reduced mass in kg

getReducedMass2(idx)

Return the reduced mass of the given normal mode using the definition in the publications followed in this module.

Parameters:

idx (int) – the normal mode index, 1-based

Return type:

float

Returns:

the reduced mass in kg

getReducedMass(idx)

Return the reduced mass of the given normal mode.

Parameters:

idx (int) – the normal mode index, 1-based

Return type:

float

Returns:

the reduced mass in kg

collectAnharmonicFrequencies()

Update self.potentials with the anharmonic frequencies in wavenumbers (cm^-1).

Raises:

AnharmonicException – if there is an issue

plotPotentials()

Plot the potentials.

logCoefficientsTable()

Log coefficients table.

logFrequencyTable()

Log frequency table.

run()

Calculate the anharmonic potentials.

class schrodinger.application.matsci.anharmonic.AnharmonicPartitionFunction(st=None, jagout_file_name=None, jagrin_file_name=None, max_freq=300, factor_data=None, jaguar_kwargs={'basis': 'LACVP**', 'dftname': 'B3LYP', 'igeopt': 1, 'molchg': 0, 'multip': 1}, temperature_data=None, pressure_data=None, max_i_freq=0, plot=False, process_no_anharmonicities=False, tpp=1, logger=None, robust=False)

Bases: AnharmonicPotentials

static getBeta(temperature)

Return beta.

Parameters:

temperature (float) – the temperature in K

Return type:

float

Returns:

beta in 1/J

getClassicalParticleDensity(idx, temperature, factor)

For the given normal mode return the classical particle density evaluated at the given factor.

Parameters:
  • idx (int) – the normal mode index, 1-based

  • temperature (float) – the temperature in K

  • factor (float) – the point at which to evaluate

Return type:

float

Returns:

the classical particle density in 1/Ang.

getCorrectionParticleDensity(idx, temperature, factor)

For the given normal mode return the particle density multiplicative correction evaluated at the given factor.

Parameters:
  • idx (int) – the normal mode index, 1-based

  • temperature (float) – the temperature in K

  • factor (float) – the point at which to evaluate

Return type:

float

Returns:

the particle density multiplicative correction (unitless)

getParticleDensity(idx, temperature, factor)

For the given normal mode return the particle density evaluated at the given factor.

Parameters:
  • idx (int) – the normal mode index, 1-based

  • temperature (float) – the temperature in K

  • factor (float) – the point at which to evaluate

Return type:

float

Returns:

the particle density in 1/Ang.

plotParticleDensity(idx, temperature)

For the given normal mode plot the particle density.

Parameters:
  • idx (int) – the normal mode index, 1-based

  • temperature (float) – the temperature in K

checkCorrectionParticleDensity(idx, temperature)

For the given normal mode check the particle density multiplicative correction.

Parameters:
  • idx (int) – the normal mode index, 1-based

  • temperature (float) – the temperature in K

Raises:

AnharmonicException – if there is an issue

getAnharmonicVibPartitionFunctions(temperature)

Return the ln of the anharmonic vibrational partition functions.

Parameters:

temperature (float) – the temperature in K

Return type:

dict

Returns:

keys are normal mode indices, 1-based, values are ln of the anharmonic vibrational partition functions

getHarmonicVibPartitionFunctions(temperature)

Return the ln of the harmonic vibrational partition functions.

Parameters:

temperature (float) – the temperature in K

Return type:

dict

Returns:

keys are normal mode indices, 1-based, values are ln of the harmonic vibrational partition functions

static getVibPartitionFunction(lnz_a_vibs, lnz_h_vibs)

Return the ln of the vibrational partition function.

Return type:

float

Returns:

the ln of the vibrational partition function

logLnQTable(temperature, lnz_a_vibs, lnz_h_vibs)

Log lnQ table.

Parameters:

temperature (float) – the temperature in K

setDivergencies()

Set divergencies.

run()

Calculate the anharmonic partition function.

class schrodinger.application.matsci.anharmonic.AnharmonicThermochemicalProperties(st=None, jagout_file_name=None, jagrin_file_name=None, max_freq=300, factor_data=None, jaguar_kwargs={'basis': 'LACVP**', 'dftname': 'B3LYP', 'igeopt': 1, 'molchg': 0, 'multip': 1}, temperature_data=None, pressure_data=None, max_i_freq=0, plot=False, process_no_anharmonicities=False, tpp=1, logger=None, robust=False)

Bases: AnharmonicPartitionFunction

getVibrationalTemperature(idx)

Return the vibrational temperature of the given normal mode.

Parameters:

idx (int) – the normal mode index, 1-based

Return type:

float

Returns:

the vibrational temperature in K

getInternalEnergy(thermo)

Return the internal energy.

Parameters:

thermo (schrodinger.application.jaguar.results.ThermoCollection) – the thermo object

Return type:

float

Returns:

the internal energy in kcal/mol

getZeroPointEnergy()

Return the zero point energy.

Return type:

float

Returns:

the zero point energy in kcal/mol

getHeatCapacity(thermo)

Return the heat capacity.

Parameters:

thermo (schrodinger.application.jaguar.results.ThermoCollection) – the thermo object

Return type:

float

Returns:

the heat capacity in cal/(mol * K)

getEntropy(thermo)

Return the entropy.

Parameters:

thermo (schrodinger.application.jaguar.results.ThermoCollection) – the thermo object

Return type:

float

Returns:

the entropy in cal/(mol * K)

getEnthalpy(thermo)

Return the enthalpy.

Parameters:

thermo (schrodinger.application.jaguar.results.ThermoCollection) – the thermo object

Return type:

float

Returns:

the enthalpy in kcal/mol

getGibbsFreeEnergy(thermo)

Return the Gibbs free energy.

Parameters:

thermo (schrodinger.application.jaguar.results.ThermoCollection) – the thermo object

Return type:

float

Returns:

the Gibbs free energy in kcal/mol

logZeroPointEnergy()

Log zero point energy.

logPropertyTable(thermo)

Log property table.

Parameters:

thermo (schrodinger.application.jaguar.results.ThermoCollection) – the thermo object

run()

Calculate the anharmonic thermochemical properties.