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

📄 elemop.cc

📁 大型并行量子化学软件;支持密度泛函(DFT)。可以进行各种量子化学计算。支持CHARMM并行计算。非常具有应用价值。
💻 CC
📖 第 1 页 / 共 2 页
字号:
}/////////////////////////////////////////////////////////////////////////// SCElementInvert membersstatic ClassDesc SCElementInvert_cd(  typeid(SCElementInvert),"SCElementInvert",1,"public SCElementOp",  0, 0, create<SCElementInvert>);SCElementInvert::SCElementInvert(double threshold):  threshold_(threshold),  nbelowthreshold_(0),  deferred_(0){}SCElementInvert::SCElementInvert(StateIn&s):  SCElementOp(s){  s.get(threshold_);  s.get(nbelowthreshold_);  s.get(deferred_);}voidSCElementInvert::save_data_state(StateOut&s){  s.put(threshold_);  s.put(nbelowthreshold_);  s.put(deferred_);}SCElementInvert::~SCElementInvert() {}voidSCElementInvert::process(SCMatrixBlockIter&i){  for (i.reset(); i; ++i) {      double val = i.get();      if (fabs(val) > threshold_) val = 1.0/val;      else { val = 0.0; nbelowthreshold_++; }      i.set(val);    }}intSCElementInvert::has_side_effects(){  return 1;}intSCElementInvert::has_collect(){  return 1;}voidSCElementInvert::defer_collect(int h){  deferred_=h;}voidSCElementInvert::collect(const Ref<MessageGrp>&msg){  if (!deferred_)    msg->sum(nbelowthreshold_);}/////////////////////////////////////////////////////////////////////////// SCElementSquareRoot membersstatic ClassDesc SCElementSquareRoot_cd(  typeid(SCElementSquareRoot),"SCElementSquareRoot",1,"public SCElementOp",  0, 0, create<SCElementSquareRoot>);SCElementSquareRoot::SCElementSquareRoot() {}SCElementSquareRoot::SCElementSquareRoot(double a) {}SCElementSquareRoot::SCElementSquareRoot(StateIn&s):  SCElementOp(s){}voidSCElementSquareRoot::save_data_state(StateOut&s){}SCElementSquareRoot::~SCElementSquareRoot() {}voidSCElementSquareRoot::process(SCMatrixBlockIter&i){  for (i.reset(); i; ++i) {      double val = i.get();      if (val > 0.0) i.set(sqrt(i.get()));      else i.set(0.0);    }}intSCElementSquareRoot::has_side_effects(){  return 1;}/////////////////////////////////////////////////////////////////////////// SCElementMaxAbs membersstatic ClassDesc SCElementMaxAbs_cd(  typeid(SCElementMaxAbs),"SCElementMaxAbs",1,"public SCElementOp",  0, 0, create<SCElementMaxAbs>);SCElementMaxAbs::SCElementMaxAbs():deferred_(0), r(0.0) {}SCElementMaxAbs::SCElementMaxAbs(StateIn&s):  SCElementOp(s){  s.get(r);  s.get(deferred_);}voidSCElementMaxAbs::save_data_state(StateOut&s){  s.put(r);  s.put(deferred_);}SCElementMaxAbs::~SCElementMaxAbs() {}voidSCElementMaxAbs::process(SCMatrixBlockIter&i){  for (i.reset(); i; ++i) {      if (fabs(i.get()) > r) r = fabs(i.get());    }}doubleSCElementMaxAbs::result(){  return r;}intSCElementMaxAbs::has_collect(){  return 1;}voidSCElementMaxAbs::defer_collect(int h){  deferred_=h;}voidSCElementMaxAbs::collect(const Ref<MessageGrp>&msg){  if (!deferred_)    msg->max(r);}/////////////////////////////////////////////////////////////////////////// SCElementMin membersstatic ClassDesc SCElementMinAbs_cd(  typeid(SCElementMinAbs),"SCElementMinAbs",1,"public SCElementOp",  0, 0, create<SCElementMinAbs>);SCElementMinAbs::SCElementMinAbs(double rinit):deferred_(0), r(rinit) {}SCElementMinAbs::SCElementMinAbs(StateIn&s):  SCElementOp(s){  s.get(r);  s.get(deferred_);}voidSCElementMinAbs::save_data_state(StateOut&s){  s.put(r);  s.put(deferred_);}SCElementMinAbs::~SCElementMinAbs() {}voidSCElementMinAbs::process(SCMatrixBlockIter&i){  for (i.reset(); i; ++i) {      if (fabs(i.get()) < r) r = fabs(i.get());    }}doubleSCElementMinAbs::result(){  return r;}intSCElementMinAbs::has_collect(){  return 1;}voidSCElementMinAbs::defer_collect(int h){  deferred_=h;}voidSCElementMinAbs::collect(const Ref<MessageGrp>&msg){  if (!deferred_)    msg->min(r);}/////////////////////////////////////////////////////////////////////////// SCElementSumAbs membersstatic ClassDesc SCElementSumAbs_cd(  typeid(SCElementSumAbs),"SCElementSumAbs",1,"public SCElementOp",  0, 0, create<SCElementSumAbs>);SCElementSumAbs::SCElementSumAbs():deferred_(0), r(0.0) {}SCElementSumAbs::SCElementSumAbs(StateIn&s):  SCElementOp(s){  s.get(r);  s.get(deferred_);}voidSCElementSumAbs::save_data_state(StateOut&s){  s.put(r);  s.put(deferred_);}SCElementSumAbs::~SCElementSumAbs() {}voidSCElementSumAbs::process(SCMatrixBlockIter&i){  for (i.reset(); i; ++i) {      r += fabs(i.get());    }}doubleSCElementSumAbs::result(){  return r;}intSCElementSumAbs::has_collect(){  return 1;}voidSCElementSumAbs::defer_collect(int h){  deferred_=h;}voidSCElementSumAbs::collect(const Ref<MessageGrp>&msg){  if (!deferred_)    msg->sum(r);}/////////////////////////////////////////////////////////////////////////// SCElementAssign membersstatic ClassDesc SCElementAssign_cd(  typeid(SCElementAssign),"SCElementAssign",1,"public SCElementOp",  0, 0, create<SCElementAssign>);SCElementAssign::SCElementAssign(double a):assign(a) {}SCElementAssign::SCElementAssign(StateIn&s):  SCElementOp(s){  s.get(assign);}voidSCElementAssign::save_data_state(StateOut&s){  s.put(assign);}SCElementAssign::~SCElementAssign() {}voidSCElementAssign::process(SCMatrixBlockIter&i){  for (i.reset(); i; ++i) {      i.set(assign);    }}intSCElementAssign::has_side_effects(){  return 1;}/////////////////////////////////////////////////////////////////////////// SCElementRandomize membersstatic ClassDesc SCElementRandomize_cd(  typeid(SCElementRandomize),"SCElementRandomize",1,"public SCElementOp",  0, 0, create<SCElementRandomize>);SCElementRandomize::SCElementRandomize() {}SCElementRandomize::SCElementRandomize(StateIn&s):  SCElementOp(s){}voidSCElementRandomize::save_data_state(StateOut&s){}SCElementRandomize::~SCElementRandomize() {}voidSCElementRandomize::process(SCMatrixBlockIter&i){  for (i.reset(); i; ++i) {#ifdef HAVE_DRAND48      i.set(drand48()*(drand48()<0.5?1.0:-1.0));#else      int r=rand();      double dr = (double) r / 32767.0;      i.set(dr*(dr<0.5?1.0:-1.0));#endif    }}intSCElementRandomize::has_side_effects(){  return 1;}/////////////////////////////////////////////////////////////////////////// SCElementShiftDiagonal membersstatic ClassDesc SCElementShiftDiagonal_cd(  typeid(SCElementShiftDiagonal),"SCElementShiftDiagonal",1,"public SCElementOp",  0, 0, create<SCElementShiftDiagonal>);SCElementShiftDiagonal::SCElementShiftDiagonal(double a):shift_diagonal(a) {}SCElementShiftDiagonal::SCElementShiftDiagonal(StateIn&s):  SCElementOp(s){  s.get(shift_diagonal);}voidSCElementShiftDiagonal::save_data_state(StateOut&s){  s.put(shift_diagonal);}SCElementShiftDiagonal::~SCElementShiftDiagonal() {}voidSCElementShiftDiagonal::process(SCMatrixBlockIter&i){  for (i.reset(); i; ++i) {      if (i.i() == i.j()) i.set(shift_diagonal+i.get());    }}intSCElementShiftDiagonal::has_side_effects(){  return 1;}/////////////////////////////////////////////////////////////////////////// SCElementScaleDiagonal membersstatic ClassDesc SCElementScaleDiagonal_cd(  typeid(SCElementScaleDiagonal),"SCElementScaleDiagonal",1,"public SCElementOp",  0, 0, create<SCElementScaleDiagonal>);SCElementScaleDiagonal::SCElementScaleDiagonal(double a):scale_diagonal(a) {}SCElementScaleDiagonal::SCElementScaleDiagonal(StateIn&s):  SCElementOp(s){  s.get(scale_diagonal);}voidSCElementScaleDiagonal::save_data_state(StateOut&s){  s.put(scale_diagonal);}SCElementScaleDiagonal::~SCElementScaleDiagonal() {}voidSCElementScaleDiagonal::process(SCMatrixBlockIter&i){  for (i.reset(); i; ++i) {      if (i.i() == i.j()) i.set(scale_diagonal*i.get());    }}intSCElementScaleDiagonal::has_side_effects(){  return 1;}/////////////////////////////////////////////////////////////////////////// SCElementDot membersstatic ClassDesc SCElementDot_cd(  typeid(SCElementDot),"SCElementDot",1,"public SCElementOp",  0, 0, create<SCElementDot>);SCElementDot::SCElementDot(double**a, double**b, int n):  avects(a),  bvects(b),  length(n){}SCElementDot::SCElementDot(StateIn&s){  ExEnv::errn() << indent << "SCElementDot does not permit StateIn CTOR\n";  abort();}voidSCElementDot::save_data_state(StateOut&s){  ExEnv::errn() << indent << "SCElementDot does not permit save_data_state\n";  abort();}intSCElementDot::has_side_effects(){  return 1;}voidSCElementDot::process(SCMatrixBlockIter&i){  for (i.reset(); i; ++i) {      double tmp = i.get();      double* a = avects[i.i()];      double* b = bvects[i.j()];      for (int j = length; j; j--, a++, b++) {          tmp += *a * *b;        }      i.accum(tmp);    }}/////////////////////////////////////////////////////////////////////////// SCElementAccumulateSCMatrix membersstatic ClassDesc SCElementAccumulateSCMatrix_cd(  typeid(SCElementAccumulateSCMatrix),"SCElementAccumulateSCMatrix",1,"public SCElementOp",  0, 0, 0);SCElementAccumulateSCMatrix::SCElementAccumulateSCMatrix(SCMatrix*a):  m(a){}intSCElementAccumulateSCMatrix::has_side_effects(){  return 1;}voidSCElementAccumulateSCMatrix::process(SCMatrixBlockIter&i){  for (i.reset(); i; ++i) {      i.accum(m->get_element(i.i(), i.j()));    }}/////////////////////////////////////////////////////////////////////////// SCElementAccumulateSymmSCMatrix membersstatic ClassDesc SCElementAccumulateSymmSCMatrix_cd(  typeid(SCElementAccumulateSymmSCMatrix),"SCElementAccumulateSymmSCMatrix",1,"public SCElementOp",  0, 0, 0);SCElementAccumulateSymmSCMatrix::SCElementAccumulateSymmSCMatrix(    SymmSCMatrix*a):  m(a){}intSCElementAccumulateSymmSCMatrix::has_side_effects(){  return 1;}voidSCElementAccumulateSymmSCMatrix::process(SCMatrixBlockIter&i){  for (i.reset(); i; ++i) {      i.accum(m->get_element(i.i(), i.j()));    }}/////////////////////////////////////////////////////////////////////////// SCElementAccumulateDiagSCMatrix membersstatic ClassDesc SCElementAccumulateDiagSCMatrix_cd(  typeid(SCElementAccumulateDiagSCMatrix),"SCElementAccumulateDiagSCMatrix",1,"public SCElementOp",  0, 0, 0);SCElementAccumulateDiagSCMatrix::SCElementAccumulateDiagSCMatrix(    DiagSCMatrix*a):  m(a){}intSCElementAccumulateDiagSCMatrix::has_side_effects(){  return 1;}voidSCElementAccumulateDiagSCMatrix::process(SCMatrixBlockIter&i){  for (i.reset(); i; ++i) {      i.accum(m->get_element(i.i()));    }}/////////////////////////////////////////////////////////////////////////// SCElementAccumulateSCVector membersstatic ClassDesc SCElementAccumulateSCVector_cd(  typeid(SCElementAccumulateSCVector),"SCElementAccumulateSCVector",1,"public SCElementOp",  0, 0, 0);SCElementAccumulateSCVector::SCElementAccumulateSCVector(SCVector*a):  m(a){}intSCElementAccumulateSCVector::has_side_effects(){  return 1;}voidSCElementAccumulateSCVector::process(SCMatrixBlockIter&i){  for (i.reset(); i; ++i) {      i.accum(m->get_element(i.i()));    }}/////////////////////////////////////////////////////////////////////////////// Local Variables:// mode: c++// c-file-style: "CLJ"// End:

⌨️ 快捷键说明

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