BLAST: High-Order Finite Element Hydrodynamics
BLAST User Interface

In order to solve a problem using Blast, you need to describe it accurately and completely.  For the first several years, Blast problem descriptions were written using a custom-designed language.  In 2014, we began to transition problem description to the Lua language.  We’re not quite done yet, but have made a lot of progress.

This change has allowed us to add flexibility and expressive power to the user interface, while still maintaining the Blast-specific concepts and elements from the original interface.

In particular, the new interface maintains and enhances the functional perspective that is central to Blast.  For example, problem regions in Blast can be described by (among several alternatives) implicit functions.  Let’s look at how the three regions for the triple point example were defined:

regions = {

  r1 = { implicit_region =
           function(x,y)
             if (x<1) then return -1 else return 1 end
           end,
  },

  r2 = { implicit_region =
           function(x,y)
             if ((x>=1) and (y<=1.5)) then return -1 else return 1 end
           end,
  },

  r3 = { implicit_region =

           function(x,y)
             if ((x>=1) and (y>1.5)) then return -1 else return 1 end
           end,
  },
  all = { union = {"r1", "r2", "r3"} }
}

Region 1 (r1) is the tall thin region at the left side of the problem rectangle. Region 2 is beneath (south of) region 3. Each region is defined by an implicit function in the code above. In Blast, if R is a region defined implicitly by a function F(x,y), then a point (a,b) satisfies the condition:

(1)                         (a,b)∈R ⟺ F(a,b)≤0

Similarly, Blast uses Lua functions to define initial conditions, boundary conditions, etc. for velocity, pressure, energy, and other field values. These functions are simple for the user to write because they are functions of space and time – independent of most details about the mesh. We expect to continue to improve our user interface. As a problem description language, it is reasonably complete now. We plan to add additional ability for the user to control the problem’s evolution during a run.