image thumbnail
hooke.m
% Example: hooke
% ~~~~~~~~~~~~~~
% This program calculates the stresses or
% strains in a plate using Hooke's law.
%
% Data is defined in the declaration statements
% below, where:
%
% Emod     - modulus of elasticity
% mu       - Poisson's ratio
% ModRigid - modulus of rigidity
% Length   - vector containing Lx, Ly, Lz
% Stress   - vector containing stresses
% Strain   - vector containing strains
%
% NOTES: 1) for Emod, mu, ModRigid only two
%           values are required.  Set the
%           unknown one to zero and the program
%           will calculate this value.
%        2) if stresses are provided, set the
%           Strain input to empty vector. If
%           strains are provided, set the
%           Stress input to empty vector.
%
% User m functions required: none
%----------------------------------------------

clear;
%...Input definitions
Problem=3;
if Problem == 1
  %...Strain, E, G given
  Emod=30e6; mu=0; ModRigid=12e6;
  Length=[96 144 0.25];
  Stress=[]; Strain=[-.0008 -.0006 0];
elseif Problem == 2
  %...Stress, E, mu given
  Emod=2e11; mu=0.3; ModRigid=0;
  Length=[1e-1 6e-3 7.5e-2];
  Stress=[1.5e8 0 1e8]; Strain=[];
elseif Problem == 3
  %...Stress, G, mu given
  Emod=0; mu=1/3; ModRigid=18.75e9;
  Length=[0.1 0.04 0.025];
  Stress=[-1.8e8 -6e7 0]; Strain=[];
end

%...Calculate if necessary
if Emod == 0
  Emod=2*ModRigid*(1+mu);
elseif mu == 0
  mu=(Emod/(2*ModRigid))-1;
elseif ModRigid == 0
  ModRigid=Emod/(2*(1+mu));
end

%...Calculate stresses or strains
if length(Stress) ~= 0
  %...Find the strains
  Strain(1)=1/Emod* ...
    (Stress(1)-mu*(Stress(2)+Stress(3)));
  Strain(2)=1/Emod* ...
    (Stress(2)-mu*(Stress(1)+Stress(3)));
  Strain(3)=1/Emod* ...
    (Stress(3)-mu*(Stress(1)+Stress(2)));
elseif length(Strain) ~= 0
  %...Find the stresses
  fact=Emod/((1+mu)*(1-2*mu));
  Stress(1)=fact*((1-mu)*Strain(1)+ ...
            mu*Strain(2)+mu*Strain(3));
  Stress(2)=fact*((1-mu)*Strain(2)+ ...
            mu*Strain(1)+mu*Strain(3));
  Stress(3)=fact*((1-mu)*Strain(3)+ ...
            mu*Strain(1)+mu*Strain(2));
end

%...Change in lengths and final lengths
Delta=Strain.*Length; FLength=Length+Delta;

%...Area calculations
Area_xy=Length(1)*Length(2);
Area_xz=Length(1)*Length(3);
Area_yz=Length(2)*Length(3);
FArea_xy=FLength(1)*FLength(2);
FArea_xz=FLength(1)*FLength(3);
FArea_yz=FLength(2)*FLength(3);
DArea_xy=FArea_xy-Area_xy;
DArea_xz=FArea_xz-Area_xz;
DArea_yz=FArea_yz-Area_yz;

%...Volume calculations
Volume=prod(Length); FVolume=prod(FLength);
DVolume=FVolume-Volume;

%...Dilatation
Dilat=(1-2*mu)/Emod*sum(Stress); 

fprintf( ...
  '\n\nApplication of Hooke''s Law to Plates');
fprintf( ...
    '\n------------------------------------');
fprintf('\n\nConstants:');
fprintf('\n  Modulus of Elasticity: %g', Emod);
fprintf('\n  Modulus of Rigidity:   %g', ...
        ModRigid);
fprintf('\n  Poisson''s ratio:       %g', mu);
fprintf('\n\nStresses:');
fprintf(  '\n  Sigma-x: %g',Stress(1));
fprintf(  '\n  Sigma-y: %g',Stress(2));
fprintf(  '\n  Sigma-z: %g',Stress(3));
fprintf('\n\nStrains:');
fprintf(  '\n  Epsilon-x: %g',Strain(1));
fprintf(  '\n  Epsilon-y: %g',Strain(2));
fprintf(  '\n  Epsilon-z: %g',Strain(3));
fprintf('\n\nLengths:');
fprintf(  '\n  Lx (original): %g',Length(1));
fprintf(  '\n  Ly (original): %g',Length(2));
fprintf(  '\n  Lz (original): %g',Length(3));
fprintf(  '\n  Lx (final):    %g',FLength(1));
fprintf(  '\n  Ly (final):    %g',FLength(2));
fprintf(  '\n  Lz (final):    %g',FLength(3));
fprintf(  '\n  Lx (delta):    %g',Delta(1));
fprintf(  '\n  Ly (delta):    %g',Delta(2));
fprintf(  '\n  Lz (delta):    %g',Delta(3));
fprintf('\n\nAreas:');
fprintf(  '\n  A-xy (original): %g',Area_xy);
fprintf(  '\n  A-xz (original): %g',Area_xz);
fprintf(  '\n  A-yz (original): %g',Area_yz);
fprintf(  '\n  A-xy (final):    %g',FArea_xy);
fprintf(  '\n  A-xz (final):    %g',FArea_xz);
fprintf(  '\n  A-yz (final):    %g',FArea_yz);
fprintf(  '\n  A-xy (delta):    %g',DArea_xy);
fprintf(  '\n  A-xz (delta):    %g',DArea_xz);
fprintf(  '\n  A-yz (delta):    %g',DArea_yz);
fprintf('\n\nVolumes:');
fprintf(  '\n  Original: %g',Volume);
fprintf(  '\n  Final:    %g',FVolume);
fprintf(  '\n  Delta:    %g',DVolume);
fprintf('\n\nDilatation: %g \n',Dilat);

Contact us at files@mathworks.com