def _orderVertices(vertexCoords, vertices): coordinates = numerix.take(vertexCoords, vertices, axis=1) centroid = numerix.add.reduce(coordinates, axis=1) / coordinates.shape[1] coordinates = coordinates - centroid[..., numerix.newaxis] coordinates = numerix.where(coordinates == 0, 1.e-10, coordinates) ## to prevent division by zero angles = numerix.arctan(coordinates[1] / coordinates[0]) + numerix.where(coordinates[0] < 0, numerix.pi, 0) ## angles go from -pi / 2 to 3*pi / 2 sortorder = numerix.argsort(angles) return numerix.take(vertices, sortorder)
def _orderVertices(vertexCoords, vertices): coordinates = numerix.take(vertexCoords, vertices) centroid = numerix.add.reduce(coordinates) / coordinates.shape[0] coordinates = coordinates - centroid # to prevent division by zero coordinates = numerix.where(coordinates == 0, 1.e-100, coordinates) # angles go from -pi / 2 to 3*pi / 2 angles = numerix.arctan(coordinates[:, 1] / coordinates[:, 0]) \ + numerix.where(coordinates[:, 0] < 0, numerix.pi, 0) sortorder = numerix.argsort(angles) return numerix.take(vertices, sortorder)
x, y = mesh.getCellCenters()[...,0], mesh.getCellCenters()[...,1] phase.setValue(1., where=(x - seedCenter[0])**2 + (y - seedCenter[1])**2 < radius**2) temperature = CellVariable( name='temperature', mesh=mesh, value=initialTemperature, hasOld=1 ) bench.stop('variables') bench.start() from fipy.tools import numerix mVar = phase - 0.5 - kappa1 / numerix.pi * \ numerix.arctan(kappa2 * temperature) phaseY = phase.getFaceGrad().dot((0, 1)) phaseX = phase.getFaceGrad().dot((1, 0)) psi = theta + numerix.arctan2(phaseY, phaseX) Phi = numerix.tan(N * psi / 2) PhiSq = Phi**2 beta = (1. - PhiSq) / (1. + PhiSq) betaPsi = -N * 2 * Phi / (1 + PhiSq) A = alpha**2 * c * (1.+ c * beta) * betaPsi D = alpha**2 * (1.+ c * beta)**2 dxi = phase.getFaceGrad()._take((1, 0), axis = 1) * (-1, 1) anisotropySource = (A * dxi).getDivergence() from fipy.terms.transientTerm import TransientTerm from fipy.terms.explicitDiffusionTerm import ExplicitDiffusionTerm from fipy.terms.implicitSourceTerm import ImplicitSourceTerm
def arctan(self): return self._UnaryOperatorVariable(lambda a: numerix.arctan(a))
x, y = mesh.getCellCenters()[..., 0], mesh.getCellCenters()[..., 1] phase.setValue(1., where=(x - seedCenter[0])**2 + (y - seedCenter[1])**2 < radius**2) temperature = CellVariable(name='temperature', mesh=mesh, value=initialTemperature, hasOld=1) bench.stop('variables') bench.start() from fipy.tools import numerix mVar = phase - 0.5 - kappa1 / numerix.pi * \ numerix.arctan(kappa2 * temperature) phaseY = phase.getFaceGrad().dot((0, 1)) phaseX = phase.getFaceGrad().dot((1, 0)) psi = theta + numerix.arctan2(phaseY, phaseX) Phi = numerix.tan(N * psi / 2) PhiSq = Phi**2 beta = (1. - PhiSq) / (1. + PhiSq) betaPsi = -N * 2 * Phi / (1 + PhiSq) A = alpha**2 * c * (1. + c * beta) * betaPsi D = alpha**2 * (1. + c * beta)**2 dxi = phase.getFaceGrad()._take((1, 0), axis=1) * (-1, 1) anisotropySource = (A * dxi).getDivergence() from fipy.terms.transientTerm import TransientTerm from fipy.terms.explicitDiffusionTerm import ExplicitDiffusionTerm from fipy.terms.implicitSourceTerm import ImplicitSourceTerm