本文整理汇总了C++中SpinBlock::BuildSlaterBlock方法的典型用法代码示例。如果您正苦于以下问题:C++ SpinBlock::BuildSlaterBlock方法的具体用法?C++ SpinBlock::BuildSlaterBlock怎么用?C++ SpinBlock::BuildSlaterBlock使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SpinBlock
的用法示例。
在下文中一共展示了SpinBlock::BuildSlaterBlock方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: TensorProduct
//.........这里部分代码省略.........
}
} else { // no core
if ((!dot_with_sys && onedot) || !onedot) {
environment.set_integralIndex() = integralIndex;
environment.default_op_components(!forward, leftState==rightState);
environment.setstoragetype(DISTRIBUTED_STORAGE);
environment.BuildTensorProductBlock(environmentSites); // exact block
} else {
newEnvironment.set_integralIndex() = integralIndex;
newEnvironment.default_op_components(!forward, leftState==rightState);
newEnvironment.setstoragetype(DISTRIBUTED_STORAGE);
newEnvironment.BuildTensorProductBlock(environmentSites);
}
}
} else { //used for warmup guess environemnt
std::vector<SpinQuantum> quantumNumbers;
std::vector<int> distribution;
std::map<SpinQuantum, int> quantaDist;
std::map<SpinQuantum, int>::iterator quantaIterator;
bool environmentComplementary = !forward;
StateInfo tmp2;
// tmp is the quantum numbers of newSystem (sys + sysdot)
if (onedot) tmp.quanta_distribution (quantumNumbers, distribution, true);
else {
StateInfo environmentdot_stateinfo = environmentDot.get_stateInfo();
TensorProduct (tmp, environmentdot_stateinfo, tmp2, constraint);
tmp2.CollectQuanta ();
tmp2.quanta_distribution (quantumNumbers, distribution, true);
}
for (int i = 0; i < distribution.size (); ++i) {
quantaIterator = quantaDist.find(quantumNumbers[i]);
if (quantaIterator != quantaDist.end()) distribution[i] += quantaIterator->second;
distribution [i] /= 4; distribution [i] += 1;
if (distribution [i] > dmrginp.nquanta()) distribution [i] = dmrginp.nquanta();
if(quantaIterator != quantaDist.end()) {
quantaIterator->second = distribution[i];
} else {
quantaDist[quantumNumbers[i]] = distribution[i];
}
}
if (dmrginp.outputlevel() > 0) pout << "\t\t\t Quantum numbers and states used for warm up :: " << endl << "\t\t\t ";
quantumNumbers.clear(); quantumNumbers.reserve(distribution.size());
distribution.clear();distribution.reserve(quantumNumbers.size());
std::map<SpinQuantum, int>::iterator qit = quantaDist.begin();
for (; qit != quantaDist.end(); qit++) {
quantumNumbers.push_back( qit->first); distribution.push_back(qit->second);
if (dmrginp.outputlevel() > 0) {
pout << quantumNumbers.back() << " = " << distribution.back() << ", ";
if (! (quantumNumbers.size() - 6) % 6) pout << endl << "\t\t\t ";
}
}
pout << endl;
if(dot_with_sys && onedot) {
newEnvironment.set_integralIndex() = integralIndex;
newEnvironment.BuildSlaterBlock (environmentSites, quantumNumbers, distribution, false, false);
} else {
environment.set_integralIndex() = integralIndex;
environment.BuildSlaterBlock (environmentSites, quantumNumbers, distribution, false, haveNormops);
}
}
} else {
if (dmrginp.outputlevel() > 0) pout << "\t\t\t Restoring block of size " << environmentSites.size () << " from previous iteration" << endl;
if(dot_with_sys && onedot) {
newEnvironment.set_integralIndex() = integralIndex;
SpinBlock::restore (!forward, environmentSites, newEnvironment, leftState, rightState);
} else {
environment.set_integralIndex() = integralIndex;
SpinBlock::restore (!forward, environmentSites, environment, leftState, rightState);
}
if (dmrginp.outputlevel() > 0)
mcheck("");
}
// now initialise newEnvironment
if (!dot_with_sys || !onedot) {
dmrginp.datatransfer -> start();
environment.addAdditionalCompOps();
dmrginp.datatransfer -> stop();
newEnvironment.set_integralIndex() = integralIndex;
newEnvironment.default_op_components(direct, environment, environmentDot, haveNormops, haveCompops, leftState==rightState);
newEnvironment.setstoragetype(DISTRIBUTED_STORAGE);
newEnvironment.BuildSumBlock (constraint, environment, environmentDot,braquanta,ketquanta);
if (dmrginp.outputlevel() > -1) {
pout << "\t\t\t Environment block " << endl << environment << endl;
environment.printOperatorSummary();
pout << "\t\t\t NewEnvironment block " << endl << newEnvironment << endl;
newEnvironment.printOperatorSummary();
}
} else if (dmrginp.outputlevel() > 0) {
pout << "\t\t\t Environment block " << endl << newEnvironment << endl;
newEnvironment.printOperatorSummary();
}
}