FEI Version of the Day
snl_fei_BlockMatrixTraits.hpp
00001 /*
00002 // @HEADER
00003 // ************************************************************************
00004 //             FEI: Finite Element Interface to Linear Solvers
00005 //                  Copyright (2005) Sandia Corporation.
00006 //
00007 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, the
00008 // U.S. Government retains certain rights in this software.
00009 //
00010 // Redistribution and use in source and binary forms, with or without
00011 // modification, are permitted provided that the following conditions are
00012 // met:
00013 //
00014 // 1. Redistributions of source code must retain the above copyright
00015 // notice, this list of conditions and the following disclaimer.
00016 //
00017 // 2. Redistributions in binary form must reproduce the above copyright
00018 // notice, this list of conditions and the following disclaimer in the
00019 // documentation and/or other materials provided with the distribution.
00020 //
00021 // 3. Neither the name of the Corporation nor the names of the
00022 // contributors may be used to endorse or promote products derived from
00023 // this software without specific prior written permission.
00024 //
00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00036 //
00037 // Questions? Contact Alan Williams (william@sandia.gov) 
00038 //
00039 // ************************************************************************
00040 // @HEADER
00041 */
00042 
00043 
00044 #ifndef _snl_fei_BlockMatrixTraits_hpp_
00045 #define _snl_fei_BlockMatrixTraits_hpp_
00046 
00047 #include <fei_macros.hpp>
00048 
00049 namespace snl_fei {
00056   template<typename T>
00057   struct BlockMatrixTraits {
00058 
00060     static const char* typeName()
00061       { static const char name[] = "unsupported"; return(name); }
00062 
00065     static int putScalar(T* /*mat*/, double /*scalar*/)
00066       { return(-1); }
00067 
00070     static int getRowLength(T* /*mat*/, int /*row*/, int& /*length*/)
00071     { return(-1); }
00072 
00076     static int getPointRowLength(T* /*mat*/, int /*row*/, int& /*length*/)
00077     { return(-1); }
00078 
00102     static int copyOutRow(T* /*mat*/,
00103                           int /*row*/,
00104                           int /*numBlkCols*/,
00105                           int /*rowDim*/,
00106                           int* /*blkCols*/,
00107                           int* /*colDims*/,
00108                           double* /*coefs*/,
00109                           int /*coefsLen*/,
00110                           int& /*blkRowLength*/)
00111       { return(-1); }
00112 
00130     static int copyOutPointRow(T* /*mat*/,
00131                                int /*firstLocalOffset*/,
00132                                int /*row*/, int /*len*/,
00133                                double* /*coefs*/, int* /*indices*/,
00134                                int& /*rowLength*/)
00135     { return(-1); }
00136 
00140     static int sumIn(T* /*mat*/,
00141                      int /*blockRow*/,
00142                      int /*rowDim*/,
00143                      int /*numBlockCols*/,
00144                      const int* /*blockCols*/,
00145                      const int* /*colDims*/,
00146                      int /*LDA*/,
00147                      const double* /*values*/)
00148     { return(-1); }
00149 
00153     static int copyIn(T* /*mat*/,
00154                      int /*blockRow*/,
00155                      int /*rowDim*/,
00156                      int /*numBlockCols*/,
00157                      const int* /*blockCols*/,
00158                      const int* /*colDims*/,
00159                      int /*LDA*/,
00160                      const double* /*values*/)
00161     { return(-1); }
00162 
00165     static int sumIn(T* /*mat*/,
00166                      int /*row*/, int /*rowDim*/,
00167                      int /*numCols*/, const int* /*cols*/,
00168                      const int* /*LDAs*/,
00169                      const int* /*colDims*/,
00170                      const double* const* /*values*/)
00171     { return(-1); }
00172 
00176     static int copyIn(T* /*mat*/,
00177                       int /*row*/, int /*rowDim*/,
00178                       int /*numCols*/, const int* /*cols*/,
00179                       const int* /*LDAs*/,
00180                       const int* /*colDims*/,
00181                       const double* const* /*values*/)
00182       { return(-1); }
00183 
00187     static int globalAssemble(T* /*mat*/)
00188     { return(-1); }
00189 
00190   };//struct BlockMatrixTraits
00191 }//namespace snl_fei
00192 
00193 #endif // _snl_fei_BlockMatrixTraits_hpp_
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends