annotate +scheme/Utux.m @ 958:72cd29107a9a feature/poroelastic

Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
author Martin Almquist <malmquist@stanford.edu>
date Wed, 05 Dec 2018 18:58:10 -0800
parents 05947fc2505c
children 324c927d8b1d 38c3da9675a5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
270
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
1 classdef Utux < scheme.Scheme
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
2 properties
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
3 m % Number of points in each direction, possibly a vector
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
4 h % Grid spacing
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
5 x % Grid
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
6 order % Order accuracy for the approximation
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
7
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
8 H % Discrete norm
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
9 D
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
10
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
11 D1
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
12 Hi
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
13 e_l
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
14 e_r
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
15 v0
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
16 end
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
17
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
18
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
19 methods
367
05947fc2505c Added different operators to Utux
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
20 function obj = Utux(m,xlim,order,operator)
270
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
21 default_arg('a',1);
290
d32f674bcbe5 A first attempt to make a general scheme fo hyperbolic systems
Ylva Rydin <ylva.rydin@telia.com>
parents: 270
diff changeset
22
d32f674bcbe5 A first attempt to make a general scheme fo hyperbolic systems
Ylva Rydin <ylva.rydin@telia.com>
parents: 270
diff changeset
23 %Old operators
d32f674bcbe5 A first attempt to make a general scheme fo hyperbolic systems
Ylva Rydin <ylva.rydin@telia.com>
parents: 270
diff changeset
24 % [x, h] = util.get_grid(xlim{:},m);
d32f674bcbe5 A first attempt to make a general scheme fo hyperbolic systems
Ylva Rydin <ylva.rydin@telia.com>
parents: 270
diff changeset
25 %ops = sbp.Ordinary(m,h,order);
d32f674bcbe5 A first attempt to make a general scheme fo hyperbolic systems
Ylva Rydin <ylva.rydin@telia.com>
parents: 270
diff changeset
26
367
05947fc2505c Added different operators to Utux
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
27
05947fc2505c Added different operators to Utux
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
28 switch operator
05947fc2505c Added different operators to Utux
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
29 case 'NonEquidistant'
05947fc2505c Added different operators to Utux
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
30 ops = sbp.D1Nonequidistant(m,xlim,order);
05947fc2505c Added different operators to Utux
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
31 obj.D1 = ops.D1;
05947fc2505c Added different operators to Utux
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
32 case 'Standard'
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 352
diff changeset
33 ops = sbp.D2Standard(m,xlim,order);
367
05947fc2505c Added different operators to Utux
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
34 obj.D1 = ops.D1;
05947fc2505c Added different operators to Utux
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
35 case 'Upwind'
05947fc2505c Added different operators to Utux
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
36 ops = sbp.D1Upwind(m,xlim,order);
05947fc2505c Added different operators to Utux
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
37 obj.D1 = ops.Dm;
05947fc2505c Added different operators to Utux
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
38 otherwise
05947fc2505c Added different operators to Utux
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
39 error('Unvalid operator')
05947fc2505c Added different operators to Utux
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
40 end
05947fc2505c Added different operators to Utux
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
41 obj.x=ops.x;
270
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
42
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 352
diff changeset
43
290
d32f674bcbe5 A first attempt to make a general scheme fo hyperbolic systems
Ylva Rydin <ylva.rydin@telia.com>
parents: 270
diff changeset
44 obj.H = ops.H;
d32f674bcbe5 A first attempt to make a general scheme fo hyperbolic systems
Ylva Rydin <ylva.rydin@telia.com>
parents: 270
diff changeset
45 obj.Hi = ops.HI;
d32f674bcbe5 A first attempt to make a general scheme fo hyperbolic systems
Ylva Rydin <ylva.rydin@telia.com>
parents: 270
diff changeset
46
d32f674bcbe5 A first attempt to make a general scheme fo hyperbolic systems
Ylva Rydin <ylva.rydin@telia.com>
parents: 270
diff changeset
47 obj.e_l = ops.e_l;
d32f674bcbe5 A first attempt to make a general scheme fo hyperbolic systems
Ylva Rydin <ylva.rydin@telia.com>
parents: 270
diff changeset
48 obj.e_r = ops.e_r;
270
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
49 obj.D=obj.D1;
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
50
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
51 obj.m = m;
290
d32f674bcbe5 A first attempt to make a general scheme fo hyperbolic systems
Ylva Rydin <ylva.rydin@telia.com>
parents: 270
diff changeset
52 obj.h = ops.h;
270
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
53 obj.order = order;
290
d32f674bcbe5 A first attempt to make a general scheme fo hyperbolic systems
Ylva Rydin <ylva.rydin@telia.com>
parents: 270
diff changeset
54 obj.x = ops.x;
270
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
55
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
56 end
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
57 % Closure functions return the opertors applied to the own doamin to close the boundary
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
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.
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
59 % boundary is a string specifying the boundary e.g. 'l','r' or 'e','w','n','s'.
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
60 % type is a string specifying the type of boundary condition if there are several.
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
61 % data is a function returning the data that should be applied at the boundary.
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
62 % neighbour_scheme is an instance of Scheme that should be interfaced to.
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
63 % neighbour_boundary is a string specifying which boundary to interface to.
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
64 function [closure, penalty] = boundary_condition(obj,boundary,type,data)
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
65 default_arg('type','neumann');
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
66 default_arg('data',0);
290
d32f674bcbe5 A first attempt to make a general scheme fo hyperbolic systems
Ylva Rydin <ylva.rydin@telia.com>
parents: 270
diff changeset
67 tau =-1*obj.e_l;
270
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
68 closure = obj.Hi*tau*obj.e_l';
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
69 penalty = 0*obj.e_l;
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
70
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
71 end
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
72
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
73 function [closure, penalty] = interface(obj,boundary,neighbour_scheme,neighbour_boundary)
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
74 error('An interface function does not exist yet');
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
75 end
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
76
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
77 function N = size(obj)
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
78 N = obj.m;
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
79 end
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
80
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
81 end
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
82
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
83 methods(Static)
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
84 % Calculates the matrcis need for the inteface coupling between boundary bound_u of scheme schm_u
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
85 % and bound_v of scheme schm_v.
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
86 % [uu, uv, vv, vu] = inteface_couplong(A,'r',B,'l')
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
87 function [uu, uv, vv, vu] = interface_coupling(schm_u,bound_u,schm_v,bound_v)
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
88 [uu,uv] = schm_u.interface(bound_u,schm_v,bound_v);
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
89 [vv,vu] = schm_v.interface(bound_v,schm_u,bound_u);
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
90 end
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
91 end
d755816aa0fa added a u_t+u_x=0 scheme
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
92 end