=================================================================== RCS file: /home/cvs/OpenXM/src/hgm/mh/src/jack-n.c,v retrieving revision 1.46 retrieving revision 1.49 diff -u -p -r1.46 -r1.49 --- OpenXM/src/hgm/mh/src/jack-n.c 2016/02/15 06:02:39 1.46 +++ OpenXM/src/hgm/mh/src/jack-n.c 2016/06/02 11:00:44 1.49 @@ -7,7 +7,7 @@ #define VSTRING "%!version2.0" /* - $OpenXM: OpenXM/src/hgm/mh/src/jack-n.c,v 1.45 2016/02/13 22:56:50 takayama Exp $ + $OpenXM: OpenXM/src/hgm/mh/src/jack-n.c,v 1.48 2016/05/30 00:38:18 takayama Exp $ Ref: copied from this11/misc-2011/A1/wishart/Prog jack-n.c, translated from mh.rr or tk_jack.rr in the asir-contrib. License: LGPL Koev-Edelman for higher order derivatives. @@ -53,6 +53,8 @@ static int Sample = Sample_default; static double *Iv2; static double Ef2; +static int SAR_warning = 1; + #ifdef NAN #else #define NAN 3.40282e+38 /* for old 32 bit machines. Todo, configure */ @@ -368,8 +370,14 @@ static int myfree(void *p) { if (Debug) oxprintf("myFree at %p\n",p); return(mh_free(p)); } +#ifdef STANDALONE2 static int myerror(char *s) { oxprintfe("%s: type in control-C\n",s); getchar(); getchar(); return(0);} - +#else +static int myerror(char *s) { + oxprintfe("%s: myerror is called.\n",s); + mh_exit(-1); +} +#endif static double jack1(int K) { double F; extern int Alpha; @@ -2123,7 +2131,7 @@ static int showParam_v1(struct SFILE *fp,int fd) { sprintf(swork,"#automatic=%d\n",M_automatic); mh_fputs(swork,fp); sprintf(swork,"#series_error=%lg\n",M_series_error); mh_fputs(swork,fp); sprintf(swork,"#recommended_abserr\n"); mh_fputs(swork,fp); - sprintf(swork,"#abserror=%lg\n",M_recommended_abserr); mh_fputs(swork,fp); + sprintf(swork,"%%abserror=%lg\n",M_recommended_abserr); mh_fputs(swork,fp); if (M_recommended_relerr < MH_RELERR_DEFAULT) { sprintf(swork,"%%relerror=%lg\n",M_recommended_relerr); mh_fputs(swork,fp); } @@ -2307,15 +2315,26 @@ static void setM_x_ef_type1(void) { int i; for (i=0; i SERIES_ADMISSIBLE_RADIUS_TYPE1) { + if (SAR_warning) oxprintfe("Warning: evaluation point %lf for %d-th variable of the series 1F1 might be far from 0. Decrease q0 (or X0g for the standalone) if necessary.\n",M_x[i],i); + SAR_warning=0; + } } } static void setM_x_ef_type2(void) { int i; for (i=0; i SERIES_ADMISSIBLE_RADIUS_TYPE2) { + if (SAR_warning) oxprintfe("Warning: evaluation point %lf for %d-th point of the series 2F1 is near 1. Decrease q0 (or X0g for the standalone).\n",M_x[i],i); + SAR_warning=0; + } } } - +int reset_SAR_warning(int n) { + SAR_warning = n; + return(n); +} /* log of gammam */ static double lgammam(double a,int n) { double v,v2;