Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp =================================================================== --- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp (revision 22409) +++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp (revision 22410) @@ -181,7 +181,6 @@ /*Free ressources:*/ for(j=0;j(string); } xDelete(nodalvalue_name_s); @@ -321,11 +320,9 @@ int numout; char **ncf_name_s = NULL; char **ncf_definitionstring_s = NULL; + char **cost_functions = NULL; int cost_function ,domaintype; int num_cost_functions; - char **cost_functions = NULL; - int num_costfunc; - char **cm_responses = NULL; /*Process cost functions and convert from string to enums*/ iomodel->FindConstant(&num_cost_functions,"md.numberedcostfunction.num_cost_functions"); @@ -336,7 +333,7 @@ cost_function_enums[i]=StringToEnumx(cost_functions[i]); } - iomodel->FetchData(1,"md.numberedcostfunction.cost_functions_coefficients"); + //iomodel->FetchData(1,"md.numberedcostfunction.cost_functions_coefficients"); iomodel->FetchMultipleData(&ncf_name_s,&numout,"md.numberedcostfunction.name"); iomodel->FetchMultipleData(&ncf_definitionstring_s,&numout,"md.numberedcostfunction.definitionstring"); @@ -361,29 +358,25 @@ for(j=0;jAddObject(new Numberedcostfunction(ncf_name_s[j],StringToEnumx(ncf_definitionstring_s[j]),num_costfunc,cost_function_enums)); + output_definitions->AddObject(new Numberedcostfunction(ncf_name_s[j],StringToEnumx(ncf_definitionstring_s[j]),num_cost_functions,cost_function_enums)); } - parameters->AddObject(iomodel->CopyConstantObject("md.inversion.num_cost_functions",InversionNumCostFunctionsEnum)); - iomodel->FindConstant(&cm_responses,&num_costfunc,"md.inversion.cost_functions"); - //if(num_costfunc<1) error ("no cost functions found"); - int* costfunc_enums=xNew(num_costfunc); - for(int i=0;i(cm_responses[i]); - } - xDelete(cm_responses); - - parameters->AddObject(new IntVecParam(InversionCostFunctionsEnum,costfunc_enums,num_costfunc)); - xDelete(costfunc_enums); - /*Free data: */ - iomodel->DeleteData(1,"md.inversion.cost_functions_coefficients"); + //iomodel->DeleteData(1,"md.inversion.cost_functions_coefficients"); + iomodel->DeleteData(2,"md.numberedcostfunction.name","md.numberedcostfunction.definitionstring"); xDelete(cost_function_enums); for(int i=0;i(cost_functions[i]); xDelete(cost_functions); + + /*Free ressources:*/ + for(j=0;j(ncf_name_s[j]); + xDelete(ncf_definitionstring_s[j]); + } + xDelete(ncf_name_s); + xDelete(ncf_definitionstring_s); } /*}}}*/ else _error_("output definition enum " << EnumToStringx(output_definition_enums[i]) << " not supported yet!"); Index: ../trunk-jpl/src/c/classes/Numberedcostfunction.h =================================================================== --- ../trunk-jpl/src/c/classes/Numberedcostfunction.h (revision 22409) +++ ../trunk-jpl/src/c/classes/Numberedcostfunction.h (revision 22410) @@ -37,7 +37,6 @@ } /*}}}*/ Numberedcostfunction(char* in_name, int in_definitionenum,int number_cost_functions_in,int* cost_functions_list_in){/*{{{*/ - _assert_(number_cost_functions_in>0); _assert_(cost_functions_list_in); @@ -107,40 +106,34 @@ /*}}}*/ IssmDouble Response(FemModel* femmodel){/*{{{*/ + _assert_(number_cost_functions>0 && number_cost_functions<1e3); /*output:*/ IssmDouble value; /*Intermediary*/ - int num_responses; - int *responses = NULL; Results *cost_functions = NULL; - - /*Recover parameters*/ - femmodel->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum); - femmodel->parameters->FindParam(&responses,NULL,InversionCostFunctionsEnum); - /*Get the value of all cost functions*/ - femmodel->RequestedOutputsx(&cost_functions,responses,num_responses); + femmodel->RequestedOutputsx(&cost_functions,cost_functions_list,number_cost_functions); /*Get and add all contributions one by one*/ - IssmDouble J=0; - IssmDouble* Jlist = xNew(num_responses); - for(int i=0;i(number_cost_functions); + for(int i=0;iGetObjectByOffset(i); Jlist[i] = reCast(result->GetValue()); J += Jlist[i]; } - _assert_(cost_functions->Size()==num_responses); + _assert_(cost_functions->Size()==number_cost_functions); value = J; _printf_("J: "<(Jlist); + return value; } /*}}}*/ };