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

📄 plot_fem_data.m

📁 结构力学中的有限元例子,包含了7个分类文件夹
💻 M
📖 第 1 页 / 共 2 页
字号:
function plot_fem_data(in_data,PND)

% plot input data files on GUI main form

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

%    if plot_bend_tri (..., A )<100 - don't plot loads & constrains
if in_data.EL(1,2)==9 plot_bend_data ( in_data, dof_, 120, PND); end; % BCIZ
if in_data.EL(1,2)==4  |  in_data.EL(1,2)==5                  % 4 - CST, 5 - CSQ
    plot_CSTQ_input(  in_data, dof_, 110, PND );
end;  
if in_data.EL(1,2)==3  plot_3Dframe_input(in_data,PND);  end;    % 3 - 3D-beam
if in_data.EL(1,2)==6  % 3D-brick
    plot_input_brick (in_data, dof_,PND);
end;
if in_data.EL(1,2)==0 | in_data.EL(1,2)==1 | in_data.EL(1,2)==2
    plot_input_2dbeam (in_data,PND);  % "0/1/2" "FF/FP/PF" 2D-beams
end;

%startup;


% -----------------------------------------------------------
function plot_input_2dbeam (in_data,PND)
% PLOT 2D BEAMS DATA
hold off;
maxX = max(in_data.ND(:,2)); minX = min(in_data.ND(:,2));
maxY = max(in_data.ND(:,3)); minY = min(in_data.ND(:,3));
labx = (maxX / 9); laby = (maxY / 9);
labx = min([labx laby]); laby = labx;
% plot loads -------

for i=1:size(in_data.LOAD_)
   node_i = find(in_data.ND(:,1)==in_data.LOAD_(i,1));
   if in_data.LOAD_(i,2)~=0 & in_data.LOAD_(i,2)>0
      plot([in_data.ND(node_i,2) in_data.ND(node_i,2)+labx],[in_data.ND(node_i,3) in_data.ND(node_i,3)],'r-',...
         'LineWidth',3); hold on;
   end;
   if in_data.LOAD_(i,2)~=0 & in_data.LOAD_(i,2)<0
      plot([in_data.ND(node_i,2) in_data.ND(node_i,2)-labx],[in_data.ND(node_i,3) in_data.ND(node_i,3)],'r-',...
         'LineWidth',3); hold on;
   end;
   if in_data.LOAD_(i,3)~=0 & in_data.LOAD_(i,3)>0
      plot([in_data.ND(node_i,2) in_data.ND(node_i,2)],[in_data.ND(node_i,3) in_data.ND(node_i,3)+laby],'r-',...
         'LineWidth',2); hold on;
   end;
   if in_data.LOAD_(i,3)~=0 & in_data.LOAD_(i,3)<0
      plot([in_data.ND(node_i,2) in_data.ND(node_i,2)],[in_data.ND(node_i,3) in_data.ND(node_i,3)-laby],'r-',...
         'LineWidth',3); hold on;
   end;
end;
% plot constrains -----
for i=1:size(in_data.CON)
   node_i = find(in_data.ND(:,1)==in_data.CON(i,1));
   if in_data.CON(i,2)==0
      plot([in_data.ND(node_i,2) in_data.ND(node_i,2)-labx],[in_data.ND(node_i,3) in_data.ND(node_i,3)],'g-',...
         'LineWidth',2); hold on;
   end;
   if in_data.CON(i,3)==0
      plot([in_data.ND(node_i,2) in_data.ND(node_i,2)],[in_data.ND(node_i,3) in_data.ND(node_i,3)-laby],'g-',...
         'LineWidth',2); hold on;
   end;
   if in_data.CON(i,4)==0
      plot([in_data.ND(node_i,2) in_data.ND(node_i,2)],[in_data.ND(node_i,3) in_data.ND(node_i,3)],'gs',...
         'LineWidth',2); hold on;
   end;
end;
axis([(minX-labx) (maxX+labx) (minY-laby) (maxY+laby)]); % plot scale

% plot data ====
dof = size(in_data.ND,1)*3; % total dof
plot(in_data.ND(:,2),in_data.ND(:,3),'y.','Markersize',2);
axis equal; axis off; hold on;
for i=1:size(in_data.EL)
   node1 = find(in_data.ND(:,1)==in_data.EL(i,3));
   node2 = find(in_data.ND(:,1)==in_data.EL(i,4));
   plot([in_data.ND(node1,2) in_data.ND(node2,2)], [in_data.ND(node1,3) in_data.ND(node2,3)],'y-','LineWidth',1);
   if PND == 1
       h=text(in_data.ND(node1,2) , in_data.ND(node1,3), num2str(node1)); set(h,'FontSize',8); set(h,'Color','k');
       h=text(in_data.ND(node2,2) , in_data.ND(node2,3), num2str(node2)); set(h,'FontSize',8); set(h,'Color','k');
       x1= (in_data.ND(node2,2)-in_data.ND(node1,2))/1.8 + in_data.ND(node1,2);
       y1= (in_data.ND(node2,3)-in_data.ND(node1,3))/1.8 + in_data.ND(node1,3);
       h=text(x1 , y1, num2str(in_data.EL(i,1))); set(h,'FontSize',6); set(h,'Color','m');
   end;
end;
h=title('Input object'); set(h,'FontSize',12);
hold off;


% -------------------------------------------------------------------------
function plot_bend_data ( in_data, dof, NF,PND) 

% PLOT INPUT DATA USING 'BCIZ' ELEMENT (BENDING)
hold off;
if 1
   maxX = max(in_data.ND(:,2));
   minX = min(in_data.ND(:,2));
   maxY = max(in_data.ND(:,3));
   minY = min(in_data.ND(:,3));
   labx = (maxX / 9); laby = (maxY / 9);
   labx = min([labx laby]); laby = labx;
   
   SCz = 1; labz = SCz/2; % Z deflection scale
   % plot loads ===============
   if NF > 100
       for i=1:size(in_data.LOAD_)
           node_i = find(in_data.ND(:,1)==in_data.LOAD_(i,1));
           if in_data.LOAD_(i,3)~=0 & in_data.LOAD_(i,3)>0
               plot3([in_data.ND(node_i,2) in_data.ND(node_i,2)+labx],...
                   [in_data.ND(node_i,3) in_data.ND(node_i,3)],[0 0],'r-','LineWidth',2); hold on;
           end;
           if in_data.LOAD_(i,3)~=0 & in_data.LOAD_(i,3)<0
               plot3([in_data.ND(node_i,2) in_data.ND(node_i,2)-labx],...
                   [in_data.ND(node_i,3) in_data.ND(node_i,3)],[0 0],'r-','LineWidth',2); hold on;
           end;
           if in_data.LOAD_(i,4)~=0 & in_data.LOAD_(i,4)>0
               plot3([in_data.ND(node_i,2) in_data.ND(node_i,2)],...
                   [in_data.ND(node_i,3) in_data.ND(node_i,3)+laby],[0 0],'r-','LineWidth',2); hold on;
           end;
           if in_data.LOAD_(i,4)~=0 & in_data.LOAD_(i,4)<0
               plot3([in_data.ND(node_i,2) in_data.ND(node_i,2)],...
                   [in_data.ND(node_i,3) in_data.ND(node_i,3)-laby],[0 0],'r-','LineWidth',2); hold on;
           end;
           if in_data.LOAD_(i,2)~=0 & in_data.LOAD_(i,2)>0
               plot3([in_data.ND(node_i,2) in_data.ND(node_i,2)],...
                   [in_data.ND(node_i,3) in_data.ND(node_i,3)],[0 labz],'r-','LineWidth',2); hold on;
           end;
           if in_data.LOAD_(i,2)~=0 & in_data.LOAD_(i,2)<0
               plot3([in_data.ND(node_i,2) in_data.ND(node_i,2)],...
                   [in_data.ND(node_i,3) in_data.ND(node_i,3)],[0 -labz],'r-','LineWidth',2); hold on;
           end;
       end;
       % plot constrains ===
       for i=1:size(in_data.CON)
           node_i = find(in_data.ND(:,1)==in_data.CON(i,1));
           if in_data.CON(i,3)==0
               plot3([in_data.ND(node_i,2) in_data.ND(node_i,2)-labx],...
                   [in_data.ND(node_i,3) in_data.ND(node_i,3)], [0 0],'g-','LineWidth',2); hold on;
           end;
           if in_data.CON(i,4)==0
               plot3([in_data.ND(node_i,2) in_data.ND(node_i,2)],...
                   [in_data.ND(node_i,3) in_data.ND(node_i,3)-laby], [0 0],'g-','LineWidth',2); hold on;
           end;
           if in_data.CON(i,2)==0
               plot3([in_data.ND(node_i,2) in_data.ND(node_i,2)],...
                   [in_data.ND(node_i,3) in_data.ND(node_i,3)], [0 labz],'g-','LineWidth',2); hold on;
           end;
       end;
   end; % -- end if NF > 100

   % plot elements -----------
   plot(in_data.ND(:,2),in_data.ND(:,3),'y.','Markersize',2);
   axis equal; axis off; view(3); hold on;
   for i=1:size(in_data.EL)
      if in_data.EL(i,2)==9  % "9" - BCIZ element (bending triangle) 
         node1 = find(in_data.ND(:,1)==in_data.EL(i,3));
         node2 = find(in_data.ND(:,1)==in_data.EL(i,4));
         node3 = find(in_data.ND(:,1)==in_data.EL(i,5));
         plot3([in_data.ND(node1,2) in_data.ND(node2,2) in_data.ND(node3,2) in_data.ND(node1,2)], ...
            [in_data.ND(node1,3) in_data.ND(node2,3) in_data.ND(node3,3) in_data.ND(node1,3)],...
            [0 0 0 0],'y-','LineWidth',1);
        if PND == 1
            h=text(in_data.ND(node1,2) , in_data.ND(node1,3), 0, num2str(node1)); set(h,'FontSize',8); set(h,'Color','k');
            h=text(in_data.ND(node2,2) , in_data.ND(node2,3), 0, num2str(node2)); set(h,'FontSize',8); set(h,'Color','k');
            h=text(in_data.ND(node3,2) , in_data.ND(node3,3), 0, num2str(node3)); set(h,'FontSize',8); set(h,'Color','k');
            x1= in_data.ND(node1,2)/3  +  in_data.ND(node2,2)/3 +  in_data.ND(node3,2)/3;
            y1= in_data.ND(node1,3)/3  +  in_data.ND(node2,3)/3 +  in_data.ND(node3,3)/3;
            h=text(x1 , y1, 0, num2str(in_data.EL(i,1))); set(h,'FontSize',6); set(h,'Color','m');
        end;
      end;
   end;
end;
% =========END
axis([(-1.1*minX) (1.1*maxX) (-1.1*minY) (1.1*maxY) (-SCz)    (SCz)]);
h=title('Input object'); set(h,'FontSize',12);
hold off;
%end;


% --------------------------------------------------------------------------------
function plot_CSTQ_input ( in_data, dof, NF, PND) 

% PLOT DATA USING 'CST' & 'CSQ' ELEMENTS (PLAIN FEM)
hold off;
if 1
   maxX = max(in_data.ND(:,2)); minX = min(in_data.ND(:,2));
   maxY = max(in_data.ND(:,3)); minY = min(in_data.ND(:,3));
   labx = (maxX / 13); laby = (maxY / 13);
   labx = min([labx laby]); laby = labx;


   % plot loads ===========
   if NF > 100

       for i=1:size(in_data.LOAD_)
           node_i = find(in_data.ND(:,1)==in_data.LOAD_(i,1));
           if in_data.LOAD_(i,2)~=0 & in_data.LOAD_(i,2)>0
               plot([in_data.ND(node_i,2) in_data.ND(node_i,2)+labx],...
                   [in_data.ND(node_i,3) in_data.ND(node_i,3)],'r-','LineWidth',3); hold on;
           end;
           if in_data.LOAD_(i,2)~=0 & in_data.LOAD_(i,2)<0
               plot([in_data.ND(node_i,2) in_data.ND(node_i,2)-labx],...
                   [in_data.ND(node_i,3) in_data.ND(node_i,3)],'r-','LineWidth',3);
           end;
           if in_data.LOAD_(i,3)~=0 & in_data.LOAD_(i,3)>0
               plot([in_data.ND(node_i,2) in_data.ND(node_i,2)],...
                   [in_data.ND(node_i,3) in_data.ND(node_i,3)+laby],'r-','LineWidth',3);
           end;
           if in_data.LOAD_(i,3)~=0 & in_data.LOAD_(i,3)<0
               plot([in_data.ND(node_i,2) in_data.ND(node_i,2)],...
                   [in_data.ND(node_i,3) in_data.ND(node_i,3)-laby],'r-','LineWidth',3);
           end;
       end;

       % plot constrains ==========
       for i=1:size(in_data.CON)
           node_i = find(in_data.ND(:,1)==in_data.CON(i,1));
           if in_data.CON(i,2)==0
               plot([in_data.ND(node_i,2) in_data.ND(node_i,2)-labx],...
                   [in_data.ND(node_i,3) in_data.ND(node_i,3)],'g-','LineWidth',2);
           end;
           if in_data.CON(i,3)==0
               plot([in_data.ND(node_i,2) in_data.ND(node_i,2)],...
                   [in_data.ND(node_i,3) in_data.ND(node_i,3)-laby],'g-','LineWidth',2);
           end;
       end;
   end; % % -- end if NF > 100
   
   
  % plot elements --------
   plot(in_data.ND(:,2),in_data.ND(:,3),'y.','MarkerSize',2);
   axis equal; axis off; view(2); hold on;
   for i=1:size(in_data.EL)
      yy = 0.9; % color scale: white to black 
      if in_data.EL(i,2)==4  % "4" - CST element (triangle) 

⌨️ 快捷键说明

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