Source code for sfepy.discrete.fem.periodic

import numpy as nm

from sfepy.discrete.fem.mesh import find_map

##
# c: 05.05.2008, r: 05.05.2008
eps = 1e-12
[docs]def set_accuracy( eps ): globals()['eps'] = eps ## # c: 18.10.2006, r: 05.05.2008
[docs]def match_grid_line( coor1, coor2, which ): """ Match coordinates `coor1` with `coor2` along the axis `which`. """ if coor1.shape != coor2.shape: raise ValueError, 'incompatible shapes: %s == %s'\ % ( coor1.shape, coor2.shape) c1 = coor1[:,which] c2 = coor2[:,which] i1 = nm.argsort( c1 ) i2 = nm.argsort( c2 ) if not nm.all( nm.abs(c1[i1] - c2[i2]) < eps ): print c1[i1] print c2[i2] print nm.abs(c1[i1] - c2[i2]).max() raise ValueError('cannot match nodes!') return i1, i2 ## # 18.10.2006, c # last revision: 18.10.2006
[docs]def match_x_line( coor1, coor2 ): return match_grid_line( coor1, coor2, 0 )
[docs]def match_y_line( coor1, coor2 ): return match_grid_line( coor1, coor2, 1 )
[docs]def match_z_line( coor1, coor2 ): return match_grid_line( coor1, coor2, 2 ) ## # 01.06.2007, c # last revision: 01.06.2007
[docs]def match_grid_plane( coor1, coor2, which ): """ Match coordinates `coor1` with `coor2` along the plane with normal axis `which`. """ if coor1.shape != coor2.shape: raise ValueError, 'incompatible shapes: %s == %s'\ % ( coor1.shape, coor2.shape) offset = coor1[0,which] - coor2[0,which] aux = coor2.copy() aux[:,which] += offset i1, i2 = find_map( coor1, aux, join = False ) if i1.shape[0] != coor1.shape[0]: print coor1[i1] print coor2[i2] print nm.abs(coor1[i1] - coor2[i2]).max(0) ii = nm.setdiff1d(nm.arange(coor1.shape[0]), i1) print coor1[ii] print coor2[ii] raise ValueError('cannot match nodes!') return i1, i2 ## # 01.06.2007, c # last revision: 01.06.2007
[docs]def match_x_plane( coor1, coor2 ): return match_grid_plane( coor1, coor2, 0 )
[docs]def match_y_plane( coor1, coor2 ): return match_grid_plane( coor1, coor2, 1 )
[docs]def match_z_plane( coor1, coor2 ): return match_grid_plane( coor1, coor2, 2 )
[docs]def match_coors(coors1, coors2): """ Match coordinates `coors1` with `coors2`. """ if coors1.shape != coors2.shape: raise ValueError('incompatible shapes: %s == %s' % (coors1.shape, coors2.shape)) i1, i2 = find_map(coors1, coors2, join=False) if i1.shape[0] != coors1.shape[0]: print coors1[i1] print coors2[i2] print nm.abs(coors1[i1] - coors2[i2]).max(0) ii = nm.setdiff1d(nm.arange(coors1.shape[0]), i1) print coors1[ii] print coors2[ii] raise ValueError('cannot match nodes!') return i1, i2