MATLAB.Exponenta
MATLAB и Simulink на русском
Технологии разработки и отладки
		сложных технических систем

Femlab

Femlab 2.3. Руководство пользователя (перевод с английского с редакторской правкой В.Е.Шмелева):
1.1. Руководство быстрого начала работы с FEMLAB

  В оглавление книги \ К следующему разделу \ К предыдущему разделу

1.1.4. Сохранение модели в виде m-файла

Последовательность действий, выполненную в ходе сеанса работы в GUI-приложении femlab, можно сохранить в виде m-файла. Такой m-файл называется m-файлом модели. Пользователи могут изменять последовательность команд FEMLAB, используя редактор m-файлов, затем загружать её в GUI-приложение femlab или выполнять её непосредственно из командной строки MATLAB.

Ниже будет показан код m-файла модели femlab. Этот код будет снабжён комментариями. Комментарии дают краткий обзор составных частей этого m-файла.

% FEMLAB Model M-file
% Generated 08-Dec-2002 14:04:37 by FEMLAB 2.3.0.145.

flclear fem
% FEMLAB Version % Информация о версии FEMLAB, в которой был создан m-файл модели
clear vrsn;
vrsn.name='FEMLAB 2.3';
vrsn.major=0;
vrsn.build=145;
fem.version=vrsn;

% Recorded command sequence % Записанная последовательность команд

% New geometry 1 % Раздел описания геометрий
fem.sdim={'x','y'};

% Geometry % Раздел описания геометрии
clear s c p
C1=circ2(0,0,2,0); % Объект “круг” (двумерный)
p=[-5.1213203435596437 -5.1213203435596428 -3 -2.1213203435596459 ...
-2.1213203435596437 -2.1213203435596424 -2.1213203435596424 ...
-5.5109105961630896e-016 1.8369701987210297e-016 2.1213203435596393 ...
2.1213203435596402 2.1213203435596428 2.1213203435596433 3 ...
5.1213203435596419 5.1213203435596428;-2.1213203435596397 ...
2.1213203435596433 1.6996616692943941e-015 -5.1213203435596419 ...
-2.1213203435596415 2.1213203435596428 5.1213203435596428 -3 3 ...
-5.1213203435596437 -2.121320343559645 2.1213203435596424 ...
5.1213203435596428 0 -2.1213203435596459 2.1213203435596428];
rb={1:16,[1 1 2 2 4 4 6 7 8 9 10 11 12 12 14 14;3 5 3 6 5 8 7 9 10 13 11 15 ...
13 16 15 16],zeros(3,0),zeros(4,0)};
wt={zeros(1,0),ones(2,16),zeros(3,0),zeros(4,0)};
lr={[NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN],[0 1 ...
1 0 0 1 0 0 1 0 1 1 1 0 0 1;1 0 0 1 1 0 1 1 0 1 0 0 0 1 1 0],zeros(2,0), ...
zeros(2,0)};
P1=solid2(p,rb,wt,lr); % Объект “многоугольник” (двумерный)
objs={C1,P1};
names={'C1','P1'};
s.objs=objs;
s.name=names;

objs={};
names={};
c.objs=objs;
c.name=names;

objs={};
names={};
p.objs=objs;
p.name=names;

drawstruct=struct('s',s,'c',c,'p',p);
fem.draw=drawstruct;
fem.geom=geomcsg(fem);

clear appl % Раздел описания прикладных режимов (при мультифизическом моделировании)

% Application mode 1 % Раздел описания прикладного режима
appl{1}.mode=flpdeht2d('dim',{'T'},'sdim',{'x','y'},'submode','std','tdiff', ...
'on');
appl{1}.dim={'T'};
appl{1}.form='coefficient';
appl{1}.border='off';
appl{1}.name='ht';
appl{1}.var={};
appl{1}.assign={'C';'C';'Const';'Const';'Ctrans';'Ctrans';'Q';'Q';'Tamb'; ...
'Tamb';'Tambtrans';'Tambtrans';'Text';'Text';'Tinf';'Tinf';'flux';'flux'; ...
'flux_x';'flux_x';'flux_y';'flux_y';'gradT';'gradT';'gradTx';'gradTx'; ...
'gradTy';'gradTy';'h';'h';'htrans';'htrans';'n_flux';'n_flux';'q';'q';'rho'; ...
'rho'};
appl{1}.elemdefault='Lag2';
appl{1}.shape={'shlag(2,''T'')'};
appl{1}.sshape=2;
appl{1}.equ.rho={'1'};
appl{1}.equ.C={'1'};
appl{1}.equ.k={{{'1'}}};
appl{1}.equ.Q={'1'};
appl{1}.equ.htrans={'0'};
appl{1}.equ.Text={'0'};
appl{1}.equ.Ctrans={'0'};
appl{1}.equ.Tambtrans={'0'};
appl{1}.equ.gporder={{4}};
appl{1}.equ.cporder={{2}};
appl{1}.equ.shape={1};
appl{1}.equ.init={{{'0'}}};
appl{1}.equ.usage={1};
appl{1}.equ.ind=[1 1];
appl{1}.bnd.q={'0','0'};
appl{1}.bnd.h={'0','0'};
appl{1}.bnd.Tinf={'0','0'};
appl{1}.bnd.Const={'0','0'};
appl{1}.bnd.Tamb={'0','0'};
appl{1}.bnd.T={'0','0'};
appl{1}.bnd.type={'T','q0'};
appl{1}.bnd.gporder={{0},{0}};
appl{1}.bnd.cporder={{0},{0}};
appl{1}.bnd.shape={0,0};
appl{1}.bnd.ind=[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2];

fem.appl=appl;

% Initialize mesh % Раздел генерации и переопределения конечноэлементной сетки
fem.mesh=meshinit(fem,...
'Out',{'mesh'},...
'jiggle', 'mean',...
'Hcurve', 0.29999999999999999,...
'Hgrad', 1.3,...
'Hpnt', {10,[]});

% Refine mesh
fem.mesh=meshrefine(fem,...
'out',{'mesh'},...
'rmethod','regular');

% Initialize mesh
fem.mesh=meshinit(fem,...
'Out',{'mesh'},...
'jiggle','mean',...
'Hcurve', 0.29999999999999999,...
'Hgrad',1.3,...
'Hpnt',{10,[]});

% Refine mesh
fem.mesh=meshrefine(fem,...
'out', {'mesh'},...
'rmethod','regular');

% Differentiation rules % Раздел дополнительных описаний прикладного режима
fem.rules={};

% Problem form
fem.outform='coefficient';

% Differentiation simplification
fem.simplify='on';

% Boundary conditions
clear bnd
bnd.q={'0','0'};
bnd.h={'0','0'};
bnd.Tinf={'0','0'};
bnd.Const={'0','0'};
bnd.Tamb={'0','0'};
bnd.T={'273','0'};
bnd.type={'T','q0'};
bnd.gporder={{0},{0}};
bnd.cporder={{0},{0}};
bnd.shape={0,0};
bnd.ind=[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2];
fem.appl{1}.bnd=bnd;

% PDE coefficients % Раздел задания коэффициентов PDE
clear equ
equ.rho={'1','1'};
equ.C={'1','1'};
equ.k={{{'0.12'}},{{'0.3896'}}};
equ.Q={'0','50^2/5.6E4'};
equ.htrans={'0','0'};
equ.Text={'0','0'};
equ.Ctrans={'0','0'};
equ.Tambtrans={'0','0'};
equ.gporder={{2},{2}};
equ.cporder={{1},{1}};
equ.shape={1,1};
equ.init={{{'0'}},{{'0'}}};
equ.usage={1,1};
equ.ind=[1 2];
fem.appl{1}.equ=equ;

% Internal borders
fem.appl{1}.border='off';

% Shape functions
fem.appl{1}.shape={'shlag(1,''T'')'};

% Geometry element order
fem.appl{1}.sshape=1;

% Define constants
fem.const={};

% Multiphysics
fem=multiphysics(fem);

% Extend the mesh
fem.xmesh=meshextend(fem,'context','local','cplbndeq','on','cplbndsh','on');

% Evaluate initial condition
init=asseminit(fem,...
'context','local',...
'init',fem.xmesh.eleminit);

% Solve problem % Раздел решения краевой задачи
fem.sol=femlin(fem,...
'jacobian','equ',...
'out',{'sol'},...
'init',init,...
'context','local',...
'sd','off',...
'nullfun','flnullorth',...
'blocksize',5000,...
'solcomp',{'T'},...
'linsolver','matlab',...
'method','eliminate',...
'uscale','auto');

% Save current fem structure for restart purposes
fem0=fem;

% Plot solution % Визуализация как на рис. 1.16
postplot(fem,...
'geomnum',1,...
'context','local',...
'tridata',{'T','cont','internal'},...
'trifacestyle','interp',...
'triedgestyle','none',...
'trimap','jet',...
'trimaxmin','off',...
'tribar','on',...
'geom','on',...
'geomcol','bginv',...
'refine',1,...
'contorder',1,...
'phase',0,...
'title', 'Surface: temperature (T) ',...
'renderer','zbuffer',...
'solnum', 1,...
'axisvisible','on')

% Визуализация как на рис. 1.16, но с маркировкой минимального и максимального значения температуры
% Plot solution
postplot(fem,...
'geomnum',1,...
'context','local',...
'tridata',{'T','cont','internal'},...
'trifacestyle','interp',...
'triedgestyle','none',...
trimap', 'jet',...
'trimaxmin','on',...
'tribar', 'on',...
'geom', 'on',...
'geomcol','bginv',...
'refine', 1,...
'contorder',1,...
'phase', 0,...
'title', 'Surface: temperature (T) ',...
'renderer','zbuffer',...
'solnum', 1,...
'axisvisible','on')

% Plot solution % Визуализация как на рис. 1.19
postplot(fem,...
'geomnum',1,...
'context','local',...
'tridata',{'flux','cont','internal'},...
'trifacestyle','interp',...
'triedgestyle','none',...
'trimap', 'jet',...
'trimaxmin','on',...
'tribar', 'on',...
'geom', 'on',...
'geomcol','bginv',...
'refine', 1,...
'contorder',1,...
'phase', 0,...
'title', 'Surface: heat flux (flux) ',...
'renderer','zbuffer',...
'solnum', 1,...
'axisvisible','on')

% Plot solution % Визуализация как на рис. 1.20
postplot(fem,...
'geomnum',1,...
'context','local',...
'contdata',{'T','cont','internal'},...
'contlevels',9,...
'contstyle','bginv',...
'contlabel','off',...
'contmaxmin','on',...
'contbar','on',...
'contmap','cool',...
'geom', 'on',...
'geomcol','bginv',...
'refine', 1,...
'contorder',1,...
'phase', 0,...
'title', 'Contour: temperature (T) ',...
'renderer','zbuffer',...
'solnum', 1,...
'axisvisible','on')

m-файл модели можно изменять редактором m-файлов. Чтобы m-файл модели нормально загружался в GUI-приложение femlab, нужно, чтобы он соответствовал синтаксису языка MATLAB и синтаксису функций командной строки FEMLAB, выполняемых внутри GUI femlab. m-файл модели может выполняться вне GUI femlab. В этом случае он должен соответствовать только синтаксису языка MATLAB.

m-файл модели полезен для многих целей:

  • Это документирует работу, которую Вы исполняете в пределах GUI femlab удобочитаемым способом.
  • Изучение m-файла модели может быть инструментом обучения работе с функциями командной строки FEMLAB.
  • Сохранение m-файла модели и его изменение может быть полезно для создания оптимального проекта или параметризованной модели.
  • В m-файл модели можно вставлять любой оператор MATLAB, не изменяющий структуру данных fem.
  • m-файл модели может содержать вызовы функций, написанных пользователем (разработчиком новых проектов), если они соответствуют синтаксису функций командной строки FEMLAB, выполняемых внутри GUI femlab.

Более подробное описание структуры m-файла модели содержится в подразделе 3.9 Руководства пользователя.

  В оглавление книги \ К следующему разделу \ К предыдущему разделу


Поиск по сайту:

Система Orphus

Яндекс.Метрика