Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions src/include/parser.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,25 +15,25 @@ inline void force_locale() {
}

class cmdline_parser {
int argc,i;
char **argv;
int argc, i;
char **argv;
public:
cmdline_parser() { force_locale(); }
void open(int argc_in,char *argv_in[]);
int get(char *&arg,char *&val);
void ack(char *arg,char *val);
void close();
void open(int argc_in, char *argv_in[]);
int get(char *&arg, char *&val);
void ack(char *arg, char *val);
void close();
};

class file_parser {
FILE *fp;
int iline;
char line[1024];
FILE *fp;
int iline;
char line[1024];
public:
file_parser() { force_locale(); }
int open(const char *file);
int get(char *&arg,char *&val);
void close();
int open(const char *file);
int get(char *&arg,char *&val);
void close();
};

#endif
Expand Down
29 changes: 17 additions & 12 deletions src/include/read_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,23 @@

class configuration {
public:
int minit,maxit;
double tol,newton_dmax;
int verbose;
char plot_device[64];
double plot_interval;
char input_file[256];
char param_file[256];
char output_file[256];
configuration(int argc,char *argv[]);
~configuration(){};
void missing_argument(const char *arg);
int check_arg(const char *arg,const char *val);
int minit,maxit;
double tol,newton_dmax;
int verbose;
bool noplot;
char plot_device[64];
double plot_interval;
char input_file[256];
char param_file[256];
char output_file[256];

configuration();
~configuration(){};

void read_config(int argc, char *argv[]); // wrapper around the following 2 methods
void read_config_file();
void read_command_line(int argc, char *argv[]);

int parse_arg(const char *arg,const char *val);
};

4 changes: 2 additions & 2 deletions src/include/star.h
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ class star2d {
virtual void atmosphere();

virtual int init(const char *input_file, const char *param_file, int argc, char *argv[]);
virtual int check_arg(char *arg, char *val, int *change_grid);
virtual int parse_arg(char *arg, char *val, int *change_grid);
virtual int read(const char *input_file, int dim = 2);
int hdf5_read(const char *input_file, int dim);
virtual void write(const char *output_file) const;
Expand Down Expand Up @@ -181,7 +181,7 @@ class star1d : public star2d {
star1d(const star1d &);
star1d &operator=(const star1d &);
virtual int init(const char *input_file, const char *param_file, int argc, char *argv[]);
virtual int check_arg(char *arg, char *val, int *change_grid);
virtual int parse_arg(char *arg, char *val, int *change_grid);
virtual int read(const char *input_file, int dim = 1);

virtual void dump_info();
Expand Down
3 changes: 2 additions & 1 deletion src/main/polytrope1d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ int main(int argc,char *argv[]) {
int nit,last_it;
tiempo t;

configuration config(argc, argv);
configuration config;
config.read_config(argc, argv);

signal(SIGINT, sig_handler);

Expand Down
97 changes: 63 additions & 34 deletions src/main/read_config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,8 @@
#include "read_config.h"
#include "matplotlib.h"

configuration::configuration(int argc,char *argv[]) {

int i, k;
char *arg,*val;
char file[256];
cmdline_parser cmd;
file_parser fp;

configuration::configuration() {
// These are default values aimed to be replaced by config file values then command line ones
verbose=1;
strcpy(plot_device,"/NULL");
plot_interval=10;
Expand All @@ -27,39 +21,78 @@ configuration::configuration(int argc,char *argv[]) {
tol=1e-8;
newton_dmax=0.5;
noplot = false;
}


void configuration::read_config(int argc, char *argv[]) {
// To ensure command line argument's precendence (complying with documentation)
// over the configuration file argument these methods must be called IN THIS ORDER

read_config_file(); // 1st --> default values
read_command_line(argc, argv); // 2nd --> can erase default config file values
}


void configuration::read_config_file() {
char *arg,*val;
int err_code, line;
char file[256];
file_parser fp;

// Write in file the path to the default config file
sprintf(file, "%s/ester/star.cfg", ESTER_DATADIR);
if(!fp.open(file))
printf("Can't open configuration file %s\n",file);
else {
while((k=fp.get(arg,val))) {
if((i=check_arg(arg,val))) {
printf("Syntax error in configuration file %s, line %d\n",file,k);
if(i==2) missing_argument(arg);
if(i==1) {
printf("Unknown parameter %s\n",arg);
exit(1);
}
}
}
fp.close();

// Try opening the file, get 1 on error
if(fp.open(file)){
printf("Can't open configuration file %s\n", file);
ester_err(strerror(errno));
}

cmd.open(argc,argv);
while(int err_code=cmd.get(arg,val)) {
if(err_code==-1) exit(1);
err_code=check_arg(arg,val);
if(err_code==2) missing_argument(arg);
if(err_code==0) cmd.ack(arg,val);
// iterate over each line/arg of the config file
while((line = fp.get(arg, val))) {
if((err_code = parse_arg(arg, val))) {
printf("Syntax error in configuration file %s, line %d\n", file, line);
if(err_code == 2)
ester_err("%s: Argument to '%s' missing", file, arg);
if(err_code == 1)
ester_err("%s: Unknown parameter '%s'", file, arg);
}
}
cmd.close();
fp.close();
}


void configuration::read_command_line(int argc, char *argv[]) {
char *arg,*val;
int err_code;
cmdline_parser cmd;

cmd.open(argc, argv);
while(err_code = cmd.get(arg, val)) {
if(err_code == -1)
ester_err("Invalid argument %s", arg);

err_code = parse_arg(arg,val);
// We ignore Error Code 1 (unknown parameter) on purpose: it might be interpreted by star1d::init later
if(err_code == 2)
ester_err("Argument to '%s' missing", arg);
if(err_code == 0)
cmd.ack(arg,val);
}
cmd.close();

if (noplot == false)
plt::init();
}

int configuration::check_arg(const char *arg,const char *val) {

int configuration::parse_arg(const char *arg,const char *val) {
/*
Return codes:
0: No Error
1: Unknown paramter
2: Missing value
*/
int err=0;

if(!strcmp(arg,"v0"))
Expand Down Expand Up @@ -127,7 +160,3 @@ int configuration::check_arg(const char *arg,const char *val) {
return err;

}

void configuration::missing_argument(const char *arg) {
ester_err("Error: Argument to '%s' missing", arg);
}
9 changes: 6 additions & 3 deletions src/main/star1d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,11 @@ int main(int argc,char *argv[]) {
int nit,last_it;
double err;
tiempo t;
// double t_plot;

configuration config(argc, argv);
// Create config object
configuration config;
// Parse configuration file star.cfg and command line simulation parameters (not star ones)
config.read_config(argc, argv);

signal(SIGINT, sig_handler);

Expand All @@ -47,7 +49,8 @@ int main(int argc,char *argv[]) {
star1d A;
solver *op;

if(A.init(config.input_file,config.param_file,argc,argv)) {
// Parse configutation file 1d_default.par and command line star parameters
if(A.init(config.input_file, config.param_file, argc, argv)) {
ester_err("Could not initialize star");
return 1;
}
Expand Down
10 changes: 7 additions & 3 deletions src/main/star2d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,14 @@ int main(int argc,char *argv[]) {
int nit,last_it;
double err=1;
double t_plot;
configuration config(argc,argv);
tiempo t;
// figure *fig = NULL;


// Create config object
configuration config;
// Parse configuration file star.cfg and command line simulation parameters (not star ones)
config.read_config(argc, argv);

signal(SIGINT,sig_handler);

plt::figure(1, 10, 4);
Expand All @@ -38,7 +42,7 @@ int main(int argc,char *argv[]) {
star2d A;
solver *op;

if(A.init(config.input_file,config.param_file,argc,argv)) {
if(A.init(config.input_file, config.param_file, argc, argv)) {
ester_err("Could not initialize star");
return 1;
}
Expand Down
9 changes: 6 additions & 3 deletions src/main/star_evol.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,18 @@

int main(int argc,char *argv[]) {

configuration config(argc,argv);
configuration config;
config.read_config(argc, argv); // Should we called only read_config_file here ?

cmdline_parser cmd;

double dXc=0.05,Xcmin=0.05;

char *arg,*val;
cmd.open(argc,argv);
while(int err_code=cmd.get(arg,val)) {
if(err_code==-1) exit(1);
while(int err_code = cmd.get(arg,val)) {
if(err_code == -1)
ester_err("Invalid argument %s", arg);
err_code=0;
if(!strcmp(arg,"dXc")) {
if(val==NULL) err_code=2;
Expand Down
Loading