Micro tab: Simple module, the concentration of sugar and salt is computed as moles per volume and all displays update as necessary and there is no dynamic behavior. See model.txt for a description of the physics There are 4 classes (ConductivityTesterNode, SugarAndSaltSolutionsConductivityTesterNode, ConductivityTesterToolNode, ConductivityTesterToolboxNode) needed to implement the conductivity tester feature. To clarify the naming and conventions: The Tool is the icon drawn on the Toolbox, and used to create the tester node (Sugar and Salt Solutions Conductivity Tester Node is a sim-specific subclass). Macro tab: Very complex sim, there are several types of solute (with different lattice structures) which the user can add. There are many steps in the crystal lifecycle, and each must respect the formula ratio for the crystal (such as NaNO3 or CaCl2): 1. Creation of a new crystal for the shaker, must have an integral number of formula units 2. Dissolving must dissolve one of each of the formula unit members 3. Incremental crystal growth (e.g. during evaporation) must acquire one of each of the formula unit members 4. When draining out, each member of the formula unit must leave the drain at the same time By ensuring that all events happen in pairs (for NaCl or NaNO3) or in 2:1 ratio (for CaCl2) the concentrations have reasonable behavior. The view in Macro and Micro are supposed to look similar (nearly identical), so the view is created first and mapped into model coordinates to ensure that measurements and dimensions look the same in the view, while still giving correct model measurements. See model.txt for more explanations of the supported behavior Water tab: JBox2D is used to model collisions and coulomb forces between particles in WaterModel. JBox2D updates the model and those values are used to set the true model values, which then update the views, see WaterModel for more. Hence there are 3 coordinate frames: Box2D, Model and View. This is necessary since Box2D only works for a specific range of values. See model.txt for more explanations of the supported behavior