#!/bin/bash -x

export TOP=`pwd`
export OBJECT_MODE=64
export BASSI=/usr/local/packages/bassi
export PETSC_DIR=/usr/local/packages/petsc-2.3.3-p8
export PETSC_ARCH=aix5.1.0.0-64
export PATH=$TOP/tau2/ibm64/bin:$PATH
export TAU_MAKEFILE=$TOP/tau2/ibm64/lib/Makefile.tau-mpi-pdt
export TAU_OPTIONS="-optVerbose -optKeepFiles -optTauSelectFile=$TOP/facets/fcutils/select.tau -optPdtGnuFortranParser -optPreProcess"


clean()
{
    rm -rf src facets facets-parallel fctests tau2 pdtoolkit txbase fmcfm bhssolver
    mkdir src
}


build_tau(){
    cd $TOP
    tar -xzf tau2.tar.gz
    tar -xzf pdtoolkit.tar.gz
    
    cd $TOP/pdtoolkit
    ./configure -arch=ibm64
    make install -j4
    
    cd $TOP/tau2
    ./configure -arch=ibm64 -mpi -pdt=$TOP/pdtoolkit -useropt=-O3
    make clean install -j
}

grab()
{
    cd $TOP
    rm -f *.tar.gz
    wget http://proton.nic.uoregon.edu/archive/bhssolver.tar.gz
    wget http://proton.nic.uoregon.edu/archive/fmcfm.tar.gz
    wget http://proton.nic.uoregon.edu/archive/facets.tar.gz
    wget http://proton.nic.uoregon.edu/archive/fctests.tar.gz
    wget http://proton.nic.uoregon.edu/archive/txbase.tar.gz
    wget proton.nic.uoregon.edu/~amorris/archive/nightly/tau2.tar.gz
    wget proton.nic.uoregon.edu/~amorris/archive/nightly/pdtoolkit.tar.gz
}

config_fmcfm()
{
    cd $TOP/src
    rm -rf fmcfm fmcfm-build
    tar xzf ../fmcfm.tar.gz
    mkdir fmcfm-build
    cd fmcfm-build
    ../fmcfm/transport/configure --prefix=$TOP/fmcfm CC=xlc_r CXX=xlC_r F77=xlf_r FC=xlf95_r CFLAGS=-g CXXFLAGS=-g FFLAGS=-g
}

build_fmcfm_tau()
{
    config_fmcfm
    # Must modify libtool
    make CC=tau_cc.sh CXX=tau_cxx.sh FC=tau_f90.sh F77=tau_f90.sh install
}

build_fmcfm()
{
    config_fmcfm
    make CXX="xlC_r -g" CC="xlc_r -g" FC="xlf95_r -g" install
}

build_bhssolver()
{
    cd $TOP/src
    rm -rf bhssolver bhssolver-build
    tar xzf ../bhssolver.tar.gz
    mkdir bhssolver-build
    cd bhssolver-build
    ../bhssolver/configure --prefix=$TOP/bhssolver --with-lapack=$BASSI/LAPACK/3.0/liblapack.a --with-superlu_seq-libdir=$BASSI/SuperLU/SuperLU_3.0_64/lib --with-superlu_seq-incdir=$BASSI/SuperLU/SuperLU_3.0_64/SRC LDFLAGS="-lessl" CC=xlc_r CXX=xlC_r F77=xlf_r FC=xlf95_r CFLAGS="-ma -qalloca -O"
    make install
}

build_txbase()
{
    cd $TOP/src
    rm -rf txbase txbase-build
    tar xzf ../txbase.tar.gz
    mkdir txbase-build
    cd txbase-build
    ../txbase/configure --prefix=$TOP/txbase CC=xlc_r CXX=xlC_r --enable-static --disable-shared --enable-debug
#    make install
    make CXX="xlC_r -g" CC="xlc_r -g" FC="xlf95_r -g" install
}

build_facets_tau()
{
    cd $TOP
    tar -xzf facets.tar.gz
    tar -xzf fctests.tar.gz
    mkdir facets-parallel
    cd facets-parallel
#    ../facets/configure  --with-bhssolver-dir=$TOP/bhssolver --with-fmcfm-dir=$TOP/fmcfm --with-fmcfm-libdir=$TOP/fmcfm/lib/xlf95_r --with-MPICXX=/usr/bin/mpCC_r --with-MPICC=/usr/bin/mpcc_r --with-petsc-dir=$PETSC_DIR --with-lapack=$BASSI/LAPACK/3.0/liblapack.a --with-superlu_seq-libdir=$BASSI/SuperLU/SuperLU_3.0_64/lib --with-superlu_seq-incdir=$BASSI/SuperLU/SuperLU_3.0_64/SRC LDFLAGS=-lessl --with-CXX=xlC_r --with-CC=xlc_r --with-EXTRA_LDFLAGS="/usr/lib/libX11.a $BASSI/hdf5/64/1.6.4/parallel/lib/libsz.a" --with-hdf5-dir=$BASSI/hdf5/64/1.6.4/parallel --with-txbase=$TOP/txbase --with-txbase-incdir=$TOP/txbase/include --with-petsc-arch=aix5.1.0.0-64  --with-tau-cxx --with-tau-makefile=$TAU_MAKEFILE
    ../facets/configure  --with-bhssolver-dir=$TOP/bhssolver --with-fmcfm-dir=$TOP/fmcfm --with-fmcfm-libdir=$TOP/fmcfm/lib/xlf95_r --with-MPICXX=/usr/bin/mpCC_r --with-MPICC=/usr/bin/mpcc_r --with-petsc-dir=$PETSC_DIR --with-lapack=$BASSI/LAPACK/3.0/liblapack.a --with-superlu_seq-libdir=$BASSI/SuperLU/SuperLU_3.0_64/lib --with-superlu_seq-incdir=$BASSI/SuperLU/SuperLU_3.0_64/SRC LDFLAGS=-lessl --with-CXX=xlC_r --with-CC=xlc_r --with-EXTRA_LDFLAGS="/usr/lib/libX11.a $BASSI/hdf5/64/1.6.4/parallel/lib/libsz.a" --with-hdf5-dir=$BASSI/hdf5/64/1.6.4/parallel --with-txbase=$TOP/txbase --with-txbase-incdir=$TOP/txbase/include --with-petsc-arch=aix5.1.0.0-64
    make CXX="mpCC_r -g" CC="mpcc_r -g" FC="mpxlf95_r -g" -j8
}

run()
{
#    cd $TOP/fctests/tests/core
    cd $TOP/fctests/tests/notregressions/old-core/core
    poe $TOP/facets-parallel/facets/facets -shared_memory no -procs 16 -i glf2.pre -o glf.out
    DATE=`date +%Y-%m-%d`
    $TOP/tau2/ibm64/bin/paraprof --pack ~/datarepo/facets/p655-$DATE.ppk
    echo "Loading Trial"
    $TOP/tau2/ibm64/bin/perfdmf_loadtrial -a "FACETS-Core" -x "FACETS-Core Regression" -n $DATE
    cp ~/datarepo/facets/p655-$DATE.ppk $DATE.ppk
    $TOP/tau2/x86_64/bin/tau_portal.py up -u facets -p taufacets -w "FACETS" -e "Core Solver" $DATE.ppk
}

go()
{
    clean
    grab
    build_tau
#    build_fmcfm_tau
    build_fmcfm
    build_bhssolver
    build_txbase
    build_facets_tau
    run
}

(time go 2>&1) 2>&1 | tee go.log


