Kodalore Vijayan, Vineetha W
2016-Jun-16 17:03 UTC
[R] Writing R package that call Fortran codes
Hi Eduardo, Thanks for your comments. I haven't tried the way you told me. Now when I tried, got the following error: *** caught segfault *** address 0x0, cause 'memory not mapped' Traceback: 1: .Fortran("dataxy", n = as.integer(n), tmax = as.integer(tmax), alpha = as.double(alpha), beta = as.double(beta), x = as.double(0, length = n), y = as.double(0, length = n), tau = as.integer(0, length = n)) 2: out(NULL, NULL, NULL, NULL) Possible actions: 1: abort (with core dump, if enabled) 2: normal R exit 3: exit R without saving workspace 4: exit R saving workspace Selection: Any suggestions? Thanks, Vineetha On Wed, Jun 15, 2016 at 3:55 PM, Eduardo M. A. M.Mendes < emammendes at gmail.com> wrote:> Hi > > Have you tried to load and run the fortran code using just a wrapper > function in R? I do that as the first step in order to build a package. > > Example: fortran sources -> rk4_mod_r.f90 ,derive_henonheilles.f90, > poincare_section.f90 > > a) I use R CMD SHLIB rk4_mod_r.f90 ,derive_henonheilles.f90, > poincare_section.f90 - o poincare_section_henonheilles_rk4.so > b) Then I write a wrapper function in R, poinc_section_henonheilles.R > ... > dyn.load("poincare_section_henonheilles_rk4.so") > > out<-.Fortran("section_crossing", > h=as.numeric(h), > nphas=as.integer(nphas),.. > ... > c) and call the function as usual. > > Please note that the function called by .Fortran is the name of the > subroutine within poincare_section.f90 and not the filename. > > I take the opportunity to thank R-developers for making the calling of C > and Fortran in R very easy. > > I hope this helps. > > regards > > Ed > > PS. If you need an example of a package using Fortran90, please check > https://github.com/emammendes/mittagleffler > > > > On Jun 15, 2016, at 5:20 PM, Kodalore Vijayan, Vineetha W <vwkv13 at mun.ca> > wrote: > > Hi, > > I'm trying to write an R package that calls a Fortran subroutine on my Mac > os x El Capitan with Xcode 7 and gfortran 6.1, R 3.3.0. I can build and > load the library but when I try to use it in R I get this error: > > library(NEpidemic) > random_epi(variable_names) > > > Error in .Fortran("random_epi", : "random_pi" not resolved from current > namespace (NEpidemic). > > Then I tried adding useDynLib(random_epi.f95) in the NAMESPACE file, > additional to useDynLib(NEpidemic). After doing that I couldn't build the > package and it gave me another error: > > Error in library.dynam(lib, package, package.lib) : > shared object ?random_epi.so? not found > Error: loading failed > Execution halted > ERROR: loading failed > > When I checked my src folder, there is only random_epi.o file. How can I > fix this issue? Any help would be much appreciated. I'm vey new to both R > and Fortran coding, especially in package building. > > Thanks in advance! > Vineetha > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > > >[[alternative HTML version deleted]]
Eduardo M. A. M.Mendes
2016-Jun-16 17:14 UTC
[R] Writing R package that call Fortran codes
Hi Vineetha It seems that there are some problems in the Fortran code as far as allocating memory is concerned. If you have statements such as double preciosion :: y(n) you will need to allocate memory for the vector within the Fortran code or in the R wrapper-function. It is hard to pinpoint the error without seeing the source files. Cheers Ed> On Jun 16, 2016, at 2:03 PM, Kodalore Vijayan, Vineetha W <vwkv13 at mun.ca> wrote: > > Hi Eduardo, > > Thanks for your comments. I haven't tried the way you told me. Now when I tried, got the following error: > > *** caught segfault *** > address 0x0, cause 'memory not mapped' > > Traceback: > 1: .Fortran("dataxy", n = as.integer(n), tmax = as.integer(tmax), alpha = as.double(alpha), beta = as.double(beta), x = as.double(0, length = n), y = as.double(0, length = n), tau = as.integer(0, length = n)) > 2: out(NULL, NULL, NULL, NULL) > > Possible actions: > 1: abort (with core dump, if enabled) > 2: normal R exit > 3: exit R without saving workspace > 4: exit R saving workspace > Selection: > > Any suggestions? > > Thanks, > Vineetha > > On Wed, Jun 15, 2016 at 3:55 PM, Eduardo M. A. M.Mendes <emammendes at gmail.com <mailto:emammendes at gmail.com>> wrote: > Hi > > Have you tried to load and run the fortran code using just a wrapper function in R? I do that as the first step in order to build a package. > > Example: fortran sources -> rk4_mod_r.f90 ,derive_henonheilles.f90, poincare_section.f90 > > a) I use R CMD SHLIB rk4_mod_r.f90 ,derive_henonheilles.f90, poincare_section.f90 - o poincare_section_henonheilles_rk4.so > b) Then I write a wrapper function in R, poinc_section_henonheilles.R > ... > dyn.load("poincare_section_henonheilles_rk4.so") > > out<-.Fortran("section_crossing", > h=as.numeric(h), > nphas=as.integer(nphas),.. > ... > c) and call the function as usual. > > Please note that the function called by .Fortran is the name of the subroutine within poincare_section.f90 and not the filename. > > I take the opportunity to thank R-developers for making the calling of C and Fortran in R very easy. > > I hope this helps. > > regards > > Ed > > PS. If you need an example of a package using Fortran90, please check https://github.com/emammendes/mittagleffler <https://github.com/emammendes/mittagleffler> > > > >> On Jun 15, 2016, at 5:20 PM, Kodalore Vijayan, Vineetha W <vwkv13 at mun.ca <mailto:vwkv13 at mun.ca>> wrote: >> >> Hi, >> >> I'm trying to write an R package that calls a Fortran subroutine on my Mac >> os x El Capitan with Xcode 7 and gfortran 6.1, R 3.3.0. I can build and >> load the library but when I try to use it in R I get this error: >>> library(NEpidemic) >>> random_epi(variable_names) >> >> Error in .Fortran("random_epi", : "random_pi" not resolved from current >> namespace (NEpidemic). >> >> Then I tried adding useDynLib(random_epi.f95) in the NAMESPACE file, >> additional to useDynLib(NEpidemic). After doing that I couldn't build the >> package and it gave me another error: >> >> Error in library.dynam(lib, package, package.lib) : >> shared object ?random_epi.so? not found >> Error: loading failed >> Execution halted >> ERROR: loading failed >> >> When I checked my src folder, there is only random_epi.o file. How can I >> fix this issue? Any help would be much appreciated. I'm vey new to both R >> and Fortran coding, especially in package building. >> >> Thanks in advance! >> Vineetha >> >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help at r-project.org <mailto:R-help at r-project.org> mailing list -- To UNSUBSCRIBE and more, see >> https://stat.ethz.ch/mailman/listinfo/r-help <https://stat.ethz.ch/mailman/listinfo/r-help> >> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html <http://www.r-project.org/posting-guide.html> >> and provide commented, minimal, self-contained, reproducible code. > >[[alternative HTML version deleted]]
> 1: .Fortran("dataxy", n = as.integer(n), tmax = as.integer(tmax),alpha = as.double(alpha), beta = as.double(beta), x = as.double(0, length = n), y = as.double(0, length = n), tau = as.integer(0, length = n)) Are you expecting that as.integer(0, length=n) and as.double(0, length = n) will produce vectors of length 'n'? They do not and short inputs will usually cause memory misuse and crashes in the Fortran code. Bill Dunlap TIBCO Software wdunlap tibco.com On Thu, Jun 16, 2016 at 10:03 AM, Kodalore Vijayan, Vineetha W < vwkv13 at mun.ca> wrote:> Hi Eduardo, > > Thanks for your comments. I haven't tried the way you told me. Now when I > tried, got the following error: > > *** caught segfault *** > address 0x0, cause 'memory not mapped' > > Traceback: > 1: .Fortran("dataxy", n = as.integer(n), tmax = as.integer(tmax), > alpha = as.double(alpha), beta = as.double(beta), x = as.double(0, > length = n), y = as.double(0, length = n), tau = as.integer(0, > length = n)) > 2: out(NULL, NULL, NULL, NULL) > > Possible actions: > 1: abort (with core dump, if enabled) > 2: normal R exit > 3: exit R without saving workspace > 4: exit R saving workspace > Selection: > > Any suggestions? > > Thanks, > Vineetha > > On Wed, Jun 15, 2016 at 3:55 PM, Eduardo M. A. M.Mendes < > emammendes at gmail.com> wrote: > > > Hi > > > > Have you tried to load and run the fortran code using just a wrapper > > function in R? I do that as the first step in order to build a package. > > > > Example: fortran sources -> rk4_mod_r.f90 ,derive_henonheilles.f90, > > poincare_section.f90 > > > > a) I use R CMD SHLIB rk4_mod_r.f90 ,derive_henonheilles.f90, > > poincare_section.f90 - o poincare_section_henonheilles_rk4.so > > b) Then I write a wrapper function in R, poinc_section_henonheilles.R > > ... > > dyn.load("poincare_section_henonheilles_rk4.so") > > > > out<-.Fortran("section_crossing", > > h=as.numeric(h), > > nphas=as.integer(nphas),.. > > ... > > c) and call the function as usual. > > > > Please note that the function called by .Fortran is the name of the > > subroutine within poincare_section.f90 and not the filename. > > > > I take the opportunity to thank R-developers for making the calling of C > > and Fortran in R very easy. > > > > I hope this helps. > > > > regards > > > > Ed > > > > PS. If you need an example of a package using Fortran90, please check > > https://github.com/emammendes/mittagleffler > > > > > > > > On Jun 15, 2016, at 5:20 PM, Kodalore Vijayan, Vineetha W <vwkv13 at mun.ca > > > > wrote: > > > > Hi, > > > > I'm trying to write an R package that calls a Fortran subroutine on my > Mac > > os x El Capitan with Xcode 7 and gfortran 6.1, R 3.3.0. I can build and > > load the library but when I try to use it in R I get this error: > > > > library(NEpidemic) > > random_epi(variable_names) > > > > > > Error in .Fortran("random_epi", : "random_pi" not resolved from current > > namespace (NEpidemic). > > > > Then I tried adding useDynLib(random_epi.f95) in the NAMESPACE file, > > additional to useDynLib(NEpidemic). After doing that I couldn't build the > > package and it gave me another error: > > > > Error in library.dynam(lib, package, package.lib) : > > shared object ?random_epi.so? not found > > Error: loading failed > > Execution halted > > ERROR: loading failed > > > > When I checked my src folder, there is only random_epi.o file. How can I > > fix this issue? Any help would be much appreciated. I'm vey new to both R > > and Fortran coding, especially in package building. > > > > Thanks in advance! > > Vineetha > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > > https://stat.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guide > > http://www.R-project.org/posting-guide.html > > and provide commented, minimal, self-contained, reproducible code. > > > > > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.[[alternative HTML version deleted]]
Kodalore Vijayan, Vineetha W
2016-Jun-16 18:01 UTC
[R] Writing R package that call Fortran codes
Hi, @Eduardo: I do have statements like, double preciosion :: y(n) in my fortran code. Will change the code and run again. @ William : Yes I was initializing X ,Y,and tau, each have a vector of length "n". Thanks, Vineetha On Thu, Jun 16, 2016 at 11:54 AM, William Dunlap <wdunlap at tibco.com> wrote:> > 1: .Fortran("dataxy", n = as.integer(n), tmax = as.integer(tmax), > alpha = as.double(alpha), beta = as.double(beta), x = as.double(0, > length = n), y = as.double(0, length = n), tau = as.integer(0, > length = n)) > > Are you expecting that > as.integer(0, length=n) > and > as.double(0, length = n) > will produce vectors of length 'n'? They do not and short inputs will > usually > cause memory misuse and crashes in the Fortran code. > > > > Bill Dunlap > TIBCO Software > wdunlap tibco.com > > On Thu, Jun 16, 2016 at 10:03 AM, Kodalore Vijayan, Vineetha W < > vwkv13 at mun.ca> wrote: > >> Hi Eduardo, >> >> Thanks for your comments. I haven't tried the way you told me. Now when I >> tried, got the following error: >> >> *** caught segfault *** >> address 0x0, cause 'memory not mapped' >> >> Traceback: >> 1: .Fortran("dataxy", n = as.integer(n), tmax = as.integer(tmax), >> alpha = as.double(alpha), beta = as.double(beta), x = as.double(0, >> length = n), y = as.double(0, length = n), tau = as.integer(0, >> length = n)) >> 2: out(NULL, NULL, NULL, NULL) >> >> Possible actions: >> 1: abort (with core dump, if enabled) >> 2: normal R exit >> 3: exit R without saving workspace >> 4: exit R saving workspace >> Selection: >> >> Any suggestions? >> >> Thanks, >> Vineetha >> >> On Wed, Jun 15, 2016 at 3:55 PM, Eduardo M. A. M.Mendes < >> emammendes at gmail.com> wrote: >> >> > Hi >> > >> > Have you tried to load and run the fortran code using just a wrapper >> > function in R? I do that as the first step in order to build a >> package. >> > >> > Example: fortran sources -> rk4_mod_r.f90 ,derive_henonheilles.f90, >> > poincare_section.f90 >> > >> > a) I use R CMD SHLIB rk4_mod_r.f90 ,derive_henonheilles.f90, >> > poincare_section.f90 - o poincare_section_henonheilles_rk4.so >> > b) Then I write a wrapper function in R, poinc_section_henonheilles.R >> > ... >> > dyn.load("poincare_section_henonheilles_rk4.so") >> > >> > out<-.Fortran("section_crossing", >> > h=as.numeric(h), >> > nphas=as.integer(nphas),.. >> > ... >> > c) and call the function as usual. >> > >> > Please note that the function called by .Fortran is the name of the >> > subroutine within poincare_section.f90 and not the filename. >> > >> > I take the opportunity to thank R-developers for making the calling of C >> > and Fortran in R very easy. >> > >> > I hope this helps. >> > >> > regards >> > >> > Ed >> > >> > PS. If you need an example of a package using Fortran90, please check >> > https://github.com/emammendes/mittagleffler >> > >> > >> > >> > On Jun 15, 2016, at 5:20 PM, Kodalore Vijayan, Vineetha W < >> vwkv13 at mun.ca> >> > wrote: >> > >> > Hi, >> > >> > I'm trying to write an R package that calls a Fortran subroutine on my >> Mac >> > os x El Capitan with Xcode 7 and gfortran 6.1, R 3.3.0. I can build >> and >> > load the library but when I try to use it in R I get this error: >> > >> > library(NEpidemic) >> > random_epi(variable_names) >> > >> > >> > Error in .Fortran("random_epi", : "random_pi" not resolved from current >> > namespace (NEpidemic). >> > >> > Then I tried adding useDynLib(random_epi.f95) in the NAMESPACE file, >> > additional to useDynLib(NEpidemic). After doing that I couldn't build >> the >> > package and it gave me another error: >> > >> > Error in library.dynam(lib, package, package.lib) : >> > shared object ?random_epi.so? not found >> > Error: loading failed >> > Execution halted >> > ERROR: loading failed >> > >> > When I checked my src folder, there is only random_epi.o file. How can >> I >> > fix this issue? Any help would be much appreciated. I'm vey new to both >> R >> > and Fortran coding, especially in package building. >> > >> > Thanks in advance! >> > Vineetha >> > >> > [[alternative HTML version deleted]] >> > >> > ______________________________________________ >> > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> > https://stat.ethz.ch/mailman/listinfo/r-help >> > PLEASE do read the posting guide >> > http://www.R-project.org/posting-guide.html >> > and provide commented, minimal, self-contained, reproducible code. >> > >> > >> > >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide >> http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. > > >[[alternative HTML version deleted]]
Eduardo M. A. M.Mendes
2016-Jun-16 18:02 UTC
[R] Writing R package that call Fortran codes
Thanks Bill for pointing this out. I haven?t noticed it. Vineetha, try as.double(rep(0,n)) or as.matrix(rep(0,n)), Ed> On Jun 16, 2016, at 2:54 PM, William Dunlap <wdunlap at tibco.com> wrote: > > > 1: .Fortran("dataxy", n = as.integer(n), tmax = as.integer(tmax), alpha = as.double(alpha), beta = as.double(beta), x = as.double(0, length = n), y = as.double(0, length = n), tau = as.integer(0, length = n)) > > Are you expecting that > as.integer(0, length=n) > and > as.double(0, length = n) > will produce vectors of length 'n'? They do not and short inputs will usually > cause memory misuse and crashes in the Fortran code. > > > > Bill Dunlap > TIBCO Software > wdunlap tibco.com <http://tibco.com/> > On Thu, Jun 16, 2016 at 10:03 AM, Kodalore Vijayan, Vineetha W <vwkv13 at mun.ca <mailto:vwkv13 at mun.ca>> wrote: > Hi Eduardo, > > Thanks for your comments. I haven't tried the way you told me. Now when I > tried, got the following error: > > *** caught segfault *** > address 0x0, cause 'memory not mapped' > > Traceback: > 1: .Fortran("dataxy", n = as.integer(n), tmax = as.integer(tmax), > alpha = as.double(alpha), beta = as.double(beta), x = as.double(0, > length = n), y = as.double(0, length = n), tau = as.integer(0, > length = n)) > 2: out(NULL, NULL, NULL, NULL) > > Possible actions: > 1: abort (with core dump, if enabled) > 2: normal R exit > 3: exit R without saving workspace > 4: exit R saving workspace > Selection: > > Any suggestions? > > Thanks, > Vineetha > > On Wed, Jun 15, 2016 at 3:55 PM, Eduardo M. A. M.Mendes < > emammendes at gmail.com <mailto:emammendes at gmail.com>> wrote: > > > Hi > > > > Have you tried to load and run the fortran code using just a wrapper > > function in R? I do that as the first step in order to build a package. > > > > Example: fortran sources -> rk4_mod_r.f90 ,derive_henonheilles.f90, > > poincare_section.f90 > > > > a) I use R CMD SHLIB rk4_mod_r.f90 ,derive_henonheilles.f90, > > poincare_section.f90 - o poincare_section_henonheilles_rk4.so > > b) Then I write a wrapper function in R, poinc_section_henonheilles.R > > ... > > dyn.load("poincare_section_henonheilles_rk4.so") > > > > out<-.Fortran("section_crossing", > > h=as.numeric(h), > > nphas=as.integer(nphas),.. > > ... > > c) and call the function as usual. > > > > Please note that the function called by .Fortran is the name of the > > subroutine within poincare_section.f90 and not the filename. > > > > I take the opportunity to thank R-developers for making the calling of C > > and Fortran in R very easy. > > > > I hope this helps. > > > > regards > > > > Ed > > > > PS. If you need an example of a package using Fortran90, please check > > https://github.com/emammendes/mittagleffler <https://github.com/emammendes/mittagleffler> > > > > > > > > On Jun 15, 2016, at 5:20 PM, Kodalore Vijayan, Vineetha W <vwkv13 at mun.ca <mailto:vwkv13 at mun.ca>> > > wrote: > > > > Hi, > > > > I'm trying to write an R package that calls a Fortran subroutine on my Mac > > os x El Capitan with Xcode 7 and gfortran 6.1, R 3.3.0. I can build and > > load the library but when I try to use it in R I get this error: > > > > library(NEpidemic) > > random_epi(variable_names) > > > > > > Error in .Fortran("random_epi", : "random_pi" not resolved from current > > namespace (NEpidemic). > > > > Then I tried adding useDynLib(random_epi.f95) in the NAMESPACE file, > > additional to useDynLib(NEpidemic). After doing that I couldn't build the > > package and it gave me another error: > > > > Error in library.dynam(lib, package, package.lib) : > > shared object ?random_epi.so? not found > > Error: loading failed > > Execution halted > > ERROR: loading failed > > > > When I checked my src folder, there is only random_epi.o file. How can I > > fix this issue? Any help would be much appreciated. I'm vey new to both R > > and Fortran coding, especially in package building. > > > > Thanks in advance! > > Vineetha > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help at r-project.org <mailto:R-help at r-project.org> mailing list -- To UNSUBSCRIBE and more, see > > https://stat.ethz.ch/mailman/listinfo/r-help <https://stat.ethz.ch/mailman/listinfo/r-help> > > PLEASE do read the posting guide > > http://www.R-project.org/posting-guide.html <http://www.r-project.org/posting-guide.html> > > and provide commented, minimal, self-contained, reproducible code. > > > > > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org <mailto:R-help at r-project.org> mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help <https://stat.ethz.ch/mailman/listinfo/r-help> > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html <http://www.r-project.org/posting-guide.html> > and provide commented, minimal, self-contained, reproducible code. >[[alternative HTML version deleted]]