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 ExclElem

Public Types

enum  {
  exclChecksumIndex, pairlistWarningIndex, electEnergyIndex, fullElectEnergyIndex,
  vdwEnergyIndex, 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_fullelect (nonbonded *)
 
static void calc_pair_energy_fullelect (nonbonded *)
 
static void calc_pair_merge_fullelect (nonbonded *)
 
static void calc_pair_energy_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_fullelect (nonbonded *)
 
static void calc_self_energy_fullelect (nonbonded *)
 
static void calc_self_merge_fullelect (nonbonded *)
 
static void calc_self_energy_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(* calcFullPair )(nonbonded *)
 
static void(* calcFullPairEnergy )(nonbonded *)
 
static void(* calcFullSelf )(nonbonded *)
 
static void(* calcFullSelfEnergy )(nonbonded *)
 
static void(* calcMergePair )(nonbonded *)
 
static void(* calcMergePairEnergy )(nonbonded *)
 
static void(* calcMergeSelf )(nonbonded *)
 
static void(* calcMergeSelfEnergy )(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 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 
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 269 of file ComputeNonbondedUtil.h.

272 //sd-db
276 //sd-de
277  TENSOR(virialIndex), TENSOR(fullElectVirialIndex),
278  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 245 of file ComputeNonbondedUtil.C.

References NAMD_bug().

Referenced by select().

245  {
246  NAMD_bug("Tried to call missing nonbonded compute routine.");
247 }
void NAMD_bug(const char *err_msg)
Definition: common.C:195

◆ calc_pair()

static void ComputeNonbondedUtil::calc_pair ( nonbonded )
static

Referenced by select().

◆ calc_pair_energy()

static void ComputeNonbondedUtil::calc_pair_energy ( 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_energy()

static void ComputeNonbondedUtil::calc_self_energy ( 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:77
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:156
Charge charge
Definition: NamdTypes.h:78
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:81
#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 249 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_energy(), 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_energy(), 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(), calcFullPair, calcFullPairEnergy, calcFullSelf, calcFullSelfEnergy, 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, 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().

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

428  {
429  return(x*x+y*y+z*z);
430  }

◆ submitPressureProfileData()

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

Definition at line 214 of file ComputeNonbondedUtil.C.

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

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

216 {
217  if (!reduction) return;
218  int numAtomTypes = pressureProfileAtomTypes;
219  // For ease of calculation we stored interactions between types
220  // i and j in (ni+j). For efficiency now we coalesce the
221  // cross interactions so that just i<=j are stored.
222  const int arraysize = 3*pressureProfileSlabs;
223  size_t nelems = arraysize*(numAtomTypes*(numAtomTypes+1))/2;
224  BigReal *arr = new BigReal[nelems];
225  memset(arr, 0, nelems*sizeof(BigReal));
226 
227  int i, j;
228  for (i=0; i<numAtomTypes; i++) {
229  for (j=0; j<numAtomTypes; j++) {
230  int ii=i;
231  int jj=j;
232  if (ii > jj) { int tmp=ii; ii=jj; jj=tmp; }
233  const int reductionOffset = (ii*numAtomTypes - (ii*(ii+1))/2 + jj)*arraysize;
234  for (int k=0; k<arraysize; k++) {
235  arr[reductionOffset+k] += data[k];
236  }
237  data += arraysize;
238  }
239  }
240  // copy into reduction
241  reduction->add(nelems, arr);
242  delete [] arr;
243 }
void add(int nitems, const BigReal *arr)
Definition: ReductionMgr.h:321
double BigReal
Definition: common.h:123

◆ submitReductionData()

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

Definition at line 182 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, 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_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().

183 {
186  reduction->item(REDUCTION_ELECT_ENERGY) += data[electEnergyIndex];
188  reduction->item(REDUCTION_LJ_ENERGY) += data[vdwEnergyIndex];
189  // Ported by JLai
190  reduction->item(REDUCTION_GRO_LJ_ENERGY) += data[groLJEnergyIndex];
194  // End of port -- JLai
195 //fepb
196  reduction->item(REDUCTION_ELECT_ENERGY_F) += data[electEnergyIndex_s];
198  reduction->item(REDUCTION_LJ_ENERGY_F) += data[vdwEnergyIndex_s];
199 
206 //fepe
207  ADD_TENSOR(reduction,REDUCTION_VIRIAL_NBOND,data,virialIndex);
208  ADD_TENSOR(reduction,REDUCTION_VIRIAL_SLOW,data,fullElectVirialIndex);
209  ADD_VECTOR(reduction,REDUCTION_PAIR_VDW_FORCE,data,pairVDWForceIndex);
210  ADD_VECTOR(reduction,REDUCTION_PAIR_ELECT_FORCE,data,pairElectForceIndex);
211  reduction->item(REDUCTION_COMPUTE_CHECKSUM) += 1.;
212 }
#define ADD_TENSOR(R, RL, D, DL)
Definition: ReductionMgr.h:33
BigReal & item(int i)
Definition: ReductionMgr.h:313
#define ADD_VECTOR(R, RL, D, DL)
Definition: ReductionMgr.h:23

Member Data Documentation

◆ A12_f

float ComputeNonbondedUtil::A12_f
static

Definition at line 370 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ A6_f

float ComputeNonbondedUtil::A6_f
static

Definition at line 367 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ accelMDOn

Bool ComputeNonbondedUtil::accelMDOn
static

Definition at line 404 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ alchDecouple

Bool ComputeNonbondedUtil::alchDecouple
static

Definition at line 387 of file ComputeNonbondedUtil.h.

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

◆ alchFepOn

Bool ComputeNonbondedUtil::alchFepOn
static

◆ alchThermIntOn

Bool ComputeNonbondedUtil::alchThermIntOn
static

◆ alchVdwShiftCoeff

BigReal ComputeNonbondedUtil::alchVdwShiftCoeff
static

Definition at line 385 of file ComputeNonbondedUtil.h.

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

◆ alchWCAOn

Bool ComputeNonbondedUtil::alchWCAOn
static

Definition at line 384 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ B12_f

float ComputeNonbondedUtil::B12_f
static

Definition at line 371 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ B6_f

float ComputeNonbondedUtil::B6_f
static

Definition at line 368 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ c0

BigReal ComputeNonbondedUtil::c0
static

Definition at line 373 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ c1

BigReal ComputeNonbondedUtil::c1
static

Definition at line 374 of file ComputeNonbondedUtil.h.

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

◆ C12_f

float ComputeNonbondedUtil::C12_f
static

Definition at line 372 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ c3

BigReal ComputeNonbondedUtil::c3
static

Definition at line 375 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ c5

BigReal ComputeNonbondedUtil::c5
static

Definition at line 376 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ c6

BigReal ComputeNonbondedUtil::c6
static

Definition at line 377 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ C6_f

float ComputeNonbondedUtil::C6_f
static

Definition at line 369 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ c7

BigReal ComputeNonbondedUtil::c7
static

Definition at line 378 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ c8

BigReal ComputeNonbondedUtil::c8
static

Definition at line 379 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ calcFullPair

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

Definition at line 253 of file ComputeNonbondedUtil.h.

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

◆ calcFullPairEnergy

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

Definition at line 254 of file ComputeNonbondedUtil.h.

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

◆ calcFullSelf

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

Definition at line 255 of file ComputeNonbondedUtil.h.

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

◆ calcFullSelfEnergy

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

Definition at line 256 of file ComputeNonbondedUtil.h.

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

◆ calcMergePair

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

Definition at line 258 of file ComputeNonbondedUtil.h.

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

◆ calcMergePairEnergy

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

Definition at line 259 of file ComputeNonbondedUtil.h.

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

◆ calcMergeSelf

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

Definition at line 260 of file ComputeNonbondedUtil.h.

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

◆ calcMergeSelfEnergy

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

Definition at line 261 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 263 of file ComputeNonbondedUtil.h.

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

◆ calcSlowPairEnergy

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

Definition at line 264 of file ComputeNonbondedUtil.h.

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

◆ calcSlowSelf

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

Definition at line 265 of file ComputeNonbondedUtil.h.

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

◆ calcSlowSelfEnergy

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

Definition at line 266 of file ComputeNonbondedUtil.h.

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

◆ columnsize

int ComputeNonbondedUtil::columnsize
static

Definition at line 294 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 283 of file ComputeNonbondedUtil.h.

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

◆ corr_table

BigReal * ComputeNonbondedUtil::corr_table
static

Definition at line 303 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 288 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ cutoff_3

BigReal ComputeNonbondedUtil::cutoff_3
static

Definition at line 358 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ cutoff_3_f

float ComputeNonbondedUtil::cutoff_3_f
static

Definition at line 364 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ cutoff_6

BigReal ComputeNonbondedUtil::cutoff_6
static

Definition at line 359 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ cutoff_6_f

float ComputeNonbondedUtil::cutoff_6_f
static

Definition at line 365 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ dielectric_1

BigReal ComputeNonbondedUtil::dielectric_1
static

◆ drudeNbthole

Bool ComputeNonbondedUtil::drudeNbthole
static

Definition at line 406 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ ewaldcof

BigReal ComputeNonbondedUtil::ewaldcof
static

◆ fast_table

BigReal * ComputeNonbondedUtil::fast_table
static

Definition at line 300 of file ComputeNonbondedUtil.h.

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

◆ fixedAtomsOn

Bool ComputeNonbondedUtil::fixedAtomsOn
static

Definition at line 284 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ full_table

BigReal * ComputeNonbondedUtil::full_table
static

Definition at line 304 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ goForcesOn

Bool ComputeNonbondedUtil::goForcesOn
static

Definition at line 420 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ goGroPair

Bool ComputeNonbondedUtil::goGroPair
static

Definition at line 419 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ goMethod

int ComputeNonbondedUtil::goMethod
static

Definition at line 421 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ k_vdwa

BigReal ComputeNonbondedUtil::k_vdwa
static

Definition at line 356 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ k_vdwa_f

float ComputeNonbondedUtil::k_vdwa_f
static

Definition at line 362 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ k_vdwb

BigReal ComputeNonbondedUtil::k_vdwb
static

Definition at line 357 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ k_vdwb_f

float ComputeNonbondedUtil::k_vdwb_f
static

Definition at line 363 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ lambda_table

BigReal * ComputeNonbondedUtil::lambda_table = 0
static

Definition at line 393 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ lesFactor

int ComputeNonbondedUtil::lesFactor
static

Definition at line 390 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ lesOn

Bool ComputeNonbondedUtil::lesOn
static

Definition at line 389 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ lesScaling

BigReal ComputeNonbondedUtil::lesScaling
static

Definition at line 391 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ ljTable

const LJTable * ComputeNonbondedUtil::ljTable = 0
static

Definition at line 290 of file ComputeNonbondedUtil.h.

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

◆ mol

const Molecule * ComputeNonbondedUtil::mol
static

Definition at line 291 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ pairInteractionOn

Bool ComputeNonbondedUtil::pairInteractionOn
static

Definition at line 395 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ pairInteractionSelf

Bool ComputeNonbondedUtil::pairInteractionSelf
static

Definition at line 396 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ pi_ewaldcof

BigReal ComputeNonbondedUtil::pi_ewaldcof
static

Definition at line 410 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 285 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 292 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 293 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ scale14

BigReal ComputeNonbondedUtil::scale14
static

Definition at line 350 of file ComputeNonbondedUtil.h.

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

◆ scaling

BigReal ComputeNonbondedUtil::scaling
static

◆ scor_table

BigReal * ComputeNonbondedUtil::scor_table
static

Definition at line 301 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ slow_table

BigReal * ComputeNonbondedUtil::slow_table
static

Definition at line 302 of file ComputeNonbondedUtil.h.

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

◆ switchOn

BigReal ComputeNonbondedUtil::switchOn
static

Definition at line 351 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 352 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ switchOn_f

float ComputeNonbondedUtil::switchOn_f
static

Definition at line 366 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ table_alloc

BigReal * ComputeNonbondedUtil::table_alloc = 0
static

Definition at line 296 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ table_ener

BigReal * ComputeNonbondedUtil::table_ener = 0
static

Definition at line 297 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ table_length

int ComputeNonbondedUtil::table_length
static

Definition at line 308 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ table_noshort

BigReal * ComputeNonbondedUtil::table_noshort
static

Definition at line 299 of file ComputeNonbondedUtil.h.

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

◆ table_short

BigReal * ComputeNonbondedUtil::table_short
static

Definition at line 298 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ v_vdwa

BigReal ComputeNonbondedUtil::v_vdwa
static

Definition at line 354 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ v_vdwa_f

float ComputeNonbondedUtil::v_vdwa_f
static

Definition at line 360 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ v_vdwb

BigReal ComputeNonbondedUtil::v_vdwb
static

Definition at line 355 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ v_vdwb_f

float ComputeNonbondedUtil::v_vdwb_f
static

Definition at line 361 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ vdw_switch_mode

int ComputeNonbondedUtil::vdw_switch_mode
static

Definition at line 416 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ vdwa_table

BigReal * ComputeNonbondedUtil::vdwa_table
static

Definition at line 305 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ vdwb_table

BigReal * ComputeNonbondedUtil::vdwb_table
static

Definition at line 306 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ vdwForceSwitching

Bool ComputeNonbondedUtil::vdwForceSwitching
static

Definition at line 386 of file ComputeNonbondedUtil.h.

Referenced by select().


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