Changeset 372


Ignore:
Timestamp:
Dec 7, 2012 7:24:46 AM (7 years ago)
Author:
kulshres
Message:

Reintroduce the old method of hessian pattern propagation

This reintroduces the hessian pattern propagation code that was in
previous releases under new interfaces

nonl_ind_old_forward_t() and nonl_ind_old_forward_s()

The standard interfaces nonl_ind_forward_t() and nonl_ind_forward_s()
rely on a newer approach introduced by
Andrea Walther <andrea.wather@…> since May 2012

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

Location:
trunk/ADOL-C
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/ADOL-C/include/adolc/interfaces.h

    r365 r372  
    329329ADOLC_DLL_EXPORT int nonl_ind_forward_tight
    330330(short, int, int, const double*, unsigned int**);
     331/*--------------------------------------------------------------------------*/
     332/*                                                            INDOPRO, SAFE */
     333/* nonl_ind_old_forward_safe(tag, m, n, p, x[n], *Y[m])                          */
     334
     335ADOLC_DLL_EXPORT int nonl_ind_old_forward_safe
     336(short, int, int, const double*, unsigned int**);
     337
     338
     339/*--------------------------------------------------------------------------*/
     340/*                                                           INDOPRO, TIGHT */
     341/* nonl_ind_old_forward_tight(tag, m, n,  x[n], *Y[m])                           */
     342
     343ADOLC_DLL_EXPORT int nonl_ind_old_forward_tight
     344(short, int, int, const double*, unsigned int**);
    331345
    332346/****************************************************************************/
  • trunk/ADOL-C/src/Makefile.am

    r354 r372  
    5353                       indopro_forward_s.c indopro_forward_t.c \
    5454                       nonl_ind_forward_s.c nonl_ind_forward_t.c \
     55                       nonl_ind_old_forward_s.c nonl_ind_old_forward_t.c \
    5556                       int_reverse_s.c int_reverse_t.c advector.cpp
    5657
  • trunk/ADOL-C/src/uni5_for.c

    r370 r372  
    133133#define FMIN_ADOLC(x,y)  ((y<x)?y:x)
    134134
    135 #if defined(_INDOPRO_)
     135#if defined(_INDOPRO_) && !defined(_NONLIND_OLD_)
    136136#if defined(_TIGHT_)
    137137#define GENERATED_FILENAME "indopro_forward_t"
     
    164164#elif defined(_NTIGHT_)
    165165#define GENERATED_FILENAME "nonl_ind_forward_s"
     166#endif
     167#endif
     168#if defined(_NONLIND_OLD_)
     169
     170/*
     171 * This is the type used for the list elements. The entry is either a counter
     172 * (first element of the NID list) or the index of an independent variable.
     173 */
     174
     175void extend_nonlinearity_domain_binary_step
     176(int arg1, int arg2, locint **ind_dom, locint **nonl_dom);
     177void extend_nonlinearity_domain_unary
     178(int arg, locint **ind_dom, locint **nonl_dom);
     179void extend_nonlinearity_domain_binary
     180(int arg1, int arg2, locint **ind_dom, locint **nonl_dom);
     181
     182
     183#if defined(_TIGHT_)
     184#define GENERATED_FILENAME "nonl_ind_old_forward_t"
     185#endif
     186#if defined(_NTIGHT_)
     187#define GENERATED_FILENAME "nonl_ind_old_forward_s"
    166188#endif
    167189#endif
     
    549571#endif
    550572#else
    551 #if defined(_INDOPRO_)
     573#if defined(_INDOPRO_) && !defined(_NONLIND_OLD_)
    552574#if defined(_TIGHT_)
    553575/****************************************************************************/
     
    601623/****************************************************************************/
    602624int nonl_ind_forward_safe(
     625    short             tnum,        /* tape id                              */
     626    int               depcheck,    /* consistency chk on # of dependents   */
     627    int               indcheck,    /* consistency chk on # of independents */
     628    const double      *basepoint,  /* independent variable values   (in)   */
     629    unsigned int    **crs)        /* returned row index storage (out)     */
     630
     631/* indopro_forward_safe( tag, m, n, x[n], *crs[m]),
     632
     633  */
     634#endif
     635#else
     636#if defined(_NONLIND_OLD_)
     637#if defined(_TIGHT_)
     638/****************************************************************************/
     639/* First Order Vector version of the forward mode for bit patterns, tight   */
     640/****************************************************************************/
     641int nonl_ind_old_forward_tight(
     642    short             tnum,        /* tape id                              */
     643    int               depcheck,    /* consistency chk on # of dependents   */
     644    int               indcheck,    /* consistency chk on # of independents */
     645    const double     *basepoint,  /* independent variable values   (in)   */
     646    unsigned int     **crs)        /* returned row index storage (out)     */
     647
     648#endif
     649#if defined (_NTIGHT_)
     650/****************************************************************************/
     651/* First Order Vector version of the forward mode, bit pattern, safe        */
     652/****************************************************************************/
     653int nonl_ind_old_forward_safe(
    603654    short             tnum,        /* tape id                              */
    604655    int               depcheck,    /* consistency chk on # of dependents   */
     
    698749#endif
    699750#endif
     751#endif
    700752{
    701753    /****************************************************************************/
     
    754806    int opind;
    755807    int ii;
     808#endif
     809#if defined(_NONLIND_OLD_)
     810    /* nonlinear interaction domains */
     811    locint** nonl_dom;
     812    locint*  temp;
     813    locint*  temp1;
    756814#endif
    757815#endif
     
    10011059            nonl_dom[i].right = NULL;
    10021060          }
     1061#endif
     1062#if defined(_NONLIND_OLD_)
     1063
     1064    nonl_dom = (locint**) malloc(sizeof(locint*) * indcheck);
     1065    for(i=0;i<indcheck;i++){
     1066          nonl_dom[i] = (locint*) malloc(sizeof(locint)*(NUMNNZ+2));
     1067          nonl_dom[i][0]=0;
     1068          nonl_dom[i][1]=NUMNNZ;
     1069       }
    10031070#endif
    10041071
     
    13921459
    13931460#if defined(_INDO_)
    1394 #if defined(_INDOPRO_)
     1461#if defined(_INDOPRO_) && !defined(_NONLIND_OLD_)
    13951462          if (ind_dom[res][0] != 0) {
    13961463            crs[indexd] = (unsigned int*) malloc(sizeof(unsigned int) * (ind_dom[res][0]+1));
     
    15761643                arg_index[res] = opind++;               
    15771644#endif
     1645#if defined(_NONLIND_OLD_)
     1646                extend_nonlinearity_domain_binary(res, arg, ind_dom, nonl_dom);
     1647#endif
    15781648#else
    15791649#if !defined(_ZOS_) /* BREAK_ZOS */
     
    18031873                traverse_unary(&fod[arg_index[arg2]], nonl_dom, &fod[arg_index[arg1]], indcheck+1,maxopind+2);
    18041874                arg_index[res] = opind++;               
     1875#endif
     1876#if defined(_NONLIND_OLD_)
     1877                extend_nonlinearity_domain_binary(arg1, arg2, ind_dom, nonl_dom);
    18051878#endif
    18061879#else
     
    18721945                arg_index[res] = opind++;               
    18731946#endif
     1947#if defined(_NONLIND_OLD_)
     1948                extend_nonlinearity_domain_binary(arg1, arg2, ind_dom, nonl_dom);
     1949#endif
    18741950#else
    18751951#if !defined(_ZOS_) /* BREAK_ZOS */
     
    19392015                arg_index[res] = opind++;       
    19402016#endif
     2017#if defined(_NONLIND_OLD_)
     2018                extend_nonlinearity_domain_binary(arg1, arg2, ind_dom, nonl_dom);
     2019#endif
    19412020#else
    19422021#if !defined(_ZOS_) /* BREAK_ZOS */
     
    20442123                arg_index[res] = opind++;               
    20452124#endif
     2125#if defined(_NONLIND_OLD_)
     2126                extend_nonlinearity_domain_binary(arg1, arg2, ind_dom, nonl_dom);
     2127                extend_nonlinearity_domain_unary(arg2, ind_dom, nonl_dom);
     2128#endif
    20462129#else
    20472130#if !defined(_ZOS_) /* BREAK_ZOS */
     
    21102193                arg_index[res] = opind++;               
    21112194#endif
     2195#if defined(_NONLIND_OLD_)
     2196                extend_nonlinearity_domain_unary(arg, ind_dom, nonl_dom);
     2197#endif
    21122198#else
    21132199#if !defined(_ZOS_) /* BREAK_ZOS */
     
    22372323                arg_index[res] = opind++;               
    22382324#endif
     2325#if defined(_NONLIND_OLD_)
     2326                extend_nonlinearity_domain_unary(arg, ind_dom, nonl_dom);
     2327#endif
    22392328#else
    22402329#if !defined(_ZOS_) /* BREAK_ZOS */
     
    22982387                traverse_unary(&fod[opind], nonl_dom, &fod[opind], indcheck+1,maxopind+2);
    22992388                arg_index[res] = opind++;               
     2389#endif
     2390#if defined(_NONLIND_OLD_)
     2391                extend_nonlinearity_domain_unary(arg1, ind_dom, nonl_dom);
    23002392#endif
    23012393#else
     
    23712463                arg_index[res] = opind++;               
    23722464#endif
     2465#if defined(_NONLIND_OLD_)
     2466                extend_nonlinearity_domain_unary(arg1, ind_dom, nonl_dom);
     2467#endif
    23732468
    23742469#else
     
    24412536                arg_index[res] = opind++;               
    24422537#endif
     2538#if defined(_NONLIND_OLD_)
     2539                extend_nonlinearity_domain_unary(arg1, ind_dom, nonl_dom);
     2540#endif
    24432541#else
    24442542#if !defined(_ZOS_) /* BREAK_ZOS */
     
    25012599                traverse_unary(&fod[opind], nonl_dom, &fod[opind], indcheck+1,maxopind+2);
    25022600                arg_index[res] = opind++;               
     2601#endif
     2602#if defined(_NONLIND_OLD_)
     2603                extend_nonlinearity_domain_unary(arg1, ind_dom, nonl_dom);
    25032604#endif
    25042605#else
     
    26012702                arg_index[res] = opind++;               
    26022703#endif
     2704#if defined(_NONLIND_OLD_)
     2705                extend_nonlinearity_domain_unary(arg1, ind_dom, nonl_dom);
     2706#endif
    26032707#else
    26042708#if !defined(_ZOS_) /* BREAK_ZOS */
     
    27022806                arg_index[res] = opind++;               
    27032807#endif
     2808#if defined(_NONLIND_OLD_)
     2809                extend_nonlinearity_domain_unary(arg1, ind_dom, nonl_dom);
     2810#endif
    27042811#else
    27052812#if !defined(_ZOS_) /* BREAK_ZOS */
     
    27622869                traverse_unary(&fod[opind], nonl_dom, &fod[opind], indcheck+1,maxopind+2);
    27632870                arg_index[res] = opind++;               
     2871#endif
     2872#if defined(_NONLIND_OLD_)
     2873                extend_nonlinearity_domain_unary(arg1, ind_dom, nonl_dom);
    27642874#endif
    27652875#else
     
    28452955                traverse_unary(&fod[opind], nonl_dom, &fod[opind], indcheck+1,maxopind+2);
    28462956                arg_index[res] = opind++;               
     2957#endif
     2958#if defined(_NONLIND_OLD_)
     2959                extend_nonlinearity_domain_unary(arg1, ind_dom, nonl_dom);
    28472960#endif
    28482961#else
     
    30063119                arg_index[res] = opind++;               
    30073120#endif
     3121#if defined(_NONLIND_OLD_)
     3122                extend_nonlinearity_domain_unary(arg, ind_dom, nonl_dom);
     3123#endif
    30083124#else
    30093125#if !defined(_ZOS_) /* BREAK_ZOS */
     
    30893205                traverse_unary(&fod[opind], nonl_dom, &fod[opind], indcheck+1,maxopind+2);
    30903206                arg_index[res] = opind++;               
     3207#endif
     3208#if defined(_NONLIND_OLD_)
     3209                extend_nonlinearity_domain_unary(arg, ind_dom, nonl_dom);
    30913210#endif
    30923211#else
     
    32313350                arg_index[res] = opind++;               
    32323351#endif
     3352#if defined(_NONLIND_OLD_)
     3353                extend_nonlinearity_domain_unary(arg, ind_dom, nonl_dom);
     3354#endif
    32333355#else
    32343356#if !defined(_ZOS_) /* BREAK_ZOS */
     
    38073929#if defined(_INDO_)
    38083930#if defined(_INDOPRO_)
    3809                 copy_index_domain(res, arg1, ind_dom);
     3931#ifdef _TIGHT_
     3932                if (dp_T0[arg] > 0)
     3933                    copy_index_domain(res, arg1, ind_dom);
     3934#else
     3935                merge_2_index_domains(res, arg1, ind_dom);
     3936#endif
    38103937#endif
    38113938#if defined(_NONLIND_)
     
    43644491                arg_index[res] = opind++;
    43654492#endif
     4493#if defined(_NONLIND_OLD_)
     4494                extend_nonlinearity_domain_binary(res, arg, ind_dom, nonl_dom);
     4495#endif
    43664496#else
    43674497#if !defined(_ZOS_) /* BREAK_ZOS */
     
    47694899
    47704900#endif
     4901#if defined(_NONLIND_OLD_)
     4902
     4903    for( i=0; i < indcheck; i++) {
     4904       crs[i] = (unsigned int*) malloc(sizeof(unsigned int) * (nonl_dom[i][0]+1));
     4905       crs[i][0] = nonl_dom[i][0];
     4906       for(l=1; l < crs[i][0]+1; l++)
     4907          crs[i][l] = nonl_dom[i][l+1];
     4908       free(nonl_dom[i]);
     4909    }
     4910    free(nonl_dom);
     4911
     4912#endif
    47714913#endif
    47724914    return ret_c;
     
    47754917/****************************************************************************/
    47764918
    4777 #if defined(_INDOPRO_)
     4919#if defined(_INDOPRO_) && !defined(_NONLIND_OLD_)
    47784920
    47794921/****************************************************************************/
     
    50075149#endif
    50085150#endif
     5151
     5152#if defined(_NONLIND_OLD_)
     5153#if defined(_TIGHT_)
     5154
     5155void extend_nonlinearity_domain_binary_step
     5156(int arg1, int arg2, locint **ind_dom, locint **nonl_dom)
     5157{
     5158  int index,num,num1, num2, i,j,k,l,m;
     5159  locint *temp_nonl, *index_nonl_dom, *arg1_ind_dom, *arg2_ind_dom;
     5160
     5161  num = ind_dom[arg2][0];
     5162
     5163  for(m=2;m<ind_dom[arg1][0]+2;m++)
     5164    {
     5165      index = ind_dom[arg1][m];
     5166      index_nonl_dom = nonl_dom[index];
     5167
     5168      if (index_nonl_dom[0] == 0)  /* empty list */
     5169        {
     5170          if ( index_nonl_dom[1] < num)
     5171            {
     5172              free(index_nonl_dom);
     5173              index_nonl_dom = (locint*) malloc(sizeof(locint)*2*(num+1) );
     5174              index_nonl_dom[1] = 2*num;
     5175            }
     5176          for(i=2;i<num+2;i++)      /* append index domain list of "arg" */
     5177            index_nonl_dom[i] = ind_dom[arg2][i];
     5178          index_nonl_dom[0] = num;
     5179        }
     5180      else
     5181        { /* merge lists */
     5182          num1 = index_nonl_dom[0];
     5183          num2 = index_nonl_dom[1];
     5184         
     5185          if (num1+num > num2)
     5186            num2 = num1+num;
     5187         
     5188          temp_nonl = (locint*) malloc(sizeof(locint)*(num2+2));
     5189          temp_nonl[1] = num2;
     5190         
     5191          i = 2;
     5192          k = 2;
     5193          j = 2;
     5194          num1 +=2;
     5195          num2 = num+2;
     5196          while ((i<num1) && (j < num2)){
     5197            if (ind_dom[arg2][j] < index_nonl_dom[i]) /* < */ {
     5198              temp_nonl[k] = ind_dom[arg2][j];
     5199              j++; k++;
     5200            } else {
     5201              if (ind_dom[arg2][j] == index_nonl_dom[i])  /* == */ {
     5202                temp_nonl[k] = ind_dom[arg2][j];
     5203                j++; k++; i++;
     5204              } else {
     5205                temp_nonl[k] = index_nonl_dom[i];
     5206                i++; k++;
     5207              }
     5208            }
     5209          }
     5210          for(l = j;l<num2;l++) {
     5211            temp_nonl[k] = ind_dom[arg2][l];
     5212            k++;
     5213          }
     5214          for(l = i;l<num1;l++) {
     5215            temp_nonl[k] = index_nonl_dom[l];
     5216            k++;
     5217          }
     5218          temp_nonl[0] = k-2;
     5219          free((char*) nonl_dom[index]);
     5220          nonl_dom[index] = temp_nonl;
     5221        }
     5222    }
     5223}
     5224
     5225void extend_nonlinearity_domain_unary
     5226(int arg, locint **ind_dom, locint **nonl_dom) {
     5227    extend_nonlinearity_domain_binary_step(arg, arg, ind_dom, nonl_dom);
     5228}
     5229
     5230void extend_nonlinearity_domain_binary
     5231(int arg1, int arg2, locint **ind_dom, locint **nonl_dom) {
     5232    extend_nonlinearity_domain_binary_step(arg1, arg2, ind_dom, nonl_dom);
     5233    extend_nonlinearity_domain_binary_step(arg2, arg1, ind_dom, nonl_dom);
     5234}
     5235
     5236
     5237#endif
     5238#endif
    50095239END_C_DECLS
Note: See TracChangeset for help on using the changeset viewer.