From 7851f9aae5335d510de2ddf3e84788f7cf36b070 Mon Sep 17 00:00:00 2001 From: "Kurt A. O'Hearn" <ohearnk@msu.edu> Date: Mon, 15 Oct 2018 22:37:02 -0400 Subject: [PATCH] sPuReMD: refactoring to align code with PuReMD. Disable SMALL_BOX_SUPPORT. Refactor to remove union-based polymorphic behavior for reax_list. Other general code clean-ups. --- sPuReMD/src/allocate.c | 22 +-- sPuReMD/src/analyze.c | 124 ++++++------- sPuReMD/src/bond_orders.c | 100 +++++----- sPuReMD/src/box.c | 21 ++- sPuReMD/src/control.c | 36 ++-- sPuReMD/src/forces.c | 248 ++++++++++++++----------- sPuReMD/src/four_body_interactions.c | 20 +- sPuReMD/src/geo_tools.c | 64 ++++--- sPuReMD/src/init_md.c | 16 +- sPuReMD/src/integrate.c | 11 +- sPuReMD/src/list.c | 52 +++--- sPuReMD/src/lookup.c | 6 +- sPuReMD/src/neighbors.c | 25 ++- sPuReMD/src/print_utils.c | 66 +++---- sPuReMD/src/reax_types.h | 90 ++++++--- sPuReMD/src/reset_utils.c | 2 +- sPuReMD/src/single_body_interactions.c | 20 +- sPuReMD/src/spuremd.c | 18 +- sPuReMD/src/system_props.c | 15 +- sPuReMD/src/three_body_interactions.c | 78 ++++---- sPuReMD/src/tool_box.c | 75 +++----- sPuReMD/src/tool_box.h | 4 +- sPuReMD/src/traj.c | 48 ++--- sPuReMD/src/two_body_interactions.c | 22 +-- 24 files changed, 613 insertions(+), 570 deletions(-) diff --git a/sPuReMD/src/allocate.c b/sPuReMD/src/allocate.c index 4c7bca5c..50c5e410 100644 --- a/sPuReMD/src/allocate.c +++ b/sPuReMD/src/allocate.c @@ -31,24 +31,24 @@ void PreAllocate_Space( reax_system *system, control_params *control, { int i; - system->atoms = (reax_atom*) scalloc( system->N, - sizeof(reax_atom), "PreAllocate_Space::system->atoms" ); - workspace->orig_id = (int*) scalloc( system->N, - sizeof(int), "PreAllocate_Space::workspace->orid_id" ); + system->atoms = scalloc( system->N, sizeof(reax_atom), + "PreAllocate_Space::system->atoms" ); + workspace->orig_id = scalloc( system->N, sizeof(int), + "PreAllocate_Space::workspace->orid_id" ); /* space for keeping restriction info, if any */ if ( control->restrict_bonds ) { - workspace->restricted = (int*) scalloc( system->N, - sizeof(int), "PreAllocate_Space::workspace->restricted_atoms" ); + workspace->restricted = scalloc( system->N, sizeof(int), + "PreAllocate_Space::workspace->restricted_atoms" ); - workspace->restricted_list = (int**) scalloc( system->N, - sizeof(int*), "PreAllocate_Space::workspace->restricted_list" ); + workspace->restricted_list = scalloc( system->N, sizeof(int*), + "PreAllocate_Space::workspace->restricted_list" ); for ( i = 0; i < system->N; ++i ) { - workspace->restricted_list[i] = (int*) scalloc( MAX_RESTRICT, - sizeof(int), "PreAllocate_Space::workspace->restricted_list[i]" ); + workspace->restricted_list[i] = scalloc( MAX_RESTRICT, sizeof(int), + "PreAllocate_Space::workspace->restricted_list[i]" ); } } } @@ -258,7 +258,7 @@ void Reallocate( reax_system *system, control_params *control, static_storage *w workspace->U = NULL; } - if ( control->hb_cut > 0.0 && realloc->hbonds > 0 ) + if ( control->hbond_cut > 0.0 && realloc->hbonds > 0 ) { Reallocate_HBonds_List( system->N, workspace->num_H, workspace->hbond_index, lists[HBONDS] ); diff --git a/sPuReMD/src/analyze.c b/sPuReMD/src/analyze.c index 68e94284..c0a3f816 100644 --- a/sPuReMD/src/analyze.c +++ b/sPuReMD/src/analyze.c @@ -68,13 +68,13 @@ static void Copy_Bond_List( reax_system *system, control_params *control, // fprintf( stdout, "%d: ", i ); for ( j = Start_Index( i, new_bonds ); j < End_Index( i, new_bonds ); ++j ) - if ( new_bonds->select.bond_list[j].bo_data.BO >= control->bg_cut ) + if ( new_bonds->bond_list[j].bo_data.BO >= control->bg_cut ) { - // fprintf( stderr, "%d ", new_bonds->select.bond_list[j].nbr ); - old_bonds->select.bond_list[ top_old ].nbr = - new_bonds->select.bond_list[j].nbr; - old_bonds->select.bond_list[ top_old ].bo_data.BO = - new_bonds->select.bond_list[j].bo_data.BO; + // fprintf( stderr, "%d ", new_bonds->bond_list[j].nbr ); + old_bonds->bond_list[ top_old ].nbr = + new_bonds->bond_list[j].nbr; + old_bonds->bond_list[ top_old ].bo_data.BO = + new_bonds->bond_list[j].bo_data.BO; top_old++; } @@ -95,14 +95,14 @@ static int Compare_Bond_Lists( int atom, control_params *control, reax_list **li /*fprintf( stdout, "\n%d\nold_bonds:", atom ); for( oldp = Start_Index( atom, old_bonds ); oldp < End_Index( atom, old_bonds ); ++oldp ) - if( old_bonds->select.bond_list[oldp].bo_data.BO >= control->bg_cut ) - fprintf( stdout, "%5d", old_bonds->select.bond_list[oldp].nbr ); + if( old_bonds->bond_list[oldp].bo_data.BO >= control->bg_cut ) + fprintf( stdout, "%5d", old_bonds->bond_list[oldp].nbr ); fprintf( stdout, "\nnew_bonds:" ); for( newp = Start_Index( atom, new_bonds ); newp < End_Index( atom, new_bonds ); ++newp ) - if( new_bonds->select.bond_list[newp].bo_data.BO >= control->bg_cut ) - fprintf( stdout, "%5d", new_bonds->select.bond_list[newp].nbr );*/ + if( new_bonds->bond_list[newp].bo_data.BO >= control->bg_cut ) + fprintf( stdout, "%5d", new_bonds->bond_list[newp].nbr );*/ for ( oldp = Start_Index( atom, old_bonds ), @@ -112,28 +112,28 @@ static int Compare_Bond_Lists( int atom, control_params *control, reax_list **li newp = MIN( newp + 1, End_Index( atom, new_bonds ) ) ) { while ( oldp < End_Index( atom, old_bonds ) - && old_bonds->select.bond_list[oldp].bo_data.BO < control->bg_cut ) + && old_bonds->bond_list[oldp].bo_data.BO < control->bg_cut ) { ++oldp; } while ( newp < End_Index( atom, new_bonds ) - && new_bonds->select.bond_list[newp].bo_data.BO < control->bg_cut ) + && new_bonds->bond_list[newp].bo_data.BO < control->bg_cut ) { ++newp; } /*fprintf( fout, "%d, oldp: %d - %d, newp: %d - %d", - atom, oldp, old_bonds->select.bond_list[oldp].nbr, - newp, new_bonds->select.bond_list[newp].nbr );*/ + atom, oldp, old_bonds->bond_list[oldp].nbr, + newp, new_bonds->bond_list[newp].nbr );*/ if ( oldp < End_Index( atom, old_bonds ) ) { /* there are some other bonds in the old list */ if ( newp < End_Index( atom, new_bonds ) ) { - if ( old_bonds->select.bond_list[oldp].nbr != - new_bonds->select.bond_list[newp].nbr ) + if ( old_bonds->bond_list[oldp].nbr != + new_bonds->bond_list[newp].nbr ) { //fprintf( fout, " --> case1, return 1\n" ); return 1; @@ -187,10 +187,10 @@ static void Get_Molecule( int atom, molecule *m, int *mark, reax_system *system, for ( i = start; i < end; ++i ) { - if ( bonds->select.bond_list[i].bo_data.BO >= control->bg_cut && - !mark[bonds->select.bond_list[i].nbr] ) + if ( bonds->bond_list[i].bo_data.BO >= control->bg_cut && + !mark[bonds->bond_list[i].nbr] ) { - Get_Molecule( bonds->select.bond_list[i].nbr, m, mark, + Get_Molecule( bonds->bond_list[i].nbr, m, mark, system, control, bonds, print, fout ); } } @@ -399,11 +399,11 @@ static void Report_Bond_Change( reax_system *system, control_params *control, fprintf( fout, "%5d(%s) was connected to:", rev1, system->atoms[a1].name ); for ( i = Start_Index(a1, old_bonds); i < End_Index(a1, old_bonds); ++i ) { - if ( old_bonds->select.bond_list[i].bo_data.BO >= control->bg_cut ) + if ( old_bonds->bond_list[i].bo_data.BO >= control->bg_cut ) { fprintf( fout, " %5d(%s)", - workspace->orig_id[ old_bonds->select.bond_list[i].nbr ], - system->atoms[ old_bonds->select.bond_list[i].nbr ].name ); + workspace->orig_id[ old_bonds->bond_list[i].nbr ], + system->atoms[ old_bonds->bond_list[i].nbr ].name ); } } fprintf( fout, "\n" ); @@ -411,11 +411,11 @@ static void Report_Bond_Change( reax_system *system, control_params *control, fprintf( fout, "%5d(%s) was connected to:", rev2, system->atoms[a2].name ); for ( i = Start_Index(a2, old_bonds); i < End_Index(a2, old_bonds); ++i ) { - if ( old_bonds->select.bond_list[i].bo_data.BO >= control->bg_cut ) + if ( old_bonds->bond_list[i].bo_data.BO >= control->bg_cut ) { fprintf( fout, " %5d(%s)", - workspace->orig_id[ old_bonds->select.bond_list[i].nbr ], - system->atoms[ old_bonds->select.bond_list[i].nbr ].name ); + workspace->orig_id[ old_bonds->bond_list[i].nbr ], + system->atoms[ old_bonds->bond_list[i].nbr ].name ); } } fprintf( fout, "\n" ); @@ -433,69 +433,69 @@ static void Compare_Bonding( int atom, reax_system *system, control_params *cont /* fprintf( fout, "\n%d\nold_bonds:", atom ); for( oldp = Start_Index( atom, old_bonds ); oldp < End_Index( atom, old_bonds ); ++oldp ) - if( old_bonds->select.bond_list[oldp].bo_data.BO >= control->bg_cut ) - fprintf( fout, "%5d", old_bonds->select.bond_list[oldp].nbr ); + if( old_bonds->bond_list[oldp].bo_data.BO >= control->bg_cut ) + fprintf( fout, "%5d", old_bonds->bond_list[oldp].nbr ); fprintf( fout, "\nnew_bonds:" ); for( newp = Start_Index( atom, new_bonds ); newp < End_Index( atom, new_bonds ); ++newp ) - if( new_bonds->select.bond_list[newp].bo_data.BO >= control->bg_cut ) - fprintf( fout, "%6d", new_bonds->select.bond_list[newp].nbr ); + if( new_bonds->bond_list[newp].bo_data.BO >= control->bg_cut ) + fprintf( fout, "%6d", new_bonds->bond_list[newp].nbr ); fprintf( fout, "\n" ); */ for ( oldp = Start_Index( atom, old_bonds ); oldp < End_Index( atom, old_bonds ) - && old_bonds->select.bond_list[oldp].nbr < atom; ++oldp ) + && old_bonds->bond_list[oldp].nbr < atom; ++oldp ) ; for ( newp = Start_Index( atom, new_bonds ); newp < End_Index( atom, new_bonds ) - && new_bonds->select.bond_list[newp].nbr < atom; ++newp ) + && new_bonds->bond_list[newp].nbr < atom; ++newp ) ; while ( oldp < End_Index( atom, old_bonds ) || newp < End_Index( atom, new_bonds ) ) { while ( oldp < End_Index( atom, old_bonds ) && - old_bonds->select.bond_list[oldp].bo_data.BO < control->bg_cut ) + old_bonds->bond_list[oldp].bo_data.BO < control->bg_cut ) { ++oldp; } while ( newp < End_Index( atom, new_bonds ) && - new_bonds->select.bond_list[newp].bo_data.BO < control->bg_cut ) + new_bonds->bond_list[newp].bo_data.BO < control->bg_cut ) { ++newp; } /*fprintf( fout, "%d, oldp: %d - %d: %f newp: %d - %d: %f", - atom, oldp, old_bonds->select.bond_list[oldp].nbr, - old_bonds->select.bond_list[oldp].bo_data.BO, - newp, new_bonds->select.bond_list[newp].nbr, - new_bonds->select.bond_list[newp].bo_data.BO ); */ + atom, oldp, old_bonds->bond_list[oldp].nbr, + old_bonds->bond_list[oldp].bo_data.BO, + newp, new_bonds->bond_list[newp].nbr, + new_bonds->bond_list[newp].bo_data.BO ); */ if ( oldp < End_Index( atom, old_bonds ) ) { /* there are some more bonds in the old list */ if ( newp < End_Index( atom, new_bonds ) ) { - if ( old_bonds->select.bond_list[oldp].nbr < - new_bonds->select.bond_list[newp].nbr ) + if ( old_bonds->bond_list[oldp].nbr < + new_bonds->bond_list[newp].nbr ) { // fprintf( fout, "%5d-%5d bond broken\n", - // atom, old_bonds->select.bond_list[oldp].nbr ); + // atom, old_bonds->bond_list[oldp].nbr ); Report_Bond_Change( system, control, workspace, old_bonds, new_bonds, - atom, old_bonds->select.bond_list[oldp].nbr, 0, + atom, old_bonds->bond_list[oldp].nbr, 0, fout ); ++oldp; } - else if ( old_bonds->select.bond_list[oldp].nbr > - new_bonds->select.bond_list[newp].nbr ) + else if ( old_bonds->bond_list[oldp].nbr > + new_bonds->bond_list[newp].nbr ) { // fprintf( fout, "%5d-%5d bond formed\n", - // atom, new_bonds->select.bond_list[newp].nbr ); + // atom, new_bonds->bond_list[newp].nbr ); Report_Bond_Change( system, control, workspace, old_bonds, new_bonds, - atom, new_bonds->select.bond_list[newp].nbr, 1, + atom, new_bonds->bond_list[newp].nbr, 1, fout ); ++newp; } @@ -509,13 +509,13 @@ static void Compare_Bonding( int atom, reax_system *system, control_params *cont /* there is no other bond in the new list */ while ( oldp < End_Index( atom, old_bonds ) ) { - if ( old_bonds->select.bond_list[oldp].bo_data.BO >= control->bg_cut ) + if ( old_bonds->bond_list[oldp].bo_data.BO >= control->bg_cut ) { // fprintf( fout, "%5d-%5d bond broken\n", - // atom, old_bonds->select.bond_list[oldp].nbr ); + // atom, old_bonds->bond_list[oldp].nbr ); Report_Bond_Change( system, control, workspace, old_bonds, new_bonds, atom, - old_bonds->select.bond_list[oldp].nbr, 0, + old_bonds->bond_list[oldp].nbr, 0, fout ); } ++oldp; @@ -529,13 +529,13 @@ static void Compare_Bonding( int atom, reax_system *system, control_params *cont /* there is at least one other bond in the new list */ while ( newp < End_Index( atom, new_bonds ) ) { - if ( new_bonds->select.bond_list[newp].bo_data.BO >= control->bg_cut ) + if ( new_bonds->bond_list[newp].bo_data.BO >= control->bg_cut ) { // fprintf( fout, "%5d-%5d bond formed\n", - // atom, new_bonds->select.bond_list[newp].nbr ); + // atom, new_bonds->bond_list[newp].nbr ); Report_Bond_Change( system, control, workspace, old_bonds, new_bonds, atom, - new_bonds->select.bond_list[newp].nbr, 1, fout ); + new_bonds->bond_list[newp].nbr, 1, fout ); } ++newp; } @@ -568,8 +568,8 @@ static void Visit_Bonds( int atom, int *mark, int *type, reax_system *system, end = End_Index( atom, bonds ); for ( i = start; i < end; ++i ) { - nbr = bonds->select.bond_list[i].nbr; - bo = bonds->select.bond_list[i].bo_data.BO; + nbr = bonds->bond_list[i].nbr; + bo = bonds->bond_list[i].bo_data.BO; if ( bo >= control->bg_cut && !mark[nbr] ) Visit_Bonds( nbr, mark, type, system, control, bonds, ignore ); } @@ -675,7 +675,7 @@ static void Analyze_Silica( reax_system *system, control_params *control, for ( newp = Start_Index( atom, new_bonds ); newp < End_Index( atom, new_bonds ); ++newp ) { - if ( new_bonds->select.bond_list[newp].bo_data.BO >= control->bg_cut ) + if ( new_bonds->bond_list[newp].bo_data.BO >= control->bg_cut ) { ++coord; } @@ -726,40 +726,40 @@ static void Analyze_Silica( reax_system *system, control_params *control, { for ( pi = Start_Index(j, new_bonds); pi < End_Index(j, new_bonds); ++pi ) { - if ( new_bonds->select.bond_list[pi].bo_data.BO >= control->bg_cut ) + if ( new_bonds->bond_list[pi].bo_data.BO >= control->bg_cut ) { - i = new_bonds->select.bond_list[pi].nbr; + i = new_bonds->bond_list[pi].nbr; if (system->atoms[i].type == O_ATOM || system->atoms[i].type == SI_ATOM) { for ( pk = Start_Index( pi, thb_intrs ); pk < End_Index( pi, thb_intrs ); ++pk ) { - k = thb_intrs->select.three_body_list[pk].thb; - pk_j = thb_intrs->select.three_body_list[pk].pthb; + k = thb_intrs->three_body_list[pk].thb; + pk_j = thb_intrs->three_body_list[pk].pthb; // get k's pointer on j's bond list - if ( new_bonds->select.bond_list[pk_j].bo_data.BO >= + if ( new_bonds->bond_list[pk_j].bo_data.BO >= control->bg_cut ) // physical j&k bond { /*fprintf( fout, "%5d(%d) %5d(%d) %5d(%d) %8.3f\n", i, system->atoms[i].type, j, system->atoms[j].type, k, system->atoms[k].type, - thb_intrs->select.three_body_list[pk].theta );*/ + thb_intrs->three_body_list[pk].theta );*/ if ( system->atoms[i].type == O_ATOM && system->atoms[j].type == SI_ATOM && system->atoms[k].type == O_ATOM ) { O_SI_O_count++; - O_SI_O += thb_intrs->select.three_body_list[pk].theta; + O_SI_O += thb_intrs->three_body_list[pk].theta; } else if ( system->atoms[i].type == SI_ATOM && system->atoms[j].type == O_ATOM && system->atoms[k].type == SI_ATOM ) { SI_O_SI_count++; - SI_O_SI += thb_intrs->select.three_body_list[pk].theta; + SI_O_SI += thb_intrs->three_body_list[pk].theta; } } } diff --git a/sPuReMD/src/bond_orders.c b/sPuReMD/src/bond_orders.c index 0b02a6dd..dd85ba4e 100644 --- a/sPuReMD/src/bond_orders.c +++ b/sPuReMD/src/bond_orders.c @@ -44,14 +44,14 @@ void Get_dBO( reax_system *system, reax_list **lists, bonds = lists[BONDS]; dBOs = lists[DBO]; - pj = bonds->select.bond_list[pj].dbond_index; + pj = bonds->bond_list[pj].dbond_index; start_pj = Start_Index(pj, dBOs); end_pj = End_Index(pj, dBOs); for ( k = start_pj; k < end_pj; ++k ) { - rvec_Scale( v[dBOs->select.dbo_list[k].wrt], - C, dBOs->select.dbo_list[k].dBO ); + rvec_Scale( v[dBOs->dbo_list[k].wrt], + C, dBOs->dbo_list[k].dBO ); } } @@ -66,13 +66,13 @@ void Get_dBOpinpi2( reax_system *system, reax_list **lists, bonds = lists[BONDS]; dBOs = lists[DBO]; - pj = bonds->select.bond_list[pj].dbond_index; + pj = bonds->bond_list[pj].dbond_index; start_pj = Start_Index(pj, dBOs); end_pj = End_Index(pj, dBOs); for ( k = start_pj; k < end_pj; ++k ) { - dbo_k = &(dBOs->select.dbo_list[k]); + dbo_k = &dBOs->dbo_list[k]; rvec_Scale( vpi[dbo_k->wrt], Cpi, dbo_k->dBOpi ); rvec_Scale( vpi2[dbo_k->wrt], Cpi2, dbo_k->dBOpi2 ); } @@ -88,7 +88,7 @@ void Add_dBO( reax_system *system, reax_list **lists, bonds = lists[BONDS]; dBOs = lists[DBO]; - pj = bonds->select.bond_list[pj].dbond_index; + pj = bonds->bond_list[pj].dbond_index; start_pj = Start_Index(pj, dBOs); end_pj = End_Index(pj, dBOs); @@ -96,8 +96,8 @@ void Add_dBO( reax_system *system, reax_list **lists, for ( k = start_pj; k < end_pj; ++k ) { - rvec_ScaledAdd( v[dBOs->select.dbo_list[k].wrt], - C, dBOs->select.dbo_list[k].dBO ); + rvec_ScaledAdd( v[dBOs->dbo_list[k].wrt], + C, dBOs->dbo_list[k].dBO ); } } @@ -112,13 +112,13 @@ void Add_dBOpinpi2( reax_system *system, reax_list **lists, bonds = lists[BONDS]; dBOs = lists[DBO]; - pj = bonds->select.bond_list[pj].dbond_index; + pj = bonds->bond_list[pj].dbond_index; start_pj = Start_Index(pj, dBOs); end_pj = End_Index(pj, dBOs); for ( k = start_pj; k < end_pj; ++k ) { - dbo_k = &(dBOs->select.dbo_list[k]); + dbo_k = &dBOs->dbo_list[k]; rvec_ScaledAdd( vpi[dbo_k->wrt], Cpi, dbo_k->dBOpi ); rvec_ScaledAdd( vpi2[dbo_k->wrt], Cpi2, dbo_k->dBOpi2 ); } @@ -134,14 +134,14 @@ void Add_dBO_to_Forces( reax_system *system, reax_list **lists, bonds = lists[BONDS]; dBOs = lists[DBO]; - pj = bonds->select.bond_list[pj].dbond_index; + pj = bonds->bond_list[pj].dbond_index; start_pj = Start_Index(pj, dBOs); end_pj = End_Index(pj, dBOs); for ( k = start_pj; k < end_pj; ++k ) { - rvec_ScaledAdd( system->atoms[dBOs->select.dbo_list[k].wrt].f, - C, dBOs->select.dbo_list[k].dBO ); + rvec_ScaledAdd( system->atoms[dBOs->dbo_list[k].wrt].f, + C, dBOs->dbo_list[k].dBO ); } } @@ -156,13 +156,13 @@ void Add_dBOpinpi2_to_Forces( reax_system *system, reax_list **lists, bonds = lists[BONDS]; dBOs = lists[DBO]; - pj = bonds->select.bond_list[pj].dbond_index; + pj = bonds->bond_list[pj].dbond_index; start_pj = Start_Index(pj, dBOs); end_pj = End_Index(pj, dBOs); for ( k = start_pj; k < end_pj; ++k ) { - dbo_k = &(dBOs->select.dbo_list[k]); + dbo_k = &dBOs->dbo_list[k]; rvec_ScaledAdd( system->atoms[dbo_k->wrt].f, Cpi, dbo_k->dBOpi ); rvec_ScaledAdd( system->atoms[dbo_k->wrt].f, Cpi2, dbo_k->dBOpi2 ); } @@ -180,8 +180,8 @@ void Add_dDelta( reax_system *system, reax_list **lists, int i, real C, rvec *v for ( k = start; k < end; ++k ) { - rvec_ScaledAdd( v[dDeltas->select.dDelta_list[k].wrt], - C, dDeltas->select.dDelta_list[k].dVal ); + rvec_ScaledAdd( v[dDeltas->dDelta_list[k].wrt], + C, dDeltas->dDelta_list[k].dVal ); } } @@ -197,8 +197,8 @@ void Add_dDelta_to_Forces( reax_system *system, reax_list **lists, int i, real C for ( k = start; k < end; ++k ) { - rvec_ScaledAdd( system->atoms[dDeltas->select.dDelta_list[k].wrt].f, - C, dDeltas->select.dDelta_list[k].dVal ); + rvec_ScaledAdd( system->atoms[dDeltas->dDelta_list[k].wrt].f, + C, dDeltas->dDelta_list[k].dVal ); } } @@ -215,23 +215,23 @@ void Calculate_dBO( int i, int pj, static_storage *workspace, reax_list **lists, bonds = lists[BONDS]; dBOs = lists[DBO]; - j = bonds->select.bond_list[pj].nbr; - bo_ij = &bonds->select.bond_list[pj].bo_data; + j = bonds->bond_list[pj].nbr; + bo_ij = &bonds->bond_list[pj].bo_data; start_i = Start_Index( i, bonds ); end_i = End_Index( i, bonds ); l = Start_Index( j, bonds ); end_j = End_Index( j, bonds ); - top_dbo = &dBOs->select.dbo_list[ *top ]; + top_dbo = &dBOs->dbo_list[ *top ]; for ( k = start_i; k < end_i; ++k ) { - nbr_k = &bonds->select.bond_list[k]; + nbr_k = &bonds->bond_list[k]; - for ( ; l < end_j && bonds->select.bond_list[l].nbr < nbr_k->nbr; ++l ) + for ( ; l < end_j && bonds->bond_list[l].nbr < nbr_k->nbr; ++l ) { /* These are the neighbors of j which aren't in the neighbor_list of i * Note that they might also include i! */ - nbr_l = &bonds->select.bond_list[l]; + nbr_l = &bonds->bond_list[l]; top_dbo->wrt = nbr_l->nbr; rvec_Copy( dBOp, nbr_l->bo_data.dBOp ); @@ -271,10 +271,10 @@ void Calculate_dBO( int i, int pj, static_storage *workspace, reax_list **lists, rvec_Scale( top_dbo->dBOpi, -bo_ij->C3dbopi, dBOp ); //dBOpi-3 rvec_Scale( top_dbo->dBOpi2, -bo_ij->C3dbopi2, dBOp );//dBOpp-3 - if ( l < end_j && bonds->select.bond_list[l].nbr == nbr_k->nbr ) + if ( l < end_j && bonds->bond_list[l].nbr == nbr_k->nbr ) { /* This is a common neighbor of i and j. */ - nbr_l = &bonds->select.bond_list[l]; + nbr_l = &bonds->bond_list[l]; rvec_Copy( dBOp, nbr_l->bo_data.dBOp ); rvec_ScaledAdd( top_dbo->dBO, -bo_ij->C3dbo, dBOp ); //dBO,3rd @@ -309,7 +309,7 @@ void Calculate_dBO( int i, int pj, static_storage *workspace, reax_list **lists, { /* These are the remaining neighbors of j which are not in the neighbor_list of i. Note that they might also include i!*/ - nbr_l = &bonds->select.bond_list[l]; + nbr_l = &bonds->bond_list[l]; top_dbo->wrt = nbr_l->nbr; rvec_Copy( dBOp, nbr_l->bo_data.dBOp ); @@ -360,10 +360,10 @@ void Add_dBond_to_Forces_NPT( int i, int pj, reax_system *system, #endif bonds = lists[BONDS]; - nbr_j = &bonds->select.bond_list[pj]; + nbr_j = &bonds->bond_list[pj]; j = nbr_j->nbr; bo_ij = &nbr_j->bo_data; - bo_ji = &bonds->select.bond_list[ nbr_j->sym_index ].bo_data; + bo_ji = &bonds->bond_list[ nbr_j->sym_index ].bo_data; #ifdef _OPENMP f_i = &workspace->f_local[tid * system->N + i]; f_j = &workspace->f_local[tid * system->N + j]; @@ -396,7 +396,7 @@ void Add_dBond_to_Forces_NPT( int i, int pj, reax_system *system, ************************************/ for ( pk = Start_Index(i, bonds); pk < End_Index(i, bonds); ++pk ) { - nbr_k = &bonds->select.bond_list[pk]; + nbr_k = &bonds->bond_list[pk]; k = nbr_k->nbr; #ifdef _OPENMP f_k = &workspace->f_local[tid * system->N + k]; @@ -457,7 +457,7 @@ void Add_dBond_to_Forces_NPT( int i, int pj, reax_system *system, ***************************************************************************/ for ( pk = Start_Index(j, bonds); pk < End_Index(j, bonds); ++pk ) { - nbr_k = &bonds->select.bond_list[pk]; + nbr_k = &bonds->bond_list[pk]; k = nbr_k->nbr; #ifdef _OPENMP f_k = &workspace->f_local[tid * system->N + k]; @@ -549,10 +549,10 @@ void Add_dBond_to_Forces( int i, int pj, reax_system *system, /* Initializations */ bonds = lists[BONDS]; - nbr_j = &bonds->select.bond_list[pj]; + nbr_j = &bonds->bond_list[pj]; j = nbr_j->nbr; bo_ij = &nbr_j->bo_data; - bo_ji = &bonds->select.bond_list[ nbr_j->sym_index ].bo_data; + bo_ji = &bonds->bond_list[ nbr_j->sym_index ].bo_data; #ifdef _OPENMP f_i = &workspace->f_local[tid * system->N + i]; f_j = &workspace->f_local[tid * system->N + j]; @@ -581,7 +581,7 @@ void Add_dBond_to_Forces( int i, int pj, reax_system *system, for ( pk = Start_Index(i, bonds); pk < End_Index(i, bonds); ++pk ) { - nbr_k = &bonds->select.bond_list[pk]; + nbr_k = &bonds->bond_list[pk]; k = nbr_k->nbr; #ifdef _OPENMP f_k = &workspace->f_local[tid * system->N + k]; @@ -625,7 +625,7 @@ void Add_dBond_to_Forces( int i, int pj, reax_system *system, for ( pk = Start_Index(j, bonds); pk < End_Index(j, bonds); ++pk ) { - nbr_k = &bonds->select.bond_list[pk]; + nbr_k = &bonds->bond_list[pk]; k = nbr_k->nbr; #ifdef _OPENMP f_k = &workspace->f_local[tid * system->N + k]; @@ -776,9 +776,9 @@ void Calculate_Bond_Orders( reax_system *system, control_params *control, for ( pj = start_i; pj < end_i; ++pj ) { - j = bonds->select.bond_list[pj].nbr; + j = bonds->bond_list[pj].nbr; type_j = system->atoms[j].type; - bo_ij = &bonds->select.bond_list[pj].bo_data; + bo_ij = &bonds->bond_list[pj].bo_data; if ( i < j ) { @@ -812,7 +812,7 @@ void Calculate_Bond_Orders( reax_system *system, control_params *control, bo_ij->C4dbopi2 = 0.0; #ifdef TEST_FORCES - pdbo = &dBOs->select.dbo_list[ top_dbo ]; + pdbo = &dBOs->dbo_list[ top_dbo ]; /* compute dBO_ij/dr_i */ pdbo->wrt = i; @@ -983,11 +983,11 @@ void Calculate_Bond_Orders( reax_system *system, control_params *control, #ifdef TEST_FORCES Set_Start_Index( i, top_dDelta, dDeltas ); - ptop_dDelta = &dDeltas->select.dDelta_list[top_dDelta]; + ptop_dDelta = &dDeltas->dDelta_list[top_dDelta]; for ( pj = start_i; pj < end_i; ++pj ) { - j = bonds->select.bond_list[pj].nbr; + j = bonds->bond_list[pj].nbr; if ( !rvec_isZero( workspace->dDelta[j] ) ) { @@ -1002,7 +1002,7 @@ void Calculate_Bond_Orders( reax_system *system, control_params *control, end_j = End_Index(j, bonds); for ( pk = start_j; pk < end_j; ++pk ) { - k = bonds->select.bond_list[pk].nbr; + k = bonds->bond_list[pk].nbr; if ( !rvec_isZero( workspace->dDelta[k] ) ) { ptop_dDelta->wrt = k; @@ -1018,10 +1018,10 @@ void Calculate_Bond_Orders( reax_system *system, control_params *control, /*for( pj=Start_Index(i,dDeltas); pj<End_Index(i,dDeltas); ++pj ) fprintf( stdout, "dDel: %d %d [%g %g %g]\n", - i+1, dDeltas->select.dDelta_list[pj].wrt+1, - dDeltas->select.dDelta_list[pj].dVal[0], - dDeltas->select.dDelta_list[pj].dVal[1], - dDeltas->select.dDelta_list[pj].dVal[2] );*/ + i+1, dDeltas->dDelta_list[pj].wrt+1, + dDeltas->dDelta_list[pj].dVal[0], + dDeltas->dDelta_list[pj].dVal[1], + dDeltas->dDelta_list[pj].dVal[2] );*/ #endif } @@ -1047,7 +1047,7 @@ void Calculate_Bond_Orders( reax_system *system, control_params *control, for ( pj = start_i; pj < end_i; ++pj ) { - j = bonds->select.bond_list[pj].nbr; + j = bonds->bond_list[pj].nbr; type_j = system->atoms[j].type; if ( type_j < 0 ) @@ -1064,10 +1064,10 @@ void Calculate_Bond_Orders( reax_system *system, control_params *control, { /* We only need to update bond orders from bo_ji everything else is set in uncorrected_bo calculations */ - sym_index = bonds->select.bond_list[pj].sym_index; + sym_index = bonds->bond_list[pj].sym_index; - bo_ij = &(bonds->select.bond_list[ pj ].bo_data); - bo_ji = &(bonds->select.bond_list[ sym_index ].bo_data); + bo_ij = &bonds->bond_list[ pj ].bo_data; + bo_ji = &bonds->bond_list[ sym_index ].bo_data; bo_ij->BO = bo_ji->BO; bo_ij->BO_s = bo_ji->BO_s; bo_ij->BO_pi = bo_ji->BO_pi; diff --git a/sPuReMD/src/box.c b/sPuReMD/src/box.c index fef4145c..e142f24c 100644 --- a/sPuReMD/src/box.c +++ b/sPuReMD/src/box.c @@ -60,15 +60,16 @@ void Make_Consistent( simulation_box* box ) box->box_inv[2][2] = (box->box[0][0] * box->box[1][1] - box->box[0][1] * box->box[1][0]) * one_vol; - box->box_norms[0] = SQRT( SQR(box->box[0][0]) + - SQR(box->box[0][1]) + - SQR(box->box[0][2]) ); - box->box_norms[1] = SQRT( SQR(box->box[1][0]) + - SQR(box->box[1][1]) + - SQR(box->box[1][2]) ); - box->box_norms[2] = SQRT( SQR(box->box[2][0]) + - SQR(box->box[2][1]) + - SQR(box->box[2][2]) ); + box->box_norms[0] = SQRT( SQR(box->box[0][0]) + SQR(box->box[0][1]) + + SQR(box->box[0][2]) ); + box->box_norms[1] = SQRT( SQR(box->box[1][0]) + SQR(box->box[1][1]) + + SQR(box->box[1][2]) ); + box->box_norms[2] = SQRT( SQR(box->box[2][0]) + SQR(box->box[2][1]) + + SQR(box->box[2][2]) ); + + box->max[0] = box->min[0] + box->box_norms[0]; + box->max[1] = box->min[1] + box->box_norms[1]; + box->max[2] = box->min[2] + box->box_norms[2]; box->trans[0][0] = box->box[0][0] / box->box_norms[0]; box->trans[0][1] = box->box[1][0] / box->box_norms[0]; @@ -169,6 +170,8 @@ void Setup_Box( real a, real b, real c, real alpha, real beta, real gamma, s_gamma = SIN( DEG2RAD(gamma) ); zi = (c_alpha - c_beta * c_gamma) / s_gamma; + rvec_MakeZero( box->min ); + box->box[0][0] = a; box->box[0][1] = 0.0; box->box[0][2] = 0.0; diff --git a/sPuReMD/src/control.c b/sPuReMD/src/control.c index baacc07b..1c952338 100644 --- a/sPuReMD/src/control.c +++ b/sPuReMD/src/control.c @@ -57,13 +57,18 @@ void Read_Control_File( FILE* fp, reax_system *system, control_params* control, control->periodic_boundaries = 1; control->reneighbor = 1; - control->vlist_cut = 0; - control->nbr_cut = 4.; - control->r_cut = 10.; - control->r_sp_cut = 10.; - control->bo_cut = 0.01; + + /* interaction cutoffs from force field global paramters */ + control->bo_cut = 0.01 * system->reaxprm.gp.l[29]; + control->nonb_low = system->reaxprm.gp.l[11]; + control->nonb_cut = system->reaxprm.gp.l[12]; + + /* defaults values for other cutoffs */ + control->vlist_cut = control->nonb_cut; + control->bond_cut = 5.0; + control->bg_cut = 0.3; control->thb_cut = 0.001; - control->hb_cut = 0.0; + control->hbond_cut = 0.0; control->tabulate = 0; @@ -125,7 +130,6 @@ void Read_Control_File( FILE* fp, reax_system *system, control_params* control, control->molec_anal = NO_ANALYSIS; control->freq_molec_anal = 0; - control->bg_cut = 0.3; control->num_ignored = 0; memset( control->ignore, 0, sizeof(int) * MAX_ATOM_TYPES ); @@ -223,12 +227,12 @@ void Read_Control_File( FILE* fp, reax_system *system, control_params* control, else if ( strncmp(tmp[0], "vlist_buffer", MAX_LINE) == 0 ) { val = atof(tmp[1]); - control->vlist_cut = val; + control->vlist_cut = val + control->nonb_cut; } else if ( strncmp(tmp[0], "nbrhood_cutoff", MAX_LINE) == 0 ) { val = atof(tmp[1]); - control->nbr_cut = val; + control->bond_cut = val; } else if ( strncmp(tmp[0], "thb_cutoff", MAX_LINE) == 0 ) { @@ -238,7 +242,7 @@ void Read_Control_File( FILE* fp, reax_system *system, control_params* control, else if ( strncmp(tmp[0], "hbond_cutoff", MAX_LINE) == 0 ) { val = atof( tmp[1] ); - control->hb_cut = val; + control->hbond_cut = val; } else if ( strncmp(tmp[0], "charge_method", MAX_LINE) == 0 ) { @@ -560,7 +564,7 @@ void Read_Control_File( FILE* fp, reax_system *system, control_params* control, if (ferror(fp)) { - fprintf(stderr, "Error reading control file. Terminating.\n"); + fprintf( stderr, "Error reading control file. Terminating.\n" ); exit( INVALID_INPUT ); } @@ -574,14 +578,10 @@ void Read_Control_File( FILE* fp, reax_system *system, control_params* control, control->T = control->T_init; } - /* near neighbor and far neighbor cutoffs */ - control->bo_cut = 0.01 * system->reaxprm.gp.l[29]; - control->r_low = system->reaxprm.gp.l[11]; - control->r_cut = system->reaxprm.gp.l[12]; - control->r_sp_cut = control->r_cut * control->cm_domain_sparsity; - control->vlist_cut += control->r_cut; + /* derived cutoffs */ + control->nonb_sp_cut = control->nonb_cut * control->cm_domain_sparsity; - system->g.cell_size = control->vlist_cut / 2.; + system->g.cell_size = control->vlist_cut / 2.0; for ( i = 0; i < 3; ++i ) { system->g.spread[i] = 2; diff --git a/sPuReMD/src/forces.c b/sPuReMD/src/forces.c index f28343f4..1f29e730 100644 --- a/sPuReMD/src/forces.c +++ b/sPuReMD/src/forces.c @@ -56,7 +56,7 @@ void Init_Bonded_Force_Functions( control_params *control ) //*/Dummy_Interaction; control->intr_funcs[3] = &Three_Body_Interactions; //*/Dummy_Interaction; control->intr_funcs[4] = &Four_Body_Interactions; //*/Dummy_Interaction; - if ( control->hb_cut > 0.0 ) + if ( control->hbond_cut > 0.0 ) { control->intr_funcs[5] = &Hydrogen_Bonds; //*/Dummy_Interaction; } @@ -182,7 +182,7 @@ static void Compute_Total_Force( reax_system *system, control_params *control, { for ( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj ) { - if ( i < bonds->select.bond_list[pj].nbr ) + if ( i < bonds->bond_list[pj].nbr ) { if ( control->ensemble == NVE || control->ensemble == nhNVT || control->ensemble == bNVT ) @@ -497,18 +497,18 @@ static void Init_Charge_Matrix_Remaining_Entries( reax_system *system, for ( pj = Start_Index(i, far_nbrs); pj < End_Index(i, far_nbrs); ++pj ) { - if ( far_nbrs->select.far_nbr_list[pj].d <= control->r_cut ) + if ( far_nbrs->far_nbr_list[pj].d <= control->nonb_cut ) { - j = far_nbrs->select.far_nbr_list[pj].nbr; + j = far_nbrs->far_nbr_list[pj].nbr; xcut = ( system->reaxprm.sbp[ system->atoms[i].type ].b_s_acks2 + system->reaxprm.sbp[ system->atoms[j].type ].b_s_acks2 ) / 2.0; - if ( far_nbrs->select.far_nbr_list[pj].d < xcut && - far_nbrs->select.far_nbr_list[pj].d > 0.001 ) + if ( far_nbrs->far_nbr_list[pj].d < xcut && + far_nbrs->far_nbr_list[pj].d > 0.001 ) { - d = far_nbrs->select.far_nbr_list[pj].d / xcut; + d = far_nbrs->far_nbr_list[pj].d / xcut; bond_softness = system->reaxprm.gp.l[34] * POW( d, 3.0 ) * POW( 1.0 - d, 6.0 ); H->j[*Htop] = system->N + j + 1; @@ -631,49 +631,58 @@ static void Init_Forces( reax_system *system, control_params *control, H_sp->start[i] = H_sp_top; btop_i = End_Index( i, bonds ); sbp_i = &system->reaxprm.sbp[type_i]; - ihb = ihb_top = -1; + ihb = -1; + ihb_top = -1; - if ( control->hb_cut > 0 && (ihb = sbp_i->p_hbond) == 1 ) + if ( control->hbond_cut > 0.0 ) { - ihb_top = End_Index( workspace->hbond_index[i], hbonds ); + ihb = sbp_i->p_hbond; + + if ( ihb == 1 ) + { + ihb_top = End_Index( workspace->hbond_index[i], hbonds ); + } } + /* update i-j distance - check if j is within cutoff */ for ( pj = start_i; pj < end_i; ++pj ) { - nbr_pj = &far_nbrs->select.far_nbr_list[pj]; + nbr_pj = &far_nbrs->far_nbr_list[pj]; j = nbr_pj->nbr; atom_j = &system->atoms[j]; + flag = FALSE; + flag_sp = FALSE; - flag = 0; - flag_sp = 0; + /* check if reneighboring step */ if ( (data->step - data->prev_steps) % control->reneighbor == 0 ) { - if ( nbr_pj->d <= control->r_cut ) + if ( nbr_pj->d <= control->nonb_cut ) { - flag = 1; - if ( nbr_pj->d <= control->r_sp_cut ) + flag = TRUE; + if ( nbr_pj->d <= control->nonb_sp_cut ) { - flag_sp = 1; + flag_sp = TRUE; } } - else - { - flag = 0; - flag_sp = 0; - } } - else if ((nbr_pj->d = Sq_Distance_on_T3(atom_i->x, atom_j->x, &(system->box), - nbr_pj->dvec)) <= SQR(control->r_cut)) + else { - if ( nbr_pj->d <= SQR(control->r_sp_cut)) + nbr_pj->d = Sq_Distance_on_T3( atom_i->x, atom_j->x, + &system->box, nbr_pj->dvec ); + + if ( nbr_pj->d <= SQR(control->nonb_cut) ) { - flag_sp = 1; + if ( nbr_pj->d <= SQR(control->nonb_sp_cut) ) + { + flag_sp = TRUE; + } + + nbr_pj->d = SQRT( nbr_pj->d ); + flag = TRUE; } - nbr_pj->d = SQRT( nbr_pj->d ); - flag = 1; } - if ( flag ) + if ( flag == TRUE ) { type_j = system->atoms[j].type; r_ij = nbr_pj->d; @@ -686,7 +695,7 @@ static void Init_Forces( reax_system *system, control_params *control, ++Htop; /* H_sp matrix entry */ - if ( flag_sp ) + if ( flag_sp == TRUE ) { H_sp->j[H_sp_top] = j; H_sp->val[H_sp_top] = H->val[Htop - 1]; @@ -694,32 +703,33 @@ static void Init_Forces( reax_system *system, control_params *control, } /* hydrogen bond lists */ - if ( control->hb_cut > 0 && (ihb == 1 || ihb == 2) && - nbr_pj->d <= control->hb_cut ) + if ( control->hbond_cut > 0.0 && (ihb == 1 || ihb == 2) + && nbr_pj->d <= control->hbond_cut ) { // fprintf( stderr, "%d %d\n", atom1, atom2 ); jhb = sbp_j->p_hbond; + if ( ihb == 1 && jhb == 2 ) { - hbonds->select.hbond_list[ihb_top].nbr = j; - hbonds->select.hbond_list[ihb_top].scl = 1; - hbonds->select.hbond_list[ihb_top].ptr = nbr_pj; + hbonds->hbond_list[ihb_top].nbr = j; + hbonds->hbond_list[ihb_top].scl = 1; + hbonds->hbond_list[ihb_top].ptr = nbr_pj; ++ihb_top; ++num_hbonds; } else if ( ihb == 2 && jhb == 1 ) { jhb_top = End_Index( workspace->hbond_index[j], hbonds ); - hbonds->select.hbond_list[jhb_top].nbr = i; - hbonds->select.hbond_list[jhb_top].scl = -1; - hbonds->select.hbond_list[jhb_top].ptr = nbr_pj; + hbonds->hbond_list[jhb_top].nbr = i; + hbonds->hbond_list[jhb_top].scl = -1; + hbonds->hbond_list[jhb_top].ptr = nbr_pj; Set_End_Index( workspace->hbond_index[j], jhb_top + 1, hbonds ); ++num_hbonds; } } /* uncorrected bond orders */ - if ( far_nbrs->select.far_nbr_list[pj].d <= control->nbr_cut ) + if ( nbr_pj->d <= control->bond_cut ) { r2 = SQR( r_ij ); @@ -730,8 +740,8 @@ static void Init_Forces( reax_system *system, control_params *control, } else { - BO_s = 0.0; C12 = 0.0; + BO_s = 0.0; } if ( sbp_i->r_pi > 0.0 && sbp_j->r_pi > 0.0 ) @@ -741,8 +751,8 @@ static void Init_Forces( reax_system *system, control_params *control, } else { - BO_pi = 0.0; C34 = 0.0; + BO_pi = 0.0; } if ( sbp_i->r_pi_pi > 0.0 && sbp_j->r_pi_pi > 0.0 ) @@ -752,8 +762,8 @@ static void Init_Forces( reax_system *system, control_params *control, } else { - BO_pi2 = 0.0; C56 = 0.0; + BO_pi2 = 0.0; } /* Initially BO values are the uncorrected ones, page 1 */ @@ -763,9 +773,9 @@ static void Init_Forces( reax_system *system, control_params *control, { num_bonds += 2; /****** bonds i-j and j-i ******/ - ibond = &bonds->select.bond_list[btop_i]; + ibond = &bonds->bond_list[btop_i]; btop_j = End_Index( j, bonds ); - jbond = &bonds->select.bond_list[btop_j]; + jbond = &bonds->bond_list[btop_j]; ibond->nbr = j; jbond->nbr = i; @@ -783,11 +793,15 @@ static void Init_Forces( reax_system *system, control_params *control, Set_End_Index( j, btop_j + 1, bonds ); bo_ij = &ibond->bo_data; + bo_ij->BO = BO; + bo_ij->BO_s = BO_s; + bo_ij->BO_pi = BO_pi; + bo_ij->BO_pi2 = BO_pi2; bo_ji = &jbond->bo_data; - bo_ji->BO = bo_ij->BO = BO; - bo_ji->BO_s = bo_ij->BO_s = BO_s; - bo_ji->BO_pi = bo_ij->BO_pi = BO_pi; - bo_ji->BO_pi2 = bo_ij->BO_pi2 = BO_pi2; + bo_ji->BO = BO; + bo_ji->BO_s = BO_s; + bo_ji->BO_pi = BO_pi; + bo_ji->BO_pi2 = BO_pi2; /* Bond Order page2-3, derivative of total bond order prime */ Cln_BOp_s = twbp->p_bo2 * C12 / r2; @@ -799,17 +813,16 @@ static void Init_Forces( reax_system *system, control_params *control, rvec_Scale( bo_ij->dln_BOp_s, -bo_ij->BO_s * Cln_BOp_s, ibond->dvec ); rvec_Scale( bo_ij->dln_BOp_pi, -bo_ij->BO_pi * Cln_BOp_pi, ibond->dvec ); rvec_Scale( bo_ij->dln_BOp_pi2, - -bo_ij->BO_pi2 * Cln_BOp_pi2, ibond->dvec ); + -bo_ij->BO_pi2 * Cln_BOp_pi2, ibond->dvec ); rvec_Scale( bo_ji->dln_BOp_s, -1., bo_ij->dln_BOp_s ); rvec_Scale( bo_ji->dln_BOp_pi, -1., bo_ij->dln_BOp_pi ); rvec_Scale( bo_ji->dln_BOp_pi2, -1., bo_ij->dln_BOp_pi2 ); /* Only dBOp wrt. dr_i is stored here, note that dBOp/dr_i = -dBOp/dr_j and all others are 0 */ - rvec_Scale( bo_ij->dBOp, - -(bo_ij->BO_s * Cln_BOp_s + - bo_ij->BO_pi * Cln_BOp_pi + - bo_ij->BO_pi2 * Cln_BOp_pi2), ibond->dvec ); + rvec_Scale( bo_ij->dBOp, -(bo_ij->BO_s * Cln_BOp_s + + bo_ij->BO_pi * Cln_BOp_pi + + bo_ij->BO_pi2 * Cln_BOp_pi2), ibond->dvec ); rvec_Scale( bo_ji->dBOp, -1., bo_ij->dBOp ); rvec_Add( workspace->dDeltap_self[i], bo_ij->dBOp ); @@ -915,54 +928,64 @@ static void Init_Forces_Tab( reax_system *system, control_params *control, H_sp->start[i] = H_sp_top; btop_i = End_Index( i, bonds ); sbp_i = &system->reaxprm.sbp[type_i]; - ihb = ihb_top = -1; + ihb = -1; + ihb_top = -1; - if ( control->hb_cut > 0 && (ihb = sbp_i->p_hbond) == 1 ) + if ( control->hbond_cut > 0.0 ) { - ihb_top = End_Index( workspace->hbond_index[i], hbonds ); + ihb = sbp_i->p_hbond; + + if ( ihb == 1 ) + { + ihb_top = End_Index( workspace->hbond_index[i], hbonds ); + } } + /* update i-j distance - check if j is within cutoff */ for ( pj = start_i; pj < end_i; ++pj ) { - nbr_pj = &far_nbrs->select.far_nbr_list[pj]; + nbr_pj = &far_nbrs->far_nbr_list[pj]; j = nbr_pj->nbr; atom_j = &system->atoms[j]; + flag = FALSE; + flag_sp = FALSE; - flag = 0; - flag_sp = 0; + /* check if reneighboring step */ if ( (data->step - data->prev_steps) % control->reneighbor == 0 ) { - if (nbr_pj->d <= control->r_cut) + if (nbr_pj->d <= control->nonb_cut) { - flag = 1; - if ( nbr_pj->d <= control->r_sp_cut ) + flag = TRUE; + if ( nbr_pj->d <= control->nonb_sp_cut ) { - flag_sp = 1; + flag_sp = TRUE; } } - else - { - flag = 0; - flag_sp = 0; - } } else if ((nbr_pj->d = Sq_Distance_on_T3(atom_i->x, atom_j->x, &system->box, - nbr_pj->dvec)) <= SQR(control->r_cut)) + nbr_pj->dvec)) <= SQR(control->nonb_cut)) { - if ( nbr_pj->d <= SQR(control->r_sp_cut)) + nbr_pj->d = Sq_Distance_on_T3( atom_i->x, atom_j->x, + &system->box, nbr_pj->dvec ); + + if ( nbr_pj->d <= SQR(control->nonb_cut) ) { - flag_sp = 1; + if ( nbr_pj->d <= SQR(control->nonb_sp_cut)) + { + flag_sp = TRUE; + } + + nbr_pj->d = SQRT( nbr_pj->d ); + flag = TRUE; } - nbr_pj->d = SQRT( nbr_pj->d ); - flag = 1; } - if ( flag ) + if ( flag == TRUE ) { type_j = system->atoms[j].type; r_ij = nbr_pj->d; - sbp_j = &(system->reaxprm.sbp[type_j]); - twbp = &(system->reaxprm.tbp[type_i][type_j]); + sbp_j = &system->reaxprm.sbp[type_j]; + twbp = &system->reaxprm.tbp[type_i][type_j]; H->j[Htop] = j; H->val[Htop] = Init_Charge_Matrix_Entry( system, control, @@ -970,7 +993,7 @@ static void Init_Forces_Tab( reax_system *system, control_params *control, ++Htop; /* H_sp matrix entry */ - if ( flag_sp ) + if ( flag_sp == TRUE ) { H_sp->j[H_sp_top] = j; H_sp->val[H_sp_top] = H->val[Htop - 1]; @@ -978,32 +1001,33 @@ static void Init_Forces_Tab( reax_system *system, control_params *control, } /* hydrogen bond lists */ - if ( control->hb_cut > 0 && (ihb == 1 || ihb == 2) && - nbr_pj->d <= control->hb_cut ) + if ( control->hbond_cut > 0 && (ihb == 1 || ihb == 2) + && nbr_pj->d <= control->hbond_cut ) { // fprintf( stderr, "%d %d\n", atom1, atom2 ); jhb = sbp_j->p_hbond; + if ( ihb == 1 && jhb == 2 ) { - hbonds->select.hbond_list[ihb_top].nbr = j; - hbonds->select.hbond_list[ihb_top].scl = 1; - hbonds->select.hbond_list[ihb_top].ptr = nbr_pj; + hbonds->hbond_list[ihb_top].nbr = j; + hbonds->hbond_list[ihb_top].scl = 1; + hbonds->hbond_list[ihb_top].ptr = nbr_pj; ++ihb_top; ++num_hbonds; } else if ( ihb == 2 && jhb == 1 ) { jhb_top = End_Index( workspace->hbond_index[j], hbonds ); - hbonds->select.hbond_list[jhb_top].nbr = i; - hbonds->select.hbond_list[jhb_top].scl = -1; - hbonds->select.hbond_list[jhb_top].ptr = nbr_pj; + hbonds->hbond_list[jhb_top].nbr = i; + hbonds->hbond_list[jhb_top].scl = -1; + hbonds->hbond_list[jhb_top].ptr = nbr_pj; Set_End_Index( workspace->hbond_index[j], jhb_top + 1, hbonds ); ++num_hbonds; } } /* uncorrected bond orders */ - if ( far_nbrs->select.far_nbr_list[pj].d <= control->nbr_cut ) + if ( nbr_pj->d <= control->bond_cut ) { r2 = SQR( r_ij ); @@ -1014,8 +1038,8 @@ static void Init_Forces_Tab( reax_system *system, control_params *control, } else { - BO_s = 0.0; C12 = 0.0; + BO_s = 0.0; } if ( sbp_i->r_pi > 0.0 && sbp_j->r_pi > 0.0 ) @@ -1025,8 +1049,8 @@ static void Init_Forces_Tab( reax_system *system, control_params *control, } else { - BO_pi = 0.0; C34 = 0.0; + BO_pi = 0.0; } if ( sbp_i->r_pi_pi > 0.0 && sbp_j->r_pi_pi > 0.0 ) @@ -1036,8 +1060,8 @@ static void Init_Forces_Tab( reax_system *system, control_params *control, } else { - BO_pi2 = 0.0; C56 = 0.0; + BO_pi2 = 0.0; } /* Initially BO values are the uncorrected ones, page 1 */ @@ -1047,9 +1071,9 @@ static void Init_Forces_Tab( reax_system *system, control_params *control, { num_bonds += 2; /****** bonds i-j and j-i ******/ - ibond = &bonds->select.bond_list[btop_i]; + ibond = &bonds->bond_list[btop_i]; btop_j = End_Index( j, bonds ); - jbond = &bonds->select.bond_list[btop_j]; + jbond = &bonds->bond_list[btop_j]; ibond->nbr = j; jbond->nbr = i; @@ -1066,12 +1090,16 @@ static void Init_Forces_Tab( reax_system *system, control_params *control, ++btop_i; Set_End_Index( j, btop_j + 1, bonds ); - bo_ij = &( ibond->bo_data ); - bo_ji = &( jbond->bo_data ); - bo_ji->BO = bo_ij->BO = BO; - bo_ji->BO_s = bo_ij->BO_s = BO_s; - bo_ji->BO_pi = bo_ij->BO_pi = BO_pi; - bo_ji->BO_pi2 = bo_ij->BO_pi2 = BO_pi2; + bo_ij = &ibond->bo_data; + bo_ij->BO = BO; + bo_ij->BO_s = BO_s; + bo_ij->BO_pi = BO_pi; + bo_ij->BO_pi2 = BO_pi2; + bo_ji = &jbond->bo_data; + bo_ji->BO = BO; + bo_ji->BO_s = BO_s; + bo_ji->BO_pi = BO_pi; + bo_ji->BO_pi2 = BO_pi2; /* Bond Order page2-3, derivative of total bond order prime */ Cln_BOp_s = twbp->p_bo2 * C12 / r2; @@ -1083,17 +1111,16 @@ static void Init_Forces_Tab( reax_system *system, control_params *control, rvec_Scale( bo_ij->dln_BOp_s, -bo_ij->BO_s * Cln_BOp_s, ibond->dvec ); rvec_Scale( bo_ij->dln_BOp_pi, -bo_ij->BO_pi * Cln_BOp_pi, ibond->dvec ); rvec_Scale( bo_ij->dln_BOp_pi2, - -bo_ij->BO_pi2 * Cln_BOp_pi2, ibond->dvec ); + -bo_ij->BO_pi2 * Cln_BOp_pi2, ibond->dvec ); rvec_Scale( bo_ji->dln_BOp_s, -1., bo_ij->dln_BOp_s ); rvec_Scale( bo_ji->dln_BOp_pi, -1., bo_ij->dln_BOp_pi ); rvec_Scale( bo_ji->dln_BOp_pi2, -1., bo_ij->dln_BOp_pi2 ); /* Only dBOp wrt. dr_i is stored here, note that dBOp/dr_i = -dBOp/dr_j and all others are 0 */ - rvec_Scale( bo_ij->dBOp, - -(bo_ij->BO_s * Cln_BOp_s + - bo_ij->BO_pi * Cln_BOp_pi + - bo_ij->BO_pi2 * Cln_BOp_pi2), ibond->dvec ); + rvec_Scale( bo_ij->dBOp, -(bo_ij->BO_s * Cln_BOp_s + + bo_ij->BO_pi * Cln_BOp_pi + + bo_ij->BO_pi2 * Cln_BOp_pi2), ibond->dvec ); rvec_Scale( bo_ji->dBOp, -1., bo_ij->dBOp ); rvec_Add( workspace->dDeltap_self[i], bo_ij->dBOp ); @@ -1178,27 +1205,28 @@ void Estimate_Storage_Sizes( reax_system *system, control_params *control, { atom_i = &system->atoms[i]; type_i = atom_i->type; - start_i = Start_Index(i, far_nbrs); - end_i = End_Index(i, far_nbrs); + start_i = Start_Index( i, far_nbrs ); + end_i = End_Index( i, far_nbrs ); sbp_i = &system->reaxprm.sbp[type_i]; ihb = sbp_i->p_hbond; + /* update i-j distance - check if j is within cutoff */ for ( pj = start_i; pj < end_i; ++pj ) { - nbr_pj = &far_nbrs->select.far_nbr_list[pj]; + nbr_pj = &far_nbrs->far_nbr_list[pj]; j = nbr_pj->nbr; atom_j = &system->atoms[j]; type_j = atom_j->type; sbp_j = &system->reaxprm.sbp[type_j]; twbp = &system->reaxprm.tbp[type_i][type_j]; - if ( nbr_pj->d <= control->r_cut ) + if ( nbr_pj->d <= control->nonb_cut ) { ++(*Htop); /* hydrogen bond lists */ - if ( control->hb_cut > 0.1 && (ihb == 1 || ihb == 2) && - nbr_pj->d <= control->hb_cut ) + if ( control->hbond_cut > 0.0 && (ihb == 1 || ihb == 2) + && nbr_pj->d <= control->hbond_cut ) { jhb = sbp_j->p_hbond; @@ -1213,7 +1241,7 @@ void Estimate_Storage_Sizes( reax_system *system, control_params *control, } /* uncorrected bond orders */ - if ( nbr_pj->d <= control->nbr_cut ) + if ( nbr_pj->d <= control->bond_cut ) { r_ij = nbr_pj->d; @@ -1268,7 +1296,7 @@ void Estimate_Storage_Sizes( reax_system *system, control_params *control, for ( i = 0; i < system->N; ++i ) { hb_top[i] = MAX( hb_top[i] * SAFE_HBONDS, MIN_HBONDS ); - *num_3body += SQR(bond_top[i]); + *num_3body += SQR( bond_top[i] ); bond_top[i] = MAX( bond_top[i] * 2, MIN_BONDS ); } *num_3body *= SAFE_ZONE; diff --git a/sPuReMD/src/four_body_interactions.c b/sPuReMD/src/four_body_interactions.c index 23e24408..23896294 100644 --- a/sPuReMD/src/four_body_interactions.c +++ b/sPuReMD/src/four_body_interactions.c @@ -239,7 +239,7 @@ void Four_Body_Interactions( reax_system *system, control_params *control, for ( pk = start_j; pk < end_j; ++pk ) { - pbond_jk = &( bonds->select.bond_list[pk] ); + pbond_jk = &( bonds->bond_list[pk] ); k = pbond_jk->nbr; bo_jk = &( pbond_jk->bo_data ); BOA_jk = bo_jk->BO - control->thb_cut; @@ -280,10 +280,10 @@ void Four_Body_Interactions( reax_system *system, control_params *control, /* pick i up from j-k interaction where j is the centre atom */ for ( pi = start_pk; pi < end_pk; ++pi ) { - p_ijk = &( thb_intrs->select.three_body_list[pi] ); + p_ijk = &thb_intrs->three_body_list[pi]; pij = p_ijk->pthb; // pij is pointer to i on j's bond_list - pbond_ij = &( bonds->select.bond_list[pij] ); - bo_ij = &( pbond_ij->bo_data ); + pbond_ij = &bonds->bond_list[pij]; + bo_ij = &pbond_ij->bo_data; if ( bo_ij->BO > control->thb_cut/*0*/ ) { @@ -321,15 +321,15 @@ void Four_Body_Interactions( reax_system *system, control_params *control, /* pick l up from j-k intr. where k is the centre */ for ( pl = start_pj; pl < end_pj; ++pl ) { - p_jkl = &( thb_intrs->select.three_body_list[pl] ); + p_jkl = &thb_intrs->three_body_list[pl]; l = p_jkl->thb; plk = p_jkl->pthb; //pointer to l on k's bond_list! - pbond_kl = &( bonds->select.bond_list[plk] ); - bo_kl = &( pbond_kl->bo_data ); + pbond_kl = &bonds->bond_list[plk]; + bo_kl = &pbond_kl->bo_data; type_l = system->atoms[l].type; - fbh = &(system->reaxprm.fbp[type_i][type_j][type_k][type_l]); - fbp = &(system->reaxprm.fbp[type_i][type_j] - [type_k][type_l].prm[0]); + fbh = &system->reaxprm.fbp[type_i][type_j][type_k][type_l]; + fbp = &system->reaxprm.fbp[type_i][type_j] + [type_k][type_l].prm[0]; if ( i != l && fbh->cnt && bo_kl->BO > control->thb_cut && bo_ij->BO * bo_jk->BO * bo_kl->BO > control->thb_cut ) diff --git a/sPuReMD/src/geo_tools.c b/sPuReMD/src/geo_tools.c index 45e36abd..2e09f60b 100644 --- a/sPuReMD/src/geo_tools.c +++ b/sPuReMD/src/geo_tools.c @@ -56,7 +56,7 @@ static void Count_Geo_Atoms( FILE *geo, reax_system *system ) static int Read_Box_Info( reax_system *system, FILE *geo, int geo_format ) { - int ret; + int ret, cryst_len; char *cryst; char line[MAX_LINE + 1]; char descriptor[9]; @@ -73,10 +73,12 @@ static int Read_Box_Info( reax_system *system, FILE *geo, int geo_format ) { case PDB: cryst = "CRYST1"; + cryst_len = 6; break; default: cryst = "BOX"; + cryst_len = 3; break; } @@ -84,7 +86,7 @@ static int Read_Box_Info( reax_system *system, FILE *geo, int geo_format ) initialize the big box */ while ( fgets( line, MAX_LINE, geo ) ) { - if ( strncmp( line, cryst, 6 ) == 0 ) + if ( strncmp( line, cryst, cryst_len ) == 0 ) { if ( geo_format == PDB ) { @@ -100,6 +102,7 @@ static int Read_Box_Info( reax_system *system, FILE *geo, int geo_format ) &system->box ); ret = SUCCESS; + break; } } } @@ -172,15 +175,14 @@ static void Count_PDB_Atoms( FILE *geo, reax_system *system ) char s_x[9], s_y[9], s_z[9]; rvec x; - /* initialize variables */ - fseek( geo, 0, SEEK_SET ); /* set the pointer to the beginning of the file */ + fseek( geo, 0, SEEK_SET ); system->N = 0; /* increment number of atoms for each line denoting an atom desc */ while ( fgets( line, MAX_LINE, geo ) ) { - if ( strncmp( line, "ATOM", 4 ) == 0 || - strncmp( line, "HETATM", 6 ) == 0 ) + if ( strncmp( line, "ATOM", 4 ) == 0 + || strncmp( line, "HETATM", 6 ) == 0 ) { system->N++; @@ -231,8 +233,8 @@ void Read_PDB( const char * const pdb_file, reax_system* system, control_params /* read box information */ if ( Read_Box_Info( system, pdb, PDB ) == FAILURE ) { - fprintf( stderr, "Read_Box_Info: no CRYST line in the pdb file!" ); - fprintf( stderr, "terminating...\n" ); + fprintf( stderr, "[ERROR] Read_Box_Info: no CRYST line in the pdb file!" ); + fprintf( stderr, " Terminating...\n" ); exit( INVALID_GEO ); } @@ -289,7 +291,7 @@ void Read_PDB( const char * const pdb_file, reax_system* system, control_params strncpy( &charge[0], s1 + 78, 2 ); charge[2] = 0; } - else if (strncmp(tmp[0], "HETATM", 6) == 0) + else if ( strncmp(tmp[0], "HETATM", 6) == 0 ) { strncpy( &descriptor[0], s1, 6 ); descriptor[6] = 0; @@ -324,36 +326,38 @@ void Read_PDB( const char * const pdb_file, reax_system* system, control_params } /* if the point is inside my_box, add it to my lists */ - Make_Point( strtod( &s_x[0], &endptr ), - strtod( &s_y[0], &endptr ), - strtod( &s_z[0], &endptr ), &x ); + Make_Point( strtod( &s_x[0], &endptr ), strtod( &s_y[0], &endptr ), + strtod( &s_z[0], &endptr ), &x ); - Fit_to_Periodic_Box( &(system->box), &x ); + Fit_to_Periodic_Box( &system->box, &x ); - /* store orig_id, type, name and coord info of the new atom */ - atom = &(system->atoms[top]); - pdb_serial = (int) strtod( &serial[0], &endptr ); - workspace->orig_id[top] = pdb_serial; + if ( is_Inside_Box( &system->box, x ) ) + { + /* store orig_id, type, name and coord info of the new atom */ + atom = &system->atoms[top]; + pdb_serial = (int) strtod( &serial[0], &endptr ); + workspace->orig_id[top] = pdb_serial; - Trim_Spaces( element, 9 ); - atom->type = Get_Atom_Type( &(system->reaxprm), element ); - strncpy( atom->name, atom_name, 8 ); + Trim_Spaces( element, 9 ); + atom->type = Get_Atom_Type( &system->reaxprm, element ); + strncpy( atom->name, atom_name, 8 ); - rvec_Copy( atom->x, x ); - rvec_MakeZero( atom->v ); - rvec_MakeZero( atom->f ); - atom->q = 0; + rvec_Copy( atom->x, x ); + rvec_MakeZero( atom->v ); + rvec_MakeZero( atom->f ); + atom->q = 0; - top++; + top++; + } c++; } /* IMPORTANT: We do not check for the soundness of restrictions here. - When atom2 is on atom1's restricted list, and there is a restriction - on atom2, then atom1 has to be on atom2's restricted list, too. - However, we do not check if this is the case in the input file, - this is upto the user. */ - else if (!strncmp( tmp[0], "CONECT", 6 )) + * When atom2 is on atom1's restricted list, and there is a restriction + * on atom2, then atom1 has to be on atom2's restricted list, too. + * However, we do not check if this is the case in the input file, + * this is upto the user. */ + else if ( !strncmp( tmp[0], "CONECT", 6 ) ) { if ( control->restrict_bonds ) { diff --git a/sPuReMD/src/init_md.c b/sPuReMD/src/init_md.c index 47b4ecb4..af1d3517 100644 --- a/sPuReMD/src/init_md.c +++ b/sPuReMD/src/init_md.c @@ -152,6 +152,7 @@ static void Init_Simulation_Data( reax_system *system, control_params *control, case nhNVT: data->N_f = 3 * system->N + 1; + *Evolve = Velocity_Verlet_Nose_Hoover_NVT_Klein; //control->Tau_T = 100 * data->N_f * K_B * control->T_final; if ( !control->restart || (control->restart && control->random_vel) ) @@ -168,8 +169,6 @@ static void Init_Simulation_Data( reax_system *system, control_params *control, data->N_f, data->therm.v_xi ); #endif } - - *Evolve = Velocity_Verlet_Nose_Hoover_NVT_Klein; break; /* anisotropic NPT */ @@ -178,6 +177,7 @@ static void Init_Simulation_Data( reax_system *system, control_params *control, exit( UNKNOWN_OPTION ); data->N_f = 3 * system->N + 9; + *Evolve = Velocity_Verlet_Berendsen_Isotropic_NPT; if ( !control->restart ) { @@ -188,8 +188,6 @@ static void Init_Simulation_Data( reax_system *system, control_params *control, //data->inv_W = 1. / (data->N_f*K_B*control->T*SQR(control->Tau_P)); //Compute_Pressure( system, data, workspace ); } - - *Evolve = Velocity_Verlet_Berendsen_Isotropic_NPT; break; /* semi-isotropic NPT */ @@ -238,8 +236,8 @@ static void Init_Taper( control_params *control, static_storage *workspace ) real swa, swa2, swa3; real swb, swb2, swb3; - swa = control->r_low; - swb = control->r_cut; + swa = control->nonb_low; + swb = control->nonb_cut; if ( FABS( swa ) > 0.01 ) { @@ -779,7 +777,7 @@ static void Init_Lists( reax_system *system, control_params *control, #endif workspace->num_H = 0; - if ( control->hb_cut > 0.0 ) + if ( control->hbond_cut > 0.0 ) { /* init H indexes */ for ( i = 0; i < system->N; ++i ) @@ -797,7 +795,7 @@ static void Init_Lists( reax_system *system, control_params *control, if ( workspace->num_H == 0 ) { - control->hb_cut = 0.0; + control->hbond_cut = 0.0; } else { @@ -1439,7 +1437,7 @@ static void Finalize_Workspace( reax_system *system, control_params *control, static void Finalize_Lists( control_params *control, reax_list **lists ) { Delete_List( TYP_FAR_NEIGHBOR, lists[FAR_NBRS] ); - if ( control->hb_cut > 0.0 ) + if ( control->hbond_cut > 0.0 ) { Delete_List( TYP_HBOND, lists[HBONDS] ); } diff --git a/sPuReMD/src/integrate.c b/sPuReMD/src/integrate.c index 5698379c..62d4fc64 100644 --- a/sPuReMD/src/integrate.c +++ b/sPuReMD/src/integrate.c @@ -57,11 +57,11 @@ void Velocity_Verlet_NVE(reax_system *system, control_params *control, inv_m = 1.0 / system->reaxprm.sbp[system->atoms[i].type].mass; rvec_ScaledSum( dx, dt, system->atoms[i].v, - -0.5 * dt_sqr * F_CONV * inv_m, system->atoms[i].f ); - Inc_on_T3( system->atoms[i].x, dx, &( system->box ) ); - + 0.5 * dt_sqr * -F_CONV * inv_m, system->atoms[i].f ); +// Inc_on_T3( system->atoms[i].x, dx, &system->box ); + rvec_Add( system->atoms[i].x, dx ); rvec_ScaledAdd( system->atoms[i].v, - -0.5 * dt * F_CONV * inv_m, system->atoms[i].f ); + 0.5 * dt * -F_CONV * inv_m, system->atoms[i].f ); } #if defined(DEBUG_FOCUS) @@ -69,6 +69,7 @@ void Velocity_Verlet_NVE(reax_system *system, control_params *control, #endif Reallocate( system, control, workspace, lists, renbr ); + Reset( system, control, data, workspace, lists ); if ( renbr ) @@ -83,7 +84,7 @@ void Velocity_Verlet_NVE(reax_system *system, control_params *control, { inv_m = 1.0 / system->reaxprm.sbp[system->atoms[i].type].mass; rvec_ScaledAdd( system->atoms[i].v, - -0.5 * dt * F_CONV * inv_m, system->atoms[i].f ); + 0.5 * dt * -F_CONV * inv_m, system->atoms[i].f ); } #if defined(DEBUG_FOCUS) diff --git a/sPuReMD/src/list.c b/sPuReMD/src/list.c index 85805eb9..02246843 100644 --- a/sPuReMD/src/list.c +++ b/sPuReMD/src/list.c @@ -35,48 +35,48 @@ void Make_List( int n, int total_intrs, int type, reax_list* l ) switch ( type ) { case TYP_VOID: - l->select.v = smalloc( l->total_intrs * sizeof(void), - "Make_List::l->select.v" ); + l->v = smalloc( l->total_intrs * sizeof(void), + "Make_List::l->v" ); break; case TYP_THREE_BODY: - l->select.three_body_list = smalloc( l->total_intrs * sizeof(three_body_interaction_data), - "Make_List::l->select.three_body_list" ); + l->three_body_list = smalloc( l->total_intrs * sizeof(three_body_interaction_data), + "Make_List::l->three_body_list" ); break; case TYP_BOND: - l->select.bond_list = smalloc( l->total_intrs * sizeof(bond_data), - "Make_List::l->select.bond_list" ); + l->bond_list = smalloc( l->total_intrs * sizeof(bond_data), + "Make_List::l->bond_list" ); break; case TYP_DBO: - l->select.dbo_list = smalloc( l->total_intrs * sizeof(dbond_data), - "Make_List::l->select.dbo_list" ); + l->dbo_list = smalloc( l->total_intrs * sizeof(dbond_data), + "Make_List::l->dbo_list" ); break; case TYP_DDELTA: - l->select.dDelta_list = smalloc( l->total_intrs * sizeof(dDelta_data), - "Make_List::l->select.dDelta_list" ); + l->dDelta_list = smalloc( l->total_intrs * sizeof(dDelta_data), + "Make_List::l->dDelta_list" ); break; case TYP_FAR_NEIGHBOR: - l->select.far_nbr_list = smalloc( l->total_intrs * sizeof(far_neighbor_data), - "Make_List::l->select.far_nbr_list" ); + l->far_nbr_list = smalloc( l->total_intrs * sizeof(far_neighbor_data), + "Make_List::l->far_nbr_list" ); break; case TYP_NEAR_NEIGHBOR: - l->select.near_nbr_list = smalloc( l->total_intrs * sizeof(near_neighbor_data), - "Make_List::l->select.near_nbr_list" ); + l->near_nbr_list = smalloc( l->total_intrs * sizeof(near_neighbor_data), + "Make_List::l->near_nbr_list" ); break; case TYP_HBOND: - l->select.hbond_list = smalloc( l->total_intrs * sizeof(hbond_data), - "Make_List::l->select.hbond_list" ); + l->hbond_list = smalloc( l->total_intrs * sizeof(hbond_data), + "Make_List::l->hbond_list" ); break; default: - l->select.v = smalloc( l->total_intrs * sizeof(void), - "Make_List::l->select.v" ); + l->v = smalloc( l->total_intrs * sizeof(void), + "Make_List::l->v" ); break; } } @@ -90,35 +90,35 @@ void Delete_List( int type, reax_list* l ) switch ( type ) { case TYP_VOID: - sfree( l->select.v, "Delete_List::l->select.v" ); + sfree( l->v, "Delete_List::l->v" ); break; case TYP_THREE_BODY: - sfree( l->select.three_body_list, "Delete_List::l->select.three_body_list" ); + sfree( l->three_body_list, "Delete_List::l->three_body_list" ); break; case TYP_BOND: - sfree( l->select.bond_list, "Delete_List::l->select.bond_list" ); + sfree( l->bond_list, "Delete_List::l->bond_list" ); break; case TYP_DBO: - sfree( l->select.dbo_list, "Delete_List::l->select.dbo_list" ); + sfree( l->dbo_list, "Delete_List::l->dbo_list" ); break; case TYP_DDELTA: - sfree( l->select.dDelta_list, "Delete_List::l->select.dDelta_list" ); + sfree( l->dDelta_list, "Delete_List::l->dDelta_list" ); break; case TYP_FAR_NEIGHBOR: - sfree( l->select.far_nbr_list, "Delete_List::l->select.far_nbr_list" ); + sfree( l->far_nbr_list, "Delete_List::l->far_nbr_list" ); break; case TYP_NEAR_NEIGHBOR: - sfree( l->select.near_nbr_list, "Delete_List::l->select.near_nbr_list" ); + sfree( l->near_nbr_list, "Delete_List::l->near_nbr_list" ); break; case TYP_HBOND: - sfree( l->select.hbond_list, "Delete_List::l->select.hbond_list" ); + sfree( l->hbond_list, "Delete_List::l->hbond_list" ); break; default: diff --git a/sPuReMD/src/lookup.c b/sPuReMD/src/lookup.c index 6af97014..332b1e14 100644 --- a/sPuReMD/src/lookup.c +++ b/sPuReMD/src/lookup.c @@ -245,7 +245,7 @@ void Make_LR_Lookup_Table( reax_system *system, control_params *control, v0_vdw = 0; num_atom_types = system->reaxprm.num_atom_types; - dr = control->r_cut / control->tabulate; + dr = control->nonb_cut / control->tabulate; h = scalloc( (control->tabulate + 1), sizeof(real), "Make_LR_Lookup_Table::h" ); fh = scalloc( (control->tabulate + 1), sizeof(real), @@ -292,10 +292,10 @@ void Make_LR_Lookup_Table( reax_system *system, control_params *control, if ( existing_types[j] ) { workspace->LR[i][j].xmin = 0; - workspace->LR[i][j].xmax = control->r_cut; + workspace->LR[i][j].xmax = control->nonb_cut; workspace->LR[i][j].n = control->tabulate + 1; workspace->LR[i][j].dx = dr; - workspace->LR[i][j].inv_dx = control->tabulate / control->r_cut; + workspace->LR[i][j].inv_dx = control->tabulate / control->nonb_cut; workspace->LR[i][j].y = smalloc( workspace->LR[i][j].n * sizeof(LR_data), "Make_LR_Lookup_Table::LR[i][j].y" ); diff --git a/sPuReMD/src/neighbors.c b/sPuReMD/src/neighbors.c index 8a6d5a42..aab95c34 100644 --- a/sPuReMD/src/neighbors.c +++ b/sPuReMD/src/neighbors.c @@ -61,11 +61,10 @@ int Estimate_Num_Neighbors( reax_system *system, control_params *control, far_neighbor_data nbr_data; g = &system->g; + num_far = 0; Bin_Atoms( system, workspace ); - num_far = 0; - /* first pick up a cell in the grid */ for ( i = 0; i < g->ncell[0]; i++ ) { @@ -149,9 +148,9 @@ void Choose_Neighbor_Finder( reax_system *system, control_params *control, if ( control->periodic_boundaries ) { #ifdef SMALL_BOX_SUPPORT - if ( system->box.box_norms[0] > 2.0 * control->vlist_cut - && system->box.box_norms[1] > 2.0 * control->vlist_cut - && system->box.box_norms[2] > 2.0 * control->vlist_cut ) + if ( system->box.box_norms[0] >= 2.0 * control->vlist_cut + && system->box.box_norms[1] >= 2.0 * control->vlist_cut + && system->box.box_norms[2] >= 2.0 * control->vlist_cut ) { *Find_Far_Neighbors = &Find_Periodic_Far_Neighbors_Big_Box; } @@ -245,7 +244,7 @@ void Generate_Neighbor_Lists( reax_system *system, control_params *control, if ( atom1 > atom2 ) { - nbr_data = &far_nbrs->select.far_nbr_list[num_far]; + nbr_data = &far_nbrs->far_nbr_list[num_far]; count = Find_Far_Neighbors( system->atoms[atom1].x, system->atoms[atom2].x, atom1, atom2, &system->box, control->vlist_cut, nbr_data ); @@ -281,7 +280,7 @@ void Generate_Neighbor_Lists( reax_system *system, control_params *control, #if defined(DEBUG) for ( i = 0; i < system->N; ++i ) { - qsort( &far_nbrs->select.far_nbr_list[ Start_Index(i, far_nbrs) ], + qsort( &far_nbrs->far_nbr_list[ Start_Index(i, far_nbrs) ], Num_Entries(i, far_nbrs), sizeof(far_neighbor_data), compare_far_nbrs ); } @@ -304,7 +303,7 @@ static inline int is_Near_Neighbor( reax_list *near_nbrs, int atom1, int atom2 ) for ( i = Start_Index(atom1, near_nbrs); i < End_Index(atom1, near_nbrs); ++i ) { - if ( near_nbrs->select.near_nbr_list[i].nbr == atom2 ) + if ( near_nbrs->near_nbr_list[i].nbr == atom2 ) { return FALSE; } @@ -408,7 +407,7 @@ void Generate_Neighbor_Lists( reax_system *system, control_params *control, if ( atom1 >= atom2 ) { - nbr_data = &far_nbrs->select.far_nbr_list[num_far]; + nbr_data = &far_nbrs->far_nbr_list[num_far]; //top_near1 = End_Index( atom1, near_nbrs ); //Set_Start_Index( atom1, num_far, far_nbrs ); @@ -461,11 +460,11 @@ void Generate_Neighbor_Lists( reax_system *system, control_params *control, system->atoms[ atom2 ].x, &system->box, control, new_nbrs, &count ); - Set_Near_Neighbor( &near_nbrs->select.near_nbr_list[ top_near1 ], atom2, + Set_Near_Neighbor( &near_nbrs->near_nbr_list[ top_near1 ], atom2, new_nbrs[c].d, 1.0, new_nbrs[c].dvec, new_nbrs[c].rel_box ); ++top_near1; - Set_Near_Neighbor( &near_nbrs->select.near_nbr_list[ top_near2 ], atom1, + Set_Near_Neighbor( &near_nbrs->near_nbr_list[ top_near2 ], atom1, new_nbrs[c].d, -1.0, new_nbrs[c].dvec, new_nbrs[c].rel_box ); Set_End_Index( atom2, top_near2 + 1, near_nbrs ); } @@ -504,7 +503,7 @@ void Generate_Neighbor_Lists( reax_system *system, control_params *control, for ( i = 0; i < system->N; ++i ) { - qsort( &near_nbrs->select.near_nbr_list[ Start_Index(i, near_nbrs) ], + qsort( &near_nbrs->near_nbr_list[ Start_Index(i, near_nbrs) ], Num_Entries(i, near_nbrs), sizeof(near_neighbor_data), compare_near_nbrs ); } @@ -512,7 +511,7 @@ void Generate_Neighbor_Lists( reax_system *system, control_params *control, #ifdef TEST_ENERGY // for ( i = 0; i < system->N; ++i ) // { -// qsort( &far_nbrs->select.far_nbr_list[ Start_Index(i, far_nbrs) ], +// qsort( &far_nbrs->far_nbr_list[ Start_Index(i, far_nbrs) ], // Num_Entries(i, far_nbrs), sizeof(far_neighbor_data), compare_far_nbrs ); // } diff --git a/sPuReMD/src/print_utils.c b/sPuReMD/src/print_utils.c index 22aceadf..6f75f431 100644 --- a/sPuReMD/src/print_utils.c +++ b/sPuReMD/src/print_utils.c @@ -54,13 +54,13 @@ void Print_Bond_Orders( reax_system *system, control_params *control, { for ( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj ) { - bo_ij = &(bonds->select.bond_list[pj].bo_data); + bo_ij = &(bonds->bond_list[pj].bo_data); fprintf( out_control->fbo, "%6d%6d%23.15e%23.15e%23.15e%23.15e%23.15e\n", //workspace->orig_id[i], - //workspace->orig_id[bonds->select.bond_list[pj].nbr], + //workspace->orig_id[bonds->bond_list[pj].nbr], i + 1, - bonds->select.bond_list[pj].nbr + 1, - bonds->select.bond_list[pj].d, + bonds->bond_list[pj].nbr + 1, + bonds->bond_list[pj].d, bo_ij->BO, bo_ij->BO_s, bo_ij->BO_pi, bo_ij->BO_pi2 ); } } @@ -75,29 +75,29 @@ void Print_Bond_Orders( reax_system *system, control_params *control, { /*fprintf( out_control->fdbo, "%6d %6d\tstart: %6d\tend: %6d\n", workspace->orig_id[i], - workspace->orig_id[bonds->select.bond_list[pj].nbr], + workspace->orig_id[bonds->bond_list[pj].nbr], Start_Index( pj, dBOs ), End_Index( pj, dBOs ) );*/ for ( pk = Start_Index(pj, dBOs); pk < End_Index(pj, dBOs); ++pk ) { - dbo_k = &(dBOs->select.dbo_list[pk]); + dbo_k = &dBOs->dbo_list[pk]; //if( !rvec_isZero( dbo_k->dBO ) ) fprintf( out_control->fdbo, "%6d%6d%6d%23.15e%23.15e%23.15e\n", workspace->orig_id[i], - workspace->orig_id[bonds->select.bond_list[pj].nbr], + workspace->orig_id[bonds->bond_list[pj].nbr], workspace->orig_id[dbo_k->wrt], dbo_k->dBO[0], dbo_k->dBO[1], dbo_k->dBO[2] ); fprintf( out_control->fdbo, "%6d%6d%6d%23.15e%23.15e%23.15e\n", workspace->orig_id[i], - workspace->orig_id[bonds->select.bond_list[pj].nbr], + workspace->orig_id[bonds->bond_list[pj].nbr], workspace->orig_id[dbo_k->wrt], dbo_k->dBOpi[0], dbo_k->dBOpi[1], dbo_k->dBOpi[2] ); fprintf( out_control->fdbo, "%6d%6d%6d%23.15e%23.15e%23.15e\n", workspace->orig_id[i], - workspace->orig_id[bonds->select.bond_list[pj].nbr], + workspace->orig_id[bonds->bond_list[pj].nbr], workspace->orig_id[dbo_k->wrt], dbo_k->dBOpi2[0], dbo_k->dBOpi2[1], dbo_k->dBOpi2[2] ); } @@ -415,15 +415,15 @@ void Print_Near_Neighbors( reax_system *system, control_params *control, for ( j = Start_Index(i, near_nbrs); j < End_Index(i, near_nbrs); ++j ) { - id_j = workspace->orig_id[near_nbrs->select.near_nbr_list[j].nbr]; + id_j = workspace->orig_id[near_nbrs->near_nbr_list[j].nbr]; // if( id_i < id_j ) fprintf( fout, "%6d%6d%23.15e%23.15e%23.15e%23.15e\n", id_i, id_j, - near_nbrs->select.near_nbr_list[j].d, - near_nbrs->select.near_nbr_list[j].dvec[0], - near_nbrs->select.near_nbr_list[j].dvec[1], - near_nbrs->select.near_nbr_list[j].dvec[2] ); + near_nbrs->near_nbr_list[j].d, + near_nbrs->near_nbr_list[j].dvec[0], + near_nbrs->near_nbr_list[j].dvec[1], + near_nbrs->near_nbr_list[j].dvec[2] ); } } @@ -449,15 +449,15 @@ void Print_Near_Neighbors2( reax_system *system, control_params *control, fprintf( fout, "%6d:", id_i); for ( j = Start_Index(i, near_nbrs); j < End_Index(i, near_nbrs); ++j ) { - id_j = workspace->orig_id[near_nbrs->select.near_nbr_list[j].nbr]; + id_j = workspace->orig_id[near_nbrs->near_nbr_list[j].nbr]; fprintf( fout, "%6d", id_j); /* fprintf( fout, "%6d%6d%23.15e%23.15e%23.15e%23.15e\n", id_i, id_j, - near_nbrs->select.near_nbr_list[j].d, - near_nbrs->select.near_nbr_list[j].dvec[0], - near_nbrs->select.near_nbr_list[j].dvec[1], - near_nbrs->select.near_nbr_list[j].dvec[2] ); */ + near_nbrs->near_nbr_list[j].d, + near_nbrs->near_nbr_list[j].dvec[0], + near_nbrs->near_nbr_list[j].dvec[1], + near_nbrs->near_nbr_list[j].dvec[2] ); */ } fprintf( fout, "\n"); } @@ -484,21 +484,21 @@ void Print_Far_Neighbors( reax_system *system, control_params *control, for ( j = Start_Index(i, far_nbrs); j < End_Index(i, far_nbrs); ++j ) { - id_j = workspace->orig_id[far_nbrs->select.far_nbr_list[j].nbr]; + id_j = workspace->orig_id[far_nbrs->far_nbr_list[j].nbr]; fprintf( fout, "%6d%6d%23.15e%23.15e%23.15e%23.15e\n", id_i, id_j, - far_nbrs->select.far_nbr_list[j].d, - far_nbrs->select.far_nbr_list[j].dvec[0], - far_nbrs->select.far_nbr_list[j].dvec[1], - far_nbrs->select.far_nbr_list[j].dvec[2] ); + far_nbrs->far_nbr_list[j].d, + far_nbrs->far_nbr_list[j].dvec[0], + far_nbrs->far_nbr_list[j].dvec[1], + far_nbrs->far_nbr_list[j].dvec[2] ); fprintf( fout, "%6d%6d%23.15e%23.15e%23.15e%23.15e\n", id_j, id_i, - far_nbrs->select.far_nbr_list[j].d, - -far_nbrs->select.far_nbr_list[j].dvec[0], - -far_nbrs->select.far_nbr_list[j].dvec[1], - -far_nbrs->select.far_nbr_list[j].dvec[2] ); + far_nbrs->far_nbr_list[j].d, + -far_nbrs->far_nbr_list[j].dvec[0], + -far_nbrs->far_nbr_list[j].dvec[1], + -far_nbrs->far_nbr_list[j].dvec[2] ); } } @@ -533,7 +533,7 @@ void Print_Far_Neighbors2( reax_system *system, control_params *control, for ( j = Start_Index(i, far_nbrs); j < End_Index(i, far_nbrs); ++j ) { - id_j = workspace->orig_id[far_nbrs->select.far_nbr_list[j].nbr]; + id_j = workspace->orig_id[far_nbrs->far_nbr_list[j].nbr]; temp[num++] = id_j; } qsort(&temp, num, sizeof(int), fn_qsort_intcmp); @@ -974,8 +974,8 @@ void Print_Bonds( reax_system *system, reax_list *bonds, char *fname ) { for ( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj ) { - pbond = &(bonds->select.bond_list[pj]); - bo_ij = &(pbond->bo_data); + pbond = &bonds->bond_list[pj]; + bo_ij = &pbond->bo_data; //fprintf( f, "%6d%6d%23.15e%23.15e%23.15e%23.15e%23.15e\n", // i+1, pbond->nbr+1, pbond->d, // bo_ij->BO, bo_ij->BO_s, bo_ij->BO_pi, bo_ij->BO_pi2 ); @@ -1002,7 +1002,7 @@ void Print_Bond_List2( reax_system *system, reax_list *bonds, char *fname ) fprintf( f, "%6d:", id_i); for ( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj ) { - nbr = bonds->select.bond_list[pj].nbr; + nbr = bonds->bond_list[pj].nbr; id_j = nbr + 1; //system->my_atoms[nbr].orig_id; if ( id_i < id_j ) { @@ -1010,7 +1010,7 @@ void Print_Bond_List2( reax_system *system, reax_list *bonds, char *fname ) } } - qsort(&temp, num, sizeof(int), fn_qsort_intcmp); + qsort( &temp, num, sizeof(int), fn_qsort_intcmp ); for ( j = 0; j < num; j++ ) { fprintf( f, "%6d", temp[j] ); diff --git a/sPuReMD/src/reax_types.h b/sPuReMD/src/reax_types.h index 87be5e87..3355a85c 100644 --- a/sPuReMD/src/reax_types.h +++ b/sPuReMD/src/reax_types.h @@ -46,7 +46,7 @@ #define REORDER_ATOMS /* enables support for small simulation boxes (i.e. a simulation box with any * dimension less than twice the Verlet list cutoff distance, vlist_cut) */ -#define SMALL_BOX_SUPPORT +//#define SMALL_BOX_SUPPORT #define SUCCESS (1) #define FAILURE (0) @@ -562,6 +562,8 @@ struct simulation_box { real volume; + rvec min; + rvec max; rvec box_norms; rvec side_prop; rvec nbr_box_press[27]; @@ -632,22 +634,40 @@ struct control_params * 4 : iNPT (Parrinello-Rehman-Nose-Hoover) isotropic * 5 : aNPT (Parrinello-Rehman-Nose-Hoover) anisotropic */ int ensemble; + /* number of simulation time steps */ int nsteps; + /* */ int periodic_boundaries; + /* */ int restrict_bonds; + /* */ int tabulate; + /* simulation time step length (in fs) */ real dt; - + /* number of simulation steps to elapse before + * recomputing the verlet lists */ int reneighbor; + /* cutoff (in Angstroms) used for for constructing the + * long range interaction Verlet list (a.k.a. far neighbor list) */ real vlist_cut; - real nbr_cut; - /* upper and lower taper */ - real r_cut; - real r_sp_cut; - real r_low; + /* bonded interaction cutoff (in Angstroms) */ + real bond_cut; + /* nonbonded interaction cutoff (in Angstroms), + * also used as upper taper radius */ + real nonb_cut; + /* shorter version of nonbonded interaction cutoff (in Angstroms), + * used for computing sparser charge matrix + * for electrostatic interactions */ + real nonb_sp_cut; + /* shorter version of nonbonded interaction cutoff (in Angstroms), + * used for lower taper radius */ + real nonb_low; + /* bond order cutoff (in Angstroms) */ real bo_cut; + /* three body (valence angle) cutoff (in Angstroms) */ real thb_cut; - real hb_cut; + /* hydrogen bonding cutoff (in Angstroms) */ + real hbond_cut; real T_init; real T_final; @@ -1223,25 +1243,41 @@ struct reax_list /* max. num. of interactions per atom */ int *max_intrs; /* interaction list (polymorphic via union dereference) */ - union - { - /* typeless interaction list */ - void *v; - /* three body interaction list */ - three_body_interaction_data *three_body_list; - /* bond interaction list */ - bond_data *bond_list; - /* bond interaction list */ - dbond_data *dbo_list; - /* test forces interaction list */ - dDelta_data *dDelta_list; - /* far neighbor interaction list */ - far_neighbor_data *far_nbr_list; - /* near neighbor interaction list */ - near_neighbor_data *near_nbr_list; - /* hydrogen bond interaction list */ - hbond_data *hbond_list; - } select; +// union +// { +// /* typeless interaction list */ +// void *v; +// /* three body interaction list */ +// three_body_interaction_data *three_body_list; +// /* bond interaction list */ +// bond_data *bond_list; +// /* bond interaction list */ +// dbond_data *dbo_list; +// /* test forces interaction list */ +// dDelta_data *dDelta_list; +// /* far neighbor interaction list */ +// far_neighbor_data *far_nbr_list; +// /* near neighbor interaction list */ +// near_neighbor_data *near_nbr_list; +// /* hydrogen bond interaction list */ +// hbond_data *hbond_list; +// } select; + /* typeless interaction list */ + void *v; + /* three body interaction list */ + three_body_interaction_data *three_body_list; + /* bond interaction list */ + bond_data *bond_list; + /* bond interaction list */ + dbond_data *dbo_list; + /* test forces interaction list */ + dDelta_data *dDelta_list; + /* far neighbor interaction list */ + far_neighbor_data *far_nbr_list; + /* near neighbor interaction list */ + near_neighbor_data *near_nbr_list; + /* hydrogen bond interaction list */ + hbond_data *hbond_list; }; diff --git a/sPuReMD/src/reset_utils.c b/sPuReMD/src/reset_utils.c index aa58850f..6a6a808b 100644 --- a/sPuReMD/src/reset_utils.c +++ b/sPuReMD/src/reset_utils.c @@ -130,7 +130,7 @@ void Reset_Neighbor_Lists( reax_system *system, control_params *control, Set_End_Index( i, tmp, bonds ); } - if ( control->hb_cut > 0 ) + if ( control->hbond_cut > 0 ) { for ( i = 0; i < system->N; ++i ) { diff --git a/sPuReMD/src/single_body_interactions.c b/sPuReMD/src/single_body_interactions.c index 667c7ae3..192b45eb 100644 --- a/sPuReMD/src/single_body_interactions.c +++ b/sPuReMD/src/single_body_interactions.c @@ -95,15 +95,15 @@ void LonePair_OverUnder_Coordination_Energy( reax_system *system, control_params { for ( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj ) { - if ( i < bonds->select.bond_list[pj].nbr ) + if ( i < bonds->bond_list[pj].nbr ) { - j = bonds->select.bond_list[pj].nbr; + j = bonds->bond_list[pj].nbr; type_j = system->atoms[j].type; if ( !strncmp( system->reaxprm.sbp[type_j].name, "C", 15 ) ) { - twbp = &( system->reaxprm.tbp[type_i][type_j]); - bo_ij = &( bonds->select.bond_list[pj].bo_data ); + twbp = &system->reaxprm.tbp[type_i][type_j]; + bo_ij = &bonds->bond_list[pj].bo_data; Di = workspace->Delta[i]; vov3 = bo_ij->BO - Di - 0.040 * POW(Di, 4.); @@ -155,10 +155,10 @@ void LonePair_OverUnder_Coordination_Energy( reax_system *system, control_params for ( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj ) { - j = bonds->select.bond_list[pj].nbr; + j = bonds->bond_list[pj].nbr; type_j = system->atoms[j].type; - bo_ij = &(bonds->select.bond_list[pj].bo_data); - twbp = &(system->reaxprm.tbp[ type_i ][ type_j ]); + bo_ij = &bonds->bond_list[pj].bo_data; + twbp = &system->reaxprm.tbp[ type_i ][ type_j ]; sum_ovun1 += twbp->p_ovun1 * twbp->De_s * bo_ij->BO; sum_ovun2 += (workspace->Delta[j] - dfvl * workspace->Delta_lp_temp[j]) * @@ -220,11 +220,11 @@ void LonePair_OverUnder_Coordination_Energy( reax_system *system, control_params for ( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj ) { - pbond = &(bonds->select.bond_list[pj]); + pbond = &bonds->bond_list[pj]; j = pbond->nbr; type_j = system->atoms[j].type; - bo_ij = &(pbond->bo_data); - twbp = &(system->reaxprm.tbp[ type_i ][ type_j ]); + bo_ij = &pbond->bo_data; + twbp = &system->reaxprm.tbp[ type_i ][ type_j ]; bo_ij->Cdbo += CEover1 * twbp->p_ovun1 * twbp->De_s; // OvCoor - 1st workspace->CdDelta[j] += CEover4 * (1.0 - dfvl * workspace->dDelta_lp[j]) * diff --git a/sPuReMD/src/spuremd.c b/sPuReMD/src/spuremd.c index 26724de8..ab7b7e4c 100644 --- a/sPuReMD/src/spuremd.c +++ b/sPuReMD/src/spuremd.c @@ -44,9 +44,8 @@ static void Post_Evolve( reax_system * const system, control_params * const cont rvec diff, cross; /* remove rotational and translational velocity of the center of mass */ - if ( control->ensemble != NVE && - control->remove_CoM_vel && - data->step && data->step % control->remove_CoM_vel == 0 ) + if ( control->ensemble != NVE && control->remove_CoM_vel + && data->step % control->remove_CoM_vel == 0 ) { /* compute velocity of the center of mass */ Compute_Center_of_Mass( system, data, out_control->prs ); @@ -227,10 +226,16 @@ int simulate( const void * const handle ) Compute_Kinetic_Energy( spmd_handle->system, spmd_handle->data ); - Compute_Total_Energy( spmd_handle->system, spmd_handle->data ); - if ( spmd_handle->output_enabled == TRUE ) { + if ( (spmd_handle->out_control->energy_update_freq > 0 + && spmd_handle->data->step % spmd_handle->out_control->energy_update_freq == 0) + || (spmd_handle->out_control->write_steps > 0 + && spmd_handle->data->step % spmd_handle->out_control->write_steps == 0) ) + { + Compute_Total_Energy( spmd_handle->system, spmd_handle->data ); + } + Output_Results( spmd_handle->system, spmd_handle->control, spmd_handle->data, spmd_handle->workspace, spmd_handle->lists, spmd_handle->out_control ); } @@ -242,10 +247,9 @@ int simulate( const void * const handle ) spmd_handle->callback( spmd_handle->system->atoms, spmd_handle->data, spmd_handle->lists ); } - ++spmd_handle->data->step; //} - for ( ; spmd_handle->data->step <= spmd_handle->control->nsteps; spmd_handle->data->step++ ) + for ( ++spmd_handle->data->step; spmd_handle->data->step <= spmd_handle->control->nsteps; spmd_handle->data->step++ ) { if ( spmd_handle->control->T_mode ) { diff --git a/sPuReMD/src/system_props.c b/sPuReMD/src/system_props.c index a7bf0a2f..412843d4 100644 --- a/sPuReMD/src/system_props.c +++ b/sPuReMD/src/system_props.c @@ -30,7 +30,8 @@ void Temperature_Control( control_params *control, simulation_data *data, { real tmp; - if ( control->T_mode == 1 ) // step-wise temperature control + /* step-wise temperature control */ + if ( control->T_mode == 1 ) { if ( (data->step - data->prev_steps) % ((int)(control->T_freq / control->dt)) == 0 ) @@ -45,7 +46,8 @@ void Temperature_Control( control_params *control, simulation_data *data, } } } - else if ( control->T_mode == 2 ) // constant slope control + /* constant slope control */ + else if ( control->T_mode == 2 ) { tmp = control->T_rate * control->dt / control->T_freq; @@ -195,15 +197,12 @@ void Compute_Kinetic_Energy( reax_system* system, simulation_data* data ) rvec_Scale( p, m, system->atoms[i].v ); data->E_Kin += 0.5 * rvec_Dot( p, system->atoms[i].v ); - - /* fprintf(stderr,"%d, %lf, %lf, %lf %lf\n", - i,system->atoms[i].v[0], system->atoms[i].v[1], system->atoms[i].v[2], - system->reaxprm.sbp[system->atoms[i].type].mass); */ } - data->therm.T = (2. * data->E_Kin) / (data->N_f * K_B); + data->therm.T = (2.0 * data->E_Kin) / (data->N_f * K_B); - if ( FABS(data->therm.T) < ALMOST_ZERO ) /* avoid T being an absolute zero! */ + /* avoid T being an absolute zero! */ + if ( FABS( data->therm.T ) < ALMOST_ZERO ) { data->therm.T = ALMOST_ZERO; } diff --git a/sPuReMD/src/three_body_interactions.c b/sPuReMD/src/three_body_interactions.c index 41973c57..545d4b80 100644 --- a/sPuReMD/src/three_body_interactions.c +++ b/sPuReMD/src/three_body_interactions.c @@ -95,9 +95,9 @@ void Three_Body_Interactions( reax_system *system, control_params *control, total_bo = workspace->total_bond_order; bonds = lists[BONDS]; - bond_list = bonds->select.bond_list; + bond_list = bonds->bond_list; thb_intrs = lists[THREE_BODIES]; - thb_list = thb_intrs->select.three_body_list; + thb_list = thb_intrs->three_body_list; /* global parameters used in these calculations */ p_pen2 = system->reaxprm.gp.l[19]; p_pen3 = system->reaxprm.gp.l[20]; @@ -158,9 +158,9 @@ void Three_Body_Interactions( reax_system *system, control_params *control, start_j = Start_Index(j, bonds); end_j = End_Index(j, bonds); //#ifdef _OPENMP -// f_j = &(workspace->f_local[tid * system->N + j]); +// f_j = &workspace->f_local[tid * system->N + j]; //#else - f_j = &(system->atoms[j].f); + f_j = &system->atoms[j].f; //#endif p_val3 = system->reaxprm.sbp[ type_j ].p_val3; @@ -168,10 +168,11 @@ void Three_Body_Interactions( reax_system *system, control_params *control, SBOp = 0.0; prod_SBO = 1.0; + for ( t = start_j; t < end_j; ++t ) { - bo_jt = &(bond_list[t].bo_data); - SBOp += (bo_jt->BO_pi + bo_jt->BO_pi2); + bo_jt = &bond_list[t].bo_data; + SBOp += bo_jt->BO_pi + bo_jt->BO_pi2; temp = SQR( bo_jt->BO ); temp *= temp; temp *= temp; @@ -222,8 +223,8 @@ void Three_Body_Interactions( reax_system *system, control_params *control, for ( pi = start_j; pi < end_j; ++pi ) { Set_Start_Index( pi, num_thb_intrs, thb_intrs ); - pbond_ij = &(bond_list[pi]); - bo_ij = &(pbond_ij->bo_data); + pbond_ij = &bond_list[pi]; + bo_ij = &pbond_ij->bo_data; BOA_ij = bo_ij->BO - control->thb_cut; if ( BOA_ij > 0.0 ) @@ -233,7 +234,7 @@ void Three_Body_Interactions( reax_system *system, control_params *control, //#ifdef _OPENMP // f_i = &(workspace->f_local[tid * system->N + i]); //#else - f_i = &(system->atoms[i].f); + f_i = &system->atoms[i].f; //#endif /* first copy 3-body intrs from previously computed ones where i>k. @@ -272,16 +273,16 @@ void Three_Body_Interactions( reax_system *system, control_params *control, /* and this is the second for loop mentioned above */ for ( pk = pi + 1; pk < end_j; ++pk ) { - pbond_jk = &(bond_list[pk]); - bo_jk = &(pbond_jk->bo_data); + pbond_jk = &bond_list[pk]; + bo_jk = &pbond_jk->bo_data; BOA_jk = bo_jk->BO - control->thb_cut; k = pbond_jk->nbr; type_k = system->atoms[k].type; - p_ijk = &( thb_list[num_thb_intrs] ); + p_ijk = &thb_list[num_thb_intrs]; //#ifdef _OPENMP -// f_k = &(workspace->f_local[tid * system->N + k]); +// f_k = &workspace->f_local[tid * system->N + k]; //#else - f_k = &(system->atoms[k].f); + f_k = &system->atoms[k].f; //#endif //CHANGE ORIGINAL @@ -312,10 +313,9 @@ void Three_Body_Interactions( reax_system *system, control_params *control, ++num_thb_intrs; - if ( BOA_jk > 0.0 && - (bo_ij->BO * bo_jk->BO) > SQR(control->thb_cut)/*0*/) + if ( BOA_jk > 0.0 && (bo_ij->BO * bo_jk->BO) > SQR(control->thb_cut) ) { - thbh = &( system->reaxprm.thbp[type_i][type_j][type_k] ); + thbh = &system->reaxprm.thbp[type_i][type_j][type_k]; /* if( workspace->orig_id[i] < workspace->orig_id[k] ) fprintf( stdout, "%6d %6d %6d %7.3f %7.3f %7.3f\n", @@ -330,7 +330,7 @@ void Three_Body_Interactions( reax_system *system, control_params *control, { if ( FABS(thbh->prm[cnt].p_val1) > 0.001 ) { - thbp = &( thbh->prm[cnt] ); + thbp = &thbh->prm[cnt]; /* ANGLE ENERGY */ p_val1 = thbp->p_val1; @@ -373,11 +373,11 @@ void Three_Body_Interactions( reax_system *system, control_params *control, CEval1 = Cf7ij * f7_jk * f8_Dj * expval12theta; CEval2 = Cf7jk * f7_ij * f8_Dj * expval12theta; CEval3 = Cf8j * f7_ij * f7_jk * expval12theta; - CEval4 = -2.0 * p_val1 * p_val2 * f7_ij * f7_jk * f8_Dj * - expval2theta * (theta_0 - theta); + CEval4 = -2.0 * p_val1 * p_val2 * f7_ij * f7_jk * f8_Dj + * expval2theta * (theta_0 - theta); - Ctheta_0 = p_val10 * DEG2RAD(theta_00) * - EXP( -p_val10 * (2.0 - SBO2) ); + Ctheta_0 = p_val10 * DEG2RAD(theta_00) + * EXP( -p_val10 * (2.0 - SBO2) ); CEval5 = -CEval4 * Ctheta_0 * CSBO2; CEval6 = CEval5 * dSBO1; @@ -452,8 +452,8 @@ void Three_Body_Interactions( reax_system *system, control_params *control, for ( t = start_j; t < end_j; ++t ) { - pbond_jt = &( bond_list[t] ); - bo_jt = &(pbond_jt->bo_data); + pbond_jt = &bond_list[t]; + bo_jt = &pbond_jt->bo_data; temp_bo_jt = bo_jt->BO; temp = CUBE( temp_bo_jt ); pBOjt7 = temp * temp * temp_bo_jt; @@ -465,7 +465,7 @@ void Three_Body_Interactions( reax_system *system, control_params *control, #ifdef _OPENMP // #pragma omp atomic #endif - bo_jt->Cdbo += (CEval6 * pBOjt7); + bo_jt->Cdbo += CEval6 * pBOjt7; #ifdef _OPENMP // #pragma omp atomic #endif @@ -593,8 +593,8 @@ void Three_Body_Interactions( reax_system *system, control_params *control, for ( t = start_j; t < end_j; ++t ) { - pbond_jt = &( bond_list[t] ); - bo_jt = &(pbond_jt->bo_data); + pbond_jt = &bond_list[t]; + bo_jt = &pbond_jt->bo_data; temp_bo_jt = bo_jt->BO; temp = CUBE( temp_bo_jt ); pBOjt7 = temp * temp * temp_bo_jt; @@ -708,9 +708,9 @@ void Hydrogen_Bonds( reax_system *system, control_params *control, num_hb_intrs = 0; #endif bonds = lists[BONDS]; - bond_list = bonds->select.bond_list; + bond_list = bonds->bond_list; hbonds = lists[HBONDS]; - hbond_list = hbonds->select.hbond_list; + hbond_list = hbonds->hbond_list; /* loops below discover the Hydrogen bonds between i-j-k triplets. here j is H atom and there has to be some bond between i and j. @@ -732,17 +732,17 @@ void Hydrogen_Bonds( reax_system *system, control_params *control, hb_start_j = Start_Index( workspace->hbond_index[j], hbonds ); hb_end_j = End_Index( workspace->hbond_index[j], hbonds ); #ifdef _OPENMP - f_j = &(workspace->f_local[tid * system->N + j]); + f_j = &workspace->f_local[tid * system->N + j]; #else - f_j = &(system->atoms[j].f); + f_j = &system->atoms[j].f; #endif top = 0; for ( pi = start_j; pi < end_j; ++pi ) { - pbond_ij = &( bond_list[pi] ); + pbond_ij = &bond_list[pi]; i = pbond_ij->nbr; - bo_ij = &(pbond_ij->bo_data); + bo_ij = &pbond_ij->bo_data; type_i = system->atoms[i].type; if ( system->reaxprm.sbp[type_i].p_hbond == 2 && @@ -761,9 +761,9 @@ void Hydrogen_Bonds( reax_system *system, control_params *control, r_jk = nbr_jk->d; rvec_Scale( dvec_jk, hbond_list[pk].scl, nbr_jk->dvec ); #ifdef _OPENMP - f_k = &(workspace->f_local[tid * system->N + k]); + f_k = &workspace->f_local[tid * system->N + k]; #else - f_k = &(system->atoms[k].f); + f_k = &system->atoms[k].f; #endif for ( itr = 0; itr < top; ++itr ) @@ -774,14 +774,14 @@ void Hydrogen_Bonds( reax_system *system, control_params *control, if ( i != k ) { - bo_ij = &(pbond_ij->bo_data); + bo_ij = &pbond_ij->bo_data; type_i = system->atoms[i].type; r_ij = pbond_ij->d; - hbp = &(system->reaxprm.hbp[ type_i ][ type_j ][ type_k ]); + hbp = &system->reaxprm.hbp[ type_i ][ type_j ][ type_k ]; #ifdef _OPENMP - f_i = &(workspace->f_local[tid * system->N + i]); + f_i = &workspace->f_local[tid * system->N + i]; #else - f_i = &(system->atoms[i].f); + f_i = &system->atoms[i].f; #endif #ifdef TEST_FORCES diff --git a/sPuReMD/src/tool_box.c b/sPuReMD/src/tool_box.c index c46f8615..bec55b60 100644 --- a/sPuReMD/src/tool_box.c +++ b/sPuReMD/src/tool_box.c @@ -74,66 +74,41 @@ void Fit_to_Periodic_Box( simulation_box *box, rvec *p ) for ( i = 0; i < 3; ++i ) { - //TODO: verify box boundary coordinates -- assuming orthogonal box pinned at origin - if ( (*p)[i] < 0. ) + if ( (*p)[i] < box->min[i] ) { /* handle lower coords */ - while ( (*p)[i] < 0. ) + while ( (*p)[i] < box->min[i] ) + { (*p)[i] += box->box_norms[i]; + } } - else if ( (*p)[i] >= box->box_norms[i] ) + else if ( (*p)[i] >= box->max[i] ) { /* handle higher coords */ - while ( (*p)[i] >= box->box_norms[i] ) + while ( (*p)[i] >= box->max[i] ) + { (*p)[i] -= box->box_norms[i]; + } } -// if ( (*p)[i] < box->min[i] ) -// { -// /* handle lower coords */ -// while ( (*p)[i] < box->min[i] ) -// (*p)[i] += box->box_norms[i]; -// } -// else if ( (*p)[i] >= box->max[i] ) -// { -// /* handle higher coords */ -// while ( (*p)[i] >= box->max[i] ) -// (*p)[i] -= box->box_norms[i]; -// } } } -/* determine the touch point, tp, of a box to - its neighbor denoted by the relative coordinate rl */ -/* -static inline void Box_Touch_Point( simulation_box *box, ivec rl, rvec tp ) -{ - int d; - - for ( d = 0; d < 3; ++d ) - if ( rl[d] == -1 ) - tp[d] = box->min[d]; - else if ( rl[d] == 0 ) - tp[d] = NEG_INF - 1.; - else - tp[d] = box->max[d]; -} -*/ - - /* determine whether point p is inside the box */ /* assumes orthogonal box */ -/* -static inline int is_Inside_Box( simulation_box *box, rvec p ) +int is_Inside_Box( simulation_box *box, rvec p ) { - if ( p[0] < box->min[0] || p[0] >= box->max[0] || - p[1] < box->min[1] || p[1] >= box->max[1] || - p[2] < box->min[2] || p[2] >= box->max[2] ) - return FALSE; + int ret = TRUE; - return TRUE; + if ( p[0] < box->min[0] || p[0] >= box->max[0] + || p[1] < box->min[1] || p[1] >= box->max[1] + || p[2] < box->min[2] || p[2] >= box->max[2] ) + { + ret = FALSE; + } + + return ret; } -*/ /* @@ -365,16 +340,13 @@ void Allocate_Tokenizer_Space( char **line, char **backup, char ***tokens ) { int i; - *line = (char*) smalloc( sizeof(char) * MAX_LINE, - "Allocate_Tokenizer_Space::*line" ); - *backup = (char*) smalloc( sizeof(char) * MAX_LINE, - "Allocate_Tokenizer_Space::*backup" ); - *tokens = (char**) smalloc( sizeof(char*) * MAX_TOKENS, - "Allocate_Tokenizer_Space::*tokens" ); + *line = smalloc( sizeof(char) * MAX_LINE, "Allocate_Tokenizer_Space::*line" ); + *backup = smalloc( sizeof(char) * MAX_LINE, "Allocate_Tokenizer_Space::*backup" ); + *tokens = smalloc( sizeof(char*) * MAX_TOKENS, "Allocate_Tokenizer_Space::*tokens" ); for ( i = 0; i < MAX_TOKENS; i++ ) { - (*tokens)[i] = (char*) smalloc(sizeof(char) * MAX_TOKEN_LEN, + (*tokens)[i] = smalloc( sizeof(char) * MAX_TOKEN_LEN, "Allocate_Tokenizer_Space::(*tokens)[i]" ); } } @@ -404,7 +376,8 @@ int Tokenize( char* s, char*** tok ) strncpy( test, s, MAX_LINE ); - for ( word = strtok_r(test, sep, &saveptr); word; word = strtok_r(NULL, sep, &saveptr) ) + for ( word = strtok_r(test, sep, &saveptr); word != NULL; + word = strtok_r(NULL, sep, &saveptr) ) { strncpy( (*tok)[count], word, MAX_LINE ); count++; diff --git a/sPuReMD/src/tool_box.h b/sPuReMD/src/tool_box.h index e0931a18..247c516a 100644 --- a/sPuReMD/src/tool_box.h +++ b/sPuReMD/src/tool_box.h @@ -32,9 +32,7 @@ void Transform_to_UnitBox( rvec, simulation_box*, char, rvec ); void Fit_to_Periodic_Box( simulation_box*, rvec* ); -//void Box_Touch_Point( simulation_box*, ivec, rvec ); - -//int is_Inside_Box( simulation_box*, rvec ); +int is_Inside_Box( simulation_box*, rvec ); //int iown_midpoint( simulation_box*, rvec, rvec ); diff --git a/sPuReMD/src/traj.c b/sPuReMD/src/traj.c index 43cd6c70..d65e7827 100644 --- a/sPuReMD/src/traj.c +++ b/sPuReMD/src/traj.c @@ -53,12 +53,12 @@ int Write_Custom_Header( reax_system *system, control_params *control, control->reposition_atoms, control->restrict_bonds, control->tabulate, - control->nbr_cut, - control->r_cut, + control->bond_cut, + control->nonb_cut, control->bg_cut, control->bo_cut, control->thb_cut, - control->hb_cut, + control->hbond_cut, control->cm_solver_q_err, control->T_init, control->T_final, @@ -230,8 +230,8 @@ int Append_Custom_Frame( reax_system *system, control_params *control, { for ( j = Start_Index( i, bonds ); j < End_Index( i, bonds ); ++j ) { - if ( i < bonds->select.bond_list[j].nbr && - bonds->select.bond_list[j].bo_data.BO >= control->bg_cut ) + if ( i < bonds->bond_list[j].nbr && + bonds->bond_list[j].bo_data.BO >= control->bg_cut ) { ++num_bonds; } @@ -259,19 +259,19 @@ int Append_Custom_Frame( reax_system *system, control_params *control, { for ( pi = Start_Index(j, bonds); pi < End_Index(j, bonds); ++pi ) { - if ( bonds->select.bond_list[pi].bo_data.BO >= control->bg_cut ) + if ( bonds->bond_list[pi].bo_data.BO >= control->bg_cut ) { // physical j&i bond for ( pk = Start_Index( pi, thb_intrs ); pk < End_Index( pi, thb_intrs ); ++pk ) { - if ( bonds->select.bond_list[pi].nbr < - thb_intrs->select.three_body_list[pk].thb ) + if ( bonds->bond_list[pi].nbr < + thb_intrs->three_body_list[pk].thb ) { // get k's pointer on j's bond list - pk_j = thb_intrs->select.three_body_list[pk].pthb; + pk_j = thb_intrs->three_body_list[pk].pthb; - if ( bonds->select.bond_list[pk_j].bo_data.BO >= control->bg_cut ) + if ( bonds->bond_list[pk_j].bo_data.BO >= control->bg_cut ) { // physical j&k bond ++num_thb_intrs; @@ -408,10 +408,10 @@ int Append_Custom_Frame( reax_system *system, control_params *control, { for ( j = Start_Index( i, bonds ); j < End_Index( i, bonds ); ++j ) { - if ( i < bonds->select.bond_list[j].nbr && - bonds->select.bond_list[j].bo_data.BO >= control->bg_cut ) + if ( i < bonds->bond_list[j].nbr && + bonds->bond_list[j].bo_data.BO >= control->bg_cut ) { - bo_ij = &( bonds->select.bond_list[j] ); + bo_ij = &bonds->bond_list[j]; out_control->write( out_control->trj, BOND_BASIC, workspace->orig_id[i], workspace->orig_id[bo_ij->nbr], @@ -426,10 +426,10 @@ int Append_Custom_Frame( reax_system *system, control_params *control, { for ( j = Start_Index( i, bonds ); j < End_Index( i, bonds ); ++j ) { - if ( i < bonds->select.bond_list[j].nbr && - bonds->select.bond_list[j].bo_data.BO >= control->bg_cut ) + if ( i < bonds->bond_list[j].nbr && + bonds->bond_list[j].bo_data.BO >= control->bg_cut ) { - bo_ij = &( bonds->select.bond_list[j] ); + bo_ij = &bonds->bond_list[j]; out_control->write( out_control->trj, BOND_FULL, workspace->orig_id[i], workspace->orig_id[bo_ij->nbr], @@ -454,26 +454,26 @@ int Append_Custom_Frame( reax_system *system, control_params *control, { for ( pi = Start_Index(j, bonds); pi < End_Index(j, bonds); ++pi ) { - if ( bonds->select.bond_list[pi].bo_data.BO >= control->bg_cut ) + if ( bonds->bond_list[pi].bo_data.BO >= control->bg_cut ) { // physical j&i bond for ( pk = Start_Index( pi, thb_intrs ); pk < End_Index( pi, thb_intrs ); ++pk ) { - if ( bonds->select.bond_list[pi].nbr < - thb_intrs->select.three_body_list[pk].thb ) + if ( bonds->bond_list[pi].nbr < + thb_intrs->three_body_list[pk].thb ) { - pk_j = thb_intrs->select.three_body_list[pk].pthb; + pk_j = thb_intrs->three_body_list[pk].pthb; // get k's pointer on j's bond list - if ( bonds->select.bond_list[pk_j].bo_data.BO >= control->bg_cut ) + if ( bonds->bond_list[pk_j].bo_data.BO >= control->bg_cut ) { // physical j&k bond out_control->write( out_control->trj, ANGLE_BASIC, - workspace->orig_id[bonds->select.bond_list[pi].nbr], + workspace->orig_id[bonds->bond_list[pi].nbr], workspace->orig_id[j], - workspace->orig_id[thb_intrs->select.three_body_list[pk].thb], - RAD2DEG(thb_intrs->select.three_body_list[pk].theta) ); + workspace->orig_id[thb_intrs->three_body_list[pk].thb], + RAD2DEG(thb_intrs->three_body_list[pk].theta) ); } } } diff --git a/sPuReMD/src/two_body_interactions.c b/sPuReMD/src/two_body_interactions.c index 2a179cab..e6316f81 100644 --- a/sPuReMD/src/two_body_interactions.c +++ b/sPuReMD/src/two_body_interactions.c @@ -67,16 +67,16 @@ void Bond_Energy( reax_system *system, control_params *control, for ( pj = start_i; pj < end_i; ++pj ) { - if ( i < bonds->select.bond_list[pj].nbr ) + if ( i < bonds->bond_list[pj].nbr ) { /* set the pointers */ - j = bonds->select.bond_list[pj].nbr; + j = bonds->bond_list[pj].nbr; type_i = system->atoms[i].type; type_j = system->atoms[j].type; - sbp_i = &( system->reaxprm.sbp[type_i] ); - sbp_j = &( system->reaxprm.sbp[type_j] ); - twbp = &( system->reaxprm.tbp[type_i][type_j] ); - bo_ij = &( bonds->select.bond_list[pj].bo_data ); + sbp_i = &system->reaxprm.sbp[type_i]; + sbp_j = &system->reaxprm.sbp[type_j]; + twbp = &system->reaxprm.tbp[type_i][type_j]; + bo_ij = &bonds->bond_list[pj].bo_data; /* calculate the constants */ pow_BOs_be2 = POW( bo_ij->BO_s, twbp->p_be2 ); @@ -218,9 +218,9 @@ void vdW_Coulomb_Energy( reax_system *system, control_params *control, for ( pj = start_i; pj < end_i; ++pj ) { - if ( far_nbrs->select.far_nbr_list[pj].d <= control->r_cut ) + if ( far_nbrs->far_nbr_list[pj].d <= control->nonb_cut ) { - nbr_pj = &far_nbrs->select.far_nbr_list[pj]; + nbr_pj = &far_nbrs->far_nbr_list[pj]; j = nbr_pj->nbr; r_ij = nbr_pj->d; twbp = &system->reaxprm.tbp[ system->atoms[i].type ] @@ -563,16 +563,16 @@ void Tabulated_vdW_Coulomb_Energy( reax_system *system, control_params *control, for ( pj = start_i; pj < end_i; ++pj ) { - if ( far_nbrs->select.far_nbr_list[pj].d <= control->r_cut ) + if ( far_nbrs->far_nbr_list[pj].d <= control->nonb_cut ) { - nbr_pj = &( far_nbrs->select.far_nbr_list[pj] ); + nbr_pj = &far_nbrs->far_nbr_list[pj]; j = nbr_pj->nbr; type_j = system->atoms[j].type; r_ij = nbr_pj->d; self_coef = (i == j) ? 0.5 : 1.0; tmin = MIN( type_i, type_j ); tmax = MAX( type_i, type_j ); - t = &( workspace->LR[tmin][tmax] ); + t = &workspace->LR[tmin][tmax]; /* Cubic Spline Interpolation */ r = (int)(r_ij * t->inv_dx); -- GitLab