-
Notifications
You must be signed in to change notification settings - Fork 20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update code to use BMSTransformation class and add function to map ABD object to the frame of another #85
Conversation
…ption to map abd objects to the frame of another abd object via map_to_abd_frame.py
Oh I've also noticed that the tolerances in the transformation code regarding supertranslations are a bit stringent. @moble how did you come up with these? Can we relax them? |
Looks like there are some sxs/scri compatibility issues. Working on a fix and will push sometime next week. |
""" | ||
ell_max = 1 # Compute only the parts we need, ell<=1 | ||
supertranslation_potential_data = scri.asymptotic_bondi_data.map_to_superrest_frame.𝔇inverse( | ||
np.array(self.sigma.ethbar_GHP.ethbar_GHP + self.sigma.bar.eth_GHP.eth_GHP), self.ell_max |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is it faster to just compute self.sigma.ethbar_GHP.ethbar_GHP
and take twice the real part?
This PR updates the
map_to_superrest_frame.py
code to use the classscri.bms_transformations.BMSTransformation
to keep track of the BMS transformations that we're applying. By doing so, this enables us to only ever transform the original ABD object (since we can compose transformations), which, in theory, should help reduce numerical noise.Apart from updating the
map_to_superrest_frame.py
code, this also adds a new file,map_to_abd_frame.py
, which includes the functionmap_to_abd_frame
. This function maps one ABD object to the frame of another.This is achieved by doing the following:
target_ABD
to the superrest frame; call itT1
self
to the superrest frame; call itT2
self
totarget_ABD
viaT1.inverse() * T_time_phase * T2
To ensure this function works as expected, the test file
test_abd_frame.py
has also been added.One thing I'm unsure of is how to define the error between the two ABD objects. If the user chooses to do an optimization over the time/phase freedom, then the error is simply the relative error between the strain waveforms. If not, then the error is defined to be the average of the relative error of the Weyl scalars and strain. I don't think this should matter too much, but if people have ideas that are better than what I've implemented, I'd be happy to change the code accordingly.
@moble @duetosymmetry might find this of interest.