Changeset 3092 for issm/trunk/src/m/solutions/dakota/dakota_in_write.m
- Timestamp:
- 02/23/10 15:30:16 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/m/solutions/dakota/dakota_in_write.m
r2166 r3092 2 2 % write a Dakota .in input file. 3 3 % 4 % []=dakota_in_write(method,dmeth,dvar,dresp,params,filei,varargin) 4 % []=dakota_in_write(method,dvar,dresp,params,filei,varargin) 5 % []=dakota_in_write(dmeth ,dvar,dresp,params,filei,varargin) 5 6 % 6 7 % where the required input is: … … 12 13 % filei (character, name of .in file) 13 14 % 14 % the method , dmeth, and filei will be prompted if empty.15 % paramsmay be empty, in which case defaults will be used.15 % the method and filei will be prompted if empty. params 16 % may be empty, in which case defaults will be used. 16 17 % 17 18 % the optional varargin are not yet used. … … 30 31 % acknowledged. Any commercial use must be negotiated with 31 32 % the Office of Technology Transfer at the California Institute 32 % of Technology. ( NTR 47078)33 % of Technology. (J. Schiermeier, NTR 47078) 33 34 % 34 35 % This software may be subject to U.S. export control laws. … … 39 40 % to foreign countries or providing access to foreign persons." 40 41 % 41 function []=dakota_in_write(method,d meth,dvar,dresp,params,filei,varargin)42 function []=dakota_in_write(method,dvar,dresp,params,filei,varargin) 42 43 43 44 if ~nargin … … 51 52 method=input('Method? ','s'); 52 53 end 53 54 if ~exist('dmeth' ,'var') || isempty(dmeth) 54 if ischar(method) 55 55 dmeth=dakota_method(method); 56 elseif isa(method,'dakota_method') 57 dmeth=method; 58 else 59 error(['Method ''' inputname(1) ''' is unrecognized class ''' class(method) '''.']); 56 60 end 57 61 … … 134 138 % write response levels 135 139 136 if strcmp(dmeth.type,'nond') && isfield(dresp,'rf') 137 param_write(fidi,'\t ','distribution',' ','\n',params); 138 [respl,probl,rell,grell]=prop_levels(dresp.rf); 139 if ~isempty(respl) 140 rlev_write(fidi,'response_levels',respl); 141 param_write(fidi,'\t ','compute',' ','\n',params); 142 end 143 if ~isempty(probl) 144 rlev_write(fidi,'probability_levels',probl); 145 end 146 if ~isempty(rell) 147 rlev_write(fidi,'reliability_levels',rell); 148 end 149 if ~isempty(grell) 150 rlev_write(fidi,'gen_reliability_levels',grell); 151 end 152 end 153 fprintf(fidi,'\n'); 154 155 end 156 157 %% function to write response levels 158 159 function []=rlev_write(fidi,ltype,levels) 160 161 fprintf(fidi,'\t num_%s =',ltype); 162 for i=1:length(levels) 163 fprintf(fidi,' %d',length(levels{i})); 164 end 165 fprintf(fidi,'\n'); 166 167 fprintf(fidi,'\t %s =\n',ltype); 168 169 for i=1:length(levels) 170 if ~isempty(levels{i}) 171 vector_write(fidi,sprintf('\t '),levels{i},8,76); 172 end 173 end 140 if strcmp(dmeth.type,'nond') 141 for i=1:length(dmeth.responses) 142 fhresp=str2func([dmeth.responses{i} '.dakota_rlev_write']); 143 fhresp(fidi,dresp,params); 144 end 145 end 146 fprintf(fidi,'\n'); 174 147 175 148 end … … 196 169 % variables vary by method 197 170 198 vsets_write(fidi,dvar,dmeth.variables); 171 for i=1:length(dmeth.variables) 172 fhvar=str2func([dmeth.variables{i} '.dakota_write']); 173 fhvar(fidi,dvar); 174 end 199 175 200 176 % linear constraints vary by method 201 177 202 lcsets_write(fidi,dvar,dmeth.lcspec); 203 204 fprintf(fidi,'\n'); 205 206 end 207 208 %% function to write variable sets 209 210 function []=vsets_write(fidi,dvar,variables) 211 212 for i=1:length(variables) 213 switch(variables{i}) 214 case 'cdv' 215 cstring='continuous_design'; 216 case 'nuv' 217 cstring='normal_uncertain'; 218 case 'csv' 219 cstring='continuous_state'; 220 otherwise 221 warning('vsets_write:unrec_var',... 222 'Unrecognized variable ''%s''.',variables{i}); 223 end 224 225 if isfield(dvar,variables{i}) 226 vlist_write(fidi,cstring,variables{i},dvar.(variables{i})); 227 end 228 end 229 230 end 231 232 %% function to write variable list 233 234 function []=vlist_write(fidi,cstring,cstring2,dvar) 235 236 % put variables into lists for writing 237 238 pinitpt=prop_initpt(dvar); 239 plower =prop_lower (dvar); 240 pupper =prop_upper (dvar); 241 pmean =prop_mean (dvar); 242 pstddev=prop_stddev(dvar); 243 pinitst=prop_initst(dvar); 244 pstype =prop_stype (dvar); 245 pscale =prop_scale (dvar); 246 pdesc =prop_desc (dvar); 247 248 % write variables 249 % (using Dakota 4.1 syntax for backward compatability) 250 251 disp(sprintf(' Writing %d %s variables.',length(dvar),class(dvar))); 252 253 fprintf(fidi,'\t%s = %d\n',cstring,length(dvar)); 254 if ~isempty(pinitpt) 255 fprintf(fidi,'\t %s_initial_point =\n',cstring2); 256 vector_write(fidi,sprintf('\t '),pinitpt,6,76); 257 end 258 if ~isempty(plower) 259 fprintf(fidi,'\t %s_lower_bounds =\n',cstring2); 260 vector_write(fidi,sprintf('\t '),plower ,6,76); 261 end 262 if ~isempty(pupper) 263 fprintf(fidi,'\t %s_upper_bounds =\n',cstring2); 264 vector_write(fidi,sprintf('\t '),pupper ,6,76); 265 end 266 if ~isempty(pmean) 267 fprintf(fidi,'\t %s_means =\n',cstring2); 268 vector_write(fidi,sprintf('\t '),pmean ,6,76); 269 end 270 if ~isempty(pstddev) 271 fprintf(fidi,'\t %s_std_deviations =\n',cstring2); 272 vector_write(fidi,sprintf('\t '),pstddev,6,76); 273 end 274 if ~isempty(pinitst) 275 fprintf(fidi,'\t %s_initial_state =\n',cstring2); 276 vector_write(fidi,sprintf('\t '),pinitst,6,76); 277 end 278 if ~isempty(pstype) 279 fprintf(fidi,'\t %s_scale_types =\n',cstring2); 280 vector_write(fidi,sprintf('\t '),pstype ,6,76); 281 end 282 if ~isempty(pscale) 283 fprintf(fidi,'\t %s_scales =\n',cstring2); 284 vector_write(fidi,sprintf('\t '),pscale ,6,76); 285 end 286 if ~isempty(pdesc) 287 fprintf(fidi,'\t %s_descriptors =\n',cstring2); 288 vector_write(fidi,sprintf('\t '),pdesc ,6,76); 289 end 290 291 end 292 293 %% function to write linear constraint sets 294 295 function []=lcsets_write(fidi,dvar,lcspec) 296 297 for i=1:length(lcspec) 298 switch(lcspec{i}) 299 case 'lic' 300 cstring ='linear_inequality_constraints'; 301 cstring2='linear_inequality'; 302 case 'lec' 303 cstring ='linear_equality_constraints'; 304 cstring2='linear_equality'; 305 otherwise 306 warning('lcspec_write:unrec_lcspec',... 307 'Unrecognized linear constraint ''%s''.',lcspec{i}); 308 end 309 310 if isfield(dvar,lcspec{i}) 311 lclist_write(fidi,cstring,cstring2,dvar.(lcspec{i})); 312 end 313 end 314 315 end 316 317 %% function to write linear constraint list 318 319 function []=lclist_write(fidi,cstring,cstring2,dvar) 320 321 % put linear constraints into lists for writing 322 323 pmatrix=prop_matrix(dvar); 324 plower =prop_lower (dvar); 325 pupper =prop_upper (dvar); 326 ptarget=prop_target(dvar); 327 pstype =prop_stype (dvar); 328 pscale =prop_scale (dvar); 329 330 % write linear constraints 331 332 disp(sprintf(' Writing %d %s linear constraints.',... 333 length(dvar),class(dvar))); 334 335 if ~isempty(pmatrix) 336 fprintf(fidi,'\t %s_matrix =\n',cstring2); 337 vector_write(fidi,sprintf('\t '),pmatrix,6,76); 338 end 339 if ~isempty(plower) 340 fprintf(fidi,'\t %s_lower_bounds =\n',cstring2); 341 vector_write(fidi,sprintf('\t '),plower ,6,76); 342 end 343 if ~isempty(pupper) 344 fprintf(fidi,'\t %s_upper_bounds =\n',cstring2); 345 vector_write(fidi,sprintf('\t '),pupper ,6,76); 346 end 347 if ~isempty(ptarget) 348 fprintf(fidi,'\t %s_targets =\n',cstring2); 349 vector_write(fidi,sprintf('\t '),ptarget,6,76); 350 end 351 if ~isempty(pstype) 352 fprintf(fidi,'\t %s_scale_types =\n',cstring2); 353 vector_write(fidi,sprintf('\t '),pstype ,6,76); 354 end 355 if ~isempty(pscale) 356 fprintf(fidi,'\t %s_scales =\n',cstring2); 357 vector_write(fidi,sprintf('\t '),pscale ,6,76); 358 end 178 for i=1:length(dmeth.lcspec) 179 fhvar=str2func([dmeth.lcspec{i} '.dakota_write']); 180 fhvar(fidi,dvar); 181 end 182 183 fprintf(fidi,'\n'); 359 184 360 185 end … … 407 232 param_write(fidi,'\t','direct','','\n',params); 408 233 param_write(fidi,'\t ','analysis_driver',' = ''','''\n',params); 409 [pathstr,name,ext,versn] = fileparts(params.analysis_components); 410 if isempty(ext) 411 ext='.m'; 412 end 413 params.analysis_components=fullfile(pathstr,[name ext versn]); 414 param_write(fidi,'\t ','analysis_components',' = ''','''\n',params); 234 if ~isempty(params.analysis_components) 235 [pathstr,name,ext,versn] = fileparts(params.analysis_components); 236 if isempty(ext) 237 ext='.m'; 238 end 239 params.analysis_components=fullfile(pathstr,[name ext versn]); 240 param_write(fidi,'\t ','analysis_components',' = ''','''\n',params); 241 end 415 242 if ~isempty(params.input_filter) 416 243 param_write(fidi,'\t ','input_filter',' = ''','''\n',params); … … 421 248 param_write(fidi,'\t ','failure_capture',' ','\n',params); 422 249 param_write(fidi,'\t ','deactivate',' ','\n',params); 423 param_write(fidi,'\t ','output',' ','\n',params);424 250 param_write(fidi,'\t ','processors_per_analysis',' = ''','''\n',params); 425 251 end … … 439 265 % functions, gradients, and hessians vary by method 440 266 441 rsets_write(fidi,dresp,dmeth.responses);442 ghspec_write(fidi,params,dmeth.ghspec);443 444 fprintf(fidi,'\n');445 446 end447 448 %% function to write response sets449 450 function []=rsets_write(fidi,dresp,responses)451 452 267 rdesc={}; 453 268 454 for i=1:length(responses) 455 switch(responses{i}) 456 case 'of' 457 cstring ='objective_functions'; 458 cstring2='objective_function'; 459 case 'lst' 460 cstring ='least_squares_terms'; 461 cstring2='least_squares_term'; 462 case 'nic' 463 cstring ='nonlinear_inequality_constraints'; 464 cstring2='nonlinear_inequality'; 465 case 'nec' 466 cstring ='nonlinear_equality_constraints'; 467 cstring2='nonlinear_equality'; 468 case 'rf' 469 cstring ='response_functions'; 470 cstring2='response_function'; 471 otherwise 472 warning('rsets_write:unrec_resp',... 473 'Unrecognized response ''%s''.',responses{i}); 474 end 475 476 if isfield(dresp,responses{i}) 477 [rdesc]=rlist_write(fidi,cstring,cstring2,dresp.(responses{i}),rdesc); 478 end 479 end 480 481 % write response descriptors 269 for i=1:length(dmeth.responses) 270 fhresp=str2func([dmeth.responses{i} '.dakota_write']); 271 [rdesc]=fhresp(fidi,dresp,rdesc); 272 end 273 274 % write accumulated response descriptors for all response classes 482 275 483 276 if ~isempty(rdesc) … … 486 279 end 487 280 488 end 489 490 %% function to write response list 491 492 function [rdesc]=rlist_write(fidi,cstring,cstring2,dresp,rdesc) 493 494 % put responses into lists for writing 495 496 pstype =prop_stype (dresp); 497 pscale =prop_scale (dresp); 498 pweight=prop_weight(dresp); 499 plower =prop_lower (dresp); 500 pupper =prop_upper (dresp); 501 ptarget=prop_target(dresp); 502 503 % accumulate descriptors into list for subsequent writing 504 505 rdesc(end+1:end+numel(dresp))=prop_desc (dresp); 506 507 % write responses 508 509 disp(sprintf(' Writing %d %s responses.',length(dresp),class(dresp))); 510 511 fprintf(fidi,'\tnum_%s = %d\n',cstring,length(dresp)); 512 if ~isempty(pstype) 513 fprintf(fidi,'\t %s_scale_types =\n',cstring2); 514 vector_write(fidi,sprintf('\t '),pstype ,6,76); 515 end 516 if ~isempty(pscale) 517 fprintf(fidi,'\t %s_scales =\n',cstring2); 518 vector_write(fidi,sprintf('\t '),pscale ,6,76); 519 end 520 if ~isempty(pweight) 521 switch cstring2 522 case 'objective_function' 523 fprintf(fidi,'\t %s_weights =\n','multi_objective'); 524 vector_write(fidi,sprintf('\t '),pweight,6,76); 525 case 'least_squares_term' 526 fprintf(fidi,'\t %s_weights =\n','least_squares'); 527 vector_write(fidi,sprintf('\t '),pweight,6,76); 528 end 529 end 530 if ~isempty(plower) 531 fprintf(fidi,'\t %s_lower_bounds =\n',cstring2); 532 vector_write(fidi,sprintf('\t '),plower ,6,76); 533 end 534 if ~isempty(pupper) 535 fprintf(fidi,'\t %s_upper_bounds =\n',cstring2); 536 vector_write(fidi,sprintf('\t '),pupper ,6,76); 537 end 538 if ~isempty(ptarget) 539 fprintf(fidi,'\t %s_targets =\n',cstring2); 540 vector_write(fidi,sprintf('\t '),ptarget,6,76); 541 end 281 ghspec_write(fidi,params,dmeth.ghspec); 282 283 fprintf(fidi,'\n'); 542 284 543 285 end … … 550 292 551 293 if find_string(ghspec,'grad') 294 if ~params.numerical_gradients && ~params.analytic_gradients 295 params.numerical_gradients=true; 296 elseif (params.numerical_gradients+params.analytic_gradients > 1) 297 error('Too many gradients selected.') 298 end 299 552 300 if params.numerical_gradients 553 301 param_write(fidi,'\t','numerical_gradients','','\n',params); … … 572 320 573 321 end 574 575 %% function to write a parameter576 577 function []=param_write(fidi,sbeg,pname,smid,send,params)578 579 if ~isfield(params,pname)580 warning('param_write:param_not_found',...581 'Parameter ''%s'' not found in structure.',pname);582 return583 end584 585 if islogical(params.(pname)) && ~params.(pname)586 return587 end588 589 if islogical(params.(pname))590 fprintf(fidi,[sbeg '%s' send],pname);591 elseif ischar (params.(pname))592 fprintf(fidi,[sbeg '%s' smid '%s' send],pname,params.(pname));593 elseif isnumeric(params.(pname))594 fprintf(fidi,[sbeg '%s' smid '%g' send],pname,params.(pname));595 end596 597 end598 599 %% function to write a vector on multiple lines600 601 function []=vector_write(fidi,sbeg,vec,nmax,cmax)602 603 if ~exist('nmax','var') || isempty(nmax)604 nmax=Inf;605 end606 if ~exist('cmax','var') || isempty(cmax)607 cmax=Inf;608 end609 610 % set up first iteration611 612 svec =[];613 nitem=nmax;614 lsvec=cmax;615 616 % transpose vector from column-wise to row-wise617 618 vec=vec';619 620 % assemble each line, flushing when necessary621 622 for i=1:numel(vec)623 if isnumeric(vec(i))624 sitem=sprintf('%g' ,vec(i));625 else626 sitem=sprintf('''%s''',char(vec(i)));627 end628 nitem=nitem+1;629 lsvec=lsvec+1+length(sitem);630 631 if (nitem <= nmax) && (lsvec <= cmax)632 svec=[svec ' ' sitem];633 else634 if ~isempty(svec)635 fprintf(fidi,'%s\n',svec);636 end637 svec=[sbeg sitem];638 nitem=1;639 lsvec=length(svec);640 end641 end642 643 % flush buffer at end, if necessary644 645 if ~isempty(svec)646 fprintf(fidi,'%s\n',svec);647 end648 649 end
Note:
See TracChangeset
for help on using the changeset viewer.