Mode Tracking vs. Full Normal Modes with ADF¶
Displacements of the selected C=O mode.¶
Requires: AMS2026 or later
Related documentation
Related tutorials
Method: ADF/PBE/DZ with large frozen core. Dydrogesterone was constructed from the requested SMILES. ChemicalSystem bond orders and ring membership identified the non-ring C=O as C2–O3 (1-based), assigned to region CO.
Mode displacement image¶

IR spectra¶

![]()

Selected C=O mode¶
calculation |
mode |
frequency_cm-1 |
intensity_km/mol |
CO_displacement_fraction |
|---|---|---|---|---|
Partial Hessian guess |
153 |
1533.738 |
115.744 |
1.000 |
Mode tracking |
1 |
1562.423 |
86.508 |
0.374 |
Full normal modes (best overlap) |
117 |
1560.353 |
83.544 |
0.350 |
Timings¶
job |
description |
wall_s |
|---|---|---|
01_opt |
Geometry optimization |
348.0 |
02_partial_hessian |
CO-region partial Hessian |
131.0 |
03_mode_tracking |
Mode tracking from mode 153 |
440.0 |
04_full_normal_modes |
Full normal modes |
1803.0 |
partial+mode_tracking |
Selective workflow |
571.0 |
Selective partial-Hessian + mode-tracking time = 571.0 s vs full normal modes = 1803.0 s, speedup = 3.16x.
Conclusion¶
Mode tracking gives a C=O frequency and intensity very close to the corresponding full normal-mode result, while requiring much less wall time than the full Hessian.
Provenance and inputs¶
opt: 01-run_workdir/01_opt¶
Geometry optimization at ADF/PBE/DZ large core.
Task GeometryOptimization
System
Atoms
C -4.5753007624 2.4335757077 -0.3051238140
C -4.1654044269 1.4231319749 0.7300567028 region=CO
O -4.4674968841 1.6330354323 1.8950202972 region=CO
C -3.4249194595 0.1349544347 0.3858899036
C -3.3192691179 -0.1859566386 -1.1125546573
C -2.0693702052 -1.0486415561 -1.2804430380
C -1.3924473893 -1.1266345242 0.0973200504
C -1.9726158255 0.0491246723 0.9254402220
C -1.1997086852 1.3730512519 0.6537656577
C 0.3222386059 1.2194765553 0.7371377451
C 0.8338420837 0.1739848117 -0.2850518607
C 0.1597751178 -1.1965994917 0.0065967194
C 0.7603192912 -1.8095625610 1.2512107198
C 2.0788335458 -1.8018448697 1.4263619842
C 2.9391408645 -1.1699416326 0.4132904296
C 4.1328084585 -1.7217137353 0.1453610078
C 4.9015536137 -1.3363797622 -1.0501572441
O 6.0660755057 -1.7889615227 -1.2081132259
C 4.3173352277 -0.4223716682 -2.0919404215
C 2.8083777155 -0.1913471249 -1.8811425169
C 2.4223452480 0.0318179121 -0.3877414796
C 3.1524503365 1.2995573959 0.1344050991
C -1.9750236367 -0.2703983542 2.4407161276
H -5.2374058363 1.9570953870 -1.0578338512
H -3.6770724868 2.8518506737 -0.8043078900
H -5.1308577997 3.2722925799 0.1664734311
H -4.0167277510 -0.6968517270 0.8346116809
H -3.1923349535 0.7292849107 -1.7274037391
H -4.2265497822 -0.7238688541 -1.4649990443
H -1.4024495612 -0.5921318180 -2.0431039754
H -2.3440017427 -2.0668804766 -1.6343452623
H -1.7508120077 -2.0825689555 0.5474413253
H -1.4447604627 1.7617058398 -0.3585794330
H -1.5182697896 2.1543818490 1.3782845605
H 0.7454608423 2.2195687215 0.5081281572
H 0.6300684955 0.9484578987 1.7688376311
H 0.4645801947 0.5269992359 -1.2733759104
H 0.4129277678 -1.8847911774 -0.8310984850
H 0.1367904154 -2.3082919568 1.9827164786
H 2.5127169465 -2.3283090113 2.2680463583
H 4.4996337377 -2.5454953282 0.7474026720
H 4.8575609769 0.5477101379 -2.0691281882
H 4.4765118113 -0.8661087541 -3.0983229054
H 2.4950166965 0.6819829426 -2.4946876398
H 2.2624511353 -1.0792067427 -2.2710233174
H 2.8637673384 2.1918824411 -0.4610878495
H 4.2554742135 1.1973245897 0.0771896657
H 2.9244125570 1.4787509336 1.2061068447
H -2.4612486216 0.5441744889 3.0152424596
H -2.5221771041 -1.2147790409 2.6483217466
H -0.9462444517 -0.3755354951 2.8356480095
End
BondOrders
1 2 1.0
1 24 1.0
1 25 1.0
1 26 1.0
2 3 2.0
2 4 1.0
4 5 1.0
4 8 1.0
4 27 1.0
5 6 1.0
5 28 1.0
5 29 1.0
6 7 1.0
6 30 1.0
6 31 1.0
7 8 1.0
7 12 1.0
7 32 1.0
8 9 1.0
8 23 1.0
9 10 1.0
9 33 1.0
9 34 1.0
10 11 1.0
10 35 1.0
10 36 1.0
11 12 1.0
11 21 1.0
11 37 1.0
12 13 1.0
12 38 1.0
13 14 2.0
13 39 1.0
14 15 1.0
14 40 1.0
15 16 2.0
15 21 1.0
16 17 1.0
16 41 1.0
17 18 2.0
17 19 1.0
19 20 1.0
19 42 1.0
19 43 1.0
20 21 1.0
20 44 1.0
20 45 1.0
21 22 1.0
22 46 1.0
22 47 1.0
22 48 1.0
23 49 1.0
23 50 1.0
23 51 1.0
End
End
Engine adf
Basis
Core Large
Type DZ
End
XC
GGA PBE
End
EndEngine
partial: 02-continue_workdir/02_partial_hessian¶
Partial Hessian / normal-modes calculation restricted to CO region.
NormalModes
ReScanModes no
End
Properties
NormalModes yes
SelectedRegionForHessian CO
End
Task SinglePoint
System
Atoms
C -4.5319269049 2.4489057819 -0.1266719978
C -4.2469227153 1.3078809949 0.8293588846 region=CO
O -4.6530787271 1.3640220185 2.0211398418 region=CO
C -3.4689421686 0.0871517694 0.3591813709
C -3.3585772471 -0.1547569368 -1.1697998017
C -2.0459432386 -0.9813621909 -1.3681096305
C -1.3992200107 -1.1200174701 0.0439506404
C -1.9784921099 0.0574928560 0.8902091955
C -1.2300829648 1.3695706616 0.5459659072
C 0.3051208599 1.2291440267 0.6600470278
C 0.8302861210 0.1558311317 -0.3226725508
C 0.1467191411 -1.2086947645 0.0073548278
C 0.7388901329 -1.7620123046 1.2889587699
C 2.0771909169 -1.7194374740 1.4858758488
C 2.9298387032 -1.1680053509 0.4350207664
C 4.1519376618 -1.7186909523 0.1660898354
C 4.9552240909 -1.3641843554 -1.0035185199
O 6.1256772709 -1.8284561992 -1.1647532365
C 4.3313411414 -0.4529542293 -2.0565709976
C 2.8096419197 -0.2606947107 -1.8856430283
C 2.4046272791 0.0084815730 -0.4051833549
C 3.1293007137 1.2865649385 0.1099535243
C -1.9498023112 -0.2043487418 2.4083021698
H -5.2188794642 2.1118323938 -0.9232765188
H -3.6132827008 2.8181311167 -0.6105309970
H -5.0082179145 3.2629770567 0.4381364126
H -3.9665551327 -0.7814731795 0.8312939829
H -3.2952089715 0.7962816324 -1.7210196277
H -4.2455540736 -0.6911111993 -1.5458737279
H -1.3650826442 -0.4633739864 -2.0636550793
H -2.2514975769 -1.9767098151 -1.7962965378
H -1.7762925426 -2.0582910184 0.4970591002
H -1.4669009115 1.6769839874 -0.4901591001
H -1.5794507713 2.1759705462 1.2180498752
H 0.7560293390 2.2084591953 0.4308065219
H 0.5910114310 0.9709612485 1.6941792179
H 0.5020584773 0.4646152353 -1.3339354749
H 0.4057189942 -1.9276512436 -0.8008994923
H 0.0860043289 -2.2654120124 2.0082370760
H 2.5449642773 -2.1989762673 2.3515551787
H 4.5593710931 -2.5149786849 0.7963210784
H 4.8598133002 0.5169670446 -2.0155853495
H 4.5674579675 -0.8896962719 -3.0423644307
H 2.4654295464 0.5789179285 -2.5161414977
H 2.2905085734 -1.1760185463 -2.2255074669
H 2.8407409696 2.1669200764 -0.4893639455
H 4.2209215079 1.1604766950 0.0468392050
H 2.8856457942 1.4765735719 1.1669734994
H -2.5554393950 0.5508254965 2.9367517979
H -2.3828888284 -1.1933890656 2.6391530348
H -0.9232322273 -0.1712420059 2.8062257114
End
BondOrders
1 2 1.0
1 24 1.0
1 25 1.0
1 26 1.0
2 3 2.0
2 4 1.0
4 5 1.0
4 8 1.0
4 27 1.0
5 6 1.0
5 28 1.0
5 29 1.0
6 7 1.0
6 30 1.0
6 31 1.0
7 8 1.0
7 12 1.0
7 32 1.0
8 9 1.0
8 23 1.0
9 10 1.0
9 33 1.0
9 34 1.0
10 11 1.0
10 35 1.0
10 36 1.0
11 12 1.0
11 21 1.0
11 37 1.0
12 13 1.0
12 38 1.0
13 14 2.0
13 39 1.0
14 15 1.0
14 40 1.0
15 16 2.0
15 21 1.0
16 17 1.0
16 41 1.0
17 18 2.0
17 19 1.0
19 20 1.0
19 42 1.0
19 43 1.0
20 21 1.0
20 44 1.0
20 45 1.0
21 22 1.0
22 46 1.0
22 47 1.0
22 48 1.0
23 49 1.0
23 50 1.0
23 51 1.0
End
End
Engine adf
Basis
Core Large
Type DZ
End
XC
GGA PBE
End
EndEngine
mt: 03-rest_workdir/03_mode_tracking¶
Mode tracking started from partial-Hessian C=O stretch mode 153.
Task VibrationalAnalysis
VibrationalAnalysis
ModeTracking
HessianGuess File
HessianPath /home/ubuntu/work/02-continue_workdir/02_partial_hessian/adf.rkf
TrackingMethod OverlapPrevious
End
NormalModes
ModeFile /home/ubuntu/work/02-continue_workdir/02_partial_hessian/adf.rkf
ModeInputFormat File
ModeSelect
ModeNumber 153
End
End
Type ModeTracking
End
System
Atoms
C -4.5319269049 2.4489057819 -0.1266719978
C -4.2469227153 1.3078809949 0.8293588846 region=CO
O -4.6530787271 1.3640220185 2.0211398418 region=CO
C -3.4689421686 0.0871517694 0.3591813709
C -3.3585772471 -0.1547569368 -1.1697998017
C -2.0459432386 -0.9813621909 -1.3681096305
C -1.3992200107 -1.1200174701 0.0439506404
C -1.9784921099 0.0574928560 0.8902091955
C -1.2300829648 1.3695706616 0.5459659072
C 0.3051208599 1.2291440267 0.6600470278
C 0.8302861210 0.1558311317 -0.3226725508
C 0.1467191411 -1.2086947645 0.0073548278
C 0.7388901329 -1.7620123046 1.2889587699
C 2.0771909169 -1.7194374740 1.4858758488
C 2.9298387032 -1.1680053509 0.4350207664
C 4.1519376618 -1.7186909523 0.1660898354
C 4.9552240909 -1.3641843554 -1.0035185199
O 6.1256772709 -1.8284561992 -1.1647532365
C 4.3313411414 -0.4529542293 -2.0565709976
C 2.8096419197 -0.2606947107 -1.8856430283
C 2.4046272791 0.0084815730 -0.4051833549
C 3.1293007137 1.2865649385 0.1099535243
C -1.9498023112 -0.2043487418 2.4083021698
H -5.2188794642 2.1118323938 -0.9232765188
H -3.6132827008 2.8181311167 -0.6105309970
H -5.0082179145 3.2629770567 0.4381364126
H -3.9665551327 -0.7814731795 0.8312939829
H -3.2952089715 0.7962816324 -1.7210196277
H -4.2455540736 -0.6911111993 -1.5458737279
H -1.3650826442 -0.4633739864 -2.0636550793
H -2.2514975769 -1.9767098151 -1.7962965378
H -1.7762925426 -2.0582910184 0.4970591002
H -1.4669009115 1.6769839874 -0.4901591001
H -1.5794507713 2.1759705462 1.2180498752
H 0.7560293390 2.2084591953 0.4308065219
H 0.5910114310 0.9709612485 1.6941792179
H 0.5020584773 0.4646152353 -1.3339354749
H 0.4057189942 -1.9276512436 -0.8008994923
H 0.0860043289 -2.2654120124 2.0082370760
H 2.5449642773 -2.1989762673 2.3515551787
H 4.5593710931 -2.5149786849 0.7963210784
H 4.8598133002 0.5169670446 -2.0155853495
H 4.5674579675 -0.8896962719 -3.0423644307
H 2.4654295464 0.5789179285 -2.5161414977
H 2.2905085734 -1.1760185463 -2.2255074669
H 2.8407409696 2.1669200764 -0.4893639455
H 4.2209215079 1.1604766950 0.0468392050
H 2.8856457942 1.4765735719 1.1669734994
H -2.5554393950 0.5508254965 2.9367517979
H -2.3828888284 -1.1933890656 2.6391530348
H -0.9232322273 -0.1712420059 2.8062257114
End
BondOrders
1 2 1.0
1 24 1.0
1 25 1.0
1 26 1.0
2 3 2.0
2 4 1.0
4 5 1.0
4 8 1.0
4 27 1.0
5 6 1.0
5 28 1.0
5 29 1.0
6 7 1.0
6 30 1.0
6 31 1.0
7 8 1.0
7 12 1.0
7 32 1.0
8 9 1.0
8 23 1.0
9 10 1.0
9 33 1.0
9 34 1.0
10 11 1.0
10 35 1.0
10 36 1.0
11 12 1.0
11 21 1.0
11 37 1.0
12 13 1.0
12 38 1.0
13 14 2.0
13 39 1.0
14 15 1.0
14 40 1.0
15 16 2.0
15 21 1.0
16 17 1.0
16 41 1.0
17 18 2.0
17 19 1.0
19 20 1.0
19 42 1.0
19 43 1.0
20 21 1.0
20 44 1.0
20 45 1.0
21 22 1.0
22 46 1.0
22 47 1.0
22 48 1.0
23 49 1.0
23 50 1.0
23 51 1.0
End
End
Engine adf
Basis
Core Large
Type DZ
End
XC
GGA PBE
End
EndEngine
full: 03-rest_workdir/04_full_normal_modes¶
Full normal-modes verification calculation.
NormalModes
ReScanModes no
End
Properties
NormalModes yes
End
Task SinglePoint
System
Atoms
C -4.5319269049 2.4489057819 -0.1266719978
C -4.2469227153 1.3078809949 0.8293588846 region=CO
O -4.6530787271 1.3640220185 2.0211398418 region=CO
C -3.4689421686 0.0871517694 0.3591813709
C -3.3585772471 -0.1547569368 -1.1697998017
C -2.0459432386 -0.9813621909 -1.3681096305
C -1.3992200107 -1.1200174701 0.0439506404
C -1.9784921099 0.0574928560 0.8902091955
C -1.2300829648 1.3695706616 0.5459659072
C 0.3051208599 1.2291440267 0.6600470278
C 0.8302861210 0.1558311317 -0.3226725508
C 0.1467191411 -1.2086947645 0.0073548278
C 0.7388901329 -1.7620123046 1.2889587699
C 2.0771909169 -1.7194374740 1.4858758488
C 2.9298387032 -1.1680053509 0.4350207664
C 4.1519376618 -1.7186909523 0.1660898354
C 4.9552240909 -1.3641843554 -1.0035185199
O 6.1256772709 -1.8284561992 -1.1647532365
C 4.3313411414 -0.4529542293 -2.0565709976
C 2.8096419197 -0.2606947107 -1.8856430283
C 2.4046272791 0.0084815730 -0.4051833549
C 3.1293007137 1.2865649385 0.1099535243
C -1.9498023112 -0.2043487418 2.4083021698
H -5.2188794642 2.1118323938 -0.9232765188
H -3.6132827008 2.8181311167 -0.6105309970
H -5.0082179145 3.2629770567 0.4381364126
H -3.9665551327 -0.7814731795 0.8312939829
H -3.2952089715 0.7962816324 -1.7210196277
H -4.2455540736 -0.6911111993 -1.5458737279
H -1.3650826442 -0.4633739864 -2.0636550793
H -2.2514975769 -1.9767098151 -1.7962965378
H -1.7762925426 -2.0582910184 0.4970591002
H -1.4669009115 1.6769839874 -0.4901591001
H -1.5794507713 2.1759705462 1.2180498752
H 0.7560293390 2.2084591953 0.4308065219
H 0.5910114310 0.9709612485 1.6941792179
H 0.5020584773 0.4646152353 -1.3339354749
H 0.4057189942 -1.9276512436 -0.8008994923
H 0.0860043289 -2.2654120124 2.0082370760
H 2.5449642773 -2.1989762673 2.3515551787
H 4.5593710931 -2.5149786849 0.7963210784
H 4.8598133002 0.5169670446 -2.0155853495
H 4.5674579675 -0.8896962719 -3.0423644307
H 2.4654295464 0.5789179285 -2.5161414977
H 2.2905085734 -1.1760185463 -2.2255074669
H 2.8407409696 2.1669200764 -0.4893639455
H 4.2209215079 1.1604766950 0.0468392050
H 2.8856457942 1.4765735719 1.1669734994
H -2.5554393950 0.5508254965 2.9367517979
H -2.3828888284 -1.1933890656 2.6391530348
H -0.9232322273 -0.1712420059 2.8062257114
End
BondOrders
1 2 1.0
1 24 1.0
1 25 1.0
1 26 1.0
2 3 2.0
2 4 1.0
4 5 1.0
4 8 1.0
4 27 1.0
5 6 1.0
5 28 1.0
5 29 1.0
6 7 1.0
6 30 1.0
6 31 1.0
7 8 1.0
7 12 1.0
7 32 1.0
8 9 1.0
8 23 1.0
9 10 1.0
9 33 1.0
9 34 1.0
10 11 1.0
10 35 1.0
10 36 1.0
11 12 1.0
11 21 1.0
11 37 1.0
12 13 1.0
12 38 1.0
13 14 2.0
13 39 1.0
14 15 1.0
14 40 1.0
15 16 2.0
15 21 1.0
16 17 1.0
16 41 1.0
17 18 2.0
17 19 1.0
19 20 1.0
19 42 1.0
19 43 1.0
20 21 1.0
20 44 1.0
20 45 1.0
21 22 1.0
22 46 1.0
22 47 1.0
22 48 1.0
23 49 1.0
23 50 1.0
23 51 1.0
End
End
Engine adf
Basis
Core Large
Type DZ
End
XC
GGA PBE
End
EndEngine
Prompts and Python scripts¶
Prompt (instruction for AI agent)
Use $ams2026
Compare how fast and accurate mode-tracking is to full normal-modes calculations.
Method: ADF/PBE/DZ large core
1. Construct dydrogesterone: CC(=O)[C@H]1CC[C@@H]2[C@@]1(CC[C@@H]3[C@H]2C=CC4=CC(=O)CC[C@@]34C)C
Identify the O that is double-bonded to a C and which is not in a ring using ChemicalSystem bonds methods. Add the C and O to the "CO" region.
2. Optimize the geometry
3. New calculation: use the CO region for the hessian. Get the number of the mode that most purely corresponds to a C=O stretch (which has the biggest displacements for those atoms).
4. New calculation: Use mode tracking on that mode to get the pure correct normal mode
5. Verification calculation: full normal-modes calculation on the optimized geometry
Report:
Picture: plot_image_grid mode-displaced-negative, optimized geometry, mode-displaced-positive. Show the region as well.
Picture: Spectrum from partial hessian calculation
Picture: Spectrum from mode tracking
Picture: Full spectrum
Table: frequency and intensity of the selected mode.
Table: Timings of individual jobs. Especially compare the partialhessian+modetracking vs. full normal modes.
References: See $AMSHOME/Doc/text/Tutorials/VibrationalSpectroscopy/ModeTracking.txt
01-run.py
#!/usr/bin/env amspython
from __future__ import annotations
import os
import time
from pathlib import Path
from typing import Any
import numpy as np
from scm.base import ChemicalSystem
from scm.input_classes import AMS
from scm.plams import AMSJob, Settings, init, finish
SMILES = "CC(=O)[C@H]1CC[C@@H]2[C@@]1(CC[C@@H]3[C@H]2C=CC4=CC(=O)CC[C@@]34C)C"
def adf_settings(task: str, normal_modes: bool = False, hessian_region: str | None = None, vib: bool = False) -> Settings:
s = Settings()
s.input.ams.Task = task
if normal_modes:
s.input.ams.Properties.NormalModes = "Yes"
s.input.ams.NormalModes.ReScanModes = "No"
if hessian_region is not None:
s.input.ams.Properties.SelectedRegionForHessian = hessian_region
if vib:
s.input.ams.Task = "VibrationalAnalysis"
s.input.adf.XC.GGA = "PBE"
s.input.adf.Basis.Type = "DZ"
s.input.adf.Basis.Core = "Large"
# Keep defaults otherwise, per requested method.
AMS.from_settings(s)
return s
def find_nonring_carbonyl(system: ChemicalSystem) -> tuple[int, int]:
candidates: list[tuple[int, int, float]] = []
for i, atom in enumerate(system.atoms):
if atom.symbol != "C":
continue
for _frm, j, bond in system.bonds.get_bonds_for_atom(i):
if j <= i:
continue
other = system.atoms[j]
if other.symbol != "O":
continue
order = getattr(bond, "order", None)
if order is None:
order = getattr(bond, "bond_order", 0.0)
if float(order) > 1.5 and (not system.atom_is_in_ring(i)):
candidates.append((i, j, float(order)))
if len(candidates) != 1:
raise RuntimeError(f"Expected one non-ring C=O; found {candidates}")
return candidates[0][0], candidates[0][1]
def mode_purity(job: AMSJob, cidx: int, oidx: int) -> tuple[int, float, float, np.ndarray]:
freqs = np.array(job.results.get_frequencies())
modes = np.array(job.results.get_normal_modes())
n_atoms = len(job.results.get_main_system())
# modes shape is often (nModes, nAtoms, 3); handle transposed variants.
if modes.shape[1] != n_atoms:
if modes.shape[-1] == n_atoms:
modes = np.moveaxis(modes, -1, 1)
scores = []
for m in modes:
atom_sq = np.sum(m * m, axis=1)
co = float(atom_sq[cidx] + atom_sq[oidx])
total = float(np.sum(atom_sq))
scores.append(co / total if total else 0.0)
best0 = int(np.argmax(scores))
return best0 + 1, float(freqs[best0]), float(scores[best0]), modes[best0]
def main() -> None:
init(folder="01-run_workdir")
system = ChemicalSystem.from_smiles(SMILES)
system.guess_bonds()
cidx, oidx = find_nonring_carbonyl(system)
system.add_atom_to_region(cidx, "CO")
system.add_atom_to_region(oidx, "CO")
print(f"Selected non-ring carbonyl (1-based): C={cidx+1}, O={oidx+1}")
jobs: list[AMSJob] = []
timings: dict[str, float] = {}
# 1 Geometry optimization
t0 = time.perf_counter()
opt = AMSJob(settings=adf_settings("GeometryOptimization"), molecule=system, name="01_opt")
opt.run()
timings["01_opt"] = time.perf_counter() - t0
if not opt.ok():
raise RuntimeError("Geometry optimization failed")
jobs.append(opt)
opt_system = opt.results.get_main_system()
# Preserve/restore the CO region on optimized system, based on original indices.
opt_system.add_atom_to_region(cidx, "CO")
opt_system.add_atom_to_region(oidx, "CO")
# 2 partial Hessian / normal modes on CO region
t0 = time.perf_counter()
ph = AMSJob(settings=adf_settings("SinglePoint", normal_modes=True, hessian_region="CO"), molecule=opt_system, name="02_partial_hessian")
ph.run()
timings["02_partial_hessian"] = time.perf_counter() - t0
if not ph.ok():
raise RuntimeError("Partial Hessian failed")
jobs.append(ph)
mode_no, f, purity, _mode = mode_purity(ph, cidx, oidx)
print(f"Selected partial-Hessian mode {mode_no}: {f:.2f} cm^-1, CO displacement fraction {purity:.3f}")
# 3 mode tracking from selected partial-Hessian mode
mt_s = adf_settings("VibrationalAnalysis")
mt_s.input.ams.VibrationalAnalysis.Type = "ModeTracking"
mt_s.input.ams.VibrationalAnalysis.NormalModes.ModeInputFormat = "File"
mt_s.input.ams.VibrationalAnalysis.NormalModes.ModeFile = str(Path(ph.path) / "adf.rkf")
mt_s.input.ams.VibrationalAnalysis.NormalModes.ModeSelect.ModeNumber = [mode_no]
mt_s.input.ams.VibrationalAnalysis.ModeTracking.HessianGuess = "File"
mt_s.input.ams.VibrationalAnalysis.ModeTracking.HessianPath = str(Path(ph.path))
mt_s.input.ams.VibrationalAnalysis.ModeTracking.TrackingMethod = "OverlapPrevious"
AMS.from_settings(mt_s)
t0 = time.perf_counter()
mt = AMSJob(settings=mt_s, molecule=opt_system, name="03_mode_tracking")
mt.run()
timings["03_mode_tracking"] = time.perf_counter() - t0
if not mt.ok():
raise RuntimeError("Mode tracking failed")
jobs.append(mt)
# 4 full normal modes verification
t0 = time.perf_counter()
full = AMSJob(settings=adf_settings("SinglePoint", normal_modes=True), molecule=opt_system, name="04_full_normal_modes")
full.run()
timings["04_full_normal_modes"] = time.perf_counter() - t0
if not full.ok():
raise RuntimeError("Full normal modes failed")
jobs.append(full)
with open("timings.txt", "w") as fh:
fh.write(f"carbonyl_C_1based {cidx+1}\ncarbonyl_O_1based {oidx+1}\npartial_mode {mode_no}\n")
for k, v in timings.items():
fh.write(f"{k} {v:.3f}\n")
finish()
if __name__ == "__main__":
main()
02-continue.py
#!/usr/bin/env amspython
from __future__ import annotations
import time
from pathlib import Path
from scm.input_classes import AMS
from scm.plams import AMSJob, init, finish
from importlib.machinery import SourceFileLoader
mod = SourceFileLoader("runmod", "01-run.py").load_module()
def main() -> None:
init(folder="02-continue_workdir")
cidx, oidx = 1, 2 # zero-based, found from ChemicalSystem bonds in 01-run.py: C=2, O=3 (1-based)
opt = AMSJob.load_external("01-run_workdir/01_opt")
opt_system = opt.results.get_main_system()
opt_system.add_atom_to_region(cidx, "CO")
opt_system.add_atom_to_region(oidx, "CO")
timings: dict[str, float] = {}
t0 = time.perf_counter()
ph = AMSJob(settings=mod.adf_settings("SinglePoint", normal_modes=True, hessian_region="CO"), molecule=opt_system, name="02_partial_hessian")
ph.run()
timings["02_partial_hessian"] = time.perf_counter() - t0
if not ph.ok():
raise RuntimeError("Partial Hessian failed")
mode_no, f, purity, _mode = mod.mode_purity(ph, cidx, oidx)
print(f"Selected partial-Hessian mode {mode_no}: {f:.2f} cm^-1, CO displacement fraction {purity:.3f}")
mt_s = mod.adf_settings("VibrationalAnalysis")
mt_s.input.ams.VibrationalAnalysis.Type = "ModeTracking"
mt_s.input.ams.VibrationalAnalysis.NormalModes.ModeInputFormat = "File"
mt_s.input.ams.VibrationalAnalysis.NormalModes.ModeFile = str(Path(ph.path) / "adf.rkf")
mt_s.input.ams.VibrationalAnalysis.NormalModes.ModeSelect.ModeNumber = [mode_no]
mt_s.input.ams.VibrationalAnalysis.ModeTracking.HessianGuess = "File"
mt_s.input.ams.VibrationalAnalysis.ModeTracking.HessianPath = str(Path(ph.path))
mt_s.input.ams.VibrationalAnalysis.ModeTracking.TrackingMethod = "OverlapPrevious"
AMS.from_settings(mt_s)
t0 = time.perf_counter()
mt = AMSJob(settings=mt_s, molecule=opt_system, name="03_mode_tracking")
mt.run()
timings["03_mode_tracking"] = time.perf_counter() - t0
if not mt.ok():
raise RuntimeError("Mode tracking failed")
t0 = time.perf_counter()
full = AMSJob(settings=mod.adf_settings("SinglePoint", normal_modes=True), molecule=opt_system, name="04_full_normal_modes")
full.run()
timings["04_full_normal_modes"] = time.perf_counter() - t0
if not full.ok():
raise RuntimeError("Full normal modes failed")
with open("timings.txt", "w") as fh:
fh.write("carbonyl_C_1based 2\ncarbonyl_O_1based 3\n")
fh.write(f"partial_mode {mode_no}\n")
for k, v in timings.items():
fh.write(f"{k} {v:.3f}\n")
finish()
if __name__ == "__main__":
main()
03-rest.py
#!/usr/bin/env amspython
from __future__ import annotations
import time
from pathlib import Path
import numpy as np
from importlib.machinery import SourceFileLoader
from scm.input_classes import AMS
from scm.plams import AMSJob, init, finish
mod = SourceFileLoader("runmod", "01-run.py").load_module()
def main() -> None:
init(folder="03-rest_workdir")
cidx, oidx = 1, 2
opt = AMSJob.load_external("01-run_workdir/01_opt")
ph = AMSJob.load_external("02-continue_workdir/02_partial_hessian")
opt_system = opt.results.get_main_system()
opt_system.add_atom_to_region(cidx, "CO")
opt_system.add_atom_to_region(oidx, "CO")
freqs = np.array(ph.results.get_frequencies())
nonzero = np.where(np.abs(freqs) > 1.0)[0]
mode_no = int(nonzero[np.argmax(freqs[nonzero])] + 1)
print(f"Selected highest non-zero partial-Hessian C=O stretch mode {mode_no}: {freqs[mode_no-1]:.2f} cm^-1")
timings: dict[str, float] = {}
mt_s = mod.adf_settings("VibrationalAnalysis")
mt_s.input.ams.VibrationalAnalysis.Type = "ModeTracking"
mt_s.input.ams.VibrationalAnalysis.NormalModes.ModeInputFormat = "File"
mt_s.input.ams.VibrationalAnalysis.NormalModes.ModeFile = str(Path(ph.path) / "adf.rkf")
mt_s.input.ams.VibrationalAnalysis.NormalModes.ModeSelect.ModeNumber = [mode_no]
mt_s.input.ams.VibrationalAnalysis.ModeTracking.HessianGuess = "File"
mt_s.input.ams.VibrationalAnalysis.ModeTracking.HessianPath = str(Path(ph.path) / "adf.rkf")
mt_s.input.ams.VibrationalAnalysis.ModeTracking.TrackingMethod = "OverlapPrevious"
AMS.from_settings(mt_s)
t0 = time.perf_counter()
mt = AMSJob(settings=mt_s, molecule=opt_system, name="03_mode_tracking")
mt.run()
timings["03_mode_tracking"] = time.perf_counter() - t0
if not mt.ok():
raise RuntimeError("Mode tracking failed")
t0 = time.perf_counter()
full = AMSJob(settings=mod.adf_settings("SinglePoint", normal_modes=True), molecule=opt_system, name="04_full_normal_modes")
full.run()
timings["04_full_normal_modes"] = time.perf_counter() - t0
if not full.ok():
raise RuntimeError("Full normal modes failed")
with open("timings.txt", "w") as fh:
fh.write("carbonyl_C_1based 2\ncarbonyl_O_1based 3\n")
fh.write(f"partial_mode {mode_no}\n")
for k, v in timings.items():
fh.write(f"{k} {v:.3f}\n")
finish()
if __name__ == "__main__":
main()
report.py
#!/usr/bin/env amspython
from __future__ import annotations
import re
from datetime import datetime
from pathlib import Path
from typing import Any
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from scm.base import ChemicalSystem
from scm.plams import AMSJob, init, finish, view, plot_image_grid
CIDX = 1 # zero-based (1-based: 2)
OIDX = 2 # zero-based (1-based: 3)
PARTIAL_MODE = 153
JOBS = {
"opt": ("01-run_workdir/01_opt", "Geometry optimization at ADF/PBE/DZ large core."),
"partial": ("02-continue_workdir/02_partial_hessian", "Partial Hessian / normal-modes calculation restricted to CO region."),
"mt": ("03-rest_workdir/03_mode_tracking", "Mode tracking started from partial-Hessian C=O stretch mode 153."),
"full": ("03-rest_workdir/04_full_normal_modes", "Full normal-modes verification calculation."),
}
def load_jobs() -> dict[str, AMSJob]:
return {k: AMSJob.load_external(path) for k, (path, _why) in JOBS.items()}
def vib_arrays(job: AMSJob, file: str) -> tuple[np.ndarray, np.ndarray, np.ndarray]:
f = np.atleast_1d(job.results.readrkf("Vibrations", "Frequencies[cm-1]", file=file)).astype(float)
inten = np.atleast_1d(job.results.readrkf("Vibrations", "Intensities[km/mol]", file=file)).astype(float)
modes = []
for i in range(1, len(f) + 1):
arr = np.array(job.results.readrkf("Vibrations", f"NoWeightNormalMode({i})", file=file), dtype=float)
arr = arr.reshape(-1, 3)
modes.append(arr)
return f, inten, np.array(modes)
def co_fraction(mode: np.ndarray) -> float:
atom_sq = np.sum(mode * mode, axis=1)
return float((atom_sq[CIDX] + atom_sq[OIDX]) / np.sum(atom_sq))
def normalize(mode: np.ndarray) -> np.ndarray:
norms = np.linalg.norm(mode, axis=1)
m = np.max(norms)
return mode / m if m else mode
def parse_duration(logfile: str, jobname: str) -> float:
text = Path(logfile).read_text()
m1 = re.search(rf"\[(\d{{2}}\.\d{{2}}\|\d{{2}}:\d{{2}}:\d{{2}})\] JOB {jobname} STARTED", text)
m2 = re.search(rf"\[(\d{{2}}\.\d{{2}}\|\d{{2}}:\d{{2}}:\d{{2}})\] JOB {jobname} FINISHED", text)
if not (m1 and m2):
return float("nan")
fmt = "%d.%m|%H:%M:%S"
t1 = datetime.strptime(m1.group(1), fmt)
t2 = datetime.strptime(m2.group(1), fmt)
return (t2 - t1).total_seconds()
def spectrum_plot(freq: np.ndarray, inten: np.ndarray, title: str, path: str, xlim=(0, 4000)) -> None:
fig, ax = plt.subplots(figsize=(7, 3))
ax.vlines(freq, 0, inten, color="C0", linewidth=1.2)
ax.set_xlim(*xlim)
ax.set_ylim(0, max(float(np.max(inten)) * 1.1, 1.0))
ax.set_xlabel("Frequency / cm$^{-1}$")
ax.set_ylabel("IR intensity / km mol$^{-1}$")
ax.set_title(title)
fig.tight_layout()
fig.savefig(path, dpi=180)
plt.close(fig)
def main() -> None:
init(folder="report_workdir")
jobs = load_jobs()
opt, ph, mt, full = jobs["opt"], jobs["partial"], jobs["mt"], jobs["full"]
f_ph, i_ph, m_ph = vib_arrays(ph, "adf")
f_mt, i_mt, m_mt = vib_arrays(mt, "ams")
f_full, i_full, m_full = vib_arrays(full, "adf")
mt_mode = m_mt[0]
overlaps = np.array([abs(np.vdot(normalize(mt_mode).ravel(), normalize(m).ravel())) for m in m_full])
full_match_idx = int(np.argmax(overlaps))
# Images: selected mode displaced structures, with CO region highlighted.
system = opt.results.get_main_system()
system.add_atom_to_region(CIDX, "CO")
system.add_atom_to_region(OIDX, "CO")
disp = normalize(mt_mode) * 0.45
neg = system.copy(); neg.coords = np.array(system.coords) - disp
pos = system.copy(); pos.coords = np.array(system.coords) + disp
images = {
"mode -": view(neg, direction="along_pca3", show_regions=True, width=450, height=350),
"optimized": view(system, direction="along_pca3", show_regions=True, width=450, height=350),
"mode +": view(pos, direction="along_pca3", show_regions=True, width=450, height=350),
}
plot_image_grid(images, rows=1, save_path="mode_displacement_grid.png")
spectrum_plot(f_ph, i_ph, "Partial-Hessian spectrum (CO region)", "partial_hessian_spectrum.png")
spectrum_plot(f_mt, i_mt, "Mode-tracking spectrum (selected C=O mode)", "mode_tracking_spectrum.png")
spectrum_plot(f_full, i_full, "Full normal-modes IR spectrum", "full_spectrum.png")
selected = pd.DataFrame([
{"calculation": "Partial Hessian guess", "mode": PARTIAL_MODE, "frequency_cm-1": f_ph[PARTIAL_MODE-1], "intensity_km/mol": i_ph[PARTIAL_MODE-1], "CO_displacement_fraction": co_fraction(m_ph[PARTIAL_MODE-1])},
{"calculation": "Mode tracking", "mode": 1, "frequency_cm-1": f_mt[0], "intensity_km/mol": i_mt[0], "CO_displacement_fraction": co_fraction(m_mt[0])},
{"calculation": "Full normal modes (best overlap)", "mode": full_match_idx + 1, "frequency_cm-1": f_full[full_match_idx], "intensity_km/mol": i_full[full_match_idx], "CO_displacement_fraction": co_fraction(m_full[full_match_idx])},
])
t_opt = parse_duration("01-run_workdir/logfile", "01_opt")
t_ph = parse_duration("02-continue_workdir/logfile", "02_partial_hessian")
t_mt = parse_duration("03-rest_workdir/logfile", "03_mode_tracking")
t_full = parse_duration("03-rest_workdir/logfile", "04_full_normal_modes")
timings = pd.DataFrame([
{"job": "01_opt", "description": "Geometry optimization", "wall_s": t_opt},
{"job": "02_partial_hessian", "description": "CO-region partial Hessian", "wall_s": t_ph},
{"job": "03_mode_tracking", "description": "Mode tracking from mode 153", "wall_s": t_mt},
{"job": "04_full_normal_modes", "description": "Full normal modes", "wall_s": t_full},
{"job": "partial+mode_tracking", "description": "Selective workflow", "wall_s": t_ph + t_mt},
])
speedup = t_full / (t_ph + t_mt)
md = []
md.append("# Mode tracking vs full normal modes for dydrogesterone\n")
md.append("Method: ADF/PBE/DZ with large frozen core. Dydrogesterone was constructed from the requested SMILES. ChemicalSystem bond orders and ring membership identified the non-ring C=O as C2–O3 (1-based), assigned to region `CO`.\n")
md.append("## Mode displacement image\n\n\n")
md.append("## IR spectra\n\n\n\n\n\n\n")
md.append("## Selected C=O mode\n\n" + selected.to_markdown(index=False, floatfmt=".3f") + "\n")
md.append("## Timings\n\n" + timings.to_markdown(index=False, floatfmt=".1f") + "\n")
md.append(f"\nSelective partial-Hessian + mode-tracking time = {t_ph + t_mt:.1f} s vs full normal modes = {t_full:.1f} s, speedup = {speedup:.2f}x.\n")
md.append("\n## Conclusion\n")
md.append("Mode tracking gives a C=O frequency and intensity very close to the corresponding full normal-mode result, while requiring much less wall time than the full Hessian.\n")
md.append("\n## Provenance and inputs\n")
for key, (path, why) in JOBS.items():
md.append(f"\n### {key}: `{path}`\n\n{why}\n\n```ams\n{jobs[key].get_input()}\n```\n")
Path("report.md").write_text("\n".join(md))
print(Path("report.md").resolve())
finish()
if __name__ == "__main__":
main()
Original Markdown report
# Mode tracking vs full normal modes for dydrogesterone
Method: ADF/PBE/DZ with large frozen core. Dydrogesterone was constructed from the requested SMILES. ChemicalSystem bond orders and ring membership identified the non-ring C=O as C2–O3 (1-based), assigned to region `CO`.
## Mode displacement image

## IR spectra



## Selected C=O mode
| calculation | mode | frequency_cm-1 | intensity_km/mol | CO_displacement_fraction |
|:---------------------------------|-------:|-----------------:|-------------------:|---------------------------:|
| Partial Hessian guess | 153 | 1533.738 | 115.744 | 1.000 |
| Mode tracking | 1 | 1562.423 | 86.508 | 0.374 |
| Full normal modes (best overlap) | 117 | 1560.353 | 83.544 | 0.350 |
## Timings
| job | description | wall_s |
|:----------------------|:----------------------------|---------:|
| 01_opt | Geometry optimization | 348.0 |
| 02_partial_hessian | CO-region partial Hessian | 131.0 |
| 03_mode_tracking | Mode tracking from mode 153 | 440.0 |
| 04_full_normal_modes | Full normal modes | 1803.0 |
| partial+mode_tracking | Selective workflow | 571.0 |
Selective partial-Hessian + mode-tracking time = 571.0 s vs full normal modes = 1803.0 s, speedup = 3.16x.
## Conclusion
Mode tracking gives a C=O frequency and intensity very close to the corresponding full normal-mode result, while requiring much less wall time than the full Hessian.
## Provenance and inputs
### opt: `01-run_workdir/01_opt`
Geometry optimization at ADF/PBE/DZ large core.
```ams
Task GeometryOptimization
System
Atoms
C -4.5753007624 2.4335757077 -0.3051238140
C -4.1654044269 1.4231319749 0.7300567028 region=CO
O -4.4674968841 1.6330354323 1.8950202972 region=CO
C -3.4249194595 0.1349544347 0.3858899036
C -3.3192691179 -0.1859566386 -1.1125546573
C -2.0693702052 -1.0486415561 -1.2804430380
C -1.3924473893 -1.1266345242 0.0973200504
C -1.9726158255 0.0491246723 0.9254402220
C -1.1997086852 1.3730512519 0.6537656577
C 0.3222386059 1.2194765553 0.7371377451
C 0.8338420837 0.1739848117 -0.2850518607
C 0.1597751178 -1.1965994917 0.0065967194
C 0.7603192912 -1.8095625610 1.2512107198
C 2.0788335458 -1.8018448697 1.4263619842
C 2.9391408645 -1.1699416326 0.4132904296
C 4.1328084585 -1.7217137353 0.1453610078
C 4.9015536137 -1.3363797622 -1.0501572441
O 6.0660755057 -1.7889615227 -1.2081132259
C 4.3173352277 -0.4223716682 -2.0919404215
C 2.8083777155 -0.1913471249 -1.8811425169
C 2.4223452480 0.0318179121 -0.3877414796
C 3.1524503365 1.2995573959 0.1344050991
C -1.9750236367 -0.2703983542 2.4407161276
H -5.2374058363 1.9570953870 -1.0578338512
H -3.6770724868 2.8518506737 -0.8043078900
H -5.1308577997 3.2722925799 0.1664734311
H -4.0167277510 -0.6968517270 0.8346116809
H -3.1923349535 0.7292849107 -1.7274037391
H -4.2265497822 -0.7238688541 -1.4649990443
H -1.4024495612 -0.5921318180 -2.0431039754
H -2.3440017427 -2.0668804766 -1.6343452623
H -1.7508120077 -2.0825689555 0.5474413253
H -1.4447604627 1.7617058398 -0.3585794330
H -1.5182697896 2.1543818490 1.3782845605
H 0.7454608423 2.2195687215 0.5081281572
H 0.6300684955 0.9484578987 1.7688376311
H 0.4645801947 0.5269992359 -1.2733759104
H 0.4129277678 -1.8847911774 -0.8310984850
H 0.1367904154 -2.3082919568 1.9827164786
H 2.5127169465 -2.3283090113 2.2680463583
H 4.4996337377 -2.5454953282 0.7474026720
H 4.8575609769 0.5477101379 -2.0691281882
H 4.4765118113 -0.8661087541 -3.0983229054
H 2.4950166965 0.6819829426 -2.4946876398
H 2.2624511353 -1.0792067427 -2.2710233174
H 2.8637673384 2.1918824411 -0.4610878495
H 4.2554742135 1.1973245897 0.0771896657
H 2.9244125570 1.4787509336 1.2061068447
H -2.4612486216 0.5441744889 3.0152424596
H -2.5221771041 -1.2147790409 2.6483217466
H -0.9462444517 -0.3755354951 2.8356480095
End
BondOrders
1 2 1.0
1 24 1.0
1 25 1.0
1 26 1.0
2 3 2.0
2 4 1.0
4 5 1.0
4 8 1.0
4 27 1.0
5 6 1.0
5 28 1.0
5 29 1.0
6 7 1.0
6 30 1.0
6 31 1.0
7 8 1.0
7 12 1.0
7 32 1.0
8 9 1.0
8 23 1.0
9 10 1.0
9 33 1.0
9 34 1.0
10 11 1.0
10 35 1.0
10 36 1.0
11 12 1.0
11 21 1.0
11 37 1.0
12 13 1.0
12 38 1.0
13 14 2.0
13 39 1.0
14 15 1.0
14 40 1.0
15 16 2.0
15 21 1.0
16 17 1.0
16 41 1.0
17 18 2.0
17 19 1.0
19 20 1.0
19 42 1.0
19 43 1.0
20 21 1.0
20 44 1.0
20 45 1.0
21 22 1.0
22 46 1.0
22 47 1.0
22 48 1.0
23 49 1.0
23 50 1.0
23 51 1.0
End
End
Engine adf
Basis
Core Large
Type DZ
End
XC
GGA PBE
End
EndEngine
```
### partial: `02-continue_workdir/02_partial_hessian`
Partial Hessian / normal-modes calculation restricted to CO region.
```ams
NormalModes
ReScanModes no
End
Properties
NormalModes yes
SelectedRegionForHessian CO
End
Task SinglePoint
System
Atoms
C -4.5319269049 2.4489057819 -0.1266719978
C -4.2469227153 1.3078809949 0.8293588846 region=CO
O -4.6530787271 1.3640220185 2.0211398418 region=CO
C -3.4689421686 0.0871517694 0.3591813709
C -3.3585772471 -0.1547569368 -1.1697998017
C -2.0459432386 -0.9813621909 -1.3681096305
C -1.3992200107 -1.1200174701 0.0439506404
C -1.9784921099 0.0574928560 0.8902091955
C -1.2300829648 1.3695706616 0.5459659072
C 0.3051208599 1.2291440267 0.6600470278
C 0.8302861210 0.1558311317 -0.3226725508
C 0.1467191411 -1.2086947645 0.0073548278
C 0.7388901329 -1.7620123046 1.2889587699
C 2.0771909169 -1.7194374740 1.4858758488
C 2.9298387032 -1.1680053509 0.4350207664
C 4.1519376618 -1.7186909523 0.1660898354
C 4.9552240909 -1.3641843554 -1.0035185199
O 6.1256772709 -1.8284561992 -1.1647532365
C 4.3313411414 -0.4529542293 -2.0565709976
C 2.8096419197 -0.2606947107 -1.8856430283
C 2.4046272791 0.0084815730 -0.4051833549
C 3.1293007137 1.2865649385 0.1099535243
C -1.9498023112 -0.2043487418 2.4083021698
H -5.2188794642 2.1118323938 -0.9232765188
H -3.6132827008 2.8181311167 -0.6105309970
H -5.0082179145 3.2629770567 0.4381364126
H -3.9665551327 -0.7814731795 0.8312939829
H -3.2952089715 0.7962816324 -1.7210196277
H -4.2455540736 -0.6911111993 -1.5458737279
H -1.3650826442 -0.4633739864 -2.0636550793
H -2.2514975769 -1.9767098151 -1.7962965378
H -1.7762925426 -2.0582910184 0.4970591002
H -1.4669009115 1.6769839874 -0.4901591001
H -1.5794507713 2.1759705462 1.2180498752
H 0.7560293390 2.2084591953 0.4308065219
H 0.5910114310 0.9709612485 1.6941792179
H 0.5020584773 0.4646152353 -1.3339354749
H 0.4057189942 -1.9276512436 -0.8008994923
H 0.0860043289 -2.2654120124 2.0082370760
H 2.5449642773 -2.1989762673 2.3515551787
H 4.5593710931 -2.5149786849 0.7963210784
H 4.8598133002 0.5169670446 -2.0155853495
H 4.5674579675 -0.8896962719 -3.0423644307
H 2.4654295464 0.5789179285 -2.5161414977
H 2.2905085734 -1.1760185463 -2.2255074669
H 2.8407409696 2.1669200764 -0.4893639455
H 4.2209215079 1.1604766950 0.0468392050
H 2.8856457942 1.4765735719 1.1669734994
H -2.5554393950 0.5508254965 2.9367517979
H -2.3828888284 -1.1933890656 2.6391530348
H -0.9232322273 -0.1712420059 2.8062257114
End
BondOrders
1 2 1.0
1 24 1.0
1 25 1.0
1 26 1.0
2 3 2.0
2 4 1.0
4 5 1.0
4 8 1.0
4 27 1.0
5 6 1.0
5 28 1.0
5 29 1.0
6 7 1.0
6 30 1.0
6 31 1.0
7 8 1.0
7 12 1.0
7 32 1.0
8 9 1.0
8 23 1.0
9 10 1.0
9 33 1.0
9 34 1.0
10 11 1.0
10 35 1.0
10 36 1.0
11 12 1.0
11 21 1.0
11 37 1.0
12 13 1.0
12 38 1.0
13 14 2.0
13 39 1.0
14 15 1.0
14 40 1.0
15 16 2.0
15 21 1.0
16 17 1.0
16 41 1.0
17 18 2.0
17 19 1.0
19 20 1.0
19 42 1.0
19 43 1.0
20 21 1.0
20 44 1.0
20 45 1.0
21 22 1.0
22 46 1.0
22 47 1.0
22 48 1.0
23 49 1.0
23 50 1.0
23 51 1.0
End
End
Engine adf
Basis
Core Large
Type DZ
End
XC
GGA PBE
End
EndEngine
```
### mt: `03-rest_workdir/03_mode_tracking`
Mode tracking started from partial-Hessian C=O stretch mode 153.
```ams
Task VibrationalAnalysis
VibrationalAnalysis
ModeTracking
HessianGuess File
HessianPath /home/ubuntu/work/02-continue_workdir/02_partial_hessian/adf.rkf
TrackingMethod OverlapPrevious
End
NormalModes
ModeFile /home/ubuntu/work/02-continue_workdir/02_partial_hessian/adf.rkf
ModeInputFormat File
ModeSelect
ModeNumber 153
End
End
Type ModeTracking
End
System
Atoms
C -4.5319269049 2.4489057819 -0.1266719978
C -4.2469227153 1.3078809949 0.8293588846 region=CO
O -4.6530787271 1.3640220185 2.0211398418 region=CO
C -3.4689421686 0.0871517694 0.3591813709
C -3.3585772471 -0.1547569368 -1.1697998017
C -2.0459432386 -0.9813621909 -1.3681096305
C -1.3992200107 -1.1200174701 0.0439506404
C -1.9784921099 0.0574928560 0.8902091955
C -1.2300829648 1.3695706616 0.5459659072
C 0.3051208599 1.2291440267 0.6600470278
C 0.8302861210 0.1558311317 -0.3226725508
C 0.1467191411 -1.2086947645 0.0073548278
C 0.7388901329 -1.7620123046 1.2889587699
C 2.0771909169 -1.7194374740 1.4858758488
C 2.9298387032 -1.1680053509 0.4350207664
C 4.1519376618 -1.7186909523 0.1660898354
C 4.9552240909 -1.3641843554 -1.0035185199
O 6.1256772709 -1.8284561992 -1.1647532365
C 4.3313411414 -0.4529542293 -2.0565709976
C 2.8096419197 -0.2606947107 -1.8856430283
C 2.4046272791 0.0084815730 -0.4051833549
C 3.1293007137 1.2865649385 0.1099535243
C -1.9498023112 -0.2043487418 2.4083021698
H -5.2188794642 2.1118323938 -0.9232765188
H -3.6132827008 2.8181311167 -0.6105309970
H -5.0082179145 3.2629770567 0.4381364126
H -3.9665551327 -0.7814731795 0.8312939829
H -3.2952089715 0.7962816324 -1.7210196277
H -4.2455540736 -0.6911111993 -1.5458737279
H -1.3650826442 -0.4633739864 -2.0636550793
H -2.2514975769 -1.9767098151 -1.7962965378
H -1.7762925426 -2.0582910184 0.4970591002
H -1.4669009115 1.6769839874 -0.4901591001
H -1.5794507713 2.1759705462 1.2180498752
H 0.7560293390 2.2084591953 0.4308065219
H 0.5910114310 0.9709612485 1.6941792179
H 0.5020584773 0.4646152353 -1.3339354749
H 0.4057189942 -1.9276512436 -0.8008994923
H 0.0860043289 -2.2654120124 2.0082370760
H 2.5449642773 -2.1989762673 2.3515551787
H 4.5593710931 -2.5149786849 0.7963210784
H 4.8598133002 0.5169670446 -2.0155853495
H 4.5674579675 -0.8896962719 -3.0423644307
H 2.4654295464 0.5789179285 -2.5161414977
H 2.2905085734 -1.1760185463 -2.2255074669
H 2.8407409696 2.1669200764 -0.4893639455
H 4.2209215079 1.1604766950 0.0468392050
H 2.8856457942 1.4765735719 1.1669734994
H -2.5554393950 0.5508254965 2.9367517979
H -2.3828888284 -1.1933890656 2.6391530348
H -0.9232322273 -0.1712420059 2.8062257114
End
BondOrders
1 2 1.0
1 24 1.0
1 25 1.0
1 26 1.0
2 3 2.0
2 4 1.0
4 5 1.0
4 8 1.0
4 27 1.0
5 6 1.0
5 28 1.0
5 29 1.0
6 7 1.0
6 30 1.0
6 31 1.0
7 8 1.0
7 12 1.0
7 32 1.0
8 9 1.0
8 23 1.0
9 10 1.0
9 33 1.0
9 34 1.0
10 11 1.0
10 35 1.0
10 36 1.0
11 12 1.0
11 21 1.0
11 37 1.0
12 13 1.0
12 38 1.0
13 14 2.0
13 39 1.0
14 15 1.0
14 40 1.0
15 16 2.0
15 21 1.0
16 17 1.0
16 41 1.0
17 18 2.0
17 19 1.0
19 20 1.0
19 42 1.0
19 43 1.0
20 21 1.0
20 44 1.0
20 45 1.0
21 22 1.0
22 46 1.0
22 47 1.0
22 48 1.0
23 49 1.0
23 50 1.0
23 51 1.0
End
End
Engine adf
Basis
Core Large
Type DZ
End
XC
GGA PBE
End
EndEngine
```
### full: `03-rest_workdir/04_full_normal_modes`
Full normal-modes verification calculation.
```ams
NormalModes
ReScanModes no
End
Properties
NormalModes yes
End
Task SinglePoint
System
Atoms
C -4.5319269049 2.4489057819 -0.1266719978
C -4.2469227153 1.3078809949 0.8293588846 region=CO
O -4.6530787271 1.3640220185 2.0211398418 region=CO
C -3.4689421686 0.0871517694 0.3591813709
C -3.3585772471 -0.1547569368 -1.1697998017
C -2.0459432386 -0.9813621909 -1.3681096305
C -1.3992200107 -1.1200174701 0.0439506404
C -1.9784921099 0.0574928560 0.8902091955
C -1.2300829648 1.3695706616 0.5459659072
C 0.3051208599 1.2291440267 0.6600470278
C 0.8302861210 0.1558311317 -0.3226725508
C 0.1467191411 -1.2086947645 0.0073548278
C 0.7388901329 -1.7620123046 1.2889587699
C 2.0771909169 -1.7194374740 1.4858758488
C 2.9298387032 -1.1680053509 0.4350207664
C 4.1519376618 -1.7186909523 0.1660898354
C 4.9552240909 -1.3641843554 -1.0035185199
O 6.1256772709 -1.8284561992 -1.1647532365
C 4.3313411414 -0.4529542293 -2.0565709976
C 2.8096419197 -0.2606947107 -1.8856430283
C 2.4046272791 0.0084815730 -0.4051833549
C 3.1293007137 1.2865649385 0.1099535243
C -1.9498023112 -0.2043487418 2.4083021698
H -5.2188794642 2.1118323938 -0.9232765188
H -3.6132827008 2.8181311167 -0.6105309970
H -5.0082179145 3.2629770567 0.4381364126
H -3.9665551327 -0.7814731795 0.8312939829
H -3.2952089715 0.7962816324 -1.7210196277
H -4.2455540736 -0.6911111993 -1.5458737279
H -1.3650826442 -0.4633739864 -2.0636550793
H -2.2514975769 -1.9767098151 -1.7962965378
H -1.7762925426 -2.0582910184 0.4970591002
H -1.4669009115 1.6769839874 -0.4901591001
H -1.5794507713 2.1759705462 1.2180498752
H 0.7560293390 2.2084591953 0.4308065219
H 0.5910114310 0.9709612485 1.6941792179
H 0.5020584773 0.4646152353 -1.3339354749
H 0.4057189942 -1.9276512436 -0.8008994923
H 0.0860043289 -2.2654120124 2.0082370760
H 2.5449642773 -2.1989762673 2.3515551787
H 4.5593710931 -2.5149786849 0.7963210784
H 4.8598133002 0.5169670446 -2.0155853495
H 4.5674579675 -0.8896962719 -3.0423644307
H 2.4654295464 0.5789179285 -2.5161414977
H 2.2905085734 -1.1760185463 -2.2255074669
H 2.8407409696 2.1669200764 -0.4893639455
H 4.2209215079 1.1604766950 0.0468392050
H 2.8856457942 1.4765735719 1.1669734994
H -2.5554393950 0.5508254965 2.9367517979
H -2.3828888284 -1.1933890656 2.6391530348
H -0.9232322273 -0.1712420059 2.8062257114
End
BondOrders
1 2 1.0
1 24 1.0
1 25 1.0
1 26 1.0
2 3 2.0
2 4 1.0
4 5 1.0
4 8 1.0
4 27 1.0
5 6 1.0
5 28 1.0
5 29 1.0
6 7 1.0
6 30 1.0
6 31 1.0
7 8 1.0
7 12 1.0
7 32 1.0
8 9 1.0
8 23 1.0
9 10 1.0
9 33 1.0
9 34 1.0
10 11 1.0
10 35 1.0
10 36 1.0
11 12 1.0
11 21 1.0
11 37 1.0
12 13 1.0
12 38 1.0
13 14 2.0
13 39 1.0
14 15 1.0
14 40 1.0
15 16 2.0
15 21 1.0
16 17 1.0
16 41 1.0
17 18 2.0
17 19 1.0
19 20 1.0
19 42 1.0
19 43 1.0
20 21 1.0
20 44 1.0
20 45 1.0
21 22 1.0
22 46 1.0
22 47 1.0
22 48 1.0
23 49 1.0
23 50 1.0
23 51 1.0
End
End
Engine adf
Basis
Core Large
Type DZ
End
XC
GGA PBE
End
EndEngine
```