Advanced: Alternate Backends

Setup

Let's first make sure we have the latest version of PHOEBE 2.2 installed. (You can comment out this line if you don't use pip for your installation or don't want to update to the latest release).


In [ ]:
!pip install -I "phoebe>=2.2,<2.3"

As always, let's do imports and initialize a logger and a new Bundle. See Building a System for more details.


In [1]:
import phoebe
from phoebe import u # units
import numpy as np
import matplotlib.pyplot as plt

logger = phoebe.logger()

b = phoebe.default_binary()

And we'll attach some dummy datasets. See Datasets for more details.


In [2]:
b.add_dataset('orb', times=np.linspace(0,10,1000), dataset='orb01', component=['primary', 'secondary'])


Wed, 11 Dec 2019 11:38 BUNDLE       WARNING orb dataset uses 'compute_times' instead of 'times', applying value sent as 'times' to 'compute_times'.
Out[2]:
<ParameterSet: 8 parameters | contexts: compute, constraint, dataset, figure>

In [3]:
b.add_dataset('lc', times=np.linspace(0,10,1000), dataset='lc01')


Out[3]:
<ParameterSet: 43 parameters | contexts: compute, constraint, dataset, figure>

Available Backends

See the Compute Tutorial for details on adding compute options and using them to create synthetic models.

PHOEBE 1.0 Legacy

For more details, see Comparing PHOEBE 2.0 vs PHOEBE Legacy


In [4]:
b.add_compute('legacy', compute='legacybackend')
print(b.get_compute('legacybackend'))


ParameterSet: 10 parameters
  irrad_method@legacybackend@...: wilson
  refl_num@legacybackend@compute: 1
        ie@legacybackend@compute: False
   enabled@legacybackend@compute: True
  atm@primary@legacybackend@c...: extern_atmx
  atm@secondary@legacybackend...: extern_atmx
  gridsize@primary@legacyback...: 60
  gridsize@secondary@legacyba...: 60
  distortion_method@primary@l...: roche
  distortion_method@secondary...: roche

Using Alternate Backends

Adding Compute Options

Adding a set of compute options, via b.add_compute for an alternate backend is just as easy as for the PHOEBE backend. Simply provide the function or name of the function in phoebe.parameters.compute that points to the parameters for that backend.

Here we'll add the default PHOEBE backend as well as the PHOEBE 1.0 (legacy) backend. Note that in order to use an alternate backend, that backend must be installed on your machine.


In [5]:
b.add_compute('phoebe', compute='phoebebackend')


Out[5]:
<ParameterSet: 30 parameters | datasets: lc01, orb01, _default>

In [6]:
print(b.get_compute('phoebebackend'))


ParameterSet: 18 parameters
  dynamics_method@phoebebacke...: keplerian
      ltte@phoebebackend@compute: False
  irrad_method@phoebebackend@...: horvat
  boosting_method@phoebebacke...: none
  eclipse_method@phoebebacken...: native
  horizon_method@phoebebacken...: boolean
  enabled@orb01@phoebebackend...: True
  enabled@lc01@phoebebackend@...: True
  mesh_method@primary@phoebeb...: marching
  mesh_method@secondary@phoeb...: marching
  ntriangles@primary@phoebeba...: 1500
  ntriangles@secondary@phoebe...: 1500
  distortion_method@primary@p...: roche
  distortion_method@secondary...: roche
  atm@primary@phoebebackend@c...: ck2004
  atm@secondary@phoebebackend...: ck2004
  lc_method@phoebebackend@com...: numerical
  fti_method@phoebebackend@co...: none

Running Compute

Nothing changes when calling b.run_compute - simply provide the compute tag for those options. Do note, however, that not all backends support all dataset types.

But, since the legacy backend doesn't support ck2004 atmospheres and interpolated limb-darkening, we do need to choose a limb-darkening law. We can do this for all passband-component combinations by using set_value_all.


In [8]:
b.set_value_all('ld_mode', 'manual')


Wed, 11 Dec 2019 11:39 BUNDLE       WARNING ld_mode='interp' not supported by 'legacy' backend used by compute='legacybackend'.  Change ld_mode@primary@lc01 or use a backend that supports atm='ck2004'.  If not addressed, this warning will continue to be raised and will throw an error at run_compute.
Wed, 11 Dec 2019 11:39 BUNDLE       WARNING ld_mode='interp' not supported by 'legacy' backend used by compute='legacybackend'.  Change ld_mode@secondary@lc01 or use a backend that supports atm='ck2004'.  If not addressed, this warning will continue to be raised and will throw an error at run_compute.
Wed, 11 Dec 2019 11:39 BUNDLE       WARNING ld_mode='interp' not supported by 'legacy' backend used by compute='legacybackend'.  Change ld_mode@secondary@lc01 or use a backend that supports atm='ck2004'.  If not addressed, this warning will continue to be raised and will throw an error at run_compute.

In [9]:
b.set_value_all('ld_func', 'logarithmic')

In [10]:
b.run_compute('legacybackend', model='legacyresults')


Wed, 11 Dec 2019 11:39 BUNDLE       WARNING legacy does not natively support interpolating ld coefficients.  These will be interpolated by PHOEBE 2 and then passed to legacy.
Wed, 11 Dec 2019 11:39 IO           WARNING requiv_max@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING requiv_min@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING logg@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING freq@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING pitch@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING yaw@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING long_an@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING irrad_frac_lost_bol@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_mode_bol@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_func_bol@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_coeffs_source_bol@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING mass@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING requiv_max@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING requiv_min@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING logg@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING freq@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING pitch@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING yaw@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING long_an@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING irrad_frac_lost_bol@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_mode_bol@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_func_bol@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_coeffs_source_bol@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING mass@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_mode@_default@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_coeffs_source@_default@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING intens_weighting@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ebv@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING Av@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING Rv@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING compute_times@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING compute_phases@binary@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING compute_phases_t0@binary@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING pblum_mode@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING pblum_component@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING pblum_dataset@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING pbflux@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING Finite integration Time is not fully supported and will be turned off by legacy wrapper before computation
Wed, 11 Dec 2019 11:39 IO           WARNING lc_method@lc01@phoebe01@phoebe@compute has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING fti_method@lc01@phoebe01@phoebe@compute has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING fti_oversample@lc01@phoebe01@phoebe@compute has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_mode@primary@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_mode@secondary@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_coeffs_source@primary@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_coeffs_source@secondary@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING lc_method@lc01@phoebebackend@phoebe@compute has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING fti_method@lc01@phoebebackend@phoebe@compute has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING fti_oversample@lc01@phoebebackend@phoebe@compute has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING freq@binary@orbit@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING t0_perpass@binary@orbit@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING t0_supconj@binary@orbit@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING mean_anom@binary@orbit@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING long_an@binary@orbit@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING asini@binary@orbit@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ecosw@binary@orbit@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING esinw@binary@orbit@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING irrad_method@legacybackend@legacy@compute has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING distortion_method@primary@legacybackend@legacy@compute has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING distortion_method@secondary@legacybackend@legacy@compute has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING t0@system has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ra@system has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING dec@system has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING distance@system has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING hierarchy@system has no phoebe 1 corollary
Out[10]:
<ParameterSet: 4 parameters | contexts: model, figure>

Running Multiple Backends Simultaneously

Running multiple backends simultaneously is just as simple as running the PHOEBE backend with multiple sets of compute options (see Compute).

We just need to make sure that each dataset is only enabled for one (or none) of the backends that we want to use, and then send a list of the compute tags to run_compute. Here we'll use the PHOEBE backend to compute orbits and the legacy backend to compute light curves.


In [11]:
b.set_value_all('enabled@lc01@phoebebackend', False)
#b.set_value_all('enabled@orb01@legacybackend', False)  # don't need this since legacy NEVER computes orbits
print(b.filter(qualifier='enabled'))


ParameterSet: 5 parameters
  enabled@orb01@phoebe01@compute: True
   enabled@lc01@phoebe01@compute: True
   enabled@legacybackend@compute: True
  enabled@orb01@phoebebackend...: True
  enabled@lc01@phoebebackend@...: False

In [12]:
b.run_compute(['phoebebackend', 'legacybackend'], model='mixedresults')


Wed, 11 Dec 2019 11:39 BUNDLE       WARNING legacy does not natively support interpolating ld coefficients.  These will be interpolated by PHOEBE 2 and then passed to legacy.
Wed, 11 Dec 2019 11:39 IO           WARNING requiv_max@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING requiv_min@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING logg@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING freq@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING pitch@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING yaw@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING long_an@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING irrad_frac_lost_bol@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_mode_bol@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_func_bol@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_coeffs_source_bol@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING mass@primary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING requiv_max@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING requiv_min@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING logg@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING freq@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING pitch@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING yaw@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING long_an@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING irrad_frac_lost_bol@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_mode_bol@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_func_bol@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_coeffs_source_bol@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING mass@secondary@star@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_mode@_default@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_coeffs_source@_default@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING intens_weighting@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ebv@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING Av@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING Rv@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING compute_times@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING compute_phases@binary@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING compute_phases_t0@binary@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING pblum_mode@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING pblum_component@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING pblum_dataset@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING pbflux@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING Finite integration Time is not fully supported and will be turned off by legacy wrapper before computation
Wed, 11 Dec 2019 11:39 IO           WARNING lc_method@lc01@phoebe01@phoebe@compute has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING fti_method@lc01@phoebe01@phoebe@compute has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING fti_oversample@lc01@phoebe01@phoebe@compute has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_mode@primary@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_mode@secondary@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_coeffs_source@primary@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ld_coeffs_source@secondary@lc01@lc@dataset has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING lc_method@lc01@phoebebackend@phoebe@compute has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING fti_method@lc01@phoebebackend@phoebe@compute has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING fti_oversample@lc01@phoebebackend@phoebe@compute has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING freq@binary@orbit@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING t0_perpass@binary@orbit@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING t0_supconj@binary@orbit@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING mean_anom@binary@orbit@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING long_an@binary@orbit@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING asini@binary@orbit@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ecosw@binary@orbit@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING esinw@binary@orbit@component has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING irrad_method@legacybackend@legacy@compute has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING distortion_method@primary@legacybackend@legacy@compute has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING distortion_method@secondary@legacybackend@legacy@compute has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING t0@system has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING ra@system has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING dec@system has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING distance@system has no phoebe 1 corollary
Wed, 11 Dec 2019 11:39 IO           WARNING hierarchy@system has no phoebe 1 corollary
Out[12]:
<ParameterSet: 18 parameters | contexts: model, figure>

The parameters inside the returned model even remember which set of compute options (and therefore, in this case, which backend) were used to compute them.


In [13]:
print(b['mixedresults'].computes)


['phoebebackend', 'legacybackend']

In [14]:
b['mixedresults@phoebebackend'].datasets


Out[14]:
['orb01']

In [15]:
b['mixedresults@legacybackend'].datasets


Out[15]:
['lc01']