added python based geometry reconstruction
This commit is contained in:
parent
95c4fdf9fa
commit
4592db8dfb
|
@ -9,6 +9,46 @@ import damask
|
||||||
scriptName = os.path.splitext(os.path.basename(__file__))[0]
|
scriptName = os.path.splitext(os.path.basename(__file__))[0]
|
||||||
scriptID = ' '.join([scriptName,damask.version])
|
scriptID = ' '.join([scriptName,damask.version])
|
||||||
|
|
||||||
|
def deformedCoordsFFT(size,F,scaling,Favg=None):
|
||||||
|
grid = np.array(np.shape(F)[:-2])
|
||||||
|
N = grid.prod()
|
||||||
|
step = size/grid
|
||||||
|
k_s = np.zeros([3],'i')
|
||||||
|
|
||||||
|
F_fourier = np.fft.fftpack.rfftn(F,s=grid,axes=(0,1,2))
|
||||||
|
coords_fourier = np.zeros(F_fourier.shape[:-1],'c16')
|
||||||
|
if Favg is None:
|
||||||
|
Favg = np.real(F_fourier[0,0,0,:,:]/N)
|
||||||
|
|
||||||
|
for i in xrange(grid[2]//2+1):
|
||||||
|
k_s[2] = i
|
||||||
|
if grid[2]%2 == 0 and i == grid[2]//2: k_s[2] = 0 # for even grid, set Nyquist freq to 0 (Johnson, MIT, 2011)
|
||||||
|
|
||||||
|
for j in xrange(grid[1]):
|
||||||
|
k_s[1] = j
|
||||||
|
if grid[1]%2 == 0 and j == grid[1]//2: k_s[1] = 0 # for even grid, set Nyquist freq to 0 (Johnson, MIT, 2011)
|
||||||
|
elif j > grid[1]//2: k_s[1] -= grid[1]
|
||||||
|
|
||||||
|
for k in xrange(grid[0]):
|
||||||
|
k_s[0] = k
|
||||||
|
if grid[0]%2 == 0 and k == grid[0]//2: k_s[0] = 0 # for even grid, set Nyquist freq to 0 (Johnson, MIT, 2011)
|
||||||
|
elif k > grid[0]//2: k_s[0] -= grid[0]
|
||||||
|
|
||||||
|
xi = 0.0+(k_s*0.5j*size/math.pi)
|
||||||
|
for m in xrange(3):
|
||||||
|
coords_fourier[k,j,i,m] = np.sum(F_fourier[k,j,i,m,:]*xi)
|
||||||
|
|
||||||
|
if (any(k_s != 0)):
|
||||||
|
coords_fourier[k,j,i,:]/=-np.linalg.norm(k_s)**2.0
|
||||||
|
|
||||||
|
coords = np.fft.fftpack.irfftn(coords_fourier,s=grid,axes=(0,1,2))
|
||||||
|
offset_coords =np.dot(F[0,0,0,:,:],step/2.0) - scaling*coords[0,0,0,:]
|
||||||
|
|
||||||
|
for z in xrange(grid[2]):
|
||||||
|
for y in xrange(grid[1]):
|
||||||
|
for x in xrange(grid[0]):
|
||||||
|
coords[x,y,z,:] += offset_coords + np.dot(Favg,[x,y,z]*step)
|
||||||
|
|
||||||
def outStdout(cmd,locals):
|
def outStdout(cmd,locals):
|
||||||
if cmd[0:3] == '(!)':
|
if cmd[0:3] == '(!)':
|
||||||
exec(cmd[3:])
|
exec(cmd[3:])
|
||||||
|
@ -314,7 +354,16 @@ for filename in args:
|
||||||
F = np.reshape(np.transpose(values[:,column['tensor'][options.defgrad]:
|
F = np.reshape(np.transpose(values[:,column['tensor'][options.defgrad]:
|
||||||
column['tensor'][options.defgrad]+9]),
|
column['tensor'][options.defgrad]+9]),
|
||||||
(3,3,grid[0],grid[1],grid[2]))
|
(3,3,grid[0],grid[1],grid[2]))
|
||||||
|
F2 = np.reshape(values[:,column['tensor'][options.defgrad]:
|
||||||
|
column['tensor'][options.defgrad]+9],
|
||||||
|
(grid[0],grid[1],grid[2],3,3))
|
||||||
|
for z in xrange(grid[2]):
|
||||||
|
for y in xrange(grid[1]):
|
||||||
|
for x in xrange(grid[0]):
|
||||||
|
F2[x,y,z,:,:] = F2[x,y,z,:,:].T
|
||||||
|
centroids2 = deformedCoordsFFT(dim,F2,options.scaling,None)
|
||||||
centroids = damask.core.mesh.deformedCoordsFFT(dim,F,Favg,options.scaling)
|
centroids = damask.core.mesh.deformedCoordsFFT(dim,F,Favg,options.scaling)
|
||||||
|
|
||||||
nodes = damask.core.mesh.nodesAroundCentres(dim,Favg,centroids)
|
nodes = damask.core.mesh.nodesAroundCentres(dim,Favg,centroids)
|
||||||
|
|
||||||
fields = {\
|
fields = {\
|
||||||
|
@ -430,4 +479,4 @@ for filename in args:
|
||||||
vtk = open(os.path.join(head,what+'_'+os.path.splitext(tail)[0]+'.vtk'), 'w')
|
vtk = open(os.path.join(head,what+'_'+os.path.splitext(tail)[0]+'.vtk'), 'w')
|
||||||
output(out[what],{'filepointer':vtk},'File')
|
output(out[what],{'filepointer':vtk},'File')
|
||||||
vtk.close()
|
vtk.close()
|
||||||
print
|
print
|
||||||
|
|
Loading…
Reference in New Issue