18 #define VECTOR(A) A ## _X, A ## _Y, A ## _Z 19 #define TENSOR(A) A ## _XX, A ## _XY, A ## _XZ, \ 20 A ## _YX, A ## _YY, A ## _YZ, \ 21 A ## _ZX, A ## _ZY, A ## _ZZ 23 #define ADD_VECTOR(R,RL,D,DL) \ 24 R->item( RL ## _X ) += D[ DL ## _X ]; \ 25 R->item( RL ## _Y ) += D[ DL ## _Y ]; \ 26 R->item( RL ## _Z ) += D[ DL ## _Z ] 28 #define ADD_VECTOR_OBJECT(R,RL,D) \ 29 R->item( RL ## _X ) += D.x; \ 30 R->item( RL ## _Y ) += D.y; \ 31 R->item( RL ## _Z ) += D.z 33 #define ADD_TENSOR(R,RL,D,DL) \ 34 R->item( RL ## _XX) += D[ DL ## _XX ]; \ 35 R->item( RL ## _XY) += D[ DL ## _XY ]; \ 36 R->item( RL ## _XZ) += D[ DL ## _XZ ]; \ 37 R->item( RL ## _YX) += D[ DL ## _YX ]; \ 38 R->item( RL ## _YY) += D[ DL ## _YY ]; \ 39 R->item( RL ## _YZ) += D[ DL ## _YZ ]; \ 40 R->item( RL ## _ZX) += D[ DL ## _ZX ]; \ 41 R->item( RL ## _ZY) += D[ DL ## _ZY ]; \ 42 R->item( RL ## _ZZ) += D[ DL ## _ZZ ] 44 #define ADD_TENSOR_OBJECT(R,RL,D) \ 45 R->item( RL ## _XX) += D.xx; \ 46 R->item( RL ## _XY) += D.xy; \ 47 R->item( RL ## _XZ) += D.xz; \ 48 R->item( RL ## _YX) += D.yx; \ 49 R->item( RL ## _YY) += D.yy; \ 50 R->item( RL ## _YZ) += D.yz; \ 51 R->item( RL ## _ZX) += D.zx; \ 52 R->item( RL ## _ZY) += D.zy; \ 53 R->item( RL ## _ZZ) += D.zz 55 #define GET_VECTOR(O,R,A) \ 56 O.x = R->item( A ## _X ); \ 57 O.y = R->item( A ## _Y ); \ 58 O.z = R->item( A ## _Z ) 60 #define GET_TENSOR(O,R,A) \ 61 O.xx = R->item( A ## _XX); \ 62 O.xy = R->item( A ## _XY); \ 63 O.xz = R->item( A ## _XZ); \ 64 O.yx = R->item( A ## _YX); \ 65 O.yy = R->item( A ## _YY); \ 66 O.yz = R->item( A ## _YZ); \ 67 O.zx = R->item( A ## _ZX); \ 68 O.zy = R->item( A ## _ZY); \ 69 O.zz = R->item( A ## _ZZ) 114 TENSOR(REDUCTION_VIRIAL_NBOND),
115 TENSOR(REDUCTION_VIRIAL_SLOW),
116 TENSOR(REDUCTION_VIRIAL_AMD_DIHE),
118 TENSOR(REDUCTION_ALT_VIRIAL_NORMAL),
119 TENSOR(REDUCTION_ALT_VIRIAL_NBOND),
120 TENSOR(REDUCTION_ALT_VIRIAL_SLOW),
122 TENSOR(REDUCTION_INT_VIRIAL_NORMAL),
123 TENSOR(REDUCTION_INT_VIRIAL_NBOND),
124 TENSOR(REDUCTION_INT_VIRIAL_SLOW),
126 VECTOR(REDUCTION_EXT_FORCE_NBOND),
127 VECTOR(REDUCTION_EXT_FORCE_SLOW),
129 VECTOR(REDUCTION_MOMENTUM),
130 TENSOR(REDUCTION_MOMENTUM_SQUARED),
131 VECTOR(REDUCTION_ANGULAR_MOMENTUM),
132 VECTOR(REDUCTION_HALFSTEP_MOMENTUM),
140 VECTOR(REDUCTION_PAIR_VDW_FORCE),
141 VECTOR(REDUCTION_PAIR_ELECT_FORCE),
155 #if defined(NAMD_CUDA) || defined(NAMD_HIP) 167 TENSOR(MULTIGRATOR_REDUCTION_MOMENTUM_SQUARED),
190 #define REDUCTION_MAX_CHILDREN 4 212 for (
int i = 0; i < size; ++i ) {
data[i] = 0; }
255 int firstChild, lastChild;
256 int isMyChild(
int nodeID)
const {
257 return ( nodeID >= firstChild && nodeID < lastChild );
262 int isMyChild(
int nodeID)
const {
264 for(i=0;i<numChildren;i++)
265 if (children[i]==nodeID)
return 1;
268 int childIndex(
int nodeID)
const {
270 for(i=0;i<numChildren;i++)
271 if (children[i]==nodeID)
return i;
274 int isRoot(
void)
const {
return ( myParent == -1 ); }
277 void delSet(
int setID);
291 return CkpvAccess(ReductionMgr_instance);
298 const int max_intranode_children,
299 const int max_internode_children,
362 for (
int i=0; i<nitems; i++)
data[i] += arr[i];
371 virtual void submit(
void) = 0;
405 virtual void require(
const bool clearData =
true) = 0;
483 if (
data[i] != 0.0) {
516 nodeReduction->
zero();
void max(int i, BigReal v)
void buildSpanTree(const int pe, const int max_intranode_children, const int max_internode_children, int *parent, int *num_children, int **children)
ReductionValue & operator[](int index)
ReductionSetData(int seqNum, int size)
void submit(void) override
int * addToRemoteSequenceNumber
friend class RequireReductionCharm
virtual void require(const bool clearData=true)=0
virtual void submit(void)=0
ReductionSetData * getData(int seqNum)
~RequireReductionShared(void)
ReductionSet(int setID, int size, int numChildren)
void remoteRegister(ReductionRegisterMsg *msg)
SubmitReduction * willSubmit(int setID, int size=-1)
static ReductionMgr * Object(void)
double operator+=(double other)
~RequireReductionCharm(void)
void require(const bool clearData) override
~SubmitReductionCharm(void)
void submit(void) override
void add(int nitems, const BigReal *arr)
ReductionValue & item(int index)
int waitingForSequenceNumber
ReductionSetData * removeData(int seqNum)
SubmitReductionShared(void)
ReductionValue set[REDUCTION_MAX_RESERVED]
double operator=(double &other)
void remoteSubmit(ReductionSubmitMsg *msg)
void require(const bool clearData) override
~SubmitReductionShared(void)
BigReal item(int i) const
void increment_no_lock(double rvalue)
void setVal(const NodeReduction *other)
RequireReduction * willRequire(int setID, int size=-1)
RequireReductionShared(void)
virtual ~SubmitReduction(void)
void remoteUnregister(ReductionRegisterMsg *msg)
virtual ~RequireReduction()
ReductionSetData * dataQueue