comparison +scheme/Utux.m @ 423:a2cb0d4f4a02 feature/grids

Merge in default.
author Jonatan Werpers <jonatan@werpers.com>
date Tue, 07 Feb 2017 15:47:51 +0100
parents 05947fc2505c
children 324c927d8b1d 38c3da9675a5
comparison
equal deleted inserted replaced
218:da058ce66876 423:a2cb0d4f4a02
1 classdef Utux < scheme.Scheme
2 properties
3 m % Number of points in each direction, possibly a vector
4 h % Grid spacing
5 x % Grid
6 order % Order accuracy for the approximation
7
8 H % Discrete norm
9 D
10
11 D1
12 Hi
13 e_l
14 e_r
15 v0
16 end
17
18
19 methods
20 function obj = Utux(m,xlim,order,operator)
21 default_arg('a',1);
22
23 %Old operators
24 % [x, h] = util.get_grid(xlim{:},m);
25 %ops = sbp.Ordinary(m,h,order);
26
27
28 switch operator
29 case 'NonEquidistant'
30 ops = sbp.D1Nonequidistant(m,xlim,order);
31 obj.D1 = ops.D1;
32 case 'Standard'
33 ops = sbp.D2Standard(m,xlim,order);
34 obj.D1 = ops.D1;
35 case 'Upwind'
36 ops = sbp.D1Upwind(m,xlim,order);
37 obj.D1 = ops.Dm;
38 otherwise
39 error('Unvalid operator')
40 end
41 obj.x=ops.x;
42
43
44 obj.H = ops.H;
45 obj.Hi = ops.HI;
46
47 obj.e_l = ops.e_l;
48 obj.e_r = ops.e_r;
49 obj.D=obj.D1;
50
51 obj.m = m;
52 obj.h = ops.h;
53 obj.order = order;
54 obj.x = ops.x;
55
56 end
57 % Closure functions return the opertors applied to the own doamin to close the boundary
58 % Penalty functions return the opertors to force the solution. In the case of an interface it returns the operator applied to the other doamin.
59 % boundary is a string specifying the boundary e.g. 'l','r' or 'e','w','n','s'.
60 % type is a string specifying the type of boundary condition if there are several.
61 % data is a function returning the data that should be applied at the boundary.
62 % neighbour_scheme is an instance of Scheme that should be interfaced to.
63 % neighbour_boundary is a string specifying which boundary to interface to.
64 function [closure, penalty] = boundary_condition(obj,boundary,type,data)
65 default_arg('type','neumann');
66 default_arg('data',0);
67 tau =-1*obj.e_l;
68 closure = obj.Hi*tau*obj.e_l';
69 penalty = 0*obj.e_l;
70
71 end
72
73 function [closure, penalty] = interface(obj,boundary,neighbour_scheme,neighbour_boundary)
74 error('An interface function does not exist yet');
75 end
76
77 function N = size(obj)
78 N = obj.m;
79 end
80
81 end
82
83 methods(Static)
84 % Calculates the matrcis need for the inteface coupling between boundary bound_u of scheme schm_u
85 % and bound_v of scheme schm_v.
86 % [uu, uv, vv, vu] = inteface_couplong(A,'r',B,'l')
87 function [uu, uv, vv, vu] = interface_coupling(schm_u,bound_u,schm_v,bound_v)
88 [uu,uv] = schm_u.interface(bound_u,schm_v,bound_v);
89 [vv,vu] = schm_v.interface(bound_v,schm_u,bound_u);
90 end
91 end
92 end