N2x

From Wiki
Revision as of 18:59, 23 March 2010 by Sdonald (talk | contribs)
Jump to navigation Jump to search
#! /usr/bin/awk -f
#################################################################
#                                                               #
# n2x: extracts cartesian coordinates and energies from NWChem  #
# output, writing to stdout in molden xyz format.               #
#                                                               #
# SMAD 30/1/2008                                                #
#################################################################

BEGIN {
  i = 1;e = 1;
  atomlist = "H ,He,Li,Be,B ,C ,N ,O ,F ,Ne,Na,Mg,Al,Si,P ,S ,Cl,Ar,K ,Ca,Sc,Ti,V,Cr,Mn,Fe,Co,Ni,Cu,Zn,Ga,Ge,As,Se,Br,Kr,Rb,Sr,Y,Zr,Nb,Mo,Tc,Ru,Rh,Pd,Ag,Cd,In,Sn,Sb,Te,I ,Xe,Cs,Ba,La,Ce,Pr,Nd,Pm,Sm,Eu,Gd,Tb,Dy,Ho,Er,Tm,Yb,Lu,Hf,Ta,W,Re,Os,Ir,Pt,Au,Hg,Tl,Pb,Bi,Po,At,Rn,Fr,Ra,Ac,Th,Pa,U,Np,Pu,Am,Cm,Bk,Cf,Es,Fm,Md,No,Lr,Rf,Db,Sg,Bh,Hs,Mt";
  split(atomlist,PSE,",")
}
 
/Geometry "geometry" -> "geometry"/ {natoms=0;++steps}

/^@/ {
  if  ( $2 ~ /[0-9]+/ ) {
    E[e++]=$3
  }
}

/Geometry "geometry" -> "geometry"/,/Atomic Mass/ {
  if ( $1 ~ /[0-9]+/ ) {
    ++natoms;
    OZ[i] = int($3);
    X[i] = $4;
    Y[i] = $5;
    Z[i++] = $6
  }
}

END {
  i=1;k=1; j=natoms;
  do {
    if (j==natoms) {z++;printf("%i\n%22.8f\n",natoms,E[i++]);j=0};
    printf("%s %12.8f %12.8f %12.8f",PSE[OZ[k]],X[k],Y[k],Z[k]);
    printf("\n");
    ++k;++j}
  while (k <= steps*natoms)
;
}