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

#include <ComputeNonbondedUtil.h>

Inheritance diagram for ComputeNonbondedUtil:
ComputeLCPO ComputeNonbondedPair ComputeNonbondedSelf CudaComputeNonbonded

Public Types

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

Public Member Functions

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

Static Public Member Functions

static void select (void)
 
static void submitReductionData (BigReal *, SubmitReduction *)
 
static void submitPressureProfileData (BigReal *, SubmitReduction *)
 
static BigReal square (const BigReal &x, const BigReal &y, const BigReal &z)
 
static void calc_error (nonbonded *)
 
static void calc_pair (nonbonded *)
 
static void calc_pair_energy (nonbonded *)
 
static void calc_pair_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_merge_fullelect_fulldisp (nonbonded *)
 
static void calc_pair_energy_merge_fullelect_fulldisp (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_merge_fullelect_fulldisp (nonbonded *)
 
static void calc_self_energy_merge_fullelect_fulldisp (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(* calcMergeDispPair )(nonbonded *)
 
static void(* calcMergeDispPairEnergy )(nonbonded *)
 
static void(* calcMergeDispSelf )(nonbonded *)
 
static void(* calcMergeDispSelfEnergy )(nonbonded *)
 
static void(* calcSlowPair )(nonbonded *)
 
static void(* calcSlowPairEnergy )(nonbonded *)
 
static void(* calcSlowSelf )(nonbonded *)
 
static void(* calcSlowSelfEnergy )(nonbonded *)
 
static Bool commOnly
 
static Bool fixedAtomsOn
 
static Bool qmForcesOn
 
static BigReal cutoff
 
static BigReal cutoff2
 
static float cutoff2_f
 
static BigReal dielectric_1
 
static const LJTableljTable = 0
 
static const Moleculemol
 
static BigReal r2_delta
 
static BigReal r2_delta_1
 
static int rowsize
 
static int columnsize
 
static int r2_delta_exp
 
static BigRealtable_alloc = 0
 
static BigRealtable_ener = 0
 
static BigRealtable_short
 
static BigRealtable_noshort
 
static BigRealfast_table
 
static BigRealscor_table
 
static BigRealslow_table
 
static BigRealcorr_table
 
static BigRealfull_table
 
static BigRealvdwa_table
 
static BigRealvdwb_table
 
static BigRealr2_table
 
static int table_length
 
static BigReal scaling
 
static BigReal scale14
 
static BigReal switchOn
 
static BigReal switchOn_1
 
static BigReal switchOn2
 
static BigReal v_vdwa
 
static BigReal v_vdwb
 
static BigReal k_vdwa
 
static BigReal k_vdwb
 
static BigReal cutoff_3
 
static BigReal cutoff_6
 
static float v_vdwa_f
 
static float v_vdwb_f
 
static float k_vdwa_f
 
static float k_vdwb_f
 
static float cutoff_3_f
 
static float cutoff_6_f
 
static float switchOn_f
 
static float A6_f
 
static float B6_f
 
static float C6_f
 
static float A12_f
 
static float B12_f
 
static float C12_f
 
static BigReal c0
 
static BigReal c1
 
static BigReal c3
 
static BigReal c5
 
static BigReal c6
 
static BigReal c7
 
static BigReal c8
 
static Bool alchFepOn
 
static Bool alchThermIntOn
 
static Bool alchWCAOn
 
static BigReal alchVdwShiftCoeff
 
static Bool vdwForceSwitching
 
static Bool alchDecouple
 
static Bool lesOn
 
static int lesFactor
 
static BigReal lesScaling
 
static BigReallambda_table = 0
 
static Bool pairInteractionOn
 
static Bool pairInteractionSelf
 
static Bool pressureProfileOn
 
static int pressureProfileSlabs
 
static int pressureProfileAtomTypes
 
static BigReal pressureProfileThickness
 
static BigReal pressureProfileMin
 
static Bool accelMDOn
 
static Bool drudeNbthole
 
static BigReal ewaldcof
 
static BigReal pi_ewaldcof
 
static BigReal LJewaldcof
 
static int vdw_switch_mode
 
static Bool goGroPair
 
static Bool goForcesOn
 
static int goMethod
 

Detailed Description

Definition at line 240 of file ComputeNonbondedUtil.h.

Member Enumeration Documentation

◆ anonymous enum

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

Definition at line 274 of file ComputeNonbondedUtil.h.

277 //sd-db
281 //sd-de
282  TENSOR(virialIndex), TENSOR(fullElectVirialIndex),
283  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 252 of file ComputeNonbondedUtil.C.

References NAMD_bug().

Referenced by select().

252  {
253  NAMD_bug("Tried to call missing nonbonded compute routine.");
254 }
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_fulldisp()

static void ComputeNonbondedUtil::calc_pair_energy_merge_fullelect_fulldisp ( 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_fulldisp()

static void ComputeNonbondedUtil::calc_pair_merge_fullelect_fulldisp ( 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_fulldisp()

static void ComputeNonbondedUtil::calc_self_energy_merge_fullelect_fulldisp ( 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_fulldisp()

static void ComputeNonbondedUtil::calc_self_merge_fullelect_fulldisp ( nonbonded )
static

Referenced by select().

◆ calc_self_merge_fullelect_go()

static void ComputeNonbondedUtil::calc_self_merge_fullelect_go ( nonbonded )
static

Referenced by select().

◆ calc_self_merge_fullelect_les()

static void ComputeNonbondedUtil::calc_self_merge_fullelect_les ( nonbonded )
static

Referenced by select().

◆ calc_self_merge_fullelect_pprof()

static void ComputeNonbondedUtil::calc_self_merge_fullelect_pprof ( nonbonded )
static

Referenced by select().

◆ calc_self_merge_fullelect_tabener()

static void ComputeNonbondedUtil::calc_self_merge_fullelect_tabener ( nonbonded )
static

Referenced by select().

◆ calc_self_merge_fullelect_ti()

static void ComputeNonbondedUtil::calc_self_merge_fullelect_ti ( nonbonded )
static

Referenced by select().

◆ calc_self_pprof()

static void ComputeNonbondedUtil::calc_self_pprof ( nonbonded )
static

Referenced by select().

◆ calc_self_slow_fullelect()

static void ComputeNonbondedUtil::calc_self_slow_fullelect ( nonbonded )
static

Referenced by select().

◆ calc_self_slow_fullelect_go()

static void ComputeNonbondedUtil::calc_self_slow_fullelect_go ( nonbonded )
static

Referenced by select().

◆ calc_self_slow_fullelect_les()

static void ComputeNonbondedUtil::calc_self_slow_fullelect_les ( nonbonded )
static

Referenced by select().

◆ calc_self_slow_fullelect_pprof()

static void ComputeNonbondedUtil::calc_self_slow_fullelect_pprof ( nonbonded )
static

Referenced by select().

◆ calc_self_slow_fullelect_tabener()

static void ComputeNonbondedUtil::calc_self_slow_fullelect_tabener ( nonbonded )
static

Referenced by select().

◆ calc_self_slow_fullelect_ti()

static void ComputeNonbondedUtil::calc_self_slow_fullelect_ti ( nonbonded )
static

Referenced by select().

◆ calc_self_tabener()

static void ComputeNonbondedUtil::calc_self_tabener ( nonbonded )
static

Referenced by select().

◆ calc_self_ti()

static void ComputeNonbondedUtil::calc_self_ti ( nonbonded )
static

Referenced by select().

◆ calcGBIS()

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

Definition at line 261 of file ComputeGBIS.C.

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

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

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

◆ select()

void ComputeNonbondedUtil::select ( void  )
static

Definition at line 256 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_fulldisp(), 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_fulldisp(), 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_fulldisp(), 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_fulldisp(), 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, calcMergeDispPair, calcMergeDispPairEnergy, calcMergeDispSelf, calcMergeDispSelfEnergy, calcMergePair, calcMergePairEnergy, calcMergeSelf, calcMergeSelfEnergy, calcPair, calcPairEnergy, calcSelf, calcSelfEnergy, calcSlowPair, calcSlowPairEnergy, calcSlowSelf, calcSlowSelfEnergy, columnsize, Parameters::columnsize, commOnly, corr_table, cutoff, cutoff2, cutoff2_f, cutoff_3, cutoff_3_f, cutoff_6, cutoff_6_f, dielectric_1, drudeNbthole, endi(), ewaldcof, fast_table, fixedAtomsOn, full_table, Parameters::get_num_vdw_params(), LJTable::get_table_dim(), Parameters::get_vdw_pair_params(), Parameters::get_vdw_params(), goForcesOn, goGroPair, goMethod, iERROR(), iINFO(), iout, k_vdwa, k_vdwa_f, k_vdwb, k_vdwb_f, lambda_table, lesFactor, lesOn, lesScaling, LJewaldcof, ljTable, mol, Node::molecule, NAMD_bug(), NAMD_die(), Node::Object(), pairInteractionOn, pairInteractionSelf, Node::parameters, pi_ewaldcof, pressureProfileAtomTypes, pressureProfileOn, pressureProfileSlabs, qmForcesOn, r2_delta, r2_delta_1, r2_delta_exp, r2_table, rowsize, Parameters::rowsize, scale14, SCALED14, scaling, scor_table, SHARP, Node::simParameters, simParams, slow_table, SPLIT_C1, SPLIT_C2, SPLIT_MARTINI, SPLIT_NONE, SPLIT_SHIFT, SPOLY, switchOn, switchOn2, switchOn_1, switchOn_f, table_alloc, table_ener, Parameters::table_ener, table_length, table_noshort, table_short, v_vdwa, v_vdwa_f, v_vdwb, v_vdwb_f, vdw_switch_mode, VDW_SWITCH_MODE_ENERGY, VDW_SWITCH_MODE_FORCE, VDW_SWITCH_MODE_MARTINI, vdwa_table, vdwb_table, vdwForceSwitching, and XPLOR.

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

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

434  {
435  return(x*x+y*y+z*z);
436  }

◆ submitPressureProfileData()

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

Definition at line 221 of file ComputeNonbondedUtil.C.

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

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

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

◆ submitReductionData()

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

Definition at line 188 of file ComputeNonbondedUtil.C.

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

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

189 {
192  reduction->item(REDUCTION_ELECT_ENERGY) += data[electEnergyIndex];
194  reduction->item(REDUCTION_LJ_ENERGY) += data[vdwEnergyIndex];
195  reduction->item(REDUCTION_LJ_ENERGY_SLOW) += data[fullVdwEnergyIndex];
196  // Ported by JLai
197  reduction->item(REDUCTION_GRO_LJ_ENERGY) += data[groLJEnergyIndex];
201  // End of port -- JLai
202 //fepb
203  reduction->item(REDUCTION_ELECT_ENERGY_F) += data[electEnergyIndex_s];
205  reduction->item(REDUCTION_LJ_ENERGY_F) += data[vdwEnergyIndex_s];
206 
213 //fepe
214  ADD_TENSOR(reduction,REDUCTION_VIRIAL_NBOND,data,virialIndex);
215  ADD_TENSOR(reduction,REDUCTION_VIRIAL_SLOW,data,fullElectVirialIndex);
216  ADD_VECTOR(reduction,REDUCTION_PAIR_VDW_FORCE,data,pairVDWForceIndex);
217  ADD_VECTOR(reduction,REDUCTION_PAIR_ELECT_FORCE,data,pairElectForceIndex);
218  reduction->item(REDUCTION_COMPUTE_CHECKSUM) += 1.;
219 }
#define ADD_TENSOR(R, RL, D, DL)
Definition: ReductionMgr.h:33
BigReal & item(int i)
Definition: ReductionMgr.h:336
#define ADD_VECTOR(R, RL, D, DL)
Definition: ReductionMgr.h:23

Member Data Documentation

◆ A12_f

float ComputeNonbondedUtil::A12_f
static

Definition at line 375 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ A6_f

float ComputeNonbondedUtil::A6_f
static

Definition at line 372 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ accelMDOn

Bool ComputeNonbondedUtil::accelMDOn
static

Definition at line 409 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ alchDecouple

Bool ComputeNonbondedUtil::alchDecouple
static

Definition at line 392 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ alchFepOn

Bool ComputeNonbondedUtil::alchFepOn
static

Definition at line 387 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ alchThermIntOn

Bool ComputeNonbondedUtil::alchThermIntOn
static

Definition at line 388 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ alchVdwShiftCoeff

BigReal ComputeNonbondedUtil::alchVdwShiftCoeff
static

Definition at line 390 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ alchWCAOn

Bool ComputeNonbondedUtil::alchWCAOn
static

Definition at line 389 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ B12_f

float ComputeNonbondedUtil::B12_f
static

Definition at line 376 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ B6_f

float ComputeNonbondedUtil::B6_f
static

Definition at line 373 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ c0

BigReal ComputeNonbondedUtil::c0
static

Definition at line 378 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ c1

BigReal ComputeNonbondedUtil::c1
static

Definition at line 379 of file ComputeNonbondedUtil.h.

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

◆ C12_f

float ComputeNonbondedUtil::C12_f
static

Definition at line 377 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ c3

BigReal ComputeNonbondedUtil::c3
static

Definition at line 380 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ c5

BigReal ComputeNonbondedUtil::c5
static

Definition at line 381 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ c6

BigReal ComputeNonbondedUtil::c6
static

Definition at line 382 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ C6_f

float ComputeNonbondedUtil::C6_f
static

Definition at line 374 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ c7

BigReal ComputeNonbondedUtil::c7
static

Definition at line 383 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ c8

BigReal ComputeNonbondedUtil::c8
static

Definition at line 384 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().

◆ calcMergeDispPair

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

Definition at line 263 of file ComputeNonbondedUtil.h.

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

◆ calcMergeDispPairEnergy

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

Definition at line 264 of file ComputeNonbondedUtil.h.

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

◆ calcMergeDispSelf

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

Definition at line 265 of file ComputeNonbondedUtil.h.

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

◆ calcMergeDispSelfEnergy

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

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

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

◆ calcSlowPairEnergy

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

Definition at line 269 of file ComputeNonbondedUtil.h.

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

◆ calcSlowSelf

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

Definition at line 270 of file ComputeNonbondedUtil.h.

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

◆ calcSlowSelfEnergy

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

Definition at line 271 of file ComputeNonbondedUtil.h.

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

◆ columnsize

int ComputeNonbondedUtil::columnsize
static

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

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

◆ corr_table

BigReal * ComputeNonbondedUtil::corr_table
static

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

Referenced by select().

◆ cutoff_3

BigReal ComputeNonbondedUtil::cutoff_3
static

Definition at line 363 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ cutoff_3_f

float ComputeNonbondedUtil::cutoff_3_f
static

Definition at line 369 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ cutoff_6

BigReal ComputeNonbondedUtil::cutoff_6
static

Definition at line 364 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ cutoff_6_f

float ComputeNonbondedUtil::cutoff_6_f
static

Definition at line 370 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ dielectric_1

BigReal ComputeNonbondedUtil::dielectric_1
static

◆ drudeNbthole

Bool ComputeNonbondedUtil::drudeNbthole
static

Definition at line 411 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ ewaldcof

BigReal ComputeNonbondedUtil::ewaldcof
static

◆ fast_table

BigReal * ComputeNonbondedUtil::fast_table
static

Definition at line 305 of file ComputeNonbondedUtil.h.

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

◆ fixedAtomsOn

Bool ComputeNonbondedUtil::fixedAtomsOn
static

Definition at line 289 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ full_table

BigReal * ComputeNonbondedUtil::full_table
static

Definition at line 309 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ goForcesOn

Bool ComputeNonbondedUtil::goForcesOn
static

Definition at line 426 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ goGroPair

Bool ComputeNonbondedUtil::goGroPair
static

Definition at line 425 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ goMethod

int ComputeNonbondedUtil::goMethod
static

Definition at line 427 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ k_vdwa

BigReal ComputeNonbondedUtil::k_vdwa
static

Definition at line 361 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ k_vdwa_f

float ComputeNonbondedUtil::k_vdwa_f
static

Definition at line 367 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ k_vdwb

BigReal ComputeNonbondedUtil::k_vdwb
static

Definition at line 362 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ k_vdwb_f

float ComputeNonbondedUtil::k_vdwb_f
static

Definition at line 368 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ lambda_table

BigReal * ComputeNonbondedUtil::lambda_table = 0
static

Definition at line 398 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ lesFactor

int ComputeNonbondedUtil::lesFactor
static

Definition at line 395 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ lesOn

Bool ComputeNonbondedUtil::lesOn
static

Definition at line 394 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ lesScaling

BigReal ComputeNonbondedUtil::lesScaling
static

Definition at line 396 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ LJewaldcof

BigReal ComputeNonbondedUtil::LJewaldcof
static

Definition at line 416 of file ComputeNonbondedUtil.h.

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

◆ ljTable

const LJTable * ComputeNonbondedUtil::ljTable = 0
static

Definition at line 295 of file ComputeNonbondedUtil.h.

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

◆ mol

const Molecule * ComputeNonbondedUtil::mol
static

Definition at line 296 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ pairInteractionOn

Bool ComputeNonbondedUtil::pairInteractionOn
static

Definition at line 400 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ pairInteractionSelf

Bool ComputeNonbondedUtil::pairInteractionSelf
static

Definition at line 401 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ pi_ewaldcof

BigReal ComputeNonbondedUtil::pi_ewaldcof
static

Definition at line 415 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 290 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 297 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 298 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ scale14

BigReal ComputeNonbondedUtil::scale14
static

◆ scaling

BigReal ComputeNonbondedUtil::scaling
static

◆ scor_table

BigReal * ComputeNonbondedUtil::scor_table
static

Definition at line 306 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ slow_table

BigReal * ComputeNonbondedUtil::slow_table
static

Definition at line 307 of file ComputeNonbondedUtil.h.

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

◆ switchOn

BigReal ComputeNonbondedUtil::switchOn
static

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

Referenced by select().

◆ switchOn_f

float ComputeNonbondedUtil::switchOn_f
static

Definition at line 371 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ table_alloc

BigReal * ComputeNonbondedUtil::table_alloc = 0
static

Definition at line 301 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ table_ener

BigReal * ComputeNonbondedUtil::table_ener = 0
static

Definition at line 302 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ table_length

int ComputeNonbondedUtil::table_length
static

Definition at line 313 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ table_noshort

BigReal * ComputeNonbondedUtil::table_noshort
static

Definition at line 304 of file ComputeNonbondedUtil.h.

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

◆ table_short

BigReal * ComputeNonbondedUtil::table_short
static

Definition at line 303 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ v_vdwa

BigReal ComputeNonbondedUtil::v_vdwa
static

Definition at line 359 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ v_vdwa_f

float ComputeNonbondedUtil::v_vdwa_f
static

Definition at line 365 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ v_vdwb

BigReal ComputeNonbondedUtil::v_vdwb
static

Definition at line 360 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ v_vdwb_f

float ComputeNonbondedUtil::v_vdwb_f
static

Definition at line 366 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ vdw_switch_mode

int ComputeNonbondedUtil::vdw_switch_mode
static

Definition at line 422 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ vdwa_table

BigReal * ComputeNonbondedUtil::vdwa_table
static

Definition at line 310 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ vdwb_table

BigReal * ComputeNonbondedUtil::vdwb_table
static

Definition at line 311 of file ComputeNonbondedUtil.h.

Referenced by select().

◆ vdwForceSwitching

Bool ComputeNonbondedUtil::vdwForceSwitching
static

Definition at line 391 of file ComputeNonbondedUtil.h.

Referenced by select().


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