void Reset( reax_system *system, control_params *control, simulation_data *data, storage *workspace, reax_list **lists, MPI_Comm comm ) { Reset_Atoms( system, control ); Reset_Simulation_Data( data, control->virial ); Reset_Workspace( system, workspace ); Reset_Neighbor_Lists( system, control, workspace, lists, comm ); }
int Init_Simulation_Data( reax_system *system, control_params *control, simulation_data *data, char *msg ) { Reset_Simulation_Data( data, control->virial ); /* initialize the timer(s) */ if( system->my_rank == MASTER_NODE ) { data->timing.start = Get_Time( ); #if defined(LOG_PERFORMANCE) Reset_Timing( &data->timing ); #endif } //if( !control->restart ) data->step = data->prev_steps = 0; return SUCCESS; }
/************************ initialize simulation data ************************/ int Init_Simulation_Data( reax_system *system, control_params *control, simulation_data *data, mpi_datatypes *mpi_data, char *msg ) { Reset_Simulation_Data( data, control->virial ); if( !control->restart ) data->step = data->prev_steps = 0; Compute_Total_Mass( system, data, mpi_data->comm_mesh3D ); Compute_Center_of_Mass( system, data, mpi_data, mpi_data->comm_mesh3D ); Compute_Kinetic_Energy( system, data, mpi_data->comm_mesh3D ); switch( control->ensemble ){ case NVE: data->N_f = 3 * system->bigN; Evolve = Velocity_Verlet_NVE; break; case bNVT: data->N_f = 3 * system->bigN + 1; Evolve = Velocity_Verlet_Berendsen_NVT; break; case nhNVT: fprintf( stderr, "WARNING: Nose-Hoover NVT is still under testing.\n" ); //return FAILURE; data->N_f = 3 * system->bigN + 1; Evolve = Velocity_Verlet_Nose_Hoover_NVT_Klein; if( !control->restart || (control->restart && control->random_vel) ) { data->therm.G_xi = control->Tau_T * (2.0 * data->sys_en.e_kin - data->N_f * K_B * control->T ); data->therm.v_xi = data->therm.G_xi * control->dt; data->therm.v_xi_old = 0; data->therm.xi = 0; } break; case sNPT: /* Semi-Isotropic NPT */ data->N_f = 3 * system->bigN + 4; Evolve = Velocity_Verlet_Berendsen_NPT; if( !control->restart ) Reset_Pressures( data ); break; case iNPT: /* Isotropic NPT */ data->N_f = 3 * system->bigN + 2; Evolve = Velocity_Verlet_Berendsen_NPT; if( !control->restart ) Reset_Pressures( data ); break; case NPT: /* Anisotropic NPT */ strcpy( msg, "init_simulation_data: option not yet implemented" ); return FAILURE; data->N_f = 3 * system->bigN + 9; Evolve = Velocity_Verlet_Berendsen_NPT; /*if( !control->restart ) { data->therm.G_xi = control->Tau_T * (2.0 * data->my_en.e_Kin - data->N_f * K_B * control->T ); data->therm.v_xi = data->therm.G_xi * control->dt; data->iso_bar.eps = 0.33333 * log(system->box.volume); data->inv_W = 1.0 / ( data->N_f * K_B * control->T * SQR(control->Tau_P) ); Compute_Pressure( system, control, data, out_control ); }*/ break; default: strcpy( msg, "init_simulation_data: ensemble not recognized" ); return FAILURE; } /* initialize the timer(s) */ MPI_Barrier( mpi_data->world ); // wait for everyone to come here if( system->my_rank == MASTER_NODE ) { data->timing.start = Get_Time( ); #if defined(LOG_PERFORMANCE) Reset_Timing( &data->timing ); #endif } #if defined(DEBUG) fprintf( stderr, "data->N_f: %8.3f\n", data->N_f ); #endif return SUCCESS; }