Changeset 11703
- Timestamp:
- 03/14/12 09:08:48 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/solutions/controltao_core.cpp
r11513 r11703 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 … … 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*/ … … 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; … … 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++){ … … 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*/ … … 107 107 int *cost_functions = NULL; 108 108 double *cost_functionsd= NULL; 109 Vec gradient = NULL; 109 Vector *gradient = NULL; 110 Vector *X = NULL; 111 112 /*Convert input to Vec*/ 113 X=new Vector(Xpetsc); 110 114 111 115 /*Set new variable*/ … … 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
Note:
See TracChangeset
for help on using the changeset viewer.