SMML Component Example
<?xml version="1.0"?>
<!DOCTYPE compound SYSTEM "file:mml.dtd">
<compound id="CONSUMERS_module" name="CONSUMERS_module" >
<atom name="CONS_BIOM" id="CONS_BIOM" status="private" type="state" >
<port type="input" name="CONS_INGEST" />
<port type="input" name="CONS_EGEST" />
<port type="input" name="CONS_MORT_BIOM" />
<port type="input" name="CONS_RESPIRATION" />
<dynamic event="integrate" type="code" >
<code> <![CDATA[ ( ( ( CONS_INGEST-CONS_EGEST )-CONS_MORT_BIOM )-CONS_RESPIRATION ) ]]>
</code>
</dynamic>
<port type="input" name="P1_CONS_IC" />
<port type="input" name="CELL_SIZE" />
<dynamic event="init" type="code" >
<doc> <![CDATA[ CARBON BIOMASS OF AN AGGREGATED CONSUMER. UNITS = KGC.CONSUMERS EXCLUDE THE MICRO ORGANISMS WHICH ARE ACCOUNTED FOR IN THE RESPIRATION FLUXES ]]>
</doc>
<code> <![CDATA[ ( ( P1_CONS_IC*0.001 )*CELL_SIZE ) ]]>
</code>
</dynamic>
</atom>
<link origin = "CONS_INGEST.out" destination = "CONS_BIOM.CONS_INGEST" />
<link origin = "CONS_EGEST.out" destination = "CONS_BIOM.CONS_EGEST" />
<link origin = "CONS_MORT_BIOM.out" destination = "CONS_BIOM.CONS_MORT_BIOM" />
<link origin = "CONS_RESPIRATION.out" destination = "CONS_BIOM.CONS_RESPIRATION" />
<link origin = "P1_CONS_IC.out" destination = "CONS_BIOM.P1_CONS_IC" />
<link origin="this.CELL_SIZE" destination="CONS_BIOM.CELL_SIZE" />
<atom name="CONS_INGEST" id="CONS_INGEST" status="private" type="aux" >
<port type="input" name="CONS_TEMP_CF" />
<port type="input" name="CONS_BIOM" />
<port type="input" name="P1_CONS_RC_INGEST" />
<port type="input" name="P1_CONS_MAX" />
<port type="input" name="CELL_SIZE" />
<port type="input" name="OM_AVAIL" />
<dynamic event="update" type="code" >
<doc> <![CDATA[ INGESTION OF ORGANIC CARBON BY CONSUMER GROUP. UNITS = KGC/D ]]>
</doc>
<code> <![CDATA[ SL::Min(( ( ( CONS_TEMP_CF*CONS_BIOM )*P1_CONS_RC_INGEST )*( 1-( CONS_BIOM/( P1_CONS_MAX*CELL_SIZE ) ) ) ), ( OM_AVAIL/DT )) ]]>
</code>
</dynamic>
</atom>
<link origin = "CONS_TEMP_CF.out" destination = "CONS_INGEST.CONS_TEMP_CF" />
<link origin = "CONS_BIOM.out" destination = "CONS_INGEST.CONS_BIOM" />
<link origin = "P1_CONS_RC_INGEST.out" destination = "CONS_INGEST.P1_CONS_RC_INGEST" />
<link origin = "P1_CONS_MAX.out" destination = "CONS_INGEST.P1_CONS_MAX" />
<link origin="this.CELL_SIZE" destination="CONS_INGEST.CELL_SIZE" />
<link origin = "OM_AVAIL.out" destination = "CONS_INGEST.OM_AVAIL" />
<atom name="CONS_EGEST" id="CONS_EGEST" status="public" type="aux" >
<port type="input" name="CONS_INGEST" />
<port type="input" name="P1_CONS_ASSIM" />
<dynamic event="update" type="code" >
<doc> <![CDATA[ ORGANIC CARBON EGESTED BY CONSUMERS; UNITS = KGC/D ]]>
</doc>
<code> <![CDATA[ ( CONS_INGEST*( 1-P1_CONS_ASSIM ) ) ]]>
</code>
</dynamic>
</atom>
<link origin = "CONS_INGEST.out" destination = "CONS_EGEST.CONS_INGEST" />
<link origin = "P1_CONS_ASSIM.out" destination = "CONS_EGEST.P1_CONS_ASSIM" />
<atom name="CONS_MORT_BIOM" id="CONS_MORT_BIOM" status="public" type="aux" >
<port type="input" name="P1_CONS_RC_MORT" />
<port type="input" name="CONS_BIOM" />
<dynamic event="update" type="code" >
<doc> <![CDATA[ CARBON LOSS DUE TO MORTALITY OF CONSUMERS; UNITS =KGC/D ]]>
</doc>
<code> <![CDATA[ ( P1_CONS_RC_MORT*CONS_BIOM ) ]]>
</code>
</dynamic>
</atom>
<link origin = "P1_CONS_RC_MORT.out" destination = "CONS_MORT_BIOM.P1_CONS_RC_MORT" />
<link origin = "CONS_BIOM.out" destination = "CONS_MORT_BIOM.CONS_BIOM" />
<atom name="CONS_RESPIRATION" id="CONS_RESPIRATION" status="private" type="aux" >
<port type="input" name="CONS_BIOM" />
<port type="input" name="P1_CONS_RC_RESP" />
<dynamic event="update" type="code" >
<doc> <![CDATA[ CARBON LOSSES VIA RESPIRATION. UNITS = KGC * DIMLESS * 1/D ]]>
</doc>
<code> <![CDATA[ ( CONS_BIOM*P1_CONS_RC_RESP ) ]]>
</code>
</dynamic>
</atom>
<link origin = "CONS_BIOM.out" destination = "CONS_RESPIRATION.CONS_BIOM" />
<link origin = "P1_CONS_RC_RESP.out" destination = "CONS_RESPIRATION.P1_CONS_RC_RESP" />
<atom name="CI_DETR" id="CI_DETR" status="public" type="aux" >
<port type="input" name="OM_AVAIL" />
<port type="input" name="DET_AVAIL" />
<port type="input" name="CONS_INGEST" />
<dynamic event="update" type="code" >
<doc> <![CDATA[ CONSUMER IS OPPORTUNISTIC FEEDING ON THIS ITEM IN PROPORTION TO ITS ABUNDANCE COMPARED TO OTHER FOOD ITEMS. UNITS = KGC/D ]]>
</doc>
<code> <![CDATA[ ( ( ( OM_AVAIL == 0 ) ) ? ( 0 ) : ( ( ( DET_AVAIL/OM_AVAIL )*CONS_INGEST ) ) ) ]]>
</code>
</dynamic>
</atom>
<link origin = "OM_AVAIL.out" destination = "CI_DETR.OM_AVAIL" />
<link origin="this.DET_AVAIL" destination="CI_DETR.DET_AVAIL" />
<link origin = "CONS_INGEST.out" destination = "CI_DETR.CONS_INGEST" />
<atom name="CI_DOM" id="CI_DOM" status="public" type="aux" >
<port type="input" name="OM_AVAIL" />
<port type="input" name="DOM_C_AVAIL" />
<port type="input" name="CONS_INGEST" />
<dynamic event="update" type="code" >
<code> <![CDATA[ ( ( ( OM_AVAIL == 0 ) ) ? ( 0 ) : ( ( ( DOM_C_AVAIL/OM_AVAIL )*CONS_INGEST ) ) ) ]]>
</code>
</dynamic>
</atom>
<link origin = "OM_AVAIL.out" destination = "CI_DOM.OM_AVAIL" />
<link origin="this.DOM_C_AVAIL" destination="CI_DOM.DOM_C_AVAIL" />
<link origin = "CONS_INGEST.out" destination = "CI_DOM.CONS_INGEST" />
<atom name="CI_NPHBIO" id="CI_NPHBIO" status="public" type="aux" >
<port type="input" name="OM_AVAIL" />
<port type="input" name="NPHBIO_AVAIL" />
<port type="input" name="CONS_INGEST" />
<dynamic event="update" type="code" >
<doc> <![CDATA[ CONSUMER IS OPPORTUNISTIC, FEEDING ON THIS ITEM IN PROPORTION TO ITS ABUNDANCE COMPARED TO OTHER FOOD ITEMS. UNITS = KGC/D ]]>
</doc>
<code> <![CDATA[ ( ( ( OM_AVAIL == 0 ) ) ? ( 0 ) : ( ( ( NPHBIO_AVAIL/OM_AVAIL )*CONS_INGEST ) ) ) ]]>
</code>
</dynamic>
</atom>
<link origin = "OM_AVAIL.out" destination = "CI_NPHBIO.OM_AVAIL" />
<link origin="this.NPHBIO_AVAIL" destination="CI_NPHBIO.NPHBIO_AVAIL" />
<link origin = "CONS_INGEST.out" destination = "CI_NPHBIO.CONS_INGEST" />
<atom name="CI_PHBIO" id="CI_PHBIO" status="public" type="aux" >
<port type="input" name="OM_AVAIL" />
<port type="input" name="PHBIO_AVAIL" />
<port type="input" name="CONS_INGEST" />
<dynamic event="update" type="code" >
<doc> <![CDATA[ CONSUMER IS OPPORTUNISTIC, FEEDING ON THIS ITEM IN PROPORTION TO ITS ABUNDANCE COMPARED TO OTHER FOOD ITEMS. UNITS = KGC * 1/D = KGC/D ]]>
</doc>
<code> <![CDATA[ ( ( ( OM_AVAIL == 0 ) ) ? ( 0 ) : ( ( ( PHBIO_AVAIL/OM_AVAIL )*CONS_INGEST ) ) ) ]]>
</code>
</dynamic>
</atom>
<link origin = "OM_AVAIL.out" destination = "CI_PHBIO.OM_AVAIL" />
<link origin="this.PHBIO_AVAIL" destination="CI_PHBIO.PHBIO_AVAIL" />
<link origin = "CONS_INGEST.out" destination = "CI_PHBIO.CONS_INGEST" />
<atom name="CI_PHT" id="CI_PHT" status="public" type="aux" >
<port type="input" name="OM_AVAIL" />
<port type="input" name="PHT_AVAIL" />
<port type="input" name="CONS_INGEST" />
<dynamic event="update" type="code" >
<doc> <![CDATA[ CONSUMER IS OPPORTUNISTIC, FEEDING ON THIS ITEM IN PROPORTION TO ITS ABUNDANCE COMPARED TO OTHER FOOD ITEMS. UNITS = KGC * 1/D = KGC/D ]]>
</doc>
<code> <![CDATA[ ( ( ( OM_AVAIL == 0 ) ) ? ( 0 ) : ( ( ( PHT_AVAIL/OM_AVAIL )*CONS_INGEST ) ) ) ]]>
</code>
</dynamic>
</atom>
<link origin = "OM_AVAIL.out" destination = "CI_PHT.OM_AVAIL" />
<link origin="this.PHT_AVAIL" destination="CI_PHT.PHT_AVAIL" />
<link origin = "CONS_INGEST.out" destination = "CI_PHT.CONS_INGEST" />
<atom name="CONSUMERS" id="CONSUMERS" status="private" type="aux" >
<port type="input" name="CONS_BIOM" />
<port type="input" name="CELL_SIZE" />
<dynamic event="update" type="code" >
<code> <![CDATA[ ( CONS_BIOM/CELL_SIZE ) ]]>
</code>
</dynamic>
</atom>
<link origin = "CONS_BIOM.out" destination = "CONSUMERS.CONS_BIOM" />
<link origin="this.CELL_SIZE" destination="CONSUMERS.CELL_SIZE" />
<atom name="CONS_MASSDENS" id="CONS_MASSDENS" status="private" type="aux" >
<port type="input" name="CONSUMERS" />
<dynamic event="update" type="code" >
<doc> <![CDATA[ MASS DENSITY OF CONSUMERS. UNITS = G/M^2 ]]>
</doc>
<code> <![CDATA[ ( CONSUMERS*1000 ) ]]>
</code>
</dynamic>
</atom>
<link origin = "CONSUMERS.out" destination = "CONS_MASSDENS.CONSUMERS" />
<atom name="CONS_TEMP_CF" id="CONS_TEMP_CF" status="private" type="aux" >
<port type="input" name="AIR_TEMP_DEGC" />
<port type="input" name="P1_CONS_T_OPT" />
<dynamic event="update" type="code" >
<doc> <![CDATA[ TEMPERATURE FEEDBACK, FROM LASSITER (1975). FOR EQUATION, FIRST (UNAMED, 0-1) CONSTANT IS CURVATURE PARAMETER; THE SECOND (UNAMED) CONSTANT IS THE MAXIMUM TEMPERATURE.DIMLESS, RANGES 0-1. ]]>
</doc>
<code> <![CDATA[ ( SL::Exp(( 0.20*( AIR_TEMP_DEGC-P1_CONS_T_OPT ) ))*( ( ( 40-AIR_TEMP_DEGC )/( 40-P1_CONS_T_OPT ) )^( 0.20*( 40-P1_CONS_T_OPT ) ) ) ) ]]>
</code>
</dynamic>
</atom>
<link origin="this.AIR_TEMP_DEGC" destination="CONS_TEMP_CF.AIR_TEMP_DEGC" />
<link origin = "P1_CONS_T_OPT.out" destination = "CONS_TEMP_CF.P1_CONS_T_OPT" />
<atom name="OM_AVAIL" id="OM_AVAIL" status="private" type="aux" >
<port type="input" name="DOM_C_AVAIL" />
<port type="input" name="DET_AVAIL" />
<port type="input" name="PHT_AVAIL" />
<port type="input" name="PHBIO_AVAIL" />
<port type="input" name="NPHBIO_AVAIL" />
<dynamic event="update" type="code" >
<doc> <![CDATA[ TOTAL BIOMASS OF ALL ORGANIC CARBON FOOD SOURCES. UNITS = KG C. ]]>
</doc>
<code> <![CDATA[ ( ( ( ( DOM_C_AVAIL+DET_AVAIL )+PHT_AVAIL )+PHBIO_AVAIL )+NPHBIO_AVAIL ) ]]>
</code>
</dynamic>
</atom>
<link origin="this.DOM_C_AVAIL" destination="OM_AVAIL.DOM_C_AVAIL" />
<link origin="this.DET_AVAIL" destination="OM_AVAIL.DET_AVAIL" />
<link origin="this.PHT_AVAIL" destination="OM_AVAIL.PHT_AVAIL" />
<link origin="this.PHBIO_AVAIL" destination="OM_AVAIL.PHBIO_AVAIL" />
<link origin="this.NPHBIO_AVAIL" destination="OM_AVAIL.NPHBIO_AVAIL" />
<atom name="P1_CONS_ASSIM" id="P1_CONS_ASSIM" status="private" type="aux" >
<dynamic event="update" type="code" >
<doc> <![CDATA[ CARBON ASSIMILATION EFFICIENCY, DIMENSIONLESS PROPORTION. ]]>
</doc>
<code> <![CDATA[ 0.15 ]]>
</code>
</dynamic>
</atom>
<atom name="P1_CONS_IC" id="P1_CONS_IC" status="private" type="aux" >
<dynamic event="update" type="code" >
<doc> <![CDATA[ 1 IS WINNER IN THE CALIBRATION TEST 6/11/97 ]]>
</doc>
<code> <![CDATA[ 0.0001 ]]>
</code>
</dynamic>
</atom>
<atom name="P1_CONS_MAX" id="P1_CONS_MAX" status="private" type="aux" >
<dynamic event="update" type="code" >
<doc> <![CDATA[ 0.11 WINNER CALIBRATION 6/11/97 ]]>
</doc>
<code> <![CDATA[ 0.01 ]]>
</code>
</dynamic>
</atom>
<atom name="P1_CONS_RC_INGEST" id="P1_CONS_RC_INGEST" status="private" type="aux" >
<dynamic event="update" type="code" >
<doc> <![CDATA[ MAXIMUM SPECIFIC RATE OF INGESTION. UNITS = 1/D. ]]>
</doc>
<code> <![CDATA[ 0.2 ]]>
</code>
</dynamic>
</atom>
<atom name="P1_CONS_RC_MORT" id="P1_CONS_RC_MORT" status="private" type="aux" >
<dynamic event="update" type="code" >
<doc> <![CDATA[ SPECIFIC MORTALITY RATE. UNITS = GC/GC PER DAY = 1/D. ]]>
</doc>
<code> <![CDATA[ 0.01 ]]>
</code>
</dynamic>
</atom>
<atom name="P1_CONS_RC_RESP" id="P1_CONS_RC_RESP" status="private" type="aux" >
<dynamic event="update" type="code" >
<doc> <![CDATA[ MAXIMUM SPECIFIC RATE OF RESPIRATION. UNITS = GC/GC PER DAY = 1/D.STEVENSON 1986 ARGUES THAT RESPIRATION RATES OF SOIL ORGANISMS EQUAL CARBON UPTAKE RATES BY PHOTOSYNTHESIS. RESPIRATION OF SOIL ORGANISMS IS PROP. MANY TIMES THAT OF THE OTHER ORGANISMS. KEEP THIS IN MIND WHEN ESTIMATING THIS VALUE. (RB) ]]>
</doc>
<code> <![CDATA[ 0.02 ]]>
</code>
</dynamic>
</atom>
<atom name="P1_CONS_T_OPT" id="P1_CONS_T_OPT" status="private" type="aux" >
<dynamic event="update" type="code" >
<doc> <![CDATA[ TEMPERATURE WHERE RESPIRATION AND ACTIVITY ARE MAXIMUM (DEGREES C). 120 WINNER CALIBRATION 6/11/97 (UNREALISTIC) ]]>
</doc>
<code> <![CDATA[ 25 ]]>
</code>
</dynamic>
</atom>
<port type="input" name="CELL_SIZE" >
<default> 0.0
</default>
</port>
<port type="input" name="DET_AVAIL" >
<default> 0.0
</default>
</port>
<port type="input" name="DOM_C_AVAIL" >
<default> 0.0
</default>
</port>
<port type="input" name="NPHBIO_AVAIL" >
<default> 0.0
</default>
</port>
<port type="input" name="PHBIO_AVAIL" >
<default> 0.0
</default>
</port>
<port type="input" name="PHT_AVAIL" >
<default> 0.0
</default>
</port>
<port type="input" name="AIR_TEMP_DEGC" >
<default> 0.0
</default>
</port>
</compound>
Maintained by: Tom Maxwell
Last modified: Thu Feb 4 15:49:40 EST 1999