void mis2(int niter /* number of iterations */, int nx /* model size */, float *xx /* model */, sf_filter aa /* helix filter */, const bool *known /* mask for known data */, float eps /* regularization parameter */, bool doprec /* to apply preconditioning */) /*< interpolate >*/ { int ix; float *dd; if (doprec) { /* preconditioned */ sf_mask_init(known); sf_polydiv_init(nx, aa); sf_solver_prec(sf_mask_lop, sf_cgstep, sf_polydiv_lop, nx, nx, nx, xx, xx, niter, eps, "end"); sf_polydiv_close(); } else { /* regularized */ dd = sf_floatalloc(nx); for (ix=0; ix < nx; ix++) { dd[ix]=0.; } sf_helicon_init(aa); sf_solver (sf_helicon_lop, sf_cgstep, nx, nx, xx, dd, niter, "known", known, "x0", xx, "end"); free(dd); } sf_cgstep_close(); }
void wilson2_close( void) /*< free allocated storage >*/ { sf_polydiv_close(); free (au); free (bb); free (cc); free (b); free (c); }
void laplacian_close(void) /*< free allocated storage >*/ { switch(type) { case 2: sf_tridiagonal_close(tri1); free(work1); sf_tridiagonal_close(tri2); free(work2); break; case 3: sf_polydiv_close(); free(work1); break; default: break; } }
void signoi_close(void) /*< free allocated storage >*/ { free(dd); sf_polydiv_close(); }