PetscErrorCode BSSCR_GeneratePetscHeader_for_viewer( PetscViewer viewer ) { PetscErrorCode ierr; char version[256]; char arch[50], hostname[64], username[16], pname[PETSC_MAX_PATH_LEN], date[64]; int size; char *_dir; MPI_Comm comm; ierr = PetscGetArchType(arch, 50);CHKERRQ(ierr); ierr = PetscGetHostName(hostname, 64);CHKERRQ(ierr); ierr = PetscGetUserName(username, 16);CHKERRQ(ierr); ierr = PetscGetProgramName(pname, PETSC_MAX_PATH_LEN);CHKERRQ(ierr); ierr = PetscGetDate(date, 64);CHKERRQ(ierr); ierr = PetscGetVersion(&version,256);CHKERRQ(ierr); ierr = PetscGetPetscDir( (const char**)&_dir ); CHKERRQ(ierr); PetscObjectGetComm( (PetscObject)viewer, &comm ); MPI_Comm_size( comm, &size ); if( size == 1 ) { PetscViewerASCIIPrintf( viewer,"## %s on a %s named %s with %d processor, by %s %s\n", pname, arch, hostname, size, username, date); } else { PetscViewerASCIIPrintf( viewer,"## %s on a %s named %s with %d processors, by %s %s\n", pname, arch, hostname, size, username, date); } PetscViewerASCIIPrintf( viewer, "## Using %s, installed at %s \n", version, _dir ); PetscFunctionReturn(0); }
PetscErrorCode BSSCR_GeneratePetscHeader_for_file( FILE *fd, MPI_Comm comm ) { PetscErrorCode ierr; char version[256]; char arch[50], hostname[64], username[16], pname[PETSC_MAX_PATH_LEN], date[64]; int size, rank; char *_dir; ierr = PetscGetArchType(arch, 50);CHKERRQ(ierr); ierr = PetscGetHostName(hostname, 64);CHKERRQ(ierr); ierr = PetscGetUserName(username, 16);CHKERRQ(ierr); ierr = PetscGetProgramName(pname, PETSC_MAX_PATH_LEN);CHKERRQ(ierr); ierr = PetscGetDate(date, 64);CHKERRQ(ierr); ierr = PetscGetVersion(&version,256);CHKERRQ(ierr); ierr = PetscGetPetscDir( (const char**)&_dir ); CHKERRQ(ierr); MPI_Comm_size( comm, &size ); MPI_Comm_rank( comm, &rank ); if( rank != 0 ) PetscFunctionReturn(0); if( size == 1 ) { fprintf( fd,"## %s on a %s named %s with %d processor, by %s %s\n", pname, arch, hostname, size, username, date); } else { fprintf( fd,"## %s on a %s named %s with %d processors, by %s %s\n", pname, arch, hostname, size, username, date); } fprintf( fd, "## Using %s, installed at %s \n", version, _dir ); PetscFunctionReturn(0); }
PetscErrorCode PetscCloseHistoryFile(FILE **fd) { PetscErrorCode ierr; PetscMPIInt rank; char date[64]; int err; PetscFunctionBegin; ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank); CHKERRQ(ierr); if (!rank) { ierr = PetscGetDate(date,64); CHKERRQ(ierr); ierr = PetscFPrintf(PETSC_COMM_SELF,*fd,"---------------------------------------------------------\n"); CHKERRQ(ierr); ierr = PetscFPrintf(PETSC_COMM_SELF,*fd,"Finished at %s\n",date); CHKERRQ(ierr); ierr = PetscFPrintf(PETSC_COMM_SELF,*fd,"---------------------------------------------------------\n"); CHKERRQ(ierr); err = fflush(*fd); if (err) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SYS,"fflush() failed on file"); err = fclose(*fd); if (err) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SYS,"fclose() failed on file"); } PetscFunctionReturn(0); }
PetscErrorCode PetscOpenHistoryFile(const char filename[],FILE **fd) { PetscErrorCode ierr; PetscMPIInt rank,size; char pfile[PETSC_MAX_PATH_LEN],pname[PETSC_MAX_PATH_LEN],fname[PETSC_MAX_PATH_LEN],date[64]; char version[256]; PetscFunctionBegin; ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank); CHKERRQ(ierr); if (!rank) { char arch[10]; int err; ierr = PetscGetArchType(arch,10); CHKERRQ(ierr); ierr = PetscGetDate(date,64); CHKERRQ(ierr); ierr = PetscGetVersion(version,256); CHKERRQ(ierr); ierr = MPI_Comm_size(PETSC_COMM_WORLD,&size); CHKERRQ(ierr); if (filename) { ierr = PetscFixFilename(filename,fname); CHKERRQ(ierr); } else { ierr = PetscGetHomeDirectory(pfile,240); CHKERRQ(ierr); ierr = PetscStrcat(pfile,"/.petschistory"); CHKERRQ(ierr); ierr = PetscFixFilename(pfile,fname); CHKERRQ(ierr); } *fd = fopen(fname,"a"); if (!fd) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_FILE_OPEN,"Cannot open file: %s",fname); ierr = PetscFPrintf(PETSC_COMM_SELF,*fd,"---------------------------------------------------------\n"); CHKERRQ(ierr); ierr = PetscFPrintf(PETSC_COMM_SELF,*fd,"%s %s\n",version,date); CHKERRQ(ierr); ierr = PetscGetProgramName(pname,PETSC_MAX_PATH_LEN); CHKERRQ(ierr); ierr = PetscFPrintf(PETSC_COMM_SELF,*fd,"%s on a %s, %d proc. with options:\n",pname,arch,size); CHKERRQ(ierr); ierr = PetscFPrintf(PETSC_COMM_SELF,*fd,"---------------------------------------------------------\n"); CHKERRQ(ierr); err = fflush(*fd); if (err) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SYS,"fflush() failed on file"); } PetscFunctionReturn(0); }
/* Initializes arch, hostname, username,date so that system calls do NOT need to be made during the error handler. */ PetscErrorCode PetscErrorPrintfInitialize() { PetscErrorCode ierr; PetscBool use_stdout = PETSC_FALSE,use_none = PETSC_FALSE; PetscFunctionBegin; ierr = PetscGetArchType(arch,sizeof(arch));CHKERRQ(ierr); ierr = PetscGetHostName(hostname,sizeof(hostname));CHKERRQ(ierr); ierr = PetscGetUserName(username,sizeof(username));CHKERRQ(ierr); ierr = PetscGetProgramName(pname,PETSC_MAX_PATH_LEN);CHKERRQ(ierr); ierr = PetscGetDate(date,sizeof(date));CHKERRQ(ierr); ierr = PetscGetVersion(version,sizeof(version));CHKERRQ(ierr); ierr = PetscOptionsGetBool(NULL,"-error_output_stdout",&use_stdout,NULL);CHKERRQ(ierr); if (use_stdout) PETSC_STDERR = PETSC_STDOUT; ierr = PetscOptionsGetBool(NULL,"-error_output_none",&use_none,NULL);CHKERRQ(ierr); if (use_none) PetscErrorPrintf = PetscErrorPrintfNone; PetscErrorPrintfInitializeCalled = PETSC_TRUE; PetscFunctionReturn(0); }
PetscErrorCode PetscLogView_VecScatter(PetscViewer viewer) { MPI_Comm comm = PetscObjectComm((PetscObject) viewer); PetscEventPerfInfo *eventInfo = NULL; PetscLogDouble locTotalTime,stats[6],maxstats[6],minstats[6],sumstats[6],avetime,ksptime; PetscStageLog stageLog; const int stage = 2; int event,events[] = {VEC_ScatterBegin,VEC_ScatterEnd}; PetscMPIInt rank,size; PetscErrorCode ierr; PetscInt i; char arch[128],hostname[128],username[128],pname[PETSC_MAX_PATH_LEN],date[128],version[256]; PetscFunctionBegin; PetscTime(&locTotalTime); locTotalTime -= petsc_BaseTime; ierr = MPI_Comm_size(comm, &size);CHKERRQ(ierr); ierr = MPI_Comm_rank(comm, &rank);CHKERRQ(ierr); ierr = PetscLogGetStageLog(&stageLog);CHKERRQ(ierr); ierr = PetscViewerASCIIPrintf(viewer,"numProcs = %d\n",size);CHKERRQ(ierr); ierr = PetscGetArchType(arch,sizeof(arch));CHKERRQ(ierr); ierr = PetscGetHostName(hostname,sizeof(hostname));CHKERRQ(ierr); ierr = PetscGetUserName(username,sizeof(username));CHKERRQ(ierr); ierr = PetscGetProgramName(pname,sizeof(pname));CHKERRQ(ierr); ierr = PetscGetDate(date,sizeof(date));CHKERRQ(ierr); ierr = PetscGetVersion(version,sizeof(version));CHKERRQ(ierr); ierr = PetscViewerASCIIPrintf(viewer,"%s on a %s named %s with %d processors, by %s %s\n", pname, arch, hostname, size, username, date);CHKERRQ(ierr); ierr = PetscViewerASCIIPrintf(viewer, "Using %s\n", version);CHKERRQ(ierr); ierr = PetscViewerASCIIPrintf(viewer, "Configure options: %s",petscconfigureoptions);CHKERRQ(ierr); ierr = PetscViewerASCIIPrintf(viewer, "%s", petscmachineinfo);CHKERRQ(ierr); ierr = PetscViewerASCIIPrintf(viewer, "%s", petsccompilerinfo);CHKERRQ(ierr); ierr = PetscViewerASCIIPrintf(viewer, "%s", petsccompilerflagsinfo);CHKERRQ(ierr); ierr = PetscViewerASCIIPrintf(viewer, "%s", petsclinkerinfo);CHKERRQ(ierr); ierr = PetscViewerASCIIPrintf(viewer, "%s\n", PETSC_MPICC_SHOW);CHKERRQ(ierr); ierr = PetscOptionsView(NULL,viewer);CHKERRQ(ierr); #if defined(PETSC_HAVE_HWLOC) ierr = PetscProcessPlacementView(viewer);CHKERRQ(ierr); #endif ierr = PetscViewerASCIIPrintf(viewer, "----------------------------------------------------\n");CHKERRQ(ierr); ierr = PetscViewerASCIIPrintf(viewer," Time Min to Max Range Proportion of KSP\n");CHKERRQ(ierr); eventInfo = stageLog->stageInfo[stage].eventLog->eventInfo; ierr = MPI_Allreduce(&eventInfo[KSP_Solve].time,&ksptime,1,MPIU_PETSCLOGDOUBLE,MPI_SUM,PETSC_COMM_WORLD);CHKERRQ(ierr); ksptime = ksptime/size; for (i=0; i<(int)(sizeof(events)/sizeof(int)); i++) { event = events[i]; stats[COUNT] = eventInfo[event].count; stats[TIME] = eventInfo[event].time; stats[NUMMESS] = eventInfo[event].numMessages; stats[MESSLEN] = eventInfo[event].messageLength; stats[REDUCT] = eventInfo[event].numReductions; stats[FLOPS] = eventInfo[event].flops; ierr = MPI_Allreduce(stats,maxstats,6,MPIU_PETSCLOGDOUBLE,MPI_MAX,PETSC_COMM_WORLD);CHKERRQ(ierr); ierr = MPI_Allreduce(stats,minstats,6,MPIU_PETSCLOGDOUBLE,MPI_MIN,PETSC_COMM_WORLD);CHKERRQ(ierr); ierr = MPI_Allreduce(stats,sumstats,6,MPIU_PETSCLOGDOUBLE,MPI_SUM,PETSC_COMM_WORLD);CHKERRQ(ierr); avetime = sumstats[1]/size; ierr = PetscViewerASCIIPrintf(viewer,"%s %4.2e -%5.1f %% %5.1f %% %4.2e %%\n",stageLog->eventLog->eventInfo[event].name, avetime,100.*(avetime-minstats[1])/avetime,100.*(maxstats[1]-avetime)/avetime,100.*avetime/ksptime);CHKERRQ(ierr); } ierr = PetscViewerFlush(viewer);CHKERRQ(ierr); PetscFunctionReturn(0); }