90 lines
2.7 KiB
Mathematica
90 lines
2.7 KiB
Mathematica
|
|
function SolveModel
|
|||
|
|
% <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫģ<EFBFBD><EFBFBD>
|
|||
|
|
% <EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫģ<EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
% 1. <EFBFBD><EFBFBD><EFBFBD>㵥Ԫ<EFBFBD>նȾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>նȾ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
% 2. <EFBFBD><EFBFBD><EFBFBD>㵥Ԫ<EFBFBD>ĵ<EFBFBD>Ч<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
% 3. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>նȾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
% 4. <EFBFBD><EFBFBD><EFBFBD>ⷽ<EFBFBD><EFBFBD><EFBFBD>飬<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
% 5. <EFBFBD><EFBFBD><EFBFBD>㵥ԪӦ<EFBFBD><EFBFBD><EFBFBD>ͽڵ<EFBFBD>Ӧ<EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
global gNode gElement gMaterial gBC1 gK gDelta gNodeStress gElementStress gDF
|
|||
|
|
|
|||
|
|
% step 1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>նȾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
[node_number,dummy] = size( gNode ) ;
|
|||
|
|
gK = sparse( node_number * 2, node_number * 2 ) ;
|
|||
|
|
f = sparse( node_number * 2, 1 ) ;
|
|||
|
|
|
|||
|
|
% step 2. <EFBFBD><EFBFBD><EFBFBD>㵥Ԫ<EFBFBD>նȾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>նȾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
[element_number, dunmmy] = size( gElement ) ;
|
|||
|
|
for ie=1:1:element_number
|
|||
|
|
k = StiffnessMatrix( ie ) ;
|
|||
|
|
AssembleStiffnessMatrix( ie, k ) ;
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
% step 3. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>泬<EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>Ч<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
[df_number,dummy] = size( gDF ) ;
|
|||
|
|
for idf = 1:1:df_number
|
|||
|
|
enf = EquivalentNodeForce( gDF(idf,1), gDF(idf,2), gDF(idf,3), gDF(idf,4) ) ;
|
|||
|
|
i = gElement( gDF(idf,1), 1 ) ;
|
|||
|
|
j = gElement( gDF(idf,1), 2 ) ;
|
|||
|
|
m = gElement( gDF(idf,1), 3 ) ;
|
|||
|
|
f( (i-1)*2+1 : (i-1)*2+2 ) = f( (i-1)*2+1 : (i-1)*2+2 ) + enf( 1:2 ) ;
|
|||
|
|
f( (j-1)*2+1 : (j-1)*2+2 ) = f( (j-1)*2+1 : (j-1)*2+2 ) + enf( 3:4 ) ;
|
|||
|
|
f( (m-1)*2+1 : (m-1)*2+2 ) = f( (m-1)*2+1 : (m-1)*2+2 ) + enf( 5:6 ) ;
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
% step 4. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸնȾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ó˴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
[bc_number,dummy] = size( gBC1 ) ;
|
|||
|
|
for ibc=1:1:bc_number
|
|||
|
|
n = gBC1(ibc, 1 ) ;
|
|||
|
|
d = gBC1(ibc, 2 ) ;
|
|||
|
|
m = (n-1)*2 + d ;
|
|||
|
|
f(m) = gBC1(ibc, 3)* gK(m,m) * 1e20 ;
|
|||
|
|
gK(m,m) = gK(m,m) * 1e20 ;
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
% step 5. <EFBFBD><EFBFBD><EFBFBD>ⷽ<EFBFBD><EFBFBD><EFBFBD>飬<EFBFBD>õ<EFBFBD><EFBFBD>ڵ<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
gDelta = gK \ f ;
|
|||
|
|
|
|||
|
|
% step 6. <EFBFBD><EFBFBD><EFBFBD>㵥ԪӦ<EFBFBD><EFBFBD>
|
|||
|
|
gElementStress = zeros( element_number, 6) ;
|
|||
|
|
for ie=1:element_number
|
|||
|
|
es = ElementStress( ie ) ;
|
|||
|
|
gElementStress( ie, : ) = es ;
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
% % step 7. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>Ӧ<EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽڵ<EFBFBD><EFBFBD><EFBFBD>Ȩƽ<EFBFBD><EFBFBD>)
|
|||
|
|
gNodeStress = zeros( node_number, 6 ) ;
|
|||
|
|
for i=1:node_number
|
|||
|
|
S = zeros( 1, 3 ) ;
|
|||
|
|
A = 0 ;
|
|||
|
|
for ie=1:1:element_number
|
|||
|
|
for k=1:1:3
|
|||
|
|
if i == gElement( ie, k )
|
|||
|
|
area= ElementArea( ie ) ;
|
|||
|
|
S = S + gElementStress(ie,1:3 ) * area ;
|
|||
|
|
A = A + area ;
|
|||
|
|
break ;
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
gNodeStress(i,1:3) = S / A ;
|
|||
|
|
gNodeStress(i,6) = 0.5*sqrt( (gNodeStress(i,1)-gNodeStress(i,2))^2 + 4*gNodeStress(i,3)^2 ) ;
|
|||
|
|
gNodeStress(i,4) = 0.5*(gNodeStress(i,1)+gNodeStress(i,2)) + gNodeStress(i,6) ;
|
|||
|
|
gNodeStress(i,5) = 0.5*(gNodeStress(i,1)+gNodeStress(i,2)) - gNodeStress(i,6) ;
|
|||
|
|
end
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|