Developing MOOSE Applications with ICE
This article is designed to guide users through a typical workflow for developing MOOSE-based applications in ICE. Since ICE is built on top of the Eclipse platform, a large variety of sophisticated tools and technologies for developing scientific software can be leveraged for developing MOOSE applications.
Version control, code editing, code completion, code building, and code generation are just a few of the technologies available to MOOSE-based application developers using ICE. Additionally, after the user develops a custom MOOSE application, the usual MOOSELauncher and MOOSEModel items—along with the ICE Visualization perspective—are still at their disposal for constructing input files, launching jobs, and visualizing results.
To use the MOOSE support in ICE, the user will need to have MOOSE installed on their system along with any MOOSE-based application that the user would like to run. The user can simply use "moose_test" as the project name if no other application is available (the example in this tutorial uses the name "animals").
Please note that installing MOOSE requires the user to add several packages (prerequisites) to their system. For more information on how to install MOOSE and the prerequisites for doing so, please check out the MOOSE Getting Started guide.
For Mac OS X users, ICE developers also recommend installing the Homebrew package manager to ensure all required packages and their dependencies are available to the user.
The latest version of ICE makes cloning MOOSE very simple.
In the main ICE window, click Developer > Framework > MOOSE > Clone Moose.
This step will automatically connect to the MOOSE GitHub repository, create a local clone on the user's disk, and import MOOSE into the "Project Explorer."
The Cloning MOOSE step above also creates the two required build targets used to build Libmesh and MOOSE. Libmesh is required for MOOSE to build, so the user should start there.
The "Build Libmesh" build target will appear in the "Build Targets" view pane.
Double clicking the "Build Libmesh" target will execute the sh update_and_rebuild_libmesh.sh script with the output streaming in the "Console" view pane.
Note that this process will take some time.
Once the Libmesh build completes, the user can then execute the "Build MOOSE" target and the output should stream in the "Console" view pane.
Note that this process will take some time.
With MOOSE built, the user can start the process of creating their own MOOSE-based application. The first step, "Forking the Stork," is described below.
Forking the Stork
The MOOSE development team provides a GitHub repository called "stork" (located at https://github.com/idaholab/stork) that includes the base structure needed to create a new MOOSE application. So, "Forking the Stork"—as the MOOSE team coined it—implies forking this repository, changing its name to the name of the user's new MOOSE application, and cloning the contents of the repository to the user's local disk.
ICE provides this functionality through a simple interface, allowing an ICE user to "Fork the Stork" in a few short steps.
First, in the main ICE menu, select Developer > Framework > MOOSE > Fork the Stork.
The resulting dialog will prompt the user for the name of their new MOOSE application ("animals" in this case), as well as their GitHub username and password.
Once the user has provided this information and clicked Finish, ICE will fork the "stork" repository (located at https://github.com/idaholab/stork), rename it to the provided application name, clone it to ~/ICEFiles on the user's local disk, and import it into ICE as a new C++ project in the C/C++ perspective's "Project Explorer" view pane.
To look at a MOOSE class referenced in one of the new MOOSE application's source files, simply click the class name or the header file and click F3. ICE will take the user directly to the declaration for that MOOSE class so they can peruse and look up its method definitions.
Adding a New Kernel
The user can easily create custom Kernels with ICE once they have cloned, built, and "Forked the Stork" to produce a new MOOSE application.
To create a new Kernel, right click on the new MOOSE-based application project and select New > MOOSE Object > Kernel.
This action will prompt the user for the name of the new Kernel subclass.
Simply enter the desired name and click OK.
ICE will automatically generate a new include and source file in include/kernel and src/kernel, respectively.
These new files are the stubbed out, base implementation of a subclassed Kernel can be modified to fit the user's operation.
Building your MOOSE App
Building the newly-created MOOSE application is simple because the "Fork the Stork" action also produced a build target (make all) for the user.
Navigate to the "Build Target" view pane and double click on make all (the new build target).
The new MOOSE application will then build, producing an application executable. Note that this will take some time.
Pushing Changes Back to GitHub
As the user makes modifications to their project, they will want to periodically commit or "push" these changes to their GitHub repository.
The first step is to open the "Git Perspective" by clicking the Open Perspective button in the upper right hand corner of ICE.
Next, select Git from the resulting prompt and click OK.
The user should now have the Git perspective button available on the ICE toolbar.
Click the Git perspective button to bring up the Git interface pane in the main ICE window. The user should now see the repository for their MOOSE-based application in the "Git Repositories" view pane (left), "animals" in this case.
To push project changes/modifications to the remote GitHub repository, switch to the Git perspective, as above, and select the desired repository in the "Git Repositories" view pane.
The "Git Repositories" view includes a new set of tabbed views. Select the Git Staging tab to pull up the "Git Staging" view pane.
Drag any "Unstaged Changes" to the "Staged Changes" section.
Provide a brief message describing the nature of the commit.
Finally, click Commit and Push, enter the GitHub credentials if/when prompted, and watch as the new files are committed to the remote repository!
Executing Built MOOSE Application
Now that you've developed a new MOOSE application you need to develop input files for it and execute it to see your desired results. This is simple with ICE: just use the built in MOOSE Model Builder and MOOSE Launcher Items. Detailed instructions can be found at Using MOOSE with ICE.