int BSSCR_create_execute_script( void ) { int argc; char **args; int i; PetscViewer viewer, viewer_dated; time_t currTime; struct tm* timeInfo; int adjustedYear; int adjustedMonth; char *filename; /* get file name with date */ currTime = time( NULL ); timeInfo = localtime( &currTime ); /* See man localtime() for why to adjust these */ adjustedYear = 1900 + timeInfo->tm_year; adjustedMonth = 1 + timeInfo->tm_mon; /* Format; name-YYYY.MM.DD-HH.MM.SS.sh */ asprintf( &filename, "%s-%.4d.%.2d.%.2d-%.2d.%.2d.%.2d.%s", "execute-job", adjustedYear, adjustedMonth, timeInfo->tm_mday, timeInfo->tm_hour, timeInfo->tm_min, timeInfo->tm_sec , "sh" ); PetscViewerASCIIOpen( PETSC_COMM_SELF, filename, &viewer_dated ); /* get file name without */ PetscViewerASCIIOpen( PETSC_COMM_SELF, "execute-job.sh", &viewer ); /* ouput what the command line arguments were */ PetscGetArgs( &argc, &args ); for( i=0; i<argc; i++ ) { PetscViewerASCIIPrintf( viewer, "%s ", args[i] ); PetscViewerASCIIPrintf( viewer_dated, "%s ", args[i] ); } Stg_PetscViewerDestroy(&viewer); Stg_PetscViewerDestroy(&viewer_dated); free( filename ); return 0; }
/*@C PetscPythonInitialize - Initialize Python and import petsc4py. Input Parameter: + pyexe - path to the Python interpreter executable, or PETSC_NULL. - pylib - full path to the Python dynamic library, or PETSC_NULL. Level: intermediate .keywords: Python @*/ PetscErrorCode PETSC_DLLEXPORT PetscPythonInitialize(const char pyexe[],const char pylib[]) { int argc = 0; char **argv = 0; PyObject *module = 0; static PetscTruth registered = PETSC_FALSE; PetscErrorCode ierr; PetscFunctionBegin; if (PetscBeganPython) PetscFunctionReturn(0); /* Python executable */ if (pyexe && pyexe[0] != 0) { ierr = PetscStrncpy(PetscPythonExe,pyexe,sizeof(PetscPythonExe));CHKERRQ(ierr); } else { ierr = PetscPythonFindExecutable(PetscPythonExe);CHKERRQ(ierr); } /* Python dynamic library */ if (pylib && pylib[0] != 0) { ierr = PetscStrncpy(PetscPythonLib,pylib,sizeof(PetscPythonLib));CHKERRQ(ierr); } else { ierr = PetscPythonFindLibrary(PetscPythonExe,PetscPythonLib);CHKERRQ(ierr); } /* dynamically load Python library */ ierr = PetscPythonLoadLibrary(PetscPythonLib);CHKERRQ(ierr); /* initialize Python */ PetscBeganPython = PETSC_FALSE; if (!Py_IsInitialized()) { /* call below does not install signal handlers */ Py_InitializeEx(0); /* call below required to build 'sys.argv' list */ ierr = PetscGetArgs(&argc,&argv);CHKERRQ(ierr); if (argc && argv && argv[0]) PySys_SetArgv(argc,argv); /* register finalizer */ if (!registered) { ierr = PetscRegisterFinalize(PetscPythonFinalize);CHKERRQ(ierr); registered = PETSC_TRUE; } PetscBeganPython = PETSC_TRUE; } /* import 'petsc4py.PETSc' module */ module = PyImport_ImportModule("petsc4py.PETSc"); if (module) { ierr = PetscInfo(0,"Python: successfully imported module 'petsc4py.PETSc'\n");CHKERRQ(ierr); Py_DecRef(module); module = 0; } else { SETERRQ(PETSC_ERR_PLIB,"Python: could not import module 'petsc4py.PETSc', perhaps your PYTHONPATH does not contain it\n"); } PetscFunctionReturn(0); }
void petscSetOptions(FEProblem & problem) { // Reference to the options stored in FEPRoblem PetscOptions & petsc = problem.getPetscOptions(); if (petsc.inames.size() != petsc.values.size()) mooseError("PETSc names and options are not the same length"); PetscOptionsClear(); { // Get any options specified on the command-line int argc; char ** args; PetscGetArgs(&argc, &args); PetscOptionsInsert(&argc, &args, NULL); } setSolverOptions(problem.solverParams()); // Add any additional options specified in the input file for (MooseEnumIterator it = petsc.flags.begin(); it != petsc.flags.end(); ++it) PetscOptionsSetValue(it->c_str(), PETSC_NULL); for (unsigned int i=0; i<petsc.inames.size(); ++i) PetscOptionsSetValue(petsc.inames[i].c_str(), petsc.values[i].c_str()); SolverParams& solver_params = problem.solverParams(); if (solver_params._type != Moose::ST_JFNK && solver_params._type != Moose::ST_FD && !problem.getNonlinearSystem().haveFiniteDifferencedPreconditioner() && problem.getNonlinearSystem().haveDecomposition()) { // Set up DM only if have a decomposition. Additionally, turn DM OFF if not using FD-based solvers, // (both -snes_mf and -snes_fd) and FDP. This is all rather crufty, but what's a good generic rule here? // In principle at least, splits should be able to work with ST_FD (-snes_fd) and FDP (a coloring-based // version of -snes_fd), but one has to be careful about the initialization order so as not to override // SNESComputeJacobianDefaultColor() set up by FDP, for instance. However, it's unlikely that splits // will be used when running an FD solver (debugging). problem.getNonlinearSystem().setupDecomposition(); petscSetupDM(problem.getNonlinearSystem()); } else { // Otherwise turn off the decomposition std::vector<std::string> nosplits; problem.getNonlinearSystem().setDecomposition(nosplits); } }
void petscSetOptions(FEProblem & problem) { // Reference to the options stored in FEPRoblem PetscOptions & petsc = problem.getPetscOptions(); if (petsc.inames.size() != petsc.values.size()) mooseError("PETSc names and options are not the same length"); #if PETSC_VERSION_LESS_THAN(3,7,0) PetscOptionsClear(); #else PetscOptionsClear(PETSC_NULL); #endif setSolverOptions(problem.solverParams()); // Add any additional options specified in the input file for (const auto & flag : petsc.flags) setSinglePetscOption(flag.c_str()); for (unsigned int i=0; i<petsc.inames.size(); ++i) setSinglePetscOption(petsc.inames[i], petsc.values[i]); // set up DM which is required if use a field split preconditioner if (problem.getNonlinearSystem().haveFieldSplitPreconditioner()) petscSetupDM(problem.getNonlinearSystem()); // commandline options always win // the options from a user commandline will overwrite the existing ones if any conflicts { // Get any options specified on the command-line int argc; char ** args; PetscGetArgs(&argc, &args); #if PETSC_VERSION_LESS_THAN(3,7,0) PetscOptionsInsert(&argc, &args, NULL); #else PetscOptionsInsert(PETSC_NULL, &argc, &args, NULL); #endif } }
/*@C PetscPythonInitialize - Initialize Python and import petsc4py. Input Parameter: + pyexe - path to the Python interpreter executable, or NULL. - pylib - full path to the Python dynamic library, or NULL. Level: intermediate .keywords: Python @*/ PetscErrorCode PetscPythonInitialize(const char pyexe[],const char pylib[]) { PyObject *module = 0; PetscErrorCode ierr; PetscFunctionBegin; if (PetscBeganPython) PetscFunctionReturn(0); /* Python executable */ if (pyexe && pyexe[0] != 0) { ierr = PetscStrncpy(PetscPythonExe,pyexe,sizeof(PetscPythonExe));CHKERRQ(ierr); } else { ierr = PetscPythonFindExecutable(PetscPythonExe);CHKERRQ(ierr); } /* Python dynamic library */ if (pylib && pylib[0] != 0) { ierr = PetscStrncpy(PetscPythonLib,pylib,sizeof(PetscPythonLib));CHKERRQ(ierr); } else { ierr = PetscPythonFindLibrary(PetscPythonExe,PetscPythonLib);CHKERRQ(ierr); } /* dynamically load Python library */ ierr = PetscPythonLoadLibrary(PetscPythonLib);CHKERRQ(ierr); /* initialize Python */ PetscBeganPython = PETSC_FALSE; if (!Py_IsInitialized()) { static PetscBool registered = PETSC_FALSE; const char *py_version; PyObject *sys_path; char path[PETSC_MAX_PATH_LEN] = { 0 }; /* initialize Python */ Py_InitializeEx(0); /* 0: do not install signal handlers */ /* build 'sys.argv' list */ py_version = Py_GetVersion(); if (py_version[0] == '2') { int argc = 0; char **argv = 0; ierr = PetscGetArgs(&argc,&argv);CHKERRQ(ierr); PySys_SetArgv(argc,argv); } if (py_version[0] == '3') { /* XXX 'argv' is type 'wchar_t**' */ PySys_SetArgv(0,NULL); } /* add PETSC_LIB_DIR in front of 'sys.path' */ sys_path = PySys_GetObject("path"); if (sys_path) { ierr = PetscStrreplace(PETSC_COMM_SELF,"${PETSC_LIB_DIR}",path,sizeof(path));CHKERRQ(ierr); Py_DecRef(PyObject_CallMethod(sys_path,"insert","is",(int)0,(char*)path)); } /* register finalizer */ if (!registered) { ierr = PetscRegisterFinalize(PetscPythonFinalize);CHKERRQ(ierr); registered = PETSC_TRUE; } PetscBeganPython = PETSC_TRUE; } /* import 'petsc4py.PETSc' module */ module = PyImport_ImportModule("petsc4py.PETSc"); if (module) { ierr = PetscInfo(0,"Python: successfully imported module 'petsc4py.PETSc'\n");CHKERRQ(ierr); Py_DecRef(module); module = 0; } else { PetscPythonPrintError(); SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"Python: could not import module 'petsc4py.PETSc', perhaps your PYTHONPATH does not contain it\n"); } PetscFunctionReturn(0); }