--- imach/src/imach.c 2014/12/16 11:20:36 1.165 +++ imach/src/imach.c 2014/12/22 23:08:31 1.169 @@ -1,6 +1,22 @@ -/* $Id: imach.c,v 1.165 2014/12/16 11:20:36 brouard Exp $ +/* $Id: imach.c,v 1.169 2014/12/22 23:08:31 brouard Exp $ $State: Exp $ $Log: imach.c,v $ + Revision 1.169 2014/12/22 23:08:31 brouard + Summary: 0.98p + + Outputs some informations on compiler used, OS etc. Testing on different platforms. + + Revision 1.168 2014/12/22 15:17:42 brouard + Summary: udate + + Revision 1.167 2014/12/22 13:50:56 brouard + Summary: Testing uname and compiler version and if compiled 32 or 64 + + Testing on Linux 64 + + Revision 1.166 2014/12/22 11:40:47 brouard + *** empty log message *** + Revision 1.165 2014/12/16 11:20:36 brouard Summary: After compiling on Visual C @@ -517,6 +533,7 @@ #include #include +#include #include #include /* extern int errno; */ @@ -535,6 +552,7 @@ #include #endif + #ifdef NLOPT #include typedef struct { @@ -577,11 +595,11 @@ typedef struct { #define ODIRSEPARATOR '\\' #endif -/* $Id: imach.c,v 1.165 2014/12/16 11:20:36 brouard Exp $ */ +/* $Id: imach.c,v 1.169 2014/12/22 23:08:31 brouard Exp $ */ /* $State: Exp $ */ -char version[]="Imach version 0.99, September 2014,INED-EUROREVES-Institut de longevite-Japan Society for the Promotion of Science (Grant-in-Aid for Scientific Research 25293121)"; -char fullversion[]="$Revision: 1.165 $ $Date: 2014/12/16 11:20:36 $"; +char version[]="Imach version 0.98p, December 2014,INED-EUROREVES-Institut de longevite-Japan Society for the Promotion of Science (Grant-in-Aid for Scientific Research 25293121), Intel Software 2015"; +char fullversion[]="$Revision: 1.169 $ $Date: 2014/12/22 23:08:31 $"; char strstart[80]; char optionfilext[10], optionfilefiname[FILENAMELENGTH]; int erreur=0, nberr=0, nbwarn=0; /* Error number, number of errors number of warnings */ @@ -695,7 +713,12 @@ static double maxarg1,maxarg2; #define SIGN(a,b) ((b)>0.0 ? fabs(a) : -fabs(a)) #define rint(a) floor(a+0.5) - +/* http://www.thphys.uni-heidelberg.de/~robbers/cmbeasy/doc/html/myutils_8h-source.html */ +/* #define mytinydouble 1.0e-16 */ +/* #define DEQUAL(a,b) (fabs((a)-(b))=age-delaymax; agefin=agefin-stepm/YEARM){ newm=savm; /* Covariates have to be included here again */ @@ -1562,11 +1585,12 @@ double **prevalim(double **prlim, int nl } maxmin=max-min; maxmax=FMAX(maxmax,maxmin); - } + } /* j loop */ if(maxmax < ftolpl){ return prlim; } - } + } /* age loop */ + return prlim; /* should not reach here */ } /*************** transition probabilities ***************/ @@ -2515,10 +2539,9 @@ void freqsummary(char fileres[], int ia first=1; - /* for(k1=1; k1<=j ; k1++){ /* Loop on covariates */ - /* for(i1=1; i1<=ncodemax[k1];i1++){ /* Now it is 2 */ - /* j1++; -*/ + /* for(k1=1; k1<=j ; k1++){ */ /* Loop on covariates */ + /* for(i1=1; i1<=ncodemax[k1];i1++){ */ /* Now it is 2 */ + /* j1++; */ for (j1 = 1; j1 <= (int) pow(2,cptcoveff); j1++){ /*printf("cptcoveff=%d Tvaraff=%d", cptcoveff,Tvaraff[1]); scanf("%d", i);*/ @@ -2895,9 +2918,9 @@ void tricode(int *Tvar, int **nbcode, in { /**< Uses cptcovn+2*cptcovprod as the number of covariates */ /* Tvar[i]=atoi(stre); find 'n' in Vn and stores in Tvar. If model=V2+V1 Tvar[1]=2 and Tvar[2]=1 - /* Boring subroutine which should only output nbcode[Tvar[j]][k] + * Boring subroutine which should only output nbcode[Tvar[j]][k] * Tvar[5] in V2+V1+V3*age+V2*V4 is 2 (V2) - /* nbcode[Tvar[j]][1]= + * nbcode[Tvar[j]][1]= */ int ij=1, k=0, j=0, i=0, maxncov=NCOVMAX; @@ -3325,6 +3348,9 @@ void varevsij(char optionfilefiname[], d /* Variance of health expectancies */ /* double **prevalim(double **prlim, int nlstate, double *xp, double age, double **oldm, double ** savm,double ftolpl);*/ /* double **newm;*/ + /* int movingaverage(double ***probs, double bage,double fage, double ***mobaverage, int mobilav)*/ + + int movingaverage(); double **dnewm,**doldm; double **dnewmp,**doldmp; int i, j, nhstepm, hstepm, h, nstepm ; @@ -4023,7 +4049,7 @@ To be simple, these graphs help to under } /* k12 */ } /*l1 */ }/* k1 */ - /* } /* loop covariates */ + /* } */ /* loop covariates */ } free_ma3x(varpij,1,nlstate,1,nlstate+ndeath,(int) bage, (int)fage); free_matrix(mu,1,(nlstate+ndeath)*(nlstate+ndeath),(int) bage, (int)fage); @@ -4091,8 +4117,8 @@ fprintf(fichtm," \n
  • Graphs ",stepm,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1,subdirf2(optionfilefiname,"pe"),jj1); /* Period (stable) prevalence in each health state */ for(cpt=1; cpt<=nlstate;cpt++){ - fprintf(fichtm,"
    - Convergence from cross-sectional prevalence in each state (1 to %d) to period (stable) prevalence in specific state %d %s%d_%d.png
    \ -",nlstate, cpt, subdirf2(optionfilefiname,"p"),cpt,jj1,subdirf2(optionfilefiname,"p"),cpt,jj1,subdirf2(optionfilefiname,"p"),cpt,jj1); + fprintf(fichtm,"
    - Convergence to period (stable) prevalence in state %d. Or probability to be in state %d being in state (1 to %d) at different ages. %s%d_%d.png
    \ +", cpt, cpt, nlstate, subdirf2(optionfilefiname,"p"),cpt,jj1,subdirf2(optionfilefiname,"p"),cpt,jj1,subdirf2(optionfilefiname,"p"),cpt,jj1); } for(cpt=1; cpt<=nlstate;cpt++) { fprintf(fichtm,"\n
    - Life expectancy by health state (%d) at initial age and its decomposition into health expectancies in each alive state (1 to %d) : %s%d%d.png
    \ @@ -4411,7 +4437,7 @@ int movingaverage(double ***probs, doubl /************** Forecasting ******************/ -prevforecast(char fileres[], double anproj1, double mproj1, double jproj1, double ageminpar, double agemax, double dateprev1, double dateprev2, int mobilav, double bage, double fage, int firstpass, int lastpass, double anproj2, double p[], int cptcoveff){ +void prevforecast(char fileres[], double anproj1, double mproj1, double jproj1, double ageminpar, double agemax, double dateprev1, double dateprev2, int mobilav, double bage, double fage, int firstpass, int lastpass, double anproj2, double p[], int cptcoveff){ /* proj1, year, month, day of starting projection agemin, agemax range of age dateprev1 dateprev2 range of dates during which prevalence is computed @@ -4534,7 +4560,7 @@ prevforecast(char fileres[], double anpr } /************** Forecasting *****not tested NB*************/ -populforecast(char fileres[], double anpyram,double mpyram,double jpyram,double ageminpar, double agemax,double dateprev1, double dateprev2, int mobilav, double agedeb, double fage, int popforecast, char popfile[], double anpyram1,double p[], int i2){ +void populforecast(char fileres[], double anpyram,double mpyram,double jpyram,double ageminpar, double agemax,double dateprev1, double dateprev2, int mobilav, double agedeb, double fage, int popforecast, char popfile[], double anpyram1,double p[], int i2){ int cpt, stepsize, hstepm, nhstepm, j,k,c, cptcod, i,h; int *popage; @@ -5010,9 +5036,9 @@ int readdata(char datafile[], int firsto strcpy(line,stra); cutv(stra, strb,line,' '); - if(iout=sscanf(strb,"%d/%d",&month, &year) != 0){ + if( (iout=sscanf(strb,"%d/%d",&month, &year)) != 0){ } - else if(iout=sscanf(strb,"%s.",dummy) != 0){ + else if( (iout=sscanf(strb,"%s.",dummy)) != 0){ month=99; year=9999; }else{ @@ -5026,9 +5052,9 @@ int readdata(char datafile[], int firsto } /* ENd Waves */ cutv(stra, strb,line,' '); - if(iout=sscanf(strb,"%d/%d",&month, &year) != 0){ + if( (iout=sscanf(strb,"%d/%d",&month, &year)) != 0){ } - else if(iout=sscanf(strb,"%s.",dummy) != 0){ + else if( (iout=sscanf(strb,"%s.",dummy)) != 0){ month=99; year=9999; }else{ @@ -5041,9 +5067,9 @@ int readdata(char datafile[], int firsto strcpy(line,stra); cutv(stra, strb,line,' '); - if(iout=sscanf(strb,"%d/%d",&month, &year) != 0){ + if( (iout=sscanf(strb,"%d/%d",&month, &year)) != 0){ } - else if(iout=sscanf(strb,"%s.", dummy) != 0){ + else if( (iout=sscanf(strb,"%s.", dummy)) != 0){ month=99; year=9999; }else{ @@ -5141,7 +5167,7 @@ void removespace(char *str) { do while (*p2 == ' ') p2++; - while (*p1++ = *p2++); + while (*p1++ == *p2++); } int decodemodel ( char model[], int lastobs) /**< This routine decode the model and returns: @@ -5171,7 +5197,7 @@ int decodemodel ( char model[], int last cptcovs=j+1-j1; /**< Number of simple covariates V1+V2*age+V3 +V3*V4=> V1 + V3 =2 */ cptcovt= j+1; /* Number of total covariates in the model V1 + V2*age+ V3 + V3*V4=> 4*/ /* including age products which are counted in cptcovage. - /* but the covariates which are products must be treated separately: ncovn=4- 2=2 (V1+V3). */ + * but the covariates which are products must be treated separately: ncovn=4- 2=2 (V1+V3). */ cptcovprod=j1; /**< Number of products V1*V2 +v3*age = 2 */ cptcovprodnoage=0; /**< Number of covariate products without age: V3*V4 =1 */ strcpy(modelsav,model); @@ -5313,7 +5339,7 @@ int decodemodel ( char model[], int last return (1); } -calandcheckages(int imx, int maxwav, double *agemin, double *agemax, int *nberr, int *nbwarn ) +int calandcheckages(int imx, int maxwav, double *agemin, double *agemax, int *nberr, int *nbwarn ) { int i, m; @@ -5324,13 +5350,13 @@ calandcheckages(int imx, int maxwav, dou s[m][i]=-1; } if((int)moisdc[i]==99 && (int)andc[i]==9999 && s[m][i]>nlstate){ - *nberr++; - printf("Error! Date of death (month %2d and year %4d) of individual %ld on line %d was unknown, you must set an arbitrary year of death or he/she is skipped and results are biased\n",(int)moisdc[i],(int)andc[i],num[i],i); - fprintf(ficlog,"Error! Date of death (month %2d and year %4d) of individual %ld on line %d was unknown, you must set an arbitrary year of death or he/she is skipped and results are biased\n",(int)moisdc[i],(int)andc[i],num[i],i); + *nberr = *nberr + 1; + printf("Error! Date of death (month %2d and year %4d) of individual %ld on line %d was unknown, you must set an arbitrary year of death or he/she is skipped and results are biased (%d)\n",(int)moisdc[i],(int)andc[i],num[i],i, *nberr); + fprintf(ficlog,"Error! Date of death (month %2d and year %4d) of individual %ld on line %d was unknown, you must set an arbitrary year of death or he/she is skipped and results are biased (%d)\n",(int)moisdc[i],(int)andc[i],num[i],i, *nberr); s[m][i]=-1; } if((int)moisdc[i]==99 && (int)andc[i]!=9999 && s[m][i]>nlstate){ - *nberr++; + (*nberr)++; printf("Error! Month of death of individual %ld on line %d was unknown %2d, you should set it otherwise the information on the death is skipped and results are biased.\n",num[i],i,(int)moisdc[i]); fprintf(ficlog,"Error! Month of death of individual %ld on line %d was unknown %f, you should set it otherwise the information on the death is skipped and results are biased.\n",num[i],i,moisdc[i]); s[m][i]=-1; /* We prefer to skip it (and to skip it in version 0.8a1 too */ @@ -5343,11 +5369,11 @@ calandcheckages(int imx, int maxwav, dou for(m=firstpass; (m<= lastpass); m++){ if(s[m][i] >0 || s[m][i]==-2 || s[m][i]==-4 || s[m][i]==-5){ if (s[m][i] >= nlstate+1) { - if(agedc[i]>0) - if((int)moisdc[i]!=99 && (int)andc[i]!=9999) + if(agedc[i]>0){ + if((int)moisdc[i]!=99 && (int)andc[i]!=9999){ agev[m][i]=agedc[i]; /*if(moisdc[i]==99 && andc[i]==9999) s[m][i]=-1;*/ - else { + }else { if ((int)andc[i]!=9999){ nbwarn++; printf("Warning negative age at death: %ld line:%d\n",num[i],i); @@ -5355,6 +5381,7 @@ calandcheckages(int imx, int maxwav, dou agev[m][i]=-1; } } + } /* agedc > 0 */ } else if(s[m][i] !=9){ /* Standard case, age in fractional years but with the precision of a month */ @@ -5385,7 +5412,7 @@ calandcheckages(int imx, int maxwav, dou for (i=1; i<=imx; i++) { for(m=firstpass; (m<=lastpass); m++){ if (s[m][i] > (nlstate+ndeath)) { - *nberr++; + (*nberr)++; printf("Error: on wave %d of individual %d status %d > (nlstate+ndeath)=(%d+%d)=%d\n",m,i,s[m][i],nlstate, ndeath, nlstate+ndeath); fprintf(ficlog,"Error: on wave %d of individual %d status %d > (nlstate+ndeath)=(%d+%d)=%d\n",m,i,s[m][i],nlstate, ndeath, nlstate+ndeath); return 1; @@ -5410,6 +5437,95 @@ calandcheckages(int imx, int maxwav, dou return (1); } +void syscompilerinfo() + { + /* #include "syscompilerinfo.h"*/ + /* #include */ /* Only on gnu */ + + printf("Compiled with:");fprintf(ficlog,"Compiled with:"); +#if defined(__clang__) + printf(" Clang/LLVM");fprintf(ficlog," Clang/LLVM"); /* Clang/LLVM. ---------------------------------------------- */ +#endif +#if defined(__ICC) || defined(__INTEL_COMPILER) + printf(" Intel ICC/ICPC");fprintf(ficlog," Intel ICC/ICPC");/* Intel ICC/ICPC. ------------------------------------------ */ +#endif +#if defined(__GNUC__) || defined(__GNUG__) + printf(" GNU GCC/G++");fprintf(ficlog," GNU GCC/G++");/* GNU GCC/G++. --------------------------------------------- */ +#endif +#if defined(__HP_cc) || defined(__HP_aCC) + printf(" Hewlett-Packard C/aC++");fprintf(fcilog," Hewlett-Packard C/aC++"); /* Hewlett-Packard C/aC++. ---------------------------------- */ +#endif +#if defined(__IBMC__) || defined(__IBMCPP__) + printf(" IBM XL C/C++"); fprintf(ficlog," IBM XL C/C++");/* IBM XL C/C++. -------------------------------------------- */ +#endif +#if defined(_MSC_VER) + printf(" Microsoft Visual Studio");fprintf(ficlog," Microsoft Visual Studio");/* Microsoft Visual Studio. --------------------------------- */ +#endif +#if defined(__PGI) + printf(" Portland Group PGCC/PGCPP");fprintf(ficlog," Portland Group PGCC/PGCPP");/* Portland Group PGCC/PGCPP. ------------------------------- */ +#endif +#if defined(__SUNPRO_C) || defined(__SUNPRO_CC) + printf(" Oracle Solaris Studio");fprintf(ficlog," Oracle Solaris Studio\n");/* Oracle Solaris Studio. ----------------------------------- */ +#endif + printf(". ");fprintf(ficlog,". "); + +// http://stackoverflow.com/questions/4605842/how-to-identify-platform-compiler-from-preprocessor-macros +#ifdef _WIN32 // note the underscore: without it, it's not msdn official! + // Windows (x64 and x86) +#elif __unix__ // all unices, not all compilers + // Unix +#elif __linux__ + // linux +#elif __APPLE__ + // Mac OS, not sure if this is covered by __posix__ and/or __unix__ though... +#endif + +/* __MINGW32__ */ +/* __CYGWIN__ */ +/* __MINGW64__ */ +// http://msdn.microsoft.com/en-us/library/b0084kay.aspx +/* _MSC_VER //the Visual C++ compiler is 17.00.51106.1, the _MSC_VER macro evaluates to 1700. Type cl /? */ +/* _MSC_FULL_VER //the Visual C++ compiler is 15.00.20706.01, the _MSC_FULL_VER macro evaluates to 150020706 */ +/* _WIN64 // Defined for applications for Win64. */ +/* _M_X64 // Defined for compilations that target x64 processors. */ +/* _DEBUG // Defined when you compile with /LDd, /MDd, and /MTd. */ +#include +#if UINTPTR_MAX == 0xffffffff + printf(" 32-bit."); /* 32-bit */ +#elif UINTPTR_MAX == 0xffffffffffffffff + printf(" 64-bit.");/* 64-bit */ +#else + printf(" wtf-bit."); /* wtf */ +#endif + +struct utsname sysInfo; + + if (uname(&sysInfo) != -1) { + printf(" %s %s %s %s %s\n",sysInfo.sysname, sysInfo.nodename, sysInfo.release, sysInfo.version, sysInfo.machine); + fprintf(ficlog," %s %s %s %s %s\n ",sysInfo.sysname, sysInfo.nodename, sysInfo.release, sysInfo.version, sysInfo.machine); + } + else + perror("uname() error"); +#if defined(__GNUC__) +# if defined(__GNUC_PATCHLEVEL__) +# define __GNUC_VERSION__ (__GNUC__ * 10000 \ + + __GNUC_MINOR__ * 100 \ + + __GNUC_PATCHLEVEL__) +# else +# define __GNUC_VERSION__ (__GNUC__ * 10000 \ + + __GNUC_MINOR__ * 100) +# endif + printf("GNU C version %d.\n", __GNUC_VERSION__); + fprintf(ficlog, "GNU C version %d.\n", __GNUC_VERSION__); +#endif +#if defined(_MSC_VER) + printf("Visual C++ compiler: %s \n;", _MSC_FULL_VER); + fprintf(ficlog, "Visual C++ compiler: %s \n;", _MSC_FULL_VER); +#endif + + /* printf("GNU libc version: %s\n", gnu_get_libc_version()); */ + + } /***********************************************/ /**************** Main Program *****************/ @@ -5560,7 +5676,7 @@ int main(int argc, char *argv[]) strcpy(command,"mkdir "); strcat(command,optionfilefiname); if((outcmd=system(command)) != 0){ - printf("Problem creating directory or it already exists %s%s, err=%d\n",path,optionfilefiname,outcmd); + printf("Directory already exists (or can't create it) %s%s, err=%d\n",path,optionfilefiname,outcmd); /* fprintf(ficlog,"Problem creating directory %s%s\n",path,optionfilefiname); */ /* fclose(ficlog); */ /* exit(1); */ @@ -5587,6 +5703,8 @@ int main(int argc, char *argv[]) optionfilext=%s\n\ optionfilefiname='%s'\n",pathimach,pathtot,path,optionfile,optionfilext,optionfilefiname); + syscompilerinfo(); + printf("Local time (at start):%s",strstart); fprintf(ficlog,"Local time (at start): %s",strstart); fflush(ficlog);