%--------------------------------------------------------------------------
% PURPOSE
% TIMO_Multifiber - DYNAMIC - DYSBAC
%
%--------------------------------------------------------------------------
% REFERENCES
% Chaymaa LEJOUAD
% 16-09-2017
%--------------------------------------------------------------------------
% COMMENTS
%
%
%
%--------------------------------------------------------------------------
% MIT License
%
% Copyright (c) 2018 Benjamin Richard
%
% Permission is hereby granted, free of charge, to any person obtaining a
% copy of this software and associated documentation files (the "Software
% "), to deal in the Software without restriction, including without
% limitation the rights to use, copy, modify, merge, publish, distribute,
% sublicense, and/or sell copies of the Software, and to permit persons
% to whom the Software is furnished to do so, subject to the following
% conditions:
%
% The above copyright notice and this permission notice shall be included
% in all copies or substantial portions of the Software.
%
% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
% OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
% IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
% CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
% TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
% SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
%--------------------------------------------------------------------------
%% Clearing off
%% Global variables
global ME TP
%% Definition of the section
FILE = '101_1.mail';
ME = INPUT.ACQU(FILE,'MAIL');
%% Definition of the model - cross section scale
MO1 = MODEL('SBET' ,'MECHANICS','ELASTICITY','ISOTROPIC','DAMAGE','MAZARS','QUAS');
MO2 = MODEL('SAINF','MECHANICS','ELASTICITY','ISOTROPIC','PLASTICITY','VONMISES','POJS');
MO3 = MODEL('SASUP','MECHANICS','ELASTICITY','ISOTROPIC','PLASTICITY','VONMISES','POJS');
MOT = [MO1 [MO2 MO3]];
%% Definition of the materials - cross section scale
MA1 = CHAMELEM.MATE(MO1,'youn',36000e6,'nu',0.2,'rho',...
2500,'ay',0.83,'az',0.83,'at',0.8,'k0',1.0e-4,'bt',12000,...
'beta',1.06,'ac',1.2,'bc',1500);
MA2 = CHAMELEM.MATE(MO2,'youn',200000e6,'nu',0.3,'rho',...
7100,'sect',pi*0.012^2/4,'sigy',500e6,'K',0.01*210000e6,'ay',0.83);
MA3 = CHAMELEM.MATE(MO3,'youn',200000e6,'nu',0.3,'rho',...
7100,'sect',pi*0.012^2/4,'sigy',500e6,'K',0.01*210000e6,'ay',0.83);
MAT = [MA1 [MA2 MA3]];
%% Definition of the beam
FILE = '101_2.mail';
ME = INPUT.ACQU(FILE,'MAIL');
%% Definition of the model
MOB1 = MODEL('LPOUTRE','MECHANICS','ELASTICITY','SECTION','PLASTICITY',...
'SECTION','TIMO');
MOBT = MOB1;
%% Topology
TP = TOPOLOGY(MOBT);
%% Definition of the material
MAB1 = CHAMELEM.MATE(MOB1,'mods',MOT,'mats',MAT);
MABT = MAB1;
%% Stiffness matrix
RIG1 = MATRICE('STIFF',MOB1,MAB1);
%% Boundary conditions
CL1 = MATRICE('DIRI','P1G',1,2);
CL2 = MATRICE('DIRI','P1D',2);
CL3= MATRICE('DIRI','LPOUTRE',3,4,5);
CLT = [CL1 [CL2 CL3]];
%% Computation of the mass matrix
MAS = MATRICE('MASS',MOBT,MABT);
MAD1 = MATRICE('MADD','PVERIN2',[1 2 3],180./3);
MAD2 = MATRICE('MADD','PVERIN1',[1 2 3],180./3);
MAD = [MAD1 MAD2];
%% MODAL
PB2 = PROBLEM('model',MOBT,'mater',MABT,'diric',CLT,'solve_type','MODAL','lumped_mass',MAD);
SOL2 = SOLVE(PB2);
%%MASS_TOT
MASTO = [MAS [MAD1 MAD2]];
%% Definition of a prescribed displacement
FOU = CHPOINT('LABEL','LPOUTRE',2,-9.81/5.);
%% Equivalent force field
FO1 = MASTO * FOU;
%% Loading
EV1 = EVOL([0 1],[0 1],'Time','Displacement (m)');
CHT = TIMELOAD(FO1,EV1,'MECA');
%% Static analysis
PB1 = PROBLEM('model',MOBT,'mater',MABT,'diric',CLT,'loadt',CHT,'comp_time',0:0.01:1,...
'solve_type','DYNAMIC','lumped_mass',MAD);
SOL = SOLVE(PB1);
EV_OUT_D = EVOL.TIME(SOL,'displacement','P0',2);
plot(EV_OUT_D);
% Reference results (Cast3M)
ref = ...
[ 0.0000 0.0000
1.00000E-02 -4.65572E-07
2.00000E-02 -2.33076E-06
3.00000E-02 -5.55792E-06
4.00000E-02 -8.70562E-06
5.00000E-02 -1.04188E-05
6.00000E-02 -1.08119E-05
7.00000E-02 -1.13623E-05
8.00000E-02 -1.33805E-05
9.00000E-02 -1.66719E-05
0.10000 -1.97302E-05
0.11000 -2.12896E-05
0.12000 -2.16266E-05
0.13000 -2.22715E-05
0.14000 -2.44426E-05
0.15000 -2.77834E-05
0.16000 -3.07407E-05
0.17000 -3.21499E-05
0.18000 -3.24430E-05
0.19000 -3.31961E-05
0.20000 -3.55140E-05
0.21000 -3.88929E-05
0.22000 -4.17359E-05
0.23000 -4.30008E-05
0.24000 -4.32632E-05
0.25000 -4.41349E-05
0.26000 -4.65957E-05
0.27000 -4.99965E-05
0.28000 -5.27178E-05
0.29000 -5.38412E-05
0.30000 -5.40905E-05
0.31000 -5.50871E-05
0.32000 -5.76869E-05
0.33000 -6.10932E-05
0.34000 -6.36852E-05
0.35000 -6.46737E-05
0.36000 -6.49238E-05
0.37000 -6.60551E-05
0.38000 -6.87843E-05
0.39000 -7.21839E-05
0.40000 -7.46365E-05
0.41000 -7.55007E-05
0.42000 -7.57645E-05
0.43000 -7.70381E-05
0.44000 -7.98879E-05
0.45000 -8.32653E-05
0.46000 -8.55741E-05
0.47000 -8.63209E-05
0.48000 -8.66158E-05
0.49000 -8.80342E-05
0.50000 -9.09976E-05
0.51000 -9.43360E-05
0.52000 -9.64980E-05
0.53000 -9.71368E-05
0.54000 -9.74770E-05
0.55000 -9.90452E-05
0.56000 -1.02110E-04
0.57000 -1.05397E-04
0.58000 -1.07407E-04
0.59000 -1.07951E-04
0.60000 -1.08349E-04
0.61000 -1.10071E-04
0.62000 -1.13223E-04
0.63000 -1.16446E-04
0.64000 -1.18302E-04
0.65000 -1.18763E-04
0.66000 -1.19233E-04
0.67000 -1.21108E-04
0.68000 -1.24339E-04
0.69000 -1.27482E-04
0.70000 -1.29186E-04
0.71000 -1.29575E-04
0.72000 -1.30131E-04
0.73000 -1.32158E-04
0.74000 -1.35453E-04
0.75000 -1.38506E-04
0.76000 -1.40056E-04
0.77000 -1.40390E-04
0.78000 -1.41041E-04
0.79000 -1.43221E-04
0.80000 -1.46565E-04
0.81000 -1.49515E-04
0.82000 -1.50916E-04
0.83000 -1.51207E-04
0.84000 -1.51966E-04
0.85000 -1.54293E-04
0.86000 -1.57674E-04
0.87000 -1.60510E-04
0.88000 -1.61766E-04
0.89000 -1.62027E-04
0.90000 -1.62906E-04
0.91000 -1.65375E-04
0.92000 -1.68777E-04
0.93000 -1.71491E-04
0.94000 -1.72606E-04
0.95000 -1.72855E-04
0.96000 -1.73859E-04
0.97000 -1.76467E-04
0.98000 -1.79873E-04
0.99000 -1.82457E-04
1.0000 -1.83438E-04];
hold on
plot(ref(:,1),ref(:,2),'go')
legend('CastLab-TIMO','Cast3M','Location','Best')
close all
%% Non regression test
if abs(EV_OUT_D.ordo(end) - ref(end,2))/ref(end,2) > 1.0e-3||...
abs((SOL2.eigenfrequency(1) - 18.723)/18.723) > 1.0e-3 ||...
abs((SOL2.eigenfrequency(2) - 73.305)/73.305)> 1.0e-3||...
abs((SOL2.eigenfrequency(3) - 189.77)/189.77) > 1.0e-3
error('TEST IS NOT SUCCESSFUL')
else
disp('---------------------------------')
disp('0101_INCR_DYNAMIC_MULTIFIBER_TIMO')
disp('TEST IS SUCCESSFUL')
disp('---------------------------------')
end