File: fort.cat

package info (click to toggle)
scilab 2.4-1
  • links: PTS
  • area: non-free
  • in suites: potato, slink
  • size: 55,196 kB
  • ctags: 38,019
  • sloc: ansic: 231,970; fortran: 148,976; tcl: 7,099; makefile: 4,585; sh: 2,978; csh: 154; cpp: 101; asm: 39; sed: 5
file content (124 lines) | stat: -rw-r--r-- 4,813 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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124

fort(1)                        Scilab Function                        fort(1)
NAME
  fort - Fortran or C user routines call

CALLING SEQUENCE
  // long form 'out' is present
  [y1,...,yk]=fort("ident",x1,px1,"tx1",...,xn,pxn,"txn",
                   "out",[ny1,my1],py1,"ty1",...,[nyl,myl],pyl,"tyl")
  // short form : no 'out' parameter
  [y1,....,yk]=fort("ident",x1,...,xn)

PARAMETERS

  "ident"   : string.

  xi        : real matrix or string

  pxi, pyi  : integers

  txi, tyi  : character string "d", "r", "i"  or "c".

DESCRIPTION
  Interactive call of Fortran (or C) user program from Scilab. The routine
  must be previously linked with Scilab. This link may be done:

       - with Scilab "link" command (incremental "soft" linking) during the
         Scilab session.(see link)

       - by "hard" re-linking. Writing the routine call within Scilab routine
         default/Ex-fort.f, adding the entry point in the file default/Flist
         and then re_linking Scilab with the command make bin/scilex in main
         Scilab directory.
  There are two forms of calling syntax, a short one and a long one. The
  short one will give faster code and an easier calling syntax but one has to
  write a small (C or Fortran) interface in order to make the short form pos-
  sible. The long one make it possible to call a Fortran routine (or a C one)
  whitout modification of the code but the syntax is more complex and the
  interpreted code slower.

  The meaning of each parameter is described now:

       "ident"        is the name of the called subroutine.

       x1,...,xn      are input variables (real matrices or strings) sent to
                      the routine,

       px1,...,pxn    are the respective positions of these variables in the
                      calling sequence of the routine "ident" and

       tx1,...,txn    are their types ("r", "i", "d" and "c" for real (float)
                      , integer, double precision and strings)

       "out"          is a keyword used to separate input variables from out-
                      put variables. when this key word is present it is
                      assumes that the long form will be used and when it is
                      not prsent, the short form is used.

       [ny1, my1]     are the size (# of rows and columns. For 'c'
                      arguments,m1*n1 is the number of charaters ) of output
                      variables and

       py1, ...       are the positions of output variables (possibly equal
                      to pxi ) in the calling sequence of the routine.  The
                      pyi's integers must be in increasing order.

       "ty1", ...     are the Fortran types of output variables.  The k
                      first output variables are put in y1,..., yk.

  If an output variable coincides with an input variable (i.e. pyi=pxj ) one
  can pass only its position pyi .  The size and type of yi are then the same
  as those of xi. If an output variable coincides with an input variable and
  one specify the dimensions of the output variable [myl,nyl] must follow the
  compatibility condition mxk*nxk >= myl*nyl.

  In the case of short syntax , [y1,....,yk]=fort("ident",x1,...,xn), the
  input parameters xi's and the name "ident" are sent to the interface rou-
  tine Ex-fort. This interface routine is then very similar to an interface
  (see the source code in the directory SCIDIR/default/Ex-fort.f).

  For example the following program:
          subroutine foof(c,a,b,n,m)
          integer n,m
          double precision a(*),b,c(*)
          do 10 i=1,m*n
            c(i) = sin(a(i))+b
   10     continue
          end

  link("foof.o","foof")
  a=[1,2,3;4,5,6];b= %pi;
  [m,n]=size(a);
  // Inputs:
  // a is in position 2 and double
  // b                3     double
  // n                4     integer
  // m                5     integer
  // Outputs:
  // c is in position 1 and double with size [m,n]
  c=fort("foof",a,2,"d",b,3,"d",n,4,"i",m,5,"i","out",[m,n],1,"d");
  returns the matrix c=2*a+b.

  If your machine is a DEC Alpha, SUN Solaris or SGI you may have to change
  the previous command line link("foo.o","foo")  by one of the followings:
  link('foof.o -lfor -lm -lc','foof').
  link('foof.o -lftn -lm -lc','foof').
  link('foof.o -L/opt/SUNWspro/SC3.0/lib/lib77 -lm -lc','foof').

  The same example coded in  C:
    void fooc(c,a,b,m,n)
          double a[],*b,c[];
          int *m,*n;
        { double sin();
          int i;
          for ( i =0 ; i < (*m)*(*n) ; i++)
                 c[i] = sin(a[i]) + *b;
          }

  link("fooc.o","fooc","C") // note the third argument
  a=[1,2,3;4,5,6];b= %pi;
  [m,n]=size(a);
  c=fort("fooc",a,2,"d",b,3,"d",m,4,"i",n,5,"i","out",[m,n],1,"d");
SEE ALSO
  link, c_link, intersci, addinter