4 #if !(defined(NAMD_HIP) || defined(NAMD_CUDA)) 5 struct float2 {
float x,y;};
25 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
37 NAMD_bug(
"PmePencilXYZ cannot be migrated");
46 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
56 NAMD_bug(
"PmePencilXYZ::initFFT, fftCompute not initialized");
59 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
66 void PmePencilXYZ::forwardFFT() {
68 NAMD_bug(
"PmePencilXYZ::forwardFFT, fftCompute not initialized");
69 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
74 void PmePencilXYZ::backwardFFT() {
76 NAMD_bug(
"PmePencilXYZ::backwardFFT, fftCompute not initialized");
77 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
82 void PmePencilXYZ::forwardDone() {
84 NAMD_bug(
"PmePencilXYZ::forwardDone, pmeKSpaceCompute not initialized");
85 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
92 NAMD_bug(
"PmePencilXYZ::backwardDone(), base class method called");
98 NAMD_bug(
"PmePencilXYZ::submitReductions, pmeKSpaceCompute not initialized");
105 double energy_F = energy;
114 scale1 = elecLambdaUp;
115 scale2 = elecLambda2Up;
123 scale1 = elecLambdaDown;
124 scale2 = elecLambda2Down;
132 scale1 = 1.0 - elecLambdaUp;
133 scale2 = 1.0 - elecLambda2Up;
141 scale1 = 1.0 - elecLambdaDown;
142 scale2 = 1.0 - elecLambda2Down;
152 scale1 = -1.0 * (elecLambdaUp + elecLambdaDown - 1.0);
153 scale2 = -1.0 * (elecLambda2Up + elecLambda2Down - 1.0);
160 for (
size_t i = 0; i < 9; ++i) {
166 double energy_TI_1 = 0.0;
167 double energy_TI_2 = 0.0;
173 scale1 = elecLambdaUp;
174 energy_TI_1 = energy;
180 scale1 = elecLambdaDown;
181 energy_TI_2 = energy;
187 scale1 = 1.0 - elecLambdaUp;
188 energy_TI_1 = -1.0 * energy;
194 scale1 = 1.0 - elecLambdaDown;
195 energy_TI_2 = -1.0 * energy;
202 scale1 = -1.0 * (elecLambdaUp + elecLambdaDown - 1.0);
203 energy_TI_1 = -1.0 * energy;
204 energy_TI_2 = -1.0 * energy;
208 for (
size_t i = 0; i < 9; ++i) {
218 reduction->
item(REDUCTION_VIRIAL_SLOW_XX) += virial[0];
219 reduction->
item(REDUCTION_VIRIAL_SLOW_XY) += virial[1];
220 reduction->
item(REDUCTION_VIRIAL_SLOW_XZ) += virial[2];
221 reduction->
item(REDUCTION_VIRIAL_SLOW_YX) += virial[3];
222 reduction->
item(REDUCTION_VIRIAL_SLOW_YY) += virial[4];
223 reduction->
item(REDUCTION_VIRIAL_SLOW_YZ) += virial[5];
224 reduction->
item(REDUCTION_VIRIAL_SLOW_ZX) += virial[6];
225 reduction->
item(REDUCTION_VIRIAL_SLOW_ZY) += virial[7];
226 reduction->
item(REDUCTION_VIRIAL_SLOW_ZZ) += virial[8];
230 bool ready_to_submit =
true;
235 if (ready_to_submit) {
278 setMigratable(
false);
279 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
286 NAMD_bug(
"PmePencilXY cannot be migrated");
298 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
306 NAMD_bug(
"PmePencilXY::initFFT, fftCompute not initialized");
309 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
316 void PmePencilXY::forwardFFT() {
318 NAMD_bug(
"PmePencilXY::forwardFFT, fftCompute not initialized");
319 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
324 void PmePencilXY::backwardFFT() {
326 NAMD_bug(
"PmePencilXY::backwardFFT, fftCompute not initialized");
327 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
335 int i0, i1, j0, j1, k0, k1;
337 i0, i1, j0, j1, k0, k1);
338 int size = (i1-i0+1)*(j1-j0+1)*(k1-k0+1);
343 void PmePencilXY::forwardDone() {
344 NAMD_bug(
"PmePencilXY::forwardDone(), base class method called");
347 void PmePencilXY::backwardDone() {
348 NAMD_bug(
"PmePencilXY::backwardDone(), base class method called");
351 void PmePencilXY::recvDataFromZ(
PmeBlockMsg *msg) {
352 NAMD_bug(
"PmePencilXY::recvDataFromZ(), base class method called");
355 void PmePencilXY::start(
const CkCallback &) {
356 NAMD_bug(
"PmePencilXY::start(), base class method called");
397 setMigratable(
false);
398 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
406 NAMD_bug(
"PmePencilX cannot be migrated");
414 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
422 NAMD_bug(
"PmePencilX::initFFT, fftCompute not initialized");
425 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
432 void PmePencilX::forwardFFT() {
434 NAMD_bug(
"PmePencilX::forwardFFT, fftCompute not initialized");
435 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
440 void PmePencilX::backwardFFT() {
442 NAMD_bug(
"PmePencilX::backwardFFT, fftCompute not initialized");
443 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
451 int i0, i1, j0, j1, k0, k1;
453 i0, i1, j0, j1, k0, k1);
454 int size = (i1-i0+1)*(j1-j0+1)*(k1-k0+1);
459 void PmePencilX::forwardDone() {
460 NAMD_bug(
"PmePencilX::forwardDone(), base class method called");
463 void PmePencilX::backwardDone() {
464 NAMD_bug(
"PmePencilX::backwardDone(), base class method called");
468 NAMD_bug(
"PmePencilX::recvDataFromY(), base class method called");
471 void PmePencilX::start(
const CkCallback &) {
472 NAMD_bug(
"PmePencilX::start(), base class method called");
481 setMigratable(
false);
482 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
490 NAMD_bug(
"PmePencilY cannot be migrated");
498 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
506 NAMD_bug(
"PmePencilY::initFFT, fftCompute not initialized");
509 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
516 void PmePencilY::forwardFFT() {
518 NAMD_bug(
"PmePencilY::forwardFFT, fftCompute not initialized");
519 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
524 void PmePencilY::backwardFFT() {
526 NAMD_bug(
"PmePencilY::backwardFFT, fftCompute not initialized");
527 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
535 int i0, i1, j0, j1, k0, k1;
537 i0, i1, j0, j1, k0, k1);
538 int size = (i1-i0+1)*(j1-j0+1)*(k1-k0+1);
543 void PmePencilY::forwardDone() {
544 NAMD_bug(
"PmePencilY::forwardDone(), base class method called");
547 void PmePencilY::backwardDone() {
548 NAMD_bug(
"PmePencilY::backwardDone(), base class method called");
552 NAMD_bug(
"PmePencilY::recvDataFromX(), base class method called");
556 NAMD_bug(
"PmePencilY::recvDataFromZ(), base class method called");
559 void PmePencilY::start(
const CkCallback &) {
560 NAMD_bug(
"PmePencilY::start(), base class method called");
569 setMigratable(
false);
570 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
582 NAMD_bug(
"PmePencilZ cannot be migrated");
596 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
606 NAMD_bug(
"PmePencilZ::initFFT, fftCompute not initialized");
609 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
616 void PmePencilZ::forwardFFT() {
618 NAMD_bug(
"PmePencilZ::forwardFFT, fftCompute not initialized");
619 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
624 void PmePencilZ::backwardFFT() {
626 NAMD_bug(
"PmePencilZ::backwardFFT, fftCompute not initialized");
627 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
635 int i0, i1, j0, j1, k0, k1;
637 i0, i1, j0, j1, k0, k1);
638 int size = (i1-i0+1)*(j1-j0+1)*(k1-k0+1);
643 void PmePencilZ::forwardDone() {
645 NAMD_bug(
"PmePencilZ::forwardDone, pmeKSpaceCompute not initialized");
648 for (
unsigned int iGrid = 0; iGrid <
NUM_GRID_MAX; ++iGrid) {
657 NAMD_bug(
"PmePencilZ::submitReductions, pmeKSpaceCompute not initialized");
664 double energy_F = energy;
674 scale1 = elecLambdaUp;
675 scale2 = elecLambda2Up;
683 scale1 = elecLambdaDown;
684 scale2 = elecLambda2Down;
692 scale1 = 1.0 - elecLambdaUp;
693 scale2 = 1.0 - elecLambda2Up;
701 scale1 = 1.0 - elecLambdaDown;
702 scale2 = 1.0 - elecLambda2Down;
712 scale1 = -1.0 * (elecLambdaUp + elecLambdaDown - 1.0);
713 scale2 = -1.0 * (elecLambda2Up + elecLambda2Down - 1.0);
719 for (
size_t i = 0; i < 9; ++i) {
725 double energy_TI_1 = 0.0;
726 double energy_TI_2 = 0.0;
732 scale1 = elecLambdaUp;
733 energy_TI_1 = energy;
739 scale1 = elecLambdaDown;
740 energy_TI_2 = energy;
746 scale1 = 1.0 - elecLambdaUp;
747 energy_TI_1 = -1.0 * energy;
753 scale1 = 1.0 - elecLambdaDown;
754 energy_TI_2 = -1.0 * energy;
761 scale1 = -1.0 * (elecLambdaUp + elecLambdaDown - 1.0);
762 energy_TI_1 = -1.0 * energy;
763 energy_TI_2 = -1.0 * energy;
773 reduction->
item(REDUCTION_VIRIAL_SLOW_XX) += virial[0];
774 reduction->
item(REDUCTION_VIRIAL_SLOW_XY) += virial[1];
775 reduction->
item(REDUCTION_VIRIAL_SLOW_XZ) += virial[2];
776 reduction->
item(REDUCTION_VIRIAL_SLOW_YX) += virial[3];
777 reduction->
item(REDUCTION_VIRIAL_SLOW_YY) += virial[4];
778 reduction->
item(REDUCTION_VIRIAL_SLOW_YZ) += virial[5];
779 reduction->
item(REDUCTION_VIRIAL_SLOW_ZX) += virial[6];
780 reduction->
item(REDUCTION_VIRIAL_SLOW_ZY) += virial[7];
781 reduction->
item(REDUCTION_VIRIAL_SLOW_ZZ) += virial[8];
785 bool ready_to_submit =
true;
790 if (ready_to_submit) {
799 void PmePencilZ::backwardDone() {
800 NAMD_bug(
"PmePencilZ::backwardDone(), base class method called");
804 NAMD_bug(
"PmePencilY::recvDataFromY(), base class method called");
807 void PmePencilZ::start(
const CkCallback &) {
808 NAMD_bug(
"PmePencilZ::start(), base class method called");
815 #include "PmeSolver.def.h"
std::array< PmeKSpaceCompute *, NUM_GRID_MAX > pmeKSpaceComputes
std::vector< int > blockSizes
virtual void submit(void)=0
virtual void backwardDone()
SimParameters * simParameters
std::array< FFTCompute *, NUM_GRID_MAX > fftComputes
void submitReductions(unsigned int iGrid)
std::array< PmeTranspose *, NUM_GRID_MAX > pmeTransposes
SubmitReduction * willSubmit(int setID, int size=-1)
PmePencilX_SDAG_CODE PmePencilX()
static ReductionMgr * Object(void)
const unsigned int NUM_GRID_MAX
std::vector< int > blockSizes
std::vector< int > blockSizes
std::array< PmeTranspose *, NUM_GRID_MAX > pmeTransposes
std::array< FFTCompute *, NUM_GRID_MAX > fftComputes
std::array< int, NUM_GRID_MAX > dataSizes
std::array< float *, NUM_GRID_MAX > dataGrid
std::array< int, NUM_GRID_MAX > energyReady
std::array< PmeKSpaceCompute *, NUM_GRID_MAX > pmeKSpaceComputes
void NAMD_bug(const char *err_msg)
PmePencilXY_SDAG_CODE PmePencilXY()
std::vector< int > blockSizes
PmePencilXYZ_SDAG_CODE PmePencilXYZ()
std::array< PmeTranspose *, NUM_GRID_MAX > pmeTransposes
std::array< int, NUM_GRID_MAX > energyReady
PmePencilZ_SDAG_CODE PmePencilZ()
std::array< FFTCompute *, NUM_GRID_MAX > fftComputes
std::array< FFTCompute *, NUM_GRID_MAX > fftComputes
std::array< PmeTranspose *, NUM_GRID_MAX > pmeTransposes
static void getBlockDim(const PmeGrid &pmeGrid, const int permutation, const int iblock, const int jblock, const int kblock, int &i0, int &i1, int &j0, int &j1, int &k0, int &k1)
void submitReductions(unsigned int iGrid)
std::array< FFTCompute *, NUM_GRID_MAX > fftComputes
std::array< bool, NUM_GRID_MAX > enabledGrid
PmePencilY_SDAG_CODE PmePencilY()