static void fft_linop_adjoint(const linop_data_t* _data, complex float* out, const complex float* in) { const struct fft_linop_s* data = CAST_DOWN(fft_linop_s, _data); if (in != out) md_copy2(data->N, data->dims, data->strs, out, data->strs, in, CFL_SIZE); operator_apply(data->adj, data->N, data->dims, out, data->N, data->dims, out); }
/** * Apply the normal equations operation of a linear operator: y = A^H A x * Checks that dimensions are consistent for the linear operator * * @param op linear operator * @param N number of dimensions * @param dims dimensions * @param dst output data * @param src input data */ void linop_normal(const struct linop_s* op, unsigned int N, const long dims[N], complex float* dst, const complex float* src) { assert(op->normal); operator_apply(op->normal, N, dims, dst, N, dims, src); }
/** * Apply the adjoint operation of a linear operator: y = A^H x * Checks that dimensions are consistent for the linear operator * * @param op linear operator * @param DN number of destination dimensions * @param ddims dimensions of the output (domain) * @param dst output data * @param SN number of source dimensions * @param sdims dimensions of the input (codomain) * @param src input data */ void linop_adjoint(const struct linop_s* op, unsigned int DN, const long ddims[DN], complex float* dst, unsigned int SN, const long sdims[SN], const complex float* src) { assert(op->adjoint); operator_apply(op->adjoint, DN, ddims, dst, SN, sdims, src); }