diff --git a/python/tests/test_div.py b/python/tests/test_div.py deleted file mode 100644 index f703c5371..000000000 --- a/python/tests/test_div.py +++ /dev/null @@ -1,63 +0,0 @@ -import pytest -import numpy as np -from damask import grid_filters - - -class TestGridFilters: - - - div_test_data =[(['np.sin(np.pi*2*nodes[...,0]/size[0])', '0.0', '0.0', - '0.0' , '0.0', '0.0', - '0.0' , '0.0', '0.0'], - ['np.cos(np.pi*2*nodes[...,0]/size[0])*np.pi*2/size[0]' ,'0.0', '0.0'] - ), - (['0.0', '0.0', '0.0', - '0.0', 'np.cos(np.pi*2*nodes[...,1]/size[1])', '0.0', - '0.0', '0.0', '0.0'], - ['0.0', '-np.sin(np.pi*2*nodes[...,1]/size[1])*np.pi*2/size[1]', '0.0'] - ), - (['1.0', '0.0', '0.0', - '0.0', '0.0', '0.0', - '0.0', '0.0', '2*np.cos(np.pi*2*nodes[...,2]/size[2])' ], - ['0.0', '0.0', '-2.0*np.pi*2/size[2]*np.sin(np.pi*2*nodes[...,2]/size[2])'] - ), - ([ '23.0', '0.0', 'np.sin(np.pi*2*nodes[...,2]/size[2])', - '0.0', '100.0', 'np.sin(np.pi*2*nodes[...,2]/size[2])', - '0.0', '0.0', 'np.sin(np.pi*2*nodes[...,2]/size[2])'], - ['np.cos(np.pi*2*nodes[...,2]/size[2])*np.pi*2/size[2]','np.cos(np.pi*2*nodes[...,2]/size[2])*np.pi*2/size[2]', 'np.cos(np.pi*2*nodes[...,2]/size[2])*np.pi*2/size[2]'] - ), - (['400.0', '0.0', '0.0', - 'np.sin(np.pi*2*nodes[...,0]/size[0])', 'np.sin(np.pi*2*nodes[...,1]/size[1])', 'np.sin(np.pi*2*nodes[...,2]/size[2])', - '0.0', '10.0', '6.0' ], - ['0.0','np.cos(np.pi*2*nodes[...,0]/size[0])*np.pi*2/size[0]+np.cos(np.pi*2*nodes[...,1]/size[1])*np.pi*2/size[1]+np.cos(np.pi*2*nodes[...,2]/size[2])*np.pi*2/size[2]','0.0' ] - ), - (['np.sin(np.pi*2*nodes[...,0]/size[0])', '0.0', '0.0'], - ['np.cos(np.pi*2*nodes[...,0]/size[0])*np.pi*2/size[0]',] - ), - (['0.0', 'np.cos(np.pi*2*nodes[...,1]/size[1])', '0.0' ], - ['-np.sin(np.pi*2*nodes[...,1]/size[1])*np.pi*2/size[1]'] - ) - - - ] - - - @pytest.mark.parametrize('field_def,div_def',div_test_data) - - def test_div(self,field_def,div_def): - size = np.random.random(3)+1.0 - grid = np.random.randint(8,32,(3)) - - nodes = grid_filters.cell_coord0(grid,size) - my_locals = locals() # needed for list comprehension - - field = np.stack([np.broadcast_to(eval(f,globals(),my_locals),grid) for f in field_def],axis=-1) - field = field.reshape(tuple(grid) + ((3,3) if len(field_def)==9 else (3,))) - div = np.stack([np.broadcast_to(eval(c,globals(),my_locals),grid) for c in div_def], axis=-1) - if len(div_def)==3: - div = div.reshape(tuple(grid) + ((3,))) - else: - div=div.reshape(tuple(grid)) - - assert np.allclose(div,grid_filters.divergence(size,field)) - \ No newline at end of file diff --git a/python/tests/test_grad.py b/python/tests/test_grad.py deleted file mode 100644 index d02c57cdc..000000000 --- a/python/tests/test_grad.py +++ /dev/null @@ -1,49 +0,0 @@ -import pytest -import numpy as np -from damask import grid_filters - - -class TestGridFilters: - - grad_test_data = [(['np.sin(np.pi*2*nodes[...,0]/size[0])', '0.0', '0.0'], - ['np.cos(np.pi*2*nodes[...,0]/size[0])*np.pi*2/size[0]','0.0', '0.0', - '0.0', '0.0', '0.0', - '0.0', '0.0', '0.0']), - (['0.0', 'np.cos(np.pi*2*nodes[...,1]/size[1])', '0.0' ], - ['0.0', '0.0', '0.0', - '0.0', '-np.pi*2/size[1]*np.sin(np.pi*2*nodes[...,1]/size[1])', '0.0', - '0.0', '0.0', '0.0' ]), - (['1.0', '0.0', '2.0*np.cos(np.pi*2*nodes[...,2]/size[2])'], - ['0.0', '0.0', '0.0', - '0.0', '0.0', '0.0', - '0.0', '0.0', '-2.0*np.pi*2/size[2]*np.sin(np.pi*2*nodes[...,2]/size[2])']), - (['np.cos(np.pi*2*nodes[...,2]/size[2])', '3.0', 'np.sin(np.pi*2*nodes[...,2]/size[2])'], - ['0.0', '0.0', '-np.sin(np.pi*2*nodes[...,2]/size[2])*np.pi*2/size[2]', - '0.0', '0.0', '0.0', - '0.0', '0.0', 'np.cos(np.pi*2*nodes[...,2]/size[2])*np.pi*2/size[2]']), - (['np.sin(np.pi*2*nodes[...,0]/size[0])','np.sin(np.pi*2*nodes[...,1]/size[1])',\ - 'np.sin(np.pi*2*nodes[...,2]/size[2])'], - ['np.cos(np.pi*2*nodes[...,0]/size[0])*np.pi*2/size[0]', '0.0', '0.0', - '0.0', 'np.cos(np.pi*2*nodes[...,1]/size[1])*np.pi*2/size[1]', '0.0', - '0.0', '0.0', 'np.cos(np.pi*2*nodes[...,2]/size[2])*np.pi*2/size[2]']), - (['np.sin(np.pi*2*nodes[...,0]/size[0])' ], - ['np.cos(np.pi*2*nodes[...,0]/size[0])*np.pi*2/size[0]', '0.0', '0.0' ]), - (['8.0' ], - ['0.0', '0.0', '0.0' ])] - - @pytest.mark.parametrize('field_def,grad_def',grad_test_data) - - def test_grad(self,field_def,grad_def): - size = np.random.random(3)+1.0 - grid = np.random.randint(8,32,(3)) - - nodes = grid_filters.cell_coord0(grid,size) - my_locals = locals() # needed for list comprehension - - field = np.stack([np.broadcast_to(eval(f,globals(),my_locals),grid) for f in field_def],axis=-1) - field = field.reshape(tuple(grid) + ((3,) if len(field_def)==3 else (1,))) - grad = np.stack([np.broadcast_to(eval(c,globals(),my_locals),grid) for c in grad_def], axis=-1) - grad = grad.reshape(tuple(grid) + ((3,3) if len(grad_def)==9 else (3,))) - - assert np.allclose(grad,grid_filters.gradient(size,field)) - \ No newline at end of file diff --git a/python/tests/test_grid_filters.py b/python/tests/test_grid_filters.py index 8170ba7af..6a30481c9 100644 --- a/python/tests/test_grid_filters.py +++ b/python/tests/test_grid_filters.py @@ -139,68 +139,32 @@ class TestGridFilters: assert np.allclose(differential_operator(size,field),0.0) - @pytest.mark.parametrize('field_def,curl_def', - [(['np.sin(np.pi*2*nodes[...,2]/size[2])', '0.0', '0.0', - '0.0', '0.0', '0.0', - '0.0', '0.0', '0.0' ], - ['0.0' , '0.0', '0.0', - 'np.cos(np.pi*2*nodes[...,2]/size[2])*np.pi*2/size[2]', '0.0', '0.0', - '0.0', '0.0', '0.0'] - ), - (['np.cos(np.pi*2*nodes[...,1]/size[1])', '0.0', '0.0', - '0.0', '0.0', '0.0', - 'np.cos(np.pi*2*nodes[...,0]/size[0])', '0.0', '0.0'], - ['0.0', '0.0', '0.0', - '0.0', '0.0', '0.0', - 'np.sin(np.pi*2*nodes[...,1]/size[1])*np.pi*2/size[1]', '0.0', '0.0'] - ) - ]) - def test_curl(self,field_def,curl_def): - size = np.random.random(3)+1.0 - grid = np.random.randint(8,32,(3)) - - nodes = grid_filters.cell_coord0(grid,size) - my_locals = locals() # needed for list comprehension - - field = np.stack([np.broadcast_to(eval(f,globals(),my_locals),grid) for f in field_def],axis=-1) - field = field.reshape(tuple(grid) + ((3,3) if len(field_def)==9 else (3,))) - curl = np.stack([np.broadcast_to(eval(c,globals(),my_locals),grid) for c in curl_def], axis=-1) - curl = curl.reshape(tuple(grid) + ((3,3) if len(curl_def)==9 else (3,))) - - assert np.allclose(curl,grid_filters.curl(size,field)) - - grad_test_data = [(['np.sin(np.pi*2*nodes[...,0]/size[0])', '0.0', '0.0'], - ['np.cos(np.pi*2*nodes[...,0]/size[0])*np.pi*2/size[0]','0.0', '0.0', - '0.0', '0.0', '0.0', - '0.0', '0.0', '0.0']), - - (['0.0', 'np.cos(np.pi*2*nodes[...,1]/size[1])', '0.0' ], - ['0.0', '0.0', '0.0', - '0.0', '-np.pi*2/size[1]*np.sin(np.pi*2*nodes[...,1]/size[1])', '0.0', - '0.0', '0.0', '0.0' ]), - - (['1.0', '0.0', '2.0*np.cos(np.pi*2*nodes[...,2]/size[2])'], - ['0.0', '0.0', '0.0', - '0.0', '0.0', '0.0', - '0.0', '0.0', '-2.0*np.pi*2/size[2]*np.sin(np.pi*2*nodes[...,2]/size[2])']), - - (['np.cos(np.pi*2*nodes[...,2]/size[2])', '3.0', 'np.sin(np.pi*2*nodes[...,2]/size[2])'], - ['0.0', '0.0', '-np.sin(np.pi*2*nodes[...,2]/size[2])*np.pi*2/size[2]', - '0.0', '0.0', '0.0', - '0.0', '0.0', 'np.cos(np.pi*2*nodes[...,2]/size[2])*np.pi*2/size[2]']), - - (['np.sin(np.pi*2*nodes[...,0]/size[0])','np.sin(np.pi*2*nodes[...,1]/size[1])',\ - 'np.sin(np.pi*2*nodes[...,2]/size[2])'], - ['np.cos(np.pi*2*nodes[...,0]/size[0])*np.pi*2/size[0]', '0.0', '0.0', - '0.0', 'np.cos(np.pi*2*nodes[...,1]/size[1])*np.pi*2/size[1]', '0.0', - '0.0', '0.0', 'np.cos(np.pi*2*nodes[...,2]/size[2])*np.pi*2/size[2]']), - - (['np.sin(np.pi*2*nodes[...,0]/size[0])' ], - ['np.cos(np.pi*2*nodes[...,0]/size[0])*np.pi*2/size[0]', '0.0', '0.0' ]), - - (['8.0' ], - ['0.0', '0.0', '0.0' ]) - ] + grad_test_data = [ + (['np.sin(np.pi*2*nodes[...,0]/size[0])', '0.0', '0.0'], + ['np.cos(np.pi*2*nodes[...,0]/size[0])*np.pi*2/size[0]','0.0', '0.0', + '0.0', '0.0', '0.0', + '0.0', '0.0', '0.0']), + (['0.0', 'np.cos(np.pi*2*nodes[...,1]/size[1])', '0.0' ], + ['0.0', '0.0', '0.0', + '0.0', '-np.pi*2/size[1]*np.sin(np.pi*2*nodes[...,1]/size[1])', '0.0', + '0.0', '0.0', '0.0' ]), + (['1.0', '0.0', '2.0*np.cos(np.pi*2*nodes[...,2]/size[2])'], + ['0.0', '0.0', '0.0', + '0.0', '0.0', '0.0', + '0.0', '0.0', '-2.0*np.pi*2/size[2]*np.sin(np.pi*2*nodes[...,2]/size[2])']), + (['np.cos(np.pi*2*nodes[...,2]/size[2])', '3.0', 'np.sin(np.pi*2*nodes[...,2]/size[2])'], + ['0.0', '0.0', '-np.sin(np.pi*2*nodes[...,2]/size[2])*np.pi*2/size[2]', + '0.0', '0.0', '0.0', + '0.0', '0.0', 'np.cos(np.pi*2*nodes[...,2]/size[2])*np.pi*2/size[2]']), + (['np.sin(np.pi*2*nodes[...,0]/size[0])','np.sin(np.pi*2*nodes[...,1]/size[1])',\ + 'np.sin(np.pi*2*nodes[...,2]/size[2])'], + ['np.cos(np.pi*2*nodes[...,0]/size[0])*np.pi*2/size[0]', '0.0', '0.0', + '0.0', 'np.cos(np.pi*2*nodes[...,1]/size[1])*np.pi*2/size[1]', '0.0', + '0.0', '0.0', 'np.cos(np.pi*2*nodes[...,2]/size[2])*np.pi*2/size[2]']), + (['np.sin(np.pi*2*nodes[...,0]/size[0])' ], + ['np.cos(np.pi*2*nodes[...,0]/size[0])*np.pi*2/size[0]', '0.0', '0.0' ]), + (['8.0' ], + ['0.0', '0.0', '0.0' ])] @pytest.mark.parametrize('field_def,grad_def',grad_test_data) @@ -218,3 +182,103 @@ class TestGridFilters: assert np.allclose(grad,grid_filters.gradient(size,field)) + + curl_test_data =[ + (['np.sin(np.pi*2*nodes[...,2]/size[2])', '0.0', '0.0', + '0.0', '0.0', '0.0', + '0.0', '0.0', '0.0' ], + ['0.0' , '0.0', '0.0', + 'np.cos(np.pi*2*nodes[...,2]/size[2])*np.pi*2/size[2]', '0.0', '0.0', + '0.0', '0.0', '0.0']), + (['np.cos(np.pi*2*nodes[...,1]/size[1])', '0.0', '0.0', + '0.0', '0.0', '0.0', + 'np.cos(np.pi*2*nodes[...,0]/size[0])', '0.0', '0.0'], + ['0.0', '0.0', '0.0', + '0.0', '0.0', '0.0', + 'np.sin(np.pi*2*nodes[...,1]/size[1])*np.pi*2/size[1]', '0.0', '0.0']), + (['np.sin(np.pi*2*nodes[...,0]/size[0])','np.cos(np.pi*2*nodes[...,1]/size[1])','np.sin(np.pi*2*nodes[...,2]/size[2])', + 'np.sin(np.pi*2*nodes[...,0]/size[0])','np.cos(np.pi*2*nodes[...,1]/size[1])','np.sin(np.pi*2*nodes[...,2]/size[2])', + 'np.sin(np.pi*2*nodes[...,0]/size[0])','np.cos(np.pi*2*nodes[...,1]/size[1])','np.sin(np.pi*2*nodes[...,2]/size[2])'], + ['0.0', '0.0', '0.0', + '0.0', '0.0', '0.0', + '0.0', '0.0', '0.0']), + (['5.0', '0.0', '0.0', + '0.0', '0.0', '0.0', + '0.0', '0.0', '2*np.cos(np.pi*2*nodes[...,1]/size[1])'], + ['0.0', '0.0', '-2*np.pi*2/size[1]*np.sin(np.pi*2*nodes[...,1]/size[1])', + '0.0', '0.0', '0.0', + '0.0', '0.0', '0.0']), + (['4*np.sin(np.pi*2*nodes[...,2]/size[2])', '8*np.sin(np.pi*2*nodes[...,0]/size[0])', '16*np.sin(np.pi*2*nodes[...,1]/size[1])'], + ['16*np.pi*2/size[1]*np.cos(np.pi*2*nodes[...,1]/size[1])', \ + '4*np.pi*2/size[2]*np.cos(np.pi*2*nodes[...,2]/size[2])', \ + '8*np.pi*2/size[0]*np.cos(np.pi*2*nodes[...,0]/size[0])']), + (['0.0', 'np.cos(np.pi*2*nodes[...,0]/size[0])+5*np.cos(np.pi*2*nodes[...,2]/size[2])', '0.0'], + ['5*np.sin(np.pi*2*nodes[...,2]/size[2])*np.pi*2/size[2]',\ + '0.0',\ + '-np.sin(np.pi*2*nodes[...,0]/size[0])*np.pi*2/size[0]'])] + + @pytest.mark.parametrize('field_def,curl_def',curl_test_data) + + def test_curl(self,field_def,curl_def): + size = np.random.random(3)+1.0 + grid = np.random.randint(8,32,(3)) + + nodes = grid_filters.cell_coord0(grid,size) + my_locals = locals() # needed for list comprehension + + field = np.stack([np.broadcast_to(eval(f,globals(),my_locals),grid) for f in field_def],axis=-1) + field = field.reshape(tuple(grid) + ((3,3) if len(field_def)==9 else (3,))) + curl = np.stack([np.broadcast_to(eval(c,globals(),my_locals),grid) for c in curl_def], axis=-1) + curl = curl.reshape(tuple(grid) + ((3,3) if len(curl_def)==9 else (3,))) + + assert np.allclose(curl,grid_filters.curl(size,field)) + + + div_test_data =[ + (['np.sin(np.pi*2*nodes[...,0]/size[0])', '0.0', '0.0', + '0.0' , '0.0', '0.0', + '0.0' , '0.0', '0.0'], + ['np.cos(np.pi*2*nodes[...,0]/size[0])*np.pi*2/size[0]' ,'0.0', '0.0']), + (['0.0', '0.0', '0.0', + '0.0', 'np.cos(np.pi*2*nodes[...,1]/size[1])', '0.0', + '0.0', '0.0', '0.0'], + ['0.0', '-np.sin(np.pi*2*nodes[...,1]/size[1])*np.pi*2/size[1]', '0.0']), + (['1.0', '0.0', '0.0', + '0.0', '0.0', '0.0', + '0.0', '0.0', '2*np.cos(np.pi*2*nodes[...,2]/size[2])' ], + ['0.0', '0.0', '-2.0*np.pi*2/size[2]*np.sin(np.pi*2*nodes[...,2]/size[2])'] + ), + ([ '23.0', '0.0', 'np.sin(np.pi*2*nodes[...,2]/size[2])', + '0.0', '100.0', 'np.sin(np.pi*2*nodes[...,2]/size[2])', + '0.0', '0.0', 'np.sin(np.pi*2*nodes[...,2]/size[2])'], + ['np.cos(np.pi*2*nodes[...,2]/size[2])*np.pi*2/size[2]','np.cos(np.pi*2*nodes[...,2]/size[2])*np.pi*2/size[2]', 'np.cos(np.pi*2*nodes[...,2]/size[2])*np.pi*2/size[2]']), + (['400.0', '0.0', '0.0', + 'np.sin(np.pi*2*nodes[...,0]/size[0])', 'np.sin(np.pi*2*nodes[...,1]/size[1])', 'np.sin(np.pi*2*nodes[...,2]/size[2])', + '0.0', '10.0', '6.0' ], + ['0.0','np.cos(np.pi*2*nodes[...,0]/size[0])*np.pi*2/size[0]+np.cos(np.pi*2*nodes[...,1]/size[1])*np.pi*2/size[1]+np.cos(np.pi*2*nodes[...,2]/size[2])*np.pi*2/size[2]','0.0' ]), + (['np.sin(np.pi*2*nodes[...,0]/size[0])', '0.0', '0.0'], + ['np.cos(np.pi*2*nodes[...,0]/size[0])*np.pi*2/size[0]',]), + (['0.0', 'np.cos(np.pi*2*nodes[...,1]/size[1])', '0.0' ], + ['-np.sin(np.pi*2*nodes[...,1]/size[1])*np.pi*2/size[1]']) + ] + + @pytest.mark.parametrize('field_def,div_def',div_test_data) + + def test_div(self,field_def,div_def): + size = np.random.random(3)+1.0 + grid = np.random.randint(8,32,(3)) + + nodes = grid_filters.cell_coord0(grid,size) + my_locals = locals() # needed for list comprehension + + field = np.stack([np.broadcast_to(eval(f,globals(),my_locals),grid) for f in field_def],axis=-1) + field = field.reshape(tuple(grid) + ((3,3) if len(field_def)==9 else (3,))) + div = np.stack([np.broadcast_to(eval(c,globals(),my_locals),grid) for c in div_def], axis=-1) + if len(div_def)==3: + div = div.reshape(tuple(grid) + ((3,))) + else: + div=div.reshape(tuple(grid)) + + assert np.allclose(div,grid_filters.divergence(size,field)) + +