Inheritance diagram for PmeXPencil:

Public Member Functions | |
| PmeXPencil_SDAG_CODE | PmeXPencil () |
| PmeXPencil (CkMigrateMessage *) | |
| void | fft_init () |
| void | recv_trans (const PmeTransMsg *) |
| void | forward_fft () |
| void | pme_kspace () |
| void | backward_fft () |
| void | send_untrans () |
Public Attributes | |
| int | ny |
| int | nz |
| PmeKSpace * | myKSpace |
|
|
Definition at line 2565 of file ComputePme.C. References myKSpace. 02565 { __sdag_init(); myKSpace = 0; setMigratable(false); }
|
|
|
Definition at line 2566 of file ComputePme.C. 02566 { __sdag_init(); }
|
|
|
Definition at line 2946 of file ComputePme.C. 02946 {
02947 #ifdef NAMD_FFTW
02948 fftw(backward_plan, ny*nz,
02949 ((fftw_complex *) data), ny*nz, 1, (fftw_complex *) work, 1, 0);
02950 #endif
02951 }
|
|
|
Definition at line 2658 of file ComputePme.C. References PmeGrid::block2, PmeGrid::block3, PmeGrid::dim3, SimParameters::FFTWEstimate, PmePencilInitMsgData::grid, PmeGrid::K1, PmeGrid::K2, myKSpace, NAMD_die(), ny, nz, PmePencil< CBase_PmeXPencil >::order_init(), Node::simParameters, simParams, and PmePencilInitMsgData::xBlocks. 02658 {
02659 CProxy_Node nd(CkpvAccess(BOCclass_group).node);
02660 Node *node = nd.ckLocalBranch();
02661 SimParameters *simParams = node->simParameters;
02662
02663 int K1 = initdata.grid.K1;
02664 int K2 = initdata.grid.K2;
02665 int dim3 = initdata.grid.dim3;
02666 int block2 = initdata.grid.block2;
02667 int block3 = initdata.grid.block3;
02668
02669 ny = block2;
02670 if ( (thisIndex.y + 1) * block2 > K2 ) ny = K2 - thisIndex.y * block2;
02671 nz = block3;
02672 if ( (thisIndex.z+1)*block3 > dim3/2 ) nz = dim3/2 - thisIndex.z*block3;
02673
02674 data = new float[K1*block2*block3*2];
02675 work = new float[2*K1];
02676
02677 order_init(initdata.xBlocks);
02678
02679 #ifdef NAMD_FFTW
02680 CmiLock(ComputePmeMgr::fftw_plan_lock);
02681
02682 forward_plan = fftw_create_plan_specific(K1, FFTW_FORWARD,
02683 ( simParams->FFTWEstimate ? FFTW_ESTIMATE : FFTW_MEASURE )
02684 | FFTW_IN_PLACE | FFTW_USE_WISDOM, (fftw_complex *) data,
02685 ny*nz, (fftw_complex *) work, 1);
02686 backward_plan = fftw_create_plan_specific(K1, FFTW_BACKWARD,
02687 ( simParams->FFTWEstimate ? FFTW_ESTIMATE : FFTW_MEASURE )
02688 | FFTW_IN_PLACE | FFTW_USE_WISDOM, (fftw_complex *) data,
02689 ny*nz, (fftw_complex *) work, 1);
02690
02691 CmiUnlock(ComputePmeMgr::fftw_plan_lock);
02692 #else
02693 NAMD_die("Sorry, FFTW must be compiled in to use PME.");
02694 #endif
02695
02696 myKSpace = new PmeKSpace(initdata.grid,
02697 thisIndex.y*block2, thisIndex.y*block2 + ny,
02698 thisIndex.z*block3, thisIndex.z*block3 + nz);
02699 }
|
|
|
Definition at line 2921 of file ComputePme.C. 02921 {
02922 #ifdef NAMD_FFTW
02923 fftw(forward_plan, ny*nz,
02924 ((fftw_complex *) data), ny*nz, 1, (fftw_complex *) work, 1, 0);
02925 #endif
02926 }
|
|
|
Definition at line 2928 of file ComputePme.C. References BigReal, PmeKSpace::compute_energy(), and myKSpace. 02928 {
02929
02930 evir = 0.;
02931
02932 #ifdef FFTCHECK
02933 return;
02934 #endif
02935
02936 BigReal ewaldcof = ComputeNonbondedUtil::ewaldcof;
02937
02938 int numGrids = 1;
02939 for ( int g=0; g<numGrids; ++g ) {
02940 evir[0] = myKSpace->compute_energy(data+0*g,
02941 lattice, ewaldcof, &(evir[1]));
02942 }
02943
02944 }
|
|
|
Definition at line 2884 of file ComputePme.C. References PmeGrid::block1, PmePencilInitMsgData::grid, PmeTransMsg::hasData, PmeGrid::K1, PmeTransMsg::lattice, PmeTransMsg::nx, ny, nz, PmeTransMsg::qgrid, PmeTransMsg::sequence, and PmeTransMsg::sourceNode. 02884 {
02885 if ( imsg == 0 ) {
02886 lattice = msg->lattice;
02887 sequence = msg->sequence;
02888 }
02889 int block1 = initdata.grid.block1;
02890 int K1 = initdata.grid.K1;
02891 int ib = msg->sourceNode;
02892 int nx = msg->nx;
02893 if ( msg->hasData ) {
02894 const float *md = msg->qgrid;
02895 for ( int i=ib*block1; i<(ib*block1+nx); ++i ) {
02896 float *d = data + i*ny*nz*2;
02897 for ( int j=0; j<ny; ++j, d += nz*2 ) {
02898 for ( int k=0; k<nz; ++k ) {
02899 #ifdef ZEROCHECK
02900 if ( (*md) == 0. ) CkPrintf("0 in YX at %d %d %d %d %d %d %d %d %d\n",
02901 ib, thisIndex.y, thisIndex.z, i, j, k, nx, ny, nz);
02902 #endif
02903 d[2*k] = *(md++);
02904 d[2*k+1] = *(md++);
02905 }
02906 }
02907 }
02908 } else {
02909 for ( int i=ib*block1; i<(ib*block1+nx); ++i ) {
02910 float *d = data + i*ny*nz*2;
02911 for ( int j=0; j<ny; ++j, d += nz*2 ) {
02912 for ( int k=0; k<nz; ++k ) {
02913 d[2*k] = 0;
02914 d[2*k+1] = 0;
02915 }
02916 }
02917 }
02918 }
02919 }
|
|
|
Definition at line 2953 of file ComputePme.C. References PmeGrid::block1, PmeUntransMsg::evir, PmePencilInitMsgData::grid, PmeUntransMsg::has_evir, PmeGrid::K1, PmeUntransMsg::ny, ny, nz, PME_UNTRANS_PRIORITY, PmeUntransMsg::qgrid, SET_PRIORITY, PmeUntransMsg::sourceNode, PmePencilInitMsgData::xBlocks, and PmePencilInitMsgData::yPencil. 02953 {
02954 int xBlocks = initdata.xBlocks;
02955 int block1 = initdata.grid.block1;
02956 int K1 = initdata.grid.K1;
02957 int send_evir = 1;
02958 for ( int isend=0; isend<xBlocks; ++isend ) {
02959 int ib = send_order[isend];
02960 if ( ! needs_reply[ib] ) continue;
02961 int nx = block1;
02962 if ( (ib+1)*block1 > K1 ) nx = K1 - ib*block1;
02963 PmeUntransMsg *msg = new (nx*ny*nz*2,send_evir,PRIORITY_SIZE) PmeUntransMsg;
02964 if ( send_evir ) {
02965 msg->evir[0] = evir;
02966 msg->has_evir = 1;
02967 send_evir = 0;
02968 } else {
02969 msg->has_evir = 0;
02970 }
02971 msg->sourceNode = thisIndex.y;
02972 msg->ny = ny;
02973 float *md = msg->qgrid;
02974 for ( int i=ib*block1; i<(ib*block1+nx); ++i ) {
02975 float *d = data + i*ny*nz*2;
02976 for ( int j=0; j<ny; ++j, d += nz*2 ) {
02977 for ( int k=0; k<nz; ++k ) {
02978 *(md++) = d[2*k];
02979 *(md++) = d[2*k+1];
02980 }
02981 }
02982 }
02983 SET_PRIORITY(msg,sequence,PME_UNTRANS_PRIORITY)
02984 initdata.yPencil(ib,0,thisIndex.z).recvUntrans(msg);
02985 }
02986 }
|
|
|
Definition at line 2577 of file ComputePme.C. Referenced by fft_init(), pme_kspace(), and PmeXPencil(). |
|
|
Definition at line 2576 of file ComputePme.C. Referenced by backward_fft(), fft_init(), forward_fft(), recv_trans(), and send_untrans(). |
|
|
Definition at line 2576 of file ComputePme.C. Referenced by backward_fft(), fft_init(), forward_fft(), recv_trans(), and send_untrans(). |
1.3.9.1