Version 5 (modified by jorisborgdorff, 12 years ago) (diff)

--

The MUSCLE configuration file, or, historically, the  Complex Automata (CxA) file specifies what code will be used in a simulation, and how its coupled together. It is actually a Ruby file, so any Ruby syntax will work inside it.

To use it, make a file and get the cxa object

cxa = Cxa.LAST

and then add kernels to it by giving a name and a Java class that has the submodel implementation

cxa.add_kernel('w', 'examples.simplejava.Sender')
cxa.add_kernel('r', 'examples.simplejava.ConsoleWriter')

When using a C++ kernel without a Java interface, use the muscle.core.standalone.NativeKernel package. For an MPI executable, on a machine where mpiexec/mpirun can be called directly, use muscle.core.standalone.MPIKernel.

To add properties, add them to the env hash of cxa:

cxa.env["max_timesteps"] = 4
cxa.env["w:dt"] = 1;
cxa.env["w:someDoubleProperty"] = 6.1;
cxa.env["w:someOtherProperty"] = "this is w text";
cxa.env["r:someOtherProperty"] = "this is r text";
cxa.env["cxa_path"] = File.dirname(__FILE__)

Properties that are only meant for a single submodel are prepended with the name and a colon (e.g., "submodelName:propertyName"). Other properties are global and will be used by all submodels.

The scale of the submodels can also be specified in the CxA file. For the timestep of a submodel, use "submodelName:dt", for the total time it will run, "submodelName:T". For the first 3 spatial dimensions, use dx, dy, dz as step size, and X, Y, Z as total size. In Java, the scale can be accessed with the getScale() method of a submodel.

The cs property of cxa is the connection scheme; it defines how submodels are coupled. In the example, submodel w is attached to submodel r by tying the conduit entrance dataOut of w to the conduit exit dataIn of r. It also ties conduit entrance otherOut of w to other of r.

cs = cxa.cs

cs.attach('w' => 'r') {
        tie('dataOut', 'dataIn')
        tie('otherOut', 'other')
}

<< Back to Documentation