Difference for src/ComputePme.C from version 1.114 to 1.115

version 1.114version 1.115
Line 268
Line 268
   float *work;   float *work;
 #endif #endif
  
   int fepOn, lesOn, lesFactor, pairOn, selfOn, numGrids;   int fepOn, thermInt, lesOn, lesFactor, pairOn, selfOn, numGrids;
    int decouple;
  
   LocalPmeInfo *localInfo;   LocalPmeInfo *localInfo;
   int qgrid_size;   int qgrid_size;
Line 371
Line 372
   PatchMap *patchMap = PatchMap::Object();   PatchMap *patchMap = PatchMap::Object();
  
   fepOn = simParams->fepOn;   fepOn = simParams->fepOn;
   numGrids = fepOn ? 2 : 1;   thermInt = simParams->thermInt;
    decouple = (fepOn || thermInt) && (simParams->decouple == 1);
    numGrids = (fepOn || thermInt) ? (decouple ? 4 : 2) : 1;
   lesOn = simParams->lesOn;   lesOn = simParams->lesOn;
   useBarrier = simParams->PMEBarrier;   useBarrier = simParams->PMEBarrier;
   if ( lesOn ) {   if ( lesOn ) {
Line 1448
Line 1451
   SimParameters *simParams = Node::Object()->simParameters;   SimParameters *simParams = Node::Object()->simParameters;
  
   fepOn = simParams->fepOn;   fepOn = simParams->fepOn;
   numGrids = fepOn ? 2 : 1;   thermInt = simParams->thermInt;
    decouple = (simParams->decouple == 1);
    numGrids = (fepOn || thermInt) ? (decouple ? 4 : 2) : 1;
   lesOn = simParams->lesOn;   lesOn = simParams->lesOn;
   if ( lesOn ) {   if ( lesOn ) {
     lesFactor = simParams->lesFactor;     lesFactor = simParams->lesFactor;
Line 1562
Line 1567
   }   }
  
   // copy to other grids if needed   // copy to other grids if needed
   if ( fepOn || lesOn ) {   if ( ((fepOn || thermInt) && (!decouple)) || lesOn ) {
     for ( g=0; g<numGrids; ++g ) {     for ( g=0; g<numGrids; ++g ) {
 #ifdef NETWORK_PROGRESS #ifdef NETWORK_PROGRESS
       CmiNetworkProgress();       CmiNetworkProgress();
Line 1577
Line 1582
       }       }
       numGridAtoms[g] = nga;       numGridAtoms[g] = nga;
     }     }
    } else if ( (fepOn || thermInt) && decouple) {
      // alchemical decoupling: four grids
      // g=0: partition 0 and partition 1
      // g=1: partition 0 and partition 2
      // g=2: only partition 1 atoms
      // g=3: only partition 2 atoms
      for ( g=0; g<2; ++g ) {  // same as before for first 2
  #ifdef NETWORK_PROGRESS
        CmiNetworkProgress();
  #endif
  
        PmeParticle *lgd = localGridData[g];
        int nga = 0;
        for(int i=0; i<numLocalAtoms; ++i) {
          if ( localPartition[i] == 0 || localPartition[i] == (g+1) ) {
            lgd[nga++] = localData[i];
          }
        }
        numGridAtoms[g] = nga;
      }
      for (g=2 ; g<4 ; ++g ) {  // only alchemical atoms for these last 2 grids
  #ifdef NETWORK_PROGRESS
        CmiNetworkProgress();
  #endif
  
        PmeParticle *lgd = localGridData[g];
        int nga = 0;
        for(int i=0; i<numLocalAtoms; ++i) {
          if ( localPartition[i] == (g-1) ) {
            lgd[nga++] = localData[i];
          }
        }
        numGridAtoms[g] = nga;
      }
   } else if ( selfOn ) {   } else if ( selfOn ) {
     if ( numGrids != 1 ) NAMD_bug("ComputePme::doWork assertion 1 failed");     if ( numGrids != 1 ) NAMD_bug("ComputePme::doWork assertion 1 failed");
     g = 0;     g = 0;
Line 1987
Line 2026
     Vector *localResults = new Vector[numLocalAtoms*     Vector *localResults = new Vector[numLocalAtoms*
  ((numGrids>1 || selfOn)?2:1)];  ((numGrids>1 || selfOn)?2:1)];
     Vector *gridResults;     Vector *gridResults;
     if ( fepOn || lesOn || selfOn || pairOn ) {     if ( fepOn || thermInt || lesOn || selfOn || pairOn ) {
       for(int i=0; i<numLocalAtoms; ++i) { localResults[i] = 0.; }       for(int i=0; i<numLocalAtoms; ++i) { localResults[i] = 0.; }
       gridResults = localResults + numLocalAtoms;       gridResults = localResults + numLocalAtoms;
     } else {     } else {
Line 2007
Line 2046
       delete myRealSpace[g];       delete myRealSpace[g];
       scale_forces(gridResults, numGridAtoms[g], lattice);       scale_forces(gridResults, numGridAtoms[g], lattice);
  
       if ( fepOn || lesOn ) {       if ( fepOn || thermInt || lesOn ) {
         double scale = 1.;         double scale = 1.;
         if ( fepOn ) {         if ( fepOn || thermInt ) {
           if ( g == 0 ) scale = simParams->lambda;           if ( g == 0 ) scale = simParams->lambda;
           else if ( g == 1 ) scale = 1. - simParams->lambda;           else if ( g == 1 ) scale = 1. - simParams->lambda;
            if (decouple) {
              if ( g == 2 ) scale = 1. - simParams->lambda;
              else if ( g == 3 ) scale = simParams->lambda;
            }
         } else if ( lesOn ) {         } else if ( lesOn ) {
           scale = 1.0 / (double)lesFactor;           scale = 1.0 / (double)lesFactor;
         }         }
Line 2093
Line 2136
  
     for ( g=0; g<numGrids; ++g ) {     for ( g=0; g<numGrids; ++g ) {
       double scale = 1.;       double scale = 1.;
       if ( fepOn ) {       if ( fepOn || thermInt ) {
         if ( g == 0 ) scale = simParams->lambda;         if ( g == 0 ) scale = simParams->lambda;
         else if ( g == 1 ) scale = 1. - simParams->lambda;         else if ( g == 1 ) scale = 1. - simParams->lambda;
          if (decouple) {
            if ( g == 2 ) scale = 1. - simParams->lambda;
            else if ( g == 3 ) scale = simParams->lambda;
          }
       } else if ( lesOn ) {       } else if ( lesOn ) {
         scale = 1.0 / (double)lesFactor;         scale = 1.0 / (double)lesFactor;
       } else if ( pairOn ) {       } else if ( pairOn ) {
Line 2115
Line 2162
       double scale2 = 0.;       double scale2 = 0.;
       if ( fepOn && g == 0 ) scale2 = simParams->lambda2;       if ( fepOn && g == 0 ) scale2 = simParams->lambda2;
       else if ( fepOn && g == 1 ) scale2 = 1. - simParams->lambda2;       else if ( fepOn && g == 1 ) scale2 = 1. - simParams->lambda2;
        if (decouple && fepOn && g == 2 ) scale2 = 1. - simParams->lambda2;
        else if (decouple && fepOn && g == 3 ) scale2 = simParams->lambda2;
       reduction->item(REDUCTION_ELECT_ENERGY_SLOW_F) += evir[g][0] * scale2;       reduction->item(REDUCTION_ELECT_ENERGY_SLOW_F) += evir[g][0] * scale2;
        if ( thermInt && g == 0 ) reduction->item(REDUCTION_ELECT_ENERGY_PME_TI) += evir[g][0];
        else if ( thermInt && g == 1 ) reduction->item(REDUCTION_ELECT_ENERGY_PME_TI) -= evir[g][0];
        if (decouple && thermInt && g == 2 ) reduction->item(REDUCTION_ELECT_ENERGY_PME_TI) -= evir[g][0];
        else if (decouple && thermInt && g == 3 ) reduction->item(REDUCTION_ELECT_ENERGY_PME_TI) += evir[g][0];
     }     }
     reduction->item(REDUCTION_STRAY_CHARGE_ERRORS) += strayChargeErrors;     reduction->item(REDUCTION_STRAY_CHARGE_ERRORS) += strayChargeErrors;
     reduction->submit();     reduction->submit();


Legend:
Removed in v.1.114 
changed lines
 Added in v.1.115



Made by using version 1.53 of cvs2html