[cig-commits] r6665 - cs/cigma/trunk/sandbox/c

luis at geodynamics.org luis at geodynamics.org
Tue Apr 24 14:52:29 PDT 2007


Author: luis
Date: 2007-04-24 14:52:29 -0700 (Tue, 24 Apr 2007)
New Revision: 6665

Added:
   cs/cigma/trunk/sandbox/c/common.c
   cs/cigma/trunk/sandbox/c/common.h
Log:
Holding place for common routines


Added: cs/cigma/trunk/sandbox/c/common.c
===================================================================
--- cs/cigma/trunk/sandbox/c/common.c	2007-04-24 21:48:53 UTC (rev 6664)
+++ cs/cigma/trunk/sandbox/c/common.c	2007-04-24 21:52:29 UTC (rev 6665)
@@ -0,0 +1,107 @@
+#include "common.h"
+
+double det3x3(double *m)
+{
+    //
+    // |m[0] m[1] m[2]|
+    // |m[3] m[4] m[5]|
+    // |m[6] m[7] m[8]|
+    //
+    // = m[0]*|m[4] m[5]|
+    //        |m[7] m[8]|
+    //
+    // - m[1]*|m[3] m[5]|
+    //        |m[6] m[8]|
+    //
+    // + m[2]*|m[3] m[4]|
+    //        |m[6] m[7]|
+    //
+    //
+    return m[0]*(m[4]*m[8] - m[5]*m[7])
+         - m[1]*(m[3]*m[8] - m[5]*m[6])
+         + m[2]*(m[3]*m[7] - m[4]*m[6]);
+}
+
+double det4x4(double *m)
+{
+    // |m[ 0] m[ 1] m[ 2] m[ 3]|
+    // |m[ 4] m[ 5] m[ 6] m[ 7]|
+    // |m[ 8] m[ 9] m[10] m[11]|
+    // |m[12] m[13] m[14] m[15]|
+    //
+    //
+    // = m[0] * |m[ 5] m[ 6] m[ 7]|
+    //          |m[ 9] m[10] m[11]|
+    //          |m[13] m[14] m[15]|
+    //
+    // - m[1] * |m[ 4] m[ 6] m[ 7]|
+    //          |m[ 8] m[10] m[11]|
+    //          |m[12] m[14] m[15]|
+    //
+    // + m[2] * |m[ 4] m[ 5] m[ 7]|
+    //          |m[ 8] m[ 9] m[11]|
+    //          |m[12] m[13] m[15]|
+    //
+    // - m[3] * |m[ 4] m[ 5] m[ 6]|
+    //          |m[ 8] m[ 9] m[10]|
+    //          |m[12] m[13] m[14]|
+    //
+    //
+    // = m[0] * ( + m[5] * |m[10] m[11]|
+    //                     |m[14] m[15]|
+    //
+    //            - m[6] * |m[ 9] m[11]|
+    //                     |m[13] m[15]|
+    //
+    //            + m[7] * |m[ 9] m[10]|
+    //                     |m[13] m[14]| )
+    //
+    // - m[1] * ( + m[4] * |m[10] m[11]|
+    //                     |m[14] m[15]|
+    //
+    //            - m[6] * |m[ 8] m[11]|
+    //                     |m[12] m[15]|
+    //
+    //            + m[7] * |m[ 8] m[10]|
+    //                     |m[12] m[14]| )
+    //
+    // + m[2] * ( + m[4] * |m[ 9] m[11]|
+    //                     |m[13] m[15]|
+    //
+    //            - m[5] * |m[ 8] m[11]|
+    //                     |m[12] m[15]|
+    //
+    //            + m[7] * |m[ 8] m[ 9]|
+    //                     |m[12] m[13]| )
+    //
+    // - m[3] * ( + m[4] * |m[ 9] m[10]|
+    //                     |m[13] m[14]|
+    //
+    //            - m[5] * |m[ 8] m[10]|
+    //                     |m[12] m[14]|
+    //
+    //            + m[6] * |m[ 8] m[ 9]|
+    //                     |m[12] m[13]| )
+
+    double c[4];
+
+    c[0] = m[5]*(m[10]*m[15]-m[11]*m[14])
+         - m[6]*(m[ 9]*m[15]-m[11]*m[13])
+         + m[7]*(m[ 9]*m[14]-m[10]*m[13]);
+
+    c[1] = m[4]*(m[10]*m[15]-m[11]*m[14])
+         - m[6]*(m[ 8]*m[15]-m[11]*m[12])
+         + m[7]*(m[ 8]*m[14]-m[10]*m[12]);
+
+    c[2] = m[4]*(m[ 9]*m[15]-m[11]*m[13])
+         - m[5]*(m[ 8]*m[15]-m[11]*m[12])
+         + m[7]*(m[ 8]*m[13]-m[ 9]*m[12]);
+
+    c[3] = m[4]*(m[ 9]*m[14]-m[10]*m[13])
+         - m[5]*(m[ 8]*m[14]-m[10]*m[12])
+         + m[6]*(m[ 8]*m[13]-m[ 9]*m[12]);
+
+    return m[0]*c[0] - m[1]*c[1] + m[2]*c[2] - m[3]*c[3];
+}
+
+

Added: cs/cigma/trunk/sandbox/c/common.h
===================================================================
--- cs/cigma/trunk/sandbox/c/common.h	2007-04-24 21:48:53 UTC (rev 6664)
+++ cs/cigma/trunk/sandbox/c/common.h	2007-04-24 21:52:29 UTC (rev 6665)
@@ -0,0 +1,7 @@
+#ifndef __CIGMA_COMMON_H__
+#define __CIGMA_COMMON_H__
+
+double det3x3(double *m);
+double det4x4(double *m);
+
+#endif



More information about the cig-commits mailing list