⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pointgrp.cc

📁 大型并行量子化学软件;支持密度泛函(DFT)。可以进行各种量子化学计算。支持CHARMM并行计算。非常具有应用价值。
💻 CC
字号:
//// pointgrp.cc//// Modifications are// Copyright (C) 1996 Limit Point Systems, Inc.//// Author: Edward Seidl <seidl@janed.com>// Maintainer: LPS//// This file is part of the SC Toolkit.//// The SC Toolkit is free software; you can redistribute it and/or modify// it under the terms of the GNU Library General Public License as published by// the Free Software Foundation; either version 2, or (at your option)// any later version.//// The SC Toolkit is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU Library General Public License for more details.//// You should have received a copy of the GNU Library General Public License// along with the SC Toolkit; see the file COPYING.LIB.  If not, write to// the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.//// The U.S. Government is granted a limited license as per AL 91-7.///* pointgrp.cc -- implementation of the point group classes * *      THIS SOFTWARE FITS THE DESCRIPTION IN THE U.S. COPYRIGHT ACT OF A *      "UNITED STATES GOVERNMENT WORK".  IT WAS WRITTEN AS A PART OF THE *      AUTHOR'S OFFICIAL DUTIES AS A GOVERNMENT EMPLOYEE.  THIS MEANS IT *      CANNOT BE COPYRIGHTED.  THIS SOFTWARE IS FREELY AVAILABLE TO THE *      PUBLIC FOR USE WITHOUT A COPYRIGHT NOTICE, AND THERE ARE NO *      RESTRICTIONS ON ITS USE, NOW OR SUBSEQUENTLY. * *  Author: *      E. T. Seidl *      Bldg. 12A, Rm. 2033 *      Computer Systems Laboratory *      Division of Computer Research and Technology *      National Institutes of Health *      Bethesda, Maryland 20892 *      Internet: seidl@alw.nih.gov *      June, 1993 */#ifdef __GNUC__#pragma implementation#endif#include <stdlib.h>#include <string.h>#include <ctype.h>#include <math.h>#include <util/misc/formio.h>#include <util/state/stateio.h>#include <math/symmetry/pointgrp.h>using namespace std;using namespace sc;////////////////////////////////////////////////////////////////////////static ClassDesc PointGroup_cd(  typeid(PointGroup),"PointGroup",2,"public SavableState",  create<PointGroup>, create<PointGroup>, create<PointGroup>);PointGroup::PointGroup()  : symb(0){  set_symbol("c1");  frame(0,0) = frame(1,1) = frame(2,2) = 1;  origin_[0] = origin_[1] = origin_[2] =0;}PointGroup::PointGroup(const char *s)  : symb(0){  set_symbol(s);  frame(0,0) = frame(1,1) = frame(2,2) = 1;  origin_[0] = origin_[1] = origin_[2] =0;}PointGroup::PointGroup(const char *s, SymmetryOperation& so)  : symb(0){  set_symbol(s);  frame = so;  origin_[0] = origin_[1] = origin_[2] =0;}PointGroup::PointGroup(const char *s, SymmetryOperation& so,                       const SCVector3& origin)  : symb(0){  set_symbol(s);  frame = so;  origin_ = origin;}PointGroup::PointGroup(const Ref<KeyVal>& kv)  : symb(0){  if (kv->exists("symmetry")) {    char *tmp = kv->pcharvalue("symmetry");    set_symbol(tmp);    delete[] tmp;  }  else    set_symbol("c1");  if (kv->exists("symmetry_frame")) {    for (int i=0; i < 3; i++)      for (int j=0; j < 3; j++)         frame(i,j) = kv->doublevalue("symmetry_frame",i,j);  } else {    frame(0,0) = frame(1,1) = frame(2,2) = 1;  }  if (kv->exists("origin")) {    for (int i=0; i < 3; i++)      origin_[i] = kv->doublevalue("origin",i);  } else {    origin_[0] = origin_[1] = origin_[2] =0;  }}PointGroup::PointGroup(StateIn& si) :  SavableState(si),  symb(0){  int i;  if (si.version(::class_desc<PointGroup>()) < 2) {    ExEnv::errn() << "PointGroup: checkpoint file is too old: cannot read"                 << endl;    abort();  }  else {    for (i=0; i<3; i++) si.get(origin_[i]);  }  si.getstring(symb);  for (i=0; i < 3; i++)    for (int j=0; j < 3; j++)      si.get(frame(i,j));}PointGroup::PointGroup(const PointGroup& pg)  : symb(0){  *this = pg;}PointGroup::PointGroup(const Ref<PointGroup>& pg)  : symb(0){  *this = *pg.pointer();}PointGroup::~PointGroup(){  if (symb) { delete[] symb; symb=0; }}PointGroup&PointGroup::operator=(const PointGroup& pg){  set_symbol(pg.symb);  frame = pg.frame;  origin_ = pg.origin_;  return *this;}voidPointGroup::set_symbol(const char *sym){  if (sym) {    if (symb) delete[] symb;    int len;    symb = new char[(len=strlen(sym))+1];    for (int i=0; i<len; i++) symb[i] = (char) tolower(sym[i]);    symb[len] = '\0';  } else {    set_symbol("c1");  }}voidPointGroup::save_data_state(StateOut& so){  int i;  for (i=0; i<3; i++) so.put(origin_[i]);  so.putstring(symb);  for (i=0; i < 3; i++)    for (int j=0; j < 3; j++)      so.put(frame(i,j));}CharacterTablePointGroup::char_table() const{  CharacterTable ret(symb,frame);  return ret;}intPointGroup::equiv(const Ref<PointGroup> &grp, double tol) const{  if (strcmp(symb,grp->symb)) return 0;  for (int i=0; i < 3; i++) {    // origin isn't realy used, so don't check    //if (fabs(origin_[i] - grp->origin_[i]) > tol) return 0;    for (int j=0; j < 3; j++) {      if (fabs(frame(i,j) - grp->frame(i,j)) > tol) return 0;    }  }  return 1;}voidPointGroup::print(ostream &o) const{  int i,j;  o << indent << "symmetry = " << symb << endl;  int unit_frame = 1;  int zero_origin = 1;  for (i=0; i<3; i++) {    for (j=0; j<3; j++) {      if (i==j && fabs(frame(i,j)-1.0) > 1.0e-10) unit_frame = 0;      else if (i != j && fabs(frame(i,j)) > 1.0e-10) unit_frame = 0;    }    if (fabs(origin_[i]) > 1.0e-10) zero_origin = 0;  }  if (!unit_frame) {    o << indent << "symmetry_frame = [";    o << incindent;    for (i=0; i<3; i++) {      o << endl << indent;      o << "[";      for (j=0; j<3; j++) {        o << scprintf(" % 18.16f", frame(i,j));      }      o << "]";    }    o << "]" << endl;    o << decindent;  }  if (!zero_origin) {    o << indent << "origin = [";    for (i=0; i<3; i++) {      o << scprintf(" % 18.16f", origin_[i]);    }    o << "]" << endl;  }}/////////////////////////////////////////////////////////////////////////////// Local Variables:// mode: c++// c-file-style: "ETS"// End:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -