Computes vibrational frequencies from the mass-weighted Hessian matrix. Uses LAPACK eigenvalue decomposition via pic-blas interfaces.
Convert mass-weighted eigenvectors to Cartesian displacements.
| Type | Intent | Optional | 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) |
Compute force constants for each normal mode.
| Type | Intent | Optional | 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) |
Compute IR intensities from dipole derivatives and normal modes.
| Type | Intent | Optional | 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) |
Compute reduced masses for each normal mode.
| Type | Intent | Optional | 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) |
Perform complete vibrational analysis from Hessian matrix.
| Type | Intent | Optional | 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 |
Compute vibrational frequencies from the Hessian matrix.
| Type | Intent | Optional | 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) |
Apply mass weighting to Hessian matrix.
| Type | Intent | Optional | 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) |
Print vibrational analysis results in a formatted table.
| Type | Intent | Optional | 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) |
Project out translation and rotation modes from mass-weighted Hessian.
| Type | Intent | Optional | 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) |