Changeset 261


Ignore:
Timestamp:
Jul 3, 2011 4:27:49 PM (9 years ago)
Author:
awalther
Message:

nlfs once more

Location:
trunk/ADOL-C/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/ADOL-C/src/Makefile.in

    r257 r261  
    8888        fov_offset_forward.c revolve.c taping_p.h int_forward_s.c \
    8989        int_forward_t.c indopro_forward_s.c indopro_forward_t.c \
    90         csod_forward_s.c csod_forward_t.c nonl_ind_forward_s.c \
     90        nlf_forward_s.c nlf_forward_t.c nonl_ind_forward_s.c \
    9191        nonl_ind_forward_t.c int_reverse_s.c int_reverse_t.c
    9292@SPARSE_FALSE@am_libadolc_la_OBJECTS = adalloc.lo malloc.lo adouble.lo \
     
    109109@SPARSE_TRUE@   fov_offset_forward.lo revolve.lo int_forward_s.lo \
    110110@SPARSE_TRUE@   int_forward_t.lo indopro_forward_s.lo \
    111 @SPARSE_TRUE@   indopro_forward_t.lo csod_forward_s.lo \
    112 @SPARSE_TRUE@   csod_forward_t.lo nonl_ind_forward_s.lo \
     111@SPARSE_TRUE@   indopro_forward_t.lo nlf_forward_s.lo \
     112@SPARSE_TRUE@   nlf_forward_t.lo nonl_ind_forward_s.lo \
    113113@SPARSE_TRUE@   nonl_ind_forward_t.lo int_reverse_s.lo \
    114114@SPARSE_TRUE@   int_reverse_t.lo
     
    364364@SPARSE_TRUE@                       int_forward_s.c int_forward_t.c \
    365365@SPARSE_TRUE@                       indopro_forward_s.c indopro_forward_t.c \
    366 @SPARSE_TRUE@                       csod_forward_s.c csod_forward_t.c \
     366@SPARSE_TRUE@                       nlf_forward_s.c nlf_forward_t.c \
    367367@SPARSE_TRUE@                       nonl_ind_forward_s.c nonl_ind_forward_t.c \
    368368@SPARSE_TRUE@                       int_reverse_s.c int_reverse_t.c
     
    468468@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checkpointing.Plo@am__quote@
    469469@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convolut.Plo@am__quote@
    470 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csod_forward_s.Plo@am__quote@
    471 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csod_forward_t.Plo@am__quote@
    472470@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/externfcts.Plo@am__quote@
    473471@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fixpoint.Plo@am__quote@
     
    494492@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interfacesf.Plo@am__quote@
    495493@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc.Plo@am__quote@
     494@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlf_forward_s.Plo@am__quote@
     495@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlf_forward_t.Plo@am__quote@
    496496@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonl_ind_forward_s.Plo@am__quote@
    497497@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonl_ind_forward_t.Plo@am__quote@
  • trunk/ADOL-C/src/interfaces.h

    r255 r261  
    317317/*--------------------------------------------------------------------------*/
    318318/*                                                               CSOD, SAFE */
    319 /* csod_forward_safe(tag, m, n, p, x[n], *crs[m])                            */
    320 
    321 ADOLC_DLL_EXPORT int csod_forward_safe
     319/* nlf_forward_safe(tag, m, n, p, x[n], *crs[m])                            */
     320
     321ADOLC_DLL_EXPORT int nlf_forward_safe
    322322(short, int, int, const double*, unsigned int**);
    323323
     
    325325/*--------------------------------------------------------------------------*/
    326326/*                                                           INDOPRO, TIGHT */
    327 /* csod_forward_tight(tag, m, n,  x[n], *crs[m])                             */
    328 
    329 ADOLC_DLL_EXPORT int csod_forward_tight
     327/* nlf_forward_tight(tag, m, n,  x[n], *crs[m])                             */
     328
     329ADOLC_DLL_EXPORT int nlf_forward_tight
    330330(short, int, int, const double*, unsigned int**);
    331331
  • trunk/ADOL-C/src/uni5_for.c

    r259 r261  
    788788    IndexElement*  temp;
    789789    IndexElement*  temp1;
     790    int opind;
    790791    int index;
    791792    int index1;
     
    844845    locint** ind_dom;
    845846#if defined(_NLF_)
    846     locint** fod;
     847    locint** nlf;
     848    locint* arg_index;
    847849#endif
    848850#else
     
    10311033        max_ind_dom = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES];
    10321034#else
    1033         ind_dom = (locint **)  malloc(sizeof(locint*) * (ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES]+1));
    1034         fod = (locint **)  malloc(sizeof(locint*) * (ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES]+1));   
    1035         offset= ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES];
    1036         max_ind_dom = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES]+1;
     1035        ind_dom = (locint **)  malloc(sizeof(locint*) * (ADOLC_CURRENT_TAPE_INFOS.stats[NUM_OPERATIONS]));
     1036        nlf = (locint **)  malloc(sizeof(locint*) * (ADOLC_CURRENT_TAPE_INFOS.stats[NUM_OPERATIONS]));   
     1037        arg_index = (locint *)  malloc(sizeof(locint) * (ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES]));   
     1038
     1039        opind = 0;
     1040        max_ind_dom = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_OPERATIONS];
    10371041        csod = (struct IndexElement**) malloc(sizeof(struct IndexElement*) * indcheck);
    10381042        for(i=0;i<indcheck;i++)
     
    10521056      ind_dom[i][1] = NUMNNZ;
    10531057#if defined(_NLF_)
    1054       // structure of fod[i]
    1055       // fod[i][0] = number of ind_doms contained in fod[i]
    1056       // fod[i][1] = length of array-3  = place for entries
    1057       // fod[i][2] = number of entries
    1058       fod[i] = (locint *)  malloc(sizeof(locint) * (103));
    1059       fod[i][0] = 0;
    1060       fod[i][1] = 100;
    1061       fod[i][2] = 0;
     1058      // structure of nlf
     1059      // same as ind_dom
     1060      nlf[i] = (locint *)  malloc(sizeof(locint) * (NUMNNZ));
     1061      nlf[i][0] = 0;
     1062      nlf[i][1] = NUMNNZ;
    10621063#endif
    10631064    }
     
    12961297
    12971298#if defined(_INDO_)
     1299#if !defined(_NLF_)
    12981300                copy_index_domain(res, arg, ind_dom);
    1299 #if defined(_NLF_)
    1300                 copy_fod(res, arg, fod);
     1301#else
     1302                arg_index[res] = opind++;               
     1303                copy_index_domain(arg_index[res],arg_index[arg], ind_dom);
     1304                copy_index_domain(arg_index[res],arg_index[arg], nlf);
    13011305#endif
    13021306#else
     
    13261330                ind_dom[res][0]=0;
    13271331#if defined(_NLF_)
    1328                 fod[res][0] = 0;
    1329                 fod[res][2] = 0;
     1332                arg_index[res] = opind++;               
     1333                nlf[arg_index[res]][0] = 0;
     1334                nlf[arg_index[res]][2] = 0;
    13301335#endif
    13311336#else
     
    13531358                ind_dom[res][0]=0;
    13541359#if defined(_NLF_)
    1355                 fod[res][0] = 0;
    1356                 fod[res][2] = 0;
     1360                nlf[arg_index[res]][0] = 0;
     1361                nlf[arg_index[res]][2] = 0;
    13571362#endif
    13581363#else
     
    13801385                ind_dom[res][0]=0;
    13811386#if defined(_NLF_)
    1382                 fod[res][0] = 0;
    1383                 fod[res][2] = 0;
     1387                nlf[res][0] = 0;
     1388                nlf[res][2] = 0;
    13841389#endif
    13851390#else
     
    14061411
    14071412#if defined(_INDO_)
     1413#if !defined(_NLF_)
    14081414                ind_dom[res][0] = 1;
    14091415                ind_dom[res][2] = indexi;
     1416#else
     1417                arg_index[res] = opind++;               
     1418                ind_dom[arg_index[res]][0] = 1;
     1419                ind_dom[arg_index[res]][2] = arg_index[res];
     1420#endif         
    14101421#else
    14111422#if !defined(_ZOS_) /* BREAK_ZOS */
     
    14521463#endif
    14531464#if defined(_NLF_)
    1454                                
    1455                 int startfod = 3;
    1456                 for(l=0;l<fod[res][0];l++)
     1465               
     1466                for(l=2;l<=nlf[arg_index[res]][0]+1;l++)
    14571467                  {
    1458                     for(ii=1;ii<=fod[res][startfod];ii++)
     1468                    int index = nlf[arg_index[res]][l];
     1469                    for(ii=2;ii<=ind_dom[index][0]+1;ii++)
    14591470                      {
    1460                         index1 = fod[res][startfod+ii];
    1461                         for(jj=1;jj<=fod[res][startfod];jj++)
     1471                        index1 = ind_dom[index][ii];
     1472                        for(jj=2;jj<=ind_dom[index][0]+1;jj++)
    14621473                          {
    14631474                            temp1 = csod[index1];
     
    14711482                                    temp = (struct IndexElement*) malloc(sizeof(struct IndexElement));
    14721483                                    temp1->next = temp;
    1473                                     temp->entry = fod[res][startfod+jj];
     1484                                    temp->entry = ind_dom[index][jj];
    14741485                                    temp->next = NULL;
    14751486                                    csod[index1]->entry++;
     
    14781489                                else
    14791490                                  {
    1480                                     if (temp->entry < fod[res][startfod+jj])
     1491                                    if (temp->entry < ind_dom[index][jj])
    14811492                                      {
    14821493                                        temp1 = temp;
     
    14851496                                    else
    14861497                                      {
    1487                                         if (temp->entry == fod[res][startfod+jj])
     1498                                        if (temp->entry == ind_dom[index][jj])
    14881499                                          i = 1;
    14891500                                        else
    14901501                                          {
    14911502                                            temp = (struct IndexElement*) malloc(sizeof(struct IndexElement));
    1492                                             temp->entry = fod[res][startfod+jj];
     1503                                            temp->entry = ind_dom[index][jj];
    14931504                                            csod[index1]->entry++;
    14941505                                            temp->next = temp1->next;
     
    15021513                          }
    15031514                      }
    1504                     startfod += (fod[res][startfod]+1);
    15051515                  }
    15061516#endif
     
    15561566                merge_2_index_domains(res, arg, ind_dom);
    15571567#if defined(_NLF_)
    1558                 append_fod(res,arg,fod);
     1568                /* append_fod(res,arg,fod); */
    15591569#endif
    15601570#else
     
    16021612                merge_2_index_domains(res, arg, ind_dom);
    16031613#if defined(_NLF_)
    1604                 append_fod(res,arg,fod);
     1614                /* append_fod(res,arg,fod); */
    16051615#endif
    16061616#else
     
    16571667                merge_2_index_domains(res, arg, ind_dom);
    16581668#if defined(_NLF_)
    1659                 copy_index_domain_2_fod(res,fod,ind_dom);
     1669                /* copy_index_domain_2_fod(res,fod,ind_dom); */
    16601670#endif
    16611671#if defined(_NONLIND_)
     
    17351745
    17361746#if defined(_INDO_)
     1747#if !defined(_NLF_)
    17371748                combine_2_index_domains(res, arg1, arg2, ind_dom);
    1738 #if defined(_NLF_)     
    1739                 combine_2_fod(res, arg1, arg2, fod);
     1749#else     
     1750                arg_index[res] = opind++;               
     1751                combine_2_index_domains(arg_index[res], arg_index[arg1], arg_index[arg2], ind_dom);
     1752                combine_2_index_domains(arg_index[res], arg_index[arg1], arg_index[arg2], nlf);
    17401753#endif
    17411754#else
     
    17701783
    17711784#if defined(_INDO_)
     1785#if !defined(_NLF_)
    17721786                copy_index_domain(res, arg, ind_dom);
    1773 #if defined(_NLF_)
    1774                 copy_fod(res, arg, fod);
     1787#else
     1788                arg_index[res] = opind++;               
     1789                copy_index_domain(arg_index[res],arg_index[arg], ind_dom);
     1790                copy_index_domain(arg_index[res],arg_index[arg], nlf);
    17751791#endif
    17761792#else
     
    18031819                combine_2_index_domains(res, arg1, arg2, ind_dom);
    18041820#if defined(_NLF_)
    1805                 combine_2_fod(res, arg1, arg2, fod);
     1821                /* combine_2_fod(res, arg1, arg2, fod); */
    18061822#endif
    18071823#else
     
    18381854                copy_index_domain(res, arg, ind_dom);
    18391855#if defined(_NLF_)
    1840                 copy_fod(res, arg, fod);
     1856                /* copy_fod(res, arg, fod); */
    18411857#endif
    18421858#else
     
    18651881
    18661882#if defined(_INDO_)
     1883#if !defined(_NLF_)
    18671884                combine_2_index_domains(res, arg1, arg2, ind_dom);
    1868 #if defined(_NLF_)
    1869                 copy_index_domain_2_fod(res,fod,ind_dom);
     1885#else
     1886                arg_index[res] = opind++;               
     1887                combine_2_index_domains(arg_index[res], arg_index[arg1], arg_index[arg2], ind_dom);
     1888                nlf[arg_index[res]][0] = 1;
     1889                nlf[arg_index[res]][2] = arg_index[res];
    18701890#endif
    18711891#if defined(_NONLIND_)
     
    19201940
    19211941#if defined(_INDO_)
     1942#if !defined(_NLF_)
    19221943                merge_3_index_domains(res, arg1, arg2, ind_dom);
    1923 #if defined(_NLF_)
    1924                 append_index_domain_2_fod(res, offset, arg1, arg2, fod, ind_dom);
     1944#else
     1945                /* arg_index[res] = opind++;             */
     1946                /* combine_2_index_domains(arg_index[res], arg_index[arg1], arg_index[arg2], ind_dom); */
     1947                /* merge_3_index_domains(res, arg1, arg2, ind_dom); */
     1948                /* append_index_domain_2_fod(res, offset, arg1, arg2, fod, ind_dom); */
    19251949#endif
    19261950#if defined(_NONLIND_)
     
    19762000                merge_3_index_domains(res, arg1, arg2, ind_dom);
    19772001#if defined(_NLF_)
    1978                 append_index_domain_2_fod(res, offset, arg1, arg2, fod, ind_dom);
     2002                /* append_index_domain_2_fod(res, offset, arg1, arg2, fod, ind_dom); */
    19792003#endif
    19802004#if defined(_NONLIND_)
     
    20362060                copy_index_domain(res, arg, ind_dom);
    20372061#if defined(_NLF_)
    2038                 copy_fod(res, arg, fod);
     2062                /* copy_fod(res, arg, fod); */
    20392063#endif
    20402064#else
     
    20752099                combine_2_index_domains(res, arg1, arg2, ind_dom);
    20762100#if defined(_NLF_)
    2077                 copy_index_domain_2_fod(res,fod,ind_dom);
     2101                /* copy_index_domain_2_fod(res,fod,ind_dom); */
    20782102#endif
    20792103#if defined(_NONLIND_)
     
    21392163                copy_index_domain(res, arg, ind_dom);
    21402164#if defined(_NLF_)
    2141                 copy_fod(res, arg, fod);
     2165                /* copy_fod(res, arg, fod); */
    21422166#endif
    21432167#if defined(_NONLIND_)
     
    21942218                copy_index_domain(res, arg, ind_dom);
    21952219#if defined(_NLF_)
    2196                 copy_fod(res, arg, fod);
     2220                /* copy_fod(res, arg, fod); */
    21972221#endif
    21982222#else
     
    22212245                copy_index_domain(res, arg, ind_dom);
    22222246#if defined(_NLF_)
    2223                 copy_fod(res, arg, fod);
     2247                /* copy_fod(res, arg, fod); */
    22242248#endif
    22252249#else
     
    22592283                copy_index_domain(res, arg, ind_dom);
    22602284#if defined(_NLF_)
    2261                 copy_fod(res, arg, fod);
     2285                /* copy_fod(res, arg, fod); */
    22622286#endif
    22632287#if defined(_NONLIND_)
     
    23182342                copy_index_domain(res, arg1, ind_dom);
    23192343#if defined(_NLF_)
    2320                 copy_fod(res, arg1, fod);
     2344                /* copy_fod(res, arg1, fod); */
    23212345#endif
    23222346#if defined(_NONLIND_)
     
    23872411                copy_index_domain(res, arg1, ind_dom);
    23882412#if defined(_NLF_)
    2389                 copy_fod(res, arg1, fod);
     2413                /* copy_fod(res, arg1, fod); */
    23902414#endif
    23912415#if defined(_NONLIND_)
     
    24532477                copy_index_domain(res, arg1, ind_dom);
    24542478#if defined(_NLF_)
    2455                 copy_fod(res, arg1, fod);
     2479                /* copy_fod(res, arg1, fod); */
    24562480#endif
    24572481#if defined(_NONLIND_)
     
    25112535                copy_index_domain(res, arg1, ind_dom);
    25122536#if defined(_NLF_)
    2513                 copy_fod(res, arg1, fod);
     2537                /* copy_fod(res, arg1, fod); */
    25142538#endif
    25152539#if defined(_NONLIND_)
     
    26072631                copy_index_domain(res, arg1, ind_dom);
    26082632#if defined(_NLF_)
    2609                 copy_fod(res, arg1, fod);
     2633                /* copy_fod(res, arg1, fod); */
    26102634#endif
    26112635#if defined(_NONLIND_)
     
    27052729                copy_index_domain(res, arg1, ind_dom);
    27062730#if defined(_NLF_)
    2707                 copy_fod(res, arg1, fod);
     2731                /* copy_fod(res, arg1, fod); */
    27082732#endif
    27092733#if defined(_NONLIND_)
     
    27632787                copy_index_domain(res, arg1, ind_dom);
    27642788#if defined(_NLF_)
    2765                 copy_fod(res, arg1, fod);
     2789                /* copy_fod(res, arg1, fod); */
    27662790#endif
    27672791#if defined(_NONLIND_)
     
    28432867                copy_index_domain(res, arg1, ind_dom);
    28442868#if defined(_NLF_)
    2845                 copy_fod(res, arg1, fod);
     2869                /* copy_fod(res, arg1, fod); */
    28462870#endif
    28472871#if defined(_NONLIND_)
     
    29442968                copy_index_domain(res, arg1, ind_dom);
    29452969#if defined(_NLF_)
    2946                 copy_fod(res, arg1, fod);
     2970                /* copy_fod(res, arg1, fod); */
    29472971#endif
    29482972#else
     
    29943018                copy_index_domain(res, arg, ind_dom);
    29953019#if defined(_NLF_)
    2996                 copy_fod(res, arg, fod);
     3020                /* copy_fod(res, arg, fod); */
    29973021#endif
    29983022#if defined(_NONLIND_)
     
    30753099                copy_index_domain(res, arg, ind_dom);
    30763100#if defined(_NLF_)
    3077                 copy_fod(res, arg, fod);
     3101                /* copy_fod(res, arg, fod); */
    30783102#endif
    30793103#if defined(_NONLIND_)
     
    32133237                copy_index_domain(res, arg, ind_dom);
    32143238#if defined(_NLF_)
    3215                 copy_fod(res, arg, fod);
     3239                /* copy_fod(res, arg, fod); */
    32163240#endif
    32173241#if defined(_NONLIND_)
     
    33793403#if defined(_NLF_)
    33803404#ifdef _TIGHT_
    3381                     if (dp_T0[arg1] < dp_T0[arg2])
    3382                       copy_fod(res, arg1, fod);
    3383                     else {
    3384                         if (dp_T0[arg1] > dp_T0[arg2])
    3385                           copy_fod(res, arg2, fod);
    3386                         else
    3387                           combine_2_fod(res, arg1, arg2, fod);
    3388                     }
    3389 #else
    3390                     combine_2_fod(res, arg1, arg2, fod);
     3405/*                     if (dp_T0[arg1] < dp_T0[arg2]) */
     3406/*                    copy_fod(res, arg1, fod); */
     3407/*                     else { */
     3408/*                         if (dp_T0[arg1] > dp_T0[arg2]) */
     3409/*                        copy_fod(res, arg2, fod); */
     3410/*                         else  */
     3411/*                        combine_2_fod(res, arg1, arg2, fod); */
     3412/*                     } */
     3413/* #else */
     3414/*                  combine_2_fod(res, arg1, arg2, fod); */
    33913415#endif
    33923416#endif
     
    35103534                copy_index_domain(res, arg, ind_dom);
    35113535#if defined(_NLF_)
    3512                 copy_fod(res, arg, fod);
     3536                /* copy_fod(res, arg, fod); */
    35133537#endif
    35143538#else
     
    35873611                copy_index_domain(res, arg, ind_dom);
    35883612#if defined(_NLF_)
    3589                 copy_fod(res, arg, fod);
     3613                /* copy_fod(res, arg, fod); */
    35903614#endif
    35913615#else
     
    36173641                copy_index_domain(res, arg, ind_dom);
    36183642#if defined(_NLF_)
    3619                 copy_fod(res, arg, fod);
     3643                /* copy_fod(res, arg, fod); */
    36203644#endif
    36213645#else
     
    36543678
    36553679#if defined(_NLF_)
    3656                     copy_fod(res, arg1, fod);
     3680                    /* copy_fod(res, arg1, fod); */
    36573681#endif
    36583682                } else {
     
    36643688                    copy_index_domain(res, arg2, ind_dom);
    36653689#if defined(_NLF_)
    3666                     copy_fod(res, arg2, fod);
     3690                    /* copy_fod(res, arg2, fod); */
    36673691#endif
    36683692                }
     
    36713695                    combine_2_index_domains(res, arg1, arg2, ind_dom);
    36723696#if defined(_NLF_)
    3673                     combine_2_fod(res, arg1, arg2, fod);
     3697                    /* combine_2_fod(res, arg1, arg2, fod); */
    36743698#endif
    36753699#endif
     
    37463770                copy_index_domain(res, arg1, ind_dom);
    37473771#if defined(_NLF_)
    3748                 copy_fod(res, arg1, fod);
     3772                /* copy_fod(res, arg1, fod); */
    37493773#endif
    37503774#else
     
    39203944
    39213945        } /* endswitch */
    3922 
    39233946
    39243947        /* Read the next operation */
     
    39894012    for(i=0;i<max_ind_dom;i++)
    39904013      {
    3991         free(fod[i]);
     4014        free(nlf[i]);
    39924015      }
    3993     free(fod);
     4016    free(nlf);
    39944017#endif
    39954018
     
    42184241/****************************************************************************/
    42194242
    4220 #if defined(_NLF_)
    4221 
    4222 /****************************************************************************/
    4223 /* set operations for propagation of fod                                    */
    4224 
    4225 /*--------------------------------------------------------------------------*/
    4226 /* operations on index domains                                              */
    4227 
    4228 #if defined(_TIGHT_)
    4229 void copy_fod(int res, int arg, locint **fod) {
    4230 
    4231   int i;
    4232 
    4233   if (fod[arg][2]>fod[res][1])
    4234     {
    4235       free(fod[res]);
    4236       fod[res] = (locint *)  malloc(sizeof(locint) * (2*fod[arg][2]+3));
    4237       fod[res][1] = 2*fod[arg][2];
    4238     }
    4239  
    4240   for(i=0;i<fod[arg][2]+3;i++)
    4241     {
    4242       fod[res][i] = fod[arg][i];
    4243     }
    4244 }
    4245 
    4246 void append_fod(int res, int arg, locint **fod) {
    4247  
    4248   int i, index;
    4249  
    4250   if (fod[arg][2]+fod[res][2]>fod[res][1])
    4251     {
    4252       fod[res]=realloc(fod[res],sizeof(locint) * (2*(fod[arg][2]+fod[res][2])+3));
    4253       fod[res][1] = 2*(fod[arg][2]+fod[res][2]);
    4254     }
    4255  
    4256   index = fod[res][2]+3;
    4257  
    4258   if (fod[arg][3] > 0)
    4259     {
    4260       fod[res][0] += fod[arg][0];
    4261       fod[res][2] += fod[arg][2];
    4262       for(i=3;i<fod[arg][2]+3;i++)
    4263         {
    4264           fod[res][index++] = fod[arg][i];
    4265         }
    4266     }
    4267 }
    4268 
    4269 void copy_index_domain_2_fod(int res, locint **fod, locint **ind_dom) {
    4270  
    4271   int i, index;
    4272  
    4273   fod[res][0] = 0;
    4274   index=3;
    4275   if (ind_dom[res][0] > 0)
    4276     {
    4277       if (ind_dom[res][0]>fod[res][1])
    4278         {
    4279           free(fod[res]);
    4280           fod[res] = (locint *)  malloc(sizeof(locint) * (2*ind_dom[res][0]+3));
    4281           fod[res][0] = 0;
    4282           fod[res][1] = 2*ind_dom[res][0];
    4283         }
    4284       fod[res][0]++;
    4285       fod[res][index++] = ind_dom[res][0];
    4286       for(i=2;i<ind_dom[res][0]+2;i++)
    4287         fod[res][index++]=ind_dom[res][i];
    4288       fod[res][2]=ind_dom[res][0]+1;
    4289                    
    4290     }
    4291 }
    4292 
    4293 void append_index_domain_2_fod(int res, int offset, int arg1, int arg2, locint **fod, locint **ind_dom) {
    4294 
    4295   int i, index;
    4296 
    4297   combine_2_index_domains(offset, arg1, arg2, ind_dom);
    4298   index = fod[res][2]+3;
    4299   if (ind_dom[offset][0] > 0)
    4300     {
    4301       if (ind_dom[offset][0]>fod[res][1])
    4302         {
    4303           fod[res]=realloc(fod[res],sizeof(locint) * (2*(fod[res][2]+ind_dom[offset][0])+3));
    4304           fod[res][1] = 2*(fod[res][2]+ind_dom[offset][0]);
    4305         }
    4306       fod[res][0]++;
    4307       fod[res][index++] = ind_dom[offset][0];
    4308       for(i=2;i<ind_dom[offset][0]+2;i++)
    4309         fod[res][index++]=ind_dom[offset][i];
    4310       fod[res][2]+=ind_dom[offset][0]+1;
    4311      
    4312     }
    4313 }
    4314 
    4315 void combine_2_fod(int res, int arg1, int arg2, locint **fod) {
    4316  
    4317   int i, index;
    4318  
    4319   if (res == arg1)
    4320     {
    4321       if (fod[arg1][2]+fod[arg2][2] > 0)
    4322         {
    4323           if (fod[arg1][2]+fod[arg2][2]>fod[res][1])
    4324             {
    4325               fod[res]=realloc(fod[res],sizeof(locint) * (2*(fod[arg1][2]+fod[arg2][2])+3));
    4326               fod[res][1] = 2*(fod[arg1][2]+fod[arg2][2]);
    4327             }
    4328           index = fod[res][2]+3;
    4329           for(i=3;i<fod[arg2][2]+3;i++)
    4330             {
    4331               fod[res][index++] = fod[arg2][i];
    4332             }
    4333           fod[res][2]+=fod[arg2][2];
    4334           fod[res][0]+=fod[arg2][0];
    4335         }
    4336     }
    4337   else
    4338     {
    4339       if (res == arg2)
    4340         {
    4341           if (fod[arg1][2]+fod[arg2][2] > 0)
    4342             {
    4343               if (fod[arg1][2]+fod[arg2][2]>fod[res][1])
    4344                 {
    4345                   fod[res]=realloc(fod[res],sizeof(locint) * (2*(fod[arg1][2]+fod[arg2][2])+3));
    4346                   fod[res][1] = 2*(fod[arg1][2]+fod[arg2][2]);
    4347                 }
    4348               index = fod[res][2]+3;
    4349               for(i=3;i<fod[arg1][2]+3;i++)
    4350                 {
    4351                   fod[res][index++] = fod[arg1][i];
    4352                 }
    4353               fod[res][2]+=fod[arg1][2];
    4354               fod[res][0]+=fod[arg1][0];
    4355             }
    4356         }
    4357       else
    4358         {
    4359           if (fod[arg1][2]+fod[arg2][2] > 0)
    4360             {
    4361               if (fod[arg1][2]+fod[arg2][2]>fod[res][1])
    4362                 {
    4363                   free(fod[res]);
    4364                   fod[res] = (locint *)  malloc(sizeof(locint) * (2*(fod[arg1][2]+fod[arg2][2])+3));
    4365                   fod[res][1] = 2*fod[arg1][2]+fod[arg2][2];
    4366                 }
    4367               for(i=0;i<fod[arg1][2]+3;i++)
    4368                 {
    4369                   fod[res][i] = fod[arg1][i];
    4370                 }
    4371               index = fod[res][2]+3;
    4372               for(i=3;i<fod[arg2][2]+3;i++)
    4373                 {
    4374                   fod[res][index++] = fod[arg2][i];
    4375                 }
    4376               fod[res][2]+=fod[arg2][2];
    4377               fod[res][0]+=fod[arg2][0];
    4378             }
    4379         }
    4380     }
    4381 }
    4382 
    4383 #endif
    4384 #endif
    4385 
    43864243END_C_DECLS
Note: See TracChangeset for help on using the changeset viewer.