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

📄 messint.cc

📁 大型并行量子化学软件;支持密度泛函(DFT)。可以进行各种量子化学计算。支持CHARMM并行计算。非常具有应用价值。
💻 CC
字号:
//// messint.cc//// Copyright (C) 1996 Limit Point Systems, Inc.//// Author: Curtis Janssen <cljanss@limitpt.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.//#include <util/misc/formio.h>#include <util/group/message.h>using namespace std;using namespace sc;static ClassDesc intMessageGrp_cd(  typeid(intMessageGrp),"intMessageGrp",1,"public MessageGrp",  0, 0, 0);intMessageGrp::intMessageGrp():  ctl_nbit(2),  ctl_mask(0x3){}intMessageGrp::intMessageGrp(const Ref<KeyVal>& keyval):  MessageGrp(keyval),  ctl_nbit(2),  ctl_mask(0x3){}intMessageGrp::~intMessageGrp(){  delete[] source_seq;  delete[] target_seq;}voidintMessageGrp::initialize(int me, int n, int nbits){  int i;    // Initialize the arrays storing the next sequence number.  source_seq = new int[n];  target_seq = new int[n];  for (i=0; i<n; i++) {      source_seq[i] = 0;      target_seq[i] = 0;    }  // Find how many bits are needed to store the source information.  int tmp = 1;  for (i=1; tmp<n; i++) {      tmp = tmp<<1;    }  src_nbit = i;  // The remaining bits are for sequence information.  seq_nbit = nbits - ctl_nbit - src_nbit;  if (seq_nbit < 8) {      ExEnv::errn() << "intMessageGrp: not enough bits in underlying msgtype" << endl;      abort();    }  // The bits available to user defined messages overlap  // with the seq and the src bits.  typ_nbit = seq_nbit + src_nbit;  // Compute the shifts needed to construct a message type.  seq_shift = 0;  typ_shift = 0;  src_shift = seq_shift + seq_nbit;  ctl_shift = src_shift + src_nbit;  // Compute the masks for each field.  seq_mask = (1<<seq_nbit) - 1;  typ_mask = (1<<typ_nbit) - 1;  src_mask = (1<<src_nbit) - 1;  // Complete initialization of the base class.  MessageGrp::initialize(me, n);}intintMessageGrp::msgtype_typ(int msgtype){  return msgtype>>typ_shift & typ_mask;}intintMessageGrp::typ_msgtype(int usrtype){  return usrtype<<typ_shift | 1<<ctl_shift;}intintMessageGrp::seq_msgtype(int source, int seq){  return source<<src_shift | seq<<seq_shift | 2<<ctl_shift;}voidintMessageGrp::raw_send(int target, void* data, int nbyte){  int& seq = target_seq[target];  int msgtype = seq_msgtype(me(),seq);#ifdef DEBUG  ExEnv::outn() << scprintf("node %d sending to %d(%d) msgtype = %d\n",                   me(),target,seq,msgtype);#endif  basic_send(target, msgtype, data, nbyte);  if (seq >= seq_mask) seq = 0;  else seq++;}voidintMessageGrp::raw_recv(int sender, void* data, int nbyte){  int& seq = source_seq[sender];  int msgtype = seq_msgtype(sender,seq);#ifdef DEBUG  ExEnv::outn() << scprintf("node %d receiving from %d(%d) msgtype = %d\n",                   me(),sender,seq,msgtype);#endif  basic_recv(msgtype, data, nbyte);#ifdef DEBUG  ExEnv::outn() << scprintf("node %d received %d\n",me(),msgtype);#endif  if (seq >= seq_mask) seq = 0;  else seq++;}voidintMessageGrp::raw_sendt(int target, int msgtype, void* data, int nbyte){  basic_send(target, typ_msgtype(msgtype), data, nbyte);}voidintMessageGrp::raw_recvt(int type, void* data, int nbyte){  basic_recv(typ_msgtype(type), data, nbyte);}intintMessageGrp::probet(int type){  return basic_probe(typ_msgtype(type));}intintMessageGrp::leftover_ctl_bits(){  return 3 << ctl_shift;}/////////////////////////////////////////////////////////////////////////////// Local Variables:// mode: c++// c-file-style: "CLJ"// End:

⌨️ 快捷键说明

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