#ifdef __GNUG__ #pragma implementation #endif #include #include #include #include #include #include #include #include using namespace std; namespace sc { static ClassDesc PsiExEnv_cd( typeid(PsiExEnv),"PsiExEnv",1,"public DescribedClass", 0, create, 0); string PsiExEnv::inputname_("input.dat"); string PsiExEnv::file11name_("file11.dat"); int PsiExEnv::ckptfile_(32); string PsiExEnv::defaultcwd_("/tmp"); string PsiExEnv::defaultfileprefix_("psi"); string PsiExEnv::defaultpsiprefix_("/usr/local/psi/bin"); string PsiExEnv::defaultstdout_("psi.stdout"); string PsiExEnv::defaultstderr_("psi.stderr"); PsiExEnv::PsiExEnv(const Ref& keyval) { // Find Psi char *psibin = getenv("PSIBIN"); if (psibin) psiprefix_ = string(psibin); else psiprefix_ = string(defaultpsiprefix_); add_to_path(psiprefix_); char *cwdchar = keyval->pcharvalue("cwd"); if (cwdchar) cwd_ = string(cwdchar); else cwd_ = string(defaultcwd_); char *fileprefixchar = keyval->pcharvalue("fileprefix"); if (fileprefixchar) fileprefix_ = string(fileprefixchar); else fileprefix_ = string(defaultfileprefix_); char *stdout_char = keyval->pcharvalue("stdout"); if (stdout_char) stdout_ = string(stdout_char); else stdout_ = string(defaultstdout_); delete[] stdout_char; char *stderr_char = keyval->pcharvalue("stderr"); if (stderr_char) stderr_ = string(stderr_char); else stderr_ = string(defaultstderr_); delete[] stderr_char; nscratch_ = keyval->intvalue("nscratch"); if (nscratch_ != keyval->count("scratch")) { ExEnv::err0() << indent << "PsiExEnv: number of scratch directories != nscratch\n"; abort(); } scratch_ = new string[nscratch_]; for (int i=0; ipcharvalue("scratch",i)); char *s = new char[cwd_.size() + inputname_.size() + 2]; sprintf(s,"%s/%s",cwd_.c_str(),inputname_.c_str()); psiinput_ = new PsiInput(s); delete[] s; s = new char[cwd_.size() + fileprefix_.size() + file11name_.size() + 3]; sprintf(s,"%s/%s.%s",cwd_.c_str(),fileprefix_.c_str(),file11name_.c_str()); psifile11_ = new PsiFile11(s); delete[] s; } PsiExEnv::PsiExEnv(char *cwd, char *fileprefix, int nscratch, char **scratch): cwd_(cwd), fileprefix_(fileprefix), nscratch_(nscratch) { // Find Psi char *psibin = 0; psibin = getenv("PSIBIN"); if (psibin) psiprefix_ = string(psibin); else psiprefix_ = string(defaultpsiprefix_); add_to_path(psiprefix_); scratch_ = new string[nscratch_]; for(int i=0; i> %s 2>> %s",cwd_.c_str(),psiprefix_.c_str(),module,cwd_.c_str(), fileprefix_.c_str(),stdout_.c_str(),stderr_.c_str()); if (errcod = system(module_cmd)) { ExEnv::outn() << "PsiExEnv::run_psi_module -- module " << module << " failed" << endl; abort(); } return errcod; } void PsiExEnv::print(std::ostream&o) const { o << endl; o << indent << "PsiExEnv:" << endl << incindent; o << indent << "Location of Psi: " << psiprefix_ << endl; o << indent << "Current Psi Working Directory: " << cwd_ << endl; o << indent << "Current Psi File Prefix: " << fileprefix_ << endl; o << indent << "Number of Scratch Groups: " << nscratch_ << endl; for(int i=0; i