350 lines
No EOL
33 KiB
HTML
350 lines
No EOL
33 KiB
HTML
<!-- -*- mode: jinja2 -*- -->
|
|
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="description" content="Tridiagonal compact finite difference solver, mathematical operators, and MPI-IO drivers.">
|
|
<meta name="author" content="Google DeepMind Team & Ignis" >
|
|
<link rel="icon" href="../favicon.png">
|
|
|
|
<title>m_openmpi.f90 – HPC DNS Post-Processing Fortran Core</title>
|
|
|
|
<!-- Bootstrap -->
|
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"
|
|
integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
|
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"
|
|
integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
|
|
<!-- Font Awesome -->
|
|
<link href="../css/fontawesome.min.css" rel="stylesheet">
|
|
<link href="../css/brands.min.css" rel="stylesheet">
|
|
<link href="../css/regular.min.css" rel="stylesheet">
|
|
<link href="../css/solid.min.css" rel="stylesheet">
|
|
<link href="../css/v4-font-face.min.css" rel="stylesheet">
|
|
<link href="../css/v4-shims.min.css" rel="stylesheet">
|
|
<!-- MathJax -->
|
|
<script type="text/x-mathjax-config">
|
|
MathJax.Hub.Config({
|
|
TeX: { equationNumbers: { autoNumber: "AMS" } }
|
|
});
|
|
</script>
|
|
<script src="https://cdn.jsdelivr.net/npm/mathjax@2.7.9/MathJax.js?config=TeX-AMS-MML_HTMLorMML" async
|
|
integrity="sha256-DViIOMYdwlM/axqoGDPeUyf0urLoHMN4QACBKyB58Uw=" crossorigin="anonymous"></script>
|
|
<!-- Other scripts and stylesheets -->
|
|
<link href="../css/local.css" rel="stylesheet">
|
|
<link href="../css/pygments.css" rel="stylesheet">
|
|
<script src="../js/svg-pan-zoom.min.js"></script>
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<!-- Fixed navbar -->
|
|
<div class="container-fluid mb-sm-4 mb-xl-2">
|
|
<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">
|
|
<div class="container">
|
|
<a class="navbar-brand" href="../index.html">HPC DNS Post-Processing Fortran Core <small>1.0.0</small></a>
|
|
<button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbar"
|
|
aria-expanded="false" aria-controls="navbar" aria-label="Toggle navigation">
|
|
<span class="navbar-toggler-icon">
|
|
</button>
|
|
|
|
<div id="navbar" class="navbar-collapse collapse">
|
|
<ul class="navbar-nav">
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="../lists/files.html">Source Files</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="../lists/modules.html">Modules</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="../lists/procedures.html">Procedures</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="../lists/programs.html">Programs</a>
|
|
</li>
|
|
</ul>
|
|
<div class="d-flex align-items-end flex-grow-1">
|
|
<form action="../search.html" role="search" class="ms-auto">
|
|
<input type="text" class="form-control" aria-label="Search" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required>
|
|
</form>
|
|
</div>
|
|
</div><!--/.nav-collapse -->
|
|
</div>
|
|
</nav>
|
|
</div>
|
|
|
|
<div class="container">
|
|
<div class="row">
|
|
<h1>m_openmpi.f90
|
|
<small>Source File</small>
|
|
|
|
</h1>
|
|
<div class="container p-2 mb-4 bg-light border rounded-3">
|
|
<div class="row align-items-center justify-content-between" id="info-bar">
|
|
<div class="col">
|
|
<ul class="list-inline" style="margin-bottom:0px;display:inline">
|
|
|
|
<li class="list-inline-item" id="statements"><i class="fa fa-list-ol"></i>
|
|
<a data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-html="true"
|
|
title=" 4.0% of total for source files.">63 statements</a>
|
|
</li>
|
|
|
|
<li class="list-inline-item" id="source-file">
|
|
<i class="fa fa-code"></i>
|
|
<a href="../src/m_openmpi.f90"> Source File</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div class="col">
|
|
<nav aria-label="breadcrumb">
|
|
<ol class="breadcrumb justify-content-end mb-0">
|
|
<li class="breadcrumb-item active" aria-current="page">m_openmpi.f90</li>
|
|
</ol>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
// Enable Bootstrap tooltips
|
|
(function () {
|
|
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
|
|
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
|
|
})();
|
|
</script>
|
|
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg">
|
|
<div id="sidebar">
|
|
<h3>Contents</h3>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="card mb-4">
|
|
<a data-bs-toggle="collapse" href="#mods-0"
|
|
aria-expanded="false" aria-controls="mods-0">
|
|
<h4 class="card-header bg-primary text-white">Modules</h4>
|
|
</a>
|
|
<div id="mods-0" class="collapse">
|
|
<div class="list-group list-group-flush">
|
|
<a class="list-group-item" href="../module/m_openmpi.html">m_openmpi</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="card card-primary">
|
|
<div class="card-header text-left"><h3 class="card-title">Source Code</h3></div>
|
|
<div class="list-group">
|
|
<a class="list-group-item" href="../sourcefile/m_openmpi.f90.html#src">m_openmpi.f90</a>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
<div class="col-md-9" id='text'>
|
|
|
|
<br>
|
|
|
|
<section>
|
|
<h2><span class="anchor" id="src"></span>Source Code</h2>
|
|
<div class="hl codehilite"><pre><span></span><a id="ln-1" name="ln-1" href="#ln-1"></a><span class="c">!================================================================================</span>
|
|
<a id="ln-2" name="ln-2" href="#ln-2"></a><span class="c">! Module contains interface to OpenMPI</span>
|
|
<a id="ln-3" name="ln-3" href="#ln-3"></a><span class="c">!</span>
|
|
<a id="ln-4" name="ln-4" href="#ln-4"></a><span class="c">! Time-stamp: <2009-08-20 14:22:13 (chumakov)></span>
|
|
<a id="ln-5" name="ln-5" href="#ln-5"></a><span class="c">!================================================================================</span>
|
|
<a id="ln-6" name="ln-6" href="#ln-6"></a>
|
|
<a id="ln-7" name="ln-7" href="#ln-7"></a>
|
|
<a id="ln-8" name="ln-8" href="#ln-8"></a><span class="k">module </span><span class="n">m_openmpi</span>
|
|
<a id="ln-9" name="ln-9" href="#ln-9"></a><span class="c">!================================================================================</span>
|
|
<a id="ln-10" name="ln-10" href="#ln-10"></a><span class="w"> </span><span class="k">implicit none</span>
|
|
<a id="ln-11" name="ln-11" href="#ln-11"></a><span class="k"> include</span><span class="w"> </span><span class="s1">'mpif.h'</span>
|
|
<a id="ln-12" name="ln-12" href="#ln-12"></a>
|
|
<a id="ln-13" name="ln-13" href="#ln-13"></a><span class="w"> </span><span class="c">! Uncomment this for the systems that do not have OpenMPI</span>
|
|
<a id="ln-14" name="ln-14" href="#ln-14"></a><span class="w"> </span><span class="c">! In OpenMPI, the parameter MPI_INTEGER_KIND is defined in 'mpif.h'</span>
|
|
<a id="ln-15" name="ln-15" href="#ln-15"></a><span class="w"> </span><span class="c">! With other MPI implementations, this parameter has to be defined manually.</span>
|
|
<a id="ln-16" name="ln-16" href="#ln-16"></a><span class="w"> </span><span class="c">! integer MPI_INTEGER_KIND</span>
|
|
<a id="ln-17" name="ln-17" href="#ln-17"></a><span class="w"> </span><span class="c">! parameter (MPI_INTEGER_KIND = 4)</span>
|
|
<a id="ln-18" name="ln-18" href="#ln-18"></a>
|
|
<a id="ln-19" name="ln-19" href="#ln-19"></a><span class="w"> </span><span class="c">! --- MPI variables</span>
|
|
<a id="ln-20" name="ln-20" href="#ln-20"></a><span class="w"> </span><span class="kt">logical</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">iammaster</span>
|
|
<a id="ln-21" name="ln-21" href="#ln-21"></a><span class="w"> </span><span class="kt">integer</span><span class="p">(</span><span class="nb">kind</span><span class="o">=</span><span class="n">MPI_INTEGER_KIND</span><span class="p">)</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">myid_world</span><span class="p">,</span><span class="w"> </span><span class="n">numprocs_world</span>
|
|
<a id="ln-22" name="ln-22" href="#ln-22"></a><span class="w"> </span><span class="kt">integer</span><span class="p">(</span><span class="nb">kind</span><span class="o">=</span><span class="n">MPI_INTEGER_KIND</span><span class="p">)</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">numprocs_hydro</span><span class="p">,</span><span class="w"> </span><span class="n">numprocs_stats</span><span class="p">,</span><span class="w"> </span><span class="n">numprocs_parts</span>
|
|
<a id="ln-23" name="ln-23" href="#ln-23"></a><span class="w"> </span><span class="kt">integer</span><span class="p">(</span><span class="nb">kind</span><span class="o">=</span><span class="n">MPI_INTEGER_KIND</span><span class="p">)</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">myid</span><span class="p">,</span><span class="w"> </span><span class="n">numprocs</span><span class="p">,</span><span class="w"> </span><span class="n">master</span><span class="p">,</span><span class="w"> </span><span class="n">mpi_err</span><span class="p">,</span><span class="w"> </span><span class="n">mpi_info</span><span class="p">,</span><span class="w"> </span><span class="n">mpi_provide</span>
|
|
<a id="ln-24" name="ln-24" href="#ln-24"></a><span class="w"> </span><span class="kt">integer</span><span class="p">(</span><span class="nb">kind</span><span class="o">=</span><span class="n">MPI_INTEGER_KIND</span><span class="p">)</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">id_to</span><span class="p">,</span><span class="w"> </span><span class="n">id_from</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">,</span><span class="w"> </span><span class="nb">count</span>
|
|
<a id="ln-25" name="ln-25" href="#ln-25"></a><span class="nb"> </span><span class="kt">integer</span><span class="p">(</span><span class="nb">kind</span><span class="o">=</span><span class="n">MPI_INTEGER_KIND</span><span class="p">)</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">id_root_hydro</span><span class="p">,</span><span class="w"> </span><span class="n">id_root_stats</span><span class="p">,</span><span class="w"> </span><span class="n">id_root_parts</span>
|
|
<a id="ln-26" name="ln-26" href="#ln-26"></a>
|
|
<a id="ln-27" name="ln-27" href="#ln-27"></a><span class="w"> </span><span class="c">! communicator for separate tasks</span>
|
|
<a id="ln-28" name="ln-28" href="#ln-28"></a><span class="w"> </span><span class="kt">integer</span><span class="p">(</span><span class="nb">kind</span><span class="o">=</span><span class="n">MPI_INTEGER_KIND</span><span class="p">)</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">MPI_COMM_TASK</span>
|
|
<a id="ln-29" name="ln-29" href="#ln-29"></a><span class="w"> </span><span class="c">! exclusive communicator for root processes of tasks</span>
|
|
<a id="ln-30" name="ln-30" href="#ln-30"></a><span class="w"> </span><span class="kt">integer</span><span class="p">(</span><span class="nb">kind</span><span class="o">=</span><span class="n">MPI_INTEGER_KIND</span><span class="p">)</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">MPI_COMM_ROOTS</span>
|
|
<a id="ln-31" name="ln-31" href="#ln-31"></a>
|
|
<a id="ln-32" name="ln-32" href="#ln-32"></a><span class="w"> </span><span class="kt">integer</span><span class="w"> </span><span class="p">(</span><span class="nb">kind</span><span class="o">=</span><span class="n">MPI_INTEGER_KIND</span><span class="p">)</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">sendtag</span><span class="p">,</span><span class="w"> </span><span class="n">recvtag</span>
|
|
<a id="ln-33" name="ln-33" href="#ln-33"></a><span class="w"> </span><span class="kt">integer</span><span class="w"> </span><span class="p">(</span><span class="nb">kind</span><span class="o">=</span><span class="n">MPI_INTEGER_KIND</span><span class="p">)</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">request</span><span class="p">,</span><span class="w"> </span><span class="n">request1</span><span class="p">,</span><span class="w"> </span><span class="n">request2</span><span class="p">,</span><span class="w"> </span><span class="n">request3</span><span class="p">,</span><span class="w"> </span><span class="n">mpi_request</span>
|
|
<a id="ln-34" name="ln-34" href="#ln-34"></a><span class="w"> </span><span class="kt">integer</span><span class="w"> </span><span class="p">(</span><span class="nb">kind</span><span class="o">=</span><span class="n">MPI_INTEGER_KIND</span><span class="p">)</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">id_l</span><span class="p">,</span><span class="w"> </span><span class="n">id_r</span>
|
|
<a id="ln-35" name="ln-35" href="#ln-35"></a><span class="w"> </span><span class="kt">integer</span><span class="w"> </span><span class="p">(</span><span class="nb">kind</span><span class="o">=</span><span class="n">mpi_INTEGER_KIND</span><span class="p">)</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">mpi_status</span><span class="p">(</span><span class="n">MPI_STATUS_SIZE</span><span class="p">)</span>
|
|
<a id="ln-36" name="ln-36" href="#ln-36"></a>
|
|
<a id="ln-37" name="ln-37" href="#ln-37"></a><span class="w"> </span><span class="kt">integer</span><span class="p">(</span><span class="nb">kind</span><span class="o">=</span><span class="n">MPI_INTEGER_KIND</span><span class="p">)</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">color</span><span class="p">,</span><span class="w"> </span><span class="n">key</span>
|
|
<a id="ln-38" name="ln-38" href="#ln-38"></a>
|
|
<a id="ln-39" name="ln-39" href="#ln-39"></a><span class="w"> </span><span class="kt">character</span><span class="o">*</span><span class="mi">5</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">task</span><span class="p">,</span><span class="w"> </span><span class="n">split</span><span class="o">=</span><span class="s2">"nevah"</span>
|
|
<a id="ln-40" name="ln-40" href="#ln-40"></a><span class="w"> </span><span class="kt">character</span><span class="o">*</span><span class="mi">10</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">run_name_local</span>
|
|
<a id="ln-41" name="ln-41" href="#ln-41"></a>
|
|
<a id="ln-42" name="ln-42" href="#ln-42"></a><span class="w"> </span><span class="kt">logical</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">task_split</span><span class="o">=</span><span class="p">.</span><span class="n">false</span><span class="p">.</span>
|
|
<a id="ln-43" name="ln-43" href="#ln-43"></a>
|
|
<a id="ln-44" name="ln-44" href="#ln-44"></a><span class="c">!================================================================================</span>
|
|
<a id="ln-45" name="ln-45" href="#ln-45"></a><span class="k">contains</span>
|
|
<a id="ln-46" name="ln-46" href="#ln-46"></a><span class="c">!================================================================================</span>
|
|
<a id="ln-47" name="ln-47" href="#ln-47"></a>
|
|
<a id="ln-48" name="ln-48" href="#ln-48"></a><span class="w"> </span><span class="k">subroutine </span><span class="n">m_openmpi_init</span>
|
|
<a id="ln-49" name="ln-49" href="#ln-49"></a>
|
|
<a id="ln-50" name="ln-50" href="#ln-50"></a><span class="w"> </span><span class="k">implicit none</span>
|
|
<a id="ln-51" name="ln-51" href="#ln-51"></a>
|
|
<a id="ln-52" name="ln-52" href="#ln-52"></a><span class="k"> </span><span class="kt">integer</span><span class="w"> </span><span class="p">(</span><span class="nb">kind</span><span class="o">=</span><span class="n">mpi_INTEGER_KIND</span><span class="p">)</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">n</span>
|
|
<a id="ln-53" name="ln-53" href="#ln-53"></a><span class="w"> </span><span class="kt">integer</span><span class="o">*</span><span class="mi">4</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">np_local</span>
|
|
<a id="ln-54" name="ln-54" href="#ln-54"></a><span class="w"> </span><span class="kt">integer</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">i</span>
|
|
<a id="ln-55" name="ln-55" href="#ln-55"></a>
|
|
<a id="ln-56" name="ln-56" href="#ln-56"></a><span class="w"> </span><span class="c">! first getting the run name form the command line </span>
|
|
<a id="ln-57" name="ln-57" href="#ln-57"></a><span class="w"> </span><span class="c">! (it's local, not global run_name)</span>
|
|
<a id="ln-58" name="ln-58" href="#ln-58"></a><span class="w"> </span><span class="c">! also getting the parameter "split" which governs the process splitting:</span>
|
|
<a id="ln-59" name="ln-59" href="#ln-59"></a><span class="w"> </span><span class="c">! split="split" means that hydro, statistics and particles are assigned three </span>
|
|
<a id="ln-60" name="ln-60" href="#ln-60"></a><span class="w"> </span><span class="c">! separate process groups (they differ by the char*5 parameter "task").</span>
|
|
<a id="ln-61" name="ln-61" href="#ln-61"></a><span class="w"> </span><span class="c">! split="never" (default if the parameter is missing) means that all</span>
|
|
<a id="ln-62" name="ln-62" href="#ln-62"></a><span class="w"> </span><span class="c">! processes do all tasks. (does not work for the particles at this point)</span>
|
|
<a id="ln-63" name="ln-63" href="#ln-63"></a><span class="w"> </span><span class="c">! call openmpi_get_command_line</span>
|
|
<a id="ln-64" name="ln-64" href="#ln-64"></a>
|
|
<a id="ln-65" name="ln-65" href="#ln-65"></a>
|
|
<a id="ln-66" name="ln-66" href="#ln-66"></a><span class="w"> </span><span class="c">! initializing MPI environment</span>
|
|
<a id="ln-67" name="ln-67" href="#ln-67"></a><span class="w"> </span><span class="c">!call MPI_INIT_THREAD(MPI_THREAD_SERIALIZED, mpi_provide, mpi_err)</span>
|
|
<a id="ln-68" name="ln-68" href="#ln-68"></a><span class="w"> </span><span class="k">call </span><span class="n">MPI_INIT</span><span class="p">(</span><span class="n">mpi_err</span><span class="p">)</span>
|
|
<a id="ln-69" name="ln-69" href="#ln-69"></a><span class="w"> </span><span class="k">call </span><span class="n">MPI_Comm_size</span><span class="p">(</span><span class="n">MPI_COMM_WORLD</span><span class="p">,</span><span class="n">numprocs_world</span><span class="p">,</span><span class="n">mpi_err</span><span class="p">)</span>
|
|
<a id="ln-70" name="ln-70" href="#ln-70"></a><span class="w"> </span><span class="k">call </span><span class="n">MPI_Comm_rank</span><span class="p">(</span><span class="n">MPI_COMM_WORLD</span><span class="p">,</span><span class="n">myid_world</span><span class="p">,</span><span class="n">mpi_err</span><span class="p">)</span>
|
|
<a id="ln-71" name="ln-71" href="#ln-71"></a>
|
|
<a id="ln-72" name="ln-72" href="#ln-72"></a><span class="c">!--------------------------------------------------------------------------------</span>
|
|
<a id="ln-73" name="ln-73" href="#ln-73"></a><span class="c">! Looking at the command line parameter called "split". If it equals "split"</span>
|
|
<a id="ln-74" name="ln-74" href="#ln-74"></a><span class="c">! then we define task_split=.true. If not, task_split remains .false. (default)</span>
|
|
<a id="ln-75" name="ln-75" href="#ln-75"></a><span class="c">!--------------------------------------------------------------------------------</span>
|
|
<a id="ln-76" name="ln-76" href="#ln-76"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">split</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"split"</span><span class="p">)</span><span class="w"> </span><span class="n">task_split</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">.</span><span class="n">true</span><span class="p">.</span>
|
|
<a id="ln-77" name="ln-77" href="#ln-77"></a>
|
|
<a id="ln-78" name="ln-78" href="#ln-78"></a><span class="c">!--------------------------------------------------------------------------------</span>
|
|
<a id="ln-79" name="ln-79" href="#ln-79"></a><span class="c">! First check if we need to do any task splitting. If we don't (split="never")</span>
|
|
<a id="ln-80" name="ln-80" href="#ln-80"></a><span class="c">! then we define task="hydro" and do a ficticious split with uniform color of</span>
|
|
<a id="ln-81" name="ln-81" href="#ln-81"></a><span class="c">! all processors.</span>
|
|
<a id="ln-82" name="ln-82" href="#ln-82"></a><span class="c">!--------------------------------------------------------------------------------</span>
|
|
<a id="ln-83" name="ln-83" href="#ln-83"></a><span class="w"> </span><span class="n">task</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'hydro'</span>
|
|
<a id="ln-84" name="ln-84" href="#ln-84"></a><span class="w"> </span><span class="n">color</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
|
|
<a id="ln-85" name="ln-85" href="#ln-85"></a><span class="w"> </span><span class="n">myid</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">myid_world</span>
|
|
<a id="ln-86" name="ln-86" href="#ln-86"></a>
|
|
<a id="ln-87" name="ln-87" href="#ln-87"></a><span class="w"> </span><span class="k">call </span><span class="n">MPI_COMM_SPLIT</span><span class="p">(</span><span class="n">MPI_COMM_WORLD</span><span class="p">,</span><span class="n">color</span><span class="p">,</span><span class="n">myid</span><span class="p">,</span><span class="n">MPI_COMM_TASK</span><span class="p">,</span><span class="n">mpi_err</span><span class="p">)</span>
|
|
<a id="ln-88" name="ln-88" href="#ln-88"></a><span class="w"> </span><span class="k">call </span><span class="n">MPI_COMM_SIZE</span><span class="p">(</span><span class="n">MPI_COMM_TASK</span><span class="p">,</span><span class="n">numprocs</span><span class="p">,</span><span class="n">mpi_err</span><span class="p">)</span>
|
|
<a id="ln-89" name="ln-89" href="#ln-89"></a><span class="w"> </span><span class="k">call </span><span class="n">MPI_COMM_RANK</span><span class="p">(</span><span class="n">MPI_COMM_TASK</span><span class="p">,</span><span class="n">myid</span><span class="p">,</span><span class="n">mpi_err</span><span class="p">)</span>
|
|
<a id="ln-90" name="ln-90" href="#ln-90"></a>
|
|
<a id="ln-91" name="ln-91" href="#ln-91"></a>
|
|
<a id="ln-92" name="ln-92" href="#ln-92"></a><span class="w"> </span><span class="c">! each task will have its master process </span>
|
|
<a id="ln-93" name="ln-93" href="#ln-93"></a><span class="w"> </span><span class="n">master</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
|
|
<a id="ln-94" name="ln-94" href="#ln-94"></a><span class="w"> </span><span class="n">iammaster</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">.</span><span class="n">false</span><span class="p">.</span>
|
|
<a id="ln-95" name="ln-95" href="#ln-95"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">myid</span><span class="p">.</span><span class="n">eq</span><span class="p">.</span><span class="n">master</span><span class="p">)</span><span class="w"> </span><span class="n">iammaster</span><span class="o">=</span><span class="p">.</span><span class="n">true</span><span class="p">.</span>
|
|
<a id="ln-96" name="ln-96" href="#ln-96"></a>
|
|
<a id="ln-97" name="ln-97" href="#ln-97"></a>
|
|
<a id="ln-98" name="ln-98" href="#ln-98"></a><span class="c">!!$ ! The following is put on hold because it looks like a crazy idea</span>
|
|
<a id="ln-99" name="ln-99" href="#ln-99"></a>
|
|
<a id="ln-100" name="ln-100" href="#ln-100"></a><span class="c">!!$ ! now creating separate exclusive communicator for the master nodes only </span>
|
|
<a id="ln-101" name="ln-101" href="#ln-101"></a><span class="c">!!$ ! the name of the new communicator is MPI_COMM_ROOTS</span>
|
|
<a id="ln-102" name="ln-102" href="#ln-102"></a><span class="c">!!$ ! if we want quickly broadcast something, then we can use two BCAST calls</span>
|
|
<a id="ln-103" name="ln-103" href="#ln-103"></a><span class="c">!!$ color = 1</span>
|
|
<a id="ln-104" name="ln-104" href="#ln-104"></a><span class="c">!!$ if (iammaster) color = 0</span>
|
|
<a id="ln-105" name="ln-105" href="#ln-105"></a><span class="c">!!$ call MPI_COMM_SPLIT(MPI_COMM_WORLD,color,myid_world,MPI_COMM_ROOTS,mpi_err)</span>
|
|
<a id="ln-106" name="ln-106" href="#ln-106"></a>
|
|
<a id="ln-107" name="ln-107" href="#ln-107"></a>
|
|
<a id="ln-108" name="ln-108" href="#ln-108"></a>
|
|
<a id="ln-109" name="ln-109" href="#ln-109"></a><span class="w"> </span><span class="k">return</span>
|
|
<a id="ln-110" name="ln-110" href="#ln-110"></a><span class="k"> end subroutine </span><span class="n">m_openmpi_init</span>
|
|
<a id="ln-111" name="ln-111" href="#ln-111"></a>
|
|
<a id="ln-112" name="ln-112" href="#ln-112"></a><span class="c">!================================================================================</span>
|
|
<a id="ln-113" name="ln-113" href="#ln-113"></a>
|
|
<a id="ln-114" name="ln-114" href="#ln-114"></a><span class="w"> </span><span class="k">subroutine </span><span class="n">m_openmpi_exit</span>
|
|
<a id="ln-115" name="ln-115" href="#ln-115"></a>
|
|
<a id="ln-116" name="ln-116" href="#ln-116"></a><span class="w"> </span><span class="k">call </span><span class="n">MPI_COMM_FREE</span><span class="p">(</span><span class="n">MPI_COMM_TASK</span><span class="p">,</span><span class="n">mpi_err</span><span class="p">)</span>
|
|
<a id="ln-117" name="ln-117" href="#ln-117"></a><span class="w"> </span><span class="k">call </span><span class="n">MPI_FINALIZE</span><span class="p">(</span><span class="n">mpi_err</span><span class="p">)</span>
|
|
<a id="ln-118" name="ln-118" href="#ln-118"></a>
|
|
<a id="ln-119" name="ln-119" href="#ln-119"></a><span class="w"> </span><span class="k">return</span>
|
|
<a id="ln-120" name="ln-120" href="#ln-120"></a><span class="k"> end subroutine </span><span class="n">m_openmpi_exit</span>
|
|
<a id="ln-121" name="ln-121" href="#ln-121"></a>
|
|
<a id="ln-122" name="ln-122" href="#ln-122"></a>
|
|
<a id="ln-123" name="ln-123" href="#ln-123"></a><span class="c">!================================================================================</span>
|
|
<a id="ln-124" name="ln-124" href="#ln-124"></a>
|
|
<a id="ln-125" name="ln-125" href="#ln-125"></a><span class="w"> </span><span class="k">subroutine </span><span class="n">openmpi_get_command_line</span>
|
|
<a id="ln-126" name="ln-126" href="#ln-126"></a><span class="w"> </span><span class="k">implicit none</span>
|
|
<a id="ln-127" name="ln-127" href="#ln-127"></a>
|
|
<a id="ln-128" name="ln-128" href="#ln-128"></a><span class="k"> </span><span class="kt">character</span><span class="p">(</span><span class="nb">len</span><span class="o">=</span><span class="mi">80</span><span class="p">)</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">tmp_str</span>
|
|
<a id="ln-129" name="ln-129" href="#ln-129"></a>
|
|
<a id="ln-130" name="ln-130" href="#ln-130"></a><span class="w"> </span><span class="c">! reading the run_name from the command line</span>
|
|
<a id="ln-131" name="ln-131" href="#ln-131"></a><span class="w"> </span><span class="k">if</span><span class="p">(</span><span class="nb">command_argument_count</span><span class="p">().</span><span class="n">eq</span><span class="p">.</span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="k">then</span>
|
|
<a id="ln-132" name="ln-132" href="#ln-132"></a><span class="k"> call </span><span class="nb">get_command_argument</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">tmp_str</span><span class="p">)</span>
|
|
<a id="ln-133" name="ln-133" href="#ln-133"></a><span class="w"> </span><span class="k">print</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="s1">'Format: '</span><span class="p">,</span><span class="nb">trim</span><span class="p">(</span><span class="n">tmp_str</span><span class="p">),</span><span class="s1">' (run name) ["split"/"never"]'</span>
|
|
<a id="ln-134" name="ln-134" href="#ln-134"></a><span class="w"> </span><span class="k">stop</span>
|
|
<a id="ln-135" name="ln-135" href="#ln-135"></a><span class="k"> end if</span>
|
|
<a id="ln-136" name="ln-136" href="#ln-136"></a><span class="k"> call </span><span class="nb">get_command_argument</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="n">run_name_local</span><span class="p">)</span>
|
|
<a id="ln-137" name="ln-137" href="#ln-137"></a><span class="w"> </span><span class="k">if</span><span class="p">(</span><span class="nb">len_trim</span><span class="p">(</span><span class="n">run_name_local</span><span class="p">).</span><span class="n">ne</span><span class="p">.</span><span class="mi">10</span><span class="p">)</span><span class="w"> </span><span class="k">then</span>
|
|
<a id="ln-138" name="ln-138" href="#ln-138"></a><span class="k"> print</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="s1">'Run name: "'</span><span class="p">,</span><span class="n">run_name_local</span><span class="p">,</span><span class="s1">'"'</span>
|
|
<a id="ln-139" name="ln-139" href="#ln-139"></a><span class="w"> </span><span class="k">print</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="s1">' "1234567890"'</span>
|
|
<a id="ln-140" name="ln-140" href="#ln-140"></a><span class="w"> </span><span class="k">print</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="s1">'Length of run name is less than 10, sorry.'</span>
|
|
<a id="ln-141" name="ln-141" href="#ln-141"></a><span class="w"> </span><span class="k">stop</span>
|
|
<a id="ln-142" name="ln-142" href="#ln-142"></a><span class="k"> end if</span>
|
|
<a id="ln-143" name="ln-143" href="#ln-143"></a>
|
|
<a id="ln-144" name="ln-144" href="#ln-144"></a><span class="w"> </span><span class="c">! getting the split parameter, if it's there</span>
|
|
<a id="ln-145" name="ln-145" href="#ln-145"></a><span class="w"> </span><span class="k">if</span><span class="p">(</span><span class="nb">command_argument_count</span><span class="p">().</span><span class="n">eq</span><span class="p">.</span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="k">call </span><span class="nb">get_command_argument</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="n">split</span><span class="p">)</span>
|
|
<a id="ln-146" name="ln-146" href="#ln-146"></a><span class="w"> </span>
|
|
<a id="ln-147" name="ln-147" href="#ln-147"></a>
|
|
<a id="ln-148" name="ln-148" href="#ln-148"></a><span class="w"> </span><span class="k">end subroutine </span><span class="n">openmpi_get_command_line</span>
|
|
<a id="ln-149" name="ln-149" href="#ln-149"></a>
|
|
<a id="ln-150" name="ln-150" href="#ln-150"></a><span class="c">!================================================================================</span>
|
|
<a id="ln-151" name="ln-151" href="#ln-151"></a>
|
|
<a id="ln-152" name="ln-152" href="#ln-152"></a><span class="k">end module </span><span class="n">m_openmpi</span>
|
|
</pre></div>
|
|
|
|
</section>
|
|
</div>
|
|
</div>
|
|
|
|
<hr>
|
|
</div> <!-- /container -->
|
|
<footer>
|
|
<div class="container">
|
|
<div class="row justify-content-between">
|
|
<div class="col">
|
|
<p>
|
|
HPC DNS Post-Processing Fortran Core
|
|
was developed by Google DeepMind Team & Ignis<br> © 2026
|
|
</p>
|
|
</div>
|
|
<div class="col">
|
|
<p class="text-end">
|
|
Documentation generated by
|
|
<a href="https://github.com/Fortran-FOSS-Programmers/ford">FORD</a>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
<br>
|
|
</div> <!-- /container -->
|
|
</footer>
|
|
</body>
|
|
</html> |