mqc_vibrational_analysis Module

Computes vibrational frequencies from the mass-weighted Hessian matrix. Uses LAPACK eigenvalue decomposition via pic-blas interfaces.


Uses

  • module~~mqc_vibrational_analysis~~UsesGraph module~mqc_vibrational_analysis mqc_vibrational_analysis module~mqc_elements mqc_elements module~mqc_vibrational_analysis->module~mqc_elements module~mqc_physical_constants mqc_physical_constants module~mqc_vibrational_analysis->module~mqc_physical_constants module~mqc_thermochemistry mqc_thermochemistry module~mqc_vibrational_analysis->module~mqc_thermochemistry pic_lapack_interfaces pic_lapack_interfaces module~mqc_vibrational_analysis->pic_lapack_interfaces pic_logger pic_logger module~mqc_vibrational_analysis->pic_logger pic_types pic_types module~mqc_vibrational_analysis->pic_types module~mqc_elements->pic_types pic_ascii pic_ascii module~mqc_elements->pic_ascii module~mqc_physical_constants->pic_types module~mqc_thermochemistry->module~mqc_elements module~mqc_thermochemistry->module~mqc_physical_constants module~mqc_thermochemistry->pic_lapack_interfaces module~mqc_thermochemistry->pic_logger module~mqc_thermochemistry->pic_types pic_io pic_io module~mqc_thermochemistry->pic_io

Used by

  • module~~mqc_vibrational_analysis~~UsedByGraph module~mqc_vibrational_analysis mqc_vibrational_analysis module~mqc_gmbe_fragment_distribution_scheme mqc_gmbe_fragment_distribution_scheme module~mqc_gmbe_fragment_distribution_scheme->module~mqc_vibrational_analysis module~mqc_mbe_fragment_distribution_scheme mqc_mbe_fragment_distribution_scheme module~mqc_gmbe_fragment_distribution_scheme->module~mqc_mbe_fragment_distribution_scheme module~mqc_mbe mqc_mbe module~mqc_mbe->module~mqc_vibrational_analysis proc~hessian_coordinator hessian_coordinator proc~hessian_coordinator->module~mqc_vibrational_analysis proc~unfragmented_calculation unfragmented_calculation proc~unfragmented_calculation->module~mqc_vibrational_analysis module~mqc_driver mqc_driver module~mqc_driver->module~mqc_mbe module~mqc_driver->module~mqc_mbe_fragment_distribution_scheme module~mqc_mbe_fragment_distribution_scheme->module~mqc_mbe proc~gmbe_run_distributed gmbe_context_t%gmbe_run_distributed proc~gmbe_run_distributed->module~mqc_gmbe_fragment_distribution_scheme proc~gmbe_run_distributed->module~mqc_mbe_fragment_distribution_scheme proc~gmbe_run_serial gmbe_context_t%gmbe_run_serial proc~gmbe_run_serial->module~mqc_gmbe_fragment_distribution_scheme module~mpi_fragment_work_smod mpi_fragment_work_smod module~mpi_fragment_work_smod->module~mqc_mbe_fragment_distribution_scheme module~mqc_hessian_distribution_scheme mqc_hessian_distribution_scheme module~mqc_hessian_distribution_scheme->module~mqc_mbe_fragment_distribution_scheme module~mqc_serial_fragment_processor mqc_serial_fragment_processor module~mqc_serial_fragment_processor->module~mqc_mbe_fragment_distribution_scheme module~mqc_unfragmented_workflow mqc_unfragmented_workflow module~mqc_unfragmented_workflow->module~mqc_mbe_fragment_distribution_scheme proc~compute_energy_and_forces compute_energy_and_forces proc~compute_energy_and_forces->module~mqc_driver proc~mbe_run_distributed mbe_context_t%mbe_run_distributed proc~mbe_run_distributed->module~mqc_mbe_fragment_distribution_scheme proc~mbe_run_serial mbe_context_t%mbe_run_serial proc~mbe_run_serial->module~mqc_mbe_fragment_distribution_scheme program~main main program~main->module~mqc_driver

Subroutines

public subroutine compute_cartesian_displacements(eigenvectors, element_numbers, cartesian_displacements, normalize_max)

Convert mass-weighted eigenvectors to Cartesian displacements.

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: eigenvectors(:,:)

Mass-weighted eigenvectors (3N x 3N)

integer, intent(in) :: element_numbers(:)

Atomic numbers for each atom (N atoms)

real(kind=dp), intent(out), allocatable :: cartesian_displacements(:,:)

Cartesian displacement vectors (3N x 3N), columns are modes

logical, intent(in), optional :: normalize_max

If true, normalize so max displacement = 1 (default: true)

public subroutine compute_force_constants(eigenvalues, reduced_masses, force_constants, force_constants_mdyne)

Compute force constants for each normal mode.

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: eigenvalues(:)

Eigenvalues from mass-weighted Hessian diagonalization (1/amu)

real(kind=dp), intent(in) :: reduced_masses(:)

Reduced masses in amu

real(kind=dp), intent(out), allocatable :: force_constants(:)

Force constants in atomic units (Hartree/Bohr²)

real(kind=dp), intent(out), optional, allocatable :: force_constants_mdyne(:)

Force constants in mdyne/Å (common experimental unit)

public subroutine compute_ir_intensities(dipole_derivatives, eigenvectors, element_numbers, ir_intensities)

Compute IR intensities from dipole derivatives and normal modes.

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: dipole_derivatives(:,:)

Cartesian dipole derivatives (3, 3*N) in atomic units

real(kind=dp), intent(in) :: eigenvectors(:,:)

Mass-weighted eigenvectors from Hessian diagonalization (3N x 3N)

integer, intent(in) :: element_numbers(:)

Atomic numbers for each atom (N atoms)

real(kind=dp), intent(out), allocatable :: ir_intensities(:)

IR intensities in km/mol (one per mode)

public subroutine compute_reduced_masses(eigenvectors, element_numbers, reduced_masses)

Compute reduced masses for each normal mode.

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: eigenvectors(:,:)

Mass-weighted eigenvectors from diagonalization (3N x 3N) Columns are normal modes, assumed normalized (Σ_i L²_{i,k} = 1)

integer, intent(in) :: element_numbers(:)

Atomic numbers for each atom (N atoms)

real(kind=dp), intent(out), allocatable :: reduced_masses(:)

Reduced masses in amu (one per mode)

public subroutine compute_vibrational_analysis(hessian, element_numbers, frequencies, reduced_masses, force_constants, cartesian_displacements, eigenvalues_out, eigenvectors_out, coordinates, project_trans_rot, force_constants_mdyne, dipole_derivatives, ir_intensities)

Perform complete vibrational analysis from Hessian matrix.

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: hessian(:,:)

Hessian matrix in Hartree/Bohr² (3N x 3N)

integer, intent(in) :: element_numbers(:)

Atomic numbers for each atom (N atoms)

real(kind=dp), intent(out), allocatable :: frequencies(:)

Vibrational frequencies in cm⁻¹

real(kind=dp), intent(out), allocatable :: reduced_masses(:)

Reduced masses in amu

real(kind=dp), intent(out), allocatable :: force_constants(:)

Force constants in Hartree/Bohr²

real(kind=dp), intent(out), allocatable :: cartesian_displacements(:,:)

Cartesian displacement vectors (3N x 3N)

real(kind=dp), intent(out), optional, allocatable :: eigenvalues_out(:)

Raw eigenvalues from diagonalization

real(kind=dp), intent(out), optional, allocatable :: eigenvectors_out(:,:)

Mass-weighted eigenvectors

real(kind=dp), intent(in), optional :: coordinates(:,:)

Atomic coordinates in Bohr (3, N) - required for projection

logical, intent(in), optional :: project_trans_rot

If true, project out translation/rotation modes

real(kind=dp), intent(out), optional, allocatable :: force_constants_mdyne(:)

Force constants in mdyne/Å

real(kind=dp), intent(in), optional :: dipole_derivatives(:,:)

Cartesian dipole derivatives (3, 3*N) in a.u. for IR intensities

real(kind=dp), intent(out), optional, allocatable :: ir_intensities(:)

IR intensities in km/mol

public subroutine compute_vibrational_frequencies(hessian, element_numbers, frequencies, eigenvalues_out, eigenvectors, coordinates, project_trans_rot, projected_hessian_out)

Compute vibrational frequencies from the Hessian matrix.

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: hessian(:,:)

Hessian matrix in Hartree/Bohr² (3N x 3N)

integer, intent(in) :: element_numbers(:)

Atomic numbers for each atom (N atoms)

real(kind=dp), intent(out), allocatable :: frequencies(:)

Vibrational frequencies in cm⁻¹ (3N modes, or 3N-6 if projected)

real(kind=dp), intent(out), optional, allocatable :: eigenvalues_out(:)

Raw eigenvalues from diagonalization (Hartree/Bohr²/amu)

real(kind=dp), intent(out), optional, allocatable :: eigenvectors(:,:)

Normal mode eigenvectors (3N x 3N), columns are modes

real(kind=dp), intent(in), optional :: coordinates(:,:)

Atomic coordinates in Bohr (3, N) - required for projection

logical, intent(in), optional :: project_trans_rot

If true, project out translation/rotation modes (requires coordinates)

real(kind=dp), intent(out), optional, allocatable :: projected_hessian_out(:,:)

Mass-weighted Hessian after trans/rot projection (before diagonalization)

public subroutine mass_weight_hessian(hessian, element_numbers, mw_hessian)

Apply mass weighting to Hessian matrix.

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: hessian(:,:)

Input Hessian in Hartree/Bohr² (3N x 3N)

integer, intent(in) :: element_numbers(:)

Atomic numbers for each atom (N atoms)

real(kind=dp), intent(out), allocatable :: mw_hessian(:,:)

Mass-weighted Hessian (3N x 3N)

public subroutine print_vibrational_analysis(frequencies, reduced_masses, force_constants, cartesian_displacements, element_numbers, force_constants_mdyne, print_displacements, n_atoms, ir_intensities, coordinates, electronic_energy, temperature, pressure)

Print vibrational analysis results in a formatted table.

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: frequencies(:)

Vibrational frequencies in cm⁻¹

real(kind=dp), intent(in) :: reduced_masses(:)

Reduced masses in amu

real(kind=dp), intent(in) :: force_constants(:)

Force constants in Hartree/Bohr² (or mdyne/Å if force_constants_mdyne provided)

real(kind=dp), intent(in) :: cartesian_displacements(:,:)

Cartesian displacement vectors (3N x 3N)

integer, intent(in) :: element_numbers(:)

Atomic numbers for each atom

real(kind=dp), intent(in), optional :: force_constants_mdyne(:)

Force constants in mdyne/Å (if provided, these are printed instead)

logical, intent(in), optional :: print_displacements

If true, print Cartesian displacement vectors (default: true)

integer, intent(in), optional :: n_atoms

Number of atoms (if not provided, derived from size of element_numbers)

real(kind=dp), intent(in), optional :: ir_intensities(:)

IR intensities in km/mol

real(kind=dp), intent(in), optional :: coordinates(:,:)

Atomic coordinates (3, n_atoms) in Bohr - needed for thermochemistry

real(kind=dp), intent(in), optional :: electronic_energy

Electronic energy in Hartree - needed for thermochemistry

real(kind=dp), intent(in), optional :: temperature

Temperature for thermochemistry in K (default: 298.15)

real(kind=dp), intent(in), optional :: pressure

Pressure for thermochemistry in atm (default: 1.0)

public subroutine project_translation_rotation(mw_hessian, coordinates, element_numbers)

Project out translation and rotation modes from mass-weighted Hessian.

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(inout) :: mw_hessian(:,:)

Mass-weighted Hessian (modified in place)

real(kind=dp), intent(in) :: coordinates(:,:)

Atomic coordinates in Bohr (3, N)

integer, intent(in) :: element_numbers(:)

Atomic numbers for each atom (N atoms)