Extract data from countour and add two (or more) contours together.

2 views (last 30 days)
My problem is thus:
I have a mesh onto which I 'plot' a function.
That is, for every point x,y, I have a value Q
What I want to do is extract the value of Q for every x,y and ADD (superimpose) it to the value of Q for every x,y .
My code plots a stress field centered at at point (0,0) then it is moved a length dx and dy and an appropratiate step length. Then this is plotted.
If I have more than one point, I wish to superimpose the data.
i.e. I wish to set up a loop where the original position is kept, then another stress field is generated at different dx, dy, and then the two are added.
regards William
u = 80000; % Shear modulus, measure in Mpa nu = 0.3; % Poissions ratio of material b = .00025; % Burgers Vector measured in microns
[x,y]=meshgrid(-100:1:100,-100:1:100); % area of grid to which stress field is mapped
angle = 54.7; % angle of slip plane in degrees
theta = angle*pi/180; % angle converted to radians
steplength = 400;
interplanarspacing = 100*b; % spacing between slip planes is about 100 b
x2 = (x.*cos(theta) + y.*sin(theta));% rotates and displaces dislocation
y2 = (y.*cos(theta) - x.*sin(theta));%; rotates and displaces dislocation
QxxPRIME = -(u .* b / (2.*pi .* (1-nu))) .* ((y2 .* (3.*x2.^2 +y2.^2)) ./ ((x2.^2 + y2.^2).^2)); % Qyy stress PRIME
QyyPRIME = (u .* b / (2.*pi .* (1-nu))) .* ((y2 .* (x2.^2 -y2.^2)) ./ ((x2.^2 + y2.^2).^2)); % Qyy stress PRIME
QxyPRIME = (u .* b / (2.*pi .* (1-nu))) .* ((x2 .* (x2.^2 -y2.^2)) ./ ((x2.^2 + y2.^2).^2)); % Qxy stress PRIME
QxxPRIME(QxxPRIME<-.5) = -.5; % erase low value
QxxPRIME(QxxPRIME>.5) = .5; % erase high value
dx = steplength.*cos(theta);
dy = steplength.*sin(theta);
y = y+dy;
x = x+dx;
caxis([-0.5,0.5]); % set the legend limit
contourf(x(1,:),y(:,1)',QxxPRIME)
axis equal

Accepted Answer

Thorsten
Thorsten on 7 Jul 2015
Edited: Thorsten on 7 Jul 2015
The idea is to compute a new QxxPRIME for the different offsets and add them to QxxPRIME0 for zero offset:
u = 80000; % Shear modulus, measure in Mpa
nu = 0.3; % Poissions ratio of material
b = .00025; % Burgers Vector measured in microns
N = 500; % grid size
[x,y]=meshgrid(-N:1:N,-N:1:N); % area of grid to which stress field is mapped
angle = 54.7; % angle of slip plane in degrees
theta = angle*pi/180; % angle converted to radians
steplength = 400;
interplanarspacing = 100*b; % spacing between slip planes is about 100 b
Nsteps = 10;
c = -(u*b/(2*pi*(1 - nu))); % constants independent of loop variable sl
for sl = linspace(0, steplength, Nsteps)
dx = sl.*cos(theta);
dy = sl.*sin(theta);
x2 = x.*cos(theta) + y.*sin(theta) + dx;% rotates and displaces dislocation
y2 = y.*cos(theta) - x.*sin(theta) + dy;%; rotates and displaces dislocation
QxxPRIME = c*(y2.*(3*x2.^2 + y2.^2))./((x2.^2 + y2.^2).^2); % Qyy stress PRIME
QxxPRIME(QxxPRIME<-.5) = -.5; % erase low value
QxxPRIME(QxxPRIME>.5) = .5; % erase high value
subplot(1,2,1)
contourf(x,y,QxxPRIME)
caxis([-0.5,0.5])
axis square
title(['Contour at Steplength ' num2str(sl)])
if sl == 0
QxxPRIME0 = QxxPRIME;
else
QxxPRIME = QxxPRIME0 + QxxPRIME;
end
subplot(1,2,2)
contourf(x,y,QxxPRIME)
caxis([-0.5,0.5])
axis square
title(['Steplength 0 + ' num2str(sl)])
pause
end
  6 Comments
Thorsten
Thorsten on 7 Jul 2015
Edited: Thorsten on 7 Jul 2015
The field is the same because the arguments x and y are just rotated and displaced, i.e., moved in the plane. If a function(x,y) is zero for (0,0), then the function f(x+dx, y+dy) is zero at x = -dx, y = -dy.
William White
William White on 7 Jul 2015
Edited: William White on 7 Jul 2015
so would it be possible to just plot two fucntions; one centred at 10,10 and another at say, 12,10? So that indvidually, they look exactly the same, but superimposed, give a new field?
Also, I think that by adding dx to the rotation, it has broken the correct working of the code?
For example, if my steplength is, say, 10; then for the stress field to move correctly, it moves 10 units along a 54.7 incline. So dx is 5.7 and dy is 8.2; that is, if the steplength is zero, then the origin of the stress field is at 0,0; if the steplength is 10, the new orign is at 5.7, 8.2.
I took the liberty of removing the loop from your code to see what was going on with the movement.
kind regards
u = 80000; % Shear modulus, measure in Mpa
nu = 0.3; % Poissions ratio of material
b = .00025; % Burgers Vector measured in microns
N = 50; % grid size
[x,y]=meshgrid(-N:.1:N,-N:.1:N); % area of grid to which stress field is mapped
angle = 54.7; % angle of slip plane in degrees
theta = angle*pi/180; % angle converted to radians
steplength = -10;
interplanarspacing = 100*b; % spacing between slip planes is about 100 b
Nsteps = 30;
c = -(u*b/(2*pi*(1 - nu))); % constants independent of loop variable sl
dx = steplength*cos(theta);
dy = steplength*sin(theta);
x2 = (x.*cos(theta) + y.*sin(theta)) +dx;% rotates and displaces dislocation
y2 = (y.*cos(theta) - x.*sin(theta)) +dy;%; rotates and displaces dislocation
QxxPRIME = c*(y2.*(3*x2.^2 + y2.^2))./((x2.^2 + y2.^2).^2); % Qyy stress PRIME
QxxPRIME(QxxPRIME<-.5) = -.5; % erase low value
QxxPRIME(QxxPRIME>.5) = .5; % erase high value
contourf(x,y,QxxPRIME)
caxis([-0.5,0.5])
axis equal
title('Contour at Steplength ')
regards Willam

Sign in to comment.

More Answers (0)

Categories

Find more on Stress and Strain in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!