From 0b202b0b9f1d7e75bd89a404580bf18289e6a297 Mon Sep 17 00:00:00 2001 From: ctmbl Date: Wed, 31 Jan 2024 15:32:30 +0100 Subject: [PATCH 01/12] Update, homogenize and extend ester's logging macros --- src/include/utils.h | 140 ++++++++++++++++++++++++++++++-------------- 1 file changed, 96 insertions(+), 44 deletions(-) diff --git a/src/include/utils.h b/src/include/utils.h index 7e63b506..a137a49f 100644 --- a/src/include/utils.h +++ b/src/include/utils.h @@ -12,63 +12,115 @@ #include "debug.h" #endif -#ifdef __GNUG__ -#define _print_stack() { \ - print_stack(); \ -} -#else -#define _print_stack() { } -#endif +#define RED "\033[0;31m" +#define GREEN "\033[0;32m" +#define YELLOW "\033[0;33m" +#define RESET "\033[0;0m" + +/* +Define utility log functions: +ester_debug|info|warn|err|critical + +`ester_debug`: +print to stderr in DEBUG +none else + +`ester_debug`: +prefixed with green "Info" +print to stdout in both modes + +`ester_warn`: +prefixed with yellow "Warning:" +print to stderr ++ indicate line and file in DEBUG + +`ester_err`: +same as `ester_warn` with red "Error:" ++ print stack in DEBUG + +`ester_critical`: +same as `ester_err` with red "CRITICAL:" ++ exit program or throw eception +*/ #ifdef DEBUG -#define ester_err(...) do { \ - LOGE("Error at %s:%d: ", __FILE__, __LINE__); \ - LOGE(__VA_ARGS__); \ - LOGE("\n"); \ - print_stack(); \ - throw runtime_exception(); \ +#define ester_debug(...) do { \ + fprintf(stderr, __VA_ARGS__); \ +} while (0) + +#define ester_info(...) do { \ + printf(GREEN); \ + printf("Info: "); \ + printf(RESET); \ + printf(__VA_ARGS__); \ + fflush(stdout); \ +} while (0) + +#define ester_warn(...) do { \ + fprintf(stderr, YELLOW); \ + fprintf(stderr, "Warning at %s:%d: ", __FILE__, __LINE__); \ + fprintf(stderr, RESET); \ + fprintf(stderr, __VA_ARGS__); \ + fprintf(stderr, "\n"); \ } while(0) -#else + #define ester_err(...) do { \ - LOGE("Error: "); \ - LOGE(__VA_ARGS__); \ - LOGE("\n"); \ - print_stack(); \ - exit(EXIT_FAILURE); \ + fprintf(stderr, RED); \ + fprintf(stderr, "Error at %s:%d: ", __FILE__, __LINE__); \ + fprintf(stderr, RESET); \ + fprintf(stderr, __VA_ARGS__); \ + fprintf(stderr, "\n"); \ + print_stack(); } while(0) -#endif -#ifdef DEBUG -#define ester_warn(...) do { \ - LOGW("Warning at %s:%d: ", __FILE__, __LINE__); \ - LOGW(__VA_ARGS__); \ - LOGW("\n"); \ +#define ester_critical(...) do { \ + fprintf(stderr, RED); \ + fprintf(stderr, "CRITICAL at %s:%d: ", __FILE__, __LINE__); \ + fprintf(stderr, RESET); \ + fprintf(stderr, __VA_ARGS__); \ + fprintf(stderr, "\n"); \ + print_stack(); + throw runtime_exception(); \ } while(0) -#else + +#else // DEBUG +#define ester_debug(...) do {} while (0) + +#define ester_info(...) do { \ + printf(GREEN); \ + printf("Info: "); \ + printf(RESET); \ + printf(__VA_ARGS__); \ + fflush(stdout); \ +} while (0) + #define ester_warn(...) do { \ - LOGW("Warning: "); \ - LOGW(__VA_ARGS__); \ - LOGW("\n"); \ + fprintf(stderr, YELLOW); \ + fprintf(stderr, "Warning: "); \ + fprintf(stderr, RESET); \ + fprintf(stderr, __VA_ARGS__); \ + fprintf(stderr, "\n"); \ } while(0) -#endif -#ifdef DEBUG -#define ester_debug(...) do { \ +#define ester_err(...) do { \ + fprintf(stderr, RED); \ + fprintf(stderr, "Error: "); \ + fprintf(stderr, RESET); \ fprintf(stderr, __VA_ARGS__); \ -} while (0) -#else -#define ester_debug(...) do {} while (0) -#endif + fprintf(stderr, "\n"); \ +} while(0) -bool isHDF5Name(const char *fileName); +#define ester_critical(...) do { \ + fprintf(stderr, RED); \ + fprintf(stderr, "CRITICAL: "); \ + fprintf(stderr, RESET); \ + fprintf(stderr, __VA_ARGS__); \ + fprintf(stderr, "\n"); \ + exit(EXIT_FAILURE); \ +} while(0) -#define RED "\033[0;31m" -#define GREEN "\033[0;32m" -#define YELLOW "\033[0;33m" -#define RESET "\033[0;0m" +#endif // DEBUG -#define LOGI(...) { printf(GREEN); printf(__VA_ARGS__); printf(RESET); fflush(stdout); } -#define LOGW(...) { fprintf(stderr, YELLOW); fprintf(stderr, __VA_ARGS__); fprintf(stderr, RESET); } -#define LOGE(...) { fprintf(stderr, RED); fprintf(stderr, __VA_ARGS__); fprintf(stderr, RESET); } +bool isHDF5Name(const char *fileName); #endif // ESTER_UTILS_H From 92e3d5a449b06c82852b9a81071d7f50aa7c3ef6 Mon Sep 17 00:00:00 2001 From: ctmbl Date: Tue, 6 Feb 2024 15:21:22 +0100 Subject: [PATCH 02/12] Replace obvious ester_err by ester_critical --- src/main/ester-info.cpp | 2 +- src/main/gen_output.cpp | 6 +- src/main/read_config.cpp | 2 +- src/main/star1d.cpp | 2 +- src/main/star2d.cpp | 2 +- src/mapping/mapping.cpp | 20 ++--- src/mapping/remapper.cpp | 24 +++--- src/matrix/mat_spec.cpp | 20 ++--- src/matrix/matrix.cpp | 154 ++++++++++++++++++------------------- src/solver/solver.cpp | 26 +++---- src/solver/solver_full.cpp | 7 +- src/star/star1d_extra.cpp | 2 +- src/star/star2d_class.cpp | 44 +++++------ src/star/star_map.cpp | 6 +- src/symbolic/sym.cpp | 4 +- src/utils/debug.cpp | 2 +- 16 files changed, 160 insertions(+), 163 deletions(-) diff --git a/src/main/ester-info.cpp b/src/main/ester-info.cpp index 38381ba4..d43be73d 100644 --- a/src/main/ester-info.cpp +++ b/src/main/ester-info.cpp @@ -20,6 +20,6 @@ int main(int argc,char *argv[]) { return 0; } - ester_err("Unknown file format"); + ester_critical("Unknown file format"); return 1; } diff --git a/src/main/gen_output.cpp b/src/main/gen_output.cpp index c2883c8c..4935dfa7 100644 --- a/src/main/gen_output.cpp +++ b/src/main/gen_output.cpp @@ -25,7 +25,7 @@ int main(int argc,char *argv[]) { if(!m1d.read(input_file, 1)) output2d(m1d); else if (!m2d.read(input_file)) output2d(m2d); else { - ester_err("Error reading input file: %s",input_file); + ester_critical("Error reading input file: %s",input_file); return 1; } @@ -589,8 +589,8 @@ void write(const star2d &A,char *var,char *fmt) { fwrite(&d,sizeof(double),1,stdout); } } else { - ester_err("Unknown variable %s", var); - exit(1); + ester_critical("Unknown variable %s", var); + exit(1); // Useless because ester_critical already exit } } diff --git a/src/main/read_config.cpp b/src/main/read_config.cpp index 3ab8fc32..ae4991ba 100644 --- a/src/main/read_config.cpp +++ b/src/main/read_config.cpp @@ -129,5 +129,5 @@ int configuration::check_arg(const char *arg,const char *val) { } void configuration::missing_argument(const char *arg) { - ester_err("Error: Argument to '%s' missing", arg); + ester_critical("Error: Argument to '%s' missing", arg); } diff --git a/src/main/star1d.cpp b/src/main/star1d.cpp index 7271cda7..d0df8db3 100644 --- a/src/main/star1d.cpp +++ b/src/main/star1d.cpp @@ -48,7 +48,7 @@ int main(int argc,char *argv[]) { solver *op; if(A.init(config.input_file,config.param_file,argc,argv)) { - ester_err("Could not initialize star"); + ester_critical("Could not initialize star"); return 1; } diff --git a/src/main/star2d.cpp b/src/main/star2d.cpp index 7d3bb337..74dc901b 100644 --- a/src/main/star2d.cpp +++ b/src/main/star2d.cpp @@ -39,7 +39,7 @@ int main(int argc,char *argv[]) { solver *op; if(A.init(config.input_file,config.param_file,argc,argv)) { - ester_err("Could not initialize star"); + ester_critical("Could not initialize star"); return 1; } diff --git a/src/mapping/mapping.cpp b/src/mapping/mapping.cpp index 9ab7dcc3..baef51e7 100644 --- a/src/mapping/mapping.cpp +++ b/src/mapping/mapping.cpp @@ -287,12 +287,12 @@ matrix mapping::stream(const matrix &Fz) const { matrix mapping::eval(const matrix &y,const matrix &ri, const matrix &thi,int parity) const { if(ri.nrows()!=thi.nrows()||ri.ncols()!=thi.ncols()) { - ester_err("(mapping.eval) Matrix dimensions must agree"); - exit(1); + ester_critical("(mapping.eval) Matrix dimensions must agree"); + exit(1); // Useless because ester_critical already exit } if(y.nrows()!=gl.N||y.ncols()!=leg.npts) { - ester_err("(mapping.eval) Matrix dimensions must agree"); - exit(1); + ester_critical("(mapping.eval) Matrix dimensions must agree"); + exit(1); // Useless because ester_critical already exit } matrix yi(ri.nrows(),ri.ncols()); @@ -307,9 +307,9 @@ matrix mapping::eval(const matrix &y,const matrix &ri, const matrix &thi,int par if(zi-1>-1e-10&&zi-1<1e-10) zi=1; if(zi<1e-10&&zi>-1e-10) zi=0; if(zi>1||zi<0) { - ester_err("(mapping.eval) Coordinates (r,theta)=(%f,%f) are out of bounds", + ester_critical("(mapping.eval) Coordinates (r,theta)=(%f,%f) are out of bounds", ri(i),thi(i)); - exit(1); + exit(1); // Useless because ester_critical already exit } int fin=0,nit=0; if(zi==0||zi==1) fin=99; @@ -319,8 +319,8 @@ matrix mapping::eval(const matrix &y,const matrix &ri, const matrix &thi,int par if(fabs(dzi)<1e-10) fin++; nit++; if(nit>100) { - ester_err("(mapping.eval) Failed to converge"); - exit(1); + ester_critical("(mapping.eval) Failed to converge"); + exit(1); // Useless because ester_critical already exit } zi+=dzi; } @@ -336,8 +336,8 @@ matrix mapping::zeta_to_r(const matrix &z) const { matrix rr(z.nrows(),z.ncols()); if(z.ncols()!=leg.npts) { - ester_err("(mapping.zeta_to_r) Matrix must have nth columns"); - exit(1); + ester_critical("(mapping.zeta_to_r) Matrix must have nth columns"); + exit(1); // Useless because ester_critical already exit } for(int j=0;jmap.ndomains) { - ester_err("(remapper) Index exceeds number of domains"); - exit(1); + ester_critical("(remapper) Index exceeds number of domains"); + exit(1); // Useless because ester_critical already exit } } @@ -182,18 +182,18 @@ matrix remapper::interp_ex(const matrix &y,int parity) { void remapper::remap() { if(ndomains!=map.ndomains&&!changed_npts) { - ester_err("(remapper) Should specify number of points in each domain"); - exit(1); + ester_critical("(remapper) Should specify number of points in each domain"); + exit(1); // Useless because ester_critical already exit } if(ndomains!=map.ndomains&&!redist) { - ester_err("(remapper) Should specify domain boundaries"); - exit(1); + ester_critical("(remapper) Should specify domain boundaries"); + exit(1); // Useless because ester_critical already exit } if(R.nrows()!=ndomains+1) { - ester_err("(remapper) Incorrect size of boundary matrix R"); - exit(1); + ester_critical("(remapper) Incorrect size of boundary matrix R"); + exit(1); // Useless because ester_critical already exit } remapped=1; @@ -206,8 +206,8 @@ void remapper::remap() { if(R.ncols()!=nt) { if(R.ncols()!=map.nt) { - ester_err("Error: (remapper) Incorrect size of boundary matrix R"); - exit(1); + ester_critical("Error: (remapper) Incorrect size of boundary matrix R"); + exit(1); // Useless because ester_critical already exit } R=map.leg.eval_00(R,map_new.th); } @@ -274,8 +274,8 @@ void remapper::remap() { zi+=dzi; nit++; if(nit>100) { - ester_err("(remapper) No convergence in remap()"); - exit(1); + ester_critical("(remapper) No convergence in remap()"); + exit(1); // Useless because ester_critical already exit } } zmap.setcol(j,zi); diff --git a/src/matrix/mat_spec.cpp b/src/matrix/mat_spec.cpp index 98a2433c..cb2c51c7 100644 --- a/src/matrix/mat_spec.cpp +++ b/src/matrix/mat_spec.cpp @@ -23,8 +23,8 @@ extern "C" { matrix matrix::operator,(const matrix &a) const { if(nc!=a.nf) { - ester_err("(matrix.,) Dimensions must agree"); - exit(1); + ester_critical("(matrix.,) Dimensions must agree"); + exit(1); // Useless because ester_critical already exit } matrix res(nf,a.nc); @@ -41,19 +41,19 @@ matrix matrix::solve(matrix b) const { matrix lu(*this); if(nf!=b.nf) { - ester_err("(matrix.solve) Dimensions must agree"); - exit(1); + ester_critical("(matrix.solve) Dimensions must agree"); + exit(1); // Useless because ester_critical already exit } if(nf!=nc) { - ester_err("(matrix.solve) Matrix must be square"); - exit(1); + ester_critical("(matrix.solve) Matrix must be square"); + exit(1); // Useless because ester_critical already exit } enable_sigfpe(); dgetrf_(&lu.nf,&lu.nc,lu.p,&lu.nf,ipiv,&info); if(info>0) { printf("Matrix is singular (%d)\n",info); - exit(1); + exit(1); // Useless because ester_critical already exit } dgetrs_(&trans,&lu.nf,&b.nc,lu.p,&lu.nf,ipiv,b.p,&b.nf,&info); disable_sigfpe(); @@ -69,14 +69,14 @@ matrix matrix::inv() const { double *work,w; if(nf!=nc) { - ester_err("(matrix.inv) Matrix must be square"); - exit(1); + ester_critical("(matrix.inv) Matrix must be square"); + exit(1); // Useless because ester_critical already exit } dgetrf_(&res.nf,&res.nc,res.p,&res.nf,ipiv,&info); if(info>0) { printf("Matrix is singular (%d)\n",info); - exit(1); + exit(1); // Useless because ester_critical already exit } dgetri_(&res.nf,res.p,&res.nf,ipiv,&w,&lwork,&info); lwork = (int) round(w); diff --git a/src/matrix/matrix.cpp b/src/matrix/matrix.cpp index bb44c4f1..a0e82a27 100644 --- a/src/matrix/matrix.cpp +++ b/src/matrix/matrix.cpp @@ -19,13 +19,13 @@ matrix::matrix(int nfil, int ncol) { unsigned tam; if(nfil<0||ncol<0) { - ester_err("Can't create matrix with negative size"); + ester_critical("Can't create matrix with negative size"); } if(nfil==0) { - ester_err("Number of rows can't be zero"); + ester_critical("Number of rows can't be zero"); } if(ncol==0) { - ester_err("Number of columns can't be zero"); + ester_critical("Number of columns can't be zero"); } nf=nfil; nc=ncol; @@ -86,16 +86,16 @@ matrix &matrix::dim(int nfil, int ncol) { unsigned tam; if(nfil<0||ncol<0) { - ester_err("Can't create matrix with negative size"); - exit(1); + ester_critical("Can't create matrix with negative size"); + exit(1); // Useless because ester_critical already exit } if(nfil==0) { - ester_err("Number of rows can't be zero"); - exit(1); + ester_critical("Number of rows can't be zero"); + exit(1); // Useless because ester_critical already exit } if(ncol==0) { - ester_err("Number of columns can't be zero"); - exit(1); + ester_critical("Number of columns can't be zero"); + exit(1); // Useless because ester_critical already exit } if(nfil*ncol!=nf*nc) { @@ -121,21 +121,21 @@ matrix &matrix::dim(int nfil, int ncol) { matrix &matrix::redim(int nfil, int ncol) { if(nfil<0||ncol<0) { - ester_err("Can't create matrix with negative size"); - exit(1); + ester_critical("Can't create matrix with negative size"); + exit(1); // Useless because ester_critical already exit } if(nfil==0) { - ester_err("Number of rows can't be zero"); - exit(1); + ester_critical("Number of rows can't be zero"); + exit(1); // Useless because ester_critical already exit } if(ncol==0) { - ester_err("Number of columns can't be zero"); - exit(1); + ester_critical("Number of columns can't be zero"); + exit(1); // Useless because ester_critical already exit } if(nfil*ncol!=nf*nc) { - ester_err("matrix.redim: Number of elements doesn't match"); - exit(1); + ester_critical("matrix.redim: Number of elements doesn't match"); + exit(1); // Useless because ester_critical already exit } nf=nfil;nc=ncol; @@ -162,8 +162,8 @@ double &matrix::operator()(int ifil, int icol) { if(ifil<0) ifil+=nf; if(icol<0) icol+=nc; if(ifil>=nf||ifil<0||icol>=nc||icol<0) { - ester_err("Index exceeds matrix dimensions"); - exit(1); + ester_critical("Index exceeds matrix dimensions"); + exit(1); // Useless because ester_critical already exit } return *(p+icol*nf+ifil); @@ -175,8 +175,8 @@ double &matrix::operator()(int ielem) { if(ielem<0) ielem+=nf*nc; if(ielem>=nf*nc||ielem<0) { - ester_err("Index exceeds matrix dimensions"); - exit(1); + ester_critical("Index exceeds matrix dimensions"); + exit(1); // Useless because ester_critical already exit } return *(p+ielem); @@ -189,8 +189,8 @@ const double &matrix::operator()(int ifil, int icol) const { if(ifil<0) ifil+=nf; if(icol<0) icol+=nc; if(ifil>=nf||ifil<0||icol>=nc||icol<0) { - ester_err("Index exceeds matrix dimensions"); - exit(1); + ester_critical("Index exceeds matrix dimensions"); + exit(1); // Useless because ester_critical already exit } return *(p+icol*nf+ifil); @@ -202,8 +202,8 @@ const double &matrix::operator()(int ielem) const { if(ielem<0) ielem+=nf*nc; if(ielem>=nf*nc||ielem<0) { - ester_err("Index exceeds matrix dimensions"); - exit(1); + ester_critical("Index exceeds matrix dimensions"); + exit(1); // Useless because ester_critical already exit } return *(p+ielem); @@ -322,8 +322,8 @@ matrix matrix::operator+(const matrix &a) const { int i, j, resnf, resnc, N; if( (nf!=1 && a.nf!=1 && nf!=a.nf) || (nc!=1 && a.nc!=1 && nc!=a.nc) ) { - ester_err("(matrix.+) Dimensions must agree"); - exit(1); + ester_critical("(matrix.+) Dimensions must agree"); + exit(1); // Useless because ester_critical already exit } if(nf>a.nf) resnf=nf; // This cannot happen @@ -374,8 +374,8 @@ matrix matrix::operator-(const matrix &a) const { int i, j, resnf, resnc, N; if( (nf!=1&&a.nf!=1&&nf!=a.nf) || (nc!=1&&a.nc!=1&&nc!=a.nc) ) { - ester_err("(matrix.-) Dimensions must agree"); - exit(1); + ester_critical("(matrix.-) Dimensions must agree"); + exit(1); // Useless because ester_critical already exit } if(nf>a.nf) resnf=nf; @@ -451,8 +451,8 @@ matrix matrix::operator*(const matrix &a) const { int i, j, resnf, resnc, N; if( (nf!=1&&a.nf!=1&&nf!=a.nf) || (nc!=1&&a.nc!=1&&nc!=a.nc) ) { - ester_err("(matrix.*) Dimensions must agree"); - exit(1); + ester_critical("(matrix.*) Dimensions must agree"); + exit(1); // Useless because ester_critical already exit } if(nf>a.nf) resnf=nf; @@ -504,8 +504,8 @@ matrix matrix::operator/(const matrix &a) const { int i, j, resnf, resnc, N; if( (nf!=1&&a.nf!=1&&nf!=a.nf) || (nc!=1&&a.nc!=1&&nc!=a.nc) ) { - ester_err("(matrix./) Dimensions must agree"); - exit(1); + ester_critical("(matrix./) Dimensions must agree"); + exit(1); // Useless because ester_critical already exit } if(nf>a.nf) resnf=nf; @@ -568,8 +568,8 @@ matrix matrix::operator==(const matrix &a) const { int i, j, resnf, resnc, N; if( (nf!=1&&a.nf!=1&&nf!=a.nf) || (nc!=1&&a.nc!=1&&nc!=a.nc) ) { - ester_err("(matrix.==) Dimensions must agree"); - exit(1); + ester_critical("(matrix.==) Dimensions must agree"); + exit(1); // Useless because ester_critical already exit } if(nf>a.nf) resnf=nf; @@ -620,8 +620,8 @@ matrix matrix::operator!=(const matrix &a) const { int i, j, resnf, resnc, N; if( (nf!=1&&a.nf!=1&&nf!=a.nf) || (nc!=1&&a.nc!=1&&nc!=a.nc) ) { - ester_err("(matrix.!=) Dimensions must agree"); - exit(1); + ester_critical("(matrix.!=) Dimensions must agree"); + exit(1); // Useless because ester_critical already exit } if(nf>a.nf) resnf=nf; @@ -671,8 +671,8 @@ matrix matrix::operator>(const matrix &a) const{ int i, j, resnf, resnc, N; if( (nf!=1&&a.nf!=1&&nf!=a.nf) || (nc!=1&&a.nc!=1&&nc!=a.nc) ) { - ester_err("(matrix.>) Dimensions must agree"); - exit(1); + ester_critical("(matrix.>) Dimensions must agree"); + exit(1); // Useless because ester_critical already exit } if(nf>a.nf) resnf=nf; @@ -736,8 +736,8 @@ matrix matrix::operator>=(const matrix &a) const { int i, j, resnf, resnc, N; if( (nf!=1&&a.nf!=1&&nf!=a.nf) || (nc!=1&&a.nc!=1&&nc!=a.nc) ) { - ester_err("(matrix.>=) Dimensions must agree"); - exit(1); + ester_critical("(matrix.>=) Dimensions must agree"); + exit(1); // Useless because ester_critical already exit } if(nf>a.nf) resnf=nf; @@ -801,8 +801,8 @@ matrix matrix::operator||(const matrix &a) const { int i, j, resnf, resnc, N; if( (nf!=1&&a.nf!=1&&nf!=a.nf) || (nc!=1&&a.nc!=1&&nc!=a.nc) ) { - ester_err("(matrix.||) Dimensions must agree"); - exit(1); + ester_critical("(matrix.||) Dimensions must agree"); + exit(1); // Useless because ester_critical already exit } if(nf>a.nf) resnf=nf; @@ -853,8 +853,8 @@ matrix matrix::operator&&(const matrix &a) const { int i, j, resnf, resnc, N; if( (nf!=1&&a.nf!=1&&nf!=a.nf) || (nc!=1&&a.nc!=1&&nc!=a.nc) ) { - ester_err("(matrix.&&) Dimensions must agree"); - exit(1); + ester_critical("(matrix.&&) Dimensions must agree"); + exit(1); // Useless because ester_critical already exit } if(nf>a.nf) resnf=nf; @@ -1050,8 +1050,8 @@ const matrix matrix::row(int ifil) const { if(ifil<0) ifil+=nf; if(ifil<0||ifil>=nf) { - ester_err("(matrix.row) Index exceeds matrix dimensions"); - exit(1); + ester_critical("(matrix.row) Index exceeds matrix dimensions"); + exit(1); // Useless because ester_critical already exit } pi=p+ifil; @@ -1069,12 +1069,12 @@ matrix &matrix::setrow(int ifil, const matrix &a) { if(ifil<0) ifil+=nf; if(ifil<0||ifil>=nf) { - ester_err("(matrix.setrow) Index exceeds matrix dimensions"); - exit(1); + ester_critical("(matrix.setrow) Index exceeds matrix dimensions"); + exit(1); // Useless because ester_critical already exit } if(a.nf>1||a.nc!=nc) { - ester_err("(matrix.setrow) Dimensions must agree"); - exit(1); + ester_critical("(matrix.setrow) Dimensions must agree"); + exit(1); // Useless because ester_critical already exit } pi=p+ifil; @@ -1094,8 +1094,8 @@ const matrix matrix::col(int icol) const { if(icol<0) icol+=nc; if(icol<0||icol>=nc) { - ester_err("(matrix.col) Index exceeds matrix dimensions"); - exit(1); + ester_critical("(matrix.col) Index exceeds matrix dimensions"); + exit(1); // Useless because ester_critical already exit } pi=p+icol*nf; @@ -1113,12 +1113,12 @@ matrix &matrix::setcol(int icol, const matrix &a) { if(icol<0) icol+=nc; if(icol<0||icol>=nc) { - ester_err("(matrix.setcol) Index exceeds matrix dimensions"); - exit(1); + ester_critical("(matrix.setcol) Index exceeds matrix dimensions"); + exit(1); // Useless because ester_critical already exit } if(a.nc>1||a.nf!=nf) { - ester_err("(matrix.setcol) Dimensions must agree"); - exit(1); + ester_critical("(matrix.setcol) Dimensions must agree"); + exit(1); // Useless because ester_critical already exit } pi=p+icol*nf; @@ -1138,8 +1138,8 @@ const matrix matrix::block(int ifil1, int ifil2, int icol1, int icol2) const { if(icol2<0) icol2+=nc; if(ifil1<0||ifil1>=nf||ifil2<0||ifil2>=nf||icol1<0||icol1>=nc||icol2<0||icol2>=nc) { - ester_err("(matrix.block) Index exceeds matrix dimensions"); - exit(1); + ester_critical("(matrix.block) Index exceeds matrix dimensions"); + exit(1); // Useless because ester_critical already exit } matrix res(ifil2-ifil1+1, icol2-icol1+1); @@ -1166,8 +1166,8 @@ const matrix matrix::block_step(int ifil1, int ifil2, int dfil, int icol1, int i if(icol2<0) icol2+=nc; if(ifil1<0||ifil1>=nf||ifil2<0||ifil2>=nf||icol1<0||icol1>=nc||icol2<0||icol2>=nc) { - ester_err("(matrix.block_step) Index exceeds matrix dimensions"); - exit(1); + ester_critical("(matrix.block_step) Index exceeds matrix dimensions"); + exit(1); // Useless because ester_critical already exit } matrix res((int) floor((ifil2-ifil1)/dfil)+1, @@ -1194,12 +1194,12 @@ matrix &matrix::setblock(int ifil1, int ifil2, int icol1, int icol2, const matri if(icol2<0) icol2+=nc; if(ifil1<0||ifil1>=nf||ifil2<0||ifil2>=nf||icol1<0||icol1>=nc||icol2<0||icol2>=nc) { - ester_err("(matrix.setblock) Index exceeds matrix dimensions"); - exit(1); + ester_critical("(matrix.setblock) Index exceeds matrix dimensions"); + exit(1); // Useless because ester_critical already exit } if(a.nf!=ifil2-ifil1+1||a.nc!=icol2-icol1+1) { - ester_err("(matrix.setblock) Dimensions must agree"); - exit(1); + ester_critical("(matrix.setblock) Dimensions must agree"); + exit(1); // Useless because ester_critical already exit } double *pi, *pa; @@ -1226,12 +1226,12 @@ matrix &matrix::setblock_step(int ifil1, int ifil2, int dfil, int icol1, int ico if(icol2<0) icol2+=nc; if(ifil1<0||ifil1>=nf||ifil2<0||ifil2>=nf||icol1<0||icol1>=nc||icol2<0||icol2>=nc) { - ester_err("(matrix.setblock_step) Index exceeds matrix dimensions"); - exit(1); + ester_critical("(matrix.setblock_step) Index exceeds matrix dimensions"); + exit(1); // Useless because ester_critical already exit } if(a.nf!=floor((ifil2-ifil1)/dfil)+1||a.nc!=floor((icol2-icol1)/dcol)+1) { - ester_err("(matrix.setblock_step) Dimensions must agree"); - exit(1); + ester_critical("(matrix.setblock_step) Dimensions must agree"); + exit(1); // Useless because ester_critical already exit } double *pi, *pa; @@ -1256,17 +1256,17 @@ matrix matrix::concatenate(const matrix &a, int dir) const { if(dir==0) { if(a.nc!=nc) { - ester_err("(matrix.concatenate) Dimensions must agree (%d != %d)", + ester_critical("(matrix.concatenate) Dimensions must agree (%d != %d)", a.nc, nc); - exit(1); + exit(1); // Useless because ester_critical already exit } res.dim(nf+a.nf, nc); res.setblock(0, nf-1, 0, -1, *this); res.setblock(nf, a.nf+nf-1, 0, -1, a); } else { if(a.nf!=nf) { - ester_err("(matrix.concatenate) Dimensions must agree"); - exit(1); + ester_critical("(matrix.concatenate) Dimensions must agree"); + exit(1); // Useless because ester_critical already exit } res.dim(nf, nc+a.nc); res.setblock(0, -1, 0, nc-1, *this); @@ -1467,8 +1467,8 @@ double mean(const matrix &a) { matrix max(const matrix &a, const matrix &b) { if( (b.nf!=a.nf) || (b.nc!=a.nc) ) { - ester_err("(matrix.max) Dimensions must agree"); - exit(1); + ester_critical("(matrix.max) Dimensions must agree"); + exit(1); // Useless because ester_critical already exit } matrix res(a.nf, a.nc); @@ -1499,8 +1499,8 @@ matrix max(double n, const matrix &a) { matrix min(const matrix &a, const matrix &b) { if( (b.nf!=a.nf) || (b.nc!=a.nc) ) { - ester_err("(matrix.min) Dimensions must agree"); - exit(1); + ester_critical("(matrix.min) Dimensions must agree"); + exit(1); // Useless because ester_critical already exit } matrix res(a.nf, a.nc); diff --git a/src/solver/solver.cpp b/src/solver/solver.cpp index 2060d139..48cc39aa 100644 --- a/src/solver/solver.cpp +++ b/src/solver/solver.cpp @@ -281,13 +281,13 @@ void solver::regvar(const char *var_name,int dependent) { j=0; while (strlen(var[j])) { if(!strcmp(var[j],var_name)) { - ester_err("ERROR: Can't register variable (already registered)"); - exit(1); + ester_critical("(solver::regvar) Can't register variable (already registered)"); + exit(1); // Useless because ester_critical already exit } j++; if(j==nv) { - ester_err("ERROR: Can't register variable (increase nvar)"); - exit(1); + ester_critical("(solver::regvar) Can't register variable (increase nvar)"); + exit(1); // Useless because ester_critical already exit } } @@ -317,8 +317,8 @@ int solver::get_id(const char *varn) { while(strcmp(varn,var[i])||!reg(i)) { i++; if(i==nv) { - ester_err("ERROR: Unknown variable %s", varn); - exit(1); + ester_critical("(solver::get_id) Unknown variable %s", varn); + exit(1); // Useless because ester_critical already exit } } return i; @@ -349,10 +349,8 @@ void solver::set_rhs(const char *eqn,const matrix &b) { int ieq; ieq=get_id(eqn); if(dep(ieq)) { - ester_err("ERROR (solver):\n\t"); - ester_err("RHS not used in the definition of dependent variable \"%s\"", - eqn); - std::exit(EXIT_FAILURE); + ester_critical("(solver::set_rhs) RHS not used in the definition of dependent variable '%s'", eqn); + std::exit(EXIT_FAILURE); // Useless because ester_critical already exit } rhs[ieq]=b; @@ -409,7 +407,7 @@ void solver::solve(int *info) { if(verbose) printf("Checking structure...\n"); err=check_struct(); - if(err&2) exit(1); + if(err&2) ester_critical("(solver::solve) check_struct returned an error"); if(err) struct_changed=1; if(verbose) printf("Substitution of dependent variables...\n"); @@ -856,8 +854,8 @@ void solver::create() { } else if(!strcmp(type,"iter")) { op=new solver_iter(); } else { - ester_err("Unknown solver type \"%s\"", type); - exit(1); + ester_critical("Unknown solver type \"%s\"", type); + exit(1); // Useless because ester_critical already exit } op->verbose=verbose; @@ -1384,7 +1382,7 @@ void solver::add(const char *eqn, const char *varn,const char *block_type,char t else ii=NULL; j0=0; if(strcmp(block_type,"block")&&strcmp(block_type,"bc_eq")&&strcmp(block_type,"bc_pol")) { - ester_err("(solver::add): Invalid block_type %s", block_type); + ester_critical("(solver::add) Invalid block_type %s", block_type); } for(k=0;k @@ -300,19 +300,19 @@ int star2d::hdf5_read(const char *input_file, int dim) { file = H5::H5File(input_file, H5F_ACC_RDONLY); } catch (H5::FileIException e) { - ester_err("Could not open file `%s'", input_file); + ester_critical("Could not open file `%s'", input_file); } H5::Group star; try { star = file.openGroup("/star"); } catch (H5::Exception) { - ester_err("Could not open '/star' in `%s'", input_file); + ester_critical("Could not open '/star' in `%s'", input_file); } int ndoms; if (read_attr(star, "nth", &map.leg.npts)) { - ester_err("could not read 'nth' from file `%s'", input_file); + ester_critical("could not read 'nth' from file `%s'", input_file); } if ((map.leg.npts == 1 && dim == 2) || (map.leg.npts > 1 && dim == 1)) { return 1; @@ -323,21 +323,21 @@ int star2d::hdf5_read(const char *input_file, int dim) { } version.name = buf; if (read_attr(star, "ndomains", &ndoms)) { - ester_err("Could not read 'ndomains' from file `%s'", input_file); - exit(EXIT_FAILURE); + ester_critical("Could not read 'ndomains' from file `%s'", input_file); + exit(EXIT_FAILURE); // Useless because ester_critical already exit } map.gl.set_ndomains(ndoms); if (read_attr(star, "npts", map.gl.npts)) { - ester_err("Could not read 'npts' from file `%s'", input_file); - exit(EXIT_FAILURE); + ester_critical("Could not read 'npts' from file `%s'", input_file); + exit(EXIT_FAILURE); // Useless because ester_critical already exit } if (read_attr(star, "xif", &map.gl.xif[0])) { - ester_err("Could not read 'xif' from file `%s'", input_file); - exit(EXIT_FAILURE); + ester_critical("Could not read 'xif' from file `%s'", input_file); + exit(EXIT_FAILURE); // Useless because ester_critical already exit } if (read_attr(star, "nex", map.ex.gl.npts)) { - ester_err("Could not read 'nex' from file `%s'", input_file); - exit(EXIT_FAILURE); + ester_critical("Could not read 'nex' from file `%s'", input_file); + exit(EXIT_FAILURE); // Useless because ester_critical already exit } if (read_attr(star, "M", &M)) { ester_warn("Could not read 'M' from file `%s'", input_file); @@ -355,8 +355,8 @@ int star2d::hdf5_read(const char *input_file, int dim) { ester_warn("Could not read 'Xc' from file `%s'", input_file); } if (read_attr(star, "conv", &conv)) { - ester_err("Could not read 'conv' from file `%s'", input_file); - exit(EXIT_FAILURE); + ester_critical("Could not read 'conv' from file `%s'", input_file); + exit(EXIT_FAILURE); // Useless because ester_critical already exit } domain_type.resize(ndomains); @@ -439,20 +439,20 @@ int star2d::hdf5_read(const char *input_file, int dim) { map.init(); if (read_field(star, "phi", phi)) { - ester_err("Could not read field 'phi' from file `%s'", input_file); + ester_critical("Could not read field 'phi' from file `%s'", input_file); } if (read_field(star, "p", p)) { - ester_err("Could not read field 'p' from file `%s'", input_file); + ester_critical("Could not read field 'p' from file `%s'", input_file); } if (read_field(star, "T", T)) { - ester_err("Could not read field 'T' from file `%s'", input_file); + ester_critical("Could not read field 'T' from file `%s'", input_file); } if (read_field(star, "phiex", phiex)) { ester_warn("Could not read field 'phiex' from file `%s'", input_file); phiex = zeros(nr, nth); } if (read_field(star, "R", map.R)) { - ester_err("Could not read field 'R' from file `%s'", input_file); + ester_critical("Could not read field 'R' from file `%s'", input_file); } if (map.R.nrows() < map.ndomains+1) map.R = zeros(1,nth).concatenate(map.R); @@ -480,7 +480,7 @@ int star2d::read(const char *input_file, int dim) { if (isHDF5Name(input_file)) { return hdf5_read(input_file, dim); } - ester_err("The input file %s is not HDF5 format.", input_file); + ester_critical("The input file %s is not HDF5 format.", input_file); } bool star2d::check_tag(const char *tag) const { @@ -674,8 +674,8 @@ int star2d::check_arg(char *arg,char *val,int *change_grid) { map.gl.set_ndomains(atoi(val)); *change_grid=*change_grid|1; if(*change_grid&2) { - ester_err("ndomains must be specified before npts\n"); - exit(1); + ester_critical("(star2d::check_arg) ndomains must be specified before npts"); + exit(1); // Useless because ester_critical already exit } } else if(!strcmp(arg,"npts")) { @@ -721,7 +721,7 @@ int star2d::check_arg(char *arg,char *val,int *change_grid) { Xc=atof(val); } else if(!strcmp(arg,"conv")) { - ester_err("Param. conv is no longer modifiable. Disable core convection with core_convec 0.\n"); + ester_err("Param. conv is no longer modifiable. Disable core convection with core_convec 0."); return 1; } else if(!strcmp(arg,"surff")) { diff --git a/src/star/star_map.cpp b/src/star/star_map.cpp index 5035ab15..c4afbfda 100644 --- a/src/star/star_map.cpp +++ b/src/star/star_map.cpp @@ -98,7 +98,7 @@ std::vector star2d::distribute_domains(int ndom,matrix &zif,bool check_only int nzones=zif.nrows(); if(nzones>ndom) { - ester_err("Error: At least %d domains are needed for this model\n",nzones); + ester_critical("At least %d domains are needed for this model", nzones); } // Calculate Delta(log(T)) in each zone at theta=0 @@ -224,7 +224,7 @@ matrix star2d::find_boundaries(const matrix &logTi) const { } LOGE("No convergence in find_boundaries"); plt::show(true); - ester_err("No convergence in find_boundaries\n"); + ester_critical("(star2d::find_boundaries) No convergence"); } } zi.setcol(j,zj); @@ -309,7 +309,7 @@ matrix star2d::find_boundaries_old(matrix pif) const { zj+=dzj; nit++; if(nit>100) { - ester_err("No convergence in find_boundaries\n"); + ester_critical("(star2d::find_boundaries_old) No convergence"); } } diff --git a/src/symbolic/sym.cpp b/src/symbolic/sym.cpp index 4083a0f0..1ef61600 100644 --- a/src/symbolic/sym.cpp +++ b/src/symbolic/sym.cpp @@ -254,12 +254,12 @@ sym diff(const sym &f,const sym &x) { } } - ester_err("Error (symbolic): Can derive only respect to independent symbols"); + ester_critical("(symbolic) Can derive only respect to independent symbols"); } sym jacobian(const sym &f,const sym &a) { if(typeid(*a.expr)!=typeid(sym::symbol)&&typeid(*a.expr)!=typeid(sym::sym_deriv)) { - ester_err("Error (symbolic): Can calculate jacobian only with respect to a symbol or a derivative of a symbol"); + ester_critical("(symbolic) Can calculate jacobian only with respect to a symbol or a derivative of a symbol"); } sym snew; diff --git a/src/utils/debug.cpp b/src/utils/debug.cpp index e67fa7f3..5aaa1596 100644 --- a/src/utils/debug.cpp +++ b/src/utils/debug.cpp @@ -12,7 +12,7 @@ void sigfpe_handler(int) { - ester_err("SIGFPE"); + ester_critical("SIGFPE"); } void enable_sigfpe() { From aaa25e7eca151753acce884ff66789d51a118c85 Mon Sep 17 00:00:00 2001 From: ctmbl Date: Tue, 6 Feb 2024 15:22:05 +0100 Subject: [PATCH 03/12] Update solver::add error logging --- src/solver/solver.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/solver/solver.cpp b/src/solver/solver.cpp index 48cc39aa..a0854f3a 100644 --- a/src/solver/solver.cpp +++ b/src/solver/solver.cpp @@ -1434,31 +1434,31 @@ void solver::add(const char *eqn, const char *varn,const char *block_type,char t } if(error) { - ester_err("ERROR (solver):\n\t%s\n\tin eq \"%s\", var \"%s\"", - err_msg,eqn,varn); + char type_name[4]; switch(type) { case 'd': - ester_err(" (type: d)"); + strncpy(type_name, "d", sizeof(type_name)); break; case 'l': - ester_err(" (type: l)"); + strncpy(type_name, "l", sizeof(type_name)); break; case 'r': - ester_err(" (type: r)"); + strncpy(type_name, "r", sizeof(type_name)); break; case 'f': - ester_err(" (type: lr)"); + strncpy(type_name, "lr", sizeof(type_name)); break; case 'm': - ester_err(" (type: li)"); + strncpy(type_name, "li", sizeof(type_name)); break; case 's': - ester_err(" (type: ri)"); + strncpy(type_name, "ri", sizeof(type_name)); break; case 'g': - ester_err(" (type: lri)"); + strncpy(type_name, "lri", sizeof(type_name)); } - exit(1); + ester_critical("(solver::add) '%s' in eq '%s', var: '%s' (type: %s)", err_msg, eqn, varn, type_name); + exit(1); // Useless because ester_critical already exit } delete dd; if(type=='m'||type=='s'||type=='g') delete ii; From 335a9c06358b215735b6a38098987976f92af191 Mon Sep 17 00:00:00 2001 From: ctmbl Date: Wed, 31 Jan 2024 17:31:47 +0100 Subject: [PATCH 04/12] Update and homogenize star2d::init logging and parsing logic --- src/star/star2d_class.cpp | 73 +++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 37 deletions(-) diff --git a/src/star/star2d_class.cpp b/src/star/star2d_class.cpp index 0963c976..aa5f9add 100644 --- a/src/star/star2d_class.cpp +++ b/src/star/star2d_class.cpp @@ -494,7 +494,7 @@ int star2d::init(const char *input_file,const char *param_file,int argc,char *ar file_parser fp; char *arg,*val,default_params[256]; mapping map0; - int i,k,change_grid=0,nt=-1,next=-1; + int check_arg_err_code,k,change_grid=0,nt=-1,next=-1; star1d in1d; diff_leg leg_new; matrix Tr,m0; @@ -521,26 +521,25 @@ int star2d::init(const char *input_file,const char *param_file,int argc,char *ar cmd.close(); init1d(in1d, nt, next); } else { - ester_err("Error reading input file: %s", input_file); + ester_err("(star2d::init) Error reading input file: %s", input_file); + return 1; } } map0=map; } else { if(!fp.open(default_params)) { - ester_err("Can't open default parameters file %s\n", default_params); + ester_err("(star2d::init) Can't open default parameters file %s", default_params); + return 1; } else { while((k=fp.get(arg,val))) { - if((i=check_arg(arg,val,&change_grid))) { - ester_err("Syntax error in parameters file %s, line %d\n",default_params,k); - if(i==2) { - ester_err("Error: Argument to '%s' missing\n",arg); - return 1; - } - if(i==1) { - ester_err("Unknown parameter %s\n",arg); - return 1; - } + if((check_arg_err_code = check_arg(arg,val,&change_grid))) { + ester_err("(star2d::init) Syntax error in parameters file %s, line %d", default_params, k); + if(check_arg_err_code == 2) + ester_err("(star2d::init) Argument to '%s' missing", arg); + if(check_arg_err_code == 1) + ester_err("(star2d::init) Unknown parameter %s", arg); + return 1; } } fp.close(); @@ -550,22 +549,18 @@ int star2d::init(const char *input_file,const char *param_file,int argc,char *ar if(*param_file) { if(!fp.open(param_file)) { - ester_err("Can't open parameters file %s\n",param_file); + ester_err("(star2d::init) Can't open parameters file %s\n",param_file); return 1; } else { while((k=fp.get(arg,val))) { - if((i=check_arg(arg,val,&change_grid))) { - ester_err("Syntax error in parameters file %s, line %d\n", - param_file, k); - if(i==2) { - ester_err("Error: Argument to '%s' missing\n",arg); - return 1; - } - if(i==1) { - ester_err("Unknown parameter %s\n",arg); - return 1; - } + if((check_arg_err_code = check_arg(arg,val,&change_grid))) { + ester_err("(star2d::init) Syntax error in parameters file %s, line %d", param_file, k); + if(check_arg_err_code == 2) + ester_err("(star2d::init) Argument to '%s' missing", arg); + if(check_arg_err_code == 1) + ester_err("(star2d::init) Unknown parameter %s", arg); + return 1; } } fp.close(); @@ -573,24 +568,27 @@ int star2d::init(const char *input_file,const char *param_file,int argc,char *ar } cmd.open(argc,argv); - while(int err_code=cmd.get(arg,val)) { - if(err_code==-1) exit(1); - err_code=check_arg(arg,val,&change_grid); - if(err_code==2) { - ester_err("Error: Argument to '%s' missing\n",arg); - return 1; - } - if(err_code==1) { - ester_err("Unknown parameter '%s'\n",arg); + while(int err_code = cmd.get(arg,val)) { + if(err_code == -1) + ester_critical("(star2d::init) Error in command line parsing"); + + check_arg_err_code = check_arg(arg,val,&change_grid); + if(check_arg_err_code){ + ester_err("(star2d::init) Syntax error in command line"); + if(check_arg_err_code == 2) + ester_err("(star2d::init) Argument to '%s' missing", arg); + if(check_arg_err_code == 1) + ester_err("(star2d::init) Unknown parameter '%s'", arg); return 1; } + cmd.ack(arg,val); } cmd.close(); if((change_grid&1)&&!(change_grid&2)) { - ester_err("Must specify number of points per domain (npts)\n"); - exit(1); + ester_err("(star2d::init) Must specify number of points per domain (npts)"); + return 1; } if (*input_file) { @@ -608,7 +606,8 @@ int star2d::init(const char *input_file,const char *param_file,int argc,char *ar remap(ndomains-1,map.npts,map.nt,map.nex); } } else { - ester_err("2d models should use an input model"); + ester_err("(star2d::init) 2d models should use an input model"); + return 1; } init_comp(); fill(); From 67a82f6e436a66ee5b77397e86ecac84b1f39c4d Mon Sep 17 00:00:00 2001 From: ctmbl Date: Fri, 2 Feb 2024 00:05:56 +0100 Subject: [PATCH 05/12] Replace ester_err by ester_critical in physics returning function, less obvious choices --- src/physics/atm_onelayer.cpp | 4 ++-- src/physics/eos_freeeos.cpp | 2 +- src/physics/eos_opal.cpp | 6 +++--- src/physics/physics.cpp | 16 ++++++++-------- src/solver/solver.cpp | 2 +- src/star/polytrope.cpp | 8 +++++--- 6 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/physics/atm_onelayer.cpp b/src/physics/atm_onelayer.cpp index db366430..062c8cb6 100644 --- a/src/physics/atm_onelayer.cpp +++ b/src/physics/atm_onelayer.cpp @@ -38,8 +38,8 @@ int atm_onelayer(const matrix &X,double Z,const matrix &g,const matrix &Teff, while(fin<2) { nit++; if(nit>100) { - ester_err("Error (atm_onelayer): No convergence"); - return 1; + ester_critical("(atm_onelayer) No convergence"); + return 1; // Useless because ester_critical already exit } double F,dF,dlogps; p=pow(10,logps)*ones(1,1); diff --git a/src/physics/eos_freeeos.cpp b/src/physics/eos_freeeos.cpp index 87da2cbc..79f88da9 100644 --- a/src/physics/eos_freeeos.cpp +++ b/src/physics/eos_freeeos.cpp @@ -123,7 +123,7 @@ int eos_freeeos(const matrix &X, double Z, const matrix &T, const matrix &p, &iteration_count); rho(i) = rhoi; if (iteration_count < 0) { - ester_err( + ester_critical( "Values outside freeEOS eos table:\n" " X = %e\n" " Z = %e\n" diff --git a/src/physics/eos_opal.cpp b/src/physics/eos_opal.cpp index c36b3978..f9eeb3a1 100644 --- a/src/physics/eos_opal.cpp +++ b/src/physics/eos_opal.cpp @@ -71,7 +71,7 @@ int eos_opal(const matrix &X,double Z,const matrix &T,const matrix &p, eos.chi_rho(i)=*(eeos_.eos+5); eos.chi_T(i)=*(eeos_.eos+6); if (fabs(rhoi - (-9e99)) < 1e-10) { - ester_err( + ester_critical( "Values outside OPAL eos table:\n" " X = %e\n" " Z = %e\n" @@ -80,8 +80,8 @@ int eos_opal(const matrix &X,double Z,const matrix &T,const matrix &p, } } if(exist(rho==-9e99)) { - ester_err("Values outside OPAL eos table"); - return 1; + ester_critical("Values outside OPAL eos table"); + return 1; // Useless because ester_critical already exit } return 0; diff --git a/src/physics/physics.cpp b/src/physics/physics.cpp index 457a4246..3e0badc7 100644 --- a/src/physics/physics.cpp +++ b/src/physics/physics.cpp @@ -19,8 +19,8 @@ int opa_calc(const matrix &X,double Z,const matrix &T,const matrix &rho, } else if(!strcmp(opa.name,"cesam")) { error=opa_cesam(X, Z, T, rho, opa); } else { - ester_err("Unknown opacity method: %s",opa.name); - return 1; + ester_critical("Unknown opacity method: %s", opa.name); + return 1; // Useless because ester_critical already exit } return error; @@ -40,8 +40,8 @@ int eos_calc(const matrix &X,double Z,const matrix &T,const matrix &p, else if(!strcmp(eos.name,"freeeos")) error = eos_freeeos(X, Z, T, p, rho, eos); else { - ester_err("Unknown equation of state: %s",eos.name); - return 1; + ester_critical("Unknown equation of state: %s", eos.name); + return 1; // Useless because ester_critical already exit } return error; @@ -58,8 +58,8 @@ int nuc_calc(const matrix_map &X,const matrix &T,const matrix &rho, } else if(!strcmp(nuc.name,"cesam")) { error=nuc_cesam(X,T,rho,nuc); } else { - ester_err("Unknown nuc. reac. type: %s",nuc.name); - return 1; + ester_critical("Unknown nuc. reac. type: %s", nuc.name); + return 1; // Useless because ester_critical already exit } return error; @@ -74,8 +74,8 @@ int atm_calc(const matrix &X,double Z,const matrix &g,const matrix &Teff, if(!strcmp(atm.name,"onelayer")) { error=atm_onelayer(X,Z,g,Teff,eos_name,opa_name,atm); } else { - ester_err("Unknown atmosphere type: %s", atm.name); - return 1; + ester_critical("Unknown atmosphere type: %s", atm.name); + return 1; // Useless because ester_critical already exit } return error; diff --git a/src/solver/solver.cpp b/src/solver/solver.cpp index a0854f3a..1fe84414 100644 --- a/src/solver/solver.cpp +++ b/src/solver/solver.cpp @@ -1362,7 +1362,7 @@ void solver::unwrap(const matrix *x,matrix *y) { } for(j=0;j +#define MAX_POLYTROPE_ITER 10000 + matrix solve_poly1d(double n, double tol, int nr, double hsurf) { // Create a mapping printf("parametres: n = %e tol %e, nr %d, hsurf %e\n",n,tol,nr,hsurf); @@ -50,7 +52,7 @@ matrix solve_poly1d(double n, double tol, int nr, double hsurf) { op.regvar("Phi0"); op.set_nr(map.npts); - while(error>tol && it<10000) { + while(error>tol && it < MAX_POLYTROPE_ITER) { // Put the current values of variables in the symbolic object S.set_value("Phi", Phi); S.set_value("Lambda", Lambda*ones(1, 1)); // Note that the assigned value should be of type matrix @@ -109,7 +111,7 @@ matrix solve_poly1d(double n, double tol, int nr, double hsurf) { } if(error>tol) { - ester_err("No converge\n"); + ester_critical("(solve_poly1d) No convergence after %d iterations", MAX_POLYTROPE_ITER); } matrix h = 1.0 - (Phi - Phi(0))*Lambda; @@ -128,7 +130,7 @@ matrix solve_poly1d(double n, double tol, int nr, double hsurf) { dhi = map.gl.eval(dh, ri)(0); } if (nit >= maxit) { - ester_err("No convergence finding polytrope surface such that h(surface) = %e", hsurf); + ester_critical("(solve_poly1d) No convergence finding polytrope surface such that h(surface) = %e", hsurf); } matrix h2 = map.gl.eval(h, map.r*ri); From 91ea5d7237b54461d3181f9eaf52dae7b862aa95 Mon Sep 17 00:00:00 2001 From: ctmbl Date: Fri, 2 Feb 2024 00:30:27 +0100 Subject: [PATCH 06/12] Replace old LOGE with ester_err --- src/solver/solver.cpp | 6 +++--- src/solver/solver_full.cpp | 4 ++-- src/star/star_map.cpp | 3 +-- src/utils/debug.cpp | 8 ++++---- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/solver/solver.cpp b/src/solver/solver.cpp index 1fe84414..d0b9f8d5 100644 --- a/src/solver/solver.cpp +++ b/src/solver/solver.cpp @@ -1325,7 +1325,7 @@ void solver::unwrap(const matrix *x,matrix *y) { q.redim(nth[i][j],nbot[i][j]); y[j].setblock(j0[j],j0[j]+nbot[i][j]-1,0,nth[i][j]-1,q.transpose()); if (std::isnan(max(abs(q)))) { - LOGE("var %8s (%2dx%2d), block %d (bc_bot): NaN\n", var[j], + ester_err("var %8s (%2dx%2d), block %d (bc_bot): NaN", var[j], nth[i][j], nbot[i][j], i); nan = true; } @@ -1340,7 +1340,7 @@ void solver::unwrap(const matrix *x,matrix *y) { q.redim(nth[i][j],nn); y[j].setblock(j0[j]+nbot[i][j],j0[j]+nbot[i][j]+nn-1,0,nth[i][j]-1,q.transpose()); if (std::isnan(max(abs(q)))) { - LOGE("var %8s (%2dx%2d), block %d (eq): NaN\n", var[j], + ester_err("var %8s (%2dx%2d), block %d (eq): NaN", var[j], nth[i][j], nn, i); nan = true; } @@ -1354,7 +1354,7 @@ void solver::unwrap(const matrix *x,matrix *y) { q.redim(nth[i][j],ntop[i][j]); y[j].setblock(j0[j]+n[i][j]-ntop[i][j],j0[j]+n[i][j]-1,0,nth[i][j]-1,q.transpose()); if (std::isnan(max(abs(q)))) { - LOGE("var %8s (%2dx%2d), block %d (bc_top): NaN\n", var[j], + ester_err("var %8s (%2dx%2d), block %d (bc_top): NaN", var[j], nth[i][j], ntop[i][j], i); nan = true; } diff --git a/src/solver/solver_full.cpp b/src/solver/solver_full.cpp index d92c96a1..e662fff8 100644 --- a/src/solver/solver_full.cpp +++ b/src/solver/solver_full.cpp @@ -250,10 +250,10 @@ void solver_full::solve_block(int i,char trans,matrix &x) { dgetrs_(&trans,&n,&nrhs,m[i].data(),&n,ipiv[i],x.data(),&n,&info); if (std::isnan(max(abs(x)))) { - LOGE("NaN in solve block %d\n", i); + ester_err("NaN in solve block %d", i); for (int ii=0; ii Date: Fri, 2 Feb 2024 13:16:23 +0100 Subject: [PATCH 07/12] Replace obvious fprintf stderr + exit by ester_critical --- src/main/star_evol.cpp | 12 +++----- src/matrix/mat_math.cpp | 10 +++---- src/matrix/matrix_block_diag.cpp | 48 +++++++++++--------------------- src/solver/RKF_solver.cpp | 12 +++----- src/solver/SDIRK_solver.cpp | 45 ++++++++++-------------------- 5 files changed, 43 insertions(+), 84 deletions(-) diff --git a/src/main/star_evol.cpp b/src/main/star_evol.cpp index 62affccd..7f2f6302 100644 --- a/src/main/star_evol.cpp +++ b/src/main/star_evol.cpp @@ -29,20 +29,17 @@ int main(int argc,char *argv[]) { else Xcmin=atof(val); } else err_code=1; if(err_code==1) { - fprintf(stderr,"Unknown parameter %s\n",arg); - exit(1); + ester_critical("Unknown parameter %s", arg); } if(err_code==2) { - fprintf(stderr,"Argument to %s missing\n",arg); - exit(1); + ester_critical("Argument to %s missing", arg); } cmd.ack(arg,val); } cmd.close(); if(*config.input_file==0) { - fprintf(stderr,"Must specify an input file\n"); - exit(1); + ester_critical("Must specify an input file"); } if(*config.output_file==0) { strcpy(config.input_file,config.output_file); @@ -53,8 +50,7 @@ int main(int argc,char *argv[]) { if(A.read(config.input_file)) { star1d A1d; if(A1d.read(config.input_file)) { - fprintf(stderr,"Error reading input file %s\n",config.input_file); - exit(1); + ester_critical("Error reading input file %s", config.input_file); } A=A1d; } diff --git a/src/matrix/mat_math.cpp b/src/matrix/mat_math.cpp index 75371c69..722c724e 100644 --- a/src/matrix/mat_math.cpp +++ b/src/matrix/mat_math.cpp @@ -253,9 +253,8 @@ matrix atan2(const matrix &a,const matrix &b) { int i,N; if( (b.nf!=a.nf) || (b.nc!=a.nc) ) { - fprintf(stderr,"ERROR: (matrix.atan2) Dimensions must agree\n"); - exit(1); - } + ester_critical("(matrix.atan2) Dimensions must agree"); + } N=a.nc*a.nf; @@ -300,9 +299,8 @@ matrix pow(const matrix &a,const matrix &b) { int i,N; if( (b.nf!=a.nf) || (b.nc!=a.nc) ) { - fprintf(stderr,"ERROR: (matrix.pow) Dimensions must agree\n"); - exit(1); - } + ester_critical("(matrix.pow) Dimensions must agree"); + } N=a.nc*a.nf; diff --git a/src/matrix/matrix_block_diag.cpp b/src/matrix/matrix_block_diag.cpp index d9d765e9..666721f3 100644 --- a/src/matrix/matrix_block_diag.cpp +++ b/src/matrix/matrix_block_diag.cpp @@ -16,12 +16,10 @@ extern "C" { matrix_block_diag::matrix_block_diag(int nblocks) { if(nblocks<0) { - fprintf(stderr,"ERROR: (matrix_block_diag) Number of blocks can't be negative\n"); - exit(1); + ester_critical("(matrix_block_diag) Number of blocks can't be negative"); } if(nblocks==0) { - fprintf(stderr,"ERROR: (matrix_block_diag) Number of blocks can't be zero\n"); - exit(1); + ester_critical("(matrix_block_diag) Number of blocks can't be zero"); } nb=nblocks; m=new matrix[nb]; @@ -61,12 +59,10 @@ matrix_block_diag &matrix_block_diag::operator=(const matrix_block_diag &a) { matrix_block_diag & matrix_block_diag::set_nblocks(int nblocks) { if(nblocks<0) { - fprintf(stderr,"ERROR: (matrix_block_diag) Number of blocks can't be negative\n"); - exit(1); + ester_critical("(matrix_block_diag) Number of blocks can't be negative"); } if(nblocks==0) { - fprintf(stderr,"ERROR: (matrix_block_diag) Number of blocks can't be zero\n"); - exit(1); + ester_critical("(matrix_block_diag) Number of blocks can't be zero"); } if(nblocks!=nb) { @@ -102,8 +98,7 @@ matrix &matrix_block_diag::block(int i){ if(i<0) i+=nb; if(i<0||i>=nb) { - fprintf(stderr,"ERROR: (matrix_block_diag) Index exceeds number of blocks\n"); - exit(1); + ester_critical("(matrix_block_diag) Index exceeds number of blocks"); } return m[i]; @@ -113,8 +108,7 @@ const matrix &matrix_block_diag::block(int i) const { if(i<0) i+=nb; if(i<0||i>=nb) { - fprintf(stderr,"ERROR: (matrix_block_diag) Index exceeds number of blocks\n"); - exit(1); + ester_critical("(matrix_block_diag) Index exceeds number of blocks"); } return m[i]; @@ -153,8 +147,7 @@ matrix matrix_block_diag::operator,(const matrix &a) const { int i,n=0,n2=0; if(ncols()!=a.nf) { - fprintf(stderr,"ERROR: (matrix_block_diag) Dimensions must agree\n"); - exit(1); + ester_critical("(matrix_block_diag) Dimensions must agree"); } matrix res(nrows(),a.nc); @@ -172,8 +165,7 @@ matrix_block_diag matrix_block_diag::operator,(const matrix_block_diag &a) const matrix_block_diag res(nb); if(nb!=a.nb) { - fprintf(stderr,"ERROR: (matrix_block_diag) Number of blocks must agree\n"); - exit(1); + ester_critical("(matrix_block_diag) Number of blocks must agree"); } for(i=0;i=nf) { - fprintf(stderr,"ERROR: (matrix_block_diag.row) Index exceeds matrix dimensions\n"); - exit(1); + ester_critical("(matrix_block_diag.row) Index exceeds matrix dimensions"); } res=zeros(1,nf); pres=res.p; @@ -380,8 +365,7 @@ double matrix_block_diag::operator()(int nfil,int ncol) const { if(nfil<0) nfil+=n; if(ncol<0) ncol+=n; if(nfil<0||nfil>=n||ncol<0||ncol>=n) { - fprintf(stderr,"ERROR: (matrix_block_diag) Index exceeds matrix dimensions\n"); - exit(1); + ester_critical("(matrix_block_diag) Index exceeds matrix dimensions"); } int i=0,j=0; diff --git a/src/solver/RKF_solver.cpp b/src/solver/RKF_solver.cpp index dd372760..377c31bb 100644 --- a/src/solver/RKF_solver.cpp +++ b/src/solver/RKF_solver.cpp @@ -65,8 +65,7 @@ void RKF_solver::destroy() { void RKF_solver::check_init() { if(!initd) { - fprintf(stderr,"RKF_solver not initialized\n"); - exit(1); + ester_critical("RKF_solver not initialized"); } } @@ -77,13 +76,11 @@ void RKF_solver::regvar(const char *var_name,const matrix &initial_value) { j=0; while (strlen(var[j])) { if(!strcmp(var[j],var_name)) { - fprintf(stderr,"ERROR: Can't register variable (already registered)\n"); - exit(1); + ester_critical("(RKF_solver::regvar) Can't register variable (already registered)"); } j++; if(j==nv) { - fprintf(stderr,"ERROR: Can't register variable (increase nvar)\n"); - exit(1); + ester_critical("(RKF_solver::regvar) Can't register variable (increase nvar)"); } } @@ -114,8 +111,7 @@ int RKF_solver::get_id(const char *varn) { while(strcmp(varn,var[i])||!reg[i]) { i++; if(i==nv) { - fprintf(stderr,"ERROR: Unknown variable %s\n",varn); - exit(1); + ester_critical("(RKF_solver::get_id) Unknown variable %s", varn); } } return i; diff --git a/src/solver/SDIRK_solver.cpp b/src/solver/SDIRK_solver.cpp index b43b56cc..59a8a2ee 100644 --- a/src/solver/SDIRK_solver.cpp +++ b/src/solver/SDIRK_solver.cpp @@ -49,8 +49,7 @@ void SDIRK_solver::init(int nvar,const char *type) { else if(!strcmp(type,"esdirk4")) init_esdirk4(); else { - fprintf(stderr,"SDIRK_solver: Unknown RK method %s\n",type); - exit(1); + ester_critical("SDIRK_solver: Unknown RK method %s",type); } check_method(); @@ -81,8 +80,7 @@ void SDIRK_solver::destroy() { void SDIRK_solver::check_init() { if(!initd) { - fprintf(stderr,"SDIRK_solver not initialized\n"); - exit(1); + ester_critical("SDIRK_solver not initialized"); } } @@ -92,58 +90,48 @@ void SDIRK_solver::check_method() { alpha=a(-1,-1); if(a.ncols()!=nstages) { - fprintf(stderr,"SDIRK_solver: Invalid method (a is not square)\n"); - exit(1); + ester_critical("SDIRK_solver: Invalid method (a is not square)"); } if(b.nrows()!=nstages) { - fprintf(stderr,"SDIRK_solver: Invalid method (Incorrect size of vector b)\n"); - exit(1); + ester_critical("SDIRK_solver: Invalid method (Incorrect size of vector b)"); } if(c.nrows()!=nstages) { - fprintf(stderr,"SDIRK_solver: Invalid method (Incorrect size of vector c)\n"); - exit(1); + ester_critical("SDIRK_solver: Invalid method (Incorrect size of vector c)"); } for(int i=0;ii)\n"); - exit(1); + ester_critical("SDIRK_solver: Method is not diagonal implicit (a_ij!=0 for j>i)"); } } } if(c(-1)!=1) { - fprintf(stderr,"SDIRK_solver: Invalid method (c_n!=1)\n"); - exit(1); + ester_critical("SDIRK_solver: Invalid method (c_n!=1)"); } if(exist(a.row(-1).transpose()!=b)) { - fprintf(stderr,"SDIRK_solver: Invalid method (a_ni!=b_i)\n"); - exit(1); + ester_critical("SDIRK_solver: Invalid method (a_ni!=b_i)"); } if(a(0,0)==0) { first_explicit=true; if(c(0)!=0) { - fprintf(stderr,"SDIRK_solver: Invalid method (c_1 should be 0 for an ESDIRK method)\n"); - exit(1); + ester_critical("SDIRK_solver: Invalid method (c_1 should be 0 for an ESDIRK method)"); } } else first_explicit=false; for(int i=0;itol) { - fprintf(stderr,"SDIRK_solver: Invalid method (sum(b_i)!=1)\n"); - exit(1); + ester_critical("SDIRK_solver: Invalid method (sum(b_i)!=1)"); } order=1; matrix T=c*eye(nstages); @@ -179,13 +167,11 @@ void SDIRK_solver::regvar(const char *var_name,const matrix &initial_value) { j=0; while (strlen(var[j])) { if(!strcmp(var[j],var_name)) { - fprintf(stderr,"ERROR: Can't register variable (already registered)\n"); - exit(1); + ester_critical("Can't register variable (already registered)"); } j++; if(j==nv) { - fprintf(stderr,"ERROR: Can't register variable (increase nvar)\n"); - exit(1); + ester_critical("Can't register variable (increase nvar)"); } } @@ -242,8 +228,7 @@ int SDIRK_solver::get_id(const char *varn) { while(strcmp(varn,var[i])||!reg[i]) { i++; if(i==nv) { - fprintf(stderr,"ERROR: Unknown variable %s\n",varn); - exit(1); + ester_critical("Unknown variable %s", varn); } } return i; From eeb6f060c8549cf39ef1d10928b633640064c82d Mon Sep 17 00:00:00 2001 From: ctmbl Date: Fri, 2 Feb 2024 13:23:07 +0100 Subject: [PATCH 08/12] Replace obvious fprintf stderr by ester_err or ester_warn --- src/main/vtk.cpp | 2 +- src/star/star_map.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/vtk.cpp b/src/main/vtk.cpp index 843592b5..6ae4b470 100644 --- a/src/main/vtk.cpp +++ b/src/main/vtk.cpp @@ -146,7 +146,7 @@ int main(int argc, char *argv[]) { fclose(f); } else { - fprintf(stderr, "Couldn't open model %s (is is a 2D model?)\n", input_model); + ester_err("Couldn't open model %s (is is a 2D model?)", input_model); return 1; } diff --git a/src/star/star_map.cpp b/src/star/star_map.cpp index a7b20b20..12892e7e 100644 --- a/src/star/star_map.cpp +++ b/src/star/star_map.cpp @@ -401,7 +401,7 @@ int star2d::check_convec(double &p_cc,matrix &Rcc) { if(config.verbose) printf("Found convective core\n"); if(ndomains==1) { - fprintf(stderr,"Warning: At least 2 domains are needed to deal with core convection\n"); + ester_warn("At least 2 domains are needed to deal with core convection"); } while(schw(i,-1)<0) i++; // look for change of sign of schw From 66b3d6d6c4bb3c43a75a52c8ed4fd5487e60aa64 Mon Sep 17 00:00:00 2001 From: ctmbl Date: Fri, 2 Feb 2024 13:26:19 +0100 Subject: [PATCH 09/12] Fix missing includes of utils.h --- src/matrix/mat_math.cpp | 1 + src/matrix/matrix_block_diag.cpp | 1 + src/solver/RKF_solver.cpp | 1 + src/solver/SDIRK_solver.cpp | 1 + 4 files changed, 4 insertions(+) diff --git a/src/matrix/mat_math.cpp b/src/matrix/mat_math.cpp index 722c724e..2538e2be 100644 --- a/src/matrix/mat_math.cpp +++ b/src/matrix/mat_math.cpp @@ -5,6 +5,7 @@ #include #include #include "matrix.h" +#include "utils.h" matrix cos(const matrix &a) { diff --git a/src/matrix/matrix_block_diag.cpp b/src/matrix/matrix_block_diag.cpp index 666721f3..4f8e670d 100644 --- a/src/matrix/matrix_block_diag.cpp +++ b/src/matrix/matrix_block_diag.cpp @@ -2,6 +2,7 @@ #include "ester-config.h" #endif #include "matrix.h" +#include "utils.h" extern "C" { #include diff --git a/src/solver/RKF_solver.cpp b/src/solver/RKF_solver.cpp index 377c31bb..262ebf3c 100644 --- a/src/solver/RKF_solver.cpp +++ b/src/solver/RKF_solver.cpp @@ -2,6 +2,7 @@ #include "ester-config.h" #endif #include "solver.h" +#include "utils.h" extern "C" { #include diff --git a/src/solver/SDIRK_solver.cpp b/src/solver/SDIRK_solver.cpp index 59a8a2ee..77260a3b 100644 --- a/src/solver/SDIRK_solver.cpp +++ b/src/solver/SDIRK_solver.cpp @@ -2,6 +2,7 @@ #include "ester-config.h" #endif #include "solver.h" +#include "utils.h" extern "C" { #include From 6907e74456d98e920d770d80f8dc806b4d0456bb Mon Sep 17 00:00:00 2001 From: ctmbl Date: Tue, 6 Feb 2024 14:54:53 +0100 Subject: [PATCH 10/12] Replace fprintf stderr by ester_err and ester_critical in solver.cpp --- src/solver/solver.cpp | 39 +++++++++++++-------------------------- 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/src/solver/solver.cpp b/src/solver/solver.cpp index d0b9f8d5..2da13bc5 100644 --- a/src/solver/solver.cpp +++ b/src/solver/solver.cpp @@ -1474,28 +1474,20 @@ void solver::add(int iblock,const char *eqn, const char *varn,const char *block_ ivar=get_id(varn); if(dep(ieq)&&type!='d') { - fprintf(stderr,"ERROR (solver):\n\t"); - fprintf(stderr,"Only type D terms are allowed in the definition of dependent variables\n"); - fprintf(stderr,"\tin block %d, eq \"%s\", var \"%s\"\n",iblock,eqn,varn); - exit(1); + ester_critical("(solver::add) Only type D terms are allowed in the definition of dependent variables" + " in block %d, eq '%s', var '%s'", iblock, eqn, varn); } if(dep(ieq)&&strcmp(block_type,"block")) { - fprintf(stderr,"ERROR (solver):\n\t"); - fprintf(stderr,"No boundary conditions are allowed in the definition of dependent variables\n"); - fprintf(stderr,"\tin block %d, eq \"%s\", var \"%s\"\n",iblock,eqn,varn); - exit(1); + ester_critical("(solver::add) No boundary conditions are allowed in the definition of dependent variables" + " in block %d, eq '%s', var '%s'", iblock, eqn, varn); } if(iblock==0&&!strcmp(block_type,"bc_bot1")) { - fprintf(stderr,"ERROR (solver):\n\t"); - fprintf(stderr,"\"bc_bot1\" terms are not allowed in first domain\n"); - fprintf(stderr,"\tin block %d, eq \"%s\", var \"%s\"\n",iblock,eqn,varn); - exit(1); + ester_critical("(solver::add) 'bc_bot1' terms are not allowed in first domain" + " in block %d, eq '%s', var '%s'", iblock, eqn, varn); } if(iblock==nb-1&&!strcmp(block_type,"bc_top2")) { - fprintf(stderr,"ERROR (solver):\n\t"); - fprintf(stderr,"\"bc_top2\" terms are not allowed in last domain\n"); - fprintf(stderr,"\tin block %d, eq \"%s\", var \"%s\"\n",iblock,eqn,varn); - exit(1); + ester_critical("(solver::add) 'bc_top2' terms are not allowed in last domain" + " in block %d, eq '%s', var '%s'", iblock, eqn, varn); } sync=0; @@ -1514,8 +1506,7 @@ void solver::add(int iblock,const char *eqn, const char *varn,const char *block_ else if(!strcmp(block_type,"bc_top2")) bb=bc_top2; else { - fprintf(stderr,"ERROR (solver::add) : Unknown block_type %s\n",block_type); - exit(1); + ester_critical("(solver::add) : Unknown block_type %s", block_type); } matrix *ll,L; @@ -1626,8 +1617,8 @@ int solver::check_struct() { Nt=nth[n][i]>Nt?nth[n][i]:Nt; } if(rhs[i].nrows()!=Nr||rhs[i].ncols()!=Nt) { - fprintf(stderr,"ERROR (solver):\n\tRHS for var \"%s\" has not the correct size\n",var[i]); - fprintf(stderr,"\tIt is (%d,%d) and should be (%d,%d)\n",rhs[i].nrows(),rhs[i].ncols(),Nr,Nt); + ester_err("(solver) RHS for var '%s' has not the correct size\n" + "\t It is (%d,%d) and should be (%d,%d)", var[i], rhs[i].nrows(), rhs[i].ncols(), Nr, Nt); error=1; } } @@ -1922,8 +1913,7 @@ void solver::subst_dep() { substd=0; for(int i=0;itype); - exit(EXIT_FAILURE); + ester_critical("(solver::subst_dep_elem) unknown type (%c)", p->type); } bb->add(i,k,type_new,&D,&L,&R,&I); From 68d7671efc00c1745310263314bc05560c6c5927 Mon Sep 17 00:00:00 2001 From: ctmbl Date: Tue, 6 Feb 2024 15:12:30 +0100 Subject: [PATCH 11/12] Update solver::check_struct_error error logging on the same pattern as solver::add --- src/solver/solver.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/solver/solver.cpp b/src/solver/solver.cpp index 2da13bc5..b42d300b 100644 --- a/src/solver/solver.cpp +++ b/src/solver/solver.cpp @@ -1871,31 +1871,30 @@ int solver::check_struct_bc(int n,int i,int j,const char *bctype) { void solver::check_struct_error(const char *err_msg,int n,int i,int j,solver_elem *p) { - - fprintf(stderr,"ERROR (solver):\n\t%s\n\tin block %d, eq \"%s\", var \"%s\"",err_msg,n,var[i],var[j]); + char type_name[4]; switch(p->type) { case 'd': - fprintf(stderr," (type: d)\n"); + strncpy(type_name, "d", sizeof(type_name)); break; case 'l': - fprintf(stderr," (type: l)\n"); + strncpy(type_name, "l", sizeof(type_name)); break; case 'r': - fprintf(stderr," (type: r)\n"); + strncpy(type_name, "r", sizeof(type_name)); break; case 'f': - fprintf(stderr," (type: lr)\n"); + strncpy(type_name, "lr", sizeof(type_name)); break; case 'm': - fprintf(stderr," (type: li)\n"); + strncpy(type_name, "li", sizeof(type_name)); break; case 's': - fprintf(stderr," (type: ri)\n"); + strncpy(type_name, "ri", sizeof(type_name)); break; case 'g': - fprintf(stderr," (type: lri)\n"); + strncpy(type_name, "lri", sizeof(type_name)); } - + ester_err("(solver::check_struct_error) '%s' in block %d, eq: '%s', var: '%s' (type: %s)", err_msg, n, var[i], var[j], type_name); } /// \brief Substitutes dependent variables defined in the solver. From 3d40918853aff817ee8d4511c637b8f60e3ffe1b Mon Sep 17 00:00:00 2001 From: ctmbl Date: Tue, 6 Feb 2024 22:16:04 +0100 Subject: [PATCH 12/12] Fix typo in utils.h comment --- src/include/utils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/include/utils.h b/src/include/utils.h index a137a49f..66395a8c 100644 --- a/src/include/utils.h +++ b/src/include/utils.h @@ -25,7 +25,7 @@ ester_debug|info|warn|err|critical print to stderr in DEBUG none else -`ester_debug`: +`ester_info`: prefixed with green "Info" print to stdout in both modes