50 lines
1.3 KiB
Matlab
50 lines
1.3 KiB
Matlab
function setProfile(s, name, comp, p)
|
|
% SETPROFILE - Specify a profile for one component.
|
|
%
|
|
% name -- domain name
|
|
% comp -- component number
|
|
% zr -- array of relative positions (0.0 to 1.0)
|
|
% v -- array of values
|
|
%
|
|
% The solution vector values for this component will be linearly
|
|
% interpolated from the discrete function defined by v vs. zr.
|
|
% Note that zr = 0.0 corresponds to the leftmost grid point in
|
|
% the specified domain, and zr = 1.0 corresponds to the rightmost
|
|
% grid point. This method can be called at any time, but is
|
|
% usually used to set the initial guess for the solution.
|
|
%
|
|
% Example:
|
|
%
|
|
% zr = [0 0.1 0.2 0.4 0.8 1];
|
|
% v = [500 650 700 730 800 900];
|
|
% setProfile(1, 2, zr, v);
|
|
%
|
|
if isa(name,'double')
|
|
n = name;
|
|
else
|
|
n = domainIndex(s, name);
|
|
end
|
|
|
|
d = s.domains(n);
|
|
|
|
if isa(comp,'double') || isa(comp,'cell')
|
|
c = comp;
|
|
elseif isa(comp,'char')
|
|
c = {comp};
|
|
else
|
|
error('wrong type');
|
|
end
|
|
|
|
np = length(c);
|
|
sz = size(p);
|
|
if sz(1) == np + 1;
|
|
for j = 1:np
|
|
ic = componentIndex(d,c{j});
|
|
stack_methods(s.stack_id, 101, n, ic, p(1,:), p(j+1,:));
|
|
end
|
|
elseif sz(2) == np + 1;
|
|
ic = componentIndex(d,c{j});
|
|
stack_methods(s.stack_id, 101, n, ic, p(:,1), p(:,j+1));
|
|
else
|
|
error('wrong profile shape');
|
|
end
|