Skip to content

Commit 0fa76bb

Browse files
andyclaude
andcommitted
MOPAC: withdraw the VIBIR entry -- it killed eccejobmonitor on every job
Shipped this morning, withdrawn the same evening. Live testing: FATAL ERROR: JobOutputGet: end of file encountered while reading parse type VIBIR eccejobmonitor terminating abnormally, exit status 1 repeating forever as the monitor restarted. MOPAC jobs ran but could never be monitored, and Reconnect did not help. eccejobmonitor tails a file that is STILL BEING WRITTEN. If it matches a Begin and then reaches EOF before finding the End, that is FATAL -- not "wait and try again on the next poll". So an End must be a string guaranteed to appear, and "SYMMETRY NUMBER FOR POINT-GROUP" is not: MOPAC does not print it for every molecule or every runtype. Invisible to tests/parsers by construction. That suite replays COMPLETE files, so the End is always found. My own note in this file says to run every runtype through the simulation, and I did -- the simulation cannot model a partially-written file, which is the condition that matters. Recorded there so the next End-anchored entry gets thought about at EOF rather than only on finished output. The entry is kept commented out rather than deleted, with the diagnosis: mopac.vibir is correct and verified against a real CH4 run (the T2 modes carry intensity, A1 and E come out silent, which is right for Td). What is wrong is only the framing. A blank-line End will not do either -- MOPAC separates individual VIBRATION stanzas with blank lines, so it would close after the first and report one mode's intensity as though it were all of them, which is worse than nothing. Reopening #103 with this. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EFMUNbw2UpRPmgsqviAowb
1 parent e9c7202 commit 0fa76bb

3 files changed

Lines changed: 56 additions & 50 deletions

File tree

‎scripts/parsers/mopac.desc‎

Lines changed: 56 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -176,34 +176,62 @@ Frequency=last
176176
End=MASS-WEIGHTED COORDINATE ANALYSIS
177177
[END]
178178

179-
# IR intensities, from the DESCRIPTION OF VIBRATIONS block. Without
180-
# VIBIR (or VIBRAM) NModePanel::fillGraph() returns false and
181-
# initialize() falls back to showTable(), which is why MOPAC alone showed
182-
# a table where every other code shows the spectrum plot.
183-
#
184-
# Boundary check, per the End-line starvation hazard this file's header
185-
# warns about: Begin is DESCRIPTION OF VIBRATIONS, which lies after
186-
# [VIBFREQ]'s End (MASS-WEIGHTED COORDINATE ANALYSIS), so nothing is
187-
# eaten from under it. End is SYMMETRY NUMBER FOR POINT-GROUP, which is
188-
# no other entry's Begin -- [PNTGRP] anchors on MOLECULAR POINT GROUP,
189-
# and every occurrence of that in a real FORCE or GEO+VIB run comes
190-
# BEFORE this block, so consuming this line starves nothing.
191-
#
192-
# Skip=1 starts feeding at the line after Begin, which is blank;
193-
# mopac.vibir scans for its own markers and ignores everything else, so
194-
# the usual off-by-one that silently produces zero output does not apply.
195-
#
196-
# The block collapses degenerate modes (4 stanzas for CH4's 9 modes);
197-
# mopac.vibir expands them back out. See its header for why that is
198-
# structural rather than a frequency match, and for why the value is the
199-
# square of the transition dipole on a relative scale.
200-
[VIBIR]
201-
Script=mopac.vibir
202-
Begin=DESCRIPTION OF VIBRATIONS
203-
Skip=1
204-
Frequency=last
205-
End=SYMMETRY NUMBER FOR POINT-GROUP
206-
[END]
179+
# IR INTENSITIES ARE DISABLED. The entry below is kept, commented out,
180+
# because the parser (mopac.vibir) is correct and verified -- what is
181+
# wrong is the framing, and the fix belongs with someone who can test it
182+
# live.
183+
#
184+
# Shipped briefly on 2026-09-22 and withdrawn the same evening: it made
185+
# eccejobmonitor die on every MOPAC job.
186+
#
187+
# FATAL ERROR: JobOutputGet: end of file encountered while reading
188+
# parse type VIBIR
189+
# eccejobmonitor terminating abnormally, exit status 1
190+
#
191+
# eccejobmonitor tails a file that is STILL BEING WRITTEN. If it matches
192+
# a Begin and then reaches EOF before finding the End, that is fatal --
193+
# not "try again next poll". So an End must be a string that is
194+
# guaranteed to appear, and "SYMMETRY NUMBER FOR POINT-GROUP" is not:
195+
# MOPAC does not print it for every molecule or every runtype.
196+
#
197+
# This is invisible to tests/parsers, which replays COMPLETE files and
198+
# therefore always finds the End. Any End-anchored entry needs thinking
199+
# about at EOF, not just on a finished output.
200+
#
201+
# A fix needs an End that always follows the block. A blank line will
202+
# not do -- MOPAC separates the individual VIBRATION stanzas with blank
203+
# lines, so it would close after the first one and report a single
204+
# mode's intensity as though it were all of them, which is worse than
205+
# nothing. See issue #103.
206+
#
207+
# # IR intensities, from the DESCRIPTION OF VIBRATIONS block. Without
208+
# # VIBIR (or VIBRAM) NModePanel::fillGraph() returns false and
209+
# # initialize() falls back to showTable(), which is why MOPAC alone showed
210+
# # a table where every other code shows the spectrum plot.
211+
# #
212+
# # Boundary check, per the End-line starvation hazard this file's header
213+
# # warns about: Begin is DESCRIPTION OF VIBRATIONS, which lies after
214+
# # [VIBFREQ]'s End (MASS-WEIGHTED COORDINATE ANALYSIS), so nothing is
215+
# # eaten from under it. End is SYMMETRY NUMBER FOR POINT-GROUP, which is
216+
# # no other entry's Begin -- [PNTGRP] anchors on MOLECULAR POINT GROUP,
217+
# # and every occurrence of that in a real FORCE or GEO+VIB run comes
218+
# # BEFORE this block, so consuming this line starves nothing.
219+
# #
220+
# # Skip=1 starts feeding at the line after Begin, which is blank;
221+
# # mopac.vibir scans for its own markers and ignores everything else, so
222+
# # the usual off-by-one that silently produces zero output does not apply.
223+
# #
224+
# # The block collapses degenerate modes (4 stanzas for CH4's 9 modes);
225+
# # mopac.vibir expands them back out. See its header for why that is
226+
# # structural rather than a frequency match, and for why the value is the
227+
# # square of the transition dipole on a relative scale.
228+
# [VIBIR]
229+
# Script=mopac.vibir
230+
# Begin=DESCRIPTION OF VIBRATIONS
231+
# Skip=1
232+
# Frequency=last
233+
# End=SYMMETRY NUMBER FOR POINT-GROUP
234+
# [END]
207235

208236
# " ZERO POINT ENERGY 10.115 KCAL/MOL" -- already in
209237
# kcal/mol, the Energy converter's base unit, so no conversion.

‎tests/parsers/expected/mopac-ch4-force.txt‎

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -67,17 +67,6 @@ args: '.' 'Vibration' 'SE' 'RPM7' '0'
6767
values: -0.000000000000000e+00 -0.000000000000000e+00 -0.000000000000000e+00 0.000000000000000e+00 2.495000000000000e-01 1.590000000000000e-02 2.352000000000000e-01 8.320000000000000e-02 -1.590000000000000e-02 -1.306000000000000e-01 -1.571000000000000e-01 1.440000000000000e-01 -1.046000000000000e-01 -1.755000000000000e-01 -1.440000000000000e-01 -0.000000000000000e+00 0.000000000000000e+00 0.00000000000000 ...[3034 chars]
6868
units: Angstrom
6969

70-
[VIBIR] Script=mopac.vibir Freq=last Skip=1 Lines=-
71-
Begin=DESCRIPTION OF VIBRATIONS
72-
End=SYMMETRY NUMBER FOR POINT-GROUP
73-
begins=1 delivered=1 buffered_away=0
74-
block 1: begin-line=254 fed=35 rc=0 first-fed=''
75-
key: VIBIR
76-
size: 9
77-
rowlabels: 1 2 3 4 5 6 7 8 9
78-
values: 0.0000 0.0000 1.0920 1.0920 1.0920 0.4558 0.4558 0.4558 0.0000
79-
units: arb. units
80-
8170
[EZEROPT] Script=mopac.ezeropt Freq=last Skip=0 Lines=1
8271
Begin=ZERO POINT ENERGY
8372
begins=1 delivered=1 buffered_away=0

‎tests/parsers/expected/mopac-ch4-geovib.txt‎

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -109,17 +109,6 @@ args: '.' 'GeoVib' 'SE' 'RPM7' '0'
109109
values: 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 -0.000000000000000e+00 -2.127000000000000e-01 -1.314000000000000e-01 -2.005000000000000e-01 -7.090000000000000e-02 1.314000000000000e-01 2.076000000000000e-01 6.590000000000000e-02 -1.228000000000000e-01 -7.100000000000000e-03 2.177000000000000e-01 1.228000000000000e-01 0.000000000000000e+00 0.000000000000000e+00 -0.000000000000000e ...[3035 chars]
110110
units: Angstrom
111111

112-
[VIBIR] Script=mopac.vibir Freq=last Skip=1 Lines=-
113-
Begin=DESCRIPTION OF VIBRATIONS
114-
End=SYMMETRY NUMBER FOR POINT-GROUP
115-
begins=1 delivered=1 buffered_away=0
116-
block 1: begin-line=438 fed=35 rc=0 first-fed=''
117-
key: VIBIR
118-
size: 9
119-
rowlabels: 1 2 3 4 5 6 7 8 9
120-
values: 0.0000 0.0000 1.0922 1.0922 1.0922 0.4556 0.4556 0.4556 0.0000
121-
units: arb. units
122-
123112
[EZEROPT] Script=mopac.ezeropt Freq=last Skip=0 Lines=1
124113
Begin=ZERO POINT ENERGY
125114
begins=1 delivered=1 buffered_away=0

0 commit comments

Comments
 (0)