Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
a126422
Update umpire_shroud.yaml for untracked pools
davidbeckingsale Jan 9, 2026
a637181
Use splicer to work around bool template param issue
davidbeckingsale Feb 4, 2026
f19355b
Update C/FORTRAN interface
Feb 4, 2026
6d0c691
Fixup splicer code to match generated code
davidbeckingsale Feb 4, 2026
b6b2442
Update C/FORTRAN interface
Apr 1, 2026
ef7eea6
shortening func names
kab163 Apr 1, 2026
582f653
Update C/FORTRAN interface
Apr 1, 2026
acec2a0
codex fixing the github action for this case
kab163 Apr 1, 2026
f54b232
Merge branch 'task/untracked-pool' of github.com:llnl/Umpire into tas…
kab163 Apr 1, 2026
83e1146
Update C/FORTRAN interface
Apr 1, 2026
de9602c
codex attempt to make fixes for CI
kab163 Apr 1, 2026
164cef3
Merge branch 'task/untracked-pool' of github.com:llnl/Umpire into tas…
kab163 Apr 1, 2026
0d65d0a
codex fix for tabs
kab163 Apr 1, 2026
20d4c1e
Update C/FORTRAN interface
Apr 1, 2026
4bf705b
removing patch, adding F_name_impl
kab163 Apr 2, 2026
716b656
Update C/FORTRAN interface
Apr 2, 2026
d6e53af
more edits to shorten names
kab163 Apr 6, 2026
12462ae
more edits
kab163 Apr 6, 2026
defc8a1
Update C/FORTRAN interface
Apr 6, 2026
2777183
Merge branch 'develop' of github.com:llnl/Umpire into task/untracked-…
kab163 Apr 6, 2026
ba21db3
another attempt
kab163 Apr 6, 2026
8959180
another codex attempt
kab163 Apr 6, 2026
5b9efc1
codex might get it this time...
kab163 Apr 7, 2026
a6040dc
Update C/FORTRAN interface
Apr 7, 2026
e012955
trigger ci
kab163 Apr 7, 2026
9101b54
Merge branch 'task/untracked-pool' of github.com:llnl/Umpire into tas…
kab163 Apr 7, 2026
e855264
trigger ci
kab163 Apr 7, 2026
424e532
trigger ci again
kab163 Apr 7, 2026
00a6c79
another another another attempt
kab163 Apr 7, 2026
9f36793
trying again
kab163 Apr 7, 2026
d5ec4ec
Update C/FORTRAN interface
Apr 7, 2026
b8464ea
trigger ci
kab163 Apr 7, 2026
4b8bf02
Merge branch 'task/untracked-pool' of github.com:llnl/Umpire into tas…
kab163 Apr 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/actions/shroud/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#!/bin/bash

set -euo pipefail

git config --global --add safe.directory /github/workspace
git config --global --add safe.directory /github/workspace/.radiuss-ci
git config --global --add safe.directory /github/workspace/blt
Expand All @@ -13,4 +15,3 @@ git submodule update --init --recursive
mkdir build && cd build
cmake -DCMAKE_CXX_COMPILER=clang++ -DSHROUD_EXECUTABLE=/usr/local/bin/shroud ..
make -j 3 generate_umpire_shroud

4 changes: 3 additions & 1 deletion .github/workflows/generate-shroud.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
on:
on:
workflow_dispatch:
pull_request:
paths:
- '**umpire_shroud.yaml'
- '**genfumpiresplicer.f'
- '**gencumpiresplicer.inc'

name: Generate C/FORTRAN Interface
jobs:
Expand Down
8 changes: 6 additions & 2 deletions docs/sphinx/tutorial/fortran/allocators.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@
=======================
FORTRAN API: Allocators
=======================

The fundamental concept for accessing memory through Umpire is an
:class:`umpire:Allocator`. In FORTRAN, this means using the type
``UmpireAllocator``. This type provides an ``allocate_pointer`` function to
allocate raw memory, and a generic ``allocate`` procedure that takes an array
pointer and an array of dimensions and will allocate the correct amount of
memory.

As with the native C++ interface, all allocators are accessed via the
:class:`umpire::ResourceManager`. In the FORTRAN API, there is a corresponding
``UmpireResourceManager`` type. To get an ``UmpireAllocator``:
Expand All @@ -31,3 +31,7 @@ deallocate memory:

In this case, we allocate a one-dimensional array using the generic
``allocate`` function.

.. note::

Umpire's FORTRAN interface is generated with the help of `Shroud <https://shroud.readthedocs.io/en/latest/>`_.
101 changes: 101 additions & 0 deletions src/umpire/interface/c_fortran/gencumpiresplicer.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
//////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2016-26, Lawrence Livermore National Security, LLC and Umpire
// project contributors. See the COPYRIGHT file for details.
//
// SPDX-License-Identifier: (MIT)
//////////////////////////////////////////////////////////////////////////////
//
// Shroud splicer overrides for C wrappers.
//
// These bufferify wrappers correspond to explicit non-type template
// instantiations such as makeAllocator<Strategy, false>(...). Shroud emits
// invalid member calls for these overloads in the generated bufferify helpers,
// so provide the exact wrapper bodies here.

// splicer begin class.ResourceManager.method.make_allocator_list_pool_untracked_bufferify
const std::string SHCXX_name(name, Lname);
umpire::Allocator * SHCXX_allocator =
static_cast<umpire::Allocator *>(allocator.addr);
umpire::Allocator * SHCXX_rv = new umpire::Allocator;
*SHCXX_rv = SH_this->makeAllocator<umpire::strategy::DynamicPoolList, false>(
SHCXX_name, *SHCXX_allocator, initial_size, block);
SHC_rv->addr = SHCXX_rv;
SHC_rv->idtor = 1;
return SHC_rv;
// splicer end class.ResourceManager.method.make_allocator_list_pool_untracked_bufferify

// splicer begin class.ResourceManager.method.make_allocator_quick_pool_untracked_bufferify
const std::string SHCXX_name(name, Lname);
umpire::Allocator * SHCXX_allocator =
static_cast<umpire::Allocator *>(allocator.addr);
umpire::Allocator * SHCXX_rv = new umpire::Allocator;
*SHCXX_rv = SH_this->makeAllocator<umpire::strategy::QuickPool, false>(
SHCXX_name, *SHCXX_allocator, initial_size, block);
SHC_rv->addr = SHCXX_rv;
SHC_rv->idtor = 1;
return SHC_rv;
// splicer end class.ResourceManager.method.make_allocator_quick_pool_untracked_bufferify

// splicer begin class.ResourceManager.method.make_allocator_resource_aware_pool_untracked_bufferify
const std::string SHCXX_name(name, Lname);
umpire::Allocator * SHCXX_allocator =
static_cast<umpire::Allocator *>(allocator.addr);
umpire::Allocator * SHCXX_rv = new umpire::Allocator;
*SHCXX_rv = SH_this->makeAllocator<umpire::strategy::ResourceAwarePool, false>(
SHCXX_name, *SHCXX_allocator, initial_size, block);
SHC_rv->addr = SHCXX_rv;
SHC_rv->idtor = 1;
return SHC_rv;
// splicer end class.ResourceManager.method.make_allocator_resource_aware_pool_untracked_bufferify

// splicer begin class.ResourceManager.method.make_allocator_fixed_pool_untracked_bufferify
const std::string SHCXX_name(name, Lname);
umpire::Allocator * SHCXX_allocator =
static_cast<umpire::Allocator *>(allocator.addr);
umpire::Allocator * SHCXX_rv = new umpire::Allocator;
*SHCXX_rv = SH_this->makeAllocator<umpire::strategy::FixedPool, false>(
SHCXX_name, *SHCXX_allocator, object_size);
SHC_rv->addr = SHCXX_rv;
SHC_rv->idtor = 1;
return SHC_rv;
// splicer end class.ResourceManager.method.make_allocator_fixed_pool_untracked_bufferify

// splicer begin class.ResourceManager.method.make_allocator_monotonic_untracked_bufferify
const std::string SHCXX_name(name, Lname);
umpire::Allocator * SHCXX_allocator =
static_cast<umpire::Allocator *>(allocator.addr);
umpire::Allocator * SHCXX_rv = new umpire::Allocator;
*SHCXX_rv =
SH_this->makeAllocator<umpire::strategy::MonotonicAllocationStrategy, false>(
SHCXX_name, *SHCXX_allocator, object_size);
SHC_rv->addr = SHCXX_rv;
SHC_rv->idtor = 1;
return SHC_rv;
// splicer end class.ResourceManager.method.make_allocator_monotonic_untracked_bufferify

// splicer begin class.ResourceManager.method.make_allocator_slot_pool_untracked_bufferify
const std::string SHCXX_name(name, Lname);
umpire::Allocator * SHCXX_allocator =
static_cast<umpire::Allocator *>(allocator.addr);
umpire::Allocator * SHCXX_rv = new umpire::Allocator;
*SHCXX_rv = SH_this->makeAllocator<umpire::strategy::SlotPool, false>(
SHCXX_name, *SHCXX_allocator, object_size);
SHC_rv->addr = SHCXX_rv;
SHC_rv->idtor = 1;
return SHC_rv;
// splicer end class.ResourceManager.method.make_allocator_slot_pool_untracked_bufferify

// splicer begin class.ResourceManager.method.make_allocator_mixed_pool_untracked_bufferify
const std::string SHCXX_name(name, Lname);
umpire::Allocator * SHCXX_allocator =
static_cast<umpire::Allocator *>(allocator.addr);
umpire::Allocator * SHCXX_rv = new umpire::Allocator;
*SHCXX_rv = SH_this->makeAllocator<umpire::strategy::MixedPool, false>(
SHCXX_name, *SHCXX_allocator, smallest_fixed_obj_size,
largest_fixed_obj_size, max_initial_fixed_pool_size,
fixed_size_multiplier, quick_pool_initial_alloc_size,
quick_pool_min_alloc_size, quick_pool_align_bytes);
SHC_rv->addr = SHCXX_rv;
SHC_rv->idtor = 1;
return SHC_rv;
// splicer end class.ResourceManager.method.make_allocator_mixed_pool_untracked_bufferify
Loading
Loading