Changeset 192


Ignore:
Timestamp:
Jan 17, 2011 3:05:16 PM (9 years ago)
Author:
awalther
Message:

check in patch for deep copy for set_HP and get_HP

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ADOL-C/src/sparse/sparsedrivers.cpp

    r176 r192  
    209209}
    210210#endif
     211
     212static void deepcopy_HP(unsigned int ***HPnew, unsigned int **HP, int indep)
     213{
     214    int i,j,s;
     215    *HPnew = (unsigned int **)malloc(indep*sizeof(unsigned int *));
     216    for (i=0; i<indep; i++) {
     217       s=HP[i][0];
     218       (*HPnew)[i] = (unsigned int *)malloc((s+1)*(sizeof(unsigned int)));
     219       for (j=0; j<=s; j++)
     220           (*HPnew)[i][j] = HP[i][j];
     221    }
     222}
    211223
    212224/****************************************************************************/
     
    443455            tapeInfos=getTapeInfos(tag);
    444456            memcpy(&ADOLC_CURRENT_TAPE_INFOS, tapeInfos, sizeof(TapeInfos));
    445             sHinfos.HP     = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sHinfos.HP;
     457            if (indep != ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sHinfos.indep) {
     458                fprintf(DIAG_OUT,"ADOL-C Error: wrong number of independents stored in hessian pattern.\n");
     459                exit(-1);
     460            }
     461            deepcopy_HP(&sHinfos.HP,ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sHinfos.HP,indep);         
    446462          }
    447463
     
    471487                                 "SMALLEST_LAST","STAR");
    472488
    473        
    474         sHinfos.Hcomp = myalloc2(indep,sHinfos.p);
     489        sHinfos.Hcomp = myalloc2(indep,sHinfos.p);
    475490        sHinfos.Xppp = myalloc3(indep,sHinfos.p,1);
    476491
     
    492507        sHinfos.g = (void *) g;
    493508        sHinfos.hr = (void *) hr;
     509
    494510        setTapeInfoHessSparse(tag, sHinfos);
     511
    495512        tapeInfos=getTapeInfos(tag);
    496513        memcpy(&ADOLC_CURRENT_TAPE_INFOS, tapeInfos, sizeof(TapeInfos));
     514
    497515    }
    498516    else
     
    512530      }
    513531
    514 
    515532    if (sHinfos.Upp == NULL) {
    516533        printf(" ADOL-C error in sparse_hess():"
     
    602619    tapeInfos=getTapeInfos(tag);
    603620    memcpy(&ADOLC_CURRENT_TAPE_INFOS, tapeInfos, sizeof(TapeInfos));
    604     sHinfos.nnz_in = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sHinfos.nnz_in;
    605     sHinfos.HP     = HP;
    606     sHinfos.Hcomp  = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sHinfos.Hcomp;
    607     sHinfos.Xppp   = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sHinfos.Xppp;
    608     sHinfos.Yppp   = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sHinfos.Yppp;
    609     sHinfos.Zppp   = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sHinfos.Zppp;
    610     sHinfos.Upp    = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sHinfos.Upp;
    611     sHinfos.p      = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sHinfos.p;
     621    sHinfos.nnz_in = 0;
     622    deepcopy_HP(&sHinfos.HP,HP,indep);
     623    sHinfos.Hcomp  = NULL;
     624    sHinfos.Xppp   = NULL;
     625    sHinfos.Yppp   = NULL;
     626    sHinfos.Zppp   = NULL;
     627    sHinfos.Upp    = NULL;
     628    sHinfos.p      = 0;
     629    sHinfos.g      = NULL;
     630    sHinfos.hr     = NULL;
     631    sHinfos.indep  = indep;
    612632    setTapeInfoHessSparse(tag, sHinfos);
    613633}
     
    630650    tapeInfos=getTapeInfos(tag);
    631651    memcpy(&ADOLC_CURRENT_TAPE_INFOS, tapeInfos, sizeof(TapeInfos));
    632     *HP = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sHinfos.HP;
     652    deepcopy_HP(HP,ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sHinfos.HP,indep);
    633653}
    634654#else
     
    10301050   if(Upp)
    10311051      myfree2(Upp);
    1032     for (int i=0;i<indep;i++) {
    1033       free(HP[i]);
    1034     }
    1035 
    1036     free(HP);
     1052
     1053   if(HP)
     1054     {
     1055       for (int i=0;i<indep;i++) {
     1056         free(HP[i]);
     1057       }
     1058       free(HP);
     1059     }
    10371060
    10381061#ifdef HAVE_LIBCOLPACK
    10391062     if (g)
    10401063       delete (GraphColoringInterface *) g;
    1041 
    10421064    if (hr)
    10431065        delete (HessianRecovery*) hr;
Note: See TracChangeset for help on using the changeset viewer.