For our pleasure, we can include helpful things in here in order to make coding easier
To start, I have listed the page number of all subroutines that Dr. Allen uses in his
intder2000.f intder file as a resource. When all the functions are figured out, we'll
print this out as a handy reference! Ugh, also note that my page numbering is with two pages
of code printed on one sheet. So if you printed out intder2000.f in standard format, multiply
my page number by two! 
NJD

Here are the global (IOPT) variables of INTDER2000.f and their corresponding names in 
C++
*************************************************************************************
IOPT1, NA = natoms
IOPT2, NS = nintco
IOPT3, NSYM = symmCoords
IOPT4, NDER = derlvl
IOPT5, NEQ = atEquilibrium
IOPT6, NPRT = print_array[]
IOPT7, NINV = transformType
IOPT8, NDUM = natomdummy - natom
IOPT9, NTEST = numtest
IOPT10, NGEOM = obsolete, program decides to read from PSI/intder input/geom.dat
IOPT11, NFREQ = analysisType
IOPT12, IRINT = IRintensities
IOPT13, NVEC = propertyDimension
IOPT14, NSTOP = stop
IOPT15, NDISP = generateDisp
IOPT16, NMODE = nmodes
ITST, matrixTest

*****************************************
* DONE = coded and debugged             *
* CODED = coded and NOT debugged/tested *
*****************************************

subroutine page numbers 
INTDER / program driver 
page 1

VECT1 - VECT10
pages 7-9
Calculation of S vectors for int.co's.
	VECT1 -> Stretch::Vect			DONE
	VECT2 -> Bend::Vect			DONE
	VECT3 -> HAS BEEN REMOVED
	VECT4 -> Linear1::Vect			CODED
		Note VECT4 in Fortran code refers to LIN2, we are replacing LIN1 with LIN2
	VECT5 -> OutOfPlane::Vect		DONE
	VECT6 -> Torsion::Vect			DONE
	VECT7 -> DOES NOT EXIST
	VECT8 -> LinearX::Vect			CODED
	VECT9 -> LinearY::Vect			CODED
	VECT10-> Rcom::Vect

HIJS1 - HIJS10
pages 9-12
Calculation of second-order H-matrix elements
	HIJS1 -> Stretch::Hijs	    CODED
	HIJS2 -> Bend::Hijs	    CODED
        HIJS3 -> Linear1::Hijs      CODED
	HIJS7 -> OutOfPlane::Hijs   CODED
	HIJS6 -> Torsion::Hijs      CODED
	HIJS8 -> LinearX::Hijs      CODED
	HIJS9 -> LinearY::Hijs      CODED

HIJKS1 - HIJKS9
pages 12-18
Calculation of third-order H-matrix elements
	HIJKS1 -> Stretch::Hijks    CODED
	HIJKS2 -> Bend::Hijks       CODED
	HIJKS3 -> Linear1::Hijks    CODED
	HIJKS8 -> LinearX::Hijks    CODED
	HIJKS6 -> Torsion::Hijks    CODED
        HIJKS7 -> OutOfPlane::Hijks CODED
        HIJKS9 -> LinearY::Hijks    CODED

H4TH1 - H4TH2
pages 18-19
Calculation of fourth-order H-matrix elements
	H4TH1 -> Stretch::H4th      CODED 
	H4TH2 -> Bend::H4th         CODED

H5TH1
page 19
Calculation of fifth-order H-matrix elements
	H5TH1 -> Stretch::H5th  CODED

FILL3A / FILL3B / FILL4A / FILL4B
pages 19-20
Fills in symmetric elements of 3D/4D matrices
these are in misc.cc
fill3a                   CODED
fill3b                   CODED
fill4a                   CODED 
fill4a (with 5DMatrix, simply summed over the fifth index) CODED
  ----Let's keep an eye out in case this leads to problems
	----summation is m=1, nx, which shouldn't cause a problem since nx=ny=3

VCXKI
page 20
have no idea what this does. Uses dipole derivative for something

VCDER1
page 20-21
Clueless about this for now as well.

DISP
pages 21-23
Coordinate displacement subroutine

ROTC
page 23
Rotates coordinates (I assume the Cartesians?) in order to satisfy
Eckhart conditions

INPFKM
pages 23-24
This reads the internal coordinate derivatives from the input file instead
of computing them.

FCOUT
pages 24-25
Prints out force constants

X/Y/Z IN/OUT 1/2
pages 26-27
Reads/prints Cartesian coordinates derivatives
                 XIN -> SecondDerivative:secondDerivativeIn() - CODED
                 XOUT -> SecondDerivative:secondDerivativeOut() - CODED
                 YIN -> ThirdDerivative:thirdDerivativeIn() - CODED
                 YOUT -> ThirdDerivative:thirdDerivativeOut() - CODED
                 YOUT2 -> DONE 
                 YIN2 -> DONE 
LPRT
page 27
Splits 4 printlevel numbers into an array
                CODED: into params.cc

TABLE1 - TABLE5
page 27-28
Prints coordinate tables
hmm... is there any difference between Tables 2, 3, 4, & 5?

MASSIN
pages 28-30
Determines atomic mass
	When the geometry is read in the masses are determined then by:
		Displacements::loadFromCheckPoint
		Displacements::loadFromOptKing

INTOWP
page 31
Multiplies an integer by 2?

LOCATE/RFILE/WREADW/WWRITW/BIOFLU/MABORT/RCLOSE/NCLOSE/OPENFF/NOUNFL
pages 31-35
Various Fortran file i/o routines
	None of this is needed using Psi3 libraries

LINTR
pages 35-39
Performs linear transformation
        misc.c linear_transform -> in progress

MACHF2 - MACHF
pages 39-40
Not sure what these do

XF2/XF3/YF2
page 40-41
Not sure what these do either!

MACHB
pages 41-42
Gets s vectors for various internal coordinates
	MACHB -> BMat::make_BMat	CODED
		In regards to stretchs, bends, out-of-plane, and torsional
		internal coordinates it appears to be working. TESTED
BINVRT
pages 42-43
Inverts B matrix
	BINVRT -> BMAT::invert_BMat          DONE --- NOT TESTED

MACHX / MACHY
pages 43-46
Finds second/3rd derivative elements and Transforms them
        MACHX -> SecondDerivative::i_to_c() CODED 
        MACHY -> ThirdDerivative::i_to_c() CODED 
BROW
page 46-47
creates displaced BMatrix rows for numerical testing
        BROW -> Transform::BRow DONE

XROW / YROW
pages 47-51
creates displaced 2nd and 3rd derivative rows for numerical testing
        XROW -> Transform::XRow DONE 
        YROW -> Transform::YRow DONE 

MACHZ
pages 51-52
4th derivative transformation?
        MACHZ -> FourthDerivative::i_to_c() in progress


HSRY2-4
pages 52-53
Fills numerical test SR matrix with HY values
        ThirdDerivative.FillSR2        DONE
        ThirdDerivative.FillSR3        DONE
        ThirdDerivative.FillSR4        DONE 

AHX/AHX2-4 AHY/AHY2-4
pages 53-55
Makes second derivative (AHX) and third derivative elements (AHY) for 1-4 element intco's
AHX only applies to RCOM's, maybe we can skip this for now?
        SecondDerivative.EvaluateH2     DONE
        SecondDerivative.EvaluateH3     DONE
        SecondDerivative.EvaluateH4     DONE
	ThirdDerivative.EvaluateH2      DONE
        ThirdDerivative.EvaluateH3      DONE
        ThirdDerivative.EvaluateH4      DONE
 

FLIN
page 55
Finds the inverse of a square symmetric matrix        
      symm_matrix_invert -- replaced by Rollin's function - DONE

DOTX
page 55
dot product of sorts
D = SUM(A[i*NA]*B[i*NB]) where 1<=i<N
Used by FLIN only (therefore obsolete?)
        dot_x                           DONE

VECPRO
page 55
vector product of two three-componenet vectors
	vect_prod			DONE

SCAPRO
Scalar product of two three-component vectors
page 55-56
	dot_prod			DONE

MAT1 / MAT2     DONE (mat1, mat2 in misc.cc)
page 56
MAT1: returns 3x3 matrix as EM:   0     V(3)   -V(2)
                                -V(3)    0      V(1)
														     V(2)  -V(1)     0

MAT2: returns 3x3 matrix as AA:   0    VK(1)   VK(2)
                               -VK(1)    0     VK(3)
															 -VK(2) -VK(3)     0

TRIPRO          CODED
page 56
triple product of 3 unit vectors
Seems to be possibly replaced (along with MAT1 and MAT2) by ***Christoffel1(void) in misc.cc
however, we will need MAT1 and MAT2 other places (HIJS6, HIJS7, among others) so we need to separate these functions

EXPMAT          CODED
page56
Find the exponential of an antisymmetric 3x3 matrix. 

RSP
page 56-57
finds eigenvalues and eigenvectors of a matrix
	Using Psi3 libraries. NOTE: At some point, we need to leech the RSP routines from Psi to make intder
                                    standalone!

TQLRAT / TQL2 / TRBAK3 
pages 57-59
various methods to find eigenvalues and eigenvectors of symmetric matrices
	Using Psi3 libraries

TRED3
pages 59-60
reduces real symmetric matrix to tridiagonal matrix
	Using Psi3 libraries.

NUMX / Y / Z
pages 60-61
Holy motha. I just figured this out. NUMX is numerical differentiation for 2nd derivates
NUMY for 3rd derivatives
NUMZ for 4th derivatives
           NUMX  ->  SecondDerivative::NumTest() CODED 
           NUMY  ->  ThirdDerivative::NumTest() CODED
           NUMZ  ->  FourthDerivative::NumTest() CODED 

SRTST1 SRTST2
pages 61-63
Numerical testing of B and C matrices
           SRTST1 -> SecondDerivative::SRTest1 CODED
           SRTST2 -> ThirdDerivative::SRTest2 CODED 

FORMP
pages 63-66
forms Cartesian projection matrices

PROJV
pages 66-67
Projects Cartesian force constants and tests rotational invariance relations

PROJK1
pages 67-68
Computes projection matrix if not at a stationary point

PROJK2
pages 68-69
Second order projection matrix

PDER2
pages 69-70
Don't know

PROJK3
pages 70-72
Third order projection matrix

PDER3
page 72
Don't know

PRJTST
pages 72-74
Verify projection matrices

EQ42
page 74
No idea

ORTHOG
pages 74-76
Tests orthogonality conditions

FORMDK0
pages 76-78
Computes derivatives

GFMAT
pages 78-81
Computes GF matrix

NORMCO
pages 81-83
Cartesian analysis

SQMFC
pages 83-88
Scaled quadratic force constants package

