/[ascend]/trunk/base/generic/integrator/idaanalyse.c
ViewVC logotype

Diff of /trunk/base/generic/integrator/idaanalyse.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1267 by johnpye, Sat Feb 3 03:39:50 2007 UTC revision 1268 by johnpye, Sat Feb 3 06:18:11 2007 UTC
# Line 235  static int integrator_ida_create_lists(I Line 235  static int integrator_ida_create_lists(I
235      sys->y = ASC_NEW_ARRAY(struct var_variable *,sys->n_y);      sys->y = ASC_NEW_ARRAY(struct var_variable *,sys->n_y);
236      sys->ydot = ASC_NEW_ARRAY_CLEAR(struct var_variable *,sys->n_y);      sys->ydot = ASC_NEW_ARRAY_CLEAR(struct var_variable *,sys->n_y);
237      sys->n_ydot = 0;      sys->n_ydot = 0;
238        for(i=0;i<sys->n_y;++i){
239            asc_assert(sys->ydot[i] == 0);
240        }
241    
242      CONSOLE_DEBUG("Passing through chains...");      CONSOLE_DEBUG("Passing through chains...");
243    
244      /* create the lists y and ydot, ignoring 'bad' vars */      /* create the lists y and ydot, ignoring 'bad' vars */
245      for(i=0; i<diffvars->nseqs; ++i){      for(i=0; i<diffvars->nseqs; ++i){
246          CONSOLE_DEBUG("i = %d",i);          /* CONSOLE_DEBUG("i = %d",i); */
247                            
248          seq = diffvars->seqs[i];          seq = diffvars->seqs[i];
249          asc_assert(seq.n >= 1);          asc_assert(seq.n >= 1);
# Line 252  static int integrator_ida_create_lists(I Line 255  static int integrator_ida_create_lists(I
255          }          }
256    
257          sys->y[j] = v;          sys->y[j] = v;
258          VARMSG("'%s' is good non-deriv");          /* VARMSG("'%s' is good non-deriv"); */
259    
260          if(seq.n > 1 && var_apply_filter(seq.vars[1],&integrator_ida_deriv)){          if(seq.n > 1 && var_apply_filter(seq.vars[1],&integrator_ida_deriv)){
261              v = seq.vars[1];              v = seq.vars[1];
# Line 261  static int integrator_ida_create_lists(I Line 264  static int integrator_ida_create_lists(I
264    
265              sys->ydot[j] = v;              sys->ydot[j] = v;
266              sys->n_ydot++;              sys->n_ydot++;
267              VARMSG("'%s' is good deriv");              /* VARMSG("'%s' is good deriv"); */
268          }else{          }else{
269              asc_assert(sys->ydot[j]==NULL);              asc_assert(sys->ydot[j]==NULL);
270          }          }
# Line 537  int integrator_ida_block_check(Integrato Line 540  int integrator_ida_block_check(Integrato
540  }  }
541    
542  /* return 0 on succes */  /* return 0 on succes */
543  static int check_dups(struct var_variable **list,int n,int allownull){  static int check_dups(IntegratorSystem *sys, struct var_variable **list,int n,int allownull){
544      int i,j;      int i,j;
545      struct var_variable *v;      struct var_variable *v;
546        char *varname;
547      for(i=0; i< n; ++i){      for(i=0; i< n; ++i){
548          v=list[i];          v=list[i];
549          if(v==NULL){          if(v==NULL){
# Line 548  static int check_dups(struct var_variabl Line 552  static int check_dups(struct var_variabl
552          }          }
553          for(j=0; j<i-1;++j){          for(j=0; j<i-1;++j){
554              if(list[j]==NULL)continue;              if(list[j]==NULL)continue;
555              if(v==list[j])return 1;              if(v==list[j]){
556                    CONSOLE_DEBUG("duplicate found (%d, v = %p)",j,v);
557                    varname = var_make_name(sys->system,v);
558                    if(varname){
559                        CONSOLE_DEBUG("Duplicate of '%s' found",varname);
560                        ASC_FREE(varname);
561                    }else{
562                        CONSOLE_DEBUG("Duplicate found (couldn't retrieve name)");
563                    }
564                    return 1;
565                }
566          }          }
567      }      }
568      return 0;      return 0;
# Line 589  static int integrator_ida_check_diffinde Line 603  static int integrator_ida_check_diffinde
603      list = slv_get_solvers_var_list(sys->system);      list = slv_get_solvers_var_list(sys->system);
604      n_vars = slv_get_num_solvers_vars(sys->system);      n_vars = slv_get_num_solvers_vars(sys->system);
605            
606      if(check_dups(list,n_vars,FALSE)){      if(check_dups(sys, list, n_vars,FALSE)){
607          ERROR_REPORTER_HERE(ASC_PROG_ERR,"duplicates or NULLs in solver's var list");          ERROR_REPORTER_HERE(ASC_PROG_ERR,"duplicates or NULLs in solver's var list");
608          return 1;          return 1;
609      }      }
610    
611      if(check_dups(sys->ydot,n_vars,TRUE)){      if(check_dups(sys, sys->ydot, n_vars,TRUE)){
612          ERROR_REPORTER_HERE(ASC_PROG_ERR,"duplicates in ydot vector");          ERROR_REPORTER_HERE(ASC_PROG_ERR,"duplicates in ydot vector");
613          return 1;          return 1;
614      }      }

Legend:
Removed from v.1267  
changed lines
  Added in v.1268

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22