22 if (!soluteScalingOn) {
28 table_alloc =
new char[2*table_dim*table_dim*
sizeof(
TableEntry) + 31];
29 char *table_align = table_alloc;
30 while ( (
long)table_align % 32 ) table_align++;
32 for (
register int i=0; i < table_dim; i++)
33 for (
register int j=i; j < table_dim; j++)
35 TableEntry *curij = &(table[2*(i*table_dim+j)]);
36 TableEntry *curji = &(table[2*(j*table_dim+i)]);
39 compute_vdw_params(i,j,curij,curij+1);
41 curij->
A = curij->
B = 0.0;
42 curji->
A = curji->
B = 0.0;
47 *(curji + 1) = *(curij + 1);
55 delete [] table_alloc;
59 void LJTable::compute_vdw_params(
int i,
int j,
65 int useGeom =
simParams->vdwGeometricSigma;
73 const int i_type = soluteScalingOn ? ((i >= table_dim_org)? ss_vdw_type[i-table_dim_org]:i) : i;
74 const int j_type = soluteScalingOn ? ((j >= table_dim_org)? ss_vdw_type[j-table_dim_org]:j) : j;
82 #if defined(NAMD_CUDA) || defined(NAMD_HIP) 83 NAMD_die(
"Tabulated energies are not supported in CUDA-enabled NAMD");
86 "LJTable::compute_vdw_params: energy table index is negative");
90 cur_scaled->
A = -1 - K;
100 if ( tabulatedEnergies && ( cur->
A < 0 || cur_scaled->
A < 0 ) )
101 NAMD_die(
"LJ A is negative with tabulatedEnergies enabled");
118 Real sigma_i, sigma_i14, epsilon_i, epsilon_i14;
119 Real sigma_j, sigma_j14, epsilon_j, epsilon_j14;
122 &epsilon_i14,i_type);
124 &epsilon_j14,j_type);
127 useGeom ? sqrt(sigma_i*sigma_j) : 0.5*(sigma_i+sigma_j);
129 useGeom ? sqrt(sigma_i14*sigma_j14) : 0.5 * (sigma_i14+sigma_j14);
130 BigReal epsilon_ij = sqrt(epsilon_i*epsilon_j);
131 BigReal epsilon_ij14 = sqrt(epsilon_i14*epsilon_j14);
136 sigma_ij *= sigma_ij*sigma_ij;
137 sigma_ij *= sigma_ij;
138 sigma_ij14 *= sigma_ij14*sigma_ij14;
139 sigma_ij14 *= sigma_ij14;
142 cur->
B = 4.0 * sigma_ij * epsilon_ij;
143 cur->
A = cur->
B * sigma_ij;
144 cur_scaled->
B = 4.0 * sigma_ij14 * epsilon_ij14;
145 cur_scaled->
A = cur_scaled->
B * sigma_ij14;
147 if ( tabulatedEnergies && ( cur->
A < 0 || cur_scaled->
A < 0 ) )
148 NAMD_die(
"LJ A is negative with tabulatedEnergies enabled");
153 if (soluteScalingOn) {
155 if (i >= table_dim_org && i < (table_dim_org+ss_dim) && j < table_dim_org) {
156 cur->
A *= sqrt(soluteScalingFactor);
157 cur->
B *= sqrt(soluteScalingFactor);
158 cur_scaled->
A *= sqrt(soluteScalingFactor);
159 cur_scaled->
B *= sqrt(soluteScalingFactor);
161 if (i < table_dim_org && j >= table_dim_org && j < (table_dim_org+ss_dim)) {
162 cur->
A *= sqrt(soluteScalingFactor);
163 cur->
B *= sqrt(soluteScalingFactor);
164 cur_scaled->
A *= sqrt(soluteScalingFactor);
165 cur_scaled->
B *= sqrt(soluteScalingFactor);
167 if (i >=table_dim_org && i < (table_dim_org+ss_dim) && j >= table_dim_org && j < (table_dim_org+ss_dim)) {
168 cur->
A *= soluteScalingFactor;
169 cur->
B *= soluteScalingFactor;
170 cur_scaled->
A *= soluteScalingFactor;
171 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)