Commit e952bf37 authored by Alvarez, Gonzalo's avatar Alvarez, Gonzalo
Browse files

SpinOrbitalNoLastTerm: without (Si.Sj)(Li.Lj)^2

parent 545766f6
##Ainur1.0
TotalNumberOfSites=4;
NumberOfTerms=4;
# S.S
gt0:GeometryKind="chain";
gt0:GeometryOptions="ConstantValues";
gt0:dir0:Connectors=[0.2];
# L.L
gt1:GeometryKind="chain";
gt1:GeometryOptions="ConstantValues";
gt1:dir0:Connectors=[0.3];
# (L.L)^2
gt2:GeometryKind="chain";
gt2:GeometryOptions="ConstantValues";
gt2:dir0:Connectors=[0.5];
# (L.L)(S.S)
gt3:GeometryKind="chain";
gt3:GeometryOptions="ConstantValues";
gt3:dir0:Connectors=[0.7];
#Model params
Model="SpinOrbitalNoLastTerm";
SpinTwiceS=2;
OrbitalTwiceS=2;
LambdaOne=0;
LambdaTwo=0;
SolverOptions="twositedmrg";
Version="5.77";
OutputFile="data1308";
InfiniteLoopKeptStates=50;
FiniteLoops=[[1, 80, 0],
[-2, 100, 0],
[ 2, 150, 0]];
# TargetSz = Sz + Lz + (s + l)*N
TargetSzPlusConst=8;
......@@ -214,8 +214,10 @@ public:
model_ = new GaugeSpinType(solverParams, io, geometry);
} else if (name_ == "HeisenbergMix") {
model_ = new HeisenbergMixType(solverParams, io, geometry);
} else if (name_ == "SpinOrbital") {
model_ = new SpinOrbitalModelType(solverParams, io, geometry);
} else if (name_.substr(0, 11) == "SpinOrbital") {
PsimagLite::String tmp = (name_.length() == 11) ? ""
: name_.substr(11, name_.length() - 11);
model_ = new SpinOrbitalModelType(solverParams, io, geometry, tmp);
}
#endif
else {
......
......@@ -126,16 +126,16 @@ public:
typedef typename ModelBaseType::ModelLinksType ModelLinksType;
typedef ParametersSpinOrbital<RealType, QnType> ParametersSpinOrbitalType;
//typedef Aklt<ModelBaseType> AkltType;
SpinOrbitalModel(const SolverParamsType& solverParams,
InputValidatorType& io,
const SuperGeometryType& geometry)
const SuperGeometryType& geometry,
PsimagLite::String option)
: ModelBaseType(solverParams,
geometry,
io),
modelParams_(io),
superGeometry_(geometry)
superGeometry_(geometry),
hasLastTerm_(true)
{
HilbertBasisType natBasis;
setBasis(natBasis);
......@@ -154,6 +154,12 @@ public:
MatrixType lz = findSzMatrices(natBasis, 1);
tmp = sz*lz;
sDotL_ = tmp3 + tmp;
if (option == "NoLastTerm")
hasLastTerm_ = false;
else if (option != "")
err(PsimagLite::String("SpinOrbitalModel or SpinOrbitalModelNoLastTerm ") +
"but not " + option + "\n");
}
void write(PsimagLite::String label1, PsimagLite::IoNg::Out::Serializer& io) const
......@@ -373,6 +379,8 @@ protected:
this->makeTrackable("szlz");
}
if (!hasLastTerm_) return; // <--- EARLY EXIT HERE
{
MatrixType tmp = splus*lplusSquared;
typename OperatorType::Su2RelatedType su2related;
......@@ -613,6 +621,9 @@ protected:
ldotLsDotS.push(szlz, 'N', szlz, 'N');
// this creates connections in e listed above
if (!hasLastTerm_) return; // <--- EARLY EXIT HERE
auto valueModiferTerm2 = [](ComplexOrRealType& value) { value *= 0.125;};
ModelTermType& sdotSlDotLSquared = ModelBaseType::createTerm("sdotSlDotLSquared");
......@@ -818,6 +829,7 @@ private:
ParametersSpinOrbitalType modelParams_;
const SuperGeometryType& superGeometry_;
MatrixType sDotL_;
bool hasLastTerm_;
}; // class SpinOrbitalModel
} // namespace Dmrg
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment