Changeset 11275
- Timestamp:
- 01/31/12 16:58:36 (13 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h
r11229 r11275 71 71 InversionGradientScalingEnum, 72 72 InversionIscontrolEnum, 73 InversionTaoEnum, 73 74 InversionMaxParametersEnum, 74 75 InversionMaxiterPerStepEnum, -
issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp
r11229 r11275 75 75 case InversionGradientScalingEnum : return "InversionGradientScaling"; 76 76 case InversionIscontrolEnum : return "InversionIscontrol"; 77 case InversionTaoEnum : return "InversionTao"; 77 78 case InversionMaxParametersEnum : return "InversionMaxParameters"; 78 79 case InversionMaxiterPerStepEnum : return "InversionMaxiterPerStep"; -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
r11192 r11275 84 84 parameters->AddObject(iomodel->CopyConstantObject(QmuIsdakotaEnum)); 85 85 parameters->AddObject(iomodel->CopyConstantObject(InversionIscontrolEnum)); 86 parameters->AddObject(iomodel->CopyConstantObject(InversionTaoEnum)); 86 87 87 88 /*some parameters that did not come with the iomodel: */ -
issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp
r11229 r11275 73 73 else if (strcmp(name,"InversionGradientScaling")==0) return InversionGradientScalingEnum; 74 74 else if (strcmp(name,"InversionIscontrol")==0) return InversionIscontrolEnum; 75 else if (strcmp(name,"InversionTao")==0) return InversionTaoEnum; 75 76 else if (strcmp(name,"InversionMaxParameters")==0) return InversionMaxParametersEnum; 76 77 else if (strcmp(name,"InversionMaxiterPerStep")==0) return InversionMaxiterPerStepEnum; -
issm/trunk-jpl/src/c/solutions/controltao_core.cpp
r11271 r11275 17 17 18 18 /*Local prototype*/ 19 int FormFunction(TaoSolver tao,Vec,double *,void*); 19 20 int FormFunctionGradient(TaoSolver tao,Vec,double *,Vec,void*); 20 21 typedef struct { … … 39 40 40 41 /*Line search options*/ 41 info = PetscOptionsSetValue("-tao_ls_stepmax","10e11"); if(info) _error_("STOP"); //does not work42 info = PetscOptionsSetValue("-tao_ls_stepmin","10e5"); if(info) _error_("STOP"); //does not work43 info = PetscOptionsSetValue("-tao_ls_maxfev"," 8"); if(info) _error_("STOP");42 //info = PetscOptionsSetValue("-tao_ls_stepmax","10e11"); if(info) _error_("STOP"); //does not work 43 //info = PetscOptionsSetValue("-tao_ls_stepmin","10e5"); if(info) _error_("STOP"); //does not work 44 info = PetscOptionsSetValue("-tao_ls_maxfev","3"); if(info) _error_("STOP"); 44 45 /*TAO options: http://www.mcs.anl.gov/research/projects/tao/docs/manualpages/solver/TaoSetFromOptions.html*/ 45 46 info = PetscOptionsSetValue("-tao_monitor",""); if(info) _error_("STOP"); 46 47 info = PetscOptionsSetValue("-tao_max_its","10"); if(info) _error_("STOP"); 47 info = PetscOptionsSetValue("-tao_max_funcs","40"); if(info) _error_("STOP"); 48 49 48 info = PetscOptionsSetValue("-tao_max_funcs","30"); if(info) _error_("STOP"); 50 49 51 50 /*Additional options*/ … … 58 57 GetVectorFromInputsx(&initial_solution,femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,MaterialsRheologyBbarEnum,VertexEnum); 59 58 info = TaoCreate(PETSC_COMM_WORLD,&tao); if(info) _error_("STOP"); 60 info = TaoSetType(tao,"tao_blmvm"); if(info) _error_("STOP"); 59 //info = TaoSetType(tao,"tao_blmvm"); if(info) _error_("STOP"); 60 info = TaoSetType(tao,"tao_cg"); if(info) _error_("STOP"); 61 61 info = TaoSetInitialVector(tao,initial_solution); if(info) _error_("STOP"); 62 info = TaoSetObjectiveRoutine(tao,FormFunction,(void*)&user); if(info) _error_("STOP"); 62 63 info = TaoSetObjectiveAndGradientRoutine(tao,FormFunctionGradient,(void*)&user); if(info) _error_("STOP"); 63 64 info = TaoSetFromOptions(tao); if(info) _error_("STOP"); 64 65 /* http://www.mcs.anl.gov/research/projects/tao/docs/manpages/taosolver/TaoSetTolerances.html*/ 65 66 /* fatol, frtol, gatol, grtol, gttol*/ 66 info = TaoSetTolerances(tao,10e-18,10e-18,10e-18,10e-18,10e-18); 67 info = TaoSolve(tao); //if(info) _error_("STOP");67 info = TaoSetTolerances(tao,10e-18,10e-18,10e-18,10e-18,10e-18); if(info) _error_("STOP"); 68 info = TaoSolve(tao); if(info) _error_("STOP"); 68 69 69 70 /*Get solution status*/ … … 96 97 } 97 98 99 int FormFunction(TaoSolver tao, Vec X, double *fcn,void *userCtx){ 100 AppCtx *user = (AppCtx*)userCtx; 101 FemModel *femmodel = user->femmodel; 102 103 int costfunction=SurfaceAbsVelMisfitEnum; 104 femmodel->parameters->SetParam(&costfunction,1,1,StepResponsesEnum); 105 InputUpdateFromVectorx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,X,MaterialsRheologyBbarEnum,VertexEnum); 106 diagnostic_core(user->femmodel); 107 CostFunctionx(fcn, femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters); 108 printf("f(x) = %g\n",*fcn); 109 return 0; 110 } 98 111 int FormFunctionGradient(TaoSolver tao, Vec X, double *fcn,Vec G,void *userCtx){ 99 112 … … 102 115 FemModel *femmodel = user->femmodel; 103 116 Vec gradient = NULL; 104 105 /*Temp*/106 // double* Xserial=NULL;107 // VecToMPISerial(&Xserial,X);108 // printf("X= [%20.20g %20.20g %20.20g]\n",Xserial[0],Xserial[1],Xserial[2]);109 /*End Temp*/110 111 117 112 118 int costfunction=SurfaceAbsVelMisfitEnum; … … 120 126 CostFunctionx(fcn, femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters); 121 127 122 //printf("X\n"); 123 //VecView(X,PETSC_VIEWER_STDOUT_SELF); 124 125 //printf("Gradient\n"); 126 //VecView(G,PETSC_VIEWER_STDOUT_SELF); 127 128 printf("f(x) = %g\n",*fcn); 128 printf("f2(x) = %g\n",*fcn); 129 129 return 0; 130 130 } -
issm/trunk-jpl/src/c/solutions/issm.cpp
r11267 r11275 16 16 FILE *petscoptionsfid = NULL; 17 17 bool waitonlock = false; 18 bool dakota_analysis; 19 bool control_analysis; 18 bool dakota_analysis,control_analysis,tao_analysis; 20 19 21 20 /*FemModel: */ … … 81 80 femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum); 82 81 femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum); 82 femmodel->parameters->FindParam(&tao_analysis,InversionTaoEnum); 83 83 MPI_Barrier(MPI_COMM_WORLD); finish_init=MPI_Wtime(); 84 85 /*are we running the solution sequence, or a qmu wrapper around it? : */86 84 87 85 _printf_(true,"call computational core:\n"); … … 96 94 else if(control_analysis){ 97 95 #ifdef _HAVE_CONTROL_ 98 #ifdef _HAVE_TAO_ 99 controltao_core(femmodel); 100 #else 101 control_core(femmodel); 102 #endif 96 if(tao_analysis) 97 controltao_core(femmodel); 98 else 99 control_core(femmodel); 103 100 #else 104 101 _error_("ISSM was not compiled with control support, cannot carry out dakota analysis!");
Note:
See TracChangeset
for help on using the changeset viewer.