Hey all,
I'd just like to open a discussion about possibly upgrading Zapdos...and by upgrading I mean completely overhauling its user interface.
I had the opportunity to cover a few lectures for my advisor's computational plasma physics course this semester, during which I showed them how to use Zapdos and Crane to solve simple plasma chemistry and DC glow problems. The most common issue was just how big the input file is and how much stuff you just need to know how to add seemingly off the top of your head. Lots of pieces of the input file just aren't clear to new users. Obviously any new software includes a learning curve, but I think it's way harder than it should be to get just a simple DC glow simulation running. For example, the boundary condition names - there is no way to just know those names off the top of your head. You need to dig into the source code a bit to figure those out. Right now users need to rely on preexisting input files, the user guide (thanks Corey!), or just posting questions here to figure out how to use the code, and even then you sometimes need to open the .C files to see which input parameters are necessary.
I think we're getting to the point where we can start making this code a little more like COMSOL -- e.g. we can create Actions that users can intuitively grasp without requiring them to search for all these different input parameters that seem so random. Right now I'm thinking of adding a few different Actions, essentially mirroring COMSOL's different "interfaces" in the plasma module:
- ElectronTransport
- Input: transport coefficients file, initial conditions,
- electron and mean electron energy drift-diffusion equations
- electron Materials (transport properties, mass, charge, etc.)
- HeavySpeciesTransport
- Input: species name, mass, charge, initial condition, and (for now) transport coefficient(s)
- Ion and Neutral drift-diffusion equations
- Diffusion and mobility materials -- eventually these can be made to be temperature dependent and mixture averaged, making them quite complicated
- Poisson equation
- Boundary conditions (boundary_conditions = 'Hagelaar', 'Lymberopoulos', ...)
- Basically similar to Corey's DriftDiffusionAction, but each species will be added one by one. I split electrons and heavy species because they require different materials and BCs.
- Reactions (Crane - kind of already in place but it could always use some improvement!)
- Interfaces
- This is just an idea. Right now we nominally have two types of interfaces: dielectric (e.g. surface charge accumulation) and water (e.g. electron transport, heavy species solvation -- I'm working on a PR for the latter right now)
- "type = Dielectric" would add surface charge accumulation and the electric field interface kernel automatically
- "type = Water" would add electron and heavy species solvation across the specified interface automatically
This is just a very rough outline and it obviously needs a lot of work, both on the planning side and on the coding side. Using Actions this aggressively would also cover up a lot of the actual mathematics being employed, so we would need a very in depth user guide explicitly describing each option and the equation(s) those options add. (Basically like Corey's user guide, just updated to cover the individual interfaces we add.)
I think reformulating the code in this way would help users get into using Zapdos much more quickly. Right now even adding a single species is a daunting task - even if you use the DriftDiffusionAction you still need to know the appropriate material to add, the right boundary conditions, and any interface kernels that are appropriate. Using Actions would make all of this automatic. I understand that one of the good things about MOOSE apps is that you really need to understand the underlying PDEs and I appreciate that, but I think there's a way to both understand the PDEs and make the input files easier to write - it doesn't need to be one or the other. The user guide and lots of examples would help people figure out how the terms are added, what they mean, and how to modify them if necessary.
What do you all think? This is a very long term goal here -- I'm not suggesting we all drop everything and start writing Actions immediately. I was just thinking that we need to take the user interface seriously if we want this to be an open source alternative to all the commercial plasma simulation tools out there. The best way to design this kind of user interface is definitely up for debate.
-Shane
(Sorry not sorry for the wall of text. :) )