fixed indentation
This commit is contained in:
parent
9d4cbe5168
commit
f256493e79
|
@ -52,37 +52,37 @@ def CubeToBall(cube):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if np.abs(np.max(cube))>np.pi**(2./3.) * 0.5:
|
if np.abs(np.max(cube))>np.pi**(2./3.) * 0.5:
|
||||||
raise ValueError
|
raise ValueError
|
||||||
|
|
||||||
# transform to the sphere grid via the curved square, and intercept the zero point
|
# transform to the sphere grid via the curved square, and intercept the zero point
|
||||||
if np.allclose(cube,0.0,rtol=0.0,atol=1.0e-300):
|
if np.allclose(cube,0.0,rtol=0.0,atol=1.0e-300):
|
||||||
ball = np.zeros(3)
|
ball = np.zeros(3)
|
||||||
else:
|
else:
|
||||||
# get pyramide and scale by grid parameter ratio
|
# get pyramide and scale by grid parameter ratio
|
||||||
p = get_order(cube)
|
p = get_order(cube)
|
||||||
XYZ = cube[p] * sc
|
XYZ = cube[p] * sc
|
||||||
|
|
||||||
# intercept all the points along the z-axis
|
# intercept all the points along the z-axis
|
||||||
if np.allclose(XYZ[0:2],0.0,rtol=0.0,atol=1.0e-300):
|
if np.allclose(XYZ[0:2],0.0,rtol=0.0,atol=1.0e-300):
|
||||||
ball = np.array([0.0, 0.0, np.sqrt(6.0/np.pi) * XYZ[2]])
|
ball = np.array([0.0, 0.0, np.sqrt(6.0/np.pi) * XYZ[2]])
|
||||||
else:
|
else:
|
||||||
order = [1,0] if np.abs(XYZ[1]) <= np.abs(XYZ[0]) else [0,1]
|
order = [1,0] if np.abs(XYZ[1]) <= np.abs(XYZ[0]) else [0,1]
|
||||||
q = np.pi/12.0 * XYZ[order[0]]/XYZ[order[1]]
|
q = np.pi/12.0 * XYZ[order[0]]/XYZ[order[1]]
|
||||||
c = np.cos(q)
|
c = np.cos(q)
|
||||||
s = np.sin(q)
|
s = np.sin(q)
|
||||||
q = R1*2.0**0.25/beta * XYZ[order[1]] / np.sqrt(np.sqrt(2.0)-c)
|
q = R1*2.0**0.25/beta * XYZ[order[1]] / np.sqrt(np.sqrt(2.0)-c)
|
||||||
T = np.array([ (np.sqrt(2.0)*c - 1.0), np.sqrt(2.0) * s]) * q
|
T = np.array([ (np.sqrt(2.0)*c - 1.0), np.sqrt(2.0) * s]) * q
|
||||||
|
|
||||||
# transform to sphere grid (inverse Lambert)
|
# transform to sphere grid (inverse Lambert)
|
||||||
# note that there is no need to worry about dividing by zero, since XYZ[2] can not become zero
|
# note that there is no need to worry about dividing by zero, since XYZ[2] can not become zero
|
||||||
c = np.sum(T**2)
|
c = np.sum(T**2)
|
||||||
s = c * np.pi/24.0 /XYZ[2]**2
|
s = c * np.pi/24.0 /XYZ[2]**2
|
||||||
c = c * np.sqrt(np.pi/24.0)/XYZ[2]
|
c = c * np.sqrt(np.pi/24.0)/XYZ[2]
|
||||||
q = np.sqrt( 1.0 - s )
|
q = np.sqrt( 1.0 - s )
|
||||||
ball = np.array([ T[order[1]] * q, T[order[0]] * q, np.sqrt(6.0/np.pi) * XYZ[2] - c ])
|
ball = np.array([ T[order[1]] * q, T[order[0]] * q, np.sqrt(6.0/np.pi) * XYZ[2] - c ])
|
||||||
|
|
||||||
# reverse the coordinates back to the regular order according to the original pyramid number
|
# reverse the coordinates back to the regular order according to the original pyramid number
|
||||||
ball = ball[p]
|
ball = ball[p]
|
||||||
|
|
||||||
return ball
|
return ball
|
||||||
|
|
||||||
|
@ -104,39 +104,39 @@ def BallToCube(ball):
|
||||||
"""
|
"""
|
||||||
rs = np.linalg.norm(ball)
|
rs = np.linalg.norm(ball)
|
||||||
if rs > R1:
|
if rs > R1:
|
||||||
raise ValueError
|
raise ValueError
|
||||||
|
|
||||||
if np.allclose(ball,0.0,rtol=0.0,atol=1.0e-300):
|
if np.allclose(ball,0.0,rtol=0.0,atol=1.0e-300):
|
||||||
cube = np.zeros(3)
|
cube = np.zeros(3)
|
||||||
else:
|
else:
|
||||||
p = get_order(ball)
|
p = get_order(ball)
|
||||||
xyz3 = ball[p]
|
xyz3 = ball[p]
|
||||||
|
|
||||||
# inverse M_3
|
# inverse M_3
|
||||||
xyz2 = xyz3[0:2] * np.sqrt( 2.0*rs/(rs+np.abs(xyz3[2])) )
|
xyz2 = xyz3[0:2] * np.sqrt( 2.0*rs/(rs+np.abs(xyz3[2])) )
|
||||||
|
|
||||||
# inverse M_2
|
# inverse M_2
|
||||||
qxy = np.sum(xyz2**2)
|
qxy = np.sum(xyz2**2)
|
||||||
|
|
||||||
if np.isclose(qxy,0.0,rtol=0.0,atol=1.0e-300):
|
if np.isclose(qxy,0.0,rtol=0.0,atol=1.0e-300):
|
||||||
Tinv = np.zeros(2)
|
Tinv = np.zeros(2)
|
||||||
else:
|
else:
|
||||||
q2 = qxy + np.max(np.abs(xyz2))**2
|
q2 = qxy + np.max(np.abs(xyz2))**2
|
||||||
sq2 = np.sqrt(q2)
|
sq2 = np.sqrt(q2)
|
||||||
q = (beta/np.sqrt(2.0)/R1) * np.sqrt(q2*qxy/(q2-np.max(np.abs(xyz2))*sq2))
|
q = (beta/np.sqrt(2.0)/R1) * np.sqrt(q2*qxy/(q2-np.max(np.abs(xyz2))*sq2))
|
||||||
tt = np.clip((np.min(np.abs(xyz2))**2+np.max(np.abs(xyz2))*sq2)/np.sqrt(2.0)/qxy,-1.0,1.0)
|
tt = np.clip((np.min(np.abs(xyz2))**2+np.max(np.abs(xyz2))*sq2)/np.sqrt(2.0)/qxy,-1.0,1.0)
|
||||||
Tinv = np.array([1.0,np.arccos(tt)/np.pi*12.0]) if np.abs(xyz2[1]) <= np.abs(xyz2[0]) else \
|
Tinv = np.array([1.0,np.arccos(tt)/np.pi*12.0]) if np.abs(xyz2[1]) <= np.abs(xyz2[0]) else \
|
||||||
np.array([np.arccos(tt)/np.pi*12.0,1.0])
|
np.array([np.arccos(tt)/np.pi*12.0,1.0])
|
||||||
Tinv = q * np.where(xyz2<0.0,-Tinv,Tinv)
|
Tinv = q * np.where(xyz2<0.0,-Tinv,Tinv)
|
||||||
|
|
||||||
# inverse M_1
|
# inverse M_1
|
||||||
cube = np.array([ Tinv[0], Tinv[1], (-1.0 if xyz3[2] < 0.0 else 1.0) * rs / np.sqrt(6.0/np.pi) ]) /sc
|
cube = np.array([ Tinv[0], Tinv[1], (-1.0 if xyz3[2] < 0.0 else 1.0) * rs / np.sqrt(6.0/np.pi) ]) /sc
|
||||||
|
# reverse the coordinates back to the regular order according to the original pyramid number
|
||||||
# reverse the coordinates back to the regular order according to the original pyramid number
|
cube = cube[p]
|
||||||
cube = cube[p]
|
|
||||||
|
|
||||||
return cube
|
return cube
|
||||||
|
|
||||||
|
|
||||||
def get_order(xyz):
|
def get_order(xyz):
|
||||||
"""
|
"""
|
||||||
Get order of the coordinates.
|
Get order of the coordinates.
|
||||||
|
@ -157,10 +157,10 @@ def get_order(xyz):
|
||||||
"""
|
"""
|
||||||
if (abs(xyz[0])<= xyz[2]) and (abs(xyz[1])<= xyz[2]) or \
|
if (abs(xyz[0])<= xyz[2]) and (abs(xyz[1])<= xyz[2]) or \
|
||||||
(abs(xyz[0])<=-xyz[2]) and (abs(xyz[1])<=-xyz[2]):
|
(abs(xyz[0])<=-xyz[2]) and (abs(xyz[1])<=-xyz[2]):
|
||||||
return [0,1,2]
|
return [0,1,2]
|
||||||
elif (abs(xyz[2])<= xyz[0]) and (abs(xyz[1])<= xyz[0]) or \
|
elif (abs(xyz[2])<= xyz[0]) and (abs(xyz[1])<= xyz[0]) or \
|
||||||
(abs(xyz[2])<=-xyz[0]) and (abs(xyz[1])<=-xyz[0]):
|
(abs(xyz[2])<=-xyz[0]) and (abs(xyz[1])<=-xyz[0]):
|
||||||
return [1,2,0]
|
return [1,2,0]
|
||||||
elif (abs(xyz[0])<= xyz[1]) and (abs(xyz[2])<= xyz[1]) or \
|
elif (abs(xyz[0])<= xyz[1]) and (abs(xyz[2])<= xyz[1]) or \
|
||||||
(abs(xyz[0])<=-xyz[1]) and (abs(xyz[2])<=-xyz[1]):
|
(abs(xyz[0])<=-xyz[1]) and (abs(xyz[2])<=-xyz[1]):
|
||||||
return [2,0,1]
|
return [2,0,1]
|
||||||
|
|
|
@ -80,7 +80,7 @@ class Geom():
|
||||||
if size is not None:
|
if size is not None:
|
||||||
self.set_size(size)
|
self.set_size(size)
|
||||||
elif rescale:
|
elif rescale:
|
||||||
self.set_size(self.get_grid()/grid_old*self.size)
|
self.set_size(self.get_grid()/grid_old*self.size)
|
||||||
|
|
||||||
message = ['grid a b c: {}'.format(' x '.join(map(str,grid_old)))]
|
message = ['grid a b c: {}'.format(' x '.join(map(str,grid_old)))]
|
||||||
if np.any(grid_old != self.get_grid()):
|
if np.any(grid_old != self.get_grid()):
|
||||||
|
@ -269,7 +269,7 @@ class Geom():
|
||||||
comments = []
|
comments = []
|
||||||
for i,line in enumerate(content[:header_length]):
|
for i,line in enumerate(content[:header_length]):
|
||||||
items = line.lower().strip().split()
|
items = line.lower().strip().split()
|
||||||
key = items[0] if len(items) > 0 else ''
|
key = items[0] if items else ''
|
||||||
if key == 'grid':
|
if key == 'grid':
|
||||||
grid = np.array([ int(dict(zip(items[1::2],items[2::2]))[i]) for i in ['a','b','c']])
|
grid = np.array([ int(dict(zip(items[1::2],items[2::2]))[i]) for i in ['a','b','c']])
|
||||||
elif key == 'size':
|
elif key == 'size':
|
||||||
|
@ -524,7 +524,7 @@ class Geom():
|
||||||
"""Renumber sorted microstructure indices to 1,...,N."""
|
"""Renumber sorted microstructure indices to 1,...,N."""
|
||||||
renumbered = np.empty(self.get_grid(),dtype=self.microstructure.dtype)
|
renumbered = np.empty(self.get_grid(),dtype=self.microstructure.dtype)
|
||||||
for i, oldID in enumerate(np.unique(self.microstructure)):
|
for i, oldID in enumerate(np.unique(self.microstructure)):
|
||||||
renumbered = np.where(self.microstructure == oldID, i+1, renumbered)
|
renumbered = np.where(self.microstructure == oldID, i+1, renumbered)
|
||||||
|
|
||||||
return self.update(renumbered)
|
return self.update(renumbered)
|
||||||
#self.add_comments('tbd')
|
#self.add_comments('tbd')
|
||||||
|
|
|
@ -204,7 +204,7 @@ class Symmetry:
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if (len(rodrigues) != 3):
|
if (len(rodrigues) != 3):
|
||||||
raise ValueError('Input is not a Rodriques-Frank vector.\n')
|
raise ValueError('Input is not a Rodriques-Frank vector.\n')
|
||||||
R = rodrigues
|
R = rodrigues
|
||||||
|
|
||||||
epsilon = 0.0
|
epsilon = 0.0
|
||||||
|
@ -288,8 +288,8 @@ class Symmetry:
|
||||||
theComponents = np.around(np.dot(basis['improper'],v),12)
|
theComponents = np.around(np.dot(basis['improper'],v),12)
|
||||||
inSST = np.all(theComponents >= 0.0)
|
inSST = np.all(theComponents >= 0.0)
|
||||||
if not inSST: # ... and proper SST
|
if not inSST: # ... and proper SST
|
||||||
theComponents = np.around(np.dot(basis['proper'],v),12)
|
theComponents = np.around(np.dot(basis['proper'],v),12)
|
||||||
inSST = np.all(theComponents >= 0.0)
|
inSST = np.all(theComponents >= 0.0)
|
||||||
else:
|
else:
|
||||||
v[2] = abs(v[2]) # z component projects identical
|
v[2] = abs(v[2]) # z component projects identical
|
||||||
theComponents = np.around(np.dot(basis['improper'],v),12) # for positive and negative values
|
theComponents = np.around(np.dot(basis['improper'],v),12) # for positive and negative values
|
||||||
|
|
Loading…
Reference in New Issue