File: test_patch.m

package info (click to toggle)
mwrap 1.2.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 980 kB
  • sloc: cpp: 3,271; ansic: 856; makefile: 252; lex: 233; sh: 2
file content (63 lines) | stat: -rw-r--r-- 1,636 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
% test_mesh3.m
%   Test MWrap interface to mesh data structure.
%
% Copyright (c) 2007  David Bindel
% See the file COPYING for copying permissions

init;

mobj = Mesh_create(2, 2, 4);
try
  fprintf('-- Four element elastic patch test --\n');

  % Nodes:
  %       1     2     3     4     5     6     7     8     9
  x = [ 0.0,  4.0, 10.0,  0.0,  5.5, 10.0,  0.0,  4.2, 10.0;
        0.0,  0.0,  0.0,  4.5,  5.5,  5.0, 10.0, 10.0, 10.0];

  % Boundary codes and values
  bc =[   1,    0,    0,    1,    0,    0,    1,    0,    0;
          1,    0,    0,    0,    0,    0,    0,    0,    0];
  bv =[   0,    0,  2.5,    0,    0,  5.0,    0,    0,  2.5,
          0,    0,    0,    0,    0,    0,    0,    0,    0];

  % Elements:
  %      1  2  3  4
  ix = [ 1, 2, 4, 5 ;
         2, 3, 5, 6 ;
         5, 6, 8, 9 ;
         4, 5, 7, 8 ];

  % Set up problem mesh
  material = Mesh_add_elastic2d(mobj, 1000.0, 0.25, 'plane strain');
  Mesh_load(mobj, material, x, ix);
  Mesh_initialize(mobj);

  % Set boundary conditions
  Mesh_set_bc(mobj, bc);
  Mesh_set_bv(mobj, bv);
  Mesh_assign_ids(mobj);
  
  % Assemble stiffness and force
  K = Mesh_assemble_K(mobj);
  F = Mesh_assemble_F(mobj);

  % Solve for the reduced displacement
  u = -K\F;

  % Patch test should recover linear fields -- check that it does
  uu = Mesh_u(mobj);
  resid = uu - (uu/x)*x;
  fprintf('Patch test residual: %g\n', norm(resid));

  % Assemble residual and make sure it's zero
  Mesh_set_ur(mobj, u);
  RR = Mesh_assemble_F(mobj);
  fprintf('Reported residual force: %g\n', norm(RR));

catch
  
  fprintf('Error: %s\n', lasterr);
  
end
Mesh_delete(mobj);