[Rd] Problem with function in fortran 95
Fabio Mathias Corrêa
fabio.ufla at yahoo.com.br
Fri Aug 14 11:37:09 CEST 2009
Thanks very much!!!
Fábio Mathias Corrêa
Estatística e Experimentação Agropecuária/UFLA
--- Em sex, 14/8/09, Simone Giannerini <sgiannerini at gmail.com> escreveu:
> De: Simone Giannerini <sgiannerini at gmail.com>
> Assunto: Re: [Rd] Problem with function in fortran 95
> Para: "Fabio Mathias Corrêa" <fabio.ufla at yahoo.com.br>
> Cc: r-devel at r-project.org
> Data: Sexta-feira, 14 de Agosto de 2009, 9:19
> Fabio,
>
> I see two problems with your code:
>
> 1. R type numeric corresponds to FORTRAN Real*8 (or double
> precision)
> so that line 4 of your mat.f95 becomes:
>
> REAL*8 :: x, y, res
>
> 2. your R code won't ever succeed because you pass integer
> matrices
> (x,y,res) to a subroutine that expects REAL*8 data.
> you need to coerce all your matrices to "double" as
> follows:
>
> storage.mode(x) <- "double"
> storage.mode(y) <- "double"
> storage.mode(res) <- "double"
>
> Finally, you can call the corrected function:
>
> .Fortran("mymult", x,y,res,as.integer(l),as.integer(c))
> [[1]]
> [,1] [,2] [,3] [,4]
> [1,] 1
> 6 11 16
> [2,] 2
> 7 12 17
> [3,] 3
> 8 13 18
> [4,] 4
> 9 14 19
> [5,]
> 5 10 15 20
>
> [[2]]
> [,1] [,2] [,3] [,4] [,5]
> [1,] 20 16 12
> 8 4
> [2,] 19 15 11
> 7 3
> [3,] 18 14 10
> 6 2
> [4,] 17 13
> 9 5 1
>
> [[3]]
> [,1] [,2] [,3] [,4] [,5]
> [1,] 604 468 332
> 196 60
> [2,] 678 526 374
> 222 70
> [3,] 752 584 416
> 248 80
> [4,] 826 642 458
> 274 90
> [5,] 900 700 500 300 100
>
> [[4]]
> [1] 5
>
> [[5]]
> [1] 4
>
>
> All these issues are discussed in the "Writing R
> Extensions" manual,
> please read it carefully.
>
> Ciao
>
> Simone
>
>
>
> On Wed, Aug 12, 2009 at 1:32 PM, Fabio Mathias
> Corrêa<fabio.ufla at yahoo.com.br>
> wrote:
> > I am writing a function in fortran 95, but the
> intrinsic function MATMUL is not working properly. Here's an
> example.
> >
> > SUBROUTINE mymult(x,y,res,m,n)
> > IMPLICIT NONE
> > INTEGER :: m,n
> > REAL :: x, y, res
> > DIMENSION :: x(m,n), y(n,m), res(m,m)
> > res = MATMUL(x,y)
> > END SUBROUTINE mymult
> >
> > R CMD SHLIB mat.f95
> >
> > In R:
> >
> > dyn.load("mat.so")
> > x <- matrix(1:20,5)
> > l <- nrow(x)
> > c <- ncol(x)
> > y <- matrix(20:1,c)
> > res <- matrix(0,l,l)
> > dim(x)
> > dim(y)
> > dim(res)
> > l
> > c
> > .Fortran("mymult", x,y,res,l,c)
> >
> > [[1]]
> > [,1] [,2] [,3] [,4]
> > [1,] 1 6 11 16
> > [2,] 2 7 12 17
> > [3,] 3 8 13 18
> > [4,] 4 9 14 19
> > [5,] 5 10 15 20
> >
> > [[2]]
> > [,1] [,2] [,3] [,4] [,5]
> > [1,] 20 16 12 8 4
> > [2,] 19 15 11 7 3
> > [3,] 18 14 10 6 2
> > [4,] 17 13 9 5 1
> >
> > [[3]]
> > [,1] [,2] [,3] [,4] [,5]
> > [1,] 0 0 0 0 0
> > [2,] 0 0 0 0 0
> > [3,] 0 0 0 0 0
> > [4,] 0 0 0 0 0
> > [5,] 0 0 0 0 0
> >
> > [[4]]
> > [1] 5
> >
> > [[5]]
> > [1] 4
> >
> >
> > Linux Ubuntu 8.04 and use compiler gfortran 4.2.
> > The problem is the compiler?
> >
> > Thanks!
> >
> > Fábio Mathias Corrêa
> > Estatística e Experimentação Agropecuária/UFLA
> > Brazil
> >
> >
> >
> ____________________________________________________________________________________
> > Veja quais são os assuntos do momento no Yahoo!
> +Buscados
> > http://br.maisbuscados.yahoo.com
> >
> > ______________________________________________
> > R-devel at r-project.org
> mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
> >
>
>
>
> --
> ______________________________________________________
>
> Simone Giannerini
> Dipartimento di Scienze Statistiche "Paolo Fortunati"
> Universita' di Bologna
> Via delle belle arti 41 - 40126 Bologna, ITALY
> Tel: +39 051 2098262 Fax: +39 051 232153
> http://www2.stat.unibo.it/giannerini/
> ______________________________________________________
>
____________________________________________________________________________________
Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbuscados.yahoo.com
More information about the R-devel
mailing list