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 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); }
/* PFStringCreateFunction - Creates a function from a string Collective over PF Input Parameters: + pf - the function object - string - the string that defines the function Output Parameter: . f - the function pointer. .seealso: PFSetFromOptions() */ PetscErrorCode PETSCVEC_DLLEXPORT PFStringCreateFunction(PF pf,char *string,void **f) { #if defined(PETSC_USE_DYNAMIC_LIBRARIES) PetscErrorCode ierr; char task[1024],tmp[256],lib[PETSC_MAX_PATH_LEN],username[64]; FILE *fd; PetscTruth tmpshared,wdshared,keeptmpfiles = PETSC_FALSE; MPI_Comm comm; #endif PetscFunctionBegin; #if defined(PETSC_USE_DYNAMIC_LIBRARIES) ierr = PetscStrfree(pf->data);CHKERRQ(ierr); ierr = PetscStrallocpy(string,(char**)&pf->data);CHKERRQ(ierr); /* create the new C function and compile it */ ierr = PetscSharedTmp(((PetscObject)pf)->comm,&tmpshared);CHKERRQ(ierr); ierr = PetscSharedWorkingDirectory(((PetscObject)pf)->comm,&wdshared);CHKERRQ(ierr); if (tmpshared) { /* do it in /tmp since everyone has one */ ierr = PetscGetTmp(((PetscObject)pf)->comm,tmp,PETSC_MAX_PATH_LEN);CHKERRQ(ierr); comm = ((PetscObject)pf)->comm; } else if (!wdshared) { /* each one does in private /tmp */ ierr = PetscGetTmp(((PetscObject)pf)->comm,tmp,PETSC_MAX_PATH_LEN);CHKERRQ(ierr); comm = PETSC_COMM_SELF; } else { /* do it in current directory */ ierr = PetscStrcpy(tmp,".");CHKERRQ(ierr); comm = ((PetscObject)pf)->comm; } ierr = PetscOptionsGetTruth(((PetscObject)pf)->prefix,"-pf_string_keep_files",&keeptmpfiles,PETSC_NULL);CHKERRQ(ierr); if (keeptmpfiles) { sprintf(task,"cd %s ; mkdir ${USERNAME} ; cd ${USERNAME} ; \\cp -f ${PETSC_DIR}/src/pf/impls/string/makefile ./makefile ; ke MIN=%d NOUT=%d petscdlib STRINGFUNCTION=\"%s\" ; sync\n",tmp,(int)pf->dimin,(int)pf->dimout,string); } else { sprintf(task,"cd %s ; mkdir ${USERNAME} ;cd ${USERNAME} ; \\cp -f ${PETSC_DIR}/src/pf/impls/string/makefile ./makefile ; make MIN=%d NOUT=%d -f makefile petscdlib STRINGFUNCTION=\"%s\" ; \\rm -f makefile petscdlib.c libpetscdlib.a ; sync\n",tmp,(int)pf->dimin,(int)pf->dimout,string); } #if defined(PETSC_HAVE_POPEN) ierr = PetscPOpen(comm,PETSC_NULL,task,"r",&fd);CHKERRQ(ierr); ierr = PetscPClose(comm,fd);CHKERRQ(ierr); #else SETERRQ(PETSC_ERR_SUP_SYS,"Cannot run external programs on this machine"); #endif ierr = MPI_Barrier(comm);CHKERRQ(ierr); /* load the apply function from the dynamic library */ ierr = PetscGetUserName(username,64);CHKERRQ(ierr); sprintf(lib,"%s/%s/libpetscdlib",tmp,username); ierr = PetscDLLibrarySym(comm,PETSC_NULL,lib,"PFApply_String",f);CHKERRQ(ierr); #endif 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); }