


1. Compiling

The program uses only standard C++ libraries, so the provided Makefile under src/ should do via

make worldbuilder

In addition

make clean

can be used to delete all object files.


2. Running

The program is ran from the commandline with a configuration file name as argument as e.g.

./world myconfig.cfg

The output will be either to console or to a filename specified in the configuration tile. The configuration file needs to contain a program to be executed in terms of the setup of an astrophysical situation and instructions what simulation in time to run, as well as what output to create. To properly access the photon reaction cross section of gases as well as the gas phase diagrams the data/ folder must be a subfolder of the directory where the executable resides. Material definitions and maps may be together with the executable or must have their correct path defined.

3. Config file format

The config file needs to contain both single word and two word instructions. Single keywords delimit modes and blocks, two keywords form a key-value pair that sets a parameter.

Valid mode-setting keywords are

* input:  begins the declarations of the simulated situation
* end: signals the end of the config file

Valid block-delimiting keywords are

* config: specifies general configuration properties
* star: begins the declaration of stellar properties
* planet: begins the declaration of planetary properties
* moon: begins the declaration of a moon orbiting the planet
* orbiting_body: begins the declaration of a body that only appears inside the orbital solver, not in the rest of the simulation
* binary: begins the declaration of the second star around which the planet is orbiting
* companion: begins the declaration of a companion star around which the planet's parent star is orbiting
* atmosphere_basic: begins the declaration of coarse thermal and transport properties of an atmosphere
* hydrosphere_basic: begins the declaration of the gross properties of oceans
* atmosphere: begins the declaration of atmosphere composition
* geology: begins the declaration of the internal composition of the planet
* weather: begins the declaration of weather properties
* evolution: begins a block that specifies how the system is evolved
* orbit: begins a block that specifies only orbital, no thermal evolution
* plot: specifies properties of a 2d data plot
* plot_surface: specifies properties of a planetary surface plot
* plot_orbit: specifies properties of a parametric orbital plot
* record: specifies properties of a data time series from one surface element
* record_global: specifies properties of a data time series averaged over all surface elements
* checks: specifies consistency checks
* scatter_plot: specifies a scatter plot
* orbit_summary: specifies a summary of orbital parameters

3.1 Config settings

The config block contains general parameters that determine how the simulation is run.

* orbital_sim_timestep [s]: The timestep for the numerical orbital simulation. Smaller times will give higher accuracy, but also imply longer program execution time.
* materials [filename]: This specifies from what file definitions of planet surface materials are to be read
* gr_corrections [true/false]: Whether the gravitational force is computed including general relativity corrections (default true)
* apoapsis_init [true/false]: Whether the orbital solver inits all objects at apoapsis rather than periapsis (default false)
* eclipse_finder [true/false]: Whether the eclipse finder is run and eclipse effects computed in the evolution (default false)
* random_seed [integer number]: The seed for the random number generator, if none is specified system time is used for initialization (defaults to none)
* collision_finder [true/false]: Whether the collision finder is switched on during orbital computations

3.2 Star settings

The star block specifies the central star of a system. For main sequence stars, only mass and surface temperature should be entered (note that there is a correlation between the two for real stars and not all values are plausible). For stars off the main sequence, mass, surface temperature,luminosity and radius need to be entered, taking care to provide physically meaningful input.

* mass [solar masses]: The stellar mass in units of solar masses
* T_surf[K]: Surface temperature
* radius [solar radii]: The stellar radius
* luminosity [stellar luminosity]: The total radiative energy output of the star
* name: The optional name of the star

3.3 Planet and moon settings

The planet block defines the planet that is to be simulated in its coarse properties. 

* mass [earth masses]: The mass of the planet in units of Earth's mass.
* radius [earth radii]: The radius of the planet in units of Earth's radius.
* name: The optional name of the planet.
* semimajor_au [a.u.]: The semimajor axis of the orbit in astronomical units
* lagrange_point [L4 or L5]: If no semimajor axis is specified, a Lagrange orbit can be defined by either selecting L4 or L5
* eccentricity [0-1]: The dimensionless eccentricity of the orbit 
* semimajor_longyear_au [a.u.]: The semimajor axis of the orbit of the star around a companion in astronomical units
* eccentricity_longyear [0-1]: The dimensionless eccentricity of the orbit of the star around a companion
* inclination_longyear [deg]: The angle by which the orbital plane of the star around the companion is tilted with respect to the orbit of the planet around the star
* lon_asc_node_longyear [deg]: The angle around which the companion inclination tilt is rotated around the orbit of the planet/star
* lan_longyear [deg]: as above
* semimajor_binary_au [a.u.]: The semimajor axis of the star/binary system
* eccentricity_binary [0-1]: The dimensionless eccentricity of the star/binary system
* inclination_binary [deg]: The angle by which the orbital plane of star/binary is tilted against the orbital plane of the planet around the system CoG
* lon_asc_node_binary [deg]: The angle by which the tilt of the binary system is rotated around the planet/CoG orbit
* lan_binary [deg]: as above
* axis_tilt [deg]: The angle between the rotation axis of the planet and its orbital plane around the star
* sid_rot_period_d [days]: The sidereal rotation period around the axis of the planet
* mean_albedo [0-1]: The albedo of the planet, averaged across its surface
* elements_lat: The number of surface elements that is to be initialized for a detailed simulation of the surface conditions in latitude direction
* elements_lon: The number of surface elements that is to be initialized for a detailed simulation of the surface conditions in longitude direction
* dec_offset [deg]: The stellar declination (the angle between the line joining the centers of the star and the planet and its projection on the equatorial plane) offset (aka the phase in the sinusoidal variation) with which the simulation is initialized at periapsis
* internal_heat[W/m**2]: The heat flux coming from the planet's hot core
* materials_file [filename]: An optional file containing a surface material map
* lagrange_delta_phi [deg]: The angle offset away from the specified Lagrange point for placement of the body
* lagrange_delta_R [m]: The radial offset away from the specified Lagrange point for placement of the body
* lagrange_delta_R [km]: The radial offset in kilometers away from the specified Lagrange point for placement of the body
* lagrange_delta_R [Mkm]: The radial offset in million kilometers away from the specified Lagrange point for placement of the body
* lagrange_delta_R_au [Mkm]: The radial offset in astronomical units away from the specified Lagrange point for placement of the body
* lagrange_delta_z [m]: The out of plane offset away from the specified Lagrange point for placement of the body
* lagrange_delta_z [km]: The out of plane offset in kilometers away from the specified Lagrange point for placement of the body
* lagrange_delta_z [Mkm]: The out of plane offset in million kilometers away from the specified Lagrange point for placement of the body
* lagrange_delta_z_au [Mkm]: The out of plane offset in astronomical units away from the specified Lagrange point for placement of the body

The definitions for a moon are, apart from the different block-keyword, identical. Its orbital parameters always refer to its orbit around the planet. Note that the planet needs to be defined to the same level of details as the moon, i.e. if there are no surface elements initialized for the planet, they can't be for the moon. Particular settings for the moon are

* inclination_to_planet [deg]: The angle by which the orbital plane of the moon is tilted with respect to the orbital plane of the planet around the star
* inclination_planet [deg]: as above
* inc_to_planet [deg]: as above
* lon_asc_node_planet [deg]: The angle by which the orbital  tilt of the moon is rotated around the orbit of planet/star
* lan_planet [deg]: as above


3.4 Binary settings

In the context of the simulation, the term 'binary' refers to the situation where the planets orbits around the barycenter defined by two inner stars orbiting each other. The settings for a binary are identical to those of the star, in addition

* apsis_angle [deg]: The angle by which periapsis of the planet orbit and periapsis of the star orbit are rotated against each other
* retrograde [true/false]: Whether the stellar orbit is retrograde with respect to the planetary orbit (default false)

3.5 Companion settings

In the context of the simulation, a companion is a star around which the parent star orbits while the planet orbits the parent star. The settings for a companion are identical to those of a binary.

3.6 Basic atmosphere settings

This block specifies properties of the atmosphere without specifying the atmosphere composition

* infrared_blocking [0-1]: The fraction of radiation in the IR band that is held back by the atmosphere, i.e. the strength of the Greenhouse effect
* transport_coeff [factor]: The relative strength of thermal energy transport in the atmosphere and the seas of a planet compared with Earth
* atmosphere_albedo [0-1]: The albedo of the bare atmosphere due to e.g. UV absorption and re-emission into space


A basic atmosphere can be defined for both a planet and a moon, to be properly assigned it needs to follow the respective block (i.e. any basic atmosphere defined after a moon is defined will be applied to the moon).

3.7 Basic hydrosphere settings

This block describes the gross properties of the hydrosphere (oceans)

* transport_coeff [factor]: The strength of the heat transport in oceans relative to Earth standard
* ice_buildup_factor [factor]: The speed of ice buildup relative to Earth standard

A basic hydrosphere can be defined for both a planet and a moon, to be properly assigned it needs to follow the respective block (i.e. any basic hydrosphere defined after a moon is defined will be applied to the moon).

3.8 Atmosphere settings

In this block, a detailed atmosphere composition can be specified which leads to additional properties being computed.

* h2o: The fractional amount of water in the atmosphere
* ch4: The fractional amount of methane in the atmosphere
* o3: The fractional amount of ozone in the atmosphere
* n2: The fractional amount of nitrogen in the atmosphere
* o2: The fractional amount of oxygen in the atmosphere
* h2: The fractional amount of hydrogen in the atmosphere
* ar: The fractional amount of argon in the atmosphere
* ne: The Fractional amount of neon in the atmosphere
* co2: The fractional amount of carbon dioxide in the atmosphere
* so2: The fractional amount of sulfur dioxide in the atmosphere
* cl2: The fractional amount of chlorine in the atmosphere
* ch4: The fractional amount of methane in the atmosphere
* h2s: The fractional amount of hydrogen sulfide in the atmosphere
* surface_pressure [atmospheres]: The surface pressure relative to Earth standard

An atmosphere will always be assigned to the world of interest - usually the planet, except when a moon is defined the world of interest is the moon.

3.9 Geology settings

The geology a world in terms of its internal composition is specified in the geology section. This produces output like the predicted internal heat flux, crust thickness and the expected surface topology.


* system_age_gy: The age of the simulated world in billion years, relevant for primordial heat and radioactive isotope decay
* isotope_abundancy: A factor determining the relative amount of radioactive isotopes with Earth defining unity
* tidal_dissipation: A factor determining the relative amount of internal friction with the simulation default being unity 
* core_radius_km: The radius of the world's core in km (used only when three layers are defined)
* core_radius: The radius of the world's core in m (used only when three layers are defined)
* core_density: The density in g/cm^3 of the world's core, used to override the automatic computation
* inner_mantle_density: The density in g/cm^3 of the world's inner mantle, used to override the automatic computation
* outer_mantle_density: The density in g/cm^3 of the world's outer mantle, used to override the automatic computation
* surface_temperature: The surface temperature at the location of the depth profile, overrides the automatic computation
* depth_profile_res_km: The resolution of the depth profile display in km (defaults to 10 km)
* core_material: The material of the worlds core, see below for valid choices.
* inner_mantle_material: The material of the worlds inner mantle, see below for valid choices
* outer_mantle_material: The material of the worlds outer mantle, see below for valid choices
* mantle_material: Synonyme for inner_mantle_material in the case of two specified layers
* material: Synonyme for core_mantle_material in the case of a single layer world
* component: Material as part of the mixture for a non-differentiated world
* depth_profile [true/false]: Whether a depth profile table is printed

Valid materials are:

* nickel_iron
* sulfur_iron
* carborundum
* silicate_rock
* carbon
* water_ice

Materials must be declared in order of density, with the most dense material inside and the least dense at the surface.

3.10 Weather

In this block, parameters of the weather system can be specified. By default the weather system assumes water as cloud-forming and precipitating medium and generates Earth-like weather patterns. Weather is switched on in the simulation whenever at least one weather keyword is used.

* mid_cloudlevel_min [0-1]: The minimum level of randomly generated mid level clouds (defaults to 0)
* mid_cloudlevel_max [0-1]: The maximum level of randomly generated mid level clouds (defaults to 0)
* high_cloudlevel_min [0-1]: The minimum level of randomly generated high level clouds (defaults to 0)
* high_cloudlevel_max [0-1]: The maximum level of randomly generated high level clouds (defaults to 0)
* precipitation_factor [factor]: The factor by which precipitation is different from Earth levels, e.g. reduced on arid worlds (defaults to 1)
* snow_albedo [0-1]: The albedo of snowcover (defaults to 0.8) 
* ridge_migration_factor [0.-1.0]: The degree to which the subtropical ridge moves in latitude with the maximum irradiation point
* ridge_suppression_factor [0.0-1.0]: The factor by which convective clouds are suppressed inside the ridge area
* circulation_model [number]: The global circulation model (overrides automatic detection). Valid options are
	- 1: direct convection with single Hadley cell per hemisphere
	- 2: Earth-like circulation with a Hadley and Polar cell per hemisphere and jetstream transport between 
	- 3: Three Hadley-like cells per hemisphere with two jetstreams separating them
	- 4: Four Hadley-like cells per hemispherewith three jetstreams separating them 
	- 10: asymmetric convection with one pole heated and two jetstreams
* precipitation_threshold_convection [0-1]: The convective  cloud cover threshold beyond which the simulation will start to produce precipitation (defaults to 0.4)
* precipitation_threshold [0-1]: An alias for the above
* precipitation_factor_convection [factor]: The factor by which convective precipitation is different from Earth levels
* cloud_factor_convection [factor]: The factor by which convective cloud development is different from Earth levels
* grad_motion_factor [factor]: The degree to which storm systems follow the gradient of available convective energy
* storms [true/false]: Whether part of the convective energy should be used to create storm systems rather than convective clouds


Weather will always be assigned to the world of interest - usually the planet, except when a moon is defined the world of interest is the moon.

3.11 Feedback loops

The feedback loop settings control the way temperature acts on other simulated properties, mostly clouds and precipitation.

* fire_cloud_factor [0-1]: The amount of cloudcover a fire can generate in s surface element
* fire_min_T: The temperature in K at which forest fires start
* fire_max_T: The temperature in K at which forest fires burn full strength and produce the value of <fire_cloud_factor>
* smoke_stratosphere_transport [0-1]: The fraction of smoke that is transported non-locally to other surface elements
* cloud_T_feedback [0-1]: The fraction of low cloudcover that is subject to the Clausius-Clapeyron (CC) humidity limits (defaults to 0)
* mid_cloud_T_feedback [0-1]: The fraction of mid cloudcover that is subject to the Clausius-Clapeyron (CC) humidity limits (defaults to 0)
* high_cloud_T_feedback [0-1]: The fraction of high cloudcover that is subject to the Clausius-Clapeyron (CC) humidity limits (defaults to 0)
* precipitation_T_feedback [0-1]: The fraction of precipitation that is subject to the Clausius-Clapeyron (CC) humidity limits (defaults to 1)

3.12 Orbiting body settings

An orbiting body is an addition to the orbital solver only, i.e. its gravitational effects are computed, but not any eclipses or thermal effects.

* name [string]: The name of the body
* attach_to [string]: The name of the body relative to which the orbital parameters are defined
* mass: The mass of the body in units of Earth's mass
* radius: The radius in units of Earth's radius
* inclination: The orbital inclination
* semimajor_au: The semimajor axis in AU
* semimajor_min_au: If the semimajor axis is randomized, the lower limit of the random region in AU
* semimajor_max_au: If the semimajor axis is randomized, the upper limit of the random region in AU
* semimajor_km: The semimajor axis in km
* semimajor_min_km: If the semimajor axis is randomized, the lower limit of the random region in km
* semimajor_max_km: If the semimajor axis is randomized, the upper limit of the random region in km
* semimajor_Mkm: The semimajor axis in million km
* semimajor_min_Mkm: If the semimajor axis is randomized, the lower limit of the random region in million km
* semimajor_max_Mkm: If the semimajor axis is randomized, the upper limit of the random region in million km
* eccentricity: The orbital eccentricity
* eccentricity_min: If the eccentricity is randomized, the lower limit of the random region
* eccentricity_max: If the eccentricity is randomized, the upper limit of the random region
* lon_asco_node [deg]: The angle by which the tilt of the orbit is rotated around the planet orbit
* lan [deg]: A synonyme for the above
* apsis_angle [deg]: The angle by which the periapsis is rotated
* apsis_angle_min: If the apsis angle is randomized, the lower limit of the random region in deg
* apsis_angle_max: If the apsis angle is randomized, the upper limit of the random region in deg
* distance_au: For a hyperbolic orbit, the initial distance of the body in AU
* distance_km: For a hyperbolic orbit, the initial distance of the body in km
* distance_Mkm: For a hyperbolic orbit, the initial distance of the body in million km


3.13 Evolution settings

The evolution settings specify how a full evolution (orbital and thermal combined) is run. Only one evolution in one length unit may be supplied, the last valid one is taken.

* evolve: The number of seconds to evolve
* evolve_d: The number of days to evolve
* evolve_a: The number of years to evolve
* evolve_op: The number of orbital periods (of the planet) to evolve the system
* timestep: The timestep for the thermal evolution. If this is smaller than the selected orbital evolution timestep, it is also used for orbital  motion

3.14 Orbit settings

The orbit settings run the simulation of orbital motion forward in time without doing thermal calculation for the planet surface. This is much faster. When both orbit and evolve keywords are used, the orbital motion is computed before the full evolution is started. The options are otherwise mostly identical. The special feature of the orbit block is, that it allows to save and resume states.

* save_to: Takes a filename as argument and writes the state of the orbital simulation to a file after the evolution has been done
* resume_from: Takes a filename as argument and reads the state of the orbital simulation from that file after initialization

3.15 Plot settings

A plot pulls a specific data set from the simulation and makes a 2d plot. Not all options can be combined for the axes.

* var_x: The variable on the x-axis of the plot. Options are 
	- lambda (the wavelength), 
	- lat (latitude) 
	- norm_daytime (the progression of a day from 0 to 1)
	- days
	- hours
	- altitude_m (the altitude in meters)
	- depth_km (depth in kilometers)
	- depth_m (depth in meters)
	- depth_R (depth in fraction of the radius)
* var_y: The y-axis variable. Options are 
	- solar_spectrum (the energy at each wavelength of starlight, requires lambda for var_x)
	- solar_spectrum_surface (the energy at each wavelength of starlight after passing through the atmosphere, requires lambda for var_x)
	- year_avg_irradiation (the energy received at a given latitude averaged over a year, requires lat for var_x)
	- atmosphere_transmission (the spectral transmission function of the atmosphere, requires lambda for var_x)
	- atmosphere_IR_transmission (the spectral transmission function of the atmosphere in the infrared, requires lambda for var_x)
	- atmosphere_UV_transmission (the spectral transmission function of the atmosphere in the ultraviolat, requires lambda for var_x)
	- IR_emission_surface (the infrared emission spectrum on the surface, requires lambda for var_x)
	- IR_emission_space (the IR emission spectrum into space, i.e. modulated with the transmission function, requires lambda for var_x)
	- sun_angle (the elevation of a star in the sky, requires norm daytime as var_x)
	- atmosphere_UV_heating (the energy deposited into the atmosphere, requires altitude_m as var_x)
	- atmosphere_UV_T (temperature of the atmosphere, requires altitude_m as var_x)
	- ozone_production (ozone production in the atmosphere, requires altitude_m as var_x)
	- internal_temperature (temperature inside a world, requires depth as var_x)
	- internal_pressure (pressure inside a world, requires depth as var_x)
* file: A filename into which the plot is written
* xmin: The lowest x-axis value 
* xmax: The highest x-axis value
* npoints: The number of points in the plot
* body: The reference star (for sun_angle) - valid bodies are 'star', 'companion' or 'binary'
* lat: The latitude on the surface (for sun_angle)
* lon: The longitude on a surface (for sun_angle)
* radiation_from: The object from which radiation is considered for spectra, valid bodies are 'star', 'companion', 'binary' and 'all'



3.16 Surface plot settings

The surface plot needs both a planetary surface as a set of elements declared and the run of a full (including thermal) evolution. It writes the last state of the simulation to file.

* file [filename]: The name of a file into which the plot is written.
* var_z: The variable to be plotted, valid values are
	- albedo: The albedo of the surface element
	- temperature: The current temperature in K of the surface element
	- total_irradiation: The integrated amount of energy radiated into the surface element since the beginning of the full evolution
	- IR_emission_flux: The local flux of infrared emission
	- reflected_flux: The local flux of radiation reflected into space
	- absorbed_flux: The local radiation flux absorbed by the surface
	- cloud_cover: The local total cloudcover fraction
	- low_cloud_cover: The local low cloudcover fraction
	- mid_cloud_cover: The local mid cloudcover fraction
	- high_cloud_cover: The local high cloudcover fraction
	- snow_thickness: The local snowcover thickness in cm
	- ice_thickness: The local ice cover thickness in cm	
	- precipitation: The current precipitation (mm/s)
	- ground_albedo: The albedo of the ground only (i.e. without clouds)

3.17 Orbital plot settings

The orbital plot by default writes the path of the chosen body to file for the duration of one planetary orbit. Only one timeframe can be specified, the last valid declaration is used.

* npoints: The number of points to be computed for the plot
* timeframe [s]: The time in seconds for which the orbit should be plotted when different from one orbital period
* timeframe_d [days]: The time in days for which the orbit should be plotted
* timeframe_a [years]: The time in years for which the orbit should be plotted
* file [filename]: The name of a file to which the data is written
* body: In more complicated star systems, the body for which the orbit is plotted. Values can be
	- planet: The planet
	- moon: Its  moon
	- star: The body declared in a star block
	- binary: The body declared in a binary block
	- companion: The body declared in a companion block
* relative_to: In more complicated star systems, the body which is alternatively used as origin for the orbial plot

3.18 Record settings

A record is a time series of quantities for a specific surface element.

* file [filename]: The name of a file into which the series is written
* npoints: The number of points to be plotted
* index_lat: The index number of the surface element in latitude direction
* index_lon: The index number of the surface element in longitude direction
* delay: The delay in seconds before the recording stars
* delay_d: The delay in days before the recording stars
* delay_a: The delay in years before the recording starts
* delay_op: The delay in orbital periods before the recording starts

* body: In more complicated star systems, the body on which the time series is obtained. Values can be
	- planet: The planet
	- moon: Its moon
* reference: In more complicated star systems, the body which is observed for e.g. sun elevation angle. Values can be
	- star: The body declared in a star block
	- binary: The body declared in a binary block
	- companion: The body declared in a companion block
* var_z: The variable to be recorded, valid values are
	- temperature: Temperature of the surface element
	- sun_angle: The elevation angle of the reference body
	- IR_emission_flux: The flux of emitted infrared radiation
	- reflected_flux: The flux of reflected radiation
* var_x: The time variable to be used, the default is seconds, valid alternatives are
	- hours
	- days
	- years

3.19 Scatter plot settings

A scatter plot is a kind of plot where trajectory/position information is written without time information, so it predominantly shows the shape of a process, but not its speed or dynamics.

* file [filename]: The name of a file into which the scatter plot is written 
* type [type]: The type of the scatter plot to be created, valid types are
	- storm_tracks: The movement of storm systems across the planet surface
* delay: The delay in seconds before the scatter plot starts
* delay_d: The delay in days before the scatter plot starts
* delay_a: The delay in years before the scatter plot starts
* delay_op: The delay in orbital periods before the scatter plot starts
* interval: The interval in seconds at which the process is probed and possibly written to file
* interval_d: The interval in days at which the process is probed and possibly written to file
* interval_a: The interval in years at which the process is probed and possibly written to file
* filter_low: The lower limit of a quantity to be written
* filter_high: The higher limit of a quantity to be written

3.20 Orbital summary

A summary table of orbital properties can be written out at the end of the simulation

* body [name]: A body for which the summary table is created (several entries are possible)
* reference [name]: A body relative to which orbital parameters are computed
* variable [name]: A variable that is displayed in the table

Valid variables are
	- distance: The distance from body to reference
	- rel_velocity: The relative velocity of body and reference
	- semimajor: The semimajor axis in m
	- semimajor_au: The semimaor axis in AU


3.21 Checks

Consistency checks can be requested to assess physics questions which do not readily come out of the simulation by default but are of some importance nevertheless.  Valid keywords are

* roche_limit [true/false]: Check whether two planets orbit so close that the smaller body would break up
* orbital_stability [true/false:] Check the Hill sphere size against semimajor axis to determine whether a small satellite is close enough to a planet to be bound to it
* tidal_locking [true/false:] Check whether a body orbits to close that it can be expected to have a spin/orbit resonance
* atmosphere_phase [true/false:] Check whether the atmosphere component gases are all in fact gaseous or whether the atmosphere freezes out




4.0 Comments

The software is written to give a general understanding of the physics involved in extrasolar planetary systems. It is not a state-of-the-art scientific simulation tool.

A series of tutorials can be found at 

http://www.science-and-fiction.org/science/worldbuilder.html

Feedback and Patches are welcome!

Thorsten Renk 2021-2024
thorsten@science-and-fiction.org


