Changeset 5215


Ignore:
Timestamp:
08/12/10 17:51:48 (15 years ago)
Author:
Eric.Larour
Message:

Now we expand the variables before going into dakota_in_data, which simplifies a lot
of the preqmu and marshalling.
Simplified also the QmuSetupDesign: no need for all these individual drivers.

Location:
issm/trunk/src/m/qmu
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/m/qmu/dakota_in_data.m

    r3564 r5215  
    9494
    9595for i=1:length(fnames)
     96
     97%  currently all variable types can just be copied
     98        dvar.(fnames{i})=variables.(fnames{i});
     99
     100end
    96101   
    97 %  for linear constraints, just copy
    98 
    99     if isa(variables.(fnames{i}),'linear_inequality_constraint') || ...
    100        isa(variables.(fnames{i}),'linear_equality_constraint'  )
    101         dvar.(fnames{i})=variables.(fnames{i});
    102 
    103 %  for variables, call the setup function
    104 
    105     else
    106         fhandle=str2func([class(variables.(fnames{i})) '.empty']);
    107         dvar.(fnames{i})=fhandle();
    108         for j=1:length(variables.(fnames{i}))
    109             %call setupdesign
    110             dvar.(fnames{i})=QmuSetupDesign(dvar.(fnames{i}),variables.(fnames{i})(j),params,varargin{:});
    111         end
    112     end
    113 end
    114 
    115 
    116102%%  responses
    117103
  • issm/trunk/src/m/qmu/postqmu.m

    r3038 r5215  
    4848end
    4949
     50%scale  sensitivities by partitioned average of the input parameter
     51disp('Do this for god''s akes!');
     52
     53
    5054%put dakotaresults in their right location.
    5155md.results.dakota=dakotaresults;
  • issm/trunk/src/m/qmu/preqmu.m

    r5029 r5215  
    4141responses=md.responses(options.iresp);
    4242
     43%expand variables
     44variables=expandvariables(md,md.variables);
     45
     46%go through variables, and check they don't have more than md.npart values
     47variable_fieldnames=fieldnames(variables);
     48for i=1:length(variable_fieldnames),
     49        field_name=variable_fieldnames{i};
     50        fieldvariables=variables.(field_name);
     51        if numel(fieldvariables)>md.npart,
     52                error('preqmu error message: one of the expanded variables has more values than the number of partitions (setup in md.npart)');
     53        end
     54end
     55
    4356%create m and in files for dakota
    44 dakota_in_data(md.qmu_method(options.imethod),variables,md.responses,md.qmu_params(options.iparams),options.qmufile,md);
     57dakota_in_data(md.qmu_method(options.imethod),variables,md.responses,md.qmu_params(options.iparams),options.qmufile);
    4558
    4659%in library mode, we only need the dakota in file
  • issm/trunk/src/m/qmu/qmumarshall.m

    r4854 r5215  
    2121end
    2222
    23 %count how many variables we have
    24 numvariables=0;
    25 variable_fieldnames=fieldnames(variables);
    26 for i=1:length(variable_fieldnames),
    27         field_name=variable_fieldnames{i};
    28         fieldvariables=variables.(field_name);
    29         numvariables=numvariables+numel(variables.(field_name));
    30 end
    3123%write number of variables to disk
    32 WriteData(fid,numvariables,'Integer','numberofvariables');
     24WriteData(fid,md.numberofvariables,'Integer','numberofvariables');
    3325
    3426%now, for each variable, write descriptor
    35 count=0;
    36 for i=1:length(variable_fieldnames),
    37         field_name=variable_fieldnames{i};
    38         fieldvariables=variables.(field_name);
    39         for j=1:length(fieldvariables),
    40                 descriptor=fieldvariables(j).descriptor;
    41                 WriteData(fid,descriptor,'String',['variabledescriptor' num2str(count)]);
    42                 count=count+1;
    43         end
     27for i=1:numel(md.variabledescriptors),
     28        field_name=md.variabledescriptors{i};
     29        WriteData(fid,field_name,'String',['variabledescriptor' num2str(i)]);
    4430end
     31
    4532
    4633%deal with responses
    4734
    48 %count how many responses we have
    49 numresponses=0;
    50 response_fieldnames=fieldnames(responses);
    51 for i=1:length(response_fieldnames),
    52         field_name=response_fieldnames{i};
    53         fieldresponses=responses.(field_name);
    54         numresponses=numresponses+numel(responses.(field_name));
    55 end
    5635%write number of responses to disk
    57 WriteData(fid,numresponses,'Integer','numberofresponses');
     36WriteData(fid,md.numberofresponses,'Integer','numberofresponses');
    5837
    5938%now, for each response, write descriptor
    60 count=0;
    61 for i=1:length(response_fieldnames),
    62         field_name=response_fieldnames{i};
    63         fieldresponses=responses.(field_name);
    64         for j=1:length(fieldresponses),
    65                 descriptor=fieldresponses(j).descriptor;
    66                 WriteData(fid,descriptor,'String',['responsedescriptor' num2str(count)]);
    67                 count=count+1;
    68         end
     39for i=1:numel(md.responsedescriptors),
     40        field_name=md.responsedescriptors{i};
     41        WriteData(fid,field_name,'String',['responsedescriptor' num2str(i)]);
    6942end
     43
    7044
    7145%write response specific data
    7246qmu_segments=0;
    73 count=0;
    74 for i=1:length(response_fieldnames),
    75         field_name=response_fieldnames{i};
    76         fieldresponses=responses.(field_name);
    77         for j=1:length(fieldresponses),
    78                 descriptor=fieldresponses(j).descriptor;
    79                 if strncmpi(descriptor,'MassFlux',8),
    80                         qmu_segments=1;
    81                 end
     47
     48for i=1:numel(md.responsedescriptors),
     49        field_name=md.responsedescriptors{i};
     50        if strncmpi(field_name,'MassFlux',8),
     51                qmu_segments=1;
    8252        end
    8353end
  • issm/trunk/src/m/qmu/setupdesign/QmuSetupDesign.m

    r5200 r5215  
    1 function dvar=QmuSetupDesign(dvar,variables,params,varargin)
    2 
    3 %recover model
    4 for i=1:length(varargin)
    5     if strcmp(class(varargin{i}),'model')
    6         md=varargin{i};
    7         break;
    8     end
    9 end
    10 
     1function dvar=QmuSetupDesign(md,dvar,variables)
    112
    123%get descriptor
     
    189%if descriptor is something like 'Thickness1','Surface10', etc ... the variable expansion already did the work, skip
    1910if qmuisdistributed(descriptor),
     11        dvar(end+1)=variables;
    2012        return;
    2113end
     
    4638case {'RiftsFriction'},
    4739       
    48         dvar=setupriftsfriction(dvar,variables,params,varargin{:});
     40        dvar=setupriftsfriction(md,dvar,variable);
    4941
    5042otherwise
  • issm/trunk/src/m/qmu/setupdesign/setupriftsfriction.m

    r32 r5215  
    1 function dvar=setupriftsfriction(dvar,variables,params,varargin)
    2 
    3 for i=1:length(varargin)
    4     if strcmp(class(varargin{i}),'model')
    5         md=varargin{i};
    6         break;
    7     end
    8 end
     1function dvar=setupriftsfriction(md,dvar,variables)
    92
    103%we have several rifts.
Note: See TracChangeset for help on using the changeset viewer.