|
ConstrainedOptPack: C++ Tools for Constrained (and Unconstrained) Optimization
Version of the Day
|
00001 // @HEADER 00002 // *********************************************************************** 00003 // 00004 // Moocho: Multi-functional Object-Oriented arCHitecture for Optimization 00005 // Copyright (2003) Sandia Corporation 00006 // 00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive 00008 // license for use of this work by or on behalf of the U.S. Government. 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 Roscoe A. Bartlett (rabartl@sandia.gov) 00038 // 00039 // *********************************************************************** 00040 // @HEADER 00041 00042 #ifndef MATRIX_GEN_BANDED_H 00043 #define MATRIX_GEN_BANDED_H 00044 00045 #include "ConstrainedOptPack_Types.hpp" 00046 #include "AbstractLinAlgPack/src/AbstractLinAlgPack_MatrixOp.hpp" 00047 #include "DenseLinAlgPack_DMatrixClass.hpp" 00048 #include "Miref_count_ptr.h" 00049 #include "MiReleaseResource.h" 00050 00051 namespace ConstrainedOptPack { 00072 class MatrixGenBanded : public MatrixOp 00073 { 00074 public: 00075 00077 typedef Teuchos::RCP< 00078 MemMngPack::ReleaseResource> release_resource_ptr_t; 00079 00080 // ////////////// 00081 // Constructors 00082 00087 MatrixGenBanded( 00088 size_type m = 0 00089 ,size_type n = 0 00090 ,size_type kl = 0 00091 ,size_type ku = 0 00092 ,DMatrixSlice *MB = NULL 00093 ,const release_resource_ptr_t& MB_release_resource_ptr = NULL 00094 ); 00095 00096 // /////////////////////////// 00097 // Access representation 00098 00117 void initialize( 00118 size_type m = 0 00119 ,size_type n = 0 00120 ,size_type kl = 0 00121 ,size_type ku = 0 00122 ,DMatrixSlice *MB = NULL 00123 ,const release_resource_ptr_t& MB_release_resource_ptr = NULL 00124 ); 00125 00127 size_type kl() const; 00129 size_type ku() const; 00132 DMatrixSlice& MB(); 00134 const DMatrixSlice& MB() const; 00135 00136 // ///////////////////////////// 00137 // Overridden from MatrixOp 00138 00140 size_type rows() const; 00142 size_type cols() const; 00144 size_type nz() const; 00146 std::ostream& output(std::ostream& out) const; 00148 void Vp_StMtV(DVectorSlice* vs_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs1 00149 , const DVectorSlice& vs_rhs2, value_type beta) const; 00151 void Vp_StMtV(DVectorSlice* vs_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs1 00152 , const SpVectorSlice& sv_rhs2, value_type beta) const; 00154 void Vp_StPtMtV(DVectorSlice* vs_lhs, value_type alpha 00155 , const GenPermMatrixSlice& P_rhs1, BLAS_Cpp::Transp P_rhs1_trans 00156 , BLAS_Cpp::Transp M_rhs2_trans 00157 , const DVectorSlice& vs_rhs3, value_type beta) const; 00159 void Vp_StPtMtV(DVectorSlice* vs_lhs, value_type alpha 00160 , const GenPermMatrixSlice& P_rhs1, BLAS_Cpp::Transp P_rhs1_trans 00161 , BLAS_Cpp::Transp M_rhs2_trans 00162 , const SpVectorSlice& sv_rhs3, value_type beta) const; 00163 00164 private: 00165 00166 // ///////////////////////////// 00167 // Private data members 00168 00169 size_type m_; 00170 size_type n_; 00171 size_type kl_; 00172 size_type ku_; 00173 DMatrixSlice MB_; 00174 release_resource_ptr_t MB_release_resource_ptr_; 00175 00176 // ///////////////////////////// 00177 // Private member functions 00178 00179 void assert_initialized() const; 00180 00181 }; // end class MatrixGenBanded 00182 00183 // /////////////////////////////////////////////////////// 00184 // Inline members for MatrixGenBanded 00185 00186 inline 00187 size_type MatrixGenBanded::kl() const 00188 { 00189 return kl_; 00190 } 00191 00192 inline 00193 size_type MatrixGenBanded::ku() const 00194 { 00195 return ku_; 00196 } 00197 00198 inline 00199 DMatrixSlice& MatrixGenBanded::MB() 00200 { 00201 return MB_; 00202 } 00203 00204 inline 00205 const DMatrixSlice& MatrixGenBanded::MB() const 00206 { 00207 return MB_; 00208 } 00209 00210 } // end namespace ConstrainedOptPack 00211 00212 #endif // MATRIX_GEN_BANDED_H
1.7.6.1