Index of /bazant/www/EDIP/patch
Name Last modified Size Description
Parent Directory 12-Aug-2008 01:12 -
forces-edip.1.1.c 19-Apr-2002 10:53 16k
forces-edip.1.11.f 19-Apr-2002 10:54 17k
forces-edip.1.9.f 19-Apr-2002 10:53 17k
forces-edip.1.c 19-Apr-2002 10:54 16k
forces-edip.1.f 19-Apr-2002 10:53 21k
patch-edip.1 19-Apr-2002 10:54 3k
patch-edip.10 19-Apr-2002 10:54 7k
patch-edip.11 19-Apr-2002 10:54 5k
patch-edip.12 19-Apr-2002 10:54 7k
patch-edip.2 19-Apr-2002 10:54 6k
patch-edip.3 19-Apr-2002 10:54 6k
patch-edip.4 19-Apr-2002 10:54 1k
patch-edip.5 19-Apr-2002 10:54 1k
patch-edip.6 19-Apr-2002 10:54 4k
patch-edip.7 19-Apr-2002 10:54 3k
patch-edip.8 19-Apr-2002 10:54 4k
patch-edip.9 19-Apr-2002 10:54 27k
patch-edip.c.1 19-Apr-2002 10:54 2k
Modifications to Optimize the EDIP Code
by Xianglong Yuan <yuanx@mit.edu>, April 2002
The main improvement is "patch.1" which further simplifies the
calculation of forces on coordination-changing
neighbors of a triplet of bonding atoms. The C code is modified only
to patch 1. The fortran code is available modified
up to patch 11. The total savings can be around 6% compared to
the original EDIP code (Bazant, 1997), before any compiler
optimization (which can usually save more than 6%).
patch.1:
* substitute accumulation array for environment forces, sz_sum, with
a single accumulator, dVdZ_sum, to remove a third- and a forth-
level loops.
patch.2:
* re-define some parameters (par_bet, par_mu, and cmbinv) to reduce
operations.
* initialize neighbor counts, n2, n3, and nz, to zeros to reduce
operations and to carry correct neighbor numbers.
patch.3:
* assign all the real constants with double precision.
patch.4:
* reorganize a nested 2-level if-block into a simple if-block in the
first second-level loop.
patch.5:
* reorganize pair interaction (V2 and dV2j) calculations without
increasing number of operations. Useful when combining with
external nuclear repulsion term.
patch.6:
* reorganize 3-body radial and angular force calculations to remove
a dozen of variables and four multiplications in a third-level loop.
patch.7:
* calculate two 3-body prefactors before the 3-body force loop and
reduce five multiplications in the innermost loop.
patch.8:
* optimize three blocks of virial calculations and reduce a total of
16 multiplications in three loops.
patch.9:
* stylize the code.
patch.10: (a suggested patch)
* pre-process fixZ option as being used mainly in debugging.
patch.11: (a suggested patch)
* combine three subroutines into one, and parameterize all the
EDIP constants into the execute code instead of using them as
global variables. Interface changed and now need variable
MAX_NBRS_1, p_nbrs, and neighbors, in addition to the carry-ins.
[Will it be more modulable by exchanging data only through
carry-ins/outs?]
patch.12:
* transform into DLPOLY compatible force routine.
# vim: tw=72