Actual source code: tao_app_util.c
1: #include "taoapp.h" /*I "tao.h" I*/
6: /*@C
7: TaoApplicationFreeMemory - Calls PetscFree() the argument.
9: Collective on TAO_APPLICATION
11: Input Parameters:
12: . ctx - pointer to structure created by PetscMalloc().
14: Level: intermediate
16: Note:
17: A pointer to this routine can be passed into TaoApp functions which will
18: call this routine at a later time.
20: .keywords: destroy
22: .seealso: TaoAppSetDestroyRoutine(), PetscFree()
23: @*/
24: int TaoApplicationFreeMemory(void*ctx){
25: int info;
27: info=PetscFree(ctx); CHKERRQ(info);
28: return(0);
29: }
32: typedef struct {
33: Vec xl,xu;
34: } TaoVBDCtx;
38: static int TaoPetscApplicationCopyBounds(TAO_APPLICATION taoapp, Vec XL, Vec XU, void*ctx){
39: int info;
40: TaoVBDCtx* vbctx = (TaoVBDCtx*)ctx;
42: info=VecCopy(vbctx->xl,XL);CHKERRQ(info);
43: info=VecCopy(vbctx->xu,XU);CHKERRQ(info);
44: return(0);
45: }
50: /*@
51: TaoAppSetVariableBounds - Set bounds on the variables.
53: Collective on TAO_APPLICATION
55: Input Parameters:
56: + taoapp - the TAO_APPLICATION context
57: . XL - vector of lower bounds upon the solution vector
58: - XU - vector of upper bounds upon the solution vector
60: Note:
61: This routine should be called before TaoSetApplicationSolver()
63: Level: beginner
65: .keywords: bounds
67: .seealso: TaoGetVariableBoundVecs(), TaoAppSetVariableBoundsRoutine()
68: @*/
69: int TaoAppSetVariableBounds(TAO_APPLICATION taoapp, Vec XL, Vec XU){
70: int info;
71: TaoVBDCtx* vbctx;
76: PetscNew(TaoVBDCtx,&vbctx);
77: vbctx->xl=XL;
78: vbctx->xu=XU;
79: info=TaoAppSetVariableBoundsRoutine(taoapp,TaoPetscApplicationCopyBounds,(void*)vbctx);
80: info=TaoAppSetDestroyRoutine(taoapp,TaoApplicationFreeMemory, (void*)vbctx); CHKERRQ(info);
81: return(0);
82: }