Create Local Designs
This example shows how to use the command-line functionality to create local designs at each global operating point. This particular example shows how you can produce local maps for a diesel engine calibration.
Create Project and Test Plan
Speed (N) and fuel (F) are global inputs. Injection (soi), fuel pressure (fuelpress), variable geometry turbo rack position (grackmea) and exhaust gas recirculation (EGR) are local inputs.
project = mbcmodel.CreateProject('DieselMulti'); % Define Inputs for test plan LocalInputs = mbcmodel.modelinput('Symbol',{'S','P','G','E'},... 'Name',{'soi','fuelpress','grackmea','egrlift'},... 'Units',{'deg','MPa','ratio','mm'},... 'Range',{[-9 3],[60 160],[0.2 0.9],[0.5 5]}); GlobalInputs = mbcmodel.modelinput('Symbol',{'N','F'},... 'Name',{'measrpm','basefuelmass'},... 'Units',{'rpm','mg/stroke'},... 'Range',{[1600 2200],[20 200]}); % create test plan TP = CreateTestplan( project, {LocalInputs,GlobalInputs} );
Global Design
Generate a 15 point Latin Hypercube Sampling (LHS) design for the global inputs.
globalDesign = TP.CreateDesign(2, 'Type', 'Latin Hypercube Sampling'); % Fuel constraint: Maximum 200 at 1600 rpm, 175 at 2200 rpm C = globalDesign.CreateConstraint('Type','1D Table'); % set up the 1D Table constraint C.InputFactor = 'N'; C.Breakpoints = [1600 2000]; C.TableFactor = 'F'; C.Table = [200 175]; % assign constraint to design globalDesign.Constraints = C; % generate a 15 point design globalDesign = Generate(globalDesign, 15); % set as best design in test plan TP.BestDesign{2} = globalDesign;
Create a Local Design for Each Global Point
For each global point, adjust limits for fuel pressure and grackmea, and generate a 30 point LHS design.
% create a local design localDesign = TP.CreateDesign(1,'Type','Latin Hypercube Sampling'); localDesignGenerator = localDesign.Generator; localDesignGenerator.NumberOfPoints = 30; DList = mbcdoe.design.empty( 0, 1); for i = 1:globalDesign.NumberOfPoints; GlobalPoint = globalDesign.Points(i,:); speed = GlobalPoint(1); % fuel pressure limits dependent on speed f = (speed-1600)/(2200-1600); % note because you use the Limits property to specify the input range % you get LHS designs with exactly 30 points. localDesignGenerator.Limits(2,:) = (1-f)*[90 120] + f*[110 160]; % grackmea limits dependent on speed localDesignGenerator.Limits(3,:) = (1-f)*[0.2 0.4] + f*[0.6 0.9]; % set design properties and generate local design localDesign.Generator = localDesignGenerator; % Make design name which reflects the global point localDesign.Name = sprintf('Test %2d (%s=%4.0f,%s=%3.0f)', i,... GlobalInputs(1).Symbol,GlobalPoint(1),.... GlobalInputs(2).Symbol,GlobalPoint(2)); % Plot Design Scatter2D(localDesign); DList(i) = localDesign; end
![Figure contains an axes object. The axes object with title Test 14 (N=1771,F=149), xlabel soi (S) [deg], ylabel fuelpress (P) [MPa] contains a line object which displays its values using only markers.](../../examples/mbc/win64/LocalDesignsExample_01.png)
% assign list of local designs to test plan TP.Designs{1} = DList; % List of local designs localDesigns = TP.Designs{1}
localDesigns=1×14 design array with properties:
Style
Type
NumPoints
NumInputs
Name
Points
PointTypes
Inputs
Generator
Constraints
Model