/[ascend]/trunk/base/generic/solver/lsode.c
ViewVC logotype

Diff of /trunk/base/generic/solver/lsode.c

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

revision 961 by johnpye, Sat Nov 25 05:26:47 2006 UTC revision 962 by johnpye, Mon Dec 11 14:43:02 2006 UTC
# Line 131  static CONST char LsodeID[] = "$Id: Lsod Line 131  static CONST char LsodeID[] = "$Id: Lsod
131    
132  /* definitions of lsode supported children of atoms, etc */  /* definitions of lsode supported children of atoms, etc */
133  /********************************************************************/  /********************************************************************/
 /* default input tolerances for lsode */  
 #define RTOLDEF 1e-6  
 #define ATOLDEF 1e-6  
134  /* solver_var children expected for state variables */  /* solver_var children expected for state variables */
135  static symchar *g_symbols[2];  static symchar *g_symbols[2];
136  #define STATERTOL g_symbols[0]  #define STATERTOL g_symbols[0]
# Line 237  void integrator_lsode_create(IntegratorS Line 234  void integrator_lsode_create(IntegratorS
234      d->rlist=NULL;      d->rlist=NULL;
235      d->dydx_dx=NULL;      d->dydx_dx=NULL;
236      blsys->enginedata=(void*)d;      blsys->enginedata=(void*)d;
237        integrator_lsode_params_default(blsys);
238    
239  }  }
240    
241  /**  /**
# Line 273  void integrator_lsode_free(void *engined Line 272  void integrator_lsode_free(void *engined
272    
273  enum ida_parameters{  enum ida_parameters{
274      LSODE_PARAM_TIMING      LSODE_PARAM_TIMING
275        ,LSODE_PARAM_RTOLDEF
276        ,LSODE_PARAM_ATOLDEF
277      ,LSODE_PARAMS_SIZE      ,LSODE_PARAMS_SIZE
278  };  };
279    
# Line 285  enum ida_parameters{ Line 286  enum ida_parameters{
286  int integrator_lsode_params_default(IntegratorSystem *blsys){  int integrator_lsode_params_default(IntegratorSystem *blsys){
287    
288      asc_assert(blsys!=NULL);      asc_assert(blsys!=NULL);
289      asc_assert(blsys->engine==INTEG_IDA);      asc_assert(blsys->engine==INTEG_LSODE);
290      slv_parameters_t *p;      slv_parameters_t *p;
291      p = &(blsys->params);      p = &(blsys->params);
292    
# Line 310  int integrator_lsode_params_default(Inte Line 311  int integrator_lsode_params_default(Inte
311          }, TRUE}          }, TRUE}
312      );      );
313    
314        slv_param_real(p,LSODE_PARAM_ATOLDEF
315                ,(SlvParameterInitReal){{"atoldef"
316                ,"Scalar absolute error tolerance",1
317                ,"Default value of the scalar absolute error tolerance (for cases"
318                " where not specified in oda_atol var property. See 'lsode.f' for"
319                " details"
320            }, 1e-6, DBL_MIN, DBL_MAX }
321        );
322    
323        slv_param_real(p,LSODE_PARAM_RTOLDEF
324                ,(SlvParameterInitReal){{"rtoldef"
325                ,"Scalar relative error tolerance",1
326                ,"Default value of the scalar relative error tolerance (for cases"
327                " where not specified in oda_rtol var property. See 'lsode.f' for"
328                " details"
329            }, 1e-6, DBL_MIN, DBL_MAX }
330        );
331    
332      asc_assert(p->num_parms == LSODE_PARAMS_SIZE);      asc_assert(p->num_parms == LSODE_PARAMS_SIZE);
333    
334      CONSOLE_DEBUG("Created %d params", p->num_parms);      CONSOLE_DEBUG("Created %d params", p->num_parms);
# Line 424  static double *lsode_get_atol( Integrato Line 443  static double *lsode_get_atol( Integrato
443    for (i=0; i<len; i++) {    for (i=0; i<len; i++) {
444      tol = ChildByChar(var_instance(blsys->y[i]),STATEATOL);      tol = ChildByChar(var_instance(blsys->y[i]),STATEATOL);
445      if (tol == NULL || !AtomAssigned(tol) ) {      if (tol == NULL || !AtomAssigned(tol) ) {
446        atoli[i] = ATOLDEF;        atoli[i] = SLV_PARAM_REAL(&(blsys->params),LSODE_PARAM_ATOLDEF);
447        ERROR_REPORTER_HERE(ASC_PROG_WARNING,"Assuming atol = %3g"        ERROR_REPORTER_HERE(ASC_PROG_WARNING,"Assuming atol = %3g"
448          "for ode_atol child undefined for state variable %ld."          "for ode_atol child undefined for state variable %ld."
449          ,ATOLDEF, blsys->y_id[i]          ,atoli[i], blsys->y_id[i]
450        );        );
451      } else {      } else {
452        atoli[i] = RealAtomValue(tol);        atoli[i] = RealAtomValue(tol);
453        CONSOLE_DEBUG("Using tolerance %3g for state variable %ld.",atoli[i], blsys->y_id[i]);        CONSOLE_DEBUG("Using tolerance %3g for state variable %ld.",atoli[i], blsys->y_id[i]);
454      }      }
455    }    }
456    atoli[len] = ATOLDEF;    atoli[len] = SLV_PARAM_REAL(&(blsys->params),LSODE_PARAM_ATOLDEF); /* not sure why this one...? */
457    return atoli;    return atoli;
458  }  }
459    
# Line 459  static double *lsode_get_rtol( Integrato Line 478  static double *lsode_get_rtol( Integrato
478    for (i=0; i<len; i++) {    for (i=0; i<len; i++) {
479      tol = ChildByChar(var_instance(blsys->y[i]),STATERTOL);      tol = ChildByChar(var_instance(blsys->y[i]),STATERTOL);
480      if (tol == NULL || !AtomAssigned(tol) ) {      if (tol == NULL || !AtomAssigned(tol) ) {
481        rtoli[i] = RTOLDEF;        rtoli[i] = SLV_PARAM_REAL(&(blsys->params),LSODE_PARAM_RTOLDEF);
482    
483        ERROR_REPORTER_HERE(ASC_PROG_WARNING,"Assuming rtol = %3g"        ERROR_REPORTER_HERE(ASC_PROG_WARNING,"Assuming rtol = %3g"
484          "for ode_rtol child undefined for state variable %ld."          "for ode_rtol child undefined for state variable %ld."
485          ,ATOLDEF, blsys->y_id[i]          ,rtoli[i], blsys->y_id[i]
486        );        );
487    
488      } else {      } else {
489        rtoli[i] = RealAtomValue(tol);        rtoli[i] = RealAtomValue(tol);
490      }      }
491    }    }
492    rtoli[len] = RTOLDEF;    rtoli[len] = SLV_PARAM_REAL(&(blsys->params),LSODE_PARAM_RTOLDEF);
493    return rtoli;    return rtoli;
494  }  }
495    

Legend:
Removed from v.961  
changed lines
  Added in v.962

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