本文整理汇总了C++中QMCHamiltonian::startIndex方法的典型用法代码示例。如果您正苦于以下问题:C++ QMCHamiltonian::startIndex方法的具体用法?C++ QMCHamiltonian::startIndex怎么用?C++ QMCHamiltonian::startIndex使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QMCHamiltonian
的用法示例。
在下文中一共展示了QMCHamiltonian::startIndex方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
/** constructor
* @param h QMCHamiltonian to define the components
* @param hcopy number of copies of QMCHamiltonians
*/
HFDHE2PolymerEstimator::HFDHE2PolymerEstimator(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("Virial");
elocal_name.push_back("MaxAge");
scalars.resize(SizeOfHamiltonians+5);
scalars_saved=scalars;
pNorm=0.0;
Pindex = h.getHamiltonian("HePress")->myIndex;
HDFHE2index = h.getHamiltonian("HFDHE2")->myIndex;
}
示例2: CurrentWalker
/** constructor
* @param h QMCHamiltonian to define the components
* @param hcopy number of copies of QMCHamiltonians
*/
RQMCEstimator::RQMCEstimator(QMCHamiltonian& h, int hcopy) : CurrentWalker(0) {
NumCopies=hcopy;
NumOperators = h.sizeOfObservables();
FirstHamiltonian=h.startIndex();
esum.resize(NumCopies,LE_INDEX);
esum_name.resize(LE_INDEX,NumCopies);
elocal.resize(NumCopies,NumOperators);
elocal_name.resize(NumCopies,NumOperators);
char aname[32];
//make the name tables
//(localenergy, variance, weight)* + (each hamiltonian term)*
for(int i=0; i<NumCopies; i++) {
sprintf(aname,"LE%i",i); esum_name(ENERGY_INDEX,i)=aname;
sprintf(aname,"Var%i",i); esum_name(ENERGY_SQ_INDEX,i)=aname;
sprintf(aname,"WPsi%i",i); esum_name(WEIGHT_INDEX,i)=aname;
for(int j=0; j<NumOperators; j++) {
//sprintf(aname,"%s%i",h.getName(j).c_str(),i);
sprintf(aname,"%s%i",h.getObservableName(j).c_str(),i);
elocal_name(i,j)=aname;
}
}
int ipair=0;
for(int i=0; i<NumCopies-1; i++) {
for(int j=i+1; j<NumCopies; j++) {
sprintf(aname,"DiffS%iS%i",i,j); ediff_name.push_back(aname);
}
}
}
示例3:
LocalEnergyEstimatorHDF::LocalEnergyEstimatorHDF(QMCHamiltonian& h)
:refH(h)
{
SizeOfHamiltonians = h.sizeOfObservables();
FirstHamiltonian = h.startIndex();
scalars.resize(SizeOfHamiltonians+LE_MAX);
scalars_saved.resize(SizeOfHamiltonians+LE_MAX);
}
示例4: hterms
LocalEnergyEstimator::LocalEnergyEstimator(QMCHamiltonian& h):Href(h) {
int hterms(h.size());
SizeOfHamiltonians = hterms;
FirstHamiltonian = h.startIndex();
elocal.resize(SizeOfHamiltonians+LE_MAX);
elocal_name.resize(SizeOfHamiltonians+LE_MAX);
elocal_name[ENERGY_INDEX] = "LocalEnergy";
elocal_name[ENERGY_SQ_INDEX] = "Variance";
elocal_name[POTENTIAL_INDEX] = "LocalPotential";
int ii(LE_MAX);
for(int i=0; i < SizeOfHamiltonians; i++) elocal_name[ii++] = h.getName(i);
}
示例5:
/** 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;
};
示例6: putSpecial
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;
}
示例7: putSpecial
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);
//.........这里部分代码省略.........