Loading src/Engine/DimensionSrep.h +1 −1 Original line number Diff line number Diff line Loading @@ -57,7 +57,7 @@ private: if (ts.type() == TensorStanzaType::TENSOR_TYPE_ERASED) continue; symmLocal_.setNameId(i, ts.name() + ttos(ts.id())); symmLocal_.setNameId(i, ts.fullName()); SizeType legs = ts.legs(); for (SizeType j = 0; j < legs; ++j) { Loading src/Engine/MeraEnviron.h +16 −14 Original line number Diff line number Diff line Loading @@ -78,8 +78,10 @@ private: SizeType counterForOutput, const VectorSizeType& limits) { SizeType id = tensorSrep_(ind).id(); PsimagLite::String name = tensorSrep_(ind).name(); TensorSrep::PairStringSizeType mypair = TensorSrep:: splitIntoNameAndId(tensorSrep_(ind).fullName()); SizeType id = mypair.second; PsimagLite::String name = mypair.first; SizeType connections = params_.hamiltonianConnection.size(); VectorStringType vstr(connections,""); VectorStringType argForOutput(connections,""); Loading @@ -102,7 +104,7 @@ private: PairSizeType layer = findLayerNumber(name, id, limits); thisEnv += "Layer=" + ttos(layer.first) + "\n"; thisEnv += "FirstOfLayer=" + ttos(layer.second) + "\n"; bool isRootTensor = (tensorSrep_(ind).name() == "r"); bool isRootTensor = (tensorSrep_(ind).fullName()[0] == 'r'); for (SizeType c = 0; c < connections; ++c) { if (vstr[c] == "") continue; PsimagLite::String tmp = "u" + ttos(counterForOutput++); Loading @@ -129,7 +131,7 @@ private: err("Invalid tensor\n"); SizeType jnd = tensorSrep4.findConjugate(ind); bool hasConjugate = (jnd < tensorSrep4.size()); bool isRootTensor = (tensorSrep_(ind).name() == "r"); bool isRootTensor = (tensorSrep_(ind).fullName()[0] == 'r'); if (!hasConjugate) { if (isRootTensor) { err("Environ for root: INTERNAL ERROR\n"); Loading Loading @@ -205,8 +207,8 @@ private: VectorSizeType& legOutSizes, SizeType ind) const { PsimagLite::String str = tensorSrep_(ind).name(); str += ttos(tensorSrep_(ind).id()) + "("; PsimagLite::String str = tensorSrep_(ind).fullName(); str += "("; PsimagLite::String buffer(""); const SizeType l = dimensionSrep_.sRep().length(); bool flag = false; Loading Loading @@ -294,7 +296,7 @@ private: SizeType ntensors = rightSrep.size(); int indexOfIdentity = -1; for (SizeType i = 0; i < ntensors; ++i) { if (rightSrep(i).name() == "i") { if (rightSrep(i).fullName()[0] == 'i') { indexOfIdentity = i; break; } Loading Loading @@ -332,7 +334,9 @@ private: throw PsimagLite::RuntimeError("irreducibleIdentityDsrep\n"); SizeType tmp = sizeOfRoot_/sizeWithoutIrrIdentity; SizeType id = rightSrep(indexOfIdentity).id(); TensorSrep::PairStringSizeType mypair = TensorSrep:: splitIntoNameAndId(rightSrep(indexOfIdentity).fullName()); SizeType id = mypair.second; dsrep_ += "i" + ttos(id) + "(D" + ttos(tmp) + "|D" + ttos(tmp) + ")"; symmLocal_.addIdentity(id, tmp); Loading @@ -348,21 +352,19 @@ private: continue; if (srep(i).legTag(j) != indexOfFree) continue; return findDimension(srep(i).name(), srep(i).id(), j); return findDimension(srep(i).fullName(), j); } } throw PsimagLite::RuntimeError("findDimension(1)\n"); } SizeType findDimension(PsimagLite::String name, SizeType id, SizeType findDimension(PsimagLite::String fullName, SizeType legIndex) const { SizeType ntensors = dimensionSrep_.size(); for (SizeType i = 0; i < ntensors; ++i) { if (dimensionSrep_(i).name() != name) continue; if (dimensionSrep_(i).id() != id) continue; if (dimensionSrep_(i).fullName() != fullName) continue; return dimensionSrep_(i).legTag(legIndex); } Loading @@ -374,7 +376,7 @@ private: { SizeType ntensors = dimensionSrep_.size(); for (SizeType i = 0; i < ntensors; ++i) { if (dimensionSrep_(i).name() != "r") continue; if (dimensionSrep_(i).fullName()[0] != 'r') continue; SizeType ins = dimensionSrep_(i).ins(); SizeType ret = 1; Loading src/Engine/MeraSolver.h +19 −26 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ class MeraSolver { typedef typename TensorOptimizerType::ParametersForMeraType ParametersForMeraType; typedef TensorEvalSlow<ComplexOrRealType> TensorEvalSlowType; typedef TensorEvalNew<ComplexOrRealType> TensorEvalNewType; typedef PsimagLite::Vector<PsimagLite::String>::Type VectorStringType; static const int EVAL_BREAKUP = TensorOptimizerType::EVAL_BREAKUP; Loading Loading @@ -354,9 +355,9 @@ private: return parallelEnergyHelper.energy(); } void initTensorNameIds(VectorPairStringSizeType& tensorNameIds) void initTensorNameIds(VectorStringType& tensorNameIds) { PsimagLite::Sort<VectorPairStringSizeType> sort; PsimagLite::Sort<VectorStringType> sort; VectorSizeType perm(tensorNameIds.size(),0); sort.sort(tensorNameIds,perm); SizeType end = (std::unique(tensorNameIds.begin(), Loading @@ -364,7 +365,7 @@ private: tensorNameIds.resize(end); } void initTensors(const VectorPairStringSizeType& tensorNameIds, void initTensors(const VectorStringType& tensorNameIds, const TensorSrep& td) { tensors_.resize(tensorNameIds.size()); Loading @@ -377,14 +378,13 @@ private: } for (SizeType i = 0; i < ntensors; ++i) { PsimagLite::String name = td(i).name(); SizeType id = td(i).id(); PairStringSizeType p(name, id); typename VectorPairStringSizeType::const_iterator x = std::find(tensorNameIds.begin(), TensorSrep::PairStringSizeType mypair = TensorSrep:: splitIntoNameAndId(td(i).fullName()); typename VectorStringType::const_iterator x = std::find(tensorNameIds.begin(), tensorNameIds.end(), p); td(i).fullName()); if (x == tensorNameIds.end()) { std::cerr<<"WARNING: Unused tensor name= "<<name<<" id= "<<id<<"\n"; std::cerr<<"WARNING: Unused tensor fullname= "<< td(i).fullName()<<"\n"; continue; } Loading @@ -400,35 +400,28 @@ private: SizeType ins = td(i).ins(); assert(ind < tensors_.size()); tensors_[ind] = new TensorType(name + ttos(id), dimensions, ins); if (name == "h") { tensors_[ind]->setToMatrix(model_().twoSiteHam(id)); tensors_[ind] = new TensorType(td(i).fullName(), dimensions, ins); if (td(i).fullName()[0] == 'h') { tensors_[ind]->setToMatrix(model_().twoSiteHam(mypair.second)); } else { tensors_[ind]->setToIdentity(1.0); } } } void findTensors(VectorPairStringSizeType& tensorNameIds, void findTensors(VectorStringType& tensorNameIds, const TensorSrep& t) { SizeType ntensors = t.size(); for (SizeType i = 0; i < ntensors; ++i) { PsimagLite::String name = t(i).name(); SizeType id = t(i).id(); PairStringSizeType p(name,id); tensorNameIds.push_back(p); } for (SizeType i = 0; i < ntensors; ++i) tensorNameIds.push_back(t(i).fullName()); } void allTensorsDefinedOrDie(const TensorSrep& srep) { SizeType ntensors = srep.size(); for (SizeType i = 0; i < ntensors; ++i) { PsimagLite::String name = srep(i).name(); SizeType id = srep(i).id(); nameToIndexLut_->operator()(name + ttos(id)); } for (SizeType i = 0; i < ntensors; ++i) nameToIndexLut_->operator()(srep(i).fullName()); } void updateTensorSizes(bool noSymmLocal) Loading @@ -445,7 +438,7 @@ private: symmLocal_ = symmLocal; TensorSrep tdstr(dsrep); VectorPairStringSizeType tensorNameIds; VectorStringType tensorNameIds; findTensors(tensorNameIds, tdstr); initTensorNameIds(tensorNameIds); Loading src/Engine/MeraToTikz.h +28 −16 Original line number Diff line number Diff line Loading @@ -36,6 +36,8 @@ class MeraToTikz { public: typedef std::pair<PsimagLite::String, SizeType> PairStringSizeType; MeraToTikz(PsimagLite::String srep, SizeType sites) : srep_(srep),tauMax_(ProgramGlobals::logBase2Strict(sites)-1) { Loading Loading @@ -75,7 +77,8 @@ private: SizeType outs = tensorSrep(i).outs(); RealType ysign = (tensorSrep(i).isConjugate()) ? -1.0 : 1.0; RealType dy = ysign*dy0; PsimagLite::String label = tensorSrep(i).name(); PairStringSizeType mypair = TensorSrep::splitIntoNameAndId(tensorSrep(i).fullName()); PsimagLite::String label = mypair.first; if (lastSeen != label) ++layer; lastSeen = label; Loading Loading @@ -202,10 +205,11 @@ private: for (SizeType i = 0; i < ntensors; ++i) { if (tensorSrep(i).type() == TensorStanza::TENSOR_TYPE_ERASED) continue; PsimagLite::String name = tensorSrep(i).name(); if (tensorSrep(i).id() >= unpackTimeAndSpace_.size()) PairStringSizeType mypair = TensorSrep::splitIntoNameAndId(tensorSrep(i).fullName()); PsimagLite::String name = mypair.first; if (mypair.second >= unpackTimeAndSpace_.size()) continue; PairSizeType tensorXY = unpackTimeAndSpace_[tensorSrep(i).id()]; PairSizeType tensorXY = unpackTimeAndSpace_[mypair.second]; SizeType tensorX = tensorXY.first; SizeType tensorY = tensorXY.second; Loading @@ -217,8 +221,7 @@ private: RealType xwsign = (tensorY & 1) ? -1 : 1; RealType xoffset = 3.0*pow(2,tensorY); if (tensorX == 0 && tensorY > 0 && name == "u") { SizeType id = tensorSrep(i).id(); SizeType j = findTensor(tensorSrep, id, name); SizeType j = findTensor(tensorSrep, tensorSrep(i).fullName()); if (tensorSrep(j).type() == TensorStanza::TENSOR_TYPE_ERASED) continue; } Loading Loading @@ -252,8 +255,11 @@ private: for (SizeType i = 0; i < ntensors; ++i) { TensorStanza::TensorTypeEnum t = tensorSrep(i).type(); if (t != type) continue; assert(tensorSrep(i).id() < unpackTimeAndSpace_.size()); PairSizeType layerXY = unpackTimeAndSpace_[tensorSrep(i).id()]; TensorSrep::PairStringSizeType mypair = TensorSrep:: splitIntoNameAndId(tensorSrep(i).fullName()); assert(mypair.second < unpackTimeAndSpace_.size()); PairSizeType layerXY = unpackTimeAndSpace_[mypair.second]; if (layerXY.second != layer) continue; counter++; } Loading @@ -262,13 +268,11 @@ private: } SizeType findTensor(const TensorSrep& tensorSrep, SizeType id, PsimagLite::String name) const PsimagLite::String fullName) const { SizeType ntensors = tensorSrep.size(); for (SizeType i = 0; i < ntensors; ++i) { if (tensorSrep(i).name() != name) continue; if (tensorSrep(i).id() != id) continue; if (tensorSrep(i).fullName() != fullName) continue; return i; } Loading @@ -287,16 +291,20 @@ private: SizeType ins = tensorSrep(i).ins(); for (SizeType j = 0; j < ins; ++j) { if (tensorSrep(i).legType(j) != TensorStanza::INDEX_TYPE_SUMMED) continue; TensorSrep::PairStringSizeType mypair = TensorSrep:: splitIntoNameAndId(tensorSrep(i).fullName()); SizeType k1 = absoluteLegNumber(i,j,ntensors); PsimagLite::String label1 = "(I"; label1 += tensorSrep(i).name(); label1 += mypair.first; label1 += ttos(k1) + ")"; SizeType what = tensorSrep(i).legTag(j); PairSizeType k = findTarget(tensorSrep,i,what,TensorStanza::INDEX_DIR_OUT); if (k.first < ntensors) { PsimagLite::String label2 = "(O"; label2 += tensorSrep(k.first).name(); TensorSrep::PairStringSizeType mypair2 = TensorSrep:: splitIntoNameAndId(tensorSrep(k.first).fullName()); label2 += mypair2.first; SizeType k2 = absoluteLegNumber(k.first,k.second,ntensors); label2 += ttos(k2) + ")"; buffer_ += "\\draw[mycon] " + label1 + " -- " + label2 + ";\n"; Loading @@ -304,8 +312,10 @@ private: k = findTarget(tensorSrep,i,what,TensorStanza::INDEX_DIR_IN); if (k.first >= ntensors) continue; TensorSrep::PairStringSizeType mypair3 = TensorSrep:: splitIntoNameAndId(tensorSrep(k.first).fullName()); PsimagLite::String label2 = "(I"; label2 += tensorSrep(k.first).name(); label2 += mypair3.first; SizeType k2 = absoluteLegNumber(k.first,k.second,ntensors); label2 += ttos(k2) + ")"; buffer_ += "\\draw[mycon] " + label1 + " -- " + label2 + ";\n"; Loading Loading @@ -359,7 +369,9 @@ private: RealType summedIds = 0.0; for (SizeType i = 0; i < legs.size(); ++i) { SizeType index = findTensorWithSummedLeg(legs[i],indexOfH,tSrep); SizeType tmp = tSrep(index).id(); TensorSrep::PairStringSizeType mypair = TensorSrep:: splitIntoNameAndId(tSrep(index).fullName()); SizeType tmp = mypair.second; summedIds += unpackTimeAndSpace_[tmp].first; } Loading src/Engine/ParallelEnvironHelper.h +1 −4 Original line number Diff line number Diff line Loading @@ -176,10 +176,7 @@ private: SizeType ntensors = t.size(); for (SizeType i = 0; i < ntensors; ++i) { PsimagLite::String name = t(i).name(); SizeType id = t(i).id(); SizeType ind = nameToIndexLut_(name + ttos(id)); SizeType ind = nameToIndexLut_(t(i).fullName()); assert(ind < tensors_.size()); SizeType ins = t(i).ins(); Loading Loading
src/Engine/DimensionSrep.h +1 −1 Original line number Diff line number Diff line Loading @@ -57,7 +57,7 @@ private: if (ts.type() == TensorStanzaType::TENSOR_TYPE_ERASED) continue; symmLocal_.setNameId(i, ts.name() + ttos(ts.id())); symmLocal_.setNameId(i, ts.fullName()); SizeType legs = ts.legs(); for (SizeType j = 0; j < legs; ++j) { Loading
src/Engine/MeraEnviron.h +16 −14 Original line number Diff line number Diff line Loading @@ -78,8 +78,10 @@ private: SizeType counterForOutput, const VectorSizeType& limits) { SizeType id = tensorSrep_(ind).id(); PsimagLite::String name = tensorSrep_(ind).name(); TensorSrep::PairStringSizeType mypair = TensorSrep:: splitIntoNameAndId(tensorSrep_(ind).fullName()); SizeType id = mypair.second; PsimagLite::String name = mypair.first; SizeType connections = params_.hamiltonianConnection.size(); VectorStringType vstr(connections,""); VectorStringType argForOutput(connections,""); Loading @@ -102,7 +104,7 @@ private: PairSizeType layer = findLayerNumber(name, id, limits); thisEnv += "Layer=" + ttos(layer.first) + "\n"; thisEnv += "FirstOfLayer=" + ttos(layer.second) + "\n"; bool isRootTensor = (tensorSrep_(ind).name() == "r"); bool isRootTensor = (tensorSrep_(ind).fullName()[0] == 'r'); for (SizeType c = 0; c < connections; ++c) { if (vstr[c] == "") continue; PsimagLite::String tmp = "u" + ttos(counterForOutput++); Loading @@ -129,7 +131,7 @@ private: err("Invalid tensor\n"); SizeType jnd = tensorSrep4.findConjugate(ind); bool hasConjugate = (jnd < tensorSrep4.size()); bool isRootTensor = (tensorSrep_(ind).name() == "r"); bool isRootTensor = (tensorSrep_(ind).fullName()[0] == 'r'); if (!hasConjugate) { if (isRootTensor) { err("Environ for root: INTERNAL ERROR\n"); Loading Loading @@ -205,8 +207,8 @@ private: VectorSizeType& legOutSizes, SizeType ind) const { PsimagLite::String str = tensorSrep_(ind).name(); str += ttos(tensorSrep_(ind).id()) + "("; PsimagLite::String str = tensorSrep_(ind).fullName(); str += "("; PsimagLite::String buffer(""); const SizeType l = dimensionSrep_.sRep().length(); bool flag = false; Loading Loading @@ -294,7 +296,7 @@ private: SizeType ntensors = rightSrep.size(); int indexOfIdentity = -1; for (SizeType i = 0; i < ntensors; ++i) { if (rightSrep(i).name() == "i") { if (rightSrep(i).fullName()[0] == 'i') { indexOfIdentity = i; break; } Loading Loading @@ -332,7 +334,9 @@ private: throw PsimagLite::RuntimeError("irreducibleIdentityDsrep\n"); SizeType tmp = sizeOfRoot_/sizeWithoutIrrIdentity; SizeType id = rightSrep(indexOfIdentity).id(); TensorSrep::PairStringSizeType mypair = TensorSrep:: splitIntoNameAndId(rightSrep(indexOfIdentity).fullName()); SizeType id = mypair.second; dsrep_ += "i" + ttos(id) + "(D" + ttos(tmp) + "|D" + ttos(tmp) + ")"; symmLocal_.addIdentity(id, tmp); Loading @@ -348,21 +352,19 @@ private: continue; if (srep(i).legTag(j) != indexOfFree) continue; return findDimension(srep(i).name(), srep(i).id(), j); return findDimension(srep(i).fullName(), j); } } throw PsimagLite::RuntimeError("findDimension(1)\n"); } SizeType findDimension(PsimagLite::String name, SizeType id, SizeType findDimension(PsimagLite::String fullName, SizeType legIndex) const { SizeType ntensors = dimensionSrep_.size(); for (SizeType i = 0; i < ntensors; ++i) { if (dimensionSrep_(i).name() != name) continue; if (dimensionSrep_(i).id() != id) continue; if (dimensionSrep_(i).fullName() != fullName) continue; return dimensionSrep_(i).legTag(legIndex); } Loading @@ -374,7 +376,7 @@ private: { SizeType ntensors = dimensionSrep_.size(); for (SizeType i = 0; i < ntensors; ++i) { if (dimensionSrep_(i).name() != "r") continue; if (dimensionSrep_(i).fullName()[0] != 'r') continue; SizeType ins = dimensionSrep_(i).ins(); SizeType ret = 1; Loading
src/Engine/MeraSolver.h +19 −26 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ class MeraSolver { typedef typename TensorOptimizerType::ParametersForMeraType ParametersForMeraType; typedef TensorEvalSlow<ComplexOrRealType> TensorEvalSlowType; typedef TensorEvalNew<ComplexOrRealType> TensorEvalNewType; typedef PsimagLite::Vector<PsimagLite::String>::Type VectorStringType; static const int EVAL_BREAKUP = TensorOptimizerType::EVAL_BREAKUP; Loading Loading @@ -354,9 +355,9 @@ private: return parallelEnergyHelper.energy(); } void initTensorNameIds(VectorPairStringSizeType& tensorNameIds) void initTensorNameIds(VectorStringType& tensorNameIds) { PsimagLite::Sort<VectorPairStringSizeType> sort; PsimagLite::Sort<VectorStringType> sort; VectorSizeType perm(tensorNameIds.size(),0); sort.sort(tensorNameIds,perm); SizeType end = (std::unique(tensorNameIds.begin(), Loading @@ -364,7 +365,7 @@ private: tensorNameIds.resize(end); } void initTensors(const VectorPairStringSizeType& tensorNameIds, void initTensors(const VectorStringType& tensorNameIds, const TensorSrep& td) { tensors_.resize(tensorNameIds.size()); Loading @@ -377,14 +378,13 @@ private: } for (SizeType i = 0; i < ntensors; ++i) { PsimagLite::String name = td(i).name(); SizeType id = td(i).id(); PairStringSizeType p(name, id); typename VectorPairStringSizeType::const_iterator x = std::find(tensorNameIds.begin(), TensorSrep::PairStringSizeType mypair = TensorSrep:: splitIntoNameAndId(td(i).fullName()); typename VectorStringType::const_iterator x = std::find(tensorNameIds.begin(), tensorNameIds.end(), p); td(i).fullName()); if (x == tensorNameIds.end()) { std::cerr<<"WARNING: Unused tensor name= "<<name<<" id= "<<id<<"\n"; std::cerr<<"WARNING: Unused tensor fullname= "<< td(i).fullName()<<"\n"; continue; } Loading @@ -400,35 +400,28 @@ private: SizeType ins = td(i).ins(); assert(ind < tensors_.size()); tensors_[ind] = new TensorType(name + ttos(id), dimensions, ins); if (name == "h") { tensors_[ind]->setToMatrix(model_().twoSiteHam(id)); tensors_[ind] = new TensorType(td(i).fullName(), dimensions, ins); if (td(i).fullName()[0] == 'h') { tensors_[ind]->setToMatrix(model_().twoSiteHam(mypair.second)); } else { tensors_[ind]->setToIdentity(1.0); } } } void findTensors(VectorPairStringSizeType& tensorNameIds, void findTensors(VectorStringType& tensorNameIds, const TensorSrep& t) { SizeType ntensors = t.size(); for (SizeType i = 0; i < ntensors; ++i) { PsimagLite::String name = t(i).name(); SizeType id = t(i).id(); PairStringSizeType p(name,id); tensorNameIds.push_back(p); } for (SizeType i = 0; i < ntensors; ++i) tensorNameIds.push_back(t(i).fullName()); } void allTensorsDefinedOrDie(const TensorSrep& srep) { SizeType ntensors = srep.size(); for (SizeType i = 0; i < ntensors; ++i) { PsimagLite::String name = srep(i).name(); SizeType id = srep(i).id(); nameToIndexLut_->operator()(name + ttos(id)); } for (SizeType i = 0; i < ntensors; ++i) nameToIndexLut_->operator()(srep(i).fullName()); } void updateTensorSizes(bool noSymmLocal) Loading @@ -445,7 +438,7 @@ private: symmLocal_ = symmLocal; TensorSrep tdstr(dsrep); VectorPairStringSizeType tensorNameIds; VectorStringType tensorNameIds; findTensors(tensorNameIds, tdstr); initTensorNameIds(tensorNameIds); Loading
src/Engine/MeraToTikz.h +28 −16 Original line number Diff line number Diff line Loading @@ -36,6 +36,8 @@ class MeraToTikz { public: typedef std::pair<PsimagLite::String, SizeType> PairStringSizeType; MeraToTikz(PsimagLite::String srep, SizeType sites) : srep_(srep),tauMax_(ProgramGlobals::logBase2Strict(sites)-1) { Loading Loading @@ -75,7 +77,8 @@ private: SizeType outs = tensorSrep(i).outs(); RealType ysign = (tensorSrep(i).isConjugate()) ? -1.0 : 1.0; RealType dy = ysign*dy0; PsimagLite::String label = tensorSrep(i).name(); PairStringSizeType mypair = TensorSrep::splitIntoNameAndId(tensorSrep(i).fullName()); PsimagLite::String label = mypair.first; if (lastSeen != label) ++layer; lastSeen = label; Loading Loading @@ -202,10 +205,11 @@ private: for (SizeType i = 0; i < ntensors; ++i) { if (tensorSrep(i).type() == TensorStanza::TENSOR_TYPE_ERASED) continue; PsimagLite::String name = tensorSrep(i).name(); if (tensorSrep(i).id() >= unpackTimeAndSpace_.size()) PairStringSizeType mypair = TensorSrep::splitIntoNameAndId(tensorSrep(i).fullName()); PsimagLite::String name = mypair.first; if (mypair.second >= unpackTimeAndSpace_.size()) continue; PairSizeType tensorXY = unpackTimeAndSpace_[tensorSrep(i).id()]; PairSizeType tensorXY = unpackTimeAndSpace_[mypair.second]; SizeType tensorX = tensorXY.first; SizeType tensorY = tensorXY.second; Loading @@ -217,8 +221,7 @@ private: RealType xwsign = (tensorY & 1) ? -1 : 1; RealType xoffset = 3.0*pow(2,tensorY); if (tensorX == 0 && tensorY > 0 && name == "u") { SizeType id = tensorSrep(i).id(); SizeType j = findTensor(tensorSrep, id, name); SizeType j = findTensor(tensorSrep, tensorSrep(i).fullName()); if (tensorSrep(j).type() == TensorStanza::TENSOR_TYPE_ERASED) continue; } Loading Loading @@ -252,8 +255,11 @@ private: for (SizeType i = 0; i < ntensors; ++i) { TensorStanza::TensorTypeEnum t = tensorSrep(i).type(); if (t != type) continue; assert(tensorSrep(i).id() < unpackTimeAndSpace_.size()); PairSizeType layerXY = unpackTimeAndSpace_[tensorSrep(i).id()]; TensorSrep::PairStringSizeType mypair = TensorSrep:: splitIntoNameAndId(tensorSrep(i).fullName()); assert(mypair.second < unpackTimeAndSpace_.size()); PairSizeType layerXY = unpackTimeAndSpace_[mypair.second]; if (layerXY.second != layer) continue; counter++; } Loading @@ -262,13 +268,11 @@ private: } SizeType findTensor(const TensorSrep& tensorSrep, SizeType id, PsimagLite::String name) const PsimagLite::String fullName) const { SizeType ntensors = tensorSrep.size(); for (SizeType i = 0; i < ntensors; ++i) { if (tensorSrep(i).name() != name) continue; if (tensorSrep(i).id() != id) continue; if (tensorSrep(i).fullName() != fullName) continue; return i; } Loading @@ -287,16 +291,20 @@ private: SizeType ins = tensorSrep(i).ins(); for (SizeType j = 0; j < ins; ++j) { if (tensorSrep(i).legType(j) != TensorStanza::INDEX_TYPE_SUMMED) continue; TensorSrep::PairStringSizeType mypair = TensorSrep:: splitIntoNameAndId(tensorSrep(i).fullName()); SizeType k1 = absoluteLegNumber(i,j,ntensors); PsimagLite::String label1 = "(I"; label1 += tensorSrep(i).name(); label1 += mypair.first; label1 += ttos(k1) + ")"; SizeType what = tensorSrep(i).legTag(j); PairSizeType k = findTarget(tensorSrep,i,what,TensorStanza::INDEX_DIR_OUT); if (k.first < ntensors) { PsimagLite::String label2 = "(O"; label2 += tensorSrep(k.first).name(); TensorSrep::PairStringSizeType mypair2 = TensorSrep:: splitIntoNameAndId(tensorSrep(k.first).fullName()); label2 += mypair2.first; SizeType k2 = absoluteLegNumber(k.first,k.second,ntensors); label2 += ttos(k2) + ")"; buffer_ += "\\draw[mycon] " + label1 + " -- " + label2 + ";\n"; Loading @@ -304,8 +312,10 @@ private: k = findTarget(tensorSrep,i,what,TensorStanza::INDEX_DIR_IN); if (k.first >= ntensors) continue; TensorSrep::PairStringSizeType mypair3 = TensorSrep:: splitIntoNameAndId(tensorSrep(k.first).fullName()); PsimagLite::String label2 = "(I"; label2 += tensorSrep(k.first).name(); label2 += mypair3.first; SizeType k2 = absoluteLegNumber(k.first,k.second,ntensors); label2 += ttos(k2) + ")"; buffer_ += "\\draw[mycon] " + label1 + " -- " + label2 + ";\n"; Loading Loading @@ -359,7 +369,9 @@ private: RealType summedIds = 0.0; for (SizeType i = 0; i < legs.size(); ++i) { SizeType index = findTensorWithSummedLeg(legs[i],indexOfH,tSrep); SizeType tmp = tSrep(index).id(); TensorSrep::PairStringSizeType mypair = TensorSrep:: splitIntoNameAndId(tSrep(index).fullName()); SizeType tmp = mypair.second; summedIds += unpackTimeAndSpace_[tmp].first; } Loading
src/Engine/ParallelEnvironHelper.h +1 −4 Original line number Diff line number Diff line Loading @@ -176,10 +176,7 @@ private: SizeType ntensors = t.size(); for (SizeType i = 0; i < ntensors; ++i) { PsimagLite::String name = t(i).name(); SizeType id = t(i).id(); SizeType ind = nameToIndexLut_(name + ttos(id)); SizeType ind = nameToIndexLut_(t(i).fullName()); assert(ind < tensors_.size()); SizeType ins = t(i).ins(); Loading