Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
6.0.0 - Français

Change language to:
English - 日本語 - Português - Русский

Please note that the recommended version of Scilab is 2025.0.0. This page might be outdated.
However, this page did not exist in the previous stable version.

Aide de Scilab >> Link dynamique/incremental > fort

fort

Fortran or C user routines call

Syntax

// 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)

Arguments

"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 (dynamic link) during the Scilab session.(see link)

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 possible. The long one make it possible to call a Fortran routine (or a C one) without 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 output variables. when this key word is present it is assumed that the long form will be used and when it is not present, the short form is used.

[ny1, my1]

are the size (number of rows and columns. For 'c' arguments,m1*n1 is the number of characters ) of output variables and

py1, ...

are the positions of output variables (possibly equal to pxi ) in the syntax 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.

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"+getdynlibext(),"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.

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"+getdynlibext(),"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

  • call — Fortran or C user routines call
  • link — dynamic linker
  • c_link — check if symbol loaded with dynamic link
  • addinter — new functions interface dynamic link at run time.
Report an issue
<< findmsvccompiler Link dynamique/incremental G_make >>

Copyright (c) 2022-2024 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Tue Feb 14 15:06:51 CET 2017