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 );

}
Exemple #2
0
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;
}
Exemple #3
0
/************************ 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;
}