The MUSCLE configuration file, or, historically, the [[http://www.complex-automata.org/|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') } }}} [[Documentation|<< Back to Documentation]]