}                                       // private constructor for singleton pattern

        /// <summary>
        /// See https://software.intel.com/content/www/us/en/develop/documentation/mkl-developer-reference-fortran/top/lapack-routines/lapack-least-squares-and-eigenvalue-problem-routines/lapack-least-squares-and-eigenvalue-problem-driver-routines/nonsymmetric-eigenvalue-problems-lapack-driver-routines/geev.html
        /// </summary>
        public void Dgeev(string jobVl, string jobVr, int n, ref double[] a, int offsetA, int ldA, ref double[] wr, int offsetWr,
                          ref double[] wi, int offsetWi, ref double[] vl, int offsetVl, int ldVl, ref double[] vr, int offsetVr, int ldVr,
                          ref double[] work, int offsetWork, int lWork, ref int info)
        {
            Lapack.Dgeev(jobVl, jobVr, ref n, ref a[offsetA], ref ldA, ref wr[offsetWr], ref wi[offsetWi], ref vl[offsetVl],
                         ref ldVl, ref vr[offsetVr], ref ldVr, ref work[offsetWork], ref lWork, ref info);
        }