Home‎ > ‎How To's‎ > ‎Field Solvers‎ > ‎

### 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,...,nxw3d.ny =  200  ``# size of y-mesh, mesh points are 0,...,nyw3d.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  `