<!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>pointgrp.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>pointgrp.h</h1><div class="fragment"><pre>00001 <font class="comment">//</font> 00002 <font class="comment">// pointgrp.h</font> 00003 <font class="comment">//</font> 00004 <font class="comment">// Modifications are</font> 00005 <font class="comment">// Copyright (C) 1996 Limit Point Systems, Inc.</font> 00006 <font class="comment">//</font> 00007 <font class="comment">// Author: Edward Seidl <seidl@janed.com></font> 00008 <font class="comment">// Maintainer: LPS</font> 00009 <font class="comment">//</font> 00010 <font class="comment">// This file is part of the SC Toolkit.</font> 00011 <font class="comment">//</font> 00012 <font class="comment">// The SC Toolkit is free software; you can redistribute it and/or modify</font> 00013 <font class="comment">// it under the terms of the GNU Library General Public License as published by</font> 00014 <font class="comment">// the Free Software Foundation; either version 2, or (at your option)</font> 00015 <font class="comment">// any later version.</font> 00016 <font class="comment">//</font> 00017 <font class="comment">// The SC Toolkit is distributed in the hope that it will be useful,</font> 00018 <font class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</font> 00019 <font class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</font> 00020 <font class="comment">// GNU Library General Public License for more details.</font> 00021 <font class="comment">//</font> 00022 <font class="comment">// You should have received a copy of the GNU Library General Public License</font> 00023 <font class="comment">// along with the SC Toolkit; see the file COPYING.LIB. If not, write to</font> 00024 <font class="comment">// the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.</font> 00025 <font class="comment">//</font> 00026 <font class="comment">// The U.S. Government is granted a limited license as per AL 91-7.</font> 00027 <font class="comment">//</font> 00028 00029 <font class="comment">/* pointgrp.h -- definition of the point group classes</font> 00030 <font class="comment"> *</font> 00031 <font class="comment"> * THIS SOFTWARE FITS THE DESCRIPTION IN THE U.S. COPYRIGHT ACT OF A</font> 00032 <font class="comment"> * "UNITED STATES GOVERNMENT WORK". IT WAS WRITTEN AS A PART OF THE</font> 00033 <font class="comment"> * AUTHOR'S OFFICIAL DUTIES AS A GOVERNMENT EMPLOYEE. THIS MEANS IT</font> 00034 <font class="comment"> * CANNOT BE COPYRIGHTED. THIS SOFTWARE IS FREELY AVAILABLE TO THE</font> 00035 <font class="comment"> * PUBLIC FOR USE WITHOUT A COPYRIGHT NOTICE, AND THERE ARE NO</font> 00036 <font class="comment"> * RESTRICTIONS ON ITS USE, NOW OR SUBSEQUENTLY.</font> 00037 <font class="comment"> *</font> 00038 <font class="comment"> * Author:</font> 00039 <font class="comment"> * E. T. Seidl</font> 00040 <font class="comment"> * Bldg. 12A, Rm. 2033</font> 00041 <font class="comment"> * Computer Systems Laboratory</font> 00042 <font class="comment"> * Division of Computer Research and Technology</font> 00043 <font class="comment"> * National Institutes of Health</font> 00044 <font class="comment"> * Bethesda, Maryland 20892</font> 00045 <font class="comment"> * Internet: seidl@alw.nih.gov</font> 00046 <font class="comment"> * June, 1993</font> 00047 <font class="comment"> */</font> 00048 00049 <font class="preprocessor">#ifdef __GNUC__</font> 00050 <font class="preprocessor"></font><font class="preprocessor">#pragma interface</font> 00051 <font class="preprocessor"></font><font class="preprocessor">#endif</font> 00052 <font class="preprocessor"></font> 00053 <font class="preprocessor">#ifndef _math_symmetry_pointgrp_h</font> 00054 <font class="preprocessor"></font><font class="preprocessor">#define _math_symmetry_pointgrp_h</font> 00055 <font class="preprocessor"></font> 00056 <font class="preprocessor">#include <iostream></font> 00057 00058 <font class="preprocessor">#include <util/class/class.h></font> 00059 <font class="preprocessor">#include <util/state/state.h></font> 00060 <font class="preprocessor">#include <util/keyval/keyval.h></font> 00061 <font class="preprocessor">#include <math/scmat/vector3.h></font> 00062 00063 <font class="keyword">namespace </font>sc { 00064 00065 <font class="comment">// //////////////////////////////////////////////////////////////////</font> 00066 <a name="l00070"></a><a class="code" href="class_sc__SymmetryOperation.html">00070</a> <font class="keyword">class </font>SymmetryOperation { 00071 <font class="keyword">private</font>: 00072 <font class="keywordtype">double</font> d[3][3]; 00073 00074 <font class="keyword">public</font>: 00075 SymmetryOperation(); 00076 SymmetryOperation(<font class="keyword">const</font> SymmetryOperation &); 00077 ~SymmetryOperation(); 00078 <a name="l00080"></a><a class="code" href="class_sc__SymmetryOperation.html#a3">00080</a> <font class="keywordtype">double</font> <a class="code" href="class_sc__SymmetryOperation.html#a3">trace</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> d[0][0]+d[1][1]+d[2][2]; } 00081 <a name="l00083"></a><a class="code" href="class_sc__SymmetryOperation.html#a4">00083</a> <font class="keywordtype">double</font>* <a class="code" href="class_sc__SymmetryOperation.html#a4">operator[]</a>(<font class="keywordtype">int</font> i)<font class="keyword"> </font>{ <font class="keywordflow">return</font> d[i]; } 00084 <a name="l00086"></a><a class="code" href="class_sc__SymmetryOperation.html#a5">00086</a> <font class="keyword">const</font> <font class="keywordtype">double</font>* <a class="code" href="class_sc__SymmetryOperation.html#a4">operator[]</a>(<font class="keywordtype">int</font> i)<font class="keyword"> const </font>{ <font class="keywordflow">return</font> d[i]; } 00087 <a name="l00090"></a><a class="code" href="class_sc__SymmetryOperation.html#a6">00090</a> <font class="keywordtype">double</font>& <a class="code" href="class_sc__SymmetryOperation.html#a6">operator()</a>(<font class="keywordtype">int</font> i, <font class="keywordtype">int</font> j)<font class="keyword"> </font>{ <font class="keywordflow">return</font> d[i][j]; } 00091 <a name="l00093"></a><a class="code" href="class_sc__SymmetryOperation.html#a7">00093</a> <font class="keywordtype">double</font> <a class="code" href="class_sc__SymmetryOperation.html#a6">operator()</a>(<font class="keywordtype">int</font> i, <font class="keywordtype">int</font> j)<font class="keyword"> const </font>{ <font class="keywordflow">return</font> d[i][j]; } 00094 <a name="l00096"></a><a class="code" href="class_sc__SymmetryOperation.html#a8">00096</a> <font class="keywordtype">void</font> <a class="code" href="class_sc__SymmetryOperation.html#a8">zero</a>()<font class="keyword"> </font>{ memset(d,0,<font class="keyword">sizeof</font>(<font class="keywordtype">double</font>)*9); } 00097 00099 SymmetryOperation <a class="code" href="class_sc__SymmetryOperation.html#a9">operate</a>(<font class="keyword">const</font> SymmetryOperation& r) <font class="keyword">const</font>; 00100 00102 SymmetryOperation <a class="code" href="class_sc__SymmetryOperation.html#a10">transform</a>(<font class="keyword">const</font> SymmetryOperation& r) <font class="keyword">const</font>; 00103 <a name="l00105"></a><a class="code" href="class_sc__SymmetryOperation.html#a11">00105</a> <font class="keywordtype">void</font> <a class="code" href="class_sc__SymmetryOperation.html#a11">unit</a>()<font class="keyword"> </font>{ <a class="code" href="class_sc__SymmetryOperation.html#a8">zero</a>(); d[0][0] = d[1][1] = d[2][2] = 1.0; } 00106 <a name="l00108"></a><a class="code" href="class_sc__SymmetryOperation.html#a12">00108</a> <font class="keywordtype">void</font> <a class="code" href="class_sc__SymmetryOperation.html#a12">E</a>()<font class="keyword"> </font>{ <a class="code" href="class_sc__SymmetryOperation.html#a11">unit</a>(); } 00109 <a name="l00111"></a><a class="code" href="class_sc__SymmetryOperation.html#a13">00111</a> <font class="keywordtype">void</font> <a class="code" href="class_sc__SymmetryOperation.html#a13">i</a>()<font class="keyword"> </font>{ <a class="code" href="class_sc__SymmetryOperation.html#a8">zero</a>(); d[0][0] = d[1][1] = d[2][2] = -1.0; } 00112 <a name="l00114"></a><a class="code" href="class_sc__SymmetryOperation.html#a14">00114</a> <font class="keywordtype">void</font> <a class="code" href="class_sc__SymmetryOperation.html#a14">sigma_h</a>()<font class="keyword"> </font>{ <a class="code" href="class_sc__SymmetryOperation.html#a11">unit</a>(); d[2][2] = -1.0; } 00115 <a name="l00117"></a><a class="code" href="class_sc__SymmetryOperation.html#a15">00117</a> <font class="keywordtype">void</font> <a class="code" href="class_sc__SymmetryOperation.html#a15">sigma_xz</a>()<font class="keyword"> </font>{ <a class="code" href="class_sc__SymmetryOperation.html#a11">unit</a>(); d[1][1] = -1.0; } 00118 <a name="l00120"></a><a class="code" href="class_sc__SymmetryOperation.html#a16">00120</a> <font class="keywordtype">void</font> <a class="code" href="class_sc__SymmetryOperation.html#a16">sigma_yz</a>()<font class="keyword"> </font>{ <a class="code" href="class_sc__SymmetryOperation.html#a11">unit</a>(); d[0][0] = -1.0; } 00121 00123 <font class="keywordtype">void</font> <a class="code" href="class_sc__SymmetryOperation.html#a17">rotation</a>(<font class="keywordtype">int</font> n); 00124 <font class="keywordtype">void</font> <a class="code" href="class_sc__SymmetryOperation.html#a17">rotation</a>(<font class="keywordtype">double</font> theta); 00125 <a name="l00127"></a><a class="code" href="class_sc__SymmetryOperation.html#a19">00127</a> <font class="keywordtype">void</font> <a class="code" href="class_sc__SymmetryOperation.html#a19">c2_x</a>()<font class="keyword"> </font>{ <a class="code" href="class_sc__SymmetryOperation.html#a13">i</a>(); d[0][0] = 1.0; } 00128 <a name="l00130"></a><a class="code" href="class_sc__SymmetryOperation.html#a20">00130</a> <font class="keywordtype">void</font> <a class="code" href="class_sc__SymmetryOperation.html#a20">c2_y</a>()<font class="keyword"> </font>{ <a class="code" href="class_sc__SymmetryOperation.html#a13">i</a>(); d[1][1] = 1.0; } 00131 00132 <font class="keywordtype">void</font> transpose(); 00133 00135 <font class="keywordtype">void</font> <a class="code" href="class_sc__SymmetryOperation.html#a22">print</a>(std::ostream& =ExEnv::out0()) <font class="keyword">const</font>; 00136 }; 00137 00138 <font class="comment">// //////////////////////////////////////////////////////////////////</font> 00139 <a name="l00145"></a><a class="code" href="class_sc__SymRep.html">00145</a> <font class="keyword">class </font>SymRep { 00146 <font class="keyword">private</font>: 00147 <font class="keywordtype">int</font> n; 00148 <font class="keywordtype">double</font> d[5][5]; 00149 00150 <font class="keyword">public</font>: 00151 SymRep(<font class="keywordtype">int</font> =0); 00152 SymRep(<font class="keyword">const</font> SymmetryOperation&); 00153 ~SymRep(); 00154 00156 <a class="code" href="class_sc__SymRep.html#a3">operator SymmetryOperation</a>() <font class="keyword">const</font>; 00157 00159 <font class="keyword">inline</font> <font class="keywordtype">double</font> <a class="code" href="class_sc__SymRep.html#a4">trace</a>() <font class="keyword">const</font>; 00160 <a name="l00162"></a><a class="code" href="class_sc__SymRep.html#a5">00162</a> <font class="keywordtype">void</font> <a class="code" href="class_sc__SymRep.html#a5">set_dim</a>(<font class="keywordtype">int</font> i)<font class="keyword"> </font>{ n=i; } 00163 <a name="l00165"></a><a class="code" href="class_sc__SymRep.html#a6">00165</a> <font class="keywordtype">double</font>* <a class="code" href="class_sc__SymRep.html#a6">operator[]</a>(<font class="keywordtype">int</font> i)<font class="keyword"> </font>{ <font class="keywordflow">return</font> d[i]; } <a name="l00167"></a><a class="code" href="class_sc__SymRep.html#a7">00167</a> <font class="keyword">const</font> <font class="keywordtype">double</font>* <a class="code" href="class_sc__SymRep.html#a6">operator[]</a>(<font class="keywordtype">int</font> i)<font class="keyword"> const </font>{ <font class="keywordflow">return</font> d[i]; } 00168 <a name="l00171"></a><a class="code" href="class_sc__SymRep.html#a8">00171</a> <font class="keywordtype">double</font>& <a class="code" href="class_sc__SymRep.html#a8">operator()</a>(<font class="keywordtype">int</font> i, <font class="keywordtype">int</font> j)<font class="keyword"> </font>{ <font class="keywordflow">return</font> d[i][j]; } <a name="l00173"></a><a class="code" href="class_sc__SymRep.html#a9">00173</a> <font class="keywordtype">double</font> <a class="code" href="class_sc__SymRep.html#a8">operator()</a>(<font class="keywordtype">int</font> i, <font class="keywordtype">int</font> j)<font class="keyword"> const </font>{ <font class="keywordflow">return</font> d[i][j]; } 00174 <a name="l00176"></a><a class="code" href="class_sc__SymRep.html#a10">00176</a> <font class="keywordtype">void</font> <a class="code" href="class_sc__SymRep.html#a10">zero</a>()<font class="keyword"> </font>{ memset(d,0,<font class="keyword">sizeof</font>(<font class="keywordtype">double</font>)*25); } 00177 00179 SymRep <a class="code" href="class_sc__SymRep.html#a11">operate</a>(<font class="keyword">const</font> SymRep& r) <font class="keyword">const</font>; 00180 00182 SymRep <a class="code" href="class_sc__SymRep.html#a12">transform</a>(<font class="keyword">const</font> SymRep& r) <font class="keyword">const</font>; 00183 <a name="l00185"></a><a class="code" href="class_sc__SymRep.html#a13">00185</a> <font class="keywordtype">void</font> <a class="code" href="class_sc__SymRep.html#a13">unit</a>()<font class="keyword"> </font>{ 00186 <a class="code" href="class_sc__SymRep.html#a10">zero</a>(); d[0][0] = d[1][1] = d[2][2] = d[3][3] = d[4][4] = 1.0; 00187 } 00188 <a name="l00190"></a><a class="code" href="class_sc__SymRep.html#a14">00190</a> <font class="keywordtype">void</font> <a class="code" href="class_sc__SymRep.html#a14">E</a>()<font class="keyword"> </font>{ <a class="code" href="class_sc__SymRep.html#a13">unit</a>(); } 00191 <a name="l00193"></a><a class="code" href="class_sc__SymRep.html#a15">00193</a> <font class="keywordtype">void</font> <a class="code" href="class_sc__SymRep.html#a15">i</a>()<font class="keyword"> </font>{ <a class="code" href="class_sc__SymRep.html#a10">zero</a>(); d[0][0] = d[1][1] = d[2][2] = d[3][3] = d[4][4] = -1.0;} 00194 00196 <font class="keywordtype">void</font> <a class="code" href="class_sc__SymRep.html#a16">sigma_h</a>(); 00197 00199 <font class="keywordtype">void</font> <a class="code" href="class_sc__SymRep.html#a17">sigma_xz</a>(); 00200 00202 <font class="keywordtype">void</font> <a class="code" href="class_sc__SymRep.html#a18">sigma_yz</a>(); 00203 00205 <font class="keywordtype">void</font> <a class="code" href="class_sc__SymRep.html#a19">rotation</a>(<font class="keywordtype">int</font> n); 00206 <font class="keywordtype">void</font> <a class="code" href="class_sc__SymRep.html#a19">rotation</a>(<font class="keywordtype">double</font> theta); 00207 00209 <font class="keywordtype">void</font> <a class="code" href="class_sc__SymRep.html#a21">c2_x</a>(); 00210 00212 <font class="keywordtype">void</font> <a class="code" href="class_sc__SymRep.html#a22">c2_y</a>(); 00213 00215 <font class="keywordtype">void</font> <a class="code" href="class_sc__SymRep.html#a23">print</a>(std::ostream& =ExEnv::out0()) <font class="keyword">const</font>; 00216 }; 00217 00218 <font class="keyword">inline</font> <font class="keywordtype">double</font> <a name="l00219"></a><a class="code" href="class_sc__SymRep.html#a4">00219</a> SymRep::trace()<font class="keyword"> const</font> 00220 <font class="keyword"></font>{ 00221 <font class="keywordtype">double</font> r=0; 00222 <font class="keywordflow">for</font> (<font class="keywordtype">int</font> i=0; i < n; i++) 00223 r += d[i][i]; 00224 <font class="keywordflow">return</font> r; 00225 } 00226 00227 <font class="comment">// //////////////////////////////////////////////////////////////////</font> 00228 00229 00230 <font class="keyword">class </font>CharacterTable; 00231 <a name="l00239"></a><a class="code" href="class_sc__IrreducibleRepresentation.html">00239</a> <font class="keyword">class </font>IrreducibleRepresentation { 00240 <font class="keyword">friend</font> <font class="keyword">class </font>CharacterTable; 00241 00242 <font class="keyword">private</font>: 00243 <font class="keywordtype">int</font> g; <font class="comment">// the order of the group</font> 00244 <font class="keywordtype">int</font> degen; <font class="comment">// the degeneracy of the irrep</font> 00245 <font class="keywordtype">int</font> nrot_; <font class="comment">// the number of rotations in this irrep</font> 00246 <font class="keywordtype">int</font> ntrans_; <font class="comment">// the number of translations in this irrep</font> 00247 <font class="keywordtype">int</font> complex_; <font class="comment">// true if this irrep has a complex representation</font> 00248 <font class="keywordtype">char</font> *symb; <font class="comment">// mulliken symbol for this irrep</font> 00249 <font class="keywordtype">char</font> *csymb; <font class="comment">// mulliken symbol for this irrep w/o special characters</font> 00250 00251 SymRep *rep; <font class="comment">// representation matrices for the symops</font> 00252 00253 <font class="keyword">public</font>: 00254 <a class="code" href="class_sc__IrreducibleRepresentation.html#a2">IrreducibleRepresentation</a>(); 00255 <a class="code" href="class_sc__IrreducibleRepresentation.html#a2">IrreducibleRepresentation</a>(<font class="keyword">const</font> IrreducibleRepresentation&); 00259 <a class="code" href="class_sc__IrreducibleRepresentation.html#a2">IrreducibleRepresentation</a>(<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keyword">const</font> <font class="keywordtype">char</font>* =0); 00260 00261 ~IrreducibleRepresentation(); 00262 00263 IrreducibleRepresentation& operator=(<font class="keyword">const</font> IrreducibleRepresentation&); 00264 00266 <font class="keywordtype">void</font> <a class="code" href="class_sc__IrreducibleRepresentation.html#a5">init</a>(<font class="keywordtype">int</font> =0, <font class="keywordtype">int</font> =0, <font class="keyword">const</font> <font class="keywordtype">char</font>* =0, <font class="keyword">const</font> <font class="keywordtype">char</font>* =0); 00267 <a name="l00269"></a><a class="code" href="class_sc__IrreducibleRepresentation.html#a6">00269</a> <font class="keywordtype">int</font> <a class="code" href="class_sc__IrreducibleRepresentation.html#a6">order</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> g; } 00270 <a name="l00272"></a><a class="code" href="class_sc__IrreducibleRepresentation.html#a7">00272</a> <font class="keywordtype">int</font> <a class="code" href="class_sc__IrreducibleRepresentation.html#a7">degeneracy</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> degen; } 00273 <a name="l00275"></a><a class="code" href="class_sc__IrreducibleRepresentation.html#a8">00275</a> <font class="keywordtype">int</font> <a class="code" href="class_sc__IrreducibleRepresentation.html#a8">complex</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> complex_; } 00276 <a name="l00278"></a><a class="code" href="class_sc__IrreducibleRepresentation.html#a9">00278</a> <font class="keywordtype">int</font> <a class="code" href="class_sc__IrreducibleRepresentation.html#a9">nproj</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> degen*degen; } 00279 <a name="l00281"></a><a class="code" href="class_sc__IrreducibleRepresentation.html#a10">00281</a> <font class="keywordtype">int</font> <a class="code" href="class_sc__IrreducibleRepresentation.html#a10">nrot</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> nrot_; } 00282 <a name="l00284"></a><a class="code" href="class_sc__IrreducibleRepresentation.html#a11">00284</a> <font class="keywordtype">int</font> <a class="code" href="class_sc__IrreducibleRepresentation.html#a11">ntrans</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> ntrans_; } 00285 <a name="l00287"></a><a class="code" href="class_sc__IrreducibleRepresentation.html#a12">00287</a> <font class="keyword">const</font> <font class="keywordtype">char</font> * <a class="code" href="class_sc__IrreducibleRepresentation.html#a12">symbol</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> symb; } 00288 <a name="l00292"></a><a class="code" href="class_sc__IrreducibleRepresentation.html#a13">00292</a> <font class="keyword">const</font> <font class="keywordtype">char</font> * <a class="code" href="class_sc__IrreducibleRepresentation.html#a13">symbol_ns</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> (csymb?csymb:symb); } 00293 <a name="l00296"></a><a class="code" href="class_sc__IrreducibleRepresentation.html#a14">00296</a> <font class="keywordtype">double</font> <a class="code" href="class_sc__IrreducibleRepresentation.html#a14">character</a>(<font class="keywordtype">int</font> i)<font class="keyword"> const </font>{ 00297 <font class="keywordflow">return</font> complex_ ? 0.5*rep[i].trace() : rep[i].trace(); 00298 } 00299 <a name="l00301"></a><a class="code" href="class_sc__IrreducibleRepresentation.html#a15">00301</a> <font class="keywordtype">double</font> <a class="code" href="class_sc__IrreducibleRepresentation.html#a15">p</a>(<font class="keywordtype">int</font> x1, <font class="keywordtype">int</font> x2, <font class="keywordtype">int</font> i)<font class="keyword"> const </font>{ <font class="keywordflow">return</font> rep[i](x1,x2); } 00302 <a name="l00305"></a><a class="code" href="class_sc__IrreducibleRepresentation.html#a16">00305</a> <font class="keywordtype">double</font> <a class="code" href="class_sc__IrreducibleRepresentation.html#a15">p</a>(<font class="keywordtype">int</font> d, <font class="keywordtype">int</font> i)<font class="keyword"> const </font>{ 00306 <font class="keywordtype">int</font> dc=d/degen; <font class="keywordtype">int</font> dr=d%degen; 00307 <font class="keywordflow">return</font> rep[i](dr,dc); 00308 } 00309 00313 <font class="keywordtype">void</font> <a class="code" href="class_sc__IrreducibleRepresentation.html#a17">print</a>(std::ostream& =ExEnv::out0()) <font class="keyword">const</font>; 00314 }; 00315 00316 <font class="comment">// ///////////////////////////////////////////////////////////</font> <a name="l00325"></a><a class="code" href="class_sc__CharacterTable.html">00325</a> <font class="comment"></font><font class="keyword">class </font>CharacterTable { 00326 <font class="keyword">public</font>: 00327 <font class="keyword">enum</font> pgroups {C1, CS, CI, CN, CNV, CNH, DN, DND, DNH, SN, T, TH, TD, O, 00328 OH, I, IH}; 00329 00330 <font class="keyword">private</font>: 00331 <font class="keywordtype">int</font> g; <font class="comment">// the order of the point group</font> 00332 <font class="keywordtype">int</font> nt; <font class="comment">// order of the princ rot axis</font> 00333 pgroups pg; <font class="comment">// the class of the point group</font> 00334 <font class="keywordtype">int</font> nirrep_; <font class="comment">// the number of irreps in this pg</font> 00335 IrreducibleRepresentation *gamma_; <font class="comment">// an array of irreps</font> 00336 SymmetryOperation *symop; <font class="comment">// the matrices describing sym ops</font> 00337 <font class="keywordtype">int</font> *_inv; <font class="comment">// index of the inverse symop</font> 00338 <font class="keywordtype">char</font> *symb; <font class="comment">// the Schoenflies symbol for the pg</font> 00339 00341 <font class="keywordtype">int</font> parse_symbol(); 00343 <font class="keywordtype">int</font> make_table(); 00344 00345 <font class="comment">// these create the character tables for the cubic groups</font> 00346 <font class="keywordtype">void</font> t(); 00347 <font class="keywordtype">void</font> th(); 00348 <font class="keywordtype">void</font> td(); 00349 <font class="keywordtype">void</font> o(); 00350 <font class="keywordtype">void</font> oh(); 00351 <font class="keywordtype">void</font> i(); 00352 <font class="keywordtype">void</font> ih(); 00353 00354 <font class="keyword">public</font>: 00355 <a class="code" href="class_sc__CharacterTable.html#a1">CharacterTable</a>(); 00358 <a class="code" href="class_sc__CharacterTable.html#a1">CharacterTable</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>*); 00362 <a class="code" href="class_sc__CharacterTable.html#a1">CharacterTable</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keyword">const</font> SymmetryOperation&); 00363 00364 <a class="code" href="class_sc__CharacterTable.html#a1">CharacterTable</a>(<font class="keyword">const</font> CharacterTable&); 00365 ~CharacterTable(); 00366 00367 CharacterTable& operator=(<font class="keyword">const</font> CharacterTable&); 00368 <a name="l00370"></a><a class="code" href="class_sc__CharacterTable.html#a6">00370</a> <font class="keywordtype">int</font> <a class="code" href="class_sc__CharacterTable.html#a6">nirrep</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> nirrep_; } <a name="l00372"></a><a class="code" href="class_sc__CharacterTable.html#a7">00372</a> <font class="keywordtype">int</font> <a class="code" href="class_sc__CharacterTable.html#a7">order</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> g; } <a name="l00374"></a><a class="code" href="class_sc__CharacterTable.html#a8">00374</a> <font class="keyword">const</font> <font class="keywordtype">char</font> * <a class="code" href="class_sc__CharacterTable.html#a8">symbol</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> symb; } <a name="l00376"></a><a class="code" href="class_sc__CharacterTable.html#a9">00376</a> IrreducibleRepresentation& <a class="code" href="class_sc__CharacterTable.html#a9">gamma</a>(<font class="keywordtype">int</font> i)<font class="keyword"> </font>{ <font class="keywordflow">return</font> gamma_[i]; } <a name="l00378"></a><a class="code" href="class_sc__CharacterTable.html#a10">00378</a> SymmetryOperation& <a class="code" href="class_sc__CharacterTable.html#a10">symm_operation</a>(<font class="keywordtype">int</font> i)<font class="keyword"> </font>{ <font class="keywordflow">return</font> symop[i]; } 00379 <a name="l00383"></a><a class="code" href="class_sc__CharacterTable.html#a11">00383</a> <font class="keywordtype">int</font> <a class="code" href="class_sc__CharacterTable.html#a11">complex</a>()<font class="keyword"> const </font>{ 00384 <font class="keywordflow">if</font> (pg==CN || pg==SN || pg==CNH || pg==T || pg==TH) 00385 <font class="keywordflow">return</font> 1; 00386 <font class="keywordflow">return</font> 0; 00387 } 00388 <a name="l00390"></a><a class="code" href="class_sc__CharacterTable.html#a12">00390</a> <font class="keywordtype">int</font> <a class="code" href="class_sc__CharacterTable.html#a12">inverse</a>(<font class="keywordtype">int</font> i)<font class="keyword"> const </font>{ <font class="keywordflow">return</font> _inv[i]; } 00391 00392 <font class="keywordtype">int</font> ncomp()<font class="keyword"> const </font>{ 00393 <font class="keywordtype">int</font> ret=0; 00394 <font class="keywordflow">for</font> (<font class="keywordtype">int</font> i=0; i < nirrep_; i++) { 00395 <font class="keywordtype">int</font> nc = (gamma_[i].complex()) ? 1 : gamma_[i].degen; 00396 ret += nc; 00397 } 00398 <font class="keywordflow">return</font> ret; 00399 } 00400 <a name="l00402"></a><a class="code" href="class_sc__CharacterTable.html#a14">00402</a> <font class="keywordtype">int</font> <a class="code" href="class_sc__CharacterTable.html#a14">which_irrep</a>(<font class="keywordtype">int</font> i)<font class="keyword"> </font>{ 00403 <font class="keywordflow">for</font> (<font class="keywordtype">int</font> ir=0, cn=0; ir < nirrep_; ir++) { 00404 <font class="keywordtype">int</font> nc = (gamma_[ir].complex()) ? 1 : gamma_[ir].degen; 00405 <font class="keywordflow">for</font> (<font class="keywordtype">int</font> c=0; c < nc; c++,cn++) 00406 <font class="keywordflow">if</font> (cn==i) 00407 <font class="keywordflow">return</font> ir; 00408 } 00409 <font class="keywordflow">return</font> -1; 00410 } 00411 <a name="l00413"></a><a class="code" href="class_sc__CharacterTable.html#a15">00413</a> <font class="keywordtype">int</font> <a class="code" href="class_sc__CharacterTable.html#a15">which_comp</a>(<font class="keywordtype">int</font> i)<font class="keyword"> </font>{ 00414 <font class="keywordflow">for</font> (<font class="keywordtype">int</font> ir=0, cn=0; ir < nirrep_; ir++) { 00415 <font class="keywordtype">int</font> nc = (gamma_[ir].complex()) ? 1 : gamma_[ir].degen; 00416 <font class="keywordflow">for</font> (<font class="keywordtype">int</font> c=0; c < nc; c++,cn++) 00417 <font class="keywordflow">if</font> (cn==i) 00418 <font class="keywordflow">return</font> c; 00419 } 00420 <font class="keywordflow">return</font> -1; 00421 } 00422 00424 <font class="keywordtype">void</font> <a class="code" href="class_sc__CharacterTable.html#a16">print</a>(std::ostream& =ExEnv::out0()) <font class="keyword">const</font>; 00425 }; 00426 00427 <font class="comment">// ///////////////////////////////////////////////////////////</font> 00428 <a name="l00436"></a><a class="code" href="class_sc__PointGroup.html">00436</a> <font class="keyword">class </font>PointGroup: <font class="keyword">public</font> SavableState { 00437 <font class="keyword">private</font>: 00438 <font class="keywordtype">char</font> *symb; 00439 SymmetryOperation frame; 00440 SCVector3 origin_; 00441 00442 <font class="keyword">public</font>: 00443 <a class="code" href="class_sc__PointGroup.html#a1">PointGroup</a>(); 00446 <a class="code" href="class_sc__PointGroup.html#a1">PointGroup</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>*); 00449 <a class="code" href="class_sc__PointGroup.html#a1">PointGroup</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>*,SymmetryOperation&); 00452 <a class="code" href="class_sc__PointGroup.html#a1">PointGroup</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>*,SymmetryOperation&,<font class="keyword">const</font> SCVector3&); 00487 <a class="code" href="class_sc__PointGroup.html#a1">PointGroup</a>(<font class="keyword">const</font> Ref<KeyVal>&); 00488 00489 <a class="code" href="class_sc__PointGroup.html#a1">PointGroup</a>(StateIn&); 00490 <a class="code" href="class_sc__PointGroup.html#a1">PointGroup</a>(<font class="keyword">const</font> PointGroup&); 00491 <a class="code" href="class_sc__PointGroup.html#a1">PointGroup</a>(<font class="keyword">const</font> Ref<PointGroup>&); 00492 ~PointGroup(); 00493 00494 PointGroup& operator=(<font class="keyword">const</font> PointGroup&); 00495 00497 <font class="keywordtype">int</font> <a class="code" href="class_sc__PointGroup.html#a10">equiv</a>(<font class="keyword">const</font> Ref<PointGroup> &, <font class="keywordtype">double</font> tol = 1.0e-6) <font class="keyword">const</font>; 00498 00500 CharacterTable <a class="code" href="class_sc__PointGroup.html#a11">char_table</a>() <font class="keyword">const</font>; <a name="l00502"></a><a class="code" href="class_sc__PointGroup.html#a12">00502</a> <font class="keyword">const</font> <font class="keywordtype">char</font> * <a class="code" href="class_sc__PointGroup.html#a12">symbol</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> symb; } <a name="l00504"></a><a class="code" href="class_sc__PointGroup.html#a13">00504</a> SymmetryOperation& <a class="code" href="class_sc__PointGroup.html#a13">symm_frame</a>()<font class="keyword"> </font>{ <font class="keywordflow">return</font> frame; } <a name="l00506"></a><a class="code" href="class_sc__PointGroup.html#a14">00506</a> <font class="keyword">const</font> SymmetryOperation& <a class="code" href="class_sc__PointGroup.html#a13">symm_frame</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> frame; } <a name="l00508"></a><a class="code" href="class_sc__PointGroup.html#a15">00508</a> SCVector3& <a class="code" href="class_sc__PointGroup.html#a15">origin</a>()<font class="keyword"> </font>{ <font class="keywordflow">return</font> origin_; } 00509 <font class="keyword">const</font> SCVector3& <a class="code" href="class_sc__PointGroup.html#a15">origin</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> origin_; } 00510 00512 <font class="keywordtype">void</font> <a class="code" href="class_sc__PointGroup.html#a17">set_symbol</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>*); 00513 00514 <font class="keywordtype">void</font> <a class="code" href="class_sc__PointGroup.html#a18">save_data_state</a>(StateOut& so); 00515 00516 <font class="keywordtype">void</font> <a class="code" href="class_sc__PointGroup.html#a19">print</a>(std::ostream&o=ExEnv::out0()) <font class="keyword">const</font>; 00517 }; 00518 00519 } 00520 00521 <font class="preprocessor">#endif</font> 00522 <font class="preprocessor"></font> 00523 <font class="comment">// Local Variables:</font> 00524 <font class="comment">// mode: c++</font> 00525 <font class="comment">// c-file-style: "ETS"</font> 00526 <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>