Simulation Mesh
Most fieldsolvers in Warp use common mesh variables that are overviewed here primarily in the context of the 3D code. In the r-z code, the x-mesh defines radial mesh positions. In the transverse x-y slice code the z-mesh is largely irrelevant. For a 3D mesh, mesh extents and sizes are defined as follows:
# Mesh extents
w3d.xmmin = -10.*mm # x-mesh min
w3d.xmmax = 10.*mm # x-mesh max
w3d.ymmin = -10.*mm # y-mesh min
w3d.ymmax = 10.*mm # y-mesh max
w3d.zmmin = -250.*mm # z-mesh min
w3d.zmmax = 250.*mm # z-mesh max
# Mesh sizes
w3d.nx = 200 # size of x-mesh, mesh points are 0,...,nx
w3d.ny = 200 # size of y-mesh, mesh points are 0,...,ny
w3d.nz = 1000 # size of z-mesh, mesh points are 0,...,nz
For multigrid fieldsolvers commonly used there are no restrictions on values on the mesh sizes nx, ny, nz other than then are positive integers. For some fieldsolvers such as the FFT, the mesh sizes need to be restricted to a power of 2 for efficient operation. When the call to generate() is made, the mesh increments will be set as (no need to include in script)
w3d.dx = (w3d.xmmax - w3d.xmmin)/w3d.nx # x mesh spacing
w3d.dy = (w3d.ymmax - w3d.ymmin)/w3d.ny # y mesh spacing
w3d.dz = (w3d.zmmax - w3d.zmmin)/w3d.nz # z mesh spacing
in the case where no mesh symmetry options (described below) are given which might override the input mesh bounds. On the call to generate(), the code also calculates mesh arrays that are convenient to use for calculating user defined diagnostics (binning distribution measures etc):
w3d.xmesh # array x-coordinates of mesh
w3d.ymesh # array y-coordinates of mesh
w3d.zmesh # array z-coordinates of mesh
Various mesh-edge boundary conditions can be set from
w3d.bound0 # lower z-mesh
w3d.boundnz # upper z-mesh
w3d.boundxy # transverse x-y
and work with most field solvers. Valid setting include "dirichlet" (zero potential, default), "neumann" (zero normal derivative potential), or "periodic", and are set as, for example:
w3d.boundxy = neumann
Neumann boundary conditions may be less computationally efficient for the field solver. Mixed boundary conditions (as might be desired for free space continuations beyond the mesh) are not implemented at present in Warp. Conducting object can be loaded coincident with mesh boundaries. In that case, the boundary conditions set by loading the objects on the mesh supersede the mesh-edge settings.
Various transverse symmetry options work with many of the fieldsolvers. These include
w3d.l2symtry # 2-fold (up-down in y) transverse symmetry
w3d.l4symtry # 4-fold (map to upper x-y quadrant) transverse symmetry
which can be set to "True" or "False" to turn on and off, e.g.,
w3d.l4symtry = True