def adjoin_GaNi(a, b): print('Gani') a.dct() # print(a.val) a.grad_transpose() # print(a.val) a.idct() adjoin = Chebyshev_element(name='adjoin', N=N, shape=(), multype='scal') adjoin.val = np.multiply(a.val, b.val) adjoin.dct() # print(adjoin.val) adjoin.idct() # print('ab') # print(adjoin.val) adjoin.integrate() #scalar = np.sum(adjoin.val) return adjoin.integral #scalar # #
def adjoin_GaNi_Tran( a, b, ): # print('Gani') # print(a.val) a.Fourier = True a.idct_trans() # print(a.val) # iFa=a.idct() # print(iFa.val) a.Fourier = True a.grad_transpose() # print(a.val) # print(a.val) a.Fourier = False a.dct_trans() # print(a.val) # b.idct() # plt.show() a.Fourier = False adjoin = Chebyshev_element(name='adjoin', N=N, shape=(), multype='scal') adjoin.val = np.multiply(a.val, b.val) # print('ab') # print(adjoin.val) adjoin.integrate() # scalar = np.sum(adjoin.val) return adjoin.integral # scalar # #
def collocation(a, b, mat): a.dct() a.idct() a.val = np.multiply(mat.val, a.val) a.dct() a.idct() original = Chebyshev_element(name='original', N=N, shape=(), multype='scal') original.val = np.multiply(a.val, b.val) original.integrate() return original.integral
def tester(a, b): a.dct() # print(a.val) a.idct() adjoin = Chebyshev_element(name='test', N=N, shape=(), multype='scal') adjoin.val = np.multiply(a.val, b.val) adjoin.dct() # print(adjoin.val) adjoin.idct() # print('ab') # print(adjoin.val) adjoin.integrate() #scalar = np.sum(adjoin.val) return adjoin.integral #scalar # #
def coll(a, b): # print('coll a dct') # print(a.val) a.dct() # print(a.val) a.div() # print(a.val) #a.idct() both_side = Chebyshev_element(name='both_side', N=N, shape=(2, ), multype='scal') both_side.val = np.multiply(a.val, b.val) # print('ab') # print(both_side.val) both_side.integrate() #scalar = np.sum(both_side.val) return both_side.integral # scalar #
def test_integral(self): print('\nChecking integral') solution = [0, 0.8, 8.3317] for dim, Ni in itertools.product([2, 3], [100, 155]): N = np.array(dim * [ Ni, ], dtype=np.int) dN = tuple(np.array(N * 2 - 1, dtype=np.int)) x0 = Chebyshev_element(name='x', N=N, shape=()) x0.set_nodal_coord() integrant = lambda x: (x[0]**4) + (x[1]**3) if x.__len__( ) == 2 else (x[0]**4) + (x[1]**3) + np.cos(x[2]) x0.val = integrant(x0.coord) x0.integrate() self.assertTrue(np.isclose(x0.integral, solution[dim - 1], rtol=1e-05, atol=1e-08, equal_nan=False), msg="Integral does not work correctly")
def GaNi(a, b): b.dct() b.grad() # print(b.val) b.idct() both_side = Chebyshev_element(name='both_side', N=N, shape=(2, ), multype='scal') both_side.val = np.multiply(a.val, b.val) # both_side.dct() # print(both_side.val) # both_side.idct() # print('ab') # print(both_side.val) both_side.integrate() #scalar = np.sum(both_side.val) return both_side.integral # scalar #
def test_integral_w_projection(self): print('\nChecking integral with projection') solution = [0, 0.8, 8.3317] for dim, Ni in itertools.product([2, 3], [100, 155]): N = np.array(dim * [ Ni, ], dtype=np.int) dN = tuple(np.array(N * 2 - 1, dtype=np.int)) integrant = lambda x: (x[0]**4) + (x[1]**3) if x.__len__( ) == 2 else (x[0]**4) + (x[1]**3) + np.cos(x[2]) u = Chebyshev_element(name='u', N=N, shape=(), multype='scal') u.set_nodal_coord() u.val = integrant(u.coord) u.integrate() i_1 = u.integral u.dct() u.enlarge() u.idct() u.integrate() i_2 = u.integral u.dct() u.shrink() u.idct() i_3 = u.integral self.assertTrue(np.isclose(i_1, i_2, rtol=1e-05, atol=1e-08, equal_nan=False), msg="Integral does not work correctly") self.assertTrue(np.isclose(i_1, i_3, rtol=1e-05, atol=1e-08, equal_nan=False), msg="Integral does not work correctly")