forked from dplab/MechMet
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPostProcess.m
61 lines (38 loc) · 1.41 KB
/
PostProcess.m
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
function [epsilon,epsilon_ave,sigma,sigma_ave,dsigma]=PostProcess(iele,rotated_rmatrix,nnpe,nqptv,wtqp,np,x,y,z,sfac,dndxi,dndet,dndze,u)
% Calculate the stress and strain tensors from the displacement field
% also computes average by integrating over the element
detj = zeros(1,nqptv);
dndx = zeros(nnpe,nqptv);
dndy = zeros(nnpe,nqptv);
dndz = zeros(nnpe,nqptv);
sigma = zeros(6,nqptv);
epsilon = zeros(6,nqptv);
dsigma = zeros(6,nqptv);
sigma_ave = zeros(6,1);
epsilon_ave = zeros(6,1);
elevol = 0.0;
for j=1:1:nnpe
j1=np(iele,j) ;
u_el(3*j-2,1)=u(3*j1-2);
u_el(3*j-1,1)=u(3*j1-1);
u_el(3*j,1)=u(3*j1);
end
[dndx,dndy,dndz,detj,elevol] = SFDerivatives(iele,nnpe,nqptv,wtqp,np,x,y,z,dndxi,dndet,dndze);
bigB = BigBmat(nnpe,nqptv,dndx,dndy,dndz);
% Strain from small strain matrix
for i=1:1:nqptv
epsilon_qp(:) =bigB(:,:,i)*u_el(:);
% Stress using linear elasticity
sigma_qp=rotated_rmatrix*epsilon_qp';
%deviatoric stress
trsigma = (sigma_qp(1)+sigma_qp(2)+sigma_qp(3))/3.;
meanstress = trsigma*[1;1;1;0;0;0];
dsigma_qp = sigma_qp-meanstress;
sigma(:,i) = sigma_qp(:);
dsigma(:,i) = dsigma_qp(:);
epsilon(:,i) = epsilon_qp(:);
sigma_ave(:) = sigma_ave(:)+ sigma_qp(:)*wtqp(i)*detj(i);
epsilon_ave(:) = epsilon_ave(:)+ epsilon_qp(:)*wtqp(i)*detj(i);
end
sigma_ave(:) = sigma_ave(:)/elevol;
epsilon_ave(:) = epsilon_ave(:)/elevol;