safer handling of memory management for lists in reax/c
This commit is contained in:
@ -84,6 +84,7 @@ PairReaxC::PairReaxC(LAMMPS *lmp) : Pair(lmp)
|
||||
memory->smalloc(sizeof(storage),"reax:storage");
|
||||
lists = (reax_list *)
|
||||
memory->smalloc(LIST_N * sizeof(reax_list),"reax:lists");
|
||||
memset(lists,0,LIST_N * sizeof(reax_list));
|
||||
out_control = (output_controls *)
|
||||
memory->smalloc(sizeof(output_controls),"reax:out_control");
|
||||
mpi_data = (mpi_datatypes *)
|
||||
|
||||
@ -36,6 +36,8 @@ int Make_List(int n, int num_intrs, int type, reax_list *l, MPI_Comm comm)
|
||||
l->n = n;
|
||||
l->num_intrs = num_intrs;
|
||||
|
||||
if (l->index) sfree(l->index, "list:index");
|
||||
if (l->end_index) sfree(l->index, "list:end_index");
|
||||
l->index = (int*) smalloc( n * sizeof(int), "list:index", comm );
|
||||
l->end_index = (int*) smalloc( n * sizeof(int), "list:end_index", comm );
|
||||
|
||||
@ -43,36 +45,43 @@ int Make_List(int n, int num_intrs, int type, reax_list *l, MPI_Comm comm)
|
||||
|
||||
switch(l->type) {
|
||||
case TYP_VOID:
|
||||
if (l->select.v) sfree(l->select.v, "list:v");
|
||||
l->select.v = (void*) smalloc(l->num_intrs * sizeof(void*), "list:v", comm);
|
||||
break;
|
||||
|
||||
case TYP_THREE_BODY:
|
||||
if (l->select.three_body_list) sfree(l->select.three_body_list,"list:three_bodies");
|
||||
l->select.three_body_list = (three_body_interaction_data*)
|
||||
smalloc( l->num_intrs * sizeof(three_body_interaction_data),
|
||||
"list:three_bodies", comm );
|
||||
break;
|
||||
|
||||
case TYP_BOND:
|
||||
if (l->select.bond_list) sfree(l->select.bond_list,"list:bonds");
|
||||
l->select.bond_list = (bond_data*)
|
||||
smalloc( l->num_intrs * sizeof(bond_data), "list:bonds", comm );
|
||||
break;
|
||||
|
||||
case TYP_DBO:
|
||||
if (l->select.dbo_list) sfree(l->select.dbo_list,"list:dbonds");
|
||||
l->select.dbo_list = (dbond_data*)
|
||||
smalloc( l->num_intrs * sizeof(dbond_data), "list:dbonds", comm );
|
||||
break;
|
||||
|
||||
case TYP_DDELTA:
|
||||
if (l->select.dDelta_list) sfree(l->select.dDelta_list,"list:dDeltas");
|
||||
l->select.dDelta_list = (dDelta_data*)
|
||||
smalloc( l->num_intrs * sizeof(dDelta_data), "list:dDeltas", comm );
|
||||
break;
|
||||
|
||||
case TYP_FAR_NEIGHBOR:
|
||||
if (l->select.far_nbr_list) sfree(l->select.far_nbr_list,"list:far_nbrs");
|
||||
l->select.far_nbr_list = (far_neighbor_data*)
|
||||
smalloc(l->num_intrs * sizeof(far_neighbor_data), "list:far_nbrs", comm);
|
||||
break;
|
||||
|
||||
case TYP_HBOND:
|
||||
if (l->select.hbond_list) sfree(l->select.hbond_list,"list:hbonds");
|
||||
l->select.hbond_list = (hbond_data*)
|
||||
smalloc( l->num_intrs * sizeof(hbond_data), "list:hbonds", comm );
|
||||
break;
|
||||
@ -94,28 +103,37 @@ void Delete_List( reax_list *l, MPI_Comm comm )
|
||||
|
||||
sfree( l->index, "list:index" );
|
||||
sfree( l->end_index, "list:end_index" );
|
||||
l->index = NULL;
|
||||
l->end_index = NULL;
|
||||
|
||||
switch(l->type) {
|
||||
case TYP_VOID:
|
||||
sfree( l->select.v, "list:v" );
|
||||
l->select.v = NULL;
|
||||
break;
|
||||
case TYP_HBOND:
|
||||
sfree( l->select.hbond_list, "list:hbonds" );
|
||||
l->select.hbond_list = NULL;
|
||||
break;
|
||||
case TYP_FAR_NEIGHBOR:
|
||||
sfree( l->select.far_nbr_list, "list:far_nbrs" );
|
||||
l->select.far_nbr_list = NULL;
|
||||
break;
|
||||
case TYP_BOND:
|
||||
sfree( l->select.bond_list, "list:bonds" );
|
||||
l->select.bond_list = NULL;
|
||||
break;
|
||||
case TYP_DBO:
|
||||
sfree( l->select.dbo_list, "list:dbos" );
|
||||
l->select.dbo_list = NULL;
|
||||
break;
|
||||
case TYP_DDELTA:
|
||||
sfree( l->select.dDelta_list, "list:dDeltas" );
|
||||
l->select.dDelta_list = NULL;
|
||||
break;
|
||||
case TYP_THREE_BODY:
|
||||
sfree( l->select.three_body_list, "list:three_bodies" );
|
||||
l->select.three_body_list = NULL;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user