MOOCHO (Single Doxygen Collection) Version of the Day
ConstrainedOptPack_DecompositionSystemVarReductPermStd.hpp
Go to the documentation of this file.
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 DECOMPOSITION_SYSTEM_VAR_REDUCT_PERM_STD_H
00043 #define DECOMPOSITION_SYSTEM_VAR_REDUCT_PERM_STD_H
00044 
00045 #include <stdexcept>
00046 
00047 #include "ConstrainedOptPack_DecompositionSystemVarReductPerm.hpp"
00048 #include "AbstractLinAlgPack_VectorSpace.hpp"
00049 
00050 namespace ConstrainedOptPack {
00051 
00057 class DecompositionSystemVarReductPermStd : public DecompositionSystemVarReductPerm {
00058 public:
00059 
00062 
00064   typedef Teuchos::RCP<DecompositionSystemVarReductImp>    decomp_sys_imp_ptr_t;
00066   typedef Teuchos::RCP<BasisSystemPerm>                    basis_sys_ptr_t;
00067 
00069 
00072 
00074   DecompositionSystemVarReductPermStd(
00075     const decomp_sys_imp_ptr_t&        decomp_sys_imp  = Teuchos::null
00076     ,const basis_sys_ptr_t&            basis_sys       = Teuchos::null
00077     ,bool                              basis_selected  = false
00078     ,EExplicitImplicit                 D_imp           = MAT_IMP_AUTO
00079     ,EExplicitImplicit                 Uz_imp          = MAT_IMP_AUTO
00080     );
00081 
00083   void initialize(
00084     const decomp_sys_imp_ptr_t&        decomp_sys_imp
00085     ,const basis_sys_ptr_t&            basis_sys
00086     ,bool                              basis_selected  = false
00087     ,EExplicitImplicit                 D_imp           = MAT_IMP_AUTO
00088     ,EExplicitImplicit                 Uz_imp          = MAT_IMP_AUTO
00089     );
00090 
00092 
00095 
00097   const decomp_sys_imp_ptr_t& decomp_sys_imp() const;
00099   const basis_sys_ptr_t& basis_sys() const;
00100 
00102 
00105 
00107   size_type n() const;
00109   size_type m() const;
00111   size_type r() const;
00113   Range1D equ_decomp() const;
00115   Range1D equ_undecomp() const;
00117   const VectorSpace::space_ptr_t space_range() const;
00119   const VectorSpace::space_ptr_t space_null() const;
00121   const mat_fcty_ptr_t factory_Z() const;
00123   const mat_fcty_ptr_t factory_Y() const;
00125   const mat_nonsing_fcty_ptr_t factory_R() const;
00127   const mat_fcty_ptr_t factory_Uz() const;
00129   const mat_fcty_ptr_t factory_Uy() const;
00131   void update_decomp(
00132     std::ostream          *out
00133     ,EOutputLevel         olevel
00134     ,ERunTests            test_what
00135     ,const MatrixOp       &Gc
00136     ,MatrixOp             *Z
00137     ,MatrixOp             *Y
00138     ,MatrixOpNonsing      *R
00139     ,MatrixOp             *Uz
00140     ,MatrixOp             *Uy
00141     ,EMatRelations        mat_rel
00142     ) const;
00144   void print_update_decomp(
00145     std::ostream& out, const std::string& leading_str ) const;
00146 
00148 
00151 
00153   Range1D var_indep() const;
00155   Range1D var_dep() const;
00156 
00158 
00161 
00163   const perm_fcty_ptr_t   factory_P_var() const;
00165   const perm_fcty_ptr_t   factory_P_equ() const;
00167   bool has_basis() const;
00169   void set_decomp(
00170     std::ostream          *out
00171     ,EOutputLevel         olevel
00172     ,ERunTests            test_what
00173     ,const Permutation    &P_var
00174     ,const Range1D        &var_dep
00175     ,const Permutation    *P_equ
00176     ,const Range1D        *equ_decomp
00177     ,const MatrixOp       &Gc
00178     ,MatrixOp             *Z
00179     ,MatrixOp             *Y
00180     ,MatrixOpNonsing      *R
00181     ,MatrixOp             *Uz
00182     ,MatrixOp             *Uy
00183     ,EMatRelations        mat_rel
00184     );
00186   void select_decomp(
00187     std::ostream          *out
00188     ,EOutputLevel         olevel
00189     ,ERunTests            test_what
00190     ,const Vector         *nu
00191     ,MatrixOp             *Gc
00192     ,Permutation          *P_var
00193     ,Range1D              *var_dep
00194     ,Permutation          *P_equ
00195     ,Range1D              *equ_decomp
00196     ,MatrixOp             *Z
00197     ,MatrixOp             *Y
00198     ,MatrixOpNonsing      *R
00199     ,MatrixOp             *Uz
00200     ,MatrixOp             *Uy
00201     ,EMatRelations        mat_rel
00202     );
00203 
00205 
00206 private:
00207 
00208   // /////////////////////////
00209   // Private data members
00210 
00211   bool                        basis_selected_;  // True if a basis is currently selected
00212   decomp_sys_imp_ptr_t        decomp_sys_imp_;
00213   basis_sys_ptr_t             basis_sys_;
00214 
00215   // /////////////////////////
00216   // Private member functions
00217 
00219   void assert_basis_selected() const;
00220 
00221   // Not defined and not to be called!
00222   DecompositionSystemVarReductPermStd();
00223   DecompositionSystemVarReductPermStd(const DecompositionSystemVarReductPermStd&);
00224   DecompositionSystemVarReductPermStd& operator=(const DecompositionSystemVarReductPermStd&);
00225   
00226 };  // end class DecompositionSystemVarReductPermStd
00227 
00228 // ///////////////////////////////////////
00229 // Inline members
00230 
00231 inline
00232 const DecompositionSystemVarReductPermStd::decomp_sys_imp_ptr_t&
00233 DecompositionSystemVarReductPermStd::decomp_sys_imp() const
00234 {
00235   return decomp_sys_imp_;
00236 }
00237 
00238 inline
00239 const DecompositionSystemVarReductPermStd::basis_sys_ptr_t&
00240 DecompositionSystemVarReductPermStd::basis_sys() const
00241 {
00242   return basis_sys_;
00243 }
00244 
00245 } // end namespace ConstrainedOptPack
00246 
00247 #endif // DECOMPOSITION_SYSTEM_VAR_REDUCT_PERM_STD_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines