Class
NumCosmoXcorSolver
Description [src]
final class NumCosmo.XcorSolver : GObject.Object
{
/* No available fields */
}
Batched register/request/solve interface for NcXcorKernel angular power spectra.
This is the “companion object” from
dev-notes/xcor_ultralevin_batching_plan.md sec. 5: it lets a caller declare
every kernel and every desired auto/cross Cl block up front
(nc_xcor_solver_register_kernel() / nc_xcor_solver_request_cl()), so a
future nc_xcor_solver_solve() can pick an $\ell$-block tiling and build each
distinct kernel’s k-space closure exactly once per block, shared across
every request that needs it in that block — instead of rebuilding it
once per pair, as NcXcor‘s single-pair nc_xcor_compute() does today.
This phase (registration) does no computation at all: it only records
which kernels and which (kernel pair, $\ell$-range) blocks are wanted.
nc_xcor_solver_register_kernel() is idempotent by pointer identity —
registering the same NcXcorKernel instance twice returns the same id.
NcXcor itself stays untouched and close to stateless per-call; this
object exists precisely so bolting registration/request state onto
NcXcor doesn’t change its contract for existing callers of nc_xcor_compute().
Functions
nc_xcor_solver_clear
If solver is not NULL, decrements its reference count, freeing it if
the count reaches 0, and sets solver to NULL.
Instance methods
nc_xcor_solver_clear_requests
Removes all requests, keeping registered kernels intact. Useful to reuse the same kernel registration across several rounds of requests.
nc_xcor_solver_get_block
Retrieves the $\ell$-range of a block planned by nc_xcor_solver_plan_blocks(), in ascending order and non-overlapping.
nc_xcor_solver_get_request
Retrieves the details of a previously-made request, in registration order.
nc_xcor_solver_plan_blocks
Tiles the union of all requested $\ell$-ranges into contiguous blocks, each
covering at most default_block_size multipoles, further capped by
NC_XCOR_KERNEL_MAX_ELL_BLOCK. A block also never straddles a registered
kernel’s l_limber threshold, since a kernel evaluated in Limber mode below l_limber and non-Limber mode above it needs the switch to fall on a block boundary.
nc_xcor_solver_register_kernel
Registers xclk with solver, returning an id to use in
nc_xcor_solver_request_cl(). Idempotent by pointer identity: registering
the same xclk instance again returns the same id without adding a
second entry.
nc_xcor_solver_request_cl
Declares one desired output block: the auto- or cross-Cl of the kernels
identified by kernel_id_1 and kernel_id_2, over $\ell$ in [lmin, lmax].
Call once per entry in the data vector / covariance block ultimately
needed. Registration-only: no computation happens here.
nc_xcor_solver_set_integrator
Sets the integrator solver copies once per ell-block. Every block gets its
own copy of sbi, pinned to that block’s multipole range, so all registered
kernels share one integrator per block instead of each carrying its own.
nc_xcor_solver_solve
Computes every requested Cl block. Requires nc_xcor_solver_plan_blocks()
to have been called first. Replaces any results from a previous
nc_xcor_solver_solve() call.
Signals
Signals inherited from GObject (1)
GObject::notify
The notify signal is emitted on an object when one of its properties has its value set through g_object_set_property(), g_object_set(), et al.