annotate +scheme/+bc/forcingSetup.m @ 1207:05a01f77d0e3 feature/poroelastic

Swap indices and fix bug in ElasticVariableAnisotropic
author Martin Almquist <malmquist@stanford.edu>
date Fri, 20 Sep 2019 14:57:02 -0700
parents ba10f24bf476
children a52033540dd9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
877
7ceaea27d944 Clean up bc.forcingSetup
Jonatan Werpers <jonatan@werpers.com>
parents: 876
diff changeset
1 % Setup the forcing function for the given boundary conditions and data.
899
ba10f24bf476 Fix the documentation of functions
Jonatan Werpers <jonatan@werpers.com>
parents: 878
diff changeset
2 % Each bc is a struct with the fields
ba10f24bf476 Fix the documentation of functions
Jonatan Werpers <jonatan@werpers.com>
parents: 878
diff changeset
3 % * type -- Type of boundary condition
ba10f24bf476 Fix the documentation of functions
Jonatan Werpers <jonatan@werpers.com>
parents: 878
diff changeset
4 % * boundary -- Boundary identifier
ba10f24bf476 Fix the documentation of functions
Jonatan Werpers <jonatan@werpers.com>
parents: 878
diff changeset
5 % * data -- A function_handle for a function which provides boundary data.(see below)
877
7ceaea27d944 Clean up bc.forcingSetup
Jonatan Werpers <jonatan@werpers.com>
parents: 876
diff changeset
6 % S_sign allows changing the sign of the function to put on different sides in the system of ODEs.
7ceaea27d944 Clean up bc.forcingSetup
Jonatan Werpers <jonatan@werpers.com>
parents: 876
diff changeset
7 % default is 1, which the same side as the diffOp.
899
ba10f24bf476 Fix the documentation of functions
Jonatan Werpers <jonatan@werpers.com>
parents: 878
diff changeset
8 % Returns a forcing function S.
ba10f24bf476 Fix the documentation of functions
Jonatan Werpers <jonatan@werpers.com>
parents: 878
diff changeset
9 %
ba10f24bf476 Fix the documentation of functions
Jonatan Werpers <jonatan@werpers.com>
parents: 878
diff changeset
10 % The boundary data function can either be a function of time or a function of time and space coordinates.
ba10f24bf476 Fix the documentation of functions
Jonatan Werpers <jonatan@werpers.com>
parents: 878
diff changeset
11 % In the case where it only depends on time it should return the data as grid function for the boundary.
ba10f24bf476 Fix the documentation of functions
Jonatan Werpers <jonatan@werpers.com>
parents: 878
diff changeset
12 % In the case where it also takes space coordinates the number of space coordinates should match the number of dimensions of the problem domain.
ba10f24bf476 Fix the documentation of functions
Jonatan Werpers <jonatan@werpers.com>
parents: 878
diff changeset
13 % For example in the 2D case: f(t,x,y).
ba10f24bf476 Fix the documentation of functions
Jonatan Werpers <jonatan@werpers.com>
parents: 878
diff changeset
14
870
fb91d12093f8 Change some naming of functions
Jonatan Werpers <jonatan@werpers.com>
parents: 869
diff changeset
15 function S = forcingSetup(diffOp, penalties, bcs, S_sign)
869
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
16 default_arg('S_sign', 1);
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
17
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
18 assertType(bcs, 'cell');
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
19 assertIsMember(S_sign, [1, -1]);
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
20
870
fb91d12093f8 Change some naming of functions
Jonatan Werpers <jonatan@werpers.com>
parents: 869
diff changeset
21 scheme.bc.verifyFormat(bcs, diffOp);
869
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22
877
7ceaea27d944 Clean up bc.forcingSetup
Jonatan Werpers <jonatan@werpers.com>
parents: 876
diff changeset
23 [gridData, symbolicData] = parseAndSortData(bcs, penalties, diffOp);
869
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25 % Setup penalty function
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 O = spzeros(size(diffOp),1);
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
27 function v = S_fun(t)
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28 v = O;
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29 for i = 1:length(gridData)
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
30 v = v + gridData{i}.penalty*gridData{i}.func(t);
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31 end
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33 for i = 1:length(symbolicData)
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34 v = v + symbolicData{i}.penalty*symbolicData{i}.func(t, symbolicData{i}.coords{:});
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35 end
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37 v = S_sign * v;
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38 end
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39 S = @S_fun;
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
40 end
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
41
877
7ceaea27d944 Clean up bc.forcingSetup
Jonatan Werpers <jonatan@werpers.com>
parents: 876
diff changeset
42 % Go through a cell array of boundary condition specifications and return cell arrays
7ceaea27d944 Clean up bc.forcingSetup
Jonatan Werpers <jonatan@werpers.com>
parents: 876
diff changeset
43 % of structs for grid and symbolic data.
7ceaea27d944 Clean up bc.forcingSetup
Jonatan Werpers <jonatan@werpers.com>
parents: 876
diff changeset
44 function [gridData, symbolicData] = parseAndSortData(bcs, penalties, diffOp)
878
51cc7b05b4ab Fix bugs in forcingSetup and verifyFormat
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
45 gridData = {};
51cc7b05b4ab Fix bugs in forcingSetup and verifyFormat
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
46 symbolicData = {};
877
7ceaea27d944 Clean up bc.forcingSetup
Jonatan Werpers <jonatan@werpers.com>
parents: 876
diff changeset
47 for i = 1:length(bcs)
878
51cc7b05b4ab Fix bugs in forcingSetup and verifyFormat
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
48 [ok, isSymbolic, data] = parseData(bcs{i}, penalties{i}, diffOp.grid);
877
7ceaea27d944 Clean up bc.forcingSetup
Jonatan Werpers <jonatan@werpers.com>
parents: 876
diff changeset
49
7ceaea27d944 Clean up bc.forcingSetup
Jonatan Werpers <jonatan@werpers.com>
parents: 876
diff changeset
50 if ~ok
7ceaea27d944 Clean up bc.forcingSetup
Jonatan Werpers <jonatan@werpers.com>
parents: 876
diff changeset
51 continue % There was no data
7ceaea27d944 Clean up bc.forcingSetup
Jonatan Werpers <jonatan@werpers.com>
parents: 876
diff changeset
52 end
7ceaea27d944 Clean up bc.forcingSetup
Jonatan Werpers <jonatan@werpers.com>
parents: 876
diff changeset
53
7ceaea27d944 Clean up bc.forcingSetup
Jonatan Werpers <jonatan@werpers.com>
parents: 876
diff changeset
54 if isSymbolic
878
51cc7b05b4ab Fix bugs in forcingSetup and verifyFormat
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
55 symbolicData{end+1} = data;
877
7ceaea27d944 Clean up bc.forcingSetup
Jonatan Werpers <jonatan@werpers.com>
parents: 876
diff changeset
56 else
878
51cc7b05b4ab Fix bugs in forcingSetup and verifyFormat
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
57 gridData{end+1} = data;
877
7ceaea27d944 Clean up bc.forcingSetup
Jonatan Werpers <jonatan@werpers.com>
parents: 876
diff changeset
58 end
7ceaea27d944 Clean up bc.forcingSetup
Jonatan Werpers <jonatan@werpers.com>
parents: 876
diff changeset
59 end
7ceaea27d944 Clean up bc.forcingSetup
Jonatan Werpers <jonatan@werpers.com>
parents: 876
diff changeset
60 end
7ceaea27d944 Clean up bc.forcingSetup
Jonatan Werpers <jonatan@werpers.com>
parents: 876
diff changeset
61
876
93489ddb73e8 Merge with default
Jonatan Werpers <jonatan@werpers.com>
parents: 870
diff changeset
62 function [ok, isSymbolic, dataStruct] = parseData(bc, penalty, grid)
869
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
63 if ~isfield(bc,'data') || isempty(bc.data)
876
93489ddb73e8 Merge with default
Jonatan Werpers <jonatan@werpers.com>
parents: 870
diff changeset
64 isSymbolic = [];
93489ddb73e8 Merge with default
Jonatan Werpers <jonatan@werpers.com>
parents: 870
diff changeset
65 dataStruct = struct();
869
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
66 ok = false;
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
67 return
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
68 end
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
69 ok = true;
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
70
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
71 nArg = nargin(bc.data);
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
72
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
73 if nArg > 1
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
74 % Symbolic data
876
93489ddb73e8 Merge with default
Jonatan Werpers <jonatan@werpers.com>
parents: 870
diff changeset
75 isSymbolic = true;
869
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
76 coord = grid.getBoundary(bc.boundary);
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
77 dataStruct.penalty = penalty;
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
78 dataStruct.func = bc.data;
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
79 dataStruct.coords = num2cell(coord, 1);
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
80 else
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
81 % Grid data
876
93489ddb73e8 Merge with default
Jonatan Werpers <jonatan@werpers.com>
parents: 870
diff changeset
82 isSymbolic = false;
869
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
83 dataStruct.penalty = penalty;
878
51cc7b05b4ab Fix bugs in forcingSetup and verifyFormat
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
84 dataStruct.func = bc.data;
869
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
85 end
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
86 end