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 | |
| fftw_plan | forward_plan |
| fftw_plan | backward_plan |
| int | ny |
| int | nz |
| PmeKSpace * | myKSpace |
|
|
Definition at line 2459 of file ComputePme.C. References myKSpace. 02459 { __sdag_init(); myKSpace = 0; setMigratable(false); }
|
|
|
Definition at line 2460 of file ComputePme.C. 02460 { __sdag_init(); }
|
|
|
Definition at line 2840 of file ComputePme.C. References backward_plan, ny, and nz. 02840 {
02841 #ifdef NAMD_FFTW
02842 fftw(backward_plan, ny*nz,
02843 ((fftw_complex *) data), ny*nz, 1, (fftw_complex *) work, 1, 0);
02844 #endif
02845 }
|
|
|
Definition at line 2552 of file ComputePme.C. References backward_plan, PmeGrid::block2, PmeGrid::block3, PmeGrid::dim3, SimParameters::FFTWEstimate, forward_plan, PmePencilInitMsgData::grid, PmeGrid::K1, PmeGrid::K2, myKSpace, NAMD_die(), ny, nz, PmePencil< CBase_PmeXPencil >::order_init(), Node::simParameters, simParams, and PmePencilInitMsgData::xBlocks. 02552 {
02553 CProxy_Node nd(CkpvAccess(BOCclass_group).node);
02554 Node *node = nd.ckLocalBranch();
02555 SimParameters *simParams = node->simParameters;
02556
02557 int K1 = initdata.grid.K1;
02558 int K2 = initdata.grid.K2;
02559 int dim3 = initdata.grid.dim3;
02560 int block2 = initdata.grid.block2;
02561 int block3 = initdata.grid.block3;
02562
02563 ny = block2;
02564 if ( (thisIndex.y + 1) * block2 > K2 ) ny = K2 - thisIndex.y * block2;
02565 nz = block3;
02566 if ( (thisIndex.z+1)*block3 > dim3/2 ) nz = dim3/2 - thisIndex.z*block3;
02567
02568 data = new float[K1*block2*block3*2];
02569 work = new float[2*K1];
02570
02571 order_init(initdata.xBlocks);
02572
02573 #ifdef NAMD_FFTW
02574 CmiLock(ComputePmeMgr::fftw_plan_lock);
02575
02576 forward_plan = fftw_create_plan_specific(K1, FFTW_FORWARD,
02577 ( simParams->FFTWEstimate ? FFTW_ESTIMATE : FFTW_MEASURE )
02578 | FFTW_IN_PLACE | FFTW_USE_WISDOM, (fftw_complex *) data,
02579 ny*nz, (fftw_complex *) work, 1);
02580 backward_plan = fftw_create_plan_specific(K1, FFTW_BACKWARD,
02581 ( simParams->FFTWEstimate ? FFTW_ESTIMATE : FFTW_MEASURE )
02582 | FFTW_IN_PLACE | FFTW_USE_WISDOM, (fftw_complex *) data,
02583 ny*nz, (fftw_complex *) work, 1);
02584
02585 CmiUnlock(ComputePmeMgr::fftw_plan_lock);
02586 #else
02587 NAMD_die("Sorry, FFTW must be compiled in to use PME.");
02588 #endif
02589
02590 myKSpace = new PmeKSpace(initdata.grid,
02591 thisIndex.y*block2, thisIndex.y*block2 + ny,
02592 thisIndex.z*block3, thisIndex.z*block3 + nz);
02593 }
|
|
|
Definition at line 2815 of file ComputePme.C. References forward_plan, ny, and nz. 02815 {
02816 #ifdef NAMD_FFTW
02817 fftw(forward_plan, ny*nz,
02818 ((fftw_complex *) data), ny*nz, 1, (fftw_complex *) work, 1, 0);
02819 #endif
02820 }
|
|
|
Definition at line 2822 of file ComputePme.C. References BigReal, PmeKSpace::compute_energy(), and myKSpace. 02822 {
02823
02824 evir = 0.;
02825
02826 #ifdef FFTCHECK
02827 return;
02828 #endif
02829
02830 BigReal ewaldcof = ComputeNonbondedUtil::ewaldcof;
02831
02832 int numGrids = 1;
02833 for ( int g=0; g<numGrids; ++g ) {
02834 evir[0] = myKSpace->compute_energy(data+0*g,
02835 lattice, ewaldcof, &(evir[1]));
02836 }
02837
02838 }
|
|
|
Definition at line 2778 of file ComputePme.C. References PmeGrid::block1, PmePencilInitMsgData::grid, PmeTransMsg::hasData, j, PmeGrid::K1, PmeTransMsg::lattice, PmeTransMsg::nx, ny, nz, PmeTransMsg::qgrid, PmeTransMsg::sequence, and PmeTransMsg::sourceNode. 02778 {
02779 if ( imsg == 0 ) {
02780 lattice = msg->lattice;
02781 sequence = msg->sequence;
02782 }
02783 int block1 = initdata.grid.block1;
02784 int K1 = initdata.grid.K1;
02785 int ib = msg->sourceNode;
02786 int nx = msg->nx;
02787 if ( msg->hasData ) {
02788 const float *md = msg->qgrid;
02789 for ( int i=ib*block1; i<(ib*block1+nx); ++i ) {
02790 float *d = data + i*ny*nz*2;
02791 for ( int j=0; j<ny; ++j, d += nz*2 ) {
02792 for ( int k=0; k<nz; ++k ) {
02793 #ifdef ZEROCHECK
02794 if ( (*md) == 0. ) CkPrintf("0 in YX at %d %d %d %d %d %d %d %d %d\n",
02795 ib, thisIndex.y, thisIndex.z, i, j, k, nx, ny, nz);
02796 #endif
02797 d[2*k] = *(md++);
02798 d[2*k+1] = *(md++);
02799 }
02800 }
02801 }
02802 } else {
02803 for ( int i=ib*block1; i<(ib*block1+nx); ++i ) {
02804 float *d = data + i*ny*nz*2;
02805 for ( int j=0; j<ny; ++j, d += nz*2 ) {
02806 for ( int k=0; k<nz; ++k ) {
02807 d[2*k] = 0;
02808 d[2*k+1] = 0;
02809 }
02810 }
02811 }
02812 }
02813 }
|
|
|
Definition at line 2847 of file ComputePme.C. References PmeGrid::block1, PmeUntransMsg::evir, PmePencilInitMsgData::grid, PmeUntransMsg::has_evir, j, PmeGrid::K1, PmeUntransMsg::ny, ny, nz, PME_UNTRANS_PRIORITY, PmeUntransMsg::qgrid, SET_PRIORITY, PmeUntransMsg::sourceNode, PmePencilInitMsgData::xBlocks, and PmePencilInitMsgData::yPencil. 02847 {
02848 int xBlocks = initdata.xBlocks;
02849 int block1 = initdata.grid.block1;
02850 int K1 = initdata.grid.K1;
02851 int send_evir = 1;
02852 for ( int isend=0; isend<xBlocks; ++isend ) {
02853 int ib = send_order[isend];
02854 if ( ! needs_reply[ib] ) continue;
02855 int nx = block1;
02856 if ( (ib+1)*block1 > K1 ) nx = K1 - ib*block1;
02857 PmeUntransMsg *msg = new (nx*ny*nz*2,send_evir,PRIORITY_SIZE) PmeUntransMsg;
02858 if ( send_evir ) {
02859 msg->evir[0] = evir;
02860 msg->has_evir = 1;
02861 send_evir = 0;
02862 } else {
02863 msg->has_evir = 0;
02864 }
02865 msg->sourceNode = thisIndex.y;
02866 msg->ny = ny;
02867 float *md = msg->qgrid;
02868 for ( int i=ib*block1; i<(ib*block1+nx); ++i ) {
02869 float *d = data + i*ny*nz*2;
02870 for ( int j=0; j<ny; ++j, d += nz*2 ) {
02871 for ( int k=0; k<nz; ++k ) {
02872 *(md++) = d[2*k];
02873 *(md++) = d[2*k+1];
02874 }
02875 }
02876 }
02877 SET_PRIORITY(msg,sequence,PME_UNTRANS_PRIORITY)
02878 initdata.yPencil(ib,0,thisIndex.z).recvUntrans(msg);
02879 }
02880 }
|
|
|
Definition at line 2468 of file ComputePme.C. Referenced by backward_fft(), and fft_init(). |
|
|
Definition at line 2468 of file ComputePme.C. Referenced by fft_init(), and forward_fft(). |
|
|
Definition at line 2471 of file ComputePme.C. Referenced by fft_init(), pme_kspace(), and PmeXPencil(). |
|
|
Definition at line 2470 of file ComputePme.C. Referenced by backward_fft(), fft_init(), forward_fft(), recv_trans(), and send_untrans(). |
|
|
Definition at line 2470 of file ComputePme.C. Referenced by backward_fft(), fft_init(), forward_fft(), recv_trans(), and send_untrans(). |
1.3.9.1