sComplex and lexLattice prep work

This commit is contained in:
Peter Boyle
2026-08-19 19:42:56 -04:00
parent 0b1598e9ef
commit 429ad2a71a
2 changed files with 130 additions and 2 deletions
+37 -2
View File
@@ -155,12 +155,27 @@ accelerator_inline vComplexD innerProductD(const vComplexF &l,const vComplexF &r
return innerProduct(la,ra) + innerProduct(lb,rb);
}
accelerator_inline vRealD innerProductD(const vRealF &l,const vRealF &r)
{
{
vRealD la,lb;
vRealD ra,rb;
Optimization::PrecisionChange::StoD(l.v,la.v,lb.v);
Optimization::PrecisionChange::StoD(r.v,ra.v,rb.v);
return innerProduct(la,ra) + innerProduct(lb,rb);
return innerProduct(la,ra) + innerProduct(lb,rb);
}
accelerator_inline sComplexD innerProductD(const sComplexD &l,const sComplexD &r){ return innerProduct(l,r); }
accelerator_inline sRealD innerProductD(const sRealD &l,const sRealD &r){ return innerProduct(l,r); }
accelerator_inline sComplexD innerProductD(const sComplexF &l,const sComplexF &r)
{
sComplexD ret;
ret.v = innerProduct(ComplexD(l.v),ComplexD(r.v));
return ret;
}
accelerator_inline sRealD innerProductD(const sRealF &l,const sRealF &r)
{
sRealD ret;
ret.v = innerProduct(RealD(l.v),RealD(r.v));
return ret;
}
// Now do it for vector, matrix, scalar
@@ -212,6 +227,26 @@ accelerator_inline RealD innerProductD2(const RealF &l,const RealF &r){
accelerator_inline vComplexD innerProductD2(const vComplexD &l,const vComplexD &r){ return innerProduct(l,r); }
accelerator_inline vRealD innerProductD2(const vRealD &l,const vRealD &r){ return innerProduct(l,r); }
// Lex chart. One lane, so the promotion is not a doubling and there is no
// sComplexD2 counterpart to vComplexD2.
accelerator_inline sComplexD innerProductD2(const sComplexD &l,const sComplexD &r){ return innerProduct(l,r); }
accelerator_inline sRealD innerProductD2(const sRealD &l,const sRealD &r){ return innerProduct(l,r); }
accelerator_inline sComplexD innerProductD2(const sComplexF &l,const sComplexF &r)
{
sComplexD dl,dr;
precisionChange(&dl,&l,1);
precisionChange(&dr,&r,1);
return innerProduct(dl,dr);
}
accelerator_inline sRealD innerProductD2(const sRealF &l,const sRealF &r)
{
sRealD dl,dr;
precisionChange(&dl,&l,1);
precisionChange(&dr,&r,1);
return innerProduct(dl,dr);
}
accelerator_inline vComplexD2 innerProductD2(const vComplexF &l,const vComplexF &r)
{
vComplexD2 dl,dr;
+93
View File
@@ -56,6 +56,10 @@ NAMESPACE_BEGIN(Grid);
template<> struct isGridFundamental<ComplexD> : public std::true_type { static constexpr bool notvalue = false; };
template<> struct isGridFundamental<RealF> : public std::true_type { static constexpr bool notvalue = false; };
template<> struct isGridFundamental<RealD> : public std::true_type { static constexpr bool notvalue = false; };
template<> struct isGridFundamental<sComplexF> : public std::true_type { static constexpr bool notvalue = false; };
template<> struct isGridFundamental<sComplexD> : public std::true_type { static constexpr bool notvalue = false; };
template<> struct isGridFundamental<sRealF> : public std::true_type { static constexpr bool notvalue = false; };
template<> struct isGridFundamental<sRealD> : public std::true_type { static constexpr bool notvalue = false; };
template<> struct isGridFundamental<vComplexD2> : public std::true_type { static constexpr bool notvalue = false; };
template<> struct isGridFundamental<vRealD2> : public std::true_type { static constexpr bool notvalue = false; };
@@ -103,6 +107,7 @@ NAMESPACE_BEGIN(Grid);
typedef RealD scalar_objectD;
typedef ComplexF Complexified;
typedef RealF Realified;
typedef Integer Integerified;
typedef RealD DoublePrecision;
typedef RealD DoublePrecision2;
};
@@ -116,6 +121,7 @@ NAMESPACE_BEGIN(Grid);
typedef RealD scalar_objectD;
typedef ComplexD Complexified;
typedef RealD Realified;
typedef Integer Integerified;
typedef RealD DoublePrecision;
typedef RealD DoublePrecision2;
};
@@ -129,6 +135,7 @@ NAMESPACE_BEGIN(Grid);
typedef ComplexD scalar_objectD;
typedef ComplexF Complexified;
typedef RealF Realified;
typedef Integer Integerified;
typedef ComplexD DoublePrecision;
typedef ComplexD DoublePrecision2;
};
@@ -142,6 +149,7 @@ NAMESPACE_BEGIN(Grid);
typedef ComplexD scalar_objectD;
typedef ComplexD Complexified;
typedef RealD Realified;
typedef Integer Integerified;
typedef ComplexD DoublePrecision;
typedef ComplexD DoublePrecision2;
};
@@ -157,6 +165,7 @@ NAMESPACE_BEGIN(Grid);
typedef scalar_typeD scalar_objectD;
typedef scalar_type Complexified;
typedef RealF Realified;
typedef Integer Integerified;
typedef scalar_typeD DoublePrecision;
typedef scalar_typeD DoublePrecision2;
};
@@ -170,6 +179,7 @@ NAMESPACE_BEGIN(Grid);
typedef scalar_typeD scalar_objectD;
typedef scalar_type Complexified;
typedef RealD Realified;
typedef Integer Integerified;
typedef scalar_typeD DoublePrecision;
typedef scalar_typeD DoublePrecision2;
};
@@ -185,6 +195,7 @@ NAMESPACE_BEGIN(Grid);
typedef Integer scalar_objectD;
typedef void Complexified;
typedef void Realified;
typedef Integer Integerified;
typedef void DoublePrecision;
typedef void DoublePrecision2;
};
@@ -199,6 +210,7 @@ NAMESPACE_BEGIN(Grid);
typedef RealD scalar_objectD;
typedef vComplexF Complexified;
typedef vRealF Realified;
typedef vInteger Integerified;
typedef vRealD DoublePrecision;
typedef vRealD2 DoublePrecision2;
};
@@ -212,6 +224,7 @@ NAMESPACE_BEGIN(Grid);
typedef RealD scalar_objectD;
typedef vComplexD Complexified;
typedef vRealD Realified;
typedef vInteger Integerified;
typedef vRealD DoublePrecision;
typedef vRealD DoublePrecision2;
};
@@ -225,6 +238,7 @@ NAMESPACE_BEGIN(Grid);
typedef RealD scalar_objectD;
typedef vComplexD2 Complexified;
typedef vRealD2 Realified;
typedef vInteger Integerified;
typedef vRealD2 DoublePrecision;
typedef vRealD2 DoublePrecision2;
};
@@ -239,6 +253,7 @@ NAMESPACE_BEGIN(Grid);
typedef RealD scalar_objectD;
typedef vComplexH Complexified;
typedef vRealH Realified;
typedef vInteger Integerified;
typedef vRealD DoublePrecision;
typedef vRealD DoublePrecision2;
};
@@ -253,6 +268,7 @@ NAMESPACE_BEGIN(Grid);
typedef ComplexD scalar_objectD;
typedef vComplexH Complexified;
typedef vRealH Realified;
typedef vInteger Integerified;
typedef vComplexD DoublePrecision;
typedef vComplexD DoublePrecision2;
};
@@ -266,6 +282,7 @@ NAMESPACE_BEGIN(Grid);
typedef ComplexD scalar_objectD;
typedef vComplexF Complexified;
typedef vRealF Realified;
typedef vInteger Integerified;
typedef vComplexD DoublePrecision;
typedef vComplexD2 DoublePrecision2;
};
@@ -279,6 +296,7 @@ NAMESPACE_BEGIN(Grid);
typedef ComplexD scalar_objectD;
typedef vComplexD Complexified;
typedef vRealD Realified;
typedef vInteger Integerified;
typedef vComplexD DoublePrecision;
typedef vComplexD DoublePrecision2;
};
@@ -292,6 +310,7 @@ NAMESPACE_BEGIN(Grid);
typedef ComplexD scalar_objectD;
typedef vComplexD2 Complexified;
typedef vRealD2 Realified;
typedef vInteger Integerified;
typedef vComplexD2 DoublePrecision;
typedef vComplexD2 DoublePrecision2;
};
@@ -305,6 +324,77 @@ NAMESPACE_BEGIN(Grid);
typedef Integer scalar_objectD;
typedef void Complexified;
typedef void Realified;
typedef vInteger Integerified;
typedef void DoublePrecision;
typedef void DoublePrecision2;
};
template<> struct GridTypeMapper<sRealF> : public GridTypeMapper_Base {
typedef RealF scalar_type;
typedef RealD scalar_typeD;
typedef sRealF vector_type;
typedef sRealD vector_typeD;
typedef sRealF tensor_reduced;
typedef RealF scalar_object;
typedef RealD scalar_objectD;
typedef sComplexF Complexified;
typedef sRealF Realified;
typedef sInteger Integerified;
typedef sRealD DoublePrecision;
typedef sRealD DoublePrecision2;
};
template<> struct GridTypeMapper<sRealD> : public GridTypeMapper_Base {
typedef RealD scalar_type;
typedef RealD scalar_typeD;
typedef sRealD vector_type;
typedef sRealD vector_typeD;
typedef sRealD tensor_reduced;
typedef RealD scalar_object;
typedef RealD scalar_objectD;
typedef sComplexD Complexified;
typedef sRealD Realified;
typedef sInteger Integerified;
typedef sRealD DoublePrecision;
typedef sRealD DoublePrecision2;
};
template<> struct GridTypeMapper<sComplexF> : public GridTypeMapper_Base {
typedef ComplexF scalar_type;
typedef ComplexD scalar_typeD;
typedef sComplexF vector_type;
typedef sComplexD vector_typeD;
typedef sComplexF tensor_reduced;
typedef ComplexF scalar_object;
typedef ComplexD scalar_objectD;
typedef sComplexF Complexified;
typedef sRealF Realified;
typedef sInteger Integerified;
typedef sComplexD DoublePrecision;
typedef sComplexD DoublePrecision2;
};
template<> struct GridTypeMapper<sComplexD> : public GridTypeMapper_Base {
typedef ComplexD scalar_type;
typedef ComplexD scalar_typeD;
typedef sComplexD vector_type;
typedef sComplexD vector_typeD;
typedef sComplexD tensor_reduced;
typedef ComplexD scalar_object;
typedef ComplexD scalar_objectD;
typedef sComplexD Complexified;
typedef sRealD Realified;
typedef sInteger Integerified;
typedef sComplexD DoublePrecision;
typedef sComplexD DoublePrecision2;
};
template<> struct GridTypeMapper<sInteger> : public GridTypeMapper_Base {
typedef Integer scalar_type;
typedef Integer scalar_typeD;
typedef sInteger vector_type;
typedef sInteger vector_typeD;
typedef sInteger tensor_reduced;
typedef Integer scalar_object;
typedef Integer scalar_objectD;
typedef void Complexified;
typedef void Realified;
typedef sInteger Integerified;
typedef void DoublePrecision;
typedef void DoublePrecision2;
};
@@ -324,6 +414,7 @@ NAMESPACE_BEGIN(Grid);
using scalar_objectD = iScalar<typename BaseTraits::scalar_objectD>;
using Complexified = iScalar<typename BaseTraits::Complexified>;
using Realified = iScalar<typename BaseTraits::Realified>;
using Integerified = iScalar<typename BaseTraits::Integerified>;
using DoublePrecision = iScalar<typename BaseTraits::DoublePrecision>;
using DoublePrecision2= iScalar<typename BaseTraits::DoublePrecision2>;
static constexpr int Rank = BaseTraits::Rank + 1;
@@ -339,6 +430,7 @@ NAMESPACE_BEGIN(Grid);
using scalar_objectD = iVector<typename BaseTraits::scalar_objectD, N>;
using Complexified = iVector<typename BaseTraits::Complexified, N>;
using Realified = iVector<typename BaseTraits::Realified, N>;
using Integerified = iVector<typename BaseTraits::Integerified, N>;
using DoublePrecision = iVector<typename BaseTraits::DoublePrecision, N>;
using DoublePrecision2= iVector<typename BaseTraits::DoublePrecision2, N>;
static constexpr int Rank = BaseTraits::Rank + 1;
@@ -354,6 +446,7 @@ NAMESPACE_BEGIN(Grid);
using scalar_objectD = iMatrix<typename BaseTraits::scalar_objectD, N>;
using Complexified = iMatrix<typename BaseTraits::Complexified, N>;
using Realified = iMatrix<typename BaseTraits::Realified, N>;
using Integerified = iMatrix<typename BaseTraits::Integerified, N>;
using DoublePrecision = iMatrix<typename BaseTraits::DoublePrecision, N>;
using DoublePrecision2= iMatrix<typename BaseTraits::DoublePrecision2, N>;
static constexpr int Rank = BaseTraits::Rank + 2;