source: issm/trunk/src/c/classes/dakota/DakotaPlugin.cpp@ 13395

Last change on this file since 13395 was 13395, checked in by Mathieu Morlighem, 12 years ago

merged trunk-jpl and trunk for revision 13393

File size: 3.1 KB
Line 
1/*!\file: DakotaPlugin.cpp (see DakotaPlugin.h for explanations)
2 * \brief header file for derived DirectApplicInterface class.
3 * \sa SpwanCore.cpp and \sa qmu.cpp
4 *
5 * This class needs to be understood simultaneously with qmu.cpp and SpwanCore.cpp.
6 * This call is derived from the Dakota DirectApplicInterface class. This is the
7 * only way to plug ISSM's own routines into the Dakota engine. The derived class
8 * has one function called derived_map_ac, which is called by Dakota to drive the
9 * entire snesitivity analysis.
10 *
11 * We use this routine (which gets variables, variable_descriptors from the Dakota
12 * engine, and requests responses from the ISSM solution sequences), to call our
13 * own solutoin cores. This routines calls the SpawnCore routine, which will drive
14 * the entire computations.
15 */
16
17
18#ifdef HAVE_CONFIG_H
19 #include <config.h>
20#else
21#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
22#endif
23
24/*Standard ISSM includes: */
25#include "../../shared/shared.h"
26#include "../../include/include.h"
27#include "../classes.h"
28#include "../../modules/Dakotax/Dakotax.h"
29
30/*Standard includes: */
31#include <string>
32
33#ifdef _HAVE_DAKOTA_ //only works if dakota library has been compiled in.
34
35//Dakota headers
36#include "DakotaResponse.H"
37#include "ParamResponsePair.H"
38#include "DakotaPlugin.h"
39#include "system_defs.h"
40#include "ProblemDescDB.H"
41#include "ParallelLibrary.H"
42
43namespace SIM {
44
45//constructor
46DakotaPlugin::DakotaPlugin(const Dakota::ProblemDescDB& problem_db,void* in_femmodel):Dakota::DirectApplicInterface(problem_db){
47
48
49 femmodel=in_femmodel;
50 counter=0;
51}
52
53//destructor
54DakotaPlugin::~DakotaPlugin(){ /* Virtual destructor handles referenceCount at Interface level. */ }
55
56int DakotaPlugin::derived_map_ac(const Dakota::String& driver) {
57
58 int i;
59 IssmDouble* variables=NULL;
60 char** variable_descriptors=NULL;
61 char* variable_descriptor=NULL;
62 IssmDouble* responses=NULL;
63
64 /*increae counter: */
65 counter++;
66
67 /*Before launching analysis, we need to transfer the dakota inputs into Issm
68 *readable variables: */
69
70 /*First, the variables: */
71 variables=xNew<IssmDouble>(numACV);
72 for(i=0;i<numACV;i++){
73 variables[i]=xC[i];
74 }
75 /*The descriptors: */
76 variable_descriptors=xNew<char*>(numACV);
77 for(i=0;i<numACV;i++){
78 string label=xCLabels[i];
79 variable_descriptor=xNew<char>(strlen(label.c_str())+1);
80 memcpy(variable_descriptor,label.c_str(),(strlen(label.c_str())+1)*sizeof(char));
81
82
83 variable_descriptors[i]=variable_descriptor;
84 }
85
86 /*Initialize responses: */
87 responses=xNewZeroInit<IssmDouble>(numFns);
88
89 /*run core solution: */
90 SpawnCore(responses,numFns, variables,variable_descriptors,numACV,femmodel,counter);
91
92 /*populate responses: */
93 for(i=0;i<numFns;i++){
94 fnVals[i]=responses[i];
95 }
96
97
98 /*Free ressources:*/
99 xDelete<IssmDouble>(variables);
100 for(i=0;i<numACV;i++){
101 variable_descriptor=variable_descriptors[i];
102 xDelete<char>(variable_descriptor);
103 }
104 xDelete<char*>(variable_descriptors);
105 xDelete<IssmDouble>(responses);
106
107 return 0;
108}
109
110
111int DakotaPlugin::GetCounter(){
112 return counter;
113}
114
115} // namespace SIM
116
117
118#endif //only works if dakota library has been compiled in.
Note: See TracBrowser for help on using the repository browser.