IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Oct 6, 2004, 1:29:16 PM (22 years ago)
Author:
gusciora
Message:

Tests for NULL paramaters in the MinimizePowell functions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/math/psMinimize.c

    r1982 r1991  
    99 *  @author GLF, MHPCC
    1010 *
    11  *  @version $Revision: 1.55 $ $Name: not supported by cvs2svn $
    12  *  @date $Date: 2004-10-06 21:30:53 $
     11 *  @version $Revision: 1.56 $ $Name: not supported by cvs2svn $
     12 *  @date $Date: 2004-10-06 23:29:16 $
    1313 *
    1414 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    12971297 
    12981298XXX: Define constants for default dummy number of iterations and tolerance.
     1299 
     1300XXX: Must define behavior on various NULL inputs.
    12991301 *****************************************************************************/
    13001302bool psMinimizePowell(psMinimization *min,
     
    13041306                      psMinimizePowellFunc func)
    13051307{
     1308    PS_CHECK_NULL_VECTOR_RETURN_NULL(params);
     1309    PS_CHECK_EMPTY_VECTOR_RETURN_NULL(params);
     1310    PS_CHECK_NULL_PTR_RETURN_NULL(min);
     1311    PS_CHECK_NULL_PTR_RETURN_NULL(coords);
     1312    PS_CHECK_NULL_PTR_RETURN_NULL(func);
     1313
    13061314    int numDims = params->n;
    13071315    int i = 0;
     
    13111319    psVector *Q = NULL;
    13121320    psVector *u = NULL;
     1321    psVector *myParamMask = NULL;  // XXX: Use a recylced vector here.
    13131322    psMinimization dummyMin;
    13141323    float mul = 0.0;
     
    13331342    Q = psVectorAlloc(numDims, PS_TYPE_F32);
    13341343
     1344    if (paramMask == NULL) {
     1345        myParamMask = psVectorAlloc(params->n, PS_TYPE_U8);
     1346        for (i=0;i<myParamMask->n;i++) {
     1347            myParamMask->data.U8[i] = 0;
     1348        }
     1349    } else {
     1350        myParamMask = (psVector *) paramMask;
     1351    }
     1352    PS_CHECK_VECTOR_SIZE_EQUAL_RETURN_NULL(params, myParamMask);
     1353
    13351354    // 1: Set v[i] to be the unit vectors for each dimension in params
    13361355    v = (psVector **) psAlloc(params->n * sizeof(psVector **));
     
    13481367    // 2: Set Q to be the initial params (P in the ADD)
    13491368    for (i=0;i<numDims;i++) {
    1350         if (paramMask->data.U8[i] == 0) {
     1369        if (myParamMask->data.U8[i] == 0) {
    13511370            Q->data.F32[i] = params->data.F32[i];
    13521371        }
     
    13681387        biggestIter = 0;
    13691388        for (i=0;i<numDims;i++) {
    1370             if (paramMask->data.U8[i] == 0) {
     1389            if (myParamMask->data.U8[i] == 0) {
    13711390                dummyMin.maxIter = 100;
    13721391                dummyMin.tol = 0.01;
    1373                 mul = p_psLineMin(&dummyMin, Q, v[i], paramMask, coords, func);
     1392                mul = p_psLineMin(&dummyMin, Q, v[i], myParamMask, coords, func);
    13741393                if (fabs(dummyMin.value - currFuncVal) > biggestDiff) {
    13751394                    biggestDiff = fabs(dummyMin.value - currFuncVal);
     
    13821401        // 4: Set the vector u = Q - P
    13831402        for (i=0;i<numDims;i++) {
    1384             if (paramMask->data.U8[i] == 0) {
     1403            if (myParamMask->data.U8[i] == 0) {
    13851404                u->data.F32[i] = Q->data.F32[i] - params->data.F32[i];
    13861405
     
    14021421        }
    14031422
    1404         mul = p_psLineMin(min, params, u, paramMask, coords, func);
     1423        mul = p_psLineMin(min, params, u, myParamMask, coords, func);
    14051424
    14061425        // 6:
     
    14131432            psFree(pQP);
    14141433            psFree(Q);
     1434            if (paramMask == NULL) {
     1435                psFree(myParamMask);
     1436            }
    14151437            psTrace(".psLib.dataManip.psMinimizePowell", 4,
    14161438                    "---- psMinimizePowell() end (true) ----\n");
     
    14191441
    14201442        for (i=0;i<numDims;i++) {
    1421             if (paramMask->data.U8[i] == 0) {
     1443            if (myParamMask->data.U8[i] == 0) {
    14221444                pQP->data.F32[i] = (2 * Q->data.F32[i]) - params->data.F32[i];
    14231445            } else {
     
    14341456        if (term1 < term2) {
    14351457            for (i=0;i<numDims;i++) {
    1436                 if (paramMask->data.U8[i] == 0) {
     1458                if (myParamMask->data.U8[i] == 0) {
    14371459                    v[biggestIter]->data.F32[i] = u->data.F32[i];
    14381460                }
     
    14421464        // 7: Set P to Q
    14431465        for (i=0;i<numDims;i++) {
    1444             if (paramMask->data.U8[i] == 0) {
     1466            if (myParamMask->data.U8[i] == 0) {
    14451467                params->data.F32[i] = Q->data.F32[i];
    14461468            }
     
    14581480            psTrace(".psLib.dataManip.psMinimizePowell", 4,
    14591481                    "---- psMinimizePowell() end (true) ----\n");
     1482            if (paramMask == NULL) {
     1483                psFree(myParamMask);
     1484            }
    14601485            return(true);
    14611486        }
    14621487    }
    14631488
     1489    if (paramMask == NULL) {
     1490        psFree(myParamMask);
     1491    }
    14641492    for (i=0;i<numDims;i++) {
    14651493        psFree(v[i]);
Note: See TracChangeset for help on using the changeset viewer.