<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><meta name="robots" content="noindex"> <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>local.h Source File</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body bgcolor="#ffffff"> <!-- Generated by Doxygen 1.2.5 on Mon Oct 14 14:16:37 2002 --> <center> <a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> <a class="qindex" href="pages.html">Related Pages</a> </center> <hr><h1>local.h</h1><div class="fragment"><pre>00001 <font class="comment">//</font> 00002 <font class="comment">// local.h</font> 00003 <font class="comment">//</font> 00004 <font class="comment">// Copyright (C) 1996 Limit Point Systems, Inc.</font> 00005 <font class="comment">//</font> 00006 <font class="comment">// Author: Curtis Janssen <cljanss@limitpt.com></font> 00007 <font class="comment">// Maintainer: LPS</font> 00008 <font class="comment">//</font> 00009 <font class="comment">// This file is part of the SC Toolkit.</font> 00010 <font class="comment">//</font> 00011 <font class="comment">// The SC Toolkit is free software; you can redistribute it and/or modify</font> 00012 <font class="comment">// it under the terms of the GNU Library General Public License as published by</font> 00013 <font class="comment">// the Free Software Foundation; either version 2, or (at your option)</font> 00014 <font class="comment">// any later version.</font> 00015 <font class="comment">//</font> 00016 <font class="comment">// The SC Toolkit is distributed in the hope that it will be useful,</font> 00017 <font class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</font> 00018 <font class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</font> 00019 <font class="comment">// GNU Library General Public License for more details.</font> 00020 <font class="comment">//</font> 00021 <font class="comment">// You should have received a copy of the GNU Library General Public License</font> 00022 <font class="comment">// along with the SC Toolkit; see the file COPYING.LIB. If not, write to</font> 00023 <font class="comment">// the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.</font> 00024 <font class="comment">//</font> 00025 <font class="comment">// The U.S. Government is granted a limited license as per AL 91-7.</font> 00026 <font class="comment">//</font> 00027 00028 <font class="preprocessor">#ifdef __GNUC__</font> 00029 <font class="preprocessor"></font><font class="preprocessor">#pragma interface</font> 00030 <font class="preprocessor"></font><font class="preprocessor">#endif</font> 00031 <font class="preprocessor"></font> 00032 <font class="preprocessor">#ifndef _math_scmat_local_h</font> 00033 <font class="preprocessor"></font><font class="preprocessor">#define _math_scmat_local_h</font> 00034 <font class="preprocessor"></font> 00035 <font class="preprocessor">#include <math/scmat/block.h></font> 00036 <font class="preprocessor">#include <math/scmat/matrix.h></font> 00037 <font class="preprocessor">#include <math/scmat/abstract.h></font> 00038 00039 <font class="keyword">namespace </font>sc { 00040 00041 <font class="keyword">class </font>LocalSCMatrixKit; 00042 <font class="keyword">class </font>LocalSCVector; 00043 <font class="keyword">class </font>LocalSCMatrix; 00044 <font class="keyword">class </font>LocalSymmSCMatrix; 00045 <font class="keyword">class </font>LocalDiagSCMatrix; 00046 <a name="l00049"></a><a class="code" href="class_sc__LocalSCMatrixKit.html">00049</a> <font class="keyword">class </font>LocalSCMatrixKit: <font class="keyword">public</font> SCMatrixKit { 00050 <font class="keyword">public</font>: 00051 LocalSCMatrixKit(); 00052 LocalSCMatrixKit(<font class="keyword">const</font> Ref<KeyVal>&); 00053 ~LocalSCMatrixKit(); 00054 SCMatrix* <a class="code" href="class_sc__LocalSCMatrixKit.html#a3">matrix</a>(<font class="keyword">const</font> RefSCDimension&,<font class="keyword">const</font> RefSCDimension&); 00055 SymmSCMatrix* symmmatrix(<font class="keyword">const</font> RefSCDimension&); 00056 DiagSCMatrix* diagmatrix(<font class="keyword">const</font> RefSCDimension&); 00057 SCVector* vector(<font class="keyword">const</font> RefSCDimension&); 00058 }; 00059 00060 <font class="keyword">class </font>LocalSCVector: <font class="keyword">public</font> SCVector { 00061 <font class="keyword">friend</font> <font class="keyword">class </font>LocalSCMatrix; 00062 <font class="keyword">friend</font> <font class="keyword">class </font>LocalSymmSCMatrix; 00063 <font class="keyword">friend</font> <font class="keyword">class </font>LocalDiagSCMatrix; 00064 <font class="keyword">private</font>: 00065 Ref<SCVectorSimpleBlock> block; 00066 00067 <font class="keywordtype">void</font> resize(<font class="keywordtype">int</font>); 00068 <font class="keyword">public</font>: 00069 LocalSCVector(); 00070 LocalSCVector(<font class="keyword">const</font> RefSCDimension&,LocalSCMatrixKit*); 00071 ~LocalSCVector(); 00072 <font class="keywordtype">void</font> assign_val(<font class="keywordtype">double</font>); 00073 <font class="keywordtype">void</font> assign_v(SCVector*); 00074 <font class="keywordtype">void</font> assign_p(<font class="keyword">const</font> <font class="keywordtype">double</font>*); 00075 00076 <font class="keywordtype">void</font> set_element(<font class="keywordtype">int</font>,<font class="keywordtype">double</font>); 00077 <font class="keywordtype">void</font> accumulate_element(<font class="keywordtype">int</font>,<font class="keywordtype">double</font>); 00078 <font class="keywordtype">double</font> get_element(<font class="keywordtype">int</font>) <font class="keyword">const</font>; 00079 <font class="keywordtype">void</font> accumulate_product_sv(SymmSCMatrix*,SCVector*); 00080 <font class="keywordtype">void</font> accumulate_product_rv(SCMatrix*,SCVector*); 00081 <font class="keywordtype">void</font> accumulate(<font class="keyword">const</font> SCVector*); 00082 <font class="keywordtype">void</font> accumulate(<font class="keyword">const</font> SCMatrix*); 00083 <font class="keywordtype">double</font> scalar_product(SCVector*); 00084 <font class="keywordtype">void</font> element_op(<font class="keyword">const</font> Ref<SCElementOp>&); 00085 <font class="keywordtype">void</font> element_op(<font class="keyword">const</font> Ref<SCElementOp2>&, 00086 SCVector*); 00087 <font class="keywordtype">void</font> element_op(<font class="keyword">const</font> Ref<SCElementOp3>&, 00088 SCVector*,SCVector*); 00089 <font class="keywordtype">void</font> vprint(<font class="keyword">const</font> <font class="keywordtype">char</font>* title=0, 00090 std::ostream& out=ExEnv::out0(), <font class="keywordtype">int</font> =10) <font class="keyword">const</font>; 00091 00092 <font class="comment">// return a pointer to the data for fast access</font> 00093 <font class="keywordtype">double</font> *get_data(); 00094 00095 Ref<SCMatrixSubblockIter> local_blocks(SCMatrixSubblockIter::Access); 00096 Ref<SCMatrixSubblockIter> all_blocks(SCMatrixSubblockIter::Access); 00097 }; 00098 00099 <font class="keyword">class </font>LocalSCMatrix: <font class="keyword">public</font> SCMatrix { 00100 <font class="keyword">friend</font> <font class="keyword">class </font>LocalSymmSCMatrix; 00101 <font class="keyword">friend</font> <font class="keyword">class </font>LocalDiagSCMatrix; 00102 <font class="keyword">friend</font> <font class="keyword">class </font>LocalSCVector; 00103 <font class="keyword">private</font>: 00104 Ref<SCMatrixRectBlock> block; 00105 <font class="keywordtype">double</font>** rows; 00106 <font class="keyword">private</font>: 00107 <font class="comment">// utility functions</font> 00108 <font class="keywordtype">int</font> compute_offset(<font class="keywordtype">int</font>,<font class="keywordtype">int</font>) <font class="keyword">const</font>; 00109 <font class="keywordtype">void</font> resize(<font class="keywordtype">int</font>,<font class="keywordtype">int</font>); 00110 <font class="keyword">public</font>: 00111 LocalSCMatrix(<font class="keyword">const</font> RefSCDimension&,<font class="keyword">const</font> RefSCDimension&, 00112 LocalSCMatrixKit*); 00113 ~LocalSCMatrix(); 00114 00115 <font class="comment">// implementations and overrides of virtual functions</font> 00116 <font class="keywordtype">void</font> assign_val(<font class="keywordtype">double</font>); 00117 <font class="keywordtype">double</font> get_element(<font class="keywordtype">int</font>,<font class="keywordtype">int</font>) <font class="keyword">const</font>; 00118 <font class="keywordtype">void</font> set_element(<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">double</font>); 00119 <font class="keywordtype">void</font> accumulate_element(<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">double</font>); 00120 SCMatrix * get_subblock(<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>); 00121 <font class="keywordtype">void</font> assign_subblock(SCMatrix*, <font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>=0,<font class="keywordtype">int</font>=0); 00122 <font class="keywordtype">void</font> accumulate_subblock(SCMatrix*, <font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>=0,<font class="keywordtype">int</font>=0); 00123 SCVector * get_row(<font class="keywordtype">int</font> i); 00124 SCVector * get_column(<font class="keywordtype">int</font> i); 00125 <font class="keywordtype">void</font> assign_row(SCVector *v, <font class="keywordtype">int</font> i); 00126 <font class="keywordtype">void</font> assign_column(SCVector *v, <font class="keywordtype">int</font> i); 00127 <font class="keywordtype">void</font> accumulate_row(SCVector *v, <font class="keywordtype">int</font> i); 00128 <font class="keywordtype">void</font> accumulate_column(SCVector *v, <font class="keywordtype">int</font> i); 00129 <font class="keywordtype">void</font> accumulate_outer_product(SCVector*,SCVector*); 00130 <font class="keywordtype">void</font> accumulate_product_rr(SCMatrix*,SCMatrix*); 00131 <font class="keywordtype">void</font> accumulate_product_rs(SCMatrix*,SymmSCMatrix*); 00132 <font class="keywordtype">void</font> accumulate_product_rd(SCMatrix*,DiagSCMatrix*); 00133 <font class="keywordtype">void</font> accumulate(<font class="keyword">const</font> SCMatrix*); 00134 <font class="keywordtype">void</font> accumulate(<font class="keyword">const</font> SymmSCMatrix*); 00135 <font class="keywordtype">void</font> accumulate(<font class="keyword">const</font> DiagSCMatrix*); 00136 <font class="keywordtype">void</font> accumulate(<font class="keyword">const</font> SCVector*); 00137 <font class="keywordtype">void</font> transpose_this(); 00138 <font class="keywordtype">double</font> invert_this(); 00139 <font class="keywordtype">void</font> svd_this(SCMatrix *U, DiagSCMatrix *sigma, SCMatrix *V); 00140 <font class="keywordtype">double</font> solve_this(SCVector*); 00141 <font class="keywordtype">double</font> determ_this(); 00142 <font class="keywordtype">double</font> trace(); 00143 <font class="keywordtype">void</font> schmidt_orthog(SymmSCMatrix*,<font class="keywordtype">int</font>); 00144 <font class="keywordtype">int</font> schmidt_orthog_tol(SymmSCMatrix*, <font class="keywordtype">double</font> tol, <font class="keywordtype">double</font> *res=0); 00145 <font class="keywordtype">void</font> element_op(<font class="keyword">const</font> Ref<SCElementOp>&); 00146 <font class="keywordtype">void</font> element_op(<font class="keyword">const</font> Ref<SCElementOp2>&, 00147 SCMatrix*); 00148 <font class="keywordtype">void</font> element_op(<font class="keyword">const</font> Ref<SCElementOp3>&, 00149 SCMatrix*,SCMatrix*); 00150 <font class="keywordtype">void</font> vprint(<font class="keyword">const</font> <font class="keywordtype">char</font>* title=0, 00151 std::ostream& out=ExEnv::out0(), <font class="keywordtype">int</font> =10) <font class="keyword">const</font>; 00152 00153 <font class="comment">// return a pointer to the data for fast access</font> 00154 <font class="keywordtype">double</font> *get_data(); 00155 <font class="keywordtype">double</font> **get_rows(); 00156 00157 Ref<SCMatrixSubblockIter> local_blocks(SCMatrixSubblockIter::Access); 00158 Ref<SCMatrixSubblockIter> all_blocks(SCMatrixSubblockIter::Access); 00159 }; 00160 00161 <font class="keyword">class </font>LocalSymmSCMatrix: <font class="keyword">public</font> SymmSCMatrix { 00162 <font class="keyword">friend</font> <font class="keyword">class </font>LocalSCMatrix; 00163 <font class="keyword">friend</font> <font class="keyword">class </font>LocalDiagSCMatrix; 00164 <font class="keyword">friend</font> <font class="keyword">class </font>LocalSCVector; 00165 <font class="keyword">private</font>: 00166 Ref<SCMatrixLTriBlock> block; 00167 <font class="keywordtype">double</font>** rows; 00168 <font class="keyword">private</font>: 00169 <font class="comment">// utility functions</font> 00170 <font class="keywordtype">int</font> compute_offset(<font class="keywordtype">int</font>,<font class="keywordtype">int</font>) <font class="keyword">const</font>; 00171 <font class="keywordtype">void</font> resize(<font class="keywordtype">int</font> n); 00172 <font class="keyword">public</font>: 00173 LocalSymmSCMatrix(<font class="keyword">const</font> RefSCDimension&, LocalSCMatrixKit*); 00174 ~LocalSymmSCMatrix(); 00175 00176 <font class="comment">// implementations and overrides of virtual functions</font> 00177 <font class="keywordtype">double</font> get_element(<font class="keywordtype">int</font>,<font class="keywordtype">int</font>) <font class="keyword">const</font>; 00178 <font class="keywordtype">void</font> set_element(<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">double</font>); 00179 <font class="keywordtype">void</font> accumulate_element(<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">double</font>); 00180 00181 SCMatrix * get_subblock(<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>); 00182 SymmSCMatrix * get_subblock(<font class="keywordtype">int</font>,<font class="keywordtype">int</font>); 00183 <font class="keywordtype">void</font> assign_subblock(SCMatrix*, <font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>); 00184 <font class="keywordtype">void</font> assign_subblock(SymmSCMatrix*, <font class="keywordtype">int</font>,<font class="keywordtype">int</font>); 00185 <font class="keywordtype">void</font> accumulate_subblock(SCMatrix*, <font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>); 00186 <font class="keywordtype">void</font> accumulate_subblock(SymmSCMatrix*, <font class="keywordtype">int</font>,<font class="keywordtype">int</font>); 00187 SCVector * get_row(<font class="keywordtype">int</font> i); 00188 <font class="keywordtype">void</font> assign_row(SCVector *v, <font class="keywordtype">int</font> i); 00189 <font class="keywordtype">void</font> accumulate_row(SCVector *v, <font class="keywordtype">int</font> i); 00190 00191 <font class="keywordtype">void</font> accumulate_product_rr(SCMatrix*,SCMatrix*); 00192 <font class="keywordtype">void</font> accumulate(<font class="keyword">const</font> SymmSCMatrix*); 00193 <font class="keywordtype">double</font> invert_this(); 00194 <font class="keywordtype">double</font> solve_this(SCVector*); 00195 <font class="keywordtype">double</font> trace(); 00196 <font class="keywordtype">double</font> determ_this(); 00197 <font class="keywordtype">void</font> gen_invert_this(); 00198 00199 <font class="keywordtype">double</font> scalar_product(SCVector*); 00200 <font class="keywordtype">void</font> diagonalize(DiagSCMatrix*,SCMatrix*); 00201 <font class="keywordtype">void</font> accumulate_symmetric_outer_product(SCVector*); 00202 <font class="keywordtype">void</font> accumulate_symmetric_product(SCMatrix*); 00203 <font class="keywordtype">void</font> accumulate_symmetric_sum(SCMatrix*); 00204 <font class="keywordtype">void</font> accumulate_transform(SCMatrix*,SymmSCMatrix*, 00205 SCMatrix::Transform = SCMatrix::NormalTransform); 00206 <font class="keywordtype">void</font> accumulate_transform(SCMatrix*,DiagSCMatrix*, 00207 SCMatrix::Transform = SCMatrix::NormalTransform); 00208 <font class="keywordtype">void</font> accumulate_transform(SymmSCMatrix*,SymmSCMatrix*); 00209 <font class="keywordtype">void</font> element_op(<font class="keyword">const</font> Ref<SCElementOp>&); 00210 <font class="keywordtype">void</font> element_op(<font class="keyword">const</font> Ref<SCElementOp2>&, 00211 SymmSCMatrix*); 00212 <font class="keywordtype">void</font> element_op(<font class="keyword">const</font> Ref<SCElementOp3>&, 00213 SymmSCMatrix*,SymmSCMatrix*); 00214 <font class="keywordtype">void</font> vprint(<font class="keyword">const</font> <font class="keywordtype">char</font>* title=0, 00215 std::ostream& out=ExEnv::out0(), <font class="keywordtype">int</font> =10) <font class="keyword">const</font>; 00216 00217 <font class="comment">// return a pointer to the data for fast access</font> 00218 <font class="keywordtype">double</font> *get_data(); 00219 <font class="keywordtype">double</font> **get_rows(); 00220 00221 Ref<SCMatrixSubblockIter> local_blocks(SCMatrixSubblockIter::Access); 00222 Ref<SCMatrixSubblockIter> all_blocks(SCMatrixSubblockIter::Access); 00223 }; 00224 00225 <font class="keyword">class </font>LocalDiagSCMatrix: <font class="keyword">public</font> DiagSCMatrix { 00226 <font class="keyword">friend</font> <font class="keyword">class </font>LocalSCMatrix; 00227 <font class="keyword">friend</font> <font class="keyword">class </font>LocalSymmSCMatrix; 00228 <font class="keyword">friend</font> <font class="keyword">class </font>LocalSCVector; 00229 <font class="keyword">private</font>: 00230 Ref<SCMatrixDiagBlock> block; 00231 <font class="keywordtype">void</font> resize(<font class="keywordtype">int</font> n); 00232 <font class="keyword">public</font>: 00233 LocalDiagSCMatrix(<font class="keyword">const</font> RefSCDimension&, LocalSCMatrixKit*); 00234 ~LocalDiagSCMatrix(); 00235 00236 <font class="comment">// implementations and overrides of virtual functions</font> 00237 <font class="keywordtype">void</font> save_data_state(StateOut&); 00238 <font class="keywordtype">double</font> get_element(<font class="keywordtype">int</font>) <font class="keyword">const</font>; 00239 <font class="keywordtype">void</font> set_element(<font class="keywordtype">int</font>,<font class="keywordtype">double</font>); 00240 <font class="keywordtype">void</font> accumulate_element(<font class="keywordtype">int</font>,<font class="keywordtype">double</font>); 00241 <font class="keywordtype">void</font> accumulate(<font class="keyword">const</font> DiagSCMatrix*); 00242 <font class="keywordtype">double</font> invert_this(); 00243 <font class="keywordtype">double</font> determ_this(); 00244 <font class="keywordtype">double</font> trace(); 00245 <font class="keywordtype">void</font> gen_invert_this(); 00246 00247 <font class="keywordtype">void</font> element_op(<font class="keyword">const</font> Ref<SCElementOp>&); 00248 <font class="keywordtype">void</font> element_op(<font class="keyword">const</font> Ref<SCElementOp2>&, 00249 DiagSCMatrix*); 00250 <font class="keywordtype">void</font> element_op(<font class="keyword">const</font> Ref<SCElementOp3>&, 00251 DiagSCMatrix*,DiagSCMatrix*); 00252 <font class="keywordtype">void</font> vprint(<font class="keyword">const</font> <font class="keywordtype">char</font>* title=0, 00253 std::ostream& out=ExEnv::out0(), <font class="keywordtype">int</font> =10) <font class="keyword">const</font>; 00254 00255 <font class="comment">// return a pointer to the data for fast access</font> 00256 <font class="keywordtype">double</font> *get_data(); 00257 00258 Ref<SCMatrixSubblockIter> local_blocks(SCMatrixSubblockIter::Access); 00259 Ref<SCMatrixSubblockIter> all_blocks(SCMatrixSubblockIter::Access); 00260 }; 00261 00262 } 00263 00264 <font class="preprocessor">#endif</font> 00265 <font class="preprocessor"></font> 00266 <font class="comment">// Local Variables:</font> 00267 <font class="comment">// mode: c++</font> 00268 <font class="comment">// c-file-style: "CLJ"</font> 00269 <font class="comment">// End:</font> </div></pre><hr> <address> <small> Generated at Mon Oct 14 14:16:37 2002 for <a href="http://aros.ca.sandia.gov/~cljanss/mpqc">MPQC</a> 2.1.2 using the documentation package <a href="http://www.stack.nl/~dimitri/doxygen/index.html">Doxygen</a> 1.2.5. </small> </address> </body> </html>