Exemplo n.º 1
0
void Tensor::threecheck(const DoubleMatrix &B1, const DoubleMatrix &B2,
			const DoubleMatrix &B3) {
  if (B1.displayRows() != 3 || B1.displayCols() != 3 ||
      B2.displayRows() != 3 || B2.displayCols() != 3 ||
      B3.displayRows() != 3 || B3.displayCols() != 3) {
    ostringstream ii;
    ii << "Incorrect tensor initialisation with \n" << B1 << B2 << B3;
    throw ii.str();
  }
}
Exemplo n.º 2
0
// T^ijk = T^ijl M_lk
Tensor Tensor::operator*(const DoubleMatrix & M) const {
  if (M.displayRows() != 3 || M.displayCols() !=3) {
    ostringstream ii;
    ii << "Tensor " << *this << " * matrix" << M << "of wrong size.\n";
    throw ii.str();
  }
  Tensor T;
  int i; 
  for (i=1; i<=3; i++) T(i) = display(i) * M;
  return T;
}
Exemplo n.º 3
0
// T^kij = M_il T^klj
Tensor operator*(const DoubleMatrix &M, const Tensor &T) {
  if (M.displayRows() !=3 || M.displayCols() != 3) {
    ostringstream ii;
    ii << "DoubleMatrix " << M << " * Tensor" << T << "of wrong size\n";
    throw ii.str();
  }
  Tensor temp;
  int i,j,k,l; 
  for(k=1; k<=3; k++)
    for(i=1; i<=3; i++) 
      for(j=1; j<=3; j++)
	for(l=1; l<=3; l++)
	  temp(k, i, j) += M.display(i, l) * T.display(k, l, j);
  return temp;  
}
Exemplo n.º 4
0
// Does T^ijk = T^ljk M_li
Tensor Tensor::product(const DoubleMatrix & M) const {
  if (M.displayRows() != 3 || M.displayCols() !=3) {
    ostringstream ii;
    ii << "Tensor " << *this << " * matrix" << M << "of wrong size.\n";
    throw ii.str();
  }
  Tensor T;
  int i,j,k,l; 
  for (i=1; i<=3; i++)
    for (j=1; j<=3; j++)
      for (k=1; k<=3; k++) 
	for (l=1; l<=3; l++) 
	  T(i, j, k) = T(i, j, k) + display(l, j, k) * M.display(l, i);
  return T;
}