source:
issm/oecreview/Archive/11700-11718/ISSM-11702-11703.diff
Last change on this file was 11991, checked in by , 13 years ago | |
---|---|
File size: 3.5 KB |
-
proj/ice/larour/issm-uci-clean/trunk-jpl/src/c/solutions/controltao_core.cpp
12 12 #include "../include/include.h" 13 13 #include "../solvers/solvers.h" 14 14 15 #if defined (_HAVE_TAO_) && (_PETSC_MAJOR_ == 3 && _PETSC_MINOR_ == 2)15 #if defined (_HAVE_TAO_) && defined (_HAVE_PETSC_) && (_PETSC_MAJOR_ == 3 && _PETSC_MINOR_ == 2) 16 16 #include <tao.h> 17 17 18 18 /*Local prototype*/ … … 32 32 TaoSolver tao; 33 33 double *dummy = NULL; 34 34 int *control_list = NULL; 35 Vec 36 Vec 37 Vec 35 Vector *X = NULL; 36 Vector *XL = NULL; 37 Vector *XU = NULL; 38 38 39 39 /*Initialize TAO*/ 40 40 int argc; char **args=NULL; … … 67 67 GetVectorFromControlInputsx(&X, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"value"); 68 68 GetVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound"); 69 69 GetVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound"); 70 TaoSetInitialVector(tao,X );71 TaoSetVariableBounds(tao,XL ,XU);72 VecFree(&XL);73 VecFree(&XU);70 TaoSetInitialVector(tao,X->vector); 71 TaoSetVariableBounds(tao,XL->vector,XU->vector); 72 xdelete(&XL); 73 xdelete(&XU); 74 74 75 75 user.femmodel=femmodel; 76 76 TaoSetObjectiveAndGradientRoutine(tao,FormFunctionGradient,(void*)&user); … … 79 79 _printf_(VerboseControl(),"%s\n"," Starting optimization"); 80 80 TaoSolve(tao); 81 81 TaoView(tao,PETSC_VIEWER_STDOUT_WORLD); 82 TaoGetSolutionVector(tao,&X );82 TaoGetSolutionVector(tao,&X->vector); 83 83 SetControlInputsFromVectorx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,X); 84 84 for(int i=0;i<num_controls;i++){ 85 85 InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,control_list[i]); … … 94 94 95 95 /*Clean up and return*/ 96 96 xfree((void**)&control_list); 97 VecFree(&X);97 xdelete(&X); 98 98 TaoDestroy(&tao); 99 99 TaoFinalize(); 100 100 } 101 int FormFunctionGradient(TaoSolver tao, Vec X , double *fcn,Vec G,void *userCtx){101 int FormFunctionGradient(TaoSolver tao, Vec Xpetsc, double *fcn,Vec G,void *userCtx){ 102 102 103 103 /*Retreive arguments*/ 104 104 int solution_type,num_cost_functions; … … 106 106 FemModel *femmodel = user->femmodel; 107 107 int *cost_functions = NULL; 108 108 double *cost_functionsd= NULL; 109 Vec gradient = NULL; 109 Vector *gradient = NULL; 110 Vector *X = NULL; 110 111 112 /*Convert input to Vec*/ 113 X=new Vector(Xpetsc); 114 111 115 /*Set new variable*/ 112 116 //VecView(X,PETSC_VIEWER_STDOUT_WORLD); 113 117 SetControlInputsFromVectorx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,X); … … 135 139 136 140 /*Compute gradient*/ 137 141 Gradjx(&gradient,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters); 138 VecCopy(gradient ,G); VecFree(&gradient);142 VecCopy(gradient->vector,G); xdelete(&gradient); 139 143 VecScale(G,-1.); 140 144 141 145 /*Clean-up and return*/
Note:
See TracBrowser
for help on using the repository browser.