Changing API for StationDisplacement

The StationDisplacement interface has been added a long time ago, september 2017, for version 9.1, in order to be implemented for several effects, intially for tidal displacement and ocean loading, but now also including tectonic displacement and post-seismic deformation. I am currently working on another effect: atmospheric tide loading.

The interface provides one method: Vector3D displacement(BodiesElements elements, Frame earthFrame, Vector3D referencePoint). This method is in practice called only from a private method in GroundStation.computeDisplacement() (and of course in unit tests for each effect, but this is irrelevant). In this method, the earthFrame parameter corresponds to the earth frame with estimated EOP and the referencePoint argument corresponds to the base point that has been moved according to the East/North/Zenith drivers, so both parameters may slightly move from one call to another during an orbit determination problem. It is not expected to have large variations of these parameters, i.e. the moved point should always remain at most a few meters away from the base point of the ground station.

Some displacement models ignore the provided Earth frame and reference point parameters (PostSeismicDeformation, TectonicsDisplacement), OceanLoading and TidalDisplacement just use them to get some intermediate data like the zenith, west and south directions, which should not vary much. As these models compute first order displacements in the range of a few centimeters, I wonder if we should really care about using points updated at meter level before calling the displacement models. I guess we could just store in the displacement model the original Earth frame and the original reference point and then call the model. We would then later on add all effects: Earth frame EOP estimation, station position offset, and displacements.

This would imply removing the earthFrame and referencePoint arguments from the signature of the StationDisplacement.displacement method, leaving only the time dependent parameter elements which holds the date and the Delaunay arguments used in tide computations.

Removing these two parameters would also allow some computations to be factored in constructors. This would be particularly true for the upcoming AtmosphericTideLoadingDisplacement which relies on interpolations within worldwide grids. I doubt it is worth storing a reference to the grid in each instance model and always rechecking in which cell the point is. We could just pre-compute the interpolated harmonic models at construction and apply them as after longitude/latitude interpolation they just depend on time.

Of course, this is an incompatible interface change so in order to introduce it in 13.X, we should most probably set up a new interface with a new name and have all existing models implement both interfaces. This is the same trick I used when revamping tropospheric models.

What do you think?

2 Likes

Hi Luc,

I’ve never directly used these classes, but if you’ve adopted in the past a similar approach for the tropospheric models and users didn’t complain, I’d say let’s go.

Cheers,
Romain.

Hello Luc,

Also not using these classes so cannot help. I share Romain’s opinion on this.

Cheers,
Vincent