Chemistry-ESPT
view release on metacpan or search on metacpan
lib/Chemistry/ESPT/Gfchk.pm view on Meta::CPAN
$fchk->{CHARGE} = undef;
$fchk->{EIGEN} = [];
$fchk->{EELEC} = undef; # electronic energy
$fchk->{ESCF} = undef; # SCF energy
$fchk->{EINFO} = "E(elec)"; # total energy description
$fchk->{GRADIENT} = [];
$fchk->{HESSIAN} = []; # lower triangle only
$fchk->{HOMO} = undef;
$fchk->{MASS} = undef; # atomic masses
$fchk->{NREDINT} = 0; # number of red. internals
$fchk->{REDINTANGLE} = 0; # Redundant internal angles
$fchk->{REDINTBOND} = 0; # Redundant internal bonds
$fchk->{REDINTCOORD} = []; # Redundant internal coordinates
$fchk->{REDINTDIHEDRAL} = 0; # Redundant internal dihedrals
$fchk->{REDINTGRADIENT} = []; # Redundant internal gradient
$fchk->{REDINTHESSIAN} = []; # Redundant internal hessian
$fchk->{SSQUARED} = []; # <S**2>
bless($fchk, $class);
return $fchk;
}
## methods ##
=item B<$fchk-E<gt>analyze(filename [spin])>
Analyze the spin results in file called filename. Spin defaults to Alpha.
=cut
# set filename & spin then digest the file
sub analyze : method {
my $fchk = shift;
$fchk->prepare(@_);
$fchk->_digest();
return;
}
## subroutines ##
sub _digest {
my $fchk = shift;
# flags & counters
my $atomflag = 0;
my $atomtot = 0;
my $cartflag = 0;
my $carttot = 0;
my $col = 0;
my $counter = 0;
my $eigenflag = 0;
my $eigentot = 0;
my $geomcount = 0;
my $gradientflag = 0;
my $hessflag = 0;
my $hesstot = 0;
my $irccoord = 0;
my $ircdata = 0;
my $ircflag = 0;
my $ircgeomflag = 0;
my $ircgradientflag = 0;
my $ircresults = 0;
my $ircresultsflag = 0;
my $redinttot = 0;
my $redintflag = 0;
my $redintgradientflag = 0;
my $redinthessflag = 0;
my $redinthesstot = 0;
my $row = 0;
my $rparsed = 0;
my $Titleflag = 0;
my $Cflag = 0;
my $weightflag = 0;
# open filename for reading or display error
open(FCHKFILE,$fchk->{FILENAME}) || die "Could not read $fchk->{FILENAME}\n$!\n";
# quick check for IRC data since IRC data ends up at
# the end of the fchk file. This is not the most
# elegant way to do this, but works for now. -JLS
while (<FCHKFILE>) {
# skip blank lines
next if /^$/;
# check for IRC data and get # of IRC points
# grow IRC arrays according to results
# remember that arrays indices start at 0
if ( /^IRC\sNumber\sof\sgeometries\s+I\s+N=\s+\d+/ ) {
$ircflag = 1;
next;
}
if ( $ircflag == 1 && /^\s+(\d+)/ ) {
$ircflag = 0;
$fchk->{IRCPOINTS} = $1;
$#{$fchk->{IRCCOORD}} = $1 - 1;
$#{$fchk->{IRCGRADIENT}} = $1 - 1;
last;
}
}
# rewind file
seek(FCHKFILE, 0, 0);
# grab everything which may be useful
while (<FCHKFILE>){
# skip blank lines
next if /^$/;
# title which is the first line
# only the first 72 characters are present as of G03
if ( $Titleflag == 0 ) {
chomp($_);
s/\s+$//;
$fchk->{TITLE} = $_;
$Titleflag = 1;
next;
}
# Job Type, Method, & Basis
( run in 1.050 second using v1.01-cache-2.11-cpan-98e64b0badf )