<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>MPQC: pointgrp.h Source File</title> <link href="tabs.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.5.9 --> <div class="navigation" id="top"> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> </ul> </div> <div class="tabs"> <ul> <li><a href="files.html"><span>File List</span></a></li> </ul> </div> <h1>pointgrp.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//</span> <a name="l00002"></a>00002 <span class="comment">// pointgrp.h</span> <a name="l00003"></a>00003 <span class="comment">//</span> <a name="l00004"></a>00004 <span class="comment">// Modifications are</span> <a name="l00005"></a>00005 <span class="comment">// Copyright (C) 1996 Limit Point Systems, Inc.</span> <a name="l00006"></a>00006 <span class="comment">//</span> <a name="l00007"></a>00007 <span class="comment">// Author: Edward Seidl <seidl@janed.com></span> <a name="l00008"></a>00008 <span class="comment">// Maintainer: LPS</span> <a name="l00009"></a>00009 <span class="comment">//</span> <a name="l00010"></a>00010 <span class="comment">// This file is part of the SC Toolkit.</span> <a name="l00011"></a>00011 <span class="comment">//</span> <a name="l00012"></a>00012 <span class="comment">// The SC Toolkit is free software; you can redistribute it and/or modify</span> <a name="l00013"></a>00013 <span class="comment">// it under the terms of the GNU Library General Public License as published by</span> <a name="l00014"></a>00014 <span class="comment">// the Free Software Foundation; either version 2, or (at your option)</span> <a name="l00015"></a>00015 <span class="comment">// any later version.</span> <a name="l00016"></a>00016 <span class="comment">//</span> <a name="l00017"></a>00017 <span class="comment">// The SC Toolkit is distributed in the hope that it will be useful,</span> <a name="l00018"></a>00018 <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span> <a name="l00019"></a>00019 <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> <a name="l00020"></a>00020 <span class="comment">// GNU Library General Public License for more details.</span> <a name="l00021"></a>00021 <span class="comment">//</span> <a name="l00022"></a>00022 <span class="comment">// You should have received a copy of the GNU Library General Public License</span> <a name="l00023"></a>00023 <span class="comment">// along with the SC Toolkit; see the file COPYING.LIB. If not, write to</span> <a name="l00024"></a>00024 <span class="comment">// the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.</span> <a name="l00025"></a>00025 <span class="comment">//</span> <a name="l00026"></a>00026 <span class="comment">// The U.S. Government is granted a limited license as per AL 91-7.</span> <a name="l00027"></a>00027 <span class="comment">//</span> <a name="l00028"></a>00028 <a name="l00029"></a>00029 <span class="comment">/* pointgrp.h -- definition of the point group classes</span> <a name="l00030"></a>00030 <span class="comment"> *</span> <a name="l00031"></a>00031 <span class="comment"> * THIS SOFTWARE FITS THE DESCRIPTION IN THE U.S. COPYRIGHT ACT OF A</span> <a name="l00032"></a>00032 <span class="comment"> * "UNITED STATES GOVERNMENT WORK". IT WAS WRITTEN AS A PART OF THE</span> <a name="l00033"></a>00033 <span class="comment"> * AUTHOR'S OFFICIAL DUTIES AS A GOVERNMENT EMPLOYEE. THIS MEANS IT</span> <a name="l00034"></a>00034 <span class="comment"> * CANNOT BE COPYRIGHTED. THIS SOFTWARE IS FREELY AVAILABLE TO THE</span> <a name="l00035"></a>00035 <span class="comment"> * PUBLIC FOR USE WITHOUT A COPYRIGHT NOTICE, AND THERE ARE NO</span> <a name="l00036"></a>00036 <span class="comment"> * RESTRICTIONS ON ITS USE, NOW OR SUBSEQUENTLY.</span> <a name="l00037"></a>00037 <span class="comment"> *</span> <a name="l00038"></a>00038 <span class="comment"> * Author:</span> <a name="l00039"></a>00039 <span class="comment"> * E. T. Seidl</span> <a name="l00040"></a>00040 <span class="comment"> * Bldg. 12A, Rm. 2033</span> <a name="l00041"></a>00041 <span class="comment"> * Computer Systems Laboratory</span> <a name="l00042"></a>00042 <span class="comment"> * Division of Computer Research and Technology</span> <a name="l00043"></a>00043 <span class="comment"> * National Institutes of Health</span> <a name="l00044"></a>00044 <span class="comment"> * Bethesda, Maryland 20892</span> <a name="l00045"></a>00045 <span class="comment"> * Internet: seidl@alw.nih.gov</span> <a name="l00046"></a>00046 <span class="comment"> * June, 1993</span> <a name="l00047"></a>00047 <span class="comment"> */</span> <a name="l00048"></a>00048 <a name="l00049"></a>00049 <span class="preprocessor">#ifdef __GNUC__</span> <a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#pragma interface</span> <a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#endif</span> <a name="l00052"></a>00052 <span class="preprocessor"></span> <a name="l00053"></a>00053 <span class="preprocessor">#ifndef _math_symmetry_pointgrp_h</span> <a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#define _math_symmetry_pointgrp_h</span> <a name="l00055"></a>00055 <span class="preprocessor"></span> <a name="l00056"></a>00056 <span class="preprocessor">#include <iostream></span> <a name="l00057"></a>00057 <a name="l00058"></a>00058 <span class="preprocessor">#include <util/class/class.h></span> <a name="l00059"></a>00059 <span class="preprocessor">#include <util/state/state.h></span> <a name="l00060"></a>00060 <span class="preprocessor">#include <util/keyval/keyval.h></span> <a name="l00061"></a>00061 <span class="preprocessor">#include <math/scmat/vector3.h></span> <a name="l00062"></a>00062 <a name="l00063"></a>00063 <span class="keyword">namespace </span>sc { <a name="l00064"></a>00064 <a name="l00065"></a>00065 <span class="comment">// //////////////////////////////////////////////////////////////////</span> <a name="l00066"></a>00066 <a name="l00070"></a><a class="code" href="classsc_1_1SymmetryOperation.html">00070</a> <span class="keyword">class </span><a class="code" href="classsc_1_1SymmetryOperation.html" title="The SymmetryOperation class provides a 3 by 3 matrix representation of a symmetry...">SymmetryOperation</a> { <a name="l00071"></a>00071 <span class="keyword">private</span>: <a name="l00072"></a>00072 <span class="keywordtype">double</span> d[3][3]; <a name="l00073"></a>00073 <a name="l00074"></a>00074 <span class="keyword">public</span>: <a name="l00075"></a>00075 <a class="code" href="classsc_1_1SymmetryOperation.html" title="The SymmetryOperation class provides a 3 by 3 matrix representation of a symmetry...">SymmetryOperation</a>(); <a name="l00076"></a>00076 <a class="code" href="classsc_1_1SymmetryOperation.html" title="The SymmetryOperation class provides a 3 by 3 matrix representation of a symmetry...">SymmetryOperation</a>(<span class="keyword">const</span> <a class="code" href="classsc_1_1SymmetryOperation.html" title="The SymmetryOperation class provides a 3 by 3 matrix representation of a symmetry...">SymmetryOperation</a> &); <a name="l00077"></a>00077 ~<a class="code" href="classsc_1_1SymmetryOperation.html" title="The SymmetryOperation class provides a 3 by 3 matrix representation of a symmetry...">SymmetryOperation</a>(); <a name="l00078"></a>00078 <a name="l00080"></a><a class="code" href="classsc_1_1SymmetryOperation.html#4fbcc898650eff6123773c3c3a4c2702">00080</a> <span class="keywordtype">double</span> <a class="code" href="classsc_1_1SymmetryOperation.html#4fbcc898650eff6123773c3c3a4c2702" title="returns the trace of the transformation matrix">trace</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> d[0][0]+d[1][1]+d[2][2]; } <a name="l00081"></a>00081 <a name="l00083"></a><a class="code" href="classsc_1_1SymmetryOperation.html#4e766fbea63641c4144ade1aee9c2f04">00083</a> <span class="keywordtype">double</span>* <a class="code" href="classsc_1_1SymmetryOperation.html#4e766fbea63641c4144ade1aee9c2f04" title="returns the i&#39;th row of the transformation matrix">operator[]</a>(<span class="keywordtype">int</span> <a class="code" href="classsc_1_1SymmetryOperation.html#d20d1d08a32c22b58cfebe3bcd09870b" title="Set equal to an inversion.">i</a>) { <span class="keywordflow">return</span> d[i]; } <a name="l00084"></a>00084 <a name="l00086"></a><a class="code" href="classsc_1_1SymmetryOperation.html#bffe1cfb4a8fde2531294376c801fd67">00086</a> <span class="keyword">const</span> <span class="keywordtype">double</span>* <a class="code" href="classsc_1_1SymmetryOperation.html#bffe1cfb4a8fde2531294376c801fd67" title="const version of the above">operator[]</a>(<span class="keywordtype">int</span> <a class="code" href="classsc_1_1SymmetryOperation.html#d20d1d08a32c22b58cfebe3bcd09870b" title="Set equal to an inversion.">i</a>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> d[i]; } <a name="l00087"></a>00087 <a name="l00090"></a><a class="code" href="classsc_1_1SymmetryOperation.html#112c2f77471307d4ecc6d18c01588532">00090</a> <span class="keywordtype">double</span>& <a class="code" href="classsc_1_1SymmetryOperation.html#112c2f77471307d4ecc6d18c01588532" title="returns a reference to the (i,j)th element of the transformation matrix">operator()</a>(<span class="keywordtype">int</span> <a class="code" href="classsc_1_1SymmetryOperation.html#d20d1d08a32c22b58cfebe3bcd09870b" title="Set equal to an inversion.">i</a>, <span class="keywordtype">int</span> j) { <span class="keywordflow">return</span> d[i][j]; } <a name="l00091"></a>00091 <a name="l00093"></a><a class="code" href="classsc_1_1SymmetryOperation.html#4ec9c64473255185381ce1a3113c996e">00093</a> <span class="keywordtype">double</span> <a class="code" href="classsc_1_1SymmetryOperation.html#4ec9c64473255185381ce1a3113c996e" title="const version of the above">operator()</a>(<span class="keywordtype">int</span> <a class="code" href="classsc_1_1SymmetryOperation.html#d20d1d08a32c22b58cfebe3bcd09870b" title="Set equal to an inversion.">i</a>, <span class="keywordtype">int</span> j)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> d[i][j]; } <a name="l00094"></a>00094 <a name="l00096"></a><a class="code" href="classsc_1_1SymmetryOperation.html#b1c07e8f7683e4ce554a495d42be3875">00096</a> <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymmetryOperation.html#b1c07e8f7683e4ce554a495d42be3875" title="zero out the symop">zero</a>() { memset(d,0,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*9); } <a name="l00097"></a>00097 <a name="l00099"></a>00099 <a class="code" href="classsc_1_1SymmetryOperation.html" title="The SymmetryOperation class provides a 3 by 3 matrix representation of a symmetry...">SymmetryOperation</a> <a class="code" href="classsc_1_1SymmetryOperation.html#0ce5f167b12563325bb16b5d164cb197" title="This operates on this with r (i.e. return r * this).">operate</a>(<span class="keyword">const</span> <a class="code" href="classsc_1_1SymmetryOperation.html" title="The SymmetryOperation class provides a 3 by 3 matrix representation of a symmetry...">SymmetryOperation</a>& r) <span class="keyword">const</span>; <a name="l00100"></a>00100 <a name="l00102"></a>00102 <a class="code" href="classsc_1_1SymmetryOperation.html" title="The SymmetryOperation class provides a 3 by 3 matrix representation of a symmetry...">SymmetryOperation</a> <a class="code" href="classsc_1_1SymmetryOperation.html#b19e5b7c00feb4bb82d07840d0b88880" title="This performs the transform r * this * r~.">transform</a>(<span class="keyword">const</span> <a class="code" href="classsc_1_1SymmetryOperation.html" title="The SymmetryOperation class provides a 3 by 3 matrix representation of a symmetry...">SymmetryOperation</a>& r) <span class="keyword">const</span>; <a name="l00103"></a>00103 <a name="l00105"></a><a class="code" href="classsc_1_1SymmetryOperation.html#0904e1358450bd538180d821b5c9f7f8">00105</a> <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymmetryOperation.html#0904e1358450bd538180d821b5c9f7f8" title="Set equal to a unit matrix.">unit</a>() { <a class="code" href="classsc_1_1SymmetryOperation.html#b1c07e8f7683e4ce554a495d42be3875" title="zero out the symop">zero</a>(); d[0][0] = d[1][1] = d[2][2] = 1.0; } <a name="l00106"></a>00106 <a name="l00108"></a><a class="code" href="classsc_1_1SymmetryOperation.html#b86a76ac6b4274b52af7618449c8faf5">00108</a> <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymmetryOperation.html#b86a76ac6b4274b52af7618449c8faf5" title="Set equal to E.">E</a>() { <a class="code" href="classsc_1_1SymmetryOperation.html#0904e1358450bd538180d821b5c9f7f8" title="Set equal to a unit matrix.">unit</a>(); } <a name="l00109"></a>00109 <a name="l00111"></a><a class="code" href="classsc_1_1SymmetryOperation.html#d20d1d08a32c22b58cfebe3bcd09870b">00111</a> <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymmetryOperation.html#d20d1d08a32c22b58cfebe3bcd09870b" title="Set equal to an inversion.">i</a>() { <a class="code" href="classsc_1_1SymmetryOperation.html#b1c07e8f7683e4ce554a495d42be3875" title="zero out the symop">zero</a>(); d[0][0] = d[1][1] = d[2][2] = -1.0; } <a name="l00112"></a>00112 <a name="l00114"></a><a class="code" href="classsc_1_1SymmetryOperation.html#cf6f3e3cc39a028f9d342319fdca6692">00114</a> <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymmetryOperation.html#cf6f3e3cc39a028f9d342319fdca6692" title="Set equal to reflection in xy plane.">sigma_h</a>() { <a class="code" href="classsc_1_1SymmetryOperation.html#0904e1358450bd538180d821b5c9f7f8" title="Set equal to a unit matrix.">unit</a>(); d[2][2] = -1.0; } <a name="l00115"></a>00115 <a name="l00117"></a><a class="code" href="classsc_1_1SymmetryOperation.html#d3d12de4c1d2d2e1e1d5eb021bbd421c">00117</a> <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymmetryOperation.html#d3d12de4c1d2d2e1e1d5eb021bbd421c" title="Set equal to reflection in xz plane.">sigma_xz</a>() { <a class="code" href="classsc_1_1SymmetryOperation.html#0904e1358450bd538180d821b5c9f7f8" title="Set equal to a unit matrix.">unit</a>(); d[1][1] = -1.0; } <a name="l00118"></a>00118 <a name="l00120"></a><a class="code" href="classsc_1_1SymmetryOperation.html#ed645bf670cc136600b5e7a1ac85a6b3">00120</a> <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymmetryOperation.html#ed645bf670cc136600b5e7a1ac85a6b3" title="Set equal to reflection in yz plane.">sigma_yz</a>() { <a class="code" href="classsc_1_1SymmetryOperation.html#0904e1358450bd538180d821b5c9f7f8" title="Set equal to a unit matrix.">unit</a>(); d[0][0] = -1.0; } <a name="l00121"></a>00121 <a name="l00123"></a>00123 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymmetryOperation.html#2949adaf44ca45bd6592f08f64a1e122" title="Set equal to a clockwise rotation by 2pi/n.">rotation</a>(<span class="keywordtype">int</span> n); <a name="l00124"></a>00124 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymmetryOperation.html#2949adaf44ca45bd6592f08f64a1e122" title="Set equal to a clockwise rotation by 2pi/n.">rotation</a>(<span class="keywordtype">double</span> theta); <a name="l00125"></a>00125 <a name="l00127"></a><a class="code" href="classsc_1_1SymmetryOperation.html#20cfc9d852be0dce14c7b1ff0d0a115f">00127</a> <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymmetryOperation.html#20cfc9d852be0dce14c7b1ff0d0a115f" title="Set equal to C2 about the x axis.">c2_x</a>() { <a class="code" href="classsc_1_1SymmetryOperation.html#d20d1d08a32c22b58cfebe3bcd09870b" title="Set equal to an inversion.">i</a>(); d[0][0] = 1.0; } <a name="l00128"></a>00128 <a name="l00130"></a><a class="code" href="classsc_1_1SymmetryOperation.html#5ed5ca766d9c2ecbd4129a92da427166">00130</a> <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymmetryOperation.html#5ed5ca766d9c2ecbd4129a92da427166" title="Set equal to C2 about the x axis.">c2_y</a>() { <a class="code" href="classsc_1_1SymmetryOperation.html#d20d1d08a32c22b58cfebe3bcd09870b" title="Set equal to an inversion.">i</a>(); d[1][1] = 1.0; } <a name="l00131"></a>00131 <a name="l00132"></a>00132 <span class="keywordtype">void</span> transpose(); <a name="l00133"></a>00133 <a name="l00135"></a>00135 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymmetryOperation.html#9639ec7a1328a9070e4eeceadc1f571a" title="print the matrix">print</a>(std::ostream& =<a class="code" href="classsc_1_1ExEnv.html#360216acd1f990e999c0ed46cb350b1f" title="Return an ostream that writes from node 0.">ExEnv::out0</a>()) <span class="keyword">const</span>; <a name="l00136"></a>00136 }; <a name="l00137"></a>00137 <a name="l00138"></a>00138 <span class="comment">// //////////////////////////////////////////////////////////////////</span> <a name="l00139"></a>00139 <a name="l00145"></a><a class="code" href="classsc_1_1SymRep.html">00145</a> <span class="keyword">class </span><a class="code" href="classsc_1_1SymRep.html" title="The SymRep class provides an n dimensional matrix representation of a symmetry operation...">SymRep</a> { <a name="l00146"></a>00146 <span class="keyword">private</span>: <a name="l00147"></a>00147 <span class="keywordtype">int</span> n; <a name="l00148"></a>00148 <span class="keywordtype">double</span> d[5][5]; <a name="l00149"></a>00149 <a name="l00150"></a>00150 <span class="keyword">public</span>: <a name="l00151"></a>00151 <a class="code" href="classsc_1_1SymRep.html" title="The SymRep class provides an n dimensional matrix representation of a symmetry operation...">SymRep</a>(<span class="keywordtype">int</span> =0); <a name="l00152"></a>00152 <a class="code" href="classsc_1_1SymRep.html" title="The SymRep class provides an n dimensional matrix representation of a symmetry operation...">SymRep</a>(<span class="keyword">const</span> <a class="code" href="classsc_1_1SymmetryOperation.html" title="The SymmetryOperation class provides a 3 by 3 matrix representation of a symmetry...">SymmetryOperation</a>&); <a name="l00153"></a>00153 ~<a class="code" href="classsc_1_1SymRep.html" title="The SymRep class provides an n dimensional matrix representation of a symmetry operation...">SymRep</a>(); <a name="l00154"></a>00154 <a name="l00156"></a>00156 <a class="code" href="classsc_1_1SymRep.html#4755f8d7f0ff38342e8651e3a89b8c2d" title="Cast to a SymmetryOperation.">operator SymmetryOperation</a>() <span class="keyword">const</span>; <a name="l00157"></a>00157 <a name="l00159"></a>00159 <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="classsc_1_1SymRep.html#2c3a811a6dd5f946ad268f80e9e2ac54" title="returns the trace of the transformation matrix">trace</a>() <span class="keyword">const</span>; <a name="l00160"></a>00160 <a name="l00162"></a><a class="code" href="classsc_1_1SymRep.html#61cf163a54a4043883aafd0632653a8b">00162</a> <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymRep.html#61cf163a54a4043883aafd0632653a8b" title="set the dimension of d">set_dim</a>(<span class="keywordtype">int</span> <a class="code" href="classsc_1_1SymRep.html#e2063a7d0c994aff17aae7dc10122510" title="Set equal to an inversion.">i</a>) { n=i; } <a name="l00163"></a>00163 <a name="l00165"></a><a class="code" href="classsc_1_1SymRep.html#f7245774f2e942215c284780a873bdd0">00165</a> <span class="keywordtype">double</span>* <a class="code" href="classsc_1_1SymRep.html#f7245774f2e942215c284780a873bdd0" title="returns the i&#39;th row of the transformation matrix">operator[]</a>(<span class="keywordtype">int</span> <a class="code" href="classsc_1_1SymRep.html#e2063a7d0c994aff17aae7dc10122510" title="Set equal to an inversion.">i</a>) { <span class="keywordflow">return</span> d[i]; } <a name="l00167"></a><a class="code" href="classsc_1_1SymRep.html#99e0d06e1e8521a89a993957fe1d9875">00167</a> <span class="keyword">const</span> <span class="keywordtype">double</span>* <a class="code" href="classsc_1_1SymRep.html#99e0d06e1e8521a89a993957fe1d9875" title="const version of the above">operator[]</a>(<span class="keywordtype">int</span> <a class="code" href="classsc_1_1SymRep.html#e2063a7d0c994aff17aae7dc10122510" title="Set equal to an inversion.">i</a>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> d[i]; } <a name="l00168"></a>00168 <a name="l00171"></a><a class="code" href="classsc_1_1SymRep.html#83fff630b6d6456df08822b70dc21c41">00171</a> <span class="keywordtype">double</span>& <a class="code" href="classsc_1_1SymRep.html#83fff630b6d6456df08822b70dc21c41" title="returns a reference to the (i,j)th element of the transformation matrix">operator()</a>(<span class="keywordtype">int</span> <a class="code" href="classsc_1_1SymRep.html#e2063a7d0c994aff17aae7dc10122510" title="Set equal to an inversion.">i</a>, <span class="keywordtype">int</span> j) { <span class="keywordflow">return</span> d[i][j]; } <a name="l00173"></a><a class="code" href="classsc_1_1SymRep.html#bd9de65b483c21fc7355a626899e5f89">00173</a> <span class="keywordtype">double</span> <a class="code" href="classsc_1_1SymRep.html#bd9de65b483c21fc7355a626899e5f89" title="const version of double&amp; operator()(int i, int j)">operator()</a>(<span class="keywordtype">int</span> <a class="code" href="classsc_1_1SymRep.html#e2063a7d0c994aff17aae7dc10122510" title="Set equal to an inversion.">i</a>, <span class="keywordtype">int</span> j)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> d[i][j]; } <a name="l00174"></a>00174 <a name="l00176"></a><a class="code" href="classsc_1_1SymRep.html#bb9264765b55b8289b3c7946854b469e">00176</a> <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymRep.html#bb9264765b55b8289b3c7946854b469e" title="zero out the symop">zero</a>() { memset(d,0,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*25); } <a name="l00177"></a>00177 <a name="l00179"></a>00179 <a class="code" href="classsc_1_1SymRep.html" title="The SymRep class provides an n dimensional matrix representation of a symmetry operation...">SymRep</a> <a class="code" href="classsc_1_1SymRep.html#35762283a99bd10cac2847a2b598448a" title="This operates on this with r (i.e. return r * this).">operate</a>(<span class="keyword">const</span> <a class="code" href="classsc_1_1SymRep.html" title="The SymRep class provides an n dimensional matrix representation of a symmetry operation...">SymRep</a>& r) <span class="keyword">const</span>; <a name="l00180"></a>00180 <a name="l00182"></a>00182 <a class="code" href="classsc_1_1SymRep.html" title="The SymRep class provides an n dimensional matrix representation of a symmetry operation...">SymRep</a> <a class="code" href="classsc_1_1SymRep.html#2d3ca4715718106a5034c0596e7aed60" title="This performs the transform r * this * r~.">transform</a>(<span class="keyword">const</span> <a class="code" href="classsc_1_1SymRep.html" title="The SymRep class provides an n dimensional matrix representation of a symmetry operation...">SymRep</a>& r) <span class="keyword">const</span>; <a name="l00183"></a>00183 <a name="l00185"></a><a class="code" href="classsc_1_1SymRep.html#6809f00f8c8776c34a855a8e67a15085">00185</a> <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymRep.html#6809f00f8c8776c34a855a8e67a15085" title="Set equal to a unit matrix.">unit</a>() { <a name="l00186"></a>00186 <a class="code" href="classsc_1_1SymRep.html#bb9264765b55b8289b3c7946854b469e" title="zero out the symop">zero</a>(); d[0][0] = d[1][1] = d[2][2] = d[3][3] = d[4][4] = 1.0; <a name="l00187"></a>00187 } <a name="l00188"></a>00188 <a name="l00190"></a><a class="code" href="classsc_1_1SymRep.html#2f820a3b65a3fbd9626e0b9d69cff91e">00190</a> <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymRep.html#2f820a3b65a3fbd9626e0b9d69cff91e" title="Set equal to the identity.">E</a>() { <a class="code" href="classsc_1_1SymRep.html#6809f00f8c8776c34a855a8e67a15085" title="Set equal to a unit matrix.">unit</a>(); } <a name="l00191"></a>00191 <a name="l00193"></a><a class="code" href="classsc_1_1SymRep.html#e2063a7d0c994aff17aae7dc10122510">00193</a> <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymRep.html#e2063a7d0c994aff17aae7dc10122510" title="Set equal to an inversion.">i</a>() { <a class="code" href="classsc_1_1SymRep.html#bb9264765b55b8289b3c7946854b469e" title="zero out the symop">zero</a>(); d[0][0] = d[1][1] = d[2][2] = d[3][3] = d[4][4] = -1.0;} <a name="l00194"></a>00194 <a name="l00196"></a>00196 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymRep.html#78a538dc32e4edeced0c68a81b8a037a" title="Set equal to reflection in xy plane.">sigma_h</a>(); <a name="l00197"></a>00197 <a name="l00199"></a>00199 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymRep.html#cfb7ca0a7fc4c0df5de65cdf4f0e9723" title="Set equal to reflection in xz plane.">sigma_xz</a>(); <a name="l00200"></a>00200 <a name="l00202"></a>00202 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymRep.html#a4a3a0fe0957f3c1ee70b13feff8e11d" title="Set equal to reflection in yz plane.">sigma_yz</a>(); <a name="l00203"></a>00203 <a name="l00205"></a>00205 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymRep.html#669ee95a2e205ade1eb65a00c0a5b4f5" title="Set equal to a clockwise rotation by 2pi/n.">rotation</a>(<span class="keywordtype">int</span> n); <a name="l00206"></a>00206 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymRep.html#669ee95a2e205ade1eb65a00c0a5b4f5" title="Set equal to a clockwise rotation by 2pi/n.">rotation</a>(<span class="keywordtype">double</span> theta); <a name="l00207"></a>00207 <a name="l00209"></a>00209 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymRep.html#b1dc6bda91d591e786fc1615c6f4ece0" title="Set equal to C2 about the x axis.">c2_x</a>(); <a name="l00210"></a>00210 <a name="l00212"></a>00212 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymRep.html#06c755b49b388807c86d7b40aacb9b5b" title="Set equal to C2 about the x axis.">c2_y</a>(); <a name="l00213"></a>00213 <a name="l00215"></a>00215 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1SymRep.html#aa3652daf734578076d7fc001b8554d9" title="print the matrix">print</a>(std::ostream& =<a class="code" href="classsc_1_1ExEnv.html#360216acd1f990e999c0ed46cb350b1f" title="Return an ostream that writes from node 0.">ExEnv::out0</a>()) <span class="keyword">const</span>; <a name="l00216"></a>00216 }; <a name="l00217"></a>00217 <a name="l00218"></a>00218 <span class="keyword">inline</span> <span class="keywordtype">double</span> <a name="l00219"></a><a class="code" href="classsc_1_1SymRep.html#2c3a811a6dd5f946ad268f80e9e2ac54">00219</a> <a class="code" href="classsc_1_1SymRep.html#2c3a811a6dd5f946ad268f80e9e2ac54" title="returns the trace of the transformation matrix">SymRep::trace</a>()<span class="keyword"> const</span> <a name="l00220"></a>00220 <span class="keyword"></span>{ <a name="l00221"></a>00221 <span class="keywordtype">double</span> r=0; <a name="l00222"></a>00222 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code" href="classsc_1_1SymRep.html#e2063a7d0c994aff17aae7dc10122510" title="Set equal to an inversion.">i</a>=0; <a class="code" href="classsc_1_1SymRep.html#e2063a7d0c994aff17aae7dc10122510" title="Set equal to an inversion.">i</a> < n; <a class="code" href="classsc_1_1SymRep.html#e2063a7d0c994aff17aae7dc10122510" title="Set equal to an inversion.">i</a>++) <a name="l00223"></a>00223 r += d[<a class="code" href="classsc_1_1SymRep.html#e2063a7d0c994aff17aae7dc10122510" title="Set equal to an inversion.">i</a>][<a class="code" href="classsc_1_1SymRep.html#e2063a7d0c994aff17aae7dc10122510" title="Set equal to an inversion.">i</a>]; <a name="l00224"></a>00224 <span class="keywordflow">return</span> r; <a name="l00225"></a>00225 } <a name="l00226"></a>00226 <a name="l00227"></a>00227 <span class="comment">// //////////////////////////////////////////////////////////////////</span> <a name="l00228"></a>00228 <a name="l00229"></a>00229 <a name="l00230"></a>00230 <span class="keyword">class </span><a class="code" href="classsc_1_1CharacterTable.html" title="The CharacterTable class provides a workable character table for all of the non-cubic...">CharacterTable</a>; <a name="l00231"></a>00231 <a name="l00239"></a><a class="code" href="classsc_1_1IrreducibleRepresentation.html">00239</a> <span class="keyword">class </span><a class="code" href="classsc_1_1IrreducibleRepresentation.html" title="The IrreducibleRepresentation class provides information associated with a particular...">IrreducibleRepresentation</a> { <a name="l00240"></a>00240 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classsc_1_1CharacterTable.html" title="The CharacterTable class provides a workable character table for all of the non-cubic...">CharacterTable</a>; <a name="l00241"></a>00241 <a name="l00242"></a>00242 <span class="keyword">private</span>: <a name="l00243"></a>00243 <span class="keywordtype">int</span> g; <span class="comment">// the order of the group</span> <a name="l00244"></a>00244 <span class="keywordtype">int</span> degen; <span class="comment">// the degeneracy of the irrep</span> <a name="l00245"></a>00245 <span class="keywordtype">int</span> nrot_; <span class="comment">// the number of rotations in this irrep</span> <a name="l00246"></a>00246 <span class="keywordtype">int</span> ntrans_; <span class="comment">// the number of translations in this irrep</span> <a name="l00247"></a>00247 <span class="keywordtype">int</span> complex_; <span class="comment">// true if this irrep has a complex representation</span> <a name="l00248"></a>00248 <span class="keywordtype">char</span> *symb; <span class="comment">// mulliken symbol for this irrep</span> <a name="l00249"></a>00249 <span class="keywordtype">char</span> *csymb; <span class="comment">// mulliken symbol for this irrep w/o special characters</span> <a name="l00250"></a>00250 <a name="l00251"></a>00251 <a class="code" href="classsc_1_1SymRep.html" title="The SymRep class provides an n dimensional matrix representation of a symmetry operation...">SymRep</a> *rep; <span class="comment">// representation matrices for the symops</span> <a name="l00252"></a>00252 <a name="l00253"></a>00253 <span class="keyword">public</span>: <a name="l00254"></a>00254 <a class="code" href="classsc_1_1IrreducibleRepresentation.html" title="The IrreducibleRepresentation class provides information associated with a particular...">IrreducibleRepresentation</a>(); <a name="l00255"></a>00255 <a class="code" href="classsc_1_1IrreducibleRepresentation.html" title="The IrreducibleRepresentation class provides information associated with a particular...">IrreducibleRepresentation</a>(<span class="keyword">const</span> <a class="code" href="classsc_1_1IrreducibleRepresentation.html" title="The IrreducibleRepresentation class provides information associated with a particular...">IrreducibleRepresentation</a>&); <a name="l00259"></a>00259 <a class="code" href="classsc_1_1IrreducibleRepresentation.html" title="The IrreducibleRepresentation class provides information associated with a particular...">IrreducibleRepresentation</a>(<span class="keywordtype">int</span>,<span class="keywordtype">int</span>,<span class="keyword">const</span> <span class="keywordtype">char</span>*,<span class="keyword">const</span> <span class="keywordtype">char</span>* =0); <a name="l00260"></a>00260 <a name="l00261"></a>00261 ~<a class="code" href="classsc_1_1IrreducibleRepresentation.html" title="The IrreducibleRepresentation class provides information associated with a particular...">IrreducibleRepresentation</a>(); <a name="l00262"></a>00262 <a name="l00263"></a>00263 <a class="code" href="classsc_1_1IrreducibleRepresentation.html" title="The IrreducibleRepresentation class provides information associated with a particular...">IrreducibleRepresentation</a>& operator=(<span class="keyword">const</span> <a class="code" href="classsc_1_1IrreducibleRepresentation.html" title="The IrreducibleRepresentation class provides information associated with a particular...">IrreducibleRepresentation</a>&); <a name="l00264"></a>00264 <a name="l00266"></a>00266 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1IrreducibleRepresentation.html#426c67a6d5062aec1e88fa355f649aee" title="Initialize the order, degeneracy, and Mulliken symbol of the irrep.">init</a>(<span class="keywordtype">int</span> =0, <span class="keywordtype">int</span> =0, <span class="keyword">const</span> <span class="keywordtype">char</span>* =0, <span class="keyword">const</span> <span class="keywordtype">char</span>* =0); <a name="l00267"></a>00267 <a name="l00269"></a><a class="code" href="classsc_1_1IrreducibleRepresentation.html#a24ab62b96686d4c85b2df014ce68cd9">00269</a> <span class="keywordtype">int</span> <a class="code" href="classsc_1_1IrreducibleRepresentation.html#a24ab62b96686d4c85b2df014ce68cd9" title="Returns the order of the group.">order</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> g; } <a name="l00270"></a>00270 <a name="l00272"></a><a class="code" href="classsc_1_1IrreducibleRepresentation.html#accf382f4080b1b6ebdb441a9409b84e">00272</a> <span class="keywordtype">int</span> <a class="code" href="classsc_1_1IrreducibleRepresentation.html#accf382f4080b1b6ebdb441a9409b84e" title="Returns the degeneracy of the irrep.">degeneracy</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> degen; } <a name="l00273"></a>00273 <a name="l00275"></a><a class="code" href="classsc_1_1IrreducibleRepresentation.html#d0680d7c181143887539455a1fcbabc6">00275</a> <span class="keywordtype">int</span> <a class="code" href="classsc_1_1IrreducibleRepresentation.html#d0680d7c181143887539455a1fcbabc6" title="Returns the value of complex_.">complex</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> complex_; } <a name="l00276"></a>00276 <a name="l00278"></a><a class="code" href="classsc_1_1IrreducibleRepresentation.html#47ad1d5fccc675b1da6fdfa911af85ad">00278</a> <span class="keywordtype">int</span> <a class="code" href="classsc_1_1IrreducibleRepresentation.html#47ad1d5fccc675b1da6fdfa911af85ad" title="Returns the number of projection operators for the irrep.">nproj</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> degen*degen; } <a name="l00279"></a>00279 <a name="l00281"></a><a class="code" href="classsc_1_1IrreducibleRepresentation.html#b210466a5025a276443ef40301991f70">00281</a> <span class="keywordtype">int</span> <a class="code" href="classsc_1_1IrreducibleRepresentation.html#b210466a5025a276443ef40301991f70" title="Returns the number of rotations associated with the irrep.">nrot</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> nrot_; } <a name="l00282"></a>00282 <a name="l00284"></a><a class="code" href="classsc_1_1IrreducibleRepresentation.html#cbf6ca213a59b6bcb717e2b689dcbabb">00284</a> <span class="keywordtype">int</span> <a class="code" href="classsc_1_1IrreducibleRepresentation.html#cbf6ca213a59b6bcb717e2b689dcbabb" title="Returns the number of translations associated with the irrep.">ntrans</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ntrans_; } <a name="l00285"></a>00285 <a name="l00287"></a><a class="code" href="classsc_1_1IrreducibleRepresentation.html#4aefb6e65b5eddcd5c89c31c0d128332">00287</a> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="classsc_1_1IrreducibleRepresentation.html#4aefb6e65b5eddcd5c89c31c0d128332" title="Returns the Mulliken symbol for the irrep.">symbol</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> symb; } <a name="l00288"></a>00288 <a name="l00292"></a><a class="code" href="classsc_1_1IrreducibleRepresentation.html#f8fe498c013b38cab5f18538c7521cd3">00292</a> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="classsc_1_1IrreducibleRepresentation.html#f8fe498c013b38cab5f18538c7521cd3" title="Returns the Mulliken symbol for the irrep without special characters.">symbol_ns</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (csymb?csymb:symb); } <a name="l00293"></a>00293 <a name="l00296"></a><a class="code" href="classsc_1_1IrreducibleRepresentation.html#ae30589782139340cfed28b80c3865cb">00296</a> <span class="keywordtype">double</span> <a class="code" href="classsc_1_1IrreducibleRepresentation.html#ae30589782139340cfed28b80c3865cb" title="Returns the character for the i&#39;th symmetry operation of the point group.">character</a>(<span class="keywordtype">int</span> i)<span class="keyword"> const </span>{ <a name="l00297"></a>00297 <span class="keywordflow">return</span> complex_ ? 0.5*rep[i].<a class="code" href="classsc_1_1SymRep.html#2c3a811a6dd5f946ad268f80e9e2ac54" title="returns the trace of the transformation matrix">trace</a>() : rep[i].<a class="code" href="classsc_1_1SymRep.html#2c3a811a6dd5f946ad268f80e9e2ac54" title="returns the trace of the transformation matrix">trace</a>(); <a name="l00298"></a>00298 } <a name="l00299"></a>00299 <a name="l00301"></a><a class="code" href="classsc_1_1IrreducibleRepresentation.html#24b0c08f4758c04b157733dfabeea041">00301</a> <span class="keywordtype">double</span> <a class="code" href="classsc_1_1IrreducibleRepresentation.html#24b0c08f4758c04b157733dfabeea041" title="Returns the element (x1,x2) of the i&#39;th representation matrix.">p</a>(<span class="keywordtype">int</span> x1, <span class="keywordtype">int</span> x2, <span class="keywordtype">int</span> i)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rep[i](x1,x2); } <a name="l00302"></a>00302 <a name="l00305"></a><a class="code" href="classsc_1_1IrreducibleRepresentation.html#072b4d7e5e51a1c322f292fdd01dd2b9">00305</a> <span class="keywordtype">double</span> <a class="code" href="classsc_1_1IrreducibleRepresentation.html#072b4d7e5e51a1c322f292fdd01dd2b9" title="Returns the character for the d&#39;th contribution to the i&#39;th representation...">p</a>(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> i)<span class="keyword"> const </span>{ <a name="l00306"></a>00306 <span class="keywordtype">int</span> dc=d/degen; <span class="keywordtype">int</span> dr=d%degen; <a name="l00307"></a>00307 <span class="keywordflow">return</span> rep[i](dr,dc); <a name="l00308"></a>00308 } <a name="l00309"></a>00309 <a name="l00313"></a>00313 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1IrreducibleRepresentation.html#615013a5198219d6600f5c026f125742" title="This prints the irrep to the given file, or stdout if none is given.">print</a>(std::ostream& =<a class="code" href="classsc_1_1ExEnv.html#360216acd1f990e999c0ed46cb350b1f" title="Return an ostream that writes from node 0.">ExEnv::out0</a>()) <span class="keyword">const</span>; <a name="l00314"></a>00314 }; <a name="l00315"></a>00315 <a name="l00316"></a>00316 <span class="comment">// ///////////////////////////////////////////////////////////</span> <a name="l00325"></a><a class="code" href="classsc_1_1CharacterTable.html">00325</a> <span class="comment"></span><span class="keyword">class </span><a class="code" href="classsc_1_1CharacterTable.html" title="The CharacterTable class provides a workable character table for all of the non-cubic...">CharacterTable</a> { <a name="l00326"></a>00326 <span class="keyword">public</span>: <a name="l00327"></a>00327 <span class="keyword">enum</span> pgroups {C1, CS, CI, CN, CNV, CNH, DN, DND, DNH, SN, T, TH, TD, O, <a name="l00328"></a>00328 OH, I, IH}; <a name="l00329"></a>00329 <a name="l00330"></a>00330 <span class="keyword">private</span>: <a name="l00331"></a>00331 <span class="keywordtype">int</span> g; <span class="comment">// the order of the point group</span> <a name="l00332"></a>00332 <span class="keywordtype">int</span> nt; <span class="comment">// order of the princ rot axis</span> <a name="l00333"></a>00333 pgroups pg; <span class="comment">// the class of the point group</span> <a name="l00334"></a>00334 <span class="keywordtype">int</span> nirrep_; <span class="comment">// the number of irreps in this pg</span> <a name="l00335"></a>00335 <a class="code" href="classsc_1_1IrreducibleRepresentation.html" title="The IrreducibleRepresentation class provides information associated with a particular...">IrreducibleRepresentation</a> *gamma_; <span class="comment">// an array of irreps</span> <a name="l00336"></a>00336 <a class="code" href="classsc_1_1SymmetryOperation.html" title="The SymmetryOperation class provides a 3 by 3 matrix representation of a symmetry...">SymmetryOperation</a> *symop; <span class="comment">// the matrices describing sym ops</span> <a name="l00337"></a>00337 <span class="keywordtype">int</span> *_inv; <span class="comment">// index of the inverse symop</span> <a name="l00338"></a>00338 <span class="keywordtype">char</span> *symb; <span class="comment">// the Schoenflies symbol for the pg</span> <a name="l00339"></a>00339 <a name="l00341"></a>00341 <span class="keywordtype">int</span> parse_symbol(); <a name="l00343"></a>00343 <span class="keywordtype">int</span> make_table(); <a name="l00344"></a>00344 <a name="l00345"></a>00345 <span class="comment">// these create the character tables for the cubic groups</span> <a name="l00346"></a>00346 <span class="keywordtype">void</span> t(); <a name="l00347"></a>00347 <span class="keywordtype">void</span> th(); <a name="l00348"></a>00348 <span class="keywordtype">void</span> td(); <a name="l00349"></a>00349 <span class="keywordtype">void</span> o(); <a name="l00350"></a>00350 <span class="keywordtype">void</span> oh(); <a name="l00351"></a>00351 <span class="keywordtype">void</span> i(); <a name="l00352"></a>00352 <span class="keywordtype">void</span> ih(); <a name="l00353"></a>00353 <a name="l00354"></a>00354 <span class="keyword">public</span>: <a name="l00355"></a>00355 <a class="code" href="classsc_1_1CharacterTable.html" title="The CharacterTable class provides a workable character table for all of the non-cubic...">CharacterTable</a>(); <a name="l00358"></a>00358 <a class="code" href="classsc_1_1CharacterTable.html" title="The CharacterTable class provides a workable character table for all of the non-cubic...">CharacterTable</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>*); <a name="l00362"></a>00362 <a class="code" href="classsc_1_1CharacterTable.html" title="The CharacterTable class provides a workable character table for all of the non-cubic...">CharacterTable</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>*,<span class="keyword">const</span> <a class="code" href="classsc_1_1SymmetryOperation.html" title="The SymmetryOperation class provides a 3 by 3 matrix representation of a symmetry...">SymmetryOperation</a>&); <a name="l00363"></a>00363 <a name="l00364"></a>00364 <a class="code" href="classsc_1_1CharacterTable.html" title="The CharacterTable class provides a workable character table for all of the non-cubic...">CharacterTable</a>(<span class="keyword">const</span> <a class="code" href="classsc_1_1CharacterTable.html" title="The CharacterTable class provides a workable character table for all of the non-cubic...">CharacterTable</a>&); <a name="l00365"></a>00365 ~<a class="code" href="classsc_1_1CharacterTable.html" title="The CharacterTable class provides a workable character table for all of the non-cubic...">CharacterTable</a>(); <a name="l00366"></a>00366 <a name="l00367"></a>00367 <a class="code" href="classsc_1_1CharacterTable.html" title="The CharacterTable class provides a workable character table for all of the non-cubic...">CharacterTable</a>& operator=(<span class="keyword">const</span> <a class="code" href="classsc_1_1CharacterTable.html" title="The CharacterTable class provides a workable character table for all of the non-cubic...">CharacterTable</a>&); <a name="l00368"></a>00368 <a name="l00370"></a><a class="code" href="classsc_1_1CharacterTable.html#2dad8da0a625f430f73c32e61a4d1986">00370</a> <span class="keywordtype">int</span> <a class="code" href="classsc_1_1CharacterTable.html#2dad8da0a625f430f73c32e61a4d1986" title="Returns the number of irreps.">nirrep</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> nirrep_; } <a name="l00372"></a><a class="code" href="classsc_1_1CharacterTable.html#7bb4fa56985a5388538c766cfce36a76">00372</a> <span class="keywordtype">int</span> <a class="code" href="classsc_1_1CharacterTable.html#7bb4fa56985a5388538c766cfce36a76" title="Returns the order of the point group.">order</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> g; } <a name="l00374"></a><a class="code" href="classsc_1_1CharacterTable.html#1c4b25e2a4062a4da8f66c5f0eb397a5">00374</a> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="classsc_1_1CharacterTable.html#1c4b25e2a4062a4da8f66c5f0eb397a5" title="Returns the Schoenflies symbol for the point group.">symbol</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> symb; } <a name="l00376"></a><a class="code" href="classsc_1_1CharacterTable.html#47f976fd950316d453adc8393ade97ed">00376</a> <a class="code" href="classsc_1_1IrreducibleRepresentation.html" title="The IrreducibleRepresentation class provides information associated with a particular...">IrreducibleRepresentation</a>& <a class="code" href="classsc_1_1CharacterTable.html#47f976fd950316d453adc8393ade97ed" title="Returns the i&#39;th irrep.">gamma</a>(<span class="keywordtype">int</span> i) { <span class="keywordflow">return</span> gamma_[i]; } <a name="l00378"></a><a class="code" href="classsc_1_1CharacterTable.html#55636f276179d3f7424704ede3f73d4f">00378</a> <a class="code" href="classsc_1_1SymmetryOperation.html" title="The SymmetryOperation class provides a 3 by 3 matrix representation of a symmetry...">SymmetryOperation</a>& <a class="code" href="classsc_1_1CharacterTable.html#55636f276179d3f7424704ede3f73d4f" title="Returns the i&#39;th symmetry operation.">symm_operation</a>(<span class="keywordtype">int</span> i) { <span class="keywordflow">return</span> symop[i]; } <a name="l00379"></a>00379 <a name="l00383"></a><a class="code" href="classsc_1_1CharacterTable.html#b85d1b39f4e403a6bd254f3861e95098">00383</a> <span class="keywordtype">int</span> <a class="code" href="classsc_1_1CharacterTable.html#b85d1b39f4e403a6bd254f3861e95098" title="Cn, Cnh, Sn, T, and Th point groups have complex representations.">complex</a>()<span class="keyword"> const </span>{ <a name="l00384"></a>00384 <span class="keywordflow">if</span> (pg==CN || pg==SN || pg==CNH || pg==T || pg==TH) <a name="l00385"></a>00385 <span class="keywordflow">return</span> 1; <a name="l00386"></a>00386 <span class="keywordflow">return</span> 0; <a name="l00387"></a>00387 } <a name="l00388"></a>00388 <a name="l00390"></a><a class="code" href="classsc_1_1CharacterTable.html#2a8e3c5e87099848aaddaafa087c93bd">00390</a> <span class="keywordtype">int</span> <a class="code" href="classsc_1_1CharacterTable.html#2a8e3c5e87099848aaddaafa087c93bd" title="Returns the index of the symop which is the inverse of symop[i].">inverse</a>(<span class="keywordtype">int</span> i)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _inv[i]; } <a name="l00391"></a>00391 <a name="l00392"></a>00392 <span class="keywordtype">int</span> ncomp()<span class="keyword"> const </span>{ <a name="l00393"></a>00393 <span class="keywordtype">int</span> ret=0; <a name="l00394"></a>00394 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i < nirrep_; i++) { <a name="l00395"></a>00395 <span class="keywordtype">int</span> nc = (gamma_[i].<a class="code" href="classsc_1_1IrreducibleRepresentation.html#d0680d7c181143887539455a1fcbabc6" title="Returns the value of complex_.">complex</a>()) ? 1 : gamma_[i].degen; <a name="l00396"></a>00396 ret += nc; <a name="l00397"></a>00397 } <a name="l00398"></a>00398 <span class="keywordflow">return</span> ret; <a name="l00399"></a>00399 } <a name="l00400"></a>00400 <a name="l00402"></a><a class="code" href="classsc_1_1CharacterTable.html#25479dcf0fbfb7a9b9a6f0ad6f7d51c5">00402</a> <span class="keywordtype">int</span> <a class="code" href="classsc_1_1CharacterTable.html#25479dcf0fbfb7a9b9a6f0ad6f7d51c5" title="Returns the irrep component i belongs to.">which_irrep</a>(<span class="keywordtype">int</span> i) { <a name="l00403"></a>00403 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> ir=0, cn=0; ir < nirrep_; ir++) { <a name="l00404"></a>00404 <span class="keywordtype">int</span> nc = (gamma_[ir].<a class="code" href="classsc_1_1IrreducibleRepresentation.html#d0680d7c181143887539455a1fcbabc6" title="Returns the value of complex_.">complex</a>()) ? 1 : gamma_[ir].degen; <a name="l00405"></a>00405 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> c=0; c < nc; c++,cn++) <a name="l00406"></a>00406 <span class="keywordflow">if</span> (cn==i) <a name="l00407"></a>00407 <span class="keywordflow">return</span> ir; <a name="l00408"></a>00408 } <a name="l00409"></a>00409 <span class="keywordflow">return</span> -1; <a name="l00410"></a>00410 } <a name="l00411"></a>00411 <a name="l00413"></a><a class="code" href="classsc_1_1CharacterTable.html#d71b793b2016ed1a7fcda8257fd7eee9">00413</a> <span class="keywordtype">int</span> <a class="code" href="classsc_1_1CharacterTable.html#d71b793b2016ed1a7fcda8257fd7eee9" title="Returns which component i is.">which_comp</a>(<span class="keywordtype">int</span> i) { <a name="l00414"></a>00414 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> ir=0, cn=0; ir < nirrep_; ir++) { <a name="l00415"></a>00415 <span class="keywordtype">int</span> nc = (gamma_[ir].<a class="code" href="classsc_1_1IrreducibleRepresentation.html#d0680d7c181143887539455a1fcbabc6" title="Returns the value of complex_.">complex</a>()) ? 1 : gamma_[ir].degen; <a name="l00416"></a>00416 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> c=0; c < nc; c++,cn++) <a name="l00417"></a>00417 <span class="keywordflow">if</span> (cn==i) <a name="l00418"></a>00418 <span class="keywordflow">return</span> c; <a name="l00419"></a>00419 } <a name="l00420"></a>00420 <span class="keywordflow">return</span> -1; <a name="l00421"></a>00421 } <a name="l00422"></a>00422 <a name="l00424"></a>00424 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1CharacterTable.html#ae0e0508bf983e963ca343f3c949577c" title="This prints the irrep to the given file, or stdout if none is given.">print</a>(std::ostream& =<a class="code" href="classsc_1_1ExEnv.html#360216acd1f990e999c0ed46cb350b1f" title="Return an ostream that writes from node 0.">ExEnv::out0</a>()) <span class="keyword">const</span>; <a name="l00425"></a>00425 }; <a name="l00426"></a>00426 <a name="l00427"></a>00427 <span class="comment">// ///////////////////////////////////////////////////////////</span> <a name="l00428"></a>00428 <a name="l00436"></a><a class="code" href="classsc_1_1PointGroup.html">00436</a> <span class="keyword">class </span><a class="code" href="classsc_1_1PointGroup.html" title="The PointGroup class is really a place holder for a CharacterTable.">PointGroup</a>: <span class="keyword">public</span> <a class="code" href="classsc_1_1SavableState.html" title="Base class for objects that can save/restore state.">SavableState</a> { <a name="l00437"></a>00437 <span class="keyword">private</span>: <a name="l00438"></a>00438 <span class="keywordtype">char</span> *symb; <a name="l00439"></a>00439 <a class="code" href="classsc_1_1SymmetryOperation.html" title="The SymmetryOperation class provides a 3 by 3 matrix representation of a symmetry...">SymmetryOperation</a> frame; <a name="l00440"></a>00440 SCVector3 origin_; <a name="l00441"></a>00441 <a name="l00442"></a>00442 <span class="keyword">public</span>: <a name="l00443"></a>00443 <a class="code" href="classsc_1_1PointGroup.html" title="The PointGroup class is really a place holder for a CharacterTable.">PointGroup</a>(); <a name="l00446"></a>00446 <a class="code" href="classsc_1_1PointGroup.html" title="The PointGroup class is really a place holder for a CharacterTable.">PointGroup</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>*); <a name="l00449"></a>00449 <a class="code" href="classsc_1_1PointGroup.html" title="The PointGroup class is really a place holder for a CharacterTable.">PointGroup</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>*,<a class="code" href="classsc_1_1SymmetryOperation.html" title="The SymmetryOperation class provides a 3 by 3 matrix representation of a symmetry...">SymmetryOperation</a>&); <a name="l00452"></a>00452 <a class="code" href="classsc_1_1PointGroup.html" title="The PointGroup class is really a place holder for a CharacterTable.">PointGroup</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>*,<a class="code" href="classsc_1_1SymmetryOperation.html" title="The SymmetryOperation class provides a 3 by 3 matrix representation of a symmetry...">SymmetryOperation</a>&,<span class="keyword">const</span> SCVector3&); <a name="l00487"></a>00487 <a class="code" href="classsc_1_1PointGroup.html" title="The PointGroup class is really a place holder for a CharacterTable.">PointGroup</a>(<span class="keyword">const</span> <a class="code" href="classsc_1_1Ref.html">Ref<KeyVal></a>&); <a name="l00488"></a>00488 <a name="l00489"></a>00489 <a class="code" href="classsc_1_1PointGroup.html" title="The PointGroup class is really a place holder for a CharacterTable.">PointGroup</a>(<a class="code" href="classsc_1_1StateIn.html" title="Restores objects that derive from SavableState.">StateIn</a>&); <a name="l00490"></a>00490 <a class="code" href="classsc_1_1PointGroup.html" title="The PointGroup class is really a place holder for a CharacterTable.">PointGroup</a>(<span class="keyword">const</span> <a class="code" href="classsc_1_1PointGroup.html" title="The PointGroup class is really a place holder for a CharacterTable.">PointGroup</a>&); <a name="l00491"></a>00491 <a class="code" href="classsc_1_1PointGroup.html" title="The PointGroup class is really a place holder for a CharacterTable.">PointGroup</a>(<span class="keyword">const</span> <a class="code" href="classsc_1_1Ref.html">Ref<PointGroup></a>&); <a name="l00492"></a>00492 ~<a class="code" href="classsc_1_1PointGroup.html" title="The PointGroup class is really a place holder for a CharacterTable.">PointGroup</a>(); <a name="l00493"></a>00493 <a name="l00494"></a>00494 <a class="code" href="classsc_1_1PointGroup.html" title="The PointGroup class is really a place holder for a CharacterTable.">PointGroup</a>& operator=(<span class="keyword">const</span> <a class="code" href="classsc_1_1PointGroup.html" title="The PointGroup class is really a place holder for a CharacterTable.">PointGroup</a>&); <a name="l00495"></a>00495 <a name="l00497"></a>00497 <span class="keywordtype">int</span> <a class="code" href="classsc_1_1PointGroup.html#3a85fcda93d9bf5db6f388a9eee731c9" title="Returns 1 if the point groups are equivalent, 0 otherwise.">equiv</a>(<span class="keyword">const</span> <a class="code" href="classsc_1_1Ref.html">Ref<PointGroup></a> &, <span class="keywordtype">double</span> tol = 1.0e-6) <span class="keyword">const</span>; <a name="l00498"></a>00498 <a name="l00500"></a>00500 <a class="code" href="classsc_1_1CharacterTable.html" title="The CharacterTable class provides a workable character table for all of the non-cubic...">CharacterTable</a> <a class="code" href="classsc_1_1PointGroup.html#db21d45c868c871fe1c930cddb3a64f1" title="Returns the CharacterTable for this point group.">char_table</a>() <span class="keyword">const</span>; <a name="l00502"></a><a class="code" href="classsc_1_1PointGroup.html#00824661f789d24edb7be3cef5cb2e5f">00502</a> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="classsc_1_1PointGroup.html#00824661f789d24edb7be3cef5cb2e5f" title="Returns the Schoenflies symbol for this point group.">symbol</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> symb; } <a name="l00504"></a><a class="code" href="classsc_1_1PointGroup.html#ecfb7357db1a806b8f899d62ca35722a">00504</a> <a class="code" href="classsc_1_1SymmetryOperation.html" title="The SymmetryOperation class provides a 3 by 3 matrix representation of a symmetry...">SymmetryOperation</a>& <a class="code" href="classsc_1_1PointGroup.html#ecfb7357db1a806b8f899d62ca35722a" title="Returns the frame of reference for this point group.">symm_frame</a>() { <span class="keywordflow">return</span> frame; } <a name="l00506"></a><a class="code" href="classsc_1_1PointGroup.html#cfb42268ff554f0f1e635233feed2e90">00506</a> <span class="keyword">const</span> <a class="code" href="classsc_1_1SymmetryOperation.html" title="The SymmetryOperation class provides a 3 by 3 matrix representation of a symmetry...">SymmetryOperation</a>& <a class="code" href="classsc_1_1PointGroup.html#cfb42268ff554f0f1e635233feed2e90" title="A const version of the above.">symm_frame</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> frame; } <a name="l00508"></a><a class="code" href="classsc_1_1PointGroup.html#3e3a2ce705e36bb0c3630a75f4cfb5a7">00508</a> SCVector3& <a class="code" href="classsc_1_1PointGroup.html#3e3a2ce705e36bb0c3630a75f4cfb5a7" title="Returns the origin of the symmetry frame.">origin</a>() { <span class="keywordflow">return</span> origin_; } <a name="l00509"></a>00509 <span class="keyword">const</span> SCVector3& <a class="code" href="classsc_1_1PointGroup.html#3e3a2ce705e36bb0c3630a75f4cfb5a7" title="Returns the origin of the symmetry frame.">origin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> origin_; } <a name="l00510"></a>00510 <a name="l00512"></a>00512 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1PointGroup.html#3a6c43b4d0d2e2386af729986599d7f5" title="Sets (or resets) the Schoenflies symbol.">set_symbol</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>*); <a name="l00513"></a>00513 <a name="l00514"></a>00514 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1PointGroup.html#b5e0c66d132639bbf052ddec860085b7" title="Save the base classes (with save_data_state) and the members in the same order that...">save_data_state</a>(StateOut& so); <a name="l00515"></a>00515 <a name="l00516"></a>00516 <span class="keywordtype">void</span> <a class="code" href="classsc_1_1PointGroup.html#884571374bccb264f013423982ac69ba" title="Print the object.">print</a>(std::ostream&o=<a class="code" href="classsc_1_1ExEnv.html#360216acd1f990e999c0ed46cb350b1f" title="Return an ostream that writes from node 0.">ExEnv::out0</a>()) <span class="keyword">const</span>; <a name="l00517"></a>00517 }; <a name="l00518"></a>00518 <a name="l00519"></a>00519 } <a name="l00520"></a>00520 <a name="l00521"></a>00521 <span class="preprocessor">#endif</span> <a name="l00522"></a>00522 <span class="preprocessor"></span> <a name="l00523"></a>00523 <span class="comment">// Local Variables:</span> <a name="l00524"></a>00524 <span class="comment">// mode: c++</span> <a name="l00525"></a>00525 <span class="comment">// c-file-style: "ETS"</span> <a name="l00526"></a>00526 <span class="comment">// End:</span> </pre></div></div> <hr> <address> <small> Generated at Wed Oct 14 14:12:11 2009 for <a href="http://www.mpqc.org">MPQC</a> 2.3.1 using the documentation package <a href="http://www.doxygen.org">Doxygen</a> 1.5.9. </small> </address> </body> </html>