00001 #include "dsdp5.h" 00007 static int dsdpprintlevel=0; 00008 static int dsdpprintlevel2=0; 00009 00010 #undef __FUNCT__ 00011 #define __FUNCT__ "DSDPPrintStats" 00012 int DSDPPrintStatsFile(DSDP dsdp, void *dummy){ 00013 00014 double ppobj,ddobj,pstp,dstp,mu,res,pinfeas,pnorm; 00015 int iter,info; 00016 int printlevel=dsdpprintlevel2; 00017 DSDPTerminationReason reason; 00018 00019 if(printlevel<=0) return(0); 00020 if(!dsdpoutputfile) return(0); 00021 00022 info = DSDPStopReason(dsdp,&reason);DSDPCHKERR(info); 00023 info = DSDPGetIts(dsdp,&iter);DSDPCHKERR(info); 00024 00025 if( (reason!=CONTINUE_ITERATING) || ((iter % printlevel)==0)){ 00026 info = DSDPGetDDObjective(dsdp,&ddobj); DSDPCHKERR(info); 00027 info = DSDPGetPPObjective(dsdp,&ppobj); DSDPCHKERR(info); 00028 info = DSDPGetR(dsdp,&res); DSDPCHKERR(info); 00029 info = DSDPGetPInfeasibility(dsdp,&pinfeas); DSDPCHKERR(info); 00030 info = DSDPGetStepLengths(dsdp,&pstp,&dstp); DSDPCHKERR(info); 00031 info = DSDPGetBarrierParameter(dsdp,&mu); DSDPCHKERR(info); 00032 info = DSDPGetPnorm(dsdp,&pnorm); DSDPCHKERR(info); 00033 if (reason==CONTINUE_ITERATING && iter>100 && iter%10!=0) return 0; 00034 00035 if (iter==0){ 00036 fprintf(dsdpoutputfile,"Iter PP Objective DD Objective PInfeas DInfeas Mu StepLength Pnrm\n"); 00037 fprintf(dsdpoutputfile,"--------------------------------------------------------------------------------------\n"); 00038 } 00039 fprintf(dsdpoutputfile,"%-3d %16.8e %16.8e %9.1e %9.1e %9.1e",iter,ppobj,ddobj,pinfeas,res,mu); 00040 fprintf(dsdpoutputfile," %4.2f %4.2f",pstp,dstp); 00041 if (pnorm>1.0e3){ 00042 fprintf(dsdpoutputfile," %1.0e \n",pnorm); 00043 } else { 00044 fprintf(dsdpoutputfile," %5.2f \n",pnorm); 00045 } 00046 00047 } 00048 return 0; 00049 } 00050 00051 #undef __FUNCT__ 00052 #define __FUNCT__ "DSDPSetStandardMonitor" 00053 int DSDPSetFileMonitor(DSDP dsdp, int printlevel){ 00054 int info; 00055 dsdpprintlevel2=printlevel; 00056 info=DSDPSetMonitor(dsdp,DSDPPrintStatsFile,0); DSDPCHKERR(info); 00057 return (0); 00058 } 00059 00069 #undef __FUNCT__ 00070 #define __FUNCT__ "DSDPPrintStats" 00071 int DSDPPrintStats(DSDP dsdp, void *dummy){ 00072 00073 double ppobj,ddobj,pstp,dstp,mu,res,pinfeas,pnorm; 00074 int iter,info; 00075 int printlevel=dsdpprintlevel; 00076 DSDPTerminationReason reason; 00077 00078 if(printlevel<=0) return(0); 00079 00080 info = DSDPStopReason(dsdp,&reason);DSDPCHKERR(info); 00081 info = DSDPGetIts(dsdp,&iter);DSDPCHKERR(info); 00082 00083 if( (reason!=CONTINUE_ITERATING) || ((iter % printlevel)==0)){ 00084 info = DSDPGetDDObjective(dsdp,&ddobj); DSDPCHKERR(info); 00085 info = DSDPGetPPObjective(dsdp,&ppobj); DSDPCHKERR(info); 00086 info = DSDPGetR(dsdp,&res); DSDPCHKERR(info); 00087 info = DSDPGetPInfeasibility(dsdp,&pinfeas); DSDPCHKERR(info); 00088 info = DSDPGetStepLengths(dsdp,&pstp,&dstp); DSDPCHKERR(info); 00089 info = DSDPGetBarrierParameter(dsdp,&mu); DSDPCHKERR(info); 00090 info = DSDPGetPnorm(dsdp,&pnorm); DSDPCHKERR(info); 00091 if (0 && reason==CONTINUE_ITERATING && iter>100 && iter%10!=0) return 0; 00092 00093 if (iter==0){ 00094 printf("Iter PP Objective DD Objective PInfeas DInfeas Nu StepLength Pnrm\n") 00095 ; 00096 printf("---------------------------------------------------------------------------------------\n") 00097 ; 00098 } 00099 printf("%-3d %16.8e %16.8e %9.1e %9.1e %9.1e",iter,ppobj,ddobj,pinfeas,res,mu); 00100 printf(" %4.2f %4.2f",pstp,dstp); 00101 if (pnorm>1.0e3){ 00102 printf(" %1.0e \n",pnorm); 00103 } else { 00104 printf(" %5.2f \n",pnorm); 00105 } 00106 fflush(NULL); 00107 } 00108 return 0; 00109 } 00110 00151 #undef __FUNCT__ 00152 #define __FUNCT__ "DSDPSetStandardMonitor" 00153 int DSDPSetStandardMonitor(DSDP dsdp, int k){ 00154 int info; 00155 info=DSDPSetMonitor(dsdp,DSDPPrintStats,0); DSDPCHKERR(info); 00156 dsdpprintlevel=k; 00157 return (0); 00158 } 00159