21 if (!soluteScalingOn) {
27 table_alloc =
new char[2*table_dim*table_dim*
sizeof(
TableEntry) + 31];
28 char *table_align = table_alloc;
29 while ( (
long)table_align % 32 ) table_align++;
31 for (
register int i=0; i < table_dim; i++)
32 for (
register int j=i; j < table_dim; j++)
34 TableEntry *curij = &(table[2*(i*table_dim+j)]);
35 TableEntry *curji = &(table[2*(j*table_dim+i)]);
38 compute_vdw_params(i,j,curij,curij+1);
40 curij->
A = curij->
B = 0.0;
41 curji->
A = curji->
B = 0.0;
46 *(curji + 1) = *(curij + 1);
54 delete [] table_alloc;
58 void LJTable::compute_vdw_params(
int i,
int j,
64 int useGeom =
simParams->vdwGeometricSigma;
72 const int i_type = soluteScalingOn ? ((i >= table_dim_org)? ss_vdw_type[i-table_dim_org]:i) : i;
73 const int j_type = soluteScalingOn ? ((j >= table_dim_org)? ss_vdw_type[j-table_dim_org]:j) : j;
81 #if defined(NAMD_CUDA) || defined(NAMD_HIP) 82 NAMD_die(
"Tabulated energies are not supported in CUDA-enabled NAMD");
85 "LJTable::compute_vdw_params: energy table index is negative");
89 cur_scaled->
A = -1 - K;
99 if ( tabulatedEnergies && ( cur->
A < 0 || cur_scaled->
A < 0 ) )
100 NAMD_die(
"LJ A is negative with tabulatedEnergies enabled");
117 Real sigma_i, sigma_i14, epsilon_i, epsilon_i14;
118 Real sigma_j, sigma_j14, epsilon_j, epsilon_j14;
121 &epsilon_i14,i_type);
123 &epsilon_j14,j_type);
126 useGeom ? sqrt(sigma_i*sigma_j) : 0.5*(sigma_i+sigma_j);
128 useGeom ? sqrt(sigma_i14*sigma_j14) : 0.5 * (sigma_i14+sigma_j14);
129 BigReal epsilon_ij = sqrt(epsilon_i*epsilon_j);
130 BigReal epsilon_ij14 = sqrt(epsilon_i14*epsilon_j14);
135 sigma_ij *= sigma_ij*sigma_ij;
136 sigma_ij *= sigma_ij;
137 sigma_ij14 *= sigma_ij14*sigma_ij14;
138 sigma_ij14 *= sigma_ij14;
141 cur->
B = 4.0 * sigma_ij * epsilon_ij;
142 cur->
A = cur->
B * sigma_ij;
143 cur_scaled->
B = 4.0 * sigma_ij14 * epsilon_ij14;
144 cur_scaled->
A = cur_scaled->
B * sigma_ij14;
146 if ( tabulatedEnergies && ( cur->
A < 0 || cur_scaled->
A < 0 ) )
147 NAMD_die(
"LJ A is negative with tabulatedEnergies enabled");
152 if (soluteScalingOn) {
154 if (i >= table_dim_org && i < (table_dim_org+ss_dim) && j < table_dim_org) {
155 cur->
A *= sqrt(soluteScalingFactor);
156 cur->
B *= sqrt(soluteScalingFactor);
157 cur_scaled->
A *= sqrt(soluteScalingFactor);
158 cur_scaled->
B *= sqrt(soluteScalingFactor);
160 if (i < table_dim_org && j >= table_dim_org && j < (table_dim_org+ss_dim)) {
161 cur->
A *= sqrt(soluteScalingFactor);
162 cur->
B *= sqrt(soluteScalingFactor);
163 cur_scaled->
A *= sqrt(soluteScalingFactor);
164 cur_scaled->
B *= sqrt(soluteScalingFactor);
166 if (i >=table_dim_org && i < (table_dim_org+ss_dim) && j >= table_dim_org && j < (table_dim_org+ss_dim)) {
167 cur->
A *= soluteScalingFactor;
168 cur->
B *= soluteScalingFactor;
169 cur_scaled->
A *= soluteScalingFactor;
170 cur_scaled->
B *= soluteScalingFactor;
SimParameters * simParameters
void NAMD_bug(const char *err_msg)
int get_vdw_pair_params(Index ind1, Index ind2, Real *, Real *, Real *, Real *)
void NAMD_die(const char *err_msg)
int get_num_vdw_params(void)
int get_table_pair_params(Index, Index, int *)
void get_vdw_params(Real *sigma, Real *epsilon, Real *sigma14, Real *epsilon14, Index index)