Difference for src/ComputeNonbondedUtil.C from version 1.1120 to 1.1121

version 1.1120version 1.1121
Line 37
Line 37
 Bool ComputeNonbondedUtil::fixedAtomsOn; Bool ComputeNonbondedUtil::fixedAtomsOn;
 BigReal         ComputeNonbondedUtil::cutoff; BigReal         ComputeNonbondedUtil::cutoff;
 BigReal         ComputeNonbondedUtil::cutoff2; BigReal         ComputeNonbondedUtil::cutoff2;
  float           ComputeNonbondedUtil::cutoff2_f;
 BigReal         ComputeNonbondedUtil::dielectric_1; BigReal         ComputeNonbondedUtil::dielectric_1;
 const LJTable*  ComputeNonbondedUtil::ljTable = 0; const LJTable*  ComputeNonbondedUtil::ljTable = 0;
 const Molecule* ComputeNonbondedUtil::mol; const Molecule* ComputeNonbondedUtil::mol;
Line 62
Line 63
   int           ComputeNonbondedUtil::mic_table_n;   int           ComputeNonbondedUtil::mic_table_n;
   int           ComputeNonbondedUtil::mic_table_n_16;   int           ComputeNonbondedUtil::mic_table_n_16;
 #endif #endif
  #ifdef NAMD_KNL
  float*          ComputeNonbondedUtil::knl_table_alloc;
  float*          ComputeNonbondedUtil::knl_fast_ener_table;
  float*          ComputeNonbondedUtil::knl_fast_grad_table;
  float*          ComputeNonbondedUtil::knl_scor_ener_table;
  float*          ComputeNonbondedUtil::knl_scor_grad_table;
  float*          ComputeNonbondedUtil::knl_slow_ener_table;
  float*          ComputeNonbondedUtil::knl_slow_grad_table;
  float*          ComputeNonbondedUtil::knl_corr_ener_table;
  float*          ComputeNonbondedUtil::knl_corr_grad_table;
  float*          ComputeNonbondedUtil::knl_full_ener_table;
  float*          ComputeNonbondedUtil::knl_full_grad_table;
  #endif
 BigReal         ComputeNonbondedUtil::scaling; BigReal         ComputeNonbondedUtil::scaling;
 BigReal         ComputeNonbondedUtil::scale14; BigReal         ComputeNonbondedUtil::scale14;
 BigReal         ComputeNonbondedUtil::switchOn; BigReal         ComputeNonbondedUtil::switchOn;
Line 73
Line 87
 BigReal         ComputeNonbondedUtil::k_vdwb; BigReal         ComputeNonbondedUtil::k_vdwb;
 BigReal         ComputeNonbondedUtil::cutoff_3; BigReal         ComputeNonbondedUtil::cutoff_3;
 BigReal         ComputeNonbondedUtil::cutoff_6; BigReal         ComputeNonbondedUtil::cutoff_6;
  float           ComputeNonbondedUtil::v_vdwa_f;
  float           ComputeNonbondedUtil::v_vdwb_f;
  float           ComputeNonbondedUtil::k_vdwa_f;
  float           ComputeNonbondedUtil::k_vdwb_f;
  float           ComputeNonbondedUtil::cutoff_3_f;
  float           ComputeNonbondedUtil::cutoff_6_f;
 BigReal         ComputeNonbondedUtil::c0; BigReal         ComputeNonbondedUtil::c0;
 BigReal         ComputeNonbondedUtil::c1; BigReal         ComputeNonbondedUtil::c1;
 BigReal         ComputeNonbondedUtil::c3; BigReal         ComputeNonbondedUtil::c3;
Line 122
Line 142
 BigReal ComputeNonbondedUtil::ewaldcof; BigReal ComputeNonbondedUtil::ewaldcof;
 BigReal ComputeNonbondedUtil::pi_ewaldcof; BigReal ComputeNonbondedUtil::pi_ewaldcof;
  
  int ComputeNonbondedUtil::vdw_switch_mode;
  
 // Ported by JLai -- JE - Go // Ported by JLai -- JE - Go
 Bool            ComputeNonbondedUtil::goGroPair; Bool            ComputeNonbondedUtil::goGroPair;
 Bool            ComputeNonbondedUtil::goForcesOn; Bool            ComputeNonbondedUtil::goForcesOn;
Line 258
Line 280
  
   cutoff = simParams->cutoff;   cutoff = simParams->cutoff;
   cutoff2 = cutoff*cutoff;   cutoff2 = cutoff*cutoff;
    cutoff2_f = cutoff2;
  
 //fepb //fepb
   alchFepOn = simParams->alchFepOn;   alchFepOn = simParams->alchFepOn;
Line 512
Line 535
       double cutoff3 = cutoff * cutoff2;       double cutoff3 = cutoff * cutoff2;
       double switchOn6 = switchOn3 * switchOn3;       double switchOn6 = switchOn3 * switchOn3;
       double cutoff6 = cutoff3 * cutoff3;       double cutoff6 = cutoff3 * cutoff3;
       v_vdwa = -1. / ( switchOn6 * cutoff6 );       v_vdwa_f = v_vdwa = -1. / ( switchOn6 * cutoff6 );
       v_vdwb = -1. / ( switchOn3 * cutoff3 );       v_vdwb_f = v_vdwb = -1. / ( switchOn3 * cutoff3 );
       k_vdwa = cutoff6 / ( cutoff6 - switchOn6 );       k_vdwa_f = k_vdwa = cutoff6 / ( cutoff6 - switchOn6 );
       k_vdwb = cutoff3 / ( cutoff3 - switchOn3 );       k_vdwb_f = k_vdwb = cutoff3 / ( cutoff3 - switchOn3 );
       cutoff_3 = 1. / cutoff3;       cutoff_3_f = cutoff_3 = 1. / cutoff3;
       cutoff_6 = 1. / cutoff6;       cutoff_6_f = cutoff_6 = 1. / cutoff6;
     }     }
   }   }
   else   else
Line 643
Line 666
   if ( r2_limit < r2_delta ) r2_limit = r2_delta;   if ( r2_limit < r2_delta ) r2_limit = r2_delta;
   int r2_delta_i = 0;  // entry for r2 == r2_delta   int r2_delta_i = 0;  // entry for r2 == r2_delta
  
  #ifdef NAMD_KNL
   if ( knl_table_alloc ) delete [] knl_table_alloc;
   knl_table_alloc = new float[10*KNL_TABLE_SIZE];
   knl_fast_ener_table = knl_table_alloc;
   knl_fast_grad_table = knl_table_alloc + KNL_TABLE_SIZE;
   knl_scor_ener_table = knl_table_alloc + 2*KNL_TABLE_SIZE;
   knl_scor_grad_table = knl_table_alloc + 3*KNL_TABLE_SIZE;
   knl_slow_ener_table = knl_table_alloc + 4*KNL_TABLE_SIZE;
   knl_slow_grad_table = knl_table_alloc + 5*KNL_TABLE_SIZE;
   knl_corr_ener_table = knl_table_alloc + 6*KNL_TABLE_SIZE;
   knl_corr_grad_table = knl_table_alloc + 7*KNL_TABLE_SIZE;
   knl_full_ener_table = knl_table_alloc + 8*KNL_TABLE_SIZE;
   knl_full_grad_table = knl_table_alloc + 9*KNL_TABLE_SIZE;
   knl_fast_ener_table[0] = 0.;
   knl_fast_grad_table[0] = 0.;
   knl_scor_ener_table[0] = 0.;
   knl_scor_grad_table[0] = 0.;
   knl_slow_ener_table[0] = 0.;
   knl_slow_grad_table[0] = 0.;
   knl_corr_ener_table[0] = 0.;
   knl_corr_grad_table[0] = 0.;
   knl_full_ener_table[0] = 0.;
   knl_full_grad_table[0] = 0.;
   for ( int knl_table = 0; knl_table < 2; ++knl_table ) {
    int nn = n;
    if ( knl_table ) {
      nn = KNL_TABLE_SIZE-1;
    }
    for ( i=1; i<nn; ++i ) {
  #else
   // fill in the table, fix up i==0 (r2==0) below   // fill in the table, fix up i==0 (r2==0) below
   for ( i=1; i<n; ++i ) {   for ( i=1; i<n; ++i ) {
  #endif
  
     const BigReal r2_base = r2_delta * ( 1 << (i/64) );     const BigReal r2_base = r2_delta * ( 1 << (i/64) );
     const BigReal r2_del = r2_base / 64.0;     const BigReal r2_del = r2_base / 64.0;
     const BigReal r2 = r2_base - r2_delta + r2_del * (i%64);     BigReal r2 = r2_base - r2_delta + r2_del * (i%64);
  
      BigReal r = sqrt(r2);
  
  #ifdef NAMD_KNL
      if ( knl_table ) {
        r = (double)(nn-1)/(double)(i);
        r2 = r*r;
      } else
  #endif
     if ( r2 <= r2_limit ) r2_delta_i = i;     if ( r2 <= r2_limit ) r2_delta_i = i;
  
     const BigReal r = sqrt(r2); 
     const BigReal r_1 = 1.0/r;     const BigReal r_1 = 1.0/r;
     const BigReal r_2 = 1.0/r2;     const BigReal r_2 = 1.0/r2;
  
Line 774
Line 835
  
     // Lennard-Jones switching function     // Lennard-Jones switching function
   if ( simParams->vdwForceSwitching ) {  // switch force   if ( simParams->vdwForceSwitching ) {  // switch force
      vdw_switch_mode = VDW_SWITCH_MODE_FORCE;
  
     // from Steinbach & Brooks, JCC 15, pgs 667-683, 1994, eqns 10-13     // from Steinbach & Brooks, JCC 15, pgs 667-683, 1994, eqns 10-13
     if ( r2 > switchOn2 ) {     if ( r2 > switchOn2 ) {
       BigReal tmpa = r_6 - cutoff_6;       BigReal tmpa = r_6 - cutoff_6;
Line 789
Line 852
       vdwb_gradient = -3.0 * r_2 * r_6;       vdwb_gradient = -3.0 * r_2 * r_6;
     }     }
   } else if ( simParams->martiniSwitching ) { // switching fxn for Martini RBCG   } else if ( simParams->martiniSwitching ) { // switching fxn for Martini RBCG
      vdw_switch_mode = VDW_SWITCH_MODE_MARTINI;
  
     BigReal r12 = (r-switchOn)*(r-switchOn);        BigReal r13 = (r-switchOn)*(r-switchOn)*(r-switchOn);     BigReal r12 = (r-switchOn)*(r-switchOn);        BigReal r13 = (r-switchOn)*(r-switchOn)*(r-switchOn);
  
Line 831
Line 895
     vdwb_gradient = -3/pow(r,8) + dshiftValB;     vdwb_gradient = -3/pow(r,8) + dshiftValB;
  
   } else {  // switch energy   } else {  // switch energy
      vdw_switch_mode = VDW_SWITCH_MODE_ENERGY;
  
     const BigReal c2 = cutoff2-r2;     const BigReal c2 = cutoff2-r2;
     const BigReal c4 = c2*(c3-2.0*c2);     const BigReal c4 = c2*(c3-2.0*c2);
     const BigReal switchVal =         // used for Lennard-Jones     const BigReal switchVal =         // used for Lennard-Jones
Line 846
Line 912
   }   }
  
  
  #ifdef NAMD_KNL
     if ( knl_table ) {
      knl_fast_ener_table[i] = -1.*fast_energy;
      knl_fast_grad_table[i] = -2.*fast_gradient;
      knl_scor_ener_table[i] = -1.*scor_energy;
      knl_scor_grad_table[i] = -2.*scor_gradient;
      knl_slow_ener_table[i] = -1.*slow_energy;
      knl_slow_grad_table[i] = -2.*slow_gradient;
      knl_corr_ener_table[i] = -1.*(fast_energy + scor_energy);
      knl_corr_grad_table[i] = -2.*(fast_gradient + scor_gradient);
      knl_full_ener_table[i] = -1.*(fast_energy + slow_energy);
      knl_full_grad_table[i] = -2.*(fast_gradient + slow_gradient);
      if ( i == nn-1 ) {
        knl_fast_ener_table[nn] = knl_fast_ener_table[i];
        knl_fast_grad_table[nn] = knl_fast_grad_table[i];
        knl_scor_ener_table[nn] = knl_scor_ener_table[i];
        knl_scor_grad_table[nn] = knl_scor_grad_table[i];
        knl_slow_ener_table[nn] = knl_slow_ener_table[i];
        knl_slow_grad_table[nn] = knl_slow_grad_table[i];
        knl_corr_ener_table[nn] = knl_corr_ener_table[i];
        knl_corr_grad_table[nn] = knl_corr_grad_table[i];
        knl_full_ener_table[nn] = knl_full_ener_table[i];
        knl_full_grad_table[nn] = knl_full_grad_table[i];
      }
     } else {
  #endif
     *(fast_i++) = fast_energy;     *(fast_i++) = fast_energy;
     *(fast_i++) = fast_gradient;     *(fast_i++) = fast_gradient;
     *(fast_i++) = 0;     *(fast_i++) = 0;
Line 867
Line 959
     *(vdwb_i++) = 0;     *(vdwb_i++) = 0;
     *(vdwb_i++) = 0;     *(vdwb_i++) = 0;
     *(r2_i++) = r2 + r2_delta;     *(r2_i++) = r2 + r2_delta;
  #ifdef NAMD_KNL
     }
  #endif
  
   }   }
  #ifdef NAMD_KNL
   } // knl_table loop
  #endif
  
   if ( ! r2_delta_i ) {   if ( ! r2_delta_i ) {
     NAMD_bug("Failed to find table entry for r2 == r2_limit\n");     NAMD_bug("Failed to find table entry for r2 == r2_limit\n");


Legend:
Removed in v.1.1120 
changed lines
 Added in v.1.1121



Made by using version 1.53 of cvs2html