{"id":1441,"date":"2023-05-24T08:33:43","date_gmt":"2023-05-24T06:33:43","guid":{"rendered":"https:\/\/risc.web-email.at\/fachbeitrag-arbeiten-mit-fortran-in-2020-2\/"},"modified":"2023-11-02T16:38:59","modified_gmt":"2023-11-02T15:38:59","slug":"technical-article-fortran-parallelisation","status":"publish","type":"publication","link":"https:\/\/risc.web-email.at\/en\/technicalarticles\/technical-article-fortran-parallelisation\/","title":{"rendered":"Working with Fortran in 2020: Parallelisation"},"content":{"rendered":"\n<h2 class=\"wp-block-heading is-style-v2-telegrafico\">Fortran &#8211; Making optimal use of hardware<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">by DI Dr. Christoph Hofer<\/h3>\n\n\n<div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignfull is-layout-constrained wp-block-group-is-layout-constrained\">\n<p>The name Fortran is composed of &#8220;<strong>FOR<\/strong>mel <strong>TRAN<\/strong>slator&#8221; and is one of the oldest programming languages. For many software developers, it is the archetype of an old, ponderous, limited and difficult-to-understand programming language with which one would best not have anything to do. For the old versions of Fortran, this prejudice may indeed be true. However, Fortran has changed a lot in its long history, so that in its &#8220;modern&#8221; variant (such as Fortran 2003) the language has a much worse reputation than it deserves. 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.<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>Table of contents<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>From old to new<\/li>\n\n\n\n<li>Parallelisation: how to<\/li>\n\n\n\n<li>OpenMP<\/li>\n\n\n\n<li>MPI<\/li>\n\n\n\n<li>Coarray<\/li>\n\n\n\n<li>Author<\/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-464478994-1024x683.jpg\" alt=\"\" class=\"wp-image-1428 size-full\" srcset=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-464478994-1024x683.jpg 1024w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-464478994-300x200.jpg 300w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-464478994-768x512.jpg 768w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-464478994-1536x1025.jpg 1536w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-464478994.jpg 1920w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n<\/div>\n<\/div>\n\n<div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignfull 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\">From old to new<\/h3>\n\n\n\n<p>Fortran is considered to be the first<strong> higher programming language<\/strong> ever realised and was developed by IBM in the years 1954 &#8211; 1957 (FORTRAN I). The scope of the language was still very limited, for example, there were only integers and reals (floating point numbers) as data types and no functions yet. In the following years, new improved and more extensive Fortran versions were developed (FORTRAN II, FORTRAN III, FORTAN 66). Fortran received its next major update in 1977 (FORTRAN 77). Due to new features in the language, this version became very popular and thus quickly became &#8220;the&#8221; Fortran. Even today, when people talk about Fortran code, they mainly mean FORTRAN 77 code, which also explains the many prejudices against the language. Since then, there have been several more updates to the language, bringing it closer to modern programming concepts and standards.<\/p>\n\n\n\n<p>Major milestones in the development were the updates to Fortran 90 and Fortran 2003, which, in addition to the name change (FORTRAN \u2192 Fortran), added common concepts such as free source file formats, modules, <strong>operator overloading<\/strong>, <strong>derived data types<\/strong>, <strong>pointers<\/strong> and <strong>object-oriented programming<\/strong> to the programming language. In addition, Fortran 95 and Fortran 2008 were each minor updates of the language. The latest version of the Fortran standard is Fortran 2018, although no compiler manufacturer supports all features yet.<\/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_681a6efa125817ff67df5dbdfe9ec14f\">\n    <h3 class=\" inline-block \">\n        Higher Programming Language    <\/h3>\n    <span class=\"accordion-icon-toggle inline-block\"><\/span>\n  <\/div>\n  <div id=\"collapseblock_681a6efa125817ff67df5dbdfe9ec14f\" class=\"collapse\" aria-labelledby=\"headingblock_681a6efa125817ff67df5dbdfe9ec14f\">\n    <div class=\"accordion-body p-1.5 md:p-3 \">\n      <p>Microprocessors are programmed in a so-called machine language, i.e. a binary code that is interpreted by the microprocessor as a sequence of instructions. Since these languages are very dependent on the hardware used and direct programming in a machine language is very time-consuming, the development of higher programming languages and compilers was a great step forward. Higher programming languages use mathematical expressions or expressions based on a natural language (usually English) that are translated into machine language by a compiler (and linker). Higher programming languages are independent of the hardware, the adaptation to the concrete hardware is done by the compiler.<\/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_1e86f3c4ef6611319c71a51fbd171290\">\n    <h3 class=\" inline-block \">\n        Operator Overloading    <\/h3>\n    <span class=\"accordion-icon-toggle inline-block\"><\/span>\n  <\/div>\n  <div id=\"collapseblock_1e86f3c4ef6611319c71a51fbd171290\" class=\"collapse\" aria-labelledby=\"headingblock_1e86f3c4ef6611319c71a51fbd171290\">\n    <div class=\"accordion-body p-1.5 md:p-3 \">\n      <p>is a programming technique with which the meaning of operators (such as +, -, *, \u2026) depends on the respective types used. For example, 1 + 2 returns the number 3, but \u201cHelllo \u201d + \u201cWorld\u201d returns the 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_d07d82ffe870a44070e92080e23f44bd\">\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_d07d82ffe870a44070e92080e23f44bd\" class=\"collapse\" aria-labelledby=\"headingblock_d07d82ffe870a44070e92080e23f44bd\">\n    <div class=\"accordion-body p-1.5 md:p-3 \">\n      <p>allow the user to define data types from existing types. This offers the possibility of defining logically related data in one type and reusing it in different parts of the programme.<\/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_bcb6cd74c7a0891b64f1eeca4148a8bd\">\n    <h3 class=\" inline-block \">\n        Pointer    <\/h3>\n    <span class=\"accordion-icon-toggle inline-block\"><\/span>\n  <\/div>\n  <div id=\"collapseblock_bcb6cd74c7a0891b64f1eeca4148a8bd\" class=\"collapse\" aria-labelledby=\"headingblock_bcb6cd74c7a0891b64f1eeca4148a8bd\">\n    <div class=\"accordion-body p-1.5 md:p-3 \">\n      <p>is a data type that stores the memory address of a variable instead of the variable itself. Pointers refer to a memory address, so to speak, and the extraction of the value behind it is called dereferencing. In contrast to pointers in C\/C++, Fortran pointers have even more information and also allow to refer to unrelated memory areas (in the case of arrays).<\/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_5861ba14f5c926026ccd12c9692edb0c\">\n    <h3 class=\" inline-block \">\n        Object-oriented Programming    <\/h3>\n    <span class=\"accordion-icon-toggle inline-block\"><\/span>\n  <\/div>\n  <div id=\"collapseblock_5861ba14f5c926026ccd12c9692edb0c\" class=\"collapse\" aria-labelledby=\"headingblock_5861ba14f5c926026ccd12c9692edb0c\">\n    <div class=\"accordion-body p-1.5 md:p-3 \">\n      <p>is a programming style in which data is not only collected in Derived Data Types but encapsulated together with logic and functionality in so-called objects. Each object has defined interfaces through which it can interact with other objects, e.g. often not all data and functions of an object are visible to other objects. The aim is to avoid code duplications in order to reduce the potential for errors and the maintenance effort.<\/p>\n    <\/div>\n  <\/div>\n<\/div>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignfull 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\">Parallelisation: how to<\/h3>\n\n\n\n<p>Since the trend in the development of new CPUs is clearly moving towards an ever higher number of processor cores, efficient parallelisation is an integral part of high-performance code. The goal is to provide all cores with approximately the same computing load and to keep the communications or data exchange between the cores as low as possible through intelligent design of the programme code. Common options for parallelising programs on a CPU are OpenMP and MPI, as well as the new coarrays added to the Fortran standard.<\/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=\"670\" sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-155667482-1024x670.jpg\" alt=\"Hall\" class=\"wp-image-1430\" srcset=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-155667482-1024x670.jpg 1024w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-155667482-300x196.jpg 300w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-155667482-768x502.jpg 768w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-155667482-1536x1005.jpg 1536w, https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/iStock-155667482.jpg 1920w\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignfull 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\">OpenMP<\/h3>\n\n\n\n<p>OpenMP is designed for shared memory systems such as desktop PCs or shared memory mainframes. On a technical level, threads are created (fork) at the beginning of an OpenMP parallel region using a so-called &#8220;fork-join&#8221; model and joined again at the end. OpenMP offers a simple way to run certain parts of a programme, such as loops, in parallel without making major structural changes to the programme. In C\/C++ this is realised via &#8220;#pragma&#8221;, in Fortran with the help of the special syntax &#8220;!$&#8221;. Due to the simple way of implementation, the code remains easy to understand and the danger of bugs during development is low. However, parallel scalability is often limited by the frequent creation of threads and the synchronisation of shared variables in the CPU caches.<\/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-full is-style-rounded\"><img decoding=\"async\" width=\"642\" height=\"331\" sizes=\"(max-width: 642px) 100vw, 642px\" src=\"https:\/\/risc.web-email.at\/app\/uploads\/2023\/06\/Grafik_Fachbeitrag.gif\" alt=\"Fork-Join\" class=\"wp-image-1432\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><em>\u201cfork-join\u201d-Model OpenMP<\/em><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignfull 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\">MPI<\/h3>\n\n\n\n<p>MPI (Message Passing Interface) is based on a distributed memory model, such as computing clusters consisting of several computers or CPUs. In contrast to OpenMP, processes are created instead of threads, which operate independently of each other and do not have any common (shared) variables. Processes do not have to operate on the same CPU, which is why they are suitable for distributed memory systems, but can also be used on shared memory systems. To exchange data and information between processes, messages are sent between processes. These processes are created at the start of the programme and remain in existence throughout the entire runtime. Furthermore, there is no need to synchronise variables stored in the CPU caches, which usually makes MPI much more scalable than OpenMP. The disadvantage, however, is that under normal circumstances large structural changes have to be made to the code, which also greatly increases the risk of new bugs due to the changes. MPI also allows communication between different programs, so it follows the so-called multiple programs multiple data (MPMD) model.<\/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%\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignfull 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\">Coarray<\/h3>\n\n\n\n<p>Coarray Fortran was added to the language in the Fortran 2008 standard. Like MPI, coarrays support both distributed and shared memory systems. Coarrays operate on the single program multiple data (SPMD) model, a program creates multiple copies of itself (images), each running in parallel and independently. Communication is again enabled via messages. In contrast to MPI, programming with coarrays is more intuitive, as the interface is more abstracted for the user and less &#8220;low-level&#8221; knowledge is required. Since MPI is implemented in C, data often has to be copied through the Fortran\/C interface, like array slices. Coarrays, on the other hand, are programmed natively in Fortran and can also handle Fortran-specific data types more efficiently. Nevertheless, coarrays are still relatively new in Fortran and not as mature as MPI.<\/p>\n\n\n\n<p>Unfortunately, there is no module for &#8220;threading&#8221; in Fortran, which is similar to the &#8220;multithreading&#8221; library in C++, which was added to C++ with the release of the C++ 11 standard.<\/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%\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<div class=\"wp-block-group-container alignfull \">\n<div class=\"wp-block-group alignfull 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\">Contact<\/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\/1441#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-69de1f6e2910a-wrapper\" class=\"wpcf7-form-control-wrap phone-95-wrap\" style=\"display:none !important; visibility:hidden !important;\"><label for=\"wpcf7-69de1f6e2910a-field\" class=\"hp-message\">Please leave this field empty.<\/label><input id=\"wpcf7-69de1f6e2910a-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=\"eyJzb3VyY2UiOlsiY29udGFjdC1mb3JtLTdcL3dwLWNvbnRhY3QtZm9ybS03LnBocCJdLCJmb3JtX2lkIjo2NjN9-5cf29316f0fc31f5a29d11a228757560\">\n\t\t\t\t<span id=\"hcap_cf7-69de1f6e295dc9.45036689\" 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\/1441\" \/><\/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\">Author<\/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>\n\n<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-working-with-fortran-in-2020\/\" 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\/06\/iStock-1171721647-360x214.jpg\"\n                                                 alt=\"Working with Fortran in 2020: Areas of application\">\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: Areas of application<\/h3>\n                                    <div class=\"blog-post-excerpt mt-2\">\n                                        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.\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>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.<\/p>\n","protected":false},"featured_media":4579,"template":"","publication-category":[49,32,53],"class_list":["post-1441","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\/07\/Fortran_2_RISC-Software-GmbH_C_iStockPhoto_doomu_AKodisinghe-360x214.jpg","_links":{"self":[{"href":"https:\/\/risc.web-email.at\/en\/wp-json\/wp\/v2\/publication\/1441","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":6,"href":"https:\/\/risc.web-email.at\/en\/wp-json\/wp\/v2\/publication\/1441\/revisions"}],"predecessor-version":[{"id":4467,"href":"https:\/\/risc.web-email.at\/en\/wp-json\/wp\/v2\/publication\/1441\/revisions\/4467"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/risc.web-email.at\/en\/wp-json\/wp\/v2\/media\/4579"}],"wp:attachment":[{"href":"https:\/\/risc.web-email.at\/en\/wp-json\/wp\/v2\/media?parent=1441"}],"wp:term":[{"taxonomy":"publication-category","embeddable":true,"href":"https:\/\/risc.web-email.at\/en\/wp-json\/wp\/v2\/publication-category?post=1441"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}