⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fem_run.m

📁 结构力学中的有限元例子,包含了7个分类文件夹
💻 M
字号:
function [obj,resp] = fem_run (in_data,type_analysis)

% =============================================================================
% FEM analysis
% Anton Zaicenco <anton.z@softhome.net>, started: Dec 2004
% updated: May 2006
% =============================================================================

% DATA STRUCTURES:
% obj:
%     - data about the the analyzed object: K, M
% in_data:
%     - input data: nodes, elements, material properties, constrains, etc.
% resp:
%     - structural response: resp.static.D & resp.dynamic.[DYN_D DYN_V DYN_A]

% assembling global stiffness and mass matrices ===============================
% dofN - dof's per node
if in_data.EL(1,2)==0 | in_data.EL(1,2)==1 | in_data.EL(1,2)==2 dofN=3; end; % 2D-beam
if in_data.EL(1,2)==3 dofN = 6; end; % 3D-beam  elements
if in_data.EL(1,2)==4 dofN = 2; end; % CST  elements
if in_data.EL(1,2)==5 dofN = 2; end; % CSQ  elements
if in_data.EL(1,2)==6 dofN = 3; end; % "6" - 3D-BRICK element (8-nodes)
if in_data.EL(1,2)==9 dofN = 3; end; % BCIZ elements

dof_ = size(in_data.ND,1)*dofN; % total dof
[obj.Ksys.Kgl, obj.M]    = K_assembly (in_data);
[obj.Ksys.Kglobal,L,Rch] = K_CON (dofN, dof_, obj, in_data);

% ========================== STATIC ANALYSIS ==================================
if type_analysis(1)==1
    if size(in_data.LOAD_)~=0
        [LVEC] = LOAD_V (dofN, dof_, in_data, L);    % form the load vector
        displacements = inv(obj.Ksys.Kglobal)*LVEC'; % compute displacements
        resp.static.D(L) = displacements;
        SF_ = zeros(size(in_data.ND,1), dofN+1);
        SF_(1:size(in_data.ND,1),1)=[1:size(in_data.ND,1)]';
        for i=1:size(in_data.ND,1)
            SF_(i,dofN-(dofN-1)+1:dofN+1) = [resp.static.D(i*dofN-(dofN-1):i*dofN)];
        end;
        save FEM_STATIC_DISPL.txt SF_ -ascii;
        disp('--- Static Displacements saved to "FEM_STATIC_DISPL.txt": [elem# d1 ... dn]');
        clear displacements
        plot_fem_static(in_data, resp);
    end;
end;
% =============================== END =========================================

% ========================== DYNAMIC ANALYSIS =================================
if type_analysis(2)==1
    if size(in_data.dynam.TIMEH)~=0
        if in_data.EL(1,2)==9 | in_data.EL(1,2)==4 | in_data.EL(1,2)==5 | ...
                in_data.EL(1,2)==3 | in_data.EL(1,2)==6 | in_data.EL(1,2)==0 ...
                | in_data.EL(1,2)==1 | in_data.EL(1,2)==2
            [resp.dynamic.DYN_D, resp.dynamic.DYN_V, resp.dynamic.DYN_A, t] = ...
                dyn_FEM ( in_data, obj, L);
        end;
        zdd    = load(in_data.dynam.TIMEH);
        RESP_ = resp.dynamic.DYN_A(:,in_data.dynam.TIMEHPL(1));
        [FT_T,omega] = FFTsig (zdd(1:(end-1)),RESP_,abs(t(2)-t(1)));
        save FEM_DYN_RESP.txt RESP_ -ascii;
        disp('--- Dynamic response saved to "FEM_DYN_RESP.txt"');
    end;
end;
% =============================== END =========================================

% ========================== MODAL ANALYSIS ===================================
if type_analysis(3)==1
    if size(in_data.dynam.MODA)~=0 & size(in_data.dynam.DAMP_C)~=0
        if in_data.EL(1,2)==4 | in_data.EL(1,2)==5 | in_data.EL(1,2)==3 | in_data.EL(1,2)==6 | ...
                in_data.EL(1,2)==0 | in_data.EL(1,2)==1 | in_data.EL(1,2)==2 | in_data.EL(1,2)==9
            [E_Vec_ok, wn] = modal_analysis ( obj , L, in_data);
            i = size(E_Vec_ok);
            plot_modal_shape(in_data,E_Vec_ok(:,i(2)+1-in_data.dynam.MODA)',dof_,33); % plot mode
            mode_T_sec = 2*pi/wn(in_data.dynam.MODA);
            title(['Mode shape:  '  num2str(in_data.dynam.MODA) '.  T =  ' num2str(mode_T_sec) '  s']);
            disp('--------- MODAL ANALYSIS DONE ---------'); resp.modal='';
        end;
    end;
end;
% =============================== END =========================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -