/* This version of Compute_Total_Force computes forces from coefficients accumulated by all interaction functions. Saves enormous time & space! */ void Compute_Total_Force(reax_system *system, control_params *control, simulation_data *data, static_storage *workspace, list **lists) { int i, pj; list *bonds = (*lists) + BONDS; for (i = 0; i < system->N; ++i) for (pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj) if (i < bonds->select.bond_list[pj].nbr) { if (control->ensemble == NVE || control->ensemble == NVT) Add_dBond_to_Forces(i, pj, system, data, workspace, lists); else Add_dBond_to_Forces_NPT(i, pj, system, data, workspace, lists); } }
void Compute_Total_Force( reax_system *system, control_params *control, simulation_data *data, storage *workspace, reax_list **lists, mpi_datatypes *mpi_data ) { int i, pj; reax_list *bonds = (*lists) + BONDS; for( i = 0; i < system->N; ++i ) for( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj ) if( i < bonds->select.bond_list[pj].nbr ) { if( control->virial == 0 ) Add_dBond_to_Forces( system, i, pj, workspace, lists ); else Add_dBond_to_Forces_NPT( i, pj, data, workspace, lists ); } }
/* this version of Compute_Total_Force computes forces from coefficients accumulated by all interaction functions. Saves enormous time & space! */ void Compute_Total_Force( reax_system *system, control_params *control, simulation_data *data, storage *workspace, reax_list **lists, mpi_datatypes *mpi_data ) { int i, pj; reax_list *bonds = (*lists) + BONDS; for( i = 0; i < system->N; ++i ) for( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj ) if( i < bonds->select.bond_list[pj].nbr ) { if( control->virial == 0 ) Add_dBond_to_Forces( system, i, pj, workspace, lists ); else Add_dBond_to_Forces_NPT( i, pj, data, workspace, lists ); } //Print_Total_Force( system, data, workspace ); #if defined(PURE_REAX) /* now all forces are computed to their partially-final values based on the neighbors information each processor has had. final values of force on each atom needs to be computed by adding up all partially-final pieces */ Coll( system, mpi_data, workspace->f, mpi_data->mpi_rvec, sizeof(rvec)/sizeof(void), rvec_unpacker ); for( i = 0; i < system->n; ++i ) rvec_Copy( system->my_atoms[i].f, workspace->f[i] ); #if defined(TEST_FORCES) Coll( system, mpi_data, workspace->f_ele, mpi_data->mpi_rvec, rvec_unpacker); Coll( system, mpi_data, workspace->f_vdw, mpi_data->mpi_rvec, rvec_unpacker); Coll( system, mpi_data, workspace->f_be, mpi_data->mpi_rvec, rvec_unpacker ); Coll( system, mpi_data, workspace->f_lp, mpi_data->mpi_rvec, rvec_unpacker ); Coll( system, mpi_data, workspace->f_ov, mpi_data->mpi_rvec, rvec_unpacker ); Coll( system, mpi_data, workspace->f_un, mpi_data->mpi_rvec, rvec_unpacker ); Coll( system, mpi_data, workspace->f_ang, mpi_data->mpi_rvec, rvec_unpacker); Coll( system, mpi_data, workspace->f_coa, mpi_data->mpi_rvec, rvec_unpacker); Coll( system, mpi_data, workspace->f_pen, mpi_data->mpi_rvec, rvec_unpacker); Coll( system, mpi_data, workspace->f_hb, mpi_data->mpi_rvec, rvec_unpacker ); Coll( system, mpi_data, workspace->f_tor, mpi_data->mpi_rvec, rvec_unpacker); Coll( system, mpi_data, workspace->f_con, mpi_data->mpi_rvec, rvec_unpacker); #endif #endif }