From 7a138b74eb754e752ac70f2dd220bbb718bb1309 Mon Sep 17 00:00:00 2001 From: "Kurt A. O'Hearn" <ohearnku@msu.edu> Date: Thu, 8 Nov 2018 10:15:13 -0800 Subject: [PATCH] Fix issue with bonds list ordering leading to different torsion and conjugation energies due to changing the far neighbors list to a full list. --- PuReMD/src/bond_orders.c | 2 +- PuReMD/src/comm_tools.c | 2 +- PuReMD/src/forces.c | 12 ++++++++++++ PuReMD/src/torsion_angles.c | 8 ++++---- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/PuReMD/src/bond_orders.c b/PuReMD/src/bond_orders.c index b1e9b228..da07f839 100644 --- a/PuReMD/src/bond_orders.c +++ b/PuReMD/src/bond_orders.c @@ -802,7 +802,7 @@ int BOp( storage *workspace, reax_list *bonds, real bo_cut, } -int compare_bonds( const void *p1, const void *p2 ) +static int compare_bonds( const void *p1, const void *p2 ) { return ((bond_data *)p1)->nbr - ((bond_data *)p2)->nbr; } diff --git a/PuReMD/src/comm_tools.c b/PuReMD/src/comm_tools.c index 0b399825..9c2728f8 100644 --- a/PuReMD/src/comm_tools.c +++ b/PuReMD/src/comm_tools.c @@ -53,7 +53,7 @@ void Setup_NT_Comm( reax_system* system, control_params* control, bndry_cut = system->bndry_cuts.ghost_cutoff; /* identify my neighbors */ - system->num_nt_nbrs = MAX_NT_NBRS; + system->num_nt_nbrs = REAX_MAX_NT_NBRS; for ( i = 0; i < system->num_nt_nbrs; ++i ) { ivec_Sum( nbr_coords, system->my_coords, r[i] ); /* actual nbr coords */ diff --git a/PuReMD/src/forces.c b/PuReMD/src/forces.c index 30a169bc..dadb988e 100644 --- a/PuReMD/src/forces.c +++ b/PuReMD/src/forces.c @@ -55,6 +55,13 @@ interaction_function Interaction_Functions[NUM_INTRS]; + +static int compare_bonds( const void *p1, const void *p2 ) +{ + return ((bond_data *)p1)->nbr - ((bond_data *)p2)->nbr; +} + + void Dummy_Interaction( reax_system *system, control_params *control, simulation_data *data, storage *workspace, reax_list **lists, output_controls *out_control ) @@ -531,6 +538,11 @@ void Init_Forces( reax_system *system, control_params *control, if ( far_nbrs->format == FULL_LIST ) { + + for( i = 0; i < system->N; ++i ) + qsort( &bonds->bond_list[Start_Index(i, bonds)], + Num_Entries(i, bonds), sizeof(bond_data), compare_bonds ); + /* set sym_index for bonds list (far_nbrs full list) */ for ( i = 0; i < system->N; ++i ) { diff --git a/PuReMD/src/torsion_angles.c b/PuReMD/src/torsion_angles.c index 8d9949da..4719aa33 100644 --- a/PuReMD/src/torsion_angles.c +++ b/PuReMD/src/torsion_angles.c @@ -342,7 +342,8 @@ void Torsion_Angles( reax_system *system, control_params *control, fbp->V2 * exp_tor1 * (1.0 - cos2omega) + fbp->V3 * (1.0 + cos3omega) ); - data->my_en.e_tor += e_tor = fn10 * sin_ijk * sin_jkl * CV; + e_tor = fn10 * sin_ijk * sin_jkl * CV; + data->my_en.e_tor += e_tor; dfn11 = (-p_tor3 * exp_tor3_DjDk + (p_tor3 * exp_tor3_DjDk - p_tor4 * exp_tor4_DjDk) * @@ -375,9 +376,8 @@ void Torsion_Angles( reax_system *system, control_params *control, /* 4-body conjugation energy */ fn12 = exp_cot2_ij * exp_cot2_jk * exp_cot2_kl; - data->my_en.e_con += e_con = - fbp->p_cot1 * fn12 * - (1.0 + (SQR(cos_omega) - 1.0) * sin_ijk * sin_jkl); + e_con = fbp->p_cot1 * fn12 * (1.0 + (SQR(cos_omega) - 1.0) * sin_ijk * sin_jkl); + data->my_en.e_con += e_con; Cconj = -2.0 * fn12 * fbp->p_cot1 * p_cot2 * (1.0 + (SQR(cos_omega) - 1.0) * sin_ijk * sin_jkl); -- GitLab