Hi Richard, hi all,
I notice a trend here!
Simon is looking into how we shall treat covariance matrices. And he is
also considering to introduce a special class, to allow that we can make
use of the block structure of such matrices, and also to some extent
make use of the symmetry in such matrices.
Yesterday Robin made the remark that we can save space for scattering
matrices by instead store the amplitude matrix values. The number of
free variables then decreases from 16 to 7. (Robin correct me if
something is wrong) Seems reasonable for the scattering database. To be
discussed if this also should be used inside ARTS.
Richard, I see your point and I think this is basically a good idea.
As I wrote in some other email, I think A is valid also for scattering.
Jana and/or Robin, can you comment/confirm?
Some comments:
Richard, for the discussion you should maybe clarify where this approach
should be applied. You just discuss "propagation matrix". This variable
has unit 1/m, but your A must have unit [-]. That is, do you want to
apply the scheme both on propagation matrices and extinction over some
path length? As I see it, if introduced the approach should be used as
far as possible and this has consequences around ARTS.
However, the idea of including variables to describe Faraday and Zeeman
seems overly complex. What do you gain be postponing the impact of
Faraday and Zeeman, instead of including the effect from start and let
the rest of the machinery be blind to if b != 0 is caused by Zeeman or
scattering?
For me it seems simplest to just apply a vector here, where [a, b ...w]
have a specific order. In fact, this is exactly what we do in the format
for storing scattering data. There we just store the independent values,
and form the vectors and matrices when imported into ARTS. It would be
very good if the order we use in the scattering data format could be
used also in the propmat class.
Some comments before starting the midsummer celebrations!
Bye,
Patrick
On 2017-06-22 17:05, Richard Larsson wrote:
Hi all,
I would like to propose switching to an internal representation of the
propagation matrix using a specially designed class, imaginatively named
"PropagationMatrix". Some background below. Inputs wanted!
With the help of Philippe Baron, I added a new matrix-exponent function
that is about 30X faster than the base implementation. This
implementation only works for the very specific case when
F = exp(A), and A =
a b c d
b a u v
c -u a w
d -v -w a
This seems to be the case for all matrices that we are concerned about
in the propagation parts of ARTS, even in the scattering cases. Is this
true?
It is the case for clearsky anyways, so this is kinda nice to have at
hands. Thanks Philippe!
Got me thinking, though, that we are wasting a lot of memory and a lot
of computing time keeping the entire 4X4 propagation-matrix around when
all we really need is just the 7 independents a, b, c, d, u, v, and w.
I was originally considering proposing an implementation change in
propmat_clearsky to rather use Vectors of these parameters to represent
the matrix. However, that would be overly simplistic and might not be
beneficiary enough to justify the extra work.
Instead, I would like to propose a similar class, PropagationMatrix,
that can store the entire propagation matrix in parameterized form that
is reduced to the seven variables above by simple mechanisms.
For unpolarized absorption, the parameterization would just keep a
Vector of the absorption, i.e. "a" above.
For Faraday, it would also keep a single Vector of the rotation
strength, but also a Numeric for the angle between the magnetic field
and the line-of-sight. These two are enough to generate "u" above.
For Zeeman, it would keep three Vectors of the strength and two angles
for the magnetic field relative to the line-of-sight. These are enough
to generate the 7 parameters.
Are there other cases of propagation requiring care that I am missing or
do we only have these three? Probably, and I will simply store these as
the 7 parameters.
When all is added up to a final product in the end, only then would the
full seven Vectors be used (if necessary) before the transmission matrix
is computed.
This PropagationMatrix will of course implement a way to know how to
multiply itself with ARTS-matrices and Vectors as the current
Matrix-representation does. Numerical multiplications are simpler still.
This would require adding the PropagationMatrix to the global variables
that can be read and viewed from the controllfile. Otherwise, we would
have to use the same memory-layout as before in every instance of
interacting with other methods...
The major advantage is in the summation phase where each type of
propagation matrix knows how it should behave. Simple diagonal matrices
don't have to sum to other things than the diagonal. Faraday to "u".
Zeeman still has to sum to all but now there are 7 variables rather than
16.
A possible follow-up advantage is that it should make lookup-table
calculations possible for Zeeman and Faraday by extending the
interpolation to include the magnetic strength. The angles between the
magnetic field and the line-of-sight is easy to compute on-the-fly and
would be all you need to compute the full PropagationMatrix from the
interpolated one.
I would like some input before I take on this task though.
With hope,
//Richard
_______________________________________________
arts_dev.mi mailing list
[email protected]
https://mailman.rrz.uni-hamburg.de/mailman/listinfo/arts_dev.mi
_______________________________________________
arts_dev.mi mailing list
[email protected]
https://mailman.rrz.uni-hamburg.de/mailman/listinfo/arts_dev.mi