本文整理汇总了C++中PetscStrlen函数的典型用法代码示例。如果您正苦于以下问题:C++ PetscStrlen函数的具体用法?C++ PetscStrlen怎么用?C++ PetscStrlen使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了PetscStrlen函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: collective
/*@C
PetscDrawAppendTitle - Appends to the title of a PetscDraw context.
Not collective (any processor or all can call this)
Input Parameters:
+ draw - the graphics context
- title - the title
Note:
A copy of the string is made, so you may destroy the
title string after calling this routine.
Level: advanced
.seealso: PetscDrawSetTitle(), PetscDrawGetTitle()
@*/
PetscErrorCode PetscDrawAppendTitle(PetscDraw draw,const char title[])
{
PetscErrorCode ierr;
size_t len1,len2,len;
char *newtitle;
PetscFunctionBegin;
PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
if (!title) PetscFunctionReturn(0);
if (draw->title) {
ierr = PetscStrlen(title,&len1);CHKERRQ(ierr);
ierr = PetscStrlen(draw->title,&len2);CHKERRQ(ierr);
len = len1 + len2;
ierr = PetscMalloc1((len + 1),&newtitle);CHKERRQ(ierr);
ierr = PetscStrcpy(newtitle,draw->title);CHKERRQ(ierr);
ierr = PetscStrcat(newtitle,title);CHKERRQ(ierr);
ierr = PetscFree(draw->title);CHKERRQ(ierr);
draw->title = newtitle;
} else {
ierr = PetscStrallocpy(title,&draw->title);CHKERRQ(ierr);
}
if (draw->ops->settitle) {
ierr = (*draw->ops->settitle)(draw,draw->title);CHKERRQ(ierr);
}
PetscFunctionReturn(0);
}
示例2: PetscDrawString_X
static PetscErrorCode PetscDrawString_X(PetscDraw draw,PetscReal x,PetscReal y,int c,const char chrs[])
{
PetscErrorCode ierr;
int xx,yy;
size_t len;
PetscDraw_X *XiWin = (PetscDraw_X*)draw->data;
char *substr;
PetscToken token;
PetscFunctionBegin;
xx = XTRANS(draw,XiWin,x); yy = YTRANS(draw,XiWin,y);
PetscDrawXiSetColor(XiWin,c);
ierr = PetscTokenCreate(chrs,'\n',&token);CHKERRQ(ierr);
ierr = PetscTokenFind(token,&substr);CHKERRQ(ierr);
ierr = PetscStrlen(substr,&len);CHKERRQ(ierr);
XDrawString(XiWin->disp,PetscDrawXiDrawable(XiWin),XiWin->gc.set,xx,yy - XiWin->font->font_descent,substr,len);
ierr = PetscTokenFind(token,&substr);CHKERRQ(ierr);
while (substr) {
yy += 4*XiWin->font->font_descent;
ierr = PetscStrlen(substr,&len);CHKERRQ(ierr);
XDrawString(XiWin->disp,PetscDrawXiDrawable(XiWin),XiWin->gc.set,xx,yy - XiWin->font->font_descent,substr,len);
ierr = PetscTokenFind(token,&substr);CHKERRQ(ierr);
}
ierr = PetscTokenDestroy(&token);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例3: MPI_Get_processor_name
/*@C
PetscGetHostName - Returns the name of the host. This attempts to
return the entire Internet name. It may not return the same name
as MPI_Get_processor_name().
Not Collective
Input Parameter:
. nlen - length of name
Output Parameter:
. name - contains host name. Must be long enough to hold the name
This is the fully qualified name, including the domain.
Level: developer
Concepts: machine name
Concepts: host name
Fortran Version:
In Fortran this routine has the format
$ character*(64) name
$ call PetscGetHostName(name,ierr)
.seealso: PetscGetUserName(),PetscGetArchType()
@*/
PetscErrorCode PetscGetHostName(char name[],size_t nlen)
{
char *domain;
PetscErrorCode ierr;
#if defined(PETSC_HAVE_UNAME) && !defined(PETSC_HAVE_GETCOMPUTERNAME)
struct utsname utname;
#endif
PetscFunctionBegin;
#if defined(PETSC_HAVE_GETCOMPUTERNAME)
{
size_t nnlen = nlen;
GetComputerName((LPTSTR)name,(LPDWORD)(&nnlen));
}
#elif defined(PETSC_HAVE_UNAME)
uname(&utname);
ierr = PetscStrncpy(name,utname.nodename,nlen);
CHKERRQ(ierr);
#elif defined(PETSC_HAVE_GETHOSTNAME)
gethostname(name,nlen);
#elif defined(PETSC_HAVE_SYSINFO_3ARG)
sysinfo(SI_HOSTNAME,name,nlen);
#endif
/* if there was not enough room then system call will not null terminate name */
name[nlen-1] = 0;
/* See if this name includes the domain */
ierr = PetscStrchr(name,'.',&domain);
CHKERRQ(ierr);
if (!domain) {
size_t l,ll;
ierr = PetscStrlen(name,&l);
CHKERRQ(ierr);
if (l == nlen-1) PetscFunctionReturn(0);
name[l++] = '.';
name[l] = 0;
#if defined(PETSC_HAVE_SYSINFO_3ARG)
sysinfo(SI_SRPC_DOMAIN,name+l,nlen-l);
#elif defined(PETSC_HAVE_GETDOMAINNAME)
if (getdomainname(name+l,nlen - l)) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SYS,"getdomainname()");
#endif
/* check if domain name is not a dnsdomainname and nuke it */
ierr = PetscStrlen(name,&ll);
CHKERRQ(ierr);
if (ll > 4) {
const char *suffixes[] = {".edu",".com",".net",".org",".mil",0};
PetscInt index;
ierr = PetscStrendswithwhich(name,suffixes,&index);
CHKERRQ(ierr);
if (!suffixes[index]) {
ierr = PetscInfo1(0,"Rejecting domainname, likely is NIS %s\n",name);
CHKERRQ(ierr);
name[l-1] = 0;
}
}
}
PetscFunctionReturn(0);
}
示例4: MatLUFactorNumeric_Matlab
PetscErrorCode MatLUFactorNumeric_Matlab(Mat F,Mat A,const MatFactorInfo *info)
{
PetscErrorCode ierr;
size_t len;
char *_A,*name;
PetscReal dtcol = info->dtcol;
PetscFunctionBegin;
if (F->factortype == MAT_FACTOR_ILU || info->dt > 0) {
/* the ILU form is not currently registered */
if (info->dtcol == PETSC_DEFAULT) dtcol = .01;
F->ops->solve = MatSolve_Matlab;
F->factortype = MAT_FACTOR_LU;
ierr = PetscMatlabEnginePut(PETSC_MATLAB_ENGINE_(PetscObjectComm((PetscObject)A)),(PetscObject)A);
CHKERRQ(ierr);
_A = ((PetscObject)A)->name;
ierr = PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_(PetscObjectComm((PetscObject)A)),"info_%s = struct('droptol',%g,'thresh',%g);",_A,info->dt,dtcol);
CHKERRQ(ierr);
ierr = PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_(PetscObjectComm((PetscObject)A)),"[l_%s,u_%s,p_%s] = luinc(%s',info_%s);",_A,_A,_A,_A,_A);
CHKERRQ(ierr);
ierr = PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_(PetscObjectComm((PetscObject)A)),"%s = 0;",_A);
CHKERRQ(ierr);
ierr = PetscStrlen(_A,&len);
CHKERRQ(ierr);
ierr = PetscMalloc1(len+2,&name);
CHKERRQ(ierr);
sprintf(name,"_%s",_A);
ierr = PetscObjectSetName((PetscObject)F,name);
CHKERRQ(ierr);
ierr = PetscFree(name);
CHKERRQ(ierr);
} else {
ierr = PetscMatlabEnginePut(PETSC_MATLAB_ENGINE_(PetscObjectComm((PetscObject)A)),(PetscObject)A);
CHKERRQ(ierr);
_A = ((PetscObject)A)->name;
ierr = PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_(PetscObjectComm((PetscObject)A)),"[l_%s,u_%s,p_%s] = lu(%s',%g);",_A,_A,_A,_A,dtcol);
CHKERRQ(ierr);
ierr = PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_(PetscObjectComm((PetscObject)A)),"%s = 0;",_A);
CHKERRQ(ierr);
ierr = PetscStrlen(_A,&len);
CHKERRQ(ierr);
ierr = PetscMalloc1(len+2,&name);
CHKERRQ(ierr);
sprintf(name,"_%s",_A);
ierr = PetscObjectSetName((PetscObject)F,name);
CHKERRQ(ierr);
ierr = PetscFree(name);
CHKERRQ(ierr);
F->ops->solve = MatSolve_Matlab;
}
PetscFunctionReturn(0);
}
示例5: PetscDrawSave
/*@C
PetscDrawSetSave - Saves images produced in a PetscDraw into a file
Collective on PetscDraw
Input Parameter:
+ draw - the graphics context
. filename - name of the file, if .ext then uses name of draw object plus .ext using .ext to determine the image type
- movieext - if not NULL, produces a movie of all the images
Options Database Command:
+ -draw_save <filename> - filename could be name.ext or .ext (where .ext determines the type of graphics file to save, for example .png)
. -draw_save_movie <.ext> - saves a movie to filename.ext
. -draw_save_final_image [optional filename] - saves the final image displayed in a window
- -draw_save_single_file - saves each new image in the same file, normally each new image is saved in a new file with filename/filename_%d.ext
Level: intermediate
Concepts: X windows^graphics
Notes: You should call this BEFORE creating your image and calling PetscDrawSave().
The supported image types are .png, .gif, .jpg, and .ppm (PETSc chooses the default in that order).
Support for .png images requires configure --with-libpng.
Support for .gif images requires configure --with-giflib.
Support for .jpg images requires configure --with-libjpeg.
Support for .ppm images is built-in. The PPM format has no compression (640x480 pixels ~ 900 KiB).
The ffmpeg utility must be in your path to make the movie.
.seealso: PetscDrawSetFromOptions(), PetscDrawCreate(), PetscDrawDestroy(), PetscDrawSetSaveFinalImage()
@*/
PetscErrorCode PetscDrawSetSave(PetscDraw draw,const char filename[],const char movieext[])
{
const char *savename = NULL;
const char *imageext = NULL;
char buf[PETSC_MAX_PATH_LEN];
PetscErrorCode ierr;
PetscFunctionBegin;
PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
if (filename) PetscValidCharPointer(filename,2);
if (movieext) PetscValidCharPointer(movieext,2);
/* determine save filename and image extension */
if (filename && filename[0]) {
ierr = PetscStrchr(filename,'.',(char **)&imageext);CHKERRQ(ierr);
if (!imageext) savename = filename;
else if (imageext != filename) {
size_t l1 = 0,l2 = 0;
ierr = PetscStrlen(filename,&l1);CHKERRQ(ierr);
ierr = PetscStrlen(imageext,&l2);CHKERRQ(ierr);
ierr = PetscStrncpy(buf,filename,l1-l2+1);CHKERRQ(ierr);
savename = buf;
}
}
if (!savename) {ierr = PetscObjectGetName((PetscObject)draw,&savename);CHKERRQ(ierr);}
ierr = PetscDrawImageCheckFormat(&imageext);CHKERRQ(ierr);
if (movieext) {ierr = PetscDrawMovieCheckFormat(&movieext);CHKERRQ(ierr);}
if (movieext) draw->savesinglefile = PETSC_FALSE; /* otherwise we cannot generage movies */
if (draw->savesinglefile) {
ierr = PetscInfo2(NULL,"Will save image to file %s%s\n",savename,imageext);CHKERRQ(ierr);
} else {
ierr = PetscInfo3(NULL,"Will save images to file %s/%s_%%d%s\n",savename,savename,imageext);CHKERRQ(ierr);
}
if (movieext) {
ierr = PetscInfo2(NULL,"Will save movie to file %s%s\n",savename,movieext);CHKERRQ(ierr);
}
draw->savefilecount = 0;
ierr = PetscFree(draw->savefilename);CHKERRQ(ierr);
ierr = PetscFree(draw->saveimageext);CHKERRQ(ierr);
ierr = PetscFree(draw->savemovieext);CHKERRQ(ierr);
ierr = PetscStrallocpy(savename,&draw->savefilename);CHKERRQ(ierr);
ierr = PetscStrallocpy(imageext,&draw->saveimageext);CHKERRQ(ierr);
ierr = PetscStrallocpy(movieext,&draw->savemovieext);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例6: PetscStripTrailingZeros
/*
Removes trailing zeros
*/
PetscErrorCode PetscStripTrailingZeros(char *buf)
{
PetscErrorCode ierr;
char *found;
size_t i,n,m = PETSC_MAX_INT;
PetscFunctionBegin;
/* if there is an e in string DO NOT strip trailing zeros */
ierr = PetscStrchr(buf,'e',&found);CHKERRQ(ierr);
if (found) PetscFunctionReturn(0);
ierr = PetscStrlen(buf,&n);CHKERRQ(ierr);
/* locate decimal point */
for (i=0; i<n; i++) {
if (buf[i] == '.') {m = i; break;}
}
/* if not decimal point then no zeros to remove */
if (m == PETSC_MAX_INT) PetscFunctionReturn(0);
/* start at right end of string removing 0s */
for (i=n-1; i>m; i++) {
if (buf[i] != '0') PetscFunctionReturn(0);
buf[i] = 0;
}
PetscFunctionReturn(0);
}
示例7: PetscViewerFileSetName_MPIIO
PetscErrorCode PetscViewerFileSetName_MPIIO(PetscViewer viewer,const char name[])
{
PetscMPIInt rank;
PetscErrorCode ierr;
size_t len;
PetscViewer_Binary *vbinary = (PetscViewer_Binary*)viewer->data;
char *gz;
PetscBool found;
PetscFileMode type = vbinary->btype;
PetscFunctionBegin;
if (type == (PetscFileMode) -1) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ORDER,"Must call PetscViewerFileSetMode() before PetscViewerFileSetName()");
ierr = PetscViewerFileClose_MPIIO(viewer);CHKERRQ(ierr);
ierr = PetscOptionsGetBool(((PetscObject)viewer)->prefix,"-viewer_binary_skip_info",&vbinary->skipinfo,NULL);CHKERRQ(ierr);
ierr = PetscOptionsGetBool(((PetscObject)viewer)->prefix,"-viewer_binary_skip_options",&vbinary->skipoptions,NULL);CHKERRQ(ierr);
ierr = MPI_Comm_rank(PetscObjectComm((PetscObject)viewer),&rank);CHKERRQ(ierr);
ierr = PetscStrallocpy(name,&vbinary->filename);CHKERRQ(ierr);
vbinary->storecompressed = PETSC_FALSE;
/* only first processor opens file if writeable */
if (type == FILE_MODE_READ) {
MPI_File_open(PetscObjectComm((PetscObject)viewer),vbinary->filename,MPI_MODE_RDONLY,MPI_INFO_NULL,&vbinary->mfdes);CHKERRQ(ierr);
} else if (type == FILE_MODE_WRITE) {
MPI_File_open(PetscObjectComm((PetscObject)viewer),vbinary->filename,MPI_MODE_WRONLY | MPI_MODE_CREATE,MPI_INFO_NULL,&vbinary->mfdes);CHKERRQ(ierr);
}
/*
try to open info file: all processors open this file if read only
Below is identical code to the code for Binary above, should be put in seperate routine
*/
if (!vbinary->skipinfo && (!rank || type == FILE_MODE_READ)) {
char infoname[PETSC_MAX_PATH_LEN],iname[PETSC_MAX_PATH_LEN];
ierr = PetscStrcpy(infoname,name);CHKERRQ(ierr);
/* remove .gz if it ends library name */
ierr = PetscStrstr(infoname,".gz",&gz);CHKERRQ(ierr);
if (gz) {
ierr = PetscStrlen(gz,&len);CHKERRQ(ierr);
if (len == 3) *gz = 0;
}
ierr = PetscStrcat(infoname,".info");CHKERRQ(ierr);
ierr = PetscFixFilename(infoname,iname);CHKERRQ(ierr);
if (type == FILE_MODE_READ) {
ierr = PetscFileRetrieve(PetscObjectComm((PetscObject)viewer),iname,infoname,PETSC_MAX_PATH_LEN,&found);CHKERRQ(ierr);
ierr = PetscOptionsInsertFile(PetscObjectComm((PetscObject)viewer),infoname,PETSC_FALSE);CHKERRQ(ierr);
} else {
vbinary->fdes_info = fopen(infoname,"w");
if (!vbinary->fdes_info) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_FILE_OPEN,"Cannot open .info file %s for writing",infoname);
}
}
#if defined(PETSC_USE_LOG)
PetscLogObjectState((PetscObject)viewer,"File: %s",name);
#endif
PetscFunctionReturn(0);
}
示例8: CreateMesh
static PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *ctx, DM *dm)
{
PetscInt dim = ctx->dim;
PetscBool cellSimplex = ctx->cellSimplex;
const char *filename = ctx->filename;
const PetscInt cells[3] = {1, 1, 1};
size_t len;
PetscMPIInt rank, size;
PetscErrorCode ierr;
PetscFunctionBegin;
ierr = MPI_Comm_rank(comm, &rank);CHKERRQ(ierr);
ierr = MPI_Comm_size(comm, &size);CHKERRQ(ierr);
ierr = PetscStrlen(filename, &len);CHKERRQ(ierr);
if (len) {ierr = DMPlexCreateFromFile(comm, filename, PETSC_TRUE, dm);CHKERRQ(ierr);}
else {ierr = DMPlexCreateBoxMesh(comm, dim, cellSimplex, cells, NULL, NULL, NULL, PETSC_TRUE, dm);CHKERRQ(ierr);}
{
DM distributedMesh = NULL;
PetscPartitioner part;
ierr = DMPlexGetPartitioner(*dm, &part);CHKERRQ(ierr);
ierr = PetscPartitionerSetFromOptions(part);CHKERRQ(ierr);
/* Distribute mesh over processes */
ierr = DMPlexDistribute(*dm, 0, NULL, &distributedMesh);CHKERRQ(ierr);
if (distributedMesh) {
ierr = DMDestroy(dm);CHKERRQ(ierr);
*dm = distributedMesh;
}
}
ierr = PetscObjectSetName((PetscObject) *dm, "Mesh");CHKERRQ(ierr);
ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);
ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例9: PetscStripZerosPlus
/*
Removes the plus in something like 1.1e+2 or 1.1e+02
*/
PetscErrorCode PetscStripZerosPlus(char *buf)
{
PetscErrorCode ierr;
size_t i,j,n;
PetscFunctionBegin;
ierr = PetscStrlen(buf,&n);CHKERRQ(ierr);
if (n<5) PetscFunctionReturn(0);
for (i=1; i<n-2; i++) {
if (buf[i] == '+') {
if (buf[i+1] == '0') {
for (j=i+1; j<n; j++) buf[j-1] = buf[j+1];
PetscFunctionReturn(0);
} else {
for (j=i+1; j<n+1; j++) buf[j-1] = buf[j];
PetscFunctionReturn(0);
}
} else if (buf[i] == '-') {
if (buf[i+1] == '0') {
for (j=i+1; j<n; j++) buf[j] = buf[j+1];
PetscFunctionReturn(0);
}
}
}
PetscFunctionReturn(0);
}
示例10: mypetscvfprintf
/*@C
PetscVFPrintf - All PETSc standard out and error messages are sent through this function; so, in theory, this can
can be replaced with something that does not simply write to a file.
To use, write your own function for example,
$PetscErrorCode mypetscvfprintf(FILE *fd,const char format[],va_list Argp)
${
$ PetscErrorCode ierr;
$
$ PetscFunctionBegin;
$ if (fd != stdout && fd != stderr) { handle regular files
$ ierr = PetscVFPrintfDefault(fd,format,Argp);CHKERR(ierr);
$ } else {
$ char buff[BIG];
$ size_t length;
$ ierr = PetscVSNPrintf(buff,BIG,format,&length,Argp);CHKERRQ(ierr);
$ now send buff to whatever stream or whatever you want
$ }
$ PetscFunctionReturn(0);
$}
then before the call to PetscInitialize() do the assignment
$ PetscVFPrintf = mypetscvfprintf;
Notes: For error messages this may be called by any process, for regular standard out it is
called only by process 0 of a given communicator
Developer Notes: this could be called by an error handler, if that happens then a recursion of the error handler may occur
and a crash
Level: developer
.seealso: PetscVSNPrintf(), PetscErrorPrintf()
@*/
PetscErrorCode PetscVFPrintfDefault(FILE *fd,const char *format,va_list Argp)
{
char *newformat;
char formatbuf[8*1024];
size_t oldLength;
PetscErrorCode ierr;
PetscFunctionBegin;
ierr = PetscStrlen(format, &oldLength);CHKERRQ(ierr);
if (oldLength < 8*1024) {
newformat = formatbuf;
oldLength = 8*1024-1;
} else {
oldLength = PETSC_MAX_LENGTH_FORMAT(oldLength);
ierr = PetscMalloc(oldLength * sizeof(char), &newformat);CHKERRQ(ierr);
}
ierr = PetscFormatConvert(format,newformat,oldLength);CHKERRQ(ierr);
#if defined(PETSC_HAVE_VFPRINTF_CHAR)
vfprintf(fd,newformat,(char*)Argp);
#else
vfprintf(fd,newformat,Argp);
#endif
fflush(fd);
if (oldLength >= 8*1024) {
ierr = PetscFree(newformat);CHKERRQ(ierr);
}
PetscFunctionReturn(0);
}
示例11: PetscViewerFileSetName_VTK
PetscErrorCode PetscViewerFileSetName_VTK(PetscViewer viewer,const char name[])
{
PetscViewer_VTK *vtk = (PetscViewer_VTK*)viewer->data;
PetscErrorCode ierr;
PetscBool isvtk,isvts,isvtu,isvtr;
size_t len;
PetscFunctionBegin;
ierr = PetscViewerFlush(viewer);CHKERRQ(ierr);
ierr = PetscFree(vtk->filename);CHKERRQ(ierr);
ierr = PetscStrlen(name,&len);CHKERRQ(ierr);
ierr = PetscStrcasecmp(name+len-4,".vtk",&isvtk);CHKERRQ(ierr);
ierr = PetscStrcasecmp(name+len-4,".vts",&isvts);CHKERRQ(ierr);
ierr = PetscStrcasecmp(name+len-4,".vtu",&isvtu);CHKERRQ(ierr);
ierr = PetscStrcasecmp(name+len-4,".vtr",&isvtr);CHKERRQ(ierr);
if (isvtk) {
if (viewer->format == PETSC_VIEWER_DEFAULT) {ierr = PetscViewerSetFormat(viewer,PETSC_VIEWER_ASCII_VTK);CHKERRQ(ierr);}
if (viewer->format != PETSC_VIEWER_ASCII_VTK) SETERRQ2(PetscObjectComm((PetscObject)viewer),PETSC_ERR_ARG_INCOMP,"Cannot use file '%s' with format %s, should have '.vtk' extension",name,PetscViewerFormats[viewer->format]);
} else if (isvts) {
if (viewer->format == PETSC_VIEWER_DEFAULT) {ierr = PetscViewerSetFormat(viewer,PETSC_VIEWER_VTK_VTS);CHKERRQ(ierr);}
if (viewer->format != PETSC_VIEWER_VTK_VTS) SETERRQ2(PetscObjectComm((PetscObject)viewer),PETSC_ERR_ARG_INCOMP,"Cannot use file '%s' with format %s, should have '.vts' extension",name,PetscViewerFormats[viewer->format]);
} else if (isvtu) {
if (viewer->format == PETSC_VIEWER_DEFAULT) {ierr = PetscViewerSetFormat(viewer,PETSC_VIEWER_VTK_VTU);CHKERRQ(ierr);}
if (viewer->format != PETSC_VIEWER_VTK_VTU) SETERRQ2(PetscObjectComm((PetscObject)viewer),PETSC_ERR_ARG_INCOMP,"Cannot use file '%s' with format %s, should have '.vtu' extension",name,PetscViewerFormats[viewer->format]);
} else if (isvtr) {
if (viewer->format == PETSC_VIEWER_DEFAULT) {ierr = PetscViewerSetFormat(viewer,PETSC_VIEWER_VTK_VTR);CHKERRQ(ierr);}
if (viewer->format != PETSC_VIEWER_VTK_VTR) SETERRQ2(PetscObjectComm((PetscObject)viewer),PETSC_ERR_ARG_INCOMP,"Cannot use file '%s' with format %s, should have '.vtr' extension",name,PetscViewerFormats[viewer->format]);
} else SETERRQ1(PetscObjectComm((PetscObject)viewer),PETSC_ERR_ARG_UNKNOWN_TYPE,"File '%s' has unrecognized extension",name);
ierr = PetscStrallocpy(name,&vtk->filename);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例12: CreateMesh
PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *user, DM *dm)
{
const char *filename = user->filename;
PetscInt dim = user->dim;
size_t len;
PetscErrorCode ierr;
PetscFunctionBegin;
ierr = PetscStrlen(filename, &len);CHKERRQ(ierr);
if (!len) {ierr = DMPlexCreateBoxMesh(comm, dim, PETSC_TRUE, dm);CHKERRQ(ierr);}
else {ierr = DMPlexCreateFromFile(comm, filename, PETSC_TRUE, dm);CHKERRQ(ierr);}
ierr = DMViewFromOptions(*dm, NULL, "-orig_dm_view");CHKERRQ(ierr);
{
DM distributedMesh = NULL;
ierr = DMPlexDistribute(*dm, 0, NULL, &distributedMesh);CHKERRQ(ierr);
if (distributedMesh) {
ierr = DMDestroy(dm);CHKERRQ(ierr);
*dm = distributedMesh;
ierr = DMViewFromOptions(*dm, NULL, "-dist_dm_view");CHKERRQ(ierr);
}
}
ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);
if (user->uninterpolate) {
DM udm = NULL;
ierr = DMPlexUninterpolate(*dm, &udm);CHKERRQ(ierr);
ierr = DMDestroy(dm);CHKERRQ(ierr);
*dm = udm;
ierr = DMViewFromOptions(*dm, NULL, "-un_dm_view");CHKERRQ(ierr);
}
ierr = PetscObjectSetName((PetscObject) *dm, "Test Mesh");CHKERRQ(ierr);
ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例13: PetscDrawSave_SAWs
static PetscErrorCode PetscDrawSave_SAWs(PetscDraw draw)
{
PetscImageList image;
char body[4096];
size_t len = 0;
PetscErrorCode ierr;
PetscFunctionBegin;
if (!draw->savefilename) PetscFunctionReturn(0);
ierr = PetscImageListAdd(draw->savefilename,draw->saveimageext,draw->savefilecount-1);CHKERRQ(ierr);
image = SAWs_images;
while (image) {
const char *name = image->filename;
const char *ext = image->ext;
if (draw->savesinglefile) {
ierr = PetscSNPrintf(body+len,4086-len,"<img src=\"%s%s\" alt=\"None\">",name,ext);CHKERRQ(ierr);
} else {
ierr = PetscSNPrintf(body+len,4086-len,"<img src=\"%s/%s_%d%s\" alt=\"None\">",name,name,image->count,ext);CHKERRQ(ierr);
}
ierr = PetscStrlen(body,&len);CHKERRQ(ierr);
image = image->next;
}
ierr = PetscStrcat(body,"<br>\n");CHKERRQ(ierr);
if (draw->savefilecount > 0) PetscStackCallSAWs(SAWs_Pop_Body,("index.html",1));
PetscStackCallSAWs(SAWs_Push_Body,("index.html",1,body));
PetscFunctionReturn(0);
}
示例14: PetscLs
PetscErrorCode PetscLs(MPI_Comm comm,const char libname[],char found[],size_t tlen,PetscBool *flg)
{
PetscErrorCode ierr;
size_t len;
char *f,program[PETSC_MAX_PATH_LEN];
FILE *fp;
PetscFunctionBegin;
ierr = PetscStrcpy(program,"ls ");CHKERRQ(ierr);
ierr = PetscStrcat(program,libname);CHKERRQ(ierr);
#if defined(PETSC_HAVE_POPEN)
ierr = PetscPOpen(comm,PETSC_NULL,program,"r",&fp);CHKERRQ(ierr);
#else
SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP_SYS,"Cannot run external programs on this machine");
#endif
f = fgets(found,tlen,fp);
if (f) *flg = PETSC_TRUE; else *flg = PETSC_FALSE;
while (f) {
ierr = PetscStrlen(found,&len);CHKERRQ(ierr);
f = fgets(found+len,tlen-len,fp);
}
if (*flg) {ierr = PetscInfo2(0,"ls on %s gives \n%s\n",libname,found);CHKERRQ(ierr);}
#if defined(PETSC_HAVE_POPEN)
ierr = PetscPClose(comm,fp);CHKERRQ(ierr);
#else
SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP_SYS,"Cannot run external programs on this machine");
#endif
PetscFunctionReturn(0);
}
示例15: PetscViewer
/*@C
PetscViewerStringSPrintf - Prints information to a PetscViewer string.
Logically Collective on PetscViewer (Hmmm, each processor maintains a separate string)
Input Parameters:
+ v - a string PetscViewer, formed by PetscViewerStringOpen()
- format - the format of the input
Level: developer
Fortran Note:
This routine is not supported in Fortran.
Concepts: printing^to string
.seealso: PetscViewerStringOpen(), PetscViewerStringGetStringRead(), PetscViewerStringSetString(), PETSCVIEWERSTRING
@*/
PetscErrorCode PetscViewerStringSPrintf(PetscViewer viewer,const char format[],...)
{
va_list Argp;
size_t fullLength;
size_t shift,cshift;
PetscErrorCode ierr;
PetscBool isstring;
char tmp[4096];
PetscViewer_String *vstr = (PetscViewer_String*)viewer->data;
PetscFunctionBegin;
PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,1);
PetscValidCharPointer(format,2);
ierr = PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERSTRING,&isstring);CHKERRQ(ierr);
if (!isstring) PetscFunctionReturn(0);
if (!vstr->string) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ORDER,"Must call PetscViewerStringSetString() before using");
va_start(Argp,format);
ierr = PetscVSNPrintf(tmp,4096,format,&fullLength,Argp);CHKERRQ(ierr);
va_end(Argp);
ierr = PetscStrlen(tmp,&shift);CHKERRQ(ierr);
cshift = shift+1;
if (cshift >= vstr->maxlen - vstr->curlen - 1) cshift = vstr->maxlen - vstr->curlen - 1;
ierr = PetscStrncpy(vstr->head,tmp,cshift);CHKERRQ(ierr);
vstr->head += shift;
vstr->curlen += shift;
PetscFunctionReturn(0);
}