working on tensor class

This commit is contained in:
2024-04-09 16:08:15 +02:00
parent ec468f2db2
commit 74a96d4eb6
2 changed files with 69 additions and 53 deletions

View File

@@ -26,6 +26,53 @@
namespace LA {
template<typename T>
int Tensor<T>:: calcrank()
{
int r=0;
for(int i=0; i<shape.size(); ++i)
{
if(shape[i].number==0) laerror("empty index group");
r+=shape[i].number;
}
return r;
}
template<typename T>
LA_largeindex Tensor<T>::calcsize()
{
groupsizes.resize(shape.size());
cumsizes.resize(shape.size());
LA_largeindex s=1;
for(int i=0; i<shape.size(); ++i)
{
if(shape[i].number==0) laerror("empty index group");
if(shape[i].range==0) return 0;
cumsizes[i]=s;
switch(shape[i].symmetry)
{
case 0:
s *= groupsizes[i] = longpow(shape[i].range,shape[i].number);
break;
case 1:
s *= groupsizes[i] = simplicial(shape[i].number,shape[i].range);
break;
case -1:
s *= groupsizes[i] = simplicial(shape[i].number,shape[i].range-shape[i].number+1);
break;
default:
laerror("illegal index group symmetry");
break;
}
}
return s;
}
LA_largeindex subindex(int *sign, const INDEXGROUP &g, const NRVec<LA_index> &I) //index of one subgroup
{
#ifdef DEBUG