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