From 98f8b9632d7af29d4c0de68c93c34d9d6df9e68b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 4 Jun 2020 10:46:08 -0400 Subject: [PATCH] avoid division by zero when reading tersoff potentials with powern == 0.0 --- src/MANYBODY/pair_tersoff.cpp | 12 ++++++++---- src/MANYBODY/pair_tersoff_mod.cpp | 6 ++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/MANYBODY/pair_tersoff.cpp b/src/MANYBODY/pair_tersoff.cpp index f5a3fa7e8e..3b9de81992 100644 --- a/src/MANYBODY/pair_tersoff.cpp +++ b/src/MANYBODY/pair_tersoff.cpp @@ -524,10 +524,14 @@ void PairTersoff::setup_params() params[m].cut = params[m].bigr + params[m].bigd; params[m].cutsq = params[m].cut*params[m].cut; - params[m].c1 = pow(2.0*params[m].powern*1.0e-16,-1.0/params[m].powern); - params[m].c2 = pow(2.0*params[m].powern*1.0e-8,-1.0/params[m].powern); - params[m].c3 = 1.0/params[m].c2; - params[m].c4 = 1.0/params[m].c1; + if (params[m].powern > 0.0) { + params[m].c1 = pow(2.0*params[m].powern*1.0e-16,-1.0/params[m].powern); + params[m].c2 = pow(2.0*params[m].powern*1.0e-8,-1.0/params[m].powern); + params[m].c3 = 1.0/params[m].c2; + params[m].c4 = 1.0/params[m].c1; + } else { + params[m].c1 = params[m].c2 = params[m].c3 = params[m].c4 = 0.0; + } } // set cutmax to max of all params diff --git a/src/MANYBODY/pair_tersoff_mod.cpp b/src/MANYBODY/pair_tersoff_mod.cpp index 1998928aa5..18a58ae5b4 100644 --- a/src/MANYBODY/pair_tersoff_mod.cpp +++ b/src/MANYBODY/pair_tersoff_mod.cpp @@ -178,8 +178,10 @@ void PairTersoffMOD::setup_params() params[m].cut = params[m].bigr + params[m].bigd; params[m].cutsq = params[m].cut*params[m].cut; - params[m].ca1 = pow(2.0*params[m].powern_del*1.0e-16,-1.0/params[m].powern); - params[m].ca4 = 1.0/params[m].ca1; + if (params[m].powern > 0.0) { + params[m].ca1 = pow(2.0*params[m].powern_del*1.0e-16,-1.0/params[m].powern); + params[m].ca4 = 1.0/params[m].ca1; + } else params[m].ca1 = params[m].ca4 = 0.0; } // set cutmax to max of all params