File: ext10c.c

package info (click to toggle)
scilab 4.0-12
  • links: PTS
  • area: non-free
  • in suites: etch, etch-m68k
  • size: 100,640 kB
  • ctags: 57,333
  • sloc: ansic: 377,889; fortran: 242,862; xml: 179,819; tcl: 42,062; sh: 10,593; ml: 9,441; makefile: 4,377; cpp: 1,354; java: 621; csh: 260; yacc: 247; perl: 130; lex: 126; asm: 72; lisp: 30
file content (42 lines) | stat: -rw-r--r-- 1,320 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/* Copyright Inria/Enpc */

/*********************************************
 *     external fonction for ode 
 *     input variables n, t, y 
 *     n = dimension of state vector y 
 *     t = time 
 *     y = state variable 
 *     output variable = ydot 
 *    ================================
 *     external routine must 
 *     load ydot[0] with d/dt ( y(1)(t) ) 
 *          ydot[1] with d/dt ( y(2)(t) ) 
 *          ... 
 *     i.e. ydot vector of derivative of state y 
 *    ================================
 *     With dynamic link: 
 *     link('ext10c.o','ext10c','C') 
 *    ================================
 *     passing a parameter to ext6 routine by a list: 
 *     -->param=[0.04,10000,3d+7]; 
 *     -->y=ode([1;0;0],0,[0.4,4],list('ext10c',param)) 
 *     param is retrieved in ext6 by: 
 *     param[0]=y[ *n ] , param[1]=y[ *n + 1] etc 
 *     with this calling sequence y is a n+np vector 
 *     where np=dimension of scilab variable param 
 *********************************************/

int ext10c(n, t, y, ydot)
     int *n;
     double *t, *y, *ydot;
{
  static double param[3];
  param[0] = y[*n + 0];
  param[1] = y[*n + 1];
  param[2] = y[*n + 2];
  ydot[0] = -param[0] * y[0] + param[1] * y[1] * y[2];
  ydot[2] = param[2] * y[1] * y[1];
  ydot[1] = -ydot[0] - ydot[2];
  return(0);
}