FEI Version of the Day
fei_impl_utils.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 #ifndef _fei_impl_utils_hpp_
00044 #define _fei_impl_utils_hpp_
00045 
00046 
00047 #include <fei_macros.hpp>
00048 #include <fei_fwd.hpp>
00049 #include <fei_mpi.h>
00050 
00051 #include <Teuchos_ParameterList.hpp>
00052 
00053 #include <string>
00054 #include <vector>
00055 #include <map>
00056 
00057 
00060 namespace fei {
00061 
00065 namespace impl_utils {
00066 
00074 void find_offsets(const std::vector<int>& sources,
00075                   const std::vector<int>& targets,
00076                   std::vector<int>& offsets);
00077 
00080 void pack_FillableMat(const fei::FillableMat& mat,
00081                       std::vector<int>& intdata,
00082                       std::vector<double>& doubledata);
00083 
00084 void pack_FillableMat(const fei::FillableMat& mat,
00085                       std::vector<char>& intdata);
00086 
00091 void unpack_FillableMat(const std::vector<int>& intdata,
00092                         const std::vector<double>& doubledata,
00093                         fei::FillableMat& mat,
00094                         bool clear_mat_on_entry = true,
00095                         bool overwrite_entries = true);
00096 
00097 void unpack_FillableMat(const std::vector<char>& intdata,
00098                         fei::FillableMat& mat,
00099                         bool clear_mat_on_entry = true,
00100                         bool overwrite_entries = true);
00101 
00102 void unpack_CSRMat(const std::vector<char>& buffer, fei::CSRMat& mat);
00103 
00104 void pack_indices_coefs(const std::vector<int>& indices,
00105                         const std::vector<double>& coefs,
00106                         std::vector<char>& buffer);
00107 
00108 void unpack_indices_coefs(const std::vector<char>& buffer,
00109                           std::vector<int>& indices,
00110                           std::vector<double>& coefs);
00111 
00112 void separate_BC_eqns(const fei::FillableMat& mat,
00113                     std::vector<int>& bcEqns,
00114                     std::vector<double>& bcVals);
00115 
00116 void create_col_to_row_map(const fei::FillableMat& mat,
00117                            std::multimap<int,int>& crmap);
00118 
00119 int remove_couplings(fei::FillableMat& mat);
00120 
00121 void global_union(MPI_Comm comm,
00122                   const fei::FillableMat& localMatrix,
00123                   fei::FillableMat& globalUnionMatrix);
00124 
00125 void global_union(MPI_Comm comm,
00126                   const fei::CSVec& localVec,
00127                   fei::CSVec& globalUnionVec);
00128 
00129 void translate_to_reduced_eqns(const fei::Reducer& reducer, fei::CSRMat& mat);
00130 
00131 void translate_to_reduced_eqns(const fei::Reducer& reducer, fei::CSVec& vec);
00132 
00133 void add_to_graph(const fei::CSRMat& inmat, fei::Graph& graph);
00134 
00135 void add_to_matrix(const fei::CSRMat& inmat, bool sum_into, fei::Matrix& matrix);
00136 
00137 }//namespace impl_utils
00138 }//namespace fei
00139 
00140 #endif
00141 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends