@@ -244,6 +244,105 @@ def __init__(self, parent, helpURL):
244244 label = "FD Step Size:" )
245245 vibSizer .AddWidget (self .fdStep )
246246
247+ # ---------------------------------------------------------
248+ # Freq= options (issue #110). Every one of these was run
249+ # through the installed Gaussian 16 before being offered
250+ # here, water/B3LYP/STO-3G, and two combinations turn out to
251+ # be FATAL rather than merely ignored -- see CheckDependency
252+ # below, which is what stops the user asking for them:
253+ #
254+ # Freq=(Raman,Numerical) "Unrecognized FrqTyp= 9",
255+ # Error termination in l1.exe
256+ # Freq=(Anharmonic,Projected) "Mismatch between the number
257+ # of normal modes of the current
258+ # calculation and the input
259+ # source: 3 vs 2", l717.exe
260+ #
261+ # Everything else here ran to Normal termination, including
262+ # Raman with EnOnly, Raman with HPModes, Anharmonic with
263+ # Numerical, and Anharmonic with each of VibRot,
264+ # SaveNormalModes and HPModes.
265+ # ---------------------------------------------------------
266+
267+ # Gaussian computes Raman activities by default for HF but
268+ # NOT for DFT, so for the methods most people use the
269+ # VIBRAM property gaussian-16.desc has always parsed was
270+ # simply never produced. Default off: it costs extra work.
271+ self .raman = EcceCheckBox (self ,
272+ label = " Raman Activities" ,
273+ name = "ES.Runtype.Vibration.ComputeRaman" ,
274+ default = 0 )
275+ vibSizer .AddWidget (self .raman )
276+
277+ # Second-order perturbative anharmonic analysis. The
278+ # harmonic block is still printed and still feeds
279+ # VIB/VIBFREQ/...; the fundamentals are extracted separately
280+ # into ANHARMFREQ/ANHARMIR by gaussian-16.anharm.
281+ self .anharmonic = EcceCheckBox (self ,
282+ label = " Anharmonic Frequencies" ,
283+ name = "ES.Runtype.Vibration.Anharmonic" ,
284+ default = 0 )
285+ vibSizer .AddWidget (self .anharmonic )
286+
287+ # High-precision normal modes. Gaussian then prints the
288+ # modes TWICE under an identical header; gaussian-16.vib
289+ # drops the high-precision copy, which it could not read and
290+ # which used to make VIBFREQ come out with twice as many
291+ # values as row labels.
292+ self .hpModes = EcceCheckBox (self ,
293+ label = " High-Precision Modes" ,
294+ name = "ES.Runtype.Vibration.HighPrecisionModes" ,
295+ default = 0 )
296+ vibSizer .AddWidget (self .hpModes )
297+
298+ self .projected = EcceCheckBox (self ,
299+ label = " Project Out Translation/Rotation" ,
300+ name = "ES.Runtype.Vibration.Projected" ,
301+ default = 0 )
302+ vibSizer .AddWidget (self .projected )
303+
304+ self .vibRot = EcceCheckBox (self ,
305+ label = " Vibration-Rotation Coupling" ,
306+ name = "ES.Runtype.Vibration.VibRot" ,
307+ default = 0 )
308+ vibSizer .AddWidget (self .vibRot )
309+
310+ self .saveNormalModes = EcceCheckBox (self ,
311+ label = " Save Normal Modes To Checkpoint" ,
312+ name = "ES.Runtype.Vibration.SaveNormalModes" ,
313+ default = 0 )
314+ vibSizer .AddWidget (self .saveNormalModes )
315+
316+ # Thermochemistry conditions. Same checkbox-enables-a-value
317+ # shape as Max Steps above, so that a deck that does not ask
318+ # for them carries no Temperature=/Pressure= at all and
319+ # Gaussian keeps its own 298.15 K / 1 atm defaults.
320+ self .thermoCheckBox = EcceCheckBox (self ,
321+ label = " Thermochemistry At:" ,
322+ name = "ES.Runtype.Vibration.UseThermochemistry" ,
323+ default = 0 )
324+ vibSizer .AddWidget (self .thermoCheckBox )
325+
326+ self .temperature = EcceFloatInput (self ,
327+ unit = "Kelvin" ,
328+ name = "ES.Runtype.Vibration.Temperature" ,
329+ default = 298.15 ,
330+ hardRange = "(0..)" ,
331+ softRange = "(0..5000]" ,
332+ label = "Temperature:" ,
333+ export = 1 )
334+ vibSizer .AddWidget (self .temperature )
335+
336+ self .pressure = EcceFloatInput (self ,
337+ unit = "Atmosphere" ,
338+ name = "ES.Runtype.Vibration.Pressure" ,
339+ default = 1.0 ,
340+ hardRange = "(0..)" ,
341+ softRange = "(0..1000]" ,
342+ label = "Pressure:" ,
343+ export = 1 )
344+ vibSizer .AddWidget (self .pressure )
345+
247346 self .panelSizer .Add (vibSizer )
248347 if EcceGlobals .RunType == "Magnetic" :
249348 magneticSizer = EcceBoxSizer (self ,
@@ -279,6 +378,24 @@ def CheckDependency(self):
279378 EcceGlobals .RunType == "GeoVib" ):
280379 self .fdStep .Enable (self .vibMethod .GetValue () != "Analytic" )
281380
381+ # Both of these combinations are fatal in Gaussian 16, not
382+ # merely ignored -- see the comment where the controls are
383+ # built. Disabling rather than warning keeps them
384+ # unaskable; ai.gauss16 refuses them again in its main flow,
385+ # because a calculation saved before this dialog existed can
386+ # still carry the offending pair.
387+ ramanOK = (self .vibMethod .GetValue () != "Numerical 2nd Derivative" )
388+ self .raman .Enable (ramanOK )
389+ if not ramanOK :
390+ self .raman .SetValue (0 )
391+
392+ self .projected .Enable (not self .anharmonic .GetValue ())
393+ if self .anharmonic .GetValue ():
394+ self .projected .SetValue (0 )
395+
396+ self .temperature .Enable (self .thermoCheckBox .GetValue ())
397+ self .pressure .Enable (self .thermoCheckBox .GetValue ())
398+
282399
283400frame = Ged16RunTypeFrame (None ,
284401 title = "ECCE Gaussian-16 Editor: Runtype Details" ,
0 commit comments