1 | function md=diagnostic(md);
|
---|
2 | %DIAGNOSTIC - compute the velocity field of a model
|
---|
3 | %
|
---|
4 | % Usage:
|
---|
5 | % md=diagnostic(md)
|
---|
6 | %
|
---|
7 | %timing
|
---|
8 | t1=clock;
|
---|
9 |
|
---|
10 | %Build all models requested for diagnostic simulation
|
---|
11 | models.analysis_type=DiagnosticAnalysisEnum; %needed for processresults
|
---|
12 |
|
---|
13 | displaystring(md.verbose,'%s',['reading diagnostic horiz model data']);
|
---|
14 | md.analysis_type=DiagnosticAnalysisEnum; md.sub_analysis_type=HorizAnalysisEnum; models.dh=CreateFemModel(md);
|
---|
15 |
|
---|
16 | displaystring(md.verbose,'\n%s',['reading diagnostic vert model data']);
|
---|
17 | md.analysis_type=DiagnosticAnalysisEnum; md.sub_analysis_type=VertAnalysisEnum; models.dv=CreateFemModel(md);
|
---|
18 |
|
---|
19 | displaystring(md.verbose,'\n%s',['reading diagnostic stokes model data']);
|
---|
20 | md.analysis_type=DiagnosticAnalysisEnum; md.sub_analysis_type=StokesAnalysisEnum; models.ds=CreateFemModel(md);
|
---|
21 |
|
---|
22 | displaystring(md.verbose,'\n%s',['reading diagnostic hutter model data']);
|
---|
23 | md.analysis_type=DiagnosticAnalysisEnum; md.sub_analysis_type=HutterAnalysisEnum; models.dhu=CreateFemModel(md);
|
---|
24 |
|
---|
25 | displaystring(md.verbose,'\n%s',['reading surface and bed slope computation model data']);
|
---|
26 | md.analysis_type=SlopecomputeAnalysisEnum; md.sub_analysis_type=NoneAnalysisEnum; models.sl=CreateFemModel(md);
|
---|
27 |
|
---|
28 | % figure out number of dof: just for information purposes.
|
---|
29 | md.dof=modelsize(models);
|
---|
30 |
|
---|
31 | %initialize inputs
|
---|
32 | inputs=inputlist;
|
---|
33 | inputs=add(inputs,'velocity',models.dh.parameters.u_g,'doublevec',3,models.dh.parameters.numberofnodes);
|
---|
34 | if md.control_analysis,
|
---|
35 | inputs=add(inputs,'velocity_obs',models.dh.parameters.u_g_obs,'doublevec',2,models.dh.parameters.numberofnodes);
|
---|
36 | inputs=add(inputs,'weights',models.dh.parameters.weights,'doublevec',1,models.dh.parameters.numberofnodes);
|
---|
37 | end
|
---|
38 |
|
---|
39 | %compute solution
|
---|
40 | if ~models.dh.parameters.qmu_analysis,
|
---|
41 | if md.control_analysis,
|
---|
42 | %launch core of control solution.
|
---|
43 | results=control_core(models,inputs);
|
---|
44 |
|
---|
45 | %process results
|
---|
46 | if ~isstruct(md.results), md.results=struct(); end
|
---|
47 | md.results.diagnostic=processresults(models,results);
|
---|
48 | else,
|
---|
49 | %launch core of diagnostic solution.
|
---|
50 | results=diagnostic_core(models,inputs);
|
---|
51 |
|
---|
52 | %process results
|
---|
53 | if ~isstruct(md.results), md.results=struct(); end
|
---|
54 | md.results.diagnostic=processresults(models,results);
|
---|
55 | end
|
---|
56 | else
|
---|
57 | %launch dakota driver for diagnostic core solution
|
---|
58 | Qmu(models,inputs,models.dh.parameters);
|
---|
59 | end
|
---|
60 |
|
---|
61 | %stop timing
|
---|
62 | t2=clock;
|
---|
63 | displaystring(md.verbose,'\n%s\n',['solution converged in ' num2str(etime(t2,t1)) ' seconds']);
|
---|