29 extern void send_build_mic_force_table();
60 BigReal* ComputeNonbondedUtil::mic_table_base_ptr;
61 int ComputeNonbondedUtil::mic_table_n;
62 int ComputeNonbondedUtil::mic_table_n_16;
65 int ComputeNonbondedUtil::avxTilesMode;
66 float* ComputeNonbondedUtil::avx_tiles_eps4_sigma = 0;
67 float* ComputeNonbondedUtil::avx_tiles_eps4_sigma_14 = 0;
69 #if defined(NAMD_KNL) || defined(NAMD_AVXTILES) 70 float* ComputeNonbondedUtil::knl_table_alloc;
71 float* ComputeNonbondedUtil::knl_fast_ener_table;
72 float* ComputeNonbondedUtil::knl_fast_grad_table;
73 float* ComputeNonbondedUtil::knl_scor_ener_table;
74 float* ComputeNonbondedUtil::knl_scor_grad_table;
75 float* ComputeNonbondedUtil::knl_slow_ener_table;
76 float* ComputeNonbondedUtil::knl_slow_grad_table;
77 float* ComputeNonbondedUtil::knl_excl_ener_table;
78 float* ComputeNonbondedUtil::knl_excl_grad_table;
80 float* ComputeNonbondedUtil::knl_corr_ener_table;
81 float* ComputeNonbondedUtil::knl_corr_grad_table;
181 #define SPLIT_SHIFT 2 183 #define SPLIT_XPLOR 4 185 #define SPLIT_MARTINI 6 213 ADD_TENSOR(reduction,REDUCTION_VIRIAL_NBOND,data,virialIndex);
214 ADD_TENSOR(reduction,REDUCTION_VIRIAL_SLOW,data,fullElectVirialIndex);
215 ADD_VECTOR(reduction,REDUCTION_PAIR_VDW_FORCE,data,pairVDWForceIndex);
216 ADD_VECTOR(reduction,REDUCTION_PAIR_ELECT_FORCE,data,pairElectForceIndex);
223 if (!reduction)
return;
229 size_t nelems = arraysize*(numAtomTypes*(numAtomTypes+1))/2;
231 memset(arr, 0, nelems*
sizeof(
BigReal));
234 for (i=0; i<numAtomTypes; i++) {
235 for (j=0; j<numAtomTypes; j++) {
238 if (ii > jj) {
int tmp=ii; ii=jj; jj=tmp; }
239 const int reductionOffset = (ii*numAtomTypes - (ii*(ii+1))/2 + jj)*arraysize;
240 for (
int k=0; k<arraysize; k++) {
241 arr[reductionOffset+k] += data[k];
247 reduction->
add(nelems, arr);
252 NAMD_bug(
"Tried to call missing nonbonded compute routine.");
257 if ( CkMyRank() )
return;
328 NAMD_die(
"drudeNbthole is not supported with locally enhanced sampling");
330 NAMD_die(
"drudeNbthole is not supported with pair interaction calculation");
332 NAMD_die(
"drudeNbthole is not supported with pressure profile calculation");
369 }
else if (
lesOn ) {
370 #if defined(NAMD_CUDA) || defined(NAMD_HIP) 371 NAMD_die(
"Locally enhanced sampling is not supported in CUDA version");
380 if (ip && jp && ip != jp) {
406 #if defined(NAMD_CUDA) || defined(NAMD_HIP) 407 NAMD_die(
"Pressure profile calculation is not supported in CUDA version");
429 #if defined(NAMD_CUDA) || defined(NAMD_HIP) 430 NAMD_die(
"Pair interaction calculation is not supported in CUDA version");
438 }
else if ( tabulatedEnergies ) {
439 #if defined(NAMD_CUDA) || defined(NAMD_HIP) 440 NAMD_die(
"Tabulated energies is not supported in CUDA version");
460 NAMD_die(
"Go forces is not supported in CUDA version");
530 double switchOn6 = switchOn3 * switchOn3;
531 double cutoff6 = cutoff3 * cutoff3;
539 }
else if (
simParams->martiniSwitching ) {
575 const int MSMSplit =
simParams->MSMSplit;
579 BigReal TwoBySqrtPi = 1.12837916709551;
598 NAMD_die(
"Sorry, XPLOR splitting not supported.");
602 NAMD_die(
"Sorry, SHARP splitting not supported.");
606 NAMD_die(
"Unknown splitting type found!");
619 iout <<
iINFO <<
"NONBONDED TABLE R-SQUARED SPACING: " <<
625 while ( (
cutoff2 +
r2_delta) > r2_tmp ) { r2_tmp *= 2.0; cutoff2_exp += 1; }
630 #if defined(NAMD_MIC) 631 int n_16 = (n + 15) & (~15);
635 iout <<
iINFO <<
"NONBONDED TABLE SIZE: " <<
636 n <<
" POINTS\n" <<
endi;
640 #if defined(NAMD_MIC) 643 while ( ((
long)table_align) % 128 ) ++table_align;
644 mic_table_base_ptr = table_align;
646 mic_table_n_16 = n_16;
660 while ( ((
long)table_align) % 128 ) ++table_align;
688 if (
simParams->vdwGeometricSigma) avxTilesMode = 2;
695 if (avxTilesMode == 1) {
698 for (
int i = 0; i < table_dim; i++)
699 for (
int j = i+1; j < table_dim; j++)
703 if (avxTilesMode > 1)
704 iout <<
iINFO <<
"AVX-512 TILES WILL USE SHORT-RANGE INTERPOLATION (" 705 << avxTilesMode <<
")\n";
709 if ( avx_tiles_eps4_sigma )
delete [] avx_tiles_eps4_sigma;
710 if ( avx_tiles_eps4_sigma_14 )
delete [] avx_tiles_eps4_sigma_14;
711 avx_tiles_eps4_sigma =
new float[num_params*2];
712 avx_tiles_eps4_sigma_14 =
new float[num_params*2];
713 for (
int i = 0; i < num_params; i++) {
714 Real sigma, sigma_14, epsilon, epsilon_14;
720 epsilon = epsilon_14 = 0.0;
723 avx_tiles_eps4_sigma[i*2] = 4.0 *
scaling * epsilon;
724 avx_tiles_eps4_sigma[i*2 + 1] = sigma;
725 avx_tiles_eps4_sigma_14[i*2] = 4.0 *
scaling * epsilon_14;
726 avx_tiles_eps4_sigma_14[i*2 + 1] = sigma_14;
732 #if defined(NAMD_KNL) || defined(NAMD_AVXTILES) 733 if ( knl_table_alloc )
delete [] knl_table_alloc;
734 if ( KNL_TABLE_MAX_R_1 < 1.f || KNL_TABLE_FACTOR < 1 ||
736 static_cast<int>(1.0 / KNL_TABLE_MAX_R_1 * KNL_TABLE_SIZE))
737 NAMD_bug(
"Inconsistent KNL preprocessor settings.");
739 knl_table_alloc =
new float[10*KNL_TABLE_SIZE];
741 knl_table_alloc =
new float[8*KNL_TABLE_SIZE];
743 knl_fast_ener_table = knl_table_alloc;
744 knl_fast_grad_table = knl_table_alloc + KNL_TABLE_SIZE;
745 knl_scor_ener_table = knl_table_alloc + 2*KNL_TABLE_SIZE;
746 knl_scor_grad_table = knl_table_alloc + 3*KNL_TABLE_SIZE;
747 knl_slow_ener_table = knl_table_alloc + 4*KNL_TABLE_SIZE;
748 knl_slow_grad_table = knl_table_alloc + 5*KNL_TABLE_SIZE;
749 knl_excl_ener_table = knl_table_alloc + 6*KNL_TABLE_SIZE;
750 knl_excl_grad_table = knl_table_alloc + 7*KNL_TABLE_SIZE;
751 knl_fast_ener_table[0] = 0.;
752 knl_fast_grad_table[0] = 0.;
753 knl_scor_ener_table[0] = 0.;
754 knl_scor_grad_table[0] = 0.;
755 knl_slow_ener_table[0] = 0.;
756 knl_slow_grad_table[0] = 0.;
757 knl_excl_ener_table[0] = 0.;
758 knl_excl_grad_table[0] = 0.;
760 knl_corr_ener_table = knl_table_alloc + 8*KNL_TABLE_SIZE;
761 knl_corr_grad_table = knl_table_alloc + 9*KNL_TABLE_SIZE;
762 knl_corr_ener_table[0] = 0.;
763 knl_corr_grad_table[0] = 0.;
765 for (
int knl_table = 0; knl_table < 2; ++knl_table ) {
768 nn = KNL_TABLE_SIZE-1;
770 for ( i=1; i<nn; ++i ) {
773 for ( i=1; i<n; ++i ) {
777 const BigReal r2_del = r2_base / 64.0;
782 #if defined(NAMD_KNL) || defined(NAMD_AVXTILES) 784 r = (double)(KNL_TABLE_FACTOR-2)/(double)(i);
788 if ( r2 <= r2_limit ) r2_delta_i = i;
801 BigReal fast_energy, fast_gradient;
802 BigReal scor_energy, scor_gradient;
803 BigReal slow_energy, slow_gradient;
808 BigReal corr_energy, corr_gradient;
815 corr_gradient =
pi_ewaldcof*exp(-(tmp_a*tmp_a))*r + tmp_b;
816 }
else if ( MSMOn ) {
820 SPOLY(&g, &dg, r_a, MSMSplit);
821 corr_energy = 1 - r_a * g;
822 corr_gradient = 1 + r_a*r_a * dg;
824 corr_energy = corr_gradient = 0;
830 fast_gradient = -1.0/r2;
831 scor_energy = scor_gradient = 0;
832 slow_energy = slow_gradient = 0;
836 shiftVal *= shiftVal;
838 fast_energy = shiftVal/r;
839 fast_gradient = dShiftVal/r - shiftVal/r2;
840 scor_energy = scor_gradient = 0;
841 slow_energy = slow_gradient = 0;
846 const BigReal COUL_SWITCH = 0.;
852 BigReal r12 = (r-COUL_SWITCH)*(r-COUL_SWITCH);
853 BigReal r13 = (r-COUL_SWITCH)*(r-COUL_SWITCH)*(r-COUL_SWITCH);
854 BigReal shiftVal = -(A1/3.0)*r13 - (B1/4.0)*r12*r12 - X1;
855 BigReal dShiftVal = -A1*r12 - B1*r13;
856 fast_energy = (1/r) + shiftVal;
857 fast_gradient = -1/(r2) + dShiftVal;
858 scor_energy = scor_gradient = 0;
859 slow_energy = slow_gradient = 0;
867 scor_energy = slow_energy + (corr_energy - 1.0)/r;
868 scor_gradient = slow_gradient - (corr_gradient - 1.0)/r2;
870 fast_energy = 1.0/r - slow_energy;
871 fast_gradient = -1.0/r2 - slow_gradient;
880 - 15.0*(r/
cutoff) + 10.0);
882 - 45.0 *(r/
cutoff) + 20.0);
884 scor_energy = slow_energy + (corr_energy - 1.0)/r;
885 scor_gradient = slow_gradient - (corr_gradient - 1.0)/r2;
887 fast_energy = 1.0/r - slow_energy;
888 fast_gradient = -1.0/r2 - slow_gradient;
895 fast_gradient *= 0.5 * r_1;
896 scor_gradient *= 0.5 * r_1;
897 slow_gradient *= 0.5 * r_1;
903 BigReal vdwa_energy, vdwa_gradient;
904 BigReal vdwb_energy, vdwb_gradient;
906 const BigReal r_6 = r_2*r_2*r_2;
916 vdwa_energy =
k_vdwa * tmpa * tmpa;
918 vdwb_energy =
k_vdwb * tmpb * tmpb;
919 vdwa_gradient = -6.0 *
k_vdwa * tmpa * r_2 * r_6;
920 vdwb_gradient = -3.0 *
k_vdwb * tmpb * r_2 * r_2 * r_1;
922 vdwa_energy = r_12 +
v_vdwa;
923 vdwb_energy = r_6 +
v_vdwb;
924 vdwa_gradient = -6.0 * r_2 * r_12;
925 vdwb_gradient = -3.0 * r_2 * r_6;
927 }
else if (
simParams->martiniSwitching ) {
942 BigReal LJshifttempA = -(A12/3)*r13 - (B12/4)*r12*r12 - C12;
943 BigReal LJshifttempB = -(A6/3)*r13 - (B6/4)*r12*r12 - C6;
949 BigReal LJdshifttempA = -A12*r12 - B12*r13;
950 BigReal LJdshifttempB = -A6*r12 - B6*r13;
952 ( r2 >
switchOn2 ? LJdshifttempA*0.5*r_1 : 0 );
954 ( r2 >
switchOn2 ? LJdshifttempB*0.5*r_1 : 0 );
964 vdwa_energy = r_12 + shiftValA;
965 vdwb_energy = r_6 + shiftValB;
967 vdwa_gradient = -6/pow(r,14) + dshiftValA ;
968 vdwb_gradient = -3/pow(r,8) + dshiftValB;
980 vdwa_energy = switchVal * r_12;
981 vdwb_energy = switchVal * r_6;
983 vdwa_gradient = ( dSwitchVal - 6.0 * switchVal * r_2 ) * r_12;
984 vdwb_gradient = ( dSwitchVal - 3.0 * switchVal * r_2 ) * r_6;
988 #if defined(NAMD_KNL) || defined(NAMD_AVXTILES) 990 knl_fast_ener_table[i] = -1.*fast_energy;
991 knl_fast_grad_table[i] = -2.*fast_gradient;
992 knl_scor_ener_table[i] = -1.*scor_energy;
993 knl_scor_grad_table[i] = -2.*scor_gradient;
994 knl_slow_ener_table[i] = (-1.*scor_energy - (
scale14-1)*slow_energy) /
996 knl_slow_grad_table[i] = (-2.*scor_gradient -
998 knl_excl_ener_table[i] = slow_energy - scor_energy;
999 knl_excl_grad_table[i] = 2.*(slow_gradient - scor_gradient);
1001 knl_corr_ener_table[i] = -1.*(fast_energy + scor_energy);
1002 knl_corr_grad_table[i] = -2.*(fast_gradient + scor_gradient);
1005 knl_fast_ener_table[nn] = knl_fast_ener_table[i];
1006 knl_fast_grad_table[nn] = knl_fast_grad_table[i];
1007 knl_scor_ener_table[nn] = knl_scor_ener_table[i];
1008 knl_scor_grad_table[nn] = knl_scor_grad_table[i];
1009 knl_slow_ener_table[nn] = knl_slow_ener_table[i];
1010 knl_slow_grad_table[nn] = knl_slow_grad_table[i];
1011 knl_excl_ener_table[nn] = knl_excl_ener_table[i];
1012 knl_excl_grad_table[nn] = knl_excl_grad_table[i];
1014 knl_corr_ener_table[nn] = knl_corr_ener_table[i];
1015 knl_corr_grad_table[nn] = knl_corr_grad_table[i];
1020 *(fast_i++) = fast_energy;
1021 *(fast_i++) = fast_gradient;
1024 *(scor_i++) = scor_energy;
1025 *(scor_i++) = scor_gradient;
1028 *(slow_i++) = slow_energy;
1029 *(slow_i++) = slow_gradient;
1032 *(vdwa_i++) = vdwa_energy;
1033 *(vdwa_i++) = vdwa_gradient;
1036 *(vdwb_i++) = vdwb_energy;
1037 *(vdwb_i++) = vdwb_gradient;
1041 #if defined(NAMD_KNL) || defined(NAMD_AVXTILES) 1046 #if defined(NAMD_KNL) || defined(NAMD_AVXTILES) 1050 if ( ! r2_delta_i ) {
1051 NAMD_bug(
"Failed to find table entry for r2 == r2_limit\n");
1054 NAMD_bug(
"Found bad table entry for r2 == r2_limit\n");
1058 const char *table_name =
"XXXX";
1059 int smooth_short = 0;
1060 for ( j=0; j<5; ++j ) {
1065 table_name =
"FAST";
1070 table_name =
"SCOR";
1075 table_name =
"SLOW";
1080 table_name =
"VDWA";
1085 table_name =
"VDWB";
1090 t0[0] = t0[4] - t0[5] * (
r2_delta / 64.0 );
1094 if ( smooth_short ) {
1095 BigReal energy0 = t0[4*r2_delta_i];
1096 BigReal gradient0 = t0[4*r2_delta_i+1];
1098 t0[0] = energy0 - gradient0 * (r20 -
r2_table[0]);
1102 for ( i=0,t=t0; i<(n-1); ++i,t+=4 ) {
1105 NAMD_bug(
"Bad table delta calculation.\n");
1107 if ( smooth_short && i+1 < r2_delta_i ) {
1108 BigReal energy0 = t0[4*r2_delta_i];
1109 BigReal gradient0 = t0[4*r2_delta_i+1];
1111 t[4] = energy0 - gradient0 * (r20 -
r2_table[i+1]);
1119 BigReal c = ( 3.0 * (v2 - v1) - x * (2.0 * g1 + g2) ) / ( x * x );
1120 BigReal d = ( -2.0 * (v2 - v1) + x * (g1 + g2) ) / ( x * x * x );
1123 for (
int k=0; k < 2; ++k ) {
1124 BigReal dv = (v1 - v2) + ( ( d * x + c ) * x + g1 ) * x;
1125 BigReal dg = (g1 - g2) + ( 3.0 * d * x + 2.0 * c ) * x;
1126 c -= ( 3.0 * dv - x * dg ) / ( x * x );
1127 d -= ( -2.0 * dv + x * dg ) / ( x * x * x );
1155 for ( i=0,t=t0; i<(n-1); ++i,t+=4 ) {
1157 const BigReal r2_del = r2_base / 64.0;
1162 BigReal dv = ( ( t[3] * x + t[2] ) * x + t[1] ) * x + t[0] - t[4];
1163 BigReal dg = ( 3.0 * t[3] * x + 2.0 * t[2] ) * x + t[1] - t[5];
1164 if ( t[4] != 0. && fabs(dv/t[4]) > fdvmax ) {
1165 fdvmax = fabs(dv/t[4]); fdvmax_r = r;
1167 if ( fabs(dv) > dvmax ) {
1168 dvmax = fabs(dv); dvmax_r = r;
1170 if ( t[5] != 0. && fabs(dg/t[5]) > fdgmax ) {
1171 fdgmax = fabs(dg/t[5]); fdgmax_r = r;
1173 if ( fabs(dg) > dgmax ) {
1174 dgmax = fabs(dg); dgmax_r = r;
1176 BigReal gcd = (t[4] - t[0]) / x;
1177 BigReal gcd_prec = (fabs(t[0]) + fabs(t[4])) * 1.e-15 / x;
1178 gcm = 0.9 * gcm + 0.1 * fabs(t[5]);
1179 BigReal gca = 0.5 * (t[1] + t[5]);
1180 BigReal gci = ( 0.75 * t[3] * x + t[2] ) * x + t[1];
1181 BigReal rc = sqrt(r2 + 0.5 * x);
1183 if ( dgcda != 0. && fabs(dgcda) < gcd_prec ) {
1188 if ( dgcdi != 0. && fabs(dgcdi) < gcd_prec ) {
1193 if ( t[1]*t[5] > 0. && gcm != 0. && fabs(dgcda/gcm) > fdgcdamax ) {
1194 fdgcdamax = fabs(dgcda/gcm); fdgcdamax_r = rc;
1196 if ( fabs(dgcda) > fdgcdamax ) {
1197 dgcdamax = fabs(dgcda); dgcdamax_r = rc;
1199 if ( t[1]*t[5] > 0. && gcm != 0. && fabs(dgcdi/gcm) > fdgcdimax ) {
1200 fdgcdimax = fabs(dgcdi/gcm); fdgcdimax_r = rc;
1202 if ( fabs(dgcdi) > fdgcdimax ) {
1203 dgcdimax = fabs(dgcdi); dgcdimax_r = rc;
1205 if ( t[1]*t[5] > 0. && gcm != 0. && fabs(dgcai/gcm) > fdgcaimax ) {
1206 fdgcaimax = fabs(dgcai/gcm); fdgcaimax_r = rc;
1208 if ( fabs(dgcai) > fdgcaimax ) {
1209 dgcaimax = fabs(dgcai); dgcaimax_r = rc;
1212 CkPrintf(
"TABLE %s %g %g %g %g\n",table_name,rc,dgcda/gcm,dgcda,gci);
1213 if (dv != 0.) CkPrintf(
"TABLE %d ENERGY ERROR %g AT %g (%d)\n",j,dv,r,i);
1214 if (dg != 0.) CkPrintf(
"TABLE %d FORCE ERROR %g AT %g (%d)\n",j,dg,r,i);
1217 if ( dvmax != 0.0 ) {
1218 iout <<
iINFO <<
"ABSOLUTE IMPRECISION IN " << table_name <<
1219 " TABLE ENERGY: " << dvmax <<
" AT " << dvmax_r <<
"\n" <<
endi;
1221 if ( fdvmax != 0.0 ) {
1222 iout <<
iINFO <<
"RELATIVE IMPRECISION IN " << table_name <<
1223 " TABLE ENERGY: " << fdvmax <<
" AT " << fdvmax_r <<
"\n" <<
endi;
1225 if ( dgmax != 0.0 ) {
1226 iout <<
iINFO <<
"ABSOLUTE IMPRECISION IN " << table_name <<
1227 " TABLE FORCE: " << dgmax <<
" AT " << dgmax_r <<
"\n" <<
endi;
1229 if ( fdgmax != 0.0 ) {
1230 iout <<
iINFO <<
"RELATIVE IMPRECISION IN " << table_name <<
1231 " TABLE FORCE: " << fdgmax <<
" AT " << fdgmax_r <<
"\n" <<
endi;
1233 if (fdgcdamax != 0.0 ) {
1234 iout <<
iINFO <<
"INCONSISTENCY IN " << table_name <<
1235 " TABLE ENERGY VS FORCE: " << fdgcdamax <<
" AT " << fdgcdamax_r <<
"\n" <<
endi;
1236 if ( fdgcdamax > 0.1 ) {
1238 iout <<
iERROR <<
"CALCULATED " << table_name <<
1239 " FORCE MAY NOT MATCH ENERGY! POSSIBLE BUG!\n";
1243 if (0 && fdgcdimax != 0.0 ) {
1244 iout <<
iINFO <<
"INCONSISTENCY IN " << table_name <<
1245 " TABLE ENERGY VS FORCE: " << fdgcdimax <<
" AT " << fdgcdimax_r <<
"\n" <<
endi;
1247 if ( 0 && fdgcaimax != 0.0 ) {
1248 iout <<
iINFO <<
"INCONSISTENCY IN " << table_name <<
1249 " TABLE AVG VS INT FORCE: " << fdgcaimax <<
" AT " << fdgcaimax_r <<
"\n" <<
endi;
1255 for ( i=0; i<4*n; ++i ) {
1261 for ( i=0; i<n; ++i ) {
1262 for (
int j=0; j<4; ++j ) {
1273 for ( i=0; i<n; ++i ) {
1307 sprintf(fname,
"/tmp/namd.table.pe%d.dat",CkMyPe());
1308 FILE *f = fopen(fname,
"w");
1309 for ( i=0; i<(n-1); ++i ) {
1311 const BigReal r2_del = r2_base / 64.0;
1317 fprintf(f,
" %g %g %g %g", t[0], t[1], t[2], t[3]);
1319 fprintf(f,
" %g %g %g %g", t[0], t[1], t[2], t[3]);
1321 fprintf(f,
" %g %g %g %g", t[0], t[1], t[2], t[3]);
1323 fprintf(f,
" %g %g %g %g", t[0], t[1], t[2], t[3]);
1325 fprintf(f,
" %g %g %g %g", t[0], t[1], t[2], t[3]);
1327 fprintf(f,
" %g %g %g %g", t[0], t[1], t[2], t[3]);
1329 fprintf(f,
" %g %g %g %g", t[0], t[1], t[2], t[3]);
1336 for ( i=0; i<n; ++i ) {
1337 BigReal tmp0, tmp1, tmp2, tmp3;
1350 send_build_mic_force_table();
static void calc_pair_fullelect_pprof(nonbonded *)
static BigReal * fast_table
static int pressureProfileSlabs
static void calc_pair_energy_merge_fullelect_tabener(nonbonded *)
static void calc_self_energy_go(nonbonded *)
std::ostream & iINFO(std::ostream &s)
static void calc_self_energy_merge_fullelect_ti(nonbonded *)
static BigReal * scor_table
static void(* calcMergeDispSelfEnergy)(nonbonded *)
static void calc_pair_les(nonbonded *)
static void calc_self_energy_slow_fullelect_fep(nonbonded *)
static void calc_pair_merge_fullelect(nonbonded *)
static void calc_self_energy_merge_fullelect_int(nonbonded *)
static void calc_self_energy_slow_fullelect(nonbonded *)
static void calc_self_energy_merge_fullelect_tabener(nonbonded *)
static void calc_self_energy_slow_fullelect_ti(nonbonded *)
static void calc_self_energy_fullelect_int(nonbonded *)
static void submitReductionData(BigReal *, SubmitReduction *)
static void calc_self_ti(nonbonded *)
static void calc_self_fullelect_pprof(nonbonded *)
static void calc_self_tabener(nonbonded *)
static void calc_self_energy_fullelect(nonbonded *)
static void calc_pair_slow_fullelect_ti(nonbonded *)
static void(* calcSelf)(nonbonded *)
static BigReal dielectric_1
#define ADD_TENSOR(R, RL, D, DL)
static void calc_pair_merge_fullelect_tabener(nonbonded *)
static void calc_self_les(nonbonded *)
SimParameters * simParameters
static void calc_pair_merge_fullelect_go(nonbonded *)
static void calc_pair_energy_merge_fullelect(nonbonded *)
static void calc_pair_slow_fullelect_pprof(nonbonded *)
static const Molecule * mol
static void calc_pair_energy_fullelect_fep(nonbonded *)
static void calc_self_energy_fullelect_pprof(nonbonded *)
static void calc_self_energy_fullelect_les(nonbonded *)
static void calc_self_energy_fullelect_ti(nonbonded *)
std::ostream & endi(std::ostream &s)
static void calc_self_fullelect(nonbonded *)
#define VDW_SWITCH_MODE_MARTINI
static void calc_self_energy_ti(nonbonded *)
static BigReal * vdwa_table
static void calc_self_energy_int(nonbonded *)
static void submitPressureProfileData(BigReal *, SubmitReduction *)
static BigReal pressureProfileThickness
static void calc_pair_slow_fullelect(nonbonded *)
static void calc_pair(nonbonded *)
static BigReal r2_delta_1
static void calc_self_go(nonbonded *)
static void(* calcMergePair)(nonbonded *)
static void calc_pair_energy_tabener(nonbonded *)
static void calc_self_slow_fullelect_pprof(nonbonded *)
static void calc_pair_energy_slow_fullelect_go(nonbonded *)
static void calc_self_energy_merge_fullelect_fep(nonbonded *)
static int pressureProfileAtomTypes
static Bool alchThermIntOn
static void(* calcMergePairEnergy)(nonbonded *)
static BigReal lesScaling
static void calc_pair_energy_go(nonbonded *)
static void calc_pair_merge_fullelect_ti(nonbonded *)
Molecule stores the structural information for the system.
static BigReal * full_table
static void calc_pair_merge_fullelect_les(nonbonded *)
static void calc_pair_slow_fullelect_go(nonbonded *)
static int vdw_switch_mode
static void calc_pair_energy_merge_fullelect_fep(nonbonded *)
static BigReal * r2_table
static void(* calcSlowPairEnergy)(nonbonded *)
static void(* calcPair)(nonbonded *)
static void(* calcMergeDispPairEnergy)(nonbonded *)
void add(int nitems, const BigReal *arr)
static void(* calcSlowPair)(nonbonded *)
static void calc_pair_energy_fullelect_go(nonbonded *)
static void calc_self_energy_merge_fullelect_fulldisp(nonbonded *)
static void calc_pair_energy_slow_fullelect_tabener(nonbonded *)
static void calc_self_slow_fullelect(nonbonded *)
static void calc_self_energy_les(nonbonded *)
static void calc_pair_energy_fep(nonbonded *)
static void(* calcMergeSelfEnergy)(nonbonded *)
static void calc_pair_tabener(nonbonded *)
static Bool pairInteractionSelf
static void calc_pair_energy_pprof(nonbonded *)
static BigReal * table_noshort
static void calc_self_energy_slow_fullelect_tabener(nonbonded *)
void NAMD_bug(const char *err_msg)
static void calc_self_energy_fullelect_tabener(nonbonded *)
static void calc_pair_energy_int(nonbonded *)
static BigReal pressureProfileMin
static void calc_self_slow_fullelect_tabener(nonbonded *)
static void calc_pair_energy_slow_fullelect_les(nonbonded *)
static void calc_pair_energy_ti(nonbonded *)
static void calc_pair_energy_slow_fullelect_fep(nonbonded *)
static void calc_self_slow_fullelect_ti(nonbonded *)
static void calc_pair_slow_fullelect_les(nonbonded *)
static void calc_pair_fullelect_ti(nonbonded *)
static void calc_pair_energy(nonbonded *)
static BigReal * table_ener
static void calc_pair_pprof(nonbonded *)
#define ADD_VECTOR(R, RL, D, DL)
static void calc_pair_energy_fullelect_ti(nonbonded *)
int get_table_dim() const
static void calc_self_energy_merge_fullelect_les(nonbonded *)
static void calc_self_slow_fullelect_go(nonbonded *)
static void calc_pair_energy_merge_fullelect_go(nonbonded *)
static Bool pressureProfileOn
static void calc_error(nonbonded *)
static void calc_self_energy_fullelect_go(nonbonded *)
int get_vdw_pair_params(Index ind1, Index ind2, Real *, Real *, Real *, Real *)
static void calc_self_fullelect_tabener(nonbonded *)
static void(* calcFullSelf)(nonbonded *)
void NAMD_die(const char *err_msg)
static void calc_self_merge_fullelect_ti(nonbonded *)
static void(* calcSlowSelf)(nonbonded *)
static void(* calcMergeDispSelf)(nonbonded *)
static void calc_self_fullelect_les(nonbonded *)
static void calc_self_merge_fullelect_go(nonbonded *)
static void calc_self_merge_fullelect_fulldisp(nonbonded *)
int get_num_vdw_params(void)
static BigReal switchOn_1
static Bool vdwForceSwitching
static void calc_self_energy_merge_fullelect_go(nonbonded *)
static void calc_self_energy_merge_fullelect(nonbonded *)
static void calc_pair_energy_fullelect_int(nonbonded *)
static void calc_pair_energy_merge_fullelect_pprof(nonbonded *)
static BigReal * lambda_table
static void calc_self_energy_fep(nonbonded *)
static BigReal pi_ewaldcof
static void(* calcSlowSelfEnergy)(nonbonded *)
static void calc_pair_energy_slow_fullelect_pprof(nonbonded *)
static BigReal * slow_table
static void(* calcSelfEnergy)(nonbonded *)
static void(* calcPairEnergy)(nonbonded *)
static void calc_pair_fullelect_les(nonbonded *)
static void calc_pair_energy_les(nonbonded *)
static void calc_self_merge_fullelect(nonbonded *)
static void calc_self_energy_tabener(nonbonded *)
static void calc_pair_energy_merge_fullelect_int(nonbonded *)
static void calc_self_energy_slow_fullelect_pprof(nonbonded *)
static void calc_self_energy_pprof(nonbonded *)
static Bool pairInteractionOn
static void calc_pair_energy_fullelect_pprof(nonbonded *)
static void calc_pair_fullelect_go(nonbonded *)
static void calc_pair_energy_slow_fullelect(nonbonded *)
static void calc_pair_energy_fullelect_les(nonbonded *)
static BigReal * vdwb_table
static void calc_pair_energy_fullelect_tabener(nonbonded *)
static void(* calcFullPair)(nonbonded *)
#define VDW_SWITCH_MODE_FORCE
static void calc_pair_merge_fullelect_pprof(nonbonded *)
static const LJTable * ljTable
static void calc_self_energy_merge_fullelect_pprof(nonbonded *)
#define VDW_SWITCH_MODE_ENERGY
static void(* calcFullPairEnergy)(nonbonded *)
static BigReal * corr_table
static BigReal * table_short
static void calc_pair_energy_merge_fullelect_fulldisp(nonbonded *)
static void calc_self(nonbonded *)
#define SPOLY(pg, pdg, ra, split)
static void calc_self_fullelect_ti(nonbonded *)
static void calc_pair_fullelect_tabener(nonbonded *)
static void calc_pair_energy_merge_fullelect_ti(nonbonded *)
std::ostream & iERROR(std::ostream &s)
static BigReal * table_alloc
static void calc_self_energy_fullelect_fep(nonbonded *)
static void calc_self_merge_fullelect_tabener(nonbonded *)
static BigReal alchVdwShiftCoeff
static void calc_pair_go(nonbonded *)
static void calc_pair_ti(nonbonded *)
static void calc_self_energy(nonbonded *)
void get_vdw_params(Real *sigma, Real *epsilon, Real *sigma14, Real *epsilon14, Index index)
static void calc_self_fullelect_go(nonbonded *)
static void calc_pair_energy_merge_fullelect_les(nonbonded *)
static void calc_self_pprof(nonbonded *)
static void(* calcMergeDispPair)(nonbonded *)
static void calc_self_merge_fullelect_les(nonbonded *)
static void calc_pair_slow_fullelect_tabener(nonbonded *)
static void calc_pair_energy_fullelect(nonbonded *)
static void calc_pair_merge_fullelect_fulldisp(nonbonded *)
static void calc_self_merge_fullelect_pprof(nonbonded *)
static void calc_self_energy_slow_fullelect_go(nonbonded *)
static void calc_pair_energy_slow_fullelect_ti(nonbonded *)
static void(* calcMergeSelf)(nonbonded *)
static void calc_self_energy_slow_fullelect_les(nonbonded *)
static void(* calcFullSelfEnergy)(nonbonded *)
static void calc_pair_fullelect(nonbonded *)
static void calc_self_slow_fullelect_les(nonbonded *)