forked from omega13a/stargen
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathenviro.h
More file actions
176 lines (171 loc) · 9.1 KB
/
Copy pathenviro.h
File metadata and controls
176 lines (171 loc) · 9.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
#ifndef ENVIRO_H
#define ENVIRO_H
// include "const.h"
#include "structs.h"
#include "utils.h"
extern std::string breathability_phrase[4];
// thread_local: each worker thread gets its own radius-coefficient cache.
// A shared cache was written without synchronization during parallel
// generation, producing torn state and nondeterministic gas-giant
// radius/density values run-to-run.
extern thread_local std::map<std::map<long double, long double>, std::vector<long double> >
polynomial_cache;
auto mass_to_luminosity(long double) -> long double;
auto luminosity_to_mass(long double) -> long double;
auto mass_to_eff_temp(long double mass, long double luminosity) -> long double;
auto getStarType(std::string) -> std::string;
auto getSubType(std::string) -> int;
auto spec_type_to_eff_temp(const std::string&) -> long double;
auto eff_temp_to_spec_type(long double, long double) -> std::string;
auto orbital_zone(long double, long double) -> int;
auto volume_radius(long double, long double) -> long double;
auto empirical_density(long double, long double, long double, bool)
-> long double;
auto volume_density(long double, long double) -> long double;
auto period(long double, long double, long double) -> long double;
auto day_length(planet *, long double, bool) -> long double;
auto tidal_sync_time_years(long double a_au, long double m_star_solar, long double r_p_km,
long double m_p_solar, long double spin_rad_s, long double moi_factor,
long double q, long double k2) -> long double;
auto tidal_lock_timescale_years(planet *, long double, bool, long double, long double)
-> long double;
auto gas_disk_damped_eccentricity(long double e, long double a_au, long double m_p_solar,
long double m_star_solar) -> long double;
void apply_gas_disk_damping(sun &the_sun, planet *innermost);
auto inclination(long double, long double) -> long double;
auto escape_vel(long double, long double) -> long double;
auto rms_vel(long double, long double) -> long double;
auto molecule_limit(long double, long double, long double) -> long double;
auto min_molec_weight(planet *) -> long double;
auto acceleration(long double, long double) -> long double;
auto acceleration(planet *the_planet) -> long double;
auto acceleration_oblateness_refinement(planet *the_planet) -> long double;
auto gravity(long double) -> long double;
auto vol_inventory(long double, long double, long double, long double, int, bool, bool) -> long double;
auto pressure(long double, long double, long double) -> long double;
auto boiling_point(long double) -> long double;
auto hydro_fraction(long double, long double) -> long double;
auto cloud_fraction(long double, long double, long double, long double)
-> long double;
auto ice_fraction(long double, long double) -> long double;
auto eff_temp(long double, long double, long double) -> long double;
auto est_temp(long double, long double, long double) -> long double;
auto equilibrium_temp(long double luminosity, long double orb_radius, long double albedo)
-> long double;
auto grnhouse(long double, long double) -> bool;
auto green_rise(long double, long double, long double) -> long double;
auto planet_albedo(planet *) -> long double;
long double opacity(long double molecular_weight, long double surf_pressure, long double effective_temp);
auto gas_life(long double, planet *) -> long double;
void calculate_surface_temp(planet *, bool, long double, long double,
long double, long double, long double, bool);
void iterate_surface_temp(planet *, bool);
auto inspired_partial_pressure(long double, long double) -> long double;
auto breathability(planet *) -> unsigned int;
void set_temp_range(planet *);
auto getSpinResonanceFactor(long double) -> long double;
auto radius_improved(long double, long double, long double, long double, bool,
int, planet *) -> long double;
auto fudged_radius(long double, long double, long double, long double, bool,
int, planet *) -> long double;
auto gas_radius(long double, long double, long double, long double, planet *)
-> long double;
auto round_threshold(long double) -> long double;
auto ultimateStrength(long double) -> long double;
auto habitable_zone_distance(sun &, int, long double) -> long double;
auto calcLambda(long double, long double) -> long double;
void gas_giant_temperature_albedo(planet *, long double, bool);
auto getGasGiantAlbedo(const std::string&, const std::string&, long double) -> long double;
void calculate_gases(sun &, planet *, std::string);
void assign_composition(planet *, sun &, bool);
auto snow_line_au(long double luminosity) -> long double;
auto disk_condensation_temp(long double luminosity, long double a) -> long double;
auto is_gas_planet(planet *) -> bool;
auto is_earth_like(planet *) -> bool;
auto is_habitable_jovian_conservative(planet *) -> bool;
auto is_habitable_jovian(planet *) -> bool;
auto is_terrestrial(planet *) -> bool;
auto calcOblateness(planet *) -> long double;
auto calcPhlPressure(planet *) -> long double;
auto is_habitable_conservative(planet *) -> bool;
auto is_habitable_optimistic(planet *) -> bool;
auto calcHzd(planet *) -> long double;
auto calcHzc(planet *) -> long double;
auto calcHza(planet *) -> long double;
// The four Earth-Similarity-Index sub-indices (radius, density, escape velocity,
// surface temperature). calcEsi() multiplies them; display.cpp shows them
// individually, so both share the single calcEsiComponents() source.
struct EsiComponents {
long double r, d, v, t;
};
auto calcEsiComponents(planet *) -> EsiComponents;
auto calcEsi(planet *) -> long double;
auto calcSph(planet *) -> long double;
auto calcEsiHelper(long double value, long double ref_value, long double weight,long double n = 4) -> long double;
auto is_potentialy_habitable_conservative(planet *) -> bool;
auto is_potentialy_habitable_optimistic(planet *) -> bool;
auto calcRelHumidity(planet *) -> long double;
auto getPlantLifeAlbedo(const std::string&, long double) -> long double;
auto calcFlux(long double, long double) -> long double;
auto calculate_moment_of_inertia_coeffient(planet *) -> long double;
auto calculate_moment_of_inertia(planet *) -> long double;
auto calcOblateness_improved(long double, long double, long double, long double)
-> long double;
auto calcLuminosity(planet *) -> long double;
auto calcRadius(planet *) -> long double;
auto planet_radius_helper(long double planet_mass, long double mass1,
long double radius1, long double mass2,
long double radius2, long double mass3,
long double radius3, bool use_cache = true)
-> long double;
auto planet_radius_helper2(long double, long double, long double, long double,
long double) -> long double;
auto planet_radius_helper3(long double, long double, long double, long double,
long double) -> long double;
auto convert_su_to_eu(long double) -> long double;
auto convert_au_to_km(long double) -> long double;
auto is_potentialy_habitable_extended(planet *) -> bool;
auto is_habitable_extended(planet *) -> bool;
auto is_potentialy_habitable_earth_like(planet *) -> bool;
auto is_habitable_earth_like(planet *) -> bool;
auto is_potentialy_habitable(planet *) -> bool;
auto is_habitable(planet *) -> bool;
void set_habitability_flags(planet *);
auto lehmer_surface_temp(long double instellation, long double pco2_bar) -> long double;
void set_climate_model_temp(planet *);
void apply_lehmer_surface_temp(planet *);
auto convert_km_to_eu(long double) -> long double;
void makeHabitable(StarGenerator*, sun &, planet *, const std::string&, bool, bool);
template <typename Key, typename T>
void radiusDebug(const std::string &text, planet *the_planet,
long double calculated_radii, std::map<Key, T> &radii);
template <typename Key, typename T>
void radiusDebug(const std::string &text, planet *the_planet,
long double calculated_radii, std::map<Key, T> &radii) {
std::cerr << "Age: " << toString(the_planet->getTheSun().getAge()) << std::endl;
if (the_planet->getMoonA() == 0.0) {
std::cerr << "Planet's distance: " << toString(the_planet->getA()) << " AU"
<< std::endl;
} else {
std::cerr << "Moon's parent's distance: " << toString(the_planet->getA())
<< " AU\n";
std::cerr << "Moon's distance: "
<< toString(convert_au_to_km(the_planet->getMoonA())) << " km\n";
}
std::cerr << "Core composition: " << toString(the_planet->getImf() * 100.0, 4)
<< "% ice, " << toString(the_planet->getRmf() * 100.0, 4) << "% rock ("
<< toString(the_planet->getCmf() * 100.0, 4) << "% carbon)\n";
std::cerr << "Mass: " << toString(convert_su_to_eu(the_planet->getMass())) << " EU"
<< std::endl;
if (the_planet->getGasGiant()) {
std::cerr << "Dust mass: "
<< toString(convert_su_to_eu(the_planet->getDustMass())) << " EU"
<< std::endl;
std::cerr << "Temperature: " << toString(the_planet->getEstimatedTemp()) << " K"
<< std::endl;
}
std::cerr << "Calculated radius: " << toString(calculated_radii) << std::endl;
std::cerr << text << std::endl;
writeMap(radii);
}
#endif