ParallelTemperature(const ParametersType& params, SizeType threads) : params_(params), omegaValue_(params.tt) { for (SizeType i = 0; i < threads; ++i) { PsimagLite::String name = filenameForThread(i); unlink(name.c_str()); } }
void thread_function_(SizeType threadNum, SizeType blockSize, SizeType total, PsimagLite::Concurrency::MutexType*) { RealType ts = (params_.te - params_.tb)/params_.tt; PsimagLite::String name = filenameForThread(threadNum); std::ofstream fout(name.c_str(),std::ios::app); for (SizeType p = 0; p < blockSize; p++) { SizeType i = threadNum*blockSize + p; if (i >= total) break; RealType t = params_.tb + i*ts; HeisenbergType heisenberg(params_,t,fout); omegaValue_[i] = PairRealType(heisenberg.energy(), heisenberg.sz()); } fout.close(); }
PsimagLite::String pathPrepend(PsimagLite::String pre,PsimagLite::String pathname) { bool addDotDot = false; PsimagLite::String path1(""); if (pathname.length() > 2 && pathname[0] == '.' && pathname[1] == '.') { addDotDot = true; path1 = pathname.substr(2,pathname.length()); } if (pathname.length() > 1 && pathname[0] == '/') path1 = pathname; if (path1 == "") return pre + pathname; size_t index = path1.find_last_of("/"); index++; PsimagLite::String ret = path1.substr(0,index) + pre + path1.substr(index,path1.length()); return (addDotDot) ? ".." + ret : ret; }
bool observeOneFullSweep( IoInputType& io, const GeometryType& geometry, const ModelType& model, const PsimagLite::String& obsOptions, bool hasTimeEvolution) { bool verbose = false; typedef typename SparseMatrixType::value_type FieldType; typedef Observer<FieldType,VectorWithOffsetType,ModelType,IoInputType> ObserverType; typedef ObservableLibrary<ObserverType,TargettingType> ObservableLibraryType; SizeType n = geometry.numberOfSites(); //PsimagLite::String sSweeps = "sweeps="; //PsimagLite::String::SizeTypeype begin = obsOptions.find(sSweeps); //if (begin != PsimagLite::String::npos) { // PsimagLite::String sTmp = obsOptions.substr(begin+sSweeps.length(),PsimagLite::String::npos); //std::cout<<"sTmp="<<sTmp<<"\n"; // n = atoi(sTmp.c_str()); //} ObservableLibraryType observerLib(io,n,hasTimeEvolution,model,verbose); bool ot = false; if (obsOptions.find("ot")!=PsimagLite::String::npos || obsOptions.find("time")!=PsimagLite::String::npos) ot = true; if (hasTimeEvolution && ot) { observerLib.measureTime("superDensity"); observerLib.measureTime("nupNdown"); observerLib.measureTime("nup+ndown"); if (obsOptions.find("sz")!=PsimagLite::String::npos) observerLib.measureTime("sz"); } if (hasTimeEvolution) observerLib.setBrackets("time","time"); const PsimagLite::String& modelName = model.params().model; SizeType rows = n; // could be n/2 if there's enough symmetry // Immm supports only onepoint: if (modelName=="Immm" && obsOptions!="onepoint") { PsimagLite::String str(__FILE__); str += " " + ttos(__LINE__) + "\n"; str += "Model Immm only supports onepoint\n"; throw PsimagLite::RuntimeError(str.c_str()); } SizeType numberOfDofs = dofsFromModelName(model); if (!hasTimeEvolution && obsOptions.find("onepoint")!=PsimagLite::String::npos) { observerLib.measureTheOnePoints(numberOfDofs); } if (modelName.find("Heisenberg")==PsimagLite::String::npos) { if (obsOptions.find("cc")!=PsimagLite::String::npos) { observerLib.measure("cc",rows,n); } if (obsOptions.find("nn")!=PsimagLite::String::npos) { observerLib.measure("nn",rows,n); } } if (obsOptions.find("szsz")!=PsimagLite::String::npos) { observerLib.measure("szsz",rows,n); } if (modelName.find("FeAsBasedSc")!=PsimagLite::String::npos || modelName.find("FeAsBasedScExtended")!=PsimagLite::String::npos || modelName.find("HubbardOneBand")!=PsimagLite::String::npos) { bool dd4 = (obsOptions.find("dd4")!=PsimagLite::String::npos); if (obsOptions.find("dd")!=PsimagLite::String::npos && !dd4) { // && //geometry.label(0).find("ladder")!=PsimagLite::String::npos) { observerLib.measure("dd",rows,n); } // FOUR-POINT DELTA-DELTA^DAGGER: if (dd4 && geometry.label(0).find("ladder")!=PsimagLite::String::npos) { observerLib.measure("dd4",rows,n); } // if dd4 } if (modelName.find("HubbardOneBand")!=PsimagLite::String::npos && obsOptions.find("multi")!=PsimagLite::String::npos) { observerLib.measure("multi",rows,n); } if (obsOptions.find("s+s-")!=PsimagLite::String::npos) { observerLib.measure("s+s-",rows,n); } if (obsOptions.find("ss")!=PsimagLite::String::npos) { observerLib.measure("ss",rows,n); } return observerLib.endOfData(); }
bool observeOneFullSweep(IoInputType& io, const ModelType& model, const PsimagLite::String& list, bool hasTimeEvolution, SizeType orbitals) { typedef typename ModelType::GeometryType GeometryType; typedef Observer<VectorWithOffsetType,ModelType,IoInputType> ObserverType; typedef ObservableLibrary<ObserverType> ObservableLibraryType; const GeometryType& geometry = model.geometry(); bool verbose = false; SizeType n = geometry.numberOfSites(); SizeType rows = n; // could be n/2 if there's enough symmetry SizeType cols = n; SizeType nf = n - 2; SizeType trail = 0; PsimagLite::Vector<PsimagLite::String>::Type vecOptions; PsimagLite::tokenizer(list,vecOptions,","); bool hasTrail = false; for (SizeType i = 0; i < vecOptions.size(); ++i) { PsimagLite::String item = vecOptions[i]; PsimagLite::String label = "%nf="; std::size_t labelIndex = item.find(label); if (labelIndex == 0) { nf = atoi(item.substr(label.length()).c_str()); rows = nf; cols = nf; std::cerr<<"observe: Found "<<label<<" = "<<nf; std::cerr<<" (rows and cols also set to it)\n"; } label = "%trail="; labelIndex = item.find(label); if (labelIndex == 0) { trail = atoi(item.substr(label.length()).c_str()); std::cerr<<"observe: Found "<<label<<" = "<<trail<<"\n"; hasTrail = true; } label = "%rows="; labelIndex = item.find(label); if (labelIndex == 0) { std::cerr<<"observe: Found %rows= with index "<<labelIndex<<"\n"; rows = atoi(item.substr(label.length()).c_str()); } label = "%cols="; labelIndex = item.find(label); if (labelIndex == 0) { std::cerr<<"observe: Found %cols= with index "<<labelIndex<<"\n"; cols = atoi(item.substr(label.length()).c_str()); } } if (!hasTrail) trail = n - 2 - nf; ObservableLibraryType observerLib(io, n, hasTimeEvolution, model, nf, trail, verbose); for (SizeType i = 0; i < vecOptions.size(); ++i) { PsimagLite::String item = vecOptions[i]; if (item.find("%") == 0) continue; if (item.length() > 0 && item[0] != '<') observerLib.measureTriage(item,rows,cols,orbitals,hasTimeEvolution); else observerLib.interpret(item,rows,cols); } return observerLib.endOfData(); }
PsimagLite::String basename(PsimagLite::String pathname) { return PsimagLite::String(std::find_if(pathname.rbegin(), pathname.rend(), UnixPathSeparator()).base(),pathname.end()); }