Commit d7c2ecad authored by Axel Kohlmeyer's avatar Axel Kohlmeyer
Browse files

add support for using utils::sfgets() to pair style airebo and check whether...

add support for using utils::sfgets() to pair style airebo and check whether sscanf() was parsing numbers correctly
parent 0eef5eba
Loading
Loading
Loading
Loading
+363 −233
Original line number Original line Diff line number Diff line
@@ -38,6 +38,7 @@
#include "math_special.h"
#include "math_special.h"
#include "memory.h"
#include "memory.h"
#include "error.h"
#include "error.h"
#include "utils.h"


using namespace LAMMPS_NS;
using namespace LAMMPS_NS;
using namespace MathConst;
using namespace MathConst;
@@ -3368,8 +3369,12 @@ void PairAIREBO::read_file(char *filename)


  // read file on proc 0
  // read file on proc 0


  int cerror = 0;
  int numpar = 0;
  FILE *fp = NULL;

  if (me == 0) {
  if (me == 0) {
    FILE *fp = force->open_potential(filename);
    fp = force->open_potential(filename);
    if (fp == NULL) {
    if (fp == NULL) {
      char str[128];
      char str[128];
      if (morseflag)
      if (morseflag)
@@ -3382,296 +3387,402 @@ void PairAIREBO::read_file(char *filename)
    // skip initial comment lines
    // skip initial comment lines


    while (1) {
    while (1) {
      fgets(s,MAXLINE,fp);
      utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
      if (s[0] != '#') break;
      if (s[0] != '#') break;
    }
    }


    // read parameters
    // read parameters


    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%lg",&rcmin_CC);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    if (1 != sscanf(s,"%lg",&rcmin_CC)) ++cerror;
    sscanf(s,"%lg",&rcmin_CH);
    ++numpar;
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    sscanf(s,"%lg",&rcmin_HH);
    if (1 != sscanf(s,"%lg",&rcmin_CH)) ++cerror;
    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%lg",&rcmax_CC);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    if (1 != sscanf(s,"%lg",&rcmin_HH)) ++cerror;
    sscanf(s,"%lg",&rcmax_CH);
    ++numpar;
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    sscanf(s,"%lg",&rcmax_HH);
    if (1 != sscanf(s,"%lg",&rcmax_CC)) ++cerror;
    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%lg",&rcmaxp_CC);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    if (1 != sscanf(s,"%lg",&rcmax_CH)) ++cerror;
    sscanf(s,"%lg",&rcmaxp_CH);
    ++numpar;
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    sscanf(s,"%lg",&rcmaxp_HH);
    if (1 != sscanf(s,"%lg",&rcmax_HH)) ++cerror;
    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%lg",&smin);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    if (1 != sscanf(s,"%lg",&rcmaxp_CC)) ++cerror;
    sscanf(s,"%lg",&Nmin);
    ++numpar;
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    sscanf(s,"%lg",&Nmax);
    if (1 != sscanf(s,"%lg",&rcmaxp_CH)) ++cerror;
    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%lg",&NCmin);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    if (1 != sscanf(s,"%lg",&rcmaxp_HH)) ++cerror;
    sscanf(s,"%lg",&NCmax);
    ++numpar;
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    sscanf(s,"%lg",&Q_CC);
    if (1 != sscanf(s,"%lg",&smin)) ++cerror;
    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%lg",&Q_CH);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    if (1 != sscanf(s,"%lg",&Nmin)) ++cerror;
    sscanf(s,"%lg",&Q_HH);
    ++numpar;
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    sscanf(s,"%lg",&alpha_CC);
    if (1 != sscanf(s,"%lg",&Nmax)) ++cerror;
    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%lg",&alpha_CH);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    if (1 != sscanf(s,"%lg",&NCmin)) ++cerror;
    sscanf(s,"%lg",&alpha_HH);
    ++numpar;
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    sscanf(s,"%lg",&A_CC);
    if (1 != sscanf(s,"%lg",&NCmax)) ++cerror;
    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%lg",&A_CH);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    if (1 != sscanf(s,"%lg",&Q_CC)) ++cerror;
    sscanf(s,"%lg",&A_HH);
    ++numpar;
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    sscanf(s,"%lg",&BIJc_CC1);
    if (1 != sscanf(s,"%lg",&Q_CH)) ++cerror;
    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%lg",&BIJc_CC2);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    if (1 != sscanf(s,"%lg",&Q_HH)) ++cerror;
    sscanf(s,"%lg",&BIJc_CC3);
    ++numpar;
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    sscanf(s,"%lg",&BIJc_CH1);
    if (1 != sscanf(s,"%lg",&alpha_CC)) ++cerror;
    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%lg",&BIJc_CH2);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    if (1 != sscanf(s,"%lg",&alpha_CH)) ++cerror;
    sscanf(s,"%lg",&BIJc_CH3);
    ++numpar;
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    sscanf(s,"%lg",&BIJc_HH1);
    if (1 != sscanf(s,"%lg",&alpha_HH)) ++cerror;
    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%lg",&BIJc_HH2);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    if (1 != sscanf(s,"%lg",&A_CC)) ++cerror;
    sscanf(s,"%lg",&BIJc_HH3);
    ++numpar;
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    sscanf(s,"%lg",&Beta_CC1);
    if (1 != sscanf(s,"%lg",&A_CH)) ++cerror;
    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%lg",&Beta_CC2);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    if (1 != sscanf(s,"%lg",&A_HH)) ++cerror;
    sscanf(s,"%lg",&Beta_CC3);
    ++numpar;
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    sscanf(s,"%lg",&Beta_CH1);
    if (1 != sscanf(s,"%lg",&BIJc_CC1)) ++cerror;
    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%lg",&Beta_CH2);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    if (1 != sscanf(s,"%lg",&BIJc_CC2)) ++cerror;
    sscanf(s,"%lg",&Beta_CH3);
    ++numpar;
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    sscanf(s,"%lg",&Beta_HH1);
    if (1 != sscanf(s,"%lg",&BIJc_CC3)) ++cerror;
    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%lg",&Beta_HH2);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    if (1 != sscanf(s,"%lg",&BIJc_CH1)) ++cerror;
    sscanf(s,"%lg",&Beta_HH3);
    ++numpar;
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    sscanf(s,"%lg",&rho_CC);
    if (1 != sscanf(s,"%lg",&BIJc_CH2)) ++cerror;
    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%lg",&rho_CH);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    if (1 != sscanf(s,"%lg",&BIJc_CH3)) ++cerror;
    sscanf(s,"%lg",&rho_HH);
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%lg",&BIJc_HH1)) ++cerror;
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%lg",&BIJc_HH2)) ++cerror;
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%lg",&BIJc_HH3)) ++cerror;
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%lg",&Beta_CC1)) ++cerror;
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%lg",&Beta_CC2)) ++cerror;
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%lg",&Beta_CC3)) ++cerror;
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%lg",&Beta_CH1)) ++cerror;
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%lg",&Beta_CH2)) ++cerror;
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%lg",&Beta_CH3)) ++cerror;
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%lg",&Beta_HH1)) ++cerror;
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%lg",&Beta_HH2)) ++cerror;
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%lg",&Beta_HH3)) ++cerror;
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%lg",&rho_CC)) ++cerror;
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%lg",&rho_CH)) ++cerror;
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%lg",&rho_HH)) ++cerror;


    // LJ parameters
    // LJ parameters


    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%lg",&rcLJmin_CC);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    if (1 != sscanf(s,"%lg",&rcLJmin_CC)) ++cerror;
    sscanf(s,"%lg",&rcLJmin_CH);
    ++numpar;
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    sscanf(s,"%lg",&rcLJmin_HH);
    if (1 != sscanf(s,"%lg",&rcLJmin_CH)) ++cerror;
    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%lg",&rcLJmax_CC);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    if (1 != sscanf(s,"%lg",&rcLJmin_HH)) ++cerror;
    sscanf(s,"%lg",&rcLJmax_CH);
    ++numpar;
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    sscanf(s,"%lg",&rcLJmax_HH);
    if (1 != sscanf(s,"%lg",&rcLJmax_CC)) ++cerror;
    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%lg",&bLJmin_CC);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    if (1 != sscanf(s,"%lg",&rcLJmax_CH)) ++cerror;
    sscanf(s,"%lg",&bLJmin_CH);
    ++numpar;
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    sscanf(s,"%lg",&bLJmin_HH);
    if (1 != sscanf(s,"%lg",&rcLJmax_HH)) ++cerror;
    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%lg",&bLJmax_CC);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    if (1 != sscanf(s,"%lg",&bLJmin_CC)) ++cerror;
    sscanf(s,"%lg",&bLJmax_CH);
    ++numpar;
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    sscanf(s,"%lg",&bLJmax_HH);
    if (1 != sscanf(s,"%lg",&bLJmin_CH)) ++cerror;
    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%lg",&epsilon_CC);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    if (1 != sscanf(s,"%lg",&bLJmin_HH)) ++cerror;
    sscanf(s,"%lg",&epsilon_CH);
    ++numpar;
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    sscanf(s,"%lg",&epsilon_HH);
    if (1 != sscanf(s,"%lg",&bLJmax_CC)) ++cerror;
    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%lg",&sigma_CC);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    if (1 != sscanf(s,"%lg",&bLJmax_CH)) ++cerror;
    sscanf(s,"%lg",&sigma_CH);
    ++numpar;
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    sscanf(s,"%lg",&sigma_HH);
    if (1 != sscanf(s,"%lg",&bLJmax_HH)) ++cerror;
    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%lg",&epsilonT_CCCC);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    if (1 != sscanf(s,"%lg",&epsilon_CC)) ++cerror;
    sscanf(s,"%lg",&epsilonT_CCCH);
    ++numpar;
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    sscanf(s,"%lg",&epsilonT_HCCH);
    if (1 != sscanf(s,"%lg",&epsilon_CH)) ++cerror;
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%lg",&epsilon_HH)) ++cerror;
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%lg",&sigma_CC)) ++cerror;
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%lg",&sigma_CH)) ++cerror;
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%lg",&sigma_HH)) ++cerror;
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%lg",&epsilonT_CCCC)) ++cerror;
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%lg",&epsilonT_CCCH)) ++cerror;
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%lg",&epsilonT_HCCH)) ++cerror;


    if (morseflag) {
    if (morseflag) {
      // lines for reading in MORSE parameters from CH.airebo_m file
      // lines for reading in MORSE parameters from CH.airebo_m file
      fgets(s,MAXLINE,fp);
      ++numpar;
      sscanf(s,"%lg",&epsilonM_CC);
      utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
      fgets(s,MAXLINE,fp);
      if (1 != sscanf(s,"%lg",&epsilonM_CC)) ++cerror;
      sscanf(s,"%lg",&epsilonM_CH);
      ++numpar;
      fgets(s,MAXLINE,fp);
      utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
      sscanf(s,"%lg",&epsilonM_HH);
      if (1 != sscanf(s,"%lg",&epsilonM_CH)) ++cerror;
      fgets(s,MAXLINE,fp);
      ++numpar;
      sscanf(s,"%lg",&alphaM_CC);
      utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
      fgets(s,MAXLINE,fp);
      if (1 != sscanf(s,"%lg",&epsilonM_HH)) ++cerror;
      sscanf(s,"%lg",&alphaM_CH);
      ++numpar;
      fgets(s,MAXLINE,fp);
      utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
      sscanf(s,"%lg",&alphaM_HH);
      if (1 != sscanf(s,"%lg",&alphaM_CC)) ++cerror;
      fgets(s,MAXLINE,fp);
      ++numpar;
      sscanf(s,"%lg",&reqM_CC);
      utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
      fgets(s,MAXLINE,fp);
      if (1 != sscanf(s,"%lg",&alphaM_CH)) ++cerror;
      sscanf(s,"%lg",&reqM_CH);
      ++numpar;
      fgets(s,MAXLINE,fp);
      utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
      sscanf(s,"%lg",&reqM_HH);
      if (1 != sscanf(s,"%lg",&alphaM_HH)) ++cerror;
    }
      ++numpar;
      utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
      if (1 != sscanf(s,"%lg",&reqM_CC)) ++cerror;
      ++numpar;
      utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
      if (1 != sscanf(s,"%lg",&reqM_CH)) ++cerror;
      ++numpar;
      utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
      if (1 != sscanf(s,"%lg",&reqM_HH)) ++cerror;
    }
    
  }
  
  // check for errors parsing global parameters

  MPI_Bcast(&cerror,1,MPI_INT,0,world);
  if (cerror > 0) {
    char msg[128];
    snprintf(msg,128,"Could not parse %d of %d parameters from file %s",
             cerror,numpar,filename);
    error->all(FLERR,msg);
  }

  cerror = numpar = 0;


  if (me == 0) {
    
    
    // gC spline
    // gC spline


    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);


    // number-1 = # of domains for the spline
    // number-1 = # of domains for the spline


    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%d",&limit);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%d",&limit)) ++cerror;


    for (i = 0; i < limit; i++) {
    for (i = 0; i < limit; i++) {
      fgets(s,MAXLINE,fp);
      ++numpar;
      sscanf(s,"%lg",&gCdom[i]);
      utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
      if (1 != sscanf(s,"%lg",&gCdom[i])) ++cerror;
    }
    }
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    for (i = 0; i < limit-1; i++) {
    for (i = 0; i < limit-1; i++) {
      for (j = 0; j < 6; j++) {
      for (j = 0; j < 6; j++) {
        fgets(s,MAXLINE,fp);
        ++numpar;
        sscanf(s,"%lg",&gC1[i][j]);
        utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
        if (1 != sscanf(s,"%lg",&gC1[i][j])) ++cerror;
      }
      }
    }
    }
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    for (i = 0; i < limit-1; i++) {
    for (i = 0; i < limit-1; i++) {
      for (j = 0; j < 6; j++) {
      for (j = 0; j < 6; j++) {
        fgets(s,MAXLINE,fp);
        ++numpar;
        sscanf(s,"%lg",&gC2[i][j]);
        utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
        if (1 != sscanf(s,"%lg",&gC2[i][j])) ++cerror;
      }
      }
    }
    }


    // gH spline
    // gH spline


    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);


    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%d",&limit);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%d",&limit)) ++cerror;


    for (i = 0; i < limit; i++) {
    for (i = 0; i < limit; i++) {
      fgets(s,MAXLINE,fp);
      ++numpar;
      sscanf(s,"%lg",&gHdom[i]);
      utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
      if (1 != sscanf(s,"%lg",&gHdom[i])) ++cerror;
    }
    }


    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);


    for (i = 0; i < limit-1; i++) {
    for (i = 0; i < limit-1; i++) {
      for (j = 0; j < 6; j++) {
      for (j = 0; j < 6; j++) {
        fgets(s,MAXLINE,fp);
        ++numpar;
        sscanf(s,"%lg",&gH[i][j]);
        utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
        if (1 != sscanf(s,"%lg",&gH[i][j])) ++cerror;
      }
      }
    }
    }


    // pCC spline
    // pCC spline


    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);


    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%d",&limit);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%d",&limit)) ++cerror;


    for (i = 0; i < limit/2; i++) {
    for (i = 0; i < limit/2; i++) {
      for (j = 0; j < limit/2; j++) {
      for (j = 0; j < limit/2; j++) {
        fgets(s,MAXLINE,fp);
        ++numpar;
        sscanf(s,"%lg",&pCCdom[i][j]);
        utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
        if (1 != sscanf(s,"%lg",&pCCdom[i][j])) ++cerror;
      }
      }
    }
    }
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);


    for (i = 0; i < (int) pCCdom[0][1]; i++) {
    for (i = 0; i < (int) pCCdom[0][1]; i++) {
      for (j = 0; j < (int) pCCdom[1][1]; j++) {
      for (j = 0; j < (int) pCCdom[1][1]; j++) {
        for (k = 0; k < 16; k++) {
        for (k = 0; k < 16; k++) {
          fgets(s,MAXLINE,fp);
          ++numpar;
          sscanf(s,"%lg",&pCC[i][j][k]);
          utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
          if (1 != sscanf(s,"%lg",&pCC[i][j][k])) ++cerror;
        }
        }
      }
      }
    }
    }


    // pCH spline
    // pCH spline


    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);

    sscanf(s,"%d",&limit);
    ++numpar;
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%d",&limit)) ++cerror;


    for (i = 0; i < limit/2; i++) {
    for (i = 0; i < limit/2; i++) {
      for (j = 0; j < limit/2; j++) {
      for (j = 0; j < limit/2; j++) {
        fgets(s,MAXLINE,fp);
        ++numpar;
        sscanf(s,"%lg",&pCHdom[i][j]);
        utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
        if (1 != sscanf(s,"%lg",&pCHdom[i][j])) ++cerror;
      }
      }
    }
    }
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);


    for (i = 0; i < (int) pCHdom[0][1]; i++) {
    for (i = 0; i < (int) pCHdom[0][1]; i++) {
      for (j = 0; j < (int) pCHdom[1][1]; j++) {
      for (j = 0; j < (int) pCHdom[1][1]; j++) {
        for (k = 0; k < 16; k++) {
        for (k = 0; k < 16; k++) {
          fgets(s,MAXLINE,fp);
          ++numpar;
          sscanf(s,"%lg",&pCH[i][j][k]);
          utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
          if (1 != sscanf(s,"%lg",&pCH[i][j][k])) ++cerror;
        }
        }
      }
      }
    }
    }


    // piCC cpline
    // piCC cpline


    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);


    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%d",&limit);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%d",&limit)) ++cerror;


    for (i = 0; i < limit/2; i++) {
    for (i = 0; i < limit/2; i++) {
      for (j = 0; j < limit/3; j++) {
      for (j = 0; j < limit/3; j++) {
        fgets(s,MAXLINE,fp);
        ++numpar;
        sscanf(s,"%lg",&piCCdom[i][j]);
        utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
        if (1 != sscanf(s,"%lg",&piCCdom[i][j])) ++cerror;
      }
      }
    }
    }
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);


    for (i = 0; i < (int) piCCdom[0][1]; i++) {
    for (i = 0; i < (int) piCCdom[0][1]; i++) {
      for (j = 0; j < (int) piCCdom[1][1]; j++) {
      for (j = 0; j < (int) piCCdom[1][1]; j++) {
        for (k = 0; k < (int) piCCdom[2][1]; k++) {
        for (k = 0; k < (int) piCCdom[2][1]; k++) {
          for (l = 0; l < 64; l = l+1) {
          for (l = 0; l < 64; l = l+1) {
            fgets(s,MAXLINE,fp);
            ++numpar;
            sscanf(s,"%lg",&piCC[i][j][k][l]);
            utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
            if (1 != sscanf(s,"%lg",&piCC[i][j][k][l])) ++cerror;
          }
          }
        }
        }
      }
      }
@@ -3679,27 +3790,30 @@ void PairAIREBO::read_file(char *filename)


    // piCH spline
    // piCH spline


    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);


    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%d",&limit);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%d",&limit)) ++cerror;


    for (i = 0; i < limit/2; i++) {
    for (i = 0; i < limit/2; i++) {
      for (j = 0; j < limit/3; j++) {
      for (j = 0; j < limit/3; j++) {
        fgets(s,MAXLINE,fp);
        ++numpar;
        sscanf(s,"%lg",&piCHdom[i][j]);
        utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
        if (1 != sscanf(s,"%lg",&piCHdom[i][j])) ++cerror;
      }
      }
    }
    }
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);


    for (i = 0; i < (int) piCHdom[0][1]; i++) {
    for (i = 0; i < (int) piCHdom[0][1]; i++) {
      for (j = 0; j < (int) piCHdom[1][1]; j++) {
      for (j = 0; j < (int) piCHdom[1][1]; j++) {
        for (k = 0; k < (int) piCHdom[2][1]; k++) {
        for (k = 0; k < (int) piCHdom[2][1]; k++) {
          for (l = 0; l < 64; l = l+1) {
          for (l = 0; l < 64; l = l+1) {
            fgets(s,MAXLINE,fp);
            ++numpar;
            sscanf(s,"%lg",&piCH[i][j][k][l]);
            utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
            if (1 != sscanf(s,"%lg",&piCH[i][j][k][l])) ++cerror;
          }
          }
        }
        }
      }
      }
@@ -3707,27 +3821,30 @@ void PairAIREBO::read_file(char *filename)


    // piHH spline
    // piHH spline


    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);


    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%d",&limit);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%d",&limit)) ++cerror;


    for (i = 0; i < limit/2; i++) {
    for (i = 0; i < limit/2; i++) {
      for (j = 0; j < limit/3; j++) {
      for (j = 0; j < limit/3; j++) {
        fgets(s,MAXLINE,fp);
        ++numpar;
        sscanf(s,"%lg",&piHHdom[i][j]);
        utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
        if (1 != sscanf(s,"%lg",&piHHdom[i][j])) ++cerror;
      }
      }
    }
    }
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);


    for (i = 0; i < (int) piHHdom[0][1]; i++) {
    for (i = 0; i < (int) piHHdom[0][1]; i++) {
      for (j = 0; j < (int) piHHdom[1][1]; j++) {
      for (j = 0; j < (int) piHHdom[1][1]; j++) {
        for (k = 0; k < (int) piHHdom[2][1]; k++) {
        for (k = 0; k < (int) piHHdom[2][1]; k++) {
          for (l = 0; l < 64; l = l+1) {
          for (l = 0; l < 64; l = l+1) {
            fgets(s,MAXLINE,fp);
            ++numpar;
            sscanf(s,"%lg",&piHH[i][j][k][l]);
            utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
            if (1 != sscanf(s,"%lg",&piHH[i][j][k][l])) ++cerror;
          }
          }
        }
        }
      }
      }
@@ -3735,27 +3852,30 @@ void PairAIREBO::read_file(char *filename)


    // Tij spline
    // Tij spline


    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);


    fgets(s,MAXLINE,fp);
    ++numpar;
    sscanf(s,"%d",&limit);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
    if (1 != sscanf(s,"%d",&limit)) ++cerror;


    for (i = 0; i < limit/2; i++) {
    for (i = 0; i < limit/2; i++) {
      for (j = 0; j < limit/3; j++) {
      for (j = 0; j < limit/3; j++) {
        fgets(s,MAXLINE,fp);
        ++numpar;
        sscanf(s,"%lg",&Tijdom[i][j]);
        utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
        if (1 != sscanf(s,"%lg",&Tijdom[i][j])) ++cerror;
      }
      }
    }
    }
    fgets(s,MAXLINE,fp);
    utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);


    for (i = 0; i < (int) Tijdom[0][1]; i++) {
    for (i = 0; i < (int) Tijdom[0][1]; i++) {
      for (j = 0; j < (int) Tijdom[1][1]; j++) {
      for (j = 0; j < (int) Tijdom[1][1]; j++) {
        for (k = 0; k < (int) Tijdom[2][1]; k++) {
        for (k = 0; k < (int) Tijdom[2][1]; k++) {
          for (l = 0; l < 64; l = l+1) {
          for (l = 0; l < 64; l = l+1) {
            fgets(s,MAXLINE,fp);
            ++numpar;
            sscanf(s,"%lg",&Tijc[i][j][k][l]);
            utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
            if (1 != sscanf(s,"%lg",&Tijc[i][j][k][l])) ++cerror;
          }
          }
        }
        }
      }
      }
@@ -3764,6 +3884,16 @@ void PairAIREBO::read_file(char *filename)
    fclose(fp);
    fclose(fp);
  }
  }
  
  
  // check for errors parsing spline data

  MPI_Bcast(&cerror,1,MPI_INT,0,world);
  if (cerror > 0) {
    char msg[128];
    snprintf(msg,128,"Could not parse %d of %d spline data from file %s",
             cerror,numpar,filename);
    error->all(FLERR,msg);
  }

  // store read-in values in arrays
  // store read-in values in arrays


  if (me == 0) {
  if (me == 0) {