Changeset 221


Ignore:
Timestamp:
May 10, 2011 4:52:29 AM (8 years ago)
Author:
awalther
Message:

bug fix in extend_nonlinearity_domain_binary_step

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ADOL-C/src/uni5_for.c

    r220 r221  
    38403840(int arg1, int arg2, locint **ind_dom, locint **nonl_dom)
    38413841{
    3842   int index,num,num1, num2, num3, i,j,k,l,m;
     3842  int index,num,num1, num2, i,j,k,l,m;
    38433843  locint *temp_nonl, *index_nonl_dom, *arg1_ind_dom, *arg2_ind_dom;
    38443844
    3845   arg2_ind_dom = ind_dom[arg2];
    3846   num = arg2_ind_dom[0];
    3847   num3 = num+2;
    3848  
     3845  num = ind_dom[arg2][0];
     3846
    38493847  for(m=2;m<ind_dom[arg1][0]+2;m++)
    38503848    {
     
    38543852      if (index_nonl_dom[0] == 0)  /* empty list */
    38553853        {
    3856           if ( index_nonl_dom[1] < num)
     3854          if ( index_nonl_dom[1] < num)
    38573855            {
    38583856              free(index_nonl_dom);
     
    38603858              index_nonl_dom[1] = 2*num;
    38613859            }
    3862           for(i=2;i<num3;i++)      /* append index domain list of "arg" */
    3863             index_nonl_dom[i] = arg2_ind_dom[i];
    3864           index_nonl_dom[0] = num;
     3860          for(i=2;i<num+2;i++)      /* append index domain list of "arg" */
     3861            index_nonl_dom[i] = ind_dom[arg2][i];
     3862          index_nonl_dom[0] = num;
    38653863        }
    38663864      else
     
    38683866          num1 = index_nonl_dom[0];
    38693867          num2 = index_nonl_dom[1];
    3870 
     3868         
    38713869          if (num1+num > num2)
    38723870            num2 = num1+num;
    3873 
    3874           temp_nonl = (locint*) malloc(sizeof(locint)*(num2+2));
     3871         
     3872          temp_nonl = (locint*) malloc(sizeof(locint)*(num2+2));
    38753873          temp_nonl[1] = num2;
    3876 
    3877           num1 += 2;
    3878 
    3879           i = 2;
    3880           k = 2;
    3881           j = 2;
    3882           while ((i<num1) && (j < num)){
    3883             if (arg2_ind_dom[j] < index_nonl_dom[i]) /* < */
    3884               {
    3885                 temp_nonl[k] = arg2_ind_dom[j];
    3886                 j++; k++;
    3887               }
    3888             else
    3889               {
    3890                 if (arg2_ind_dom[j] == index_nonl_dom[i])  /* == */
    3891                   {
    3892                     temp_nonl[k] = arg2_ind_dom[j];
    3893                     j++; k++; i++;
    3894                   }
    3895                 else
    3896                   {
    3897                     temp_nonl[k] = index_nonl_dom[i];
    3898                     i++; k++;
    3899                   }
     3874         
     3875          i = 2;
     3876          k = 2;
     3877          j = 2;
     3878          num1 +=2;
     3879          num2 = num+2;
     3880          while ((i<num1) && (j < num2)){
     3881            if (ind_dom[arg2][j] < index_nonl_dom[i]) /* < */ {
     3882              temp_nonl[k] = ind_dom[arg2][j];
     3883              j++; k++;
     3884            } else {
     3885              if (ind_dom[arg2][j] == index_nonl_dom[i])  /* == */ {
     3886                temp_nonl[k] = ind_dom[arg2][j];
     3887                j++; k++; i++;
     3888              } else {
     3889                temp_nonl[k] = index_nonl_dom[i];
     3890                i++; k++;
    39003891              }
     3892            }
    39013893          }
    3902           for(l = j;l<num3;l++)
    3903             {
    3904               temp_nonl[k] = arg2_ind_dom[l];
    3905               k++;
    3906             }
    3907           for(l = i;l<num1;l++)
    3908             {
    3909               temp_nonl[k] = index_nonl_dom[l];
    3910               k++;
    3911             }
    3912           temp_nonl[0] = k-2;
    3913           free((char*) index_nonl_dom);
     3894          for(l = j;l<num2;l++) {
     3895            temp_nonl[k] = ind_dom[arg2][l];
     3896            k++;
     3897          }
     3898          for(l = i;l<num1;l++) {
     3899            temp_nonl[k] = index_nonl_dom[l];
     3900            k++;
     3901          }
     3902          temp_nonl[0] = k-2;
     3903          free((char*) nonl_dom[index]);
    39143904          nonl_dom[index] = temp_nonl;
    39153905        }
Note: See TracChangeset for help on using the changeset viewer.