7 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
11 #if !defined(_WRAPPERS_) && defined(_HAVE_DAKOTA_) && _DAKOTA_MAJOR_ >= 6
13 #include "../classes.h"
14 #include "../../cores/cores.h"
15 #include "../../modules/modules.h"
18 IssmParallelDirectApplicInterface::IssmParallelDirectApplicInterface(
const Dakota::ProblemDescDB& problem_db,
const MPI_Comm& evaluation_comm,
int argc,
char** argv) :Dakota::DirectApplicInterface(problem_db){
25 femmodel_init=
new FemModel(argc,argv,evaluation_comm);
26 femmodel_init->profiler->Start(
CORE);
31 IssmParallelDirectApplicInterface::~IssmParallelDirectApplicInterface(){
39 femmodel_init->profiler->Stop(
CORE);
40 femmodel_init->CleanUp();
47 int IssmParallelDirectApplicInterface::derived_map_ac(
const Dakota::String& ac_name){
51 char **responses_descriptors = NULL;
52 char *response_descriptor = NULL;
53 int numresponsedescriptors;
55 bool control_analysis =
false;
56 void (*solutioncore)(
FemModel*) = NULL;
57 bool nodakotacore =
true;
63 if(world_rank==0)
return 0;
66 _printf0_(
"eval server id" << evalServerId <<
" invoking " << ac_name <<
" within SIM::IssmParallelDirectApplicInterface." << std::endl);
67 _printf0_(
"evalServerId " << evalServerId <<
"evaluation_id " << currEvalId <<
"\n");
72 char **variable_descriptors = NULL;
73 char *variable_descriptor = NULL;
79 variables=xNew<IssmDouble>(numACV);
80 for(i=0;i<numACV;i++){
84 variable_descriptors=xNew<char*>(numACV);
85 for(i=0;i<numACV;i++){
86 std::string label=xCLabels[i];
87 variable_descriptor=xNew<char>(strlen(label.c_str())+1);
88 memcpy(variable_descriptor,label.c_str(),(strlen(label.c_str())+1)*
sizeof(
char));
90 variable_descriptors[i]=variable_descriptor;
94 responses=xNewZeroInit<IssmDouble>(numFns);
123 femmodel->DakotaResponsesx(responses,responses_descriptors,numresponsedescriptors,numFns);
130 for(i=0;i<numFns;i++){
131 fnVals[i]=responses[i];
135 xDelete<IssmDouble>(variables);
136 for(i=0;i<numACV;i++){
137 variable_descriptor=variable_descriptors[i];
138 xDelete<char>(variable_descriptor);
140 xDelete<char*>(variable_descriptors);
141 for(i=0;i<numresponsedescriptors;i++){
142 response_descriptor=responses_descriptors[i];
143 xDelete<char>(response_descriptor);
145 if(responses_descriptors) xDelete<char*>(responses_descriptors);
146 xDelete<IssmDouble>(responses);