本文整理汇总了C++中PetscStrncpy函数的典型用法代码示例。如果您正苦于以下问题:C++ PetscStrncpy函数的具体用法?C++ PetscStrncpy怎么用?C++ PetscStrncpy使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了PetscStrncpy函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: PetscBagSetName
PetscErrorCode PetscBagSetName(PetscBag bag, const char *name, const char *help)
{
PetscErrorCode ierr;
PetscFunctionBegin;
ierr = PetscStrncpy(bag->bagname,name,PETSC_BAG_NAME_LENGTH-1);CHKERRQ(ierr);
ierr = PetscStrncpy(bag->baghelp,help,PETSC_BAG_HELP_LENGTH-1);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例2: PetscGetHostName
/*@C
PetscGetUserName - Returns the name of the user.
Not Collective
Input Parameter:
nlen - length of name
Output Parameter:
. name - contains user name. Must be long enough to hold the name
Level: developer
Concepts: user name
.seealso: PetscGetHostName()
@*/
PetscErrorCode PetscGetUserName(char name[],size_t nlen)
{
struct passwd *pw=0;
PetscErrorCode ierr;
PetscFunctionBegin;
#if defined(PETSC_HAVE_GETPWUID)
pw = getpwuid(getuid());
#endif
if (!pw) {ierr = PetscStrncpy(name,"Unknown",nlen);CHKERRQ(ierr);}
else {ierr = PetscStrncpy(name,pw->pw_name,nlen);CHKERRQ(ierr);}
PetscFunctionReturn(0);
}
示例3: TSAdaptView
PetscErrorCode TSAdaptView(TSAdapt adapt,PetscViewer viewer)
{
PetscErrorCode ierr;
PetscBool iascii,isbinary;
PetscFunctionBegin;
PetscValidHeaderSpecific(adapt,TSADAPT_CLASSID,1);
if (!viewer) {ierr = PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)adapt),&viewer);CHKERRQ(ierr);}
PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,2);
PetscCheckSameComm(adapt,1,viewer,2);
ierr = PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&iascii);CHKERRQ(ierr);
ierr = PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERBINARY,&isbinary);CHKERRQ(ierr);
if (iascii) {
ierr = PetscObjectPrintClassNamePrefixType((PetscObject)adapt,viewer);CHKERRQ(ierr);
ierr = PetscViewerASCIIPrintf(viewer," number of candidates %D\n",adapt->candidates.n);CHKERRQ(ierr);
if (adapt->ops->view) {
ierr = PetscViewerASCIIPushTab(viewer);CHKERRQ(ierr);
ierr = (*adapt->ops->view)(adapt,viewer);CHKERRQ(ierr);
ierr = PetscViewerASCIIPopTab(viewer);CHKERRQ(ierr);
}
} else if (isbinary) {
char type[256];
/* need to save FILE_CLASS_ID for adapt class */
ierr = PetscStrncpy(type,((PetscObject)adapt)->type_name,256);CHKERRQ(ierr);
ierr = PetscViewerBinaryWrite(viewer,type,256,PETSC_CHAR,PETSC_FALSE);CHKERRQ(ierr);
} else if (adapt->ops->view) {
ierr = (*adapt->ops->view)(adapt,viewer);CHKERRQ(ierr);
}
PetscFunctionReturn(0);
}
示例4: ProcessOptions
static PetscErrorCode ProcessOptions(MPI_Comm comm, AppCtx *options)
{
PetscInt n = 3, sol;
PetscErrorCode ierr;
PetscFunctionBeginUser;
options->dim = 2;
options->cells[0] = 1;
options->cells[1] = 1;
options->cells[2] = 1;
options->simplex = PETSC_TRUE;
options->solType = SOL_VLAP_QUADRATIC;
options->useNearNullspace = PETSC_TRUE;
ierr = PetscStrncpy(options->dmType, DMPLEX, 256);CHKERRQ(ierr);
ierr = PetscOptionsBegin(comm, "", "Linear Elasticity Problem Options", "DMPLEX");CHKERRQ(ierr);
ierr = PetscOptionsInt("-dim", "The topological mesh dimension", "ex17.c", options->dim, &options->dim, NULL);CHKERRQ(ierr);
ierr = PetscOptionsIntArray("-cells", "The initial mesh division", "ex17.c", options->cells, &n, NULL);CHKERRQ(ierr);
ierr = PetscOptionsBool("-simplex", "Simplicial (true) or tensor (false) mesh", "ex17.c", options->simplex, &options->simplex, NULL);CHKERRQ(ierr);
sol = options->solType;
ierr = PetscOptionsEList("-sol_type", "Type of exact solution", "ex17.c", solutionTypes, NUM_SOLUTION_TYPES, solutionTypes[options->solType], &sol, NULL);CHKERRQ(ierr);
options->solType = (SolutionType) sol;
ierr = PetscOptionsBool("-near_nullspace", "Use the rigid body modes as an AMG near nullspace", "ex17.c", options->useNearNullspace, &options->useNearNullspace, NULL);CHKERRQ(ierr);
ierr = PetscOptionsFList("-dm_type", "Convert DMPlex to another format", "ex17.c", DMList, options->dmType, options->dmType, 256, NULL);CHKERRQ(ierr);
ierr = PetscOptionsEnd();
PetscFunctionReturn(0);
}
示例5: norm
/*@C
KSPMonitorTrueResidualMaxNorm - Prints the true residual max norm as well as the preconditioned
residual norm at each iteration of an iterative solver.
Collective on KSP
Input Parameters:
+ ksp - iterative context
. n - iteration number
. rnorm - norm (preconditioned) residual value (may be estimated).
- dummy - an ASCII viewer
Options Database Key:
. -ksp_monitor_max - Activates KSPMonitorTrueResidualMaxNorm()
Notes:
This could be implemented (better) with a flag in ksp.
Level: intermediate
.keywords: KSP, default, monitor, residual
.seealso: KSPMonitorSet(), KSPMonitorDefault(), KSPMonitorLGResidualNormCreate(),KSPMonitorTrueResidualNorm()
@*/
PetscErrorCode KSPMonitorTrueResidualMaxNorm(KSP ksp,PetscInt n,PetscReal rnorm,void *dummy)
{
PetscErrorCode ierr;
Vec resid;
PetscReal truenorm,bnorm;
PetscViewer viewer = (PetscViewer)dummy;
char normtype[256];
PetscFunctionBegin;
PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,4);
ierr = PetscViewerASCIIAddTab(viewer,((PetscObject)ksp)->tablevel);CHKERRQ(ierr);
if (n == 0 && ((PetscObject)ksp)->prefix) {
ierr = PetscViewerASCIIPrintf(viewer," Residual norms (max) for %s solve.\n",((PetscObject)ksp)->prefix);CHKERRQ(ierr);
}
ierr = KSPBuildResidual(ksp,NULL,NULL,&resid);CHKERRQ(ierr);
ierr = VecNorm(resid,NORM_INFINITY,&truenorm);CHKERRQ(ierr);
ierr = VecDestroy(&resid);CHKERRQ(ierr);
ierr = VecNorm(ksp->vec_rhs,NORM_INFINITY,&bnorm);CHKERRQ(ierr);
ierr = PetscStrncpy(normtype,KSPNormTypes[ksp->normtype],sizeof(normtype));CHKERRQ(ierr);
ierr = PetscStrtolower(normtype);CHKERRQ(ierr);
/* ierr = PetscViewerASCIIPrintf(viewer,"%3D KSP %s resid norm %14.12e true resid norm %14.12e ||r(i)||_inf/||b||_inf %14.12e\n",n,normtype,(double)rnorm,(double)truenorm,(double)(truenorm/bnorm));CHKERRQ(ierr); */
ierr = PetscViewerASCIIPrintf(viewer,"%3D KSP true resid max norm %14.12e ||r(i)||/||b|| %14.12e\n",n,(double)truenorm,(double)(truenorm/bnorm));CHKERRQ(ierr);
ierr = PetscViewerASCIISubtractTab(viewer,((PetscObject)ksp)->tablevel);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例6: PetscLogEventBeginTrace
PetscErrorCode PetscLogEventBeginTrace(PetscLogEvent event, int t, PetscObject o1, PetscObject o2, PetscObject o3, PetscObject o4)
{
PetscStageLog stageLog;
PetscEventRegLog eventRegLog;
PetscEventPerfLog eventPerfLog = NULL;
PetscLogDouble cur_time;
PetscMPIInt rank;
int stage,err;
PetscErrorCode ierr;
PetscFunctionBegin;
if (!petsc_tracetime) PetscTime(&petsc_tracetime);
ierr = MPI_Comm_rank(PETSC_COMM_WORLD, &rank);CHKERRQ(ierr);
ierr = PetscLogGetStageLog(&stageLog);CHKERRQ(ierr);
ierr = PetscStageLogGetCurrent(stageLog, &stage);CHKERRQ(ierr);
ierr = PetscStageLogGetEventRegLog(stageLog, &eventRegLog);CHKERRQ(ierr);
ierr = PetscStageLogGetEventPerfLog(stageLog, stage, &eventPerfLog);CHKERRQ(ierr);
/* Check for double counting */
eventPerfLog->eventInfo[event].depth++;
petsc_tracelevel++;
if (eventPerfLog->eventInfo[event].depth > 1) PetscFunctionReturn(0);
/* Log performance info */
PetscTime(&cur_time);
ierr = PetscFPrintf(PETSC_COMM_SELF,petsc_tracefile, "%s[%d] %g Event begin: %s\n", petsc_tracespace, rank, cur_time-petsc_tracetime, eventRegLog->eventInfo[event].name);CHKERRQ(ierr);
ierr = PetscStrncpy(petsc_tracespace, petsc_traceblanks, 2*petsc_tracelevel);CHKERRQ(ierr);
petsc_tracespace[2*petsc_tracelevel] = 0;
err = fflush(petsc_tracefile);
if (err) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SYS,"fflush() failed on file");
PetscFunctionReturn(0);
}
示例7: value
/*@C
KSPMonitorTrueResidualNorm - Prints the true residual norm as well as the preconditioned
residual norm at each iteration of an iterative solver.
Collective on KSP
Input Parameters:
+ ksp - iterative context
. n - iteration number
. rnorm - 2-norm (preconditioned) residual value (may be estimated).
- dummy - unused monitor context
Options Database Key:
. -ksp_monitor_true_residual - Activates KSPMonitorTrueResidualNorm()
Notes:
When using right preconditioning, these values are equivalent.
Level: intermediate
.keywords: KSP, default, monitor, residual
.seealso: KSPMonitorSet(), KSPMonitorDefault(), KSPMonitorLGResidualNormCreate(),KSPMonitorTrueResidualMaxNorm()
@*/
PetscErrorCode KSPMonitorTrueResidualNorm(KSP ksp,PetscInt n,PetscReal rnorm,void *dummy)
{
PetscErrorCode ierr;
Vec resid;
PetscReal truenorm,bnorm;
PetscViewer viewer = (PetscViewer)dummy;
char normtype[256];
PetscFunctionBegin;
if (!viewer) {
ierr = PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)ksp),&viewer);CHKERRQ(ierr);
}
ierr = PetscViewerASCIIAddTab(viewer,((PetscObject)ksp)->tablevel);CHKERRQ(ierr);
if (n == 0 && ((PetscObject)ksp)->prefix) {
ierr = PetscViewerASCIIPrintf(viewer," Residual norms for %s solve.\n",((PetscObject)ksp)->prefix);CHKERRQ(ierr);
}
ierr = KSPBuildResidual(ksp,NULL,NULL,&resid);CHKERRQ(ierr);
ierr = VecNorm(resid,NORM_2,&truenorm);CHKERRQ(ierr);
ierr = VecDestroy(&resid);CHKERRQ(ierr);
ierr = VecNorm(ksp->vec_rhs,NORM_2,&bnorm);CHKERRQ(ierr);
ierr = PetscStrncpy(normtype,KSPNormTypes[ksp->normtype],sizeof(normtype));CHKERRQ(ierr);
ierr = PetscStrtolower(normtype);CHKERRQ(ierr);
ierr = PetscViewerASCIIPrintf(viewer,"%3D KSP %s resid norm %14.12e true resid norm %14.12e ||r(i)||/||b|| %14.12e\n",n,normtype,(double)rnorm,(double)truenorm,(double)(truenorm/bnorm));CHKERRQ(ierr);
ierr = PetscViewerASCIISubtractTab(viewer,((PetscObject)ksp)->tablevel);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例8: SNESSetFromOptions_MS
static PetscErrorCode SNESSetFromOptions_MS(SNES snes)
{
SNES_MS *ms = (SNES_MS*)snes->data;
PetscErrorCode ierr;
PetscFunctionBegin;
ierr = PetscOptionsHead("SNES MS options");CHKERRQ(ierr);
{
SNESMSTableauLink link;
PetscInt count,choice;
PetscBool flg;
const char **namelist;
char mstype[256];
ierr = PetscStrncpy(mstype,SNESMSDefault,sizeof mstype);CHKERRQ(ierr);
for (link=SNESMSTableauList,count=0; link; link=link->next,count++) ;
ierr = PetscMalloc(count*sizeof(char*),&namelist);CHKERRQ(ierr);
for (link=SNESMSTableauList,count=0; link; link=link->next,count++) namelist[count] = link->tab.name;
ierr = PetscOptionsEList("-snes_ms_type","Multistage smoother type","SNESMSSetType",(const char*const*)namelist,count,mstype,&choice,&flg);CHKERRQ(ierr);
ierr = SNESMSSetType(snes,flg ? namelist[choice] : mstype);CHKERRQ(ierr);
ierr = PetscFree(namelist);CHKERRQ(ierr);
ierr = PetscOptionsReal("-snes_ms_damping","Damping for multistage method","SNESMSSetDamping",ms->damping,&ms->damping,PETSC_NULL);CHKERRQ(ierr);
ierr = PetscOptionsBool("-snes_ms_norms","Compute norms for monitoring","none",ms->norms,&ms->norms,PETSC_NULL);CHKERRQ(ierr);
}
ierr = PetscOptionsTail();CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例9: 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);
}
示例10: PetscBagSetName
/*@C
PetscBagRegisterString - add a string value to the bag
Logically Collective on PetscBag
Input Parameter:
+ bag - the bag of values
. addr - location of start of string in struct
. msize - length of the string space in the struct
. mdefault - the initial value
. name - name of the string
- help - longer string with more information about the value
Level: beginner
Note: The struct should have the field char mystring[msize]; not char *mystring
.seealso: PetscBag, PetscBagSetName(), PetscBagView(), PetscBagLoad(), PetscBagGetData()
PetscBagRegisterInt(), PetscBagRegisterBool(), PetscBagRegisterScalar()
PetscBagSetFromOptions(),PetscBagCreate(), PetscBagGetName(), PetscBagRegisterEnum()
@*/
PetscErrorCode PetscBagRegisterString(PetscBag bag,void *addr,PetscInt msize,const char* mdefault,const char* name,const char* help)
{
PetscErrorCode ierr;
PetscBagItem item;
char nname[PETSC_BAG_NAME_LENGTH+1];
PetscBool printhelp;
PetscFunctionBegin;
nname[0] = '-';
nname[1] = 0;
ierr = PetscStrncat(nname,name,PETSC_BAG_NAME_LENGTH-1);CHKERRQ(ierr);
ierr = PetscOptionsHasName(NULL,"-help",&printhelp);CHKERRQ(ierr);
if (printhelp) {
ierr = (*PetscHelpPrintf)(bag->bagcomm," -%s%s <%s>: %s \n",bag->bagprefix ? bag->bagprefix : "",name,mdefault,help);CHKERRQ(ierr);
}
ierr = PetscNew(&item);CHKERRQ(ierr);
item->dtype = PETSC_CHAR;
item->offset = ((char*)addr) - ((char*)bag);
if (item->offset > bag->bagsize) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Registered item %s %s is not in bag memory space",name,help);
item->next = 0;
item->msize = msize;
if (mdefault != (char*)addr) {
ierr = PetscStrncpy((char*)addr,mdefault,msize-1);CHKERRQ(ierr);
}
ierr = PetscOptionsGetString(bag->bagprefix,nname,(char*)addr,msize,NULL);CHKERRQ(ierr);
ierr = PetscBagRegister_Private(bag,item,name,help);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例11: main
int main(int argc, char **argv)
{
DM dm;
char typeString[256] = {'\0'};
PetscViewer viewer = NULL;
PetscBool flg;
PetscErrorCode ierr;
ierr = PetscInitialize(&argc, &argv, NULL,help);if (ierr) return ierr;
ierr = DMCreate(PETSC_COMM_WORLD, &dm);CHKERRQ(ierr);
ierr = PetscStrncpy(typeString,DMFOREST,256);CHKERRQ(ierr);
ierr = PetscOptionsBegin(PETSC_COMM_WORLD,NULL,"DM Forest example options",NULL);CHKERRQ(ierr);
ierr = PetscOptionsString("-dm_type","The type of the dm",NULL,DMFOREST,typeString,sizeof(typeString),NULL);CHKERRQ(ierr);
ierr = PetscOptionsEnd();CHKERRQ(ierr);
ierr = DMSetType(dm,(DMType) typeString);CHKERRQ(ierr);
ierr = DMSetFromOptions(dm);CHKERRQ(ierr);
ierr = DMSetUp(dm);CHKERRQ(ierr);
ierr = PetscOptionsGetViewer(PETSC_COMM_WORLD,NULL,"-dm_view",&viewer,NULL,&flg);CHKERRQ(ierr);
if (flg) {
ierr = DMView(dm,viewer);CHKERRQ(ierr);
}
ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr);
ierr = DMDestroy(&dm);CHKERRQ(ierr);
ierr = PetscFinalize();
return ierr;
}
示例12: PCBDDCScalingSetUp_Deluxe_Private
static PetscErrorCode PCBDDCScalingSetUp_Deluxe_Private(PC pc)
{
PC_BDDC *pcbddc=(PC_BDDC*)pc->data;
PCBDDCDeluxeScaling deluxe_ctx=pcbddc->deluxe_ctx;
PCBDDCSubSchurs sub_schurs = pcbddc->sub_schurs;
PetscErrorCode ierr;
PetscFunctionBegin;
if (!sub_schurs->n_subs) {
PetscFunctionReturn(0);
}
/* Create work vectors for sequential part of deluxe */
ierr = MatCreateVecs(sub_schurs->S_Ej_all,&deluxe_ctx->seq_work1,&deluxe_ctx->seq_work2);CHKERRQ(ierr);
/* Compute deluxe sequential scatter */
if (sub_schurs->reuse_mumps && !sub_schurs->is_dir) {
PCBDDCReuseMumps reuse_mumps = sub_schurs->reuse_mumps;
ierr = PetscObjectReference((PetscObject)reuse_mumps->correction_scatter_B);CHKERRQ(ierr);
deluxe_ctx->seq_scctx = reuse_mumps->correction_scatter_B;
} else {
ierr = VecScatterCreate(pcbddc->work_scaling,sub_schurs->is_Ej_all,deluxe_ctx->seq_work1,NULL,&deluxe_ctx->seq_scctx);CHKERRQ(ierr);
}
/* Create Mat object for deluxe scaling */
ierr = PetscObjectReference((PetscObject)sub_schurs->S_Ej_all);CHKERRQ(ierr);
deluxe_ctx->seq_mat = sub_schurs->S_Ej_all;
if (sub_schurs->sum_S_Ej_all) { /* if this matrix is present, then we need to create the KSP object to invert it */
PC pc_temp;
MatSolverPackage solver=NULL;
char ksp_prefix[256];
size_t len;
ierr = KSPCreate(PETSC_COMM_SELF,&deluxe_ctx->seq_ksp);CHKERRQ(ierr);
ierr = KSPSetOperators(deluxe_ctx->seq_ksp,sub_schurs->sum_S_Ej_all,sub_schurs->sum_S_Ej_all);CHKERRQ(ierr);
ierr = KSPSetType(deluxe_ctx->seq_ksp,KSPPREONLY);CHKERRQ(ierr);
ierr = KSPGetPC(deluxe_ctx->seq_ksp,&pc_temp);CHKERRQ(ierr);
ierr = PCSetType(pc_temp,PCLU);CHKERRQ(ierr);
ierr = KSPGetPC(pcbddc->ksp_D,&pc_temp);CHKERRQ(ierr);
ierr = PCFactorGetMatSolverPackage(pc_temp,(const MatSolverPackage*)&solver);CHKERRQ(ierr);
if (solver) {
PC new_pc;
PCType type;
ierr = PCGetType(pc_temp,&type);CHKERRQ(ierr);
ierr = KSPGetPC(deluxe_ctx->seq_ksp,&new_pc);CHKERRQ(ierr);
ierr = PCSetType(new_pc,type);CHKERRQ(ierr);
ierr = PCFactorSetMatSolverPackage(new_pc,solver);CHKERRQ(ierr);
}
ierr = PetscStrlen(((PetscObject)(pcbddc->ksp_D))->prefix,&len);CHKERRQ(ierr);
len -= 10; /* remove "dirichlet_" */
ierr = PetscStrncpy(ksp_prefix,((PetscObject)(pcbddc->ksp_D))->prefix,len+1);CHKERRQ(ierr);
ierr = PetscStrcat(ksp_prefix,"deluxe_");CHKERRQ(ierr);
ierr = KSPSetOptionsPrefix(deluxe_ctx->seq_ksp,ksp_prefix);CHKERRQ(ierr);
ierr = KSPSetFromOptions(deluxe_ctx->seq_ksp);CHKERRQ(ierr);
ierr = KSPSetUp(deluxe_ctx->seq_ksp);CHKERRQ(ierr);
}
PetscFunctionReturn(0);
}
示例13: PetscGetUserName
PetscErrorCode PetscGetUserName(char *name,size_t nlen)
{
PetscErrorCode ierr;
PetscFunctionBegin;
ierr = PetscStrncpy(name,"Unknown",nlen);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例14: 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);
}
示例15: MatPartitioningPartySetGlobal_Party
PetscErrorCode MatPartitioningPartySetGlobal_Party(MatPartitioning part,const char *global)
{
MatPartitioning_Party *party = (MatPartitioning_Party*)part->data;
PetscErrorCode ierr;
PetscFunctionBegin;
ierr = PetscStrncpy(party->global,global,15);CHKERRQ(ierr);
PetscFunctionReturn(0);
}