oomph::RankFiveTensor< T > Class Template Reference

A Rank 5 Tensor class. More...

#include <matrices.h>

Public Member Functions

 RankFiveTensor ()
 Empty constructor. More...
 
 RankFiveTensor (const RankFiveTensor &source_tensor)
 Copy constructor: Deep copy. More...
 
RankFiveTensoroperator= (const RankFiveTensor &source_tensor)
 Copy assignement. More...
 
 RankFiveTensor (const unsigned long &n)
 One parameter constructor produces a nxnxnxnxn tensor. More...
 
 RankFiveTensor (const unsigned long &n_index1, const unsigned long &n_index2, const unsigned long &n_index3, const unsigned long &n_index4, const unsigned long &n_index5)
 Four parameter constructor, general non-square tensor. More...
 
 RankFiveTensor (const unsigned long &n_index1, const unsigned long &n_index2, const unsigned long &n_index3, const unsigned long &n_index4, const unsigned long &n_index5, const T &initial_val)
 Four parameter constructor, general non-square tensor. More...
 
virtual ~RankFiveTensor ()
 Destructor: delete the pointers. More...
 
void resize (const unsigned long &n)
 Resize to a square nxnxnxn tensor. More...
 
void resize (const unsigned long &n_index1, const unsigned long &n_index2, const unsigned long &n_index3, const unsigned long &n_index4, const unsigned long &n_index5)
 Resize to a general tensor. More...
 
void resize (const unsigned long &n_index1, const unsigned long &n_index2, const unsigned long &n_index3, const unsigned long &n_index4, const unsigned long &n_index5, const T &initial_value)
 Resize to a general tensor. More...
 
void initialise (const T &val)
 Initialise all values in the tensor to val. More...
 
unsigned long nindex1 () const
 Return the range of index 1 of the tensor. More...
 
unsigned long nindex2 () const
 Return the range of index 2 of the tensor. More...
 
unsigned long nindex3 () const
 Return the range of index 3 of the tensor. More...
 
unsigned long nindex4 () const
 Return the range of index 4 of the tensor. More...
 
unsigned long nindex5 () const
 Return the range of index 5 of the tensor. More...
 
Toperator() (const unsigned long &i, const unsigned long &j, const unsigned long &k, const unsigned long &l, const unsigned long &m)
 Overload the round brackets to give access as a(i,j,k,l,m) More...
 
T operator() (const unsigned long &i, const unsigned long &j, const unsigned long &k, const unsigned long &l, const unsigned long &m) const
 Overload a const version for read-only access as a(i,j,k,l,m) More...
 
Traw_direct_access (const unsigned long &i)
 
const Traw_direct_access (const unsigned long &i) const
 
unsigned offset (const unsigned long &i, const unsigned long &j, const unsigned long &k) const
 

Private Member Functions

void range_check (const unsigned long &i, const unsigned long &j, const unsigned long &k, const unsigned long &l, const unsigned long &m) const
 

Private Attributes

TTensordata
 Private internal representation as pointer to data. More...
 
unsigned N
 1st Tensor dimension More...
 
unsigned M
 2nd Tensor dimension More...
 
unsigned P
 3rd Tensor dimension More...
 
unsigned Q
 4th Tensor dimension More...
 
unsigned R
 5th Tensor dimension More...
 

Detailed Description

template<class T>
class oomph::RankFiveTensor< T >

A Rank 5 Tensor class.

/////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////

Constructor & Destructor Documentation

◆ RankFiveTensor() [1/5]

template<class T >
oomph::RankFiveTensor< T >::RankFiveTensor ( )
inline

Empty constructor.

2195 : Tensordata(0), N(0), M(0), P(0), Q(0), R(0) {}
unsigned R
5th Tensor dimension
Definition: matrices.h:2131
unsigned M
2nd Tensor dimension
Definition: matrices.h:2122
unsigned Q
4th Tensor dimension
Definition: matrices.h:2128
unsigned P
3rd Tensor dimension
Definition: matrices.h:2125
T * Tensordata
Private internal representation as pointer to data.
Definition: matrices.h:2116
unsigned N
1st Tensor dimension
Definition: matrices.h:2119

◆ RankFiveTensor() [2/5]

template<class T >
oomph::RankFiveTensor< T >::RankFiveTensor ( const RankFiveTensor< T > &  source_tensor)
inline

Copy constructor: Deep copy.

2199  {
2200  // Set row and column lengths
2201  N = source_tensor.nindex1();
2202  M = source_tensor.nindex2();
2203  P = source_tensor.nindex3();
2204  Q = source_tensor.nindex4();
2205  R = source_tensor.nindex5();
2206 
2207  // Assign space for the data
2208  Tensordata = new T[N * M * P * Q * R];
2209 
2210  // Copy the data across from the other matrix
2211  for (unsigned i = 0; i < N; i++)
2212  {
2213  for (unsigned j = 0; j < M; j++)
2214  {
2215  for (unsigned k = 0; k < P; k++)
2216  {
2217  for (unsigned l = 0; l < Q; l++)
2218  {
2219  for (unsigned m = 0; m < R; m++)
2220  {
2221  Tensordata[R * (Q * (P * (M * i + j) + k) + l) + m] =
2222  source_tensor(i, j, k, l, m);
2223  }
2224  }
2225  }
2226  }
2227  }
2228  }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
The matrix class, also used for vectors and row-vectors.
Definition: Eigen/Eigen/src/Core/Matrix.h:186
int * m
Definition: level2_cplx_impl.h:294
char char char int int * k
Definition: level2_impl.h:374
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2

References i, j, k, m, oomph::RankFiveTensor< T >::M, oomph::RankFiveTensor< T >::N, oomph::RankFiveTensor< T >::nindex1(), oomph::RankFiveTensor< T >::nindex2(), oomph::RankFiveTensor< T >::nindex3(), oomph::RankFiveTensor< T >::nindex4(), oomph::RankFiveTensor< T >::nindex5(), oomph::RankFiveTensor< T >::P, oomph::RankFiveTensor< T >::Q, oomph::RankFiveTensor< T >::R, and oomph::RankFiveTensor< T >::Tensordata.

◆ RankFiveTensor() [3/5]

template<class T >
oomph::RankFiveTensor< T >::RankFiveTensor ( const unsigned long &  n)
inline

One parameter constructor produces a nxnxnxnxn tensor.

2273  {
2274  // Set row and column lengths
2275  N = n;
2276  M = n;
2277  P = n;
2278  Q = n;
2279  R = n;
2280  // Assign space for the n rows
2281  Tensordata = new T[N * M * P * Q * R];
2282  // Initialise to zero if required
2283 #ifdef OOMPH_INITIALISE_DENSE_MATRICES
2284  initialise(T(0));
2285 #endif
2286  }
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Eigen::Triplet< double > T
Definition: EigenUnitTest.cpp:11
void initialise(const T &val)
Initialise all values in the tensor to val.
Definition: matrices.h:2477

References oomph::RankFiveTensor< T >::initialise(), n, oomph::RankFiveTensor< T >::N, oomph::RankFiveTensor< T >::P, oomph::RankFiveTensor< T >::Q, oomph::RankFiveTensor< T >::R, and oomph::RankFiveTensor< T >::Tensordata.

◆ RankFiveTensor() [4/5]

template<class T >
oomph::RankFiveTensor< T >::RankFiveTensor ( const unsigned long &  n_index1,
const unsigned long &  n_index2,
const unsigned long &  n_index3,
const unsigned long &  n_index4,
const unsigned long &  n_index5 
)
inline

Four parameter constructor, general non-square tensor.

2294  {
2295  // Set row and column lengths
2296  N = n_index1;
2297  M = n_index2;
2298  P = n_index3;
2299  Q = n_index4;
2300  R = n_index5;
2301  // Assign space for the n rows
2302  Tensordata = new T[N * M * P * Q * R];
2303  // Initialise to zero if required
2304 #ifdef OOMPH_INITIALISE_DENSE_MATRICES
2305  initialise(T(0));
2306 #endif
2307  }

References oomph::RankFiveTensor< T >::initialise(), oomph::RankFiveTensor< T >::N, oomph::RankFiveTensor< T >::P, oomph::RankFiveTensor< T >::Q, oomph::RankFiveTensor< T >::R, and oomph::RankFiveTensor< T >::Tensordata.

◆ RankFiveTensor() [5/5]

template<class T >
oomph::RankFiveTensor< T >::RankFiveTensor ( const unsigned long &  n_index1,
const unsigned long &  n_index2,
const unsigned long &  n_index3,
const unsigned long &  n_index4,
const unsigned long &  n_index5,
const T initial_val 
)
inline

Four parameter constructor, general non-square tensor.

2317  {
2318  // Set row and column lengths
2319  N = n_index1;
2320  M = n_index2;
2321  P = n_index3;
2322  Q = n_index4;
2323  R = n_index5;
2324  // Assign space for the n rows
2325  Tensordata = new T[N * M * P * Q * R];
2326  // Initialise to the initial value
2327  initialise(initial_val);
2328  }

References oomph::RankFiveTensor< T >::initialise(), oomph::RankFiveTensor< T >::N, oomph::RankFiveTensor< T >::P, oomph::RankFiveTensor< T >::Q, oomph::RankFiveTensor< T >::R, and oomph::RankFiveTensor< T >::Tensordata.

◆ ~RankFiveTensor()

template<class T >
virtual oomph::RankFiveTensor< T >::~RankFiveTensor ( )
inlinevirtual

Destructor: delete the pointers.

2332  {
2333  delete[] Tensordata;
2334  Tensordata = 0;
2335  }

References oomph::RankFiveTensor< T >::Tensordata.

Member Function Documentation

◆ initialise()

template<class T >
void oomph::RankFiveTensor< T >::initialise ( const T val)
inline

Initialise all values in the tensor to val.

2478  {
2479  for (unsigned long i = 0; i < (N * M * P * Q * R); ++i)
2480  {
2481  Tensordata[i] = val;
2482  }
2483  }
val
Definition: calibrate.py:119

References i, oomph::RankFiveTensor< T >::N, oomph::RankFiveTensor< T >::P, oomph::RankFiveTensor< T >::Q, oomph::RankFiveTensor< T >::R, oomph::RankFiveTensor< T >::Tensordata, and calibrate::val.

Referenced by oomph::RankFiveTensor< T >::RankFiveTensor(), and oomph::RankFiveTensor< T >::resize().

◆ nindex1()

template<class T >
unsigned long oomph::RankFiveTensor< T >::nindex1 ( ) const
inline

Return the range of index 1 of the tensor.

2487  {
2488  return N;
2489  }

References oomph::RankFiveTensor< T >::N.

Referenced by oomph::RankFiveTensor< T >::operator=(), and oomph::RankFiveTensor< T >::RankFiveTensor().

◆ nindex2()

template<class T >
unsigned long oomph::RankFiveTensor< T >::nindex2 ( ) const
inline

Return the range of index 2 of the tensor.

2493  {
2494  return M;
2495  }

References oomph::RankFiveTensor< T >::M.

Referenced by oomph::RankFiveTensor< T >::operator=(), and oomph::RankFiveTensor< T >::RankFiveTensor().

◆ nindex3()

template<class T >
unsigned long oomph::RankFiveTensor< T >::nindex3 ( ) const
inline

Return the range of index 3 of the tensor.

2499  {
2500  return P;
2501  }

References oomph::RankFiveTensor< T >::P.

Referenced by oomph::RankFiveTensor< T >::operator=(), and oomph::RankFiveTensor< T >::RankFiveTensor().

◆ nindex4()

template<class T >
unsigned long oomph::RankFiveTensor< T >::nindex4 ( ) const
inline

Return the range of index 4 of the tensor.

2505  {
2506  return Q;
2507  }

References oomph::RankFiveTensor< T >::Q.

Referenced by oomph::RankFiveTensor< T >::operator=(), and oomph::RankFiveTensor< T >::RankFiveTensor().

◆ nindex5()

template<class T >
unsigned long oomph::RankFiveTensor< T >::nindex5 ( ) const
inline

Return the range of index 5 of the tensor.

2511  {
2512  return R;
2513  }

References oomph::RankFiveTensor< T >::R.

Referenced by oomph::RankFiveTensor< T >::operator=(), and oomph::RankFiveTensor< T >::RankFiveTensor().

◆ offset()

◆ operator()() [1/2]

template<class T >
T& oomph::RankFiveTensor< T >::operator() ( const unsigned long &  i,
const unsigned long &  j,
const unsigned long &  k,
const unsigned long &  l,
const unsigned long &  m 
)
inline

Overload the round brackets to give access as a(i,j,k,l,m)

2521  {
2522 #ifdef RANGE_CHECKING
2523  this->range_check(i, j, k, l, m);
2524 #endif
2525  return Tensordata[R * (Q * (P * (M * i + j) + k) + l) + m];
2526  }
void range_check(const unsigned long &i, const unsigned long &j, const unsigned long &k, const unsigned long &l, const unsigned long &m) const
Definition: matrices.h:2135

References i, j, k, m, oomph::RankFiveTensor< T >::P, oomph::RankFiveTensor< T >::Q, oomph::RankFiveTensor< T >::R, oomph::RankFiveTensor< T >::range_check(), and oomph::RankFiveTensor< T >::Tensordata.

◆ operator()() [2/2]

template<class T >
T oomph::RankFiveTensor< T >::operator() ( const unsigned long &  i,
const unsigned long &  j,
const unsigned long &  k,
const unsigned long &  l,
const unsigned long &  m 
) const
inline

Overload a const version for read-only access as a(i,j,k,l,m)

2534  {
2535 #ifdef RANGE_CHECKING
2536  this->range_check(i, j, k, l, m);
2537 #endif
2538  return Tensordata[R * (Q * (P * (M * i + j) + k) + l) + m];
2539  }

References i, j, k, m, oomph::RankFiveTensor< T >::P, oomph::RankFiveTensor< T >::Q, oomph::RankFiveTensor< T >::R, oomph::RankFiveTensor< T >::range_check(), and oomph::RankFiveTensor< T >::Tensordata.

◆ operator=()

template<class T >
RankFiveTensor& oomph::RankFiveTensor< T >::operator= ( const RankFiveTensor< T > &  source_tensor)
inline

Copy assignement.

2232  {
2233  // Don't create a new matrix if the assignement is the identity
2234  if (this != &source_tensor)
2235  {
2236  // Check row and column length
2237  unsigned long n = source_tensor.nindex1();
2238  unsigned long m = source_tensor.nindex2();
2239  unsigned long p = source_tensor.nindex3();
2240  unsigned long q = source_tensor.nindex4();
2241  unsigned long r = source_tensor.nindex5();
2242  // Resize the tensor to be the same size as the old tensor
2243  if ((N != n) || (M != m) || (P != p) || (Q != q) || (R != r))
2244  {
2245  resize(n, m, p, q, r);
2246  }
2247 
2248  // Copy entries across from the other matrix
2249  for (unsigned long i = 0; i < N; i++)
2250  {
2251  for (unsigned long j = 0; j < M; j++)
2252  {
2253  for (unsigned long k = 0; k < P; k++)
2254  {
2255  for (unsigned long l = 0; l < Q; l++)
2256  {
2257  for (unsigned long m = 0; m < R; m++)
2258  {
2259  (*this)(i, j, k, l, m) = source_tensor(i, j, k, l, m);
2260  }
2261  }
2262  }
2263  }
2264  }
2265  }
2266  // Return reference to object itself (i.e. de-reference this pointer)
2267  return *this;
2268  }
float * p
Definition: Tutorial_Map_using.cpp:9
void resize(const unsigned long &n)
Resize to a square nxnxnxn tensor.
Definition: matrices.h:2338
EIGEN_DEVICE_FUNC const Scalar & q
Definition: SpecialFunctionsImpl.h:2019
r
Definition: UniformPSDSelfTest.py:20

References i, j, k, m, oomph::RankFiveTensor< T >::M, n, oomph::RankFiveTensor< T >::N, oomph::RankFiveTensor< T >::nindex1(), oomph::RankFiveTensor< T >::nindex2(), oomph::RankFiveTensor< T >::nindex3(), oomph::RankFiveTensor< T >::nindex4(), oomph::RankFiveTensor< T >::nindex5(), p, oomph::RankFiveTensor< T >::P, Eigen::numext::q, oomph::RankFiveTensor< T >::Q, UniformPSDSelfTest::r, oomph::RankFiveTensor< T >::R, and oomph::RankFiveTensor< T >::resize().

◆ range_check()

template<class T >
void oomph::RankFiveTensor< T >::range_check ( const unsigned long &  i,
const unsigned long &  j,
const unsigned long &  k,
const unsigned long &  l,
const unsigned long &  m 
) const
inlineprivate

Range check to catch when an index is out of bounds, if so, it issues a warning message and dies by throwing an OomphLibError

2140  {
2141  if (i >= N)
2142  {
2143  std::ostringstream error_message;
2144  error_message << "Range Error: i=" << i << " is not in the range (0,"
2145  << N - 1 << ")." << std::endl;
2146 
2147  throw OomphLibError(error_message.str(),
2150  }
2151  else if (j >= M)
2152  {
2153  std::ostringstream error_message;
2154  error_message << "Range Error: j=" << j << " is not in the range (0,"
2155  << M - 1 << ")." << std::endl;
2156 
2157  throw OomphLibError(error_message.str(),
2160  }
2161  else if (k >= P)
2162  {
2163  std::ostringstream error_message;
2164  error_message << "Range Error: k=" << k << " is not in the range (0,"
2165  << P - 1 << ")." << std::endl;
2166 
2167  throw OomphLibError(error_message.str(),
2170  }
2171  else if (l >= Q)
2172  {
2173  std::ostringstream error_message;
2174  error_message << "Range Error: l=" << l << " is not in the range (0,"
2175  << Q - 1 << ")." << std::endl;
2176 
2177  throw OomphLibError(error_message.str(),
2180  }
2181  else if (m >= R)
2182  {
2183  std::ostringstream error_message;
2184  error_message << "Range Error: m=" << m << " is not in the range (0,"
2185  << R - 1 << ")." << std::endl;
2186 
2187  throw OomphLibError(error_message.str(),
2190  }
2191  }
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References i, j, k, m, oomph::RankFiveTensor< T >::N, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::RankFiveTensor< T >::P, oomph::RankFiveTensor< T >::Q, and oomph::RankFiveTensor< T >::R.

Referenced by oomph::RankFiveTensor< T >::operator()().

◆ raw_direct_access() [1/2]

◆ raw_direct_access() [2/2]

template<class T >
const T& oomph::RankFiveTensor< T >::raw_direct_access ( const unsigned long &  i) const
inline

Direct access to internal storage of data in flat-packed C-style column-major format. WARNING: Only for experienced users. Only use this if raw speed is of the essence, as in the solid mechanics problems.

2556  {
2557  return Tensordata[i];
2558  }

References i, and oomph::RankFiveTensor< T >::Tensordata.

◆ resize() [1/3]

template<class T >
void oomph::RankFiveTensor< T >::resize ( const unsigned long &  n)
inline

Resize to a square nxnxnxn tensor.

2339  {
2340  resize(n, n, n, n, n);
2341  }

References n.

Referenced by oomph::RankFiveTensor< T >::operator=().

◆ resize() [2/3]

template<class T >
void oomph::RankFiveTensor< T >::resize ( const unsigned long &  n_index1,
const unsigned long &  n_index2,
const unsigned long &  n_index3,
const unsigned long &  n_index4,
const unsigned long &  n_index5 
)
inline

Resize to a general tensor.

2349  {
2350  // If the sizes have not changed do nothing
2351  if ((n_index1 == N) && (n_index2 == M) && (n_index3 == P) &&
2352  (n_index4 == Q) && (n_index5 == R))
2353  {
2354  return;
2355  }
2356  // Store old sizes
2357  unsigned long n_old = N, m_old = M, p_old = P, q_old = Q, r_old = R;
2358  // Reassign the sizes
2359  N = n_index1;
2360  M = n_index2;
2361  P = n_index3;
2362  Q = n_index4;
2363  R = n_index5;
2364  // Store pointer to old matrix data
2365  T* temp_tensor = Tensordata;
2366  // Re-create Tensordata in new size
2367  Tensordata = new T[N * M * P * Q * R];
2368 #ifdef OOMPH_INITIALISE_DENSE_MATRICES
2369  initialise(T(0));
2370 #endif
2371  // Transfer values
2372  unsigned long n_copy, m_copy, p_copy, q_copy, r_copy;
2373  n_copy = std::min(n_old, n_index1);
2374  m_copy = std::min(m_old, n_index2);
2375  p_copy = std::min(p_old, n_index3);
2376  q_copy = std::min(q_old, n_index4);
2377  r_copy = std::min(r_old, n_index5);
2378  // If matrix has values, transfer them to new matrix
2379  // Loop over rows
2380  for (unsigned long i = 0; i < n_copy; i++)
2381  {
2382  // Loop over columns
2383  for (unsigned long j = 0; j < m_copy; j++)
2384  {
2385  // Loop over columns
2386  for (unsigned long k = 0; k < p_copy; k++)
2387  {
2388  // Loop over columns
2389  for (unsigned long l = 0; l < q_copy; l++)
2390  {
2391  // Loop over columns
2392  for (unsigned long m = 0; m < r_copy; m++)
2393  {
2394  // Transfer values from temp_tensor
2395  Tensordata[R * (Q * (M * P * i + P * j + k) + l) + m] =
2396  temp_tensor[r_old *
2397  (q_old * (m_old * p_old * i + p_old * j + k) +
2398  l) +
2399  m];
2400  }
2401  }
2402  }
2403  }
2404  }
2405  // Now kill storage for old tensor
2406  delete[] temp_tensor;
2407  }
#define min(a, b)
Definition: datatypes.h:22

References i, oomph::RankFiveTensor< T >::initialise(), j, k, m, oomph::RankFiveTensor< T >::M, min, oomph::RankFiveTensor< T >::N, oomph::RankFiveTensor< T >::P, oomph::RankFiveTensor< T >::Q, oomph::RankFiveTensor< T >::R, and oomph::RankFiveTensor< T >::Tensordata.

◆ resize() [3/3]

template<class T >
void oomph::RankFiveTensor< T >::resize ( const unsigned long &  n_index1,
const unsigned long &  n_index2,
const unsigned long &  n_index3,
const unsigned long &  n_index4,
const unsigned long &  n_index5,
const T initial_value 
)
inline

Resize to a general tensor.

2416  {
2417  // If the sizes have not changed do nothing
2418  if ((n_index1 == N) && (n_index2 == M) && (n_index3 == P) &&
2419  (n_index4 == Q) && (n_index5 == R))
2420  {
2421  return;
2422  }
2423  // Store old sizes
2424  unsigned long n_old = N, m_old = M, p_old = P, q_old = Q, r_old = R;
2425  // Reassign the sizes
2426  N = n_index1;
2427  M = n_index2;
2428  P = n_index3;
2429  Q = n_index4;
2430  R = n_index5;
2431  // Store triple pointer to old matrix data
2432  T* temp_tensor = Tensordata;
2433  // Re-create Tensordata in new size
2434  Tensordata = new T[N * M * P * Q * R];
2435  // Initialise the newly allocated storage
2436  initialise(initial_value);
2437 
2438  // Transfer values
2439  unsigned long n_copy, m_copy, p_copy, q_copy, r_copy;
2440  n_copy = std::min(n_old, n_index1);
2441  m_copy = std::min(m_old, n_index2);
2442  p_copy = std::min(p_old, n_index3);
2443  q_copy = std::min(q_old, n_index4);
2444  r_copy = std::min(r_old, n_index5);
2445  // If matrix has values, transfer them to new matrix
2446  // Loop over rows
2447  for (unsigned long i = 0; i < n_copy; i++)
2448  {
2449  // Loop over columns
2450  for (unsigned long j = 0; j < m_copy; j++)
2451  {
2452  // Loop over columns
2453  for (unsigned long k = 0; k < p_copy; k++)
2454  {
2455  // Loop over columns
2456  for (unsigned long l = 0; l < q_copy; l++)
2457  {
2458  // Loop over columns
2459  for (unsigned long m = 0; m < r_copy; m++)
2460  {
2461  // Transfer values from temp_tensor
2462  Tensordata[R * (Q * (M * P * i + P * j + k) + l) + m] =
2463  temp_tensor[r_old *
2464  (q_old * (m_old * p_old * i + p_old * j + k) +
2465  l) +
2466  m];
2467  }
2468  }
2469  }
2470  }
2471  }
2472  // Now kill storage for old tensor
2473  delete[] temp_tensor;
2474  }

References i, oomph::RankFiveTensor< T >::initialise(), j, k, m, oomph::RankFiveTensor< T >::M, min, oomph::RankFiveTensor< T >::N, oomph::RankFiveTensor< T >::P, oomph::RankFiveTensor< T >::Q, oomph::RankFiveTensor< T >::R, and oomph::RankFiveTensor< T >::Tensordata.

Member Data Documentation

◆ M

◆ N

◆ P

◆ Q

◆ R

◆ Tensordata


The documentation for this class was generated from the following file: