Update PairAirebo

This commit is contained in:
Richard Berger 2020-06-04 11:18:56 -04:00
parent 34ff7aa1fe
commit b2c4cce826
No known key found for this signature in database
GPG Key ID: A9E83994E0BA0CAB
2 changed files with 224 additions and 489 deletions

View File

@ -35,11 +35,13 @@
#include "memory.h"
#include "error.h"
#include "utils.h"
#include "tokenizer.h"
#include "potential_file_reader.h"
#include "fmt/format.h"
using namespace LAMMPS_NS;
using namespace MathSpecial;
#define MAXLINE 1024
#define TOL 1.0e-9
#define PGDELTA 1
@ -3331,9 +3333,6 @@ double PairAIREBO::TijSpline(double Nij, double Nji,
void PairAIREBO::read_file(char *filename)
{
int i,j,k,l,limit;
char s[MAXLINE];
// REBO Parameters (AIREBO)
double rcmin_CC,rcmin_CH,rcmin_HH,rcmax_CC,rcmax_CH,
@ -3357,563 +3356,299 @@ void PairAIREBO::read_file(char *filename)
double epsilonM_CC,epsilonM_CH,epsilonM_HH,alphaM_CC,alphaM_CH,alphaM_HH;
double reqM_CC,reqM_CH,reqM_HH;
MPI_Comm_rank(world,&me);
// read file on proc 0
int cerror = 0;
int numpar = 0;
FILE *fp = NULL;
if (me == 0) {
fp = force->open_potential(filename);
if (fp == NULL) {
char str[128];
if (comm->me == 0) {
std::string potential_name;
std::string header;
switch (variant) {
case AIREBO:
snprintf(str,128,"Cannot open AIREBO potential file %s",filename);
potential_name = "AIREBO";
header = "# AIREBO ";
break;
case REBO_2:
snprintf(str,128,"Cannot open REBO2 potential file %s",filename);
potential_name = "REBO2";
header = "# REBO2 ";
break;
case AIREBO_M:
snprintf(str,128,"Cannot open AIREBO-M potential file %s",filename);
potential_name = "Cannot open AIREBO-M";
header = "# AIREBO-M ";
break;
default:
snprintf(str,128,"Unknown REBO style variant %d",variant);
}
error->one(FLERR,str);
error->one(FLERR, fmt::format("Unknown REBO style variant %d",variant).c_str());
}
PotentialFileReader reader(lmp, filename, potential_name);
reader.ignore_comments(false);
// skip initial comment line and check for potential file style identifier comment
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
reader.skip_line();
char * line = reader.next_line();
if (((variant == AIREBO) && (strncmp(s,"# AIREBO ",9) != 0))
|| ((variant == REBO_2) && (strncmp(s,"# REBO2 ",8) != 0))
|| ((variant == AIREBO_M) && (strncmp(s,"# AIREBO-M ",11) != 0))) {
error->one(FLERR,"Potential file does not match AIREBO/REBO style variant");
if (std::string(line).find(header) == std::string::npos) {
error->one(FLERR,fmt::format("Potential file does not match AIREBO/REBO style variant: {}: {}", header, line).c_str());
}
// skip remaining comments
while (1) {
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (s[0] != '#') break;
}
reader.ignore_comments(true);
// read parameters
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&rcmin_CC)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&rcmin_CH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&rcmin_HH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&rcmax_CC)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&rcmax_CH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&rcmax_HH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&rcmaxp_CC)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&rcmaxp_CH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&rcmaxp_HH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&smin)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&Nmin)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&Nmax)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&NCmin)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&NCmax)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&Q_CC)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&Q_CH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&Q_HH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&alpha_CC)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&alpha_CH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&alpha_HH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&A_CC)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&A_CH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&A_HH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&BIJc_CC1)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&BIJc_CC2)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&BIJc_CC3)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&BIJc_CH1)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&BIJc_CH2)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&BIJc_CH3)) ++cerror;
++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;
std::vector<double*> params {
&rcmin_CC,
&rcmin_CH,
&rcmin_HH,
&rcmax_CC,
&rcmax_CH,
&rcmax_HH,
&rcmaxp_CC,
&rcmaxp_CH,
&rcmaxp_HH,
&smin,
&Nmin,
&Nmax,
&NCmin,
&NCmax,
&Q_CC,
&Q_CH,
&Q_HH,
&alpha_CC,
&alpha_CH,
&alpha_HH,
&A_CC,
&A_CH,
&A_HH,
&BIJc_CC1,
&BIJc_CC2,
&BIJc_CC3,
&BIJc_CH1,
&BIJc_CH2,
&BIJc_CH3,
&BIJc_HH1,
&BIJc_HH2,
&BIJc_HH3,
&Beta_CC1,
&Beta_CC2,
&Beta_CC3,
&Beta_CH1,
&Beta_CH2,
&Beta_CH3,
&Beta_HH1,
&Beta_HH2,
&Beta_HH3,
&rho_CC,
&rho_CH,
&rho_HH,
// LJ parameters
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&rcLJmin_CC)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&rcLJmin_CH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&rcLJmin_HH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&rcLJmax_CC)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&rcLJmax_CH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&rcLJmax_HH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&bLJmin_CC)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&bLJmin_CH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&bLJmin_HH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&bLJmax_CC)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&bLJmax_CH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&bLJmax_HH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&epsilon_CC)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
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;
&rcLJmin_CC,
&rcLJmin_CH,
&rcLJmin_HH,
&rcLJmax_CC,
&rcLJmax_CH,
&rcLJmax_HH,
&bLJmin_CC,
&bLJmin_CH,
&bLJmin_HH,
&bLJmax_CC,
&bLJmax_CH,
&bLJmax_HH,
&epsilon_CC,
&epsilon_CH,
&epsilon_HH,
&sigma_CC,
&sigma_CH,
&sigma_HH,
&epsilonT_CCCC,
&epsilonT_CCCH,
&epsilonT_HCCH
};
if (morseflag) {
// lines for reading in MORSE parameters from CH.airebo_m file
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&epsilonM_CC)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&epsilonM_CH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&epsilonM_HH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&alphaM_CC)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&alphaM_CH)) ++cerror;
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
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;
params.push_back(&epsilonM_CC);
params.push_back(&epsilonM_CH);
params.push_back(&epsilonM_HH);
params.push_back(&alphaM_CC);
params.push_back(&alphaM_CH);
params.push_back(&alphaM_HH);
params.push_back(&reqM_CC);
params.push_back(&reqM_CH);
params.push_back(&reqM_HH);
}
std::string current_section;
try {
/////////////////////////////////////////////////////////////////////////
// global parameters
current_section = "global parameters";
for(int i = 0; i < params.size(); i++) {
*params[i] = reader.next_double();
}
// 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
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
current_section = "gC spline";
// number-1 = # of domains for the spline
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%d",&limit)) ++cerror;
int limit = reader.next_int();
reader.next_dvector(limit, gCdom);
for (i = 0; i < limit; i++) {
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&gCdom[i])) ++cerror;
}
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
for (i = 0; i < limit-1; i++) {
for (j = 0; j < 6; j++) {
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&gC1[i][j])) ++cerror;
}
}
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
for (i = 0; i < limit-1; i++) {
for (j = 0; j < 6; j++) {
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&gC2[i][j])) ++cerror;
}
for (int i = 0; i < limit-1; i++) {
reader.next_dvector(6, &gC1[i][0]);
}
for (int i = 0; i < limit-1; i++) {
reader.next_dvector(6, &gC2[i][0]);
}
/////////////////////////////////////////////////////////////////////////
// gH spline
current_section = "gH spline";
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
limit = reader.next_int();
reader.next_dvector(limit, gHdom);
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%d",&limit)) ++cerror;
for (i = 0; i < limit; i++) {
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&gHdom[i])) ++cerror;
}
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
for (i = 0; i < limit-1; i++) {
for (j = 0; j < 6; j++) {
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&gH[i][j])) ++cerror;
}
for (int i = 0; i < limit-1; i++) {
reader.next_dvector(6, &gH[i][0]);
}
/////////////////////////////////////////////////////////////////////////
// pCC spline
current_section = "pCC spline";
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
limit = reader.next_int();
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%d",&limit)) ++cerror;
for (i = 0; i < limit/2; i++) {
for (j = 0; j < limit/2; j++) {
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&pCCdom[i][j])) ++cerror;
for (int i = 0; i < limit/2; i++) {
reader.next_dvector(limit/2, &pCCdom[i][0]);
}
}
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
for (i = 0; i < (int) pCCdom[0][1]; i++) {
for (j = 0; j < (int) pCCdom[1][1]; j++) {
for (k = 0; k < 16; k++) {
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&pCC[i][j][k])) ++cerror;
}
for (int i = 0; i < (int) pCCdom[0][1]; i++) {
for (int j = 0; j < (int) pCCdom[1][1]; j++) {
reader.next_dvector(16, &pCC[i][j][0]);
}
}
/////////////////////////////////////////////////////////////////////////
// pCH spline
current_section = "pCH spline";
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
limit = reader.next_int();
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%d",&limit)) ++cerror;
for (i = 0; i < limit/2; i++) {
for (j = 0; j < limit/2; j++) {
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&pCHdom[i][j])) ++cerror;
for (int i = 0; i < limit/2; i++) {
for (int j = 0; j < limit/2; j++) {
pCHdom[i][j] = reader.next_double();
}
}
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
for (i = 0; i < (int) pCHdom[0][1]; i++) {
for (j = 0; j < (int) pCHdom[1][1]; j++) {
for (k = 0; k < 16; k++) {
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&pCH[i][j][k])) ++cerror;
}
}
}
// piCC cpline
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%d",&limit)) ++cerror;
for (i = 0; i < limit/2; i++) {
for (j = 0; j < limit/3; j++) {
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&piCCdom[i][j])) ++cerror;
}
}
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
for (i = 0; i < (int) piCCdom[0][1]; i++) {
for (j = 0; j < (int) piCCdom[1][1]; j++) {
for (k = 0; k < (int) piCCdom[2][1]; k++) {
for (l = 0; l < 64; l = l+1) {
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&piCC[i][j][k][l])) ++cerror;
}
for (int i = 0; i < (int) pCHdom[0][1]; i++) {
for (int j = 0; j < (int) pCHdom[1][1]; j++) {
reader.next_dvector(16, &pCH[i][j][0]);
}
}
/////////////////////////////////////////////////////////////////////////
// piCC spline
current_section = "piCC spline";
limit = reader.next_int();
for (int i = 0; i < limit/2; i++) {
for (int j = 0; j < limit/3; j++) {
piCCdom[i][j] = reader.next_double();
}
}
for (int i = 0; i < (int) piCCdom[0][1]; i++) {
for (int j = 0; j < (int) piCCdom[1][1]; j++) {
for (int k = 0; k < (int) piCCdom[2][1]; k++) {
reader.next_dvector(64, &piCC[i][j][k][0]);
}
}
}
/////////////////////////////////////////////////////////////////////////
// piCH spline
current_section = "piCH spline";
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
limit = reader.next_int();
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%d",&limit)) ++cerror;
for (i = 0; i < limit/2; i++) {
for (j = 0; j < limit/3; j++) {
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&piCHdom[i][j])) ++cerror;
for (int i = 0; i < limit/2; i++) {
for (int j = 0; j < limit/3; j++) {
piCHdom[i][j] = reader.next_double();
}
}
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
for (i = 0; i < (int) piCHdom[0][1]; i++) {
for (j = 0; j < (int) piCHdom[1][1]; j++) {
for (k = 0; k < (int) piCHdom[2][1]; k++) {
for (l = 0; l < 64; l = l+1) {
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&piCH[i][j][k][l])) ++cerror;
}
for (int i = 0; i < (int) piCHdom[0][1]; i++) {
for (int j = 0; j < (int) piCHdom[1][1]; j++) {
for (int k = 0; k < (int) piCHdom[2][1]; k++) {
reader.next_dvector(64, &piCH[i][j][k][0]);
}
}
}
/////////////////////////////////////////////////////////////////////////
// piHH spline
current_section = "piHH spline";
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
limit = reader.next_int();
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%d",&limit)) ++cerror;
for (i = 0; i < limit/2; i++) {
for (j = 0; j < limit/3; j++) {
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&piHHdom[i][j])) ++cerror;
for (int i = 0; i < limit/2; i++) {
for (int j = 0; j < limit/3; j++) {
piHHdom[i][j] = reader.next_double();
}
}
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
for (i = 0; i < (int) piHHdom[0][1]; i++) {
for (j = 0; j < (int) piHHdom[1][1]; j++) {
for (k = 0; k < (int) piHHdom[2][1]; k++) {
for (l = 0; l < 64; l = l+1) {
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&piHH[i][j][k][l])) ++cerror;
}
for (int i = 0; i < (int) piHHdom[0][1]; i++) {
for (int j = 0; j < (int) piHHdom[1][1]; j++) {
for (int k = 0; k < (int) piHHdom[2][1]; k++) {
reader.next_dvector(64, &piHH[i][j][k][0]);
}
}
}
/////////////////////////////////////////////////////////////////////////
// Tij spline
current_section = "Tij spline";
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
limit = reader.next_int();
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%d",&limit)) ++cerror;
for (i = 0; i < limit/2; i++) {
for (j = 0; j < limit/3; j++) {
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&Tijdom[i][j])) ++cerror;
}
}
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
for (i = 0; i < (int) Tijdom[0][1]; i++) {
for (j = 0; j < (int) Tijdom[1][1]; j++) {
for (k = 0; k < (int) Tijdom[2][1]; k++) {
for (l = 0; l < 64; l = l+1) {
++numpar;
utils::sfgets(FLERR,s,MAXLINE,fp,filename,error);
if (1 != sscanf(s,"%lg",&Tijc[i][j][k][l])) ++cerror;
}
}
for (int i = 0; i < limit/2; i++) {
for (int j = 0; j < limit/3; j++) {
Tijdom[i][j] = reader.next_double();
}
}
fclose(fp);
for (int i = 0; i < (int) Tijdom[0][1]; i++) {
for (int j = 0; j < (int) Tijdom[1][1]; j++) {
for (int k = 0; k < (int) Tijdom[2][1]; k++) {
reader.next_dvector(64, &Tijc[i][j][k][0]);
}
// 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);
}
}
} catch (TokenizerException & e) {
std::string msg = fmt::format("ERROR reading {} section in {} file\n"
"REASON: {}\n",
current_section, potential_name, e.what());
error->one(FLERR, msg.c_str());
} catch (FileReaderException & fre) {
error->one(FLERR, fre.what());
std::string msg = fmt::format("ERROR reading {} section in {} file\n"
"REASON: {}\n",
current_section, potential_name, fre.what());
error->one(FLERR, msg.c_str());
}
// store read-in values in arrays
if (me == 0) {
// REBO
rcmin[0][0] = rcmin_CC;

View File

@ -42,7 +42,7 @@ class PairAIREBO : public Pair {
protected:
int *map; // 0 (C), 1 (H), or -1 (NULL) for each type
int me,variant;
int variant;
int ljflag,torflag; // 0/1 if LJ/Morse,torsion terms included
int morseflag; // 1 if Morse instead of LJ for non-bonded