Constant block

Constant block#

This block contains information about user defined constants and expressions. These are designed to simplify the initial condition setup. See EPOC++ input deck for more information on the input deck.

The constant block type helps to make the input deck more flexible and maintainable. It allows you to define constants and maths parser expressions (see EPOC++ maths parser) which can be used by name later in the deck. Constants are simply maths parser expressions which are assigned to a name as shown above. When the name is used on the right hand side of a deck expression it is replaced by the expression it was assigned with. This expression may be a simple numerical constant, a mathematical expression or a function. Constants may contain spatially varying information without having to pre-calculate them at every location in the domain. To those familiar with FORTRAN codes which use statement functions, parameters appearing in the “constant” block are fairly similar. If a constant name is reused in a constant block then the old constant is deleted and replaced with the new one. This happens without warning.

begin:constant
   lambda = 1.06 * micron
   omega = 2.0 * pi * c / lambda
   den_crit = critical(omega)
   scale = 3.5 * micron
   den_max = 5.0 * den_crit
   thick = 300e-9
   pplength = 6000e-9
   widscale = 5.0e-6

   t_wid = (10.0e-6) / c
   amax = 1.0
   wy = 1e-6
   y = 0.0

   slope = exp(-2.0 * (y/wy)^2)
   blob = gauss(sqrt(x^2 + y^2), 0.0, 1.0e-6)
end:constant

Using constants can be very helpful when dealing with long, complicated expressions since they allow the expression to be broken down into much simpler parts. They can also be used to get around the FORTRAN string length limitation built into many compilers which prevents deck lines being longer then 512 characters long. As a general rule, it is a good idea to break down complicated expressions using constants or by other means, in order to make the deck look more readable. Constants are persistent for the entire runtime of the code, allowing them to be used when specifying time profiles for lasers, and also allowing developers to use maths parser expressions for other internal parts of the code where needed. In the above example, several pre-defined constants have been used (pi and c) and also several functions (critical, exp, gauss and sqrt). These are described here and here.