CCL:G: Optimization with imaginary frequency
- From: "Sten Nilsson Lill" <stenil *
chem.gu.se>
- Subject: CCL:G: Optimization with imaginary frequency
- Date: Thu, 24 Jul 2008 21:11:22 +0200 (CEST)
Sent to CCL by: "Sten Nilsson Lill" [stenil+*+chem.gu.se]
Hello René and Flavio,
you can do something similar with the Chemcraft program
(http://www.chemcraftprog.com). When animating the imaginary
frequency in
the program you can freeze the structure at the "end-points" of the
vibration and thus get two sets of new coordinates for starting
calculations for finding the two minima on each side of the TS.
Hope this helps,
Sten
>
> Sent to CCL by: René Kanters [rkanters++richmond.edu]
> Hi Flavio,
>
> I hacked together a little perl scrip that will look at the first set
> frequency information in a gaussian calculation and generate a new
> set of xyz coordinates in which the structure is moved along a
> vibrational coordinate for a certain amount (see the command line
> arguments in the script below).
>
> Note that it may be necessary, depending on the symmetry of the
> saddlepoint you got to create a new input with going in the positive
> and another one in the negative direction of the imaginary frequency
> since you can't be sure which one will lead you to a lower minimum.
>
> I hope this helps.
>
> René
>
> PS it's not pretty (I am not a perl programmer), but it has worked
> for me.
>
> #! /usr/bin/perl
> ###############################################
> # script to take a gaussian log file output and generate structure
> # information (cartesian) for a new structure with a displacement
> # along a frequency coordinate in the direction along the '-v' vibration
> # for a displacement of '-d' times the vibrational vector
> #
> # command line arguments:
> #
> # -h : prints help and quits.
> # -d float : displacement along vibrational mode default 0.1
> # -v int : vibration number to use default 1
> # required : filename (only sees last one)
> ################################################
>
> #
> $test = 0; # for debugging purposes (prints out extra stuff)
>
> # set up the defaults
> $vibration = 1;
> $displacement = 0.1;
> $file = "";
>
> # 'constants' not using the 'use constant NAME => value;' method.
> $C_STRUCTURE = "Standard orientation:";
> $C_ENDSTRUCTURE = "---------";
> $C_FREQUENCY = "Frequencies --";
>
> while ($#ARGV >= 0) {
> if ($ARGV[0] eq "-d") { $displacement = $ARGV[1]; shift
]*[ARGV; }
> elsif ($ARGV[0] eq "-v") { $vibration = $ARGV[1]; shift
]*[ARGV; }
> elsif ($ARGV[0] eq "-h") { &usage(); exit;}
> else { $file = $ARGV[0];}
> shift ]*[ARGV;
> }
>
> if ($file eq "") { &usage(); exit;}
>
> open(IN,$file) || die "Could not open file '$file'.\n";
>
> while (1) {
> # read until I get a structure (should happen first) or a frequency
> until ($_ = <IN>, $_ =~ /$C_STRUCTURE/ or $_ =~ /$C_FREQUENCY/ or
> eof) { }
> if ($_ =~ /$C_STRUCTURE/) { # READ THE STRUCTURE
> $nat = -1; # reset the atom index counter : only need last
> structure
> $at = (); # clear out the arrays of atomnumber, x, y and z
> $x = ();
> $y = ();
> $z = ();
> skiplines(4); # position read line to first atom in the list
> while ($_ = <IN> and not $_ =~ /$C_ENDSTRUCTURE/ ) {
> ]*[tokens = split(' ', $_);
> $nat++;
> $at[$nat] = $tokens[1];
> $xind = $#tokens - 2; # needed if the atomic type is missing
> (happens sometimes).
> $x[$nat] = $tokens[$xind];
> $y[$nat] = $tokens[$xind+1];
> $z[$nat] = $tokens[$xind+2];
> }
> } elsif ($_ =~ /$C_FREQUENCY/) { # READ THE FREQUENCY INFORMATION
> # since there are three vibrations per line, I can determine how
> # many of these I need to skip before I can read the frequency I
> need.
> $skipsize = 4 + ($nat+1) + 3; # skip rest header, vibrations
> and start header
> for ($i=0; $i<int($vibration/3); $i++) { skiplines($skipsize); }
>
> skiplines(4);
> $xind = 2 + (($vibration-1) % 3) * 3; # position in the tokens
> of vib vector
> if ($test eq 1) { print "vibration = $vibration, xind =
$xind\n"; }
> for ($i=0;$i<=$nat;$i++) {
> $_ = <IN>;
> ]*[tokens = split(' ',$_);
> if ($test eq 1 ) {
> print "input $_";
> print "($x[$i],$y[$i],$z[$i]) + $displacement x ($tokens
> [$xind],$tokens[$xind+1],$tokens[$xind+2])\n";
> }
> printf "%4d % .6f % .6f % .6f\n",$at[$i], $x[$i]+
> $displacement*$tokens[$xind], $y[$i]+$displacement*$tokens[$xind+1],
> $z[$i]+$displacement*$tokens[$xind+2];
> }
> exit; # AND WE ARE DONE!!!!
> } elsif (eof) { close IN; exit; }
> }
>
> ##################################################
> # skiplines : argument n: number of lines to skip
> ##################################################
> sub skiplines {
> local $n, $i;
> $n = shift(]*[_);
> for ($i=0;$i<$n;$i++) { <IN> || die "skiplines encountered
EOF."; }
> }
>
>
> ##################################################
> # usage prints a message about how to use sp2g03
> ##################################################
> sub usage {
> print <<ENDUSAGE;
> Usage: nfreq [-h] [-d displacement] [-v vibrationnnumber] filename
>
> -d : displacement step along vibrational mode default 0.1
> -v : index of vibrational mode to follow default 1
> -h : prints this help
>
> Will create the structure '-d' along the '-v'th vibrational mode of
> the stucture.
> ENDUSAGE
> }
>
> On Jul 23, 2008, at 3:39 PM, flavio forti fforti.:.fortisrl.com.ar
> wrote:
>
>>
>> Sent to CCL by: "flavio forti" [fforti^_^fortisrl.com.ar]
>> Hi everybody. I am trying to optimize a large set of histamine
>> monocation conformers in solution (PCM) with B3LYP/6-31G*. I had
>> some which converged to a saddle point (1 imaginary frequency) but
>> finally, after several reoptimizations with CalcFC they arrived to
>> a minimum. But there is one still resisting. CalcAll would be to
>> expensive, what do you suggest?
>> thanks
>> flavio
>>
>>
>>
>> -= This is automatically added to each message by the mailing
>> script =-
>> To recover the email address of the author of the message, please
>> change> Conferences: http://server.ccl.net/chemistry/announcements/
>> conferences/
>>
>> Search Messages: http://www.ccl.net/htdig (login: ccl, Password:
>> search)>
>
>
Ph. D. Sten Nilsson Lill
Dep. of Chemistry
Göteborg University
Kemigården 4
S-412 96 Göteborg, Sweden
Phone: +46-31-772 2901
Fax: +46-31-772 3840
E-mail: stenil_-_chem.gu.se
Alternative e-mail: slill1_-_lsu.edu