annotate surfSym.m @ 577:e45c9b56d50d feature/grids

Add an Empty grid class The need turned up for the flexural code when we may or may not have a grid for the open water and want to plot that solution. In case there is no open water we need an empty grid to plot the empty gridfunction against to avoid errors.
author Jonatan Werpers <jonatan@werpers.com>
date Thu, 07 Sep 2017 09:16:12 +0200
parents bcddbc2beef4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
521
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
1 function h = surfSym(X,Y,Z)
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2 if isvector(X) && isvector(Y)
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3 [X,Y] = meshgrid(X,Y);
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4 end
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6 V_nodes = [X(:), Y(:), Z(:)];
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 X_centers = neighbourMean(X);
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9 Y_centers = neighbourMean(Y);
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10 Z_centers = neighbourMean(Z);
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11 V_centers = [X_centers(:), Y_centers(:), Z_centers(:)];
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14 N = prod(size(X));
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15 nodeIndecies = reshape(1:N, size(X));
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
16 centerIndecies = reshape(N+(1:prod(size(X)-[1,1])), size(X) - [1,1]);
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
17
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
18 % figure()
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
19 % h = line(V_nodes(:,1),V_nodes(:,2),V_nodes(:,3));
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
20 % h.LineStyle = 'none';
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
21 % h.Marker = '.';
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22 % h = line(V_centers(:,1),V_centers(:,2),V_centers(:,3));
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
23 % h.LineStyle = 'none';
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24 % h.Marker = '.';
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25 % h.Color = Color.red;
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 % axis equal
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
27
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29 I_0 = nodeIndecies(1:end-1, 1:end-1);
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
30 I_1 = nodeIndecies(2:end, 1:end-1);
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31 I_2 = nodeIndecies(2:end, 2:end);
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32 I_3 = nodeIndecies(1:end-1, 2:end);
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33 I_C = centerIndecies;
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35 S.Vertices = [
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36 V_nodes;
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37 V_centers;
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38 ];
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
40 S.Faces = [
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
41 I_0(:), I_1(:), I_C(:);
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42 I_1(:), I_2(:), I_C(:);
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
43 I_2(:), I_3(:), I_C(:);
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
44 I_3(:), I_0(:), I_C(:);
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
45 ];
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
46
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47 % figure()
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
48 h = patch(S, 'FaceVertexCData', S.Vertices(:,3),'FaceColor','flat');
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 end
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
50
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51 % Calculate the mean of four neighbours around a patch
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
52 function M = neighbourMean(A)
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53 M = (A(1:end-1, 1:end-1) + A(2:end, 1:end-1) + A(1:end-1, 2:end) + A(2:end, 2:end))/4;
bcddbc2beef4 Add a symmetric surf
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54 end