<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6426345363781422461</id><updated>2012-01-21T03:59:30.195Z</updated><title type='text'>The Return of Agent Zlerich</title><subtitle type='html'>As far as the Internet can tell me, no one uses "Zlerich". I call dibs.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default?start-index=101&amp;max-results=100'/><author><name>R Zlerich</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>135</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-6139758319502209885</id><published>2012-01-08T04:05:00.002Z</published><updated>2012-01-08T04:06:41.408Z</updated><title type='text'>michellethompson.org</title><content type='html'>Two years after our friend Nancy snagged the domain, we finally put up some content at&amp;nbsp;&lt;a href="http://michellethompson.org/"&gt;http://michellethompson.org/&lt;/a&gt;...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-6139758319502209885?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/6139758319502209885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=6139758319502209885' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/6139758319502209885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/6139758319502209885'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2012/01/michellethompsonorg.html' title='michellethompson.org'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-5994405908745192884</id><published>2011-12-24T05:08:00.002Z</published><updated>2012-01-11T17:11:36.072Z</updated><title type='text'>Specializations of general banded matrix-vector multiplication</title><content type='html'>&lt;p&gt;I keep needing mixed real/complex level 2 BLAS operations for real-valued, general banded matrices. It's simple to modify Netlib's &lt;a href="http://www.netlib.org/blas/dgbmv.f"&gt;dgbmv&lt;/a&gt; for mixed real/complex data but the result always feels unsatisfactory.  Partially because I'd like to avoid a Fortran dependency in my project.  Partially because I'd like to build kernels for the special case where I know my matrix's upper and lower bandwidth (as optimizers can rip there according to fellow student Myoungkyu Lee).&lt;/p&gt;
&lt;p&gt;I finally got off (err... on?) my duff and reworked &lt;a href="http://www.netlib.org/blas/dgbmv.f"&gt;dgbmv&lt;/a&gt;.  The result is a snippet which can be &lt;code&gt;#include&lt;/code&gt;d from a C99 source file where the proper defines turn it into a real, complex, or mixed real/complex routine.  I've uglified it sufficiently that both GNU and Intel's compiler's inform me at &lt;code&gt;-O3&lt;/code&gt; that they've vectorized the loops handling both &lt;code&gt;A&lt;/code&gt; and &lt;code&gt;A**T&lt;/code&gt; cases for contiguous vectors.&lt;/p&gt;
&lt;p&gt;&lt;pre class="prettyprint linenums:5 lang-c"&gt;
// #include-time parameters available followed by a sample usage.
// Each of these are #undef-ed at the end of this template file
//
// #define GBMV_STATIC    /*empty*/         /* Use for static function    */
// #define GBMV_FUNCTION  dgbmv             /* Function name              */
// #define GBMV_COMPONENT double            /* Type of matrices           */
// #define GBMV_SCALAR    double            /* Type of coeffs and vectors */
// #define GBMV_KL        const int kl,     /* Matrix lower bandwidth     */
// #define GBMV_KU        const int ku,     /* Matrix upper bandwidth     */

#ifndef __GBMV_INTERNAL_ONCE
#define __GBMV_INTERNAL_ONCE
static inline int ndxmin(int a, int b) { return a &amp;lt; b ? a : b; }
static inline int ndxmax(int a, int b) { return a &amp;gt; b ? a : b; }
#endif /* __GBMV_INTERNAL_ONCE */

GBMV_STATIC int GBMV_FUNCTION(
    char trans, const int m, const int n, GBMV_KL GBMV_KU
    const GBMV_SCALAR alpha, const GBMV_COMPONENT *       restrict a, int lda,
                             const    GBMV_SCALAR * const restrict x, const int incx,
    const GBMV_SCALAR beta,           GBMV_SCALAR * const restrict y, const int incy)
{
    // Logic from http://www.netlib.org/blas/dgbmv.f revised
    // for zero-indexed, vectorization-ready code on GCC and Intel.

    trans = toupper(trans);  // Simplifies case-insensitive checks

    // Test the input parameters
    if (trans != 'N' &amp;amp;&amp;amp; trans != 'T' &amp;amp;&amp;amp; trans != 'C') {
        return 1;
    } else if (m &amp;lt; 0) {
        return 2;
    } else if (n &amp;lt; 0) {
        return 3;
    } else if (kl &amp;lt; 0) {
        return 4;
    } else if (ku &amp;lt; 0) {
        return 5;
    } else if (lda &amp;lt;= kl + ku) {
        return 8;
    } else if (incx == 0) {
        return 10;
    } else if (incy == 0) {
        return 13;
    }

    // Quick return if possible
    if (m == 0 || n == 0 || (alpha == 0 &amp;amp;&amp;amp; beta == 1)) {
        return 0;
    }

    // Set the lengths of the vectors x and y.
    const int lenx = trans == 'N' ? n : m;
    const int leny = trans == 'N' ? m : n;

    // Start the operations. In this version the elements of A are accessed
    // sequentially with one pass through the band part of A.

    // First form y := beta*y (ignoring the irrelevant incy sign)...
    if (beta != 1) {
        const int abs_incy = abs(incy);
        if (abs_incy == 1) {  // ...for contiguous y
            if (beta == 0) {
                memset(y, 0, leny*sizeof(y[0]));
            } else {
                for (int i = 0; i &amp;lt; leny; ++i) {
                    y[i] *= beta;
                }
            }
        } else {              // ...for strided y
            if (beta == 0) {
#ifdef __INTEL_COMPILER
#pragma unroll
#endif
                for (int i = 0; i &amp;lt; leny; ++i) {
                    y[i*abs_incy] = 0;
                }
            } else {
#ifdef __INTEL_COMPILER
#pragma unroll
#endif
                for (int i = 0; i &amp;lt; leny; ++i) {
                    y[i*abs_incy] *= beta;
                }
            }
        }
    }

    // Quick return when the matrix used is irrelevant
    if (alpha == 0) {
        return 0;
    }

    // Set up the start points in x and y.
    int kx = incx &amp;gt; 0 ? 0 : incx*(1 - lenx);
    int ky = incy &amp;gt; 0 ? 0 : incy*(1 - leny);

    // Banded matrix dereference is always of form a[ku + i + j*(lda - 1)].
    // Incorporate the ku offset and decrement lda to speed indexing in loops.
    a += ku;
    --lda;

    // Perform the banded matrix-vector accumulation
    const int klp1 = kl + 1;

    if (trans == 'N') {   // Form y := alpha*A*x + y...

        int jx = kx;
        if (incy == 1) {  // ...for contiguous y
            for (int j = 0; j &amp;lt; n; ++j) {
                const int il = ndxmax(0, j - ku);
                const int iu = ndxmin(m, j + klp1);
                const GBMV_SCALAR temp = alpha*x[jx];
                for (int i = il; i &amp;lt; iu; ++i) {
                    y[i] += temp*a[i];
                }
                jx += incx;
                a += lda;
            }
        } else {          // ...for strided y
            for (int j = 0; j &amp;lt; n; ++j) {
                const int il = ndxmax(0, j - ku);
                const int iu = ndxmin(m, j + klp1);
                const GBMV_SCALAR temp = alpha*x[jx];
                int iy = ky;
#ifdef __INTEL_COMPILER
#pragma unroll
#endif
                for (int i = il; i &amp;lt; iu; ++i) {
                    y[iy] += temp*a[i];
                    iy += incy;
                }
                jx += incx;
                if (j &amp;gt;= ku) {
                    ky += incy;
                }
                a += lda;
            }
        }

    } else {              // Form y := alpha*A**T*x + y...

        int jy = ky;
        if (incx == 1) {  // ...for contiguous x
            for (int j = 0; j &amp;lt; n; ++j) {
                const int il = ndxmax(0, j - ku);
                const int iu = ndxmin(m, j + klp1);
                GBMV_SCALAR temp = 0;
                for (int i = il; i &amp;lt; iu; ++i) {
                    temp += a[i]*x[i];
                }
                y[jy] += alpha * temp;
                jy += incy;
                a += lda;
            }
        } else {          // ...for strided x
            for (int j = 0; j &amp;lt; n; ++j) {
                const int il = ndxmax(0, j - ku);
                const int iu = ndxmin(m, j + klp1);
                GBMV_SCALAR temp = 0;
                int ix = kx;
#ifdef __INTEL_COMPILER
#pragma unroll
#endif
                for (int i = il; i &amp;lt; iu; ++i) {
                    temp += a[i]*x[ix];
                    ix += incx;
                }
                y[jy] += alpha*temp;
                jy += incy;
                if (j &amp;gt;= ku) {
                    kx += incx;
                }
                a += lda;
            }
        }
    }

    return 0;
}

#undef GBMV_STATIC
#undef GBMV_FUNCTION
#undef GBMV_COMPONENT
#undef GBMV_SCALAR
#undef GBMV_KL
#undef GBMV_KU
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The same tricks transfer over to &lt;a href="http://www.netlib.org/blas/dsbmv.f"&gt;dsbmv&lt;/a&gt; as well (though the studious will notice indexing differences relative to the Netlib version):&lt;/p&gt;
&lt;p&gt;&lt;pre class="prettyprint linenums:5 lang-c"&gt;
// #include-time parameters available followed by a sample usage.
// Each of these are #undef-ed at the end of this template file
//
// #define SBMV_STATIC    /*empty*/         /* Use for static function    */
// #define SBMV_FUNCTION  dsbmv             /* Function name              */
// #define SBMV_COMPONENT double            /* Type of matrices           */
// #define SBMV_SCALAR    double            /* Type of coeffs and vectors */
// #define SBMV_K         const int k,      /* Matrix bandwidth           */

#ifndef __SBMV_INTERNAL_ONCE
#define __SBMV_INTERNAL_ONCE
static inline int ndxmin(int a, int b) { return a &amp;lt; b ? a : b; }
static inline int ndxmax(int a, int b) { return a &amp;gt; b ? a : b; }
#endif /* __SBMV_INTERNAL_ONCE */

SBMV_STATIC int SBMV_FUNCTION(
    char uplo, const int n, SBMV_K
    const SBMV_SCALAR alpha, const SBMV_COMPONENT *       restrict a, int lda,
                             const    SBMV_SCALAR * const restrict x, const int incx,
    const SBMV_SCALAR beta,           SBMV_SCALAR * const restrict y, const int incy)
{
    // Logic from http://www.netlib.org/blas/dsbmv.f revised
    // for zero-indexed, vectorization-ready code on GCC and Intel.

    uplo = toupper(uplo);  // Simplifies case-insensitive checks

    // Test the input parameters
    if (uplo != 'U' &amp;amp;&amp;amp; uplo != 'L') {
        return 1;
    } else if (n &amp;lt; 0) {
        return 2;
    } else if (k &amp;lt; 0) {
        return 3;
    } else if (lda &amp;lt;= k) {
        return 6;
    } else if (incx == 0) {
        return 8;
    } else if (incy == 0) {
        return 11;
    }

    // Quick return if possible
    if (n == 0 || (alpha == 0 &amp;amp;&amp;amp; beta == 1)) {
        return 0;
    }

    // Start the operations. In this version the elements of A are accessed
    // sequentially with one pass through the band part of A.

    // First form y := beta*y (ignoring the irrelevant incy sign)...
    if (beta != 1) {
        const int abs_incy = abs(incy);
        if (abs_incy == 1) {  // ...for contiguous y
            if (beta == 0) {
                memset(y, 0, n * sizeof(y[0]));
            } else {
                for (int i = 0; i &amp;lt; n; ++i) {
                    y[i] *= beta;
                }
            }
        } else {              // ...for strided y
            if (beta == 0) {
#ifdef __INTEL_COMPILER
#pragma unroll
#endif
                for (int i = 0; i &amp;lt; n; ++i) {
                    y[i*abs_incy] = 0;
                }
            } else {
#ifdef __INTEL_COMPILER
#pragma unroll
#endif
                for (int i = 0; i &amp;lt; n; ++i) {
                    y[i*abs_incy] *= beta;
                }
            }
        }
    }

    // Quick return when the matrix used is irrelevant
    if (alpha == 0) {
        return 0;
    }

    // Set up the start points in x and y.
    int kx = incx &amp;gt; 0 ? 0 : incx*(1 - n);
    int ky = incy &amp;gt; 0 ? 0 : incy*(1 - n);

    // Perform the banded matrix-vector accumulation

    if (uplo == 'U') {  // Form y := alpha*A*x + y for A upper storage...

        // Banded matrix dereference is always of form a[ku + i + j*(lda - 1)].
        // Incorporate the ku offset and decrement lda to speed indexing.
        a += k;
        --lda;

        if (incx == 1 &amp;amp;&amp;amp; incy == 1) {  // ...for contiguous x and y
            for (int j = 0; j &amp;lt; n; ++j) {
                const int il = ndxmax(0, j - k);
                const SBMV_SCALAR temp1 = alpha*x[j];
                SBMV_SCALAR       temp2 = 0;
                for (int i = il; i &amp;lt; j; ++i) {
                    y[i]  += temp1*a[i];
                    temp2 += a[i]*x[i];
                }
                y[j] += temp1*a[j] + alpha*temp2;
                a += lda;
            }
        } else {                       // ...for strided x and/or strided y
            int jx = kx;
            int jy = ky;
            for (int j = 0; j &amp;lt; n; ++j) {
                const int il = ndxmax(0, j - k);
                const SBMV_SCALAR temp1 = alpha*x[jx];
                SBMV_SCALAR temp2       = 0;
                int ix = kx;
                int iy = ky;
#ifdef __INTEL_COMPILER
#pragma unroll
#endif
                for (int i = il; i &amp;lt; j; ++i) {
                    y[iy] += temp1*a[i];
                    temp2 += a[i]*x[ix];
                    ix += incx;
                    iy += incy;
                }
                y[jy] += temp1*a[j] + alpha*temp2;
                jx += incx;
                jy += incy;
                if (j &amp;gt;= k) {
                    kx += incx;
                    ky += incy;
                }
                a += lda;
            }
        }

    } else {            // Form y := alpha*A*x + y for A lower storage...

        // Banded matrix dereference is always of form a[ku + i + j*(lda - 1)]
        // where here ku == 0.  Decrement lda to speed indexing.
        --lda;

        const int kp1 = k + 1;
        if (incx == 1 &amp;amp;&amp;amp; incy == 1) {  // ...for contiguous x and y
            for (int j = 0; j &amp;lt; n; ++j) {
                const int iu = ndxmin(n, j + kp1);
                const SBMV_SCALAR temp1 = alpha*x[j];
                SBMV_SCALAR       temp2 = 0;
                y[j] += temp1*a[j];
                for (int i = j + 1; i &amp;lt; iu; ++i) {
                    y[i]  += temp1*a[i];
                    temp2 += a[i]*x[i];
                }
                y[j] += alpha*temp2;
                a += lda;
            }
        } else {                       // ...for strided x and/or strided y
            int jx = kx;
            int jy = ky;
            for (int j = 0; j &amp;lt; n; ++j) {
                const int iu = ndxmin(n, j + kp1);
                const SBMV_SCALAR temp1 = alpha*x[jx];
                SBMV_SCALAR temp2       = 0;
                y[jy] += temp1*a[j];
                int ix = jx;
                int iy = jy;
#ifdef __INTEL_COMPILER
#pragma unroll
#endif
                for (int i = j + 1; i &amp;lt; iu; ++i) {
                    ix += incx;
                    iy += incy;
                    y[iy] += temp1*a[i];
                    temp2 += a[i]*x[ix];
                }
                y[jy] += alpha*temp2;
                jx += incx;
                jy += incy;
                a += lda;
            }
        }

    }

    return 0;
}

#undef SBMV_STATIC
#undef SBMV_FUNCTION
#undef SBMV_COMPONENT
#undef SBMV_SCALAR
#undef SBMV_K
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Hopefully these will be useful to someone else.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update 11 January 2012:&lt;/strong&gt;Of course, now that I've found the reference &lt;a href="http://www.netlib.org/xblas/"&gt;XBLAS&lt;/a&gt;, pretty much everything here could (should?) have been done within XBLAS' macro framework.  XBLAS definitely a cleaner mixed precision approach.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-5994405908745192884?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/5994405908745192884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=5994405908745192884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5994405908745192884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5994405908745192884'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2011/12/specializations-of-general-banded.html' title='Specializations of general banded matrix-vector multiplication'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-4976527848456153487</id><published>2011-09-08T16:14:00.000Z</published><updated>2011-09-08T16:29:37.036Z</updated><title type='text'>GNU parallel for parameter sweeps</title><content type='html'>&lt;p&gt;
Following up on &lt;a href="http://agentzlerich.blogspot.com/2011/08/ca-marche-mal.html"&gt;previous failures&lt;/a&gt;, I've chosen to test a portion of my compressible channel code &lt;a href="http://agentzlerich.blogspot.com/2011/03/steppin.html"&gt;Suzerain&lt;/a&gt; across a small parameter sweep.  This problem is ill-suited for a traditional HPC resource as many of the jobs will fail and none of them have to run for very long.  
&lt;/p&gt;

&lt;p&gt;
The problem is perfect for &lt;a href="http://www.gnu.org/s/parallel/"&gt;GNU parallel&lt;/a&gt;:
&lt;pre class="prettyprint lang-bash linenums" style="font-size:x-small;"&gt;
#!/bin/bash

# Build the fixed parameters for channel initialization
fixed=&amp;quot;--Ma=1.5 --Re=3000 --Pr=0.7 --gamma=1.4 --beta=0.7 --k=8&amp;quot;

# Build the parameter sweep affix for GNU parallel, placeholders, and a case description
sweep=&amp;quot;&amp;quot;                       ; case=&amp;quot;case{#}&amp;quot;                      ; args=&amp;quot;$case&amp;quot;
sweep=&amp;quot;$sweep ::: 96 120&amp;quot;      ; Nx=&amp;quot;--Nx={1}&amp;quot;                       ; args=&amp;quot;$args $Nx&amp;quot;
sweep=&amp;quot;$sweep ::: 72  96&amp;quot;      ; Ny=&amp;quot;--Ny={2}&amp;quot;                       ; args=&amp;quot;$args $Ny&amp;quot;
sweep=&amp;quot;$sweep :::  2   3&amp;quot;      ; htdelta=&amp;quot;--htdelta={3}&amp;quot;             ; args=&amp;quot;$args $htdelta&amp;quot;
sweep=&amp;quot;$sweep ::: 60  96&amp;quot;      ; Nz=&amp;quot;--Nz={4}&amp;quot;                       ; args=&amp;quot;$args $Nz&amp;quot;
sweep=&amp;quot;$sweep ::: 125 150&amp;quot;     ; fluct_percent=&amp;quot;--fluct_percent={5}&amp;quot; ; args=&amp;quot;$args $fluct_percent&amp;quot;
sweep=&amp;quot;$sweep ::: 12345 67890&amp;quot; ; fluct_seed=&amp;quot;--fluct_seed={6}&amp;quot;       ; args=&amp;quot;$args $fluct_seed&amp;quot;
sweep=&amp;quot;$sweep :::  2   5&amp;quot;      ; alpha=&amp;quot;--alpha={7}&amp;quot;                 ; args=&amp;quot;$args $alpha&amp;quot;
sweep=&amp;quot;$sweep ::: .4  .5&amp;quot;      ; npower=&amp;quot;--npower={8}&amp;quot;               ; args=&amp;quot;$args $npower&amp;quot;
sweep=&amp;quot;$sweep ::: 0:1 .5:.75&amp;quot;  ; fluct_kxfrac=&amp;quot;--fluct_kxfrac={9}&amp;quot;   ; args=&amp;quot;$args $fluct_kxfrac&amp;quot;
sweep=&amp;quot;$sweep ::: 0:1 .5:.75&amp;quot;  ; fluct_kzfrac=&amp;quot;--fluct_kzfrac={10}&amp;quot;  ; args=&amp;quot;$args $fluct_kzfrac&amp;quot;

# Remove any stale data
rm -rfv case* bad.case*

# Generate a master table of test cases for fun and profit
parallel -k -j 1 echo $args $sweep | column -t &amp;gt; master

# Generate inputs for a single test case
parallel &amp;quot;mkdir $case &amp;amp;&amp;amp; cd $case &amp;amp;&amp;amp; echo $args &amp;gt; args&amp;quot;                                                             \
     &amp;quot; &amp;amp;&amp;amp; ../bin/channel_init initial.h5 $fixed $Nx $Ny $htdelta $Nz $alpha $npower&amp;quot;                                \
     &amp;quot; &amp;amp;&amp;amp; ../bin/channel_explicit initial.h5 --advance_nt=0 $fluct_percent $fluct_seed $fluct_kxfrac $fluct_kzfrac&amp;quot; \
     $sweep

# Run each case for 1000 time steps to shake out non-robust scenarios
parallel --eta -j 3 -u                                                              \
     &amp;quot;cd {} &amp;amp;&amp;amp; ../bin/channel_explicit restart0.h5 --advance_nt=1000 --status_nt=5&amp;quot; \
     ::: case*
 
# Flag test cases that glaringly failed with a &amp;quot;.bad&amp;quot; suffix
parallel &amp;quot;mv {//} bad.{//}&amp;quot; ::: $(grep -l &amp;quot;TimeController halted&amp;quot; case*/log.dat)
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;
The first two "blocks" define the parameter sweep using parallel's feature where "::: a b ::: 1 2" turns into the outer product "a 1", "a 2", "b 1", "b 2".  The next bit builds a table of these outer products so I can refer to it later.  The remaining three bits perform some IO-heavy initialization, some compute-intensive tasks, and then a post-processing pass on each of the entries in said outer product.  This logic, and the associated runtime process juggling to get nice batch throughput, would be hell without GNU parallel.  Thanks Ole.
&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-4976527848456153487?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/4976527848456153487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=4976527848456153487' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4976527848456153487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4976527848456153487'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2011/09/following-up-on-previous-failures-ive.html' title='GNU parallel for parameter sweeps'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-6301055122499621446</id><published>2011-08-11T15:21:00.001Z</published><updated>2011-08-11T15:21:22.303Z</updated><title type='text'>ça marche (mal?)</title><content type='html'>&lt;a href="http://agentzlerich.blogspot.com/2011/03/steppin.html"&gt;Suzerain&lt;/a&gt;, my pseudospectral, compressible DNS code, is coming along.&amp;nbsp; After some manufactured solution love I'm onto channel problems.&amp;nbsp; With some added solenoidal velocity perturbations my laminar solutions transitioned to turbulent ones quite nicely.&lt;br /&gt;
&lt;br /&gt;
However, I'm currently puzzling over why my &lt;a href="http://dx.doi.org/10.1017/S0022112095004587"&gt;Coleman&lt;/a&gt;-like case is showing stationary mean state behavior...&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-v_YQQlJffyc/TkPweWWXvVI/AAAAAAAAOCM/u0iDfnkJqQ4/s1600/mean.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="447" src="http://1.bp.blogspot.com/-v_YQQlJffyc/TkPweWWXvVI/AAAAAAAAOCM/u0iDfnkJqQ4/s640/mean.jpg" width="640" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&amp;nbsp;...but momentum fluctuations that grow in time:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-XogA7GH9qw4/TkPw7d9sLYI/AAAAAAAAOCU/qO4F8baOAnM/s1600/fluctuations.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="446" src="http://4.bp.blogspot.com/-XogA7GH9qw4/TkPw7d9sLYI/AAAAAAAAOCU/qO4F8baOAnM/s640/fluctuations.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Currently suspect things are:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Inadequate resolution ('tis quite lousy)&lt;/li&gt;
&lt;li&gt;Pressure growing in time (a probable symptom I need to check but not a root cause) &lt;/li&gt;
&lt;li&gt; Funkiness associated with the discrete mass conservation fixes (my numerics are not conservative and holding mass constant requires some integral constraint futzing)&lt;/li&gt;
&lt;li&gt;Inadequate dealiasing (unlikely, currently using enough to handle quadratic nonlinearities in my Fourier directions but my equations are worse-than-cubic). &lt;/li&gt;
&lt;/ol&gt;
&amp;nbsp;Thank you to Nick Malaya for poring over plots with me this morning.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-6301055122499621446?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/6301055122499621446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=6301055122499621446' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/6301055122499621446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/6301055122499621446'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2011/08/ca-marche-mal.html' title='ça marche (mal?)'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-v_YQQlJffyc/TkPweWWXvVI/AAAAAAAAOCM/u0iDfnkJqQ4/s72-c/mean.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-2597515040117224746</id><published>2011-08-09T02:52:00.002Z</published><updated>2011-08-09T03:05:56.085Z</updated><title type='text'>Welcome to a dumber planet.</title><content type='html'>Consider IBM's stock price over the last several years...&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-EGyB35EDSLs/TkCZzykr3KI/AAAAAAAAOBY/IEd9fHYimso/s1600/IBM+8+Aug+2011.png" imageanchor="1" style="margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="254" src="http://4.bp.blogspot.com/-EGyB35EDSLs/TkCZzykr3KI/AAAAAAAAOBY/IEd9fHYimso/s640/IBM+8+Aug+2011.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
...and then today's news that &lt;a href="http://www.hpcwire.com/hpcwire/2011-08-08/ibm_bails_on_blue_waters_supercomputer.html"&gt;IBM Terminated The Blue Waters Contract&lt;/a&gt; because of financial, rather than technical, reasons:&lt;br /&gt;
&lt;blockquote&gt;
When HPCwire spoke with Herb Schultz, marketing manager for IBM's Deep 
Computing unit, last year, he outlined a new business model that would 
apply a lot more scrutiny to how the company positioned its high-end 
supercomputers. "There is really no appetite in IBM anymore -- with some
 of the leadership changes over the last few years -- for revenue that 
has no profit with it," he told us back in November 2010....&amp;nbsp; From NCSA's perspective, the system met all of its technical 
requirements. In particular, they appeared confident the machine, based 
on Power 755 servers, would indeed be able to deliver a sustained 
petaflop from its 10-petaflop peak performance.... The most curious aspect of the IBM pull-out is that they had already 
delivered three racks of Power 755 servers to NCSA. &lt;/blockquote&gt;
It is a sad day when a screamingly profitable U.S. company reneges on a contract so fundamental to the next decade of basic U.S. science.&amp;nbsp; Especially a contract where even the worst imaginable outcome for IBM has no potential to noticeably impact shareholder returns for even a single quarter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-2597515040117224746?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/2597515040117224746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=2597515040117224746' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2597515040117224746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2597515040117224746'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2011/08/welcome-to-dumber-planet.html' title='Welcome to a dumber planet.'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-EGyB35EDSLs/TkCZzykr3KI/AAAAAAAAOBY/IEd9fHYimso/s72-c/IBM+8+Aug+2011.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-3628721989685641279</id><published>2011-07-09T23:11:00.012Z</published><updated>2011-07-14T03:30:15.837Z</updated><title type='text'>FFTW 3.3 MPI Cheat Sheet</title><content type='html'>Because I believe they provide a nice way to perform &lt;a href="https://code.google.com/p/p3dfft/"&gt;P3DFFT&lt;/a&gt;- and &lt;a href="http://www.2decomp.org/"&gt;2DECOMP&amp;amp;FFT&lt;/a&gt;-like MPI-parallel pencil decompositions, I have have spent some time staring at &lt;a href="http://www.fftw.org/"&gt;FFTW&lt;/a&gt;'s 3.3 alpha and beta releases.  In particular, poring over their &lt;a href="http://www.fftw.org/fftw3.3beta_doc/Distributed_002dmemory-FFTW-with-MPI.html"&gt;Distributed-memory FFTW with MPI&lt;/a&gt; capabilities.&lt;br /&gt;
&lt;br /&gt;
Using 3.3-alpha1 I wrote a small library (called &lt;i&gt;underling&lt;/i&gt;) which mimicked P3DFFT 2.3's data movement capabilities.  I wholly isolated the data movement from computing the FFTs.  This, unlike P3DFFT and 2DECOMP, provides well-defined memory layout at any stage during the pencil transposes. Functionally my first approach was quite sound.  However, it performs suboptimal on-node memory reshuffling (a design mistake on my part) and can stand to be improved.&lt;br /&gt;
&lt;br /&gt;
I am revisiting the assumption of separating the parallel FFTs from the parallel data movement.  Doing so allows using the higher-level 2D r2c/c2r planning APIs freshly documented for 3.3-beta.&amp;nbsp; It should require less needless memory reshuffling when combined with appropriate FFTW_MPI_TRANPOSED_IN and FFTW_MPI_TRANSPOSED_OUT flag choices. &lt;br /&gt;
&lt;br /&gt;
Because, though wonderfully written, the relevant sections of the FFTW MPI documentation do not provide a cheat sheet, I have cooked my own for the various piece parts I may use in a second attempt.  Perhaps someone will find it useful.  Be sure to check the &lt;a href="http://fftw.org/fftw3.3beta_doc/FFTW-MPI-Reference.html%22"&gt;FFTW MPI reference&lt;/a&gt; for full details, especially the &lt;code&gt;local_size&lt;/code&gt; calls necessary to obtain data distribution information.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Please tell me&lt;/i&gt; if you catch any mistakes.  Many thanks to Steven G. Johnson for correcting my earlier misunderstanding of the real-to-complex and complex-to-real 2D DFT semantics. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;br /&gt;
&lt;style type="text/css"&gt;
    table#fftwmpi * {
        border-width:        1px;
        border-collapse:     collapse;
        font-weight:         normal;
    }
    table#fftwmpi tbody tr th {
        padding-right:       0.25em;
        margin-right:        0.25em;
    }
    table#fftwmpi tbody tr:first-child td {
        border-top-style:    solid;
        padding-top:         0.5em;
        margin-top:          0.5em;
    }
    table#fftwmpi tbody tr:last-child td {
        border-bottom-style: solid;
        padding-bottom:      0.5em;
        margin-bottom:       0.5em;
    }
    table#fftwmpi td.left  {
        border-left-style:   solid;
        padding-left:        0.5em;
        margin-left:         0.5em;
    }
    table#fftwmpi td.right  {
        border-right-style:  solid;
        padding-right:       0.5em;
        margin-right:        0.5em;
    }
    table#fftwmpi td.times  {
        font-size: x-small;
    }
    table#fftwmpi td  {
        text-align: center;
        font-size: small;
    }
&lt;/style&gt;&lt;br /&gt;
&lt;table cellspacing="0" id="fftwmpi"&gt;&lt;colgroup span="2"&gt;&lt;/colgroup&gt;
&lt;colgroup span="5"&gt;&lt;/colgroup&gt;
&lt;colgroup span="5"&gt;&lt;/colgroup&gt;
&lt;colgroup span="5"&gt;&lt;/colgroup&gt;
&lt;colgroup span="5"&gt;&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
    &lt;th colspan="2"&gt;&lt;/th&gt;
    &lt;th colspan="5"&gt;&lt;/th&gt;
    &lt;th colspan="5"&gt;&lt;a href="http://www.fftw.org/fftw3.3beta_doc/Transposed-distributions.html"&gt;transposed in&lt;/a&gt;&lt;/th&gt;
    &lt;th colspan="5"&gt;&lt;a href="http://www.fftw.org/fftw3.3beta_doc/Transposed-distributions.html"&gt;transposed out&lt;/a&gt;&lt;/th&gt;
    &lt;th colspan="5"&gt;&lt;a href="http://www.fftw.org/fftw3.3beta_doc/Transposed-distributions.html"&gt;transposed in|out&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
    &lt;th rowspan="2"&gt;&lt;a href="http://www.fftw.org/fftw3.3beta_doc/FFTW-MPI-Transposes.html"&gt;transpose&lt;/a&gt;&lt;/th&gt;
    &lt;th&gt;in&lt;/th&gt;

    &lt;td class="left"&gt;n0/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;n1&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;nc&lt;/td&gt;

    &lt;td class="left"&gt;n1&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;n0/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;nc&lt;/td&gt;

    &lt;td class="left"&gt;n0/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;n1&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;nc&lt;/td&gt;

    &lt;td class="left"&gt;n1&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;n0/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;nc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
    &lt;th&gt;out&lt;/th&gt;

    &lt;td class="left"&gt;n1/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;n0&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;nc&lt;/td&gt;

    &lt;td class="left"&gt;n1/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;n0&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;nc&lt;/td&gt;

    &lt;td class="left"&gt;n0&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;n1/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;nc&lt;/td&gt;

    &lt;td class="left"&gt;n0&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;n1/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;nc&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
    &lt;th rowspan="2"&gt;&lt;a href="http://www.fftw.org/fftw3.3beta_doc/2d-MPI-example.html"&gt;c2c 2D&lt;/a&gt;&lt;/th&gt;
    &lt;th&gt;in&lt;/th&gt;

    &lt;td class="left"&gt;ñ0/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;ñ1&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;ñc&lt;/td&gt;

    &lt;td class="left"&gt;ñ1/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;ñ0&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;ñc&lt;/td&gt;

    &lt;td class="left"&gt;ñ0/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;ñ1&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;ñc&lt;/td&gt;

    &lt;td class="left"&gt;ñ1/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;ñ0&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;ñc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
    &lt;th&gt;out&lt;/th&gt;

    &lt;td class="left"&gt;ñ0/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;ñ1&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;ñc&lt;/td&gt;

    &lt;td class="left"&gt;ñ0/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;ñ1&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;ñc&lt;/td&gt;

    &lt;td class="left"&gt;ñ1/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;ñ0&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;ñc&lt;/td&gt;

    &lt;td class="left"&gt;ñ1/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;ñ0&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;ñc&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
    &lt;th rowspan="2"&gt;&lt;a href="http://www.fftw.org/fftw3.3beta_doc/Multi_002ddimensional-MPI-DFTs-of-Real-Data.html"&gt;r2c 2D&lt;/a&gt;&lt;/th&gt;
    &lt;th&gt;in&lt;/th&gt;

    &lt;td class="left"&gt;n0/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;2(n1/2+1)&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;nc&lt;/td&gt;

    &lt;td class="left"&gt;2(n1/2+1)/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;n0&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;nc&lt;/td&gt;

    &lt;td class="left"&gt;n0/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;2(n1/2+1)&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;nc&lt;/td&gt;

    &lt;td class="left"&gt;2(n1/2+1)/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;n0&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;nc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
    &lt;th&gt;out&lt;/th&gt;

    &lt;td class="left"&gt;ñ0/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;(ñ1/2+1)&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;ñc&lt;/td&gt;

    &lt;td class="left"&gt;ñ0/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;(ñ1/2+1)&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;ñc&lt;/td&gt;

    &lt;td class="left"&gt;(ñ1/2+1)/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;ñ0&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;ñc&lt;/td&gt;

    &lt;td class="left"&gt;(ñ1/2+1)/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;ñ0&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;ñc&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
    &lt;th rowspan="2"&gt;&lt;a href="http://www.fftw.org/fftw3.3beta_doc/Multi_002ddimensional-MPI-DFTs-of-Real-Data.html"&gt;c2r 2D&lt;/a&gt;&lt;/th&gt;
    &lt;th&gt;in&lt;/th&gt;

    &lt;td class="left"&gt;ñ0/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;ñ1/2+1&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;ñc&lt;/td&gt;

    &lt;td class="left"&gt;(ñ1/2+1)/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;ñ0&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;ñc&lt;/td&gt;

    &lt;td class="left"&gt;ñ0/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;ñ1/2+1&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;ñc&lt;/td&gt;

    &lt;td class="left"&gt;(ñ1/2+1)/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;ñ0&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;ñc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
    &lt;th&gt;out&lt;/th&gt;

    &lt;td class="left"&gt;n0/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;2(n1/2+1)&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;nc&lt;/td&gt;

    &lt;td class="left"&gt;n0/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;2(n1/2+1)&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;nc&lt;/td&gt;

    &lt;td class="left"&gt;2(n1/2+1)/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;n0&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;nc&lt;/td&gt;

    &lt;td class="left"&gt;2(n1/2+1)/P&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class=""&gt;n0&lt;/td&gt;
    &lt;td class="times"&gt;×&lt;/td&gt;
    &lt;td class="right"&gt;nc&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/center&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Notation:&lt;/b&gt; Real-valued directions are denoted n0 and n1 while complex-valued directions are ñ0 and ñ1.  Half-complex storage is denoted ñ/2+1 and its padded, real-valued counterpart is 2(n/2+1).  Directions decomposed along a communicator with P processes are denoted n/P.  &lt;code&gt;nc&lt;/code&gt; stands for "number of components" and corresponds to the advanced planning API's &lt;code&gt;howmany&lt;/code&gt; arguments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-3628721989685641279?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/3628721989685641279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=3628721989685641279' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3628721989685641279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3628721989685641279'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2011/07/fftw-33-mpi-cheat-sheet.html' title='FFTW 3.3 MPI Cheat Sheet'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-5187100555531707231</id><published>2011-07-05T23:22:00.000Z</published><updated>2011-07-05T23:22:20.257Z</updated><title type='text'>My divergence divergence.</title><content type='html'>I've spent three full work days chasing down a verification failure within my spectral, compressible Navier—Stokes code. &amp;nbsp;I can't remember the last time I was so happy to average 1/3rd of a source line per day.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-dT1UK9kNa5Y/ThOa5dPrlEI/AAAAAAAANqQ/dId42Gg3n_Q/s1600/Picture+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="157" src="http://1.bp.blogspot.com/-dT1UK9kNa5Y/ThOa5dPrlEI/AAAAAAAANqQ/dId42Gg3n_Q/s640/Picture+1.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-5187100555531707231?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/5187100555531707231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=5187100555531707231' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5187100555531707231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5187100555531707231'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2011/07/my-divergence-divergence.html' title='My divergence divergence.'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-dT1UK9kNa5Y/ThOa5dPrlEI/AAAAAAAANqQ/dId42Gg3n_Q/s72-c/Picture+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-5327031274573756748</id><published>2011-06-26T15:56:00.005Z</published><updated>2012-01-10T06:30:58.602Z</updated><title type='text'>Using Boost Spirit 2.1+ to evaluate constant arithmetic expressions</title><content type='html'>I used Boost &lt;a href="http://www.boost.org/doc/html/program_options.html"&gt;Program_options&lt;/a&gt; for my research code's input parsing requirements.  As expected, it works well.  For floating point quantities, I've found having to specify &lt;tt&gt;4.18879020478639&lt;/tt&gt; for 4π/3 is a bit cumbersome.  When specifying arguments on the command line, I could use any one of &lt;a href="http://www.google.com/search?q=bash+floating%20+point+arithmetic"&gt;a number of hacks to perform floating point arithmetic in bash&lt;/a&gt;.  But that didn't help me when taking input from response files. I wanted an arithmetic expression utility that could process a C-like grammar.  Long double accuracy was a requirement.  I looked around a bit.  &lt;a href="http://www.gnu.org/software/libmatheval/"&gt;GNU libmatheval&lt;/a&gt; and &lt;a href="http://muparser.sourceforge.net/"&gt;muParser&lt;/a&gt; appeared to be good fits but looked to be double precision-only.  Though straightforward, I decided against combining the &lt;a href="http://en.wikipedia.org/wiki/Shunting-yard_algorithm"&gt;Shunting-yard algorithm&lt;/a&gt; with some in-place &lt;a href="http://en.wikipedia.org/wiki/Reverse_Polish_notation"&gt;RPN&lt;/a&gt; logic because I wasn't enthusiastic about either finding or writing an appropriate (and admittedly toy simple) &lt;a href="http://en.wikipedia.org/wiki/Lexical_analysis"&gt;lexer&lt;/a&gt;. &lt;br /&gt;
&lt;br/&gt;
Already having a Boost pre-requisite in my code, I decided to try out Boost &lt;a href="http://boost-spirit.com/"&gt;Spirit&lt;/a&gt; since it could provide a header-only, precision-agnostic solution.  Spirit has gone through a lot of significant revisions and many articles seemed to be written for the older Spirit Classic.  The &lt;a href="http://www.boost.org/doc/libs/release/libs/spirit/index.html"&gt;latest official reference manual&lt;/a&gt; gave several excellent examples that &lt;i&gt;almost&lt;/i&gt; fit.  I adapted Spirit's &lt;tt&gt;calc3.cpp&lt;/tt&gt; and &lt;tt&gt;roman.cpp&lt;/tt&gt; sample grammars to accomplish what I wanted.  I added &lt;tt&gt;**&lt;/tt&gt; as an operator for exponentiation and &lt;tt&gt;pi&lt;/tt&gt; as a built-in constant.  I also added a smattering of special functions (e.g. &lt;tt&gt;exp&lt;/tt&gt;).  The task required about 150 lines of Spirit-based code.  Further extensions should be fairly straightforward. &lt;br /&gt;
My sample code does the following: 
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Declares X-macros for the unary and binary functions built into the grammar.&lt;/li&gt;
&lt;li&gt;Declares Boost Phoenix-ready functors for the unary and binary functions.&lt;/li&gt;
&lt;li&gt;Declares &lt;tt&gt;expression::grammar&lt;/tt&gt; consisting of the rules &lt;tt&gt;expression&lt;/tt&gt;, &lt;tt&gt;term&lt;/tt&gt;, &lt;tt&gt;factor&lt;/tt&gt;, and &lt;tt&gt;primary&lt;/tt&gt;.&lt;/li&gt;
&lt;li&gt;Declares a helper called &lt;tt&gt;parse&lt;/tt&gt; to hide needing &lt;tt&gt;boost::spirit::ascii::space&lt;/tt&gt; when performing whitespace-agnostic parsing.&lt;/li&gt;
&lt;li&gt;Declares a small test macro called &lt;tt&gt;EXPRTEST&lt;/tt&gt; to reduce test case boilerplate.&lt;/li&gt;
&lt;li&gt;Runs a collection of tests to ensure the parser is behaving as expected.&lt;/li&gt;
&lt;/ol&gt;
Compared to the samples on which I built, the biggest changes to the grammar were adding &lt;tt&gt;primary&lt;/tt&gt; and reworking &lt;tt&gt;factor&lt;/tt&gt;.  I could have shortened up some details with a few &lt;tt&gt;using boost::spirit::qi;&lt;/tt&gt; declarations, but I wanted to keep track of exactly which parts of Spirit I used.  Feedback and suggestions are most welcome.&lt;br /&gt;
&lt;br/&gt;
&lt;strong&gt;A less hideous version is presented further below.&lt;/strong&gt;
&lt;pre class="prettyprint lang-c++ linenums"&gt;///////////////////////////////////////////////
// Ensure Boost Spirit version is high enough.
// Compilation errors are astounding otherwise.
///////////////////////////////////////////////

#include &amp;lt;boost/version.hpp&amp;gt;

#if BOOST_VERSION &amp;lt; 104100
#error "Require at least Spirit 2.1 from at least Boost 1.41"
#endif

//////////////////////////////////////////////////////////////////
// Implementation uses X macros to reduce boilerplate.
// See http://drdobbs.com/blogs/cpp/228700289 for X macro details.
//////////////////////////////////////////////////////////////////

#include &amp;lt;cmath&amp;gt;
#include &amp;lt;limits&amp;gt;

#include &amp;lt;boost/math/constants/constants.hpp&amp;gt;
#include &amp;lt;boost/spirit/include/phoenix.hpp&amp;gt;
#include &amp;lt;boost/spirit/include/qi.hpp&amp;gt;

namespace expression {

#define EXPRESSION_FORALL_UNARY_FUNCTIONS(apply)  \
    apply(abs)                                    \
    apply(acos)                                   \
    apply(asin)                                   \
    apply(atan)                                   \
    apply(ceil)                                   \
    apply(cos)                                    \
    apply(cosh)                                   \
    apply(exp)                                    \
    apply(floor)                                  \
    apply(log)                                    \
    apply(log10)                                  \
    apply(sin)                                    \
    apply(sinh)                                   \
    apply(sqrt)                                   \
    apply(tan)                                    \
    apply(tanh)

#define EXPRESSION_FORALL_BINARY_FUNCTIONS(apply) \
    apply(pow)                                    \
    apply(atan2)


namespace detail {

#define DECLARE_UNARY_FUNCTOR(name)                          \
struct name ## _                                             \
{                                                            \
    template &amp;lt;typename X&amp;gt; struct result { typedef X type; }; \
                                                             \
    template &amp;lt;typename X&amp;gt; X operator()(X x) const            \
    {                                                        \
        using namespace std;                                 \
        return name(x);                                      \
    }                                                        \
};
EXPRESSION_FORALL_UNARY_FUNCTIONS(DECLARE_UNARY_FUNCTOR)
#undef DECLARE_UNARY_FUNCTOR

#define DECLARE_BINARY_FUNCTOR(name)                                     \
struct name ## _                                                         \
{                                                                        \
    template &amp;lt;typename X, typename Y&amp;gt; struct result { typedef X type; }; \
                                                                         \
    template &amp;lt;typename X, typename Y&amp;gt; X operator()(X x, Y y) const       \
    {                                                                    \
        using namespace std;                                             \
        return name(x, y);                                               \
    }                                                                    \
};
EXPRESSION_FORALL_BINARY_FUNCTIONS(DECLARE_BINARY_FUNCTOR)
#undef DECLARE_BINARY_FUNCTOR

} // end namespace detail

template &amp;lt;typename FPT, typename Iterator&amp;gt;
struct grammar
    : boost::spirit::qi::grammar&amp;lt;
            Iterator, FPT(), boost::spirit::ascii::space_type
        &amp;gt;
{
    boost::spirit::qi::rule&amp;lt;
            Iterator, FPT(), boost::spirit::ascii::space_type
        &amp;gt; expression, term, factor, primary;

    grammar() : grammar::base_type(expression)
    {
        namespace constants = boost::math::constants;
#define DECLARE_PHOENIX_FUNCTION(name)                    \
        boost::phoenix::function&amp;lt;detail::name ## _&amp;gt; name;
EXPRESSION_FORALL_UNARY_FUNCTIONS(DECLARE_PHOENIX_FUNCTION)
EXPRESSION_FORALL_BINARY_FUNCTIONS(DECLARE_PHOENIX_FUNCTION)
#undef DECLARE_PHOENIX_FUNCTION

        using boost::spirit::qi::real_parser;
        using boost::spirit::qi::real_policies;
        real_parser&amp;lt;FPT,real_policies&amp;lt;FPT&amp;gt; &amp;gt; real;

        using boost::spirit::qi::_1;
        using boost::spirit::qi::_2;
        using boost::spirit::qi::no_case;
        using boost::spirit::qi::_val;

        expression =
            term                   [_val =  _1]
            &amp;gt;&amp;gt; *(  ('+' &amp;gt;&amp;gt; term    [_val += _1])
                |  ('-' &amp;gt;&amp;gt; term    [_val -= _1])
                )
            ;

        term =
            factor                 [_val =  _1]
            &amp;gt;&amp;gt; *(  ('*' &amp;gt;&amp;gt; factor  [_val *= _1])
                |  ('/' &amp;gt;&amp;gt; factor  [_val /= _1])
                )
            ;

        factor =
            primary                [_val =  _1          ]
            &amp;gt;&amp;gt; *(  ("**" &amp;gt;&amp;gt; factor [_val = pow(_val, _1)])
                )
            ;

#define STRINGIFY(s) #s
#define UNARY_FUNCTION_RULE(name)                                             \
    | no_case[STRINGIFY(name)] &amp;gt;&amp;gt; '(' &amp;gt;&amp;gt; expression [_val =  name(_1)] &amp;gt;&amp;gt; ')'
#define BINARY_FUNCTION_RULE(name)                                            \
    | ( no_case[STRINGIFY(name)]&amp;gt;&amp;gt; '('                                        \
        &amp;gt;&amp;gt; expression &amp;gt;&amp;gt; ',' &amp;gt;&amp;gt; expression &amp;gt;&amp;gt; ')' )[_val =  name(_1,_2)]

        primary =
            real                   [_val =  _1]
            |   '(' &amp;gt;&amp;gt; expression  [_val =  _1] &amp;gt;&amp;gt; ')'
            |   ('-' &amp;gt;&amp;gt; primary    [_val = -_1])
            |   ('+' &amp;gt;&amp;gt; primary    [_val =  _1])
            |   no_case["pi"]      [_val =  constants::pi&amp;lt;FPT&amp;gt;()]
                EXPRESSION_FORALL_UNARY_FUNCTIONS(UNARY_FUNCTION_RULE)
                EXPRESSION_FORALL_BINARY_FUNCTIONS(BINARY_FUNCTION_RULE)
            ;

#undef UNARY_RULE
#undef BINARY_RULE
#undef STRINGIFY

    }
};

#undef EXPRESSION_FORALL_UNARY_FUNCTIONS
#undef EXPRESSION_FORALL_BINARY_FUNCTIONS

template &amp;lt;typename FPT, typename Iterator&amp;gt;
bool parse(Iterator &amp;amp;iter,
           Iterator end,
           const grammar&amp;lt;FPT,Iterator&amp;gt; &amp;amp;g,
           FPT &amp;amp;result)
{
    return boost::spirit::qi::phrase_parse(
                iter, end, g, boost::spirit::ascii::space, result);
}

} // end namespace expression


/////////////
// Test cases
/////////////

#include &amp;lt;string&amp;gt;
#include &amp;lt;boost/math/special_functions/fpclassify.hpp&amp;gt;

#define BOOST_TEST_MODULE expression
#include &amp;lt;boost/test/included/unit_test.hpp&amp;gt;

const expression::grammar&amp;lt;double,std::string::const_iterator&amp;gt; eg;
const double close_enough = std::numeric_limits&amp;lt;double&amp;gt;::epsilon();

#define EXPRTEST(casename, expr, expected)               \
BOOST_AUTO_TEST_CASE( casename )                         \
{                                                        \
    const std::string s = expr;                          \
    std::string::const_iterator iter = s.begin();        \
    std::string::const_iterator end  = s.end();          \
    double result;                                       \
    BOOST_REQUIRE(parse(iter, end, eg, result));         \
    BOOST_CHECK(iter == end);                            \
    BOOST_CHECK_CLOSE(result, (expected), close_enough); \
}

EXPRTEST(literal1, "1.234", 1.234)
EXPRTEST(literal2, "4.2e2", 420)
EXPRTEST(literal3, "5e-01", 0.5)
EXPRTEST(literal4, "-3",    -3)
EXPRTEST(literal5, "pi",    boost::math::constants::pi&amp;lt;double&amp;gt;())

EXPRTEST(basicop1, " 2 +\t3\n",   5)       // Whitespace ignored
EXPRTEST(basicop2, " 2 -\t3\n",  -1)
EXPRTEST(basicop3, " 2 *\t3\n",   6)
EXPRTEST(basicop4, " 2 /\t3\n",   2./3.)   // Double division
EXPRTEST(basicop5, " 2 ** 3\n",  8)

EXPRTEST(pemdas1,  "2*3+4*5",   2*3+4*5)
EXPRTEST(pemdas2,  "2*(3+4)*5", 2*(3+4)*5)
EXPRTEST(pemdas3,  "2**3+4",    std::pow(2,3)+4)
EXPRTEST(pemdas4,  "2**2**-3",  std::pow(2.,std::pow(2.,-3.)))

EXPRTEST(unary1,   "-(2)",      -2)
EXPRTEST(unary2,   "-(-2)",      2)
EXPRTEST(unary3,   "+(-2)",     -2)
EXPRTEST(unary4,   "+(+2)",      2)

EXPRTEST(func_abs,   "abs (-1.0)", std::abs(-1.0))
EXPRTEST(func_acos,  "acos( 1.0)", std::acos(1.0))
EXPRTEST(func_asin,  "asin( 1.0)", std::asin(1.0))
EXPRTEST(func_atan,  "atan( 1.0)", std::atan(1.0))
EXPRTEST(func_ceil,  "ceil( 0.5)", std::ceil(0.5))
EXPRTEST(func_cos,   "cos ( 1.0)", std::cos(1.0))
EXPRTEST(func_cosh,  "cosh( 1.0)", std::cosh(1.0))
EXPRTEST(func_exp,   "exp ( 1.0)", std::exp(1.0))
EXPRTEST(func_floor, "floor(0.5)", std::floor(0.5))
EXPRTEST(func_log,   "log ( 1.0)", std::log(1.0))
EXPRTEST(func_log10, "log10(0.5)", std::log10(0.5))
EXPRTEST(func_sin,   "sin ( 1.0)", std::sin(1.0))
EXPRTEST(func_sinh,  "sinh( 1.0)", std::sinh(1.0))
EXPRTEST(func_sqrt,  "sqrt( 1.0)", std::sqrt(1.0))
EXPRTEST(func_tan,   "tan ( 1.0)", std::tan(1.0))
EXPRTEST(func_tanh,  "tanh( 1.0)", std::tanh(1.0))

EXPRTEST(func_pow,   "pow  (2.0, 3.0)", std::pow(2.0,3.0))
EXPRTEST(func_atan2, "atan2(2.0, 3.0)", std::atan2(2.0,3.0))

BOOST_AUTO_TEST_CASE( parse_inf )
{
    const std::string s = "inf";
    std::string::const_iterator iter = s.begin();
    std::string::const_iterator end = s.end();
    double result;
    BOOST_REQUIRE(parse(iter, end, eg, result));
    BOOST_CHECK(iter == end);
    BOOST_CHECK((boost::math::isinf)(result));
}

BOOST_AUTO_TEST_CASE( parse_infinity )
{
    const std::string s = "infinity";
    std::string::const_iterator iter = s.begin();
    std::string::const_iterator end = s.end();
    double result;
    BOOST_REQUIRE(parse(iter, end, eg, result));
    BOOST_CHECK(iter == end);
    BOOST_CHECK((boost::math::isinf)(result));
}

BOOST_AUTO_TEST_CASE( parse_nan )
{
    const std::string s = "nan";
    std::string::const_iterator iter = s.begin();
    std::string::const_iterator end = s.end();
    double result;
    BOOST_REQUIRE(parse(iter, end, eg, result));
    BOOST_CHECK(iter == end);
    BOOST_CHECK((boost::math::isnan)(result));
}
&lt;/pre&gt;
&lt;br/&gt;

&lt;strong&gt;Updated 9 Jan 2012:&lt;/strong&gt; During a second pass motivated by reducing compilation times, I removed the X-macro nastiness and replaced it with some &lt;code&gt;qi::symbols&lt;/code&gt;-based logic.  The code in the anonymous namespace could likely be removed if I could figure out the right &lt;code&gt;boost::phoenix::bind&lt;/code&gt; hoodoo to use to replace &lt;code&gt;lazy_ufunc_&lt;/code&gt; and &lt;code&gt;lazy_bfunc_&lt;/code&gt; (any suggestions?).  I have not yet measured the difference in either memory footprint or runtime performance.  Compilation time and memory is greatly reduced for both GNU and Intel compilers.  The same unit tests from before continue to pass against the following version:
&lt;pre class="prettyprint lang-c++ linenums"&gt;
#include &amp;lt;cmath&amp;gt;
#include &amp;lt;limits&amp;gt;
#include &amp;lt;iterator&amp;gt;

#include &amp;lt;boost/spirit/version.hpp&amp;gt;
#if !defined(SPIRIT_VERSION) || SPIRIT_VERSION &amp;lt; 0x2010
#error &amp;quot;At least Spirit version 2.1 required&amp;quot;
#endif
#include &amp;lt;boost/math/constants/constants.hpp&amp;gt;
#include &amp;lt;boost/spirit/include/phoenix.hpp&amp;gt;
#include &amp;lt;boost/spirit/include/qi.hpp&amp;gt;

namespace expression {

namespace { // anonymous

struct lazy_pow_
{
    template &amp;lt;typename X, typename Y&amp;gt;
    struct result { typedef X type; };

    template &amp;lt;typename X, typename Y&amp;gt;
    X operator()(X x, Y y) const
    {
        return std::pow(x, y);
    }
};

struct lazy_ufunc_
{
    template &amp;lt;typename F, typename A1&amp;gt;
    struct result { typedef A1 type; };

    template &amp;lt;typename F, typename A1&amp;gt;
    A1 operator()(F f, A1 a1) const
    {
        return f(a1);
    }
};

struct lazy_bfunc_
{
    template &amp;lt;typename F, typename A1, typename A2&amp;gt;
    struct result { typedef A1 type; };

    template &amp;lt;typename F, typename A1, typename A2&amp;gt;
    A1 operator()(F f, A1 a1, A2 a2) const
    {
        return f(a1, a2);
    }
};

} // end namespace anonymous

template &amp;lt;typename FPT, typename Iterator&amp;gt;
struct grammar
    : boost::spirit::qi::grammar&amp;lt;
            Iterator, FPT(), boost::spirit::ascii::space_type
        &amp;gt;
{

    // symbol table for constants like &amp;quot;pi&amp;quot;
    struct constant_
        : boost::spirit::qi::symbols&amp;lt;
                typename std::iterator_traits&amp;lt;Iterator&amp;gt;::value_type,
                FPT
            &amp;gt;
    {
        constant_()
        {
            this-&amp;gt;add
                (&amp;quot;pi&amp;quot;, boost::math::constants::pi&amp;lt;FPT&amp;gt;()  )
            ;
        }
    } constant;

    // symbol table for unary functions like &amp;quot;abs&amp;quot;
    struct ufunc_
        : boost::spirit::qi::symbols&amp;lt;
                typename std::iterator_traits&amp;lt;Iterator&amp;gt;::value_type,
                FPT (*)(FPT)
            &amp;gt;
    {
        ufunc_()
        {
            this-&amp;gt;add
                (&amp;quot;abs&amp;quot;   , (FPT (*)(FPT)) std::abs  )
                (&amp;quot;acos&amp;quot;  , (FPT (*)(FPT)) std::acos )
                (&amp;quot;asin&amp;quot;  , (FPT (*)(FPT)) std::asin )
                (&amp;quot;atan&amp;quot;  , (FPT (*)(FPT)) std::atan )
                (&amp;quot;ceil&amp;quot;  , (FPT (*)(FPT)) std::ceil )
                (&amp;quot;cos&amp;quot;   , (FPT (*)(FPT)) std::cos  )
                (&amp;quot;cosh&amp;quot;  , (FPT (*)(FPT)) std::cosh )
                (&amp;quot;exp&amp;quot;   , (FPT (*)(FPT)) std::exp  )
                (&amp;quot;floor&amp;quot; , (FPT (*)(FPT)) std::floor)
                (&amp;quot;log&amp;quot;   , (FPT (*)(FPT)) std::log  )
                (&amp;quot;log10&amp;quot; , (FPT (*)(FPT)) std::log10)
                (&amp;quot;sin&amp;quot;   , (FPT (*)(FPT)) std::sin  )
                (&amp;quot;sinh&amp;quot;  , (FPT (*)(FPT)) std::sinh )
                (&amp;quot;sqrt&amp;quot;  , (FPT (*)(FPT)) std::sqrt )
                (&amp;quot;tan&amp;quot;   , (FPT (*)(FPT)) std::tan  )
                (&amp;quot;tanh&amp;quot;  , (FPT (*)(FPT)) std::tanh )
            ;
        }
    } ufunc;

    // symbol table for binary functions like &amp;quot;pow&amp;quot;
    struct bfunc_
        : boost::spirit::qi::symbols&amp;lt;
                typename std::iterator_traits&amp;lt;Iterator&amp;gt;::value_type,
                FPT (*)(FPT, FPT)
            &amp;gt;
    {
        bfunc_()
        {
            this-&amp;gt;add
                (&amp;quot;pow&amp;quot;  , (FPT (*)(FPT, FPT)) std::pow  )
                (&amp;quot;atan2&amp;quot;, (FPT (*)(FPT, FPT)) std::atan2)
            ;
        }
    } bfunc;

    boost::spirit::qi::rule&amp;lt;
            Iterator, FPT(), boost::spirit::ascii::space_type
        &amp;gt; expression, term, factor, primary;

    grammar() : grammar::base_type(expression)
    {
        using boost::spirit::qi::real_parser;
        using boost::spirit::qi::real_policies;
        real_parser&amp;lt;FPT,real_policies&amp;lt;FPT&amp;gt; &amp;gt; real;

        using boost::spirit::qi::_1;
        using boost::spirit::qi::_2;
        using boost::spirit::qi::_3;
        using boost::spirit::qi::no_case;
        using boost::spirit::qi::_val;

        boost::phoenix::function&amp;lt;lazy_pow_&amp;gt;   lazy_pow;
        boost::phoenix::function&amp;lt;lazy_ufunc_&amp;gt; lazy_ufunc;
        boost::phoenix::function&amp;lt;lazy_bfunc_&amp;gt; lazy_bfunc;

        expression =
            term                   [_val =  _1]
            &amp;gt;&amp;gt; *(  ('+' &amp;gt;&amp;gt; term    [_val += _1])
                |  ('-' &amp;gt;&amp;gt; term    [_val -= _1])
                )
            ;

        term =
            factor                 [_val =  _1]
            &amp;gt;&amp;gt; *(  ('*' &amp;gt;&amp;gt; factor  [_val *= _1])
                |  ('/' &amp;gt;&amp;gt; factor  [_val /= _1])
                )
            ;

        factor =
            primary                [_val =  _1]
            &amp;gt;&amp;gt; *(  (&amp;quot;**&amp;quot; &amp;gt;&amp;gt; factor [_val = lazy_pow(_val, _1)])
                )
            ;

        primary =
            real                   [_val =  _1]
            |   '(' &amp;gt;&amp;gt; expression  [_val =  _1] &amp;gt;&amp;gt; ')'
            |   ('-' &amp;gt;&amp;gt; primary    [_val = -_1])
            |   ('+' &amp;gt;&amp;gt; primary    [_val =  _1])
            |   no_case[constant]  [_val =  _1]
            |   (no_case[ufunc] &amp;gt;&amp;gt; '(' &amp;gt;&amp;gt; expression &amp;gt;&amp;gt; ')')
                                   [_val = lazy_ufunc(_1, _2)]
            |   (no_case[bfunc] &amp;gt;&amp;gt; '(' &amp;gt;&amp;gt; expression &amp;gt;&amp;gt; ','
                                       &amp;gt;&amp;gt; expression &amp;gt;&amp;gt; ')')
                                   [_val = lazy_bfunc(_1, _2, _3)]
            ;

    }
};

template &amp;lt;typename FPT, typename Iterator&amp;gt;
bool parse(Iterator &amp;amp;iter,
           Iterator end,
           const grammar&amp;lt;FPT,Iterator&amp;gt; &amp;amp;g,
           FPT &amp;amp;result)
{
    return boost::spirit::qi::phrase_parse(
                iter, end, g, boost::spirit::ascii::space, result);
}

} // end namespace expression
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-5327031274573756748?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/5327031274573756748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=5327031274573756748' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5327031274573756748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5327031274573756748'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2011/06/using-boost-spirit-21-to-evaluate.html' title='Using Boost Spirit 2.1+ to evaluate constant arithmetic expressions'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-7247151130613418267</id><published>2011-05-24T21:49:00.001Z</published><updated>2011-05-24T21:53:28.505Z</updated><title type='text'>Adding enthought.traits.api.HasTraits as an ancestor using Python metaclasses</title><content type='html'>&lt;p&gt;
Today, while &lt;a href="http://stackoverflow.com/questions/6113822/how-can-i-wrap-a-non-traits-model-for-use-with-python-traits"&gt;banging my head against a wall&lt;/a&gt; trying to get a &lt;a href="http://www.swig.org/"&gt;SWIG&lt;/a&gt;-generated Python module to play nice with Python Traits, I cooked a way to use Python metaclasses to modify a class to add &lt;a href="http://code.enthought.com/projects/files/ets_api/enthought.traits.has_traits.HasTraits.html"&gt;enthought.traits.has_traits.HasTraits&lt;/a&gt; as a base class:
&lt;/p&gt;

&lt;pre class="prettyprint lang-python"&gt;
from enthought.traits.api import HasTraits
from enthought.traits.has_traits import MetaHasTraits

# See http://onlamp.com/lpt/a/3388 for an intro to Python metaclasses and
# http://code.activestate.com/recipes/204197-solving-the-metaclass-conflict/
# for what can go wrong here
class AddHasTraitsAncestor(MetaHasTraits):
    def __new__(cls, name, bases, dct):
        return MetaHasTraits.__new__(cls, name, cls.modify(bases), dct)

    def __init__(cls, name, bases, dct):
        super(AddHasTraitsAncestor, cls).__init__(name, cls.modify(bases), dct)

    @staticmethod
    def modify(bases):
        if (bases == (object,)):
            return (HasTraits,)
        else:
            new_bases = list(bases)
            new_bases.insert(0, HasTraits)
            return tuple(new_bases)
&lt;/pre&gt;

&lt;p&gt;
Adding the line &lt;code class"prettyprint lang-python"&gt;__metaclass__ = AddHasTraitsAncestor&lt;/code&gt; to a class definition is enough, in some cases, for the class to now have HasTraits as a base class.  Most of the frustrating bits were before I realized &lt;code&gt;HasTraits&lt;/code&gt; has its own metaclass &lt;code&gt;MetaHasTraits&lt;/code&gt; which &lt;code&gt;AddHasTraitsAncestor&lt;/code&gt; had to subclass before the approach worked.
&lt;/p&gt;

&lt;p&gt;
"Uhhh...?" you say.  That puzzled look asking "Why didn't you just add the base class yourself?".  I used this approach because SWIG was generating the Python class definitions and I was abusing SWIG's &lt;code&gt;pythoncode&lt;/code&gt; feature to tweak the SWIG wrappers to be Traits-ready a la
&lt;/p&gt;

&lt;pre class="prettyprint lang-python"&gt;
%extend someCPlusPlusClass {

    %pythoncode %{
        __metaclass__ = AddHasTraitsAncestor
    %}

}
&lt;/pre&gt;

&lt;p&gt;
Turns out it works and my SWIG wrappers are now Traits-friendly.  I'm still working on getting Traits to see the SWIG-based members, however.  Suggestions much appreciated.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-7247151130613418267?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/7247151130613418267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=7247151130613418267' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7247151130613418267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7247151130613418267'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2011/05/adding-enthoughttraitsapihastraits-as.html' title='Adding enthought.traits.api.HasTraits as an ancestor using Python metaclasses'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-1050180904875867346</id><published>2011-04-16T02:40:00.011Z</published><updated>2011-10-31T13:59:29.767Z</updated><title type='text'>Using gnuplot from the command line</title><content type='html'>&lt;p&gt;
&lt;a href="http://www.gnuplot.info/"&gt;gnuplot&lt;/a&gt; is excellent for both quick 'n' dirty and lengthy plotting projects.  Still, for truly quick work of just plottin' some column against some other column, I've always felt like gnuplot demands too many keystrokes:
&lt;pre&gt;
[1000 rhys@tiresias 16]$ gnuplot

 G N U P L O T
 Version 4.2 patchlevel 6
 last modified Sep 2009
 System: Linux 2.6.32-30-generic

 Copyright (C) 1986 - 1993, 1998, 2004, 2007 - 2009
 Thomas Williams, Colin Kelley and many others

 Type `help` to access the on-line reference manual.
 The gnuplot FAQ is available from http://www.gnuplot.info/faq/

 Send bug reports and suggestions to &lt;http://sourceforge.net/projects/gnuplot&gt;


Terminal type set to 'x11'
gnuplot&gt; plot 'restart0.mean' using 2:17
gnuplot&gt; exit
&lt;/pre&gt;
Of course, one can turn this process into a one-liner at the cost of quoting:
&lt;pre&gt;
gnuplot -e "plot 'restart0.mean' using 2:17"
&lt;/pre&gt;
Call me picky, but the signal-to-noise ratio in that one-liner still feels too high.
&lt;/p&gt;

&lt;p&gt;
After some quoting experimentation using &lt;a href="http://wiki.bash-hackers.org/commands/builtin/printf"&gt;printf&lt;/a&gt;'s &lt;tt&gt;%q&lt;/tt&gt; and &lt;tt&gt;%b&lt;/tt&gt; format specifiers, the following little function definition
&lt;pre class="prettyprint lang-bash"&gt;
gplot () {
   local fileexpr=$(printf "'%q'" $1)
   shift
   local plotexpr=$(printf '%b' "plot ${fileexpr} $*")
   gnuplot -persist -raise -e "$plotexpr"
}
&lt;/pre&gt;
makes
&lt;pre&gt;
gplot restart0.mean using 2:17
&lt;/pre&gt;
behave like the previous two examples.  This function happily hides the file name quoting requirements and remains tab-completion-friendly.
&lt;/p&gt;

&lt;p&gt;
Providing computed column values like gnuplot's &lt;tt&gt;using 1:$(cos($2))&lt;/tt&gt; on the command line still requires thought, but the straightforward tasks work thoughtlessly. Suggestions for improvements definitely welcome in the comments.  One glaring bug is that passing a pipe expression as the file bombs.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Update 20110504&lt;/b&gt;:  I've decided that I much prefer creating a &lt;tt&gt;gplot&lt;/tt&gt; script containing
&lt;pre class="prettyprint lang-bash"&gt;
#!/bin/bash
file=$1
shift
gnuplot -persist -raise &lt;(cat &lt;&lt;-GNUPLOTSCRIPT
plot '$file' $*
GNUPLOTSCRIPT
)
&lt;/pre&gt;
as it is much simpler to work through the quoting and far more extensible.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Update 20111031&lt;/b&gt;: Globbing, labelling, and a handful of other enhancements:
&lt;pre class="prettyprint lang-bash"&gt;
#!/bin/bash

# Fail on first error
set -e

# Create temporary files to hold gnuplot script
tmp1=`mktemp`
tmp2=`mktemp`
trap "rm -f $tmp1 $tmp2" EXIT

# Process (and then remove) command line options
# Build up any post-terminal processing in tmp2 for later use
autotitle=
title="`date +%r`: gplot $*"
terminal="set terminal x11 title '$title' enhanced persist"
cmd=plot
forexpr=
raise=
showhelp=
while getopts "3cf:ghils:re:t:x:y:z:F:SX:Y:Z:" opt
do
  case $opt in
    3) cmd=splot
       ;;
    c) autotitle=true
       ;;
    e) terminal='set term postscript eps enhanced color dashed rounded "Arial,14"'
       pause='' # Disable interactive on EPS output
       echo set output \"$OPTARG\" &gt;&gt; $tmp2
       ;;
    f) forexpr=" for [$OPTARG] "
       ;;
    g) echo "set grid" &gt;&gt; $tmp2
       ;;
    h) showhelp=0
       ;;
    i) pause='pause -1 "Plot interactive until Enter pressed.\nHit h in plot window for help.\n"'
       ;;
    l) echo "set logscale y" &gt;&gt; $tmp2
       ;;
    r) raise="-raise"
       ;;
    s) savescript="$OPTARG"
       ;;
    t) echo set title \"$OPTARG\" &gt;&gt; $tmp2
       ;;
    x) echo set xlabel \"$OPTARG\" &gt;&gt; $tmp2
       ;;
    y) echo set ylabel \"$OPTARG\" &gt;&gt; $tmp2
       ;;
    z) echo set zlabel \"$OPTARG\" &gt;&gt; $tmp2
       ;;
    F) pause="pause $OPTARG; replot; reread"
       ;;
    S) stdin=true
       ;;
    X) echo set xrange \[$OPTARG\] &gt;&gt; $tmp2
       ;;
    Y) echo set yrange \[$OPTARG\] &gt;&gt; $tmp2
       ;;
    Z) echo set zrange \[$OPTARG\] &gt;&gt; $tmp2
       ;;
  esac
done
shift $((OPTIND-1))

if [ x$showhelp != x ]; then
    cat &lt;&lt;-HERE
Usage: gplot [OPTION]... (FILE|EXTGLOB) GNUPLOTCMD...
Use gnuplot to plot one or more files directly from the command line.

  -3             Perform 3D plotting using gnuplot's splot command.
  -c             Populate the key using autotitling.
  -e FILE        Save an Encapsulated Postscript (eps) called FILE.
  -f FOREXPR     Prepend a 'for [FOREXPR]' to the plotting command.
  -g             Show grid lines.
  -h             Show this help message.
  -i             Interactive plotting mode.  Hit 'h' on plot for help.
  -l             Use logarithmic scale for y axis.
  -s FILE        Save the generated gnuplot as a script called FILE.
  -r             Have the window manager raise the plot window.
  -t TITLE       Set TITLE as the plot's title.
  -x XLABEL      Specify XLABEL as the x axis label.
  -y YLABEL      Specify YLABEL as the y axis label.
  -z ZLABEL      Specify ZLABEL as the z axis label.
  -F FREQUENCY   Replot the inputs every FREQUENCY seconds.
  -S             Prior to plotting, read auxililary gunplot from stdin.
  -X XLOW:XHIGH  Specify an explicit x axis range instead of autoscaling.
  -Y YLOW:YHIGH  Specify an explicit y axis range instead of autoscaling.
  -Z ZLOW:ZHIGH  Specify an explicit z axis range instead of autoscaling.

Examples (see gnuplot documentation for complete GNUPLOTCMD details):

  gplot -i foo.dat using 1:2 with linespoints
  gplot -s foo.gp -X 0:1 -Y 0:2 foo.dat using 1:2 with linespoints
  gplot -e foo.eps foo.dat using 1:2 with linespoints
  gplot -3 restart\*.dat using 1:2:3

On error, the failing gnuplot script is shown.
HERE
    exit $showhelp
fi

# Set terminal
echo "$terminal" &gt;&gt; $tmp1

# Slurp any settings built up during getops processing
cat $tmp2 &gt;&gt; $tmp1

# Obtain file(s) to plot from first argument using extended globbing
# Deliberately allow globbing to occur in this assignment
shopt -s extglob
declare -a files=($1)
shift

# Tweak autotitle based on options and incoming argument details
if [ "$autotitle" ]; then
    # Use columnheader option iff only one file provided
    if [ ${#files[@]} -eq 1 -a $cmd != splot ]; then
        echo 'set key autotitle columnheader' &gt;&gt; $tmp1
    else
        echo 'set key autotitle' &gt;&gt; $tmp1
    fi
else
    echo 'set key noautotitle' &gt;&gt; $tmp1
fi

# Possibly slurp standard input for further options
# FIXME Not working for 'echo foo | gplot'
if [ "$stdin" ]; then
    cat &lt;&amp;1 &gt;&gt; $tmp1
fi

# Build gnuplot script to plot possibly multiple files
declare -i count=0
for file in "${files[@]}"
do
    count+=1
    if [ $count -eq 1 ]; then
        echo "$cmd" "$forexpr" \'$file\' $* \\ &gt;&gt; $tmp1
    else
        echo "   "  , "$forexpr" \'$file\' $* \\ &gt;&gt; $tmp1
    fi
done
echo '' &gt;&gt; $tmp1

# If requested, save the plotting commands as an executable script
if [ "$savescript" ]; then
    echo '#!/usr/bin/env gnuplot' &gt; "$savescript"
    cat "$tmp1" &gt;&gt; "$savescript"
    chmod a+x "$savescript"
fi

# If requested, add a pause command to the end of the script. Notice this was
# not added to the $savescript as it would be annoying in that context.
if [ "$pause" ]; then
    echo "$pause" &gt;&gt; $tmp1
fi

# Generate the plot
# Display the script when an error occurs to aid debugging
gnuplot $raise $tmp1 || cat $tmp1
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-1050180904875867346?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/1050180904875867346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=1050180904875867346' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1050180904875867346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1050180904875867346'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2011/04/using-gnuplot-from-command-line.html' title='Using gnuplot from the command line'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-883246691403305895</id><published>2011-04-01T02:04:00.000Z</published><updated>2011-04-01T02:04:24.542Z</updated><title type='text'>Noise.</title><content type='html'>&lt;p&gt;
Following up on some &lt;a href="http://agentzlerich.blogspot.com/2011/03/steppin.html"&gt;quasi-1D success&lt;/a&gt; I'm ready to calculate some 3D fields.  I seed them by taking my 1D solution and add noise.  This is purportedly a terrible way to kick off turbulence as the fluctuations have to be massive to ultimately take and transition into a correct field.  I've been warned...
&lt;/p&gt;

&lt;p&gt;
Needing a way to monitor the fluctuation strengths and being in coefficient-space for a mixed Fourier/B-Spline discretization, I'm trying out the L^2 norm of the fluctuating signal.  By &lt;a href="http://en.wikipedia.org/wiki/Parseval%27s_theorem"&gt;Parseval's theorem&lt;/a&gt; along with some minor linear algebra, this turns into a sum over the complex-valued coefficient magnitudes:
&lt;a title="View Computation of the L^2 norm in a mixed Fourier/B-spline collocation discretization on Scribd" href="http://www.scribd.com/doc/52035613/Computation-of-the-L-2-norm-in-a-mixed-Fourier-B-spline-collocation-discretization" style="margin: 12px auto 6px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block; text-decoration: underline;"&gt;Computation of the L^2 norm in a mixed Fourier/B-spline collocation discretization&lt;/a&gt;&lt;iframe class="scribd_iframe_embed" src="http://www.scribd.com/embeds/52035613/content?start_page=1&amp;view_mode=list&amp;access_key=key-kbcg92osycok88xhcks" data-auto-height="true" data-aspect-ratio="0.772727272727273" scrolling="no" id="doc_44015" width="100%" height="600" frameborder="0"&gt;&lt;/iframe&gt;&lt;script type="text/javascript"&gt;(function() { var scribd = document.createElement("script"); scribd.type = "text/javascript"; scribd.async = true; scribd.src = "http://www.scribd.com/javascripts/embed_code/inject.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(scribd, s); })();&lt;/script&gt;
&lt;/p&gt;

&lt;p&gt;
Now, for the first case of the L^2 norm over all three directions I need the matrix &lt;i&gt;M&lt;/i&gt; which computes the L^2 inner product of two functions given their B-spline coefficient expansions.  The code to do this atop &lt;a href="http://www.gnu.org/software/gsl/manual/html_node/Evaluation-of-B_002dspline-basis-function-derivatives.html"&gt;some old contributions to the GSL&lt;/a&gt; isn't bad, but testing that my banded derivative operator coefficients are correct is awful.
&lt;/p&gt;

&lt;p&gt;
Happily, Mathematica 7 includes &lt;tt&gt;BSplineBasis&lt;/tt&gt; which I can use to cook analytic results to test my implementation.  Unhappily, &lt;tt&gt;BSplineBasis&lt;/tt&gt; has issues computing derivatives and an awful amount of mucking around is required to get my analytical test cases:
&lt;a title="View Finding Galerkin L^2-based Operators for B-spline discretizations on Scribd" href="http://www.scribd.com/doc/52035371/Finding-Galerkin-L-2-based-Operators-for-B-spline-discretizations" style="margin: 12px auto 6px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block; text-decoration: underline;"&gt;Finding Galerkin L^2-based Operators for B-spline discretizations&lt;/a&gt;&lt;iframe class="scribd_iframe_embed" src="http://www.scribd.com/embeds/52035371/content?start_page=1&amp;view_mode=list&amp;access_key=key-cd2tcwvmp7eafhmdmfz" data-auto-height="true" data-aspect-ratio="0.774683544303797" scrolling="no" id="doc_29630" width="100%" height="600" frameborder="0"&gt;&lt;/iframe&gt;&lt;script type="text/javascript"&gt;(function() { var scribd = document.createElement("script"); scribd.type = "text/javascript"; scribd.async = true; scribd.src = "http://www.scribd.com/javascripts/embed_code/inject.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(scribd, s); })();&lt;/script&gt;
&lt;/p&gt;

&lt;p&gt;
In the end, this is all The Right Thing &amp;trade; to do but man it eats time.  Recognizing this particular rabbit hole and how often such things ensnare my little mind, I sent the following email to my wonderful wife today:

&lt;blockquote&gt;
&lt;p&gt;
In case you ever wonder what I do with my days....
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I stare at things like this for far too long to work out the math.&lt;/li&gt;
&lt;li&gt;Then I sit and stare at the math for far too long to figure out the
computer implementation.&lt;/li&gt;
&lt;li&gt;Then I stare at the computer
implementation to test it and clean it up.&lt;/li&gt;
&lt;li&gt;Then I use the implementation at a single line within my thesis
research code.&lt;/li&gt;
&lt;li&gt;Then I go talk to my advisor on Mondays and report that a single line
now works this week that didn't work last week.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
&amp;mdash;
Rhys
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-883246691403305895?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/883246691403305895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=883246691403305895' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/883246691403305895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/883246691403305895'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2011/04/noise.html' title='Noise.'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-6492523659611042625</id><published>2011-03-10T23:54:00.001Z</published><updated>2011-03-11T13:05:51.990Z</updated><title type='text'>Steppin'</title><content type='html'>The &lt;a href="http://agentzlerich.blogspot.com/2009/09/suzerain-poster-from-2009-pecos-center.html"&gt;code I've been working&lt;/a&gt; on for, quite literally, years is finally coming together.&amp;nbsp; It's called Suzerain.&amp;nbsp; Suzerain is a mixed Fourier, B-spline spectral DNS code for solving the &lt;a href="http://compressible%20navier%e2%80%93stokes%20equations%20for%20a%20perfect%20gas/"&gt;compressible Navier–Stokes equations for a perfect gas&lt;/a&gt;.&amp;nbsp; Nearly every technical thing I've written on this blog has been about it in some way.&lt;br /&gt;
&lt;br /&gt;
My first sanity check has been advancing a quasi-1D, laminar channel flow profile to a steady state condition.  Some plots follow with units nondimensionalized by the bulk velocity, channel half width, and wall temperature and pressure.  The initial conditions were constant density and temperature along with a parabolic velocity profile.  Happily, the simulation relaxes the way I expect.
&lt;br /&gt;
&lt;br /&gt;
Onward.
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://lh4.googleusercontent.com/-vtlmAJ5hjCs/TXljJLyKAyI/AAAAAAAALSM/ij4AT3uPMis/s1600/plot_rho.png" imageanchor="1"&gt;&lt;img border="0" height="480" src="https://lh4.googleusercontent.com/-vtlmAJ5hjCs/TXljJLyKAyI/AAAAAAAALSM/ij4AT3uPMis/s640/plot_rho.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://lh6.googleusercontent.com/-Zx687IjmCjQ/TXljScaPt0I/AAAAAAAALSY/QfvVeGppBqE/s1600/plot_u.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="https://lh6.googleusercontent.com/-Zx687IjmCjQ/TXljScaPt0I/AAAAAAAALSY/QfvVeGppBqE/s640/plot_u.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://lh3.googleusercontent.com/-miCMW6YwKEE/TXljSvp_6tI/AAAAAAAALSc/K5oKJ8IRD6U/s1600/plot_v.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="https://lh3.googleusercontent.com/-miCMW6YwKEE/TXljSvp_6tI/AAAAAAAALSc/K5oKJ8IRD6U/s640/plot_v.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://lh4.googleusercontent.com/-2DPFjkgKJzc/TXljSD0aF2I/AAAAAAAALSU/XjfADKX5AsU/s1600/plot_T.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="https://lh4.googleusercontent.com/-2DPFjkgKJzc/TXljSD0aF2I/AAAAAAAALSU/XjfADKX5AsU/s640/plot_T.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://lh5.googleusercontent.com/-dbOZny8oMyA/TXljSADn94I/AAAAAAAALSQ/2G2uSrWYgps/s1600/plot_p.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="https://lh5.googleusercontent.com/-dbOZny8oMyA/TXljSADn94I/AAAAAAAALSQ/2G2uSrWYgps/s640/plot_p.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://lh4.googleusercontent.com/-2DPFjkgKJzc/TXljSD0aF2I/AAAAAAAALSU/XjfADKX5AsU/s1600/plot_T.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-6492523659611042625?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/6492523659611042625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=6492523659611042625' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/6492523659611042625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/6492523659611042625'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2011/03/steppin.html' title='Steppin&apos;'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh4.googleusercontent.com/-vtlmAJ5hjCs/TXljJLyKAyI/AAAAAAAALSM/ij4AT3uPMis/s72-c/plot_rho.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-3463013885471917547</id><published>2011-01-25T18:40:00.000Z</published><updated>2011-01-25T18:40:16.408Z</updated><title type='text'>Converting to and from human-readable byte counts</title><content type='html'>&lt;p&gt;
Converting some number of bytes (say 1024) into a human-readable byte count (say "1K") seems to be a common problem (simply &lt;a href="http://www.google.com/search?q=human+readable+byte+count"&gt;search&lt;/a&gt; or ask &lt;a href="http://stackoverflow.com/questions/3758606/"&gt;StackOverflow&lt;/a&gt;).  I also needed to go the other direction and turn things like "1.5 MB" into 1,572,864.  Here's what I cooked up in C99:
&lt;/p&gt;

&lt;pre class="prettyprint lang-c linenums"&gt;
// Adapted from http://stackoverflow.com/questions/3758606/
// how-to-convert-byte-size-into-human-readable-format-in-java
void to_human_readable_byte_count(long bytes,
                                  int si,
                                  double *coeff,
                                  const char **units)
{
    // Static lookup table of byte-based SI units
    static const char *suffix[][2] = { { "B",  "B"   },
                                       { "kB", "KiB" },
                                       { "MB", "MiB" },
                                       { "GB", "GiB" },
                                       { "TB", "TiB" },
                                       { "EB", "EiB" },
                                       { "ZB", "ZiB" },
                                       { "YB", "YiB" } };
    int unit = si ? 1000 : 1024;
    int exp = 0;
    if (bytes &gt; 0) {
        exp = min( (int) (log(bytes) / log(unit)),
                   (int) sizeof(suffix) / sizeof(suffix[0]) - 1);
    }
    *coeff = bytes / pow(unit, exp);
    *units  = suffix[exp][!!si];
}

// Convert strings like the following into byte counts
//    5MB, 5 MB, 5M, 3.7GB, 123b, 456kB
// with some amount of forgiveness baked into the parsing.
long from_human_readable_byte_count(const char *str)
{
    // Parse leading numeric factor
    char *endptr;
    errno = 0;
    const double coeff = strtod(str, &amp;endptr);
    if (errno) return -1;

    // Skip any intermediate white space
    while (isspace(*endptr)) ++endptr;

    // Read off first character which should be an SI prefix
    int exp  = 0;
    int unit = 1024;
    switch (toupper(*endptr)) {
        case 'B':  exp =  0; break;
        case 'K':  exp =  3; break;
        case 'M':  exp =  6; break;
        case 'G':  exp =  9; break;
        case 'T':  exp = 12; break;
        case 'E':  exp = 15; break;
        case 'Z':  exp = 18; break;
        case 'Y':  exp = 21; break;

        case ' ':
        case '\t':
        case '\0': exp =  0; goto done;

        default:   return -1;
    }
    ++endptr;

    // If an 'i' or 'I' is present use SI factor-of-1000 units
    if (toupper(*endptr) == 'I') {
        ++endptr;
        unit = 1000;
    }

    // Next character must be one of B/empty/whitespace
    switch (toupper(*endptr)) {
        case 'B':
        case ' ':
        case '\t': ++endptr;  break;

        case '\0': goto done;

        default:   return -1;
    }

    // Skip any remaining white space
    while (isspace(*endptr)) ++endptr;

    // Parse error on anything but a null terminator
    if (*endptr) return -1;

done:
    return exp ? coeff * pow(unit, exp / 3) : coeff;
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-3463013885471917547?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/3463013885471917547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=3463013885471917547' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3463013885471917547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3463013885471917547'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2011/01/converting-to-and-from-human-readable.html' title='Converting to and from human-readable byte counts'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-1891387497266007025</id><published>2011-01-15T23:29:00.000Z</published><updated>2011-01-15T23:29:36.918Z</updated><title type='text'>Using Argp with MPI-based applications</title><content type='html'>&lt;p&gt;
&lt;a href="http://www.gnu.org/s/libc/manual/html_node/Argp.html"&gt;Argp&lt;/a&gt; is a great, great parser for command line options.  When using it in MPI-based applications, there's a catch in that you want only one MPI rank to print &lt;tt&gt;--help&lt;/tt&gt; information, usage warnings, error messages, etc.  Otherwise, you get a whole mess of repeated, jumbled output as each MPI rank squawks about the same problem.
&lt;/p&gt;

&lt;p&gt;
Here's a wrapper for Argp for use in MPI-based applications that solves just this nuisance:
&lt;pre class="prettyprint lang-c linenums"&gt;
#include &amp;lt;stdio.h&amp;gt
#include &amp;lt;unistd.h&amp;gt;
#include "argp.h"

/**
 * Call &amp;lt;a href="http://www.gnu.org/s/libc/manual/html_node/Argp.html"
 * &amp;gt;Argp&amp;lt;/a&amp;gt;'s \c argp_parse in an MPI-friendly way.  Processes
 * with nonzero rank will have their \c stdout and \c stderr redirected
 * to &amp;lt;tt&amp;gt;/dev/null&amp;lt;/tt&amp;gt; during \c argp_parse.
 *
 * @param rank MPI rank of this process.  Output from \c argp_parse
 *             will only be observable from rank zero.
 * @param argp      Per \c argp_parse semantics.
 * @param argc      Per \c argp_parse semantics.
 * @param argv      Per \c argp_parse semantics.
 * @param flags     Per \c argp_parse semantics.
 * @param arg_index Per \c argp_parse semantics.
 * @param input     Per \c argp_parse semantics.
 *
 * @return Per \c argp_parse semantics.
 */
error_t mpi_argp_parse(const int rank,
                       const struct argp *argp,
                       int argc,
                       char **argv,
                       unsigned flags,
                       int *arg_index,
                       void *input);

error_t mpi_argp_parse(const int rank,
                       const struct argp *argp,
                       int argc,
                       char **argv,
                       unsigned flags,
                       int *arg_index,
                       void *input)
{
    // Flush stdout, stderr
    if (fflush(stdout))
        perror("mpi_argp_parse error flushing stdout prior to redirect");
    if (fflush(stderr))
        perror("mpi_argp_parse error flushing stderr prior to redirect");

    // Save stdout, stderr so we may restore them later
    int stdout_copy, stderr_copy;
    if ((stdout_copy = dup(fileno(stdout))) &lt; 0)
        perror("mpi_argp_parse error duplicating stdout");
    if ((stderr_copy = dup(fileno(stderr))) &lt; 0)
        perror("mpi_argp_parse error duplicating stderr");

    // On non-root processes redirect stdout, stderr to /dev/null
    if (rank) {
        if (!freopen("/dev/null", "a", stdout))
            perror("mpi_argp_parse error redirecting stdout");
        if (!freopen("/dev/null", "a", stderr))
            perror("mpi_argp_parse error redirecting stderr");
    }

    // Invoke argp per http://www.gnu.org/s/libc/manual/html_node/Argp.html
    error_t retval = argp_parse(argp, argc, argv, flags, arg_index, input);

    // Flush stdout, stderr again
    if (fflush(stdout))
        perror("mpi_argp_parse error flushing stdout after redirect");
    if (fflush(stderr))
        perror("mpi_argp_parse error flushing stderr after redirect");

    // Restore stdout, stderr
    if (dup2(stdout_copy, fileno(stdout)) &lt; 0)
        perror("mpi_argp_parse error reopening stdout");
    if (dup2(stderr_copy, fileno(stderr)) &lt; 0)
        perror("mpi_argp_parse error reopening stderr");

    // Close saved versions of stdout, stderr
    if (close(stdout_copy))
        perror("mpi_argp_parse error closing stdout_copy");
    if (close(stderr_copy))
        perror("mpi_argp_parse error closing stderr_copy");

    // Clear any errors that may have occurred on stdout, stderr
    clearerr(stdout);
    clearerr(stderr);

    // Return what argp_parse returned
    return retval;
}
&lt;/pre&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-1891387497266007025?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/1891387497266007025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=1891387497266007025' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1891387497266007025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1891387497266007025'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2011/01/using-argp-with-mpi-based-applications.html' title='Using Argp with MPI-based applications'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-5720805842067000439</id><published>2011-01-04T18:48:00.000Z</published><updated>2011-01-04T18:48:03.904Z</updated><title type='text'>C header-only unit testing with FCTX</title><content type='html'>&lt;p&gt;
Just a quick hat tip to &lt;a href="http://fctx.wildbearsoftware.com/"&gt;FCTX&lt;/a&gt;, a library I've found invaluable these past few months.  FCTX provides header-only unit testing for C.  Sure, if you're in C++ land there's a ton of xUnit-like frameworks available (with &lt;a href="http://www.boost.org/doc/libs/release/libs/test/"&gt;Boost.Test&lt;/a&gt; being my favorite), but for vanilla C projects FCTX wins hands down.
&lt;/p&gt;

&lt;p&gt;
As an example, here's something I put together for &lt;a href="http://stackoverflow.com/questions/122616/painless-way-to-trim-leading-trailing-whitespace-in-c/4505533#4505533"&gt;a Stack Overflow response&lt;/a&gt;:
&lt;pre class="prettyprint lang-c linenums"&gt;
#include &amp;lt;ctype.h&amp;gt;

void trim(char *a)
{
    char *b = a;
    while (isspace(*b))   ++b;
    while (*b)            *a++ = *b++;
    *a = '\0';
    while (isspace(*--a)) *a = '\0';
}

/* See http://fctx.wildbearsoftware.com/ */
#include "fct.h"

FCT_BGN()
{
    FCT_QTEST_BGN(trim)
    {
        { char s[] = "";      trim(s); fct_chk_eq_str("",    s); } // Trivial
        { char s[] = "   ";   trim(s); fct_chk_eq_str("",    s); } // Trivial
        { char s[] = "\t";    trim(s); fct_chk_eq_str("",    s); } // Trivial
        { char s[] = "a";     trim(s); fct_chk_eq_str("a",   s); } // NOP
        { char s[] = "abc";   trim(s); fct_chk_eq_str("abc", s); } // NOP
        { char s[] = "  a";   trim(s); fct_chk_eq_str("a",   s); } // Leading
        { char s[] = "  a c"; trim(s); fct_chk_eq_str("a c", s); } // Leading
        { char s[] = "a  ";   trim(s); fct_chk_eq_str("a",   s); } // Trailing
        { char s[] = "a c  "; trim(s); fct_chk_eq_str("a c", s); } // Trailing
        { char s[] = " a ";   trim(s); fct_chk_eq_str("a",   s); } // Both
        { char s[] = " a c "; trim(s); fct_chk_eq_str("a c", s); } // Both
    }
    FCT_QTEST_END();
}
FCT_END();
&lt;/pre&gt;
The logic isn't rocket science, of course.  But testing it in C without resorting to external libraries and complicated makefiles shouldn't be rocket science either.  Provided that &lt;tt&gt;fct.h&lt;/tt&gt; is in the same directory, this source will compile and run.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-5720805842067000439?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/5720805842067000439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=5720805842067000439' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5720805842067000439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5720805842067000439'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2011/01/c-header-only-unit-testing-with-fctx.html' title='C header-only unit testing with FCTX'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-5819232516617652845</id><published>2010-12-23T14:00:00.002Z</published><updated>2010-12-23T14:00:11.698Z</updated><title type='text'>getopt.h:195: error: redefinition of 'struct option'</title><content type='html'>&lt;p&gt;
While working with &lt;a href="http://www.gnu.org/software/gnulib/"&gt;Gnulib&lt;/a&gt; recently I kept running into problems with its &lt;a href="http://www.gnu.org/software/gnulib/MODULES.html#module=getopt-gnu"&gt;getopt-gnu&lt;/a&gt; module:
&lt;pre&gt;
In file included from ../../esio/gnulib/argp.h:24:0,
                 from ../../esio/apps/esio_bench.c:7:
../gnulib/getopt.h:195:8: error: redefinition of ‘struct option’
/usr/include/getopt.h:106:8: note: originally defined here
../gnulib/getopt.h:242:12: error: conflicting types for ‘getopt_long’
/usr/include/getopt.h:175:12: note: previous declaration of ‘getopt_long’ was here
../gnulib/getopt.h:246:12: error: conflicting types for ‘getopt_long_only’
/usr/include/getopt.h:179:12: note: previous declaration of ‘getopt_long_only’ was here
make[2]: *** [esio_bench.o] Error 1
&lt;/pre&gt;
which looked suspiciously like &lt;a href="http://www.mail-archive.com/bug-gnulib@gnu.org/msg18470.html"&gt;someone else's problem&lt;/a&gt; but couldn't be resolved by a simple &lt;tt&gt;make distclean&lt;/tt&gt;. 
&lt;/p&gt;

&lt;p&gt;
Turns out that I failed to include the required
&lt;pre class="prettyprint lang-c"&gt;
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
&lt;/pre&gt;
&lt;/p&gt;
at the top of my source file.  Oops.  This detail is obvious in hindsight but slightly difficult to dig out of the &lt;a href="http://www.gnu.org/software/gnulib/manual/gnulib.html#Source-changes"&gt;relevant section of the gnulib manual&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-5819232516617652845?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/5819232516617652845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=5819232516617652845' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5819232516617652845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5819232516617652845'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/12/getopth195-error-redefinition-of-struct.html' title='getopt.h:195: error: redefinition of &apos;struct option&apos;'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-3046130471676050213</id><published>2010-12-16T21:22:00.002Z</published><updated>2010-12-16T21:26:59.504Z</updated><title type='text'>snprintf + realloc = snprintf_realloc</title><content type='html'>&lt;p&gt;
Recently, in &lt;a href="http://en.wikipedia.org/wiki/C99"&gt;C99&lt;/a&gt;, I needed to format some arbitrary-length string content using &lt;code&gt;&lt;a href="http://linux.die.net/man/3/snprintf"&gt;snprintf&lt;/a&gt;&lt;/code&gt;.  I could re-use the same buffer because I only needed one result at a time.  I wanted to (hopefully) minimize the number of &lt;code&gt;malloc&lt;/code&gt; calls necessary.  Finally, I wanted to (mostly) maintain &lt;code&gt;snprintf&lt;/code&gt;'s interface including its error semantics.
&lt;/p&gt;

&lt;p&gt;
My use case looked like this...
&lt;/p&gt;

&lt;pre class="prettyprint lang-c"&gt;
    char *buf = NULL;
    size_t len = 0;
    while (/* more work */) {
        if (0 &gt; snprintf_realloc(&amp;buf, &amp;len, /*format specifier*/, ...)) {
            /* error occurred, report it, break */
        }
        /* use buf to perform work */
    }
    if (buf) free(buf);
&lt;/pre&gt;

&lt;p&gt;
Here is the &lt;code&gt;snprintf_realloc&lt;/code&gt; method I created including the relevant &lt;a href="http://www.stack.nl/~dimitri/doxygen/"&gt;Doxygen&lt;/a&gt; and &lt;a href="http://fctx.wildbearsoftware.com/"&gt;FCTX&lt;/a&gt;-based unit tests.  The source below should build and run provided that &lt;tt&gt;&lt;a href="http://fctx.wildbearsoftware.com/static/fctx/download/1.4.1/fct.h"&gt;fct.h&lt;/a&gt;&lt;/tt&gt; is also in the same directory:
&lt;/p&gt;

&lt;pre class="prettyprint lang-c linenums"&gt;
#include &amp;lt;stdarg.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;

#include "fct.h"

/**
 * Call &lt;tt&gt;snprintf(*str, *size, format, ...)&lt;/tt&gt; and reallocate the buffer
 * pointed to by &lt;tt&gt;*str&lt;/tt&gt; as appropriate to contain the entire result.  On
 * exit, &lt;tt&gt;*str&lt;/tt&gt; and &lt;tt&gt;*size&lt;/tt&gt; will contain a pointer to the
 * &lt;tt&gt;realloc&lt;/tt&gt;ed buffer and its maximum usable size, respectively.
 *
 * The reallocation scheme attempts to reduce the reallocation calls when the
 * same &lt;tt&gt;str&lt;/tt&gt; and &lt;tt&gt;size&lt;/tt&gt; arguments are used repeatedly.  It is
 * valid to pass &lt;tt&gt;*str == NULL&lt;/tt&gt; and &lt;tt&gt;*size == 0&lt;/tt&gt; and then have
 * the buffer allocated to perfectly fit the result.
 *
 * @param[in,out] str    Pointer to the buffer in which to write the result.
 * @param[in,out] size   Pointer to the initial buffer size.
 * @param[in]     format Format specifier to use in &lt;tt&gt;sprintf&lt;/tt&gt; call.
 * @param[in]     ...    Variable number of arguments corresponding
 *                       to \c format.
 *
 * @return On success, the number of characters (not including the trailing
 *         '\0') written to &lt;tt&gt;*str&lt;/tt&gt;.  On error, a negative value
 *         is returned, &lt;tt&gt;*str&lt;/tt&gt; is &lt;tt&gt;free&lt;/tt&gt;d and &lt;tt&gt;*size&lt;/tt&gt;
 *         is set to zero.
 */
int snprintf_realloc(char **str, size_t *size, const char *format, ...);

int
snprintf_realloc(char **str, size_t *size, const char *format, ...)
{
    int retval, needed;
    va_list ap;
    va_start(ap, format);
    while (   0     &lt;= (retval = vsnprintf(*str, *size, format, ap)) // Error?
           &amp;&amp; *size &lt;  (needed = retval + 1)) {                      // Space?
        va_end(ap);
        *size *= 2;                                                  // Space?
        if (*size &lt; needed) *size = needed;                          // Space!
        char *p = realloc(*str, *size);                              // Alloc
        if (p) {
            *str = p;
        } else {
            free(*str);
            *str  = NULL;
            *size = 0;
            return -1;
        }
        va_start(ap, format);
    }
    va_end(ap);
    return retval;
}

FCT_BGN()
{
    FCT_FIXTURE_SUITE_BGN(snprintf_realloc)
    {
        const char s[] = "1234";
        char *ptr;
        size_t size;

        FCT_SETUP_BGN()
        {
            ptr  = NULL;
            size = 0;
        }
        FCT_SETUP_END();

        FCT_TEARDOWN_BGN()
        {
            if (ptr) free(ptr);
        }
        FCT_TEARDOWN_END();

        FCT_TEST_BGN(snprintf_realloc)
        {
            // Initial should cause malloc-like behavior
            fct_chk_eq_int(4, snprintf_realloc(&amp;ptr, &amp;size, "%s", s));
            fct_chk(ptr);
            fct_chk_eq_int(size, 5);
            fct_chk_eq_str(ptr, s);

            // Repeated size should not cause any new buffer allocation
            {
                char *last_ptr = ptr;
                fct_chk_eq_int(4, snprintf_realloc(&amp;ptr, &amp;size, "%s", s));
                fct_chk(last_ptr == ptr);
                fct_chk_eq_int(size, 5);
                fct_chk_eq_str(ptr, s);
            }

            // Request requiring more than twice the space should
            // realloc memory to fit exactly.
            fct_chk_eq_int(12, snprintf_realloc(&amp;ptr, &amp;size, "%s%s%s",
                                                s, s, s));
            fct_chk_eq_int(size, 13);
            fct_chk_eq_str(ptr, "123412341234");

            // Request requiring less than twice the space should
            // cause a doubling of the buffer size.
            fct_chk_eq_int(16, snprintf_realloc(&amp;ptr, &amp;size, "%s%s%s%s",
                                                s, s, s, s));
            fct_chk_eq_int(size, 26);
            fct_chk_eq_str(ptr, "1234123412341234");
        }
        FCT_TEST_END();
    }
    FCT_FIXTURE_SUITE_END();
}
FCT_END()
&lt;/pre&gt;

&lt;p&gt;
&lt;a href="http://valgrind.org/"&gt;Valgrind&lt;/a&gt;, after suppressing some unrelated FCTX warnings, gives this test a clean bill of health.  If anyone's interested, aside from passing &lt;code&gt;NULL&lt;/code&gt; pointers in or relying upon undefined &lt;code&gt;snprintf&lt;/code&gt; behavior, I'd love to hear of ways to break this particular snippet.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-3046130471676050213?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/3046130471676050213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=3046130471676050213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3046130471676050213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3046130471676050213'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/12/snprintf-realloc-snprintfrealloc.html' title='snprintf + realloc = snprintf_realloc'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-8672702003676542053</id><published>2010-12-04T01:58:00.000Z</published><updated>2010-12-04T01:58:18.542Z</updated><title type='text'>APS DFD 2010 Talk Slides</title><content type='html'>&lt;p&gt;
As &lt;a href="http://agentzlerich.blogspot.com/2010/09/aps-dfd-2010-abstract.html"&gt;promised&lt;/a&gt;, sort of, here are the slides from my &lt;a href="http://www.dfd2010.caltech.edu/"&gt;APS DFD 2010&lt;/a&gt; talk:
&lt;/p&gt;

&lt;a title="View A WENO-Based Code for Investigating RANS Model Closures for Multicomponent Hydrodynamic Instabilities" href="http://www.scribd.com/doc/44609359/A-WENO-Based-Code-for-Investigating-RANS-Model-Closures-for-Multicomponent-Hydrodynamic-Instabilities" style="margin: 12px auto 6px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block; text-decoration: underline;"&gt;A WENO-Based Code for Investigating RANS Model Closures for Multicomponent Hydrodynamic Instabilities&lt;/a&gt; &lt;object id="doc_355269145524618" name="doc_355269145524618" height="600" width="100%" type="application/x-shockwave-flash" data="http://d1.scribdassets.com/ScribdViewer.swf" style="outline:none;" &gt;  &lt;param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="FlashVars" value="document_id=44609359&amp;access_key=key-brqgd978nid3ayqwgeq&amp;page=1&amp;viewMode=slideshow"&gt;   &lt;embed id="doc_355269145524618" name="doc_355269145524618" src="http://d1.scribdassets.com/ScribdViewer.swf?document_id=44609359&amp;access_key=key-brqgd978nid3ayqwgeq&amp;page=1&amp;viewMode=slideshow" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="600" width="100%" wmode="opaque" bgcolor="#ffffff"&gt;&lt;/embed&gt;  &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-8672702003676542053?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/8672702003676542053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=8672702003676542053' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8672702003676542053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8672702003676542053'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/12/aps-dfd-2010-talk-slides.html' title='APS DFD 2010 Talk Slides'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-5181930230668851677</id><published>2010-12-04T01:54:00.000Z</published><updated>2010-12-04T01:54:27.309Z</updated><title type='text'>Go listen to The Mikie Show</title><content type='html'>&lt;p&gt;
An old acquaintance has been running an amazing radio show
called &lt;a href="http://themikieshow.org/"&gt;The Mikie Show&lt;/a&gt; for some time now.  If you get the chance, take a listen.  Think Mister Rogers on the radio if Mister Rogers happened to be a sound designer/musician with a groanful sense of humor.  
&lt;/p&gt;

&lt;p&gt;
Recently my friend Billy, an arborist, was in &lt;a href="http://themikieshow.org/?page_id=66#twenty_five"&gt;episode 25&lt;/a&gt;.  Billy's fun.  When asked "Does hugging a tree really help it?" Billy didn't miss a beat and replied "It depends what you're going to do next."
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-5181930230668851677?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/5181930230668851677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=5181930230668851677' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5181930230668851677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5181930230668851677'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/12/go-listen-to-mikie-show.html' title='Go listen to The Mikie Show'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-5084764238409741052</id><published>2010-11-18T04:16:00.001Z</published><updated>2010-11-28T19:43:21.683Z</updated><title type='text'>Imminent (but probably dizzy) bundle o' joy</title><content type='html'>&lt;p&gt;
My wife amazes me most days.  Today especially.
&lt;/p&gt;

&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vv0fDEddO0g?fs=1&amp;amp;hl=en_US&amp;amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/vv0fDEddO0g?fs=1&amp;amp;hl=en_US&amp;amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;p&gt;
The bump's our son.  He should be arriving in the next three to seven weeks.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-5084764238409741052?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/5084764238409741052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=5084764238409741052' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5084764238409741052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5084764238409741052'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/11/imminent-but-probably-dizzy-bundle-o.html' title='Imminent (but probably dizzy) bundle o&apos; joy'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-8728642814529262045</id><published>2010-11-12T05:16:00.000Z</published><updated>2010-11-12T05:16:16.597Z</updated><title type='text'>GNU Parallel</title><content type='html'>I discovered &lt;a href="http://www.gnu.org/software/parallel/"&gt;GNU Parallel&lt;/a&gt; today. &amp;nbsp;Phenomenal. &amp;nbsp;Especially for simple post processing on multicore systems. &amp;nbsp;Watch the &lt;a href="http://www.youtube.com/watch?v=OpaiGYxkSuQ"&gt;video&lt;/a&gt;-- it is quite good. &amp;nbsp;Here are three sample commands taken from a bash script where &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;$1&lt;/span&gt;&lt;/span&gt; is set to be a particular prefix...&lt;br /&gt;
&lt;blockquote&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;parallel --eta -j +0 ./gnuplot.sh -g -F {} $1.r???? ::: `seq 1 8`&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
Runs a custom &lt;a href="http://www.gnuplot.info/"&gt;gnuplot&lt;/a&gt;-based shell script eight times against a file glob. &amp;nbsp;Each time provide a different argument in the &amp;nbsp;set {1,2,...,7,8}. &amp;nbsp;The results are stored as &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;$1.f1.gif&lt;/span&gt;&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;$1.f2.gif&lt;/span&gt;&lt;/span&gt;, etc.&lt;br /&gt;
&lt;blockquote&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ls -1 $1.r???? | parallel --eta -j +0 'montage -geometry 1280x960 -tile 4x2 {}.f?.gif {}.miff'&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Create a tiled &lt;a href="http://www.imagemagick.org/script/montage.php"&gt;montage&lt;/a&gt; of the eight output files mentioned above and store the result in &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;$1.miff&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;blockquote&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ls -1 $1.r???? | parallel --eta -j +0 'convert {}.miff {}.gif'&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;div&gt;
Convert the resulting MIFFs into GIFs.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I win. &amp;nbsp;On my system, 8 - 0.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-8728642814529262045?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/8728642814529262045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=8728642814529262045' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8728642814529262045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8728642814529262045'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/11/gnu-parallel.html' title='GNU Parallel'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-5335412716603921220</id><published>2010-10-15T04:58:00.001Z</published><updated>2010-10-15T15:47:01.336Z</updated><title type='text'>Fortran generic interface mixed with iso_c_binding</title><content type='html'>&lt;p&gt;
I'm going crazy trying to figure out some Fortran generic interface funkiness.  The compiler's complaining that a function call doesn't match a generic interface despite the fact that only one &lt;code&gt;module procedure&lt;/code&gt; statement is in the &lt;code&gt;interface&lt;/code&gt; block and the same damned code compiles when I write the concrete procedure name instead of the generic name.
&lt;/p&gt;

&lt;p&gt;
Just so I've got it later, this happens to work:
&lt;code&gt;
&lt;pre&gt;
module testing

  use, intrinsic :: iso_c_binding, only: c_float, c_double
  private :: c_float, c_double

  interface test
    module procedure test1
    module procedure test2
  end interface

contains

  real(c_float) function test1 (x)
    real(c_float), intent(in) :: x(*)
    test1 = 2 * x(1)
  end function test1

  real(c_double) function test2 (x)
    real(c_double), intent(in) :: x(*)
    test2 = 2 * x(1)
  end function test2

end module testing

program main
  use testing
  implicit none
  real(4) :: s(1)
  real(8) :: d(1)
  s = 2.0
  d = 2d0
  write (*,*) test(s)
  write (*,*) test(d)
end program main
&lt;/pre&gt;
&lt;/code&gt;
This snippet, however, is not the thing that's breaking...
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-5335412716603921220?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/5335412716603921220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=5335412716603921220' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5335412716603921220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5335412716603921220'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/10/fortran-generic-interface-mixed-with.html' title='Fortran generic interface mixed with iso_c_binding'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-8969120916945044022</id><published>2010-09-17T18:52:00.000Z</published><updated>2010-09-17T18:52:06.383Z</updated><title type='text'>APS DFD 2010 abstract</title><content type='html'>From the &lt;a href="http://www.aps.org/units/dfd/meetings/meeting.cfm?name=DFD10"&gt;APS DFD 2010&lt;/a&gt; schedule:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://meetings.aps.org/Meeting/DFD10/SessionIndex2/?SessionEventID=132353"&gt;
  &lt;h3 style="margin-bottom: 0px;"&gt;
Session AW: Instability: 
Richtmyer-Meshkov/Rayleigh-Taylor I&lt;/h3&gt;
&lt;/a&gt;
  &lt;br /&gt;
&lt;div style="margin-top: 0px;"&gt;

  8:00&amp;nbsp;AM–10:10&amp;nbsp;AM, Sunday, November 21, 2010&lt;br /&gt;
  
  Hyatt Regency Long Beach Room: Regency C&lt;br /&gt;&lt;br /&gt;
  
  Chair: Arindam Banerjee, Missouri University of Science &amp;amp; 
Technology&lt;br /&gt;
  
  &lt;/div&gt;
&lt;h3 style="margin-bottom: 0px;"&gt;
Abstract: AW.00010 : Comparisons of a 
Reynolds-Averaged Navier--Stokes Model with Self-Similar Solutions for 
Large Atwood Number Rayleigh--Taylor Mixing&lt;/h3&gt;
&lt;div style="margin-top: 0px;"&gt;

 9:57&amp;nbsp;AM–10:10&amp;nbsp;AM&lt;br /&gt;
 &lt;/div&gt;
&lt;a href="http://absimage.aps.org/image/MWS_DFD10-2010-001357.pdf" target="_blank"&gt;Preview Abstract&lt;/a&gt;&lt;br /&gt;



&lt;h4 style="margin-bottom: 0px;"&gt;

Authors:
&lt;/h4&gt;
&lt;div style="margin-top: 0px;"&gt;

&lt;span class="largernormal"&gt;

  &amp;nbsp;
  Rhys Ulerich&lt;br /&gt;
  
     &amp;nbsp;&amp;nbsp;&amp;nbsp;
     (University of Texas at Austin)
     &lt;/span&gt;
     &lt;/div&gt;
&lt;div style="margin-top: 0px;"&gt;

     &lt;span class="largernormal"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin-top: 0px;"&gt;
&lt;span class="largernormal"&gt;&amp;nbsp;
  Oleg Schilling&lt;br /&gt;
  
     &amp;nbsp;&amp;nbsp;&amp;nbsp;
     (Lawrence Livermore National Laboratory&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin-top: 0px;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-top: 0px;"&gt;
&lt;span class="largernormal"&gt;
     &lt;/span&gt;
     &lt;/div&gt;
&lt;div style="margin-top: 0px;"&gt;

     &lt;span class="largernormal"&gt;
  

&lt;/span&gt;&lt;/div&gt;
&lt;span class="largernormal"&gt;A new high-order, multicomponent, weighted 
essentially 
nonoscillatory (WENO) implementation of a three- and four-
equation Reynolds-averaged Navier-Stokes (RANS) model 
incorporating both mechanical and scalar turbulence is used to 
simulate intermediate-to-large Atwood number Rayleigh-Taylor 
turbulent mixing.  The predicted RANS mixing layer evolution is 
compared with the analytical self-similar solutions of the 
transport equations.  The terms in the transport equation 
budgets are compared in detail to their self-similar profiles 
across the mixing layer.  Additionally, the sensitivity of the 
RANS solutions to variations in the initial conditions and in 
the model coefficients is explored. The implications of these 
results for advanced modeling of Rayleigh-Taylor turbulent 
mixing are discussed.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-8969120916945044022?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/8969120916945044022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=8969120916945044022' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8969120916945044022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8969120916945044022'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/09/aps-dfd-2010-abstract.html' title='APS DFD 2010 abstract'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-1681533497953026080</id><published>2010-09-14T18:44:00.001Z</published><updated>2010-09-14T18:46:35.996Z</updated><title type='text'>internal error: assertion failed: lower_expr: bad kind</title><content type='html'>&lt;p&gt;
I'm back in Texas.
&lt;/p&gt;

&lt;p&gt;
In case it helps anyone else, sometimes I see errors like the following
&lt;pre&gt;
 ../../sz/suzerain/diffwave.hpp(65): internal error: assertion failed: lower_expr: bad kind (shared/edgcpfe/lower_il.c, line 14342)
&lt;/pre&gt;
coming from Intel's icpc 10.1 20081024.  This usually happens when I use &lt;code&gt;reinterpret_cast&lt;/code&gt; while calling a function but screw up the const-correctness of the type to which I'm casting.
&lt;/p&gt;

&lt;p&gt;
I've never been able to get a clean recreate to provide to Intel Support.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-1681533497953026080?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/1681533497953026080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=1681533497953026080' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1681533497953026080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1681533497953026080'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/09/internal-error-assertion-failed.html' title='internal error: assertion failed: lower_expr: bad kind'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-6858146063567547460</id><published>2010-08-12T02:55:00.002Z</published><updated>2010-08-12T02:56:03.003Z</updated><title type='text'>Poster from this summer's internship</title><content type='html'>&lt;p&gt;
As part of my &lt;a href="http://agentzlerich.blogspot.com/2010/05/summer-internship.html"&gt;summer internship&lt;/a&gt; at &lt;a href="http://www.llnl.gov/"&gt;Lawrence Livermore National Laboratory&lt;/a&gt; I'll be presenting the following poster tomorrow:
&lt;/p&gt;

&lt;p&gt;
&lt;a title="View Towards a WENO-based code for investigating RANS model closures for hydrodynamic instabilities on Scribd" href="http://www.scribd.com/doc/35756317/Towards-a-WENO-based-code-for-investigating-RANS-model-closures-for-hydrodynamic-instabilities" style="margin: 12px auto 6px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block; text-decoration: underline;"&gt;Towards a WENO-based code for investigating RANS model closures for hydrodynamic instabilities&lt;/a&gt; &lt;object id="doc_90184" name="doc_90184" height="500" width="100%" type="application/x-shockwave-flash" data="http://d1.scribdassets.com/ScribdViewer.swf" style="outline:none;" &gt;                &lt;param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf"&gt;                 &lt;param name="wmode" value="opaque"&gt;                 &lt;param name="bgcolor" value="#ffffff"&gt;                 &lt;param name="allowFullScreen" value="true"&gt;                 &lt;param name="allowScriptAccess" value="always"&gt;                 &lt;param name="FlashVars" value="document_id=35756317&amp;access_key=key-2jg9gy6io4asbgc2kmy8&amp;page=1&amp;viewMode=list"&gt;                 &lt;embed id="doc_90184" name="doc_90184" src="http://d1.scribdassets.com/ScribdViewer.swf?document_id=35756317&amp;access_key=key-2jg9gy6io4asbgc2kmy8&amp;page=1&amp;viewMode=list" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="750" width="100%" wmode="opaque" bgcolor="#ffffff"&gt;&lt;/embed&gt;             &lt;/object&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-6858146063567547460?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/6858146063567547460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=6858146063567547460' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/6858146063567547460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/6858146063567547460'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/08/poster-from-this-summers-internship.html' title='Poster from this summer&apos;s internship'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-7173983654561255142</id><published>2010-08-09T06:00:00.000Z</published><updated>2010-08-09T06:00:27.964Z</updated><title type='text'>di·ver·tisse·ment</title><content type='html'>&lt;iframe width="98%" height="450" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps/ms?doflg=ptm&amp;amp;ie=UTF8&amp;amp;msa=0&amp;amp;msid=111962398295074387306.00048d53fb546d8134208&amp;amp;ll=37.424707,-121.993561&amp;amp;spn=0.642359,1.674042&amp;amp;output=embed"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;View &lt;a href="http://maps.google.com/maps/ms?doflg=ptm&amp;amp;ie=UTF8&amp;amp;msa=0&amp;amp;msid=111962398295074387306.00048d53fb546d8134208&amp;amp;ll=37.424707,-121.993561&amp;amp;spn=0.642359,1.674042&amp;amp;source=embed" style="color:#0000FF;text-align:left"&gt;Mines Rd to Big Basin&lt;/a&gt; in a larger map&lt;/small&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-7173983654561255142?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/7173983654561255142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=7173983654561255142' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7173983654561255142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7173983654561255142'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/08/divertissement.html' title='di·ver·tisse·ment'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-2218036717100194677</id><published>2010-07-30T16:08:00.001Z</published><updated>2010-07-30T16:26:23.153Z</updated><title type='text'>Friday Musings</title><content type='html'>&lt;div style="text-align: right;"&gt;
&lt;/div&gt;
First, Mumford &amp;amp; Son's "&lt;a href="http://www.last.fm/music/Mumford%2B%2526%2BSons/_/Little+Lion+Man"&gt;Little Lion Man&lt;/a&gt;" is amazing.&amp;nbsp; Listen.&amp;nbsp; Purchase.&amp;nbsp; Bonus points for accidentally starting two or more copies and noticing it sounds excellent in a round.&amp;nbsp; Found it on &lt;a href="http://thesixtyone.com/"&gt;thesixtyone.com&lt;/a&gt;, which is a great source for day-to-day working music and occasionally emits gems like this one.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
Second, the &lt;a href="http://www.scholarpedia.org/article/Richtmyer-Meshkov_instability_and_re-accelerated_inhomogeneous_flows"&gt;Richtmyer-Meshkov&lt;/a&gt; setup I've been mucking with for two days is working.  In it, a shock wave interacts with a perturbed, constant pressure interface between two different densities (&lt;a href="https://docs.google.com/document/pub?id=1XAPLPnZ6q8RTdxMBSvkobRI4kvUKXFnm0ZDkOzsvfAs"&gt;details&lt;/a&gt;). Courtesy of &lt;a href="http://www.gnuplot.info/"&gt;gnuplot&lt;/a&gt; and &lt;a href="http://www.lcdf.org/gifsicle/"&gt;gifsicle&lt;/a&gt;, here's an animated gif showing density evolution for a problem that's periodic in y and reflective at both x boundaries (click to view animation, 3.2M):&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/_Q-Q3vIxb_KE/TFL4IbFb-cI/AAAAAAAAAQE/4YRZxnBdKAM/s1600/rho.rm98.ns.nx0640.ny0128.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_Q-Q3vIxb_KE/TFL4JCSZJCI/AAAAAAAAAQI/KXv-icgFnn0/s640/rm98.ns.nx0640.ny0128.r0149.gif" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_Q-Q3vIxb_KE/TFJ9XH3fRjI/AAAAAAAAAQA/SYF3glFO6eQ/s1600/metroid_creature_01.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_Q-Q3vIxb_KE/TFJ9XH3fRjI/AAAAAAAAAQA/SYF3glFO6eQ/s1600/metroid_creature_01.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Just a roll up?&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
The reflective condition at the left boundary causes a re-reshock, which isn't usually what folks are interested in for these problems.&amp;nbsp; I'm not entirely sure how to enforce a strict inflow condition for compressible simulations like these-- presumably such an inflow condition would eat the outgoing characteristics and stop the re-reshock seen here.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-2218036717100194677?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/2218036717100194677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=2218036717100194677' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2218036717100194677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2218036717100194677'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/07/friday-musings.html' title='Friday Musings'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Q-Q3vIxb_KE/TFL4JCSZJCI/AAAAAAAAAQI/KXv-icgFnn0/s72-c/rm98.ns.nx0640.ny0128.r0149.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-6007316829520655418</id><published>2010-07-23T04:04:00.009Z</published><updated>2010-09-23T03:41:32.131Z</updated><title type='text'>Glam Shot</title><content type='html'>&lt;p&gt;
Today at &lt;a href="https://www.llnl.gov/"&gt;LLNL&lt;/a&gt; I was involved in some photos for a story on the summer students at &lt;a href="https://iscr.llnl.gov/"&gt;ISCR&lt;/a&gt;:
&lt;/p&gt;

&lt;p&gt;
&lt;table class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;" align="center" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_Q-Q3vIxb_KE/TEkRO6DeiBI/AAAAAAAAAP4/5mCidFiItmY/s1600/CompStudents-10.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img src="http://3.bp.blogspot.com/_Q-Q3vIxb_KE/TEkRO6DeiBI/AAAAAAAAAP4/5mCidFiItmY/s640/CompStudents-10.jpg" border="0" width="640" height="492" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Daniel from Ghana, Hilary from Dallas, and me&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
The screen images are from the 2D &lt;a href="http://dx.doi.org/10.1137/070679065"&gt;WENO&lt;/a&gt;-based code I've been revising to investigate &lt;a href="http://en.wikipedia.org/wiki/Reynolds-averaged_Navier%E2%80%93Stokes_equations"&gt;RANS&lt;/a&gt; modeling of &lt;a href="http://www.scholarpedia.org/article/Rayleigh-Taylor_instability_and_mixing"&gt;Rayleigh-Taylor instabilities&lt;/a&gt; with &lt;a href="http://en.scientificcommons.org/oleg_schilling"&gt;Dr. Oleg Schilling&lt;/a&gt;.  As a bit of &lt;a href="http://xkcd.com/356/"&gt;nerd sniping&lt;/a&gt;, I made sure &lt;a href="http://trac.edgewall.org/"&gt;Trac&lt;/a&gt;, &lt;a href="http://www.vim.org/"&gt;VIM&lt;/a&gt;'s &lt;a href="http://www.vim.org/scripts/script.php?script_id=1658"&gt;NERD tree&lt;/a&gt;, and some &lt;a href="http://www.wolfram.com/products/mathematica/index.html"&gt;Mathematica&lt;/a&gt; reproducing classic results from &lt;a href="http://dx.doi.org/10.1016/0021-9991%2881%2990128-5"&gt;Roe's JCP 1981 paper&lt;/a&gt; were clearly visible.
&lt;/p&gt;

&lt;p&gt;
Unrelated, today I also had a couple of beers with &lt;a href="http://ondrejcertik.blogspot.com/"&gt;Ondřej Čertík&lt;/a&gt; of &lt;a href="https://code.google.com/p/sympy/"&gt;sympy&lt;/a&gt; and &lt;a href="http://github.com/certik/theoretical-physics"&gt;theoretical physics&lt;/a&gt; fame.  Unbelievably swell guy— easily one of the smartest one or two people with whom I've ever shared a brew.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Update&lt;/b&gt;: Entertainingly, in &lt;a href="https://str.llnl.gov/Sep10/streitz.html"&gt;the related story the lab released&lt;/a&gt;, the caption shows me as a "Livermore scientist".
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-6007316829520655418?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/6007316829520655418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=6007316829520655418' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/6007316829520655418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/6007316829520655418'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/07/glam-shot.html' title='Glam Shot'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Q-Q3vIxb_KE/TEkRO6DeiBI/AAAAAAAAAP4/5mCidFiItmY/s72-c/CompStudents-10.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-2386720594160492085</id><published>2010-07-20T01:43:00.001Z</published><updated>2010-07-20T01:45:05.994Z</updated><title type='text'>Burst traffic smoothing for SIP processing elements</title><content type='html'>&lt;p&gt;
I received another patent grant from my IBM days.  This time its
&lt;a href="http://www.google.com/patents/about?id=yqnRAAAAEBAJ&amp;amp;dq=7,742,417"&gt;United States Patent 7,742,417&lt;/a&gt;:
&lt;/p&gt;

&lt;blockquote&gt;
Mechanisms for burst traffic smoothing for Session Initiation Protocol
    (SIP) processing elements are provided. A dispatch queue management
    engine determines whether a received packet is a TCP or UDP packet.
If
    the packet is a TCP packet, the packet is automatically added to
the
    dispatch queue. If the packet is a UDP packet, a value for a drop
    function f is generated and a random or pseudo-random number r is
    generated. If r has a predetermined relationship to f, then the UDP
    packet is added to the dispatch queue, otherwise the UDP packet is
    discarded. The value for f is based on the current dispatch queue
load,
    the network quality, the retransmission rate, and the allowable
drop
    rate. Thus, the determination as to whether to drop UDP packets or
not is
    configurable by an administrator and also adaptable to the current
    network and dispatch queue conditions.
&lt;/blockquote&gt;

&lt;p&gt;
The idea for this patent came from dealing with overflowing UDP buffers during a SIP-enabled Java application server stress test.   We observed that garbage collection events would pause the application server and cause a backlog of SIP retransmissions over UDP to grow.  The invention is a way to selectively toss out UDP packets during such a retransmission burst in a way that would allow the application server to catch up again while maintaining a probabilistically high QoS.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-2386720594160492085?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/2386720594160492085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=2386720594160492085' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2386720594160492085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2386720594160492085'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/07/burst-traffic-smoothing-for-sip.html' title='Burst traffic smoothing for SIP processing elements'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-5586550907420842230</id><published>2010-07-15T05:45:00.000Z</published><updated>2010-07-15T05:45:55.588Z</updated><title type='text'>Wireless tunes on the bike</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.myblueant.com/images/products/headsets/interphone/f4/unit.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="173" src="http://www.myblueant.com/images/products/headsets/interphone/f4/unit.png" width="200" /&gt;&lt;/a&gt;&lt;a href="http://www.hjchelmets.com/images/products/product_images/is16/solid/silver_side.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="182" src="http://www.hjchelmets.com/images/products/product_images/is16/solid/silver_side.jpg" width="200" /&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/_Q-Q3vIxb_KE/TD6fr6sXydI/AAAAAAAAAPw/SXcQxuAjSAI/s1600/TMRBT8IP.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="185" src="http://2.bp.blogspot.com/_Q-Q3vIxb_KE/TD6fr6sXydI/AAAAAAAAAPw/SXcQxuAjSAI/s200/TMRBT8IP.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
I'm quite stoked about combining three new toys:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;BlueAnt's &lt;a href="http://www.myblueant.com/products/headsets/interphone/f4/index.php"&gt;F4 Interphone&lt;/a&gt; Bluetooth helmet communication system&lt;/li&gt;
&lt;li&gt;Sony's &lt;a href="http://www.sonystyle.com/webapp/wcs/stores/servlet/ProductDisplay?catalogId=10551&amp;amp;storeId=10151&amp;amp;langId=-1&amp;amp;productId=8198552921665274447"&gt;TMR-BT8IP&lt;/a&gt; Bluetooth iPod transmitter &lt;/li&gt;
&lt;li&gt;HJC's &lt;a href="http://www.hjchelmets.com/prds_is16.htm"&gt;IS-16&lt;/a&gt; helmet&lt;/li&gt;
&lt;/ol&gt;
I've tried out the first two (to &lt;a href="http://www.youtube.com/watch?v=GycfDhkgckk"&gt;Kids of the K Hole&lt;/a&gt; no less, an excellent escapist riding anthem) and am supremely impressed.&amp;nbsp; It'll be nice to not be tethered to the tankbag by a huge, flaky PS/2 cable a la my klunkotronic Chatterbox &lt;a href="http://www.chatterboxusa.com/cbx1fkit.html"&gt;GMRS X1&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I can't speak to mounting the Interphone's helmet speakers since the new HJC hasn't arrived yet, but the mounting hardware BlueAnt provided looks solid.&amp;nbsp; Also no verdict yet on the intercom functionality, but the full duplex sound should be a welcome improvement compared to the GMRS X1 (unless Pauly abuses said duplex connection by singing along to decidedly non-escapist anthems).&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-5586550907420842230?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/5586550907420842230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=5586550907420842230' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5586550907420842230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5586550907420842230'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/07/wireless-tunes-on-bike.html' title='Wireless tunes on the bike'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Q-Q3vIxb_KE/TD6fr6sXydI/AAAAAAAAAPw/SXcQxuAjSAI/s72-c/TMRBT8IP.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-2414295284078003692</id><published>2010-06-25T06:34:00.002Z</published><updated>2010-06-25T06:35:15.253Z</updated><title type='text'>How to parse Fortran command line arguments using NAMELIST</title><content type='html'>&lt;p&gt;
While searching around for a pure Fortran 90+ way to parse command line arguments and/or input files, I stumbled across &lt;a href="http://home.comcast.net/~urbanjost/CLONE/KRACKEN/namelist/index.html"&gt;Exploring NAMELIST by John S. Urban&lt;/a&gt;.  John's article shows a way to use Fortran's &lt;a href="http://terpconnect.umd.edu/~nsw/ench250/fortran1.htm#NAMELIST"&gt;NAMELIST&lt;/a&gt; feature to quickly parse arbitrary command line arguments while providing sane default behavior.
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://agentzlerich.blogspot.com/2009/06/grrr-richardson-extrapolation.html"&gt;Like usual&lt;/a&gt;, I decided to overdevelop a simple idea.
The &lt;a href="http://github.com/RhysU/namelist_cli/blob/master/namelist_cli.F90"&gt;complete sample is up on github&lt;/a&gt;.  Assuming you've got an interface declaration in scope for &lt;code&gt;get_command_arguments&lt;/code&gt;, here's what you'd see as an end consumer:
&lt;/p&gt;

&lt;div style="background-color:#000000; color:#ffffff;"&gt;&lt;font face="monospace"&gt;
&lt;font color="#8080ff"&gt;&lt;b&gt;PROGRAM&lt;/b&gt;&lt;/font&gt;&amp;nbsp;namelist_cli&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;&lt;b&gt;IMPLICIT&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#00ff00"&gt;&lt;b&gt;NONE&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;&lt;b&gt;CHARACTER&lt;/b&gt;&lt;/font&gt;(&lt;font color="#00ff00"&gt;&lt;b&gt;LEN&lt;/b&gt;&lt;/font&gt;=&lt;font color="#ff40ff"&gt;&lt;b&gt;255&lt;/b&gt;&lt;/font&gt;) :: string, message&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;&lt;b&gt;INTEGER&lt;/b&gt;&lt;/font&gt;&amp;nbsp;:: &lt;font color="#ffff00"&gt;&lt;b&gt;status&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#00ffff"&gt;&lt;b&gt;! Declare and initialize a NAMELIST for values of interest&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;&lt;b&gt;INTEGER&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;:: i=&lt;font color="#ff40ff"&gt;&lt;b&gt;1&lt;/b&gt;&lt;/font&gt;,&amp;nbsp;&amp;nbsp; j=&lt;font color="#ff40ff"&gt;&lt;b&gt;2&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ff00"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;REAL&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :: s=&lt;font color="#ff40ff"&gt;&lt;b&gt;3.3&lt;/b&gt;&lt;/font&gt;, t=&lt;font color="#ff40ff"&gt;&lt;b&gt;4.4&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#ffff00"&gt;&lt;b&gt;NAMELIST&lt;/b&gt;&lt;/font&gt;&amp;nbsp;/cmd/&amp;nbsp;i, j, s, t&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#00ffff"&gt;&lt;b&gt;! Get command line arguments as a string ready for NAMELIST&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#8080ff"&gt;&lt;b&gt;CALL&lt;/b&gt;&lt;/font&gt;&amp;nbsp;get_command_arguments(string, &lt;font color="#ff40ff"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;span style="background-color: #ffff00"&gt;&lt;font color="#808080"&gt;&amp;amp;&lt;/font&gt;&lt;/span&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;cmd&amp;quot;&lt;/b&gt;&lt;/font&gt;, &lt;font color="#ff40ff"&gt;&lt;b&gt;&amp;quot;/&amp;quot;&lt;/b&gt;&lt;/font&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#ffff00"&gt;&lt;b&gt;READ&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(string, &lt;font color="#ffff00"&gt;&lt;b&gt;NML&lt;/b&gt;&lt;/font&gt;=cmd, &lt;font color="#ffff00"&gt;&lt;b&gt;IOSTAT&lt;/b&gt;&lt;/font&gt;=&lt;font color="#ffff00"&gt;&lt;b&gt;status&lt;/b&gt;&lt;/font&gt;, IOMSG=message)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#ffff00"&gt;&lt;b&gt;IF&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(&lt;font color="#ffff00"&gt;&lt;b&gt;status&lt;/b&gt;&lt;/font&gt;&amp;nbsp;/=&amp;nbsp;&lt;font color="#ff40ff"&gt;&lt;b&gt;0&lt;/b&gt;&lt;/font&gt;) &lt;font color="#ffff00"&gt;&lt;b&gt;THEN&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ffff00"&gt;&lt;b&gt;WRITE&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(*,*) &lt;font color="#ff40ff"&gt;&lt;b&gt;'Error:&amp;nbsp;&amp;nbsp; '&lt;/b&gt;&lt;/font&gt;, &lt;font color="#ffff00"&gt;&lt;b&gt;status&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ffff00"&gt;&lt;b&gt;WRITE&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(*,*) &lt;font color="#ff40ff"&gt;&lt;b&gt;'Message: '&lt;/b&gt;&lt;/font&gt;, message&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#8080ff"&gt;&lt;b&gt;CALL&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ffff00"&gt;&lt;b&gt;EXIT&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(&lt;font color="#ffff00"&gt;&lt;b&gt;status&lt;/b&gt;&lt;/font&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#ffff00"&gt;&lt;b&gt;END IF&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#00ffff"&gt;&lt;b&gt;! Echo the results&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#ffff00"&gt;&lt;b&gt;WRITE&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(*, &lt;font color="#ffff00"&gt;&lt;b&gt;NML&lt;/b&gt;&lt;/font&gt;=cmd)&lt;br&gt;
&lt;br&gt;
&lt;font color="#8080ff"&gt;&lt;b&gt;END PROGRAM&lt;/b&gt;&lt;/font&gt;&amp;nbsp;namelist_cli&lt;br&gt;
&lt;/font&gt;&lt;/div&gt;

&lt;p&gt;
With a little mucking around, the same NAMELIST could be used to read an input file from disk, allow the user to override individual options on the command line (say, for parametric studies), and also to dump the full setup into an output file for tracking purposes.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-2414295284078003692?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/2414295284078003692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=2414295284078003692' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2414295284078003692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2414295284078003692'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/06/how-to-parse-fortran-command-line.html' title='How to parse Fortran command line arguments using NAMELIST'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-6264251894787343951</id><published>2010-05-31T20:11:00.010Z</published><updated>2010-06-01T04:38:56.994Z</updated><title type='text'>Summer internship</title><content type='html'>&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Q-Q3vIxb_KE/TAQbvX8hFlI/AAAAAAAAAPY/gcTKLcAh2lI/s1600/SAM_0069.JPG"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 97px;" src="http://1.bp.blogspot.com/_Q-Q3vIxb_KE/TAQbvX8hFlI/AAAAAAAAAPY/gcTKLcAh2lI/s200/SAM_0069.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5477533547485009490" /&gt;&lt;/a&gt;
Following a 2,500 mile motorcycle trip from Austin to the Bay Area with my friend Paul, I'll be starting a summer internship at Lawrence Livermore National Labs tomorrow morning.&lt;/p&gt;

&lt;p style="clear:both;"&gt;
Instead of my usual &lt;a href="http://agentzlerich.blogspot.com/2009/09/suzerain-poster-from-2009-pecos-center.html"&gt;my thesis work&lt;/a&gt;, I'll be looking at &lt;a href="http://en.wikipedia.org/wiki/Reynolds-averaged_Navier%E2%80%93Stokes_equations"&gt;RANS&lt;/a&gt; turbulence models/numerics for &lt;a href="http://www.scholarpedia.org/article/Rayleigh-Taylor_instability_and_mixing"&gt;Rayleigh-Taylor&lt;/a&gt; problems.  As preparation, over the past couple of months, I've been spending some time staring at conservation law numerics classics like &lt;a href="http://books.google.com/books?id=3WhqLPcMdPsC"&gt;LeVeque's book&lt;/a&gt; as well as lecture notes from &lt;a href="http://www.its.caltech.edu/%7Eappelo/ae232/"&gt;Caltech's AE 232 course&lt;/a&gt;.  On the odd chance it is useful to anyone, I've put my toy code up at &lt;a href="http://github.com/RhysU/codefour"&gt;http://github.com/RhysU/codefour&lt;/a&gt;.
&lt;/p&gt;

&lt;p style="clear:both;"&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Q-Q3vIxb_KE/TAQZAKss6lI/AAAAAAAAAPQ/NxqQ5lZ-vOU/s1600/BurgersErrorAnalysis.png"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 320px; height: 242px;" src="http://3.bp.blogspot.com/_Q-Q3vIxb_KE/TAQZAKss6lI/AAAAAAAAAPQ/NxqQ5lZ-vOU/s320/BurgersErrorAnalysis.png" alt="" id="BLOGGER_PHOTO_ID_5477530537451907666" border="0" /&gt;&lt;/a&gt;
The Fortran 90 code solves inviscid or viscid 1D scalar conservation laws of
the form &lt;tt&gt;u_t + f(u)_x = 0&lt;/tt&gt; or &lt;tt&gt;u_t + f(u)_x = \nu u_{xx}&lt;/tt&gt; using WENO
reconstruction and a Lax-Friedrichs flux.&lt;/p&gt;

&lt;p&gt;It is based heavily on one provided through 
&lt;a href="http://www.its.caltech.edu/~appelo/ae232/"&gt;Caltech's AE 232 course&lt;/a&gt;.  Compared to the course's code, the following changes have been made:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Adding 3rd-order WENO reconstruction&lt;/li&gt;
&lt;li&gt;Adding 2nd and 4th order viscous capabilities&lt;/li&gt;
&lt;li&gt;Adding HDF5-based result output&lt;/li&gt;
&lt;li&gt;Adding Doxygen-based documentation&lt;/li&gt;
&lt;li&gt;Adding Mathematica-based error analysis against Hopf-Cole-based analytic solutions of the viscid Burger's equation&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-6264251894787343951?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/6264251894787343951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=6264251894787343951' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/6264251894787343951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/6264251894787343951'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/05/summer-internship.html' title='Summer internship'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Q-Q3vIxb_KE/TAQbvX8hFlI/AAAAAAAAAPY/gcTKLcAh2lI/s72-c/SAM_0069.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-3515807135813563299</id><published>2010-05-06T14:52:00.001Z</published><updated>2010-05-06T14:53:06.895Z</updated><title type='text'>Made GSL Committer</title><content type='html'>&lt;div class="separator" style="clear: both;"&gt;
&lt;a href="http://4.bp.blogspot.com/_Q-Q3vIxb_KE/S-LXeTb6AeI/AAAAAAAAAOw/RZ9I4G83gCQ/s1600/floating.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_Q-Q3vIxb_KE/S-LXeTb6AeI/AAAAAAAAAOw/RZ9I4G83gCQ/s1600/floating.png" /&gt;&lt;/a&gt;
I was just &lt;a href="https://savannah.gnu.org/project/memberlist.php?group=gsl"&gt;added as a committer&lt;/a&gt; for the &lt;a href="http://www.gnu.org/software/gsl/"&gt;GNU Scientific Library (GSL)&lt;/a&gt; over on &lt;a href="https://savannah.gnu.org/"&gt;Savannah&lt;/a&gt;.
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-3515807135813563299?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/3515807135813563299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=3515807135813563299' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3515807135813563299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3515807135813563299'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/05/made-gsl-committer.html' title='Made GSL Committer'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Q-Q3vIxb_KE/S-LXeTb6AeI/AAAAAAAAAOw/RZ9I4G83gCQ/s72-c/floating.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-8770931284228541084</id><published>2010-04-24T21:41:00.000Z</published><updated>2010-04-24T21:41:49.522Z</updated><title type='text'>New Toy</title><content type='html'>Courtesy of the employer, my new Lenovo W510 came in on Thursday.&lt;br /&gt;
&lt;br /&gt;
&lt;tt&gt;make -j8&lt;/tt&gt; on a laptop is fun:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/_Q-Q3vIxb_KE/S9NlM7NaHOI/AAAAAAAAAOQ/xxa7PStGBsw/s1600/Screenshot-System+Monitor.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="152" src="http://2.bp.blogspot.com/_Q-Q3vIxb_KE/S9NlM7NaHOI/AAAAAAAAAOQ/xxa7PStGBsw/s640/Screenshot-System+Monitor.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-8770931284228541084?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/8770931284228541084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=8770931284228541084' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8770931284228541084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8770931284228541084'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/04/new-toy.html' title='New Toy'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Q-Q3vIxb_KE/S9NlM7NaHOI/AAAAAAAAAOQ/xxa7PStGBsw/s72-c/Screenshot-System+Monitor.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-40719466218049420</id><published>2010-03-04T05:11:00.001Z</published><updated>2010-03-04T05:12:24.257Z</updated><title type='text'>Gram's Gob Recipe</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://images.quickblogcast.com/1/3/3/0/1/118176-110331/gobs1_cropped2.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="148" src="http://images.quickblogcast.com/1/3/3/0/1/118176-110331/gobs1_cropped2.JPG" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
My grandmother recently mailed me her &lt;a href="http://www.saveur.com/article/Kitchen/Hometown-Hero"&gt;gob&lt;/a&gt; recipe. Hands down, my Gram's are better than Yost's, your neighbor's, your mother's, or even your grandmother's.  As a public service, I'm sharing this jewel.
&lt;br/&gt;
&lt;br/&gt;

&lt;h3&gt;
Gram's Gobs&lt;/h3&gt;
&lt;h4&gt;

Cookies&lt;/h4&gt;
Cream together


&lt;ul&gt;
&lt;li&gt;2 cups sugar,&lt;/li&gt;
&lt;li&gt;½ cup crisco,&lt;/li&gt;
&lt;li&gt;2 eggs, and&lt;/li&gt;
&lt;li&gt;1 cup sour cream.&lt;/li&gt;
&lt;/ul&gt;
Then add 1 cup boiling water.  Sift and add to the above


&lt;ul&gt;
&lt;li&gt;4 cups flour,&lt;/li&gt;
&lt;li&gt;2 teaspoons baking soda,&lt;/li&gt;
&lt;li&gt;½ teaspoon baking powder,&lt;/li&gt;
&lt;li&gt;½ teaspoon salt, and&lt;/li&gt;
&lt;li&gt;½ cup cocoa.&lt;/li&gt;
&lt;/ul&gt;
Drop by tablespoons onto an ungreased baking sheet.  Bake at 450° Fahrenheit for exactly 5 minutes.  Remove from the sheet at once.


&lt;h4&gt;
&lt;a href="http://4.bp.blogspot.com/_Q-Q3vIxb_KE/S48_V37YrgI/AAAAAAAAANU/LYrhFLtdriE/s1600-h/img_1910.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_Q-Q3vIxb_KE/S48_V37YrgI/AAAAAAAAANU/LYrhFLtdriE/s1600/img_1910.jpg" /&gt;&lt;/a&gt;Filling&lt;/h4&gt;
First, mix together


&lt;ul&gt;
&lt;li&gt;5 tablespoons flour and&lt;/li&gt;
&lt;li&gt;1 cup milk.&lt;/li&gt;
&lt;/ul&gt;
Cook the mixture until very thick and then let it cool.

Separately, use a mixer to mix until light and fluffy


&lt;ul&gt;
&lt;li&gt;1 cup crisco or oleo,&lt;/li&gt;
&lt;li&gt;1 cup powdered sugar,&lt;/li&gt;
&lt;li&gt;¼ teaspoon salt, and&lt;/li&gt;
&lt;li&gt;1 teaspoon vanilla.&lt;/li&gt;
&lt;/ul&gt;
Add the first mixture to the second mixture and mix well.


&lt;h4&gt;

Assembly&lt;/h4&gt;
Spread the filling between two cookies wrapping each one separately.




Gram adds...



&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/_Q-Q3vIxb_KE/S48_oVRAF1I/AAAAAAAAANY/f9p-VJw1KJc/s1600-h/img_1911.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="80" src="http://3.bp.blogspot.com/_Q-Q3vIxb_KE/S48_oVRAF1I/AAAAAAAAANY/f9p-VJw1KJc/s640/img_1911.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-40719466218049420?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/40719466218049420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=40719466218049420' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/40719466218049420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/40719466218049420'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/03/grams-gob-recipe.html' title='Gram&apos;s Gob Recipe'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Q-Q3vIxb_KE/S48_V37YrgI/AAAAAAAAANU/LYrhFLtdriE/s72-c/img_1910.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-784480325460236755</id><published>2010-02-17T23:04:00.000Z</published><updated>2010-02-17T23:04:20.323Z</updated><title type='text'>MPI Bandwidth Benchmarks</title><content type='html'>&lt;p&gt;
I need to see if the wall times reported by &lt;a href="http://sourceforge.net/projects/mpip/"&gt;mpiP&lt;/a&gt; for the MPI calls underneath &lt;a href="http://www.fftw.org/fftw3.3alpha_doc/FFTW-MPI-Transposes.html#FFTW-MPI-Transposes"&gt;FFTW 3.3alpha1's parallel transposes&lt;/a&gt; make sense.  The &lt;a href="http://www.tacc.utexas.edu/"&gt;TACC folks&lt;/a&gt; were excellent, as usual, and pointed me to the &lt;a href="http://mvapich.cse.ohio-state.edu/benchmarks/%22"&gt;MVAPICH benchmarks&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
One quick realization of the &lt;a href="https://mvapich.cse.ohio-state.edu/svn/mpi-benchmarks/branches/OMB-3.1/osu_bw.c"&gt;bandwidth test&lt;/a&gt; on &lt;a href="http://www.tacc.utexas.edu/resources/hpc/#lonestar"&gt;lonestar&lt;/a&gt; and &lt;a href="http://www.tacc.utexas.edu/resources/hpc/#constellation"&gt;ranger&lt;/a&gt; shows the following:
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/_Q-Q3vIxb_KE/S3x1jK1oUNI/AAAAAAAAANM/9bwJLVUdriQ/s1600-h/bandwidth.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://1.bp.blogspot.com/_Q-Q3vIxb_KE/S3x1jK1oUNI/AAAAAAAAANM/9bwJLVUdriQ/s640/bandwidth.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/p&gt;

&lt;p&gt;
Unfortunately, this information does not explain my bottleneck...
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-784480325460236755?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/784480325460236755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=784480325460236755' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/784480325460236755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/784480325460236755'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/02/mpi-bandwidth-benchmarks.html' title='MPI Bandwidth Benchmarks'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Q-Q3vIxb_KE/S3x1jK1oUNI/AAAAAAAAANM/9bwJLVUdriQ/s72-c/bandwidth.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-7771903432506170524</id><published>2010-01-28T03:38:00.000Z</published><updated>2010-01-28T03:38:53.226Z</updated><title type='text'>Ahhh... Corporate Governance</title><content type='html'>&lt;p&gt;Really?&lt;/p&gt;

&lt;blockquote&gt;
&lt;a href="http://2.bp.blogspot.com/_Q-Q3vIxb_KE/S2EGSMU2MMI/AAAAAAAAANI/5WPquGhqalc/s1600-h/bank_of_america_logo_2964.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_Q-Q3vIxb_KE/S2EGSMU2MMI/AAAAAAAAANI/5WPquGhqalc/s1600/bank_of_america_logo_2964.png" /&gt;&lt;/a&gt;
We have agreed that if our stockholders fail to adopt the Amendment at the Special Meeting or any postponement or adjournment thereof, we will continue to seek to obtain the requisite approval at least as frequently as every six months until such stockholder adoption has been obtained.
&lt;/blockquote&gt;

&lt;p&gt;
Really. Thankfully, they caught and removed the draft paragraph's final "you stupid asshats".
&lt;/p&gt;

&lt;p&gt;
Admittedly, I have not yet fully reviewed &lt;a href="http://media.corporate-ir.net/media_files/irol/71/71595/reports/Special_Proxy.pdf"&gt;all the particulars&lt;/a&gt;.  The choice paragraph appears at the bottom of page 6.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-7771903432506170524?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/7771903432506170524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=7771903432506170524' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7771903432506170524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7771903432506170524'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/01/ahhh-corporate-governance.html' title='Ahhh... Corporate Governance'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Q-Q3vIxb_KE/S2EGSMU2MMI/AAAAAAAAANI/5WPquGhqalc/s72-c/bank_of_america_logo_2964.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-8101550005505553851</id><published>2010-01-20T03:23:00.008Z</published><updated>2010-01-22T16:08:09.255Z</updated><title type='text'>Using FFTW for in-place matrix transposition</title><content type='html'>&lt;p&gt;
The Wikipedia article on &lt;a href="http://en.wikipedia.org/wiki/In-place_matrix_transposition"&gt;in-place matrix transposition&lt;/a&gt; tantalizingly hints that &lt;a href="http://www.fftw.org/"&gt;FFTW&lt;/a&gt; can compute rectangular in-place matrix transposes efficiently (or as efficiently as one can).  FFTW's manual, however, is silent.  At least as far as section headings, function names, and the index are concerned.
&lt;/p&gt;

&lt;p&gt;
&lt;a href="http://www.fftw.org/fftw-paper-ieee.pdf"&gt;Frigo and Johnson's paper&lt;/a&gt;, on page 6, spells out how to tap into the in-place transpose routines: create a rank-0 transform of vector rank 2 using transposed vector strides.  I had to bug &lt;a href="http://www.fftw.org/~athena/"&gt;Matteo Frigo&lt;/a&gt; twice (nice guy!) to figure out how to accomplish this using the guru interface.
&lt;/p&gt;

&lt;p&gt;
A &lt;a href="http://en.wikipedia.org/wiki/C99"&gt;C99&lt;/a&gt; solution capable of handling the &lt;code&gt;double&lt;/code&gt;-valued either &lt;a href="http://en.wikipedia.org/wiki/Row-major_order"&gt;row major or column major&lt;/a&gt; case looks like:
&lt;div style="padding:.5em;background-color:#222222;color:#ffffff"&gt;
&lt;font face="monospace"&gt;
&lt;font color="#8080ff"&gt;&lt;b&gt;#include &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;&amp;lt;assert.h&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#8080ff"&gt;&lt;b&gt;#include &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;&amp;lt;ctype.h&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#8080ff"&gt;&lt;b&gt;#include &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;&amp;lt;fftw3.h&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
fftw_plan plan_transpose(&lt;font color="#00ff00"&gt;&lt;b&gt;char&lt;/b&gt;&lt;/font&gt;&amp;nbsp;storage_type,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#00ff00"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;rows,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#00ff00"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;cols,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#00ff00"&gt;&lt;b&gt;double&lt;/b&gt;&lt;/font&gt;&amp;nbsp;*in,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#00ff00"&gt;&lt;b&gt;double&lt;/b&gt;&lt;/font&gt;&amp;nbsp;*out)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;&lt;b&gt;const&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#00ff00"&gt;&lt;b&gt;unsigned&lt;/b&gt;&lt;/font&gt;&amp;nbsp;flags = FFTW_ESTIMATE; &lt;font color="#00ffff"&gt;&lt;b&gt;/*&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;Do not destroy input &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*/&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fftw_iodim howmany_dims[&lt;font color="#ff40ff"&gt;&lt;b&gt;2&lt;/b&gt;&lt;/font&gt;];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ffff00"&gt;&lt;b&gt;switch&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(toupper(storage_type)) {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&amp;nbsp;&lt;font color="#ff40ff"&gt;&lt;b&gt;'R'&lt;/b&gt;&lt;/font&gt;:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;howmany_dims[&lt;font color="#ff40ff"&gt;&lt;b&gt;0&lt;/b&gt;&lt;/font&gt;].n&amp;nbsp;&amp;nbsp;= rows;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;howmany_dims[&lt;font color="#ff40ff"&gt;&lt;b&gt;0&lt;/b&gt;&lt;/font&gt;].is = cols;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;howmany_dims[&lt;font color="#ff40ff"&gt;&lt;b&gt;0&lt;/b&gt;&lt;/font&gt;].os = &lt;font color="#ff40ff"&gt;&lt;b&gt;1&lt;/b&gt;&lt;/font&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;howmany_dims[&lt;font color="#ff40ff"&gt;&lt;b&gt;1&lt;/b&gt;&lt;/font&gt;].n&amp;nbsp;&amp;nbsp;= cols;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;howmany_dims[&lt;font color="#ff40ff"&gt;&lt;b&gt;1&lt;/b&gt;&lt;/font&gt;].is = &lt;font color="#ff40ff"&gt;&lt;b&gt;1&lt;/b&gt;&lt;/font&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;howmany_dims[&lt;font color="#ff40ff"&gt;&lt;b&gt;1&lt;/b&gt;&lt;/font&gt;].os = rows;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ffff00"&gt;&lt;b&gt;break&lt;/b&gt;&lt;/font&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&amp;nbsp;&lt;font color="#ff40ff"&gt;&lt;b&gt;'C'&lt;/b&gt;&lt;/font&gt;:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;howmany_dims[&lt;font color="#ff40ff"&gt;&lt;b&gt;0&lt;/b&gt;&lt;/font&gt;].n&amp;nbsp;&amp;nbsp;= rows;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;howmany_dims[&lt;font color="#ff40ff"&gt;&lt;b&gt;0&lt;/b&gt;&lt;/font&gt;].is = &lt;font color="#ff40ff"&gt;&lt;b&gt;1&lt;/b&gt;&lt;/font&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;howmany_dims[&lt;font color="#ff40ff"&gt;&lt;b&gt;0&lt;/b&gt;&lt;/font&gt;].os = cols;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;howmany_dims[&lt;font color="#ff40ff"&gt;&lt;b&gt;1&lt;/b&gt;&lt;/font&gt;].n&amp;nbsp;&amp;nbsp;= cols;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;howmany_dims[&lt;font color="#ff40ff"&gt;&lt;b&gt;1&lt;/b&gt;&lt;/font&gt;].is = rows;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;howmany_dims[&lt;font color="#ff40ff"&gt;&lt;b&gt;1&lt;/b&gt;&lt;/font&gt;].os = &lt;font color="#ff40ff"&gt;&lt;b&gt;1&lt;/b&gt;&lt;/font&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ffff00"&gt;&lt;b&gt;break&lt;/b&gt;&lt;/font&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;default:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ffff00"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff40ff"&gt;&lt;b&gt;NULL&lt;/b&gt;&lt;/font&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;&lt;b&gt;const&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#00ff00"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;howmany_rank = sizeof(howmany_dims)/sizeof(howmany_dims[&lt;font color="#ff40ff"&gt;&lt;b&gt;0&lt;/b&gt;&lt;/font&gt;]);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ffff00"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&amp;nbsp;fftw_plan_guru_r2r(&lt;font color="#00ffff"&gt;&lt;b&gt;/*&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;rank&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*/&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;0&lt;/b&gt;&lt;/font&gt;, &lt;font color="#00ffff"&gt;&lt;b&gt;/*&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;dims&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*/&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;NULL&lt;/b&gt;&lt;/font&gt;,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;howmany_rank, howmany_dims,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;in, out, &lt;font color="#00ffff"&gt;&lt;b&gt;/*&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;kind&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*/&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;NULL&lt;/b&gt;&lt;/font&gt;, flags);&lt;br&gt;
}&lt;br&gt;
&lt;/font&gt;
&lt;/div&gt;
You can get a better performing plan if you're willing to use &lt;code&gt;flags = &lt;a href="http://www.fftw.org/fftw3.3alpha_doc/Planner-Flags.html"&gt;FFTW_MEASURE&lt;/a&gt;&lt;/code&gt; or its big brothers.  I chose to use &lt;code&gt;FFTW_ESTIMATE&lt;/code&gt; in the sample above because I didn't want the planning process to destroy the input array.
&lt;/p&gt;

&lt;p&gt;
You use the solution like:
&lt;div style="padding:.5em;background-color:#222222;color:#ffffff"&gt;
&lt;font face="monospace"&gt;
&lt;font color="#00ff00"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;somelogic()&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;&lt;b&gt;char&lt;/b&gt;&lt;/font&gt;&amp;nbsp;storage_type = &lt;font color="#00ffff"&gt;&lt;b&gt;/*&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;One of 'R', 'r', 'C', 'c' &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*/&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;rows&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= &lt;font color="#00ffff"&gt;&lt;b&gt;/*&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;Number of rows &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*/&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;cols&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= &lt;font color="#00ffff"&gt;&lt;b&gt;/*&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;Number of columns &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*/&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;&lt;b&gt;double&lt;/b&gt;&lt;/font&gt;&amp;nbsp;*in&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= &lt;font color="#00ffff"&gt;&lt;b&gt;/*&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;... &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*/&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;&lt;b&gt;double&lt;/b&gt;&lt;/font&gt;&amp;nbsp;*out&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = &lt;font color="#00ffff"&gt;&lt;b&gt;/*&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;... &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*/&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ffff"&gt;&lt;b&gt;/*&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;Plan the transpose once; transpose is in-place iff in == out &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*/&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fftw_plan transpose = plan_transpose(storage_type, rows, cols, in, out);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;assert(transpose);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ffff"&gt;&lt;b&gt;/*&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;Execute the plan potentially many times &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*/&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fftw_execute(transpose);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ffff"&gt;&lt;b&gt;/*&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;FFTW New-array Execute functions should be callable, too &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*/&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ffff"&gt;&lt;b&gt;/*&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;Beware of mixing in-place and out-of-place planning and usage &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*/&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;&lt;b&gt;double&lt;/b&gt;&lt;/font&gt;&amp;nbsp;*another_in&amp;nbsp;&amp;nbsp;= &lt;font color="#00ffff"&gt;&lt;b&gt;/*&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;... &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*/&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;&lt;b&gt;double&lt;/b&gt;&lt;/font&gt;&amp;nbsp;*another_out = &lt;font color="#00ffff"&gt;&lt;b&gt;/*&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;... &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*/&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fftw_execute_r2r(transpose, another_in, another_out);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ffff"&gt;&lt;b&gt;/*&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;Destroy the plan when completely done &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*/&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fftw_destroy_plan(transpose);&lt;br&gt;
}&lt;br&gt;
&lt;/font&gt;
&lt;/div&gt;
There are many restrictions around the &lt;a href="http://www.fftw.org/fftw3.3alpha_doc/New_002darray-Execute-Functions.html"&gt;the New-array execute interface&lt;/a&gt;, so be careful if you go that route.
&lt;/p&gt;

&lt;/p&gt;
One very cool thing is that you don't need to know a priori that you're computing an in-place transpose.  The planner works for out-of-place transposes as well.  Another cool thing is that the plans are useful for rectangular transposes and square transposes alike with more efficient algorithms being used for the latter case.
&lt;/p&gt;

&lt;p&gt;
I wrote myself &lt;a href="https://docs.google.com/leaf?id=0B9CTnE5eyCaRYWRkYTRiMTQtYThjNC00OTI5LTg1MzAtYWY0MDc2MTdkYzM3&amp;hl=en"&gt;a toy to test it out&lt;/a&gt;.  Transposing a &lt;b&gt;R&lt;/b&gt;ow major, &lt;b&gt;3&lt;/b&gt;-by-&lt;b&gt;2&lt;/b&gt; matrix &lt;b&gt;I&lt;/b&gt;n-place gives:
&lt;font size="+1"&gt;
&lt;pre&gt;
[499 rhys@mentes misc]$ ./fftw_transpose I R 3 2

viewing extents [ 3 2 ] with strides [ 2 1 ] {
   0    1 
 100  101 
 200  201 
}
stored contiguously as {
   0    1  100  101  200  201 
}

Transposing in-place with 
(rdft-transpose-cut-3x2
  (rdft-rank0-ip-sq-tiledbuf/1-x2-x2)
  (rdft-rank0-iter-ci/1-x2))

viewing extents [ 2 3 ] with strides [ 3 1 ] {
   0  100  200 
   1  101  201 
}
stored contiguously as {
   0  100  200    1  101  201 
}
&lt;/pre&gt;
&lt;/font&gt;
Transposing a &lt;b&gt;C&lt;/b&gt;olumn major, &lt;b&gt;2&lt;/b&gt;-by-&lt;b&gt;3&lt;/b&gt; matrix &lt;b&gt;O&lt;/b&gt;ut-of-place gives:
&lt;font size="+1"&gt;
&lt;pre&gt;
[500 rhys@mentes misc]$ ./fftw_transpose O C 2 3

viewing extents [ 2 3 ] with strides [ 1 2 ] {
   0    1    2 
 100  101  102 
}
stored contiguously as {
   0  100    1  101    2  102 
}

Transposing out-of-place with 
(rdft-rank0-tiledbuf/1-x3-x2)

viewing extents [ 3 2 ] with strides [ 1 3 ] {
   0  100 
   1  101 
   2  102 
}
stored contiguously as {
   0    1    2  100  101  102 
}
&lt;/pre&gt;
&lt;/font&gt;
&lt;/p&gt;

&lt;p&gt;
From burning lots of time playing with FFTW's transpose capabilities, it seems that the planner returns &lt;code&gt;NULL&lt;/code&gt; (i.e. bombs) whenever you attempt to transpose a non-contiguous matrix.  That rules out specifying leading dimensions and/or arbitrary strides
as far as I can tell.  Someone please correct me if I'm wrong.  I'd love to be wrong so I can use FFTW to emulate Intel MKL's &lt;a href="http://www.intel.com/software/products/mkl/docs/WebHelp/bla/bla_Transpose.html"&gt;mkl_trans.h&lt;/a&gt; functionality for systems where a newer version of MKL is not available.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-8101550005505553851?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/8101550005505553851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=8101550005505553851' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8101550005505553851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8101550005505553851'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/01/using-fftw-for-in-place-matrix.html' title='Using FFTW for in-place matrix transposition'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-7583576833896870900</id><published>2010-01-13T19:45:00.003Z</published><updated>2010-02-02T19:40:19.615Z</updated><title type='text'>Mathematica's FourierParameters necessary to emulate FFTW_FORWARD and FFTW_BACKWARD</title><content type='html'>These are the &lt;a href="http://reference.wolfram.com/mathematica/ref/FourierParameters.html"&gt;FourierParameters&lt;/a&gt; necessary to have &lt;a href="http://www.wolfram.com/products/mathematica"&gt;Mathematica&lt;/a&gt;'s &lt;a href="http://reference.wolfram.com/mathematica/ref/Fourier.html"&gt;Fourier&lt;/a&gt; and &lt;a href="http://reference.wolfram.com/mathematica/ref/InverseFourier.html"&gt;InverseFourier&lt;/a&gt; discrete transforms behave &lt;a href="http://www.fftw.org/fftw3_doc/The-1d-Discrete-Fourier-Transform-_0028DFT_0029.html#The-1d-Discrete-Fourier-Transform-_0028DFT_0029"&gt;like FFTW's forward and backward FFTs&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;FFTWForward[expr_]&amp;nbsp; := Fourier[expr, FourierParameters -&amp;gt; {1, -1}];&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;FFTWBackward[expr_] := InverseFourier[expr, FourierParameters -&amp;gt; {-1, -1}];&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;In particular, these functions/parameter choices do not scale the result when transforming in either direction.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Similar parameters can be used when performing analytic transforms using &lt;a href="http://reference.wolfram.com/mathematica/ref/FourierTransform.html"&gt;FourierTransform&lt;/a&gt; and &lt;a href="http://reference.wolfram.com/mathematica/ref/InverseFourierTransform.html"&gt;InverseFourierTransform&lt;/a&gt;:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;FFTWForwardAnalytic[expr_, t_, w_] := &lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;FourierTransform[expr, t, w, FourierParameters -&amp;gt; {1, -1}];&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;FFTWBackwardAnalytic[expr_, w_, t_] := &lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;InverseFourierTransform[expr, w, t, FourierParameters -&amp;gt; {-1, -1}]; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-7583576833896870900?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/7583576833896870900/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=7583576833896870900' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7583576833896870900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7583576833896870900'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/01/mathematicas-fourierparameters.html' title='Mathematica&apos;s FourierParameters necessary to emulate FFTW_FORWARD and FFTW_BACKWARD'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-6182194448273352611</id><published>2010-01-13T06:10:00.003Z</published><updated>2010-01-13T06:12:05.248Z</updated><title type='text'>Providing fill and for_each algorithms for Boost.MultiArray</title><content type='html'>&lt;p&gt;
I sometimes want to &lt;code&gt;fill&lt;/code&gt; a &lt;a href="http://www.boost.org/doc/libs/release/libs/multi_array"&gt;Boost.MultiArray&lt;/a&gt;
with a particular value.  For concrete implementations like &lt;code&gt;boost::multi_array&lt;/code&gt; or &lt;code&gt;boost::multi_array_ref&lt;/code&gt;,
the task isn't too hard and &lt;code&gt;std::fill&lt;/code&gt; works just fine.  But getting an arbitrary-dimensional version working
that only uses the &lt;code&gt;MultiArray&lt;/code&gt; concept takes a little thought.  This is important when working with views.
I additionally want the solution to take advantage of
the contiguous storage guarantees made by &lt;code&gt;multi_array&lt;/code&gt; and &lt;code&gt;multi_array_ref&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;Because &lt;code&gt;fill&lt;/code&gt; looks like &lt;code&gt;for_each&lt;/code&gt; with an assignment-like &lt;code&gt;UnaryFunction&lt;/code&gt;, I decided to
write a &lt;code&gt;MultiArray&lt;/code&gt;-specific &lt;code&gt;for_each&lt;/code&gt; implementation.  First comes a helper functor
recursively templated on the dimensionality:
&lt;/p&gt;

&lt;div style="padding:.5em;background-color:#222222;color:#ffffff"&gt;
&lt;font face="monospace"&gt;
&lt;font color="#bdb76b"&gt;&lt;b&gt;namespace&lt;/b&gt;&lt;/font&gt;&amp;nbsp;{ &lt;font color="#87ceeb"&gt;// anonymous&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;font color="#bdb76b"&gt;&lt;b&gt;template&lt;/b&gt;&lt;/font&gt;&amp;lt;std::&lt;font color="#bdb76b"&gt;&lt;b&gt;size_t&lt;/b&gt;&lt;/font&gt;&amp;nbsp;D&amp;gt;&lt;br&gt;
&lt;font color="#bdb76b"&gt;&lt;b&gt;struct&lt;/b&gt;&lt;/font&gt;&amp;nbsp;for_each_functor {&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BOOST_STATIC_ASSERT(D != &lt;font color="#ffa0a0"&gt;0&lt;/font&gt;); &lt;font color="#87ceeb"&gt;// Nonsensical behavior for zero dimensions&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BOOST_STATIC_ASSERT(D &amp;gt; &lt;font color="#ffa0a0"&gt;1&lt;/font&gt;);&amp;nbsp;&amp;nbsp;&lt;font color="#87ceeb"&gt;// Ensure not instantiated for specialized values&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#87ceeb"&gt;// See &lt;a href="http://groups.google.com/group/boost-list/browse_thread/thread/e16f32c4411dea08"&gt;http://groups.google.com/group/boost-list/browse_thread/thread/e16f32c4411dea08&lt;/a&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#87ceeb"&gt;// for details about why MultiArray::iterator::reference is used below.&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#bdb76b"&gt;&lt;b&gt;template&lt;/b&gt;&lt;/font&gt;&amp;lt;&lt;font color="#bdb76b"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;MultiArray,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#bdb76b"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;UnaryFunction &amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#bdb76b"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#f0e68c"&gt;&lt;b&gt;operator&lt;/b&gt;&lt;/font&gt;()(MultiArray &amp;amp;x, UnaryFunction &amp;amp;f) &lt;font color="#bdb76b"&gt;&lt;b&gt;const&lt;/b&gt;&lt;/font&gt;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for_each_functor&amp;lt;D-&lt;font color="#ffa0a0"&gt;1&lt;/font&gt;&amp;gt; functor;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#f0e68c"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(&lt;font color="#bdb76b"&gt;&lt;b&gt;typename&lt;/b&gt;&lt;/font&gt;&amp;nbsp;MultiArray::iterator i = x.begin(); i != x.end(); ++i) {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#bdb76b"&gt;&lt;b&gt;typename&lt;/b&gt;&lt;/font&gt;&amp;nbsp;MultiArray::iterator::reference ri = *i;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;functor(ri,f);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
};&lt;br&gt;
&lt;br&gt;
&lt;font color="#bdb76b"&gt;&lt;b&gt;template&lt;/b&gt;&lt;/font&gt;&amp;lt;&amp;gt; &lt;font color="#bdb76b"&gt;&lt;b&gt;struct&lt;/b&gt;&lt;/font&gt;&amp;nbsp;for_each_functor&amp;lt;&lt;font color="#ffa0a0"&gt;1&lt;/font&gt;&amp;gt; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#bdb76b"&gt;&lt;b&gt;template&lt;/b&gt;&lt;/font&gt;&amp;lt;&lt;font color="#bdb76b"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;MultiArray,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#bdb76b"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;UnaryFunction &amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#bdb76b"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#f0e68c"&gt;&lt;b&gt;operator&lt;/b&gt;&lt;/font&gt;()(MultiArray &amp;amp;x, UnaryFunction &amp;amp;f) &lt;font color="#bdb76b"&gt;&lt;b&gt;const&lt;/b&gt;&lt;/font&gt;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::for_each(x.begin(), x.end(), f);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
};&lt;br&gt;
&lt;br&gt;
} &lt;font color="#87ceeb"&gt;// namespace anonymous&lt;/font&gt;&lt;br&gt;
&lt;/font&gt;
&lt;/div&gt;

&lt;p&gt;
The functor uses &lt;code&gt;std::for_each&lt;/code&gt; for the one dimensional base case.  The &lt;code&gt;BOOST_STATIC_ASSERT&lt;/code&gt;s are there just to keep me
from shooting myself in the foot.  A smarter version might specialize for the two- and three-dimensional cases, check the underlying strides,
and then be certain to iterate in the faster directions first.
&lt;/p&gt;

&lt;p&gt;
Now that we've got &lt;code&gt;for_each_functor&lt;/code&gt; that works on the general &lt;code&gt;MultiArray&lt;/code&gt; concept,
it's straightforward to implement &lt;code&gt;for_each&lt;/code&gt;:
&lt;/p&gt;

&lt;div style="padding:.5em;background-color:#222222;color:#ffffff"&gt;
&lt;font face="monospace"&gt;
&lt;font color="#87ceeb"&gt;/*&lt;/font&gt;&lt;font color="#87ceeb"&gt;*&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* Invoke \c f for each element in MultiArray \c x.&amp;nbsp;&amp;nbsp;The&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* order in which the invocations take place is undefined.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;*&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* @param x MultiArray over which to iterate.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* @param f UnaryFunction to invoke on each element of \c x.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;*&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* @return \c f.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;*&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* @see SGI's &amp;lt;a href=&amp;quot;&lt;a href="http://www.sgi.com/tech/stl/UnaryFunction.html"&gt;http://www.sgi.com/tech/stl/UnaryFunction.html&lt;/a&gt;&amp;quot;&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UnaryFunction&amp;lt;/a&amp;gt; concept for more information.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#87ceeb"&gt;*/&lt;/font&gt;&lt;br&gt;
&lt;font color="#bdb76b"&gt;&lt;b&gt;template&lt;/b&gt;&lt;/font&gt;&amp;lt;&lt;font color="#bdb76b"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;MultiArray,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#bdb76b"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;UnaryFunction&amp;gt;&lt;br&gt;
&lt;font color="#bdb76b"&gt;&lt;b&gt;inline&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
UnaryFunction for_each(MultiArray &amp;amp;x,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnaryFunction f) {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for_each_functor&amp;lt;MultiArray::dimensionality&amp;gt;()(x,f);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#f0e68c"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&amp;nbsp;f;&lt;br&gt;
}&lt;br&gt;
&lt;/font&gt;
&lt;/div&gt;

&lt;p&gt;
Please note that my &lt;code&gt;for_each&lt;/code&gt; type signature is not identical with the STL algorithm's signature.
&lt;/p&gt;

&lt;p&gt;
Since we know that &lt;code&gt;multi_array&lt;/code&gt; and &lt;code&gt;multi_array_ref&lt;/code&gt; have contiguous storage, we can specialize our
version of &lt;code&gt;for_each&lt;/code&gt; to linearly walk their underlying memory using the usual algorithms.
&lt;/p&gt;

&lt;div style="padding:.5em;background-color:#222222;color:#ffffff"&gt;
&lt;font face="monospace"&gt;
&lt;font color="#87ceeb"&gt;/*&lt;/font&gt;&lt;font color="#87ceeb"&gt;*&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* Invoke \c f for each element in &amp;lt;tt&amp;gt;boost::multi_array&amp;lt;/tt&amp;gt; \c x.&amp;nbsp;&amp;nbsp;The order&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* in which the invocations take place is undefined.&amp;nbsp;&amp;nbsp;This specialization&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* takes advantage of &amp;lt;tt&amp;gt;boost::multi_array&amp;lt;/tt&amp;gt;'s contiguous storage.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;*&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* @param x &amp;lt;tt&amp;gt;boost::multi_array&amp;lt;/tt&amp;gt; over which to iterate.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* @param f UnaryFunction to invoke on each element of \c x.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;*&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* @return \c f.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;*&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* @see SGI's &amp;lt;a href=&amp;quot;&lt;a href="http://www.sgi.com/tech/stl/UnaryFunction.html"&gt;http://www.sgi.com/tech/stl/UnaryFunction.html&lt;/a&gt;&amp;quot;&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UnaryFunction&amp;lt;/a&amp;gt; concept for more information.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#87ceeb"&gt;*/&lt;/font&gt;&lt;br&gt;
&lt;font color="#bdb76b"&gt;&lt;b&gt;template&lt;/b&gt;&lt;/font&gt;&amp;lt;&lt;font color="#bdb76b"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;ValueType, std::&lt;font color="#bdb76b"&gt;&lt;b&gt;size_t&lt;/b&gt;&lt;/font&gt;&amp;nbsp;NumDims, &lt;font color="#bdb76b"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Allocator,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#bdb76b"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;UnaryFunction&amp;gt;&lt;br&gt;
&lt;font color="#bdb76b"&gt;&lt;b&gt;inline&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
UnaryFunction for_each(boost::multi_array&amp;lt;ValueType,NumDims,Allocator&amp;gt; &amp;amp;x,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnaryFunction f) {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#f0e68c"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&amp;nbsp;std::for_each(x.data(), x.data() + x.num_elements(), f);&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
&lt;font color="#87ceeb"&gt;/*&lt;/font&gt;&lt;font color="#87ceeb"&gt;*&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* Invoke \c f for each element in &amp;lt;tt&amp;gt;boost::multi_array_ref&amp;lt;/tt&amp;gt; \c x.&amp;nbsp;&amp;nbsp;The&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* order in which the invocations take place is undefined.&amp;nbsp;&amp;nbsp;This specialization&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* takes advantage of &amp;lt;tt&amp;gt;boost::multi_array_ref&amp;lt;/tt&amp;gt;'s contiguous storage.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;*&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* @param x &amp;lt;tt&amp;gt;boost::multi_array_ref&amp;lt;/tt&amp;gt; over which to iterate.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* @param f UnaryFunction to invoke on each element of \c x.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;*&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* @return \c f.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;*&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* @see SGI's &amp;lt;a href=&amp;quot;&lt;a href="http://www.sgi.com/tech/stl/UnaryFunction.html"&gt;http://www.sgi.com/tech/stl/UnaryFunction.html&lt;/a&gt;&amp;quot;&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UnaryFunction&amp;lt;/a&amp;gt; concept for more information.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#87ceeb"&gt;*/&lt;/font&gt;&lt;br&gt;
&lt;font color="#bdb76b"&gt;&lt;b&gt;template&lt;/b&gt;&lt;/font&gt;&amp;lt;&lt;font color="#bdb76b"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;ValueType, std::&lt;font color="#bdb76b"&gt;&lt;b&gt;size_t&lt;/b&gt;&lt;/font&gt;&amp;nbsp;NumDims,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#bdb76b"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;UnaryFunction&amp;gt;&lt;br&gt;
&lt;font color="#bdb76b"&gt;&lt;b&gt;inline&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
UnaryFunction for_each(boost::multi_array_ref&amp;lt;ValueType,NumDims&amp;gt; &amp;amp;x,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnaryFunction f)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#f0e68c"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&amp;nbsp;std::for_each(x.data(), x.data() + x.num_elements(), f);&lt;br&gt;
}&lt;br&gt;
&lt;/font&gt;
&lt;/div&gt;

&lt;p&gt;
With &lt;code&gt;for_each&lt;/code&gt; complete, we can move on to implementing &lt;code&gt;fill&lt;/code&gt; by mapping an assignment-like functor over
over a &lt;code&gt;MultiArray&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
In my particular application I have &lt;code&gt;MultiArray&lt;/code&gt;s with complex-valued elements from
a couple of different numeric libraries (e.g. &lt;code&gt;std::complex&amp;lt;T&amp;gt;&lt;/code&gt;, &lt;code&gt;T[2]&lt;/code&gt;) and I'd like to be able
to fill a &lt;code&gt;MultiArray&lt;/code&gt; with a value for which a member &lt;code&gt;operator=&lt;/code&gt; may not be available.  To accommodate
this need, I created a templated assignment functor which can be specialized using schmancy &lt;code&gt;boost::enable_if&lt;/code&gt;
techniques based on both the target and source of the assignment:
&lt;/p&gt;

&lt;div style="padding:.5em;background-color:#222222;color:#ffffff"&gt;
&lt;font face="monospace"&gt;
&lt;font color="#87ceeb"&gt;/*&lt;/font&gt;&lt;font color="#87ceeb"&gt;*&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* A functor that performs assignment to type \c Target from type \c Source.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* \c Target must be assignable from \c Source.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;*&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* The \c Enable template parameter allows using &amp;lt;tt&amp;gt;boost::enable_if&amp;lt;/tt&amp;gt; to&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* specialize or partially specialize the functor per &amp;lt;tt&amp;gt;enable_if&amp;lt;/tt&amp;gt;'s&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* documentation section &amp;lt;a&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* href=&amp;quot;&lt;a href="http://www.boost.org/doc/libs/1_41_0/libs/utility/enable_if.html"&gt;http://www.boost.org/doc/libs/1_41_0/libs/utility/enable_if.html&lt;/a&gt;&amp;quot;&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* 3.1: Enabling template class specializations&amp;lt;/a&amp;gt;.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#87ceeb"&gt;*/&lt;/font&gt;&lt;br&gt;
&lt;font color="#bdb76b"&gt;&lt;b&gt;template&lt;/b&gt;&lt;/font&gt;&amp;lt;&lt;font color="#bdb76b"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Target, &lt;font color="#bdb76b"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Source, &lt;font color="#bdb76b"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Enable = &lt;font color="#bdb76b"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;gt;&lt;br&gt;
&lt;font color="#bdb76b"&gt;&lt;b&gt;struct&lt;/b&gt;&lt;/font&gt;&amp;nbsp;assign {&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#87ceeb"&gt;/*&lt;/font&gt;&lt;font color="#87ceeb"&gt;*&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Create an instance which assigns \c s when applied.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param s source of assignment operation occurring via&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;tt&amp;gt;operator()&amp;lt;/tt&amp;gt;.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#87ceeb"&gt;*/&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;assign(&lt;font color="#bdb76b"&gt;&lt;b&gt;const&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Source &amp;amp;s) : s_(s) {}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#87ceeb"&gt;/*&lt;/font&gt;&lt;font color="#87ceeb"&gt;*&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Assign the value provided at construction to \c t.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param t to be assigned.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#87ceeb"&gt;*/&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#bdb76b"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#f0e68c"&gt;&lt;b&gt;operator&lt;/b&gt;&lt;/font&gt;()(Target&amp;amp; t) &lt;font color="#bdb76b"&gt;&lt;b&gt;const&lt;/b&gt;&lt;/font&gt;&amp;nbsp;{ t = s_; }&lt;br&gt;
&lt;br&gt;
&lt;font color="#f0e68c"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#bdb76b"&gt;&lt;b&gt;const&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Source &amp;amp;s_; &lt;font color="#87ceeb"&gt;/*&lt;/font&gt;&lt;font color="#87ceeb"&gt;*&amp;lt; Source for assignment operations &lt;/font&gt;&lt;font color="#87ceeb"&gt;*/&lt;/font&gt;&lt;br&gt;
};&lt;br&gt;
&lt;/font&gt;
&lt;/div&gt;

&lt;p&gt;
The default implementation above makes the extra parameters seem overkill.  I'll give an example where it is useful later.
&lt;/p&gt;

&lt;p&gt;
Using the assignment functor and &lt;code&gt;for_each&lt;/code&gt;, here's our one-line &lt;code&gt;fill&lt;/code&gt;:
&lt;/p&gt;

&lt;div style="padding:.5em;background-color:#222222;color:#ffffff"&gt;
&lt;font face="monospace"&gt;
&lt;font color="#87ceeb"&gt;/*&lt;/font&gt;&lt;font color="#87ceeb"&gt;*&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* Fill MultiArray \c x with the value \c v.&amp;nbsp;&amp;nbsp;MultiArray &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;'s elements&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* must be assignable from \c v.&amp;nbsp;&amp;nbsp;The underlying assignment uses&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* ::assign to allow specializations of that functor to be found.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;*&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* @param x MultiArray to fill.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;* @param v Value with which to fill \c x.&lt;/font&gt;&lt;br&gt;
&lt;font color="#87ceeb"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#87ceeb"&gt;*/&lt;/font&gt;&lt;br&gt;
&lt;font color="#bdb76b"&gt;&lt;b&gt;template&lt;/b&gt;&lt;/font&gt;&amp;lt;&lt;font color="#bdb76b"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;MultiArray, &lt;font color="#bdb76b"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;V&amp;gt;&lt;br&gt;
&lt;font color="#bdb76b"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;fill(MultiArray &amp;amp;x, &lt;font color="#bdb76b"&gt;&lt;b&gt;const&lt;/b&gt;&lt;/font&gt;&amp;nbsp;V &amp;amp;v) {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for_each(x, assign&amp;lt;&lt;font color="#bdb76b"&gt;&lt;b&gt;typename&lt;/b&gt;&lt;/font&gt;&amp;nbsp;MultiArray::element,V&amp;gt;(v));&lt;br&gt;
}&lt;br&gt;
&lt;/font&gt;
&lt;/div&gt;

&lt;p&gt;
Finally, to show the spurious-looking assign functor template parameters are useful, here's an assign functor
for the complex-valued use case I mentioned above:
&lt;/p&gt;

&lt;div style="padding:.5em;background-color:#222222;color:#ffffff"&gt;
&lt;font face="monospace"&gt;
&lt;font color="#00ffff"&gt;&lt;b&gt;/*&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;* A specialization of the assign functor to properly handle the case where \c&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;* Target is a recognized complex type according to&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;* ::suzerain::complex::traits::is_complex.&amp;nbsp;&amp;nbsp;It uses&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;* ::suzerain::complex::assign_complex to perform the assignment, and therefore&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;* supports all types that \c assign_complex does.&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*/&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ff00"&gt;&lt;b&gt;template&lt;/b&gt;&lt;/font&gt;&amp;lt;&lt;font color="#00ff00"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Target, &lt;font color="#00ff00"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Source&amp;gt;&lt;br&gt;
&lt;font color="#00ff00"&gt;&lt;b&gt;struct&lt;/b&gt;&lt;/font&gt;&amp;nbsp;assign&amp;lt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Target,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Source,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;&lt;b&gt;typename&lt;/b&gt;&lt;/font&gt;&amp;nbsp;boost::enable_if&amp;lt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;::suzerain::&lt;font color="#00ff00"&gt;&lt;b&gt;complex&lt;/b&gt;&lt;/font&gt;::traits::is_complex&amp;lt;Target&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;gt;::type &amp;gt;&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ffff"&gt;&lt;b&gt;/*&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Create an instance which assigns \c s when applied.&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param s source of assignment operation occurring via&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;tt&amp;gt;operator()&amp;lt;/tt&amp;gt;.&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*/&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;assign(&lt;font color="#00ff00"&gt;&lt;b&gt;const&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Source &amp;amp;s) : s_(s) {};&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ffff"&gt;&lt;b&gt;/*&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Assign the value provided at construction to \c t.&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param t to be assigned.&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ffff"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*/&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;operator()(Target&amp;amp; t) &lt;font color="#00ff00"&gt;&lt;b&gt;const&lt;/b&gt;&lt;/font&gt;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;::suzerain::&lt;font color="#00ff00"&gt;&lt;b&gt;complex&lt;/b&gt;&lt;/font&gt;::assign_complex(t, s_);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&lt;font color="#ffff00"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;&lt;b&gt;const&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Source &amp;amp;s_; &lt;font color="#00ffff"&gt;&lt;b&gt;/*&lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*&amp;lt; Source for assignment operations &lt;/b&gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&lt;b&gt;*/&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
};&lt;br&gt;
&lt;/font&gt;
&lt;/div&gt;

&lt;p&gt;
That very last code snippet is missing details and won't compile.  Note that the &lt;code&gt;suzerain::complex::assign_complex&lt;/code&gt; invocation may itself be a template and it receives appropriate type information.  This turned out to be important when I wanted to fill a complex-valued &lt;code&gt;MultiArray&lt;/code&gt; with a real-valued scalar.  I needed two versions of &lt;code&gt;assign_complex&lt;/code&gt;: one that took as a Source a recognized complex type and one that took a scalar type.  &lt;code&gt;boost::enable_if&lt;/code&gt; and &lt;code&gt;boost::disable_if&lt;/code&gt; made it easy to provide an &lt;code&gt;assign_complex&lt;/code&gt; template that did the right thing.
&lt;/p&gt;

&lt;p&gt;
Given the right &lt;code&gt;#include&lt;/code&gt;s in the right places,
the other snippets should all compile.  Please let me know if they do not.
&lt;/p&gt;

&lt;p&gt;
This post topic came from a question
&lt;a href="http://groups.google.com/group/boost-list/browse_thread/thread/e16f32c4411dea08/d40f33daaed0ab8d"&gt;I asked on boost-users
    a couple of days back&lt;/a&gt;.  Hopefully someone else finds this post and can use this &lt;code&gt;fill&lt;/code&gt; routine.
Thank you to Ronald Garcia for his response and for maintaining Boost.MultiArray.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-6182194448273352611?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/6182194448273352611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=6182194448273352611' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/6182194448273352611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/6182194448273352611'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2010/01/providing-fill-and-foreach-algorithms.html' title='Providing fill and for_each algorithms for Boost.MultiArray'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-5891568157575383716</id><published>2009-12-31T19:40:00.001Z</published><updated>2009-12-31T19:40:44.362Z</updated><title type='text'>Small gotcha when combining Boost.Array, Assign, and Test</title><content type='html'>&lt;p&gt;
When attempting to use &lt;a href="http://www.boost.org/doc/libs/1_41_0/libs/assign/index.html"&gt;Boost.Assign&lt;/a&gt;'s
&lt;tt&gt;list_of&lt;/tt&gt; in expressions like &lt;tt&gt;BOOST_CHECK_EQUAL(somearray, list_of(x)(y)(z))&lt;/tt&gt;,
where &lt;tt&gt;somearray&lt;/tt&gt; has a type like &lt;tt&gt;&lt;a href="http://www.boost.org/doc/libs/release/libs/array/"&gt;boost::array&amp;lt;T,N&amp;gt;&lt;/a&gt;&lt;/tt&gt;,
I kept running into funky errors that there was no &lt;tt&gt;operator&amp;lt;&amp;lt;&lt;/tt&gt; defined with the appropriate types.  So I'd define one at global scope, but the errors kept arising from the depths of &lt;tt&gt;BOOST_CHECK_EQUAL&lt;/tt&gt;.  It turns out that I needed to define such an &lt;tt&gt;operator&amp;lt;&amp;lt;&lt;/tt&gt; in the &lt;tt&gt;boost&lt;/tt&gt; namespace:
&lt;/p&gt;

&lt;div&gt;&lt;pre&gt;
namespace boost {

template&lt; typename charT, typename traits, typename T, ::std::size_t N &gt;
::std::basic_ostream&lt;charT,traits&gt;&amp; operator&lt;&lt;(
        ::std::basic_ostream&lt;charT,traits&gt; &amp;os, const ::boost::array&lt;T,N&gt; &amp;array)
{
    os &lt;&lt; '[' &lt;&lt; N &lt;&lt; "]{ ";
    ::std::copy(array.begin(),
                array.end(),
                ::std::ostream_iterator&lt;T,charT,traits&gt;(os, " "));
    os &lt;&lt; '}';
    return os;
}

}
&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-5891568157575383716?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/5891568157575383716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=5891568157575383716' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5891568157575383716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5891568157575383716'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/12/small-gotcha-when-combining-boostarray.html' title='Small gotcha when combining Boost.Array, Assign, and Test'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-2130422420565502748</id><published>2009-12-24T06:45:00.000Z</published><updated>2009-12-24T06:45:42.034Z</updated><title type='text'>Lit search</title><content type='html'>&lt;p&gt;I finally got around to doing some lit search towards both my dissertation proposal and a poster that I need to present in February.  &lt;a href="http://www.citeulike.org/"&gt;CiteULike&lt;/a&gt;'s been a nice way to organize the information, especially combined with &lt;a href="http://www.andrewberman.org/projects/sync/"&gt;SyncUThink&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;The following is a snapshot of the author's that I'll be wading through:&lt;/p&gt;

&lt;DIV style="border: dashed thin black; margin: 1em; padding: 1em; line-height: 30px;"&gt;

            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/%22Orl%22u"&gt;Orlu&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Abe"&gt;Abe&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Abedin"&gt;Abedin&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Adams"&gt;Adams&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Adrian"&gt;Adrian&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Adumitroaie"&gt;Adumitroaie&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Akbary"&gt;Akbary&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Alazard"&gt;Alazard&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Aldama"&gt;Aldama&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Alfonsi"&gt;Alfonsi&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Alfredsson"&gt;Alfredsson&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Alving"&gt;Alving&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Ammer"&gt;Ammer&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Andersson"&gt;Andersson&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Andrieu"&gt;Andrieu&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Antonia"&gt;Antonia&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Arnal"&gt;Arnal&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Arnette"&gt;Arnette&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Ashrafian"&gt;Ashrafian&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Ashworth"&gt;Ashworth&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Baer"&gt;Baer&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Bailly"&gt;Bailly&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Bake"&gt;Bake&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Bakken"&gt;Bakken&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Balakrishnan"&gt;Balakrishnan&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Basili"&gt;Basili&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Bazilevs"&gt;Bazilevs&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Beckie"&gt;Beckie&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Beddini"&gt;Beddini&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Behnia"&gt;Behnia&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Benay"&gt;Benay&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Berggren"&gt;Berggren&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Berland"&gt;Berland&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Bertolotti"&gt;Bertolotti&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Berzins"&gt;Berzins&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Betyaev"&gt;Betyaev&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Bhaganagar"&gt;Bhaganagar&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Bhattacharya"&gt;Bhattacharya&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Biagioni"&gt;Biagioni&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Bientinesi"&gt;Bientinesi&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Bijl"&gt;Bijl&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Biringen"&gt;Biringen&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Blaisdell"&gt;Blaisdell&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Blottner"&gt;Blottner&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Bochev"&gt;Bochev&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Boehm"&gt;Boehm&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Bogey"&gt;Bogey&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Boninger"&gt;Boninger&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Bonnet"&gt;Bonnet&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Borodai"&gt;Borodai&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Bosques"&gt;Bosques&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 22px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Botella"&gt;Botella&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Bottaro"&gt;Bottaro&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Bourassa"&gt;Bourassa&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Bowersox"&gt;Bowersox&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Boyce"&gt;Boyce&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Boyd"&gt;Boyd&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Bradshaw"&gt;Bradshaw&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Brandt"&gt;Brandt&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 27px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Brasseur"&gt;Brasseur&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Brassuer"&gt;Brassuer&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Brethouwer"&gt;Brethouwer&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Browne"&gt;Browne&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Brun"&gt;Brun&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Buckley"&gt;Buckley&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Buter"&gt;Buter&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Cabrit"&gt;Cabrit&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Cal"&gt;Cal&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Calo"&gt;Calo&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Cambon"&gt;Cambon&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Candler"&gt;Candler&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Cartwright"&gt;Cartwright&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 22px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Castillo"&gt;Castillo&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Ceccio"&gt;Ceccio&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Ch"&gt;Ch&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Chae"&gt;Chae&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Chan"&gt;Chan&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Chanetz"&gt;Chanetz&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Chang"&gt;Chang&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 25px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Chauhan"&gt;Chauhan&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Cheban"&gt;Cheban&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Chen"&gt;Chen&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Cheskidov"&gt;Cheskidov&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Childs"&gt;Childs&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Chiyaka"&gt;Chiyaka&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Choi"&gt;Choi&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Chong"&gt;Chong&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Chow"&gt;Chow&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Christon"&gt;Christon&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Christophorou"&gt;Christophorou&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Chung"&gt;Chung&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Clemens"&gt;Clemens&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Coleman"&gt;Coleman&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Collis"&gt;Collis&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Comte"&gt;Comte&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Constantin"&gt;Constantin&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Constantinescu"&gt;Constantinescu&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Cooper"&gt;Cooper&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Corbett"&gt;Corbett&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Cortissoz"&gt;Cortissoz&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Creighton"&gt;Creighton&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Cremonesi"&gt;Cremonesi&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Crouch"&gt;Crouch&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Cutbirth"&gt;Cutbirth&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Da+Prato"&gt;Da Prato&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 28px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Dai"&gt;Dai&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Das"&gt;Das&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Davidson"&gt;Davidson&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/De+Chant"&gt;De Chant&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/De+Graaff"&gt;De Graaff&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Debussche"&gt;Debussche&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Delery"&gt;Delery&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Demko"&gt;Demko&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Dexun"&gt;Dexun&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Dilipkumar"&gt;Dilipkumar&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Dmitruk"&gt;Dmitruk&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Dolling"&gt;Dolling&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Donatelli"&gt;Donatelli&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Dong"&gt;Dong&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Donovan"&gt;Donovan&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Donzis"&gt;Donzis&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Doom"&gt;Doom&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Dotter"&gt;Dotter&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Doucet"&gt;Doucet&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Dowling"&gt;Dowling&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Duan"&gt;Duan&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Dubos"&gt;Dubos&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Dufresne"&gt;Dufresne&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Dumas"&gt;Dumas&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Durbin"&gt;Durbin&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Dussauge"&gt;Dussauge&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Eaton"&gt;Eaton&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Ecer"&gt;Ecer&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Egolf"&gt;Egolf&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Elghobashi"&gt;Elghobashi&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Elliott"&gt;Elliott&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Elsinga"&gt;Elsinga&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Emerson"&gt;Emerson&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Enrique"&gt;Enrique&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Erturk"&gt;Erturk&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Eswaran"&gt;Eswaran&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Ewing"&gt;Ewing&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Fabignon"&gt;Fabignon&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Favre"&gt;Favre&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Fedorchenko"&gt;Fedorchenko&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Feij%c3%b3o"&gt;Feijóo&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Feireisl"&gt;Feireisl&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Fernando"&gt;Fernando&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Fernholz"&gt;Fernholz&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Ferrante"&gt;Ferrante&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Ferziger"&gt;Ferziger&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Fiala"&gt;Fiala&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Fife"&gt;Fife&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Finleyt"&gt;Finleyt&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Fisher"&gt;Fisher&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Fitzgerald"&gt;Fitzgerald&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Flandoli"&gt;Flandoli&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Floryan"&gt;Floryan&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Fox"&gt;Fox&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 22px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Foysi"&gt;Foysi&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Fransson"&gt;Fransson&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Friedlander"&gt;Friedlander&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 28px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Friedrich"&gt;Friedrich&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Fu"&gt;Fu&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Fueyo"&gt;Fueyo&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Fujii"&gt;Fujii&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Gad+El+Hak"&gt;Gad El Hak&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Gallagher"&gt;Gallagher&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Ganapathisubramani"&gt;Ganapathisubramani&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Garcia"&gt;Garcia&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Garg"&gt;Garg&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Garnier"&gt;Garnier&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Gatski"&gt;Gatski&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/George"&gt;George&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Gerolymos"&gt;Gerolymos&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Geurts"&gt;Geurts&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Ghosal"&gt;Ghosal&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Ghuloum"&gt;Ghuloum&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Glimm"&gt;Glimm&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Gokcol"&gt;Gokcol&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Goldstein"&gt;Goldstein&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Goyne"&gt;Goyne&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Grant"&gt;Grant&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Grasso"&gt;Grasso&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Gravemeier"&gt;Gravemeier&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Greenside"&gt;Greenside&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Grosse"&gt;Grosse&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Guarini"&gt;Guarini&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Gubinelli"&gt;Gubinelli&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Guermond"&gt;Guermond&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Gullbrand"&gt;Gullbrand&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Guocan"&gt;Guocan&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Gwilliam"&gt;Gwilliam&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Haak"&gt;Haak&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Haberkorn"&gt;Haberkorn&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Hadjadj"&gt;Hadjadj&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Hale"&gt;Hale&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Hamba"&gt;Hamba&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Haminh"&gt;Haminh&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Hamman"&gt;Hamman&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Haselbacher"&gt;Haselbacher&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Hattori"&gt;Hattori&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Hauke"&gt;Hauke&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Heinrichs"&gt;Heinrichs&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 25px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Heinz"&gt;Heinz&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Helton"&gt;Helton&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Hemsch"&gt;Hemsch&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Henkes"&gt;Henkes&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 25px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Henningson"&gt;Henningson&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Hilburger"&gt;Hilburger&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Hillier"&gt;Hillier&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Hochstein"&gt;Hochstein&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Holloway"&gt;Holloway&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Honein"&gt;Honein&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Hou"&gt;Hou&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Hoyas"&gt;Hoyas&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Huang"&gt;Huang&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Hudea"&gt;Hudea&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 22px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Hughes"&gt;Hughes&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Hwang"&gt;Hwang&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Imad"&gt;Imad&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Ishihara"&gt;Ishihara&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Ivanov"&gt;Ivanov&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Iwamoto"&gt;Iwamoto&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Jackson"&gt;Jackson&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Jacobs"&gt;Jacobs&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Jayaram"&gt;Jayaram&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Jim%7b%c3%a9%7dnez"&gt;Jiménez&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Jim%c3%a9nez"&gt;Jiménez&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Johansson"&gt;Johansson&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Johnson"&gt;Johnson&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Jordan"&gt;Jordan&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Kachanov"&gt;Kachanov&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Kafoussias"&gt;Kafoussias&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Kaneda"&gt;Kaneda&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Kasagi"&gt;Kasagi&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Kattelans"&gt;Kattelans&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Katz"&gt;Katz&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Kawaguchi"&gt;Kawaguchi&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Kawai"&gt;Kawai&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Kawamura"&gt;Kawamura&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Kedia"&gt;Kedia&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Kenny"&gt;Kenny&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Khujadze"&gt;Khujadze&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Kiehn"&gt;Kiehn&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 25px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Kim"&gt;Kim&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Kimmel"&gt;Kimmel&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Kirby"&gt;Kirby&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Klebanoff"&gt;Klebanoff&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Kleiser"&gt;Kleiser&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Klewicki"&gt;Klewicki&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Kline"&gt;Kline&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Knight"&gt;Knight&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Kopriva"&gt;Kopriva&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Korimilli"&gt;Korimilli&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Kravchenko"&gt;Kravchenko&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Krimmelbein"&gt;Krimmelbein&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Krishnamurty"&gt;Krishnamurty&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Krishnan"&gt;Krishnan&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Kritsuk"&gt;Kritsuk&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Krogstad"&gt;Krogstad&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Kuerten"&gt;Kuerten&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Kunstmann"&gt;Kunstmann&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Kwok"&gt;Kwok&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Lan"&gt;Lan&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Langford"&gt;Langford&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Lechner"&gt;Lechner&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Lee"&gt;Lee&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Lehoucq"&gt;Lehoucq&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Lele"&gt;Lele&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Leonard"&gt;Leonard&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Leonardo"&gt;Leonardo&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Levin"&gt;Levin&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 27px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Li"&gt;Li&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Liepmann"&gt;Liepmann&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Lin"&gt;Lin&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Linan"&gt;Linan&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 27px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Liu"&gt;Liu&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Lo"&gt;Lo&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Luchini"&gt;Luchini&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Luckring"&gt;Luckring&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Luker"&gt;Luker&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Lumley"&gt;Lumley&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Lumsdaine"&gt;Lumsdaine&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Lund"&gt;Lund&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Luo"&gt;Luo&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Lyons"&gt;Lyons&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Ma"&gt;Ma&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Maeder"&gt;Maeder&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Maekawa"&gt;Maekawa&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Maghami"&gt;Maghami&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 27px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Mahesh"&gt;Mahesh&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Malaya"&gt;Malaya&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Malik"&gt;Malik&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Mallinson"&gt;Mallinson&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Manca"&gt;Manca&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Manhart"&gt;Manhart&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Mansour"&gt;Mansour&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 27px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Martin"&gt;Martin&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Mashayek"&gt;Mashayek&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Maslowe"&gt;Maslowe&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Matsubara"&gt;Matsubara&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Matsuo"&gt;Matsuo&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Matthaeus"&gt;Matthaeus&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Mattingly"&gt;Mattingly&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Mazzei"&gt;Mazzei&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/McComb"&gt;McComb&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Mellet"&gt;Mellet&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Meneguzzi"&gt;Meneguzzi&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Metzger"&gt;Metzger&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Miao"&gt;Miao&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 30px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Miller"&gt;Miller&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Mizuno"&gt;Mizuno&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 33px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Moin"&gt;Moin&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 25px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Monkewitz"&gt;Monkewitz&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Montgomery-Smith"&gt;Montgomery-Smith&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 22px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Morinishi"&gt;Morinishi&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 36px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Moser"&gt;Moser&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Mossi"&gt;Mossi&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Moussaoui"&gt;Moussaoui&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Mukund"&gt;Mukund&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Muller"&gt;Muller&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Munz"&gt;Munz&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Murthy"&gt;Murthy&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/M%c3%bcller"&gt;Müller&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Na"&gt;Na&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 28px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Nagib"&gt;Nagib&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Najjar"&gt;Najjar&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Najm"&gt;Najm&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Nakabayashi"&gt;Nakabayashi&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Narasimha"&gt;Narasimha&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Neemann"&gt;Neemann&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Newhall"&gt;Newhall&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Nickels"&gt;Nickels&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Nicoud"&gt;Nicoud&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Norman"&gt;Norman&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Nosetips"&gt;Nosetips&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Oberkampf"&gt;Oberkampf&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Oberlack"&gt;Oberlack&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Oden"&gt;Oden&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Orszag"&gt;Orszag&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Orti"&gt;Orti&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Osterlund"&gt;Osterlund&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Padoan"&gt;Padoan&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Padula"&gt;Padula&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Paicu"&gt;Paicu&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Pancaldo"&gt;Pancaldo&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Park"&gt;Park&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Parkman"&gt;Parkman&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Parneix"&gt;Parneix&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Passoni"&gt;Passoni&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Patel"&gt;Patel&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Paull"&gt;Paull&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Pavlovi%26%23x107%3b"&gt;Pavlovi&amp;amp;#x107;&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Pego"&gt;Pego&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Pekurovsky"&gt;Pekurovsky&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Periaux"&gt;Periaux&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Perlin"&gt;Perlin&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Peterson"&gt;Peterson&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Petrovan"&gt;Petrovan&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Piomelli"&gt;Piomelli&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Piro"&gt;Piro&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Pirozzoli"&gt;Pirozzoli&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Plesniak"&gt;Plesniak&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Pletcher"&gt;Pletcher&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Poggie"&gt;Poggie&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Politano"&gt;Politano&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Pope"&gt;Pope&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Pouquet"&gt;Pouquet&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Prabhu"&gt;Prabhu&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Prudhomme"&gt;Prudhomme&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Psihoyios"&gt;Psihoyios&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Purtell"&gt;Purtell&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Quadrio"&gt;Quadrio&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Quincy"&gt;Quincy&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/R%26%23xf6%3bckner"&gt;R&amp;amp;#xf6;ckner&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Radespiel"&gt;Radespiel&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Reed"&gt;Reed&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Reichert"&gt;Reichert&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Reisenthel"&gt;Reisenthel&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Rempfer"&gt;Rempfer&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Reshotko"&gt;Reshotko&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Reynolds"&gt;Reynolds&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Ribert"&gt;Ribert&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Ringuette"&gt;Ringuette&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Ristorcelli"&gt;Ristorcelli&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Rizzetta"&gt;Rizzetta&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Roach"&gt;Roach&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Robinson"&gt;Robinson&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Rodi"&gt;Rodi&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Rogallo"&gt;Rogallo&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Rogers"&gt;Rogers&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Romito"&gt;Romito&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Roshko"&gt;Roshko&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Roy"&gt;Roy&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Rubinstein"&gt;Rubinstein&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Ruzmaikina"&gt;Ruzmaikina&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Sadowski"&gt;Sadowski&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Sagaut"&gt;Sagaut&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Samimy"&gt;Samimy&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Sandberg"&gt;Sandberg&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Sandham"&gt;Sandham&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Sarkar"&gt;Sarkar&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Satofuka"&gt;Satofuka&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Scarano"&gt;Scarano&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Schiffner"&gt;Schiffner&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Schilling"&gt;Schilling&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Schlatter"&gt;Schlatter&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Schmitt"&gt;Schmitt&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Schneider"&gt;Schneider&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Schochet"&gt;Schochet&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Schwarz"&gt;Schwarz&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Scientist"&gt;Scientist&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Scovazzi"&gt;Scovazzi&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Seckel"&gt;Seckel&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Sesterhenn"&gt;Sesterhenn&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Settles"&gt;Settles&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Shadid"&gt;Shadid&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Shariff"&gt;Shariff&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Sharp"&gt;Sharp&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Sheikh"&gt;Sheikh&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Shen"&gt;Shen&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Shewchuk"&gt;Shewchuk&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Shikazono"&gt;Shikazono&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Shvydkoy"&gt;Shvydkoy&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Shyy"&gt;Shyy&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Sidi"&gt;Sidi&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Simens"&gt;Simens&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Simos"&gt;Simos&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Sinha"&gt;Sinha&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Skote"&gt;Skote&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Slepoy"&gt;Slepoy&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Smith"&gt;Smith&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Smith%3f"&gt;Smith?&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 33px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Smits"&gt;Smits&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/So"&gt;So&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Soliman"&gt;Soliman&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Soltani"&gt;Soltani&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Sommer"&gt;Sommer&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 28px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Spalart"&gt;Spalart&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 22px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Spina"&gt;Spina&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Spiteri"&gt;Spiteri&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Squires"&gt;Squires&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Stalker"&gt;Stalker&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Steinkamp"&gt;Steinkamp&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Stolz"&gt;Stolz&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Stoynov"&gt;Stoynov&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Stroud"&gt;Stroud&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Sumitani"&gt;Sumitani&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Suzuki"&gt;Suzuki&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Svehla"&gt;Svehla&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Sverak"&gt;Sverak&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Swartz"&gt;Swartz&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/S%c3%a9n%c3%a9chal"&gt;Sénéchal&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 22px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Tamano"&gt;Tamano&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Tamura"&gt;Tamura&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Taulbee"&gt;Taulbee&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Tavoularis"&gt;Tavoularis&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Taylor"&gt;Taylor&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Tchuenche"&gt;Tchuenche&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Teitel"&gt;Teitel&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Tenaud"&gt;Tenaud&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Terracol"&gt;Terracol&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Thangada"&gt;Thangada&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Thomas"&gt;Thomas&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Tomkins"&gt;Tomkins&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Torres-Nieves"&gt;Torres-Nieves&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Trefethen"&gt;Trefethen&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Trouv%c3%a9"&gt;Trouvé&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Trucano"&gt;Trucano&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Tsuji"&gt;Tsuji&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Tu"&gt;Tu&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Tyhtila"&gt;Tyhtila&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 30px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Ulerich"&gt;Ulerich&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Unalmis"&gt;Unalmis&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Urbin"&gt;Urbin&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Vahala"&gt;Vahala&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Vallet"&gt;Vallet&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Van+Zee"&gt;Van Zee&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Vandromme"&gt;Vandromme&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Vasseur"&gt;Vasseur&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Vedula"&gt;Vedula&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Vegesna"&gt;Vegesna&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Venugopal"&gt;Venugopal&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Visbal"&gt;Visbal&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Viswanath"&gt;Viswanath&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Vreman"&gt;Vreman&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Wagner"&gt;Wagner&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Waleffe"&gt;Waleffe&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Wallace"&gt;Wallace&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 25px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Wang"&gt;Wang&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Watmuff"&gt;Watmuff&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Waymire"&gt;Waymire&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Webster"&gt;Webster&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Wendroff"&gt;Wendroff&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Wesseling"&gt;Wesseling&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Williams"&gt;Williams&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Winkel"&gt;Winkel&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Winter"&gt;Winter&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Wolf"&gt;Wolf&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Wray"&gt;Wray&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Wu"&gt;Wu&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Xenos"&gt;Xenos&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Xinliang"&gt;Xinliang&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Xu"&gt;Xu&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Ya"&gt;Ya&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Yaglom"&gt;Yaglom&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Yakhot"&gt;Yakhot&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Yan"&gt;Yan&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Yanwen"&gt;Yanwen&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Yao"&gt;Yao&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Yeoh"&gt;Yeoh&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Yeung"&gt;Yeung&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Zabaras"&gt;Zabaras&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Zampaglione"&gt;Zampaglione&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Zandonade"&gt;Zandonade&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Zang"&gt;Zang&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Zeman"&gt;Zeman&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Zeytounian"&gt;Zeytounian&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 25px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Zhang"&gt;Zhang&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Zhong"&gt;Zhong&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Zhongmin"&gt;Zhongmin&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 18px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Zhou"&gt;Zhou&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Zimmermann"&gt;Zimmermann&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Zolver"&gt;Zolver&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/Zumbrun"&gt;Zumbrun&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/de+Freitas"&gt;de Freitas&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/de+Lange"&gt;de Lange&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/lio+Vargas"&gt;lio Vargas&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/van+Oudheusden"&gt;van Oudheusden&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/van+de+Geijn"&gt;van de Geijn&lt;/A&gt;&amp;nbsp;&amp;nbsp;


            &lt;A class="author" style="font-size: 12px; text-decoration: none;" href="http://www.citeulike.org/user/RhysU/author/van+der+Heul"&gt;van der Heul&lt;/A&gt;&amp;nbsp;&amp;nbsp;

&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-2130422420565502748?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/2130422420565502748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=2130422420565502748' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2130422420565502748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2130422420565502748'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/12/lit-search.html' title='Lit search'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-118217579844936863</id><published>2009-12-22T23:50:00.002Z</published><updated>2009-12-22T23:50:34.601Z</updated><title type='text'>Undergraduate research...</title><content type='html'>...the gift to yourself that just keeps on &lt;a href="http://www3.interscience.wiley.com/journal/122260856/abstract"&gt;giving&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-118217579844936863?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/118217579844936863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=118217579844936863' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/118217579844936863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/118217579844936863'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/12/undergraduate-research.html' title='Undergraduate research...'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-4318130984171231914</id><published>2009-12-17T02:36:00.001Z</published><updated>2009-12-17T02:37:08.299Z</updated><title type='text'>Blue Diamond Mine</title><content type='html'>Weird linkage stemming from the shuffle tonight.  "Blue Diamond Mine" by the Texas Rubies sounds insanely like "Where Did You Sleep Last Night?" by Nirvana.  Including all the lyrical structure.  This isn't too crazy considering the former's genre and the &lt;a href="http://en.wikipedia.org/wiki/In_the_Pines"&gt;known folk origin of the later&lt;/a&gt;, but it is odd when from nowhere a song you've never heard before strikes you as this uncannily familiar.

I leave finding an MP3 of "Blue Diamond Mine" as an exercise for the consumer.  It appears on &lt;a href="http://www.bloodshotrecords.com/album/down-promised-land-5-years-bloodshot-records"&gt;Down to the Promised Land&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-4318130984171231914?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/4318130984171231914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=4318130984171231914' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4318130984171231914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4318130984171231914'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/12/blue-diamond-mines.html' title='Blue Diamond Mine'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-8796253147241699921</id><published>2009-11-01T05:14:00.006Z</published><updated>2010-04-24T14:24:03.572Z</updated><title type='text'>Getting 32-bit libstdc++.so.5 in {Karmic Koala,Lucid Lynx} on a 64-bit system</title><content type='html'>The Intel compilers require a 32-bit version of libstdc++.so.5 to function. Getting a copy of that build of that library requires a couple of steps in the latest 64-bit Ubuntu {9.10,10.04}. These have been alluded to in other places. &amp;nbsp;Just in case someone needs the details, here they are:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Download the i386 libstdc++ package for Jaunty:&amp;nbsp;&lt;a href="http://packages.ubuntu.com/jaunty/i386/libstdc++5/download"&gt;http://packages.ubuntu.com/jaunty/i386/libstdc++5/download&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Unpack the .deb archive using &lt;tt&gt;ar vx ~/Desktop/libstdc++5_3.3.6-17ubuntu1_i386.deb&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;Unpack the resulting data.tar.gz using &lt;tt&gt;tar xzvf data.tar.gz&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;Confirm that you got the 32-bit version using &lt;tt&gt;file usr/lib/libstdc++.so.5.0.7&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;Install the library into /usr/lib32 using &lt;tt&gt;sudo install usr/lib/libstdc++.so.5.0.7 /usr/lib32&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;Change to /usr/lib32 using &lt;tt&gt;cd /usr/lib32&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;Create a symlink to finish the task via &lt;tt&gt;sudo ln -s libstdc++.so.5.0.7 libstdc++.so.5&lt;/tt&gt;&lt;/li&gt;
&lt;/tt&gt;&lt;/ol&gt;
Many thanks to everyone who provided the source material:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://software.intel.com/en-us/forums/intel-fortran-compiler-for-linux-and-mac-os-x/topic/69247/"&gt;http://software.intel.com/en-us/forums/intel-fortran-compiler-for-linux-and-mac-os-x/topic/69247/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://packages.ubuntu.com/jaunty/libstdc++5"&gt;http://packages.ubuntu.com/jaunty/libstdc++5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.g-loaded.eu/2008/01/28/how-to-extract-rpm-or-deb-packages/"&gt;http://www.g-loaded.eu/2008/01/28/how-to-extract-rpm-or-deb-packages/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;p&gt;
&lt;b&gt;Updated 24 April 2010:&lt;/b&gt; Appears that this procedure also works on the Lucid Lynx release candidate.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-8796253147241699921?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/8796253147241699921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=8796253147241699921' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8796253147241699921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8796253147241699921'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/11/getting-32-bit-libstdcso5-in-karmic.html' title='Getting 32-bit libstdc++.so.5 in {Karmic Koala,Lucid Lynx} on a 64-bit system'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-1583908499247546615</id><published>2009-10-28T19:19:00.000Z</published><updated>2009-10-28T19:19:43.061Z</updated><title type='text'>Sugar Plum Plug</title><content type='html'>&lt;p&gt;
&lt;a href="http://www.balletaustin.org/about/dancers.php#thompson"&gt;Milady&lt;/a&gt; got the &lt;a href="http://www.balletaustin.org/atb/nutcracker.php#cast"&gt;Nutcracker casting&lt;/a&gt; she's talked about wanting for several years.  Go hit up &lt;a href="http://www.balletaustin.org/atb/nutcracker.php"&gt;the show&lt;/a&gt; on one of December 6, 12, 18, 19 @ 7:30pm, 21, or 23 to see her grinning from ear to ear.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-1583908499247546615?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/1583908499247546615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=1583908499247546615' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1583908499247546615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1583908499247546615'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/10/sugar-plum-plug.html' title='Sugar Plum Plug'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-1694565828932641324</id><published>2009-10-26T22:57:00.000Z</published><updated>2009-10-26T22:57:12.473Z</updated><title type='text'>BOOST_UBLAS_SHALLOW_ARRAY_ADAPTOR</title><content type='html'>&lt;p&gt;
&lt;a href="http://www.boost.org/doc/libs/release/libs/numeric"&gt;uBLAS&lt;/a&gt; has a &lt;tt&gt;shallow_array_adaptor&lt;/tt&gt; that allows you to wrap an existing block of data with
a uBLAS vector.  This is useful if you want to wrap raw data provided by someone else.
Exposing this functionality is questionable in terms of encapsulation and ownership, and
so it isn't available by default.  Consequently the documentation is pretty scarce.  Here's an example of it's use in the context of a &lt;a href="http://www.boost.org/doc/libs/release/libs/test/index.html"&gt;Boost.Test&lt;/a&gt; test case.
&lt;/p&gt;

&lt;div style="background-color:#000000;color:#a9a9a9;"&gt;
&lt;font face="monospace"&gt;
&lt;font color="#00ff00"&gt;#define BOOST_TEST_MODULE $Id: test_complex.cc &lt;/font&gt;&lt;font color="#ffffff"&gt;1817&lt;/font&gt;&lt;font color="#00ff00"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#ffffff"&gt;2009&lt;/font&gt;&lt;font color="#00ff00"&gt;-&lt;/font&gt;&lt;font color="#00ff00"&gt;0&lt;/font&gt;&lt;font color="#ffffff"&gt;3&lt;/font&gt;&lt;font color="#00ff00"&gt;-&lt;/font&gt;&lt;font color="#ffffff"&gt;18&lt;/font&gt;&lt;font color="#00ff00"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#ffffff"&gt;19&lt;/font&gt;&lt;font color="#00ff00"&gt;:&lt;/font&gt;&lt;font color="#00ff00"&gt;0&lt;/font&gt;&lt;font color="#ffffff"&gt;1&lt;/font&gt;&lt;font color="#00ff00"&gt;:25Z rhys $&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;font color="#b46918"&gt;// Before ublas #include, enable boost::numeric::ublas::shallow_array_adaptor&amp;lt;T&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ff00"&gt;#define BOOST_UBLAS_SHALLOW_ARRAY_ADAPTOR &lt;/font&gt;&lt;font color="#ffffff"&gt;1&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;font color="#00ff00"&gt;#include &lt;/font&gt;&lt;font color="#ffff00"&gt;&amp;lt;algorithm&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ff00"&gt;#include &lt;/font&gt;&lt;font color="#ffff00"&gt;&amp;lt;boost/numeric/ublas/vector.hpp&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ff00"&gt;#include &lt;/font&gt;&lt;font color="#ffff00"&gt;&amp;lt;boost/test/included/unit_test.hpp&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ff00"&gt;#include &lt;/font&gt;&lt;font color="#ffff00"&gt;&amp;lt;boost/foreach.hpp&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ff00"&gt;#include &lt;/font&gt;&lt;font color="#ffff00"&gt;&amp;lt;complex&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;font color="#00ff00"&gt;namespace&lt;/font&gt;&amp;nbsp;ublas = boost::numeric::ublas;&lt;br&gt;
&lt;br&gt;
&lt;font color="#00ff00"&gt;typedef&lt;/font&gt;&amp;nbsp;std::&lt;font color="#00ff00"&gt;complex&lt;/font&gt;&amp;lt;&lt;font color="#00ff00"&gt;double&lt;/font&gt;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;complex&lt;/font&gt;;&lt;br&gt;
&lt;font color="#00ff00"&gt;typedef&lt;/font&gt;&amp;nbsp;ublas::shallow_array_adaptor&amp;lt;&lt;font color="#00ff00"&gt;double&lt;/font&gt;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shallow_adaptor_double;&lt;br&gt;
&lt;font color="#00ff00"&gt;typedef&lt;/font&gt;&amp;nbsp;ublas::vector&amp;lt;&lt;font color="#00ff00"&gt;double&lt;/font&gt;, shallow_adaptor_double&amp;gt;&amp;nbsp;&amp;nbsp; shallow_vector_double;&lt;br&gt;
&lt;font color="#00ff00"&gt;typedef&lt;/font&gt;&amp;nbsp;ublas::shallow_array_adaptor&amp;lt;&lt;font color="#00ff00"&gt;complex&lt;/font&gt;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; shallow_adaptor_complex;&lt;br&gt;
&lt;font color="#00ff00"&gt;typedef&lt;/font&gt;&amp;nbsp;ublas::vector&amp;lt;&lt;font color="#00ff00"&gt;complex&lt;/font&gt;, shallow_adaptor_complex&amp;gt; shallow_vector_complex;&lt;br&gt;
&lt;br&gt;
&lt;font color="#b46918"&gt;// Ensure we can use std::complex&amp;lt;double&amp;gt; as two consecutive doubles&lt;/font&gt;&lt;br&gt;
BOOST_AUTO_TEST_CASE( shared_c_array )&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#b46918"&gt;// Assumption must hold true for any of this scheme to work&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;BOOST_REQUIRE_EQUAL( &lt;font color="#ffffff"&gt;sizeof&lt;/font&gt;(&lt;font color="#00ff00"&gt;complex&lt;/font&gt;), &lt;font color="#ffffff"&gt;2&lt;/font&gt;*&lt;font color="#ffffff"&gt;sizeof&lt;/font&gt;(&lt;font color="#00ff00"&gt;double&lt;/font&gt;) );&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;const&lt;/font&gt;&amp;nbsp;std::&lt;font color="#00ff00"&gt;size_t&lt;/font&gt;&amp;nbsp;N = &lt;font color="#ffffff"&gt;6&lt;/font&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;double&lt;/font&gt;&amp;nbsp;carray_double[N] = { &lt;font color="#ffffff"&gt;0.0&lt;/font&gt;, &lt;font color="#ffffff"&gt;1.0&lt;/font&gt;, &lt;font color="#ffffff"&gt;2.0&lt;/font&gt;, &lt;font color="#ffffff"&gt;3.0&lt;/font&gt;, &lt;font color="#ffffff"&gt;4.0&lt;/font&gt;, &lt;font color="#ffffff"&gt;5.0&lt;/font&gt;&amp;nbsp;};&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;complex&lt;/font&gt;&amp;nbsp;*carray_complex = &lt;font color="#ffffff"&gt;reinterpret_cast&lt;/font&gt;&amp;lt;&lt;font color="#00ff00"&gt;complex&lt;/font&gt;&amp;nbsp;*&amp;gt;(carray_double);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#ffffff"&gt;for&lt;/font&gt;&amp;nbsp;(std::&lt;font color="#00ff00"&gt;size_t&lt;/font&gt;&amp;nbsp;i = &lt;font color="#ffffff"&gt;0&lt;/font&gt;; i &amp;lt; N/&lt;font color="#ffffff"&gt;2&lt;/font&gt;; ++i)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BOOST_CHECK_EQUAL(carray_double[&lt;font color="#ffffff"&gt;2&lt;/font&gt;*i],&amp;nbsp;&amp;nbsp; carray_complex[i].real());&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BOOST_CHECK_EQUAL(carray_double[&lt;font color="#ffffff"&gt;2&lt;/font&gt;*i+&lt;font color="#ffffff"&gt;1&lt;/font&gt;], carray_complex[i].imag());&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#ffffff"&gt;for&lt;/font&gt;&amp;nbsp;(std::&lt;font color="#00ff00"&gt;size_t&lt;/font&gt;&amp;nbsp;i = &lt;font color="#ffffff"&gt;0&lt;/font&gt;; i &amp;lt; N/&lt;font color="#ffffff"&gt;2&lt;/font&gt;; ++i)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;carray_complex[i] += carray_complex[&lt;font color="#ffffff"&gt;0&lt;/font&gt;];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#ffffff"&gt;for&lt;/font&gt;&amp;nbsp;(std::&lt;font color="#00ff00"&gt;size_t&lt;/font&gt;&amp;nbsp;i = &lt;font color="#ffffff"&gt;0&lt;/font&gt;; i &amp;lt; N/&lt;font color="#ffffff"&gt;2&lt;/font&gt;; ++i)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BOOST_CHECK_EQUAL(carray_double[&lt;font color="#ffffff"&gt;2&lt;/font&gt;*i],&amp;nbsp;&amp;nbsp; carray_complex[i].real());&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BOOST_CHECK_EQUAL(carray_double[&lt;font color="#ffffff"&gt;2&lt;/font&gt;*i+&lt;font color="#ffffff"&gt;1&lt;/font&gt;], carray_complex[i].imag());&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
&lt;font color="#b46918"&gt;// Ensure we can use a C-array of doubles as a ublas::vector.&lt;/font&gt;&lt;br&gt;
BOOST_AUTO_TEST_CASE( shallow_array_adaptor_double )&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;const&lt;/font&gt;&amp;nbsp;std::&lt;font color="#00ff00"&gt;size_t&lt;/font&gt;&amp;nbsp;N = &lt;font color="#ffffff"&gt;3&lt;/font&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;double&lt;/font&gt;&amp;nbsp;raw[N];&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;shallow_adaptor_double adaptor(N, raw);&lt;br&gt;
&amp;nbsp;&amp;nbsp;shallow_vector_double&amp;nbsp;&amp;nbsp;vec(N, adaptor);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;BOOST_CHECK_EQUAL( vec.size(), N );&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;std::fill(&amp;amp;raw[&lt;font color="#ffffff"&gt;0&lt;/font&gt;], &amp;amp;raw[N], &lt;font color="#ffffff"&gt;1.0&lt;/font&gt;);&lt;br&gt;
&amp;nbsp;&amp;nbsp;BOOST_CHECK_EQUAL_COLLECTIONS(&amp;amp;raw[&lt;font color="#ffffff"&gt;0&lt;/font&gt;], &amp;amp;raw[N], vec.begin(), vec.end());&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;std::fill(vec.begin(), vec.end(), &lt;font color="#ffffff"&gt;2.0&lt;/font&gt;);&lt;br&gt;
&amp;nbsp;&amp;nbsp;BOOST_CHECK_EQUAL_COLLECTIONS(&amp;amp;raw[&lt;font color="#ffffff"&gt;0&lt;/font&gt;], &amp;amp;raw[N], vec.begin(), vec.end());&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
&lt;font color="#b46918"&gt;// Ensure we can use a C-array of std::complex&amp;lt;double&amp;gt; as a ublas::vector.&lt;/font&gt;&lt;br&gt;
BOOST_AUTO_TEST_CASE( shallow_array_adaptor_complex )&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;const&lt;/font&gt;&amp;nbsp;std::&lt;font color="#00ff00"&gt;size_t&lt;/font&gt;&amp;nbsp;N = &lt;font color="#ffffff"&gt;3&lt;/font&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;complex&lt;/font&gt;&amp;nbsp;raw[N];&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;shallow_adaptor_complex adaptor(N, raw);&lt;br&gt;
&amp;nbsp;&amp;nbsp;shallow_vector_complex&amp;nbsp;&amp;nbsp;vec(N, adaptor);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;BOOST_CHECK_EQUAL( vec.size(), N );&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;std::fill(&amp;amp;raw[&lt;font color="#ffffff"&gt;0&lt;/font&gt;], &amp;amp;raw[N], &lt;font color="#00ff00"&gt;complex&lt;/font&gt;(&lt;font color="#ffffff"&gt;1.0&lt;/font&gt;, -&lt;font color="#ffffff"&gt;1.0&lt;/font&gt;));&lt;br&gt;
&amp;nbsp;&amp;nbsp;BOOST_CHECK_EQUAL_COLLECTIONS(&amp;amp;raw[&lt;font color="#ffffff"&gt;0&lt;/font&gt;], &amp;amp;raw[N], vec.begin(), vec.end());&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;std::fill(vec.begin(), vec.end(), &lt;font color="#00ff00"&gt;complex&lt;/font&gt;(&lt;font color="#ffffff"&gt;2.0&lt;/font&gt;, -&lt;font color="#ffffff"&gt;2.0&lt;/font&gt;));&lt;br&gt;
&amp;nbsp;&amp;nbsp;BOOST_CHECK_EQUAL_COLLECTIONS(&amp;amp;raw[&lt;font color="#ffffff"&gt;0&lt;/font&gt;], &amp;amp;raw[N], vec.begin(), vec.end());&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
&lt;font color="#b46918"&gt;// Ensure we can use the same data as either double or complex ublas::vector&lt;/font&gt;&lt;br&gt;
BOOST_AUTO_TEST_CASE( shallow_array_adaptor_shared )&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;const&lt;/font&gt;&amp;nbsp;std::&lt;font color="#00ff00"&gt;size_t&lt;/font&gt;&amp;nbsp;N = &lt;font color="#ffffff"&gt;6&lt;/font&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;double&lt;/font&gt;&amp;nbsp;carray_double[N] = { &lt;font color="#ffffff"&gt;0.0&lt;/font&gt;, &lt;font color="#ffffff"&gt;1.0&lt;/font&gt;, &lt;font color="#ffffff"&gt;2.0&lt;/font&gt;, &lt;font color="#ffffff"&gt;3.0&lt;/font&gt;, &lt;font color="#ffffff"&gt;4.0&lt;/font&gt;, &lt;font color="#ffffff"&gt;5.0&lt;/font&gt;&amp;nbsp;};&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;complex&lt;/font&gt;&amp;nbsp;*carray_complex = &lt;font color="#ffffff"&gt;reinterpret_cast&lt;/font&gt;&amp;lt;&lt;font color="#00ff00"&gt;complex&lt;/font&gt;&amp;nbsp;*&amp;gt;(carray_double);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;shallow_adaptor_double adaptor_double(N, carray_double);&lt;br&gt;
&amp;nbsp;&amp;nbsp;shallow_vector_double&amp;nbsp;&amp;nbsp;vec_double(N, adaptor_double);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;shallow_adaptor_complex adaptor_complex(N, carray_complex);&lt;br&gt;
&amp;nbsp;&amp;nbsp;shallow_vector_complex&amp;nbsp;&amp;nbsp;vec_complex(N, adaptor_complex);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#ffffff"&gt;for&lt;/font&gt;&amp;nbsp;(std::&lt;font color="#00ff00"&gt;size_t&lt;/font&gt;&amp;nbsp;i = &lt;font color="#ffffff"&gt;0&lt;/font&gt;; i &amp;lt; N/&lt;font color="#ffffff"&gt;2&lt;/font&gt;; ++i)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BOOST_CHECK_EQUAL(vec_double[&lt;font color="#ffffff"&gt;2&lt;/font&gt;*i],&amp;nbsp;&amp;nbsp; vec_complex[i].real());&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BOOST_CHECK_EQUAL(vec_double[&lt;font color="#ffffff"&gt;2&lt;/font&gt;*i+&lt;font color="#ffffff"&gt;1&lt;/font&gt;], vec_complex[i].imag());&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#ffffff"&gt;for&lt;/font&gt;&amp;nbsp;(std::&lt;font color="#00ff00"&gt;size_t&lt;/font&gt;&amp;nbsp;i = &lt;font color="#ffffff"&gt;0&lt;/font&gt;; i &amp;lt; N/&lt;font color="#ffffff"&gt;2&lt;/font&gt;; ++i)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vec_complex[i] += vec_complex[&lt;font color="#ffffff"&gt;0&lt;/font&gt;];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#ffffff"&gt;for&lt;/font&gt;&amp;nbsp;(std::&lt;font color="#00ff00"&gt;size_t&lt;/font&gt;&amp;nbsp;i = &lt;font color="#ffffff"&gt;0&lt;/font&gt;; i &amp;lt; N/&lt;font color="#ffffff"&gt;2&lt;/font&gt;; ++i)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BOOST_CHECK_EQUAL(vec_double[&lt;font color="#ffffff"&gt;2&lt;/font&gt;*i],&amp;nbsp;&amp;nbsp; vec_complex[i].real());&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BOOST_CHECK_EQUAL(vec_double[&lt;font color="#ffffff"&gt;2&lt;/font&gt;*i+&lt;font color="#ffffff"&gt;1&lt;/font&gt;], vec_complex[i].imag());&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#ffffff"&gt;for&lt;/font&gt;&amp;nbsp;(std::&lt;font color="#00ff00"&gt;size_t&lt;/font&gt;&amp;nbsp;i = &lt;font color="#ffffff"&gt;0&lt;/font&gt;; i &amp;lt; N; ++i)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vec_double[i] += vec_double[N-&lt;font color="#ffffff"&gt;1&lt;/font&gt;];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#ffffff"&gt;for&lt;/font&gt;&amp;nbsp;(std::&lt;font color="#00ff00"&gt;size_t&lt;/font&gt;&amp;nbsp;i = &lt;font color="#ffffff"&gt;0&lt;/font&gt;; i &amp;lt; N/&lt;font color="#ffffff"&gt;2&lt;/font&gt;; ++i)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BOOST_CHECK_EQUAL(vec_double[&lt;font color="#ffffff"&gt;2&lt;/font&gt;*i],&amp;nbsp;&amp;nbsp; vec_complex[i].real());&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BOOST_CHECK_EQUAL(vec_double[&lt;font color="#ffffff"&gt;2&lt;/font&gt;*i+&lt;font color="#ffffff"&gt;1&lt;/font&gt;], vec_complex[i].imag());&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
}&lt;br&gt;
&lt;/font&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-1694565828932641324?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/1694565828932641324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=1694565828932641324' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1694565828932641324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1694565828932641324'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/10/boostublasshallowarrayadaptor.html' title='BOOST_UBLAS_SHALLOW_ARRAY_ADAPTOR'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-1981856941933312543</id><published>2009-09-30T19:00:00.009Z</published><updated>2009-09-30T19:00:00.236Z</updated><title type='text'>Suzerain poster from 2009 PECOS center review</title><content type='html'>&lt;p&gt;
I spend some time assembling a &lt;a href="http://www.scribd.com/doc/20164240/Suzerain-Poster"&gt;state-of-my-research poster&lt;/a&gt; for &lt;a href="http://pecos.ices.utexas.edu/"&gt;my research center's&lt;/a&gt; annual review:
&lt;/p&gt;

&lt;object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="doc_63586229681828" name="doc_63586229681828" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" align="middle" height="500" width="100%" &gt;  &lt;param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf?document_id=20164240&amp;access_key=key-v88x9itv9swomkgyne7&amp;page=1&amp;version=1&amp;viewMode="&gt;   &lt;param name="quality" value="high"&gt;   &lt;param name="play" value="true"&gt;  &lt;param name="loop" value="true"&gt;   &lt;param name="scale" value="showall"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="devicefont" value="false"&gt;  &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="menu" value="true"&gt;  &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="salign" value=""&gt;        &lt;embed src="http://d1.scribdassets.com/ScribdViewer.swf?document_id=20164240&amp;access_key=key-v88x9itv9swomkgyne7&amp;page=1&amp;version=1&amp;viewMode=" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#ffffff" name="doc_63586229681828_object" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle"  height="500" width="100%"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-1981856941933312543?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/1981856941933312543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=1981856941933312543' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1981856941933312543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1981856941933312543'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/09/suzerain-poster-from-2009-pecos-center.html' title='Suzerain poster from 2009 PECOS center review'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-2733048903596043233</id><published>2009-09-23T04:33:00.002Z</published><updated>2009-09-23T04:34:46.852Z</updated><title type='text'>DFW IJ/And But So celebration this Saturday in Austin</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/_Q-Q3vIxb_KE/Srmh9uMh3sI/AAAAAAAAALw/ATR-MLV3hNE/s1600-h/Infinite_jest_cover.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_Q-Q3vIxb_KE/Srmh9uMh3sI/AAAAAAAAALw/ATR-MLV3hNE/s200/Infinite_jest_cover.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
Partly because I stumbled across &lt;a href="http://infinitesummer.org/"&gt;Infinite Summer&lt;/a&gt; shortly after &lt;a href="http://www.rollingstone.com/news/story/23638511/the_lost_years__last_days_of_david_foster_wallace"&gt;David Foster Wallace died&lt;/a&gt;, and partly because I recommended the book to my older sister who bought it and dropped it and passed it on to my father who dropped it but still had the previous copy from several years back when I recommended it and he bought it, dropped it, and now gave his now double-dropped extra to me when I was visiting over the summer, I re-read &lt;a href="http://en.wikipedia.org/wiki/Infinite_Jest"&gt;Infinite Jest&lt;/a&gt; this July, August, and September.  I finished this morning. Like last time, I'm worried that most anything I pick up will be again unsatisfying to read for a long while.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/_Q-Q3vIxb_KE/SrmjsWtInZI/AAAAAAAAAMA/k8p-8o8VyLs/s1600-h/dfw_9.2.20092.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_Q-Q3vIxb_KE/SrmjsWtInZI/AAAAAAAAAMA/k8p-8o8VyLs/s200/dfw_9.2.20092.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
In commemoration of today's end of Infinite Summer, celebrations abound.  In Austin, there's &lt;a href="http://www.andbutso-austin.com/"&gt;And But So&lt;/a&gt; this Saturday the 26th.  Attendees bring their favorite Foster Wallace passages to read aloud.  I will sadly miss it.
If I could attend And But So, I would read this passage from "Lyndon" in David Foster Wallace's short story collection&amp;nbsp; &lt;a href="http://en.wikipedia.org/wiki/Girl_with_Curious_Hair"&gt;Girl With Curious Hair&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;
"The truth made the truth's usual quick circuit around the offices, the Building, the Hill.  I was a homosexual.  I had been a homosexual at Yale.  In my last year before matriculating to the Business College, I met and became intimate with a Yale undergraduate, Jeffrey, a wealthy boy from Houston, Texas, who was beautiful, often considerate, wistful, but passionate, possessive, and a sufferer from periodic bouts of clinical depression so severe he had to be medicated.  It was the medication, I discovered, that made him wistful.&lt;br /&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;a href="http://4.bp.blogspot.com/_Q-Q3vIxb_KE/SrmiM2jhqNI/AAAAAAAAAL4/aziwtreq1i4/s1600-h/2c5ad250fca0fd3bc8da9010.L.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_Q-Q3vIxb_KE/SrmiM2jhqNI/AAAAAAAAAL4/aziwtreq1i4/s320/2c5ad250fca0fd3bc8da9010.L.jpg" /&gt;&lt;/a&gt;"My lover Jeffrey ran with a group of synthetic but pleasant Texas socialites, one of whom was Margaret Childs, a tall, squarely built girl who eventually claimed, from unknown motive, to be in love with me.  Margaret pursued me.  I declined her in every sensitive way I knew.  But Jeffrey grew inflamed.  He revealed that his friends did not and must not know he was a homosexual.  He pushed me to avoid Margaret altogether, which was hard:  Margaret, gritty, bright enough to be chronically bored, had become puzzled, suspicious, of Jeffrey's (quite unsubtle) attempts to shield me from her.  She smelled potential drama, and kept up the pursuit.  Jeffrey become jealous as only the manic can.  In my first year in Business, while I was shopping for my father's annual Christmas golf balls, Jeffrey and Margaret had it out, publicly, dramatically, in a Beat New Haven coffeehouse.  Jeffrey put his foot through a doughnut counter.  Certain information became public.  Bits of this public information got back to my parents, who were close to the parents of two of my housemates.  My parents came to me, personally, at Yale, on campus.  It was snowing.  At dinner with my parents and housemates, at Morty's, Jeffrey became so upset that he had to be taken to the men's room and calmed.  My father swabbed Jeffrey's forehead with moist paper towels in a cold stall.  Jeffrey kept telling my father what a kind man he was.&lt;br /&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
"Before my parents left—their hands literally on the handles of the station wagon's doors—my father, in the snow, asked me whether my sexual preferences were outside my own control.  He asked me whether, were I to meet the right woman, I might be capable of heterosexual love, of marriage and a family and a pillar-type position in the community of my choice.  These, my father explained, were his and my mother's great and only wishes for me, their one child, whom they loved without judgment.  My mother did not speak.  I remember a distanced interest in the steam of my own breath as I explained why I thought I could not and so would not do as my father wished, invoking Fifties' wisdom about deviancy, invoking a sort of god of glands as a shaman might blame vegetable spirits for a lost harvest.  My father nodded continually throughout this whole very serious and civil conversation while my mother checked maps in the glove compartment.  When I failed to present for next week's holiday, my father send me a card, my mother a check and leftovers in foil.&lt;br /&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
"I saw them only once more before my father dropped dead of something unexpected.  I had left Jeffrey's company, and had been befriended in my upset by a still grimly determined Margaret Childs.  Jeffrey unfortunately saw, in all this, cause to take his own life, which he did in an especially nasty way; and he left, on the table beneath the heating pipes from which he was found suspended, a note—a document—neatly typed, full enough of absolute truth concatenated with utter fiction that I was asked by the administration of the Business College to leave Yale University.  Weeks after my father's wake I married Margaret Childs, under a mesquite tree, the blue stares of my mother and a Houston sky, and a system of vows, promises of strength, denial, trial, and compassion far beyond the Childs' Baptist minister's ritual prescriptions.&lt;br /&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
"The truth, to which there was really no more than that, and which made its way through the Senator's staff, the Dirksen, and Owen Buildings, and the Little Congress of the Hill's three-piece-suited infantry remarkably focused and unexaggerated, concluded with the fact that Margaret's father, Mr. Childs, less wealthy than outright powerful by the standards of 1958's Texas, had lines of political influence that projected all the way into the U.S. Senate, and that he, Mr. Childs, in a gesture that was both carrot and stick, slung his son-in-law on one line of that influence and had me hand-over-hand it into the offices of a risen and rising, uncouth and ingenious senior Senator, a possible Democratic candidate in the next Presidential election.  Lyndon."&lt;br /&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-2733048903596043233?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/2733048903596043233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=2733048903596043233' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2733048903596043233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2733048903596043233'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/09/dfw-ijand-but-so-celebration-this.html' title='DFW IJ/And But So celebration this Saturday in Austin'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Q-Q3vIxb_KE/Srmh9uMh3sI/AAAAAAAAALw/ATR-MLV3hNE/s72-c/Infinite_jest_cover.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-4484404829012651219</id><published>2009-09-14T22:59:00.001Z</published><updated>2009-09-14T23:00:12.399Z</updated><title type='text'>The skew-adjoint convective derivative operator</title><content type='html'>&lt;p&gt;
Many CFD papers talk about using the skew-symmetric form of the convector operator in the Navier-Stokes equations.  The math behind this terminology has confused me for some time (e.g. the operator's nonlinear in the Navier-Stokes equations), so finally I dug through the algebra to show why and when the linear operator is &lt;a href="http://en.wikipedia.org/wiki/Skew-Hermitian_matrix"&gt;skew-Hermitian&lt;/a&gt; and/or skew-adjoint.
&lt;/p&gt;

&lt;a title="View The skew-adjoint (skew-symmetric) form of the convective derivative on Scribd" 
href="http://www.scribd.com/doc/19750033/The-skewadjoint-skewsymmetric-form-of-the-convective-derivative" style="margin: 12px auto 6px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block; text-decoration: underline;"&gt;The skew-adjoint (skew-symmetric) form of the convective derivative&lt;/a&gt; &lt;object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="doc_812891748563075" name="doc_812891748563075" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" align="middle" height="500" width="100%" &gt;  &lt;param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf?document_id=19750033&amp;access_key=key-zsl3k93psl4tqw1ejmu&amp;page=1&amp;version=1&amp;viewMode="&gt;   &lt;param name="quality" value="high"&gt;   &lt;param name="play" value="true"&gt;  &lt;param name="loop" value="true"&gt;   &lt;param name="scale" value="showall"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="devicefont" value="false"&gt;  &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="menu" value="true"&gt;  &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="salign" value=""&gt;        &lt;embed src="http://d1.scribdassets.com/ScribdViewer.swf?document_id=19750033&amp;access_key=key-zsl3k93psl4tqw1ejmu&amp;page=1&amp;version=1&amp;viewMode=" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#ffffff" name="doc_812891748563075_object" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle"  height="500" width="100%"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-4484404829012651219?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/4484404829012651219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=4484404829012651219' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4484404829012651219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4484404829012651219'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/09/skew-adjoint-convective-derivative.html' title='The skew-adjoint convective derivative operator'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-5225435258900410815</id><published>2009-07-16T23:32:00.000Z</published><updated>2009-07-16T23:32:48.730Z</updated><title type='text'>Printing arrays and gsl_matrix data in 2D form within gdb</title><content type='html'>&lt;p&gt;
Because I'm lousy with indexing, I often have to watch loops unfurl live in &lt;a href="http://www.gnu.org/software/gdb/"&gt;gdb&lt;/a&gt;.  Here are several quick user-defined
gdb commands that make inspecting 2-dimensional data stored in a 1-dimensional array
much easier.
&lt;/p&gt;

&lt;p&gt;
Place the following commands in your &lt;code&gt;~/.gdbinit&lt;/code&gt;:
&lt;code&gt;&lt;pre&gt;
# Modified from http://sourceware.org/ml/gdb/2007-07/msg00140.html
define p_array2d_generic
    set $array=$arg0
    set $ibound=$arg1
    set $jbound=$arg2
    set $ilda=$arg3
    set $jlda=$arg4

    set $i = 0
    set $j = 0
    while $i&lt;$ibound
        while $j&lt;$jbound
            printf " "
            printf "%9.4g", $array[$i*$ilda+$j*$jlda]
            set $j = $j + 1
        end
        printf "\n"
        set $j = 0
        set $i = $i + 1
    end
end

document p_array2d_generic
Print an array in 2D form: p_array2d array ibound jbound ilda jlda
end

define p_array2d_cm
    p_array2d_generic $arg0 $arg1 $arg2 1 $arg1
end

document p_array2d_cm
Print an array in column-major 2D form: p_array2d array ibound jbound
end

define p_array2d_rm
    p_array2d_generic $arg0 $arg1 $arg2 $arg2 1
end

document p_array2d_rm
Print an array in row-major 2D form: p_array2d array ibound jbound
end
&lt;/pre&gt;&lt;/code&gt;
Now you can use &lt;code&gt;p_array2d_cm&lt;/code&gt; and &lt;code&gt;p_array2d_rm&lt;/code&gt; to print out column- and row-major double arrays, respectively.
&lt;/p&gt;

&lt;p&gt;
Using the above and &lt;a href="http://www.gnu.org/software/gsl/manual/html_node/Accessing-matrix-elements.html"&gt;some information about the memory layout of &lt;code&gt;gsl_matrix&lt;/code&gt; instances&lt;/a&gt;, it's now easy to write one line function to dump a &lt;code&gt;gsl_matrix&lt;/code&gt;:
&lt;code&gt;&lt;pre&gt;
define p_gsl_matrix
    p_array2d_generic $arg0-&gt;data $arg0-&gt;size1 $arg0-&gt;size2 $arg0-&gt;tda 1
end

document p_gsl_matrix
Print a gsl_matrix in 2D form: p_gsl_matrix (gsl_matrix *)
end
&lt;/pre&gt;&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Question for you:&lt;/b&gt; I would like to have the p_array2d_generic take an additional argument which is a format specifier.  A check using &lt;code&gt;$argc&lt;/code&gt; would allow a reasonable, &lt;code&gt;double&lt;/code&gt;-based default but would allow the user to specify anything he or she desires.  However, I cannot get code like
&lt;code&gt;&lt;pre&gt;
set $format="%3.2g"
printf $format, 123
&lt;/pre&gt;&lt;/code&gt;
to work the way I think it should.  I always run into a gdb error like &amp;lt;&amp;lt;Bad format string, missing '"'.&amp;gt;&amp;gt;.  Anyone have any ideas how to provide a printf template parameter from a set variable in gdb?
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-5225435258900410815?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/5225435258900410815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=5225435258900410815' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5225435258900410815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5225435258900410815'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/07/printing-arrays-and-gslmatrix-data-in.html' title='Printing arrays and gsl_matrix data in 2D form within gdb'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-8777307194559095628</id><published>2009-07-07T03:38:00.001Z</published><updated>2009-07-07T03:38:32.173Z</updated><title type='text'>My favorite South Austin photo</title><content type='html'>&lt;div style="float:right;"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/_Q-Q3vIxb_KE/SlLA4tDpbaI/AAAAAAAAALo/dEYWwnLZerE/s1600-h/WithChihuahua04July2009.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_Q-Q3vIxb_KE/SlLA4tDpbaI/AAAAAAAAALo/dEYWwnLZerE/s320/WithChihuahua04July2009.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;b&gt;Quick!&lt;/b&gt; Find the following items in the South Austin picture to the right:
&lt;ol&gt;
&lt;li&gt;tiki torch&lt;/li&gt;
&lt;li&gt;pina colada&lt;/li&gt;
&lt;li&gt;high volume bangs&lt;/li&gt;
&lt;li&gt;proto-dreads&lt;/li&gt;
&lt;li&gt;man purse&lt;/li&gt;
&lt;li&gt;brick in the middle of the grass&lt;/li&gt;
&lt;li&gt;patriotic broach&lt;/li&gt;
&lt;li&gt;aviator sunglasses&lt;/li&gt;
&lt;li&gt;cheap Mexican beer&lt;/li&gt;
&lt;li&gt;a chihuahua wearing a lei&lt;/li&gt;
&lt;li&gt;a massive inflatable pool complete with pump&lt;/li&gt;
&lt;/ol&gt;
I need to cross the river (&lt;a href="http://en.wikipedia.org/wiki/Lady_Bird_Lake"&gt;lake?&lt;/a&gt;) more often.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-8777307194559095628?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/8777307194559095628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=8777307194559095628' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8777307194559095628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8777307194559095628'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/07/my-favorite-south-austin-photo.html' title='My favorite South Austin photo'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Q-Q3vIxb_KE/SlLA4tDpbaI/AAAAAAAAALo/dEYWwnLZerE/s72-c/WithChihuahua04July2009.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-6568110050347122750</id><published>2009-07-01T04:45:00.003Z</published><updated>2009-07-01T04:48:05.422Z</updated><title type='text'>Skateboarding (Injury)</title><content type='html'>&lt;p&gt;
Eight days ago I purchased a skateboard at the age of 27.  Three days ago I fell at &lt;a href="http://www.ci.austin.tx.us/parks/mabeldavis.htm"&gt;Mabel Davis&lt;/a&gt; park at the age of 27.  I messed up an elbow badly enough that I've been in a sling for several days now.  I see an orthopedic surgeon tomorrow morning to figure out why I cannot straighten my right arm completely.  No harm though, I can still type and use a mouse.
&lt;/p&gt;

&lt;p&gt;
I'm primarily annoyed that I can't roll around again until this injury is healed.  I'm awful at the sport, but damn it is fun stuff.  Behold shameless YouTubage of the guy who's name is on the bottom of my deck:
&lt;center&gt;&lt;object width="340" height="280"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ldK3HaVPd4o&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0xe1600f&amp;color2=0xfebd01&amp;border=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/ldK3HaVPd4o&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0xe1600f&amp;color2=0xfebd01&amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="280"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-6568110050347122750?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/6568110050347122750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=6568110050347122750' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/6568110050347122750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/6568110050347122750'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/07/skateboarding-injury.html' title='Skateboarding (Injury)'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-4284481881897954413</id><published>2009-06-26T16:00:00.009Z</published><updated>2011-06-04T04:09:56.273Z</updated><title type='text'>Frank Gabron</title><content type='html'>&lt;p&gt;
The Penn State Mechanical and Nuclear Engineering department's last alumni newsletter had a small feature on Frank Gabron (article follows).  I received one of his scholarships while I was an undergraduate, and it (along with my parents being very cool) was what allowed me to spend long enough on campus to pick up a double major with a double minor.  Every year I wrote Gabron a thank you note, and every year he wrote back.  
&lt;/p&gt;

&lt;p&gt;
One fall his response said he was coming into State College and would like to have dinner.  We ate at the Nittany Lion Inn and made small talk.  He told some fantastic stories.  After dinner we walked outside and shared that awkward I'm-going-to-smoke-dont-judge-me-oh-no-way-you-smoke-too moment.  As we stood and talked he asked if I'd like to come to the Penn State game the following day.
&lt;/p&gt;

&lt;p&gt;
I went back to the Inn for a pre-game pep rally with Graham Spanier firing up everyone.  We rode over to the stadium and watched the game from the nicest seats I will ever have in Beaver Stadium&amp;mdash;the president's box.  At halftime we snuck out for a smoke at a place inside the stadium where he knew he could usually get away with one.  He was telling me about his Helix Technology Corporation when a campus cop wandered into the outside area.  Without missing a beat, the man said "Oh shit, here comes the gendarme!" and cupped his cigarette in his hand behind his back like a kid in a high school parking lot when the coach drives past.
&lt;/p&gt;

&lt;p&gt;
After the game we rode back to the Inn.  I fell asleep on the bus on the way back, woke up hurriedly, did a lousy job of saying thank you, and then ran off to flip burgers at Baby's for a closing shift.  I don't remember who Penn State played that day, or even if we won.  But I do and always will remember that as one of the two or three best weekends I spent on campus.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Update 3 June 2011:&lt;/b&gt; It seems &lt;a href="http://www.legacy.com/obituaries/bostonglobe/obituary.aspx?n=frank-gabron&amp;pid=151342510"&gt;Mr. Gabron passed away on the 17th of May at the age of 81&lt;/a&gt;.  I still and always will smile every time I think of that football game and his generosity in helping me obtain my undergraduate degree.
&lt;/p&gt;

&lt;a title="View PSU MNE Spring 2009 Newsletter: Frank Gabron Article on Scribd" href="http://www.scribd.com/doc/16427126/PSU-MNE-Spring-2009-Newsletter-Frank-Gabron-Article" style="margin: 12px auto 6px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block; text-decoration: underline;"&gt;PSU MNE Spring 2009 Newsletter: Frank Gabron Article&lt;/a&gt; &lt;object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="doc_629554455421426" name="doc_629554455421426" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" align="middle" height="500" width="100%" rel="media:document" resource="http://d.scribd.com/ScribdViewer.swf?document_id=16427126&amp;access_key=key-1pgjsrylu80clw3pfuqy&amp;page=1&amp;version=1&amp;viewMode=" xmlns:media="http://search.yahoo.com/searchmonkey/media/" xmlns:dc="http://purl.org/dc/terms/" &gt;  &lt;param name="movie" value="http://d.scribd.com/ScribdViewer.swf?document_id=16427126&amp;access_key=key-1pgjsrylu80clw3pfuqy&amp;page=1&amp;version=1&amp;viewMode="&gt;   &lt;param name="quality" value="high"&gt;   &lt;param name="play" value="true"&gt;  &lt;param name="loop" value="true"&gt;   &lt;param name="scale" value="showall"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="devicefont" value="false"&gt;  &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="menu" value="true"&gt;  &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="salign" value=""&gt;        &lt;embed src="http://d.scribd.com/ScribdViewer.swf?document_id=16427126&amp;access_key=key-1pgjsrylu80clw3pfuqy&amp;page=1&amp;version=1&amp;viewMode=" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#ffffff" name="doc_629554455421426_object" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle"  height="500" width="100%"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-4284481881897954413?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/4284481881897954413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=4284481881897954413' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4284481881897954413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4284481881897954413'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/06/frank-gabron.html' title='Frank Gabron'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-7272246592383811195</id><published>2009-06-18T14:43:00.006Z</published><updated>2009-06-28T20:49:04.151Z</updated><title type='text'>Trefethen's Gauss Quadrature vs Clenshaw-Curtis Paper</title><content type='html'>&lt;p&gt;
From a quick look into B-spline Galerkin methods, I need to integrate B-spline basis functions against each other.  Though I could extract piecewise polynomial representations and integrate them symbolically, it was more fun to see what fixed order Gauss quadrature FOSS existed.  I stumbled across &lt;a href="http://www.holoborodko.com/pavel/?page_id=679"&gt;Pavel Holoborodko's excellent routines&lt;/a&gt;.  I'm in the process of preparing a patch for the &lt;a href="http://www.gnu.org/software/gsl/"&gt;GNU Scientific Library&lt;/a&gt; that ports Pavel's code to GSL conventions (&lt;b&gt;update&lt;/b&gt;: &lt;a href="http://sourceware.org/ml/gsl-discuss/2009-q2/msg00027.html"&gt;patch submitted&lt;/a&gt;).  Hopefully they'll accept it (&lt;b&gt;update&lt;/b&gt;: &lt;a href="http://sourceware.org/ml/gsl-discuss/2009-q2/msg00035.html"&gt;patch accepted&lt;/a&gt;).
&lt;/p&gt;

&lt;p&gt;
While digging around, I ran across a beautiful paper by Trefethen which I just finished on the morning bus ride into campus.  Absolutely fantastic.
&lt;div style="margin:10px 10px 10px 10px; padding-left:10px;text-align:left; border-left:10px solid #acacac;"&gt;
 &lt;span style="font-size:14px; padding-bottom:5px; font-weight:bold;"&gt;Is Gauss Quadrature Better than Clenshaw–Curtis?&lt;/span&gt;&lt;br/&gt;
 &lt;span&gt;SIAM Rev. &lt;strong&gt;50&lt;/strong&gt;, 67 (2008)&lt;br/&gt;
 &lt;a href="http://link.aip.org/link/?SIREAD/50/67/1"&gt;http://link.aip.org/link/?SIREAD/50/67/1&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;/p&gt;

&lt;p&gt;
The paper is so good that it makes me also want to try implementing Clenshaw-Curtis rules for GSL.
Before coding, I need to read this follow up work which it seems may have some numerical details buried within it.
&lt;div style="margin:10px 10px 10px 10px; padding-left:10px;text-align:left; border-left:10px solid #acacac;"&gt;
 &lt;span style="font-size:14px; padding-bottom:5px; font-weight:bold;"&gt;New Quadrature Formulas from Conformal Maps&lt;/span&gt;&lt;br/&gt;
 &lt;span&gt;SIAM J. Numer. Anal. &lt;strong&gt;46&lt;/strong&gt;, 930 (2008)&lt;br/&gt;
 &lt;a href="http://link.aip.org/link/?SJNAAM/46/930/1"&gt;http://link.aip.org/link/?SJNAAM/46/930/1&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-7272246592383811195?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/7272246592383811195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=7272246592383811195' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7272246592383811195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7272246592383811195'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/06/trefethens-gauss-quadrature-vs-clenshaw.html' title='Trefethen&apos;s Gauss Quadrature vs Clenshaw-Curtis Paper'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-5307959554805797650</id><published>2009-06-13T21:50:00.002Z</published><updated>2009-06-13T21:54:39.026Z</updated><title type='text'>Stack Overflow Dev Day in Austin</title><content type='html'>&lt;p&gt;
&lt;a href="http://www.joelonsoftware.com/"&gt;Joel Spolsky&lt;/a&gt; and &lt;a href="http://www.codinghorror.com/"&gt;Jeff Atwood&lt;/a&gt; will be speaking at &lt;a href="http://www.amiando.com/stackoverflowdevdays-austin.html?uid=QbwEoWErPvQLvv9z"&gt;Stack Overflow Dev Day in Austin&lt;/a&gt; on October 14th.  Student tickets to the event are a mere $10 and they provide lunch.  Total no brainer.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-5307959554805797650?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/5307959554805797650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=5307959554805797650' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5307959554805797650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5307959554805797650'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/06/stack-overflow-dev-day-in-austin.html' title='Stack Overflow Dev Day in Austin'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-2646183960484137678</id><published>2009-06-09T20:27:00.003Z</published><updated>2009-06-09T20:33:24.431Z</updated><title type='text'>Grrr... (Richardson Extrapolation)</title><content type='html'>&lt;p&gt;
Many times, when banging my ahead against on what has to be a really simple problem, I waste a &lt;i&gt;lot&lt;/i&gt; of time over-engineering my debugging tools.  Behold: &lt;a href="http://www.mathworks.com/matlabcentral/fileexchange/24388"&gt;richardson.m&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
(But then, years later, some of this crap comes up in conversation and the tool is already polished enough to hand it to someone else.  At least this is what I tell myself...)
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-2646183960484137678?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/2646183960484137678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=2646183960484137678' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2646183960484137678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2646183960484137678'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/06/grrr-richardson-extrapolation.html' title='Grrr... (Richardson Extrapolation)'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-4347457258114575682</id><published>2009-05-24T04:39:00.000Z</published><updated>2009-05-24T04:39:03.415Z</updated><title type='text'>le semaine prochaine avec mes parents</title><content type='html'>&lt;h3&gt;There...&lt;/h3&gt;
&lt;iframe width="650" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?f=d&amp;amp;source=s_d&amp;amp;saddr=1111+w+12th+st+austin,+tx&amp;amp;daddr=N+FM-620%2FRanch+Rd+620+N%2FRM-620+N+to:TX-27+to:Ranch+Rd+187+to:Ranch+Rd+187+to:Market+St%2FUS-83+to:Ranch+Rd+337+to:E+Musquiz+Dr%2FTX-118+to:TX-118+to:Ranch+Rd+505+to:US-67+to:266+Tecolote+Dr,+Big+Bend+Natl+Pk,+TX+79834+(Big+Bend+National+Park)&amp;amp;hl=en&amp;amp;geocode=%3BFQ6tzwEdBhIq-g%3BFVLjyAEdIlcZ-g%3BFeh3xgEdkrgQ-g%3BFdASxgEdMMoQ-g%3BFcidxQEdlsEN-g%3BFb7BxAEd2AoK-g%3BFQCp0gEd4M_O-Q%3BFSxh1QEdVtHK-Q%3BFbK20QEdaOvG-Q%3BFV5QwwEdTlXH-Q%3BFefsvgEd0YbZ-SHwf-Mc1NMvIg&amp;amp;mra=ls&amp;amp;via=1,2,3,4,5,6,7,8,9,10&amp;amp;dirflg=h&amp;amp;sll=30.944636,-103.07373&amp;amp;sspn=3.363553,4.943848&amp;amp;ie=UTF8&amp;amp;ll=30.078601,-101.052246&amp;amp;spn=3.327102,7.141113&amp;amp;z=7&amp;amp;output=embed"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://maps.google.com/maps?f=d&amp;amp;source=embed&amp;amp;saddr=1111+w+12th+st+austin,+tx&amp;amp;daddr=N+FM-620%2FRanch+Rd+620+N%2FRM-620+N+to:TX-27+to:Ranch+Rd+187+to:Ranch+Rd+187+to:Market+St%2FUS-83+to:Ranch+Rd+337+to:E+Musquiz+Dr%2FTX-118+to:TX-118+to:Ranch+Rd+505+to:US-67+to:266+Tecolote+Dr,+Big+Bend+Natl+Pk,+TX+79834+(Big+Bend+National+Park)&amp;amp;hl=en&amp;amp;geocode=%3BFQ6tzwEdBhIq-g%3BFVLjyAEdIlcZ-g%3BFeh3xgEdkrgQ-g%3BFdASxgEdMMoQ-g%3BFcidxQEdlsEN-g%3BFb7BxAEd2AoK-g%3BFQCp0gEd4M_O-Q%3BFSxh1QEdVtHK-Q%3BFbK20QEdaOvG-Q%3BFV5QwwEdTlXH-Q%3BFefsvgEd0YbZ-SHwf-Mc1NMvIg&amp;amp;mra=ls&amp;amp;via=1,2,3,4,5,6,7,8,9,10&amp;amp;dirflg=h&amp;amp;sll=30.944636,-103.07373&amp;amp;sspn=3.363553,4.943848&amp;amp;ie=UTF8&amp;amp;ll=30.078601,-101.052246&amp;amp;spn=3.327102,7.141113&amp;amp;z=7" style="color:#0000FF;text-align:left"&gt;View Larger Map&lt;/a&gt;&lt;/small&gt;

&lt;h3&gt;...and back again&lt;/h3&gt;
&lt;iframe width="650" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?f=d&amp;amp;source=s_d&amp;amp;saddr=266+Tecolote+Dr,+Big+Bend+Natl+Pk,+TX+79834+(Big+Bend+National+Park)&amp;amp;daddr=TX-163+to:Ranch+Rd+336+to:TX-39+to:TX-39+to:S+Ranch+Rd+783+to:N+Ranch+Rd+783+to:Ranch+Rd+1323+to:30.524413,-98.058472+to:1111+w+12th+st+austin,+tx&amp;amp;hl=en&amp;amp;geocode=FefsvgEd0YbZ-SHwf-Mc1NMvIg%3BFbpyzAEdqnH5-Q%3BFZZGxwEdhHQN-g%3BFXoLyQEdHCYQ-g%3BFSbRygEdGq8U-g%3BFfyyzAEd-C4W-g%3BFRT8zwEdgnIW-g%3BFQi9zwEdjqMf-g%3B%3B&amp;amp;mra=dme&amp;amp;mrcr=0&amp;amp;mrsp=8&amp;amp;sz=9&amp;amp;via=1,2,3,4,5,6,7,8&amp;amp;dirflg=h&amp;amp;sll=30.059586,-98.926392&amp;amp;sspn=1.697265,2.471924&amp;amp;ie=UTF8&amp;amp;ll=29.826348,-100.409546&amp;amp;spn=3.335708,7.141113&amp;amp;z=7&amp;amp;output=embed"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://maps.google.com/maps?f=d&amp;amp;source=embed&amp;amp;saddr=266+Tecolote+Dr,+Big+Bend+Natl+Pk,+TX+79834+(Big+Bend+National+Park)&amp;amp;daddr=TX-163+to:Ranch+Rd+336+to:TX-39+to:TX-39+to:S+Ranch+Rd+783+to:N+Ranch+Rd+783+to:Ranch+Rd+1323+to:30.524413,-98.058472+to:1111+w+12th+st+austin,+tx&amp;amp;hl=en&amp;amp;geocode=FefsvgEd0YbZ-SHwf-Mc1NMvIg%3BFbpyzAEdqnH5-Q%3BFZZGxwEdhHQN-g%3BFXoLyQEdHCYQ-g%3BFSbRygEdGq8U-g%3BFfyyzAEd-C4W-g%3BFRT8zwEdgnIW-g%3BFQi9zwEdjqMf-g%3B%3B&amp;amp;mra=dme&amp;amp;mrcr=0&amp;amp;mrsp=8&amp;amp;sz=9&amp;amp;via=1,2,3,4,5,6,7,8&amp;amp;dirflg=h&amp;amp;sll=30.059586,-98.926392&amp;amp;sspn=1.697265,2.471924&amp;amp;ie=UTF8&amp;amp;ll=29.826348,-100.409546&amp;amp;spn=3.335708,7.141113&amp;amp;z=7" style="color:#0000FF;text-align:left"&gt;View Larger Map&lt;/a&gt;&lt;/small&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-4347457258114575682?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/4347457258114575682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=4347457258114575682' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4347457258114575682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4347457258114575682'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/05/le-semaine-prochaine-avec-mes-parents.html' title='le semaine prochaine avec mes parents'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-1702241404858684786</id><published>2009-05-18T00:55:00.001Z</published><updated>2009-05-18T00:57:07.705Z</updated><title type='text'>Master's degree and a third patent grant</title><content type='html'>&lt;p&gt;
Nice week all in all.  I finished an &lt;a href="http://www.ices.utexas.edu/cam/courses/ms_requirements.php"&gt;M.S. in Computational and Applied Mathematics&lt;/a&gt; which has been four semesters in the making.
&lt;/p&gt;

&lt;p&gt;
Longer than that in process, though markedly less work, was getting my third patent grant &lt;a href="http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&amp;Sect2=HITOFF&amp;d=PALL&amp;p=1&amp;u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&amp;r=1&amp;f=G&amp;l=50&amp;s1=7532617.PN.&amp;OS=PN/7532617&amp;RS=PN/7532617"&gt;US 7,532,617&lt;/a&gt;:
&lt;/p&gt;
&lt;blockquote&gt;
A method, apparatus, and computer instructions are provided for a session initiation protocol application design, development, execution, and integration. A framework with a framework controller, an application data object, transition handlers, precondition handlers and post condition handlers is provided. When a message is received in a SIP application, the framework controller determines a state of application and parses the message to update application data by using corresponding handlers. The handlers for each state are specified in an input markup language model defined by a user externally via a Web service accessible component.
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-1702241404858684786?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/1702241404858684786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=1702241404858684786' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1702241404858684786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1702241404858684786'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/05/masters-degree-and-third-patent-grant.html' title='Master&apos;s degree and a third patent grant'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-1127917416612612492</id><published>2009-04-26T02:37:00.002Z</published><updated>2009-04-26T02:47:52.727Z</updated><title type='text'>Relatively recently...</title><content type='html'>&lt;ul&gt;
&lt;li&gt;
...Michelle had some &lt;a href="http://thewinger.com/2009/ballet-austin-michelles-surgery-diary-1/"&gt;ankle surgery&lt;/a&gt;.  She's doing well.
&lt;/li&gt;
&lt;li&gt;
...I saw &lt;a href="http://www.stallman.org/"&gt;rms&lt;/a&gt; speak on U.T.'s campus about copyright law, where, among other things, he made the case that &lt;a href="http://www.gnu.org/philosophy/not-ipr.html"&gt;IP is an overgeneralization&lt;/a&gt;.  Still digesting that.
&lt;/li&gt;
&lt;li&gt;
...Michelle and I watched &lt;a href="http://www.imdb.com/title/tt0460740/"&gt;Cashback&lt;/a&gt; (excellent, too much skin though) and &lt;a href="http://www.imdb.com/title/tt0479162/"&gt;Special&lt;/a&gt; (excellent).
&lt;/li&gt;
&lt;li&gt;
...I failed miserably at getting a simple, 1-D version of Durbin's &lt;a href="http://www.springerlink.com/content/g233232365803u22/"&gt;V2F model&lt;/a&gt; working on a turbulent channel flow.
&lt;/li&gt;
&lt;li&gt;
...despite it always being an obvious first choice, I keep forgetting to try to use &lt;a href="http://en.wikipedia.org/wiki/Geometric_Brownian_motion"&gt;geometric Brownian motion&lt;/a&gt; in my probability theory homework.
&lt;/li&gt;
&lt;li&gt;
...I quit letting scope creep into the &lt;a href="http://www.citeulike.org/user/RhysU/tag/381paper"&gt;reading list&lt;/a&gt; for my turbulence term paper.
&lt;/li&gt;
&lt;li&gt;
...I realized just how hard it is to achieve meaningful functional and system verification testing work, even when you as a tester understand the application and the underlying technology fairly well.
&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-1127917416612612492?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/1127917416612612492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=1127917416612612492' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1127917416612612492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1127917416612612492'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/04/relatively-recently.html' title='Relatively recently...'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-193228133809022685</id><published>2009-03-27T02:42:00.000Z</published><updated>2009-03-27T02:42:47.402Z</updated><title type='text'>Turbulence/Martingale Theory Confusion</title><content type='html'>&lt;p&gt;
Despite what I may think every Tuesday and Thursday when I walk from my probability theory class into my turbulence course, &amp;nu;&lt;sub&gt;T&lt;/sub&gt; is an eddy viscosity and not the stopped viscosity process.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-193228133809022685?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/193228133809022685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=193228133809022685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/193228133809022685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/193228133809022685'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/03/turbulencemartingale-theory-confusion.html' title='Turbulence/Martingale Theory Confusion'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-262528379529476032</id><published>2009-03-24T04:16:00.003Z</published><updated>2009-03-24T04:22:27.562Z</updated><title type='text'>Nearly sufficently advanced technology</title><content type='html'>&lt;p&gt;
&lt;img src="http://lh5.ggpht.com/_Q-Q3vIxb_KE/SchaTwWhXtI/AAAAAAAAAKs/FpxWxCj407Q/%5BUNSET%5D.jpg?imgmax=800" style="float: right; padding-left: 1em;" /&gt;
&lt;a href="http://eccentric.mae.cornell.edu/%7Epope/"&gt;Stephen Pope&lt;/a&gt;'s &lt;a href="http://books.google.com/books?id=HZsTw9SMx-0C"&gt;Turbulent Flows&lt;/a&gt; is one of the go-to books for graduate courses in turbulence.  It flows well, re-reading sections rewards the reader with new material, and the book attempts to develop results instead of just arriving with them from on high.  All goodness.  Still, every so often, Pope casually drops a bomb to check if you're paying attention.  Most of the time I'm not, but tonight I saw one:
&lt;/p&gt;
&lt;center&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Q-Q3vIxb_KE/SchffQ00y3I/AAAAAAAAALA/jO5ZFi0Arbc/s1600-h/PopeStochasticTaylor1.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_Q-Q3vIxb_KE/SchffQ00y3I/AAAAAAAAALA/jO5ZFi0Arbc/s400/PopeStochasticTaylor1.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5316604350807985010" /&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;p&gt;
Oh, I thought, he's just using a Taylor expansion.  No big deal.  I kept on reading.
&lt;/p&gt;
&lt;center&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Q-Q3vIxb_KE/SchfmED5WbI/AAAAAAAAALI/W0rr94qhFQk/s1600-h/PopeStochasticTaylor2.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_Q-Q3vIxb_KE/SchfmED5WbI/AAAAAAAAALI/W0rr94qhFQk/s400/PopeStochasticTaylor2.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5316604467640621490" /&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;p&gt;
Pope then quietly announces that it was a stochastic Taylor expansion.
At least that's my guess at what that object would be called.
&lt;/p&gt;
&lt;p&gt;
I've never seen a “stochastic Taylor expansion” developed, nor do I know the technical constraints that say whether an expansion does or does not exist for random fields like &lt;i&gt;u&lt;/i&gt;, &lt;i&gt;v&lt;/i&gt;, and &lt;i&gt;w&lt;/i&gt;.  Any mathematical concept &lt;a href="http://en.wikipedia.org/wiki/Stochastic_Taylor_Expansion"&gt;lacking a Wikipedia entry&lt;/a&gt; (as of today, anyhow) probably requires a bit more fanfare.  A footnote?  A reference?  A statement declaring überformality?  Not Pope's style it seems...
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-262528379529476032?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/262528379529476032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=262528379529476032' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/262528379529476032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/262528379529476032'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/03/nearly-sufficently-advanced-technology.html' title='Nearly sufficently advanced technology'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_Q-Q3vIxb_KE/SchaTwWhXtI/AAAAAAAAAKs/FpxWxCj407Q/s72-c/%5BUNSET%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-4665079368368750340</id><published>2009-03-19T17:07:00.001Z</published><updated>2009-03-19T17:10:22.686Z</updated><title type='text'>TAMMS 2009 Speakers</title><content type='html'>&lt;p&gt;I just accepted the final student speaker for the &lt;a href="http://users.ices.utexas.edu/%7Erhys/siam/#tammsoverview"&gt;2009 Texas Applied Mathematics Meeting for Students&lt;/a&gt;.  I'm very happy with the breadth of schools and topics we'll have at the conference.  Here are the talk titles firmly on the schedule:
&lt;/p&gt;
&lt;center&gt;
&lt;table id="tblMain" border="0" cellpadding="3" cellspacing="3"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;table class="tblGenFixed" id="tblMain_0" border="0" cellpadding="0" cellspacing="0" height="500" width="640"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="s0" align="center"&gt;&lt;small&gt;&lt;b&gt;Name&lt;/b&gt;&lt;/small&gt;&lt;/td&gt;&lt;td class="s1" align="center"&gt;&lt;small&gt;&lt;b&gt;University&lt;/b&gt;&lt;/small&gt;&lt;/td&gt;&lt;td class="s2" align="center"&gt;&lt;small&gt;&lt;b&gt;Talk Title&lt;/b&gt;&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="s3"&gt;&lt;small&gt;Yulia Hristova&lt;/small&gt;&lt;/td&gt;&lt;td class="s4"&gt;&lt;small&gt;Texas A&amp;amp;M University&lt;/small&gt;&lt;/td&gt;&lt;td class="s4"&gt;&lt;small&gt;Time reversal in thermoacoustic tomography  - an error estimate&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="s3"&gt;&lt;small&gt;Anthony R. Kellems&lt;/small&gt;&lt;/td&gt;&lt;td class="s4"&gt;&lt;small&gt;Rice University&lt;/small&gt;&lt;/td&gt;&lt;td class="s4"&gt;&lt;small&gt;Dimension Reduction Techniques that Capture Nonlinear Behavior of Morphologically Accurate Neuronal Models&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="s3"&gt;&lt;small&gt;Linh Nguyen&lt;/small&gt;&lt;/td&gt;&lt;td class="s4"&gt;&lt;small&gt;Texas A&amp;amp;M University&lt;/small&gt;&lt;/td&gt;&lt;td class="s4"&gt;&lt;small&gt;On singularities and instability of reconstruction in thermoacoustic tomography&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="s3"&gt;&lt;small&gt;Yan LI&lt;/small&gt;&lt;/td&gt;&lt;td class="s4"&gt;&lt;small&gt;Texas A&amp;amp;M University&lt;/small&gt;&lt;/td&gt;&lt;td class="s4"&gt;&lt;small&gt;Local-Global Upscaling of Flow and Transport in heterogeneous porous media&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="s3"&gt;&lt;small&gt;Ryan Nong&lt;/small&gt;&lt;/td&gt;&lt;td class="s4"&gt;&lt;small&gt;Rice University &lt;/small&gt;&lt;/td&gt;&lt;td class="s4"&gt;&lt;small&gt;Numerical Solutions of Matrix Equations Arising in Dimension Reduction for Linear-Time-Invariant Systems in the Large-Scale Setting&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="s3"&gt;&lt;small&gt;Jay Raol&lt;/small&gt;&lt;/td&gt;&lt;td class="s4"&gt;&lt;small&gt;Rice University&lt;/small&gt;&lt;/td&gt;&lt;td class="s4"&gt;&lt;small&gt;Using Fast Activating Voltage Sensitive Calcium Channels as Voltage Sensors&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="s3"&gt;&lt;small&gt;Moritz Allmaras&lt;/small&gt;&lt;/td&gt;&lt;td class="s4"&gt;&lt;small&gt;Texas A&amp;amp;M University&lt;/small&gt;&lt;/td&gt;&lt;td class="s4"&gt;&lt;small&gt;Ultrasound Modulated Optical Tomography: Reconstructions for a Differential Model&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="s3"&gt;&lt;small&gt;Sean Hardesty&lt;/small&gt;&lt;/td&gt;&lt;td class="s4"&gt;&lt;small&gt;Rice University&lt;/small&gt;&lt;/td&gt;&lt;td class="s4"&gt;&lt;small&gt;Optimization of Shell Structure Acoustics&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="s3"&gt;&lt;small&gt;Dimitar Trenev&lt;/small&gt;&lt;/td&gt;&lt;td class="s4"&gt;&lt;small&gt;Texas A&amp;amp;M University&lt;/small&gt;&lt;/td&gt;&lt;td class="s4"&gt;&lt;small&gt;Approximating solutions of infinite domain Laplace and Helmholtz problems&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="s3"&gt;&lt;small&gt;Robert Rosenbaum&lt;/small&gt;&lt;/td&gt;&lt;td class="s4"&gt;&lt;small&gt;University of Houston&lt;/small&gt;&lt;/td&gt;&lt;td class="s4"&gt;&lt;small&gt;Correlation Propagation in Networks of Integrate-and-Fire Neurons&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-4665079368368750340?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/4665079368368750340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=4665079368368750340' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4665079368368750340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4665079368368750340'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/03/tamms-2009-speakers.html' title='TAMMS 2009 Speakers'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-2515306213115656987</id><published>2009-02-13T04:40:00.001Z</published><updated>2009-02-13T04:40:17.772Z</updated><title type='text'>Using ACX_BLAS before AX_PATH_GSL with gfortran 4.3.2</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;While &lt;a href='http://en.wikipedia.org/wiki/GNU_build_system'&gt;autotooling&lt;/a&gt; a project that uses &lt;a href='http://www.gnu.org/software/gsl/'&gt;GSL&lt;/a&gt;, I wanted GSL to first attempt to detect and use a system BLAS.  If none can be found, then I wanted GSL to fall back to its own gslcblas implementation.  The rational being that a savvy user could eke out some performance, but that for everyone else the code just builds and runs without being too fussy.&lt;br/&gt;&lt;br/&gt;First I tried this in configure.ac:&lt;br/&gt;&lt;blockquote&gt;&lt;font face='monospace'&gt;&lt;a href='http://autoconf-archive.cryp.to/acx_blas.html'&gt;&lt;span class='nfakPe'&gt;ACX_BLAS&lt;/span&gt;&lt;/a&gt;([&lt;br/&gt;    export GSL_CBLAS_LIB="${BLAS_LIBS}"&lt;br/&gt;    AC_SUBST(GSL_CBLAS_LIB)&lt;br/&gt;],AC_MSG_WARN([Will use gslcblas if it is present.  Try --with-blas=&amp;lt;lib&amp;gt;.]))&lt;br/&gt;&lt;a href='http://www.gnu.org/software/gsl/manual/html_node/Autoconf-Macros.html'&gt;AX_PATH_GSL&lt;/a&gt;(1.12,,AC_MSG_&lt;/font&gt; &lt;wbr/&gt;&lt;font face='monospace'&gt;ERROR([Could not find required GSL version.]))&lt;/font&gt;&lt;br/&gt;&lt;/blockquote&gt;&lt;div class='ArwC7c ckChnd' id=':6'&gt; This works beautifully with Intel's compilers, but it dies for gcc/&lt;a href='http://gcc.gnu.org/fortran/'&gt;gfortran&lt;/a&gt; 4.3.2 during configure:&lt;br/&gt;&lt;blockquote&gt; &lt;font face='monospace'&gt;checking for GSL - version &amp;gt;= 1.12... no&lt;br/&gt;*** Could not run GSL test program, checking why...&lt;br/&gt;*** The test program failed to compile or link.&lt;/font&gt;&lt;br/&gt;&lt;/blockquote&gt; with the linking problems in config.log looking like&lt;br/&gt;&lt;blockquote&gt;&lt;font face='monospace'&gt; configure:7272: gcc -o conftest -I/org/centers/pecos/&lt;/font&gt;&lt;wbr/&gt;&lt;font face='monospace'&gt;LIBRARIES/GSL/gsl-1.12-gcc-4.&lt;/font&gt;&lt;wbr/&gt;&lt;font face='monospace'&gt;3.1-ubuntu-amd64/include -I/h2/rhys/include -L/h2/rhys/lib conftest.c -L/org/centers/pecos/&lt;/font&gt;&lt;wbr/&gt;&lt;font face='monospace'&gt;LIBRARIES/GSL/gsl-1.12-gcc-4.&lt;/font&gt;&lt;wbr/&gt;&lt;font face='monospace'&gt;3.1-ubuntu-amd64/lib -lgsl -lcblas -lf77blas -latlas -lm &amp;gt;&amp;amp;5&lt;br/&gt;/usr/lib/../lib64/libf77blas.&lt;/font&gt;&lt;wbr/&gt;&lt;font face='monospace'&gt;so: undefined reference to `_gfortran_st_write_done'&lt;/font&gt;&lt;br/&gt;&lt;/blockquote&gt; which a quick Google tells me is because -lgfortran isn't present in the linking line.  I tried to obtain the required gfortran libraries in ${FLIBS} by using &lt;a href='http://www.gnu.org/software/autoconf/manual/html_node/Fortran-Compiler.html#index-AC_005fPROG_005fFC_005fC_005fO-849'&gt;AC_FC_LIBRARY_LDFLAGS&lt;/a&gt; and then use them via&lt;br/&gt;&lt;blockquote&gt;&lt;font face='monospace'&gt;export GSL_CBLAS_LIB="${BLAS_LIBS} ${FLIBS}"&lt;/font&gt;&lt;br/&gt;&lt;/blockquote&gt;but later in the build I started hitting up against duplicate main issues because -lgfortranbegin winds up in ${FLIBS}.&lt;br/&gt;&lt;br/&gt;More random Googling found &lt;a href='http://www.gnu-darwin.org/www001/ports-1.5a-CURRENT/math/lapack++/work/lapackpp-2.5.2/configure.ac'&gt;the answer&lt;/a&gt; buried in &lt;a href='http://sourceforge.net/projects/lapackpp'&gt;lapack++&lt;/a&gt;'s configure script.  The total solution looks like:&lt;br/&gt;&lt;blockquote&gt;&lt;font face='monospace'&gt;&lt;a href='http://www.gnu.org/software/autoconf/manual/html_node/Particular-Programs.html#index-AC_005fPROG_005fRANLIB-260'&gt;AC_PROG_SED&lt;/a&gt;&lt;br/&gt;&lt;span class='nfakPe'&gt;ACX_BLAS&lt;/span&gt;([&lt;br/&gt;    dnl Workaround for bogus FLIBS&lt;br/&gt;    FLIBS=`echo ${FLIBS} | ${SED} 's/-lgfortranbegin//'`&lt;br/&gt;    export GSL_CBLAS_LIB="${BLAS_LIBS} ${FLIBS}"&lt;br/&gt;    AC_SUBST(GSL_CBLAS_LIB)&lt;br/&gt;],AC_MSG_WARN([Will use gslcblas if it is present.  Try --with-blas=&amp;lt;lib&amp;gt;.]))&lt;br/&gt;AX_PATH_GSL(1.12,,AC_MSG_&lt;/font&gt;&lt;wbr/&gt;&lt;font face='monospace'&gt;ERROR([Could not find required GSL version.]))&lt;/font&gt;&lt;br/&gt;&lt;/blockquote&gt;  where there's an explicit hack to remove -lgfortranbegin from FLIBS. Not pretty, but it seems to work.&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=92dfb81a-3588-4bbd-8c1b-73116cfe4556' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-2515306213115656987?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/2515306213115656987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=2515306213115656987' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2515306213115656987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2515306213115656987'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/02/using-acxblas-before-axpathgsl-with.html' title='Using ACX_BLAS before AX_PATH_GSL with gfortran 4.3.2'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-1400193815222191924</id><published>2009-02-09T13:12:00.025Z</published><updated>2009-02-09T13:22:37.689Z</updated><title type='text'>Texas Applied Mathematics Meeting for Students: March 27-28th</title><content type='html'>I've (finally) gotten to the point where I can announce:
&lt;blockquote&gt;
&lt;div class="separator" style="float: right; clear: both; text-align: center;"&gt;
&lt;a href="http://users.ices.utexas.edu/%7Erhys/siam/graphics/TAMMSLogo_320.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://users.ices.utexas.edu/%7Erhys/siam/graphics/TAMMSLogo_160.png" /&gt;&lt;/a&gt;&lt;/div&gt;
The Austin Chapter of SIAM is proud to host the 3rd annual Texas Applied
Mathematics Meeting for Students (TAMMS) on March 27–28th.  Attendees
will have an opportunity both to present their own research and to meet
fellow students from other Texas institutions.  Though targeted at SIAM
members, this meeting is open to anyone with a mathematical leaning.
Please see &lt;a href="http://www.ices.utexas.edu/siam"&gt;http://www.ices.utexas.edu/siam&lt;/a&gt;
for more details.
&lt;/blockquote&gt;
Compared to the &lt;a href="http://agentzlerich.blogspot.com/2009/01/austin-chapter-of-siam-website-redesign.html"&gt;last time I wrote about the site&lt;/a&gt;, I've gotten the back button and search engine problems fixed.  Or, I've got the back button working fine on Firefox.  I'm unsure if &lt;a href="http://www.dojotoolkit.org/book/dojo-book-0-9/part-3-programmatic-dijit-and-dojo/back-button-undo"&gt;dojo.back&lt;/a&gt; can be made to work on IE.  Though not perfect, the site is usable sans JavaScript.  I spent some time looking at a &lt;a href="http://css-tricks.com/examples/NiceSimpleContactForm2/"&gt;reCaptcha/PHP-based contact form&lt;/a&gt; but opted to forgo the contact form in the end.
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-1400193815222191924?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/1400193815222191924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=1400193815222191924' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1400193815222191924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1400193815222191924'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/02/texas-applied-mathematics-meeting-for.html' title='Texas Applied Mathematics Meeting for Students: March 27-28th'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-5852380546616118587</id><published>2009-02-09T03:48:00.016Z</published><updated>2009-02-09T03:57:22.846Z</updated><title type='text'>Compressible Navier-Stokes formulation for a perfect gas</title><content type='html'>&lt;p&gt;
It took me longer than I care to admit to track down and work through all the details/assumptions underneath the derivation of the conservative, compressible Navier-Stokes model for a perfect gas. This is on page two of every thesis I read, but is apparently such common knowledge that no one bothers to stick it in an appendix or give a good reference.
&lt;/p&gt;

&lt;a title="View Compressible Navier-Stokes formulation for a perfect gas on Scribd" href="http://www.scribd.com/doc/11947918/Compressible-NavierStokes-formulation-for-a-perfect-gas" style="margin: 12px auto 6px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block; text-decoration: underline;"&gt;Compressible Navier-Stokes formulation for a perfect gas&lt;/a&gt; &lt;object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="doc_438239680564547" name="doc_438239680564547" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" align="middle" height="500" width="100%"&gt;  &lt;param name="movie" value="http://d.scribd.com/ScribdViewer.swf?document_id=11947918&amp;access_key=key-2neq8oywgcj0wfmmb91h&amp;page=1&amp;version=1&amp;viewMode=list"&gt;   &lt;param name="quality" value="high"&gt;   &lt;param name="play" value="true"&gt;  &lt;param name="loop" value="true"&gt;   &lt;param name="scale" value="showall"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="devicefont" value="false"&gt;  &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="menu" value="true"&gt;  &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="salign" value=""&gt;            &lt;param name="mode" value="list"&gt;       &lt;embed src="http://d.scribd.com/ScribdViewer.swf?document_id=11947918&amp;access_key=key-2neq8oywgcj0wfmmb91h&amp;page=1&amp;version=1&amp;viewMode=list" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#ffffff" name="doc_438239680564547_object" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle" mode="list" height="500" width="100%"&gt;&lt;/embed&gt; &lt;/object&gt; &lt;div style="margin: 6px auto 3px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block;"&gt;    &lt;a href="http://www.scribd.com/upload" style="text-decoration: underline;"&gt;Publish at Scribd&lt;/a&gt; or &lt;a href="http://www.scribd.com/browse" style="text-decoration: underline;"&gt;explore&lt;/a&gt; others:            &lt;a href="http://www.scribd.com/browse/Research/?style=text-decoration%3A+underline%3B"&gt;Research&lt;/a&gt;                  &lt;a href="http://www.scribd.com/tag/compressible" style="text-decoration: underline;"&gt;compressible&lt;/a&gt;              &lt;a href="http://www.scribd.com/tag/NavierStokes" style="text-decoration: underline;"&gt;NavierStokes&lt;/a&gt;       &lt;/div&gt;

&lt;p&gt;
Particularly interesting was tracking down &lt;a href="http://ntrs.nasa.gov/details.jsp?R=1020958"&gt;data&lt;/a&gt; to confirm that air viscosity goes like temperature to a goofy power like 0.666, at least over a reasonable temperature range (e.g. 200K - 5000K).
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-5852380546616118587?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/5852380546616118587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=5852380546616118587' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5852380546616118587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5852380546616118587'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/02/compressible-navier-stokes-formulation.html' title='Compressible Navier-Stokes formulation for a perfect gas'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-4247814100805482250</id><published>2009-02-04T05:57:00.042Z</published><updated>2009-02-04T06:22:54.990Z</updated><title type='text'>Avoiding tedious numerics using Boost Accumulators</title><content type='html'>&lt;p&gt;
For a turbulence warm up assignment, we needed to compute some &lt;a href="http://en.wikipedia.org/wiki/Correlation"&gt;correlation coefficients&lt;/a&gt; for trajectory behavior on the &lt;a href="http://en.wikipedia.org/wiki/Lorenz_attractor"&gt;Lorenz attractor&lt;/a&gt;.  
Specifically, compute the mean, variance, and cross-correlations of the three solution components.  I'd skimmed through the &lt;a href="http://boost-sandbox.sourceforge.net/libs/accumulators/doc/html/index.html"&gt;Boost Accumulator Framework&lt;/a&gt; a couple of months back and thought it looked interesting:
&lt;/p&gt;

&lt;div style="background-color:#EEEEEE;"&gt;
&lt;font color="#ff40ff"&gt;#include &lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;lt;boost/accumulators/accumulators.hpp&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#ff40ff"&gt;#include &lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;lt;boost/accumulators/statistics/covariance.hpp&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#ff40ff"&gt;#include &lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;lt;boost/accumulators/statistics/mean.hpp&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#ff40ff"&gt;#include &lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;lt;boost/accumulators/statistics/stats.hpp&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#ff40ff"&gt;#include &lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;lt;boost/accumulators/statistics/variance.hpp&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#ff40ff"&gt;#include &lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;lt;boost/accumulators/statistics/variates/covariate.hpp&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#ff40ff"&gt;#include &lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;lt;boost/format.hpp&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#ff40ff"&gt;#include &lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;lt;fstream&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#ff40ff"&gt;#include &lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;lt;iostream&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#ff40ff"&gt;#include &lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;lt;sstream&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#ff40ff"&gt;#include &lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;lt;string&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;br/&gt;
&lt;font color="#8080ff"&gt;// Read an input streams and compute the relevant statistics&lt;/font&gt;&lt;br&gt;
&lt;font color="#00ff00"&gt;template&lt;/font&gt;&amp;lt;&lt;font color="#00ff00"&gt;typename&lt;/font&gt;&amp;nbsp;charT, &lt;font color="#00ff00"&gt;typename&lt;/font&gt;&amp;nbsp;traits&amp;gt;&lt;br&gt;
&lt;font color="#00ff00"&gt;int&lt;/font&gt;&amp;nbsp;process(std::basic_ostream&amp;lt;charT, traits&amp;gt;&amp;amp; out,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::basic_istream&amp;lt;charT, traits&amp;gt;&amp;amp; in) {&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ffff00"&gt;using&lt;/font&gt;&amp;nbsp;&lt;font color="#00ff00"&gt;namespace&lt;/font&gt;&amp;nbsp;boost::accumulators;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;accumulator_set&amp;lt;&lt;font color="#00ff00"&gt;double&lt;/font&gt;, stats&amp;lt;tag::mean, &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tag::variance, &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tag::covariance&amp;lt;&lt;font color="#00ff00"&gt;double&lt;/font&gt;, tag::covariate1&amp;gt; &amp;gt; &amp;gt; x_acc;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;accumulator_set&amp;lt;&lt;font color="#00ff00"&gt;double&lt;/font&gt;, stats&amp;lt;tag::mean, &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tag::variance, &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tag::covariance&amp;lt;&lt;font color="#00ff00"&gt;double&lt;/font&gt;, tag::covariate1&amp;gt; &amp;gt; &amp;gt; y_acc;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;accumulator_set&amp;lt;&lt;font color="#00ff00"&gt;double&lt;/font&gt;, stats&amp;lt;tag::mean, &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tag::variance, &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tag::covariance&amp;lt;&lt;font color="#00ff00"&gt;double&lt;/font&gt;, tag::covariate1&amp;gt; &amp;gt; &amp;gt; z_acc;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;double&lt;/font&gt;&amp;nbsp;t, x, y, z;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::basic_string&amp;lt;charT, traits&amp;gt; line;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;boost::format fmt(&lt;font color="#ff6060"&gt;&amp;quot; &lt;/font&gt;&lt;font color="#ff40ff"&gt;%016e&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#ff40ff"&gt;%016e&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#ff40ff"&gt;%016e&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#ff40ff"&gt;%016e&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#ff40ff"&gt;%016e&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#ff40ff"&gt;%016e&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#ff40ff"&gt;%016e&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#ff40ff"&gt;%016e&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#ff40ff"&gt;%016e&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#ff40ff"&gt;%016e&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;&lt;/font&gt;);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ffff00"&gt;while&lt;/font&gt;&amp;nbsp;(in) {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ffff00"&gt;if&lt;/font&gt;&amp;nbsp;(!std::getline(in, line)) &lt;font color="#ffff00"&gt;break&lt;/font&gt;; &lt;font color="#8080ff"&gt;// Read columns per line to&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::istringstream in(line);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#8080ff"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;be a little defensive&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;in &amp;gt;&amp;gt; t &amp;gt;&amp;gt; x &amp;gt;&amp;gt; y &amp;gt;&amp;gt; z;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#8080ff"&gt;// Compute running statistics&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x_acc(x, covariate1 = y);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y_acc(y, covariate1 = z);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;z_acc(z, covariate1 = x);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#8080ff"&gt;// Output running statistics&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;out &amp;lt;&amp;lt; fmt % t&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % mean(x_acc)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % mean(y_acc)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % mean(z_acc)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % variance(x_acc)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % variance(y_acc)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % variance(z_acc)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % covariance(x_acc)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % covariance(z_acc)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % covariance(y_acc)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&amp;lt; std::endl;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ffff00"&gt;return&lt;/font&gt;&amp;nbsp;&lt;font color="#ff6060"&gt;0&lt;/font&gt;;&lt;br&gt;
}&lt;br&gt;
&lt;/div&gt;

&lt;p&gt;
Compared with the alternative loops/bookkeeping/etc., this is a pretty slick alternative.  The only downside was that the accumulator declarations took me awhile to decipher from the documentation.
&lt;/p&gt;

&lt;p&gt;
As you probably noticed, I am reading/writing plain text data files and computing the statistics at every time step.  This is overkill and slow.  I'd probably have fixed that by now if it weren't for the fact that I ran across &lt;a href="http://www.catonmat.net/blog/unix-utilities-pipe-viewer/"&gt;Pipe Viewer&lt;/a&gt; in the last two days.  Quite a neat shell tool that.
&lt;p&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-4247814100805482250?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/4247814100805482250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=4247814100805482250' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4247814100805482250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4247814100805482250'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/02/avoiding-tedious-numerics-using-boost.html' title='Avoiding tedious numerics using Boost Accumulators'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-1311403835612830949</id><published>2009-01-26T00:09:00.000Z</published><updated>2009-01-26T00:22:10.031Z</updated><title type='text'>Jet Plane Off To Jamaica</title><content type='html'>Two weeks back Flip and I converged on Trapani's apartment in Jamaica, Queens.&amp;nbsp; The three of us were together in Simmons Hall at Penn State, near Plateia Varnava in Athens, near Beaver and Atherton back at Penn State, and finally in Austin, Texas.&amp;nbsp; Eight years.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/_Q-Q3vIxb_KE/SX0BP2YifuI/AAAAAAAAAJs/vD_xS7Ymqr8/s1600-h/NewYorkJanuary2009.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_Q-Q3vIxb_KE/SX0BP2YifuI/AAAAAAAAAJs/vD_xS7Ymqr8/s320/NewYorkJanuary2009.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Over the past year and a half both Flip and T left town for new opportunities.&amp;nbsp; It's been hard to not see them nearly every Wednesday night like I had for the three years we were all in Austin.&amp;nbsp; This trip we sat, talked, laughed, and did nothing of merit for three days.&amp;nbsp; It was wonderful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-1311403835612830949?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/1311403835612830949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=1311403835612830949' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1311403835612830949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1311403835612830949'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/01/jet-plane-off-to-jamaica.html' title='Jet Plane Off To Jamaica'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Q-Q3vIxb_KE/SX0BP2YifuI/AAAAAAAAAJs/vD_xS7Ymqr8/s72-c/NewYorkJanuary2009.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-6105572346824606415</id><published>2009-01-20T23:55:00.001Z</published><updated>2009-01-21T04:13:56.770Z</updated><title type='text'>Austin Chapter of SIAM website redesign</title><content type='html'>I finally got around to redesigning &lt;a href="http://www.ices.utexas.edu/siam/"&gt;U.T.'s SIAM chapter website&lt;/a&gt;.  I've been meaning to do it for months.  The suitable effective kick in the pants was needing a site to house information for our upcoming student conference. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All in all I'm happy with it.  I used
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;
some simple &lt;a href="http://dojotoolkit.org/"&gt;Dojo&lt;/a&gt; loaded via &lt;a href="http://code.google.com/apis/ajaxlibs/"&gt;Google's AJAX hosting&lt;/a&gt;,
&lt;/li&gt;
&lt;li&gt;
a little &lt;a href="http://www.blueprintcss.org/"&gt;Blueprint&lt;/a&gt;, 
&lt;/li&gt;
&lt;li&gt;
lifting/revising content from both &lt;a href="http://users.ices.utexas.edu/%7Epflath/siam/index.html.bak"&gt;Pearl Flath's older chapter site&lt;/a&gt; and the official &lt;a href="http://www.siam.org/"&gt;SIAM&lt;/a&gt; pages, and finally
&lt;/li&gt;
&lt;li&gt;
my feeble &lt;a href="http://www.inkscape.org/"&gt;Inkscape&lt;/a&gt; logo design.
&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
My three major complaints with my own work are:
&lt;br /&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;b&gt;
The back button is broken.
&lt;/b&gt;&lt;/dt&gt;
&lt;dd&gt;I spent two hours futzing with &lt;a href="http://dojotoolkit.org/book/dojo-book-0-9/part-3-programmatic-dijit-and-dojo/back-button-undo"&gt;dojo.back&lt;/a&gt; to get the back button to work.  After I had it working, hitting back and then forward caused an infinite loop on page refresh.
I gave up for now.
&lt;/dd&gt;
&lt;dt&gt;&lt;b&gt;
None of the content can be indexed by a search engine (I think).
&lt;/b&gt;&lt;/dt&gt;
&lt;dd&gt;Since all of the major content is loaded via dijit.layout.ContentPane.setHref fired with onClick events, I doubt a search engine can effectively index much of it.  Something to check when I roll &lt;a href="http://www.google.com/analytics/"&gt;Google Analytics&lt;/a&gt; into the next update.
&lt;/dd&gt;
&lt;dt&gt;&lt;b&gt;
I have raw email addresses in mailto links.
&lt;/b&gt;&lt;/dt&gt;
&lt;dd&gt;I'm not sure how much server-side processing is permitted on this particular host.  I need to move contact functionality into forms guarded by CAPTCHAs.  Hopefully GMail's filter will save me in the meantime.
&lt;/dd&gt;
&lt;/dl&gt;
None of these are terrible to fix.  They just take time.  And classes began today...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-6105572346824606415?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/6105572346824606415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=6105572346824606415' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/6105572346824606415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/6105572346824606415'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/01/austin-chapter-of-siam-website-redesign.html' title='Austin Chapter of SIAM website redesign'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-2465855294943707824</id><published>2009-01-14T17:01:00.000Z</published><updated>2009-01-14T17:01:00.276Z</updated><title type='text'>DOE CSGF Research Statement</title><content type='html'>&lt;p&gt;
I just finished applying for the &lt;a href="http://www2.krellinst.org/csgf/index.shtml"&gt;DOE Computational Science Graduate Fellowship&lt;/a&gt;.  In March they tell me if I got it.  One of the short responses the CSGF application required was the first time I'd sat down and really thought through my research goals.  With the addition of some background material links, here's the prompt and my response...
&lt;/p&gt;
&lt;h3&gt;Essay prompt 1: Field of Interest&lt;/h3&gt;
&lt;p&gt;
 "&lt;a href="http://en.wikipedia.org/wiki/Scientific_computing"&gt;Computational science&lt;/a&gt;" involves the innovative and essential use of high-performance computation, and/or the development of high performance computational technologies, to advance knowledge or capabilities in a scientific or engineering discipline. Please describe (in no more than 300 words) your specific research interest paying particular attention to how computational science will spur advances.
&lt;/p&gt;
&lt;h3&gt; Essay response 1 &lt;/h3&gt;
&lt;p&gt;
 My research uses &lt;a href="http://en.wikipedia.org/wiki/Direct_numerical_simulation"&gt;direct numerical simulation&lt;/a&gt; (DNS) of the &lt;a href="http://en.wikipedia.org/wiki/Navier-Stokes_equations"&gt;Navier-Stokes equations&lt;/a&gt; to investigate the compressible, turbulent boundary layers present in &lt;a href="http://en.wikipedia.org/wiki/Atmospheric_reentry"&gt;atmospheric reentry vehicle applications&lt;/a&gt;. My work is motivated by both its long-term value and an immediate need at the University of Texas' &lt;a href="http://pecos.ices.utexas.edu/"&gt;Center for Predictive Engineering and Computational Sciences&lt;/a&gt; (PECOS). PECOS is developing new &lt;a href="http://www.stanford.edu/group/cits/pdf/lectures/barth.pdf"&gt;uncertainty quantification&lt;/a&gt; techniques through the study of reentry vehicle &lt;a href="http://asm.arc.nasa.gov/full_text.html?type=materials&amp;id=1"&gt;thermal protection systems&lt;/a&gt; (TPS). Due to its order one impact on vehicle heating rate uncertainty, improving &lt;a href="http://agentzlerich.blogspot.com/2008/07/impinging-shock-results-for-5-degree.html"&gt;hypersonic turbulent boundary layer&lt;/a&gt; science is crucial for PECOS' success.
&lt;/p&gt;
&lt;p&gt;
 I have three interwoven research thrusts. First, by combining &lt;a href="http://www.sdsc.edu/us/resources/p3dfft/index.php"&gt;scalable spectral numerical techniques&lt;/a&gt; with a &lt;a href="http://journals.cambridge.org/production/action/cjoGetFulltext?fulltextid=12912"&gt;multiscale formulation&lt;/a&gt;, I will advance understanding of how TPS ablation products interact with turbulent boundary layers. Second, through a simulation-based characterization of the ablative conditions that may sustain turbulence, I will improve understanding of turbulence transition phenomena in transpired-wall compressible flows. Lastly, I will produce high quality data fields for use in compressible turbulence model development and calibration. This novel data will also fuel PECOS' Bayesian-inspired uncertainty quantification activities.
&lt;/p&gt;
&lt;p&gt;
 Improvements in computational science will aid all three of these endeavors. The scientific need to attain higher, more realistic Reynolds numbers and to obtain finer-grained, larger datasets drives DNS towards ever higher performance computing platforms. Increases in compute node availability, compute node memory, and interconnect speed will all boost the quality of the science I produce. Spectral turbulence simulations walk the line between being CPU and communications bound. Accordingly, my research stands to benefit from either improvements to low-level building block performance (e.g. BLAS) or algorithmic advances in high-level scalability (e.g. communication topology optimization). Finally, in turn, my application's stringent requirements will help me drive new computational developments for others to use.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-2465855294943707824?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/2465855294943707824/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=2465855294943707824' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2465855294943707824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2465855294943707824'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2009/01/doe-csgf-research-statement.html' title='DOE CSGF Research Statement'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>6</thr:total><georss:featurename>Austin, TX, USA</georss:featurename><georss:point>30.268735 -97.745209</georss:point><georss:box>29.9722175 -98.212128 30.5652525 -97.27829</georss:box></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-333032212843038210</id><published>2008-12-12T21:12:00.004Z</published><updated>2008-12-12T21:14:42.851Z</updated><title type='text'>UAW/Republican auto bailout insanity</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
Consider the following snippet (emphasis mine):
&lt;br /&gt;
&lt;a href="http://www.nytimes.com/2008/12/13/business/13uaw.html?hp"&gt;U.A.W. in Center of Dispute Over Bailout Failure - NYTimes.com&lt;/a&gt;
&lt;br /&gt;
&lt;blockquote&gt;
Late Thursday, the Senate did not take up an assistance measure passed by the House, after hours of negotiations between Senate Republicans with the auto companies and the U.A.W. The sticking point apparently was the union’s refusal to agree to lower wage and benefit rates as soon as next year.
&lt;br/&gt;
&lt;br/&gt;
Representatives for the union, which had already accepted a series of cuts in its current contract, sought instead to push any more concessions back to 2011, when the U.A.W.’s contract with Detroit auto companies expires.
&lt;br/&gt;
&lt;br/&gt;
In a statement Thursday night, the union said it was “prepared to agree that any restructuring plan should ensure that the wages and benefits of workers at the domestic automakers should be competitive with those paid by the foreign transplants. But we also recognized that this would take time to work out and implement” using programs like &lt;strong&gt;buyouts and early retirement offers to bring in new workers at lower rates&lt;/strong&gt;.&lt;/blockquote&gt;
It can be (albeit simplistically) be translated into:
&lt;br /&gt;
&lt;blockquote&gt;
"Yeah yeah yeah.  We know our non-market salaries are high enough that it's driving the company down.  Yeah, the union will accept pay cuts.  But we want bought out/paid off before any of us actually have to work for market wages.  Oh, and by the way, millions of other people's jobs be damned."
&lt;/blockquote&gt;
Interesting that the &lt;a href="http://www.google.com/hostednews/ap/article/ALeqM5izj-oTsd3Ny4jLQ5_kO0DJhakTNgD950VN100"&gt;Republicans killed it&lt;/a&gt;, and now that it's &lt;a href="http://www.nytimes.com/2008/12/13/business/13auto.html?hp"&gt;Bush who may come swooping in from left field&lt;/a&gt;.  Especially funny/sad is that the executive action to save things will probably give the U.A.W. what they want.  That's likely to overwhelm the domestic automakers yet again even if a current bailout can save them.
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-333032212843038210?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/333032212843038210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=333032212843038210' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/333032212843038210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/333032212843038210'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2008/12/uawrepublican-auto-bailout-insanity.html' title='UAW/Republican auto bailout insanity'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-8541015962929502960</id><published>2008-12-09T12:45:00.000Z</published><updated>2008-12-09T12:48:35.659Z</updated><title type='text'>Nice Nutcracker article on Michelle in the Austin Decider</title><content type='html'>The &lt;a href="http://austin.decider.com/"&gt;Austin Decider&lt;/a&gt; ran a fun piece on the role of snow within Ballet Austin's Nutcracker.&amp;nbsp; Michelle was the chosen snowflake:&lt;br /&gt;
&lt;a href="http://austin.decider.com/articles/house-lights-backstage-at-the-nutcracker,1236/"&gt; House Lights: Backstage at The Nutcracker&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-8541015962929502960?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/8541015962929502960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=8541015962929502960' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8541015962929502960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8541015962929502960'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2008/12/nice-nutcracker-article-on-michelle-in.html' title='Nice Nutcracker article on Michelle in the Austin Decider'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-9203851667401744044</id><published>2008-12-07T23:55:00.000Z</published><updated>2008-12-08T00:17:41.698Z</updated><title type='text'>Fall 2008 :: Probability Theory I Concepts</title><content type='html'>&lt;p&gt;
I'm a week away from finishing the &lt;a href="http://www.math.utexas.edu/users/sirbu/Probability-I.html"&gt;first half&lt;/a&gt; of a year-long probability theory sequence at U.T.  I (finally) managed to keep a concepts cheat sheet up to date for a course:
&lt;/p&gt;

&lt;a title="View Probability Theory I: CAM 384K Concepts document on Scribd" href="http://www.scribd.com/doc/8718405/Probability-Theory-I-CAM-384K-Concepts" style="margin: 12px auto 6px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block; text-decoration: underline;"&gt;Probability Theory I: CAM 384K Concepts&lt;/a&gt; &lt;object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="doc_620712341574487" name="doc_620712341574487" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" align="middle" height="500" width="100%"&gt;  &lt;param name="movie" value="http://documents.scribd.com/ScribdViewer.swf?document_id=8718405&amp;access_key=key-2604zx22da4i6hlr7akc&amp;page=1&amp;version=1&amp;viewMode="&gt;   &lt;param name="quality" value="high"&gt;   &lt;param name="play" value="true"&gt;  &lt;param name="loop" value="true"&gt;   &lt;param name="scale" value="showall"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="devicefont" value="false"&gt;  &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="menu" value="true"&gt;  &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="salign" value=""&gt;      &lt;embed src="http://documents.scribd.com/ScribdViewer.swf?document_id=8718405&amp;access_key=key-2604zx22da4i6hlr7akc&amp;page=1&amp;version=1&amp;viewMode=" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#ffffff" name="doc_620712341574487_object" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle"  height="500" width="100%"&gt;&lt;/embed&gt; &lt;/object&gt; &lt;div style="margin: 6px auto 3px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block;"&gt; &lt;a href="http://www.scribd.com/upload" style="text-decoration: underline;"&gt;Publish at Scribd&lt;/a&gt; or &lt;a href="http://www.scribd.com/browse" style="text-decoration: underline;"&gt;explore&lt;/a&gt; others:    &lt;a href="http://www.scribd.com/browse?c=27-mathematics" style="text-decoration: underline;"&gt;Mathematics&lt;/a&gt;      &lt;a href="http://www.scribd.com/browse?c=21-science" style="text-decoration: underline;"&gt;Science&lt;/a&gt;       &lt;a href="http://www.scribd.com/tag/probability%20statistics%20mathematics" style="text-decoration: underline;"&gt;probability statisti&lt;/a&gt;    &lt;/div&gt;

&lt;p&gt;
Part of my motivation has been that while &lt;a href="http://books.google.com/books?id=BYduAAAACAAJ&amp;dq=isbn:0534424414"&gt;Durrett's text&lt;/a&gt; is useful, it is very difficult to find specific definitions and theorems within it while working problems.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-9203851667401744044?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/9203851667401744044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=9203851667401744044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/9203851667401744044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/9203851667401744044'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2008/12/fall-2008-probability-theory-i-concepts.html' title='Fall 2008 :: Probability Theory I Concepts'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-7446582078558972810</id><published>2008-11-25T04:53:00.000Z</published><updated>2008-11-25T04:59:03.362Z</updated><title type='text'>Wasted Days</title><content type='html'>&lt;p&gt;
Today I received a questionnaire asking for total number of contributions in the following categories over the past academic year:
&lt;ol&gt;
&lt;li&gt;
Refereed Papers
&lt;/li&gt;&lt;li&gt;
Non-refereed Papers
&lt;/li&gt;&lt;li&gt;
Books
&lt;/li&gt;&lt;li&gt;
Book Chapters
&lt;/li&gt;&lt;li&gt;
Presentation at learned societies/symposia
&lt;/li&gt;&lt;li&gt;
Invention disclosures
&lt;/li&gt;&lt;li&gt;
Copyrighted Software
&lt;/li&gt;&lt;li&gt;
Patents Filed
&lt;/li&gt;&lt;li&gt;
Other Scholarly Works
&lt;/li&gt;
&lt;/ol&gt;
to each of which I responded with a big, fat zero.  It is early for resolutions, but I aim for '09 to be full of accomplishments that can be measured instead of my usual results (e.g. "Oh!  Duh!  That's what that equation means.  I should'a known that already...").
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-7446582078558972810?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/7446582078558972810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=7446582078558972810' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7446582078558972810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7446582078558972810'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2008/11/wasted-days.html' title='Wasted Days'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-2632766887459108684</id><published>2008-11-19T22:29:00.001Z</published><updated>2008-12-16T16:36:46.071Z</updated><title type='text'>A B-spline verification test case</title><content type='html'>&lt;p&gt;
&lt;strong&gt;Update (16 Dec):&lt;/strong&gt; The B-spline derivative code made it into &lt;a href="https://savannah.gnu.org/forum/forum.php?forum_id=5572"&gt;GSL's 1.12 release&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I'm &lt;a href="https://savannah.gnu.org/bugs/?24881"&gt;trying&lt;/a&gt; to get B-spline derivative capabilities added to &lt;a href="http://www.gnu.org/software/gsl/"&gt;gsl&lt;/a&gt;.  Though I could find lots of implementations of B-spline derivatives for fixed polynomial order, finding derivatives for arbitrary order B-splines turns out to be a gap in many libraries (with &lt;a href="http://www.netlib.org/pppack/"&gt;PPPACK&lt;/a&gt; being the notable exception).
&lt;/p&gt;

&lt;p&gt;
It also turns out that finding a good, concrete verification test case is a pain too.  Hopefully gsl will pick up my patch and no one will have to implement these again.  But, if you should find yourself in that situation, here's some Mathematica that provides both symbolic and numeric results for quadratic B-splines and their derivatives on a particular set of knots:
&lt;/p&gt;

&lt;a title="View A verification case for B-Spline implementations, including derivatives document on Scribd" href="http://www.scribd.com/doc/8178211/A-verification-case-for-BSpline-implementations-including-derivatives" style="margin: 12px auto 6px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block; text-decoration: underline;"&gt;A verification case for B-Spline implementations, including derivatives&lt;/a&gt; &lt;object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="doc_401890193149513" name="doc_401890193149513" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" align="middle" height="500" width="100%"&gt;  &lt;param name="movie" value="http://documents.scribd.com/ScribdViewer.swf?document_id=8178211&amp;access_key=key-16acrvo4gne87g3sdtyf&amp;page=1&amp;version=1&amp;viewMode="&gt;   &lt;param name="quality" value="high"&gt;   &lt;param name="play" value="true"&gt;  &lt;param name="loop" value="true"&gt;   &lt;param name="scale" value="showall"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="devicefont" value="false"&gt;  &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="menu" value="true"&gt;  &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="salign" value=""&gt;      &lt;embed src="http://documents.scribd.com/ScribdViewer.swf?document_id=8178211&amp;access_key=key-16acrvo4gne87g3sdtyf&amp;page=1&amp;version=1&amp;viewMode=" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#ffffff" name="doc_401890193149513_object" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle"  height="500" width="100%"&gt;&lt;/embed&gt; &lt;/object&gt; &lt;div style="margin: 6px auto 3px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block;"&gt; &lt;a href="http://www.scribd.com/upload" style="text-decoration: underline;"&gt;Get your own&lt;/a&gt; at Scribd or &lt;a href="http://www.scribd.com/browse" style="text-decoration: underline;"&gt;explore&lt;/a&gt; others:    &lt;a href="http://www.scribd.com/browse?c=21-science" style="text-decoration: underline;"&gt;Science&lt;/a&gt;      &lt;a href="http://www.scribd.com/browse?c=27-mathematics" style="text-decoration: underline;"&gt;Mathematics&lt;/a&gt;       &lt;a href="http://www.scribd.com/tag/bspline%20pppack%20gsl%20mathematica" style="text-decoration: underline;"&gt;bspline pppack gsl m&lt;/a&gt;    &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-2632766887459108684?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/2632766887459108684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=2632766887459108684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2632766887459108684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2632766887459108684'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2008/11/b-spline-verification-test-case.html' title='A B-spline verification test case'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-395913114250738940</id><published>2008-11-12T18:18:00.001Z</published><updated>2008-11-12T18:39:52.211Z</updated><title type='text'>Handcrafted memory layout: a case study in magic number mayhem</title><content type='html'>&lt;p&gt;
Observe, in the code snippet below, that no fewer than 27 subtly different aliases have been created for the same chunk of memory...
&lt;/p&gt;

&lt;p&gt;
Semantics/Syntax: The @ sign instructs the compiler to have the variables named &lt;code&gt;varsc&lt;/code&gt; and &lt;code&gt;vars&lt;/code&gt; share storage much like C's &lt;code&gt;union&lt;/code&gt; construct.  The &lt;code&gt;symbolic&lt;/code&gt; keyword acts like a macro definition.
&lt;/p&gt;

&lt;pre&gt;
    dynamic complex(64) varsc[(nx+2)/2,ny,37] 
          @ real(64)    vars[     nx+2,ny,37]   
    
    symbolic mic[i,j,l]        = varsc[i,j,l]
           , rhoc[i,j]         = varsc[i,j,4]
           , engyc[i,j]        = varsc[i,j,5]
           , drho_dxic[i,j,l]  = varsc[i,j,l+5]
           , dengy_dxic[i,j,l] = varsc[i,j,l+8]
           , dmi_dxic[i,j,l,m] = varsc[i,j,11+(l-1)*3+m]
           , rhsc[i,j,l,m]     = varsc[i,j,25+(l-1)*3+m]
           , rhs_rhoc[i,j]     = varsc[i,j,21]
      
    symbolic mi[i,j,l]         = vars[i,j,l]
           , rho[i,j]          = vars[i,j,4]
           , engy[i,j]         = vars[i,j,5]
           , drho_dxi[i,j,l]   = vars[i,j,l+5]
           , dengy_dxi[i,j,l]  = vars[i,j,l+8]
           , dmi_dxi[i,j,l,m]  = vars[i,j,11+(l-1)*3+m]
           , rhs_rho[i,j]      = vars[i,j,21]
           , dui_dxi[i,j,l,m]  = vars[i,j,11+(l-1)*3+m]
           , pres[i,j]         = vars[i,j,22]
           , tmpt[i,j]         = vars[i,j,23]
           , mu[i,j]           = vars[i,j,24]
           , tau[i,j,l,m]      = vars[i,j,25+(l-1)*3+m]
           , q1[i,j]           = vars[i,j,9]
           , q3[i,j]           = vars[i,j,11]
           , rhs[i,j,l,m]      = vars[i,j,25+(l-1)*3+m]
           , dmu_dx2[i,j]      = vars[i,j,6]
           , dtmpt_dx2[i,j]    = vars[i,j,7]
           , d2tmpt_dx22[i,j]  = vars[i,j,8]
           , d2ui_dx22[i,j,l]  = vars[i,j,8+l]
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-395913114250738940?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/395913114250738940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=395913114250738940' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/395913114250738940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/395913114250738940'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2008/11/handcrafted-memory-layout-case-study-in.html' title='Handcrafted memory layout: a case study in magic number mayhem'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-5630992519270487518</id><published>2008-11-10T00:24:00.001Z</published><updated>2008-11-10T14:44:18.364Z</updated><title type='text'>Overnight trip to Mason, TX</title><content type='html'>I just got back from an overnight motorcycle trip with my friend Paul.&lt;br /&gt;
&lt;br /&gt;
We'd wanted to travel further west than Mason, but a late start and a large helping of pie in downtown Mason caused us to rethink our plan.&amp;nbsp; Hanging out at The Old Peanut Mill Steakhouse and Fort McKavett Social Club filled most of Saturday evening.&amp;nbsp; Nice place.&lt;br /&gt;
&lt;br /&gt;
The roads that crisscross the Guadalupe river are beautiful this time of year:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/_Q-Q3vIxb_KE/SReD8Nhkv9I/AAAAAAAAAHE/VOrBgyBb6rE/s1600-h/CIMG0003.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_Q-Q3vIxb_KE/SReD8Nhkv9I/AAAAAAAAAHE/VOrBgyBb6rE/s320/CIMG0003.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
The VFR turned over 50K miles on the trip.&amp;nbsp; Paul, as always, did a great job with the route and navigating.&amp;nbsp; Both days were a mix of unused high speed sweeping turns along with some intermittent choppy surface connections across ridges and into each successive valley.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-5630992519270487518?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/5630992519270487518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=5630992519270487518' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5630992519270487518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5630992519270487518'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2008/11/overnight-trip-to-mason-tx.html' title='Overnight trip to Mason, TX'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Q-Q3vIxb_KE/SReD8Nhkv9I/AAAAAAAAAHE/VOrBgyBb6rE/s72-c/CIMG0003.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-4600376230345424097</id><published>2008-11-05T04:38:00.000Z</published><updated>2008-11-05T04:42:08.723Z</updated><title type='text'>Good?  Bad?  Over.</title><content type='html'>&lt;p&gt;
Done deal:
&lt;/p&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/_Q-Q3vIxb_KE/SREjbP0gMWI/AAAAAAAAAG8/85NcNTLJJhc/s1600-h/gall.obama.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_Q-Q3vIxb_KE/SREjbP0gMWI/AAAAAAAAAG8/85NcNTLJJhc/s320/gall.obama.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;
I've got to admit I'm pleased with the outcome.  Hopefully state and local races won't shock the system so badly that they inhibit smooth day-to-day operation.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-4600376230345424097?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/4600376230345424097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=4600376230345424097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4600376230345424097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4600376230345424097'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2008/11/good-bad-over.html' title='Good?  Bad?  Over.'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Q-Q3vIxb_KE/SREjbP0gMWI/AAAAAAAAAG8/85NcNTLJJhc/s72-c/gall.obama.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-3898467284837058678</id><published>2008-11-02T23:14:00.000Z</published><updated>2008-11-02T23:22:53.001Z</updated><title type='text'>Two more of my IBM patent applications published</title><content type='html'>&lt;p&gt;
I just noticed that these two patent applications just appeared publicly...
&lt;dl&gt;
&lt;dt&gt;
(&lt;a href="http://appft1.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&amp;Sect2=HITOFF&amp;d=PG01&amp;p=1&amp;u=%2Fnetahtml%2FPTO%2Fsrchnum.html&amp;r=1&amp;f=G&amp;l=50&amp;s1=%2220080198748%22.PGNR.&amp;OS=DN/20080198748&amp;RS=DN/20080198748"&gt;20080198748&lt;/a&gt;) System and Method for Burst Traffic Smoothing for SIP Processing Elements
&lt;/dt&gt;
&lt;dd&gt;
&lt;blockquote&gt;
A system and method for burst traffic smoothing for Session Initiation Protocol (SIP) processing elements are provided. A dispatch queue management engine determines whether a received packet is a TCP or UDP packet. If the packet is a TCP packet, the packet is automatically added to the dispatch queue. If the packet is a UDP packet, a value for a drop function f is generated and a random or pseudo-random number r is generated. If r has a predetermined relationship to f, then the UDP packet is added to the dispatch queue, otherwise the UDP packet is discarded. The value for f is based on the current dispatch queue load, the network quality, the retransmission rate, and the allowable drop rate. Thus, the determination as to whether to drop UDP packets or not is configurable by an administrator and also adaptable to the current network and dispatch queue conditions.
&lt;/blockquote&gt;
&lt;/dd&gt;
&lt;dt&gt;
(&lt;a href="http://appft1.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&amp;Sect2=HITOFF&amp;d=PG01&amp;p=1&amp;u=%2Fnetahtml%2FPTO%2Fsrchnum.html&amp;r=1&amp;f=G&amp;l=50&amp;s1=%2220080229245%22.PGNR.&amp;OS=DN/20080229245&amp;RS=DN/20080229245"&gt;20080229245&lt;/a&gt;) Multiple Sorting of Columns in a Displayed Table in a User Interactive Computer Display Interface Through Sequential Radial Menus
&lt;/dt&gt;
&lt;dd&gt;
&lt;blockquote&gt;
Multi-sorting of displayed columns representative of a tabular display is carried out by displaying a table of a plurality of columns, selectively displaying a first radial menu having a plurality of sectors, each sector representative of one of the plurality of columns, enabling a user to select one of the sectors, and responsive to a user selection of a sector for displaying a second radial menu of the plurality of sectors wherein the selected one sector is disabled, e.g. eliminated. This is continued through a sequence of subsequent radial menus until the user has selected the intended set of sequential columns for the multiple sorting.
&lt;/blockquote&gt;
&lt;/dd&gt;
&lt;/dl&gt;
The second one, because I worked with a friend whose last name starts with a W, is probably the first (and only) application where I'll ever see 'Ulerich et al.'
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-3898467284837058678?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/3898467284837058678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=3898467284837058678' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3898467284837058678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3898467284837058678'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2008/11/two-more-of-my-ibm-patent-applications.html' title='Two more of my IBM patent applications published'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-144410274121633014</id><published>2008-11-02T22:55:00.002Z</published><updated>2008-11-02T23:26:03.441Z</updated><title type='text'>Compressible DNS within PECOS</title><content type='html'>&lt;p&gt;
On Monday a bunch of DOE people are in town for the 1st annual review of the Predictive Engineering and Computational Sciences (&lt;a href="http://pecos.ices.utexas.edu/"&gt;PECOS&lt;/a&gt;)
center at UT Austin.  Because I'm partially funded through the center, another student and I put together a poster for this Monday afternoon:
&lt;/p&gt;
&lt;center&gt;
&lt;object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="doc_957162201216908" name="doc_957162201216908" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" align="middle" height="500" width="95%"&gt;  &lt;param name="movie" value="http://documents.scribd.com/ScribdViewer.swf?document_id=7700193&amp;access_key=key-2oiuuodb6zx7f8cgkan0&amp;page=&amp;version=1&amp;auto_size=true&amp;viewMode="&gt;   &lt;param name="quality" value="high"&gt;   &lt;param name="play" value="true"&gt;  &lt;param name="loop" value="true"&gt;   &lt;param name="scale" value="showall"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="devicefont" value="false"&gt;  &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="menu" value="true"&gt;  &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="salign" value=""&gt;      &lt;embed src="http://documents.scribd.com/ScribdViewer.swf?document_id=7700193&amp;access_key=key-2oiuuodb6zx7f8cgkan0&amp;page=&amp;version=1&amp;auto_size=true&amp;viewMode=" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#ffffff" name="doc_957162201216908_object" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle"  height="500" width="95%"&gt;&lt;/embed&gt; &lt;/object&gt;
&lt;/center&gt;

&lt;p&gt;
Just in case embedded Scribd hiccups, here's a &lt;a href="http://www.scribd.com/doc/7700193/Compressible-DNS-within-PECOS"&gt;link to the poster&lt;/a&gt;.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-144410274121633014?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/144410274121633014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=144410274121633014' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/144410274121633014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/144410274121633014'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2008/11/compressible-dns-within-pecos.html' title='Compressible DNS within PECOS'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-2130708898562495352</id><published>2008-09-28T14:24:00.002Z</published><updated>2008-09-28T14:28:35.936Z</updated><title type='text'>U.T. needs to ditch driving on campus</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;This past week U.T.'s &lt;a href='http://www.utexas.edu/parking/' target='_blank'&gt;Parking &amp;amp; Transportation Services&lt;/a&gt; proclaimed&lt;br/&gt;&lt;blockquote&gt;&lt;br/&gt;...Beginning Wednesday, September 24th, there will be a Travis County Sheriff&lt;br/&gt;Officer located at the intersection of Speedway and 24th Street.  This&lt;br/&gt;officer is being placed at this intersection to provide a secure crossing&lt;br/&gt;environment for pedestrians and vehicular traffic....&lt;br/&gt;&lt;br/&gt;As safety is our primary concern, all pedestrians in this area should heed&lt;br/&gt;the warning signs and utilize sidewalks for travel, including the east side&lt;br/&gt;of Speedway between Dean Keeton and 24th Street and the south side of 24th&lt;br/&gt;Street between Speedway and Inner Campus Drive.  Please do not walk in the&lt;br/&gt;street or along the closed west sidewalk area of Speedway as construction&lt;br/&gt;traffic in this area is very heavy and &lt;b&gt;pedestrians create potentially&lt;br/&gt;hazardous situations&lt;/b&gt;....&lt;br/&gt;&lt;/blockquote&gt;Having just spent two days at &lt;a href='http://www.aclfestival.com'&gt;ACL&lt;/a&gt; with tens of thousands of pedestrians, I'm pretty sure the people on foot aren't the most preventable root cause of hazardous situations. If some smelly hungover dude accidentally staggers sideways and body checks you while you cross 24th street, you'll still make it to class.  Promise.&lt;br/&gt;&lt;br/&gt;The problem is that U.T. stupidly encourages driving across 24th street.  &lt;a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;geocode=&amp;q=Speedway+%26+E+24th+St,+Austin,+TX&amp;sll=37.0625,-95.677068&amp;sspn=16.583063,79.101563&amp;ie=UTF8&amp;ll=30.288931,-97.737068&amp;spn=0.006624,0.009656&amp;z=17&amp;layer=c&amp;cbll=30.287352,-97.737073&amp;panoid=IHblie2Th9_LJTK3VOs6AA&amp;cbp=1,35.32577147288424,,0,5"&gt;Take a look.&lt;/a&gt;  Those cars?  Those aren't construction.  The traffic consists of people parking and physical plant vehicles.  The intersection becomes hazardous when impatient drivers nudge through a sea of thousands of students on foot mixed with bicycles.  Guys with hard hats driving triple diesels aren't the problem vehicles.  It's the regular &lt;a href='http://en.wiktionary.org/wiki/cager'&gt;cagers&lt;/a&gt; expecting to treat a college campus like any other street.&lt;br/&gt;&lt;br/&gt;Students should, of course, be courteous to drivers.  But cross campus traffic should be forced to travel north two blocks, across the four lane 26th street, and then two blocks south to San Jacinto.  U.T. is not an urban campus, and it should capitalize on that fact by creating pedestrian-only areas where possible.  24th and Speedway would be a great place to start.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6426345363781422461-2130708898562495352?l=agentzlerich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/2130708898562495352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6426345363781422461&amp;postID=2130708898562495352' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2130708898562495352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2130708898562495352'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2008/09/ut-needs-to-ditch-driving-on-campus.html' title='U.T. needs to ditch driving on campus'/><author><name>Rhys Ulerich</name><uri>https://profiles.google.com/106578965345401203057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-CeLb0Zg1tg4/AAAAAAAAAAI/AAAAAAAAN6M/nrRe1P6IDe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-1391300431518754871</id><published>2008-08-26T15:41:00.001Z</published><updated>2008-08-26T15:41:32.742Z</updated><title type='text'>Less than rewarding ways to spend one week</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;
I finally learned that
&lt;blockquote&gt;
MATLAB uses the apostrophe operator (&lt;tt&gt;'&lt;/tt&gt;) to perform a complex conjugate transpose, and the dot-apostrophe operator (.&lt;tt&gt;'&lt;/tt&gt;) to transpose without conjugation&lt;a href='http://www.mathworks.com/access/helpdesk/help/techdoc/math/f4-988203.html#f4-959198'&gt;¹&lt;/a&gt;.
&lt;/blockquote&gt;
despite my unshakable-yet-painfully-mistaken belief that the converse was true.
&lt;/p&gt;

&lt;p&gt;
One nice outcome— the &lt;tt&gt;.'&lt;/tt&gt; versus &lt;tt&gt;'&lt;/tt&gt; distinction caused an oscillating phase symptom that made me go through my formulation in detail.  I &lt;a href='http://en.wikipedia.org/w/index.php?title=Spectral_method&amp;amp;oldid=234355059'&gt;added the derivation&lt;/a&gt; as as a nonlinear example on  Wikipedia's &lt;a href='http://en.wikipedia.org/w/index.php?title=Spectral_method'&gt;spectral method&lt;/a&gt; page.  It will be interesting to see how long the edit survives.
&lt;/p&gt;

&lt;p&gt;
Frustratingly, MATLAB's M-script is only half a hair more predictable than PHP.  That &lt;tt&gt;ones(1); ans(1)&lt;/tt&gt; returns one but &lt;tt&gt;ones(1)(1)&lt;/tt&gt; is a syntax error boggles my mind.
&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.google
