| version 1.1189 | version 1.1190 |
|---|
| |
| SHORT | SHORT |
| ( | ( |
| ENERGY( BigReal electEnergy = 0; ) | ENERGY( BigReal electEnergy = 0; ) |
| | Vector f_net = 0.; |
| ) | ) |
| | |
| FEP | FEP |
| |
| ) | ) |
| | |
| #ifndef A2_QPX | #ifndef A2_QPX |
| FAST | |
| ( | |
| SHORT | |
| ( | |
| BigReal virial_xx = 0; | |
| BigReal virial_xy = 0; | |
| BigReal virial_xz = 0; | |
| BigReal virial_yy = 0; | |
| BigReal virial_yz = 0; | |
| BigReal virial_zz = 0; | |
| ) | |
| ) | |
| FULL | FULL |
| ( | ( |
| ENERGY( BigReal fullElectEnergy = 0; ) | ENERGY( BigReal fullElectEnergy = 0; ) |
| | Vector fullf_net = 0.; |
| FEP | FEP |
| ( | ( |
| ENERGY( BigReal fullElectEnergy_s = 0; ) | ENERGY( BigReal fullElectEnergy_s = 0; ) |
| ) | ) |
| BigReal fullElectVirial_xx = 0; | |
| BigReal fullElectVirial_xy = 0; | |
| BigReal fullElectVirial_xz = 0; | |
| BigReal fullElectVirial_yy = 0; | |
| BigReal fullElectVirial_yz = 0; | |
| BigReal fullElectVirial_zz = 0; | |
| ) | ) |
| #else | #else |
| vector4double virial_v0 = (vector4double)(0.0); | Vector fullf_net = 0.; |
| vector4double virial_v1 = (vector4double)(0.0); | |
| vector4double virial_v2 = (vector4double)(0.0); | |
| vector4double fullvirial_v0 = (vector4double) (0.0); | |
| vector4double fullvirial_v1 = (vector4double) (0.0); | |
| vector4double fullvirial_v2 = (vector4double) (0.0); | |
| BigReal fullElectEnergy = 0; | BigReal fullElectEnergy = 0; |
| BigReal fullElectEnergy_s = 0; | BigReal fullElectEnergy_s = 0; |
| #endif | #endif |
| |
| | |
| | |
| #if ( SHORT( FAST( 1+ ) ) 0 ) | #if ( SHORT( FAST( 1+ ) ) 0 ) |
| #if ( PAIR( 1+ ) 0 ) | |
| Force *f_0 = params->ff[0]; | Force *f_0 = params->ff[0]; |
| | #if ( PAIR( 1+ ) 0 ) |
| Force *f_1 = params->ff[1]; | Force *f_1 = params->ff[1]; |
| #else | #else |
| #define f_1 f_0 | #define f_1 f_0 |
| NBWORKARRAY(Force,f_0,i_upper) | |
| memset( (void*) f_0, 0, i_upper * sizeof(Force) ); | |
| #endif | #endif |
| #endif | #endif |
| #if ( FULL( 1+ ) 0 ) | #if ( FULL( 1+ ) 0 ) |
| #if ( PAIR( 1+ ) 0 ) | |
| Force *fullf_0 = params->fullf[0]; | Force *fullf_0 = params->fullf[0]; |
| | #if ( PAIR( 1+ ) 0 ) |
| Force *fullf_1 = params->fullf[1]; | Force *fullf_1 = params->fullf[1]; |
| #else | #else |
| #define fullf_1 fullf_0 | #define fullf_1 fullf_0 |
| NBWORKARRAY(Force,fullf_0,i_upper); | |
| memset( (void*) fullf_0, 0, i_upper * sizeof(Force) ); | |
| #endif | #endif |
| #endif | #endif |
| | |
| |
| Vector fda = -dfda * rda; | Vector fda = -dfda * rda; |
| Vector fdd = -dfdd * rdd; | Vector fdd = -dfdd * rdd; |
| | |
| | SHORT(f_net) NOSHORT(fullf_net) += (faa + fad) + (fda + fdd); |
| params->ff[0][i] += faa + fad; | params->ff[0][i] += faa + fad; |
| params->ff[0][i+1] += fda + fdd; | params->ff[0][i+1] += fda + fdd; |
| params->ff[1][j] -= faa + fda; | params->ff[1][j] -= faa + fda; |
| params->ff[1][j+1] -= fad + fdd; | params->ff[1][j+1] -= fad + fdd; |
| | |
| reduction[virialIndex_XX] += faa.x * raa.x + fad.x * rad.x | |
| + fda.x * rda.x + fdd.x * rdd.x; | |
| reduction[virialIndex_XY] += faa.x * raa.y + fad.x * rad.y | |
| + fda.x * rda.y + fdd.x * rdd.y; | |
| reduction[virialIndex_XZ] += faa.x * raa.z + fad.x * rad.z | |
| + fda.x * rda.z + fdd.x * rdd.z; | |
| reduction[virialIndex_YX] += faa.y * raa.x + fad.y * rad.x | |
| + fda.y * rda.x + fdd.y * rdd.x; | |
| reduction[virialIndex_YY] += faa.y * raa.y + fad.y * rad.y | |
| + fda.y * rda.y + fdd.y * rdd.y; | |
| reduction[virialIndex_YZ] += faa.y * raa.z + fad.y * rad.z | |
| + fda.y * rda.z + fdd.y * rdd.z; | |
| reduction[virialIndex_ZX] += faa.z * raa.x + fad.z * rad.x | |
| + fda.z * rda.x + fdd.z * rdd.x; | |
| reduction[virialIndex_ZY] += faa.z * raa.y + fad.z * rad.y | |
| + fda.z * rda.y + fdd.z * rdd.y; | |
| reduction[virialIndex_ZZ] += faa.z * raa.z + fad.z * rad.z | |
| + fda.z * rda.z + fdd.z * rdd.z; | |
| reduction[electEnergyIndex] += ethole; | reduction[electEnergyIndex] += ethole; |
| } | } |
| } | } |
| |
| params->ff[0][i] += force; | params->ff[0][i] += force; |
| params->ff[1][j] -= force; | params->ff[1][j] -= force; |
| } | } |
| | SHORT(f_net) NOSHORT(fullf_net) += force; |
| reduction[virialIndex_XX] += force.x * sep.x; | |
| reduction[virialIndex_XY] += force.x * sep.y; | |
| reduction[virialIndex_XZ] += force.x * sep.z; | |
| reduction[virialIndex_YX] += force.y * sep.x; | |
| reduction[virialIndex_YY] += force.y * sep.y; | |
| reduction[virialIndex_YZ] += force.y * sep.z; | |
| reduction[virialIndex_ZX] += force.z * sep.x; | |
| reduction[virialIndex_ZY] += force.z * sep.y; | |
| reduction[virialIndex_ZZ] += force.z * sep.z; | |
| } | } |
| } | } |
| #endif | #endif |
| |
| #endif | #endif |
| | |
| #ifndef NAMD_CUDA | #ifndef NAMD_CUDA |
| | SHORT( FAST( f_net.x += f_i_x; ) ) |
| | SHORT( FAST( f_net.y += f_i_y; ) ) |
| | SHORT( FAST( f_net.z += f_i_z; ) ) |
| | FULL( fullf_net.x += fullf_i_x; ) |
| | FULL( fullf_net.y += fullf_i_y; ) |
| | FULL( fullf_net.z += fullf_i_z; ) |
| SHORT( FAST( f_0[i].x += f_i_x; ) ) | SHORT( FAST( f_0[i].x += f_i_x; ) ) |
| SHORT( FAST( f_0[i].y += f_i_y; ) ) | SHORT( FAST( f_0[i].y += f_i_y; ) ) |
| SHORT( FAST( f_0[i].z += f_i_z; ) ) | SHORT( FAST( f_0[i].z += f_i_z; ) ) |
| |
| // PAIR(iout << "++++++++\n" << endi;) | // PAIR(iout << "++++++++\n" << endi;) |
| PAIR( if ( savePairlists ) { pairlists.setIndexValue(i); } ) | PAIR( if ( savePairlists ) { pairlists.setIndexValue(i); } ) |
| | |
| #ifdef A2_QPX | |
| BigReal virial_xx = vec_extract (virial_v0, 0); | |
| BigReal virial_xy = vec_extract (virial_v0, 1); | |
| BigReal virial_xz = vec_extract (virial_v0, 2); | |
| BigReal virial_yy = vec_extract (virial_v1, 1); | |
| BigReal virial_yz = vec_extract (virial_v1, 2); | |
| BigReal virial_zz = vec_extract (virial_v2, 2); | |
| #endif | |
| #ifdef f_1 | #ifdef f_1 |
| #undef f_1 | #undef f_1 |
| #endif | #endif |
| #if ( SHORT( FAST( 1+ ) ) 0 ) | #if ( SHORT( FAST( 1+ ) ) 0 ) |
| #if ( SELF( 1+ ) 0 ) | #if ( PAIR( 1+ ) 0 ) |
| { | { |
| Force *patch_f_0 = params->ff[0]; | |
| #ifndef NAMD_CUDA | #ifndef NAMD_CUDA |
| #ifndef ARCH_POWERPC | BigReal virial_xx = f_net.x * params->offset_f.x; |
| #pragma ivdep | BigReal virial_xy = f_net.x * params->offset_f.y; |
| #endif | BigReal virial_xz = f_net.x * params->offset_f.z; |
| for ( int i = 0; i < i_upper; ++i ) { | BigReal virial_yy = f_net.y * params->offset_f.y; |
| patch_f_0[i].x += f_0[i].x; | BigReal virial_yz = f_net.y * params->offset_f.z; |
| patch_f_0[i].y += f_0[i].y; | BigReal virial_zz = f_net.z * params->offset_f.z; |
| patch_f_0[i].z += f_0[i].z; | |
| virial_xx += f_0[i].x * p_0[i].position.x; | reduction[virialIndex_XX] += virial_xx; |
| virial_xy += f_0[i].x * p_0[i].position.y; | reduction[virialIndex_XY] += virial_xy; |
| virial_xz += f_0[i].x * p_0[i].position.z; | reduction[virialIndex_XZ] += virial_xz; |
| virial_yy += f_0[i].y * p_0[i].position.y; | reduction[virialIndex_YX] += virial_xy; |
| virial_yz += f_0[i].y * p_0[i].position.z; | reduction[virialIndex_YY] += virial_yy; |
| virial_zz += f_0[i].z * p_0[i].position.z; | reduction[virialIndex_YZ] += virial_yz; |
| } | reduction[virialIndex_ZX] += virial_xz; |
| | reduction[virialIndex_ZY] += virial_yz; |
| | reduction[virialIndex_ZZ] += virial_zz; |
| #endif | #endif |
| } | } |
| #endif | #endif |
| #endif | #endif |
| | |
| #ifdef A2_QPX | |
| BigReal fullElectVirial_xx = vec_extract(fullvirial_v0, 0); | |
| BigReal fullElectVirial_xy = vec_extract(fullvirial_v0, 1); | |
| BigReal fullElectVirial_xz = vec_extract(fullvirial_v0, 2); | |
| BigReal fullElectVirial_yy = vec_extract(fullvirial_v1, 1); | |
| BigReal fullElectVirial_yz = vec_extract(fullvirial_v1, 2); | |
| BigReal fullElectVirial_zz = vec_extract(fullvirial_v2, 2); | |
| #endif | |
| #ifdef fullf_1 | #ifdef fullf_1 |
| #undef fullf_1 | #undef fullf_1 |
| #endif | #endif |
| #if ( FULL( 1+ ) 0 ) | #if ( FULL( 1+ ) 0 ) |
| #if ( SELF( 1+ ) 0 ) | #if ( PAIR( 1+ ) 0 ) |
| { | { |
| Force *patch_fullf_0 = params->fullf[0]; | |
| #ifndef NAMD_CUDA | #ifndef NAMD_CUDA |
| #ifndef ARCH_POWERPC | BigReal fullElectVirial_xx = fullf_net.x * params->offset_f.x; |
| #pragma ivdep | BigReal fullElectVirial_xy = fullf_net.x * params->offset_f.y; |
| #endif | BigReal fullElectVirial_xz = fullf_net.x * params->offset_f.z; |
| for ( int i = 0; i < i_upper; ++i ) { | BigReal fullElectVirial_yy = fullf_net.y * params->offset_f.y; |
| patch_fullf_0[i].x += fullf_0[i].x; | BigReal fullElectVirial_yz = fullf_net.y * params->offset_f.z; |
| patch_fullf_0[i].y += fullf_0[i].y; | BigReal fullElectVirial_zz = fullf_net.z * params->offset_f.z; |
| patch_fullf_0[i].z += fullf_0[i].z; | |
| fullElectVirial_xx += fullf_0[i].x * p_0[i].position.x; | reduction[fullElectVirialIndex_XX] += fullElectVirial_xx; |
| fullElectVirial_xy += fullf_0[i].x * p_0[i].position.y; | reduction[fullElectVirialIndex_XY] += fullElectVirial_xy; |
| fullElectVirial_xz += fullf_0[i].x * p_0[i].position.z; | reduction[fullElectVirialIndex_XZ] += fullElectVirial_xz; |
| fullElectVirial_yy += fullf_0[i].y * p_0[i].position.y; | reduction[fullElectVirialIndex_YX] += fullElectVirial_xy; |
| fullElectVirial_yz += fullf_0[i].y * p_0[i].position.z; | reduction[fullElectVirialIndex_YY] += fullElectVirial_yy; |
| fullElectVirial_zz += fullf_0[i].z * p_0[i].position.z; | reduction[fullElectVirialIndex_YZ] += fullElectVirial_yz; |
| } | reduction[fullElectVirialIndex_ZX] += fullElectVirial_xz; |
| | reduction[fullElectVirialIndex_ZY] += fullElectVirial_yz; |
| | reduction[fullElectVirialIndex_ZZ] += fullElectVirial_zz; |
| #endif | #endif |
| } | } |
| #endif | #endif |
| |
| TI(reduction[electEnergyIndex_ti_2] += electEnergy_ti_2;) | TI(reduction[electEnergyIndex_ti_2] += electEnergy_ti_2;) |
| ) | ) |
| ) | ) |
| SHORT | |
| ( | |
| reduction[virialIndex_XX] += virial_xx; | |
| reduction[virialIndex_XY] += virial_xy; | |
| reduction[virialIndex_XZ] += virial_xz; | |
| reduction[virialIndex_YX] += virial_xy; | |
| reduction[virialIndex_YY] += virial_yy; | |
| reduction[virialIndex_YZ] += virial_yz; | |
| reduction[virialIndex_ZX] += virial_xz; | |
| reduction[virialIndex_ZY] += virial_yz; | |
| reduction[virialIndex_ZZ] += virial_zz; | |
| ) | |
| ) | ) |
| FULL | FULL |
| ( | ( |
| |
| TI(reduction[fullElectEnergyIndex_ti_1] += fullElectEnergy_ti_1;) | TI(reduction[fullElectEnergyIndex_ti_1] += fullElectEnergy_ti_1;) |
| TI(reduction[fullElectEnergyIndex_ti_2] += fullElectEnergy_ti_2;) | TI(reduction[fullElectEnergyIndex_ti_2] += fullElectEnergy_ti_2;) |
| ) | ) |
| reduction[fullElectVirialIndex_XX] += fullElectVirial_xx; | |
| reduction[fullElectVirialIndex_XY] += fullElectVirial_xy; | |
| reduction[fullElectVirialIndex_XZ] += fullElectVirial_xz; | |
| reduction[fullElectVirialIndex_YX] += fullElectVirial_xy; | |
| reduction[fullElectVirialIndex_YY] += fullElectVirial_yy; | |
| reduction[fullElectVirialIndex_YZ] += fullElectVirial_yz; | |
| reduction[fullElectVirialIndex_ZX] += fullElectVirial_xz; | |
| reduction[fullElectVirialIndex_ZY] += fullElectVirial_yz; | |
| reduction[fullElectVirialIndex_ZZ] += fullElectVirial_zz; | |
| ) | ) |
| | |
| delete [] excl_flags_buff; | delete [] excl_flags_buff; |