Our new Pond component will represent a two dimensional grid of values, specified by

  • an origin (x and y) - OriginX and OriginY will be the argument names
  • a cell count (x and y)  - CellCountX and CellCountY will be the argument names
  • delta values (x and y) - DeltaX and DeltaY will be the argument names

In our example, OriginX and OriginY will be set to 0; CellCountX will have a value of 6 and CellCountY a value of 8; a value of 10.0 will be set for both DeltaX and DeltaY.  These values will be used to initialise our component's grid and the component will maintain the state of this grid between timesteps.

We will also add another argument to our OMI file - the value that each node on our grid will have at the start of the run; the InitialNodeValue. In our example this will be 1.

So our new improved Pond component OMI file will look like this:

<?xml version="1.0" encoding="utf-8"?>
    <LinkableComponent xmlns="http://www.openmi.org" Type="FluidEarthTutorial.Pond" Assembly="FluidEarthTutorial.dll">
        <Argument Key="FluidEarth2.Sdk.BaseComponentWithEngine.NativeDll" Value="NativeDll%FluidEarth2_Sdk_Interfaces_IEngineTime%ExternalType^FluidEarthTutorial.PondEngine^FluidEarthTutorial~Version=^FluidEarthTutorial.dll%False"/>
        <Argument Key="FluidEarth2.Sdk.BaseComponentWithEngine.Caption" Value="Fluid Earth Tutorial Pond C# calling FORTRAN dll Part II" />
        <Argument Key="FluidEarthTutorial.Pond.TimeStep" Value="0^0^5^0.0^true^false" />
        <Argument Key="FluidEarthTutorial.Pond.CellCountX" Value="6" />
        <Argument Key="FluidEarthTutorial.Pond.CellCountY" Value="8" />
        <Argument Key="FluidEarthTutorial.Pond.InitialNodeValue" Value="1.0" />

The next step is to look at how we modify our existing component  code to handle the functionality of our new improved design...