NAMD
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | List of all members
ComputeNonbondedUtil Class Reference

#include <ComputeNonbondedUtil.h>

Inheritance diagram for ComputeNonbondedUtil:
ComputeLCPO ComputeNonbondedPair ComputeNonbondedSelf CudaComputeNonbonded

Public Types

enum  {
  exclChecksumIndex, pairlistWarningIndex, electEnergyIndex, fullElectEnergyIndex,
  vdwEnergyIndex, fullVdwEnergyIndex, goNativeEnergyIndex, goNonnativeEnergyIndex,
  groLJEnergyIndex, groGaussEnergyIndex, electEnergyIndex_s, fullElectEnergyIndex_s,
  vdwEnergyIndex_s, electEnergyIndex_ti_1, fullElectEnergyIndex_ti_1, vdwEnergyIndex_ti_1,
  electEnergyIndex_ti_2, fullElectEnergyIndex_ti_2, vdwEnergyIndex_ti_2, TENSOR =(virialIndex),
  TENSOR =(virialIndex), VECTOR =(pairVDWForceIndex), VECTOR =(pairVDWForceIndex), reductionDataSize
}
 

Public Member Functions

 ComputeNonbondedUtil ()
 
 ~ComputeNonbondedUtil ()
 
void calcGBIS (nonbonded *params, GBISParamStruct *gbisParams)
 

Static Public Member Functions

static void select (void)
 
static void submitReductionData (BigReal *, SubmitReduction *)
 
static void submitPressureProfileData (BigReal *, SubmitReduction *)
 
static BigReal square (const BigReal &x, const BigReal &y, const BigReal &z)
 
static void calc_error (nonbonded *)
 
static void calc_pair (nonbonded *)
 
static void calc_pair_energy (nonbonded *)
 
static void calc_pair_disp (nonbonded *)
 
static void calc_pair_energy_disp (nonbonded *)
 
static void calc_pair_fullelect (nonbonded *)
 
static void calc_pair_energy_fullelect (nonbonded *)
 
static void calc_pair_disp_fullelect (nonbonded *)
 
static void calc_pair_energy_disp_fullelect (nonbonded *)
 
static void calc_pair_merge_fullelect (nonbonded *)
 
static void calc_pair_energy_merge_fullelect (nonbonded *)
 
static void calc_pair_disp_merge_fullelect (nonbonded *)
 
static void calc_pair_energy_disp_merge_fullelect (nonbonded *)
 
static void calc_pair_slow_fullelect (nonbonded *)
 
static void calc_pair_energy_slow_fullelect (nonbonded *)
 
static void calc_self (nonbonded *)
 
static void calc_self_energy (nonbonded *)
 
static void calc_self_disp (nonbonded *)
 
static void calc_self_energy_disp (nonbonded *)
 
static void calc_self_fullelect (nonbonded *)
 
static void calc_self_energy_fullelect (nonbonded *)
 
static void calc_self_disp_fullelect (nonbonded *)
 
static void calc_self_energy_disp_fullelect (nonbonded *)
 
static void calc_self_merge_fullelect (nonbonded *)
 
static void calc_self_energy_merge_fullelect (nonbonded *)
 
static void calc_self_disp_merge_fullelect (nonbonded *)
 
static void calc_self_energy_disp_merge_fullelect (nonbonded *)
 
static void calc_self_slow_fullelect (nonbonded *)
 
static void calc_self_energy_slow_fullelect (nonbonded *)
 
static void calc_pair_energy_fep (nonbonded *)
 
static void calc_pair_energy_fullelect_fep (nonbonded *)
 
static void calc_pair_energy_merge_fullelect_fep (nonbonded *)
 
static void calc_pair_energy_slow_fullelect_fep (nonbonded *)
 
static void calc_self_energy_fep (nonbonded *)
 
static void calc_self_energy_fullelect_fep (nonbonded *)
 
static void calc_self_energy_merge_fullelect_fep (nonbonded *)
 
static void calc_self_energy_slow_fullelect_fep (nonbonded *)
 
static void calc_pair_energy_ti (nonbonded *)
 
static void calc_pair_ti (nonbonded *)
 
static void calc_pair_energy_fullelect_ti (nonbonded *)
 
static void calc_pair_fullelect_ti (nonbonded *)
 
static void calc_pair_energy_merge_fullelect_ti (nonbonded *)
 
static void calc_pair_merge_fullelect_ti (nonbonded *)
 
static void calc_pair_energy_slow_fullelect_ti (nonbonded *)
 
static void calc_pair_slow_fullelect_ti (nonbonded *)
 
static void calc_self_energy_ti (nonbonded *)
 
static void calc_self_ti (nonbonded *)
 
static void calc_self_energy_fullelect_ti (nonbonded *)
 
static void calc_self_fullelect_ti (nonbonded *)
 
static void calc_self_energy_merge_fullelect_ti (nonbonded *)
 
static void calc_self_merge_fullelect_ti (nonbonded *)
 
static void calc_self_energy_slow_fullelect_ti (nonbonded *)
 
static void calc_self_slow_fullelect_ti (nonbonded *)
 
static void calc_pair_les (nonbonded *)
 
static void calc_pair_energy_les (nonbonded *)
 
static void calc_pair_fullelect_les (nonbonded *)
 
static void calc_pair_energy_fullelect_les (nonbonded *)
 
static void calc_pair_merge_fullelect_les (nonbonded *)
 
static void calc_pair_energy_merge_fullelect_les (nonbonded *)
 
static void calc_pair_slow_fullelect_les (nonbonded *)
 
static void calc_pair_energy_slow_fullelect_les (nonbonded *)
 
static void calc_self_les (nonbonded *)
 
static void calc_self_energy_les (nonbonded *)
 
static void calc_self_fullelect_les (nonbonded *)
 
static void calc_self_energy_fullelect_les (nonbonded *)
 
static void calc_self_merge_fullelect_les (nonbonded *)
 
static void calc_self_energy_merge_fullelect_les (nonbonded *)
 
static void calc_self_slow_fullelect_les (nonbonded *)
 
static void calc_self_energy_slow_fullelect_les (nonbonded *)
 
static void calc_pair_energy_int (nonbonded *)
 
static void calc_pair_energy_fullelect_int (nonbonded *)
 
static void calc_pair_energy_merge_fullelect_int (nonbonded *)
 
static void calc_self_energy_int (nonbonded *)
 
static void calc_self_energy_fullelect_int (nonbonded *)
 
static void calc_self_energy_merge_fullelect_int (nonbonded *)
 
static void calc_pair_pprof (nonbonded *)
 
static void calc_pair_energy_pprof (nonbonded *)
 
static void calc_pair_fullelect_pprof (nonbonded *)
 
static void calc_pair_energy_fullelect_pprof (nonbonded *)
 
static void calc_pair_merge_fullelect_pprof (nonbonded *)
 
static void calc_pair_energy_merge_fullelect_pprof (nonbonded *)
 
static void calc_pair_slow_fullelect_pprof (nonbonded *)
 
static void calc_pair_energy_slow_fullelect_pprof (nonbonded *)
 
static void calc_self_pprof (nonbonded *)
 
static void calc_self_energy_pprof (nonbonded *)
 
static void calc_self_fullelect_pprof (nonbonded *)
 
static void calc_self_energy_fullelect_pprof (nonbonded *)
 
static void calc_self_merge_fullelect_pprof (nonbonded *)
 
static void calc_self_energy_merge_fullelect_pprof (nonbonded *)
 
static void calc_self_slow_fullelect_pprof (nonbonded *)
 
static void calc_self_energy_slow_fullelect_pprof (nonbonded *)
 
static void calc_pair_tabener (nonbonded *)
 
static void calc_pair_energy_tabener (nonbonded *)
 
static void calc_pair_fullelect_tabener (nonbonded *)
 
static void calc_pair_energy_fullelect_tabener (nonbonded *)
 
static void calc_pair_merge_fullelect_tabener (nonbonded *)
 
static void calc_pair_energy_merge_fullelect_tabener (nonbonded *)
 
static void calc_pair_slow_fullelect_tabener (nonbonded *)
 
static void calc_pair_energy_slow_fullelect_tabener (nonbonded *)
 
static void calc_self_tabener (nonbonded *)
 
static void calc_self_energy_tabener (nonbonded *)
 
static void calc_self_fullelect_tabener (nonbonded *)
 
static void calc_self_energy_fullelect_tabener (nonbonded *)
 
static void calc_self_merge_fullelect_tabener (nonbonded *)
 
static void calc_self_energy_merge_fullelect_tabener (nonbonded *)
 
static void calc_self_slow_fullelect_tabener (nonbonded *)
 
static void calc_self_energy_slow_fullelect_tabener (nonbonded *)
 
static void calc_pair_go (nonbonded *)
 
static void calc_pair_energy_go (nonbonded *)
 
static void calc_pair_fullelect_go (nonbonded *)
 
static void calc_pair_energy_fullelect_go (nonbonded *)
 
static void calc_pair_merge_fullelect_go (nonbonded *)
 
static void calc_pair_energy_merge_fullelect_go (nonbonded *)
 
static void calc_pair_slow_fullelect_go (nonbonded *)
 
static void calc_pair_energy_slow_fullelect_go (nonbonded *)
 
static void calc_self_go (nonbonded *)
 
static void calc_self_energy_go (nonbonded *)
 
static void calc_self_fullelect_go (nonbonded *)
 
static void calc_self_energy_fullelect_go (nonbonded *)
 
static void calc_self_merge_fullelect_go (nonbonded *)
 
static void calc_self_energy_merge_fullelect_go (nonbonded *)
 
static void calc_self_slow_fullelect_go (nonbonded *)
 
static void calc_self_energy_slow_fullelect_go (nonbonded *)
 

Static Public Attributes

static void(* calcPair )(nonbonded *)
 
static void(* calcPairEnergy )(nonbonded *)
 
static void(* calcSelf )(nonbonded *)
 
static void(* calcSelfEnergy )(nonbonded *)
 
static void(* calcDispPair )(nonbonded *)
 
static void(* calcDispPairEnergy )(nonbonded *)
 
static void(* calcDispSelf )(nonbonded *)
 
static void(* calcDispSelfEnergy )(nonbonded *)
 
static void(* calcFullPair )(nonbonded *)
 
static void(* calcFullPairEnergy )(nonbonded *)
 
static void(* calcFullSelf )(nonbonded *)
 
static void(* calcFullSelfEnergy )(nonbonded *)
 
static void(* calcFullDispPair )(nonbonded *)
 
static void(* calcFullDispPairEnergy )(nonbonded *)
 
static void(* calcFullDispSelf )(nonbonded *)
 
static void(* calcFullDispSelfEnergy )(nonbonded *)
 
static void(* calcMergePair )(nonbonded *)
 
static void(* calcMergePairEnergy )(nonbonded *)
 
static void(* calcMergeSelf )(nonbonded *)
 
static void(* calcMergeSelfEnergy )(nonbonded *)
 
static void(* calcMergeDispPair )(nonbonded *)
 
static void(* calcMergeDispPairEnergy )(nonbonded *)
 
static void(* calcMergeDispSelf )(nonbonded *)
 
static void(* calcMergeDispSelfEnergy )(nonbonded *)
 
static void(* calcSlowPair )(nonbonded *)
 
static void(* calcSlowPairEnergy )(nonbonded *)
 
static void(* calcSlowSelf )(nonbonded *)
 
static void(* calcSlowSelfEnergy )(nonbonded *)
 
static Bool commOnly
 
static Bool fixedAtomsOn
 
static Bool qmForcesOn
 
static BigReal cutoff
 
static BigReal cutoff2
 
static float cutoff2_f
 
static BigReal dielectric_1
 
static const LJTableljTable = 0
 
static const Moleculemol
 
static BigReal r2_delta
 
static BigReal r2_delta_1
 
static int rowsize
 
static int columnsize
 
static int r2_delta_exp
 
static BigRealtable_alloc = 0
 
static BigRealtable_ener = 0
 
static BigRealtable_short
 
static BigRealtable_noshort
 
static BigRealfast_table
 
static BigRealscor_table
 
static BigRealslow_table
 
static BigRealcorr_table
 
static BigRealfull_table
 
static BigRealvdwa_table
 
static BigRealvdwb_table
 
static BigRealr2_table
 
static int table_length
 
static BigReal scaling
 
static BigReal scale14
 
static BigReal switchOn
 
static BigReal switchOn_1
 
static BigReal switchOn2
 
static BigReal v_vdwa
 
static BigReal v_vdwb
 
static BigReal k_vdwa
 
static BigReal k_vdwb
 
static BigReal cutoff_3
 
static BigReal cutoff_6
 
static float v_vdwa_f
 
static float v_vdwb_f
 
static float k_vdwa_f
 
static float k_vdwb_f
 
static float cutoff_3_f
 
static float cutoff_6_f
 
static float switchOn_f
 
static float A6_f
 
static float B6_f
 
static float C6_f
 
static float A12_f
 
static float B12_f
 
static float C12_f
 
static BigReal c0
 
static BigReal c1
 
static BigReal c3
 
static BigReal c5
 
static BigReal c6
 
static BigReal c7
 
static BigReal c8
 
static Bool alchFepOn
 
static Bool alchThermIntOn
 
static Bool alchWCAOn
 
static BigReal alchVdwShiftCoeff
 
static Bool vdwForceSwitching
 
static Bool alchDecouple
 
static Bool lesOn
 
static int lesFactor
 
static BigReal lesScaling
 
static BigReallambda_table = 0
 
static Bool pairInteractionOn
 
static Bool pairInteractionSelf
 
static Bool pressureProfileOn
 
static int pressureProfileSlabs
 
static int pressureProfileAtomTypes
 
static BigReal pressureProfileThickness
 
static BigReal pressureProfileMin
 
static Bool accelMDOn
 
static Bool drudeNbthole
 
static BigReal ewaldcof
 
static BigReal pi_ewaldcof
 
static BigReal LJewaldcof
 
static int vdw_switch_mode
 
static Bool goGroPair
 
static Bool goForcesOn
 
static int goMethod
 

Detailed Description

Definition at line 240 of file ComputeNonbondedUtil.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
exclChecksumIndex 
pairlistWarningIndex 
electEnergyIndex 
fullElectEnergyIndex 
vdwEnergyIndex 
fullVdwEnergyIndex 
goNativeEnergyIndex 
goNonnativeEnergyIndex 
groLJEnergyIndex 
groGaussEnergyIndex 
electEnergyIndex_s 
fullElectEnergyIndex_s 
vdwEnergyIndex_s 
electEnergyIndex_ti_1 
fullElectEnergyIndex_ti_1 
vdwEnergyIndex_ti_1 
electEnergyIndex_ti_2 
fullElectEnergyIndex_ti_2 
vdwEnergyIndex_ti_2 
TENSOR 
TENSOR 
VECTOR 
VECTOR 
reductionDataSize 

Definition at line 284 of file ComputeNonbondedUtil.h.

287 //sd-db
291 //sd-de
292  TENSOR(virialIndex), TENSOR(fullElectVirialIndex),
293  VECTOR(pairVDWForceIndex), VECTOR(pairElectForceIndex),

Constructor & Destructor Documentation

◆ ComputeNonbondedUtil()

ComputeNonbondedUtil::ComputeNonbondedUtil ( )
inline

Definition at line 244 of file ComputeNonbondedUtil.h.

244 {}

◆ ~ComputeNonbondedUtil()

ComputeNonbondedUtil::~ComputeNonbondedUtil ( )
inline

Definition at line 245 of file ComputeNonbondedUtil.h.

245 {}

Member Function Documentation

◆ calc_error()

void ComputeNonbondedUtil::calc_error ( nonbonded )
static

Definition at line 262 of file ComputeNonbondedUtil.C.

References NAMD_bug().

Referenced by select().

262  {
263  NAMD_bug("Tried to call missing nonbonded compute routine.");
264 }
void NAMD_bug(const char *err_msg)
Definition: common.C:196

◆ calc_pair()

static void ComputeNonbondedUtil::calc_pair ( nonbonded )
static

Referenced by select().

◆ calc_pair_disp()

static void ComputeNonbondedUtil::calc_pair_disp ( nonbonded )
static

Referenced by select().

◆ calc_pair_disp_fullelect()

static void ComputeNonbondedUtil::calc_pair_disp_fullelect ( nonbonded )
static

Referenced by select().

◆ calc_pair_disp_merge_fullelect()

static void ComputeNonbondedUtil::calc_pair_disp_merge_fullelect ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy()

static void ComputeNonbondedUtil::calc_pair_energy ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_disp()

static void ComputeNonbondedUtil::calc_pair_energy_disp ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_disp_fullelect()

static void ComputeNonbondedUtil::calc_pair_energy_disp_fullelect ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_disp_merge_fullelect()

static void ComputeNonbondedUtil::calc_pair_energy_disp_merge_fullelect ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_fep()

static void ComputeNonbondedUtil::calc_pair_energy_fep ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_fullelect()

static void ComputeNonbondedUtil::calc_pair_energy_fullelect ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_fullelect_fep()

static void ComputeNonbondedUtil::calc_pair_energy_fullelect_fep ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_fullelect_go()

static void ComputeNonbondedUtil::calc_pair_energy_fullelect_go ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_fullelect_int()

static void ComputeNonbondedUtil::calc_pair_energy_fullelect_int ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_fullelect_les()

static void ComputeNonbondedUtil::calc_pair_energy_fullelect_les ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_fullelect_pprof()

static void ComputeNonbondedUtil::calc_pair_energy_fullelect_pprof ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_fullelect_tabener()

static void ComputeNonbondedUtil::calc_pair_energy_fullelect_tabener ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_fullelect_ti()

static void ComputeNonbondedUtil::calc_pair_energy_fullelect_ti ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_go()

static void ComputeNonbondedUtil::calc_pair_energy_go ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_int()

static void ComputeNonbondedUtil::calc_pair_energy_int ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_les()

static void ComputeNonbondedUtil::calc_pair_energy_les ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_merge_fullelect()

static void ComputeNonbondedUtil::calc_pair_energy_merge_fullelect ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_merge_fullelect_fep()

static void ComputeNonbondedUtil::calc_pair_energy_merge_fullelect_fep ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_merge_fullelect_go()

static void ComputeNonbondedUtil::calc_pair_energy_merge_fullelect_go ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_merge_fullelect_int()

static void ComputeNonbondedUtil::calc_pair_energy_merge_fullelect_int ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_merge_fullelect_les()

static void ComputeNonbondedUtil::calc_pair_energy_merge_fullelect_les ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_merge_fullelect_pprof()

static void ComputeNonbondedUtil::calc_pair_energy_merge_fullelect_pprof ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_merge_fullelect_tabener()

static void ComputeNonbondedUtil::calc_pair_energy_merge_fullelect_tabener ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_merge_fullelect_ti()

static void ComputeNonbondedUtil::calc_pair_energy_merge_fullelect_ti ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_pprof()

static void ComputeNonbondedUtil::calc_pair_energy_pprof ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_slow_fullelect()

static void ComputeNonbondedUtil::calc_pair_energy_slow_fullelect ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_slow_fullelect_fep()

static void ComputeNonbondedUtil::calc_pair_energy_slow_fullelect_fep ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_slow_fullelect_go()

static void ComputeNonbondedUtil::calc_pair_energy_slow_fullelect_go ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_slow_fullelect_les()

static void ComputeNonbondedUtil::calc_pair_energy_slow_fullelect_les ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_slow_fullelect_pprof()

static void ComputeNonbondedUtil::calc_pair_energy_slow_fullelect_pprof ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_slow_fullelect_tabener()

static void ComputeNonbondedUtil::calc_pair_energy_slow_fullelect_tabener ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_slow_fullelect_ti()

static void ComputeNonbondedUtil::calc_pair_energy_slow_fullelect_ti ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_tabener()

static void ComputeNonbondedUtil::calc_pair_energy_tabener ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy_ti()

static void ComputeNonbondedUtil::calc_pair_energy_ti ( nonbonded )
static

Referenced by select().

◆ calc_pair_fullelect()

static void ComputeNonbondedUtil::calc_pair_fullelect ( nonbonded )
static

Referenced by select().

◆ calc_pair_fullelect_go()

static void ComputeNonbondedUtil::calc_pair_fullelect_go ( nonbonded )
static

Referenced by select().

◆ calc_pair_fullelect_les()

static void ComputeNonbondedUtil::calc_pair_fullelect_les ( nonbonded )
static

Referenced by select().

◆ calc_pair_fullelect_pprof()

static void ComputeNonbondedUtil::calc_pair_fullelect_pprof ( nonbonded )
static

Referenced by select().

◆ calc_pair_fullelect_tabener()

static void ComputeNonbondedUtil::calc_pair_fullelect_tabener ( nonbonded )
static

Referenced by select().

◆ calc_pair_fullelect_ti()

static void ComputeNonbondedUtil::calc_pair_fullelect_ti ( nonbonded )
static

Referenced by select().

◆ calc_pair_go()

static void ComputeNonbondedUtil::calc_pair_go ( nonbonded )
static

Referenced by select().

◆ calc_pair_les()

static void ComputeNonbondedUtil::calc_pair_les ( nonbonded )
static

Referenced by select().

◆ calc_pair_merge_fullelect()

static void ComputeNonbondedUtil::calc_pair_merge_fullelect ( nonbonded )
static

Referenced by select().

◆ calc_pair_merge_fullelect_go()

static void ComputeNonbondedUtil::calc_pair_merge_fullelect_go ( nonbonded )
static

Referenced by select().

◆ calc_pair_merge_fullelect_les()

static void ComputeNonbondedUtil::calc_pair_merge_fullelect_les ( nonbonded )
static

Referenced by select().

◆ calc_pair_merge_fullelect_pprof()

static void ComputeNonbondedUtil::calc_pair_merge_fullelect_pprof ( nonbonded )
static

Referenced by select().

◆ calc_pair_merge_fullelect_tabener()

static void ComputeNonbondedUtil::calc_pair_merge_fullelect_tabener ( nonbonded )
static

Referenced by select().

◆ calc_pair_merge_fullelect_ti()

static void ComputeNonbondedUtil::calc_pair_merge_fullelect_ti ( nonbonded )
static

Referenced by select().

◆ calc_pair_pprof()

static void ComputeNonbondedUtil::calc_pair_pprof ( nonbonded )
static

Referenced by select().

◆ calc_pair_slow_fullelect()

static void ComputeNonbondedUtil::calc_pair_slow_fullelect ( nonbonded )
static

Referenced by select().

◆ calc_pair_slow_fullelect_go()

static void ComputeNonbondedUtil::calc_pair_slow_fullelect_go ( nonbonded )
static

Referenced by select().

◆ calc_pair_slow_fullelect_les()

static void ComputeNonbondedUtil::calc_pair_slow_fullelect_les ( nonbonded )
static

Referenced by select().

◆ calc_pair_slow_fullelect_pprof()

static void ComputeNonbondedUtil::calc_pair_slow_fullelect_pprof ( nonbonded )
static

Referenced by select().

◆ calc_pair_slow_fullelect_tabener()

static void ComputeNonbondedUtil::calc_pair_slow_fullelect_tabener ( nonbonded )
static

Referenced by select().

◆ calc_pair_slow_fullelect_ti()

static void ComputeNonbondedUtil::calc_pair_slow_fullelect_ti ( nonbonded )
static

Referenced by select().

◆ calc_pair_tabener()

static void ComputeNonbondedUtil::calc_pair_tabener ( nonbonded )
static

Referenced by select().

◆ calc_pair_ti()

static void ComputeNonbondedUtil::calc_pair_ti ( nonbonded )
static

Referenced by select().

◆ calc_self()

static void ComputeNonbondedUtil::calc_self ( nonbonded )
static

Referenced by select().

◆ calc_self_disp()

static void ComputeNonbondedUtil::calc_self_disp ( nonbonded )
static

Referenced by select().

◆ calc_self_disp_fullelect()

static void ComputeNonbondedUtil::calc_self_disp_fullelect ( nonbonded )
static

Referenced by select().

◆ calc_self_disp_merge_fullelect()

static void ComputeNonbondedUtil::calc_self_disp_merge_fullelect ( nonbonded )
static

Referenced by select().

◆ calc_self_energy()

static void ComputeNonbondedUtil::calc_self_energy ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_disp()

static void ComputeNonbondedUtil::calc_self_energy_disp ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_disp_fullelect()

static void ComputeNonbondedUtil::calc_self_energy_disp_fullelect ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_disp_merge_fullelect()

static void ComputeNonbondedUtil::calc_self_energy_disp_merge_fullelect ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_fep()

static void ComputeNonbondedUtil::calc_self_energy_fep ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_fullelect()

static void ComputeNonbondedUtil::calc_self_energy_fullelect ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_fullelect_fep()

static void ComputeNonbondedUtil::calc_self_energy_fullelect_fep ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_fullelect_go()

static void ComputeNonbondedUtil::calc_self_energy_fullelect_go ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_fullelect_int()

static void ComputeNonbondedUtil::calc_self_energy_fullelect_int ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_fullelect_les()

static void ComputeNonbondedUtil::calc_self_energy_fullelect_les ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_fullelect_pprof()

static void ComputeNonbondedUtil::calc_self_energy_fullelect_pprof ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_fullelect_tabener()

static void ComputeNonbondedUtil::calc_self_energy_fullelect_tabener ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_fullelect_ti()

static void ComputeNonbondedUtil::calc_self_energy_fullelect_ti ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_go()

static void ComputeNonbondedUtil::calc_self_energy_go ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_int()

static void ComputeNonbondedUtil::calc_self_energy_int ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_les()

static void ComputeNonbondedUtil::calc_self_energy_les ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_merge_fullelect()

static void ComputeNonbondedUtil::calc_self_energy_merge_fullelect ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_merge_fullelect_fep()

static void ComputeNonbondedUtil::calc_self_energy_merge_fullelect_fep ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_merge_fullelect_go()

static void ComputeNonbondedUtil::calc_self_energy_merge_fullelect_go ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_merge_fullelect_int()

static void ComputeNonbondedUtil::calc_self_energy_merge_fullelect_int ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_merge_fullelect_les()

static void ComputeNonbondedUtil::calc_self_energy_merge_fullelect_les ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_merge_fullelect_pprof()

static void ComputeNonbondedUtil::calc_self_energy_merge_fullelect_pprof ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_merge_fullelect_tabener()

static void ComputeNonbondedUtil::calc_self_energy_merge_fullelect_tabener ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_merge_fullelect_ti()

static void ComputeNonbondedUtil::calc_self_energy_merge_fullelect_ti ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_pprof()

static void ComputeNonbondedUtil::calc_self_energy_pprof ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_slow_fullelect()

static void ComputeNonbondedUtil::calc_self_energy_slow_fullelect ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_slow_fullelect_fep()

static void ComputeNonbondedUtil::calc_self_energy_slow_fullelect_fep ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_slow_fullelect_go()

static void ComputeNonbondedUtil::calc_self_energy_slow_fullelect_go ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_slow_fullelect_les()

static void ComputeNonbondedUtil::calc_self_energy_slow_fullelect_les ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_slow_fullelect_pprof()

static void ComputeNonbondedUtil::calc_self_energy_slow_fullelect_pprof ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_slow_fullelect_tabener()

static void ComputeNonbondedUtil::calc_self_energy_slow_fullelect_tabener ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_slow_fullelect_ti()

static void ComputeNonbondedUtil::calc_self_energy_slow_fullelect_ti ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_tabener()

static void ComputeNonbondedUtil::calc_self_energy_tabener ( nonbonded )
static

Referenced by select().

◆ calc_self_energy_ti()

static void ComputeNonbondedUtil::calc_self_energy_ti ( nonbonded )
static

Referenced by select().

◆ calc_self_fullelect()

static void ComputeNonbondedUtil::calc_self_fullelect ( nonbonded )
static

Referenced by select().

◆ calc_self_fullelect_go()

static void ComputeNonbondedUtil::calc_self_fullelect_go ( nonbonded )
static

Referenced by select().

◆ calc_self_fullelect_les()

static void ComputeNonbondedUtil::calc_self_fullelect_les ( nonbonded )
static

Referenced by select().

◆ calc_self_fullelect_pprof()

static void ComputeNonbondedUtil::calc_self_fullelect_pprof ( nonbonded )
static

Referenced by select().

◆ calc_self_fullelect_tabener()

static void ComputeNonbondedUtil::calc_self_fullelect_tabener ( nonbonded )
static

Referenced by select().

◆ calc_self_fullelect_ti()

static void ComputeNonbondedUtil::calc_self_fullelect_ti ( nonbonded )
static

Referenced by select().

◆ calc_self_go()

static void ComputeNonbondedUtil::calc_self_go ( nonbonded )
static

Referenced by select().

◆ calc_self_les()

static void ComputeNonbondedUtil::calc_self_les ( nonbonded )
static

Referenced by select().

◆ calc_self_merge_fullelect()

static void ComputeNonbondedUtil::calc_self_merge_fullelect ( nonbonded )
static

Referenced by select().

◆ calc_self_merge_fullelect_go()

static void ComputeNonbondedUtil::calc_self_merge_fullelect_go ( nonbonded )
static

Referenced by select().

◆ calc_self_merge_fullelect_les()

static void ComputeNonbondedUtil::calc_self_merge_fullelect_les ( nonbonded )
static

Referenced by select().

◆ calc_self_merge_fullelect_pprof()

static void ComputeNonbondedUtil::calc_self_merge_fullelect_pprof ( nonbonded )
static

Referenced by select().

◆ calc_self_merge_fullelect_tabener()

static void ComputeNonbondedUtil::calc_self_merge_fullelect_tabener ( nonbonded )
static

Referenced by select().

◆ calc_self_merge_fullelect_ti()

static void ComputeNonbondedUtil::calc_self_merge_fullelect_ti ( nonbonded )
static

Referenced by select().

◆ calc_self_pprof()

static void ComputeNonbondedUtil::calc_self_pprof ( nonbonded )
static

Referenced by select().

◆ calc_self_slow_fullelect()

static void ComputeNonbondedUtil::calc_self_slow_fullelect ( nonbonded )
static

Referenced by select().

◆ calc_self_slow_fullelect_go()

static void ComputeNonbondedUtil::calc_self_slow_fullelect_go ( nonbonded )
static

Referenced by select().

◆ calc_self_slow_fullelect_les()

static void ComputeNonbondedUtil::calc_self_slow_fullelect_les ( nonbonded )
static

Referenced by select().

◆ calc_self_slow_fullelect_pprof()

static void ComputeNonbondedUtil::calc_self_slow_fullelect_pprof ( nonbonded )
static

Referenced by select().

◆ calc_self_slow_fullelect_tabener()

static void ComputeNonbondedUtil::calc_self_slow_fullelect_tabener ( nonbonded )
static

Referenced by select().

◆ calc_self_slow_fullelect_ti()

static void ComputeNonbondedUtil::calc_self_slow_fullelect_ti ( nonbonded )
static

Referenced by select().

◆ calc_self_tabener()

static void ComputeNonbondedUtil::calc_self_tabener ( nonbonded )
static

Referenced by select().

◆ calc_self_ti()

static void ComputeNonbondedUtil::calc_self_ti ( nonbonded )
static

Referenced by select().

◆ calcGBIS()

void ComputeNonbondedUtil::calcGBIS ( nonbonded params,
GBISParamStruct gbisParams 
)

Definition at line 261 of file ComputeGBIS.C.

References GBISParamStruct::a_cut, GBISParamStruct::bornRad, CalcDHPair(), CalcHPair(), CompAtom::charge, COULOMB, GBISParamStruct::cutoff, DA, DB, DC, DD, DE, GBISParamStruct::dEdaSum, GBISParamStruct::dHdrPrefix, GBISParamStruct::doEnergy, GBISParamStruct::doFullElectrostatics, GBISParamStruct::doSmoothing, GBISParamStruct::epsilon_p, GBISParamStruct::epsilon_s, nonbonded::ff, FS_MAX, nonbonded::fullf, GBISParamStruct::gbInterEnergy, GBISParamStruct::gbisPhase, GBISParamStruct::gbisStepPairlists, GBISParamStruct::gbSelfEnergy, h1(), h2(), CompAtomExt::id, GBISParamStruct::intRad, GBISParamStruct::kappa, nonbonded::minPart, Pairlists::nextlist(), CompAtom::nonbondedGroupSize, nonbonded::numAtoms, nonbonded::numParts, GBISParamStruct::numPatches, nonbonded::offset, nonbonded::p, pairlistFromAll(), nonbonded::pExt, CompAtom::position, GBISParamStruct::psiSum, Pairlists::reset(), scaling, GBISParamStruct::sequence, TA, TB, TC, TD, TE, Vector::x, Vector::y, Vector::z, and ZERO.

Referenced by ComputeNonbondedPair::doForce(), and ComputeNonbondedSelf::doForce().

261  {
262 //CkPrintf("SEQ%03i, P%i, CID%05i(%02i,%02i) ENTER\n",gbisParams->sequence,gbisParams->gbisPhase,gbisParams->cid,gbisParams->patchID[0],gbisParams->patchID[1]);
263 #if CHECK_PRIORITIES
264 CkPrintf("PE%i, S%09i, P%i\n",CkMyPe(),gbisParams->sequence,gbisParams->gbisPhase);
265 #endif
266  if (params->numAtoms[0] == 0 || params->numAtoms[1] == 0) return;
267 
268  const BigReal offset_x = params->offset.x;
269  const BigReal offset_y = params->offset.y;
270  const BigReal offset_z = params->offset.z;
271 
272  int partSize = params->numAtoms[0] / params->numParts;
273  int minIg = 0;
274  for (int s = 0; s < params->minPart; s++) {
275  minIg+=params->p[0][minIg].nonbondedGroupSize;
276  }
277  int maxI = params->numAtoms[0];
278  int strideIg = params->numParts;
279 
280  int unique = (gbisParams->numPatches == 1) ? 1 : 0;//should inner loop be unique from ourter loop
281  int numGBISPairlists = 4;
282  float r_cut = gbisParams->cutoff;
283  float fsMax = FS_MAX; // gbisParams->fsMax;//FS_MAX;
284  float a_cut = gbisParams->a_cut-fsMax;
285  float a_cut2 = a_cut*a_cut;
286  float a_cut_ps = a_cut + fsMax;//max screen radius
287  float r_cut2 = r_cut*r_cut;
288  float a_cut_ps2 = a_cut_ps*a_cut_ps;
289  //put PL pointer back to beginning of lists
290  for (int k = 0; k < numGBISPairlists; k++)
291  gbisParams->gbisStepPairlists[k]->reset();
292 
293 
294 /***********************************************************
295 * GBIS Phase 1
296 ***********************************************************/
297 if (gbisParams->gbisPhase == 1) {
298 //CkPrintf("SEQ%03i, P%i, CID%05i(%02i,%02i):[%03i,%03i]\n",gbisParams->sequence,gbisParams->gbisPhase,gbisParams->cid,gbisParams->patchID[0],gbisParams->patchID[1],minI,maxI);
299 
300  pairlistFromAll(params,gbisParams,minIg,strideIg,maxI);
301 
302 #ifdef BENCHMARK
303  int nops = 0;
304  int domains[] = {0, 0, 0, 0, 0, 0, 0, 0};
305  int numDom = 7;
306  double t1 = 1.0*clock()/CLOCKS_PER_SEC;
307 #endif
308  register GBReal psiI;
309 
310  register float dr;
311  register float r2;
312  register float r, r_i, r2_i;
313  float rhoi0, rhois, rhojs, rhoj0;
314  Position ri, rj;
315  register int j;
316  int numPairs;
317  register float ta = TA;
318  register float tb = TB;
319  register float tc = TC;
320  register float td = TD;
321  register float te = TE;
322 
323  register float hij,hji;
324  int dij,dji;
325  float k;
326  float rhois2, rhojs2;
327 
328  //calculate piecewise-22 Pairs
329  int c = 0;
330  for (int ngi = minIg; ngi < maxI; ) {
331  int iGroupSize = params->p[0][ngi].nonbondedGroupSize;
332  for (int i = ngi; i < ngi+iGroupSize; i++) {
333  ri = params->p[0][i].position;
334  ri.x += offset_x;
335  ri.y += offset_y;
336  ri.z += offset_z;
337  rhoi0 = gbisParams->intRad[0][2*i+0];
338  rhois = gbisParams->intRad[0][2*i+1];
339  rhois2 = rhois*rhois;
340  psiI = ZERO;
341  plint *pairs;
342  gbisParams->gbisStepPairlists[c]->nextlist(&pairs,&numPairs);
343  for (register int jj = 0; jj < numPairs; jj++) {
344 #ifdef BENCHMARK
345  nops++;
346 #endif
347  j = pairs[jj];
348  rj = params->p[1][j].position;
349 
350  dr = (ri.x - rj.x);
351  r2 = dr*dr;
352  dr = (ri.y - rj.y);
353  r2 += dr*dr;
354  dr = (ri.z - rj.z);
355  r2 += dr*dr;
356  r2_i = 1.0/r2;
357 
358  rhoj0 = gbisParams->intRad[1][2*j+0];
359  rhojs = gbisParams->intRad[1][2*j+1];
360  rhojs2 = rhojs*rhojs;
361 
362  k = rhojs2*r2_i;//k=(rs/r)^2
363  hij = rhojs*r2_i*k*(ta+k*(tb+k*(tc+k*(td+k*te))));
364 
365  k = rhois2*r2_i;//k=(rs/r)^2
366  hji = rhois*r2_i*k*(ta+k*(tb+k*(tc+k*(td+k*te))));
367 
368 //#if 1
369 #ifdef PRINT_COMP
370  int id1 = params->pExt[0][i].id;
371  int id2 = params->pExt[1][j].id;
372  float h1 = hij;
373  float h2 = hji;
374  float r10 = rhoi0;
375  float r1s = rhojs;
376  float r20 = rhoj0;
377  float r2s = rhois;
378 /*printf("PSIPAIR %05i %05i%9.5f%6.3f%6.3f%2i% 13.5e\n",
379 id1,id2,sqrt(r2),
380 rhoi0, rhojs,
381 2,hij);
382 printf("PSIPAIR %05i %05i%9.5f%6.3f%6.3f%2i% 13.5e\n",
383 id2,id1,sqrt(r2),
384 rhoj0, rhois,
385 2,hji);
386 */
387  if (id1 > id2) {
388  int tmp = id1;
389  id1 = id2;
390  id2 = tmp;
391  h1 = hji;
392  h2 = hij;
393  r20 = rhoi0;
394  r2s = rhojs;
395  r10 = rhoj0;
396  r1s = rhois;
397  }
398 // CkPrintf("PSIPAIR%5i%5i%10.5f%5i%14.8f%7.4f%7.4f\n",id1,id2,sqrt(r2),2,h1,r10,r1s);
399 // CkPrintf("PSIPAIR%5i%5i%10.5f%5i%14.8f%7.4f%7.4f\n",id2,id1,sqrt(r2),2,h2,r20,r2s);
400  //CkPrintf("PPSI(%04i)[%04i,%04i] = 22\n",gbisParams->cid,id1,id2);
401 #endif
402 
403  psiI += hij;
404  gbisParams->psiSum[1][j] += hji;
405  }//end inner j
406  gbisParams->psiSum[0][i] += psiI;
407  }//end outer i
408  for (int s = 0; s < strideIg; s++) {
409  ngi+=params->p[0][ngi].nonbondedGroupSize;
410  }
411  }
412 #ifdef BENCHMARK
413  double t2 = 1.0*clock()/CLOCKS_PER_SEC;
414  //nops *= (9 + 2*DIV_FLOPS+SQRT_FLOPS) + (14 + 0*DIV_FLOPS + 0*LOG_FLOPS);
415  //double flops = 1.0 * nops / (t2 - t1);
416  //double gflops = flops / 1000000000.0;
417  CkPrintf("PHASE1.1: %8.3f ms @ %8.3f ns/iter for %i iter\n",1000.0*(t2-t1), 1000000000.0*(t2-t1)/nops, nops);
418 nops = 0;
419  t1 = 1.0*clock()/CLOCKS_PER_SEC;
420  nops = 0;
421 #endif
422 
423  float rmris, rmrjs;
424  float rmrsi;
425  float rmrs2;
426  float rs2;
427  float logri, logrj;
428  float rci2;
429  float a_cut_i = 1.0 / a_cut;
430  float a_cut_i2 = a_cut_i*a_cut_i;
431 
432  //calculate piecewise-11 pairs
433  c = 1;
434  for (int ngi = minIg; ngi < maxI; ) {
435  int iGroupSize = params->p[0][ngi].nonbondedGroupSize;
436  for (int i = ngi; i < ngi+iGroupSize; i++) {
437  ri = params->p[0][i].position;
438  ri.x += offset_x;
439  ri.y += offset_y;
440  ri.z += offset_z;
441  rhoi0 = gbisParams->intRad[0][2*i+0];
442  rhois = gbisParams->intRad[0][2*i+1];
443  psiI = ZERO;
444  plint *pairs;
445  gbisParams->gbisStepPairlists[c]->nextlist(&pairs,&numPairs);
446  for (register int jj = 0; jj < numPairs; jj++) {
447  j = pairs[jj];
448  rj = params->p[1][j].position;
449 
450  dr = (ri.x - rj.x);
451  r2 = dr*dr;
452  dr = (ri.y - rj.y);
453  r2 += dr*dr;
454  dr = (ri.z - rj.z);
455  r2 += dr*dr;
456  r_i = 1.0/sqrt(r2);
457  r = r2*r_i;
458 
459  rhoj0 = gbisParams->intRad[1][2*j+0];
460  rhojs = gbisParams->intRad[1][2*j+1];
461 
462  float tmp1 = 0.125*r_i;
463  float tmp2 = r2 - 4.0*a_cut*r;
464  float rr = 2.0*r;
465 
466 
467  rmrjs = r-rhojs;
468  rmris = r-rhois;
469  logri = log(rmris*a_cut_i);
470  logrj = log(rmrjs*a_cut_i);
471 
472  rmrsi = 1.0/rmrjs;
473  //rmrs2 = rmrjs*rmrjs;
474  rs2 = rhojs*rhojs;
475  hij = /*0.125*r_i*/tmp1*(1 + rr*rmrsi +
476  a_cut_i2*(/*r2 - 4.0*a_cut*r*/tmp2 - rs2) + logrj+logrj);
477 
478 
479  rmrsi = 1.0/rmris;
480  //rmrs2 = rmris*rmris;
481  rs2 = rhois*rhois;
482  hji = /*0.125*r_i*/tmp1*(1 + rr*rmrsi +
483  a_cut_i2*(/*r2 - 4.0*a_cut*r*/tmp2 - rs2) + 2.0* logri);
484 //#if 1
485 #ifdef PRINT_COMP
486  int id1 = params->pExt[0][i].id;
487  int id2 = params->pExt[1][j].id;
488  float h1 = hij;
489  float h2 = hji;
490  float r10 = rhoi0;
491  float r1s = rhojs;
492  float r20 = rhoj0;
493  float r2s = rhois;
494 /*printf("PSIPAIR %05i %05i%9.5f%6.3f%6.3f%2i% 13.5e\n",
495 id1,id2,sqrt(r2),
496 rhoi0, rhojs,
497 1,hij);
498 printf("PSIPAIR %05i %05i%9.5f%6.3f%6.3f%2i% 13.5e\n",
499 id2,id1,sqrt(r2),
500 rhoj0, rhois,
501 1,hji);*/
502  if (id1 > id2) {
503  int tmp = id1;
504  id1 = id2;
505  id2 = tmp;
506  h1 = hji;
507  h2 = hij;
508  r20 = rhoi0;
509  r2s = rhojs;
510  r10 = rhoj0;
511  r1s = rhois;
512  }
513 // CkPrintf("PSIPAIR%5i%5i%10.5f%5i%14.8f%7.4f%7.4f\n",id1,id2,sqrt(r2),1,h1,r10,r1s);
514 // CkPrintf("PSIPAIR%5i%5i%10.5f%5i%14.8f%7.4f%7.4f\n",id2,id1,sqrt(r2),1,h2,r20,r2s);
515  //CkPrintf("PSI(%04i)[%04i,%04i] = 11 % .4e % .4e\n",gbisParams->sequence,id1,id2,h1, h2);
516  //CkPrintf("PPSI(%04i)[%04i,%04i] = 11\n",gbisParams->cid,id1,id2);
517 #endif
518 
519 #ifdef BENCHMARK
520  nops++;
521 #endif
522 
523  psiI += hij;
524  gbisParams->psiSum[1][j] += hji;
525  }//end inner j
526  gbisParams->psiSum[0][i] += psiI;
527  }//end outer i
528  for (int s = 0; s < strideIg; s++) {
529  ngi+=params->p[0][ngi].nonbondedGroupSize;
530  }
531  }
532 #ifdef BENCHMARK
533  t2 = 1.0*clock()/CLOCKS_PER_SEC;
534  CkPrintf("PHASE1.2: %8.3f ms @ %8.3f ns/iter for %i iter\n",1000.0*(t2-t1), 1000000000.0*(t2-t1)/nops, nops);
535 nops = 0;
536  t1 = 1.0*clock()/CLOCKS_PER_SEC;
537  nops = 0;
538 #endif
539 
540  //calculate all other piecewise pairs
541  c = 2;
542  for (int ngi = minIg; ngi < maxI; ) {
543  int iGroupSize = params->p[0][ngi].nonbondedGroupSize;
544  for (int i = ngi; i < ngi+iGroupSize; i++) {
545  ri = params->p[0][i].position;
546  ri.x += offset_x;
547  ri.y += offset_y;
548  ri.z += offset_z;
549  rhoi0 = gbisParams->intRad[0][2*i+0];
550  rhois = gbisParams->intRad[0][2*i+1];
551  psiI = ZERO;
552  plint *pairs;
553  gbisParams->gbisStepPairlists[c]->nextlist(&pairs,&numPairs);
554  for (register int jj = 0; jj < numPairs; jj++) {
555  j = pairs[jj];
556  rj = params->p[1][j].position;
557 
558  dr = (ri.x - rj.x);
559  r2 = dr*dr;
560  dr = (ri.y - rj.y);
561  r2 += dr*dr;
562  dr = (ri.z - rj.z);
563  r2 += dr*dr;
564  rhojs = gbisParams->intRad[1][2*j+1];
565  rhoj0 = gbisParams->intRad[1][2*j+0];
566  r_i = 1.0/sqrt(r2);
567  r = r2 * r_i;
568 
569  CalcHPair(r,r2,r_i,a_cut,
570  rhoi0, rhojs,
571  rhoj0, rhois,
572  dij,dji,hij,hji);
573 //#if 1
574 #ifdef PRINT_COMP
575  int id1 = params->pExt[0][i].id;
576  int id2 = params->pExt[1][j].id;
577  float h1 = hij;
578  float h2 = hji;
579  int d1 = dij;
580  int d2 = dji;
581  float r10 = rhoi0;
582  float r1s = rhojs;
583  float r20 = rhoj0;
584  float r2s = rhois;
585 /* if (dij > 0 ) {
586 printf("PSIPAIR %05i %05i%9.5f%6.3f%6.3f%2i% 13.5e\n",
587 id1,id2,sqrt(r2),
588 rhoi0, rhojs,
589 dij,hij);
590  }
591  if (dji > 0 ) {
592 printf("PSIPAIR %05i %05i%9.5f%6.3f%6.3f%2i% 13.5e\n",
593 id2,id1,sqrt(r2),
594 rhoj0, rhois,
595 dji,hji);
596  }*/
597 // CkPrintf("PSIPAIR%5i%5i%10.5f%5i%14.8f%7.4f%7.4f\n",id1,id2,sqrt(r2),d1,h1,r10,r1s);
598  if (id1 > id2) {
599  int tmp = id1;
600  id1 = id2;
601  id2 = tmp;
602  h1 = hji;
603  h2 = hij;
604  d1 = dji;
605  d2 = dij;
606  r20 = rhoi0;
607  r2s = rhojs;
608  r10 = rhoj0;
609  r1s = rhois;
610  }
611 // CkPrintf("PSIPAIR%5i%5i%10.5f%5i%14.8f%7.4f%7.4f\n",id2,id1,sqrt(r2),d2,h2,r20,r2s);
612  //CkPrintf("PSI(%04i)[%04i,%04i] = %i%i % .4e % .4e\n",gbisParams->sequence,id1,id2,d1,d2,h1, h2);
613  //CkPrintf("PPSI(%04i)[%04i,%04i] = %i%i\n",gbisParams->cid,id1,id2,d1,d2);
614 #endif
615 
616 #ifdef BENCHMARK
617  nops++;
618 #endif
619  psiI += hij;
620  gbisParams->psiSum[1][j] += hji;
621  }//end inner j
622  gbisParams->psiSum[0][i] += psiI;
623  }//end outer i
624  for (int s = 0; s < strideIg; s++) {
625  ngi+=params->p[0][ngi].nonbondedGroupSize;
626  }
627  }
628 
629 #ifdef BENCHMARK
630  t2 = 1.0*clock()/CLOCKS_PER_SEC;
631  CkPrintf("PHASE1.3: %8.3f ms @ %8.3f ns/iter for %i iter\n",1000.0*(t2-t1), 1000000000.0*(t2-t1)/nops,nops);
632 #endif
633 
634 /***********************************************************
635 * GBIS Phase 2
636 ***********************************************************/
637 } else if (gbisParams->gbisPhase == 2) {
638 
639  float epsilon_s = gbisParams->epsilon_s;
640  float epsilon_p = gbisParams->epsilon_p;
641  float epsilon_s_i = 1/epsilon_s;
642  float epsilon_p_i = 1/epsilon_p;
643  float kappa = gbisParams->kappa;
644 
645  //values used in loop
646  float r_cut_2 = 1.0 / r_cut2;
647  float r_cut_4 = 4.0*r_cut_2*r_cut_2;
648  float coulEij=0,ddrCoulEij=0,gbEij=0,ddrGbEij=0;
649  float dEdai=0,dEdaj=0, qiqj=0;
650  float scale=0, ddrScale=0;
651  float rnx=0,rny=0,rnz=0;
652  float fx=0,fy=0,fz=0,forceCoul=0, forcedEdr=0;
653 
654  int nops = 0;
655  double t1 = 1.0*clock()/CLOCKS_PER_SEC;
656  float r2;
657  float dr;
658  BigReal dx, dy, dz;
659  float r, r_i, ratio;
660  float fIx, fIy, fIz;
661  GBReal dEdaSumI;
662  float bornRadI, bornRadJ;
663  float qi;
664  Position ri, rj;
665  float aiaj,expr2aiaj4,fij,f_i,expkappa,Dij;
666  float aiaj4,ddrDij,ddrf_i,ddrfij,tmp_dEda;
667 
668  for (int c = 0; c < 4/*dEdrPLs*/; c++) {
669  for (int ngi = minIg; ngi < maxI; ) {
670  int iGroupSize = params->p[0][ngi].nonbondedGroupSize;
671  for (int i = ngi; i < ngi+iGroupSize; i++) {
672  ri = params->p[0][i].position;
673  ri.x += offset_x;
674  ri.y += offset_y;
675  ri.z += offset_z;
676  qi = - COULOMB * params->p[0][i].charge * scaling;
677  //printf("ATOM(%05i) %.3e %.3e %.3e\n", params->pExt[0][i].id, params->p[0][i].charge, COULOMB, scaling);
678  int numPairs;
679  plint *pairs;
680  gbisParams->gbisStepPairlists[c]->nextlist(&pairs,&numPairs);
681  fIx = fIy = fIz = 0.0;
682  dEdaSumI = 0.0;
683  bornRadI = gbisParams->bornRad[0][i];
684  for (int jj = 0; jj < numPairs; jj++) {
685  int j = pairs[jj];
686  rj = params->p[1][j].position;
687 
688  //distance
689  dx = (ri.x - rj.x);
690  dy = (ri.y - rj.y);
691  dz = (ri.z - rj.z);
692  r2 = dx*dx + dy*dy + dz*dz;
693  if (r2 > r_cut2) continue;
694  qiqj = qi*params->p[1][j].charge;
695  bornRadJ = gbisParams->bornRad[1][j];
696  r_i = 1.0/sqrt(r2);
697  r = r2 * r_i;
698 
699  //pairwise calculation
700 /* Phase2_Pair(r, r2, r_i, qiqj,
701  bornRadI,
702  bornRadJ,
703  epsilon_p_i, epsilon_s_i,
704  kappa, gbisParams->doFullElectrostatics,
705  gbEij, ddrGbEij, dEdai, dEdaj);
706 */
707 
708  //calculate GB energy
709  aiaj = bornRadI*bornRadJ;
710  aiaj4 = 4*aiaj;
711  expr2aiaj4 = exp(-r2/aiaj4);
712  fij = sqrt(r2+aiaj*expr2aiaj4);
713  f_i = 1/fij;
714  expkappa = (kappa > 0) ? exp(-kappa*fij) : 1.0;
715  Dij = epsilon_p_i - expkappa*epsilon_s_i;
716  gbEij = qiqj*Dij*f_i;
717 
718  //calculate energy derivatives
719  ddrfij = r*f_i*(1 - 0.25*expr2aiaj4);
720  ddrf_i = -ddrfij*f_i*f_i;
721  ddrDij = kappa*expkappa*ddrfij*epsilon_s_i;
722  ddrGbEij = qiqj*(ddrDij*f_i+Dij*ddrf_i);
723 
724  //calc dEda
725  //NAMD smoothing function
726  scale = 1;
727  ddrScale = 0;
728  if (gbisParams->doSmoothing) {
729  scale = r2 * r_cut_2 - 1;
730  scale *= scale;
731  ddrScale = r*(r2-r_cut2)*r_cut_4;
732  //CkPrintf("SCALE %f %f\n",scale,ddrScale);
733  gbisParams->gbInterEnergy += gbEij * scale;
734  forcedEdr = -(ddrGbEij)*scale-(gbEij)*ddrScale;
735  } else {
736  gbisParams->gbInterEnergy += gbEij;
737  forcedEdr = -ddrGbEij;
738  }
739 
740  //add dEda
741  if (gbisParams->doFullElectrostatics) {
742  //gbisParams->dEdaSum[0][i] += dEdai*scale;
743  tmp_dEda = 0.5*qiqj*f_i*f_i
744  *(kappa*epsilon_s_i*expkappa-Dij*f_i)
745  *(aiaj+0.25*r2)*expr2aiaj4;//0
746  dEdai = tmp_dEda/bornRadI;
747  dEdaj = tmp_dEda/bornRadJ;
748  dEdaSumI += dEdai*scale;
749  gbisParams->dEdaSum[1][j] += dEdaj*scale;
750  }
751 
752 #if 1
753 //#ifdef PRINT_COMP
754  int id1 = params->pExt[0][i].id;
755  int id2 = params->pExt[1][j].id;
756  float deda1 = dEdai;
757  float deda2 = dEdaj;
758  float bR1 = bornRadI;
759  float bR2 = bornRadJ;
760  if (id1 > id2) {
761  int tmp = id1;
762  id1 = id2;
763  id2 = tmp;
764  deda1 = dEdaj;
765  deda2 = dEdai;
766  bR1 = bornRadJ;
767  bR2 = bornRadI;
768  }
769  //CkPrintf("DEDR(%04i)[%04i,%04i] = % .4e\n",gbisParams->sequence,id1,id2,forcedEdr);
770  //CkPrintf("DASM(%04i)[%04i,%04i] = % .4e % .4e\n",gbisParams->sequence,id1, id2, deda1,deda2);
771  //CkPrintf("P2RM(%04i)[%04i,%04i] = % .4e % .4e % .4e % .4e % .4e\n",gbisParams->sequence,id1, id2, r, bR1,bR2,epsilon_p_i,epsilon_s_i,kappa);
772 /*CkPrintf("P2PAIR %05i %05i%9.5f%6.3f%6.3f% 13.5e% 13.5e% 13.5e% 13.5e% 13.5e\n",
773 params->pExt[0][i].id, params->pExt[1][j].id,sqrt(r2),
774 bornRadI, bornRadJ, forcedEdr, dEdai, qiqj, Dij, scale
775 );
776 CkPrintf("P2PAIR %05i %05i%9.5f%6.3f%6.3f% 13.5e% 13.5e% 13.5e% 13.5e% 13.5e\n",
777 params->pExt[1][j].id, params->pExt[0][i].id,sqrt(r2),
778 bornRadJ, bornRadI, forcedEdr, dEdaj, qiqj, Dij, scale
779 );*/
780 #endif
781 
782  forcedEdr *= r_i;
783  fx = dx*forcedEdr;
784  fy = dy*forcedEdr;
785  fz = dz*forcedEdr;
786 
787  params->ff[1][j].x -= fx;
788  params->ff[1][j].y -= fy;
789  params->ff[1][j].z -= fz;
790 
791  fIx += fx;
792  fIy += fy;
793  fIz += fz;
794 
795 #ifdef BENCHMARK
796  nops ++;//= (59 + 4*DIV_FLOPS + 2*EXP_FLOPS+SQRT_FLOPS);//56 w/o nops
797 #endif
798 
799  }//end inner j
800  gbisParams->dEdaSum[0][i] += dEdaSumI;
801  params->ff[0][i].x += fIx;
802  params->ff[0][i].y += fIy;
803  params->ff[0][i].z += fIz;
804 
805  //self energy of each atom
806  if (c == 0 && gbisParams->doEnergy && gbisParams->numPatches == 1) {
807  float fij = bornRadI;//inf
808  float expkappa = exp(-kappa*fij);//0
809  float Dij = epsilon_p_i - expkappa*epsilon_s_i;
810  float gbEij = qi*params->p[0][i].charge*Dij/fij;
811  gbisParams->gbSelfEnergy += 0.5*gbEij;//self energy
812  }
813  }// end outer i
814  for (int s = 0; s < strideIg; s++) {
815  ngi+=params->p[0][ngi].nonbondedGroupSize;
816  }//end i
817  }//end ig
818  }//end c
819 #ifdef BENCHMARK
820  double t2 = 1.0*clock()/CLOCKS_PER_SEC;
821  //double flops = 1.0 * nops / (t2 - t1);
822  //double gflops = flops / 1000000000.0;
823 
824  CkPrintf("PHASE2.0: %8.3f ms @ %8.3f ns/iter for %i iter\n",1000.0*(t2-t1), 1000000000.0*(t2-t1)/nops,nops);
825 #endif
826 
827 /***********************************************************
828 * GBIS Phase 3
829 ***********************************************************/
830 } else if (gbisParams->gbisPhase == 3 && gbisParams->doFullElectrostatics) {
831 
832 #ifdef BENCHMARK
833  //int domains[] = {0, 0, 0, 0, 0, 0, 0, 0};
834  double t1 = 1.0*clock()/CLOCKS_PER_SEC;
835  double t2;
836  int nops = 0;
837 #endif
838  //CkPrintf("GBIS(%3i)[%2i]::P3 %3i(%3i) %3i(%3i)\n",gbisParams->sequence,gbisParams->cid, gbisParams->patchID[0],params->numAtoms[0],gbisParams->patchID[1],params->numAtoms[1]);
839 
840  register BigReal dx, dy, dz;
841  register float r2;
842  register float r, r_i;
843  register float rhoi0, rhois;
844  float rhojs, rhoj0;
845  float fx, fy, fz;
846  float forceAlpha;
847  register float fIx, fIy, fIz;
848 
849  float dhij;
850  float dhji;
851  int dij;
852  int dji;
853  register float dHdrPrefixI;
854  float dHdrPrefixJ;
855  register Position ri;
856  register Position rj;
857  register int c, numPairs, jj, j;
858  register float k;
859  register float da = DA;
860  register float db = DB;
861  register float dc = DC;
862  register float dd = DD;
863  register float de = DE;
864  float r_i3;
865 
866  //piecewise 22
867  c = 0;
868  for (int ngi = minIg; ngi < maxI; ) {
869  int iGroupSize = params->p[0][ngi].nonbondedGroupSize;
870  for (int i = ngi; i < ngi+iGroupSize; i++) {
871  ri = params->p[0][i].position;
872  ri.x += offset_x;
873  ri.y += offset_y;
874  ri.z += offset_z;
875  rhois = gbisParams->intRad[0][2*i+1];
876  plint *pairs;
877  gbisParams->gbisStepPairlists[c]->nextlist(&pairs,&numPairs);
878  fIx = fIy = fIz = 0.0;
879  dHdrPrefixI = gbisParams->dHdrPrefix[0][i];
880  for (jj = 0; jj < numPairs; jj++) {
881  j = pairs[jj];
882  rj = params->p[1][j].position;
883 
884  dx = (ri.x - rj.x);
885  dy = (ri.y - rj.y);
886  dz = (ri.z - rj.z);
887  r2 = dx*dx + dy*dy + dz*dz;
888  dHdrPrefixJ = gbisParams->dHdrPrefix[1][j];
889 
890  r_i = 1.0/sqrt(r2);//rptI takes 50% of loop time
891  r_i3 = r_i*r_i*r_i;
892 
893  rhojs = gbisParams->intRad[1][2*j+1];
894 
895  k = rhojs*r_i; k*=k;//k=(rs/r)^2
896  dhij = -rhojs*r_i3*k*
897  (da+k*(db+k*(dc+k*(dd+k*de))));
898 
899  k = rhois*r_i; k*=k;//k=(rs/r)^2
900  dhji = -rhois*r_i3*k*
901  (da+k*(db+k*(dc+k*(dd+k*de))));
902 
903  //add dEda*dadr force
904  forceAlpha = -r_i*(dHdrPrefixI*dhij+dHdrPrefixJ*dhji);
905  fx = dx * forceAlpha;
906  fy = dy * forceAlpha;
907  fz = dz * forceAlpha;
908 
909  params->fullf[1][j].x -= fx;
910  params->fullf[1][j].y -= fy;
911  params->fullf[1][j].z -= fz;
912 
913  fIx += fx;
914  fIy += fy;
915  fIz += fz;
916 
917 #if 1
918 //#ifdef PRINT_COMP
919  int id1 = params->pExt[0][i].id;
920  int id2 = params->pExt[1][j].id;
921  float h1 = dhij;
922  float h2 = dhji;
923  if (id1 > id2) {
924  int tmp = id1;
925  id1 = id2;
926  id2 = tmp;
927  h1 = dhji;
928  h2 = dhij;
929  }
930 /*CkPrintf("P3PAIR %05i %05i%9.5f% 13.5e% 13.5e% 13.5e% 13.5e% 13.5e %i\n",
931 params->pExt[0][i].id, params->pExt[1][j].id,sqrt(r2),
932 dHdrPrefixI, dHdrPrefixJ, dhij, dhji, forceAlpha, 2
933 );
934 CkPrintf("P3PAIR %05i %05i%9.5f% 13.5e% 13.5e% 13.5e% 13.5e% 13.5e %i\n",
935 params->pExt[1][j].id, params->pExt[0][i].id,sqrt(r2),
936 dHdrPrefixJ, dHdrPrefixI, dhji, dhij, forceAlpha, 2
937 );*/
938  //CkPrintf("DEDA(%04i)[%04i,%04i] = 22 % .4e % .4e % .4e\n",gbisParams->sequence,id1,id2,h1,h2, forceAlpha);
939 #endif
940 
941 #ifdef BENCHMARK
942  nops++;//= (24 + 2*DIV_FLOPS+SQRT_FLOPS);// 8 w/o nops
943 #endif
944 
945  }//end inner j
946  params->fullf[0][i].x += fIx;
947  params->fullf[0][i].y += fIy;
948  params->fullf[0][i].z += fIz;
949  }//end outer i
950  for (int s = 0; s < strideIg; s++) {
951  ngi+=params->p[0][ngi].nonbondedGroupSize;
952  }
953  }
954 
955 #ifdef BENCHMARK
956  t2 = 1.0*clock()/CLOCKS_PER_SEC;
957  CkPrintf("PHASE3.1: %8.3f ms @ %8.3f ns/iter for %i iter\n",1000.0*(t2-t1), 1000000000.0*(t2-t1)/nops,nops);
958 nops = 0;
959  t1 = 1.0*clock()/CLOCKS_PER_SEC;
960  nops = 0;
961 #endif
962 
963  float a_cut_i = 1.0/a_cut;
964  float a_cut_i2 = a_cut_i*a_cut_i;
965  float a_cut2 = a_cut*a_cut;
966  float rmrs;
967  float rmrsi;
968  float rmrs2;
969  float rhois2, rhojs2;
970  float logri, logrj;
971  float r_i2;
972 
973  //piecewise 11
974  c = 1;
975  for (int ngi = minIg; ngi < maxI; ) {
976  int iGroupSize = params->p[0][ngi].nonbondedGroupSize;
977  for (int i = ngi; i < ngi+iGroupSize; i++) {
978  ri = params->p[0][i].position;
979  ri.x += offset_x;
980  ri.y += offset_y;
981  ri.z += offset_z;
982  rhois = gbisParams->intRad[0][2*i+1];
983  rhois2 = rhois*rhois;
984  plint *pairs;
985  gbisParams->gbisStepPairlists[c]->nextlist(&pairs,&numPairs);
986  fIx = fIy = fIz = 0.0;
987  dHdrPrefixI = gbisParams->dHdrPrefix[0][i];
988  for (jj = 0; jj < numPairs; jj++) {
989  j = pairs[jj];
990  rj = params->p[1][j].position;
991  dHdrPrefixJ = gbisParams->dHdrPrefix[1][j];
992 
993  dx = (ri.x - rj.x);
994  dy = (ri.y - rj.y);
995  dz = (ri.z - rj.z);
996  r2 = dx*dx + dy*dy + dz*dz;
997  r_i = 1.0/sqrt(r2);//rptI
998  r = r2* r_i;
999  r_i2 = r_i*r_i;
1000 
1001  rhojs = gbisParams->intRad[1][2*j+1];
1002  rhojs2 = rhojs*rhojs;
1003 
1004 
1005  rmrs = r-rhojs;// 4 times
1006  rmrsi = 1.0/rmrs;
1007  rmrs2 = rmrs*rmrs;
1008  logrj = log(rmrs*a_cut_i);
1009  dhij = r_i2*(-0.25*logrj - (a_cut2 - rmrs2)*(rhojs2 + r2)*0.125*a_cut_i2*rmrsi*rmrsi);
1010 
1011 
1012  rmrs = r-rhois;// 4 times
1013  rmrsi = 1.0/rmrs;
1014  rmrs2 = rmrs*rmrs;
1015  logri = log(rmrs*a_cut_i);
1016  dhji = r_i2*(-0.25*logri - (a_cut2 - rmrs2)*(rhois2 + r2)*0.125*a_cut_i2*rmrsi*rmrsi);
1017 
1018  //add dEda*dadr force
1019  forceAlpha = -r_i*(dHdrPrefixI*dhij+dHdrPrefixJ*dhji);
1020  fx = dx * forceAlpha;
1021  fy = dy * forceAlpha;
1022  fz = dz * forceAlpha;
1023 
1024  params->fullf[1][j].x -= fx;
1025  params->fullf[1][j].y -= fy;
1026  params->fullf[1][j].z -= fz;
1027 
1028  fIx += fx;
1029  fIy += fy;
1030  fIz += fz;
1031 
1032 #if 1
1033 //#ifdef PRINT_COMP
1034  int id1 = params->pExt[0][i].id;
1035  int id2 = params->pExt[1][j].id;
1036  float h1 = dhij;
1037  float h2 = dhji;
1038  if (id1 > id2) {
1039  int tmp = id1;
1040  id1 = id2;
1041  id2 = tmp;
1042  h1 = dhji;
1043  h2 = dhij;
1044  }
1045  //CkPrintf("DEDA(%04i)[%04i,%04i] = 11 % .4e % .4e % .4e\n",gbisParams->sequence,id1,id2,h1,h2, forceAlpha);
1046 /*CkPrintf("P3PAIR %05i %05i%9.5f% 13.5e% 13.5e% 13.5e% 13.5e% 13.5e %i\n",
1047 params->pExt[0][i].id, params->pExt[1][j].id,sqrt(r2),
1048 dHdrPrefixI, dHdrPrefixJ, dhij, dhji, forceAlpha, 1
1049 );
1050 CkPrintf("P3PAIR %05i %05i%9.5f% 13.5e% 13.5e% 13.5e% 13.5e% 13.5e %i\n",
1051 params->pExt[1][j].id, params->pExt[0][i].id,sqrt(r2),
1052 dHdrPrefixJ, dHdrPrefixI, dhji, dhij, forceAlpha, 1
1053 );*/
1054 #endif
1055 
1056 #ifdef BENCHMARK
1057  nops++;
1058 #endif
1059 
1060  }//end inner j
1061  params->fullf[0][i].x += fIx;
1062  params->fullf[0][i].y += fIy;
1063  params->fullf[0][i].z += fIz;
1064  }//end outer i
1065  for (int s = 0; s < strideIg; s++) {
1066  ngi+=params->p[0][ngi].nonbondedGroupSize;
1067  }
1068  }
1069 
1070 #ifdef BENCHMARK
1071  t2 = 1.0*clock()/CLOCKS_PER_SEC;
1072  CkPrintf("PHASE3.2: %8.3f ms @ %8.3f ns/iter for %i iter\n",1000.0*(t2-t1), 1000000000.0*(t2-t1)/nops,nops);
1073 nops = 0;
1074  t1 = 1.0*clock()/CLOCKS_PER_SEC;
1075  nops = 0;
1076 #endif
1077 
1078  //piecewise all others
1079  c = 2;
1080  for (int ngi = minIg; ngi < maxI; ) {
1081  int iGroupSize = params->p[0][ngi].nonbondedGroupSize;
1082  for (int i = ngi; i < ngi+iGroupSize; i++) {
1083  ri = params->p[0][i].position;
1084  ri.x += offset_x;
1085  ri.y += offset_y;
1086  ri.z += offset_z;
1087  rhoi0 = gbisParams->intRad[0][2*i+0];
1088  rhois = gbisParams->intRad[0][2*i+1];
1089  plint *pairs;
1090  gbisParams->gbisStepPairlists[c]->nextlist(&pairs,&numPairs);
1091  fIx = fIy = fIz = 0.0;
1092  dHdrPrefixI = gbisParams->dHdrPrefix[0][i];
1093  for (jj = 0; jj < numPairs; jj++) {
1094  j = pairs[jj];
1095  rj = params->p[1][j].position;
1096  dHdrPrefixJ = gbisParams->dHdrPrefix[1][j];
1097 
1098  dx = (ri.x - rj.x);
1099  dy = (ri.y - rj.y);
1100  dz = (ri.z - rj.z);
1101  r2 = dx*dx + dy*dy + dz*dz;
1102 
1103  r_i = 1.0/sqrt(r2);//rptI
1104  r = r2* r_i;
1105 
1106  rhojs = gbisParams->intRad[1][2*j+1];
1107  rhoj0 = gbisParams->intRad[1][2*j+0];
1108 
1109  CalcDHPair(r,r2,r_i,a_cut,
1110  rhoi0,rhojs,
1111  rhoj0,rhois,
1112  dij,dji,dhij,dhji);
1113 
1114  //add dEda*dadr force
1115  forceAlpha = -r_i*(dHdrPrefixI*dhij+dHdrPrefixJ*dhji); // *scaling ?
1116  fx = dx * forceAlpha;
1117  fy = dy * forceAlpha;
1118  fz = dz * forceAlpha;
1119 
1120  fIx += fx;
1121  fIy += fy;
1122  fIz += fz;
1123 
1124  params->fullf[1][j].x -= fx;
1125  params->fullf[1][j].y -= fy;
1126  params->fullf[1][j].z -= fz;
1127 
1128 #if 1
1129 //#ifdef PRINT_COMP
1130  int id1 = params->pExt[0][i].id;
1131  int id2 = params->pExt[1][j].id;
1132  int d1 = dij;
1133  int d2 = dji;
1134  float h1 = dhij;
1135  float h2 = dhji;
1136  if (id1 > id2) {
1137  int tmp = id1;
1138  id1 = id2;
1139  id2 = tmp;
1140  d1 = dji;
1141  d2 = dij;
1142  h1 = dhji;
1143  h2 = dhij;
1144  }
1145 // CkPrintf("DEDA(%04i)[%04i,%04i] = %i%i % .4e % .4e % .4e\n",gbisParams->sequence,id1,id2,d1,d2,h1,h2, forceAlpha);
1146 // CkPrintf("DEDA(%04i)[%04i,%04i] = %i%i % .4e % .4e % .4e\n",gbisParams->sequence,id1,id2,d1,d2,h1,h2, forceAlpha);
1147 /*if ( dij > 0 ) {
1148 CkPrintf("P3PAIR %05i %05i%9.5f% 13.5e% 13.5e% 13.5e% 13.5e% 13.5e %i\n",
1149 params->pExt[0][i].id, params->pExt[1][j].id,sqrt(r2),
1150 dHdrPrefixI, dHdrPrefixJ, dhij, dhji, forceAlpha, dij
1151 );
1152 }
1153 if ( dji > 0 ) {
1154 CkPrintf("P3PAIR %05i %05i%9.5f% 13.5e% 13.5e% 13.5e% 13.5e% 13.5e %i\n",
1155 params->pExt[1][j].id, params->pExt[0][i].id,sqrt(r2),
1156 dHdrPrefixJ, dHdrPrefixI, dhji, dhij, forceAlpha, dji
1157 );
1158 }*/
1159 #endif
1160 
1161 #ifdef BENCHMARK
1162  nops++;
1163 #endif
1164 
1165  }//end inner j
1166  params->fullf[0][i].x += fIx;
1167  params->fullf[0][i].y += fIy;
1168  params->fullf[0][i].z += fIz;
1169  }//end outer i
1170  for (int s = 0; s < strideIg; s++) {
1171  ngi+=params->p[0][ngi].nonbondedGroupSize;
1172  }
1173  }
1174 
1175 
1176 #ifdef BENCHMARK
1177  t2 = 1.0*clock()/CLOCKS_PER_SEC;
1178  CkPrintf("PHASE3.3: %8.3f ms @ %8.3f ns/iter for %i iter\n",1000.0*(t2-t1), 1000000000.0*(t2-t1)/nops, nops);
1179 #endif
1180 
1181 }//end if gbisPhase
1182 
1183 }//end calcGBIS
#define TE
Definition: ComputeGBIS.inl:36
#define TD
Definition: ComputeGBIS.inl:35
#define TA
Definition: ComputeGBIS.inl:32
CompAtom * p[2]
Definition: Vector.h:72
#define COULOMB
Definition: common.h:53
BigReal z
Definition: Vector.h:74
Position position
Definition: NamdTypes.h:78
static void h2(float r, float r2, float ri, float rc, float r0, float rs, float &h)
#define TC
Definition: ComputeGBIS.inl:34
#define DA
Definition: ComputeGBIS.inl:37
#define DD
Definition: ComputeGBIS.inl:40
uint32 id
Definition: NamdTypes.h:160
Charge charge
Definition: NamdTypes.h:79
static void CalcDHPair(float r, float r2, float ri, float rc, float ri0, float rjs, float rj0, float ris, int &dij, int &dji, float &dhij, float &dhji)
unsigned short plint
void nextlist(plint **list, int *list_size)
static void h1(float r, float r2, float ri, float rc, float r0, float rs, float &h)
Pairlists * gbisStepPairlists[4]
#define DB
Definition: ComputeGBIS.inl:38
#define DC
Definition: ComputeGBIS.inl:39
CompAtomExt * pExt[2]
#define ZERO
Definition: common.h:104
BigReal x
Definition: Vector.h:74
uint8 nonbondedGroupSize
Definition: NamdTypes.h:82
#define FS_MAX
Definition: ComputeGBIS.inl:24
static void CalcHPair(float r, float r2, float ri, float rc, float ri0, float rjs, float rj0, float ris, int &dij, int &dji, float &hij, float &hji)
BigReal y
Definition: Vector.h:74
#define TB
Definition: ComputeGBIS.inl:33
Force * fullf[2]
#define DE
Definition: ComputeGBIS.inl:41
double BigReal
Definition: common.h:123
float GBReal
Definition: ComputeGBIS.inl:17
void pairlistFromAll(nonbonded *params, GBISParamStruct *gbisParams, int minIg, int strideIg, int maxI)
Definition: ComputeGBIS.C:44

◆ select()

void ComputeNonbondedUtil::select ( void  )
static

Definition at line 266 of file ComputeNonbondedUtil.C.

References A12_f, A6_f, accelMDOn, alchDecouple, alchFepOn, alchThermIntOn, alchVdwShiftCoeff, alchWCAOn, B12_f, B6_f, c0, C1, c1, C12_f, C2, c3, c5, c6, C6_f, c7, c8, calc_error(), calc_pair(), calc_pair_disp(), calc_pair_disp_fullelect(), calc_pair_disp_merge_fullelect(), calc_pair_energy(), calc_pair_energy_disp(), calc_pair_energy_disp_fullelect(), calc_pair_energy_disp_merge_fullelect(), calc_pair_energy_fep(), calc_pair_energy_fullelect(), calc_pair_energy_fullelect_fep(), calc_pair_energy_fullelect_go(), calc_pair_energy_fullelect_int(), calc_pair_energy_fullelect_les(), calc_pair_energy_fullelect_pprof(), calc_pair_energy_fullelect_tabener(), calc_pair_energy_fullelect_ti(), calc_pair_energy_go(), calc_pair_energy_int(), calc_pair_energy_les(), calc_pair_energy_merge_fullelect(), calc_pair_energy_merge_fullelect_fep(), calc_pair_energy_merge_fullelect_go(), calc_pair_energy_merge_fullelect_int(), calc_pair_energy_merge_fullelect_les(), calc_pair_energy_merge_fullelect_pprof(), calc_pair_energy_merge_fullelect_tabener(), calc_pair_energy_merge_fullelect_ti(), calc_pair_energy_pprof(), calc_pair_energy_slow_fullelect(), calc_pair_energy_slow_fullelect_fep(), calc_pair_energy_slow_fullelect_go(), calc_pair_energy_slow_fullelect_les(), calc_pair_energy_slow_fullelect_pprof(), calc_pair_energy_slow_fullelect_tabener(), calc_pair_energy_slow_fullelect_ti(), calc_pair_energy_tabener(), calc_pair_energy_ti(), calc_pair_fullelect(), calc_pair_fullelect_go(), calc_pair_fullelect_les(), calc_pair_fullelect_pprof(), calc_pair_fullelect_tabener(), calc_pair_fullelect_ti(), calc_pair_go(), calc_pair_les(), calc_pair_merge_fullelect(), calc_pair_merge_fullelect_go(), calc_pair_merge_fullelect_les(), calc_pair_merge_fullelect_pprof(), calc_pair_merge_fullelect_tabener(), calc_pair_merge_fullelect_ti(), calc_pair_pprof(), calc_pair_slow_fullelect(), calc_pair_slow_fullelect_go(), calc_pair_slow_fullelect_les(), calc_pair_slow_fullelect_pprof(), calc_pair_slow_fullelect_tabener(), calc_pair_slow_fullelect_ti(), calc_pair_tabener(), calc_pair_ti(), calc_self(), calc_self_disp(), calc_self_disp_fullelect(), calc_self_disp_merge_fullelect(), calc_self_energy(), calc_self_energy_disp(), calc_self_energy_disp_fullelect(), calc_self_energy_disp_merge_fullelect(), calc_self_energy_fep(), calc_self_energy_fullelect(), calc_self_energy_fullelect_fep(), calc_self_energy_fullelect_go(), calc_self_energy_fullelect_int(), calc_self_energy_fullelect_les(), calc_self_energy_fullelect_pprof(), calc_self_energy_fullelect_tabener(), calc_self_energy_fullelect_ti(), calc_self_energy_go(), calc_self_energy_int(), calc_self_energy_les(), calc_self_energy_merge_fullelect(), calc_self_energy_merge_fullelect_fep(), calc_self_energy_merge_fullelect_go(), calc_self_energy_merge_fullelect_int(), calc_self_energy_merge_fullelect_les(), calc_self_energy_merge_fullelect_pprof(), calc_self_energy_merge_fullelect_tabener(), calc_self_energy_merge_fullelect_ti(), calc_self_energy_pprof(), calc_self_energy_slow_fullelect(), calc_self_energy_slow_fullelect_fep(), calc_self_energy_slow_fullelect_go(), calc_self_energy_slow_fullelect_les(), calc_self_energy_slow_fullelect_pprof(), calc_self_energy_slow_fullelect_tabener(), calc_self_energy_slow_fullelect_ti(), calc_self_energy_tabener(), calc_self_energy_ti(), calc_self_fullelect(), calc_self_fullelect_go(), calc_self_fullelect_les(), calc_self_fullelect_pprof(), calc_self_fullelect_tabener(), calc_self_fullelect_ti(), calc_self_go(), calc_self_les(), calc_self_merge_fullelect(), calc_self_merge_fullelect_go(), calc_self_merge_fullelect_les(), calc_self_merge_fullelect_pprof(), calc_self_merge_fullelect_tabener(), calc_self_merge_fullelect_ti(), calc_self_pprof(), calc_self_slow_fullelect(), calc_self_slow_fullelect_go(), calc_self_slow_fullelect_les(), calc_self_slow_fullelect_pprof(), calc_self_slow_fullelect_tabener(), calc_self_slow_fullelect_ti(), calc_self_tabener(), calc_self_ti(), calcDispPair, calcDispPairEnergy, calcDispSelf, calcDispSelfEnergy, calcFullDispPair, calcFullDispPairEnergy, calcFullDispSelf, calcFullDispSelfEnergy, calcFullPair, calcFullPairEnergy, calcFullSelf, calcFullSelfEnergy, calcMergeDispPair, calcMergeDispPairEnergy, calcMergeDispSelf, calcMergeDispSelfEnergy, calcMergePair, calcMergePairEnergy, calcMergeSelf, calcMergeSelfEnergy, calcPair, calcPairEnergy, calcSelf, calcSelfEnergy, calcSlowPair, calcSlowPairEnergy, calcSlowSelf, calcSlowSelfEnergy, columnsize, Parameters::columnsize, commOnly, corr_table, cutoff, cutoff2, cutoff2_f, cutoff_3, cutoff_3_f, cutoff_6, cutoff_6_f, dielectric_1, drudeNbthole, endi(), ewaldcof, fast_table, fixedAtomsOn, full_table, Parameters::get_num_vdw_params(), LJTable::get_table_dim(), Parameters::get_vdw_pair_params(), Parameters::get_vdw_params(), goForcesOn, goGroPair, goMethod, iERROR(), iINFO(), iout, k_vdwa, k_vdwa_f, k_vdwb, k_vdwb_f, lambda_table, lesFactor, lesOn, lesScaling, LJewaldcof, ljTable, mol, Node::molecule, NAMD_bug(), NAMD_die(), Node::Object(), pairInteractionOn, pairInteractionSelf, Node::parameters, pi_ewaldcof, pressureProfileAtomTypes, pressureProfileOn, pressureProfileSlabs, qmForcesOn, r2_delta, r2_delta_1, r2_delta_exp, r2_table, rowsize, Parameters::rowsize, scale14, SCALED14, scaling, scor_table, SHARP, Node::simParameters, simParams, slow_table, SPLIT_C1, SPLIT_C2, SPLIT_MARTINI, SPLIT_NONE, SPLIT_SHIFT, SPOLY, switchOn, switchOn2, switchOn_1, switchOn_f, table_alloc, table_ener, Parameters::table_ener, table_length, table_noshort, table_short, v_vdwa, v_vdwa_f, v_vdwb, v_vdwb_f, vdw_switch_mode, VDW_SWITCH_MODE_ENERGY, VDW_SWITCH_MODE_FORCE, VDW_SWITCH_MODE_MARTINI, vdwa_table, vdwb_table, vdwForceSwitching, and XPLOR.

Referenced by SimParameters::nonbonded_select(), and SimParameters::scriptSet().

267 {
268  if ( CkMyRank() ) return;
269 
270  // These defaults die cleanly if nothing appropriate is assigned.
299 
301  Parameters * params = Node::Object()->parameters;
302 
303  table_ener = params->table_ener;
304  rowsize = params->rowsize;
305  columnsize = params->columnsize;
306 
307  commOnly = simParams->commOnly;
308  fixedAtomsOn = ( simParams->fixedAtomsOn && ! simParams->fixedAtomsForces );
309 
310  qmForcesOn = simParams->qmForcesOn ;
311 
312  cutoff = simParams->cutoff;
314  cutoff2_f = cutoff2;
315 
316 //fepb
317  alchFepOn = simParams->alchFepOn;
318  alchThermIntOn = simParams->alchThermIntOn;
319  alchWCAOn = simParams->alchWCAOn;
320  alchDecouple = simParams->alchDecouple;
321 
322  lesOn = simParams->lesOn;
323  lesScaling = lesFactor = 0;
324 
325  Bool tabulatedEnergies = simParams->tabulatedEnergies;
326  alchVdwShiftCoeff = simParams->alchVdwShiftCoeff;
327  vdwForceSwitching = simParams->vdwForceSwitching;
328 
329  delete [] lambda_table;
330  lambda_table = 0;
331 
332  pairInteractionOn = simParams->pairInteractionOn;
333  pairInteractionSelf = simParams->pairInteractionSelf;
334  pressureProfileOn = simParams->pressureProfileOn;
335 
336  // Ported by JLai -- Original JE - Go
337  goGroPair = simParams->goGroPair;
338  goForcesOn = simParams->goForcesOn;
339  goMethod = simParams->goMethod;
340  // End of port
341 
342  accelMDOn = simParams->accelMDOn;
343 
344  drudeNbthole = simParams->drudeOn && (simParams->drudeNbtholeCut > 0.0);
345 
346  if ( drudeNbthole ) {
347 // #if defined(NAMD_CUDA) || defined(NAMD_HIP)
348 // NAMD_die("drudeNbthole is not supported in CUDA version");
349 // #endif
350  if ( lesOn )
351  NAMD_die("drudeNbthole is not supported with locally enhanced sampling");
352  if ( pairInteractionOn )
353  NAMD_die("drudeNbthole is not supported with pair interaction calculation");
354  if ( pressureProfileOn )
355  NAMD_die("drudeNbthole is not supported with pressure profile calculation");
356  }
357 
358  if ( alchFepOn ) {
375  } else if ( alchThermIntOn ) {
392  } else if ( lesOn ) {
393 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
394  NAMD_die("Locally enhanced sampling is not supported in CUDA version");
395 #endif
396  lesFactor = simParams->lesFactor;
397  lesScaling = 1.0 / (double)lesFactor;
398  lambda_table = new BigReal[(lesFactor+1)*(lesFactor+1)];
399  for ( int ip=0; ip<=lesFactor; ++ip ) {
400  for ( int jp=0; jp<=lesFactor; ++jp ) {
401  BigReal lambda_pair = 1.0;
402  if (ip || jp ) {
403  if (ip && jp && ip != jp) {
404  lambda_pair = 0.0;
405  } else {
406  lambda_pair = lesScaling;
407  }
408  }
409  lambda_table[(lesFactor+1)*ip+jp] = lambda_pair;
410  }
411  }
428  } else if ( pressureProfileOn) {
429 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
430  NAMD_die("Pressure profile calculation is not supported in CUDA version");
431 #endif
432  pressureProfileSlabs = simParams->pressureProfileSlabs;
433  pressureProfileAtomTypes = simParams->pressureProfileAtomTypes;
434 
451  } else if ( pairInteractionOn ) {
452 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
453  NAMD_die("Pair interaction calculation is not supported in CUDA version");
454 #endif
461  } else if ( tabulatedEnergies ) {
462 #if defined(NAMD_CUDA) || defined(NAMD_HIP)
463  NAMD_die("Tabulated energies is not supported in CUDA version");
464 #endif
481  } else if ( goForcesOn ) {
482 #ifdef NAMD_CUDA
483  NAMD_die("Go forces is not supported in CUDA version");
484 #endif
501  } else {
530  }
531 
532 //fepe
533 
534  dielectric_1 = 1.0/simParams->dielectric;
535  if ( simParams->soluteScalingOn ) {
536  delete ljTable;
537  ljTable = 0;
538  }
539  if ( ! ljTable ) ljTable = new LJTable;
541  scaling = simParams->nonbondedScaling;
542  if ( simParams->exclude == SCALED14 )
543  {
544  scale14 = simParams->scale14;
545  }
546  else
547  {
548  scale14 = 1.;
549  }
550  if ( simParams->switchingActive )
551  {
552  switchOn = simParams->switchingDist;
553  switchOn_1 = 1.0/switchOn;
554  // d0 = 1.0/(cutoff-switchOn);
556  c0 = 1.0/(cutoff2-switchOn2);
557 
558  if ( simParams->vdwForceSwitching ) {
559  double switchOn3 = switchOn * switchOn2;
560  double cutoff3 = cutoff * cutoff2;
561  double switchOn6 = switchOn3 * switchOn3;
562  double cutoff6 = cutoff3 * cutoff3;
563  v_vdwa_f = v_vdwa = -1. / ( switchOn6 * cutoff6 );
564  v_vdwb_f = v_vdwb = -1. / ( switchOn3 * cutoff3 );
565  k_vdwa_f = k_vdwa = cutoff6 / ( cutoff6 - switchOn6 );
566  k_vdwb_f = k_vdwb = cutoff3 / ( cutoff3 - switchOn3 );
567  cutoff_3_f = cutoff_3 = 1. / cutoff3;
568  cutoff_6_f = cutoff_6 = 1. / cutoff6;
569 
570  } else if ( simParams->martiniSwitching ) { // switching fxn for Martini RBCG
571 
572  BigReal p6 = 6;
573  BigReal A6 = p6 * ((p6+1)*switchOn-(p6+4)*cutoff)/(pow(cutoff,p6+2)*pow(cutoff-switchOn,2));
574  BigReal B6 = -p6 * ((p6+1)*switchOn-(p6+3)*cutoff)/(pow(cutoff,p6+2)*pow(cutoff-switchOn,3));
575  BigReal C6 = 1.0/pow(cutoff,p6)-A6/3.0*pow(cutoff-switchOn,3)-B6/4.0*pow(cutoff-switchOn,4);
576 
577  BigReal p12 = 12;
578  BigReal A12 = p12 * ((p12+1)*switchOn-(p12+4)*cutoff)/(pow(cutoff,p12+2)*pow(cutoff-switchOn,2));
579  BigReal B12 = -p12 * ((p12+1)*switchOn-(p12+3)*cutoff)/(pow(cutoff,p12+2)*pow(cutoff-switchOn,3));
580  BigReal C12 = 1.0/pow(cutoff,p12)-A12/3.0*pow(cutoff-switchOn,3)-B12/4.0*pow(cutoff-switchOn,4);
581 
582  A6_f = A6; B6_f = B6; C6_f = C6;
583  A12_f = A12; B12_f = B12; C12_f = C12;
585 
586  }
587 
588  }
589  else
590  {
591  switchOn = cutoff;
592  switchOn_1 = 1.0/switchOn;
593  // d0 = 0.; // avoid division by zero
595  c0 = 0.; // avoid division by zero
596  }
597  c1 = c0*c0*c0;
598  c3 = 3.0 * (cutoff2 - switchOn2);
599  c5 = 0;
600  c6 = 0;
601  c7 = 0;
602  c8 = 0;
603 
604  const int PMEOn = simParams->PMEOn;
605  const int LJPMEOn = simParams->LJPMEOn;
606  const int MSMOn = simParams->MSMOn;
607  const int MSMSplit = simParams->MSMSplit;
608 
609  if ( PMEOn ) {
610  ewaldcof = simParams->PMEEwaldCoefficient;
611  BigReal TwoBySqrtPi = 1.12837916709551;
612  pi_ewaldcof = TwoBySqrtPi * ewaldcof;
613  }
614  if ( LJPMEOn ) {
615  LJewaldcof = simParams->LJPMEEwaldCoefficient;
616  }
617 
618  int splitType = SPLIT_NONE;
619  if ( simParams->switchingActive ) splitType = SPLIT_SHIFT;
620  if ( simParams->martiniSwitching ) splitType = SPLIT_MARTINI;
621  if ( simParams->fullDirectOn || simParams->FMAOn || PMEOn || MSMOn ||
622  simParams->FMMOn ) {
623  switch ( simParams->longSplitting ) {
624  case C2:
625  splitType = SPLIT_C2;
626  break;
627 
628  case C1:
629  splitType = SPLIT_C1;
630  break;
631 
632  case XPLOR:
633  NAMD_die("Sorry, XPLOR splitting not supported.");
634  break;
635 
636  case SHARP:
637  NAMD_die("Sorry, SHARP splitting not supported.");
638  break;
639 
640  default:
641  NAMD_die("Unknown splitting type found!");
642 
643  }
644  }
645 
646  BigReal r2_tol = 0.1;
647 
648  r2_delta = 1.0;
649  r2_delta_exp = 0;
650  while ( r2_delta > r2_tol ) { r2_delta /= 2.0; r2_delta_exp += 1; }
651  r2_delta_1 = 1.0 / r2_delta;
652 
653  if ( ! CkMyPe() ) {
654  iout << iINFO << "NONBONDED TABLE R-SQUARED SPACING: " <<
655  r2_delta << "\n" << endi;
656  }
657 
658  BigReal r2_tmp = 1.0;
659  int cutoff2_exp = 0;
660  while ( (cutoff2 + r2_delta) > r2_tmp ) { r2_tmp *= 2.0; cutoff2_exp += 1; }
661 
662  int i;
663  int n = (r2_delta_exp + cutoff2_exp) * 64 + 1;
664  table_length = n;
665  #if defined(NAMD_MIC)
666  int n_16 = (n + 15) & (~15);
667  #endif
668 
669  if ( ! CkMyPe() ) {
670  iout << iINFO << "NONBONDED TABLE SIZE: " <<
671  n << " POINTS\n" << endi;
672  }
673 
674  if ( table_alloc ) delete [] table_alloc;
675  #if defined(NAMD_MIC)
676  table_alloc = new BigReal[61*n_16+16];
677  BigReal *table_align = table_alloc;
678  while ( ((long)table_align) % 128 ) ++table_align;
679  mic_table_base_ptr = table_align;
680  mic_table_n = n;
681  mic_table_n_16 = n_16;
682  table_noshort = table_align;
683  table_short = table_align + 16*n_16;
684  slow_table = table_align + 32*n_16;
685  fast_table = table_align + 36*n_16;
686  scor_table = table_align + 40*n_16;
687  corr_table = table_align + 44*n_16;
688  full_table = table_align + 48*n_16;
689  vdwa_table = table_align + 52*n_16;
690  vdwb_table = table_align + 56*n_16;
691  r2_table = table_align + 60*n_16;
692  #else
693  table_alloc = new BigReal[61*n+16];
694  BigReal *table_align = table_alloc;
695  while ( ((long)table_align) % 128 ) ++table_align;
696  table_noshort = table_align;
697  table_short = table_align + 16*n;
698  slow_table = table_align + 32*n;
699  fast_table = table_align + 36*n;
700  scor_table = table_align + 40*n;
701  corr_table = table_align + 44*n;
702  full_table = table_align + 48*n;
703  vdwa_table = table_align + 52*n;
704  vdwb_table = table_align + 56*n;
705  r2_table = table_align + 60*n;
706  #endif
707  BigReal *fast_i = fast_table + 4;
708  BigReal *scor_i = scor_table + 4;
709  BigReal *slow_i = slow_table + 4;
710  BigReal *vdwa_i = vdwa_table + 4;
711  BigReal *vdwb_i = vdwb_table + 4;
712  BigReal *r2_i = r2_table; *(r2_i++) = r2_delta;
713  BigReal r2_limit = simParams->limitDist * simParams->limitDist;
714  if ( r2_limit < r2_delta ) r2_limit = r2_delta;
715  int r2_delta_i = 0; // entry for r2 == r2_delta
716 
717 #ifdef NAMD_AVXTILES
718  {
719  avxTilesMode = 1;
720  if (!simParams->useAVXTiles)
721  avxTilesMode = 0;
722  if (avxTilesMode) {
723  if (simParams->vdwGeometricSigma) avxTilesMode = 2;
724  if ( simParams->fullDirectOn || simParams->FMAOn || PMEOn || MSMOn ||
725  simParams->FMMOn ) {
726  if ( simParams->longSplitting != C1)
727  avxTilesMode = 3;
728  } else
729  avxTilesMode = 3;
730  if (avxTilesMode == 1) {
731  const int table_dim = ljTable->get_table_dim();
732  Real A, B, A14, B14;
733  for (int i = 0; i < table_dim; i++)
734  for (int j = i+1; j < table_dim; j++)
735  if (params->get_vdw_pair_params(i, j, &A, &B, &A14, &B14))
736  avxTilesMode = 2;
737  }
738  if (avxTilesMode > 1)
739  iout << iINFO << "AVX-512 TILES WILL USE SHORT-RANGE INTERPOLATION ("
740  << avxTilesMode << ")\n";
741  else {
742  Parameters *params = Node::Object()->parameters;
743  const int num_params = params->get_num_vdw_params();
744  if ( avx_tiles_eps4_sigma ) delete [] avx_tiles_eps4_sigma;
745  if ( avx_tiles_eps4_sigma_14 ) delete [] avx_tiles_eps4_sigma_14;
746  avx_tiles_eps4_sigma = new float[num_params*2];
747  avx_tiles_eps4_sigma_14 = new float[num_params*2];
748  for (int i = 0; i < num_params; i++) {
749  Real sigma, sigma_14, epsilon, epsilon_14;
750  params->get_vdw_params(&sigma, &epsilon, &sigma_14,
751  &epsilon_14,i);
752  // Set the epsilon and epsilon_14 to zero if we do LJ-PME
753 //if (simParams->LJPMESerialOn) {
754  if (simParams->LJPMEOn) {
755  epsilon = epsilon_14 = 0.0;
756  }
757 //}
758  avx_tiles_eps4_sigma[i*2] = 4.0 * scaling * epsilon;
759  avx_tiles_eps4_sigma[i*2 + 1] = sigma;
760  avx_tiles_eps4_sigma_14[i*2] = 4.0 * scaling * epsilon_14;
761  avx_tiles_eps4_sigma_14[i*2 + 1] = sigma_14;
762  }
763  }
764  }
765  }
766 #endif
767 #if defined(NAMD_KNL) || defined(NAMD_AVXTILES)
768  if ( knl_table_alloc ) delete [] knl_table_alloc;
769  if ( KNL_TABLE_MAX_R_1 < 1.f || KNL_TABLE_FACTOR < 1 ||
770  KNL_TABLE_FACTOR !=
771  static_cast<int>(1.0 / KNL_TABLE_MAX_R_1 * KNL_TABLE_SIZE))
772  NAMD_bug("Inconsistent KNL preprocessor settings.");
773 #ifdef NAMD_KNL
774  knl_table_alloc = new float[10*KNL_TABLE_SIZE];
775 #else
776  knl_table_alloc = new float[8*KNL_TABLE_SIZE];
777 #endif
778  knl_fast_ener_table = knl_table_alloc;
779  knl_fast_grad_table = knl_table_alloc + KNL_TABLE_SIZE;
780  knl_scor_ener_table = knl_table_alloc + 2*KNL_TABLE_SIZE;
781  knl_scor_grad_table = knl_table_alloc + 3*KNL_TABLE_SIZE;
782  knl_slow_ener_table = knl_table_alloc + 4*KNL_TABLE_SIZE;
783  knl_slow_grad_table = knl_table_alloc + 5*KNL_TABLE_SIZE;
784  knl_excl_ener_table = knl_table_alloc + 6*KNL_TABLE_SIZE;
785  knl_excl_grad_table = knl_table_alloc + 7*KNL_TABLE_SIZE;
786  knl_fast_ener_table[0] = 0.;
787  knl_fast_grad_table[0] = 0.;
788  knl_scor_ener_table[0] = 0.;
789  knl_scor_grad_table[0] = 0.;
790  knl_slow_ener_table[0] = 0.;
791  knl_slow_grad_table[0] = 0.;
792  knl_excl_ener_table[0] = 0.;
793  knl_excl_grad_table[0] = 0.;
794 #ifdef NAMD_KNL
795  knl_corr_ener_table = knl_table_alloc + 8*KNL_TABLE_SIZE;
796  knl_corr_grad_table = knl_table_alloc + 9*KNL_TABLE_SIZE;
797  knl_corr_ener_table[0] = 0.;
798  knl_corr_grad_table[0] = 0.;
799 #endif
800  for ( int knl_table = 0; knl_table < 2; ++knl_table ) {
801  int nn = n;
802  if ( knl_table ) {
803  nn = KNL_TABLE_SIZE-1;
804  }
805  for ( i=1; i<nn; ++i ) {
806 #else
807  // fill in the table, fix up i==0 (r2==0) below
808  for ( i=1; i<n; ++i ) {
809 #endif
810 
811  const BigReal r2_base = r2_delta * ( 1 << (i/64) );
812  const BigReal r2_del = r2_base / 64.0;
813  BigReal r2 = r2_base - r2_delta + r2_del * (i%64);
814 
815  BigReal r = sqrt(r2);
816 
817 #if defined(NAMD_KNL) || defined(NAMD_AVXTILES)
818  if ( knl_table ) {
819  r = (double)(KNL_TABLE_FACTOR-2)/(double)(i);
820  r2 = r*r;
821  } else
822 #endif
823  if ( r2 <= r2_limit ) r2_delta_i = i;
824 
825  const BigReal r_1 = 1.0/r;
826  const BigReal r_2 = 1.0/r2;
827 
828  // fast_ is defined as (full_ - slow_)
829  // corr_ and fast_ are both zero at the cutoff, full_ is not
830  // all three are approx 1/r at short distances
831 
832  // for actual interpolation, we use fast_ for fast forces and
833  // scor_ = slow_ + corr_ - full_ and slow_ for slow forces
834  // since these last two are of small magnitude
835 
836  BigReal fast_energy, fast_gradient;
837  BigReal scor_energy, scor_gradient;
838  BigReal slow_energy, slow_gradient;
839 
840  // corr_ is PME direct sum, or similar correction term
841  // corr_energy is multiplied by r until later
842  // corr_gradient is multiplied by -r^2 until later
843  BigReal corr_energy, corr_gradient;
844 
845 
846  if ( PMEOn ) {
847  BigReal tmp_a = r * ewaldcof;
848  BigReal tmp_b = erfc(tmp_a);
849  corr_energy = tmp_b;
850  corr_gradient = pi_ewaldcof*exp(-(tmp_a*tmp_a))*r + tmp_b;
851  } else if ( MSMOn ) {
852  BigReal a_1 = 1.0/cutoff;
853  BigReal r_a = r * a_1;
854  BigReal g, dg;
855  SPOLY(&g, &dg, r_a, MSMSplit);
856  corr_energy = 1 - r_a * g;
857  corr_gradient = 1 + r_a*r_a * dg;
858  } else {
859  corr_energy = corr_gradient = 0;
860  }
861 
862  switch(splitType) {
863  case SPLIT_NONE:
864  fast_energy = 1.0/r;
865  fast_gradient = -1.0/r2;
866  scor_energy = scor_gradient = 0;
867  slow_energy = slow_gradient = 0;
868  break;
869  case SPLIT_SHIFT: {
870  BigReal shiftVal = r2/cutoff2 - 1.0;
871  shiftVal *= shiftVal;
872  BigReal dShiftVal = 2.0 * (r2/cutoff2 - 1.0) * 2.0*r/cutoff2;
873  fast_energy = shiftVal/r;
874  fast_gradient = dShiftVal/r - shiftVal/r2;
875  scor_energy = scor_gradient = 0;
876  slow_energy = slow_gradient = 0;
877  }
878  break;
879  case SPLIT_MARTINI: {
880  // in Martini, the Coulomb switching distance is zero
881  const BigReal COUL_SWITCH = 0.;
882  // Gromacs shifting function
883  const BigReal p1 = 1.;
884  BigReal A1 = p1 * ((p1+1)*COUL_SWITCH-(p1+4)*cutoff)/(pow(cutoff,p1+2)*pow(cutoff-COUL_SWITCH,2));
885  BigReal B1 = -p1 * ((p1+1)*COUL_SWITCH-(p1+3)*cutoff)/(pow(cutoff,p1+2)*pow(cutoff-COUL_SWITCH,3));
886  BigReal X1 = 1.0/pow(cutoff,p1)-A1/3.0*pow(cutoff-COUL_SWITCH,3)-B1/4.0*pow(cutoff-COUL_SWITCH,4);
887  BigReal r12 = (r-COUL_SWITCH)*(r-COUL_SWITCH);
888  BigReal r13 = (r-COUL_SWITCH)*(r-COUL_SWITCH)*(r-COUL_SWITCH);
889  BigReal shiftVal = -(A1/3.0)*r13 - (B1/4.0)*r12*r12 - X1;
890  BigReal dShiftVal = -A1*r12 - B1*r13;
891  fast_energy = (1/r) + shiftVal;
892  fast_gradient = -1/(r2) + dShiftVal;
893  scor_energy = scor_gradient = 0;
894  slow_energy = slow_gradient = 0;
895  }
896  break;
897  case SPLIT_C1:
898  // calculate actual energy and gradient
899  slow_energy = 0.5/cutoff * (3.0 - (r2/cutoff2));
900  slow_gradient = -1.0/cutoff2 * (r/cutoff);
901  // calculate scor from slow and corr
902  scor_energy = slow_energy + (corr_energy - 1.0)/r;
903  scor_gradient = slow_gradient - (corr_gradient - 1.0)/r2;
904  // calculate fast from slow
905  fast_energy = 1.0/r - slow_energy;
906  fast_gradient = -1.0/r2 - slow_gradient;
907  break;
908  case SPLIT_C2:
909  //
910  // Quintic splitting function contributed by
911  // Bruce Berne, Ruhong Zhou, and Joe Morrone
912  //
913  // calculate actual energy and gradient
914  slow_energy = r2/(cutoff*cutoff2) * (6.0 * (r2/cutoff2)
915  - 15.0*(r/cutoff) + 10.0);
916  slow_gradient = r/(cutoff*cutoff2) * (24.0 * (r2/cutoff2)
917  - 45.0 *(r/cutoff) + 20.0);
918  // calculate scor from slow and corr
919  scor_energy = slow_energy + (corr_energy - 1.0)/r;
920  scor_gradient = slow_gradient - (corr_gradient - 1.0)/r2;
921  // calculate fast from slow
922  fast_energy = 1.0/r - slow_energy;
923  fast_gradient = -1.0/r2 - slow_gradient;
924  break;
925  }
926 
927  // foo_gradient is calculated as ( d foo_energy / d r )
928  // and now divided by 2r to get ( d foo_energy / d r2 )
929 
930  fast_gradient *= 0.5 * r_1;
931  scor_gradient *= 0.5 * r_1;
932  slow_gradient *= 0.5 * r_1;
933 
934  // let modf be 1 if excluded, 1-scale14 if modified, 0 otherwise,
935  // add scor_ - modf * slow_ to slow terms and
936  // add fast_ - modf * fast_ to fast terms.
937 
938  BigReal vdwa_energy, vdwa_gradient;
939  BigReal vdwb_energy, vdwb_gradient;
940 
941  const BigReal r_6 = r_2*r_2*r_2;
942  const BigReal r_12 = r_6*r_6;
943 
944  // Lennard-Jones switching function
945  if ( simParams->vdwForceSwitching ) { // switch force
947 
948  // from Steinbach & Brooks, JCC 15, pgs 667-683, 1994, eqns 10-13
949  if ( r2 > switchOn2 ) {
950  BigReal tmpa = r_6 - cutoff_6;
951  vdwa_energy = k_vdwa * tmpa * tmpa;
952  BigReal tmpb = r_1 * r_2 - cutoff_3;
953  vdwb_energy = k_vdwb * tmpb * tmpb;
954  vdwa_gradient = -6.0 * k_vdwa * tmpa * r_2 * r_6;
955  vdwb_gradient = -3.0 * k_vdwb * tmpb * r_2 * r_2 * r_1;
956  } else {
957  vdwa_energy = r_12 + v_vdwa;
958  vdwb_energy = r_6 + v_vdwb;
959  vdwa_gradient = -6.0 * r_2 * r_12;
960  vdwb_gradient = -3.0 * r_2 * r_6;
961  }
962  } else if ( simParams->martiniSwitching ) { // switching fxn for Martini RBCG
964 
965  BigReal r12 = (r-switchOn)*(r-switchOn); BigReal r13 = (r-switchOn)*(r-switchOn)*(r-switchOn);
966 
967  BigReal p6 = 6;
968  BigReal A6 = p6 * ((p6+1)*switchOn-(p6+4)*cutoff)/(pow(cutoff,p6+2)*pow(cutoff-switchOn,2));
969  BigReal B6 = -p6 * ((p6+1)*switchOn-(p6+3)*cutoff)/(pow(cutoff,p6+2)*pow(cutoff-switchOn,3));
970  BigReal C6 = 1.0/pow(cutoff,p6)-A6/3.0*pow(cutoff-switchOn,3)-B6/4.0*pow(cutoff-switchOn,4);
971 
972  BigReal p12 = 12;
973  BigReal A12 = p12 * ((p12+1)*switchOn-(p12+4)*cutoff)/(pow(cutoff,p12+2)*pow(cutoff-switchOn,2));
974  BigReal B12 = -p12 * ((p12+1)*switchOn-(p12+3)*cutoff)/(pow(cutoff,p12+2)*pow(cutoff-switchOn,3));
975  BigReal C12 = 1.0/pow(cutoff,p12)-A12/3.0*pow(cutoff-switchOn,3)-B12/4.0*pow(cutoff-switchOn,4);
976 
977  BigReal LJshifttempA = -(A12/3)*r13 - (B12/4)*r12*r12 - C12;
978  BigReal LJshifttempB = -(A6/3)*r13 - (B6/4)*r12*r12 - C6;
979  const BigReal shiftValA = // used for Lennard-Jones
980  ( r2 > switchOn2 ? LJshifttempA : -C12);
981  const BigReal shiftValB = // used for Lennard-Jones
982  ( r2 > switchOn2 ? LJshifttempB : -C6);
983 
984  BigReal LJdshifttempA = -A12*r12 - B12*r13;
985  BigReal LJdshifttempB = -A6*r12 - B6*r13;
986  const BigReal dshiftValA = // used for Lennard-Jones
987  ( r2 > switchOn2 ? LJdshifttempA*0.5*r_1 : 0 );
988  const BigReal dshiftValB = // used for Lennard-Jones
989  ( r2 > switchOn2 ? LJdshifttempB*0.5*r_1 : 0 );
990 
991 
992 
993 
994  //have not addressed r > cutoff
995 
996  // dshiftValA*= 0.5*r_1;
997  // dshiftValB*= 0.5*r_1;
998 
999  vdwa_energy = r_12 + shiftValA;
1000  vdwb_energy = r_6 + shiftValB;
1001 
1002  vdwa_gradient = -6/pow(r,14) + dshiftValA ;
1003  vdwb_gradient = -3/pow(r,8) + dshiftValB;
1004 
1005  } else { // switch energy
1007 
1008  const BigReal c2 = cutoff2-r2;
1009  const BigReal c4 = c2*(c3-2.0*c2);
1010  const BigReal switchVal = // used for Lennard-Jones
1011  ( r2 > switchOn2 ? c2*c4*c1 : 1.0 );
1012  const BigReal dSwitchVal = // d switchVal / d r2
1013  ( r2 > switchOn2 ? 2*c1*(c2*c2-c4) : 0.0 );
1014 
1015  vdwa_energy = switchVal * r_12;
1016  vdwb_energy = switchVal * r_6;
1017 
1018  vdwa_gradient = ( dSwitchVal - 6.0 * switchVal * r_2 ) * r_12;
1019  vdwb_gradient = ( dSwitchVal - 3.0 * switchVal * r_2 ) * r_6;
1020  }
1021 
1022 
1023 #if defined(NAMD_KNL) || defined(NAMD_AVXTILES)
1024  if ( knl_table ) {
1025  knl_fast_ener_table[i] = -1.*fast_energy;
1026  knl_fast_grad_table[i] = -2.*fast_gradient;
1027  knl_scor_ener_table[i] = -1.*scor_energy;
1028  knl_scor_grad_table[i] = -2.*scor_gradient;
1029  knl_slow_ener_table[i] = (-1.*scor_energy - (scale14-1)*slow_energy) /
1030  scale14;
1031  knl_slow_grad_table[i] = (-2.*scor_gradient -
1032  (scale14-1)*2.*slow_gradient) / scale14;
1033  knl_excl_ener_table[i] = slow_energy - scor_energy;
1034  knl_excl_grad_table[i] = 2.*(slow_gradient - scor_gradient);
1035 #ifdef NAMD_KNL
1036  knl_corr_ener_table[i] = -1.*(fast_energy + scor_energy);
1037  knl_corr_grad_table[i] = -2.*(fast_gradient + scor_gradient);
1038 #endif
1039  if ( i == nn-1 ) {
1040  knl_fast_ener_table[nn] = knl_fast_ener_table[i];
1041  knl_fast_grad_table[nn] = knl_fast_grad_table[i];
1042  knl_scor_ener_table[nn] = knl_scor_ener_table[i];
1043  knl_scor_grad_table[nn] = knl_scor_grad_table[i];
1044  knl_slow_ener_table[nn] = knl_slow_ener_table[i];
1045  knl_slow_grad_table[nn] = knl_slow_grad_table[i];
1046  knl_excl_ener_table[nn] = knl_excl_ener_table[i];
1047  knl_excl_grad_table[nn] = knl_excl_grad_table[i];
1048 #ifdef NAMD_KNL
1049  knl_corr_ener_table[nn] = knl_corr_ener_table[i];
1050  knl_corr_grad_table[nn] = knl_corr_grad_table[i];
1051 #endif
1052  }
1053  } else {
1054 #endif
1055  *(fast_i++) = fast_energy;
1056  *(fast_i++) = fast_gradient;
1057  *(fast_i++) = 0;
1058  *(fast_i++) = 0;
1059  *(scor_i++) = scor_energy;
1060  *(scor_i++) = scor_gradient;
1061  *(scor_i++) = 0;
1062  *(scor_i++) = 0;
1063  *(slow_i++) = slow_energy;
1064  *(slow_i++) = slow_gradient;
1065  *(slow_i++) = 0;
1066  *(slow_i++) = 0;
1067  *(vdwa_i++) = vdwa_energy;
1068  *(vdwa_i++) = vdwa_gradient;
1069  *(vdwa_i++) = 0;
1070  *(vdwa_i++) = 0;
1071  *(vdwb_i++) = vdwb_energy;
1072  *(vdwb_i++) = vdwb_gradient;
1073  *(vdwb_i++) = 0;
1074  *(vdwb_i++) = 0;
1075  *(r2_i++) = r2 + r2_delta;
1076 #if defined(NAMD_KNL) || defined(NAMD_AVXTILES)
1077  }
1078 #endif
1079 
1080  }
1081 #if defined(NAMD_KNL) || defined(NAMD_AVXTILES)
1082  } // knl_table loop
1083 #endif
1084 
1085  if ( ! r2_delta_i ) {
1086  NAMD_bug("Failed to find table entry for r2 == r2_limit\n");
1087  }
1088  if ( r2_table[r2_delta_i] > r2_limit + r2_delta ) {
1089  NAMD_bug("Found bad table entry for r2 == r2_limit\n");
1090  }
1091 
1092  int j;
1093  const char *table_name = "XXXX";
1094  int smooth_short = 0;
1095  for ( j=0; j<5; ++j ) {
1096  BigReal *t0 = 0;
1097  switch (j) {
1098  case 0:
1099  t0 = fast_table;
1100  table_name = "FAST";
1101  smooth_short = 1;
1102  break;
1103  case 1:
1104  t0 = scor_table;
1105  table_name = "SCOR";
1106  smooth_short = 0;
1107  break;
1108  case 2:
1109  t0 = slow_table;
1110  table_name = "SLOW";
1111  smooth_short = 0;
1112  break;
1113  case 3:
1114  t0 = vdwa_table;
1115  table_name = "VDWA";
1116  smooth_short = 1;
1117  break;
1118  case 4:
1119  t0 = vdwb_table;
1120  table_name = "VDWB";
1121  smooth_short = 1;
1122  break;
1123  }
1124  // patch up data for i=0
1125  t0[0] = t0[4] - t0[5] * ( r2_delta / 64.0 ); // energy
1126  t0[1] = t0[5]; // gradient
1127  t0[2] = 0;
1128  t0[3] = 0;
1129  if ( smooth_short ) {
1130  BigReal energy0 = t0[4*r2_delta_i];
1131  BigReal gradient0 = t0[4*r2_delta_i+1];
1132  BigReal r20 = r2_table[r2_delta_i];
1133  t0[0] = energy0 - gradient0 * (r20 - r2_table[0]); // energy
1134  t0[1] = gradient0; // gradient
1135  }
1136  BigReal *t;
1137  for ( i=0,t=t0; i<(n-1); ++i,t+=4 ) {
1138  BigReal x = ( r2_delta * ( 1 << (i/64) ) ) / 64.0;
1139  if ( r2_table[i+1] != r2_table[i] + x ) {
1140  NAMD_bug("Bad table delta calculation.\n");
1141  }
1142  if ( smooth_short && i+1 < r2_delta_i ) {
1143  BigReal energy0 = t0[4*r2_delta_i];
1144  BigReal gradient0 = t0[4*r2_delta_i+1];
1145  BigReal r20 = r2_table[r2_delta_i];
1146  t[4] = energy0 - gradient0 * (r20 - r2_table[i+1]); // energy
1147  t[5] = gradient0; // gradient
1148  }
1149  BigReal v1 = t[0];
1150  BigReal g1 = t[1];
1151  BigReal v2 = t[4];
1152  BigReal g2 = t[5];
1153  // explicit formulas for v1 + g1 x + c x^2 + d x^3
1154  BigReal c = ( 3.0 * (v2 - v1) - x * (2.0 * g1 + g2) ) / ( x * x );
1155  BigReal d = ( -2.0 * (v2 - v1) + x * (g1 + g2) ) / ( x * x * x );
1156  // since v2 - v1 is imprecise, we refine c and d numerically
1157  // important because we need accurate forces (more than energies!)
1158  for ( int k=0; k < 2; ++k ) {
1159  BigReal dv = (v1 - v2) + ( ( d * x + c ) * x + g1 ) * x;
1160  BigReal dg = (g1 - g2) + ( 3.0 * d * x + 2.0 * c ) * x;
1161  c -= ( 3.0 * dv - x * dg ) / ( x * x );
1162  d -= ( -2.0 * dv + x * dg ) / ( x * x * x );
1163  }
1164  // store in the array;
1165  t[2] = c; t[3] = d;
1166  }
1167 
1168  if ( ! CkMyPe() ) {
1169  BigReal dvmax = 0;
1170  BigReal dgmax = 0;
1171  BigReal dvmax_r = 0;
1172  BigReal dgmax_r = 0;
1173  BigReal fdvmax = 0;
1174  BigReal fdgmax = 0;
1175  BigReal fdvmax_r = 0;
1176  BigReal fdgmax_r = 0;
1177  BigReal dgcdamax = 0;
1178  BigReal dgcdimax = 0;
1179  BigReal dgcaimax = 0;
1180  BigReal dgcdamax_r = 0;
1181  BigReal dgcdimax_r = 0;
1182  BigReal dgcaimax_r = 0;
1183  BigReal fdgcdamax = 0;
1184  BigReal fdgcdimax = 0;
1185  BigReal fdgcaimax = 0;
1186  BigReal fdgcdamax_r = 0;
1187  BigReal fdgcdimax_r = 0;
1188  BigReal fdgcaimax_r = 0;
1189  BigReal gcm = fabs(t0[1]); // gradient magnitude running average
1190  for ( i=0,t=t0; i<(n-1); ++i,t+=4 ) {
1191  const BigReal r2_base = r2_delta * ( 1 << (i/64) );
1192  const BigReal r2_del = r2_base / 64.0;
1193  const BigReal r2 = r2_base - r2_delta + r2_del * (i%64);
1194  const BigReal r = sqrt(r2);
1195  if ( r > cutoff ) break;
1196  BigReal x = r2_del;
1197  BigReal dv = ( ( t[3] * x + t[2] ) * x + t[1] ) * x + t[0] - t[4];
1198  BigReal dg = ( 3.0 * t[3] * x + 2.0 * t[2] ) * x + t[1] - t[5];
1199  if ( t[4] != 0. && fabs(dv/t[4]) > fdvmax ) {
1200  fdvmax = fabs(dv/t[4]); fdvmax_r = r;
1201  }
1202  if ( fabs(dv) > dvmax ) {
1203  dvmax = fabs(dv); dvmax_r = r;
1204  }
1205  if ( t[5] != 0. && fabs(dg/t[5]) > fdgmax ) {
1206  fdgmax = fabs(dg/t[5]); fdgmax_r = r;
1207  }
1208  if ( fabs(dg) > dgmax ) {
1209  dgmax = fabs(dg); dgmax_r = r;
1210  }
1211  BigReal gcd = (t[4] - t[0]) / x; // centered difference gradient
1212  BigReal gcd_prec = (fabs(t[0]) + fabs(t[4])) * 1.e-15 / x; // roundoff
1213  gcm = 0.9 * gcm + 0.1 * fabs(t[5]); // magnitude running average
1214  BigReal gca = 0.5 * (t[1] + t[5]); // centered average gradient
1215  BigReal gci = ( 0.75 * t[3] * x + t[2] ) * x + t[1]; // interpolated
1216  BigReal rc = sqrt(r2 + 0.5 * x);
1217  BigReal dgcda = gcd - gca;
1218  if ( dgcda != 0. && fabs(dgcda) < gcd_prec ) {
1219  // CkPrintf("ERROR %g < PREC %g AT %g AVG VAL %g\n", dgcda, gcd_prec, rc, gca);
1220  dgcda = 0.;
1221  }
1222  BigReal dgcdi = gcd - gci;
1223  if ( dgcdi != 0. && fabs(dgcdi) < gcd_prec ) {
1224  // CkPrintf("ERROR %g < PREC %g AT %g INT VAL %g\n", dgcdi, gcd_prec, rc, gci);
1225  dgcdi = 0.;
1226  }
1227  BigReal dgcai = gca - gci;
1228  if ( t[1]*t[5] > 0. && gcm != 0. && fabs(dgcda/gcm) > fdgcdamax ) {
1229  fdgcdamax = fabs(dgcda/gcm); fdgcdamax_r = rc;
1230  }
1231  if ( fabs(dgcda) > fdgcdamax ) {
1232  dgcdamax = fabs(dgcda); dgcdamax_r = rc;
1233  }
1234  if ( t[1]*t[5] > 0. && gcm != 0. && fabs(dgcdi/gcm) > fdgcdimax ) {
1235  fdgcdimax = fabs(dgcdi/gcm); fdgcdimax_r = rc;
1236  }
1237  if ( fabs(dgcdi) > fdgcdimax ) {
1238  dgcdimax = fabs(dgcdi); dgcdimax_r = rc;
1239  }
1240  if ( t[1]*t[5] > 0. && gcm != 0. && fabs(dgcai/gcm) > fdgcaimax ) {
1241  fdgcaimax = fabs(dgcai/gcm); fdgcaimax_r = rc;
1242  }
1243  if ( fabs(dgcai) > fdgcaimax ) {
1244  dgcaimax = fabs(dgcai); dgcaimax_r = rc;
1245  }
1246 #if 0
1247  CkPrintf("TABLE %s %g %g %g %g\n",table_name,rc,dgcda/gcm,dgcda,gci);
1248  if (dv != 0.) CkPrintf("TABLE %d ENERGY ERROR %g AT %g (%d)\n",j,dv,r,i);
1249  if (dg != 0.) CkPrintf("TABLE %d FORCE ERROR %g AT %g (%d)\n",j,dg,r,i);
1250 #endif
1251  }
1252  if ( dvmax != 0.0 ) {
1253  iout << iINFO << "ABSOLUTE IMPRECISION IN " << table_name <<
1254  " TABLE ENERGY: " << dvmax << " AT " << dvmax_r << "\n" << endi;
1255  }
1256  if ( fdvmax != 0.0 ) {
1257  iout << iINFO << "RELATIVE IMPRECISION IN " << table_name <<
1258  " TABLE ENERGY: " << fdvmax << " AT " << fdvmax_r << "\n" << endi;
1259  }
1260  if ( dgmax != 0.0 ) {
1261  iout << iINFO << "ABSOLUTE IMPRECISION IN " << table_name <<
1262  " TABLE FORCE: " << dgmax << " AT " << dgmax_r << "\n" << endi;
1263  }
1264  if ( fdgmax != 0.0 ) {
1265  iout << iINFO << "RELATIVE IMPRECISION IN " << table_name <<
1266  " TABLE FORCE: " << fdgmax << " AT " << fdgmax_r << "\n" << endi;
1267  }
1268  if (fdgcdamax != 0.0 ) {
1269  iout << iINFO << "INCONSISTENCY IN " << table_name <<
1270  " TABLE ENERGY VS FORCE: " << fdgcdamax << " AT " << fdgcdamax_r << "\n" << endi;
1271  if ( fdgcdamax > 0.1 ) {
1272  iout << iERROR << "\n";
1273  iout << iERROR << "CALCULATED " << table_name <<
1274  " FORCE MAY NOT MATCH ENERGY! POSSIBLE BUG!\n";
1275  iout << iERROR << "\n";
1276  }
1277  }
1278  if (0 && fdgcdimax != 0.0 ) {
1279  iout << iINFO << "INCONSISTENCY IN " << table_name <<
1280  " TABLE ENERGY VS FORCE: " << fdgcdimax << " AT " << fdgcdimax_r << "\n" << endi;
1281  }
1282  if ( 0 && fdgcaimax != 0.0 ) {
1283  iout << iINFO << "INCONSISTENCY IN " << table_name <<
1284  " TABLE AVG VS INT FORCE: " << fdgcaimax << " AT " << fdgcaimax_r << "\n" << endi;
1285  }
1286  }
1287 
1288  }
1289 
1290  for ( i=0; i<4*n; ++i ) {
1291  corr_table[i] = fast_table[i] + scor_table[i];
1292  full_table[i] = fast_table[i] + slow_table[i];
1293  }
1294 
1295 #if 0
1296  for ( i=0; i<n; ++i ) {
1297  for ( int j=0; j<4; ++j ) {
1298  table_short[16*i+6-2*j] = table_noshort[16*i+6-2*j] = vdwa_table[4*i+j];
1299  table_short[16*i+7-2*j] = table_noshort[16*i+7-2*j] = vdwb_table[4*i+j];
1300  table_short[16*i+8+3-j] = fast_table[4*i+j];
1301  table_short[16*i+12+3-j] = scor_table[4*i+j];
1302  table_noshort[16*i+8+3-j] = corr_table[4*i+j];
1303  table_noshort[16*i+12+3-j] = full_table[4*i+j];
1304  }
1305  }
1306 #endif
1307 
1308  for ( i=0; i<n; ++i ) {
1309  table_short[16*i+0] = table_noshort[16*i+0] = -6.*vdwa_table[4*i+3];
1310  table_short[16*i+1] = table_noshort[16*i+1] = -4.*vdwa_table[4*i+2];
1311  table_short[16*i+2] = table_noshort[16*i+2] = -2.*vdwa_table[4*i+1];
1312  table_short[16*i+3] = table_noshort[16*i+3] = -1.*vdwa_table[4*i+0];
1313 
1314  table_short[16*i+4] = table_noshort[16*i+4] = -6.*vdwb_table[4*i+3];
1315  table_short[16*i+5] = table_noshort[16*i+5] = -4.*vdwb_table[4*i+2];
1316  table_short[16*i+6] = table_noshort[16*i+6] = -2.*vdwb_table[4*i+1];
1317  table_short[16*i+7] = table_noshort[16*i+7] = -1.*vdwb_table[4*i+0];
1318 
1319  table_short[16*i+8] = -6.*fast_table[4*i+3];
1320  table_short[16*i+9] = -4.*fast_table[4*i+2];
1321  table_short[16*i+10] = -2.*fast_table[4*i+1];
1322  table_short[16*i+11] = -1.*fast_table[4*i+0];
1323 
1324  table_noshort[16*i+8] = -6.*corr_table[4*i+3];
1325  table_noshort[16*i+9] = -4.*corr_table[4*i+2];
1326  table_noshort[16*i+10] = -2.*corr_table[4*i+1];
1327  table_noshort[16*i+11] = -1.*corr_table[4*i+0];
1328 
1329  table_short[16*i+12] = -6.*scor_table[4*i+3];
1330  table_short[16*i+13] = -4.*scor_table[4*i+2];
1331  table_short[16*i+14] = -2.*scor_table[4*i+1];
1332  table_short[16*i+15] = -1.*scor_table[4*i+0];
1333 
1334  table_noshort[16*i+12] = -6.*full_table[4*i+3];
1335  table_noshort[16*i+13] = -4.*full_table[4*i+2];
1336  table_noshort[16*i+14] = -2.*full_table[4*i+1];
1337  table_noshort[16*i+15] = -1.*full_table[4*i+0];
1338  }
1339 
1340 #if 0
1341  char fname[100];
1342  sprintf(fname,"/tmp/namd.table.pe%d.dat",CkMyPe());
1343  FILE *f = fopen(fname,"w");
1344  for ( i=0; i<(n-1); ++i ) {
1345  const BigReal r2_base = r2_delta * ( 1 << (i/64) );
1346  const BigReal r2_del = r2_base / 64.0;
1347  const BigReal r2 = r2_base - r2_delta + r2_del * (i%64);
1348  BigReal *t;
1349  if ( r2 + r2_delta != r2_table[i] ) fprintf(f,"r2 error! ");
1350  fprintf(f,"%g",r2);
1351  t = fast_table + 4*i;
1352  fprintf(f," %g %g %g %g", t[0], t[1], t[2], t[3]);
1353  t = scor_table + 4*i;
1354  fprintf(f," %g %g %g %g", t[0], t[1], t[2], t[3]);
1355  t = slow_table + 4*i;
1356  fprintf(f," %g %g %g %g", t[0], t[1], t[2], t[3]);
1357  t = corr_table + 4*i;
1358  fprintf(f," %g %g %g %g", t[0], t[1], t[2], t[3]);
1359  t = full_table + 4*i;
1360  fprintf(f," %g %g %g %g", t[0], t[1], t[2], t[3]);
1361  t = vdwa_table + 4*i;
1362  fprintf(f," %g %g %g %g", t[0], t[1], t[2], t[3]);
1363  t = vdwb_table + 4*i;
1364  fprintf(f," %g %g %g %g", t[0], t[1], t[2], t[3]);
1365  fprintf(f,"\n");
1366  }
1367  fclose(f);
1368 #endif
1369 
1370  //Flip slow table to match table_four_i
1371  for ( i=0; i<n; ++i ) {
1372  BigReal tmp0, tmp1, tmp2, tmp3;
1373  tmp0 = slow_table [i*4 + 0];
1374  tmp1 = slow_table [i*4 + 1];
1375  tmp2 = slow_table [i*4 + 2];
1376  tmp3 = slow_table [i*4 + 3];
1377 
1378  slow_table [i*4 + 0] = tmp3;
1379  slow_table [i*4 + 1] = tmp2;
1380  slow_table [i*4 + 2] = tmp1;
1381  slow_table [i*4 + 3] = tmp0;
1382  }
1383 
1384  #ifdef NAMD_MIC
1385  send_build_mic_force_table();
1386  #endif
1387 }
static Node * Object()
Definition: Node.h:86
static void calc_pair_fullelect_pprof(nonbonded *)
static BigReal * fast_table
#define SCALED14
Definition: SimParameters.h:46
static void calc_pair_energy_merge_fullelect_tabener(nonbonded *)
static void calc_self_energy_go(nonbonded *)
std::ostream & iINFO(std::ostream &s)
Definition: InfoStream.C:81
static void calc_self_energy_merge_fullelect_ti(nonbonded *)
static BigReal * scor_table
static void calc_self_energy_disp_fullelect(nonbonded *)
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 *)
int columnsize
Definition: Parameters.h:320
static void calc_self_energy_merge_fullelect_int(nonbonded *)
static void calc_self_energy_slow_fullelect(nonbonded *)
#define XPLOR
Definition: SimParameters.h:58
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(* calcDispPair)(nonbonded *)
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 *)
#define SHARP
Definition: SimParameters.h:57
static void(* calcSelf)(nonbonded *)
static void calc_pair_merge_fullelect_tabener(nonbonded *)
static void calc_self_les(nonbonded *)
SimParameters * simParameters
Definition: Node.h:181
static void calc_pair_merge_fullelect_go(nonbonded *)
#define SPLIT_NONE
static void calc_pair_energy_merge_fullelect(nonbonded *)
static void calc_pair_slow_fullelect_pprof(nonbonded *)
static void calc_pair_energy_disp_merge_fullelect(nonbonded *)
static const Molecule * mol
static void calc_pair_energy_fullelect_fep(nonbonded *)
static void calc_self_energy_fullelect_pprof(nonbonded *)
float Real
Definition: common.h:118
static void calc_self_energy_fullelect_les(nonbonded *)
static void calc_self_energy_fullelect_ti(nonbonded *)
std::ostream & endi(std::ostream &s)
Definition: InfoStream.C:54
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 calc_pair_disp_fullelect(nonbonded *)
static void calc_pair_slow_fullelect(nonbonded *)
static void calc_pair(nonbonded *)
static void calc_self_go(nonbonded *)
#define iout
Definition: InfoStream.h:51
static void(* calcFullDispSelfEnergy)(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 void(* calcMergePairEnergy)(nonbonded *)
static void calc_pair_energy_go(nonbonded *)
static void calc_pair_merge_fullelect_ti(nonbonded *)
#define C1
Definition: SimParameters.h:59
static void calc_self_disp_merge_fullelect(nonbonded *)
static BigReal * full_table
static void calc_pair_merge_fullelect_les(nonbonded *)
static void calc_pair_slow_fullelect_go(nonbonded *)
#define SPLIT_MARTINI
static void calc_pair_energy_merge_fullelect_fep(nonbonded *)
static void(* calcSlowPairEnergy)(nonbonded *)
static void(* calcPair)(nonbonded *)
static void(* calcMergeDispPairEnergy)(nonbonded *)
static void calc_self_energy_disp_merge_fullelect(nonbonded *)
static void(* calcSlowPair)(nonbonded *)
#define SPLIT_SHIFT
static void calc_pair_energy_fullelect_go(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 void calc_pair_energy_pprof(nonbonded *)
static BigReal * table_noshort
static void calc_pair_energy_disp_fullelect(nonbonded *)
static void calc_self_energy_slow_fullelect_tabener(nonbonded *)
void NAMD_bug(const char *err_msg)
Definition: common.C:196
static void calc_self_energy_fullelect_tabener(nonbonded *)
static void calc_pair_energy_int(nonbonded *)
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_disp_merge_fullelect(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
#define C2
Definition: SimParameters.h:60
int Bool
Definition: common.h:142
static void calc_pair_pprof(nonbonded *)
static void calc_pair_energy_fullelect_ti(nonbonded *)
int get_table_dim() const
Definition: LJTable.h:44
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 void calc_error(nonbonded *)
static void calc_self_energy_fullelect_go(nonbonded *)
static void(* calcDispSelfEnergy)(nonbonded *)
int get_vdw_pair_params(Index ind1, Index ind2, Real *, Real *, Real *, Real *)
Definition: Parameters.C:4646
static void calc_self_fullelect_tabener(nonbonded *)
static void(* calcFullSelf)(nonbonded *)
void NAMD_die(const char *err_msg)
Definition: common.C:148
static void calc_self_merge_fullelect_ti(nonbonded *)
static void(* calcSlowSelf)(nonbonded *)
static void(* calcMergeDispSelf)(nonbonded *)
#define SPLIT_C1
static void calc_self_fullelect_les(nonbonded *)
static void calc_self_merge_fullelect_go(nonbonded *)
int get_num_vdw_params(void)
Definition: Parameters.h:602
static void(* calcDispSelf)(nonbonded *)
static void(* calcDispPairEnergy)(nonbonded *)
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 void(* calcSlowSelfEnergy)(nonbonded *)
static void calc_pair_energy_slow_fullelect_pprof(nonbonded *)
Parameters * parameters
Definition: Node.h:180
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 *)
#define simParams
Definition: Output.C:131
static void calc_self_merge_fullelect(nonbonded *)
static void(* calcFullDispPair)(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 void calc_pair_energy_fullelect_pprof(nonbonded *)
static void calc_pair_energy_disp(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 *)
#define SPLIT_C2
BigReal * table_ener
Definition: Parameters.h:321
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 calc_self_disp_fullelect(nonbonded *)
static void(* calcFullPairEnergy)(nonbonded *)
static BigReal * corr_table
static void calc_self_energy_disp(nonbonded *)
static BigReal * table_short
static void calc_self(nonbonded *)
#define SPOLY(pg, pdg, ra, split)
Definition: msm_defn.h:140
static void calc_self_fullelect_ti(nonbonded *)
static void calc_self_disp(nonbonded *)
static void calc_pair_fullelect_tabener(nonbonded *)
static void calc_pair_energy_merge_fullelect_ti(nonbonded *)
std::ostream & iERROR(std::ostream &s)
Definition: InfoStream.C:83
static void(* calcFullDispPairEnergy)(nonbonded *)
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(* calcFullDispSelf)(nonbonded *)
static void calc_self_energy(nonbonded *)
void get_vdw_params(Real *sigma, Real *epsilon, Real *sigma14, Real *epsilon14, Index index)
Definition: Parameters.h:568
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 *)
Molecule * molecule
Definition: Node.h:179
static void calc_pair_slow_fullelect_tabener(nonbonded *)
static void calc_pair_energy_fullelect(nonbonded *)
static void calc_self_merge_fullelect_pprof(nonbonded *)
static void calc_self_energy_slow_fullelect_go(nonbonded *)
static void calc_pair_disp(nonbonded *)
static void calc_pair_energy_slow_fullelect_ti(nonbonded *)
static void(* calcMergeSelf)(nonbonded *)
static void calc_self_energy_slow_fullelect_les(nonbonded *)
double BigReal
Definition: common.h:123
static void(* calcFullSelfEnergy)(nonbonded *)
static void calc_pair_fullelect(nonbonded *)
static void calc_self_slow_fullelect_les(nonbonded *)

◆ square()

static BigReal ComputeNonbondedUtil::square ( const BigReal x,
const BigReal y,
const BigReal z 
)
inlinestatic

Definition at line 441 of file ComputeNonbondedUtil.h.

444  {
445  return(x*x+y*y+z*z);
446  }

◆ submitPressureProfileData()

void ComputeNonbondedUtil::submitPressureProfileData ( BigReal data,
SubmitReduction reduction 
)
static

Definition at line 231 of file ComputeNonbondedUtil.C.

References SubmitReduction::add(), pressureProfileAtomTypes, and pressureProfileSlabs.

Referenced by ComputeNonbondedPair::doForce(), and ComputeNonbondedSelf::doForce().

233 {
234  if (!reduction) return;
235  int numAtomTypes = pressureProfileAtomTypes;
236  // For ease of calculation we stored interactions between types
237  // i and j in (ni+j). For efficiency now we coalesce the
238  // cross interactions so that just i<=j are stored.
239  const int arraysize = 3*pressureProfileSlabs;
240  size_t nelems = arraysize*(numAtomTypes*(numAtomTypes+1))/2;
241  BigReal *arr = new BigReal[nelems];
242  memset(arr, 0, nelems*sizeof(BigReal));
243 
244  int i, j;
245  for (i=0; i<numAtomTypes; i++) {
246  for (j=0; j<numAtomTypes; j++) {
247  int ii=i;
248  int jj=j;
249  if (ii > jj) { int tmp=ii; ii=jj; jj=tmp; }
250  const int reductionOffset = (ii*numAtomTypes - (ii*(ii+1))/2 + jj)*arraysize;
251  for (int k=0; k<arraysize; k++) {
252  arr[reductionOffset+k] += data[k];
253  }
254  data += arraysize;
255  }
256  }
257  // copy into reduction
258  reduction->add(nelems, arr);
259  delete [] arr;
260 }
void add(int nitems, const BigReal *arr)
Definition: ReductionMgr.h:361
double BigReal
Definition: common.h:123

◆ submitReductionData()

void ComputeNonbondedUtil::submitReductionData ( BigReal data,
SubmitReduction reduction 
)
static

Definition at line 198 of file ComputeNonbondedUtil.C.

References ADD_TENSOR, ADD_VECTOR, electEnergyIndex, electEnergyIndex_s, electEnergyIndex_ti_1, electEnergyIndex_ti_2, exclChecksumIndex, fullElectEnergyIndex, fullElectEnergyIndex_s, fullElectEnergyIndex_ti_1, fullElectEnergyIndex_ti_2, fullVdwEnergyIndex, goNativeEnergyIndex, goNonnativeEnergyIndex, groGaussEnergyIndex, groLJEnergyIndex, SubmitReduction::item(), pairlistWarningIndex, REDUCTION_COMPUTE_CHECKSUM, REDUCTION_ELECT_ENERGY, REDUCTION_ELECT_ENERGY_F, REDUCTION_ELECT_ENERGY_SLOW, REDUCTION_ELECT_ENERGY_SLOW_F, REDUCTION_ELECT_ENERGY_SLOW_TI_1, REDUCTION_ELECT_ENERGY_SLOW_TI_2, REDUCTION_ELECT_ENERGY_TI_1, REDUCTION_ELECT_ENERGY_TI_2, REDUCTION_EXCLUSION_CHECKSUM, REDUCTION_GO_NATIVE_ENERGY, REDUCTION_GO_NONNATIVE_ENERGY, REDUCTION_GRO_GAUSS_ENERGY, REDUCTION_GRO_LJ_ENERGY, REDUCTION_LJ_ENERGY, REDUCTION_LJ_ENERGY_F, REDUCTION_LJ_ENERGY_SLOW, REDUCTION_LJ_ENERGY_TI_1, REDUCTION_LJ_ENERGY_TI_2, REDUCTION_PAIRLIST_WARNINGS, vdwEnergyIndex, vdwEnergyIndex_s, vdwEnergyIndex_ti_1, and vdwEnergyIndex_ti_2.

Referenced by ComputeNonbondedPair::doForce(), and ComputeNonbondedSelf::doForce().

199 {
202  reduction->item(REDUCTION_ELECT_ENERGY) += data[electEnergyIndex];
204  reduction->item(REDUCTION_LJ_ENERGY) += data[vdwEnergyIndex];
205  reduction->item(REDUCTION_LJ_ENERGY_SLOW) += data[fullVdwEnergyIndex];
206  // Ported by JLai
207  reduction->item(REDUCTION_GRO_LJ_ENERGY) += data[groLJEnergyIndex];
211  // End of port -- JLai
212 //fepb
213  reduction->item(REDUCTION_ELECT_ENERGY_F) += data[electEnergyIndex_s];
215  reduction->item(REDUCTION_LJ_ENERGY_F) += data[vdwEnergyIndex_s];
216 
223 //fepe
224  ADD_TENSOR(reduction,REDUCTION_VIRIAL_NBOND,data,virialIndex);
225  ADD_TENSOR(reduction,REDUCTION_VIRIAL_SLOW,data,fullElectVirialIndex);
226  ADD_VECTOR(reduction,REDUCTION_PAIR_VDW_FORCE,data,pairVDWForceIndex);
227  ADD_VECTOR(reduction,REDUCTION_PAIR_ELECT_FORCE,data,pairElectForceIndex);
228  reduction->item(REDUCTION_COMPUTE_CHECKSUM) += 1.;
229 }
#define ADD_TENSOR(R, RL, D, DL)
Definition: ReductionMgr.h:33
BigReal & item(int i)
Definition: ReductionMgr.h:336
#define ADD_VECTOR(R, RL, D, DL)
Definition: ReductionMgr.h:23

Member Data Documentation

◆ A12_f

float ComputeNonbondedUtil::A12_f
static

Definition at line 385 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ A6_f

float ComputeNonbondedUtil::A6_f
static

Definition at line 382 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ accelMDOn

Bool ComputeNonbondedUtil::accelMDOn
static

Definition at line 419 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ alchDecouple

Bool ComputeNonbondedUtil::alchDecouple
static

Definition at line 402 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ alchFepOn

Bool ComputeNonbondedUtil::alchFepOn
static

Definition at line 397 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ alchThermIntOn

Bool ComputeNonbondedUtil::alchThermIntOn
static

Definition at line 398 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ alchVdwShiftCoeff

BigReal ComputeNonbondedUtil::alchVdwShiftCoeff
static

Definition at line 400 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ alchWCAOn

Bool ComputeNonbondedUtil::alchWCAOn
static

Definition at line 399 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ B12_f

float ComputeNonbondedUtil::B12_f
static

Definition at line 386 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ B6_f

float ComputeNonbondedUtil::B6_f
static

Definition at line 383 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ c0

BigReal ComputeNonbondedUtil::c0
static

Definition at line 388 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ c1

BigReal ComputeNonbondedUtil::c1
static

Definition at line 389 of file ComputeNonbondedUtil.h.

Referenced by CudaComputeNonbonded::getNonbondedCoef(), and select().

◆ C12_f

float ComputeNonbondedUtil::C12_f
static

Definition at line 387 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ c3

BigReal ComputeNonbondedUtil::c3
static

Definition at line 390 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ c5

BigReal ComputeNonbondedUtil::c5
static

Definition at line 391 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ c6

BigReal ComputeNonbondedUtil::c6
static

Definition at line 392 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ C6_f

float ComputeNonbondedUtil::C6_f
static

Definition at line 384 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ c7

BigReal ComputeNonbondedUtil::c7
static

Definition at line 393 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ c8

BigReal ComputeNonbondedUtil::c8
static

Definition at line 394 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ calcDispPair

void(* ComputeNonbondedUtil::calcDispPair)(nonbonded *)
static

Definition at line 253 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedPair::doForce(), and select().

◆ calcDispPairEnergy

void(* ComputeNonbondedUtil::calcDispPairEnergy)(nonbonded *)
static

Definition at line 254 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedPair::doForce(), and select().

◆ calcDispSelf

void(* ComputeNonbondedUtil::calcDispSelf)(nonbonded *)
static

Definition at line 255 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedSelf::doForce(), and select().

◆ calcDispSelfEnergy

void(* ComputeNonbondedUtil::calcDispSelfEnergy)(nonbonded *)
static

Definition at line 256 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedSelf::doForce(), and select().

◆ calcFullDispPair

void(* ComputeNonbondedUtil::calcFullDispPair)(nonbonded *)
static

Definition at line 263 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedPair::doForce(), and select().

◆ calcFullDispPairEnergy

void(* ComputeNonbondedUtil::calcFullDispPairEnergy)(nonbonded *)
static

Definition at line 264 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedPair::doForce(), and select().

◆ calcFullDispSelf

void(* ComputeNonbondedUtil::calcFullDispSelf)(nonbonded *)
static

Definition at line 265 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedSelf::doForce(), and select().

◆ calcFullDispSelfEnergy

void(* ComputeNonbondedUtil::calcFullDispSelfEnergy)(nonbonded *)
static

Definition at line 266 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedSelf::doForce(), and select().

◆ calcFullPair

void(* ComputeNonbondedUtil::calcFullPair)(nonbonded *)
static

Definition at line 258 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedPair::doForce(), and select().

◆ calcFullPairEnergy

void(* ComputeNonbondedUtil::calcFullPairEnergy)(nonbonded *)
static

Definition at line 259 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedPair::doForce(), and select().

◆ calcFullSelf

void(* ComputeNonbondedUtil::calcFullSelf)(nonbonded *)
static

Definition at line 260 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedSelf::doForce(), and select().

◆ calcFullSelfEnergy

void(* ComputeNonbondedUtil::calcFullSelfEnergy)(nonbonded *)
static

Definition at line 261 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedSelf::doForce(), and select().

◆ calcMergeDispPair

void(* ComputeNonbondedUtil::calcMergeDispPair)(nonbonded *)
static

Definition at line 273 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedPair::doForce(), and select().

◆ calcMergeDispPairEnergy

void(* ComputeNonbondedUtil::calcMergeDispPairEnergy)(nonbonded *)
static

Definition at line 274 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedPair::doForce(), and select().

◆ calcMergeDispSelf

void(* ComputeNonbondedUtil::calcMergeDispSelf)(nonbonded *)
static

Definition at line 275 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedSelf::doForce(), and select().

◆ calcMergeDispSelfEnergy

void(* ComputeNonbondedUtil::calcMergeDispSelfEnergy)(nonbonded *)
static

Definition at line 276 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedSelf::doForce(), and select().

◆ calcMergePair

void(* ComputeNonbondedUtil::calcMergePair)(nonbonded *)
static

Definition at line 268 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedPair::doForce(), and select().

◆ calcMergePairEnergy

void(* ComputeNonbondedUtil::calcMergePairEnergy)(nonbonded *)
static

Definition at line 269 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedPair::doForce(), and select().

◆ calcMergeSelf

void(* ComputeNonbondedUtil::calcMergeSelf)(nonbonded *)
static

Definition at line 270 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedSelf::doForce(), and select().

◆ calcMergeSelfEnergy

void(* ComputeNonbondedUtil::calcMergeSelfEnergy)(nonbonded *)
static

Definition at line 271 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedSelf::doForce(), and select().

◆ calcPair

void(* ComputeNonbondedUtil::calcPair)(nonbonded *)
static

Definition at line 248 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedPair::doForce(), and select().

◆ calcPairEnergy

void(* ComputeNonbondedUtil::calcPairEnergy)(nonbonded *)
static

Definition at line 249 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedPair::doForce(), and select().

◆ calcSelf

void(* ComputeNonbondedUtil::calcSelf)(nonbonded *)
static

Definition at line 250 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedSelf::doForce(), and select().

◆ calcSelfEnergy

void(* ComputeNonbondedUtil::calcSelfEnergy)(nonbonded *)
static

Definition at line 251 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedSelf::doForce(), and select().

◆ calcSlowPair

void(* ComputeNonbondedUtil::calcSlowPair)(nonbonded *)
static

Definition at line 278 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedPair::doForce(), and select().

◆ calcSlowPairEnergy

void(* ComputeNonbondedUtil::calcSlowPairEnergy)(nonbonded *)
static

Definition at line 279 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedPair::doForce(), and select().

◆ calcSlowSelf

void(* ComputeNonbondedUtil::calcSlowSelf)(nonbonded *)
static

Definition at line 280 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedSelf::doForce(), and select().

◆ calcSlowSelfEnergy

void(* ComputeNonbondedUtil::calcSlowSelfEnergy)(nonbonded *)
static

Definition at line 281 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedSelf::doForce(), and select().

◆ columnsize

int ComputeNonbondedUtil::columnsize
static

Definition at line 309 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ commOnly

Bool ComputeNonbondedUtil::commOnly
static

Copyright (c) 1995, 1996, 1997, 1998, 1999, 2000 by The Board of Trustees of the University of Illinois. All rights reserved.

Definition at line 298 of file ComputeNonbondedUtil.h.

Referenced by ComputeNonbondedPair::doForce(), ComputeNonbondedSelf::doForce(), and select().

◆ corr_table

BigReal * ComputeNonbondedUtil::corr_table
static

Definition at line 318 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ cutoff

BigReal ComputeNonbondedUtil::cutoff
static

◆ cutoff2

BigReal ComputeNonbondedUtil::cutoff2
static

◆ cutoff2_f

float ComputeNonbondedUtil::cutoff2_f
static

Definition at line 303 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ cutoff_3

BigReal ComputeNonbondedUtil::cutoff_3
static

Definition at line 373 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ cutoff_3_f

float ComputeNonbondedUtil::cutoff_3_f
static

Definition at line 379 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ cutoff_6

BigReal ComputeNonbondedUtil::cutoff_6
static

Definition at line 374 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ cutoff_6_f

float ComputeNonbondedUtil::cutoff_6_f
static

Definition at line 380 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ dielectric_1

BigReal ComputeNonbondedUtil::dielectric_1
static

◆ drudeNbthole

Bool ComputeNonbondedUtil::drudeNbthole
static

Definition at line 421 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ ewaldcof

BigReal ComputeNonbondedUtil::ewaldcof
static

◆ fast_table

BigReal * ComputeNonbondedUtil::fast_table
static

Definition at line 315 of file ComputeNonbondedUtil.h.

Referenced by ExclElem::computeForce(), and select().

◆ fixedAtomsOn

Bool ComputeNonbondedUtil::fixedAtomsOn
static

Definition at line 299 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ full_table

BigReal * ComputeNonbondedUtil::full_table
static

Definition at line 319 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ goForcesOn

Bool ComputeNonbondedUtil::goForcesOn
static

Definition at line 436 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ goGroPair

Bool ComputeNonbondedUtil::goGroPair
static

Definition at line 435 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ goMethod

int ComputeNonbondedUtil::goMethod
static

Definition at line 437 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ k_vdwa

BigReal ComputeNonbondedUtil::k_vdwa
static

Definition at line 371 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ k_vdwa_f

float ComputeNonbondedUtil::k_vdwa_f
static

Definition at line 377 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ k_vdwb

BigReal ComputeNonbondedUtil::k_vdwb
static

Definition at line 372 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ k_vdwb_f

float ComputeNonbondedUtil::k_vdwb_f
static

Definition at line 378 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ lambda_table

BigReal * ComputeNonbondedUtil::lambda_table = 0
static

Definition at line 408 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ lesFactor

int ComputeNonbondedUtil::lesFactor
static

Definition at line 405 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ lesOn

Bool ComputeNonbondedUtil::lesOn
static

Definition at line 404 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ lesScaling

BigReal ComputeNonbondedUtil::lesScaling
static

Definition at line 406 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ LJewaldcof

BigReal ComputeNonbondedUtil::LJewaldcof
static

Definition at line 426 of file ComputeNonbondedUtil.h.

Referenced by ComputePme::doWork(), ComputePmeMgr::gridCalc2R(), and select().

◆ ljTable

const LJTable * ComputeNonbondedUtil::ljTable = 0
static

Definition at line 305 of file ComputeNonbondedUtil.h.

Referenced by ExclElem::computeForce(), dumpbench(), and select().

◆ mol

const Molecule * ComputeNonbondedUtil::mol
static

Definition at line 306 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ pairInteractionOn

Bool ComputeNonbondedUtil::pairInteractionOn
static

Definition at line 410 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ pairInteractionSelf

Bool ComputeNonbondedUtil::pairInteractionSelf
static

Definition at line 411 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ pi_ewaldcof

BigReal ComputeNonbondedUtil::pi_ewaldcof
static

Definition at line 425 of file ComputeNonbondedUtil.h.

Referenced by CudaComputeNonbonded::getNonbondedCoef(), and select().

◆ pressureProfileAtomTypes

int ComputeNonbondedUtil::pressureProfileAtomTypes
static

◆ pressureProfileMin

BigReal ComputeNonbondedUtil::pressureProfileMin
static

◆ pressureProfileOn

Bool ComputeNonbondedUtil::pressureProfileOn
static

◆ pressureProfileSlabs

int ComputeNonbondedUtil::pressureProfileSlabs
static

◆ pressureProfileThickness

BigReal ComputeNonbondedUtil::pressureProfileThickness
static

◆ qmForcesOn

Bool ComputeNonbondedUtil::qmForcesOn
static

Definition at line 300 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ r2_delta

BigReal ComputeNonbondedUtil::r2_delta
static

◆ r2_delta_1

BigReal ComputeNonbondedUtil::r2_delta_1
static

Definition at line 307 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ r2_delta_exp

int ComputeNonbondedUtil::r2_delta_exp
static

◆ r2_table

BigReal * ComputeNonbondedUtil::r2_table
static

◆ rowsize

int ComputeNonbondedUtil::rowsize
static

Definition at line 308 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ scale14

BigReal ComputeNonbondedUtil::scale14
static

◆ scaling

BigReal ComputeNonbondedUtil::scaling
static

◆ scor_table

BigReal * ComputeNonbondedUtil::scor_table
static

Definition at line 316 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ slow_table

BigReal * ComputeNonbondedUtil::slow_table
static

Definition at line 317 of file ComputeNonbondedUtil.h.

Referenced by ExclElem::computeForce(), and select().

◆ switchOn

BigReal ComputeNonbondedUtil::switchOn
static

Definition at line 366 of file ComputeNonbondedUtil.h.

Referenced by CudaComputeNonbonded::getNonbondedCoef(), and select().

◆ switchOn2

BigReal ComputeNonbondedUtil::switchOn2
static

◆ switchOn_1

BigReal ComputeNonbondedUtil::switchOn_1
static

Definition at line 367 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ switchOn_f

float ComputeNonbondedUtil::switchOn_f
static

Definition at line 381 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ table_alloc

BigReal * ComputeNonbondedUtil::table_alloc = 0
static

Definition at line 311 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ table_ener

BigReal * ComputeNonbondedUtil::table_ener = 0
static

Definition at line 312 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ table_length

int ComputeNonbondedUtil::table_length
static

Definition at line 323 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ table_noshort

BigReal * ComputeNonbondedUtil::table_noshort
static

Definition at line 314 of file ComputeNonbondedUtil.h.

Referenced by ExclElem::computeForce(), and select().

◆ table_short

BigReal * ComputeNonbondedUtil::table_short
static

Definition at line 313 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ v_vdwa

BigReal ComputeNonbondedUtil::v_vdwa
static

Definition at line 369 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ v_vdwa_f

float ComputeNonbondedUtil::v_vdwa_f
static

Definition at line 375 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ v_vdwb

BigReal ComputeNonbondedUtil::v_vdwb
static

Definition at line 370 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ v_vdwb_f

float ComputeNonbondedUtil::v_vdwb_f
static

Definition at line 376 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ vdw_switch_mode

int ComputeNonbondedUtil::vdw_switch_mode
static

Definition at line 432 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ vdwa_table

BigReal * ComputeNonbondedUtil::vdwa_table
static

Definition at line 320 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ vdwb_table

BigReal * ComputeNonbondedUtil::vdwb_table
static

Definition at line 321 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ vdwForceSwitching

Bool ComputeNonbondedUtil::vdwForceSwitching
static

Definition at line 401 of file ComputeNonbondedUtil.h.

Referenced by select().


The documentation for this class was generated from the following files: