Unverified Commit cc0cf3b9 authored by Axel Kohlmeyer's avatar Axel Kohlmeyer
Browse files

consolidate USER-REAXC init error message handling. avoid snprintf and buffer

parent 29c50671
Loading
Loading
Loading
Loading
+48 −63
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@
#include "reaxc_lookup.h"
#include "reaxc_tool_box.h"
#include "error.h"
#include "fmt/format.h"

// Functions defined in reaxc_init_md.cpp
extern int Init_MPI_Datatypes(reax_system*, storage*, mpi_datatypes*, MPI_Comm, char*);
@@ -55,6 +56,7 @@ int Init_ListsOMP(reax_system *system, control_params *control,
  int mincap = system->mincap;
  double safezone = system->safezone;
  double saferzone = system->saferzone;
  LAMMPS_NS::Error *error = system->error_ptr;

  bond_top = (int*) calloc(system->total_cap, sizeof(int));
  hb_top = (int*) calloc(system->local_cap, sizeof(int));
@@ -72,7 +74,7 @@ int Init_ListsOMP(reax_system *system, control_params *control,

    if(!Make_List(system->Hcap, total_hbonds, TYP_HBOND,
                    *lists+HBONDS)) {
      system->error_ptr->one( FLERR, "Not enough space for hbonds list. Terminating!" );
      error->one(FLERR, "Not enough space for hbonds list. Terminating!");
    }
  }

@@ -85,7 +87,7 @@ int Init_ListsOMP(reax_system *system, control_params *control,

  if(!Make_List(system->total_cap, bond_cap, TYP_BOND,
                  *lists+BONDS)) {
    system->error_ptr->one( FLERR, "Not enough space for bonds list. Terminating!\n" );
    error->one(FLERR, "Not enough space for bonds list. Terminating!\n");
  }

  int nthreads = control->nthreads;
@@ -93,14 +95,14 @@ int Init_ListsOMP(reax_system *system, control_params *control,

  for (i = 0; i < bonds->num_intrs; ++i)
    bonds->select.bond_list[i].bo_data.CdboReduction =
      (double*) smalloc(system->error_ptr, sizeof(double)*nthreads, "CdboReduction");
      (double*) smalloc(error, sizeof(double)*nthreads, "CdboReduction");

  /* 3bodies list */
  cap_3body = (int)(MAX(num_3body*safezone, MIN_3BODIES));
  if(!Make_List(bond_cap, cap_3body, TYP_THREE_BODY,
                  *lists+THREE_BODIES)){

    system->error_ptr->one( FLERR, "Problem in initializing angles list. Terminating!" );
    error->one(FLERR, "Problem in initializing angles list. Terminating!");
  }

  free(hb_top);
@@ -118,53 +120,36 @@ void InitializeOMP( reax_system *system, control_params *control,
                 mpi_datatypes *mpi_data, MPI_Comm comm)
{
  char msg[MAX_STR];
  char errmsg[512];
  LAMMPS_NS::Error *error = system->error_ptr;

  if (Init_MPI_Datatypes(system,workspace,mpi_data,comm,msg) == FAILURE)
    error->one(FLERR,"init_mpi_datatypes: could not create datatypes. "
               "Mpi_data could not be initialized! Terminating.");

  if (Init_MPI_Datatypes(system, workspace, mpi_data, comm, msg) == FAILURE) {
    system->error_ptr->one( FLERR, "init_mpi_datatypes: could not create datatypes. "
    "Mpi_data couldn't be initialized! Terminating.");
  }

  if (Init_System(system, control, msg) == FAILURE) {
    snprintf( errmsg, 512, "Error on: %s. "
    "System could not be initialized! Terminating.", msg );
    system->error_ptr->one(FLERR, errmsg);
  }

  if (Init_Simulation_Data( system, control, data, msg ) == FAILURE) {
    snprintf( errmsg, 512, "Error on: %s. "
    "Sim_data couldn't be initialized! Terminating.", msg );
    system->error_ptr->one(FLERR, errmsg);
  }
  if (Init_System(system,control,msg) == FAILURE)
    error->one(FLERR,fmt::format("Error on: {}. System could not be "
                                  "initialized! Terminating.",msg));

  if (Init_Workspace( system, control, workspace, msg ) ==
      FAILURE) {
    system->error_ptr->one(FLERR, "init_workspace: not enough memory. "
    "Workspace couldn't be initialized! Terminating.");
  }
  if (Init_Simulation_Data(system,control,data,msg) == FAILURE)
    error->one(FLERR,fmt::format("Error on: {}. Sim_data could not be "
                                  "initialized! Terminating.",msg));

  if (Init_ListsOMP( system, control, data, workspace, lists, mpi_data, msg ) ==
      FAILURE) {
      snprintf( errmsg, 512, "Error on: %s. "
      "System could not be initialized! Terminating.", msg );
      system->error_ptr->one(FLERR, errmsg);
    }
  if (Init_Workspace(system,control,workspace,msg) == FAILURE)
    error->one(FLERR,"init_workspace: not enough memory. "
               "Workspace could not be initialized. Terminating.");

  if (Init_Output_Files(system,control,out_control,mpi_data,msg)== FAILURE) {
    snprintf( errmsg, 512, "Error on: %s"
    "Could not open output files! Terminating.", msg );
    system->error_ptr->one(FLERR, errmsg);
  }
  if (Init_ListsOMP(system,control,data,workspace,lists,mpi_data,msg) == FAILURE)
    error->one(FLERR,fmt::format("Error on: {}. System could not be "
                                  "initialized. Terminating.",msg));

  if (control->tabulate) {
    if (Init_Lookup_Tables( system, control, workspace, mpi_data, msg ) == FAILURE) {
      snprintf( errmsg, 512, "Error on: %s."
      " Couldn't create lookup table! Terminating.", msg );
      system->error_ptr->one(FLERR, errmsg);
    }
  }
  if (Init_Output_Files(system,control,out_control,mpi_data,msg)== FAILURE)
    error->one(FLERR,fmt::format("Error on: {}. Could not open output files! "
                                  "Terminating.",msg));

  if (control->tabulate)
    if (Init_Lookup_Tables(system,control,workspace,mpi_data,msg) == FAILURE)
      error->one(FLERR,fmt::format("Error on: {}. Could not create lookup "
                                    "table. Terminating.",msg));

  Init_Force_FunctionsOMP(control);
}
+86 −85
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@
#include "reaxc_tool_box.h"

#include "error.h"
#include "fmt/format.h"

int Init_System(reax_system *system, control_params *control, char * /*msg*/)
{
@@ -89,20 +90,21 @@ void Init_Taper( control_params *control, storage *workspace )
  double d1, d7;
  double swa, swa2, swa3;
  double swb, swb2, swb3;
  LAMMPS_NS::Error *error = control->error_ptr;

  swa = control->nonb_low;
  swb = control->nonb_cut;

  if (fabs(swa) > 0.01 && control->me == 0)
    control->error_ptr->warning( FLERR, "Non-zero lower Taper-radius cutoff" );
    error->warning(FLERR, "Non-zero lower Taper-radius cutoff");

  if (swb < 0) {
    control->error_ptr->all(FLERR,"Negative upper Taper-radius cutoff");
    error->all(FLERR,"Negative upper Taper-radius cutoff");
  }
  else if(swb < 5 && control->me == 0) {
    char errmsg[256];
    snprintf(errmsg, 256, "Very low Taper-radius cutoff: %f", swb);
    control->error_ptr->warning( FLERR, errmsg );
    error->warning(FLERR, errmsg);
  }

  d1 = swb - swa;
@@ -166,6 +168,7 @@ int Init_Lists( reax_system *system, control_params *control,
  int mincap = system->mincap;
  double safezone = system->safezone;
  double saferzone = system->saferzone;
  LAMMPS_NS::Error *error = system->error_ptr;

  bond_top = (int*) calloc(system->total_cap, sizeof(int));
  hb_top = (int*) calloc(system->local_cap, sizeof(int));
@@ -182,9 +185,9 @@ int Init_Lists( reax_system *system, control_params *control,
    total_hbonds = (int)(MAX(total_hbonds*saferzone,mincap*system->minhbonds));

    if(!Make_List(system->Hcap, total_hbonds, TYP_HBOND,
                    *lists+HBONDS ) ) {
      control->error_ptr->one(FLERR, "Not enough space for hbonds list.");
    }
                    *lists+HBONDS))
      error->one(FLERR, "Not enough space for hbonds list.");

    (*lists+HBONDS)->error_ptr = system->error_ptr;
  }

@@ -196,17 +199,17 @@ int Init_Lists( reax_system *system, control_params *control,
  bond_cap = (int)(MAX(total_bonds*safezone, mincap*MIN_BONDS));

  if(!Make_List(system->total_cap, bond_cap, TYP_BOND,
                  *lists+BONDS ) ) {
    control->error_ptr->one(FLERR, "Not enough space for bonds list.");
  }
                  *lists+BONDS))
    error->one(FLERR, "Not enough space for bonds list.");

  (*lists+BONDS)->error_ptr = system->error_ptr;

  /* 3bodies list */
  cap_3body = (int)(MAX(num_3body*safezone, MIN_3BODIES));
  if(!Make_List(bond_cap, cap_3body, TYP_THREE_BODY,
                  *lists+THREE_BODIES ) ){
    control->error_ptr->one(FLERR,"Problem in initializing angles list.");
  }
                  *lists+THREE_BODIES))
    error->one(FLERR,"Problem in initializing angles list.");

  (*lists+THREE_BODIES)->error_ptr = system->error_ptr;

  free(hb_top);
@@ -221,38 +224,36 @@ void Initialize( reax_system *system, control_params *control,
                 mpi_datatypes *mpi_data, MPI_Comm comm)
{
  char msg[MAX_STR];
  LAMMPS_NS::Error *error = system->error_ptr;

  if (Init_MPI_Datatypes(system, workspace, mpi_data, comm, msg) == FAILURE) {
    control->error_ptr->one(FLERR,"Could not create datatypes");
  }
  if (Init_MPI_Datatypes(system,workspace,mpi_data,comm,msg) == FAILURE)
    error->one(FLERR,"init_mpi_datatypes: could not create datatypes. "
               "Mpi_data could not be initialized! Terminating.");

  if (Init_System(system, control, msg) == FAILURE) {
    control->error_ptr->one(FLERR,"System could not be initialized");
  }
  if (Init_System(system,control,msg) == FAILURE)
    error->one(FLERR,fmt::format("Error on: {}. System could not be "
                                  "initialized! Terminating.",msg));

  if (Init_Simulation_Data( system, control, data, msg ) == FAILURE) {
    control->error_ptr->one(FLERR,"Sim_data could not be initialized");
  }
  if (Init_Simulation_Data( system,control,data,msg) == FAILURE)
    error->one(FLERR,fmt::format("Error on: {}. Sim_data could not be "
                                  "initialized! Terminating.",msg));

  if (Init_Workspace( system, control, workspace, msg ) ==
      FAILURE) {
    control->error_ptr->one(FLERR,"Workspace could not be initialized");
  }
  if (Init_Workspace( system,control,workspace,msg) == FAILURE)
    error->one(FLERR,"init_workspace: not enough memory. "
               "Workspace could not be initialized. Terminating.");

  if (Init_Lists( system, control, data, workspace, lists, mpi_data, msg ) ==
      FAILURE) {
    control->error_ptr->one(FLERR,"Lists could not be initialized");
    }
  if (Init_Lists(system, control, data, workspace, lists, mpi_data, msg) ==FAILURE)
    error->one(FLERR,fmt::format("Error on: {}. System could not be "
                                  "initialized. Terminating.",msg));

  if (Init_Output_Files(system,control,out_control,mpi_data,msg)== FAILURE) {
    control->error_ptr->one(FLERR,"Could not open output files");
  }
  if (Init_Output_Files(system,control,out_control,mpi_data,msg)== FAILURE)
    error->one(FLERR,fmt::format("Error on: {}. Could not open output files! "
                                  "Terminating.",msg));

  if (control->tabulate) {
    if (Init_Lookup_Tables( system, control, workspace, mpi_data, msg ) == FAILURE) {
    control->error_ptr->one(FLERR,"Lookup table could not be created");
    }
  }
  if (control->tabulate)
    if (Init_Lookup_Tables(system,control,workspace,mpi_data,msg) == FAILURE)
      error->one(FLERR,fmt::format("Error on: {}. Could not create lookup "
                                    "table. Terminating.",msg));


  Init_Force_Functions(control);