<!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>obint.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:38 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>obint.h</h1><div class="fragment"><pre>00001 <font class="comment">//</font> 00002 <font class="comment">// obint.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">#ifndef _chemistry_qc_basis_obint_h</font> 00029 <font class="preprocessor"></font><font class="preprocessor">#define _chemistry_qc_basis_obint_h</font> 00030 <font class="preprocessor"></font> 00031 <font class="preprocessor">#ifdef __GNUC__</font> 00032 <font class="preprocessor"></font><font class="preprocessor">#pragma interface</font> 00033 <font class="preprocessor"></font><font class="preprocessor">#endif</font> 00034 <font class="preprocessor"></font> 00035 <font class="preprocessor">#include <util/ref/ref.h></font> 00036 <font class="preprocessor">#include <util/state/state.h></font> 00037 <font class="preprocessor">#include <math/scmat/matrix.h></font> 00038 <font class="preprocessor">#include <math/scmat/elemop.h></font> 00039 00040 <font class="preprocessor">#include <chemistry/qc/basis/gaussbas.h></font> 00041 <font class="preprocessor">#include <chemistry/qc/basis/dercent.h></font> 00042 00043 <font class="keyword">namespace </font>sc { 00044 00045 <font class="keyword">class </font>Integral; 00046 00047 <font class="comment">// //////////////////////////////////////////////////////////////////////////</font> 00048 00049 <font class="keyword">class </font>EfieldDotVectorData: <font class="keyword">public</font> RefCount 00050 { 00051 <font class="keyword">public</font>: 00052 <font class="keywordtype">double</font> position[3]; 00053 <font class="keywordtype">double</font> vector[3]; 00054 00055 <font class="keywordtype">void</font> set_position(<font class="keywordtype">double</font>*); 00056 <font class="keywordtype">void</font> set_vector(<font class="keywordtype">double</font>*); 00057 }; 00058 00059 00060 <font class="keyword">class </font>DipoleData: <font class="keyword">public</font> RefCount 00061 { 00062 <font class="keyword">public</font>: 00063 <font class="keywordtype">double</font> origin[3]; 00064 00065 DipoleData(<font class="keywordtype">double</font> *d)<font class="keyword"> </font>{origin[0]=d[0]; origin[1]=d[1]; origin[2]=d[2];} 00066 DipoleData()<font class="keyword"> </font>{origin[0]=origin[1]=origin[2]=0.0;} 00067 <font class="keywordtype">void</font> set_origin(<font class="keywordtype">double</font>*); 00068 }; 00069 00070 00071 <font class="keyword">class </font>PointChargeData: <font class="keyword">public</font> RefCount 00072 { 00073 <font class="keyword">private</font>: 00074 <font class="keywordtype">int</font> ncharges_; 00075 <font class="keyword">const</font> <font class="keywordtype">double</font> *charges_; 00076 <font class="keyword">const</font> <font class="keywordtype">double</font> *<font class="keyword">const</font>*positions_; 00077 <font class="keywordtype">double</font> *alloced_charges_; 00078 <font class="keywordtype">double</font> **alloced_positions_; 00079 00080 <font class="keyword">public</font>: 00081 <font class="comment">// If copy_data is 0, the passed positions and charges will</font> 00082 <font class="comment">// be stored (but not freed).</font> 00083 PointChargeData(<font class="keywordtype">int</font> ncharge, 00084 <font class="keyword">const</font> <font class="keywordtype">double</font> *<font class="keyword">const</font>*positions, <font class="keyword">const</font> <font class="keywordtype">double</font> *charges, 00085 <font class="keywordtype">int</font> copy_data = 0); 00086 ~PointChargeData(); 00087 00088 <font class="keywordtype">int</font> ncharges()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> ncharges_; } 00089 <font class="keyword">const</font> <font class="keywordtype">double</font> *charges()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> charges_; } 00090 <font class="keyword">const</font> <font class="keywordtype">double</font> *<font class="keyword">const</font>*positions()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> positions_; } 00091 }; 00092 00093 <a name="l00096"></a><a class="code" href="class_sc__OneBodyInt.html">00096</a> <font class="keyword">class </font>OneBodyInt : <font class="keyword">public</font> RefCount { 00097 <font class="keyword">protected</font>: 00098 <font class="comment">// this is who created me</font> 00099 Integral *integral_; 00100 00101 Ref<GaussianBasisSet> bs1_; 00102 Ref<GaussianBasisSet> bs2_; 00103 00104 <font class="keywordtype">double</font> *buffer_; 00105 00106 OneBodyInt(Integral *integral, 00107 <font class="keyword">const</font> Ref<GaussianBasisSet>&b1, 00108 <font class="keyword">const</font> Ref<GaussianBasisSet>&b2 = 0); 00109 00110 <font class="keyword">public</font>: 00111 <font class="keyword">virtual</font> ~OneBodyInt(); 00112 00114 <font class="keywordtype">int</font> <a class="code" href="class_sc__OneBodyInt.html#a1">nbasis</a>() <font class="keyword">const</font>; 00115 00117 00118 <font class="keywordtype">int</font> nbasis1() <font class="keyword">const</font>; 00119 <font class="keywordtype">int</font> nbasis2() <font class="keyword">const</font>; 00121 00123 <font class="keywordtype">int</font> <a class="code" href="class_sc__OneBodyInt.html#a4">nshell</a>() <font class="keyword">const</font>; 00124 00126 00127 <font class="keywordtype">int</font> nshell1() <font class="keyword">const</font>; 00128 <font class="keywordtype">int</font> nshell2() <font class="keyword">const</font>; 00130 00132 Ref<GaussianBasisSet> <a class="code" href="class_sc__OneBodyInt.html#a7">basis</a>(); 00133 00135 00136 Ref<GaussianBasisSet> basis1(); 00137 Ref<GaussianBasisSet> basis2(); 00139 00141 <font class="keyword">const</font> <font class="keywordtype">double</font> * <a class="code" href="class_sc__OneBodyInt.html#a10">buffer</a>() <font class="keyword">const</font>; 00142 00145 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__OneBodyInt.html#a11">compute_shell</a>(<font class="keywordtype">int</font>,<font class="keywordtype">int</font>) = 0; 00146 00149 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__OneBodyInt.html#a12">reinitialize</a>(); 00150 00151 Integral *integral()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> integral_; } 00152 }; 00153 00154 00155 00156 <font class="comment">// //////////////////////////////////////////////////////////////////////////</font> 00157 00158 <font class="keyword">class </font>ShellPairIter { 00159 <font class="keyword">private</font>: 00160 <font class="keyword">const</font> <font class="keywordtype">double</font> * buf; 00161 <font class="keywordtype">double</font> scale_; 00162 00163 <font class="keywordtype">int</font> e12; 00164 00165 <font class="keywordtype">int</font> index; 00166 00167 <font class="keywordtype">int</font> ioffset; 00168 <font class="keywordtype">int</font> joffset; 00169 00170 <font class="keywordtype">int</font> iend; 00171 <font class="keywordtype">int</font> jend; 00172 00173 <font class="keywordtype">int</font> icur; 00174 <font class="keywordtype">int</font> jcur; 00175 00176 <font class="keyword">public</font>: 00177 ShellPairIter(); 00178 ~ShellPairIter(); 00179 00180 <font class="keywordtype">void</font> init(<font class="keyword">const</font> <font class="keywordtype">double</font> * buffer, <font class="keywordtype">int</font> ishell, <font class="keywordtype">int</font> jshell, 00181 <font class="keywordtype">int</font> ioff, <font class="keywordtype">int</font> joff, <font class="keywordtype">int</font> nfunci, <font class="keywordtype">int</font> nfuncj, <font class="keywordtype">int</font> redund=0, 00182 <font class="keywordtype">double</font> scale=1.0); 00183 00184 <font class="keywordtype">void</font> start()<font class="keyword"> </font>{ icur=jcur=index=0; } 00185 <font class="keywordtype">int</font> ready()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> (icur < iend); } 00186 00187 <font class="keywordtype">void</font> next()<font class="keyword"> </font>{ 00188 <font class="keywordflow">if</font> (jcur < ((e12)?(icur):((jend)-1))) { 00189 index++; 00190 jcur++; 00191 <font class="keywordflow">return</font>; 00192 } 00193 00194 jcur=0; 00195 icur++; 00196 00197 index = icur*jend; 00198 } 00199 00200 <font class="keywordtype">int</font> current_i()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> icur; } 00201 <font class="keywordtype">int</font> current_j()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> jcur; } 00202 00203 <font class="keywordtype">int</font> i()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> icur+ioffset; } 00204 <font class="keywordtype">int</font> j()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> jcur+joffset; } 00205 00206 <font class="keywordtype">int</font> nint()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> iend*jend; } 00207 00208 <font class="keywordtype">double</font> val()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> buf[index]*scale_; } 00209 }; 00210 00211 <font class="comment">// //////////////////////////////////////////////////////////////////////////</font> 00212 00213 <font class="keyword">class </font>OneBodyIntIter : <font class="keyword">public</font> RefCount { 00214 <font class="keyword">protected</font>: 00215 Ref<OneBodyInt> obi; <font class="comment">// help me obi wan</font> 00216 ShellPairIter spi; 00217 00218 <font class="keywordtype">int</font> redund; 00219 00220 <font class="keywordtype">int</font> istart; 00221 <font class="keywordtype">int</font> jstart; 00222 00223 <font class="keywordtype">int</font> iend; 00224 <font class="keywordtype">int</font> jend; 00225 00226 <font class="keywordtype">int</font> icur; 00227 <font class="keywordtype">int</font> jcur; 00228 00229 <font class="keywordtype">int</font> ij; 00230 00231 <font class="keyword">public</font>: 00232 OneBodyIntIter(); 00233 OneBodyIntIter(<font class="keyword">const</font> Ref<OneBodyInt>&); 00234 <font class="keyword">virtual</font> ~OneBodyIntIter(); 00235 00236 <font class="keyword">virtual</font> <font class="keywordtype">void</font> start(<font class="keywordtype">int</font> ist=0, <font class="keywordtype">int</font> jst=0, <font class="keywordtype">int</font> ien=0, <font class="keywordtype">int</font> jen=0); 00237 <font class="keyword">virtual</font> <font class="keywordtype">void</font> next(); 00238 00239 <font class="keywordtype">int</font> ready()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> (icur < iend); } 00240 00241 <font class="keywordtype">int</font> ishell()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> icur; } 00242 <font class="keywordtype">int</font> jshell()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> jcur; } 00243 00244 <font class="keywordtype">int</font> ijshell()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> ij; } 00245 00246 <font class="keywordtype">int</font> redundant()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> redund; } 00247 <font class="keywordtype">void</font> set_redundant(<font class="keywordtype">int</font> i)<font class="keyword"> </font>{ redund=i; } 00248 00249 <font class="keyword">virtual</font> <font class="keywordtype">double</font> scale() <font class="keyword">const</font>; 00250 00251 Ref<OneBodyInt> one_body_int()<font class="keyword"> </font>{ <font class="keywordflow">return</font> obi; } 00252 00253 ShellPairIter& current_pair(); 00254 }; 00255 00256 00257 00258 <font class="comment">// //////////////////////////////////////////////////////////////////////////</font> 00259 00260 <font class="keyword">class </font>OneBodyIntOp: <font class="keyword">public</font> SCElementOp { 00261 <font class="keyword">protected</font>: 00262 Ref<OneBodyIntIter> iter; 00263 00264 <font class="keyword">public</font>: 00265 OneBodyIntOp(<font class="keyword">const</font> Ref<OneBodyInt>&); 00266 OneBodyIntOp(<font class="keyword">const</font> Ref<OneBodyIntIter>&); 00267 <font class="keyword">virtual</font> ~OneBodyIntOp(); 00268 00269 <font class="keywordtype">void</font> process(SCMatrixBlockIter&); 00270 <font class="keywordtype">void</font> process_spec_rect(SCMatrixRectBlock*); 00271 <font class="keywordtype">void</font> process_spec_ltri(SCMatrixLTriBlock*); 00272 <font class="keywordtype">void</font> process_spec_rectsub(SCMatrixRectSubBlock*); 00273 <font class="keywordtype">void</font> process_spec_ltrisub(SCMatrixLTriSubBlock*); 00274 00275 <font class="keywordtype">int</font> has_side_effects(); 00276 }; 00277 00278 <font class="keyword">class </font>OneBody3IntOp: <font class="keyword">public</font> SCElementOp3 { 00279 <font class="keyword">private</font>: 00280 Ref<OneBodyIntIter> iter; 00281 00282 <font class="keyword">public</font>: 00283 OneBody3IntOp(<font class="keyword">const</font> Ref<OneBodyInt>&b); 00284 OneBody3IntOp(<font class="keyword">const</font> Ref<OneBodyIntIter>&); 00285 <font class="keyword">virtual</font> ~OneBody3IntOp(); 00286 00287 <font class="keywordtype">void</font> process(SCMatrixBlockIter&, 00288 SCMatrixBlockIter&, 00289 SCMatrixBlockIter&); 00290 <font class="keywordtype">void</font> process_spec_rect(SCMatrixRectBlock*, 00291 SCMatrixRectBlock*, 00292 SCMatrixRectBlock*); 00293 <font class="keywordtype">void</font> process_spec_ltri(SCMatrixLTriBlock*, 00294 SCMatrixLTriBlock*, 00295 SCMatrixLTriBlock*); 00296 00297 <font class="keywordtype">int</font> has_side_effects(); 00298 <font class="keywordtype">int</font> has_side_effects_in_arg1(); 00299 <font class="keywordtype">int</font> has_side_effects_in_arg2(); 00300 00301 }; 00302 00303 <font class="comment">// //////////////////////////////////////////////////////////////////////////</font> 00304 <a name="l00307"></a><a class="code" href="class_sc__OneBodyDerivInt.html">00307</a> <font class="keyword">class </font>OneBodyDerivInt : <font class="keyword">public</font> RefCount { 00308 <font class="keyword">protected</font>: 00309 <font class="comment">// this is who created me</font> 00310 Integral *integral_; 00311 00312 Ref<GaussianBasisSet> bs1; 00313 Ref<GaussianBasisSet> bs2; 00314 00315 <font class="keywordtype">double</font> *buffer_; 00316 00317 <font class="keyword">public</font>: 00318 OneBodyDerivInt(Integral *, <font class="keyword">const</font> Ref<GaussianBasisSet>&b); 00319 OneBodyDerivInt(Integral *, 00320 <font class="keyword">const</font> Ref<GaussianBasisSet>&b1, 00321 <font class="keyword">const</font> Ref<GaussianBasisSet>&b2); 00322 <font class="keyword">virtual</font> ~OneBodyDerivInt(); 00323 00325 <font class="keywordtype">int</font> <a class="code" href="class_sc__OneBodyDerivInt.html#a3">nbasis</a>() <font class="keyword">const</font>; 00327 00328 <font class="keywordtype">int</font> nbasis1() <font class="keyword">const</font>; 00329 <font class="keywordtype">int</font> nbasis2() <font class="keyword">const</font>; 00331 00333 <font class="keywordtype">int</font> <a class="code" href="class_sc__OneBodyDerivInt.html#a6">nshell</a>() <font class="keyword">const</font>; 00335 00336 <font class="keywordtype">int</font> nshell1() <font class="keyword">const</font>; 00337 <font class="keywordtype">int</font> nshell2() <font class="keyword">const</font>; 00339 00341 Ref<GaussianBasisSet> <a class="code" href="class_sc__OneBodyDerivInt.html#a9">basis</a>(); 00343 00344 Ref<GaussianBasisSet> basis1(); 00345 Ref<GaussianBasisSet> basis2(); 00347 00350 <font class="keyword">const</font> <font class="keywordtype">double</font> * <a class="code" href="class_sc__OneBodyDerivInt.html#a12">buffer</a>() <font class="keyword">const</font>; 00351 00355 <font class="keyword">virtual</font> <font class="keywordtype">void</font> compute_shell(<font class="keywordtype">int</font> ish, <font class="keywordtype">int</font> jsh, DerivCenters&) = 0; 00356 <font class="keyword">virtual</font> <font class="keywordtype">void</font> compute_shell(<font class="keywordtype">int</font> ish, <font class="keywordtype">int</font> jsh, <font class="keywordtype">int</font> center) = 0; 00358 }; 00359 00360 } 00361 00362 <font class="preprocessor">#endif</font> 00363 <font class="preprocessor"></font> 00364 <font class="comment">// Local Variables:</font> 00365 <font class="comment">// mode: c++</font> 00366 <font class="comment">// c-file-style: "ETS"</font> 00367 <font class="comment">// End:</font> </div></pre><hr> <address> <small> Generated at Mon Oct 14 14:16:38 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>