Planetary Orbital Evolution due to Tides
Orbital evolution of two objects experiencing tides
CInterface.h
Go to the documentation of this file.
1 
9 #include "../Core/SharedLibraryExportMacros.h"
10 #include "DiskBinarySystem.h"
11 #include "OrbitSolver.h"
12 #include "../Star/CInterface.h"
13 #include "../Planet/CInterface.h"
14 
15 extern "C" {
18  LIB_PUBLIC extern const int LOCKED_SURFACE_SPIN_EVOL_MODE;
19 
21  LIB_PUBLIC extern const int BINARY_EVOL_MODE;
22 
25  LIB_PUBLIC extern const int SINGLE_EVOL_MODE;
26 
29  LIB_PUBLIC extern const int TABULATION_EVOL_MODE;
30 
32  LIB_PUBLIC extern const double NaN;
33 
35  struct LIB_PUBLIC DiskBinarySystem;
36 
38  struct LIB_PUBLIC OrbitSolver;
39 
41  struct LIB_PUBLIC BrokenPowerlawPhaseLagZone;
42 
45 
47  LIB_PUBLIC void prepare_eccentricity_expansion(
48  const char *filename,
49  double precision,
50  bool pre_load,
51  bool disable_precision_fail
52  );
53 
54  LIB_PUBLIC void set_zone_dissipation(
57 
59  unsigned num_tidal_frequency_breaks,
60 
62  unsigned num_spin_frequency_breaks,
63 
66  double *tidal_frequency_breaks,
67 
70  double *spin_frequency_breaks,
71 
76  double *tidal_frequency_powers,
77 
82  double *spin_frequency_powers,
83 
86  double reference_phase_lag,
87 
91  double inertial_mode_enhancement,
92 
95  double inertial_mode_sharpness
96  );
97 
102  EvolvingStar *star,
103 
106  CPlanet *planet,
107 
110  double initial_semimajor,
111 
113  double initial_eccentricity,
114 
117  double initial_inclination,
118 
121  double disk_lock_frequency,
122 
124  double disk_dissipation_age,
125 
127  double secondary_formation_age
128  );
129 
134  EvolvingStar *primary,
135 
138  EvolvingStar *secondary,
139 
142  double initial_semimajor,
143 
145  double initial_eccentricity,
146 
149  double initial_inclination,
150 
153  double disk_lock_frequency,
154 
156  double disk_dissipation_age,
157 
159  double secondary_formation_age
160  );
161 
166  CPlanet *primary,
167 
170  CPlanet *secondary,
171 
174  double initial_semimajor,
175 
177  double initial_eccentricity,
178 
181  double initial_inclination,
182 
185  double disk_lock_frequency,
186 
188  double disk_dissipation_age
189  );
190 
192  LIB_PUBLIC void destroy_binary(
194  DiskBinarySystem *system
195  );
196 
201  LIB_PUBLIC void configure_planet(
203  CPlanet *planet,
204 
206  double age,
207 
209  double companion_mass,
210 
212  double semimajor,
213 
215  double eccentricity,
216 
219  const double *spin_angmom,
220 
223  const double *inclination,
224 
228  const double *periapsis,
229 
232  bool locked_surface,
233 
237  bool zero_outer_inclination,
238 
242  bool zero_outer_periapsis
243  );
244 
249  LIB_PUBLIC void configure_star(
251  EvolvingStar *star,
252 
254  double age,
255 
257  double companion_mass,
258 
260  double semimajor,
261 
263  double eccentricity,
264 
267  const double *spin_angmom,
268 
271  const double *inclination,
272 
276  const double *periapsis,
277 
280  bool locked_surface,
281 
285  bool zero_outer_inclination,
286 
290  bool zero_outer_periapsis
291  );
292 
294  LIB_PUBLIC void configure_system(
296  DiskBinarySystem *system,
297 
299  double age,
300 
302  double semimajor,
303 
305  double eccentricity,
306 
309  const double *spin_angmom,
310 
314  const double *inclination,
315 
319  const double *periapsis,
320 
323  int evolution_mode
324  );
325 
327  LIB_PUBLIC OrbitSolver *evolve_system(
329  DiskBinarySystem *system,
330 
333  double final_age,
334 
336  double max_time_step,
337 
339  double precision,
340 
342  double *required_ages,
343 
345  unsigned num_required_ages,
346 
348  bool print_progress,
349 
352  //values results in infinite timeout.
353  double max_runtime,
354 
357  unsigned max_time_steps
358  );
359 
361  LIB_PUBLIC void destroy_solver(
363  OrbitSolver *solver
364  );
365 
367  LIB_PUBLIC unsigned num_evolution_steps(
369  OrbitSolver *solver
370  );
371 
377  LIB_PUBLIC void get_star_planet_evolution(
379  const OrbitSolver *solver,
380 
382  const DiskBinarySystem *system,
383 
385  const EvolvingStar *star,
386 
388  const CPlanet *planet,
389 
392  double *age,
393 
396  double *semimajor,
397 
400  double *eccentricity,
401 
404  double *envelope_inclination,
405 
408  double *core_inclination,
409 
412  double *envelope_periapsis,
413 
416  double *core_periapsis,
417 
420  double *envelope_angmom,
421 
424  double *core_angmom,
425 
429  double *planet_inclination,
430 
433  double *planet_periapsis,
434 
437  double *planet_angmom,
438 
440  int *evolution_mode,
441 
445  bool *wind_saturation,
446 
449  double *semimajor_rate,
450 
453  double *eccentricity_rate,
454 
457  double *envelope_inclination_rate,
458 
461  double *core_inclination_rate,
462 
465  double *envelope_periapsis_rate,
466 
469  double *core_periapsis_rate,
470 
473  double *envelope_angmom_rate,
474 
477  double *core_angmom_rate,
478 
482  double *planet_inclination_rate,
483 
487  double *planet_periapsis_rate,
488 
491  double *planet_angmom_rate
492  );
493 
499  LIB_PUBLIC void get_star_star_evolution(
501  const OrbitSolver *solver,
502 
504  const DiskBinarySystem *system,
505 
507  const EvolvingStar *primary,
508 
510  const EvolvingStar *secondary,
511 
514  double *age,
515 
518  double *semimajor,
519 
522  double *eccentricity,
523 
526  double *primary_envelope_inclination,
527 
530  double *primary_core_inclination,
531 
534  double *primary_envelope_periapsis,
535 
538  double *primary_core_periapsis,
539 
542  double *primary_envelope_angmom,
543 
546  double *primary_core_angmom,
547 
550  double *secondary_envelope_inclination,
551 
554  double *secondary_core_inclination,
555 
558  double *secondary_envelope_periapsis,
559 
562  double *secondary_core_periapsis,
563 
566  double *secondary_envelope_angmom,
567 
570  double *secondary_core_angmom,
571 
573  int *evolution_mode,
574 
578  bool *primary_wind_saturation,
579 
583  bool *secondary_wind_saturation,
584 
587  double *semimajor_rate,
588 
591  double *eccentricity_rate,
592 
595  double *primary_envelope_inclination_rate,
596 
599  double *primary_core_inclination_rate,
600 
603  double *primary_envelope_periapsis_rate,
604 
607  double *primary_core_periapsis_rate,
608 
611  double *primary_envelope_angmom_rate,
612 
615  double *primary_core_angmom_rate,
616 
619  double *secondary_envelope_inclination_rate,
620 
623  double *secondary_core_inclination_rate,
624 
627  double *secondary_envelope_periapsis_rate,
628 
631  double *secondary_core_periapsis_rate,
632 
635  double *secondary_envelope_angmom_rate,
636 
639  double *secondary_core_angmom_rate
640  );
641 
647  LIB_PUBLIC void get_planet_planet_evolution(
649  const OrbitSolver *solver,
650 
652  const DiskBinarySystem *system,
653 
655  const CPlanet *primary,
656 
658  const CPlanet *secondary,
659 
662  double *age,
663 
666  double *semimajor,
667 
670  double *eccentricity,
671 
674  double *primary_inclination,
675 
678  double *primary_periapsis,
679 
681  double *primary_angmom,
682 
686  double *secondary_inclination,
687 
691  double *secondary_periapsis,
692 
695  double *secondary_angmom,
696 
698  int *evolution_mode,
699 
702  double *semimajor_rate,
703 
706  double *eccentricity_rate,
707 
710  double *primary_inclination_rate,
711 
714  double *primary_periapsis_rate,
715 
718  double *primary_angmom_rate,
719 
723  double *secondary_inclination_rate,
724 
728  double *secondary_periapsis_rate,
729 
732  double *secondary_angmom_rate
733  );
734 
740  LIB_PUBLIC void get_star_planet_final_state(
742  const OrbitSolver *solver,
743 
745  const DiskBinarySystem *system,
746 
748  const EvolvingStar *star,
749 
751  const CPlanet *planet,
752 
755  double *age,
756 
759  double *semimajor,
760 
763  double *eccentricity,
764 
767  double *envelope_inclination,
768 
771  double *core_inclination,
772 
775  double *envelope_periapsis,
776 
779  double *core_periapsis,
780 
783  double *envelope_angmom,
784 
787  double *core_angmom,
788 
792  double *planet_inclination,
793 
796  double *planet_periapsis,
797 
800  double *planet_angmom,
801 
803  int *evolution_mode,
804 
808  bool *wind_saturation
809  );
810 
816  LIB_PUBLIC void get_star_star_final_state(
818  const OrbitSolver *solver,
819 
821  const DiskBinarySystem *system,
822 
824  const EvolvingStar *primary,
825 
827  const EvolvingStar *secondary,
828 
831  double *age,
832 
835  double *semimajor,
836 
839  double *eccentricity,
840 
843  double *primary_envelope_inclination,
844 
847  double *primary_core_inclination,
848 
851  double *primary_envelope_periapsis,
852 
855  double *primary_core_periapsis,
856 
859  double *primary_envelope_angmom,
860 
863  double *primary_core_angmom,
864 
867  double *secondary_envelope_inclination,
868 
871  double *secondary_core_inclination,
872 
875  double *secondary_envelope_periapsis,
876 
879  double *secondary_core_periapsis,
880 
883  double *secondary_envelope_angmom,
884 
887  double *secondary_core_angmom,
888 
890  int *evolution_mode,
891 
895  bool *primary_wind_saturation,
896 
900  bool *secondary_wind_saturation
901  );
902 
904  LIB_PUBLIC double get_expansion_coeff_precision(
906  int m,
907 
909  int s
910  );
911 
913  LIB_PUBLIC double evaluate_expansion_coeff(
915  int m,
916 
918  int s,
919 
921  double e,
922 
925  bool deriv
926  );
927 
928 }//End Extern "C"
LIB_PUBLIC const double NaN
Not a number.
Definition: Common.h:33
LIB_PUBLIC void set_zone_dissipation(BrokenPowerlawPhaseLagZone *zone, unsigned num_tidal_frequency_breaks, unsigned num_spin_frequency_breaks, double *tidal_frequency_breaks, double *spin_frequency_breaks, double *tidal_frequency_powers, double *spin_frequency_powers, double reference_phase_lag, double inertial_mode_enhancement, double inertial_mode_sharpness)
Definition: CInterface.cpp:30
LIB_PUBLIC void configure_system(DiskBinarySystem *system, double age, double semimajor, double eccentricity, const double *spin_angmom, const double *inclination, const double *periapsis, int evolution_mode)
Sets the current state of a system.
Definition: CInterface.cpp:205
LIB_PUBLIC double get_expansion_coeff_precision(int m, int s)
doc
Definition: CInterface.cpp:804
LIB_PUBLIC DiskBinarySystem * create_planet_planet_system(CPlanet *primary, CPlanet *secondary, double initial_semimajor, double initial_eccentricity, double initial_inclination, double disk_lock_frequency, double disk_dissipation_age)
Create a binary system out of two planets.
Definition: CInterface.cpp:124
LIB_PUBLIC void configure_planet(CPlanet *planet, double age, double companion_mass, double semimajor, double eccentricity, const double *spin_angmom, const double *inclination, const double *periapsis, bool locked_surface, bool zero_outer_inclination, bool zero_outer_periapsis)
Defines the orbit a planet is in.
Definition: CInterface.cpp:178
struct LIB_PUBLIC BrokenPowerlawPhaseLagZone
Opaque struct to cast to/from Evolve::BrokenPowerlawPhasLagZone.
Definition: CInterface.h:41
struct LIB_PUBLIC OrbitSolver
Opaque struct to cast to/from Evolve::OrbitSolver.
Definition: CInterface.h:38
LIB_PUBLIC void get_star_star_evolution(const OrbitSolver *solver, const DiskBinarySystem *system, const EvolvingStar *primary, const EvolvingStar *secondary, double *age, double *semimajor, double *eccentricity, double *primary_envelope_inclination, double *primary_core_inclination, double *primary_envelope_periapsis, double *primary_core_periapsis, double *primary_envelope_angmom, double *primary_core_angmom, double *secondary_envelope_inclination, double *secondary_core_inclination, double *secondary_envelope_periapsis, double *secondary_core_periapsis, double *secondary_envelope_angmom, double *secondary_core_angmom, int *evolution_mode, bool *primary_wind_saturation, bool *secondary_wind_saturation, double *semimajor_rate, double *eccentricity_rate, double *primary_envelope_inclination_rate, double *primary_core_inclination_rate, double *primary_envelope_periapsis_rate, double *primary_core_periapsis_rate, double *primary_envelope_angmom_rate, double *primary_core_angmom_rate, double *secondary_envelope_inclination_rate, double *secondary_core_inclination_rate, double *secondary_envelope_periapsis_rate, double *secondary_core_periapsis_rate, double *secondary_envelope_angmom_rate, double *secondary_core_angmom_rate)
Fill C-style arrays with the calculated evolution of a binary star system.
Definition: CInterface.cpp:486
LIB_PUBLIC OrbitSolver * evolve_system(DiskBinarySystem *system, double final_age, double max_time_step, double precision, double *required_ages, unsigned num_required_ages, bool print_progress, double max_runtime, unsigned max_time_steps)
Calculate the evolution of a previously configured binary system.
Definition: CInterface.cpp:227
LIB_PUBLIC void destroy_solver(OrbitSolver *solver)
Destroy a solver created by evolve_system.
Definition: CInterface.cpp:261
LIB_PUBLIC const int BINARY_EVOL_MODE
Evolution mode ID for when the two bodies orbit each other.
Definition: CInterface.cpp:12
Defines the OrbitSolver class, the various stopping conditions and a number of other classes used whi...
struct LIB_PUBLIC DiskBinarySystem
Opaque struct to cast to/from Evolve::DiskBinarySystem.
Definition: CInterface.h:35
LIB_PUBLIC void get_star_planet_evolution(const OrbitSolver *solver, const DiskBinarySystem *system, const EvolvingStar *star, const CPlanet *planet, double *age, double *semimajor, double *eccentricity, double *envelope_inclination, double *core_inclination, double *envelope_periapsis, double *core_periapsis, double *envelope_angmom, double *core_angmom, double *planet_inclination, double *planet_periapsis, double *planet_angmom, int *evolution_mode, bool *wind_saturation, double *semimajor_rate, double *eccentricity_rate, double *envelope_inclination_rate, double *core_inclination_rate, double *envelope_periapsis_rate, double *core_periapsis_rate, double *envelope_angmom_rate, double *core_angmom_rate, double *planet_inclination_rate, double *planet_periapsis_rate, double *planet_angmom_rate)
Fill C-style arrays with the calculated evolution of a star-planet system.
Definition: CInterface.cpp:423
LIB_PUBLIC void destroy_binary(DiskBinarySystem *system)
Destroy a previously created binary system.
Definition: CInterface.cpp:146
LIB_PUBLIC const int LOCKED_SURFACE_SPIN_EVOL_MODE
Evolution mode ID for when the surface rotation of one of the bodies is locked to a prescribed value...
Definition: CInterface.cpp:11
LIB_PUBLIC DiskBinarySystem * create_star_star_system(EvolvingStar *primary, EvolvingStar *secondary, double initial_semimajor, double initial_eccentricity, double initial_inclination, double disk_lock_frequency, double disk_dissipation_age, double secondary_formation_age)
Create a binary system out of two stars.
Definition: CInterface.cpp:100
struct LIB_PUBLIC EccentricityExpansionCoefficients
Opaque struct to cast to/from Evolve::EccentricityExpansionCoefficients.
Definition: CInterface.h:44
LIB_PUBLIC unsigned num_evolution_steps(OrbitSolver *solver)
At how many points was the evolution saved.
Definition: CInterface.cpp:266
LIB_PUBLIC const int TABULATION_EVOL_MODE
Evolution mode ID used as the mode to transform to from all other modes when storing the computed evo...
Definition: CInterface.cpp:14
LIB_PUBLIC const int SINGLE_EVOL_MODE
Evolution mode ID for when there is only one body in the system (only its rotation evolves)...
Definition: CInterface.cpp:13
Declares a class of binary systems which start with a disk-locked star which is then released and at ...
LIB_PUBLIC double evaluate_expansion_coeff(int m, int s, double e, bool deriv)
doc
Definition: CInterface.cpp:813
LIB_PUBLIC void get_star_star_final_state(const OrbitSolver *solver, const DiskBinarySystem *system, const EvolvingStar *primary, const EvolvingStar *secondary, double *age, double *semimajor, double *eccentricity, double *primary_envelope_inclination, double *primary_core_inclination, double *primary_envelope_periapsis, double *primary_core_periapsis, double *primary_envelope_angmom, double *primary_core_angmom, double *secondary_envelope_inclination, double *secondary_core_inclination, double *secondary_envelope_periapsis, double *secondary_core_periapsis, double *secondary_envelope_angmom, double *secondary_core_angmom, int *evolution_mode, bool *primary_wind_saturation, bool *secondary_wind_saturation)
Fill destiantions with the calculated final state of a binary star system.
Definition: CInterface.cpp:756
LIB_PUBLIC void get_planet_planet_evolution(const OrbitSolver *solver, const DiskBinarySystem *system, const CPlanet *primary, const CPlanet *secondary, double *age, double *semimajor, double *eccentricity, double *primary_inclination, double *primary_periapsis, double *primary_angmom, double *secondary_inclination, double *secondary_periapsis, double *secondary_angmom, int *evolution_mode, double *semimajor_rate, double *eccentricity_rate, double *primary_inclination_rate, double *primary_periapsis_rate, double *primary_angmom_rate, double *secondary_inclination_rate, double *secondary_periapsis_rate, double *secondary_angmom_rate)
Fill C-style arrays with the calculated evolution of a planet-planet system.
Definition: CInterface.cpp:562
LIB_PUBLIC DiskBinarySystem * create_star_planet_system(EvolvingStar *star, CPlanet *planet, double initial_semimajor, double initial_eccentricity, double initial_inclination, double disk_lock_frequency, double disk_dissipation_age, double secondary_formation_age)
Create a binary system out of a star and a planet.
Definition: CInterface.cpp:76
LIB_PUBLIC void prepare_eccentricity_expansion(const char *filename, double precision, bool pre_load, bool disable_precision_fail)
Read eccentricity expansion coefficients from a file.
Definition: CInterface.cpp:17
LIB_PUBLIC void get_star_planet_final_state(const OrbitSolver *solver, const DiskBinarySystem *system, const EvolvingStar *star, const CPlanet *planet, double *age, double *semimajor, double *eccentricity, double *envelope_inclination, double *core_inclination, double *envelope_periapsis, double *core_periapsis, double *envelope_angmom, double *core_angmom, double *planet_inclination, double *planet_periapsis, double *planet_angmom, int *evolution_mode, bool *wind_saturation)
Fill destiantions with the calculated final state of a star-planet system.
Definition: CInterface.cpp:718
LIB_PUBLIC void configure_star(EvolvingStar *star, double age, double companion_mass, double semimajor, double eccentricity, const double *spin_angmom, const double *inclination, const double *periapsis, bool locked_surface, bool zero_outer_inclination, bool zero_outer_periapsis)
Defines the orbit a star is in.
Definition: CInterface.cpp:151
struct LIB_PUBLIC EvolvingStar
Opaque struct to cast to/from Star::InterpolatedEvolutionStar.
Definition: CInterface.h:30