libflame  revision_anchor
FLA_Apply_GTG.h
Go to the documentation of this file.
00001 /*
00002 
00003     Copyright (C) 2014, The University of Texas at Austin
00004 
00005     This file is part of libflame and is available under the 3-Clause
00006     BSD license, which can be found in the LICENSE file at the top-level
00007     directory, or at http://opensource.org/licenses/BSD-3-Clause
00008 
00009 */
00010 
00011 FLA_Error FLA_Apply_GTG( FLA_Obj gamma, FLA_Obj sigma, FLA_Obj delta1, FLA_Obj epsilon1, FLA_Obj delta2 );
00012 FLA_Error FLA_Apply_GTG_ops( float*  gamma,
00013                              float*  sigma,
00014                              float*  delta1,
00015                              float*  epsilon1,
00016                              float*  delta2 );
00017 FLA_Error FLA_Apply_GTG_opd( double* gamma,
00018                              double* sigma,
00019                              double* delta1,
00020                              double* epsilon1,
00021                              double* delta2 );
00022 
00023 #define MAC_Apply_GTG_ops( gamma, sigma, delta1, epsilon, delta2 ) \
00024 { \
00025     float  g, s; \
00026     float  d1, e, d2; \
00027     float  g2, s2, tgse; \
00028 \
00029     g = *(gamma); \
00030     s = *(sigma); \
00031 \
00032     d1 = *(delta1); \
00033     e  = *(epsilon); \
00034     d2 = *(delta2); \
00035 \
00036     g2 = g * g; \
00037     s2 = s * s; \
00038     tgse = 2.0 * g * s * e; \
00039 \
00040     *(delta1)  = g2 * d1 + tgse + s2 * d2; \
00041     *(delta2)  = s2 * d1 - tgse + g2 * d2; \
00042     *(epsilon) = g * s * (d2 - d1) + e * (g2 - s2); \
00043 }
00044 
00045 #define MAC_Apply_GTG_opd( gamma, sigma, delta1, epsilon, delta2 ) \
00046 { \
00047 /*
00048     double g, s; \
00049     double d1, e, d2; \
00050     double t, st; \
00051 \
00052     g = *(gamma); \
00053     s = *(sigma); \
00054 \
00055     d1 = *(delta1); \
00056     e  = *(epsilon); \
00057     d2 = *(delta2); \
00058 \
00059     t   = s * ( d2 - d1 ) + 2.0 * g * e; \
00060     st  = s * t; \
00061     e   = g * t - e; \
00062     d1  = st + d1; \
00063     d2  = d2 - st; \
00064 \
00065     *(delta1)  = d1; \
00066     *(epsilon) = e; \
00067     *(delta2)  = d2; \
00068 */ \
00069     double g, s; \
00070     double d1, e, d2; \
00071     double g2, s2, tgse; \
00072 \
00073     g = *(gamma); \
00074     s = *(sigma); \
00075 \
00076     d1 = *(delta1); \
00077     e  = *(epsilon); \
00078     d2 = *(delta2); \
00079 \
00080     g2 = g * g; \
00081     s2 = s * s; \
00082     tgse = 2.0 * g * s * e; \
00083 \
00084     *(delta1)  = g2 * d1 + tgse + s2 * d2; \
00085     *(delta2)  = s2 * d1 - tgse + g2 * d2; \
00086     *(epsilon) = g * s * (d2 - d1) + e * (g2 - s2); \
00087 \
00088 /*
00089     double g, s; \
00090     double d1, e, d2; \
00091     double g2, s2; \
00092     double st; \
00093 \
00094     g = *(gamma); \
00095     s = *(sigma); \
00096 \
00097     d1 = *(delta1); \
00098     e  = *(epsilon); \
00099     d2 = *(delta2); \
00100 \
00101     g2 = g * g; \
00102     s2 = s * s; \
00103     st = s2 * (d2 - d1) + 2.0 * g * s * e; \
00104 \
00105     *(delta1)  = st + d1; \
00106     *(delta2)  = d2 - st; \
00107     *(epsilon) = g * s * (d2 - d1) + e * (g2 - s2); \
00108 */ \
00109 }
00110