Commit 5b2bf6e9 authored by Alvarez, Gonzalo's avatar Alvarez, Gonzalo
Browse files

name and id now go together

parent d7cc7e84
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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) {
+16 −14
Original line number Diff line number Diff line
@@ -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,"");
@@ -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++);
@@ -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");
@@ -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;
@@ -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;
			}
@@ -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);

@@ -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);
		}
@@ -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;
+19 −26
Original line number Diff line number Diff line
@@ -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;

@@ -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(),
@@ -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());
@@ -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;
			}

@@ -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)
@@ -445,7 +438,7 @@ private:
			symmLocal_ = symmLocal;

		TensorSrep tdstr(dsrep);
		VectorPairStringSizeType tensorNameIds;
		VectorStringType tensorNameIds;
		findTensors(tensorNameIds,  tdstr);
		initTensorNameIds(tensorNameIds);

+28 −16
Original line number Diff line number Diff line
@@ -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)
	{
@@ -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;
@@ -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;

@@ -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;
			}
@@ -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++;
		}
@@ -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;
		}

@@ -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";
@@ -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";
@@ -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;
		}

+1 −4
Original line number Diff line number Diff line
@@ -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