/** constructor * @param h QMCHamiltonian to define the components * @param hcopy number of copies of QMCHamiltonians */ MJPolymerEstimator::MJPolymerEstimator(QMCHamiltonian& h, int hcopy, MultiChain* polymer) { Reptile=polymer; NumCopies=hcopy; // Hpointer = &h; SizeOfHamiltonians = h.sizeOfObservables(); FirstHamiltonian = h.startIndex(); // cout<<"size of Hamiltonian "<<SizeOfHamiltonians<<" First one "<<FirstHamiltonian<<endl; elocal_name.push_back("LocalEnergy"); for(int i=0; i < SizeOfHamiltonians; i++) { elocal_name.push_back(h.getObservableName(i)); //elocal_name.push_back(h.getName(i)); }; elocal_name.push_back("SumPot"); elocal_name.push_back("ElSumPot"); elocal_name.push_back("CenterTruncSumPot"); elocal_name.push_back("Null"); elocal_name.push_back("CenterTruncElSumPot"); elocal_name.push_back("Virial"); elocal_name.push_back("MaxAge"); elocal_name.push_back("MaxTouch"); elocal_name.push_back("centerV"); elocal_name.push_back("EcorrFun"); elocal_name.push_back("Ehead"); elocal_name.push_back("Etail"); elocal_name.push_back("Edecorr"); elocal_name.push_back("Vdecorr"); elocal_name.push_back("RMC_HFCep_1_0"); elocal_name.push_back("RMC_HFCep_1_1"); scalars.resize(SizeOfHamiltonians+23); scalars_saved=scalars; pNorm=0.0; Findex = h.getObservable("HFCep_1_0"); // app_log()<<"Force Index "<<Findex<<endl; };
bool TrialDMCCorrection::putSpecial(xmlNodePtr cur, QMCHamiltonian& h, ParticleSet& P ) { FirstHamiltonian = h.startIndex(); nObservables=0; nValues=0; resum=100000; int blockSeries(0); int blockFreq(0); OhmmsAttributeSet attrib; attrib.add(resum,"resum"); attrib.add(blockSeries,"max"); attrib.add(blockFreq,"frequency"); attrib.put(cur); // app_log()<<" Forward walking block size is "<< blockT<<"*Tau"<<endl; // P.phLength=0; bool FIRST=true; CountIndex = P.addPropertyHistory(1); P.PropertyHistory[CountIndex][0]=0; xmlNodePtr tcur = cur->children; while(tcur != NULL) { string cname((const char*)tcur->name); // app_log()<<cname<<endl; if(cname == "Observable") { string tagName("none"); int Hindex(-100); // int blockSeries(0); // int blockFreq(0); OhmmsAttributeSet Tattrib; Tattrib.add(tagName,"name"); // Tattrib.add(blockSeries,"max"); // Tattrib.add(blockFreq,"frequency"); Tattrib.put(tcur); int numProps = P.PropertyList.Names.size(); // Hindex = P.PropertyList.add(tagName); Hindex = h.getObservable(tagName)+NUMPROPERTIES; if(tagName=="LocalPotential") { Hindex=LOCALPOTENTIAL ; tagName="LocPot"; } else if (Hindex==(NUMPROPERTIES-1)){ app_log()<<"Not a valid H element("<<Hindex<<") Valid names are:"; for (int jk=0;jk<h.sizeOfObservables();jk++) app_log()<<" "<<h.getObservableName(jk); app_log()<<endl; exit(-1); } /* if ((Hindex==-100)){ app_log()<<" Hamiltonian Element "<<tagName<<" does not exist!! "<<Hindex<<endl; assert(Hindex>=0); }*/ Names.push_back(tagName); Hindices.push_back( Hindex); app_log()<<" Hamiltonian Element "<<tagName<<" was found at "<< Hindex<<endl; int numT=blockSeries/blockFreq ; nObservables+=1; nValues+=numT; app_log()<<" "<<numT<<" values will be calculated every "<<blockFreq<<"*tau H^-1"<<endl; vector<int> pms(3); pms[0]=blockFreq; pms[1]=numT; pms[2]=blockSeries+2; walkerLengths.push_back(pms); int maxWsize=blockSeries+2; int pindx = P.addPropertyHistory(maxWsize); // summed values. P.addPropertyHistory(numT); // number of times accumulated. For resum Pindices.push_back(pindx); // app_log()<<"pindex "<<pindx<<endl; } tcur = tcur->next; } app_log()<<"Total number of observables calculated:"<<nObservables<<endl; app_log()<<"Total number of values calculated:"<<nValues<<endl; Values.resize(nValues,0.0); EValues.resize(nValues,0.0); FWValues.resize(nValues,0.0); return true; }
bool ForwardWalking::putSpecial(xmlNodePtr cur, QMCHamiltonian& h, ParticleSet& P) { FirstHamiltonian = h.startIndex(); nObservables=0; nValues=0; blockT=1; // OhmmsAttributeSet attrib; // attrib.add(blockT,"blockSize"); // attrib.put(cur); xmlNodePtr tcur = cur->children; while(tcur != NULL) { string cname((const char*)tcur->name); if(cname == "Observable") { string tagName("none"); int Hindex(-100); int blockSeries(0); int blockFreq(0); OhmmsAttributeSet Tattrib; Tattrib.add(tagName,"name"); Tattrib.add(blockSeries,"max"); Tattrib.add(blockFreq,"frequency"); Tattrib.put(tcur); if (tagName.find("*")==string::npos) { //Single Observable case int numProps = P.PropertyList.Names.size(); Hindex = h.getObservable(tagName)+NUMPROPERTIES; if(tagName=="LocalPotential") { Hindex=LOCALPOTENTIAL ; tagName="LocPot"; } else if(tagName=="LocalEnergy") { Hindex=LOCALENERGY ; tagName="LocEn"; } else if (Hindex==(NUMPROPERTIES-1)){ app_log()<<"Not a valid H element("<<Hindex<<") Valid names are:"; for (int jk=0;jk<h.sizeOfObservables();jk++) app_log()<<" "<<h.getObservableName(jk); app_log()<<endl; exit(-1); } Names.push_back(tagName); Hindices.push_back( Hindex); app_log()<<" Hamiltonian Element "<<tagName<<" was found at "<< Hindex<<endl; int numT=blockSeries/blockFreq ; nObservables+=1; nValues+=numT; app_log()<<" "<<numT<<" values will be calculated every "<<blockFreq<<"*tau H^-1"<<endl; vector<int> pms(3); pms[0]=blockFreq; pms[1]=numT; pms[2]=blockSeries+2; walkerLengths.push_back(pms); int maxWsize=blockSeries+2; int pindx = P.addPropertyHistory(maxWsize); // summed values. // P.addPropertyHistory(numT); Pindices.push_back(pindx); } else { bool FOUNDH(false); // Multiple observables for this tag int found=tagName.rfind("*"); tagName.replace (found,1,""); int numProps = P.PropertyList.Names.size(); for(int j=0;j<h.sizeOfObservables();j++) { string Hname = h.getObservableName(j); if (Hname.find(tagName) != string::npos) { // vector<int> Parameters; // if(blockSeries==0) // putContent(Parameters,tcur); // else // for( int pl=blockFreq;pl<=blockSeries;pl+=blockFreq) Parameters.push_back(pl); FOUNDH=true; app_log()<<" Hamiltonian Element "<<Hname<<" was found at "<< j<<endl; Names.push_back(Hname); Hindex = j+NUMPROPERTIES; Hindices.push_back( Hindex); int numT=blockSeries/blockFreq ; nObservables+=1; nValues+=numT; app_log()<<" "<<numT<<" values will be calculated every "<<blockFreq<<"*tau H^-1"<<endl; vector<int> pms(3); pms[0]=blockFreq; pms[1]=numT; pms[2]=blockSeries+2; walkerLengths.push_back(pms); int maxWsize=blockSeries+2; int pindx = P.addPropertyHistory(maxWsize); Pindices.push_back(pindx); } } //handle FOUNDH if (FOUNDH) { nObservables+=1; } else { app_log()<<"Not a valid H element("<<Hindex<<") Valid names are:"; for (int jk=0;jk<h.sizeOfObservables();jk++) app_log()<<" "<<h.getObservableName(jk); app_log()<<endl; APP_ABORT("ForwardWalking::put"); } } } tcur = tcur->next; } app_log()<<"Total number of observables calculated:"<<nObservables<<endl; app_log()<<"Total number of values calculated:"<<nValues<<endl; Values.resize(nValues); return true; }