{"id":1311,"date":"2023-05-24T08:30:43","date_gmt":"2023-05-24T06:30:43","guid":{"rendered":"https:\/\/risc.web-email.at\/fachbeitrag-arbeiten-mit-fortran-in-2020\/"},"modified":"2025-05-31T12:29:14","modified_gmt":"2025-05-31T10:29:14","slug":"technical-article-working-with-fortran-in-2020","status":"publish","type":"publication","link":"https:\/\/risc.web-email.at\/en\/technicalarticles\/technical-article-working-with-fortran-in-2020\/","title":{"rendered":"Working with Fortran in 2020: Areas of application"},"content":{"rendered":"\n<h2 class=\"wp-block-heading is-style-v2-telegrafico\">Fortran \u2013 die bew\u00e4hrte Programmiersprache f\u00fcr technische Anwendungen<\/h2>\n\n<h3 class=\"wp-block-heading\">von DI Dr. Christoph Hofer<\/h3>\n<div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignwide is-layout-constrained wp-block-group-is-layout-constrained\">\n<p><em>Der Name Fortran\u00a0setzt sich zusammen aus \u201c<strong>FOR<\/strong>mel\u00a0<strong>TRAN<\/strong>slator\u201dund ist eine der \u00e4ltesten Programmiersprachen. F\u00fcr viele Softwareentwickler*innen ist sie der Archetyp f\u00fcr eine alte, beh\u00e4bige, eingeschr\u00e4nkte und schwer zu verstehende Programmiersprache mit der man am besten nichts zu tun haben m\u00f6chte. F\u00fcr die alten Versionen von Fortran mag dieses Vorurteil wirklich wahr sein. Fortran hat sich in seiner langen Geschichte aber viel ver\u00e4ndert, sodass in seiner \u201cmodernen\u201d Variante (wie etwa Fortran 2003) die Sprache einen viel schlechteren Ruf hat als ihr zusteht. Der typische Use-Case f\u00fcr Fortran als Programmiersprache sind rechenintensive numerische Simulationen, wie etwa Wettervorhersagen, Str\u00f6mungssimulationen, Stabilit\u00e4tsberechnungen, uvm.<\/em><br \/><br \/><\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-media-text has-media-on-the-right is-stacked-on-mobile is-vertically-aligned-center\"><div class=\"wp-block-media-text__content\">\n<p><strong>Inhalt<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Aus alt mach neu<\/li>\n\n\n\n<li>Compiler: Die Qual der Wahl<\/li>\n\n\n\n<li>Warum wird Fortran heutzutage noch eingesetzt?<\/li>\n\n\n\n<li>Integration von Fortran\/C\/Python<\/li>\n\n\n\n<li>Autor<\/li>\n<\/ul>\n<\/div><figure class=\"wp-block-media-text__media\"><img decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-494345930-1024x683.jpg\" alt=\"Progammieren\" class=\"wp-image-1292 size-full\" srcset=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-494345930-1024x683.jpg 1024w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-494345930-300x200.jpg 300w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-494345930-768x512.jpg 768w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-494345930-1536x1025.jpg 1536w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-494345930.jpg 1920w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n<\/div>\n<\/div><div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignwide is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<h3 class=\"wp-block-heading\">Aus alt mach neu<\/h3>\n\n\n\n<p>Fortran gilt als die erste jemals realisierte\u00a0<strong>h\u00f6here Programmiersprache<\/strong>\u00a0und wurde in den Jahren 1954 \u2013 1957 von IBM entwickelt (FORTRAN I). Der Umfang der Sprache war noch sehr eingeschr\u00e4nkt, zum Beispiel gab es nur Integer (Ganzzahlen) und Reals (Gleitkommazahlen)\u00a0als Datentypen und noch keine Funktionen. In den folgenden Jahren wurden neue verbesserte und umfangreichere Fortran Versionen entwickelt (FORTRAN II, FORTRAN III,\u00a0FORTAN 66). Das n\u00e4chste gro\u00dfe Update bekam Fortran im Jahr 1977 (FORTRAN 77). Durch neue Features in der Sprache wurde diese Version sehr popul\u00e4r und damit schnell zu \u201cdem\u201d Fortran. Auch heute noch ist, wenn \u00fcber Fortran Code gesprochen wird, haupts\u00e4chlich FORTRAN 77 Code gemeint, was auch die vielen Vorurteile gegen\u00fcber der Sprache erkl\u00e4rt. Seitdem gab es noch einige Updates der Sprache, die sie an moderne Programmierkonzepte und Standards heranf\u00fchren.<\/p>\n\n\n\n<p>Gro\u00dfe Meilensteine in der Entwicklung waren die Updates zu Fortran 90 und Fortran 2003, welche neben der Namens\u00e4nderung (FORTRAN\u00a0\u2192 Fortran) g\u00e4ngige Konzepte wie unter anderem freie Sourcefile Formate,\u00a0 Module,\u00a0<strong>Operator Overloading<\/strong>,\u00a0<strong>Derived data types<\/strong>,\u00a0<strong>Pointers<\/strong>\u00a0und\u00a0<strong>objektorientiertes Programmieren<\/strong>\u00a0\u00a0zur Programmiersprache hinzuf\u00fcgten. Zus\u00e4tzlich dazu gab es mit Fortran 95 und Fortran 2008 jeweils ein kleines Update der Sprache. Die aktuellste Version des Fortran Standards ist Fortran 2018, wobei noch kein Compilerhersteller alle Features unterst\u00fctzt.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<h3 class=\"wp-block-heading\">Info<\/h3>\n\n\n<div class=\"accordion\">\n  <div class=\"accordion-header p-1.5 md:px-3 md:py-2 flex items-center justify-between \" id=\"headingblock_9847699eb86c82d7a84b3da27b32d4dd\">\n    <h3 class=\" inline-block \">\n        H\u00f6here Programmiersprachen und Compiler    <\/h3>\n    <span class=\"accordion-icon-toggle inline-block\"><\/span>\n  <\/div>\n  <div id=\"collapseblock_9847699eb86c82d7a84b3da27b32d4dd\" class=\"collapse\" aria-labelledby=\"headingblock_9847699eb86c82d7a84b3da27b32d4dd\">\n    <div class=\"accordion-body p-1.5 md:p-3 \">\n      <p>Mikroprozessoren werden einer sogenannten Maschinensprache programmiert, also ein Bin\u00e4rcode der vom Mikroprozessor als Folge von Befehlen (Instructions) interpretretiert wird. Da diese Sprachen sehr von der verwendeten Hardware abh\u00e4ngen und das direkte Programmamieren in einer Maschinensprache sehr aufw\u00e4ndig ist, war die Entwicklung von h\u00f6heren Programmiersprachen und Compilern ein gro\u00dfer Fortschritt. H\u00f6hrere Programmiersprachen verwenden mathematische Ausdr\u00fccke oder Ausdr\u00fccke die an eine nat\u00fcrliche Sprache (meist Englisch) angelehnt sind die mittels einem Compiler (und Linker) in Maschinensprache \u00fcbersetzt werden. H\u00f6here Programmiersprachen sind unabh\u00e4ng von der Hardware, die Anpassung an die konkrete Hardware wird vom Compiler \u00fcbernommen.<\/p>\n    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<div class=\"accordion\">\n  <div class=\"accordion-header p-1.5 md:px-3 md:py-2 flex items-center justify-between \" id=\"headingblock_95bedeb511a0d30a4ac3cb8e95082793\">\n    <h3 class=\" inline-block \">\n        Operator Overloading    <\/h3>\n    <span class=\"accordion-icon-toggle inline-block\"><\/span>\n  <\/div>\n  <div id=\"collapseblock_95bedeb511a0d30a4ac3cb8e95082793\" class=\"collapse\" aria-labelledby=\"headingblock_95bedeb511a0d30a4ac3cb8e95082793\">\n    <div class=\"accordion-body p-1.5 md:p-3 \">\n      <p>ist eine Programmiertechnik mit der die Bedeutung von Operatoren (wie etwa +, -, *, \u2026) von den jeweiligen verwendeten Typen abh\u00e4ngt. Beispielsweise liefert 1 + 2 die Zahl 3, aber \u201cHelllo \u201d + \u201cWorld\u201d den String \u201cHello World\u201d.<\/p>\n    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<div class=\"accordion\">\n  <div class=\"accordion-header p-1.5 md:px-3 md:py-2 flex items-center justify-between \" id=\"headingblock_b381479a57927b5c027f8b1b55cb4b63\">\n    <h3 class=\" inline-block \">\n        Derived Data Type    <\/h3>\n    <span class=\"accordion-icon-toggle inline-block\"><\/span>\n  <\/div>\n  <div id=\"collapseblock_b381479a57927b5c027f8b1b55cb4b63\" class=\"collapse\" aria-labelledby=\"headingblock_b381479a57927b5c027f8b1b55cb4b63\">\n    <div class=\"accordion-body p-1.5 md:p-3 \">\n      <p>erlauben es dem Benutzer selbst Datentypen aus bestehenden Typen zu definieren. Dies bietet somit die M\u00f6glichkeit f\u00fcr die Definition von logisch zusammengeh\u00f6renden Daten in einem Typ und die Wiederverwednung derer in verschiedenen Teilen des Programms.<\/p>\n    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<div class=\"accordion\">\n  <div class=\"accordion-header p-1.5 md:px-3 md:py-2 flex items-center justify-between \" id=\"headingblock_d62c439066ec96134a40981a4c84586b\">\n    <h3 class=\" inline-block \">\n        Pointer    <\/h3>\n    <span class=\"accordion-icon-toggle inline-block\"><\/span>\n  <\/div>\n  <div id=\"collapseblock_d62c439066ec96134a40981a4c84586b\" class=\"collapse\" aria-labelledby=\"headingblock_d62c439066ec96134a40981a4c84586b\">\n    <div class=\"accordion-body p-1.5 md:p-3 \">\n      <p>ist ein Datentyp, der die Speicheradresse einer Variable speichert anstatt die Variable selbst. Pointer verweisen (referenzieren) sozusagen auf eine Speicheradresse, das Extrahieren des dahinterliegenden Wertes wird als Dereferenzierung bezeichnet. Im Unterschied zu Pointern in C\/C++ besitzen Fortran Pointer noch weitere Informationen und erlauben auch auf nicht zusammenhangende Speicherbereiche (im Fall von Arrays) zu verweisen.<\/p>\n    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<div class=\"accordion\">\n  <div class=\"accordion-header p-1.5 md:px-3 md:py-2 flex items-center justify-between \" id=\"headingblock_6b89dbd119c405e78f454abf312c3131\">\n    <h3 class=\" inline-block \">\n        Objektorientiertes Programmieren    <\/h3>\n    <span class=\"accordion-icon-toggle inline-block\"><\/span>\n  <\/div>\n  <div id=\"collapseblock_6b89dbd119c405e78f454abf312c3131\" class=\"collapse\" aria-labelledby=\"headingblock_6b89dbd119c405e78f454abf312c3131\">\n    <div class=\"accordion-body p-1.5 md:p-3 \">\n      <p>ist eine Programmierstil in dem Daten nicht nur in Derived Data Types gesammelt werden sondern zusammen mit Logik und Funktionalit\u00e4t in soganannten Objekten gekapselt. Jedes Objekt hat definierte Schnittstellen \u00fcber jene es mit anderen Objekten interagieren kann, z.B. sind oft nicht alle Daten und Funktionen eines Objekts f\u00fcr andere Objekte sichtbar. Ziel ist es Codeduplikationen zu vermeiden um das Fehlerpotential und den Wartungaufwand zu verringern.<\/p>\n    <\/div>\n  <\/div>\n<\/div>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div><div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignwide is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<h3 class=\"wp-block-heading\">Compiler: die Qual der Wahl<\/h3>\n\n\n\n<p>Neben dem Umfang der Programmiersprache an sich ist f\u00fcr Programmierer*innen auch ein einfacher und angenehmer Workflow w\u00e4hrend der Entwicklung wichtig, hei\u00dft in welcher Entwicklungsumgebung kann man mit welchem Compiler den geschriebenen Code gut testen und debuggen.\u00a0\u00a0Die eingeschr\u00e4nkte Anzahl an verf\u00fcgbaren Entwicklungsumgebungen verst\u00e4rkt den Eindruck, dass Fortran heutzutage nicht mehr zu den g\u00e4ngigsten Sprachen geh\u00f6rt.<\/p>\n\n\n\n<p>Um modernes Fortran zu programmieren (Fortran 2003\/2008) hat man mehrere Compiler zur Auswahl, sowohl Open Source als auch kommerzielle, unter anderem<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/software.intel.com\/content\/www\/us\/en\/develop\/tools\/compilers\/fortran-compilers.html\" target=\"_blank\" rel=\"noreferrer noopener\">Intel Fortran (ifort,\u00a0<em>kommerziell<\/em>)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.nag.com\/content\/nag-fortran-compiler\" target=\"_blank\" rel=\"noreferrer noopener\">NAG Fortran (<em>kommerziell<\/em>)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/gcc.gnu.org\/wiki\/GFortran\" target=\"_blank\" rel=\"noreferrer noopener\">GNU Fortran (gfortran,Open Source)<\/a><\/li>\n\n\n\n<li>Flang (ehemals \u201cf18\u201d, in Entwicklung,\u00a0<em>Open Source)<\/em><\/li>\n<\/ul>\n\n\n\n<p>Hinsichtlich Entwicklungsumgebungen gibt es speziell f\u00fcr Fortran entwickelte IDEs, wie etwa den NAG Fortran Builder, oder auch Integrationen f\u00fcr bestehende IDEs, wie die\u00a0Intel Integration f\u00fcr Visual Studio, oder Erweiterungen f\u00fcr Editoren, wie etwa Visual Studio Code.\u00a0Neben den mitgelieferten Debuggern (gdb, idb,..) sind auch externe kommerzielle Debugger, wie Total View (<a href=\"https:\/\/totalview.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/totalview.io\/<\/a>) f\u00fcr Fortran erh\u00e4ltlich.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large is-style-rounded\"><img decoding=\"async\" width=\"1024\" height=\"683\" sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-1280171152-1-1024x683.jpg\" alt=\"Laptop\" class=\"wp-image-1300\" srcset=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-1280171152-1-1024x683.jpg 1024w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-1280171152-1-300x200.jpg 300w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-1280171152-1-768x512.jpg 768w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-1280171152-1-1536x1024.jpg 1536w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-1280171152-1.jpg 1920w\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<\/div><div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignwide is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<h3 class=\"wp-block-heading\">Warum wird Fortran heutzutage noch eingesetzt?<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Legacy Code<\/h4>\n\n\n\n<p>Viele Fortran Systeme, die heute noch in Betrieb sind, wurden in den 1980er entwickelt. Zu dieser Zeit war Fortran\u00a0<em>die<\/em>\u00a0Sprache f\u00fcr wissenschaftliches Rechnen und numerische Simulationen. In solchen Programmen steckt sehr viel Wissen und Erfahrung, oftmals von mehreren Generationen von Ingenieur*innen und Wissenschafter*innen. Ein \u00dcbertragen in andere \u201cmoderne\u201d Programmiersprachen\u00a0 ist oft viel zu aufwendig oder zu teuer und der Mehrwert f\u00fcr die Unternehmen w\u00e4re kaum gegeben. Ein Reengineering des Programmcodes in einem modernen Fortran Standard und das aktive Weiterentwickeln in diesem ist oftmals die bessere Alternative.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Fortran ist f\u00fcr technische Anwendungen konzipiert<\/h4>\n\n\n\n<p>Wie bereits zu Beginn des Artikels erw\u00e4hnt sind numerische Simulationen der typische Use-Case f\u00fcr Fortran als Programmiersprache. Diese Bereiche zeichnen sich dadurch aus, dass einerseits effiziente Programmausf\u00fchrung wichtig ist, aber auch die Berechnungen durch mathematische Formeln beschrieben sind. Fortran gibt dem Programmierer die M\u00f6glichkeit diese Formeln in lesbarer Weise kompakt im Programmcode zu repr\u00e4sentieren. Weiters ist die Sprache ausgelegt f\u00fcr effiziente Berechnungen, wodurch hoch performanter Code eher die Regel als die Ausnahme ist.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Fortran ist eine einfache Sprache<\/h4>\n\n\n\n<p>Verglichen mit C++ oder Skriptsprachen wie Python hat Fortran ein eher eingeschr\u00e4nktes Feature Set, weshalb f\u00fcr viele heutige Gesch\u00e4ftsanwendungen die Entwicklung sehr m\u00fchsam w\u00e4re, f\u00fcr technisch\/naturwissenschaftliche Anwendungen ist sie aber sehr wohl passend. Das kleinere Feature Set erlaubt es auch, weniger erfahrenen Programmierer*innen gute Software zu entwickeln. Gerade durch die vielen M\u00f6glichkeiten von C++20 aber auch wie von Python sind weniger erfahrene Programmierer mit den M\u00f6glichkeiten oft \u00fcberfordert. Falsch angewendet kreieren komplexere Sprachen oftmals mehr Verwirrung als sie zur L\u00f6sung des Problems beitragen. In diesem Sinne wurde Fortran f\u00fcr Wissenschafter*innen und Ingenieur*innen, nicht f\u00fcr Informatiker und Softwareentwickler konzipiert.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large is-style-rounded\"><img decoding=\"async\" width=\"1024\" height=\"512\" sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-1171721647-1024x512.jpg\" alt=\"Alt und Neu\" class=\"wp-image-1302\" srcset=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-1171721647-1024x512.jpg 1024w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-1171721647-300x150.jpg 300w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-1171721647-768x384.jpg 768w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-1171721647-1536x768.jpg 1536w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-1171721647-640x320.jpg 640w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-1171721647.jpg 1920w\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<\/div><div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignwide is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<h3 class=\"wp-block-heading\">Integration Fortran\/C\/Python<\/h3>\n\n\n\n<p>Mit Fortran 2003 wurde mit dem Modul\u00a0<em>iso_c_binding\u00a0<\/em>\u00a0neue M\u00f6glichkeit zur einfacheren Interaktion zwischen Fortran und C Code geschaffen. Dieses Modul inkludiert:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Arten von primitiven Datentypen (Integer, Reals, \u2026), die den entsprechenden C-Datentypen entsprechen (int, double, ..)<\/li>\n\n\n\n<li>Funktionen zum Arbeiten mit C-Pointern, wie die Konvertierung von C zu Fortran Pointer oder Auslesen der Speicheradresse einer Fortran Variable.<\/li>\n\n\n\n<li>Konstanten f\u00fcr nicht anzeigbare C-Zeichen, wie das Zeilenumbruchzeichen (\\n) oder das horizontale Tab (\\t).<\/li>\n<\/ul>\n\n\n\n<p>Nicht alle Datentypen aus Fortran kann man mittels dem\u00a0<em>iso_c_binding<\/em>\u00a0in den C-Code \u00fcbertragen und vice-versa. Beispielsweise existiert in Fortran kein \u00c4quivalent einer C-Union oder in C gibt es kein direktes \u00c4quivalent des Fortran ALLOCATABLE Attribut f\u00fcr Arrays, das eine dynamische Allokation des Speichers erlaubt, der automatisch wieder freigegeben wird, falls der Array out-of-scope geht. Weiters hat C\/C++ keine Unterst\u00fctzung f\u00fcr Array-slices, also eine strukturierte Teilmenge eines Arrays, daher m\u00fcssen bei der \u00dcbergabe dieser Kopien angelegt werden.<\/p>\n\n\n\n<p>In einigen Projekten der RISC Software GmbH war die Vorgabe Python Interfaces f\u00fcr Fortran Code zu schreiben. Dazu hat sich das Programm SWIG (<a href=\"http:\/\/www.swig.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/www.swig.org\/<\/a>) bew\u00e4hrt, das Code f\u00fcr Python\/C Interfaces generiert. Um ein Python\/Fortran Interface zu erzeugen, wird zuerst die Fortran\/C Schnittstelle geschrieben, um mittels SWIG dann die Python\/C Schnittstelle zu erzeugen. SWIG ist in seiner Anwendung sehr flexibel und l\u00e4sst sogar numpy-Arrays als Argumente der Python Funktionen zu, was zu einerseits effizienten und anderseits gut lesbaren Python f\u00fchrt. Durch die Einbindung in das CMake Buildsystem funktioniert dieser Zugang plattformunabh\u00e4ngig und bietet einen einfachen und effizienten Workflow in der Entwicklung.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large is-style-rounded\"><img decoding=\"async\" width=\"1024\" height=\"683\" sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/shutterstock_1211842849-1024x683.jpg\" alt=\"Whiteboard\" class=\"wp-image-1304\" srcset=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/shutterstock_1211842849-1024x683.jpg 1024w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/shutterstock_1211842849-300x200.jpg 300w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/shutterstock_1211842849-768x512.jpg 768w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/shutterstock_1211842849-1536x1024.jpg 1536w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/shutterstock_1211842849.jpg 1920w\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<\/div><div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignwide is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<h3 class=\"wp-block-heading\">Kontakt<\/h3>\n\n\n\n<div class=\"wp-block-contact-form-7-contact-form-selector\">\n<div class=\"wpcf7 no-js\" id=\"wpcf7-f663-o1\" lang=\"en-US\" dir=\"ltr\" data-wpcf7-id=\"663\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/en\/wp-json\/wp\/v2\/publication\/1311#wpcf7-f663-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Contact form\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"663\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1.5\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"en_US\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f663-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/>\n<\/fieldset>\n<div class=\"form-row\">\n\t<div class=\"form-input\">\n\t\t<p><label class=\"sr-only\" for=\"your-name\">Your name <\/label><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-name\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" id=\"your-name\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Name\" value=\"\" type=\"text\" name=\"your-name\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n\t<div class=\"form-input\">\n\t\t<p><label class=\"sr-only\" for=\"your-email\">Your email<\/label><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-email\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email\" id=\"your-email\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"E-Mail\" value=\"\" type=\"email\" name=\"your-email\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n<\/div>\n<div class=\"form-row\">\n\t<div class=\"form-input\">\n\t\t<p><label class=\"sr-only\" for=\"your-company\">Company <\/label><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-company\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"your-company\" aria-invalid=\"false\" placeholder=\"Unternehmen\" value=\"\" type=\"text\" name=\"your-company\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n\t<div class=\"form-input\">\n\t\t<p><label class=\"sr-only\" for=\"your-position\">Position<\/label><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-position\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" aria-invalid=\"false\" placeholder=\"Position\" value=\"\" type=\"text\" name=\"your-position\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n<\/div>\n<div class=\"form-row\">\n\t<div class=\"form-input\">\n\t\t<p><label class=\"sr-only\" for=\"your-subject\"> Subject <\/label><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-subject\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" id=\"your-subject\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Thema\" value=\"\" type=\"text\" name=\"your-subject\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n<\/div>\n<p><span id=\"wpcf7-69de248c4f6c9-wrapper\" class=\"wpcf7-form-control-wrap phone-95-wrap\" style=\"display:none !important; visibility:hidden !important;\"><label for=\"wpcf7-69de248c4f6c9-field\" class=\"hp-message\">Please leave this field empty.<\/label><input id=\"wpcf7-69de248c4f6c9-field\"  class=\"wpcf7-form-control wpcf7-text\" type=\"text\" name=\"phone-95\" value=\"\" size=\"40\" tabindex=\"-1\" autocomplete=\"new-password\" \/><\/span><br \/>\n<label class=\"sr-only\" for=\"your-message\"> Your message (optional)<\/label><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-message\"><textarea cols=\"40\" rows=\"10\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea\" id=\"your-message\" aria-invalid=\"false\" placeholder=\"Ihre Nachricht an uns\" name=\"your-message\"><\/textarea><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"hcap-cf7\">\t\t<input\n\t\t\t\ttype=\"hidden\"\n\t\t\t\tclass=\"hcaptcha-widget-id\"\n\t\t\t\tname=\"hcaptcha-widget-id\"\n\t\t\t\tvalue=\"eyJzb3VyY2UiOlsiY29udGFjdC1mb3JtLTdcL3dwLWNvbnRhY3QtZm9ybS03LnBocCJdLCJmb3JtX2lkIjo0MzZ9-c5ba05e011699d70dda36bf3838d9e02\">\n\t\t\t\t<span id=\"hcap_cf7-69de248c4fe701.56334245\" class=\"wpcf7-form-control h-captcha \"\n\t\t\tdata-sitekey=\"3a6a81c1-2b2e-4b2a-b1eb-d9446bc09afb\"\n\t\t\tdata-theme=\"light\"\n\t\t\tdata-size=\"normal\"\n\t\t\tdata-auto=\"false\"\n\t\t\tdata-ajax=\"false\"\n\t\t\tdata-force=\"false\">\n\t\t<\/span>\n\t\t<input type=\"hidden\" id=\"_wpnonce\" name=\"_wpnonce\" value=\"83fc09d92f\" \/><input type=\"hidden\" name=\"_wp_http_referer\" value=\"\/en\/wp-json\/wp\/v2\/publication\/1311\" \/><\/span><input class=\"wpcf7-form-control wpcf7-submit has-spinner btn\" type=\"submit\" value=\"Senden\" \/>\n<\/p><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<h3 class=\"wp-block-heading\">Autor<\/h3>\n\n\n<div class=\"contact-person\">\n      <picture>\n      \n      \n      \n      \n      <img decoding=\"async\" data-aos=\"fade-zoom-in\"\n           data-aos-offset=\"0\" class=\"w-full\" width=\"212\" height=\"293\"\n           src=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/chofer1-removebg-preview.png\"\n           alt=\"\">\n    <\/picture>\n    \n\n<h5 class=\"wp-block-heading\">DI Dr. Christoph Hofer<\/h5>\n\n\n\n<p>Professional Software Engineer Unit Industrial Software Applications<\/p>\n\n  <\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div><div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignwide is-layout-constrained wp-block-group-is-layout-constrained\"><div class=\"posts-slider-block\" data-aos=\"fade-up\" data-aos-offset=\"0\" data-aos-anchor-placement=\"top-bottom\">\n        <section class=\"splide posts-slider\" aria-label=\"Gallery Slides\">\n            <div class=\"splide__arrows\">\n                <button class=\"splide__arrow splide__arrow--prev\">\n                    <span class=\"sr-only\">Previous<\/span>\n                    <img decoding=\"async\" loading=\"lazy\" width=\"25\" height=\"21\" src=\"https:\/\/risc.web-email.at\/app\/themes\/risc-theme\/public\/images\/icon-arrow.35d2ec.svg\"\n                         alt=\"Previous\">\n                <\/button>\n                <button class=\"splide__arrow splide__arrow--next\">\n                    <span class=\"sr-only\">Next<\/span>\n                    <img decoding=\"async\" loading=\"lazy\" width=\"25\" height=\"21\" src=\"https:\/\/risc.web-email.at\/app\/themes\/risc-theme\/public\/images\/icon-arrow.35d2ec.svg\"\n                         alt=\"Next\">\n                <\/button>\n            <\/div>\n            <div class=\"inner\">\n                <div class=\"splide__track\">\n                    <div class=\"splide__list\">\n\n                                                    <a href=\"https:\/\/risc.web-email.at\/en\/technicalarticles\/technical-article-fortran-parallelisation\/\" class=\"splide__slide blog-post-teaser mb-1 lg:mb-3\">\n                                <div class=\"blog-image\">\n                                                                                                                                <picture>\n                                                                                        <img decoding=\"async\" src=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/07\/Fortran_2_RISC-Software-GmbH_C_iStockPhoto_doomu_AKodisinghe-360x214.jpg\"\n                                                 alt=\"Working with Fortran in 2020: Parallelisation\">\n                                        <\/picture>\n                                                                    <\/div>\n                                <div class=\"blog-content px-2 py-3 xl:px-4 xl:py-5\">\n                                    <h3>Working with Fortran in 2020: Parallelisation<\/h3>\n                                    <div class=\"blog-post-excerpt mt-2\">\n                                        Since the trend of new CPUs is clearly towards ever higher numbers of processor cores, efficient parallelization is particularly important. With Fortran, the development of high-performance code is possible.\n                                    <\/div>\n                                    <span class=\"inline-block mt-2 more\">mehr erfahren <span class=\"ml-1 icon-more\"><\/span><\/span>\n\n                                <\/div>\n                            <\/a>\n                                                    <a href=\"https:\/\/risc.web-email.at\/en\/technicalarticles\/technical-article-working-with-fortran-in-2020-3\/\" class=\"splide__slide blog-post-teaser mb-1 lg:mb-3\">\n                                <div class=\"blog-image\">\n                                                                                                                                <picture>\n                                                                                        <img decoding=\"async\" src=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/07\/Fachebitrag-Bild_wide-360x214.jpg\"\n                                                 alt=\"Working with Fortran in 2020: Do\u2019s and Don\u2019ts\">\n                                        <\/picture>\n                                                                    <\/div>\n                                <div class=\"blog-content px-2 py-3 xl:px-4 xl:py-5\">\n                                    <h3>Working with Fortran in 2020: Do\u2019s and Don\u2019ts<\/h3>\n                                    <div class=\"blog-post-excerpt mt-2\">\n                                        Due to the long development history of Fortran and to maintain compatibility with legacy code, there are numerous obsolete and sometimes obscure language features in current Fortran compilers. There are also selected capabilities offered by new Fortran standards. You can read a summary of do&#039;s and don&#039;ts here.\n                                    <\/div>\n                                    <span class=\"inline-block mt-2 more\">mehr erfahren <span class=\"ml-1 icon-more\"><\/span><\/span>\n\n                                <\/div>\n                            <\/a>\n                                            <\/div>\n                <\/div>\n            <\/div>\n        <\/section>\n    <\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>The typical use case for Fortran as a programming language is computationally intensive numerical simulations, such as weather forecasts, flow simulations, stability calculations, and many more.<\/p>\n","protected":false},"featured_media":1302,"template":"","publication-category":[49,32,53],"class_list":["post-1311","publication","type-publication","status-publish","has-post-thumbnail","hentry","publication-category-software-development","publication-category-softwareentwicklung","publication-category-software-reengineering-en"],"acf":[],"portrait_thumb_url":"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-1171721647-360x214.jpg","_links":{"self":[{"href":"https:\/\/risc.web-email.at\/en\/wp-json\/wp\/v2\/publication\/1311","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/risc.web-email.at\/en\/wp-json\/wp\/v2\/publication"}],"about":[{"href":"https:\/\/risc.web-email.at\/en\/wp-json\/wp\/v2\/types\/publication"}],"version-history":[{"count":21,"href":"https:\/\/risc.web-email.at\/en\/wp-json\/wp\/v2\/publication\/1311\/revisions"}],"predecessor-version":[{"id":4452,"href":"https:\/\/risc.web-email.at\/en\/wp-json\/wp\/v2\/publication\/1311\/revisions\/4452"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/risc.web-email.at\/en\/wp-json\/wp\/v2\/media\/1302"}],"wp:attachment":[{"href":"https:\/\/risc.web-email.at\/en\/wp-json\/wp\/v2\/media?parent=1311"}],"wp:term":[{"taxonomy":"publication-category","embeddable":true,"href":"https:\/\/risc.web-email.at\/en\/wp-json\/wp\/v2\/publication-category?post=1311"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}