def __init__(self, dx=1., dy=1., nx=None, ny=1, rand=0, *args, **kwargs): self.args = {'dx': dx, 'dy': dy, 'nx': nx, 'ny': ny, 'rand': rand} self.nx = nx self.ny = ny self.dx = PhysicalField(value=dx) scale = PhysicalField(value=1, unit=self.dx.unit) self.dx /= scale self.dy = PhysicalField(value=dy) if self.dy.unit.isDimensionless(): self.dy = dy else: self.dy /= scale self.grid = Grid2D(nx=nx, ny=ny, dx=dx, dy=dy, communicator=serialComm) self.numberOfVertices = self.grid._numberOfVertices vertices = self.grid.vertexCoords changedVertices = numerix.zeros(vertices.shape, 'd') for i in range(len(vertices[0])): if ((i % (nx + 1)) != 0 and (i % (nx + 1)) != nx and (i // nx + 1) != 0 and (i // nx + 1) != ny): changedVertices[0, i] = vertices[0, i] + (rand * ( (random.random() * 2) - 1)) changedVertices[1, i] = vertices[1, i] + (rand * ( (random.random() * 2) - 1)) else: changedVertices[0, i] = vertices[0, i] changedVertices[1, i] = vertices[1, i] faces = self.grid.faceVertexIDs cells = self.grid.cellFaceIDs Mesh2D.__init__(self, changedVertices, faces, cells, communicator=serialComm, *args, **kwargs) self.scale = scale
def __init__(self, dx = 1., dy = 1., nx = None, ny = 1, rand = 0, *args, **kwargs): self.args = { 'dx': dx, 'dy': dy, 'nx': nx, 'ny': ny, 'rand': rand } self.nx = nx self.ny = ny self.dx = PhysicalField(value = dx) scale = PhysicalField(value = 1, unit = self.dx.unit) self.dx /= scale self.dy = PhysicalField(value = dy) if self.dy.unit.isDimensionless(): self.dy = dy else: self.dy /= scale self.grid = Grid2D(nx=nx, ny=ny, dx=dx, dy=dy) self.numberOfVertices = self.grid._numberOfVertices vertices = self.grid.vertexCoords changedVertices = numerix.zeros(vertices.shape, 'd') for i in range(len(vertices[0])): if((i % (nx+1)) != 0 and (i % (nx+1)) != nx and (i / nx+1) != 0 and (i / nx+1) != ny): changedVertices[0, i] = vertices[0, i] + (rand * ((random.random() * 2) - 1)) changedVertices[1, i] = vertices[1, i] + (rand * ((random.random() * 2) - 1)) else: changedVertices[0, i] = vertices[0, i] changedVertices[1, i] = vertices[1, i] faces = self.grid.faceVertexIDs cells = self.grid.cellFaceIDs Mesh2D.__init__(self, changedVertices, faces, cells, *args, **kwargs) self.scale = scale
def __init__(self, dx = 1., dy = 1., nx = None, ny = 1, rand = 0): self.nx = nx self.ny = ny self.dx = PhysicalField(value = dx) scale = PhysicalField(value = 1, unit = self.dx.getUnit()) self.dx /= scale self.dy = PhysicalField(value = dy) if self.dy.getUnit().isDimensionless(): self.dy = dy else: self.dy /= scale from fipy import Grid2D self.grid = Grid2D(nx=nx, ny=ny, dx=dx, dy=dy) self.numberOfVertices = self.grid._getNumberOfVertices() vertices = self.grid.getVertexCoords() changedVertices = numerix.zeros(vertices.shape, 'd') for i in range(len(vertices[0])): if((i % (nx+1)) != 0 and (i % (nx+1)) != nx and (i / nx+1) != 0 and (i / nx+1) != ny): changedVertices[0, i] = vertices[0, i] + (rand * ((random.random() * 2) - 1)) changedVertices[1, i] = vertices[1, i] + (rand * ((random.random() * 2) - 1)) else: changedVertices[0, i] = vertices[0, i] changedVertices[1, i] = vertices[1, i] faces = self.grid._getFaceVertexIDs() cells = self.grid._getCellFaceIDs() Mesh2D.__init__(self, changedVertices, faces, cells) self.setScale(value = scale)
L = dx * nx asq = 1.0 epsilon = 1 diffusionCoeff = 1 from fipy.meshes.grid2D import Grid2D mesh = Grid2D(dx, dy, nx, ny) from fipy.variables.cellVariable import CellVariable from fipy.tools.numerix import random var = CellVariable(name = "phase field", mesh = mesh, value = random.random(nx * ny)) faceVar = var.getArithmeticFaceValue() doubleWellDerivative = asq * ( 1 - 6 * faceVar * (1 - faceVar)) from fipy.terms.implicitDiffusionTerm import ImplicitDiffusionTerm from fipy.terms.transientTerm import TransientTerm diffTerm2 = ImplicitDiffusionTerm(coeff = (diffusionCoeff * doubleWellDerivative,)) diffTerm4 = ImplicitDiffusionTerm(coeff = (diffusionCoeff, -epsilon**2)) eqch = TransientTerm() - diffTerm2 - diffTerm4 from fipy.solvers.linearPCGSolver import LinearPCGSolver from fipy.solvers.linearLUSolver import LinearLUSolver ##solver = LinearLUSolver(tolerance = 1e-15,steps = 1000) solver = LinearPCGSolver(tolerance = 1e-15,steps = 1000)
## L = dx * nx asq = 1.0 epsilon = 1 diffusionCoeff = 1 from fipy.meshes.grid3D import Grid3D mesh = Grid3D(dx, dy, dz, nx, ny, nz) from fipy.variables.cellVariable import CellVariable from fipy.tools.numerix import random var = CellVariable(name = "phase field", mesh = mesh, value = random.random(nx * ny* nz)) faceVar = var.getArithmeticFaceValue() doubleWellDerivative = asq * ( 1 - 6 * faceVar * (1 - faceVar)) from fipy.terms.implicitDiffusionTerm import ImplicitDiffusionTerm from fipy.terms.transientTerm import TransientTerm diffTerm2 = ImplicitDiffusionTerm(coeff = (diffusionCoeff * doubleWellDerivative,)) diffTerm4 = ImplicitDiffusionTerm(coeff = (diffusionCoeff, -epsilon**2)) eqch = TransientTerm() - diffTerm2 - diffTerm4 from fipy.solvers.linearPCGSolver import LinearPCGSolver from fipy.solvers.linearLUSolver import LinearLUSolver ##solver = LinearLUSolver(tolerance = 1e-15,steps = 1000) solver = LinearPCGSolver(tolerance = 1e-15,iterations = 1000)
dx = 2. dy = 2. L = dx * nx asq = 1.0 epsilon = 1 diffusionCoeff = 1 from fipy.meshes.grid2D import Grid2D mesh = Grid2D(dx, dy, nx, ny) from fipy.variables.cellVariable import CellVariable from fipy.tools.numerix import random var = CellVariable(name="phase field", mesh=mesh, value=random.random(nx * ny)) faceVar = var.getArithmeticFaceValue() doubleWellDerivative = asq * (1 - 6 * faceVar * (1 - faceVar)) from fipy.terms.implicitDiffusionTerm import ImplicitDiffusionTerm from fipy.terms.transientTerm import TransientTerm diffTerm2 = ImplicitDiffusionTerm(coeff=(diffusionCoeff * doubleWellDerivative, )) diffTerm4 = ImplicitDiffusionTerm(coeff=(diffusionCoeff, -epsilon**2)) eqch = TransientTerm() - diffTerm2 - diffTerm4 from fipy.solvers.linearPCGSolver import LinearPCGSolver from fipy.solvers.linearLUSolver import LinearLUSolver ##solver = LinearLUSolver(tolerance = 1e-15,steps = 1000) solver = LinearPCGSolver(tolerance=1e-15, steps=1000)
epsilon = 1 diffusionCoeff = 1 from fipy.meshes.grid2D import Grid2D mesh = Grid2D(dx, dy, nx, ny) bench.stop('mesh') bench.start() from fipy.variables.cellVariable import CellVariable from fipy.tools.numerix import random var = CellVariable(name="phase field", mesh=mesh, value=random.random(nx * ny)) bench.stop('variables') bench.start() from fipy.terms.implicitDiffusionTerm import ImplicitDiffusionTerm from fipy.terms.transientTerm import TransientTerm faceVar = var.getArithmeticFaceValue() doubleWellDerivative = asq * (1 - 6 * faceVar * (1 - faceVar)) diffTerm2 = ImplicitDiffusionTerm(coeff=(diffusionCoeff * doubleWellDerivative, )) diffTerm4 = ImplicitDiffusionTerm(coeff=(diffusionCoeff, -epsilon**2)) eqch = TransientTerm() - diffTerm2 - diffTerm4