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

📄 abstract.cc

📁 大型并行量子化学软件;支持密度泛函(DFT)。可以进行各种量子化学计算。支持CHARMM并行计算。非常具有应用价值。
💻 CC
📖 第 1 页 / 共 2 页
字号:
//    ioff += i;    }  convert(v);  delete[] v;}voidSymmSCMatrix::convert(double**a) const{  int i;  int j;  int nr;  nr = n();  for (i=0; i<nr; i++) {      for (j=0; j<=i; j++) {          a[i][j] = get_element(i,j);        }    }}voidSymmSCMatrix::scale(double a){  Ref<SCElementOp> op = new SCElementScale(a);  this->element_op(op);}voidSymmSCMatrix::scale_diagonal(double a){  Ref<SCElementOp> op = new SCElementScaleDiagonal(a);  this->element_op(op);}voidSymmSCMatrix::shift_diagonal(double a){  Ref<SCElementOp> op = new SCElementShiftDiagonal(a);  this->element_op(op);}voidSymmSCMatrix::unit(){  this->assign(0.0);  this->shift_diagonal(1.0);}voidSymmSCMatrix::assign_s(SymmSCMatrix*a){  this->assign(0.0);  this->accumulate(a);}voidSymmSCMatrix::print(ostream&o) const{  vprint(0, o, 10);}voidSymmSCMatrix::print(const char *t, ostream&o, int i) const{  vprint(t, o, i);}voidSymmSCMatrix::vprint(const char* title, ostream& out, int i) const{  RefSCMatrix m = kit()->matrix(dim(),dim());  m->assign(0.0);  m->accumulate(this);  m->print(title, out, i);}SymmSCMatrix*SymmSCMatrix::clone(){  return kit()->symmmatrix(dim());}SymmSCMatrix*SymmSCMatrix::copy(){  SymmSCMatrix* result = clone();  result->assign(this);  return result;}voidSymmSCMatrix::accumulate_symmetric_product(SCMatrix *a){  RefSCMatrix at = a->copy();  at->transpose_this();  RefSCMatrix m = kit()->matrix(a->rowdim(),a->rowdim());  m->assign(0.0);  m->accumulate_product(a, at.pointer());  scale(2.0);  accumulate_symmetric_sum(m.pointer());  scale(0.5);}voidSymmSCMatrix::accumulate_transform(SCMatrix *a, SymmSCMatrix *b,                                   SCMatrix::Transform t){  RefSCMatrix brect = kit()->matrix(b->dim(),b->dim());  brect->assign(0.0);  brect->accumulate(b);  RefSCMatrix res;  if (t == SCMatrix::TransposeTransform) {      RefSCMatrix at = a->copy();      at->transpose_this();      RefSCMatrix tmp = at->clone();      tmp->assign(0.0);      tmp->accumulate_product(at.pointer(), brect.pointer());      brect = 0;      at = 0;      res = kit()->matrix(dim(),dim());      res->assign(0.0);      res->accumulate_product(tmp.pointer(), a);    }  else {      RefSCMatrix tmp = a->clone();      tmp->assign(0.0);      tmp->accumulate_product(a,brect);      brect = 0;      RefSCMatrix at = a->copy();      at->transpose_this();      res = kit()->matrix(dim(),dim());      res->assign(0.0);      res->accumulate_product(tmp.pointer(), at.pointer());      at = 0;    }  scale(2.0);  accumulate_symmetric_sum(res.pointer());  scale(0.5);}voidSymmSCMatrix::accumulate_transform(SCMatrix *a, DiagSCMatrix *b,                                   SCMatrix::Transform t){  RefSCMatrix m = kit()->matrix(a->rowdim(),a->rowdim());  RefSCMatrix brect = kit()->matrix(b->dim(),b->dim());  brect->assign(0.0);  brect->accumulate(b);  RefSCMatrix tmp = a->clone();  tmp->assign(0.0);  RefSCMatrix res;    if (t == SCMatrix::TransposeTransform) {      RefSCMatrix at = a->copy();      at->transpose_this();      tmp->accumulate_product(at.pointer(), brect.pointer());      brect = 0;      at = 0;      res = kit()->matrix(dim(),dim());      res->assign(0.0);      res->accumulate_product(tmp.pointer(), a);    }  else {      tmp->accumulate_product(a, brect.pointer());      brect = 0;      RefSCMatrix at = a->copy();      at->transpose_this();      res = kit()->matrix(dim(),dim());      res->assign(0.0);      res->accumulate_product(tmp.pointer(), at.pointer());      at = 0;    }  tmp = 0;  scale(2.0);  accumulate_symmetric_sum(res.pointer());  scale(0.5);}voidSymmSCMatrix::accumulate_transform(SymmSCMatrix *a, SymmSCMatrix *b){  RefSCMatrix m = kit()->matrix(a->dim(),a->dim());  m->assign(0.0);  m->accumulate(a);  accumulate_transform(m.pointer(),b);}voidSymmSCMatrix::accumulate_symmetric_outer_product(SCVector *v){  RefSCMatrix m = kit()->matrix(dim(),dim());  m->assign(0.0);  m->accumulate_outer_product(v,v);  scale(2.0);  accumulate_symmetric_sum(m.pointer());  scale(0.5);}doubleSymmSCMatrix::scalar_product(SCVector *v){  RefSCVector v2 = kit()->vector(dim());  v2->assign(0.0);  v2->accumulate_product(this,v);  return v2->scalar_product(v);}Ref<MessageGrp>SymmSCMatrix::messagegrp() const{  return kit_->messagegrp();}/////////////////////////////////////////////////////////////////////////// DiagSCMatrix member functionsstatic ClassDesc DiagSCMatrix_cd(  typeid(DiagSCMatrix),"DiagSCMatrix",1,"public DescribedClass",  0, 0, 0);DiagSCMatrix::DiagSCMatrix(const RefSCDimension&a, SCMatrixKit *kit):  d(a),  kit_(kit){}voidDiagSCMatrix::save(StateOut&s){  int nr = n();  s.put(nr);  for (int i=0; i<nr; i++) {      s.put(get_element(i));    }}voidDiagSCMatrix::restore(StateIn& s){  int nrt, nr = n();  s.get(nrt);  if (nrt != nr) {      ExEnv::errn() << "DiagSCMatrix::restore(): bad dimension" << endl;      abort();    }  for (int i=0; i<nr; i++) {      double tmp;      s.get(tmp);      set_element(i, tmp);    }}doubleDiagSCMatrix::maxabs() const{  Ref<SCElementMaxAbs> op = new SCElementMaxAbs();  Ref<SCElementOp> abop = op.pointer();  ((DiagSCMatrix*)this)->element_op(abop);  return op->result();}voidDiagSCMatrix::randomize(){  Ref<SCElementOp> op = new SCElementRandomize();  this->element_op(op);}voidDiagSCMatrix::assign_val(double a){  Ref<SCElementOp> op = new SCElementAssign(a);  this->element_op(op);}voidDiagSCMatrix::assign_p(const double*a){  int i;  int nr = n();  for (i=0; i<nr; i++) {      set_element(i,a[i]);    }}voidDiagSCMatrix::convert(DiagSCMatrix*a){  assign(0.0);  convert_accumulate(a);}voidDiagSCMatrix::convert_accumulate(DiagSCMatrix*a){  Ref<SCElementOp> op = new SCElementAccumulateDiagSCMatrix(a);  element_op(op);}voidDiagSCMatrix::convert(double*a) const{  int i;  int nr = n();  for (i=0; i<nr; i++) {      a[i] = get_element(i);    }}voidDiagSCMatrix::scale(double a){  Ref<SCElementOp> op = new SCElementScale(a);  this->element_op(op);}voidDiagSCMatrix::assign_d(DiagSCMatrix*a){  this->assign(0.0);  this->accumulate(a);}voidDiagSCMatrix::print(ostream&o) const{  vprint(0, o, 10);}voidDiagSCMatrix::print(const char *t, ostream&o, int i) const{  vprint(t, o, i);}voidDiagSCMatrix::vprint(const char* title, ostream& out, int i) const{  RefSCMatrix m = kit()->matrix(dim(),dim());  m->assign(0.0);  m->accumulate(this);  m->print(title, out, i);}DiagSCMatrix*DiagSCMatrix::clone(){  return kit()->diagmatrix(dim());}DiagSCMatrix*DiagSCMatrix::copy(){  DiagSCMatrix* result = clone();  result->assign(this);  return result;}Ref<MessageGrp>DiagSCMatrix::messagegrp() const{  return kit_->messagegrp();}/////////////////////////////////////////////////////////////////////////// These member are used by the abstract SCVector classes./////////////////////////////////////////////////////////////////////////static ClassDesc SCVector_cd(  typeid(SCVector),"SCVector",1,"public DescribedClass",  0, 0, 0);SCVector::SCVector(const RefSCDimension&a, SCMatrixKit *kit):  d(a),  kit_(kit){}SCVector::~SCVector(){}voidSCVector::save(StateOut&s){  int nr = n();  s.put(nr);  for (int i=0; i<nr; i++) {      s.put(get_element(i));    }}voidSCVector::restore(StateIn& s){  int nrt, nr = n();  s.get(nrt);  if (nrt != nr) {      ExEnv::errn() << "SCVector::restore(): bad dimension" << endl;      abort();    }  for (int i=0; i<nr; i++) {      double tmp;      s.get(tmp);      set_element(i, tmp);    }}doubleSCVector::maxabs() const{  Ref<SCElementMaxAbs> op = new SCElementMaxAbs();  Ref<SCElementOp> abop = op.pointer();  ((SCVector*)this)->element_op(abop);  return op->result();}voidSCVector::randomize(){  Ref<SCElementOp> op = new SCElementRandomize();  this->element_op(op);}voidSCVector::assign_val(double a){  Ref<SCElementOp> op = new SCElementAssign(a);  this->element_op(op);}voidSCVector::assign_p(const double*a){  int i;  int nr = n();  for (i=0; i<nr; i++) {      set_element(i,a[i]);    }}voidSCVector::convert(SCVector*a){  assign(0.0);  convert_accumulate(a);}voidSCVector::convert_accumulate(SCVector*a){  Ref<SCElementOp> op = new SCElementAccumulateSCVector(a);  element_op(op);}voidSCVector::convert(double*a) const{  int i;  int nr = n();  for (i=0; i<nr; i++) {      a[i] = get_element(i);    }}voidSCVector::scale(double a){  Ref<SCElementOp> op = new SCElementScale(a);  this->element_op(op);}voidSCVector::assign_v(SCVector*a){  this->assign(0.0);  this->accumulate(a);}voidSCVector::print(ostream&o) const{  vprint(0, o, 10);}voidSCVector::print(const char *t, ostream&o, int i) const{  vprint(t, o, i);}voidSCVector::normalize(){  double norm = sqrt(scalar_product(this));  if (norm > 1.e-20) norm = 1.0/norm;  else {      ExEnv::errn() << indent           << "SCVector::normalize: tried to normalize tiny vector\n";      abort();    }  scale(norm);}SCVector*SCVector::clone(){  return kit()->vector(dim());}SCVector*SCVector::copy(){  SCVector* result = clone();  result->assign(this);  return result;}voidSCVector::accumulate_product_sv(SymmSCMatrix *m, SCVector *v){  RefSCMatrix mrect = kit()->matrix(m->dim(),m->dim());  mrect->assign(0.0);  mrect->accumulate(m);  accumulate_product(mrect.pointer(), v);}Ref<MessageGrp>SCVector::messagegrp() const{  return kit_->messagegrp();}/////////////////////////////////////////////////////////////////////////////// Local Variables:// mode: c++// c-file-style: "CLJ"// End:

⌨️ 快捷键说明

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