double Properties::min_radius()
{
  const double maxtype = max_type();
  double minRadius = BIG;

  // check local particles
  for (int i=0;i<atom->nlocal;i++)
  {
    const double irad = atom->radius[i];
    // minimum
    if (irad < minRadius)
      minRadius = irad;
  }

  // check all fixes
  // such as fix insert, fix change/type, fix wall, fix pour
  for(int i=0;i<modify->nfix;i++)
  {
      // checks
      Fix *fix = modify->fix[i];

      if(!fix->use_rad_for_cut_neigh_and_ghost())
          continue;

      // loop over all types since min_rad(int) and max_rad(int) need a type
      for (int j=1;j<maxtype+1;j++)
      {
        const double f_minrad = fix->min_rad(j);
        if(f_minrad > SMALL &&  f_minrad < minRadius)
          minRadius = f_minrad;
      }
  }

  //Get min/max from other procs
  double minRadius_all;
  MPI_Allreduce(&minRadius,&minRadius_all, 1, MPI_DOUBLE, MPI_MIN, world);
  minRadius = minRadius_all;

  //error check
  if(minRadius <= SMALL)
    error->all(FLERR,"Atom radius must be bigger than zero for granular simulations");

  return  minRadius;
}