# A distribution defines the shape or shapes that will be synthesized for the resulting mineral deposit dname := "cluster" | "vein" | "mound" | "dike" | "sill" | "laccolith" distribtype := !dname | { type : !dname, frequency : 0-5 } distribdef := !distribtype | [ !distribtype 1, !distribtype 2, ... , !distribtype N ] # A distribution reference is used in mineral references, it excludes the frequency stuff. It can be used to reference one or many shape types distribref := !dname | [ !dname 1, !dname 2, ... , !dname N ] # A mineral reference is used to specify a mineral that another mineral ought to be associated with and can be discriminated based upon the shape of the other deposit. The association frequency can also be defined here. # Additionally, this may be a reference to a class of minerals, in which case it will resolve to a set of minerals that have the same class. If a mineral having the same name as a class is encountered, the mineral is chosen instead of the class. mineralref := { mineral : | , distribution : !distribref, frequency : 0-5 } | | # An environment specification defines a top-level (independent, does not depend on any other meta-data, lays the foundation of the ore genesis process) # classification for certain types of minerals. The engine shall begin by iterating through all the classes and synthesizing minerals that correspond to # them. The classification contains these factors: composition, crystal size, heat and pressure. The former two apply exclusively to igneous rocks and the latter two exclusively to metamorphic rocks. The motivation for this definition type comes from the useful nature of this all-inclusive chart of igneous rock types ([http://en.wikipedia.org/wiki/File:Mineralogy_igneous_rocks_EN.svg Mineralogy Igneous Rocks]) and of metamorphic facies ([http://en.wikipedia.org/wiki/Template:Metamorphic_facies_to_click Metamorphic Facies Diagram]). envirospec := { class: , # Type of classification, either sedimentary or igneous. # Metamorphism is implied depending on the temperature/pressure settings in the dispositions that follow # Type should be ommitted for a metamorphic class whose protoliths can be either igneous or sedimentary type: "sedimentary" | "igneous" # Multiple dispositions allow for the irregular shapes in the aforementioned graphs. dispositions: - silica: ("ultra-mafic" | "mafic" | "intermediate" | "inter-felsic" | "felsic") | 0-5 # Origin states either the depth or origin of a type of rock. The first three are obvious, but # the last one is special because meteorites are likely abundant on Mars and introduce a unique set of minerals # Does not apply to sedimentary type rocks. origin: ("volcanic" | "subvolcanic" | "plutonic" | "meteoritic") # Pressure of metamorphism, 0 is 0 kbar and 5 is 20 kbar. Applies also to sedimentary rocks as "overburden", mere lithification is between 0-1 pressure: 0-5 # Temperature of metamorphism, 0 is 0°C and 5 is 1000°C. Applies also to sedimentary rocks, mere lithification is between 0-1 temperature: 0-5 # Grain size of sedimentary rocks, evaporite being smallest because it is dissolved and doesn't "settle" unless the aqueous solution becomes over-saturated. # In the future, this will be related to pressure as opposed to marine depth as there is one proposed uniquely Martian process whereby if the atmosphere was # thicker in the Noachian, and if its atmospheric pressure fluctuated as it does today, then wind itself would erode and transport and by its increase in pressure # would lithify sediment as well. # Does not apply to igneous type rocks sediment: SET("gravel" | "sand" | "sandy-silt" | "silt" | "silty-clay" | "clay" | "evaporite") # Describes the classification's degree of chemical alteration (weathering). In genesis, this will correspond with wet and warm climates and with significantly high or low pH aqueous solutions. weathered: 0-5 } # A mineral definition is a mineral definition was. Multiple ''genesis'' objects are iterated through by the engine to generate the same mineral in more than one way or place. gendef := # Signifies minerals this mineral can occur within or around (must select at least one) - association: !minref | [ !minref 1, !minref 2, ... , !minref N ] # Specify a list of mineral classes to denote a conditions. The list is AND'ed together environment: | [ 1, 2, ... , N ] # Specifies the host mineral where this mineral shall always occur within (never around or outside, always within) host: !minref # Relevant only when the genesis is metamorphic, refers to the precursor lithology of this metamorphic rock, the list of precursor minerals before metamorphism occurred protolith: !minref | [ !minref 1, !minref 2, ... , !minref N ] # Specifies the type of metamorphism that occurred: "contact" for plutonic intrusions, "shock" for impact craters, "dynamic" for flexing, "regional" for orogenic stress (not on Mars) metamorphism: "contact" | "hydrothermal" | "shock" | "dynamic" | "regional" distribution : !distribdef # Approximate logarithmic abundance of the feature abundance: 0-5 # Approximate logarithmic size of the feature size: 0-5 environment: | [ 1, 2, ... , N ] - ... mindef := { mineral: # Denote that this mineral is actually a rock that acts as filler for spatial zones that don't have anything generated in them. # It's essentially "backdrop" for everything else. Of course the same thing can be accomplished by specifying a genesis definition # with exactly one environment spec being the class name. But if its at the base level here then it's a hint to the engine that # this mineral will typically occupy large areas and so it could be a performance enhancement. class: # Melting point and boiling point supercede anything infered from critical point, triple point, or sublimation point melting_point: boiling_point: triple_point: [ , ] critical_point: [ , ] sublimation_point: [ , ] # Globally define the shape of the object, defaults inherited for all genesis entries deposit: { distribution : !distribdef, abundance: 0-5, size: 0-5 } genesis: !gendef } mingrpdef := | !mindef # Specify a logical grouping of minerals that can be referenced from "host", "association", and/or "protolith" # Any explicit entries in a given list of minerals supercedes the same mineral that occurs in a group also referenced in the list # Minerals may only be references to other minerals, i.e. references to classes and other groups are illegal. groupdef := { group: members: [ !mingrpdef 1, !mingrpdef 2, ..., !mingrpdef N ] }