1 | #move this stuff elsewhere
|
---|
2 | from helpers import *
|
---|
3 |
|
---|
4 | from dakota_in_write import *
|
---|
5 | from dakota_in_params import *
|
---|
6 | from MatlabFuncs import *
|
---|
7 |
|
---|
8 | def dakota_in_data(dmeth,variables,responses,dparams,filei,*args):
|
---|
9 | '''
|
---|
10 | define the data to write the dakota .in and .m files.
|
---|
11 |
|
---|
12 | []=dakota_in_data(dmeth,variables,responses,dparams,filei,*args)
|
---|
13 |
|
---|
14 | where the required input is:
|
---|
15 | dmeth (dakota_method, method class object)
|
---|
16 | variables (structure array, variable class objects)
|
---|
17 | responses (structure array, response class objects)
|
---|
18 | dparams (structure array, method-independent parameters)
|
---|
19 | filei (character, name of .in and .m files)
|
---|
20 |
|
---|
21 | params may be empty, in which case defaults will be used.
|
---|
22 |
|
---|
23 | the optional args are passed directly through to the
|
---|
24 | QmuUpdateFunctions brancher to be used by the analysis
|
---|
25 | package. for example, this could be model information.
|
---|
26 |
|
---|
27 | this function defines the data to write the dakota .in and
|
---|
28 | .m files. it is necessary for multiple reasons. first,
|
---|
29 | it collects the parameters and applies some defaults that
|
---|
30 | are unique to the environment. second, some analysis package
|
---|
31 | variables and/or responses may be treated differently by
|
---|
32 | dakota. for example, an analysis package variable may be
|
---|
33 | defined as an array, so the QmuSetupDesign brancher will
|
---|
34 | create dakota variables for each element of the array.
|
---|
35 | finally it calls the functions to write the .in and .m files.
|
---|
36 | this function is independent of the particular analysis
|
---|
37 | package.
|
---|
38 |
|
---|
39 | this data would typically be generated by a matlab script
|
---|
40 | for a specific model, using the method, variable, and
|
---|
41 | response class objects.
|
---|
42 | '''
|
---|
43 |
|
---|
44 | ## parameters
|
---|
45 | # get default set of parameters
|
---|
46 | params=dakota_in_params(struct())
|
---|
47 | # merge specified parameters into default set, whether or not
|
---|
48 | # they already exist
|
---|
49 | fnames=fieldnames(dparams)
|
---|
50 |
|
---|
51 | for fieldname in fnames:
|
---|
52 | if not isfield(params,fieldname):
|
---|
53 | print('WARNING: dakota_in_data:unknown_param: No parameter {} in default parameter set.'.format(str(fieldname)))
|
---|
54 | exec('params.{} = vars(dparams)[fieldname]'.format(fieldname))
|
---|
55 |
|
---|
56 | # use matlab even though we are running python
|
---|
57 | if params.direct and params.analysis_driver == '':
|
---|
58 | params.analysis_driver='matlab'
|
---|
59 |
|
---|
60 | if strcmpi(params.analysis_driver,'matlab') and params.analysis_components == '':
|
---|
61 | [pathstr,name,ext] = fileparts(filei)
|
---|
62 | params.analysis_components=fullfile(pathstr,name+'.py')
|
---|
63 |
|
---|
64 | # merge method parameters, though they shouldn't be in dparams
|
---|
65 | # dmeth=dmeth_params_merge(dmeth,dparams)
|
---|
66 |
|
---|
67 | ## variables
|
---|
68 | fnames=fieldnames(variables)
|
---|
69 |
|
---|
70 | # works like matlab arbitrary structs/classes, remembers order of input attributes
|
---|
71 | dvar = OrderedStruct()
|
---|
72 | dresp = OrderedStruct()
|
---|
73 |
|
---|
74 | for i in range(len(fnames)):
|
---|
75 | # currently all variable types can just be copied
|
---|
76 | exec(('dvar.%s = vars(variables)[fnames[i]]')%(fnames[i]))
|
---|
77 |
|
---|
78 | ## responses
|
---|
79 | fnames=fieldnames(responses)
|
---|
80 |
|
---|
81 | for i in range(len(fnames)):
|
---|
82 | # currently all response types can just be copied
|
---|
83 | exec(('dresp.%s = vars(responses)[fnames[i]]')%(fnames[i]))
|
---|
84 |
|
---|
85 |
|
---|
86 | ## write files
|
---|
87 | #Write in file
|
---|
88 | dakota_in_write(dmeth,dvar,dresp,params,filei,*args)
|
---|