mirror of
https://github.com/JuliaFEM/JuliaFEM.jl.git
synced 2026-09-24 03:07:53 +00:00
294 lines
5.8 KiB
Plaintext
294 lines
5.8 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Some simple examples for calling Fortran from Julia"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Author(s): Tero Frondelius"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"**Abstract:** Some simple examples for calling Fortran from Julia"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"f = open(\"hello.f90\",\"w\")\n",
|
|
"write(f,\"subroutine hello(x,z,y)\\n\")\n",
|
|
"write(f,\" real*8 x,y\\n\")\n",
|
|
"write(f,\"\"\" print *, \"Hello World! \", x,y, \" testing Jupyter\"\\n\"\"\")\n",
|
|
"write(f,\"end subroutine hello\\n\")\n",
|
|
"close(f)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"f = open(\"array.f90\",\"w\")\n",
|
|
"write(f, \"\"\"\n",
|
|
" subroutine array(arr,siz)\n",
|
|
" integer*8 siz\n",
|
|
" real*8, dimension(siz) :: arr\n",
|
|
" do i=1,siz\n",
|
|
" print *, \"Arr \", arr(i)\n",
|
|
" end do\n",
|
|
" end subroutine array\n",
|
|
" \"\"\")\n",
|
|
"close(f)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"f = open(\"matrix.f90\",\"w\")\n",
|
|
"write(f, \"\"\"\n",
|
|
"subroutine matrix(arr,siz)\n",
|
|
" integer*8 siz\n",
|
|
"real*8, dimension(siz,siz) :: arr\n",
|
|
" do i=1,siz\n",
|
|
" do j=1,siz\n",
|
|
" print *, \"Arr(\",i,\",\",j,\") = \", arr(i,j)\n",
|
|
" end do\n",
|
|
" end do\n",
|
|
"end subroutine matrix\n",
|
|
" \"\"\")\n",
|
|
"close(f)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"run(`gfortran -shared -fPIC -o libhello.so hello.f90 array.f90 matrix.f90`)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"tt = 23.; uu = 12.;"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
" Hello World! 23.000000000000000 12.000000000000000 testing Jupyter\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"0"
|
|
]
|
|
},
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"t = ccall( (:hello_, \"./libhello\"), Int64, (Ptr{Float64},Ptr{Void},Ptr{Float64}),&tt,{},&uu)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"6"
|
|
]
|
|
},
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"test = [6. 5. 4. 3. 2. 1.]\n",
|
|
"ltest = length(test)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
" Arr 6.0000000000000000 \n",
|
|
" Arr 5.0000000000000000 \n",
|
|
" Arr 4.0000000000000000 \n",
|
|
" Arr 3.0000000000000000 \n",
|
|
" Arr 2.0000000000000000 \n",
|
|
" Arr 1.0000000000000000 \n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"1"
|
|
]
|
|
},
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"out = ccall( (:array_, \"./libhello\"), Int64, (Ptr{Float64},Ptr{Int64}),test,<est)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"2x2 Array{Float64,2}:\n",
|
|
" 1.0 2.0\n",
|
|
" 3.0 4.0"
|
|
]
|
|
},
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"mat_test = [1. 2.; 3. 4.]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"2"
|
|
]
|
|
},
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"l_mat = size(mat_test)[1]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
" Arr( 1 , 1 ) = 1.0000000000000000 \n",
|
|
" Arr( 1 , 2 ) = 2.0000000000000000 \n",
|
|
" Arr( 2 , 1 ) = 3.0000000000000000 \n",
|
|
" Arr( 2 , 2 ) = 4.0000000000000000 \n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"1"
|
|
]
|
|
},
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"out = ccall( (:matrix_, \"./libhello\"), Int64, (Ptr{Float64},Ptr{Int64}),mat_test,&l_mat)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Julia 0.3.8",
|
|
"language": "julia",
|
|
"name": "julia-0.3"
|
|
},
|
|
"language_info": {
|
|
"name": "julia",
|
|
"version": "0.3.10"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 0
|
|
}
|