namespace rgpot_eam_al¶
Overview¶
Embedded-atom aluminium with double-exponential pair, density, and an eighth-order polynomial embedding function, in gather form. More…
namespace rgpot_eam_al {
// global functions
pure real(wp) function eam_al_cutoff(class(eam_al_params_t), intent(in) self);
subroutine, public eam_al_energy_forces(real(wp), dimension(:, :), intent(in), contiguous positions, real(wp), dimension(3, 3), intent(in) cell, type(eam_al_params_t), intent(in) par, type(neighbor_table_t), intent(inout) table, real(wp), intent(out) energy, real(wp), dimension(:, :), intent(out), contiguous forces, integer, intent(out) status, character(len=:), intent(out), allocatable errmsg);
} // namespace rgpot_eam_al
Detailed Documentation¶
Embedded-atom aluminium with double-exponential pair, density, and an eighth-order polynomial embedding function, in gather form.
The energy is a pair sum plus a per-atom embedding term, E = sum_{i<j} phi(r_ij) + sum_i F(rho_i), rho_i = sum_{j /= i} rho(r_ij),
so the force on atom i couples to F evaluated at every neighbour's density as well as at its own. Three passes turn that into a gather: densities first, then F and F’ for all atoms, then the force. By the time the force loop runs, F’(rho_j) is a plain array lookup, and atom i can sum the whole force acting on it while writing only f(:, i) : f_i = sum_j [ phi’(r_ij) + (F’_i + F’_j) rho’(r_ij) ] rhat_ij,
with rhat_ij the unit vector from i towards j. This is where EAM closes and a bond-order gather does not: the neighbour-dependent factor is one scalar per atom, not a sum that has to be rebuilt by walking atom j ‘s own neighbour list.
Global Functions¶
pure real(wp) function eam_al_cutoff(class(eam_al_params_t), intent(in) self)
Interaction cutoff, the radius the neighbour table is built at.
subroutine, public eam_al_energy_forces(real(wp), dimension(:, :), intent(in), contiguous positions, real(wp), dimension(3, 3), intent(in) cell, type(eam_al_params_t), intent(in) par, type(neighbor_table_t), intent(inout) table, real(wp), intent(out) energy, real(wp), dimension(:, :), intent(out), contiguous forces, integer, intent(out) status, character(len=:), intent(out), allocatable errmsg)
Energy and forces for positions (3 x natoms) in cell.