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

📄 block.cc

📁 大型并行量子化学软件;支持密度泛函(DFT)。可以进行各种量子化学计算。支持CHARMM并行计算。非常具有应用价值。
💻 CC
📖 第 1 页 / 共 2 页
字号:
  return ret;}double *SCMatrixDiagBlock::dat(){  return data;}intSCMatrixDiagBlock::ndat() const{  return iend-istart;}SCMatrixDiagBlock::~SCMatrixDiagBlock(){  delete[] data;}voidSCMatrixDiagBlock::process(SCElementOp*op){  SCMatrixDiagBlockIter i(this);  op->process(i);}voidSCMatrixDiagBlock::process(SCElementOp2*op,                           SCMatrixBlock* b){  SCMatrixDiagBlockIter i(this);  SCMatrixDiagBlockIter j((SCMatrixDiagBlock*)b);  op->process(i,j);}voidSCMatrixDiagBlock::process(SCElementOp3*op,                           SCMatrixBlock* b1, SCMatrixBlock* b2){  SCMatrixDiagBlockIter i(this);  SCMatrixDiagBlockIter j((SCMatrixDiagBlock*)b1);  SCMatrixDiagBlockIter k((SCMatrixDiagBlock*)b2);  op->process(i,j,k);}/////////////////////////////////////////////////////////////////////////////// SCMatrixDiagSubBlock member functionsstatic ClassDesc SCMatrixDiagSubBlock_cd(  typeid(SCMatrixDiagSubBlock),"SCMatrixDiagSubBlock",1,"public SCMatrixBlock",  0, 0, create<SCMatrixDiagSubBlock>);SCMatrixDiagSubBlock::SCMatrixDiagSubBlock(int s, int e, int o,                                           double* d):  istart(s),  jstart(s),  iend(e),  offset(o),  data(d){}SCMatrixDiagSubBlock::SCMatrixDiagSubBlock(int is, int ie,                                           int js, int o, double* d):  istart(is),  jstart(js),  iend(ie),  offset(o),  data(d){}SCMatrixDiagSubBlock::SCMatrixDiagSubBlock(StateIn&s):  SCMatrixBlock(s){  s.get(istart);  s.get(jstart);  s.get(iend);  s.get(offset);  data = 0;}voidSCMatrixDiagSubBlock::save_data_state(StateOut&s){  SCMatrixBlock::save_data_state(s);  s.put(istart);  s.put(jstart);  s.put(iend);  s.put(offset);}SCMatrixDiagSubBlock::~SCMatrixDiagSubBlock(){}voidSCMatrixDiagSubBlock::process(SCElementOp*op){  SCMatrixDiagSubBlockIter i(this);  op->process(i);}voidSCMatrixDiagSubBlock::process(SCElementOp2*op,                              SCMatrixBlock* b){  SCMatrixDiagSubBlockIter i(this);  SCMatrixDiagSubBlockIter j((SCMatrixDiagSubBlock*)b);  op->process(i,j);}voidSCMatrixDiagSubBlock::process(SCElementOp3*op,                              SCMatrixBlock* b1,                              SCMatrixBlock* b2){  SCMatrixDiagSubBlockIter i(this);  SCMatrixDiagSubBlockIter j((SCMatrixDiagSubBlock*)b1);  SCMatrixDiagSubBlockIter k((SCMatrixDiagSubBlock*)b2);  op->process(i,j,k);}/////////////////////////////////////////////////////////////////////////////// SCVectorSimpleBlock member functionsstatic ClassDesc SCVectorSimpleBlock_cd(  typeid(SCVectorSimpleBlock),"SCVectorSimpleBlock",1,"public SCMatrixBlock",  0, 0, create<SCVectorSimpleBlock>);SCVectorSimpleBlock::SCVectorSimpleBlock(int s, int e):  istart(s),  iend(e){  data = new double[e-s];}SCVectorSimpleBlock::SCVectorSimpleBlock(StateIn&s):  SCMatrixBlock(s){  s.get(istart);  s.get(iend);  s.get(data);}voidSCVectorSimpleBlock::save_data_state(StateOut&s){  SCMatrixBlock::save_data_state(s);  s.put(istart);  s.put(iend);  s.put(data,iend-istart);}SCMatrixBlock *SCVectorSimpleBlock::deepcopy() const{  SCVectorSimpleBlock *ret = new SCVectorSimpleBlock(istart,iend);  ret->blocki = blocki;  ret->blockj = blockj;  memcpy(ret->data, data, sizeof(double)*ndat());  return ret;}double *SCVectorSimpleBlock::dat(){  return data;}intSCVectorSimpleBlock::ndat() const{  return iend-istart;}SCVectorSimpleBlock::~SCVectorSimpleBlock(){  delete[] data;}voidSCVectorSimpleBlock::process(SCElementOp*op){  SCVectorSimpleBlockIter i(this);  op->process(i);}voidSCVectorSimpleBlock::process(SCElementOp2*op,                             SCMatrixBlock* b){  SCVectorSimpleBlockIter i(this);  SCVectorSimpleBlockIter j((SCVectorSimpleBlock*)b);  op->process(i,j);}voidSCVectorSimpleBlock::process(SCElementOp3*op,                             SCMatrixBlock* b1,                             SCMatrixBlock* b2){  SCVectorSimpleBlockIter i(this);  SCVectorSimpleBlockIter j((SCVectorSimpleBlock*)b1);  SCVectorSimpleBlockIter k((SCVectorSimpleBlock*)b2);  op->process(i,j,k);}/////////////////////////////////////////////////////////////////////////////// SCVectorSimpleSubBlock member functionsstatic ClassDesc SCVectorSimpleSubBlock_cd(  typeid(SCVectorSimpleSubBlock),"SCVectorSimpleSubBlock",1,"public SCMatrixBlock",  0, 0, create<SCVectorSimpleSubBlock>);SCVectorSimpleSubBlock::SCVectorSimpleSubBlock(int s, int e, int o,                                               double* d):  istart(s),  iend(e),  offset(o),  data(d){}SCVectorSimpleSubBlock::SCVectorSimpleSubBlock(StateIn&s):  SCMatrixBlock(s){  s.get(istart);  s.get(iend);  s.get(offset);  data = 0;}voidSCVectorSimpleSubBlock::save_data_state(StateOut&s){  SCMatrixBlock::save_data_state(s);  s.put(istart);  s.put(iend);  s.put(offset);}SCVectorSimpleSubBlock::~SCVectorSimpleSubBlock(){}voidSCVectorSimpleSubBlock::process(SCElementOp*op){  SCVectorSimpleSubBlockIter i(this);  op->process(i);}voidSCVectorSimpleSubBlock::process(SCElementOp2*op,                                SCMatrixBlock* b){  SCVectorSimpleSubBlockIter i(this);  SCVectorSimpleSubBlockIter j((SCVectorSimpleSubBlock*)b);  op->process(i,j);}voidSCVectorSimpleSubBlock::process(SCElementOp3*op,                                SCMatrixBlock* b1,                                SCMatrixBlock* b2){  SCVectorSimpleSubBlockIter i(this);  SCVectorSimpleSubBlockIter j((SCVectorSimpleSubBlock*)b1);  SCVectorSimpleSubBlockIter k((SCVectorSimpleSubBlock*)b2);  op->process(i,j,k);}///////////////////////////////////////////////////////////////////////// SCMatrixSubblockIter// inlined or pure virtual///////////////////////////////////////////////////////////////////////// SCMatrixSimpleSubblockIterSCMatrixSimpleSubblockIter::SCMatrixSimpleSubblockIter(    Access access_,    const Ref<SCMatrixBlock> &b):  SCMatrixSubblockIter(access_){  block_ = b;}voidSCMatrixSimpleSubblockIter::begin(){  if (block_.nonnull()) ready_ = 1;  else ready_ = 0;}intSCMatrixSimpleSubblockIter::ready(){  return ready_;}voidSCMatrixSimpleSubblockIter::next(){  ready_ = 0;}SCMatrixBlock *SCMatrixSimpleSubblockIter::block(){  return block_.pointer();}///////////////////////////////////////////////////////////////////////// SCMatrixListSubblockIterSCMatrixListSubblockIter::SCMatrixListSubblockIter(    Access access,    const Ref<SCMatrixBlockList> &list    ):  SCMatrixSubblockIter(access),  list_(list){}voidSCMatrixListSubblockIter::begin(){  iter_ = list_->begin();}intSCMatrixListSubblockIter::ready(){  return iter_ != list_->end();}voidSCMatrixListSubblockIter::next(){  iter_++;}SCMatrixBlock *SCMatrixListSubblockIter::block(){  return iter_.block();}///////////////////////////////////////////////////////////////////////// SCMatrixNullSubblockIterSCMatrixNullSubblockIter::SCMatrixNullSubblockIter():  SCMatrixSubblockIter(None){}SCMatrixNullSubblockIter::SCMatrixNullSubblockIter(Access access):  SCMatrixSubblockIter(access){}voidSCMatrixNullSubblockIter::begin(){}intSCMatrixNullSubblockIter::ready(){  return 0;}voidSCMatrixNullSubblockIter::next(){}SCMatrixBlock *SCMatrixNullSubblockIter::block(){  return 0;}///////////////////////////////////////////////////////////////////////// SCMatrixCompositeSubblockIterSCMatrixCompositeSubblockIter::SCMatrixCompositeSubblockIter(    Ref<SCMatrixSubblockIter>& i1,    Ref<SCMatrixSubblockIter>& i2):  SCMatrixSubblockIter(None){  niters_ = 0;  if (i1.nonnull()) { niters_++; }  if (i2.nonnull()) { niters_++; }  iters_ = new Ref<SCMatrixSubblockIter>[niters_];  iiter_ = 0;  if (i1.nonnull()) { iters_[iiter_] = i1; iiter_++; }  if (i2.nonnull()) { iters_[iiter_] = i2; iiter_++; }  if (niters_) access_ = iters_[0]->access();  for (int i=0; i<niters_; i++) {      if (iters_[i]->access() != access_) {          ExEnv::errn() << "SCMatrixCompositeSubblockIter: access not compatible"               << endl;          abort();        }    }}SCMatrixCompositeSubblockIter::SCMatrixCompositeSubblockIter(    Access access_,    int niters):  SCMatrixSubblockIter(access_){  niters_ = niters;  iters_ = new Ref<SCMatrixSubblockIter>[niters_];}SCMatrixCompositeSubblockIter::~SCMatrixCompositeSubblockIter(){  delete[] iters_;}voidSCMatrixCompositeSubblockIter::set_iter(int i,                                        const Ref<SCMatrixSubblockIter>& iter){  iters_[i] = iter;  if (iters_[i]->access() != access_) {      ExEnv::errn() << "SCMatrixCompositeSubblockIter: access not compatible"           << endl;      abort();    }}voidSCMatrixCompositeSubblockIter::begin(){  if (niters_ == 0) return;  iiter_ = 0;  iters_[iiter_]->begin();  while (!iters_[iiter_]->ready()) {      if (iiter_ < niters_-1) {          iiter_++;          iters_[iiter_]->begin();        }      else break;    }}intSCMatrixCompositeSubblockIter::ready(){  return iters_[iiter_]->ready();}voidSCMatrixCompositeSubblockIter::next(){  iters_[iiter_]->next();  while (!iters_[iiter_]->ready()) {      if (iiter_ < niters_-1) {          iiter_++;          iters_[iiter_]->begin();        }      else break;    }}SCMatrixBlock *SCMatrixCompositeSubblockIter::block(){  return iters_[iiter_]->block();}///////////////////////////////////////////////////////////////////////// SCMatrixJointSubblockIterSCMatrixJointSubblockIter::SCMatrixJointSubblockIter(    const Ref<SCMatrixSubblockIter>& i1,    const Ref<SCMatrixSubblockIter>& i2,    const Ref<SCMatrixSubblockIter>& i3,    const Ref<SCMatrixSubblockIter>& i4,    const Ref<SCMatrixSubblockIter>& i5):  SCMatrixSubblockIter(None){  niters_ = 0;  if (i1.nonnull()) { niters_++; }  if (i2.nonnull()) { niters_++; }  if (i3.nonnull()) { niters_++; }  if (i4.nonnull()) { niters_++; }  if (i5.nonnull()) { niters_++; }  iters_ = new Ref<SCMatrixSubblockIter>[niters_];  int i = 0;  if (i1.nonnull()) { iters_[i] = i1; i++; }  if (i2.nonnull()) { iters_[i] = i2; i++; }  if (i3.nonnull()) { iters_[i] = i3; i++; }  if (i4.nonnull()) { iters_[i] = i4; i++; }  if (i5.nonnull()) { iters_[i] = i5; i++; }}SCMatrixJointSubblockIter::~SCMatrixJointSubblockIter(){  delete[] iters_;}voidSCMatrixJointSubblockIter::begin(){  for (int i=0; i<niters_; i++) {      iters_[i]->begin();    }}intSCMatrixJointSubblockIter::ready(){  int nready = 0;  for (int i=0; i<niters_; i++) {      nready += (iters_[i]->ready()?1:0);    }  if (nready == niters_)    return 1;  else if (!nready)    return 0;  ExEnv::errn() << "SCMatrixJointSubblockIter: incompatible iterators" << endl;  abort();  return 0;}voidSCMatrixJointSubblockIter::next(){  for (int i=0; i<niters_; i++) {      iters_[i]->next();    }}SCMatrixBlock *SCMatrixJointSubblockIter::block(){  return block(0);}SCMatrixBlock *SCMatrixJointSubblockIter::block(int b){  return iters_[b]->block();}/////////////////////////////////////////////////////////////////////////////// Local Variables:// mode: c++// c-file-style: "CLJ"// End:

⌨️ 快捷键说明

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