Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Table

...

of

...

contents

...

Table of Contents

1.

...

Introduction

...

The

...

document

...

describes

...

how

...

to

...

generate

...

a

...

LinkableComponent

...

on

...

Linux:

...

  • how

...

  • to

...

  • compile

...

  • a

...

  • shared

...

  • library

...

  • for

...

  • a

...

  • Fortran

...

  • <engine>

...

  • how

...

  • to

...

  • port

...

  • a

...

  • C#

...

  • wrapper

...

  • for

...

  • this

...

  • shared

...

  • library

...

  • from

...

  • Windows

...

  • to

...

  • Linux.

...

  • The

...

  • wrapper

...

  • contains

...

  • a

...

  • class

...

  • for

...

  • accessing

...

  • the

...

  • Fortran

...

  • Dll

...

  • <engine>DllAccess

...

  • and

...

  • two

...

  • outer

...

  • classes

...

  • <engine>DotNetAccess

...

  • and

...

  • <engine>Wrapper.

...

Image Added

2.

...

Technical

...

prerequisites

...

2.1.

...

Machine

...

and

...

OS

...

of

...

the

...

test

...

system

...

  • workstation

...

  • with

...

  • an

...

  • Intel

...

  • Xeon

...

  • processor

...

  • 64bit

...

  • Suse

...

  • Linux

...

  • Edition

...

  • Desktop

...

  • SLED

...

  • 10.3

...

  • on

...

  • the

...

  • machine

...

  • with

...

  • the

...

  • Fortran

...

  • compiler

...

  • 64bit

...

  • openSUSE

...

  • 11.0

...

  • on

...

  • the

...

  • machine

...

  • with

...

  • the

...

  • C#

...

  • compiler

...

2.2.

...

Mono

...

for

...

multi

...

platform

...

C#

...

  • Mono

...

  • v.

...

  • 1.9.1.

...

  • for

...

  • openSUSE

...

  • 11.0

...

  • in

...

  • 64

...

  • bit

...

  • mode.

...

  • V.

...

  • 1.9.1.

...

  • is

...

  • the

...

  • concrete

...

  • term,

...

  • but

...

  • it

...

  • is

...

  • also

...

  • referred

...

  • to

...

  • as

...

  • Mono

...

  • 2.0.

...

  • compiler

...

  • gmcs

...

  • 2.0.

...

2.3.

...

Fortran

...

90

...

Compiler

...

  • Intel

...

  • 64

...

  • bit

...

  • Fortran

...

  • Compiler

...

  • v.

...

  • 9.1.051

...

2.

...

How to generate a shared library for a Fortran engine

2.1. General

During runtime the C# wrapper could only reference one Fortran shared library. All Fortran sources were compiled to one shared library with the following compiler options:
Compilation:
{panel:
ifort -c -fPIC -convert big_endian -fpp *.f90
-c : compile to object (.o) only, do not link
-fPIC : generate position independent code (for shared libs)
-convert big_endian: the order in which a sequence of bytes is stored in a computer's memory,
here: most significant bytes first;
used, e.g. on mainframes and supercomputers.
-fpp : run Fortran preprocessor on source files prior to compilation
Linking the compiled objects:
ifort -shared *.o -o <sharedLibrary.so>
During runtime some fortran libraries must be accessible via LD_LIBRARY_PATH. In the following examples they are provided by the ifort compiler:
export LD_LIBRARY_PATH=/opt/intel/fce/9.1.051/lib:. // on 64bit systems
export LD_LIBRARY_PATH=/opt/intel/fc/9.1.051/lib:. // on 32bit systems
2.2. Ifort parameter bug
The ifort compiler v. 9.1.051 has a bug with public character parameters in modules.
Example:
CHARACTER (LEN=40), PUBLIC, PARAMETER :: c_att_name(2)= &
/ 'title ', &
'history '/
The parameter c_att_name can not be accessed from outside the module. The solution is a function that exports the parameter as a return value. Now the values can be accessed from outside.
PUBLIC FUNCTION get_c_att_name ( idx ) &
RESULT(res)
...
CHARACTER (LEN=40) :: res
res = c_att_name(idx)
END FUNCTION get_c_att_name

4. OpenMI on Mono in five steps
4.1. Download from SourceForge

Fig. 1: Directory structure