1 % script computing a velocity field
for simple gdl model by solving a
2 % laplace problem with suitable boundary conditions
4 % three components are put together:
6 % .p0...______......______......______..p1..
9 % -----------------------------------------
11 % |- = neumann 0 conditions
12 % ... dirichlet conditions: linearly decreasing pressure
14 % Bernard Haasdonk 6.7.2006
16 %%%%%%%%%%%%%%%%%%%%%%%% compute pressure
19 disp(
'setting parameters');
21 params.xrange = [-1250e-6,2250e-6]; % grid x-coordinate range
22 params.yrange = [0,200e-6]; % grid y-coordinate range
23 params.xnumintervals = 497; % number of grid cells in x-direction:
25 params.ynumintervals = 41; % number of grid cells in y-direction
27 % set upper boundary to dirichlet, middle of upper and the lower boundary
28 % to neuman, set left and right to neuman
29 params.bnd_rect_corner1 = [params.xrange(1) , params.yrange(2) ; ...
30 params.xrange(1)+ 500e-6 , params.yrange(2); ...
31 params.xrange(1)+ 1500e-6 , params.yrange(2); ...
32 params.xrange(1)+ 2500e-6 , params.yrange(2); ...
33 params.xrange(1) , params.yrange(1); ...
34 params.xrange(1) , params.yrange(1); ...
35 params.xrange(2) , params.yrange(1);
37 params.bnd_rect_corner1 = params.bnd_rect_corner1
' - eps;
38 params.bnd_rect_corner2 = [params.xrange(2), params.yrange(2); ...
39 params.xrange(1)+1000e-6, params.yrange(2); ...
40 params.xrange(1)+2000e-6, params.yrange(2); ...
41 params.xrange(1)+3000e-6, params.yrange(2); ...
42 params.xrange(2), params.yrange(1); ...
43 params.xrange(1), params.yrange(2); ...
44 params.xrange(2), params.yrange(2)
46 params.bnd_rect_corner2 = params.bnd_rect_corner2' + eps;
48 params.bnd_rect_index = [-1, -2, -2, -2, -2, -2, -2];
49 params.name_dirichlet_values =
'xstripes';
50 params.c_dir = [4,3,2,1];
51 % separating borders
for changing value
52 params.dir_borders = [params.xrange(1)+750e-6, ...
53 params.xrange(1)+1750e-6, ...
54 params.xrange(1)+2750e-6];
55 %params.name_dirichlet_values =
'leftright';
56 %params.c_dir_left = 1.0; % pressure left
57 %params.c_dir_right = 0.5; % pressure right
58 %params.dir_middle = params.xrange(2)/2;
60 %params.name_dirichlet_values =
'homogeneous';
62 params.name_neuman_values =
'zero';
63 %params.name_neuman_values =
'homogeneous';
66 params.show_colorbar = 1;
72 %tfn = fullfile(getenv(
'RBMATLABTEMP'),
'gdl_pressure2.mat');
73 tfn = fullfile(rbmatlabhome,
'datafunc',
'data',
'gdl_pressure2.mat');
76 p = fem_laplace(grid,params);
79 plot_vertex_data(grid,p,params);
81 % [px,py] = gradient(reshape(p,params.nx+1,params.ny+1)',...
82 % params.xrange(2)/params.nx,params.yrange(2)/params.ny);
84 % quiver(1:(params.nx+1),1:(params.ny+1),-4*px,-4*py);
86 save(tfn,'p','params');
88 disp('skipping computation of data, as gdl_pressure2.mat exists')
94 % evaluate velocity in a second grid and plot as piecewise constant
95 load(tfn,'p','params');
97 params2.xnumintervals = 350;
98 params2.ynumintervals = 50;
99 params2.xrange = params.xrange;
100 params2.yrange = params.yrange;
102 params2.show_colorbar = 1;
103 params2.no_lines = 1;
104 params2.axis_tight = 1;
107 [ux, uy] = evaluate_gradient(grid2.CX, grid2.CY, p, params);
112 %plot_element_data_sequence(grid2,[-ux,-uy],params2);
115 title('gradient on whole domain');
117 params2.xrange = [0e-6,1000e-6]; % grid x-coordinate range
118 params2.yrange = params.yrange;
119 params2.xnumintervals = 200;
121 [ux, uy] = evaluate_gradient(grid2.CX, grid2.CY,p,params);
126 %plot_element_data_sequence(grid2,[-ux,-uy],params2);
127 title('gradient on part of domain');
function r = verbose(level, message, messageId)
This function displays messages depending on a message-id and/or a level. Aditionally you can set/res...
function p = fv_plot(gridbase grid, dofs, params)
routine plotting a single fv function of fv_functions.
function p = plot_sequence(varargin)
plotting a sequence of data slices on polygonal 2d grid (constructed from params if empty) and provid...
A cartesian rectangular grid in two dimensions with axis parallel elements.