source: issm/trunk-jpl/src/mex/DakotaResponses/DakotaResponses.cpp@ 10937

Last change on this file since 10937 was 9650, checked in by Mathieu Morlighem, 14 years ago

Added qmu object

File size: 2.7 KB
Line 
1/*\file DakotaResponses.c
2*\brief: compute dakota responses after a run
3*/
4
5#include "./DakotaResponses.h"
6
7void mexFunction( int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]){
8
9 int i;
10
11 /*input datasets: */
12 Elements* elements=NULL;
13 Nodes* nodes=NULL;
14 Vertices* vertices=NULL;
15 Loads* loads=NULL;
16 Materials* materials=NULL;
17 Parameters* parameters=NULL;
18 double* responses=NULL;
19 char** responses_descriptors=NULL;
20 char* string=NULL;
21 int numresponses;
22 int numresponsedescriptors;
23 mxArray* pfield=NULL;
24 int stringlength;
25
26 /*Boot module: */
27 MODULEBOOT();
28
29 /*checks on arguments on the matlab side: */
30 CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&DakotaResponsesUsage);
31
32 /*Input datasets: */
33 FetchMatlabData((DataSet**)&elements,ELEMENTSIN);
34 FetchMatlabData((DataSet**)&nodes,NODESIN);
35 FetchMatlabData((DataSet**)&vertices,VERTICESIN);
36 FetchMatlabData((DataSet**)&loads,LOADSIN);
37 FetchMatlabData((DataSet**)&materials,MATERIALSIN);
38 FetchMatlabData(&parameters,PARAMETERSIN);
39
40 /*number of responses: */
41 parameters->FindParam(&numresponses,QmuNumberofresponsesEnum);
42
43 /*dakota input: */
44 numresponsedescriptors=mxGetM(RESPONSESDESCRIPTORS);
45 responses_descriptors=(char**)xmalloc(numresponsedescriptors*sizeof(char*));
46 for(i=0;i<numresponsedescriptors;i++){
47 pfield=mxGetCell(RESPONSESDESCRIPTORS,i);
48 stringlength = (mxGetM(pfield) * mxGetN(pfield) * sizeof(mxChar)) + 1 ;
49 string=(char*)xmalloc(stringlength);
50 mxGetString(pfield,string,stringlength);
51 responses_descriptors[i]=string;
52 }
53
54 /*Allocate responses: */
55 responses=(double*)xmalloc(numresponses*sizeof(double));
56
57 /*configure: */
58 elements-> Configure(elements,loads, nodes,vertices, materials,parameters);
59 nodes-> Configure(elements,loads, nodes,vertices, materials,parameters);
60 loads-> Configure(elements, loads, nodes,vertices, materials,parameters);
61
62 /*!Generate internal degree of freedom numbers: */
63 DakotaResponsesx(responses,elements,nodes, vertices,loads,materials, parameters, responses_descriptors,numresponsedescriptors,numresponses);
64
65 /*write output datasets: */
66 WriteMatlabData(RESPONSES,responses,numresponses);
67
68 /*Free ressources: */
69 delete elements;
70 delete nodes;
71 delete vertices;
72 delete loads;
73 delete materials;
74 delete parameters;
75
76 for(i=0;i<numresponsedescriptors;i++){
77 char* string=responses_descriptors[i]; xfree((void**)&string);
78 }
79 xfree((void**)&responses_descriptors);
80
81 //xfree((void**)&responses); do not free responses!
82
83 /*end module: */
84 MODULEEND();
85}
86
87void DakotaResponsesUsage(void)
88{
89 _printf_(true,"\n");
90 _printf_(true," usage: [responses] = %s(elements,nodes,vertices,loads,materials,parameters,responses_descritpors);\n",__FUNCT__);
91 _printf_(true,"\n");
92}
Note: See TracBrowser for help on using the repository browser.