mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-03 21:44:33 +00:00 
			
		
		
		
	Big updates with progress towards wilson matrix
This commit is contained in:
		@@ -11,21 +11,21 @@ namespace Grid {
 | 
			
		||||
// multiplication by fundamental scalar type
 | 
			
		||||
template<class l,int N> inline iScalar<l> operator * (const iScalar<l>& lhs,const typename iScalar<l>::scalar_type rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs(rhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs; srhs=rhs;
 | 
			
		||||
  return lhs*srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l,int N> inline iScalar<l> operator * (const typename iScalar<l>::scalar_type lhs,const iScalar<l>& rhs) {  return rhs*lhs; }
 | 
			
		||||
 | 
			
		||||
template<class l,int N> inline iVector<l,N> operator * (const iVector<l,N>& lhs,const typename iScalar<l>::scalar_type rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iVector<l,N>::tensor_reduced srhs(rhs);
 | 
			
		||||
  typename iVector<l,N>::tensor_reduced srhs; srhs=rhs;
 | 
			
		||||
  return lhs*srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l,int N> inline iVector<l,N> operator * (const typename iScalar<l>::scalar_type lhs,const iVector<l,N>& rhs) {  return rhs*lhs; }
 | 
			
		||||
 | 
			
		||||
template<class l,int N> inline iMatrix<l,N> operator * (const iMatrix<l,N>& lhs,const typename iScalar<l>::scalar_type &rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iMatrix<l,N>::tensor_reduced srhs(rhs);
 | 
			
		||||
  typename iMatrix<l,N>::tensor_reduced srhs; srhs=rhs;
 | 
			
		||||
  return lhs*srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l,int N> inline iMatrix<l,N> operator * (const typename iScalar<l>::scalar_type & lhs,const iMatrix<l,N>& rhs) {  return rhs*lhs; }
 | 
			
		||||
@@ -35,24 +35,24 @@ template<class l,int N> inline iMatrix<l,N> operator * (const typename iScalar<l
 | 
			
		||||
////////////////////////////////////////////////////////////////////
 | 
			
		||||
template<class l> inline iScalar<l> operator * (const iScalar<l>& lhs,double rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::scalar_type t(rhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs(t);
 | 
			
		||||
  typename iScalar<l>::scalar_type t; t=rhs;
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs;srhs=t;
 | 
			
		||||
  return lhs*srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l> inline iScalar<l> operator * (double lhs,const iScalar<l>& rhs) {  return rhs*lhs; }
 | 
			
		||||
 | 
			
		||||
template<class l,int N> inline iVector<l,N> operator * (const iVector<l,N>& lhs,double rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::scalar_type t(rhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs(t);
 | 
			
		||||
  typename iScalar<l>::scalar_type t;t=rhs;
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs;srhs=t;
 | 
			
		||||
  return lhs*srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l,int N> inline iVector<l,N> operator * (double lhs,const iVector<l,N>& rhs) {  return rhs*lhs; }
 | 
			
		||||
 | 
			
		||||
template<class l,int N> inline iMatrix<l,N> operator * (const iMatrix<l,N>& lhs,double rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::scalar_type t(rhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs(t);
 | 
			
		||||
  typename iScalar<l>::scalar_type t;t=rhs;
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs;srhs=t;
 | 
			
		||||
  return lhs*srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l,int N> inline iMatrix<l,N> operator * (double lhs,const iMatrix<l,N>& rhs) {  return rhs*lhs; }
 | 
			
		||||
@@ -62,24 +62,26 @@ template<class l,int N> inline iMatrix<l,N> operator * (double lhs,const iMatrix
 | 
			
		||||
////////////////////////////////////////////////////////////////////
 | 
			
		||||
template<class l> inline iScalar<l> operator * (const iScalar<l>& lhs,ComplexD rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::scalar_type t(rhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs(t);
 | 
			
		||||
  typename iScalar<l>::scalar_type t;t=rhs;
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs;srhs=t;
 | 
			
		||||
  
 | 
			
		||||
  
 | 
			
		||||
  return lhs*srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l> inline iScalar<l> operator * (ComplexD lhs,const iScalar<l>& rhs) {  return rhs*lhs; }
 | 
			
		||||
 | 
			
		||||
template<class l,int N> inline iVector<l,N> operator * (const iVector<l,N>& lhs,ComplexD rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::scalar_type t(rhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs(t);
 | 
			
		||||
  typename iScalar<l>::scalar_type t;t=rhs;
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs;srhs=t;
 | 
			
		||||
  return lhs*srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l,int N> inline iVector<l,N> operator * (ComplexD lhs,const iVector<l,N>& rhs) {  return rhs*lhs; }
 | 
			
		||||
 | 
			
		||||
template<class l,int N> inline iMatrix<l,N> operator * (const iMatrix<l,N>& lhs,ComplexD rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::scalar_type t(rhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs(t);
 | 
			
		||||
  typename iScalar<l>::scalar_type t;t=rhs;
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs;srhs=t;
 | 
			
		||||
  return lhs*srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l,int N> inline iMatrix<l,N> operator * (ComplexD lhs,const iMatrix<l,N>& rhs) {  return rhs*lhs; }
 | 
			
		||||
@@ -89,24 +91,24 @@ template<class l,int N> inline iMatrix<l,N> operator * (ComplexD lhs,const iMatr
 | 
			
		||||
////////////////////////////////////////////////////////////////////
 | 
			
		||||
template<class l> inline iScalar<l> operator * (const iScalar<l>& lhs,Integer rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::scalar_type t(rhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs(t);
 | 
			
		||||
  typename iScalar<l>::scalar_type t;  t=rhs;
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs; srhs=t;
 | 
			
		||||
  return lhs*srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l> inline iScalar<l> operator * (Integer lhs,const iScalar<l>& rhs) {  return rhs*lhs; }
 | 
			
		||||
 | 
			
		||||
template<class l,int N> inline iVector<l,N> operator * (const iVector<l,N>& lhs,Integer rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::scalar_type t(rhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs(t);
 | 
			
		||||
  typename iScalar<l>::scalar_type t;t=rhs;
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs;srhs=t;
 | 
			
		||||
  return lhs*srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l,int N> inline iVector<l,N> operator * (Integer lhs,const iVector<l,N>& rhs) {  return rhs*lhs; }
 | 
			
		||||
 | 
			
		||||
template<class l,int N> inline iMatrix<l,N> operator * (const iMatrix<l,N>& lhs,Integer rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::scalar_type t(rhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs(t);
 | 
			
		||||
  typename iScalar<l>::scalar_type t;t=rhs;
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs;srhs=t;
 | 
			
		||||
  return lhs*srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l,int N> inline iMatrix<l,N> operator * (Integer lhs,const iMatrix<l,N>& rhs) {  return rhs*lhs; }
 | 
			
		||||
@@ -118,14 +120,14 @@ template<class l,int N> inline iMatrix<l,N> operator * (Integer lhs,const iMatri
 | 
			
		||||
///////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
template<class l,int N> inline iScalar<l> operator + (const iScalar<l>& lhs,const typename iScalar<l>::scalar_type rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs(rhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs; srhs=rhs;
 | 
			
		||||
  return lhs+srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l,int N> inline iScalar<l> operator + (const typename iScalar<l>::scalar_type lhs,const iScalar<l>& rhs) {  return rhs+lhs; }
 | 
			
		||||
 | 
			
		||||
template<class l,int N> inline iMatrix<l,N> operator + (const iMatrix<l,N>& lhs,const typename iScalar<l>::scalar_type rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iMatrix<l,N>::tensor_reduced srhs(rhs);
 | 
			
		||||
  typename iMatrix<l,N>::tensor_reduced srhs; srhs=rhs;
 | 
			
		||||
  return lhs+srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l,int N> inline iMatrix<l,N> operator + (const typename iScalar<l>::scalar_type lhs,const iMatrix<l,N>& rhs) {  return rhs+lhs; }
 | 
			
		||||
@@ -135,16 +137,16 @@ template<class l,int N> inline iMatrix<l,N> operator + (const typename iScalar<l
 | 
			
		||||
////////////////////////////////////////////////////////////////////
 | 
			
		||||
template<class l> inline iScalar<l> operator + (const iScalar<l>& lhs,double rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::scalar_type t(rhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs(t);
 | 
			
		||||
  typename iScalar<l>::scalar_type t; t=rhs;
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs; srhs=t;
 | 
			
		||||
  return lhs+srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l> inline iScalar<l> operator + (double lhs,const iScalar<l>& rhs) {  return rhs+lhs; }
 | 
			
		||||
 | 
			
		||||
template<class l,int N> inline iMatrix<l,N> operator + (const iMatrix<l,N>& lhs,double rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::scalar_type t(rhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs(t);
 | 
			
		||||
  typename iScalar<l>::scalar_type t;t=rhs;
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs;srhs=t;
 | 
			
		||||
  return lhs+srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l,int N> inline iMatrix<l,N> operator + (double lhs,const iMatrix<l,N>& rhs) {  return rhs+lhs; }
 | 
			
		||||
@@ -155,8 +157,8 @@ template<class l,int N> inline iMatrix<l,N> operator + (double lhs,const iMatrix
 | 
			
		||||
 | 
			
		||||
template<class l> inline iScalar<l> operator + (const iScalar<l>& lhs,Integer rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::scalar_type t(rhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs(t);
 | 
			
		||||
  typename iScalar<l>::scalar_type t; t=rhs;
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs; srhs=t;
 | 
			
		||||
  return lhs+srhs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -164,8 +166,8 @@ template<class l> inline iScalar<l> operator + (Integer lhs,const iScalar<l>& rh
 | 
			
		||||
 | 
			
		||||
template<class l,int N> inline iMatrix<l,N> operator + (const iMatrix<l,N>& lhs,Integer rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::scalar_type t(rhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs(t);
 | 
			
		||||
  typename iScalar<l>::scalar_type t;t=rhs;
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs;srhs=t;
 | 
			
		||||
  return lhs+srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l,int N> inline iMatrix<l,N> operator + (Integer lhs,const iMatrix<l,N>& rhs) {  return rhs+lhs; }
 | 
			
		||||
@@ -176,23 +178,23 @@ template<class l,int N> inline iMatrix<l,N> operator + (Integer lhs,const iMatri
 | 
			
		||||
///////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
template<class l,int N> inline iScalar<l> operator - (const iScalar<l>& lhs,const typename iScalar<l>::scalar_type rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs(rhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs; srhs=rhs;
 | 
			
		||||
  return lhs-srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l,int N> inline iScalar<l> operator - (const typename iScalar<l>::scalar_type lhs,const iScalar<l>& rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::tensor_reduced slhs(lhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced slhs;slhs=lhs;
 | 
			
		||||
  return slhs-rhs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<class l,int N> inline iMatrix<l,N> operator - (const iMatrix<l,N>& lhs,const typename iScalar<l>::scalar_type rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs(rhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs; srhs=rhs;
 | 
			
		||||
  return lhs-srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l,int N> inline iMatrix<l,N> operator - (const typename iScalar<l>::scalar_type lhs,const iMatrix<l,N>& rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::tensor_reduced slhs(lhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced slhs;slhs=lhs;
 | 
			
		||||
  return slhs-rhs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -201,27 +203,27 @@ template<class l,int N> inline iMatrix<l,N> operator - (const typename iScalar<l
 | 
			
		||||
////////////////////////////////////////////////////////////////////
 | 
			
		||||
template<class l> inline iScalar<l> operator - (const iScalar<l>& lhs,double rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::scalar_type t(rhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs(t);
 | 
			
		||||
  typename iScalar<l>::scalar_type t; t=rhs;
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs; srhs=t;
 | 
			
		||||
  return lhs-srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l> inline iScalar<l> operator - (double lhs,const iScalar<l>& rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::scalar_type t(lhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced slhs(t);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced slhs;slhs=t;
 | 
			
		||||
  return slhs-rhs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<class l,int N> inline iMatrix<l,N> operator - (const iMatrix<l,N>& lhs,double rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::scalar_type t(rhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs(t);
 | 
			
		||||
  typename iScalar<l>::scalar_type t;t=rhs;
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs;srhs=t;
 | 
			
		||||
  return lhs-srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l,int N> inline iMatrix<l,N> operator - (double lhs,const iMatrix<l,N>& rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::scalar_type t(lhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced slhs(t);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced slhs;slhs=t;
 | 
			
		||||
  return slhs-rhs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -230,26 +232,26 @@ template<class l,int N> inline iMatrix<l,N> operator - (double lhs,const iMatrix
 | 
			
		||||
////////////////////////////////////////////////////////////////////
 | 
			
		||||
template<class l> inline iScalar<l> operator - (const iScalar<l>& lhs,Integer rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::scalar_type t(rhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs(t);
 | 
			
		||||
  typename iScalar<l>::scalar_type t; t=rhs;
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs; srhs=t;
 | 
			
		||||
  return lhs-srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l> inline iScalar<l> operator - (Integer lhs,const iScalar<l>& rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::scalar_type t(lhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced slhs(t);
 | 
			
		||||
  typename iScalar<l>::scalar_type t;t=lhs;
 | 
			
		||||
  typename iScalar<l>::tensor_reduced slhs;slhs=t;
 | 
			
		||||
  return slhs-rhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l,int N> inline iMatrix<l,N> operator - (const iMatrix<l,N>& lhs,Integer rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::scalar_type t(rhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs(t);
 | 
			
		||||
  typename iScalar<l>::scalar_type t;t=rhs;
 | 
			
		||||
  typename iScalar<l>::tensor_reduced srhs;srhs=t;
 | 
			
		||||
  return lhs-srhs;
 | 
			
		||||
}
 | 
			
		||||
template<class l,int N> inline iMatrix<l,N> operator - (Integer lhs,const iMatrix<l,N>& rhs) 
 | 
			
		||||
{
 | 
			
		||||
  typename iScalar<l>::scalar_type t(lhs);
 | 
			
		||||
  typename iScalar<l>::tensor_reduced slhs(t);
 | 
			
		||||
  typename iScalar<l>::scalar_type t;t=lhs;
 | 
			
		||||
  typename iScalar<l>::tensor_reduced slhs;slhs=t;
 | 
			
		||||
  return slhs-rhs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,8 @@ namespace Grid {
 | 
			
		||||
    auto innerProduct (const iVector<l,N>& lhs,const iVector<r,N>& rhs) -> iScalar<decltype(innerProduct(lhs._internal[0],rhs._internal[0]))>
 | 
			
		||||
    {
 | 
			
		||||
        typedef decltype(innerProduct(lhs._internal[0],rhs._internal[0])) ret_t;
 | 
			
		||||
        iScalar<ret_t> ret=zero;
 | 
			
		||||
        iScalar<ret_t> ret;
 | 
			
		||||
	ret=zero;
 | 
			
		||||
        for(int c1=0;c1<N;c1++){
 | 
			
		||||
            ret._internal += innerProduct(lhs._internal[c1],rhs._internal[c1]);
 | 
			
		||||
        }
 | 
			
		||||
@@ -27,8 +28,9 @@ namespace Grid {
 | 
			
		||||
    auto innerProduct (const iMatrix<l,N>& lhs,const iMatrix<r,N>& rhs) -> iScalar<decltype(innerProduct(lhs._internal[0][0],rhs._internal[0][0]))>
 | 
			
		||||
    {
 | 
			
		||||
        typedef decltype(innerProduct(lhs._internal[0][0],rhs._internal[0][0])) ret_t;
 | 
			
		||||
        iScalar<ret_t> ret=zero;
 | 
			
		||||
        iScalar<ret_t> ret;
 | 
			
		||||
        iScalar<ret_t> tmp;
 | 
			
		||||
	ret=zero;
 | 
			
		||||
        for(int c1=0;c1<N;c1++){
 | 
			
		||||
        for(int c2=0;c2<N;c2++){
 | 
			
		||||
	  ret._internal+=innerProduct(lhs._internal[c1][c2],rhs._internal[c1][c2]);
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,16 @@ namespace Grid {
 | 
			
		||||
// These can be composed to form tensor products of internal indices.
 | 
			
		||||
///////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
// It is useful to NOT have any constructors
 | 
			
		||||
// so that these classes assert "is_pod<class> == true"
 | 
			
		||||
// because then the standard C++ valarray container eliminates fill overhead on new allocation and 
 | 
			
		||||
// non-move copying.
 | 
			
		||||
//
 | 
			
		||||
// However note that doing this eliminates some syntactical sugar such as 
 | 
			
		||||
// calling the constructor explicitly or implicitly
 | 
			
		||||
//
 | 
			
		||||
#define TENSOR_IS_POD
 | 
			
		||||
 | 
			
		||||
template<class vtype> class iScalar
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
@@ -25,16 +35,22 @@ public:
 | 
			
		||||
  // Scalar no action
 | 
			
		||||
  //  template<int Level> using tensor_reduce_level = typename iScalar<GridTypeMapper<vtype>::tensor_reduce_level<Level> >;
 | 
			
		||||
 | 
			
		||||
    iScalar(){};
 | 
			
		||||
    
 | 
			
		||||
    iScalar(scalar_type s) : _internal(s) {};// recurse down and hit the constructor for vector_type
 | 
			
		||||
 | 
			
		||||
    iScalar(const Zero &z){ *this = zero; };
 | 
			
		||||
#ifndef TENSOR_IS_POD
 | 
			
		||||
  iScalar(){;};
 | 
			
		||||
  iScalar(scalar_type s) : _internal(s) {};// recurse down and hit the constructor for vector_type
 | 
			
		||||
  iScalar(const Zero &z){ *this = zero; };
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    iScalar<vtype> & operator= (const Zero &hero){
 | 
			
		||||
        zeroit(*this);
 | 
			
		||||
        return *this;
 | 
			
		||||
      zeroit(*this);
 | 
			
		||||
      return *this;
 | 
			
		||||
    }
 | 
			
		||||
    iScalar<vtype> & operator= (const scalar_type s){
 | 
			
		||||
      _internal=s;
 | 
			
		||||
      return *this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    friend void zeroit(iScalar<vtype> &that){
 | 
			
		||||
        zeroit(that._internal);
 | 
			
		||||
    }
 | 
			
		||||
@@ -114,8 +130,10 @@ public:
 | 
			
		||||
 | 
			
		||||
  enum { TensorLevel = GridTypeMapper<vtype>::TensorLevel + 1};
 | 
			
		||||
 | 
			
		||||
    iVector(const Zero &z){ *this = zero; };
 | 
			
		||||
    iVector() {};// Empty constructure
 | 
			
		||||
#ifndef TENSOR_IS_POD
 | 
			
		||||
  iVector(const Zero &z){ *this = zero; };
 | 
			
		||||
  iVector() {};// Empty constructure
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    iVector<vtype,N> & operator= (const Zero &hero){
 | 
			
		||||
        zeroit(*this);
 | 
			
		||||
@@ -185,8 +203,11 @@ public:
 | 
			
		||||
 | 
			
		||||
  enum { TensorLevel = GridTypeMapper<vtype>::TensorLevel + 1};
 | 
			
		||||
 | 
			
		||||
#ifndef TENSOR_IS_POD
 | 
			
		||||
  iMatrix(const Zero &z){ *this = zero; };
 | 
			
		||||
  iMatrix() {};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  iMatrix<vtype,N> & operator= (const Zero &hero){
 | 
			
		||||
    zeroit(*this);
 | 
			
		||||
    return *this;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user