Cross Product between Two TensorsΒΆ

This is an example of how to use the omtools.cross() function to compute the cross product between two tensors.

from openmdao.api import Problem
from omtools.api import Group
import omtools.api as ot
import numpy as np


class ExampleTensorTensor(Group):
    def setup(self):
        # Creating two tensors
        shape = (2, 5, 4, 3)
        num_elements = np.prod(shape)

        tenval1 = np.arange(num_elements).reshape(shape)
        tenval2 = np.arange(num_elements).reshape(shape) + 6

        ten1 = self.declare_input('ten1', val=tenval1)
        ten2 = self.declare_input('ten2', val=tenval2)

        # Tensor-Tensor Dot Product specifying the last axis
        self.register_output('TenTenCross', ot.cross(ten1, ten2, axis=3))


prob = Problem()
prob.model = ExampleTensorTensor()
prob.setup(force_alloc_complex=True)
prob.run_model()

print('ten1', prob['ten1'].shape)
print(prob['ten1'])
print('ten2', prob['ten2'].shape)
print(prob['ten2'])
print('TenTenCross', prob['TenTenCross'].shape)
print(prob['TenTenCross'])
ten1 (2, 5, 4, 3)
[[[[  0.   1.   2.]
   [  3.   4.   5.]
   [  6.   7.   8.]
   [  9.  10.  11.]]

  [[ 12.  13.  14.]
   [ 15.  16.  17.]
   [ 18.  19.  20.]
   [ 21.  22.  23.]]

  [[ 24.  25.  26.]
   [ 27.  28.  29.]
   [ 30.  31.  32.]
   [ 33.  34.  35.]]

  [[ 36.  37.  38.]
   [ 39.  40.  41.]
   [ 42.  43.  44.]
   [ 45.  46.  47.]]

  [[ 48.  49.  50.]
   [ 51.  52.  53.]
   [ 54.  55.  56.]
   [ 57.  58.  59.]]]


 [[[ 60.  61.  62.]
   [ 63.  64.  65.]
   [ 66.  67.  68.]
   [ 69.  70.  71.]]

  [[ 72.  73.  74.]
   [ 75.  76.  77.]
   [ 78.  79.  80.]
   [ 81.  82.  83.]]

  [[ 84.  85.  86.]
   [ 87.  88.  89.]
   [ 90.  91.  92.]
   [ 93.  94.  95.]]

  [[ 96.  97.  98.]
   [ 99. 100. 101.]
   [102. 103. 104.]
   [105. 106. 107.]]

  [[108. 109. 110.]
   [111. 112. 113.]
   [114. 115. 116.]
   [117. 118. 119.]]]]
ten2 (2, 5, 4, 3)
[[[[  6.   7.   8.]
   [  9.  10.  11.]
   [ 12.  13.  14.]
   [ 15.  16.  17.]]

  [[ 18.  19.  20.]
   [ 21.  22.  23.]
   [ 24.  25.  26.]
   [ 27.  28.  29.]]

  [[ 30.  31.  32.]
   [ 33.  34.  35.]
   [ 36.  37.  38.]
   [ 39.  40.  41.]]

  [[ 42.  43.  44.]
   [ 45.  46.  47.]
   [ 48.  49.  50.]
   [ 51.  52.  53.]]

  [[ 54.  55.  56.]
   [ 57.  58.  59.]
   [ 60.  61.  62.]
   [ 63.  64.  65.]]]


 [[[ 66.  67.  68.]
   [ 69.  70.  71.]
   [ 72.  73.  74.]
   [ 75.  76.  77.]]

  [[ 78.  79.  80.]
   [ 81.  82.  83.]
   [ 84.  85.  86.]
   [ 87.  88.  89.]]

  [[ 90.  91.  92.]
   [ 93.  94.  95.]
   [ 96.  97.  98.]
   [ 99. 100. 101.]]

  [[102. 103. 104.]
   [105. 106. 107.]
   [108. 109. 110.]
   [111. 112. 113.]]

  [[114. 115. 116.]
   [117. 118. 119.]
   [120. 121. 122.]
   [123. 124. 125.]]]]
TenTenCross (2, 5, 4, 3)
[[[[-6. 12. -6.]
   [-6. 12. -6.]
   [-6. 12. -6.]
   [-6. 12. -6.]]

  [[-6. 12. -6.]
   [-6. 12. -6.]
   [-6. 12. -6.]
   [-6. 12. -6.]]

  [[-6. 12. -6.]
   [-6. 12. -6.]
   [-6. 12. -6.]
   [-6. 12. -6.]]

  [[-6. 12. -6.]
   [-6. 12. -6.]
   [-6. 12. -6.]
   [-6. 12. -6.]]

  [[-6. 12. -6.]
   [-6. 12. -6.]
   [-6. 12. -6.]
   [-6. 12. -6.]]]


 [[[-6. 12. -6.]
   [-6. 12. -6.]
   [-6. 12. -6.]
   [-6. 12. -6.]]

  [[-6. 12. -6.]
   [-6. 12. -6.]
   [-6. 12. -6.]
   [-6. 12. -6.]]

  [[-6. 12. -6.]
   [-6. 12. -6.]
   [-6. 12. -6.]
   [-6. 12. -6.]]

  [[-6. 12. -6.]
   [-6. 12. -6.]
   [-6. 12. -6.]
   [-6. 12. -6.]]

  [[-6. 12. -6.]
   [-6. 12. -6.]
   [-6. 12. -6.]
   [-6. 12. -6.]]]]