show: name:Benthic foraminifera info:~ There are two species of Foraminiera: longitudal and coiled. The first chamber of the longitudal species has orange marks. Haploid and diploid generations alternate in both species. All chambers of the haploid generation have the same size. In the diploid generation, subsequent chambers are bigger than their predecessors. Nutrients are shown as tiny green cylinders. Foraminifers move towards nearest nutrients and this way they can accumulate enough energy to reproduce. When the "Enhance visualization" option is enabled, reticulopodia are shown as large disks and positions of nutrients are indicated by cuboids. More information at www.framsticks.com/foraminifera ~ expdef:foraminifera code:~ global Params; //to easily transfer changes in identical properties from this show to expdef global last_simspeed; //to display time scale when it changes significantly function onLoad() { Simulator.init(); last_simspeed=0; GLDisplay.desiredsimspeed = 50; GLDisplay.minfps = 10; TrackingCam.cam_h = 15; //more side view Params = { "feedrate" : [0.05,0.1,0.2], "feedtrans" : [0.01,0.05,0.1],"energy_nut" :[0.5,1.5,3.0], "stress" : [0,1], "visualize" : [0,1]}; ShowParams.visualize=1; } function timeScale() { //just a draft, this function and all constants in expdef need serious review var foramSpeedMmPerMin=0.1; //0.1 mm/minute based on http://drs.nio.org/drs/bitstream/handle/2264/418/ONGC_Bull_37%281%29_53.pdf var localDriveMicronsPerStep=framsToMicrons(0.08); //0.08 is used in expdef as distance (in frams units) per simulation step. TODO Use a variable/constant/function from expdef instead of copying this value here var foramSpeedMmPerSec=foramSpeedMmPerMin/60; var localDriveMmPerStep=localDriveMicronsPerStep/1000; var localDriveMmPerSec=localDriveMmPerStep*Simulator.simspeed; return localDriveMmPerSec/foramSpeedMmPerSec; } function updateBanner() { GLDisplay.banner="World size is %g mm." % (framsToMicrons(World.wrldsiz)/1000); GLDisplay.banner+="\nShowing real-time x %g." % timeScale(); } function onShowStep() { if (Simulator.simspeedlast_simspeed*1.1) //significant change { updateBanner(); last_simspeed=Simulator.simspeed; } } function setShowParam(param_id) { ExpParams.[param_id] = Params[param_id][ShowParams.[param_id]]; } function ShowParams_feedrate_set() { setShowParam("feedrate"); } function ShowParams_feedtrans_set() { setShowParam("feedtrans"); } function ShowParams_energy_nut_set() { setShowParam("energy_nut"); } function ShowParams_stress_set() { setShowParam("stress"); } function ShowParams_visualize_set() { setShowParam("visualize"); } ~ prop: id:feedrate name:Feeding rate type:d 0 2 1 ~Low~Medium~High prop: id:feedtrans name:Energy transfer type:d 0 2 1 ~0.01~0.05~0.1 prop: id:energy_nut name:Nutrient energy type:d 0 2 1 ~0.5~1.5~3 prop: id:stress name:Stress type:d 0 1 1 prop: id:visualize name:Enhance visualization type:d 0 1 0