Mercurial > repos > public > sbplib
view +sbp/InterpOpsOP.m @ 927:4291731570bb feature/utux2D
Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
author | Martin Almquist <malmquist@stanford.edu> |
---|---|
date | Mon, 03 Dec 2018 14:53:52 -0800 |
parents | |
children | ed8c98c4d479 |
line wrap: on
line source
classdef InterpOpsOP < sbp.InterpOps properties % Structs of interpolation operators, fields .good and .bad Iu2v Iv2u end methods % x_u, x_v -- vectors of the coordinate that varies along the boundary % order_u, order_v -- order of accuracy in the different blocks function obj = InterpOpsOP(x_u, x_v, order_u, order_v) assert(order_u == order_v,... 'InterpOpsOP: Different orders of accuracy not available'); switch order_u case 2 intOpSet = @sbp.implementations.intOpOP_orders_2to2_ratio2to1; case 4 intOpSet = @sbp.implementations.intOpOP_orders_4to4_ratio2to1; case 6 intOpSet = @sbp.implementations.intOpOP_orders_6to6_ratio2to1; case 8 intOpSet = @sbp.implementations.intOpOP_orders_8to8_ratio2to1; otherwise error('InterpOpsOP: Order of accuracy %d not available.', order_u); end m_u = length(x_u) - 1; m_v = length(x_v) - 1; Iu2v = struct; Iv2u = struct; if m_u/m_v == 2 % Block u is fine, v is coarse m_C = m_v; [Iv2u.good, Iu2v.bad] = intOpSet(m_C+1, 1, 'C2F'); [Iv2u.bad, Iu2v.good] = intOpSet(m_C+1, 1, 'F2C'); elseif m_v/m_u == 2 % Block v is fine, u is coarse m_C = m_u; [Iu2v.good, Iv2u.bad] = intOpSet(m_C+1, 1, 'C2F'); [Iu2v.bad, Iv2u.good] = intOpSet(m_C+1, 1, 'F2C'); else error('InterpOpsOP: Interpolation operators for grid ratio %f have not yet been constructed', m_u/m_v); end obj.Iu2v = Iu2v; obj.Iv2u = Iv2u; end function str = string(obj) str = [class(obj)]; end end end