Next:
Ring weights distribution    Previous: Map distribution    Up: Data distribution


alm distribution

S2HAT distributes both pixel domain and harmonic domain objects. The latter is usually a set of alm coefficients, which are therefore numbered by l and m indices. The alm coefficients are distributed in such a way that all coefficients with the same value of m are stored in a memory of a single proc. The distribution is defined by a processor specific vector which defines all the m values to be stored in its memory. The length of the vector, i.e., a number of m values stored per proc is arbitrary and can, and in general will, differ between procs. Each proc needs to have at least one m value assigned to it. Moreover, any given value of m has to be uniquely assign to one proc only and every value of m between 0 and mmax (both inclusive) needs to be assigned to some proc. The coefficients corresponding to different Stokes parameters, or different maps, which are processed simultaneously, are distributed all in the same way.

Hereafter, typically we denote a number of m values per proc as nmvals. A vector of the length nmvals defining all the m values stored in the memory of a given proc is called mvals. These two objects are obviously proc specific.

In the Fortran 90 case, the local subset of alm coefficients is a 4 dimensional array of the type double precision complex with the dimensions defined as,

(1:nstokes,0:nlmax,0:nmvals-1,1:nmaps),      (HEALpix convention);
(0:nlmax,0:nmvals-1,1:nstokes,1:nmaps),      (S2HAT convention);

corresponding to two different layouts accepted by S2HAT.

In C those multidimensional arrays are stored column-wise, i.e., with the last index above changing as the last, as a vector. The type of the vector is s2hat_dcomplex and is defined in the S2HAT library.

The standard distribution of the alm coefficients is defined by calling first get_local_data_sizes, which determines nmvals, followed by a call to find_mvalues, which assigns the m values to be stored in a memory of a proc and which are stored in a vector, mvals, of the length nmvals. Those two calls need to be separated by a memory allocation for mvals.



Next: Ring Weights distribution    Previous: Map distribution    Up: Data distribution   

radek stompor 2009-10-15