From b4ebb73d275b46541b2708515e0bf7f07b13ae5e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 21:34:27 +0000 Subject: [PATCH 01/78] Update numpy requirement from ~=2.0.0 to ~=2.1.1 Updates the requirements on [numpy](https://github.com/numpy/numpy) to permit the latest version. - [Release notes](https://github.com/numpy/numpy/releases) - [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst) - [Commits](https://github.com/numpy/numpy/compare/v2.0.0...v2.1.1) --- updated-dependencies: - dependency-name: numpy dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index bc3d31de2b..a6e578ff69 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ Jinja2~=3.1.4 -numpy~=2.0.0 +numpy~=2.1.1 scipy>=1.11.0 netcdf4~=1.7.1 matplotlib>=3.7.0 From 58d2b3aa4f571c686ed4949fda88ed31ca095e0a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 19:27:53 +0000 Subject: [PATCH 02/78] Bump externalpackages/googletest from `0953a17` to `6dae7eb` Bumps [externalpackages/googletest](https://github.com/google/googletest) from `0953a17` to `6dae7eb`. - [Release notes](https://github.com/google/googletest/releases) - [Commits](https://github.com/google/googletest/compare/0953a17a4281fc26831da647ad3fcd5e21e6473b...6dae7eb4a5c3a169f3e298392bff4680224aa94a) --- updated-dependencies: - dependency-name: externalpackages/googletest dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- externalpackages/googletest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/externalpackages/googletest b/externalpackages/googletest index 0953a17a42..6dae7eb4a5 160000 --- a/externalpackages/googletest +++ b/externalpackages/googletest @@ -1 +1 @@ -Subproject commit 0953a17a4281fc26831da647ad3fcd5e21e6473b +Subproject commit 6dae7eb4a5c3a169f3e298392bff4680224aa94a From d36debf2b1e960fef22da44ab17c81a9bd016e1e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 19:12:09 +0000 Subject: [PATCH 03/78] Update numpy requirement from ~=2.1.1 to ~=2.1.2 Updates the requirements on [numpy](https://github.com/numpy/numpy) to permit the latest version. - [Release notes](https://github.com/numpy/numpy/releases) - [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst) - [Commits](https://github.com/numpy/numpy/compare/v2.1.1...v2.1.2) --- updated-dependencies: - dependency-name: numpy dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index a6e578ff69..3fe0712381 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ Jinja2~=3.1.4 -numpy~=2.1.1 +numpy~=2.1.2 scipy>=1.11.0 netcdf4~=1.7.1 matplotlib>=3.7.0 From 94962f13ff0f2fd7e400f775e05714c748ba1b41 Mon Sep 17 00:00:00 2001 From: David Bold Date: Mon, 21 Oct 2024 13:49:03 +0200 Subject: [PATCH 04/78] master branch will be 5.1.2 not 5.2.0 --- CMakeLists.txt | 2 +- tools/pylib/_boutpp_build/backend.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c2a26a07b..60d34e1ad7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ endif() # Set the version here, strip any extra tags to use in `project` # We try to use git to get a full description, inspired by setuptools_scm set(_bout_previous_version "5.1.1") -set(_bout_next_version "5.2.0") +set(_bout_next_version "5.1.2") execute_process( COMMAND "git" describe --tags --match=v${_bout_previous_version} COMMAND sed -e s/${_bout_previous_version}-/${_bout_next_version}.dev/ -e s/-/+/ diff --git a/tools/pylib/_boutpp_build/backend.py b/tools/pylib/_boutpp_build/backend.py index e89f37bb42..23e60fc583 100644 --- a/tools/pylib/_boutpp_build/backend.py +++ b/tools/pylib/_boutpp_build/backend.py @@ -34,7 +34,7 @@ def getversion(): return version _bout_previous_version = "v5.1.1" - _bout_next_version = "v5.2.0" + _bout_next_version = "v5.1.2" try: try: From 2435b00f1c404efa809c55c8f3c2337f68570ba5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 19:43:01 +0000 Subject: [PATCH 05/78] Bump externalpackages/googletest from `6dae7eb` to `d144031` Bumps [externalpackages/googletest](https://github.com/google/googletest) from `6dae7eb` to `d144031`. - [Release notes](https://github.com/google/googletest/releases) - [Commits](https://github.com/google/googletest/compare/6dae7eb4a5c3a169f3e298392bff4680224aa94a...d144031940543e15423a25ae5a8a74141044862f) --- updated-dependencies: - dependency-name: externalpackages/googletest dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- externalpackages/googletest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/externalpackages/googletest b/externalpackages/googletest index 6dae7eb4a5..d144031940 160000 --- a/externalpackages/googletest +++ b/externalpackages/googletest @@ -1 +1 @@ -Subproject commit 6dae7eb4a5c3a169f3e298392bff4680224aa94a +Subproject commit d144031940543e15423a25ae5a8a74141044862f From 6206d88ab5beef5099cc56e853b05cb73fda66d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Nov 2024 19:21:55 +0000 Subject: [PATCH 06/78] Bump ZedThree/clang-tidy-review from 0.19.0 to 0.20.1 Bumps [ZedThree/clang-tidy-review](https://github.com/zedthree/clang-tidy-review) from 0.19.0 to 0.20.1. - [Release notes](https://github.com/zedthree/clang-tidy-review/releases) - [Changelog](https://github.com/ZedThree/clang-tidy-review/blob/master/CHANGELOG.md) - [Commits](https://github.com/zedthree/clang-tidy-review/compare/v0.19.0...v0.20.1) --- updated-dependencies: - dependency-name: ZedThree/clang-tidy-review dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/clang-tidy-review.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/clang-tidy-review.yml b/.github/workflows/clang-tidy-review.yml index 4cdec88c83..b2f9bd7573 100644 --- a/.github/workflows/clang-tidy-review.yml +++ b/.github/workflows/clang-tidy-review.yml @@ -22,7 +22,7 @@ jobs: submodules: true - name: Run clang-tidy - uses: ZedThree/clang-tidy-review@v0.19.0 + uses: ZedThree/clang-tidy-review@v0.20.1 id: review with: build_dir: build @@ -46,4 +46,4 @@ jobs: -DBOUT_UPDATE_GIT_SUBMODULE=OFF - name: Upload clang-tidy fixes - uses: ZedThree/clang-tidy-review/upload@v0.19.0 + uses: ZedThree/clang-tidy-review/upload@v0.20.1 From 67a282fb23f9fea0035ba43811754ed7cb9957b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Nov 2024 19:21:58 +0000 Subject: [PATCH 07/78] Bump codecov/codecov-action from 4 to 5 Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4 to 5. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/v4...v5) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 7ca76cc7aa..c316ba4db1 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -218,7 +218,7 @@ jobs: - name: Upload coverage if: ${{ matrix.config.name == 'Coverage' }} - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@v5 Fedora: # This is its own job as it doesn't use most of the steps of the From c9318740652d2a61351270e3ff8b86a9cf4a78f7 Mon Sep 17 00:00:00 2001 From: David Bold Date: Tue, 26 Nov 2024 10:00:17 +0100 Subject: [PATCH 08/78] Use PEP 625 compatible archive name --- tools/pylib/_boutpp_build/backend.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/pylib/_boutpp_build/backend.py b/tools/pylib/_boutpp_build/backend.py index 23e60fc583..1fba557cdc 100644 --- a/tools/pylib/_boutpp_build/backend.py +++ b/tools/pylib/_boutpp_build/backend.py @@ -198,7 +198,7 @@ def build_sdist(sdist_directory, config_settings=None): if k == "nightly": useLocalVersion = False pkgname = "boutpp-nightly" - prefix = f"{pkgname}-{getversion()}" + prefix = f"{pkgname.replace('-', '_')}-{getversion()}" fname = f"{prefix}.tar" run(f"git archive HEAD --prefix {prefix}/ -o {sdist_directory}/{fname}") _, tmp = tempfile.mkstemp(suffix=".tar") From 0f2630aa2be8d9ce4b3fe496fc541757617574e6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2024 19:35:15 +0000 Subject: [PATCH 09/78] Update numpy requirement from ~=2.1.2 to ~=2.2.1 Updates the requirements on [numpy](https://github.com/numpy/numpy) to permit the latest version. - [Release notes](https://github.com/numpy/numpy/releases) - [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst) - [Commits](https://github.com/numpy/numpy/compare/v2.1.2...v2.2.1) --- updated-dependencies: - dependency-name: numpy dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 3fe0712381..e7bd77a1c4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ Jinja2~=3.1.4 -numpy~=2.1.2 +numpy~=2.2.1 scipy>=1.11.0 netcdf4~=1.7.1 matplotlib>=3.7.0 From d3ced6f10e5ee7a8fcee53fda89dffd9be4fa6b1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2025 19:10:18 +0000 Subject: [PATCH 10/78] Bump externalpackages/googletest from `d144031` to `504ea69` Bumps [externalpackages/googletest](https://github.com/google/googletest) from `d144031` to `504ea69`. - [Release notes](https://github.com/google/googletest/releases) - [Commits](https://github.com/google/googletest/compare/d144031940543e15423a25ae5a8a74141044862f...504ea69cf7e9947be54f808a09b7b08988e84b5f) --- updated-dependencies: - dependency-name: externalpackages/googletest dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- externalpackages/googletest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/externalpackages/googletest b/externalpackages/googletest index d144031940..504ea69cf7 160000 --- a/externalpackages/googletest +++ b/externalpackages/googletest @@ -1 +1 @@ -Subproject commit d144031940543e15423a25ae5a8a74141044862f +Subproject commit 504ea69cf7e9947be54f808a09b7b08988e84b5f From e047a677bca5a26f894e60470591bcd2b9477d10 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 19:50:11 +0000 Subject: [PATCH 11/78] Bump externalpackages/googletest from `504ea69` to `2b6b042` Bumps [externalpackages/googletest](https://github.com/google/googletest) from `504ea69` to `2b6b042`. - [Release notes](https://github.com/google/googletest/releases) - [Commits](https://github.com/google/googletest/compare/504ea69cf7e9947be54f808a09b7b08988e84b5f...2b6b042a77446ff322cd7522ca068d9f2a21c1d1) --- updated-dependencies: - dependency-name: externalpackages/googletest dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- externalpackages/googletest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/externalpackages/googletest b/externalpackages/googletest index 504ea69cf7..2b6b042a77 160000 --- a/externalpackages/googletest +++ b/externalpackages/googletest @@ -1 +1 @@ -Subproject commit 504ea69cf7e9947be54f808a09b7b08988e84b5f +Subproject commit 2b6b042a77446ff322cd7522ca068d9f2a21c1d1 From c2344046a767145c19c8b8d8cc6d6dd34d352ecc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Feb 2025 19:18:09 +0000 Subject: [PATCH 12/78] Bump externalpackages/boutdata from `e458cf0` to `0aaef41` Bumps [externalpackages/boutdata](https://github.com/boutproject/boutdata) from `e458cf0` to `0aaef41`. - [Release notes](https://github.com/boutproject/boutdata/releases) - [Commits](https://github.com/boutproject/boutdata/compare/e458cf0cf2af6ff68db91da39ef3e15a7e9e6b3d...0aaef417af092882ac295c4d84e4532e4a10e01f) --- updated-dependencies: - dependency-name: externalpackages/boutdata dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- externalpackages/boutdata | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/externalpackages/boutdata b/externalpackages/boutdata index e458cf0cf2..0aaef417af 160000 --- a/externalpackages/boutdata +++ b/externalpackages/boutdata @@ -1 +1 @@ -Subproject commit e458cf0cf2af6ff68db91da39ef3e15a7e9e6b3d +Subproject commit 0aaef417af092882ac295c4d84e4532e4a10e01f From 0e328fc4f2e4d3e8242fda37230f87118b0c847a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Feb 2025 19:56:15 +0000 Subject: [PATCH 13/78] Update pygithub requirement from ~=2.4 to ~=2.6 Updates the requirements on [pygithub](https://github.com/pygithub/pygithub) to permit the latest version. - [Release notes](https://github.com/pygithub/pygithub/releases) - [Changelog](https://github.com/PyGithub/PyGithub/blob/main/doc/changes.rst) - [Commits](https://github.com/pygithub/pygithub/compare/v2.4.0...v2.6.0) --- updated-dependencies: - dependency-name: pygithub dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements_maint.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_maint.txt b/requirements_maint.txt index 9f4ddc3699..e6ba00ce48 100644 --- a/requirements_maint.txt +++ b/requirements_maint.txt @@ -1,3 +1,3 @@ -pygithub~=2.4 +pygithub~=2.6 ruamel-yaml~=0.18 Unidecode~=1.3 From bfc8ed87892cab19dbcb7c2a9021b563be8e000b Mon Sep 17 00:00:00 2001 From: David Bold Date: Tue, 7 Jan 2025 11:06:30 +0100 Subject: [PATCH 14/78] CI: Install zoidberg and new versions --- requirements.txt | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/requirements.txt b/requirements.txt index e7bd77a1c4..52d3076d58 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,9 @@ -Jinja2~=3.1.4 -numpy~=2.2.1 -scipy>=1.11.0 -netcdf4~=1.7.1 +Jinja2>=3.1.4 +numpy>=2.0.0 +scipy>=1.14.1 +netcdf4>=1.7.1 matplotlib>=3.7.0 -Cython~=3.0.0 -boututils~=0.2.1 -boutdata~=0.2.1 +Cython>=3.0.0 +boututils>=0.2.1 +boutdata>=0.2.1 +zoidberg>=0.2.2 From 33067dd40f96e91085b51a9dc49b5379216c53e8 Mon Sep 17 00:00:00 2001 From: David Bold Date: Tue, 7 Jan 2025 13:13:15 +0100 Subject: [PATCH 15/78] DEBUG: monkey patch zoidberg --- tests/MMS/spatial/fci/runtest | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/MMS/spatial/fci/runtest b/tests/MMS/spatial/fci/runtest index 3db54a3870..fd6e0899d8 100755 --- a/tests/MMS/spatial/fci/runtest +++ b/tests/MMS/spatial/fci/runtest @@ -74,6 +74,16 @@ for nslice in nslices: # Create the grid grid = zb.grid.Grid(poloidal_grid, ycoords, ylength, yperiodic=yperiodic) # Make and write maps + from scipy.interpolate import RectBivariateSpline as RBS + + def myRBS(a, b, c): + mx, my = c.shape + kx = max(mx - 1, 1) + kx = min(kx, 3) + print(c.shape, kx) + return RBS(a, b, c, kx=kx) + + zb.poloidal_grid.RectBivariateSpline = myRBS maps = zb.make_maps(grid, field, nslice=nslice, quiet=True) zb.write_maps( grid, field, maps, new_names=False, metric2d=conf.isMetric2D(), quiet=True From 0416ba3cb43d0a16b38d79b740751203a5080ccc Mon Sep 17 00:00:00 2001 From: David Bold Date: Tue, 7 Jan 2025 13:58:17 +0100 Subject: [PATCH 16/78] Specify MXG=1 --- tests/MMS/spatial/fci/runtest | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/MMS/spatial/fci/runtest b/tests/MMS/spatial/fci/runtest index fd6e0899d8..a588c6800a 100755 --- a/tests/MMS/spatial/fci/runtest +++ b/tests/MMS/spatial/fci/runtest @@ -61,7 +61,7 @@ for nslice in nslices: # Note that the Bz and Bzprime parameters here must be the same as in mms.py field = zb.field.Slab(Bz=0.05, Bzprime=0.1) # Create rectangular poloidal grids - poloidal_grid = zb.poloidal_grid.RectangularPoloidalGrid(nx, n, 0.1, 1.0) + poloidal_grid = zb.poloidal_grid.RectangularPoloidalGrid(nx, n, 0.1, 1.0, MXG=1) # Set the ylength and y locations ylength = 10.0 @@ -84,7 +84,7 @@ for nslice in nslices: return RBS(a, b, c, kx=kx) zb.poloidal_grid.RectBivariateSpline = myRBS - maps = zb.make_maps(grid, field, nslice=nslice, quiet=True) + maps = zb.make_maps(grid, field, nslice=nslice, quiet=True, MXG=1) zb.write_maps( grid, field, maps, new_names=False, metric2d=conf.isMetric2D(), quiet=True ) From bea060e4cb687f797ae42473a46631e09f004ef4 Mon Sep 17 00:00:00 2001 From: David Bold Date: Tue, 7 Jan 2025 17:05:02 +0100 Subject: [PATCH 17/78] Remove debug statement --- tests/MMS/spatial/fci/runtest | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/MMS/spatial/fci/runtest b/tests/MMS/spatial/fci/runtest index a588c6800a..1b7b74a867 100755 --- a/tests/MMS/spatial/fci/runtest +++ b/tests/MMS/spatial/fci/runtest @@ -80,7 +80,6 @@ for nslice in nslices: mx, my = c.shape kx = max(mx - 1, 1) kx = min(kx, 3) - print(c.shape, kx) return RBS(a, b, c, kx=kx) zb.poloidal_grid.RectBivariateSpline = myRBS From a1df60915efe150902c1858f7e3b5b21ff749c3d Mon Sep 17 00:00:00 2001 From: David Bold Date: Tue, 7 Jan 2025 17:05:11 +0100 Subject: [PATCH 18/78] Remove python2 compat --- tests/MMS/spatial/fci/runtest | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/MMS/spatial/fci/runtest b/tests/MMS/spatial/fci/runtest index 1b7b74a867..b5ca2db5c5 100755 --- a/tests/MMS/spatial/fci/runtest +++ b/tests/MMS/spatial/fci/runtest @@ -6,9 +6,6 @@ # Cores: 2 # requires: zoidberg -from __future__ import division -from __future__ import print_function - from boututils.run_wrapper import build_and_log, launch_safe from boutdata.collect import collect import boutconfig as conf From b6a91b81979c0b5fc3addf1eb99dd9d33e3b21d0 Mon Sep 17 00:00:00 2001 From: David Bold Date: Wed, 8 Jan 2025 09:26:26 +0100 Subject: [PATCH 19/78] CI: Try limiting multithreading --- .ci_fedora.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.ci_fedora.sh b/.ci_fedora.sh index 974a23a362..77e7f45055 100755 --- a/.ci_fedora.sh +++ b/.ci_fedora.sh @@ -59,7 +59,11 @@ else export OMPI_MCA_rmaps_base_oversubscribe=yes export PRTE_MCA_rmaps_default_mapping_policy=:oversubscribe export TRAVIS=true + # Try limiting openmp threads export FLEXIBLAS=NETLIB + export MKL_NUM_THREADS=1 + export NUMEXPR_NUM_THREADS=1 + export OMP_NUM_THREADS=1 cd cd BOUT-dev echo "starting configure" From 05f030c771b00f8bc6b3d17680c41f2847e8c7bd Mon Sep 17 00:00:00 2001 From: dschwoerer <5637662+dschwoerer@users.noreply.github.com> Date: Wed, 19 Feb 2025 09:13:59 +0000 Subject: [PATCH 20/78] Apply black changes --- tests/integrated/test_suite | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integrated/test_suite b/tests/integrated/test_suite index 307a8d84b3..77ad7882c4 100755 --- a/tests/integrated/test_suite +++ b/tests/integrated/test_suite @@ -188,7 +188,7 @@ class Test(threading.Thread): self.output += "\n(It is likely that a timeout occured)" else: # ❌ Failed - print("\u274C", end="") # No newline + print("\u274c", end="") # No newline print(" %7.3f s" % (time.time() - self.local.start_time), flush=True) def _cost(self): From 8132089ec8154036b827712192ff6182900e5109 Mon Sep 17 00:00:00 2001 From: David Bold Date: Thu, 3 Mar 2022 15:51:50 +0100 Subject: [PATCH 21/78] Always use python3 --- cmake/FindCython.cmake | 2 +- cmake/FindNumpy.cmake | 16 ++++++++-------- manual/sphinx/conf.py | 2 +- tools/pylib/_boutpp_build/CMakeLists.txt | 12 ++++++------ 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/cmake/FindCython.cmake b/cmake/FindCython.cmake index 76f43480d9..3b98cde89e 100644 --- a/cmake/FindCython.cmake +++ b/cmake/FindCython.cmake @@ -10,7 +10,7 @@ # CYTHON_FOUND - true if Cython was found # CYTHON_VERSION - Cython version -execute_process(COMMAND ${Python_EXECUTABLE} -c "import cython ; print(cython.__version__)" +execute_process(COMMAND ${Python3_EXECUTABLE} -c "import cython ; print(cython.__version__)" RESULT_VARIABLE _cython_runs OUTPUT_VARIABLE CYTHON_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE diff --git a/cmake/FindNumpy.cmake b/cmake/FindNumpy.cmake index 201bc19221..250eff5959 100644 --- a/cmake/FindNumpy.cmake +++ b/cmake/FindNumpy.cmake @@ -12,32 +12,32 @@ # Numpy_INCLUDE_DIR -find_package(Python 3.6 COMPONENTS Interpreter Development) +find_package(Python3 3.6 COMPONENTS Interpreter Development) -if (NOT Python_FOUND) - message(STATUS "Could not find numpy as python was not found. Maybe the developement package is missing?") - set(Numpy_FOUND ${Python_FOUND}) +if (NOT Python3_FOUND) + message(STATUS "Could not find numpy as python3 was not found. Maybe the developement package is missing?") + set(Numpy_FOUND ${Python3_FOUND}) return() endif() if (NOT Numpy_FOUND) - execute_process(COMMAND ${Python_EXECUTABLE} -c "import numpy ; print(numpy.__version__)" + execute_process(COMMAND ${Python3_EXECUTABLE} -c "import numpy ; print(numpy.__version__)" OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE Numpy_VERSION ) - execute_process(COMMAND ${Python_EXECUTABLE} -c "import numpy ; print(numpy.get_include())" + execute_process(COMMAND ${Python3_EXECUTABLE} -c "import numpy ; print(numpy.get_include())" OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE _numpy_include_dirs ) endif() if (Numpy_DEBUG) - message(STATUS "Looking for numpy headers in: ${_numpy_include_dirs} ${PYTHON_INCLUDE_DIR}") + message(STATUS "Looking for numpy headers in: ${_numpy_include_dirs} ${Python3_INCLUDE_DIRS}") endif() find_path(Numpy_INCLUDE_DIR numpy/arrayobject.h - PATHS "${_numpy_include_dirs}" "${PYTHON_INCLUDE_DIR}" + PATHS "${_numpy_include_dirs}" "${Python3_INCLUDE_DIRS}" PATH_SUFFIXES numpy/core/include ) diff --git a/manual/sphinx/conf.py b/manual/sphinx/conf.py index 5adf3c3633..55d059feba 100755 --- a/manual/sphinx/conf.py +++ b/manual/sphinx/conf.py @@ -88,7 +88,7 @@ def __getattr__(cls, name): + " -DBOUT_UPDATE_GIT_SUBMODULE=OFF" + " -DBOUT_TESTS=OFF" + " -DBOUT_ALLOW_INSOURCE_BUILD=ON" - + f" -DPython_ROOT_DIR={pydir}" + + f" -DPython3_ROOT_DIR={pydir}" + f" -Dmpark_variant_DIR={pwd}/externalpackages/mpark.variant/" + f" -Dfmt_DIR={pwd}/externalpackages/fmt/" ) diff --git a/tools/pylib/_boutpp_build/CMakeLists.txt b/tools/pylib/_boutpp_build/CMakeLists.txt index 6b88986a28..3be2a5d2aa 100644 --- a/tools/pylib/_boutpp_build/CMakeLists.txt +++ b/tools/pylib/_boutpp_build/CMakeLists.txt @@ -25,7 +25,7 @@ bout_python_maybe_error(${Cython_FOUND} Cython) find_package(Bash) bout_python_maybe_error(${Bash_FOUND} Bash) -execute_process(COMMAND ${Python_EXECUTABLE} -c "import jinja2" +execute_process(COMMAND ${Python3_EXECUTABLE} -c "import jinja2" RESULT_VARIABLE jinja2_FOUND) if (jinja2_FOUND EQUAL 0) # We have jinja2 - all good @@ -33,7 +33,7 @@ else() bout_python_maybe_error(OFF jinja2) endif() -execute_process(COMMAND ${Python_EXECUTABLE} -c "import sysconfig; print(sysconfig.get_config_var('EXT_SUFFIX')[:-3])" +execute_process(COMMAND ${Python3_EXECUTABLE} -c "import sysconfig; print(sysconfig.get_config_var('EXT_SUFFIX')[:-3])" RESULT_VARIABLE PYTHON_WORKING OUTPUT_VARIABLE PYTHON_EXT_SUFFIX OUTPUT_STRIP_TRAILING_WHITESPACE @@ -73,7 +73,7 @@ foreach(file IN LISTS files) #message(FATAL_ERROR "${gen} ${src}/${file}.jinja") add_custom_command(OUTPUT ${gen} COMMAND ${CMAKE_COMMAND} -E make_directory ${tar} - COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=${tar}/..:\${PYTHONPATH} ${Python_EXECUTABLE} generate.py ${file}.jinja ${gen} + COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=${tar}/..:\${PYTHONPATH} ${Python3_EXECUTABLE} generate.py ${file}.jinja ${gen} DEPENDS ${src}/${file}.jinja DEPENDS ${src}/helper.py DEPENDS ${src}/resolve_enum_inv.pyx.jinja @@ -93,8 +93,7 @@ endforeach() add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/libboutpp.cpp COMMAND ${CMAKE_COMMAND} -E copy boutpp.pyx libboutpp.pyx - COMMAND ${Python_EXECUTABLE} -m cython libboutpp.pyx --cplus -3 -X binding=True -X embedsignature=True - COMMENT "Cythonizing python interface" + COMMAND ${Python3_EXECUTABLE} -m cython libboutpp.pyx --cplus -3 -X binding=True -X embedsignature=True WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} DEPENDS ${boutpp_depends} ) @@ -120,5 +119,6 @@ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/boutpp.py DESTINATION ${CMAKE_INSTALL_PYTHON_SITEARCH}/boutpp/ RENAME __init__.py ) + target_link_libraries(boutpp${PYTHON_EXT_SUFFIX} bout++) -target_include_directories(boutpp${PYTHON_EXT_SUFFIX} PRIVATE $ ${Numpy_INCLUDE_DIRS} ${Python_INCLUDE_DIRS}) +target_include_directories(boutpp${PYTHON_EXT_SUFFIX} PRIVATE $ ${Numpy_INCLUDE_DIRS} ${Python3_INCLUDE_DIRS}) From 401319b0653b775fa6caf97844c21574b11e62c5 Mon Sep 17 00:00:00 2001 From: David Bold Date: Fri, 22 Mar 2024 12:43:51 +0100 Subject: [PATCH 22/78] expose setConditionallyUsed --- tools/pylib/_boutpp_build/bout_options.pxd | 1 + tools/pylib/_boutpp_build/boutpp.pyx.jinja | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/tools/pylib/_boutpp_build/bout_options.pxd b/tools/pylib/_boutpp_build/bout_options.pxd index ba5e64c8e3..c4de2a9d37 100644 --- a/tools/pylib/_boutpp_build/bout_options.pxd +++ b/tools/pylib/_boutpp_build/bout_options.pxd @@ -52,6 +52,7 @@ cdef extern from "bout/options.hxx": void get(string, double&, double) void get(string, bool&, bool) void cleanCache() + void setConditionallyUsed() cdef extern from "bout/optionsreader.hxx": diff --git a/tools/pylib/_boutpp_build/boutpp.pyx.jinja b/tools/pylib/_boutpp_build/boutpp.pyx.jinja index 657e2f28c1..ae4d9212a8 100644 --- a/tools/pylib/_boutpp_build/boutpp.pyx.jinja +++ b/tools/pylib/_boutpp_build/boutpp.pyx.jinja @@ -1209,8 +1209,9 @@ def finalise(): else: for ourClass in ourClasses: if isinstance(obj, ourClass): - ourClass.__boutpp_dealloc(obj) - break + if hasattr(ourClass, "__boutpp_dealloc"): + ourClass.__boutpp_dealloc(obj) + break del objects # Actually finalise if wasInit: @@ -1715,6 +1716,15 @@ cdef class Options: opt.get(key, ret_str, default_) return ret_str.decode() + def setConditionallyUsed(self): + """Set the attribute "conditionally used" to be true for \p options + and all its children/sections, causing `Options::getUnused` to + assume those options have been used. This is useful to ignore + options when checking for typos etc. + """ + cdef c.Options* opt = self.cobj + opt.setConditionallyUsed() + def __dealloc__(self): self.__boutpp_dealloc() From b1251bb281977c138c24ba2425da94c1679ec786 Mon Sep 17 00:00:00 2001 From: David Bold Date: Fri, 22 Mar 2024 12:46:01 +0100 Subject: [PATCH 23/78] Ensure errors in solve and rhs are catchable Fixes GH#2890 --- tools/pylib/_boutpp_build/boutcpp.pxd.jinja | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/pylib/_boutpp_build/boutcpp.pxd.jinja b/tools/pylib/_boutpp_build/boutcpp.pxd.jinja index c94fd14a17..dafdd51c5f 100644 --- a/tools/pylib/_boutpp_build/boutcpp.pxd.jinja +++ b/tools/pylib/_boutpp_build/boutcpp.pxd.jinja @@ -148,10 +148,10 @@ cdef extern from "bout/physicsmodel.hxx": ctypedef void (*Method)(void *param, void *user_data) cdef extern from "helper.h": cppclass PythonModel(PhysicsModel): - int rhs(double t) + int rhs(double t) except +raise_bout_py_error void pyinit() void free() - void solve() + void solve() except +raise_bout_py_error Solver * getSolver() void set_rhs_func(PythonModelCallback*) void set_init_func(PythonModelCallback*) From d619adf26b7134ad7f4dd7396beb6db8d832bcc4 Mon Sep 17 00:00:00 2001 From: David Bold Date: Mon, 25 Mar 2024 09:29:16 +0100 Subject: [PATCH 24/78] Do not use python preserved __ prefix --- tools/pylib/_boutpp_build/boutpp.pyx.jinja | 48 +++++++++++----------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/tools/pylib/_boutpp_build/boutpp.pyx.jinja b/tools/pylib/_boutpp_build/boutpp.pyx.jinja index ae4d9212a8..de01748b6f 100644 --- a/tools/pylib/_boutpp_build/boutpp.pyx.jinja +++ b/tools/pylib/_boutpp_build/boutpp.pyx.jinja @@ -583,9 +583,9 @@ cdef class {{ field.field_type }}: {% endfor %} def __dealloc__(self): - self.__boutpp_dealloc() + self._boutpp_dealloc() - def __boutpp_dealloc(self): + def _boutpp_dealloc(self): if self.isSelfOwned and self.cobj != NULL: del self.cobj self.cobj = NULL @@ -645,9 +645,9 @@ cdef class {{ vec }}: def __dealloc__(self): - self.__boutpp_dealloc() + self._boutpp_dealloc() - def __boutpp_dealloc(self): + def _boutpp_dealloc(self): if self.isSelfOwned and self.cobj != NULL: del self.cobj self.cobj=NULL @@ -742,9 +742,9 @@ cdef class Mesh: return msh def __dealloc__(self): - self.__boutpp_dealloc() + self._boutpp_dealloc() - def __boutpp_dealloc(self): + def _boutpp_dealloc(self): if self.cobj and self.isSelfOwned: del self.cobj self.cobj = NULL @@ -850,9 +850,9 @@ cdef class Coordinates: {% endfor %} def __dealloc__(self): - self.__boutpp_dealloc() + self._boutpp_dealloc() - def __boutpp_dealloc(self): + def _boutpp_dealloc(self): if self.cobj and self.isSelfOwned: del self.cobj self.cobj = NULL @@ -931,9 +931,9 @@ cdef class FieldFactory: checkInit() cobj=< c.FieldFactory*>0 def __dealloc__(self): - self.__boutpp_dealloc() + self._boutpp_dealloc() - def __boutpp_dealloc(self): + def _boutpp_dealloc(self): if self.cobj != NULL: del self.cobj self.cobj = NULL @@ -965,9 +965,9 @@ cdef class PythonModelCallback: self.cobj = new c.PythonModelCallback(callback, method) def __dealloc__(self): - self.__boutpp_dealloc() + self._boutpp_dealloc() - def __boutpp_dealloc(self): + def _boutpp_dealloc(self): if self.cobj: del self.cobj self.cobj = NULL @@ -1037,12 +1037,12 @@ cdef class PhysicsModelBase(object): self.cmodel.set_init_func(self.callbackinit) def __dealloc__(self): - if hasattr(self, "__boutpp_dealloc"): - self.__boutpp_dealloc() + if hasattr(self, "_boutpp_dealloc"): + self._boutpp_dealloc() else: - PhysicsModelBase.__boutpp_dealloc(self) + PhysicsModelBase._boutpp_dealloc(self) - def __boutpp_dealloc(self): + def _boutpp_dealloc(self): if self.cmodel != 0: self.cmodel.free() del self.cmodel @@ -1123,8 +1123,8 @@ class PhysicsModel(PhysicsModelBase): def __dealloc__(self): super(PhysicsModel,self).__dealloc__() - def __boutpp_dealloc(self): - super(PhysicsModel,self).__boutpp_dealloc() + def _boutpp_dealloc(self): + super(PhysicsModel,self)._boutpp_dealloc() cdef extern from "bout/bout.hxx": int BoutInitialise(int&, char **&) except +raise_bout_py_error @@ -1204,13 +1204,13 @@ def finalise(): PythonModelCallback) for obj in objects: if isinstance(obj, ourClasses): - if hasattr(obj, "__boutpp_dealloc"): - obj.__boutpp_dealloc() + if hasattr(obj, "_boutpp_dealloc"): + obj._boutpp_dealloc() else: for ourClass in ourClasses: if isinstance(obj, ourClass): - if hasattr(ourClass, "__boutpp_dealloc"): - ourClass.__boutpp_dealloc(obj) + if hasattr(ourClass, "_boutpp_dealloc"): + ourClass._boutpp_dealloc(obj) break del objects # Actually finalise @@ -1726,9 +1726,9 @@ cdef class Options: opt.setConditionallyUsed() def __dealloc__(self): - self.__boutpp_dealloc() + self._boutpp_dealloc() - def __boutpp_dealloc(self): + def _boutpp_dealloc(self): if self.isSelfOwned and self.cobj != NULL: del self.cobj self.cobj = NULL From c5789dafb9c5a8b04ec17c74b5a3caa2feb785fe Mon Sep 17 00:00:00 2001 From: David Bold Date: Thu, 12 Dec 2024 15:42:13 +0100 Subject: [PATCH 25/78] make backend executable --- tools/pylib/_boutpp_build/backend.py | 2 ++ 1 file changed, 2 insertions(+) mode change 100644 => 100755 tools/pylib/_boutpp_build/backend.py diff --git a/tools/pylib/_boutpp_build/backend.py b/tools/pylib/_boutpp_build/backend.py old mode 100644 new mode 100755 index 1fba557cdc..02aeb22b7e --- a/tools/pylib/_boutpp_build/backend.py +++ b/tools/pylib/_boutpp_build/backend.py @@ -1,3 +1,5 @@ +#!/bin/python3 + import os # corelib import glob # corelib import hashlib # corelib From e6a02c6b0a464c0bddc049d63ec78fef731cf835 Mon Sep 17 00:00:00 2001 From: David Bold Date: Thu, 12 Dec 2024 15:41:53 +0100 Subject: [PATCH 26/78] Print the help if an invalid argument is given --- tools/pylib/_boutpp_build/backend.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/pylib/_boutpp_build/backend.py b/tools/pylib/_boutpp_build/backend.py index 02aeb22b7e..b367a4bdf8 100755 --- a/tools/pylib/_boutpp_build/backend.py +++ b/tools/pylib/_boutpp_build/backend.py @@ -370,4 +370,7 @@ def help(): import sys for todo in sys.argv[1:]: + if todo not in todos: + help() + sys.exit(1) todos[todo]() From fd25df7bd95cf670ded169285b442a2b110ec0b2 Mon Sep 17 00:00:00 2001 From: David Bold Date: Thu, 12 Dec 2024 15:41:18 +0100 Subject: [PATCH 27/78] Make printVersion a function This ensures we have documentation for it --- tools/pylib/_boutpp_build/backend.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tools/pylib/_boutpp_build/backend.py b/tools/pylib/_boutpp_build/backend.py index b367a4bdf8..0c1e611a2f 100755 --- a/tools/pylib/_boutpp_build/backend.py +++ b/tools/pylib/_boutpp_build/backend.py @@ -350,12 +350,19 @@ def help(): print(fmt % row) +def printVersion(): + """ + print the version + """ + print(getversion()) + + todos = dict( nightly=nightly, sdist=sdist, wheel=wheel, dist=dist, - version=lambda: print(getversion()), + version=printVersion, help=help, ) todos.update( From 4b078626b16a2f57e1ec07a85755f12b9eecda83 Mon Sep 17 00:00:00 2001 From: David Bold Date: Tue, 10 Dec 2024 10:52:40 +0100 Subject: [PATCH 28/78] Add delay to python interface This is to ensure that all MPI routines are called before MPI_Finalise is called. Resolves: gh#3041 --- tools/pylib/_boutpp_build/boutpp.pyx.jinja | 149 +++++++++++---------- 1 file changed, 81 insertions(+), 68 deletions(-) diff --git a/tools/pylib/_boutpp_build/boutpp.pyx.jinja b/tools/pylib/_boutpp_build/boutpp.pyx.jinja index de01748b6f..6ffecd3596 100644 --- a/tools/pylib/_boutpp_build/boutpp.pyx.jinja +++ b/tools/pylib/_boutpp_build/boutpp.pyx.jinja @@ -16,11 +16,49 @@ from cython.operator import dereference as deref import numbers import sys import gc +from time import sleep size_t = np.uint cdef extern from "boutexception_helper.hxx": - cdef void raise_bout_py_error() + cdef void raise_bout_py_error() + +cdef class BOUTppBase: + """ + Base class that provides some mechanism for deallocation + """ + cdef c.bool _is_freed + cdef c.bool _is_init + def __cinit__(self, c.bool init=True): + self._is_freed = False + self._is_init = init + + def _boutpp_dealloc(self): + self._is_freed = True + + def _boutpp_wait_freed(self): + while not self._is_freed: + sleep(0.001) + +{% macro dealloc(self=False, uniquePtr=False) %} + def __dealloc__(self): + self._boutpp_dealloc() + + def _boutpp_dealloc(self): +{% if self %} + if self.isSelfOwned and self.cobj != NULL: +{% else %} + if self.cobj != NULL: +{% endif %} +{% if uniquePtr %} + self.cobj.release() +{% else %} + del self.cobj + self.cobj = NULL +{% endif %} + super()._boutpp_dealloc() +{% endmacro %} + {% for field in fields %} cdef extern from "helper.h": @@ -60,7 +98,7 @@ cdef {{ field.field_type }} {{ field.fdd }}FromPtr(c.{{ field.field_type }}* i): f.isSelfOwned = False return f -cdef class {{ field.field_type }}: +cdef class {{ field.field_type }}(BOUTppBase): """ The {{ field.field_type }} class """ @@ -228,6 +266,7 @@ cdef class {{ field.field_type }}: if obj: self.cobj = obj.cobj self.isSelfOwned=True + super().__cinit__() def set(self, data, ignoreDataType=False): """ @@ -582,23 +621,18 @@ cdef class {{ field.field_type }}: self.cobj.{{ boundaryMethod }}() {% endfor %} - def __dealloc__(self): - self._boutpp_dealloc() - - def _boutpp_dealloc(self): - if self.isSelfOwned and self.cobj != NULL: - del self.cobj - self.cobj = NULL +{{ dealloc(True) }} @property def shape(self): return {{ field.makelist("self.cobj.getN$d()") }} {% endfor %} + {% for vec in vecs %} cdef extern from "helper.h": c.{{ vec.field }} c_mul_{{ vec }}_{{ vec }}(c.{{ vec }} *, c.{{ vec }} *) except + -cdef class {{ vec }}: +cdef class {{ vec }}(BOUTppBase): """ {{ vec }} class @@ -642,16 +676,7 @@ cdef class {{ vec }}: {% endfor %} return data_ - - - def __dealloc__(self): - self._boutpp_dealloc() - - def _boutpp_dealloc(self): - if self.isSelfOwned and self.cobj != NULL: - del self.cobj - self.cobj=NULL - +{{ dealloc(True) }} cdef {{ vec }} {{ vec.vdd }}FromObj(c.{{ vec }} i): v={{ vec }}() @@ -667,7 +692,7 @@ cdef extern from "helper.h": c.Field3D c_Grad_perp_dot_Grad_perp(c.Field3D,c.Field3D); void c_mesh_normalise(c.Mesh* , double) -cdef class Mesh: +cdef class Mesh(BOUTppBase): """ Mesh class @@ -741,13 +766,7 @@ cdef class Mesh: msh.isSelfOwned = False return msh - def __dealloc__(self): - self._boutpp_dealloc() - - def _boutpp_dealloc(self): - if self.cobj and self.isSelfOwned: - del self.cobj - self.cobj = NULL +{{ dealloc(True) }} cdef getFactory(self): """ @@ -822,7 +841,7 @@ cdef Coordinates coordsFromPtr(c.Coordinates * obj): coords.isSelfOwned = False return coords -cdef class Coordinates: +cdef class Coordinates(BOUTppBase): """ Contains information about geometry, such as metric tensors """ @@ -849,15 +868,9 @@ cdef class Coordinates: self.{{f}} = {{ metric_field.fdd }}FromPtr(&self.cobj.{{f}}) {% endfor %} - def __dealloc__(self): - self._boutpp_dealloc() - - def _boutpp_dealloc(self): - if self.cobj and self.isSelfOwned: - del self.cobj - self.cobj = NULL +{{ dealloc(True) }} -cdef class Laplacian: +cdef class Laplacian(BOUTppBase): """ Laplacian inversion solver @@ -867,7 +880,7 @@ cdef class Laplacian: """ cdef unique_ptr[c.Laplacian] cobj cdef c.bool isSelfOwned - def __init__(self,section=None): + def __init__(self, section=None): """ Initialiase a Laplacian solver @@ -882,7 +895,8 @@ cdef class Laplacian: else: self.cobj = c.Laplacian.create(NULL) self.isSelfOwned = True - def solve(self,Field3D x, Field3D guess): + + def solve(self, Field3D x, Field3D guess): """ Calculate the Laplacian inversion @@ -925,18 +939,15 @@ cdef class Laplacian: deref(self.cobj).setCoef{{ coeff }}({{ coeff }}.cobj[0]) {% endfor %} -cdef class FieldFactory: +{{ dealloc(True, uniquePtr=True) }} + +cdef class FieldFactory(BOUTppBase): cdef c.FieldFactory * cobj def __init__(self): checkInit() cobj=< c.FieldFactory*>0 - def __dealloc__(self): - self._boutpp_dealloc() - def _boutpp_dealloc(self): - if self.cobj != NULL: - del self.cobj - self.cobj = NULL +{{ dealloc() }} cdef void callback(void * parameter, void * method) with gil: cdef double time = (parameter)[0] @@ -953,7 +964,7 @@ cdef void callback(void * parameter, void * method) with gil: ctypedef void (*Method)(void *param) -cdef class PythonModelCallback: +cdef class PythonModelCallback(BOUTppBase): """Needed for callbacks from C++ to python""" cdef c.PythonModelCallback * cobj @@ -963,21 +974,16 @@ cdef class PythonModelCallback: # "method" :: The effective method passed by the Python user checkInit() self.cobj = new c.PythonModelCallback(callback, method) + self.__cinit__() - def __dealloc__(self): - self._boutpp_dealloc() - - def _boutpp_dealloc(self): - if self.cobj: - del self.cobj - self.cobj = NULL +{{ dealloc() }} cpdef void execute(self, parameter): # "parameter" :: The parameter to be passed to the "method" self.cobj.cy_execute(parameter) -cdef class PhysicsModelBase(object): +cdef class PhysicsModelBase(BOUTppBase): """The PhysicsModelBase in python - better use the PhysicsModel class""" cdef c.PythonModel * cmodel cdef c.PythonModelCallback * callback @@ -1049,6 +1055,7 @@ cdef class PhysicsModelBase(object): del self.callback del self.callbackinit self.cmodel = 0 + super()._boutpp_dealloc() class PhysicsModel(PhysicsModelBase): """ @@ -1121,10 +1128,10 @@ class PhysicsModel(PhysicsModelBase): pass def __dealloc__(self): - super(PhysicsModel,self).__dealloc__() + super().__dealloc__() def _boutpp_dealloc(self): - super(PhysicsModel,self)._boutpp_dealloc() + super()._boutpp_dealloc() cdef extern from "bout/bout.hxx": int BoutInitialise(int&, char **&) except +raise_bout_py_error @@ -1199,9 +1206,11 @@ def finalise(): wasInit = _isInit _isInit = False objects = gc.get_objects() - ourClasses = (Coordinates, Field2D, Field3D, Mesh, Options, - PhysicsModel, PhysicsModelBase, Vector2D, Vector3D, - PythonModelCallback) + ourClasses = ( + Field2D, Field3D, Vector2D, Vector3D, Mesh, Coordinates, + Laplacian, FieldFactory, PythonModelCallback, PhysicsModel, + PhysicsModelBase, PythonModelCallback, Options, BOUTppBase, + ) for obj in objects: if isinstance(obj, ourClasses): if hasattr(obj, "_boutpp_dealloc"): @@ -1212,6 +1221,16 @@ def finalise(): if hasattr(ourClass, "_boutpp_dealloc"): ourClass._boutpp_dealloc(obj) break + for obj in objects: + if isinstance(obj, ourClasses): + if hasattr(obj, "_boutpp_wait_dealloc"): + obj._boutpp_wait_dealloc() + else: + for ourClass in ourClasses: + if isinstance(obj, ourClass): + if hasattr(ourClass, "_boutpp_wait_dealloc"): + ourClass._boutpp_wait_dealloc(obj) + break del objects # Actually finalise if wasInit: @@ -1522,7 +1541,7 @@ def setOption(name, value, source="PyInterface", force=False): root = Options.root() root.set(name, value, source, force) -cdef class Options: +cdef class Options(BOUTppBase): """ The Options class """ @@ -1725,13 +1744,7 @@ cdef class Options: cdef c.Options* opt = self.cobj opt.setConditionallyUsed() - def __dealloc__(self): - self._boutpp_dealloc() - - def _boutpp_dealloc(self): - if self.isSelfOwned and self.cobj != NULL: - del self.cobj - self.cobj = NULL +{{ dealloc(True) }} def writeDefaultOutputFile(options: Options): From ec45eb5ca4a1f62edb4634496a3f7954e8a65f83 Mon Sep 17 00:00:00 2001 From: David Bold Date: Tue, 10 Dec 2024 11:12:59 +0100 Subject: [PATCH 29/78] Allow abitrary arguments to base __cinit__ --- tools/pylib/_boutpp_build/boutpp.pyx.jinja | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tools/pylib/_boutpp_build/boutpp.pyx.jinja b/tools/pylib/_boutpp_build/boutpp.pyx.jinja index 6ffecd3596..639d4ea4dd 100644 --- a/tools/pylib/_boutpp_build/boutpp.pyx.jinja +++ b/tools/pylib/_boutpp_build/boutpp.pyx.jinja @@ -28,10 +28,8 @@ cdef class BOUTppBase: Base class that provides some mechanism for deallocation """ cdef c.bool _is_freed - cdef c.bool _is_init - def __cinit__(self, c.bool init=True): + def __cinit__(self, *args, **kwargs): self._is_freed = False - self._is_init = init def _boutpp_dealloc(self): self._is_freed = True From 536bd2403962043ef5cf0281c7cc5d1fbdb7a557 Mon Sep 17 00:00:00 2001 From: David Bold Date: Tue, 10 Dec 2024 11:15:08 +0100 Subject: [PATCH 30/78] cinit is always called, do not need to call it --- tools/pylib/_boutpp_build/boutpp.pyx.jinja | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tools/pylib/_boutpp_build/boutpp.pyx.jinja b/tools/pylib/_boutpp_build/boutpp.pyx.jinja index 639d4ea4dd..083dae4688 100644 --- a/tools/pylib/_boutpp_build/boutpp.pyx.jinja +++ b/tools/pylib/_boutpp_build/boutpp.pyx.jinja @@ -259,12 +259,11 @@ cdef class {{ field.field_type }}(BOUTppBase): f.setAll(data, ignoreDataType=ignoreDataType) return f - def __cinit__(self,{{ field.field_type }} obj=None): + def __cinit__(self, {{ field.field_type }} obj=None): self.cobj = NULL if obj: self.cobj = obj.cobj - self.isSelfOwned=True - super().__cinit__() + self.isSelfOwned = True def set(self, data, ignoreDataType=False): """ From 8daff5b139c9bb3e0e2ec5757f256155795f59a0 Mon Sep 17 00:00:00 2001 From: David Bold Date: Thu, 12 Dec 2024 15:37:58 +0100 Subject: [PATCH 31/78] Use generated code, to avoid having to deal with inheritance --- tools/pylib/_boutpp_build/boutpp.pyx.jinja | 239 +++++++++------------ 1 file changed, 105 insertions(+), 134 deletions(-) diff --git a/tools/pylib/_boutpp_build/boutpp.pyx.jinja b/tools/pylib/_boutpp_build/boutpp.pyx.jinja index 083dae4688..3ae6dfc47d 100644 --- a/tools/pylib/_boutpp_build/boutpp.pyx.jinja +++ b/tools/pylib/_boutpp_build/boutpp.pyx.jinja @@ -23,38 +23,52 @@ size_t = np.uint cdef extern from "boutexception_helper.hxx": cdef void raise_bout_py_error() -cdef class BOUTppBase: - """ - Base class that provides some mechanism for deallocation - """ - cdef c.bool _is_freed - def __cinit__(self, *args, **kwargs): - self._is_freed = False - - def _boutpp_dealloc(self): - self._is_freed = True - +{% macro wait() %} def _boutpp_wait_freed(self): while not self._is_freed: sleep(0.001) +{% endmacro %} -{% macro dealloc(self=False, uniquePtr=False) %} +{% macro dealloc(extra_dealloc='', uniquePtr=False) %} def __dealloc__(self): self._boutpp_dealloc() def _boutpp_dealloc(self): -{% if self %} +{{ extra_dealloc | indent(width=8) }} if self.isSelfOwned and self.cobj != NULL: -{% else %} - if self.cobj != NULL: -{% endif %} {% if uniquePtr %} self.cobj.release() {% else %} del self.cobj self.cobj = NULL {% endif %} - super()._boutpp_dealloc() + +{{ wait() }} +{% endmacro %} + +{% macro class(name, init="", extra_dealloc="", defaultSO=True, data="", uniquePtr=False, init_args="*args, **kwargs", + comment="") %} +cdef class {{ name }}{{ "(" ~ base ~ ")" if base else "" }}: + """ +{% if comment %} +{{ comment | indent }} +{% else %} + The {{ name }} class +{% endif %} + """ + cdef {{ "unique_ptr[c." ~ name ~ "]" if uniquePtr else "c." ~ name ~ "* " }} cobj + cdef c.bool isSelfOwned + cdef c.bool _is_freed + {{ data | indent }} + def __cinit__(self, {{ init_args}}): + self._is_freed = False +{% if not uniquePtr and cobj %} + self.isSelfOwned = {{ defaultSO }} + self.cobj = NULL +{% endif %} +{{ init | indent(width=8) }} + +{{ dealloc(extra_dealloc=extra_dealloc, uniquePtr=uniquePtr) }} {% endmacro %} {% for field in fields %} @@ -96,12 +110,8 @@ cdef {{ field.field_type }} {{ field.fdd }}FromPtr(c.{{ field.field_type }}* i): f.isSelfOwned = False return f -cdef class {{ field.field_type }}(BOUTppBase): - """ - The {{ field.field_type }} class - """ - cdef c.{{ field.field_type }} * cobj - cdef c.bool isSelfOwned + +{{ class(field.field_type) }} @classmethod def fromMesh(cls, mesh=None): @@ -259,12 +269,6 @@ cdef class {{ field.field_type }}(BOUTppBase): f.setAll(data, ignoreDataType=ignoreDataType) return f - def __cinit__(self, {{ field.field_type }} obj=None): - self.cobj = NULL - if obj: - self.cobj = obj.cobj - self.isSelfOwned = True - def set(self, data, ignoreDataType=False): """ Set all data of the {{ field.field_type }} @@ -400,7 +404,7 @@ cdef class {{ field.field_type }}(BOUTppBase): Returns ------- - {{ field.field_type }} + {{ field.field_type }} exponential of the field to the power of the exponential """ if other is not None: @@ -618,7 +622,6 @@ cdef class {{ field.field_type }}(BOUTppBase): self.cobj.{{ boundaryMethod }}() {% endfor %} -{{ dealloc(True) }} @property def shape(self): @@ -629,14 +632,8 @@ cdef class {{ field.field_type }}(BOUTppBase): cdef extern from "helper.h": c.{{ vec.field }} c_mul_{{ vec }}_{{ vec }}(c.{{ vec }} *, c.{{ vec }} *) except + -cdef class {{ vec }}(BOUTppBase): - """ - {{ vec }} class +{{ class(vec) }} - A vector of {{ vec.field }} - """ - cdef c.{{ vec }} * cobj - cdef c.bool isSelfOwned {% for d in "xyz" %} @property def {{ d }}(self): @@ -673,8 +670,6 @@ cdef class {{ vec }}(BOUTppBase): {% endfor %} return data_ -{{ dealloc(True) }} - cdef {{ vec }} {{ vec.vdd }}FromObj(c.{{ vec }} i): v={{ vec }}() v.cobj = new c.{{ vec }}( i) @@ -689,19 +684,18 @@ cdef extern from "helper.h": c.Field3D c_Grad_perp_dot_Grad_perp(c.Field3D,c.Field3D); void c_mesh_normalise(c.Mesh* , double) -cdef class Mesh(BOUTppBase): - """ - Mesh class - Contains information about geometry. - It contains also the coordinates and is responsible for taking deriavtives. - """ - cdef c.Mesh * cobj; - cdef c.bool isSelfOwned - cdef double isNormalised - cdef FieldFactory factory - cdef Coordinates _coords - cdef options +{{ class("Mesh", comment=""" +Mesh class + +Contains information about geometry. +It contains also the coordinates and is responsible for taking deriavtives. +""", data=""" +cdef double isNormalised +cdef FieldFactory factory +cdef Coordinates _coords +cdef options +""") }} def __init__(self, create=True, section=None, options=None): """ @@ -723,7 +717,7 @@ cdef class Mesh(BOUTppBase): global Options object is used. """ checkInit() - self.cobj=0 + self.cobj = 0 cdef c.string tmp cdef c.Options * opt = NULL self.isSelfOwned = False @@ -763,8 +757,6 @@ cdef class Mesh(BOUTppBase): msh.isSelfOwned = False return msh -{{ dealloc(True) }} - cdef getFactory(self): """ Get the FieldFactory of the mesh @@ -835,48 +827,36 @@ cdef Coordinates coordsFromPtr(c.Coordinates * obj): coords = Coordinates() coords.cobj = obj coords._setmembers() - coords.isSelfOwned = False return coords -cdef class Coordinates(BOUTppBase): - """ - Contains information about geometry, such as metric tensors - """ - cdef c.Coordinates * cobj - cdef c.bool isSelfOwned - cdef public {{ metric_field }} dx, dy, dz - cdef public {{ metric_field }} J - cdef public {{ metric_field }} Bxy - cdef public {{ metric_field }} g11, g22, g33, g12, g13, g23 - cdef public {{ metric_field }} g_11, g_22, g_33, g_12, g_13, g_23 - cdef public {{ metric_field }} G1_11, G1_22, G1_33, G1_12, G1_13, G1_23 - cdef public {{ metric_field }} G2_11, G2_22, G2_33, G2_12, G2_13, G2_23 - cdef public {{ metric_field }} G3_11, G3_22, G3_33, G3_12, G3_13, G3_23 - cdef public {{ metric_field }} G1, G2, G3 - cdef public {{ metric_field }} ShiftTorsion - cdef public {{ metric_field }} IntShiftTorsion - - def __init__(self): - self.cobj = NULL - self.isSelfOwned = False +{% set data %} +cdef public {{ metric_field }} dx, dy, dz +cdef public {{ metric_field }} J +cdef public {{ metric_field }} Bxy +cdef public {{ metric_field }} g11, g22, g33, g12, g13, g23 +cdef public {{ metric_field }} g_11, g_22, g_33, g_12, g_13, g_23 +cdef public {{ metric_field }} G1_11, G1_22, G1_33, G1_12, G1_13, G1_23 +cdef public {{ metric_field }} G2_11, G2_22, G2_33, G2_12, G2_13, G2_23 +cdef public {{ metric_field }} G3_11, G3_22, G3_33, G3_12, G3_13, G3_23 +cdef public {{ metric_field }} G1, G2, G3 +cdef public {{ metric_field }} ShiftTorsion +cdef public {{ metric_field }} IntShiftTorsion +{% endset %} +{{ class("Coordinates", comment="Contains information about geometry, such as metric tensors", data=data, defaultSO=False) }} def _setmembers(self): {% for f in "dx", "dy", "dz", "J", "Bxy", "g11", "g22", "g33", "g12", "g13", "g23", "g_11", "g_22", "g_33", "g_12", "g_13", "g_23", "G1_11", "G1_22", "G1_33", "G1_12", "G1_13", "G1_23", "G2_11", "G2_22", "G2_33", "G2_12", "G2_13", "G2_23", "G3_11", "G3_22", "G3_33", "G3_12", "G3_13", "G3_23", "G1", "G2", "G3", "ShiftTorsion", "IntShiftTorsion" %} self.{{f}} = {{ metric_field.fdd }}FromPtr(&self.cobj.{{f}}) {% endfor %} -{{ dealloc(True) }} +{{ class("Laplacian", comment=""" +Laplacian inversion solver -cdef class Laplacian(BOUTppBase): - """ - Laplacian inversion solver +Compute the Laplacian inversion of objects. - Compute the Laplacian inversion of objects. +Equation solved is: d\\nabla^2_\\perp x + (1/c1)\\nabla_perp c2\\cdot\\nabla_\\perp x + ex\\nabla_x x + ez\\nabla_z x + a x = b +""", uniquePtr=True) }} - Equation solved is: d\\nabla^2_\\perp x + (1/c1)\\nabla_perp c2\\cdot\\nabla_\\perp x + ex\\nabla_x x + ez\\nabla_z x + a x = b - """ - cdef unique_ptr[c.Laplacian] cobj - cdef c.bool isSelfOwned def __init__(self, section=None): """ Initialiase a Laplacian solver @@ -936,15 +916,8 @@ cdef class Laplacian(BOUTppBase): deref(self.cobj).setCoef{{ coeff }}({{ coeff }}.cobj[0]) {% endfor %} -{{ dealloc(True, uniquePtr=True) }} -cdef class FieldFactory(BOUTppBase): - cdef c.FieldFactory * cobj - def __init__(self): - checkInit() - cobj=< c.FieldFactory*>0 - -{{ dealloc() }} +{{ class("FieldFactory", defaultSO=False) }} cdef void callback(void * parameter, void * method) with gil: cdef double time = (parameter)[0] @@ -961,14 +934,20 @@ cdef void callback(void * parameter, void * method) with gil: ctypedef void (*Method)(void *param) -cdef class PythonModelCallback(BOUTppBase): - """Needed for callbacks from C++ to python""" +cdef class PythonModelCallback: + """ + Needed for callbacks from C++ to python + """ cdef c.PythonModelCallback * cobj + cdef c.bool _is_freed + cdef c.bool isSelfOwned def __cinit__(self, method): # "callback" :: The pattern/converter method to fire a Python # object method from C typed infos # "method" :: The effective method passed by the Python user + self._is_freed = False + self.isSelfOwned = True checkInit() self.cobj = new c.PythonModelCallback(callback, method) self.__cinit__() @@ -980,18 +959,24 @@ cdef class PythonModelCallback(BOUTppBase): self.cobj.cy_execute(parameter) -cdef class PhysicsModelBase(BOUTppBase): +cdef class PhysicsModelBase: """The PhysicsModelBase in python - better use the PhysicsModel class""" cdef c.PythonModel * cmodel cdef c.PythonModelCallback * callback cdef c.PythonModelCallback * callbackinit cdef c.bool _done_pyinit - def __init__(self): + cdef c.bool _is_freed + cdef c.bool isSelfOwned + + def __cinit__(self): checkInit() - self.cmodel = new c.PythonModel() - self.callback= 0 - self.callbackinit= 0 + self.cmodel = new c.PythonModel() + self.callback = NULL + self.callbackinit = NULL self._done_pyinit = False + self._is_freed = False + self.isSelfOwned = True + def solve(self): if self._done_pyinit == False: self._done_pyinit = True @@ -1011,7 +996,7 @@ cdef class PhysicsModelBase(BOUTppBase): f3d = (kwargs[key]).cobj self.cmodel.getSolver().add(f3d[0],tmp) - def setRhs(self,rhs): + def setRhs(self, rhs): """ set the rhs function to be called @@ -1020,7 +1005,7 @@ cdef class PhysicsModelBase(BOUTppBase): rhs : function Must not be a method, and must accept an double (time) as argument """ - if self.callback != 0: + if self.callback != NULL: del self.callback self.callback = new c.PythonModelCallback(callback, rhs) self.cmodel.set_rhs_func(self.callback) @@ -1046,13 +1031,16 @@ cdef class PhysicsModelBase(BOUTppBase): PhysicsModelBase._boutpp_dealloc(self) def _boutpp_dealloc(self): - if self.cmodel != 0: + if self.cmodel != NULL: self.cmodel.free() del self.cmodel del self.callback del self.callbackinit self.cmodel = 0 - super()._boutpp_dealloc() + self._is_freed = True + +{{ wait() }} + class PhysicsModel(PhysicsModelBase): """ @@ -1081,18 +1069,11 @@ class PhysicsModel(PhysicsModelBase): model.solve() """ - def __init__(self): - super(PhysicsModel,self).__init__() - self._super_is_initialised=True def solve(self): """ Call the solver. This makes sure that self.init(restart) and self.rhs(time) are called from the solver. """ - try: - self._super_is_initialised - except: - raise RuntimeError("PhysicsModel is not initialized") def _rhs(time): self.rhs(time) self.myrhs=_rhs @@ -1102,6 +1083,7 @@ class PhysicsModel(PhysicsModelBase): self.myinit=_init self.setInit(self.myinit) super(PhysicsModel,self).solve() + def solve_for(self,*args,**kwargs): """ Add Field3D's to be solved for. @@ -1113,11 +1095,8 @@ class PhysicsModel(PhysicsModelBase): kwargs : dictionary of Field2D or Field3D Keys must be strings, and value of dict must be the Field3D which should be evolved. """ - try: - self._super_is_initialised - except: - raise RuntimeError("PhysicsModel is not initialized") super(PhysicsModel,self).solve_for(*args,**kwargs) + def init(self,restart): """ This can be overwritten to do model specific initialization @@ -1206,7 +1185,7 @@ def finalise(): ourClasses = ( Field2D, Field3D, Vector2D, Vector3D, Mesh, Coordinates, Laplacian, FieldFactory, PythonModelCallback, PhysicsModel, - PhysicsModelBase, PythonModelCallback, Options, BOUTppBase, + PhysicsModelBase, PythonModelCallback, Options, ) for obj in objects: if isinstance(obj, ourClasses): @@ -1220,14 +1199,16 @@ def finalise(): break for obj in objects: if isinstance(obj, ourClasses): - if hasattr(obj, "_boutpp_wait_dealloc"): - obj._boutpp_wait_dealloc() + if hasattr(obj, "_boutpp_wait_freed"): + obj._boutpp_wait_freed() else: for ourClass in ourClasses: if isinstance(obj, ourClass): - if hasattr(ourClass, "_boutpp_wait_dealloc"): - ourClass._boutpp_wait_dealloc(obj) + if hasattr(ourClass, "_boutpp_wait_freed"): + ourClass._boutpp_wait_freed(obj) break + else: + print(f"{obj} of type {ourClass} cannot wait!") del objects # Actually finalise if wasInit: @@ -1538,12 +1519,7 @@ def setOption(name, value, source="PyInterface", force=False): root = Options.root() root.set(name, value, source, force) -cdef class Options(BOUTppBase): - """ - The Options class - """ - cdef c.Options * cobj - cdef c.bool isSelfOwned +{{ class("Options") }} def __init__(self, **kwargs): """Construct an Options from keywords or dict""" @@ -1595,13 +1571,11 @@ cdef class Options(BOUTppBase): The Options object """ checkInit() - opt = Options("") - opt.cobj = new c.Options() - opt.isSelfOwned = True + opt = Options() cdef char * file_ file__ = file.encode() file_ = file__ - c.OptionsReader.getInstance().read(opt.cobj, "%s", file_) + c.OptionsReader.getInstance().read(opt.cobj, file_) return opt @staticmethod @@ -1741,9 +1715,6 @@ cdef class Options(BOUTppBase): cdef c.Options* opt = self.cobj opt.setConditionallyUsed() -{{ dealloc(True) }} - - def writeDefaultOutputFile(options: Options): c.writeDefaultOutputFile(deref(options.cobj)) From 74134842766f7f53c54c13db61287412e628b5c3 Mon Sep 17 00:00:00 2001 From: David Bold Date: Thu, 12 Dec 2024 15:40:52 +0100 Subject: [PATCH 32/78] Track references in boutpp The list from gc was incomplete. Using a custom weakref list ensures we can free all objects before MPI_Finalize is called. This reverts 0e4314c449581, which was not working as it relied on the same, incomplete, list of objects. Resolves: gh#3041 --- tools/pylib/_boutpp_build/boutpp.pyx.jinja | 66 +++++++++------------- 1 file changed, 26 insertions(+), 40 deletions(-) diff --git a/tools/pylib/_boutpp_build/boutpp.pyx.jinja b/tools/pylib/_boutpp_build/boutpp.pyx.jinja index 3ae6dfc47d..d6f0601f1c 100644 --- a/tools/pylib/_boutpp_build/boutpp.pyx.jinja +++ b/tools/pylib/_boutpp_build/boutpp.pyx.jinja @@ -15,20 +15,16 @@ from libcpp.memory cimport unique_ptr from cython.operator import dereference as deref import numbers import sys -import gc from time import sleep +import weakref + +_allobjects = [] size_t = np.uint cdef extern from "boutexception_helper.hxx": cdef void raise_bout_py_error() -{% macro wait() %} - def _boutpp_wait_freed(self): - while not self._is_freed: - sleep(0.001) -{% endmacro %} - {% macro dealloc(extra_dealloc='', uniquePtr=False) %} def __dealloc__(self): self._boutpp_dealloc() @@ -43,7 +39,6 @@ cdef extern from "boutexception_helper.hxx": self.cobj = NULL {% endif %} -{{ wait() }} {% endmacro %} {% macro class(name, init="", extra_dealloc="", defaultSO=True, data="", uniquePtr=False, init_args="*args, **kwargs", @@ -58,10 +53,11 @@ cdef class {{ name }}{{ "(" ~ base ~ ")" if base else "" }}: """ cdef {{ "unique_ptr[c." ~ name ~ "]" if uniquePtr else "c." ~ name ~ "* " }} cobj cdef c.bool isSelfOwned - cdef c.bool _is_freed + cdef object __weakref__ {{ data | indent }} def __cinit__(self, {{ init_args}}): - self._is_freed = False + global _allobjects + _allobjects.append(weakref.ref(self)) {% if not uniquePtr and cobj %} self.isSelfOwned = {{ defaultSO }} self.cobj = NULL @@ -939,14 +935,15 @@ cdef class PythonModelCallback: Needed for callbacks from C++ to python """ cdef c.PythonModelCallback * cobj - cdef c.bool _is_freed cdef c.bool isSelfOwned + cdef object __weakref__ def __cinit__(self, method): # "callback" :: The pattern/converter method to fire a Python # object method from C typed infos # "method" :: The effective method passed by the Python user - self._is_freed = False + global _allobjects + _allobjects.append(weakref.ref(self)) self.isSelfOwned = True checkInit() self.cobj = new c.PythonModelCallback(callback, method) @@ -965,16 +962,17 @@ cdef class PhysicsModelBase: cdef c.PythonModelCallback * callback cdef c.PythonModelCallback * callbackinit cdef c.bool _done_pyinit - cdef c.bool _is_freed cdef c.bool isSelfOwned + cdef object __weakref__ def __cinit__(self): checkInit() + global _allobjects + _allobjects.append(weakref.ref(self)) self.cmodel = new c.PythonModel() self.callback = NULL self.callbackinit = NULL self._done_pyinit = False - self._is_freed = False self.isSelfOwned = True def solve(self): @@ -1037,9 +1035,6 @@ cdef class PhysicsModelBase: del self.callback del self.callbackinit self.cmodel = 0 - self._is_freed = True - -{{ wait() }} class PhysicsModel(PhysicsModelBase): @@ -1181,34 +1176,25 @@ def finalise(): global _isInit wasInit = _isInit _isInit = False - objects = gc.get_objects() + objects = _allobjects #gc.get_objects() ourClasses = ( Field2D, Field3D, Vector2D, Vector3D, Mesh, Coordinates, Laplacian, FieldFactory, PythonModelCallback, PhysicsModel, PhysicsModelBase, PythonModelCallback, Options, ) - for obj in objects: - if isinstance(obj, ourClasses): - if hasattr(obj, "_boutpp_dealloc"): - obj._boutpp_dealloc() - else: - for ourClass in ourClasses: - if isinstance(obj, ourClass): - if hasattr(ourClass, "_boutpp_dealloc"): - ourClass._boutpp_dealloc(obj) - break - for obj in objects: - if isinstance(obj, ourClasses): - if hasattr(obj, "_boutpp_wait_freed"): - obj._boutpp_wait_freed() - else: - for ourClass in ourClasses: - if isinstance(obj, ourClass): - if hasattr(ourClass, "_boutpp_wait_freed"): - ourClass._boutpp_wait_freed(obj) - break - else: - print(f"{obj} of type {ourClass} cannot wait!") + for objr in objects: + obj = objr() + if obj is None: + continue + if hasattr(obj, "_boutpp_dealloc"): + obj._boutpp_dealloc() + else: + for ourClass in ourClasses: + if isinstance(obj, ourClass): + if hasattr(ourClass, "_boutpp_dealloc"): + ourClass._boutpp_dealloc(obj) + break + del objects # Actually finalise if wasInit: From cb083c0bda420c49fb7dacc3b0c4eaaa3f7644b2 Mon Sep 17 00:00:00 2001 From: dschwoerer <5637662+dschwoerer@users.noreply.github.com> Date: Wed, 19 Feb 2025 10:08:22 +0000 Subject: [PATCH 33/78] Apply black changes --- tests/integrated/test_suite | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integrated/test_suite b/tests/integrated/test_suite index 307a8d84b3..77ad7882c4 100755 --- a/tests/integrated/test_suite +++ b/tests/integrated/test_suite @@ -188,7 +188,7 @@ class Test(threading.Thread): self.output += "\n(It is likely that a timeout occured)" else: # ❌ Failed - print("\u274C", end="") # No newline + print("\u274c", end="") # No newline print(" %7.3f s" % (time.time() - self.local.start_time), flush=True) def _cost(self): From d38a8f1af24cbe57a40fb7a889cbb257e81b2896 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 20:22:11 +0000 Subject: [PATCH 34/78] Bump ZedThree/clang-tidy-review from 0.20.1 to 0.21.0 Bumps [ZedThree/clang-tidy-review](https://github.com/zedthree/clang-tidy-review) from 0.20.1 to 0.21.0. - [Release notes](https://github.com/zedthree/clang-tidy-review/releases) - [Changelog](https://github.com/ZedThree/clang-tidy-review/blob/master/CHANGELOG.md) - [Commits](https://github.com/zedthree/clang-tidy-review/compare/v0.20.1...v0.21.0) --- updated-dependencies: - dependency-name: ZedThree/clang-tidy-review dependency-version: 0.21.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/clang-tidy-review.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/clang-tidy-review.yml b/.github/workflows/clang-tidy-review.yml index b2f9bd7573..9746075b1a 100644 --- a/.github/workflows/clang-tidy-review.yml +++ b/.github/workflows/clang-tidy-review.yml @@ -22,7 +22,7 @@ jobs: submodules: true - name: Run clang-tidy - uses: ZedThree/clang-tidy-review@v0.20.1 + uses: ZedThree/clang-tidy-review@v0.21.0 id: review with: build_dir: build @@ -46,4 +46,4 @@ jobs: -DBOUT_UPDATE_GIT_SUBMODULE=OFF - name: Upload clang-tidy fixes - uses: ZedThree/clang-tidy-review/upload@v0.20.1 + uses: ZedThree/clang-tidy-review/upload@v0.21.0 From 7253298aad03d70ca50ce3d439fad8c79b191ce8 Mon Sep 17 00:00:00 2001 From: Tom Body <116750897+tbody-cfs@users.noreply.github.com> Date: Wed, 16 Apr 2025 20:27:18 -0400 Subject: [PATCH 35/78] Update CMakeLists.txt Address #2945 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 60d34e1ad7..9dc804d50f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,7 +51,7 @@ message(STATUS "Configuring BOUT++ version ${BOUT_FULL_VERSION}") project(BOUT++ DESCRIPTION "Fluid PDE solver framework" VERSION ${BOUT_CMAKE_ACCEPTABLE_VERSION} - LANGUAGES CXX) + LANGUAGES C CXX) include(CMakeDependentOption) From 3c3aca61377e8c7576c912a5bb9597c5768103d0 Mon Sep 17 00:00:00 2001 From: Tom Body Date: Fri, 18 Apr 2025 16:18:09 +0000 Subject: [PATCH 36/78] Move enable C to NetCDF --- cmake/FindnetCDF.cmake | 1 + cmake/SetupBOUTThirdParty.cmake | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/FindnetCDF.cmake b/cmake/FindnetCDF.cmake index 393c57549b..361095954e 100644 --- a/cmake/FindnetCDF.cmake +++ b/cmake/FindnetCDF.cmake @@ -32,6 +32,7 @@ if (NOT netCDF_ROOT AND EXISTS "${BOUT_USE_NETCDF}") set(netCDF_ROOT "${BOUT_USE_NETCDF}") endif() +enable_language(C) find_package(netCDF QUIET CONFIG) if (netCDF_FOUND) diff --git a/cmake/SetupBOUTThirdParty.cmake b/cmake/SetupBOUTThirdParty.cmake index 43067ad9e0..65be28334b 100644 --- a/cmake/SetupBOUTThirdParty.cmake +++ b/cmake/SetupBOUTThirdParty.cmake @@ -254,7 +254,6 @@ if (BOUT_USE_SUNDIALS) FetchContent_MakeAvailable(sundials) message(STATUS "SUNDIALS done configuring") else() - enable_language(C) find_package(SUNDIALS REQUIRED) if (SUNDIALS_VERSION VERSION_LESS 4.0.0) message(FATAL_ERROR "SUNDIALS_VERSION 4.0.0 or newer is required. Found version ${SUNDIALS_VERSION}.") From 2c9b3e2432a4e35f74c7aec02ebc218577118e71 Mon Sep 17 00:00:00 2001 From: Tom Body Date: Fri, 18 Apr 2025 17:36:08 +0000 Subject: [PATCH 37/78] Remove top-level C --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9dc804d50f..60d34e1ad7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,7 +51,7 @@ message(STATUS "Configuring BOUT++ version ${BOUT_FULL_VERSION}") project(BOUT++ DESCRIPTION "Fluid PDE solver framework" VERSION ${BOUT_CMAKE_ACCEPTABLE_VERSION} - LANGUAGES C CXX) + LANGUAGES CXX) include(CMakeDependentOption) From 36c17409858bf90538a829d49a992f4211f947a0 Mon Sep 17 00:00:00 2001 From: Tom Body Date: Fri, 18 Apr 2025 18:47:12 +0000 Subject: [PATCH 38/78] Add back in C language for SUNDIALS --- cmake/SetupBOUTThirdParty.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/SetupBOUTThirdParty.cmake b/cmake/SetupBOUTThirdParty.cmake index 65be28334b..eefe513a3d 100644 --- a/cmake/SetupBOUTThirdParty.cmake +++ b/cmake/SetupBOUTThirdParty.cmake @@ -233,6 +233,7 @@ option(BOUT_DOWNLOAD_SUNDIALS "Download and build SUNDIALS" OFF) cmake_dependent_option(BOUT_USE_SUNDIALS "Enable support for SUNDIALS time solvers" OFF "NOT BOUT_DOWNLOAD_SUNDIALS" ON) if (BOUT_USE_SUNDIALS) + enable_language(C) if (BOUT_DOWNLOAD_SUNDIALS) message(STATUS "Downloading and configuring SUNDIALS") include(FetchContent) From 1552269fcf65b722f5dc8175d93950ff8fa19028 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 May 2025 19:43:02 +0000 Subject: [PATCH 39/78] Bump externalpackages/googletest from `2b6b042` to `bac6a8f` Bumps [externalpackages/googletest](https://github.com/google/googletest) from `2b6b042` to `bac6a8f`. - [Release notes](https://github.com/google/googletest/releases) - [Commits](https://github.com/google/googletest/compare/2b6b042a77446ff322cd7522ca068d9f2a21c1d1...bac6a8fd8a729eef0d1b2d1a4625f4de62c60220) --- updated-dependencies: - dependency-name: externalpackages/googletest dependency-version: bac6a8fd8a729eef0d1b2d1a4625f4de62c60220 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- externalpackages/googletest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/externalpackages/googletest b/externalpackages/googletest index 2b6b042a77..bac6a8fd8a 160000 --- a/externalpackages/googletest +++ b/externalpackages/googletest @@ -1 +1 @@ -Subproject commit 2b6b042a77446ff322cd7522ca068d9f2a21c1d1 +Subproject commit bac6a8fd8a729eef0d1b2d1a4625f4de62c60220 From 96cdee5b83aadc64304d1024ec84767e8e7c182b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 19:41:43 +0000 Subject: [PATCH 40/78] Bump externalpackages/boutdata from `0aaef41` to `a7a372d` Bumps [externalpackages/boutdata](https://github.com/boutproject/boutdata) from `0aaef41` to `a7a372d`. - [Release notes](https://github.com/boutproject/boutdata/releases) - [Commits](https://github.com/boutproject/boutdata/compare/0aaef417af092882ac295c4d84e4532e4a10e01f...a7a372d5de7594cbe16381a3a82289ddaa58b6e7) --- updated-dependencies: - dependency-name: externalpackages/boutdata dependency-version: a7a372d5de7594cbe16381a3a82289ddaa58b6e7 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- externalpackages/boutdata | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/externalpackages/boutdata b/externalpackages/boutdata index 0aaef417af..a7a372d5de 160000 --- a/externalpackages/boutdata +++ b/externalpackages/boutdata @@ -1 +1 @@ -Subproject commit 0aaef417af092882ac295c4d84e4532e4a10e01f +Subproject commit a7a372d5de7594cbe16381a3a82289ddaa58b6e7 From dd8e5ebca19c8fe38b2ad2cd6a9981ee85eac18f Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Wed, 30 Oct 2024 13:39:04 +0000 Subject: [PATCH 41/78] Replace deprecated `boututils.file_import` --- examples/elm-pb/Python/2dprofile.py | 5 +++-- examples/elm-pb/Python/plotcollapse.py | 7 +++++-- examples/elm-pb/Python/post.py | 5 +++-- examples/elm-pb/Python/read_elmsize.py | 5 +++-- examples/elm-pb/Python/sprofiles.py | 9 +++++---- examples/elm-pb/Python/volume_int.py | 14 ++++++++------ tests/integrated/test-drift-instability/runtest | 8 ++++---- 7 files changed, 31 insertions(+), 22 deletions(-) diff --git a/examples/elm-pb/Python/2dprofile.py b/examples/elm-pb/Python/2dprofile.py index ea430a0fe1..5bb01972f9 100644 --- a/examples/elm-pb/Python/2dprofile.py +++ b/examples/elm-pb/Python/2dprofile.py @@ -3,10 +3,11 @@ from past.utils import old_div import numpy as np import matplotlib.pyplot as plt -from boututils.file_import import file_import +from boututils.datafile import DataFile from matplotlib.ticker import FixedFormatter, FormatStrFormatter, AutoLocator, AutoMinorLocator -g = file_import("./cbm18_dens8.grid_nx68ny64.nc") +with DataFile("./cbm18_dens8.grid_nx68ny64.nc") as f: + g = {v: f.read(v) for v in f.keys()} majorLocator = AutoLocator() majorFormatter = FormatStrFormatter('%3.0e') diff --git a/examples/elm-pb/Python/plotcollapse.py b/examples/elm-pb/Python/plotcollapse.py index 49858ae37e..ee64ca381f 100755 --- a/examples/elm-pb/Python/plotcollapse.py +++ b/examples/elm-pb/Python/plotcollapse.py @@ -5,9 +5,10 @@ import matplotlib.pyplot as plt import numpy as np from boututils.moment_xyzt import moment_xyzt -from boututils.file_import import file_import +from boututils.datafile import DataFile from boutdata.collect import collect import os +from pathlib import Path #Dynamic matplotlib settings from matplotlib import rcParams @@ -17,8 +18,10 @@ if not os.path.exists('image'): os.makedirs('image') +filename = Path(__file__).with_name("cbm18_dens8.grid_nx68ny64.nc") +with DataFile(str(filename)) as f: + g = {v: f.read(v) for v in f.keys()} -g = file_import(os.path.dirname(os.path.realpath(__file__))+'/../cbm18_dens8.grid_nx68ny64.nc') psi = old_div((g['psixy'][:, 32] - g['psi_axis']), (g['psi_bndry'] - g['psi_axis'])) path = './data' diff --git a/examples/elm-pb/Python/post.py b/examples/elm-pb/Python/post.py index 2c2d3e2bde..9bb67347f0 100644 --- a/examples/elm-pb/Python/post.py +++ b/examples/elm-pb/Python/post.py @@ -5,7 +5,7 @@ from __future__ import division from past.utils import old_div import numpy as np -from boututils.file_import import file_import +from boututils.datafile import DataFile from boutdata.collect import collect from pylab import plot, show, figure, xlabel, ylabel, annotate, xlim, ylim from boututils.moment_xyzt import moment_xyzt @@ -23,7 +23,8 @@ gfile='./cbm18_dens8.grid_nx68ny64.nc' -g = file_import(gfile) +with DataFile(gfile) as f: + g = {v: f.read(v) for v in f.keys()} Dphi0 = collect("Dphi0", path=path0) diff --git a/examples/elm-pb/Python/read_elmsize.py b/examples/elm-pb/Python/read_elmsize.py index b2ce7674a6..fcd3d24e53 100644 --- a/examples/elm-pb/Python/read_elmsize.py +++ b/examples/elm-pb/Python/read_elmsize.py @@ -1,6 +1,6 @@ from boutdata.collect import collect from boututils.moment_xyzt import moment_xyzt -from boututils.file_import import file_import +from boututils.datafile import DataFile from pylab import save, figure, plot, title, xlabel, ylabel, show, tight_layout from elm_size import elm_size @@ -19,7 +19,8 @@ # te0=collect('te0', path=path) # save('te0.idl.dat', te0) -gfile=file_import('./cbm18_dens8.grid_nx68ny64.nc') +with DataFile("./cbm18_dens8.grid_nx68ny64.nc") as f: + gfile = {v: f.read(v) for v in f.keys()} p=collect('P', path=path) save('p.dat', p) diff --git a/examples/elm-pb/Python/sprofiles.py b/examples/elm-pb/Python/sprofiles.py index f118bce23c..9d8eea48de 100644 --- a/examples/elm-pb/Python/sprofiles.py +++ b/examples/elm-pb/Python/sprofiles.py @@ -3,17 +3,18 @@ from builtins import range from past.utils import old_div import numpy as np -from boututils.file_import import file_import +from boututils.datafile import DataFile from boututils.surface_average import surface_average from boutdata.collect import collect from pylab import plot, show, xlabel, ylabel, figure, legend, gca -path='./data' +path = "./data" -gfile='../cbm18_dens8.grid_nx68ny64.nc' +gfile = "../cbm18_dens8.grid_nx68ny64.nc" -g = file_import(gfile) +with DataFile(gfile) as f: + g = {v: f.read(v) for v in f.keys()} var=collect("P", path=path) diff --git a/examples/elm-pb/Python/volume_int.py b/examples/elm-pb/Python/volume_int.py index 38775d37e0..e858f156d7 100644 --- a/examples/elm-pb/Python/volume_int.py +++ b/examples/elm-pb/Python/volume_int.py @@ -1,18 +1,20 @@ from __future__ import print_function -from boututils.file_import import file_import +from boututils.datafile import DataFile from boututils.volume_integral import volume_integral from boutdata.collect import collect + # Integrate over a volume -path='./data/' +path = "./data/" -gfile='./cbm18_dens8.grid_nx68ny64.nc' +gfile = "./cbm18_dens8.grid_nx68ny64.nc" -g = file_import(gfile) +with DataFile(gfile) as f: + g = {v: f.read(v) for v in f.keys()} -var=collect("P", path=path) +var = collect("P", path=path) -sol=volume_integral(var, g) +sol = volume_integral(var, g) print(sol) diff --git a/tests/integrated/test-drift-instability/runtest b/tests/integrated/test-drift-instability/runtest index e8ddddc11d..85aa8ea1f3 100755 --- a/tests/integrated/test-drift-instability/runtest +++ b/tests/integrated/test-drift-instability/runtest @@ -7,8 +7,8 @@ # Requires: not metric_3d from boututils.run_wrapper import build_and_log, shell, launch_safe -from boututils.file_import import file_import from boututils.calculus import deriv +from boututils.datafile import DataFile from boututils.linear_regression import linear_regression from boutdata.collect import collect @@ -94,6 +94,9 @@ def run_zeff_case(zeff): ny = dims[2] nz = dims[3] + with DataFile("uedge.grd_std.cdl") as f: + grid = {v: f.read(v) for v in f.keys()} + # Calculate geometric and physical quantities lZeta = 1e2 * zmax * 2 * np.pi * grid["R0"] # toroidal range [cm] lbNorm = lZeta * ( @@ -211,9 +214,6 @@ if __name__ == "__main__": build_and_log("resistive drift instability test") - # Import the grid file - grid = file_import("uedge.grd_std.cdl") - return_code = 0 for zeff in args.Zeff_list: success = run_zeff_case(zeff) From 4ffb732409536618bc4422a8cfac81ff83760388 Mon Sep 17 00:00:00 2001 From: dschwoerer <5637662+dschwoerer@users.noreply.github.com> Date: Thu, 5 Jun 2025 10:03:47 +0000 Subject: [PATCH 42/78] Add PETSc version guards for function cast --- include/bout/petsc_interface.hxx | 9 +++++++++ src/solver/impls/imex-bdf2/imex-bdf2.cxx | 20 +++++++++++--------- src/solver/impls/snes/snes.cxx | 1 + 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/include/bout/petsc_interface.hxx b/include/bout/petsc_interface.hxx index 8e7d44c67d..670d91b2ec 100644 --- a/include/bout/petsc_interface.hxx +++ b/include/bout/petsc_interface.hxx @@ -615,6 +615,15 @@ PetscVector operator*(const PetscMatrix& mat, const PetscVector& vec) { return PetscVector(vec, result); } +// Compatibility wrappers +// For < 3.24 +#if PETSC_VERSION_GE(3, 24, 0) \ + || (PETSC_VERSION_GE(3, 23, 0) && PETSC_VERSION_RELEASE != 0) +// Nothing to do +#else +using MatFDColoringFn = PetscErrorCode (*)(); +#endif + #endif // BOUT_HAS_PETSC #endif // __PETSC_INTERFACE_H__ diff --git a/src/solver/impls/imex-bdf2/imex-bdf2.cxx b/src/solver/impls/imex-bdf2/imex-bdf2.cxx index adafbb71c5..3629965b87 100644 --- a/src/solver/impls/imex-bdf2/imex-bdf2.cxx +++ b/src/solver/impls/imex-bdf2/imex-bdf2.cxx @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -116,7 +117,7 @@ static PetscErrorCode FormFunctionForDifferencing(void* ctx, Vec x, Vec f) { * * This can be a linearised and simplified form of FormFunction */ -static PetscErrorCode FormFunctionForColoring(SNES UNUSED(snes), Vec x, Vec f, +static PetscErrorCode FormFunctionForColoring(void* UNUSED(snes), Vec x, Vec f, void* ctx) { return static_cast(ctx)->snes_function(x, f, true); } @@ -654,9 +655,15 @@ void IMEXBDF2::constructSNES(SNES* snesIn) { // Create data structure for SNESComputeJacobianDefaultColor MatFDColoringCreate(Jmf, iscoloring, &fdcoloring); // Set the function to difference - MatFDColoringSetFunction( - fdcoloring, reinterpret_cast(FormFunctionForColoring), - this); +#if PETSC_VERSION_GE(3, 24, 0) \ + || (PETSC_VERSION_GE(3, 23, 0) && PETSC_VERSION_RELEASE == 0) +#define FUNC_MAYBE_CAST(func) func +#else +#define FUNC_MAYBE_CAST(func) reinterpret_cast(func) +#endif + MatFDColoringSetFunction(fdcoloring, FUNC_MAYBE_CAST(FormFunctionForColoring), + this); +#undef FUNC_MAYBE_CAST MatFDColoringSetFromOptions(fdcoloring); MatFDColoringSetUp(Jmf, iscoloring, fdcoloring); ISColoringDestroy(&iscoloring); @@ -680,12 +687,7 @@ void IMEXBDF2::constructSNES(SNES* snesIn) { 0, // Number of nonzeros per row in off-diagonal portion of local submatrix nullptr, &Jmf); -#if PETSC_VERSION_GE(3, 4, 0) SNESSetJacobian(*snesIn, Jmf, Jmf, SNESComputeJacobianDefault, this); -#else - // Before 3.4 - SNESSetJacobian(*snesIn, Jmf, Jmf, SNESDefaultComputeJacobian, this); -#endif MatSetOption(Jmf, MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE); } diff --git a/src/solver/impls/snes/snes.cxx b/src/solver/impls/snes/snes.cxx index 2143aad96a..b1db03f80a 100644 --- a/src/solver/impls/snes/snes.cxx +++ b/src/solver/impls/snes/snes.cxx @@ -7,6 +7,7 @@ #include #include #include +#include #include #include From 1bc99e5c42ef94f4f93ccdbf651101417125611f Mon Sep 17 00:00:00 2001 From: David Bold Date: Fri, 6 Jun 2025 11:41:57 +0200 Subject: [PATCH 43/78] Update docs for what PETSc we support 3.23 has been tested in CI so is expected to work. --- manual/RELEASE_HOWTO.md | 1 + manual/sphinx/user_docs/advanced_install.rst | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/manual/RELEASE_HOWTO.md b/manual/RELEASE_HOWTO.md index 4103e6f197..d8ced2afb5 100644 --- a/manual/RELEASE_HOWTO.md +++ b/manual/RELEASE_HOWTO.md @@ -51,6 +51,7 @@ Before merging PR: - [ ] [`manual/doxygen/Doxyfile_readthedocs`][Doxyfile_readthedocs]: `PROJECT_NUMBER` - [ ] [`manual/doxygen/Doxyfile`][Doxyfile]: `PROJECT_NUMBER` - [ ] [`CMakeLists.txt`][CMakeLists]: `_bout_previous_version`, `_bout_next_version` +- [ ] Update what version of PETSc and SUNDIALS we support (upper bound) After PR is merged: diff --git a/manual/sphinx/user_docs/advanced_install.rst b/manual/sphinx/user_docs/advanced_install.rst index 428666dbd7..91d2fa898b 100644 --- a/manual/sphinx/user_docs/advanced_install.rst +++ b/manual/sphinx/user_docs/advanced_install.rst @@ -480,7 +480,7 @@ BOUT++ can use PETSc https://www.mcs.anl.gov/petsc/ for time-integration and for solving elliptic problems, such as inverting Poisson and Helmholtz equations. -Currently, BOUT++ supports PETSc versions 3.7 - 3.19. More recent versions may +Currently, BOUT++ supports PETSc versions 3.7 - 3.23. More recent versions may well work, but the PETSc API does sometimes change in backward-incompatible ways, so this is not guaranteed. To install PETSc version 3.19, use the following steps:: From 63a868339eddcb8bb843b9fba66424eeb87fd08b Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Tue, 17 Jun 2025 16:55:24 +0100 Subject: [PATCH 44/78] Fix PETSc version check for MatFDColoringFn typedef --- include/bout/petsc_interface.hxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/bout/petsc_interface.hxx b/include/bout/petsc_interface.hxx index 670d91b2ec..1538fb5b8e 100644 --- a/include/bout/petsc_interface.hxx +++ b/include/bout/petsc_interface.hxx @@ -618,7 +618,7 @@ PetscVector operator*(const PetscMatrix& mat, const PetscVector& vec) { // Compatibility wrappers // For < 3.24 #if PETSC_VERSION_GE(3, 24, 0) \ - || (PETSC_VERSION_GE(3, 23, 0) && PETSC_VERSION_RELEASE != 0) + || (PETSC_VERSION_GE(3, 23, 0) && PETSC_VERSION_RELEASE == 0) // Nothing to do #else using MatFDColoringFn = PetscErrorCode (*)(); From 8e5a037b92f8a465a0bb00254ae7681725ae8565 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Tue, 17 Jun 2025 17:04:13 +0100 Subject: [PATCH 45/78] Move "maybe cast" macro to header for reuse --- include/bout/petsc_interface.hxx | 3 ++- src/solver/impls/imex-bdf2/imex-bdf2.cxx | 11 ++--------- src/solver/impls/snes/snes.cxx | 2 +- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/include/bout/petsc_interface.hxx b/include/bout/petsc_interface.hxx index 1538fb5b8e..a38938488c 100644 --- a/include/bout/petsc_interface.hxx +++ b/include/bout/petsc_interface.hxx @@ -619,9 +619,10 @@ PetscVector operator*(const PetscMatrix& mat, const PetscVector& vec) { // For < 3.24 #if PETSC_VERSION_GE(3, 24, 0) \ || (PETSC_VERSION_GE(3, 23, 0) && PETSC_VERSION_RELEASE == 0) -// Nothing to do +#define BOUT_CAST_MATFDCOLORINGFN(func) func #else using MatFDColoringFn = PetscErrorCode (*)(); +#define BOUT_CAST_MATFDCOLORINGFN(func) reinterpret_cast(func) #endif #endif // BOUT_HAS_PETSC diff --git a/src/solver/impls/imex-bdf2/imex-bdf2.cxx b/src/solver/impls/imex-bdf2/imex-bdf2.cxx index 3629965b87..f374d06356 100644 --- a/src/solver/impls/imex-bdf2/imex-bdf2.cxx +++ b/src/solver/impls/imex-bdf2/imex-bdf2.cxx @@ -655,15 +655,8 @@ void IMEXBDF2::constructSNES(SNES* snesIn) { // Create data structure for SNESComputeJacobianDefaultColor MatFDColoringCreate(Jmf, iscoloring, &fdcoloring); // Set the function to difference -#if PETSC_VERSION_GE(3, 24, 0) \ - || (PETSC_VERSION_GE(3, 23, 0) && PETSC_VERSION_RELEASE == 0) -#define FUNC_MAYBE_CAST(func) func -#else -#define FUNC_MAYBE_CAST(func) reinterpret_cast(func) -#endif - MatFDColoringSetFunction(fdcoloring, FUNC_MAYBE_CAST(FormFunctionForColoring), - this); -#undef FUNC_MAYBE_CAST + MatFDColoringSetFunction(fdcoloring, + BOUT_CAST_MATFDCOLORINGFN(FormFunctionForColoring), this); MatFDColoringSetFromOptions(fdcoloring); MatFDColoringSetUp(Jmf, iscoloring, fdcoloring); ISColoringDestroy(&iscoloring); diff --git a/src/solver/impls/snes/snes.cxx b/src/solver/impls/snes/snes.cxx index b1db03f80a..a2630ad56d 100644 --- a/src/solver/impls/snes/snes.cxx +++ b/src/solver/impls/snes/snes.cxx @@ -42,7 +42,7 @@ static PetscErrorCode FormFunctionForDifferencing(void* ctx, Vec x, Vec f) { * * This can be a linearised and simplified form of FormFunction */ -static PetscErrorCode FormFunctionForColoring(SNES UNUSED(snes), Vec x, Vec f, +static PetscErrorCode FormFunctionForColoring(void* UNUSED(snes), Vec x, Vec f, void* ctx) { return static_cast(ctx)->snes_function(x, f, true); } From b5aa5d0ea2fe8d656a4921573efbdfd34acdddeb Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Tue, 17 Jun 2025 18:08:05 +0100 Subject: [PATCH 46/78] Convert macro to constexpr template function Removes some clang-tidy warnings and silences one about reinterpret_cast --- include/bout/petsc_interface.hxx | 14 ++++++++++++-- src/solver/impls/imex-bdf2/imex-bdf2.cxx | 2 +- src/solver/impls/snes/snes.cxx | 5 ++--- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/include/bout/petsc_interface.hxx b/include/bout/petsc_interface.hxx index a38938488c..2e55534e68 100644 --- a/include/bout/petsc_interface.hxx +++ b/include/bout/petsc_interface.hxx @@ -619,10 +619,20 @@ PetscVector operator*(const PetscMatrix& mat, const PetscVector& vec) { // For < 3.24 #if PETSC_VERSION_GE(3, 24, 0) \ || (PETSC_VERSION_GE(3, 23, 0) && PETSC_VERSION_RELEASE == 0) -#define BOUT_CAST_MATFDCOLORINGFN(func) func +namespace bout { +template +constexpr auto cast_MatFDColoringFn(T func) { + return func; +} +} // namespace bout #else using MatFDColoringFn = PetscErrorCode (*)(); -#define BOUT_CAST_MATFDCOLORINGFN(func) reinterpret_cast(func) +namespace bout { +template +constexpr auto cast_MatFDColoringFn(T func) { + return reinterpret_cast(func); // NOLINT(*-reinterpret-cast) +} +} // namespace bout #endif #endif // BOUT_HAS_PETSC diff --git a/src/solver/impls/imex-bdf2/imex-bdf2.cxx b/src/solver/impls/imex-bdf2/imex-bdf2.cxx index f374d06356..dad9a8b3b0 100644 --- a/src/solver/impls/imex-bdf2/imex-bdf2.cxx +++ b/src/solver/impls/imex-bdf2/imex-bdf2.cxx @@ -656,7 +656,7 @@ void IMEXBDF2::constructSNES(SNES* snesIn) { MatFDColoringCreate(Jmf, iscoloring, &fdcoloring); // Set the function to difference MatFDColoringSetFunction(fdcoloring, - BOUT_CAST_MATFDCOLORINGFN(FormFunctionForColoring), this); + bout::cast_MatFDColoringFn(FormFunctionForColoring), this); MatFDColoringSetFromOptions(fdcoloring); MatFDColoringSetUp(Jmf, iscoloring, fdcoloring); ISColoringDestroy(&iscoloring); diff --git a/src/solver/impls/snes/snes.cxx b/src/solver/impls/snes/snes.cxx index a2630ad56d..a68aa43c38 100644 --- a/src/solver/impls/snes/snes.cxx +++ b/src/solver/impls/snes/snes.cxx @@ -585,9 +585,8 @@ int SNESSolver::init() { // Create data structure for SNESComputeJacobianDefaultColor MatFDColoringCreate(Jmf, iscoloring, &fdcoloring); // Set the function to difference - MatFDColoringSetFunction( - fdcoloring, reinterpret_cast(FormFunctionForColoring), - this); + MatFDColoringSetFunction(fdcoloring, + bout::cast_MatFDColoringFn(FormFunctionForColoring), this); MatFDColoringSetFromOptions(fdcoloring); MatFDColoringSetUp(Jmf, iscoloring, fdcoloring); ISColoringDestroy(&iscoloring); From 2d831da565f0af7628bbb8000b4c56cc8947e03a Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Wed, 18 Sep 2024 16:35:25 +0100 Subject: [PATCH 47/78] CI: Bump all ubuntu images --- .github/workflows/tests.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index c316ba4db1..e30f55e0c9 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -40,7 +40,7 @@ jobs: - ${{ github.event_name == 'cron' }} config: - name: "CMake, PETSc unreleased" - os: ubuntu-20.04 + os: ubuntu-24.04 cmake_options: "-DBUILD_SHARED_LIBS=ON -DBOUT_ENABLE_METRIC_3D=ON -DBOUT_ENABLE_OPENMP=ON @@ -55,13 +55,13 @@ jobs: build_petsc_branch: main on_cron: true - - name: "Default options, Ubuntu 20.04" - os: ubuntu-20.04 + - name: "Default options, Ubuntu 22.04" + os: ubuntu-22.04 cmake_options: "" on_cron: false - name: "Optimised, static" - os: ubuntu-20.04 + os: ubuntu-latest cmake_options: "-DCHECK=0 -DBUILD_SHARED_LIBS=OFF -DCMAKE_CXX_FLAGS=-Ofast @@ -75,7 +75,7 @@ jobs: on_cron: false - name: "Debug, shared" - os: ubuntu-20.04 + os: ubuntu-latest cmake_options: "-DCHECK=3 -DCMAKE_BUILD_TYPE=Debug -DBOUT_ENABLE_SIGNAL=ON @@ -86,8 +86,8 @@ jobs: -DSUNDIALS_ROOT=/home/runner/local" on_cron: false - - name: "Shared, release, Ubuntu 20.04" - os: ubuntu-20.04 + - name: "Shared, release" + os: ubuntu-latest cmake_options: "-DBUILD_SHARED_LIBS=ON -DBOUT_ENABLE_OPENMP=ON -DCMAKE_BUILD_TYPE=Release @@ -113,7 +113,7 @@ jobs: on_cron: false - name: "CMake, new PETSc" - os: ubuntu-20.04 + os: ubuntu-latest cmake_options: "-DBUILD_SHARED_LIBS=ON -DBOUT_ENABLE_METRIC_3D=ON -DBOUT_ENABLE_OPENMP=ON @@ -128,7 +128,7 @@ jobs: on_cron: false - name: "Coverage" - os: ubuntu-20.04 + os: ubuntu-latest cmake_options: "-DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Debug -DCHECK=3 From 4f6b48fe733b25ce0d9f24b0a13735571b9179cd Mon Sep 17 00:00:00 2001 From: David Bold Date: Tue, 24 Jun 2025 11:37:26 +0200 Subject: [PATCH 48/78] CI: require python3-boututils --- .ci_fedora.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci_fedora.sh b/.ci_fedora.sh index 77e7f45055..70ddbfb1ba 100755 --- a/.ci_fedora.sh +++ b/.ci_fedora.sh @@ -42,7 +42,7 @@ then echo "install_weak_deps=False" >> /etc/dnf/dnf.conf echo "minrate=10M" >> /etc/dnf/dnf.conf time dnf -y install dnf5 - time dnf5 -y install dnf5-plugins cmake python3-zoidberg python3-natsort + time dnf5 -y install dnf5-plugins cmake python3-zoidberg python3-natsort python3-boututils # Allow to override packages - see #2073 time dnf5 copr enable -y davidsch/fixes4bout || : time dnf5 -y upgrade From 9f6d7b003ad0f9e4891fa76714a20948f0010dbb Mon Sep 17 00:00:00 2001 From: David Bold Date: Tue, 24 Jun 2025 10:54:16 +0200 Subject: [PATCH 49/78] CI: Switch to released fedora Resolves: #3127 --- .github/workflows/tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index e30f55e0c9..d193337a28 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -229,8 +229,8 @@ jobs: - uses: actions/checkout@v4 with: submodules: true - - name: Build Fedora rawhide - run: ./.ci_fedora.sh setup openmpi rawhide + - name: Build Fedora + run: ./.ci_fedora.sh setup openmpi latest shell: bash env: TRAVIS_BUILD_DIR: ${{ github.workspace }} From 0dd6dfd1a37004ff4be195f1c0534d46716e3c23 Mon Sep 17 00:00:00 2001 From: David Bold Date: Thu, 5 Jun 2025 00:56:05 +0200 Subject: [PATCH 50/78] coloring for petsc solver is very likely broken --- src/solver/impls/petsc/petsc.cxx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/solver/impls/petsc/petsc.cxx b/src/solver/impls/petsc/petsc.cxx index 1b81ca36b6..b502fcef10 100644 --- a/src/solver/impls/petsc/petsc.cxx +++ b/src/solver/impls/petsc/petsc.cxx @@ -515,9 +515,7 @@ int PetscSolver::init() { CHKERRQ(ierr); ierr = ISColoringDestroy(&iscoloring); CHKERRQ(ierr); - ierr = MatFDColoringSetFunction(matfdcoloring, - reinterpret_cast(solver_f), this); - CHKERRQ(ierr); + throw BoutException("Coloring is not working"); ierr = SNESSetJacobian(snes, J, J, SNESComputeJacobianDefaultColor, matfdcoloring); CHKERRQ(ierr); From ced312785cd2586b86b0c31c54ba84ad2dde14e4 Mon Sep 17 00:00:00 2001 From: David Bold Date: Mon, 21 Oct 2024 14:13:10 +0200 Subject: [PATCH 51/78] Try to do the right thing for linking netCDF::netcdf --- CMakeLists.txt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 60d34e1ad7..55b84cd765 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -789,8 +789,15 @@ foreach (flag ${CONFIG_LDFLAGS_LIST}) # message("${flag} is a file") set(_CONFIG_LDFLAGS "${_CONFIG_LDFLAGS} ${flag}") else() - message("Fixing ${flag} to -l${flag}") - set(_CONFIG_LDFLAGS "${_CONFIG_LDFLAGS} -l${flag}") + string(FIND "${flag}" "::" hascolcol) + if (${hascolcol} EQUAL -1) + message("Fixing ${flag} to -l${flag}") + set(_CONFIG_LDFLAGS "${_CONFIG_LDFLAGS} -l${flag}") + else() + string(REGEX MATCH "[^:]*$" flag2 "${flag}") + message("Fixing ${flag} to -l${flag2}") + set(_CONFIG_LDFLAGS "${_CONFIG_LDFLAGS} -l${flag2}") + endif() endif() endif() endforeach() From 75768100b1dd4b7d55541d4c0cf0e65b2481e7ae Mon Sep 17 00:00:00 2001 From: Ben Dudson Date: Fri, 24 Jan 2025 11:23:42 -0800 Subject: [PATCH 52/78] Remove coverage test from github workflow --- .github/workflows/tests.yml | 34 ---------------------------------- 1 file changed, 34 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d193337a28..ede53ef20d 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -127,25 +127,7 @@ jobs: build_petsc: -petsc on_cron: false - - name: "Coverage" - os: ubuntu-latest - cmake_options: "-DBUILD_SHARED_LIBS=ON - -DCMAKE_BUILD_TYPE=Debug - -DCHECK=3 - -DENABLE_COVERAGE=ON - -DBOUT_USE_PETSC=ON - -DBOUT_USE_SLEPC=ON - -DBOUT_USE_HDF5=ON - -DBOUT_USE_SUNDIALS=ON - -DBOUT_ENABLE_PYTHON=ON - -DSUNDIALS_ROOT=/home/runner/local" - unit_only: YES - on_cron: false exclude: - # Don't run the coverage tests if the branch isn't master or next - - is_master_or_next: false - config: - name: "Coverage" - is_cron: true config: on_cron: false @@ -204,22 +186,6 @@ jobs: - name: Build BOUT++ run: UNIT_ONLY=${{ matrix.config.unit_only }} ./.ci_with_cmake.sh ${{ matrix.config.cmake_options }} - - name: Capture coverage - if: ${{ matrix.config.name == 'Coverage' }} - # Explicitly run the coverage capture target, because - # ci_script.sh also does the upload, and we're going to do - # that ourselves in the next step - run: | - # Ensure that there is a corresponding .gcda file for every .gcno file - # This is to try and make the coverage report slightly more accurate - # It still won't include, e.g. any solvers we don't build with though - find . -name "*.gcno" -exec sh -c 'touch -a "${1%.gcno}.gcda"' _ {} \; - make -C build code-coverage-capture - - - name: Upload coverage - if: ${{ matrix.config.name == 'Coverage' }} - uses: codecov/codecov-action@v5 - Fedora: # This is its own job as it doesn't use most of the steps of the # standard_tests From 8eafc089c623aa83ea3faba5d5afecae007e4c9a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Jun 2025 22:32:47 +0000 Subject: [PATCH 53/78] Bump externalpackages/boutdata from `a7a372d` to `7164a89` --- updated-dependencies: - dependency-name: externalpackages/boutdata dependency-version: 7164a89c16dba1049d42e1715506b988c0af5926 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- externalpackages/boutdata | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/externalpackages/boutdata b/externalpackages/boutdata index a7a372d5de..7164a89c16 160000 --- a/externalpackages/boutdata +++ b/externalpackages/boutdata @@ -1 +1 @@ -Subproject commit a7a372d5de7594cbe16381a3a82289ddaa58b6e7 +Subproject commit 7164a89c16dba1049d42e1715506b988c0af5926 From dc1d72d06b02068e44050c47e09fb32261b968d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 31 Jul 2025 19:03:34 +0000 Subject: [PATCH 54/78] Update pygithub requirement from ~=2.6 to ~=2.7 Updates the requirements on [pygithub](https://github.com/pygithub/pygithub) to permit the latest version. - [Release notes](https://github.com/pygithub/pygithub/releases) - [Changelog](https://github.com/PyGithub/PyGithub/blob/main/doc/changes.rst) - [Commits](https://github.com/pygithub/pygithub/compare/v2.6.0...v2.7.0) --- updated-dependencies: - dependency-name: pygithub dependency-version: 2.7.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements_maint.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_maint.txt b/requirements_maint.txt index e6ba00ce48..a5e94a0af5 100644 --- a/requirements_maint.txt +++ b/requirements_maint.txt @@ -1,3 +1,3 @@ -pygithub~=2.6 +pygithub~=2.7 ruamel-yaml~=0.18 Unidecode~=1.3 From b192b6a1690dd361b34d3c9a8b5e8265b7e912c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Aug 2025 02:47:33 +0000 Subject: [PATCH 55/78] Bump externalpackages/googletest from `bac6a8f` to `244cec8` Bumps [externalpackages/googletest](https://github.com/google/googletest) from `bac6a8f` to `244cec8`. - [Release notes](https://github.com/google/googletest/releases) - [Commits](https://github.com/google/googletest/compare/bac6a8fd8a729eef0d1b2d1a4625f4de62c60220...244cec869d12e53378fa0efb610cd4c32a454ec8) --- updated-dependencies: - dependency-name: externalpackages/googletest dependency-version: 244cec869d12e53378fa0efb610cd4c32a454ec8 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- externalpackages/googletest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/externalpackages/googletest b/externalpackages/googletest index bac6a8fd8a..244cec869d 160000 --- a/externalpackages/googletest +++ b/externalpackages/googletest @@ -1 +1 @@ -Subproject commit bac6a8fd8a729eef0d1b2d1a4625f4de62c60220 +Subproject commit 244cec869d12e53378fa0efb610cd4c32a454ec8 From 424a2e5282810cba6239627b93634be5bc3519c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Aug 2025 04:47:47 +0000 Subject: [PATCH 56/78] Bump actions/checkout from 4 to 5 Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/black-fix.yml | 2 +- .github/workflows/clang-format.yml | 2 +- .github/workflows/clang-tidy-review.yml | 2 +- .github/workflows/docker.yml | 2 +- .github/workflows/python-package.yml | 6 +++--- .github/workflows/tests.yml | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/black-fix.yml b/.github/workflows/black-fix.yml index 92866dfcc2..6c1bfed4a5 100644 --- a/.github/workflows/black-fix.yml +++ b/.github/workflows/black-fix.yml @@ -20,7 +20,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: ref: ${{ github.head_ref }} diff --git a/.github/workflows/clang-format.yml b/.github/workflows/clang-format.yml index 87f1947802..ed60dc9631 100644 --- a/.github/workflows/clang-format.yml +++ b/.github/workflows/clang-format.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: # Checkout the pull request branch, also include all history - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: ref: ${{ github.head_ref }} fetch-depth: 0 diff --git a/.github/workflows/clang-tidy-review.yml b/.github/workflows/clang-tidy-review.yml index 9746075b1a..433204e492 100644 --- a/.github/workflows/clang-tidy-review.yml +++ b/.github/workflows/clang-tidy-review.yml @@ -17,7 +17,7 @@ jobs: review: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: true diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index a1dac41a6b..1380d0ea8e 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -52,7 +52,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Log in to the Container registry uses: docker/login-action@master diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index ea68e58c12..5a788f9eb0 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -17,7 +17,7 @@ jobs: if: always() steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 0 submodules: true @@ -57,7 +57,7 @@ jobs: if: always() steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 0 submodules: true @@ -106,7 +106,7 @@ jobs: if: always() steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 0 submodules: true diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index ede53ef20d..aa3db3adc1 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -158,7 +158,7 @@ jobs: liblapack-dev libparpack2-dev - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: true @@ -192,7 +192,7 @@ jobs: timeout-minutes: 60 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: true - name: Build Fedora From fd49f9bb3f169c5627160027f6024a8ce2d1b3a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Sep 2025 13:50:04 +0000 Subject: [PATCH 57/78] Update pygithub requirement from ~=2.7 to ~=2.8 Updates the requirements on [pygithub](https://github.com/pygithub/pygithub) to permit the latest version. - [Release notes](https://github.com/pygithub/pygithub/releases) - [Changelog](https://github.com/PyGithub/PyGithub/blob/main/doc/changes.rst) - [Commits](https://github.com/pygithub/pygithub/compare/v2.7.0...v2.8.1) --- updated-dependencies: - dependency-name: pygithub dependency-version: 2.8.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements_maint.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_maint.txt b/requirements_maint.txt index a5e94a0af5..b1d9db5ff8 100644 --- a/requirements_maint.txt +++ b/requirements_maint.txt @@ -1,3 +1,3 @@ -pygithub~=2.7 +pygithub~=2.8 ruamel-yaml~=0.18 Unidecode~=1.3 From a0657ef4b6bcca6e61b04a18d1af958735cae11e Mon Sep 17 00:00:00 2001 From: David Bold Date: Thu, 4 Sep 2025 12:50:09 +0200 Subject: [PATCH 58/78] Remove License-File, add License and README --- tools/pylib/_boutpp_build/backend.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tools/pylib/_boutpp_build/backend.py b/tools/pylib/_boutpp_build/backend.py index 0c1e611a2f..c04f5111fc 100755 --- a/tools/pylib/_boutpp_build/backend.py +++ b/tools/pylib/_boutpp_build/backend.py @@ -216,9 +216,16 @@ def build_sdist(sdist_directory, config_settings=None): f"""Metadata-Version: 2.1 Name: {pkgname} Version: {getversion()} -License-File: COPYING """ ) + with open("LICENSE") as src: + pre = "License:" + for l in src: + f.write(f"{pre}{l}\n") + pre = " " + f.write("\n\n") + with open("README.md") as src: + f.write(src.read()) run( f"tar --append -f {sdist_directory}/{fname} _version.txt --xform='s\\_version.txt\\{prefix}/_version.txt\\'" ) From d01957421d8313d03d1d8f3ae8dec340204d8ca5 Mon Sep 17 00:00:00 2001 From: David Bold Date: Thu, 4 Sep 2025 13:17:43 +0200 Subject: [PATCH 59/78] Fix spacing --- tools/pylib/_boutpp_build/backend.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/pylib/_boutpp_build/backend.py b/tools/pylib/_boutpp_build/backend.py index c04f5111fc..f854c4582f 100755 --- a/tools/pylib/_boutpp_build/backend.py +++ b/tools/pylib/_boutpp_build/backend.py @@ -219,10 +219,10 @@ def build_sdist(sdist_directory, config_settings=None): """ ) with open("LICENSE") as src: - pre = "License:" + pre = "License: " for l in src: - f.write(f"{pre}{l}\n") - pre = " " + f.write(f"{pre}{l}") + pre = " " f.write("\n\n") with open("README.md") as src: f.write(src.read()) From 7f79d21f82a27a050529bf5bcaa577a987112e96 Mon Sep 17 00:00:00 2001 From: David Bold Date: Thu, 4 Sep 2025 13:19:49 +0200 Subject: [PATCH 60/78] Add content type --- tools/pylib/_boutpp_build/backend.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/pylib/_boutpp_build/backend.py b/tools/pylib/_boutpp_build/backend.py index f854c4582f..6fd21c1506 100755 --- a/tools/pylib/_boutpp_build/backend.py +++ b/tools/pylib/_boutpp_build/backend.py @@ -223,7 +223,7 @@ def build_sdist(sdist_directory, config_settings=None): for l in src: f.write(f"{pre}{l}") pre = " " - f.write("\n\n") + f.write("\nDescription-Content-Type: text/markdown\n\n") with open("README.md") as src: f.write(src.read()) run( From af37dff14f1875ad2ace70f3f260a246dc8ec010 Mon Sep 17 00:00:00 2001 From: David Bold Date: Thu, 4 Sep 2025 13:22:32 +0200 Subject: [PATCH 61/78] Fix spacing --- tools/pylib/_boutpp_build/backend.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/pylib/_boutpp_build/backend.py b/tools/pylib/_boutpp_build/backend.py index 6fd21c1506..f105fadceb 100755 --- a/tools/pylib/_boutpp_build/backend.py +++ b/tools/pylib/_boutpp_build/backend.py @@ -223,7 +223,7 @@ def build_sdist(sdist_directory, config_settings=None): for l in src: f.write(f"{pre}{l}") pre = " " - f.write("\nDescription-Content-Type: text/markdown\n\n") + f.write("Description-Content-Type: text/markdown\n\n") with open("README.md") as src: f.write(src.read()) run( From 921901511a8f5ffefe1144a8c63697d797aec4de Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Sep 2025 19:40:35 +0000 Subject: [PATCH 62/78] Bump actions/setup-python from 5 to 6 Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/setup-python dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/python-package.yml | 6 +++--- .github/workflows/tests.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 5a788f9eb0..fc5e84662c 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -22,7 +22,7 @@ jobs: fetch-depth: 0 submodules: true - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 - name: Install dependencies run: python -m pip install --upgrade pip && pip install --upgrade build && @@ -62,7 +62,7 @@ jobs: fetch-depth: 0 submodules: true - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 - name: Install dependencies run: python -m pip install --upgrade pip && pip install --upgrade build && @@ -111,7 +111,7 @@ jobs: fetch-depth: 0 submodules: true - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 - name: Install dependencies run: python -m pip install --upgrade pip && pip install --upgrade build && diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index aa3db3adc1..0d73948d45 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -162,7 +162,7 @@ jobs: with: submodules: true - - uses: actions/setup-python@v5 + - uses: actions/setup-python@v6 with: python-version: '3.x' From cfb22cfbd4ad82cad5e820f68ae6301e782a1a18 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Mon, 6 Oct 2025 10:19:23 +0100 Subject: [PATCH 63/78] Update translations --- locale/de/libbout.po | 346 +++++++++++++++++++++------------------- locale/es/libbout.po | 344 ++++++++++++++++++++------------------- locale/fr/libbout.po | 330 +++++++++++++++++++------------------- locale/libbout.pot | 326 ++++++++++++++++++------------------- locale/zh_CN/libbout.po | 334 +++++++++++++++++++------------------- locale/zh_TW/libbout.po | 346 ++++++++++++++++++++-------------------- 6 files changed, 1031 insertions(+), 995 deletions(-) diff --git a/locale/de/libbout.po b/locale/de/libbout.po index 0e0773b5db..242beb45ca 100644 --- a/locale/de/libbout.po +++ b/locale/de/libbout.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: BOUT++ 4.2.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-12 09:17+0100\n" +"POT-Creation-Date: 2025-08-13 23:37+0100\n" "PO-Revision-Date: 2019-02-06 17:32+0000\n" "Last-Translator: David \n" "Language-Team: German\n" @@ -18,7 +18,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.2.1\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:191 +#: ../src/mesh/impls/bout/boutmesh.cxx:182 #, fuzzy, c++-format msgid "" "\t -> Core region jyseps2_1-jyseps1_1 ({:d}-{:d} = {:d}) must be a multiple " @@ -27,7 +27,7 @@ msgstr "" "\t -> `Core` Region iyseps2_1-iyseps1_1 ({:d}-{:d} = {:d}) muss ein " "Vielfaches von MYSUB ({:d}) sein\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:224 +#: ../src/mesh/impls/bout/boutmesh.cxx:215 #, fuzzy, c++-format msgid "" "\t -> Core region jyseps2_2-jyseps1_1 ({:d}-{:d} = {:d}) must be a multiple " @@ -36,7 +36,7 @@ msgstr "" "\t -> `Core` Region jyseps2_2-jyseps1_1 ({:d}-{:d} = {:d}) muss ein " "Vielfaches von MYSUB ({:d}) sein\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:199 +#: ../src/mesh/impls/bout/boutmesh.cxx:190 #, fuzzy, c++-format msgid "" "\t -> Core region jyseps2_2-jyseps1_2 ({:d}-{:d} = {:d}) must be a multiple " @@ -45,11 +45,11 @@ msgstr "" "\t -> `Core` Region jyseps2_2-jyseps1_2 ({:d}-{:d} = {:d}) muss ein " "Vielfaches von MYSUB ({:d}) sein\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:309 +#: ../src/mesh/impls/bout/boutmesh.cxx:300 msgid "\t -> Good value\n" msgstr "\t -> Wert OK\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:180 +#: ../src/mesh/impls/bout/boutmesh.cxx:171 #, fuzzy, c++-format msgid "" "\t -> Leg region jyseps1_1+1 ({:d}) must be a multiple of MYSUB ({:d})\n" @@ -57,7 +57,7 @@ msgstr "" "\t -> `Leg` Region jyseps1_1+1 ({:d}) muss ein Vielfaches von MYSUB ({:d}) " "sein\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:215 +#: ../src/mesh/impls/bout/boutmesh.cxx:206 #, fuzzy, c++-format msgid "" "\t -> leg region jyseps1_2-ny_inner+1 ({:d}-{:d}+1 = {:d}) must be a " @@ -66,7 +66,7 @@ msgstr "" "\t -> `Leg` Region jyseps1_2-ny_inner+1 ({:d}-{:d}+1 = {:d}) muss ein " "Vielfaches von MYSUB ({:d}) sein\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:232 +#: ../src/mesh/impls/bout/boutmesh.cxx:223 #, fuzzy, c++-format msgid "" "\t -> leg region ny-jyseps2_2-1 ({:d}-{:d}-1 = {:d}) must be a multiple of " @@ -75,7 +75,7 @@ msgstr "" "\t -> `Leg` Region ny-jyseps2_2-1 ({:d}-{:d}-1 = {:d}) muss ein Vielfaches " "von MYSUB ({:d}) sein\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:208 +#: ../src/mesh/impls/bout/boutmesh.cxx:199 #, fuzzy, c++-format msgid "" "\t -> leg region ny_inner-jyseps2_1-1 ({:d}-{:d}-1 = {:d}) must be a " @@ -84,12 +84,17 @@ msgstr "" "\t -> `Leg` Region ny_inner-jyseps2_1-1 ({:d}-{:d}-1 = {:d}) muss ein " "Vielfaches von MYSUB ({:d}) sein\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:175 +#: ../src/mesh/impls/bout/boutmesh.cxx:166 #, fuzzy, c++-format msgid "\t -> ny/NYPE ({:d}/{:d} = {:d}) must be >= MYG ({:d})\n" msgstr "\t -> ny/NYPE ({:d}/{:d} = {:d}) muss >= MYG ({:d}) sein\n" #: ../src/bout++.cxx:575 +#, fuzzy, c++-format +msgid "\tADIOS2 support {}\n" +msgstr "\tNetCDF Unterstützung ist aktiviert\n" + +#: ../src/bout++.cxx:583 #, c++-format msgid "\tBacktrace in exceptions {}\n" msgstr "" @@ -98,28 +103,28 @@ msgstr "" #. Processors divide equally #. Mesh in X divides equally #. Mesh in Y divides equally -#: ../src/mesh/impls/bout/boutmesh.cxx:297 +#: ../src/mesh/impls/bout/boutmesh.cxx:288 #, fuzzy, c++-format msgid "\tCandidate value: {:d}\n" msgstr "\tzu überprüfender Wert: {:d}\n" -#: ../src/bout++.cxx:576 +#: ../src/bout++.cxx:584 #, c++-format msgid "\tColour in logs {}\n" msgstr "" -#: ../src/bout++.cxx:594 +#: ../src/bout++.cxx:599 msgid "\tCommand line options for this run : " msgstr "\tKommandozeilenoptionen für diese Ausführung: " #. The stringify is needed here as BOUT_FLAGS_STRING may already contain quoted strings #. which could cause problems (e.g. terminate strings). -#: ../src/bout++.cxx:590 +#: ../src/bout++.cxx:595 #, fuzzy, c++-format msgid "\tCompiled with flags : {:s}\n" msgstr "\tWurde kompiliert mit den Optionen : {:s}\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:324 +#: ../src/mesh/impls/bout/boutmesh.cxx:315 #, fuzzy, c++-format msgid "" "\tDomain split (NXPE={:d}, NYPE={:d}) into domains (localNx={:d}, " @@ -128,14 +133,14 @@ msgstr "" "\tDas Gebiet wird in NXPE={:d} mal NYPE={:d} Gebiete der Größe localNx={:d} " "mal localNy={:d} aufgeteilt\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:364 +#: ../src/mesh/impls/bout/boutmesh.cxx:357 #, fuzzy, c++-format msgid "\tERROR: Cannot split {:d} Y points equally between {:d} processors\n" msgstr "" "\tFEHLER: {:d} Punkte in der Y-Richtung können nicht gleichmässig zwischen " "{:d} Prozessen verteilt werden\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:372 +#: ../src/mesh/impls/bout/boutmesh.cxx:365 #, fuzzy, c++-format msgid "\tERROR: Cannot split {:d} Z points equally between {:d} processors\n" msgstr "" @@ -156,31 +161,31 @@ msgstr "" msgid "\tEmpty key or value in command line '{:s}'\n" msgstr "\tSchlüssel (Key) oder Wert nicht gesetzt in der Befehlszeile '{:s}'\n" -#: ../src/bout++.cxx:582 +#: ../src/bout++.cxx:587 #, c++-format msgid "\tExtra debug output {}\n" msgstr "" -#: ../src/bout++.cxx:561 +#: ../src/bout++.cxx:568 #, fuzzy, c++-format msgid "\tFFT support {}\n" msgstr "\tNetCDF Unterstützung ist aktiviert\n" -#: ../src/bout++.cxx:585 +#: ../src/bout++.cxx:590 #, c++-format msgid "\tField name tracking {}\n" msgstr "" -#: ../src/bout++.cxx:583 +#: ../src/bout++.cxx:588 #, c++-format msgid "\tFloating-point exceptions {}\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:440 +#: ../src/mesh/impls/bout/boutmesh.cxx:476 msgid "\tGrid size: " msgstr "\tGittergröße: " -#: ../src/mesh/impls/bout/boutmesh.cxx:463 +#: ../src/mesh/impls/bout/boutmesh.cxx:499 #, fuzzy msgid "\tGuard cells (x,y,z): " msgstr "\tGuardzellen (x,y): " @@ -194,17 +199,17 @@ msgstr "" "\tDer Schlüssel darf nicht ':' enthalten\n" "\tZeile: {:s}" -#: ../src/bout++.cxx:563 +#: ../src/bout++.cxx:570 #, c++-format msgid "\tLAPACK support {}\n" msgstr "" -#: ../src/bout++.cxx:586 +#: ../src/bout++.cxx:591 #, c++-format msgid "\tMessage stack {}\n" msgstr "" -#: ../src/bout++.cxx:560 +#: ../src/bout++.cxx:567 #, c++-format msgid "\tMetrics mode is {}\n" msgstr "" @@ -214,98 +219,94 @@ msgstr "" msgid "\tMultiple '=' in command-line argument '{:s}'\n" msgstr "\t'=' darf nicht mehrfach vorkommen: '{:s}'\n" -#: ../src/bout++.cxx:562 +#: ../src/bout++.cxx:569 #, c++-format msgid "\tNatural language support {}\n" msgstr "" -#: ../src/bout++.cxx:567 +#: ../src/bout++.cxx:574 #, fuzzy, c++-format msgid "\tNetCDF support {}{}\n" msgstr "\tNetCDF Unterstützung ist aktiviert\n" -#: ../src/bout++.cxx:577 +#: ../src/bout++.cxx:585 #, fuzzy, c++-format -msgid "\tOpenMP parallelisation {}" -msgstr "\tOpenMP Parallelisierung ist deaktiviert\n" +msgid "\tOpenMP parallelisation {}, using {} threads\n" +msgstr "\tOpenMP Parallelisierung mit {:d} Threads ist aktiviert\n" #. Mark the option as used #. Option not found -#: ../src/sys/options.cxx:311 ../src/sys/options.cxx:380 -#: ../src/sys/options.cxx:415 ../src/sys/options.cxx:457 -#: ../src/sys/options.cxx:717 ../src/sys/options.cxx:744 -#: ../src/sys/options.cxx:771 ../include/bout/options.hxx:516 -#: ../include/bout/options.hxx:549 ../include/bout/options.hxx:573 -#: ../include/bout/options.hxx:820 +#: ../include/bout/options.hxx:586 ../include/bout/options.hxx:619 +#: ../include/bout/options.hxx:643 ../include/bout/options.hxx:896 msgid "\tOption " msgstr "\tOption " -#: ../src/sys/options.cxx:447 +#: ../src/sys/options.cxx:369 #, fuzzy, c++-format -msgid "\tOption '{:s}': Boolean expected. Got '{:s}'\n" -msgstr "\tOption '{:s}': Boolscherwert erwartet, '{:s}' gefunden\n" +msgid "\tOption {} = {}" +msgstr "\tOption " #: ../src/sys/options/options_ini.cxx:70 #, fuzzy, c++-format msgid "\tOptions file '{:s}' not found\n" msgstr "\tDie Optionendatei '{:s}' konnte nicht gefunden werden\n" -#: ../src/bout++.cxx:568 +#: ../src/bout++.cxx:576 #, c++-format msgid "\tPETSc support {}\n" msgstr "" -#: ../src/bout++.cxx:571 +#: ../src/bout++.cxx:579 #, c++-format msgid "\tPVODE support {}\n" msgstr "" -#: ../src/bout++.cxx:557 +#: ../src/bout++.cxx:564 msgid "\tParallel NetCDF support disabled\n" msgstr "\tParallele-NetCDF Unterstützung ist deaktiviert\n" -#: ../src/bout++.cxx:555 +#: ../src/bout++.cxx:562 msgid "\tParallel NetCDF support enabled\n" msgstr "\tParllele-NetCDF Unterstützung ist aktiviert\n" -#: ../src/bout++.cxx:569 +#: ../src/bout++.cxx:577 #, c++-format msgid "\tPretty function name support {}\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:437 +#: ../src/mesh/impls/bout/boutmesh.cxx:473 msgid "\tRead nz from input grid file\n" msgstr "\tnz wird von der Griddatei gelesen\n" -#: ../src/mesh/mesh.cxx:238 +#: ../src/mesh/mesh.cxx:249 msgid "\tReading contravariant vector " msgstr "\tKontravariantevektoren werden gelesen " -#: ../src/mesh/mesh.cxx:231 ../src/mesh/mesh.cxx:252 +#: ../src/mesh/mesh.cxx:242 ../src/mesh/mesh.cxx:263 msgid "\tReading covariant vector " msgstr "\tKovariantevektoren werden gelesen " -#: ../src/bout++.cxx:548 +#: ../src/bout++.cxx:555 #, c++-format msgid "\tRuntime error checking {}" msgstr "" -#: ../src/bout++.cxx:573 +#: ../src/bout++.cxx:581 #, c++-format msgid "\tSLEPc support {}\n" msgstr "" -#: ../src/bout++.cxx:574 +#: ../src/bout++.cxx:582 #, c++-format msgid "\tSUNDIALS support {}\n" msgstr "" -#: ../src/bout++.cxx:572 +#: ../src/bout++.cxx:580 #, c++-format msgid "\tScore-P support {}\n" msgstr "" -#: ../src/bout++.cxx:584 +#: ../src/bout++.cxx:589 #, fuzzy, c++-format msgid "\tSignal handling support {}\n" msgstr "\tSignalverarbeitung ist deaktiviert\n" @@ -315,7 +316,7 @@ msgstr "\tSignalverarbeitung ist deaktiviert\n" msgid "\tUsing a timestep {:e}\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:577 +#: ../src/mesh/impls/bout/boutmesh.cxx:613 msgid "\tdone\n" msgstr "\tfertig\n" @@ -325,7 +326,7 @@ msgid "" "\tSplit Runge-Kutta-Legendre and SSP-RK3 solver\n" msgstr "" -#: ../src/bout++.cxx:371 +#: ../src/bout++.cxx:378 #, fuzzy msgid "" "\n" @@ -345,7 +346,7 @@ msgstr "" " -v, --verbose\t\tWortreicherer Ausgabe\n" " -q, --quiet\t\tNur wichtigere Ausgaben anzeigen\n" -#: ../src/sys/expressionparser.cxx:302 +#: ../src/sys/expressionparser.cxx:341 #, c++-format msgid "" "\n" @@ -353,7 +354,7 @@ msgid "" " Did you mean '{0}'?" msgstr "" -#: ../src/solver/solver.cxx:580 +#: ../src/solver/solver.cxx:586 #, fuzzy, c++-format msgid "" "\n" @@ -362,7 +363,7 @@ msgstr "" "\n" "Simulation beendet um {:s}\n" -#: ../src/solver/solver.cxx:532 +#: ../src/solver/solver.cxx:540 #, fuzzy, c++-format msgid "" "\n" @@ -374,7 +375,7 @@ msgstr "" #. Raw string to help with the formatting of the message, and a #. separate variable so clang-format doesn't barf on the #. exception -#: ../src/sys/options.cxx:1102 +#: ../src/sys/options.cxx:1158 msgid "" "\n" "There were unused input options:\n" @@ -402,7 +403,7 @@ msgid "" "{}" msgstr "" -#: ../src/bout++.cxx:382 +#: ../src/bout++.cxx:389 #, c++-format msgid "" " --print-config\t\tPrint the compile-time configuration\n" @@ -435,60 +436,60 @@ msgid "" "model source (e.g. {:s}.cxx)\n" msgstr "" -#: ../src/bout++.cxx:379 +#: ../src/bout++.cxx:386 #, fuzzy msgid " -c, --color\t\t\tColor output using bout-log-color\n" msgstr " -c, --color\t\tFarbliche Ausgabe mit bout-log-color\n" -#: ../include/bout/options.hxx:823 +#: ../include/bout/options.hxx:899 #, fuzzy msgid ") overwritten with:" msgstr ") überschrieben mit {:s}" -#: ../src/bout++.cxx:550 +#: ../src/bout++.cxx:557 #, c++-format msgid ", level {}" msgstr "" -#: ../src/bout++.cxx:579 -#, c++-format -msgid ", using {} threads" -msgstr "" - #: ../tests/unit/src/test_bout++.cxx:352 msgid "4 of 8" msgstr "" -#: ../src/sys/options.cxx:868 +#: ../src/sys/options.cxx:895 msgid "All options used\n" msgstr "Alle genutzten Optionen\n" -#: ../src/bout++.cxx:528 +#: ../src/bout++.cxx:535 #, fuzzy, c++-format msgid "BOUT++ version {:s}\n" msgstr "BOUT++ Version {:s}\n" -#: ../src/bout++.cxx:143 +#: ../src/bout++.cxx:147 #, fuzzy msgid "Bad command line arguments:\n" msgstr "\t'=' darf nicht mehrfach vorkommen: '{:s}'\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:559 +#: ../src/sys/expressionparser.cxx:192 +#, c++-format +msgid "Boolean operator argument {:e} is not a bool" +msgstr "" + +#: ../src/mesh/impls/bout/boutmesh.cxx:595 msgid "Boundary regions in this processor: " msgstr "Randgebiete auf diesem Prozessor: " -#: ../src/mesh/impls/bout/boutmesh.cxx:355 +#: ../src/mesh/impls/bout/boutmesh.cxx:348 #, fuzzy, c++-format msgid "Cannot split {:d} X points equally between {:d} processors\n" msgstr "" "{:d} Punkte in der X-Richtung können nicht gleichmässig zwischen {:d} " "Prozessen verteilt werden\n" -#: ../src/bout++.cxx:818 +#: ../src/bout++.cxx:829 msgid "Check if a file exists, and exit if it does." msgstr "" -#: ../src/bout++.cxx:533 +#: ../src/bout++.cxx:540 #, fuzzy, c++-format msgid "" "Code compiled on {:s} at {:s}\n" @@ -501,7 +502,7 @@ msgstr "" msgid "Command line" msgstr "Befehlszeile" -#: ../src/bout++.cxx:544 ../tests/unit/src/test_bout++.cxx:358 +#: ../src/bout++.cxx:551 ../tests/unit/src/test_bout++.cxx:358 msgid "Compile-time options:\n" msgstr "Kompiliert mit:\n" @@ -510,16 +511,16 @@ msgstr "Kompiliert mit:\n" msgid "Compiled with flags" msgstr "\tWurde kompiliert mit den Optionen : {:s}\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:568 +#: ../src/mesh/impls/bout/boutmesh.cxx:604 msgid "Constructing default regions" msgstr "Standardregionen werden erstellt" -#: ../src/bout++.cxx:520 +#: ../src/bout++.cxx:527 #, fuzzy, c++-format msgid "Could not create PID file {:s}" msgstr "Die Ausgabedatei '{:s}' konnte nicht geöffnet werden\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:318 +#: ../src/mesh/impls/bout/boutmesh.cxx:309 msgid "" "Could not find a valid value for NXPE. Try a different number of processors." msgstr "" @@ -531,32 +532,32 @@ msgstr "" msgid "Could not open output file '{:s}'\n" msgstr "Die Ausgabedatei '{:s}' konnte nicht geöffnet werden\n" -#: ../src/bout++.cxx:652 +#: ../src/bout++.cxx:657 #, c++-format msgid "Could not open {:s}/{:s}.{:d} for writing" msgstr "" #. Error reading -#: ../src/mesh/mesh.cxx:532 +#: ../src/mesh/mesh.cxx:543 #, fuzzy, c++-format msgid "Could not read integer array '{:s}'\n" msgstr "Der Ganzzahlen-Array '{:s}' konnte nicht gelesen werden\n" #. Failed . Probably not important enough to stop the simulation -#: ../src/bout++.cxx:632 +#: ../src/bout++.cxx:637 msgid "Could not run bout-log-color. Make sure it is in your PATH\n" msgstr "" "Der Befehl 'bout-log-color' konnte nicht ausgeführt werden. Stellen Sie " "sicher, dass er sich in $PATH befindet.\n" -#: ../src/solver/solver.cxx:765 +#: ../src/solver/solver.cxx:772 #, fuzzy, c++-format msgid "Couldn't add Monitor: {:g} is not a multiple of {:g}!" msgstr "" "'Monitor' konnte nicht hinzugefügt werden: {:g} ist nicht ein Vielfaches von " "{:g}!" -#: ../src/sys/expressionparser.cxx:273 +#: ../src/sys/expressionparser.cxx:312 #, c++-format msgid "" "Couldn't find generator '{}'. BOUT++ expressions are now case-sensitive, so " @@ -565,73 +566,73 @@ msgid "" "{}" msgstr "" -#: ../src/mesh/mesh.cxx:568 +#: ../src/mesh/mesh.cxx:587 #, fuzzy, c++-format msgid "Couldn't find region {:s} in regionMap2D" msgstr "Die Region '{:s}' ist nicht in regionMap2D" -#: ../src/mesh/mesh.cxx:560 +#: ../src/mesh/mesh.cxx:571 ../src/mesh/mesh.cxx:579 #, fuzzy, c++-format msgid "Couldn't find region {:s} in regionMap3D" msgstr "Die Region '{:s}' ist nicht in regionMap3D" -#: ../src/mesh/mesh.cxx:576 +#: ../src/mesh/mesh.cxx:595 #, fuzzy, c++-format msgid "Couldn't find region {:s} in regionMapPerp" msgstr "Die Region '{:s}' ist nicht in regionMapPerp" #. Convert any exceptions to something a bit more useful -#: ../src/sys/options.cxx:336 +#: ../src/sys/options.cxx:361 #, fuzzy, c++-format msgid "Couldn't get {} from option {:s} = '{:s}': {}" msgstr "" "Die Option {:s} = '{:s}' konnte nicht als ganze Zahl interpretiert werden." -#: ../src/bout++.cxx:508 +#: ../src/bout++.cxx:515 #, fuzzy, c++-format msgid "DataDir \"{:s}\" does not exist or is not accessible\n" msgstr "Der Datenordner \"{:s}\" existiert nicht oder ist nicht lesbar\n" -#: ../src/bout++.cxx:505 +#: ../src/bout++.cxx:512 #, fuzzy, c++-format msgid "DataDir \"{:s}\" is not a directory\n" msgstr "" "\"{:s}\" soll als Datenordner verwendet werden, ist jedoch kein Ordner\n" -#: ../src/solver/solver.cxx:665 +#: ../src/solver/solver.cxx:671 msgid "ERROR: Solver is already initialised\n" msgstr "FEHLER: Der Integrator ist bereits initialisiert.\n" -#: ../src/bout++.cxx:209 +#: ../src/bout++.cxx:216 #, fuzzy, c++-format msgid "Error encountered during initialisation: {:s}\n" msgstr "Es wurde ein Fehler während der Initialisierung gefunden: {:s}\n" -#: ../src/bout++.cxx:744 +#: ../src/bout++.cxx:751 msgid "Error whilst writing settings" msgstr "Es wurde ein Fehler beim Schreiben der Einstellungsdatei gefunden" -#: ../src/mesh/impls/bout/boutmesh.cxx:332 +#: ../src/mesh/impls/bout/boutmesh.cxx:323 #, fuzzy, c++-format msgid "Error: nx must be greater than 2 times MXG (2 * {:d})" msgstr "Fehler: nx muss größer als 2 mal MXG sein (2 * {:d})" -#: ../src/solver/solver.cxx:512 +#: ../src/solver/solver.cxx:520 msgid "Failed to initialise solver-> Aborting\n" msgstr "" "Der Integrator konnte nicht initialisiert werden. Der Prozess wird " "abgebrochen\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:290 +#: ../src/mesh/impls/bout/boutmesh.cxx:281 #, fuzzy, c++-format msgid "Finding value for NXPE (ideal = {:f})\n" msgstr "Suche NXPE Wert (optimal = {:f})\n" -#: ../src/solver/solver.cxx:668 +#: ../src/solver/solver.cxx:674 msgid "Initialising solver\n" msgstr "initialisiere den Integrator\n" -#: ../src/bout++.cxx:494 +#: ../src/bout++.cxx:501 msgid "" "Input and output file for settings must be different.\n" "Provide -o to avoid this issue.\n" @@ -644,48 +645,48 @@ msgstr "" msgid "Invalid command line option '-' found - maybe check whitespace?" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:400 +#: ../src/mesh/impls/bout/boutmesh.cxx:436 msgid "Loading mesh" msgstr "Lade das Gitter" -#: ../src/mesh/impls/bout/boutmesh.cxx:415 +#: ../src/mesh/impls/bout/boutmesh.cxx:451 msgid "Mesh must contain nx" msgstr "Das Gitter muss nx enthalten" -#: ../src/mesh/impls/bout/boutmesh.cxx:419 +#: ../src/mesh/impls/bout/boutmesh.cxx:455 msgid "Mesh must contain ny" msgstr "Das Gitter muss ny enthalten" #. Not found -#: ../src/mesh/mesh.cxx:536 +#: ../src/mesh/mesh.cxx:547 #, fuzzy, c++-format msgid "Missing integer array {:s}\n" msgstr "Ganzzahlen-Array '{:s}' nicht gesetzt\n" -#: ../src/solver/solver.cxx:905 +#: ../src/solver/solver.cxx:911 #, fuzzy, c++-format msgid "Monitor signalled to quit (exception {})\n" msgstr "Beendigung durch Monitor\n" -#: ../src/solver/solver.cxx:883 +#: ../src/solver/solver.cxx:889 #, fuzzy, c++-format msgid "Monitor signalled to quit (return code {})" msgstr "Der Monitor signaliserte die Beendigung" -#: ../src/bout++.cxx:823 +#: ../src/bout++.cxx:834 msgid "Name of file whose existence triggers a stop" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:565 +#: ../src/mesh/impls/bout/boutmesh.cxx:601 msgid "No boundary regions in this processor" msgstr "Keine Randregionen auf diesem Prozessor" -#: ../src/mesh/impls/bout/boutmesh.cxx:550 +#: ../src/mesh/impls/bout/boutmesh.cxx:586 #, fuzzy msgid "No boundary regions; domain is periodic\n" msgstr "Keine Randregionen auf diesem Prozessor" -#: ../src/mesh/impls/bout/boutmesh.cxx:254 +#: ../src/mesh/impls/bout/boutmesh.cxx:245 #, fuzzy, c++-format msgid "" "Number of processors ({:d}) not divisible by NPs in x direction ({:d})\n" @@ -693,7 +694,7 @@ msgstr "" "Anzahl an Prozessoren ({:d}) nicht teilbar durch Anzahl in x Richtung " "({:d})\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:267 +#: ../src/mesh/impls/bout/boutmesh.cxx:258 #, fuzzy, c++-format msgid "" "Number of processors ({:d}) not divisible by NPs in y direction ({:d})\n" @@ -702,26 +703,26 @@ msgstr "" "({:d})\n" #. Less than 2 time-steps left -#: ../src/bout++.cxx:896 +#: ../src/bout++.cxx:908 #, fuzzy, c++-format msgid "Only {:e} seconds ({:.2f} steps) left. Quitting\n" msgstr "Nur noch {:e} Sekunden verfügbar. Abbruch\n" -#: ../src/sys/options.cxx:303 ../src/sys/options.cxx:345 -#: ../src/sys/options.cxx:393 ../src/sys/options.cxx:428 -#: ../src/sys/options.cxx:703 ../src/sys/options.cxx:730 -#: ../src/sys/options.cxx:757 +#: ../src/sys/options.cxx:382 ../src/sys/options.cxx:398 +#: ../src/sys/options.cxx:441 ../src/sys/options.cxx:471 +#: ../src/sys/options.cxx:745 ../src/sys/options.cxx:767 +#: ../src/sys/options.cxx:789 #, fuzzy, c++-format msgid "Option {:s} has no value" msgstr "Der Option '{:s}' wurde kein Wert zugewiesen" #. Doesn't exist -#: ../src/sys/options.cxx:159 +#: ../src/sys/options.cxx:172 #, fuzzy, c++-format msgid "Option {:s}:{:s} does not exist" msgstr "Die Option {:s}:{:s} exisitiert nicht" -#: ../include/bout/options.hxx:828 +#: ../include/bout/options.hxx:904 #, fuzzy, c++-format msgid "" "Options: Setting a value from same source ({:s}) to new value '{:s}' - old " @@ -730,12 +731,12 @@ msgstr "" "Optionen: Der Wert {2:s} wird mit dem Wert {1:s} gleichen Ursprungs ({0:s}) " "überschrieben." -#: ../src/mesh/impls/bout/boutmesh.cxx:552 +#: ../src/mesh/impls/bout/boutmesh.cxx:588 #, fuzzy msgid "Possible boundary regions are: " msgstr "Keine Randregionen auf diesem Prozessor" -#: ../src/bout++.cxx:538 +#: ../src/bout++.cxx:545 #, fuzzy, c++-format msgid "" "Processor number: {:d} of {:d}\n" @@ -744,32 +745,32 @@ msgstr "" "Prozessorennummer: {:d} von {:d}\n" "\n" -#: ../src/mesh/mesh.cxx:609 +#: ../src/mesh/mesh.cxx:642 #, fuzzy, c++-format msgid "Registered region 2D {:s}" msgstr "2D Region '{:s}' hinzugefügt" -#: ../src/mesh/mesh.cxx:599 +#: ../src/mesh/mesh.cxx:632 #, fuzzy, c++-format msgid "Registered region 3D {:s}" msgstr "3D Region '{:s}' hinzugefügt" -#: ../src/mesh/mesh.cxx:619 +#: ../src/mesh/mesh.cxx:652 #, fuzzy, c++-format msgid "Registered region Perp {:s}" msgstr "Perp Region '{:s}' hinzugefügt" -#: ../src/bout++.cxx:529 +#: ../src/bout++.cxx:536 #, fuzzy, c++-format msgid "Revision: {:s}\n" msgstr "Revision: {:s}\n" -#: ../src/solver/solver.cxx:581 +#: ../src/solver/solver.cxx:587 msgid "Run time : " msgstr "Dauer: " #. / Run the solver -#: ../src/solver/solver.cxx:525 +#: ../src/solver/solver.cxx:533 msgid "" "Running simulation\n" "\n" @@ -781,7 +782,7 @@ msgstr "" msgid "Signal" msgstr "" -#: ../src/bout++.cxx:865 +#: ../src/bout++.cxx:876 msgid "" "Sim Time | RHS evals | Wall Time | Calc Inv Comm I/O SOLVER\n" "\n" @@ -790,7 +791,7 @@ msgstr "" "Integrator\n" "\n" -#: ../src/bout++.cxx:868 +#: ../src/bout++.cxx:879 msgid "" "Sim Time | RHS_e evals | RHS_I evals | Wall Time | Calc Inv " "Comm I/O SOLVER\n" @@ -800,18 +801,18 @@ msgstr "" "Komm I/O Integrator\n" "\n" -#: ../src/solver/solver.cxx:506 +#: ../src/solver/solver.cxx:514 #, fuzzy, c++-format msgid "Solver running for {:d} outputs with monitor timestep of {:e}\n" msgstr "" "Integriere mit einem `Monitor`-Zeitschritt von {1:e} für {0:d} Aufrufe.\n" -#: ../src/solver/solver.cxx:502 +#: ../src/solver/solver.cxx:510 #, fuzzy, c++-format msgid "Solver running for {:d} outputs with output timestep of {:e}\n" msgstr "Integriere {:d} Zeitschritte von je {:e}\n" -#: ../src/solver/solver.cxx:781 +#: ../src/solver/solver.cxx:788 #, fuzzy, c++-format msgid "" "Solver::addMonitor: Cannot reduce timestep (from {:g} to {:g}) after init is " @@ -820,7 +821,7 @@ msgstr "" "Der Integrator kann den Zeitschritt nicht von {:g} auf {:g} reduzieren, " "nachdem er initialisiert wurde!" -#: ../src/solver/solver.cxx:1281 +#: ../src/solver/solver.cxx:1289 #, fuzzy, c++-format msgid "" "Time derivative at wrong location - Field is at {:s}, derivative is at {:s} " @@ -829,27 +830,27 @@ msgstr "" "Die zeitliche Ableitung ist an der falschen Stelle. Das Feld '{2:s}' ist an " "Position {0:s}, während die Ableitung an Position {1:s} ist.\n" -#: ../src/solver/solver.cxx:1480 +#: ../src/solver/solver.cxx:1494 #, fuzzy, c++-format msgid "Time derivative for variable '{:s}' not set" msgstr "Zeitliche Ableitung für Variable '{:s}' nicht gesetzt" -#: ../src/mesh/mesh.cxx:605 +#: ../src/mesh/mesh.cxx:638 #, fuzzy, c++-format msgid "Trying to add an already existing region {:s} to regionMap2D" msgstr "Die Region '{:s}' ist bereits vorhanden in der regionMap2D" -#: ../src/mesh/mesh.cxx:595 +#: ../src/mesh/mesh.cxx:614 #, fuzzy, c++-format msgid "Trying to add an already existing region {:s} to regionMap3D" msgstr "Die Region '{:s}' ist bereits vorhanden in der regionMap3D" -#: ../src/mesh/mesh.cxx:616 +#: ../src/mesh/mesh.cxx:649 #, fuzzy, c++-format msgid "Trying to add an already existing region {:s} to regionMapPerp" msgstr "Die Region '{:s}' ist bereits vorhanden in der regionMapPerp" -#: ../src/sys/options.cxx:99 ../src/sys/options.cxx:138 +#: ../src/sys/options.cxx:112 ../src/sys/options.cxx:151 #, c++-format msgid "" "Trying to index Option '{0}' with '{1}', but '{0}' is a value, not a " @@ -858,7 +859,7 @@ msgid "" "rename one of them.\n" msgstr "" -#: ../src/mesh/coordinates.cxx:1462 +#: ../src/mesh/coordinates.cxx:1464 msgid "" "Unrecognised paralleltransform option.\n" "Valid choices are 'identity', 'shifted', 'fci'" @@ -866,31 +867,31 @@ msgstr "" "Unbekannte Paralleltransformation\n" "Gültige Optionen sind 'identity', 'shifted', 'fci'" -#: ../src/sys/options.cxx:872 +#: ../src/sys/options.cxx:899 msgid "Unused options:\n" msgstr "Ungenutzte Optionen:\n" -#: ../src/bout++.cxx:439 +#: ../src/bout++.cxx:446 #, fuzzy, c++-format msgid "Usage is {:s} -d \n" msgstr "Benutzung: {:s} -d \n" -#: ../src/bout++.cxx:448 +#: ../src/bout++.cxx:455 #, fuzzy, c++-format msgid "Usage is {:s} -f \n" msgstr "Benutzung: {:s} -f \n" -#: ../src/bout++.cxx:466 +#: ../src/bout++.cxx:473 #, fuzzy, c++-format msgid "Usage is {:s} -l \n" msgstr "Benutzung: {:s} -f \n" -#: ../src/bout++.cxx:457 +#: ../src/bout++.cxx:464 #, fuzzy, c++-format msgid "Usage is {:s} -o \n" msgstr "Benutzung: {:s} -f \n" -#: ../src/bout++.cxx:353 +#: ../src/bout++.cxx:360 #, fuzzy, c++-format msgid "Usage is {} {} \n" msgstr "Benutzung: {:s} -f \n" @@ -901,7 +902,7 @@ msgstr "" #. Print help message -- note this will be displayed once per processor as we've not #. started MPI yet. -#: ../src/bout++.cxx:367 +#: ../src/bout++.cxx:374 #, fuzzy, c++-format msgid "" "Usage: {:s} [-d ] [-f ] [restart [append]] " @@ -911,68 +912,73 @@ msgstr "" "[VAR=WERT]\n" #. restart file should be written by physics model -#: ../src/solver/solver.cxx:921 +#: ../src/solver/solver.cxx:927 #, fuzzy msgid "User signalled to quit. Returning\n" msgstr "Beendigung durch Monitor\n" -#: ../src/sys/options.cxx:373 +#: ../src/sys/options.cxx:486 +#, fuzzy, c++-format +msgid "Value for option {:s} = {:e} is not a bool" +msgstr "Wert der Option {:s} = {:e} ist keine Ganzzahl" + +#: ../src/sys/options.cxx:426 #, fuzzy, c++-format msgid "Value for option {:s} = {:e} is not an integer" msgstr "Wert der Option {:s} = {:e} ist keine Ganzzahl" -#: ../src/sys/options.cxx:408 +#: ../src/sys/options.cxx:456 #, c++-format msgid "Value for option {:s} cannot be converted to a BoutReal" msgstr "" -#: ../src/sys/options.cxx:581 +#: ../src/sys/options.cxx:623 #, fuzzy, c++-format msgid "Value for option {:s} cannot be converted to a Field2D" msgstr "Wert der Option {:s} = {:e} ist keine Ganzzahl" -#: ../src/sys/options.cxx:529 +#: ../src/sys/options.cxx:571 #, fuzzy, c++-format msgid "Value for option {:s} cannot be converted to a Field3D" msgstr "Wert der Option {:s} = {:e} ist keine Ganzzahl" -#: ../src/sys/options.cxx:663 +#: ../src/sys/options.cxx:705 #, fuzzy, c++-format msgid "Value for option {:s} cannot be converted to a FieldPerp" msgstr "Wert der Option {:s} = {:e} ist keine Ganzzahl" -#: ../src/sys/options.cxx:451 +#: ../src/sys/options.cxx:491 #, c++-format msgid "Value for option {:s} cannot be converted to a bool" msgstr "" -#: ../src/sys/options.cxx:709 +#: ../src/sys/options.cxx:751 #, fuzzy, c++-format msgid "Value for option {:s} cannot be converted to an Array" msgstr "Wert der Option {:s} = {:e} ist keine Ganzzahl" -#: ../src/sys/options.cxx:736 +#: ../src/sys/options.cxx:773 #, fuzzy, c++-format msgid "Value for option {:s} cannot be converted to an Matrix" msgstr "Wert der Option {:s} = {:e} ist keine Ganzzahl" -#: ../src/sys/options.cxx:763 +#: ../src/sys/options.cxx:795 #, fuzzy, c++-format msgid "Value for option {:s} cannot be converted to an Tensor" msgstr "Wert der Option {:s} = {:e} ist keine Ganzzahl" #. Another type which can't be converted -#: ../src/sys/options.cxx:365 +#: ../src/sys/options.cxx:418 #, fuzzy, c++-format msgid "Value for option {:s} is not an integer" msgstr "Wert der Option {:s} = {:e} ist keine Ganzzahl" -#: ../src/solver/solver.cxx:1232 ../src/solver/solver.cxx:1238 +#: ../src/solver/solver.cxx:1240 ../src/solver/solver.cxx:1246 #, fuzzy, c++-format msgid "Variable '{:s}' not initialised" msgstr "Variable '{:s}' ist nicht initialisiert" -#: ../src/mesh/impls/bout/boutmesh.cxx:431 +#: ../src/mesh/impls/bout/boutmesh.cxx:467 #, fuzzy, c++-format msgid "" "WARNING: Number of toroidal points should be 2^n for efficient FFT " @@ -981,27 +987,27 @@ msgstr "" "WARNUNG: Anzahl der toroidalen Punkte sollte 2^n für effiziente FFTs sein. " "Ändere MZ falls FFTs verwendet werden\n" -#: ../src/mesh/coordinates.cxx:633 +#: ../src/mesh/coordinates.cxx:635 msgid "WARNING: extrapolating input mesh quantities into x-boundary cells\n" msgstr "" -#: ../src/mesh/coordinates.cxx:410 +#: ../src/mesh/coordinates.cxx:412 msgid "" "WARNING: extrapolating input mesh quantities into x-boundary cells. Set " "option extrapolate_x=false to disable this.\n" msgstr "" -#: ../src/mesh/coordinates.cxx:638 +#: ../src/mesh/coordinates.cxx:640 msgid "WARNING: extrapolating input mesh quantities into y-boundary cells\n" msgstr "" -#: ../src/mesh/coordinates.cxx:415 +#: ../src/mesh/coordinates.cxx:417 msgid "" "WARNING: extrapolating input mesh quantities into y-boundary cells. Set " "option extrapolate_y=false to disable this.\n" msgstr "" -#: ../src/bout++.cxx:814 +#: ../src/bout++.cxx:825 msgid "Wall time limit in hours. By default (< 0), no limit" msgstr "" @@ -1011,10 +1017,18 @@ msgid "Writing options to file {:s}\n" msgstr "Optionen werden in {:s} gespeichert\n" #. / The source label given to default values -#: ../src/sys/options.cxx:15 +#: ../src/sys/options.cxx:34 msgid "default" msgstr "Vorgabe" +#, fuzzy, c++-format +#~ msgid "\tOpenMP parallelisation {}" +#~ msgstr "\tOpenMP Parallelisierung ist deaktiviert\n" + +#, fuzzy, c++-format +#~ msgid "\tOption '{:s}': Boolean expected. Got '{:s}'\n" +#~ msgstr "\tOption '{:s}': Boolscherwert erwartet, '{:s}' gefunden\n" + #~ msgid "\tChecking disabled\n" #~ msgstr "\tChecks sind deaktiviert\n" @@ -1022,10 +1036,6 @@ msgstr "Vorgabe" #~ msgid "\tChecking enabled, level {:d}\n" #~ msgstr "\tChecks der Stufe {:d} sind aktiviert\n" -#, fuzzy -#~ msgid "\tOpenMP parallelisation enabled, using {:d} threads\n" -#~ msgstr "\tOpenMP Parallelisierung mit {:d} Threads ist aktiviert\n" - #~ msgid "\tSignal handling enabled\n" #~ msgstr "\tSignalverarbeitung ist aktiviert\n" @@ -1051,8 +1061,8 @@ msgstr "Vorgabe" #~ "überschrieben. Benötigt `restart`\n" #~ " VAR=WERT \t\tSetzt den Wert WERT für die Variable VAR\n" #~ "\n" -#~ "Weitere Eingabeparameter sind in dem Manual und dem Quellcode (z.B. {:s}." -#~ "cxx) des Physikmoduls definiert.\n" +#~ "Weitere Eingabeparameter sind in dem Manual und dem Quellcode (z.B. " +#~ "{:s}.cxx) des Physikmoduls definiert.\n" #, fuzzy #~ msgid "Couldn't get BoutReal from option {:s} = '{:s}'" diff --git a/locale/es/libbout.po b/locale/es/libbout.po index 8a3b22be61..68db78ada9 100644 --- a/locale/es/libbout.po +++ b/locale/es/libbout.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: BOUT++ 4.2.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-12 09:17+0100\n" +"POT-Creation-Date: 2025-08-13 23:37+0100\n" "PO-Revision-Date: 2019-02-11 12:46+0900\n" "Last-Translator: Marta \n" "Language-Team: Spanish\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:191 +#: ../src/mesh/impls/bout/boutmesh.cxx:182 #, fuzzy, c++-format msgid "" "\t -> Core region jyseps2_1-jyseps1_1 ({:d}-{:d} = {:d}) must be a multiple " @@ -25,7 +25,7 @@ msgstr "" "\t -> La región `Core` jyseps2_1-jyseps1_1 ({:d}-{:d} = {:d}) debe ser un " "múltiplo de MYSUB ({:d})\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:224 +#: ../src/mesh/impls/bout/boutmesh.cxx:215 #, fuzzy, c++-format msgid "" "\t -> Core region jyseps2_2-jyseps1_1 ({:d}-{:d} = {:d}) must be a multiple " @@ -34,7 +34,7 @@ msgstr "" "\t -> La región `Core` jyseps2_2-jyseps1_1 ({:d}-{:d} = {:d}) debe ser un " "múltiplo de MYSUB ({:d})\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:199 +#: ../src/mesh/impls/bout/boutmesh.cxx:190 #, fuzzy, c++-format msgid "" "\t -> Core region jyseps2_2-jyseps1_2 ({:d}-{:d} = {:d}) must be a multiple " @@ -43,11 +43,11 @@ msgstr "" "\t -> La región `Core` jyseps2_2-jyseps1_2 ({:d}-{:d} = {:d}) debe ser un " "múltiplo de MYSUB ({:d})\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:309 +#: ../src/mesh/impls/bout/boutmesh.cxx:300 msgid "\t -> Good value\n" msgstr "\t -> El valor es bueno\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:180 +#: ../src/mesh/impls/bout/boutmesh.cxx:171 #, fuzzy, c++-format msgid "" "\t -> Leg region jyseps1_1+1 ({:d}) must be a multiple of MYSUB ({:d})\n" @@ -55,7 +55,7 @@ msgstr "" "\t -> La región `Leg` jyseps1_1+1 ({:d}) debe ser un múltiplo de MYSUB " "({:d})\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:215 +#: ../src/mesh/impls/bout/boutmesh.cxx:206 #, fuzzy, c++-format msgid "" "\t -> leg region jyseps1_2-ny_inner+1 ({:d}-{:d}+1 = {:d}) must be a " @@ -64,7 +64,7 @@ msgstr "" "\t -> La región `Leg` jyseps1_2-ny_inner+1 ({:d}-{:d}+1 = {:d}) debe ser un " "múltiplo de MYSUB ({:d})\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:232 +#: ../src/mesh/impls/bout/boutmesh.cxx:223 #, fuzzy, c++-format msgid "" "\t -> leg region ny-jyseps2_2-1 ({:d}-{:d}-1 = {:d}) must be a multiple of " @@ -73,7 +73,7 @@ msgstr "" "\t -> La región `Leg` ny-jyseps2_2-1 ({:d}-{:d}-1 = {:d}) debe ser un " "múltiplo de MYSUB ({:d})\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:208 +#: ../src/mesh/impls/bout/boutmesh.cxx:199 #, fuzzy, c++-format msgid "" "\t -> leg region ny_inner-jyseps2_1-1 ({:d}-{:d}-1 = {:d}) must be a " @@ -82,12 +82,17 @@ msgstr "" "\t -> La región `Leg` ny_inner-jyseps2_1-1 ({:d}-{:d}-1 = {:d}) debe ser un " "múltiplo de MYSUB ({:d})\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:175 +#: ../src/mesh/impls/bout/boutmesh.cxx:166 #, fuzzy, c++-format msgid "\t -> ny/NYPE ({:d}/{:d} = {:d}) must be >= MYG ({:d})\n" msgstr "\t -> ny/NYPE ({:d}/{:d} = {:d}) debe ser >= MYG ({:d})\n" #: ../src/bout++.cxx:575 +#, fuzzy, c++-format +msgid "\tADIOS2 support {}\n" +msgstr "\tSoporte netCDF activado\n" + +#: ../src/bout++.cxx:583 #, c++-format msgid "\tBacktrace in exceptions {}\n" msgstr "" @@ -96,28 +101,28 @@ msgstr "" #. Processors divide equally #. Mesh in X divides equally #. Mesh in Y divides equally -#: ../src/mesh/impls/bout/boutmesh.cxx:297 +#: ../src/mesh/impls/bout/boutmesh.cxx:288 #, fuzzy, c++-format msgid "\tCandidate value: {:d}\n" msgstr "\tValor candidato: {:d}\n" -#: ../src/bout++.cxx:576 +#: ../src/bout++.cxx:584 #, c++-format msgid "\tColour in logs {}\n" msgstr "" -#: ../src/bout++.cxx:594 +#: ../src/bout++.cxx:599 msgid "\tCommand line options for this run : " msgstr "\tParámetros de línea de comandos para esta ejecución :" #. The stringify is needed here as BOUT_FLAGS_STRING may already contain quoted strings #. which could cause problems (e.g. terminate strings). -#: ../src/bout++.cxx:590 +#: ../src/bout++.cxx:595 #, fuzzy, c++-format msgid "\tCompiled with flags : {:s}\n" msgstr "\tCompilado con las opciones `flags` : {:s}\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:324 +#: ../src/mesh/impls/bout/boutmesh.cxx:315 #, fuzzy, c++-format msgid "" "\tDomain split (NXPE={:d}, NYPE={:d}) into domains (localNx={:d}, " @@ -126,14 +131,14 @@ msgstr "" "\tDominio separado (NXPE={:d}, NYPE={:d}) en los dominios (localNx={:d}, " "localNy={:d})\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:364 +#: ../src/mesh/impls/bout/boutmesh.cxx:357 #, fuzzy, c++-format msgid "\tERROR: Cannot split {:d} Y points equally between {:d} processors\n" msgstr "" "\tERROR: No se pueden separar {:d} Y puntos entre {:d} procesadores por " "igual\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:372 +#: ../src/mesh/impls/bout/boutmesh.cxx:365 #, fuzzy, c++-format msgid "\tERROR: Cannot split {:d} Z points equally between {:d} processors\n" msgstr "" @@ -154,31 +159,31 @@ msgstr "" msgid "\tEmpty key or value in command line '{:s}'\n" msgstr "\tEntrada o valor vacío en la línea de comandos '{:s}'\n" -#: ../src/bout++.cxx:582 +#: ../src/bout++.cxx:587 #, c++-format msgid "\tExtra debug output {}\n" msgstr "" -#: ../src/bout++.cxx:561 +#: ../src/bout++.cxx:568 #, fuzzy, c++-format msgid "\tFFT support {}\n" msgstr "\tSoporte netCDF activado\n" -#: ../src/bout++.cxx:585 +#: ../src/bout++.cxx:590 #, c++-format msgid "\tField name tracking {}\n" msgstr "" -#: ../src/bout++.cxx:583 +#: ../src/bout++.cxx:588 #, c++-format msgid "\tFloating-point exceptions {}\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:440 +#: ../src/mesh/impls/bout/boutmesh.cxx:476 msgid "\tGrid size: " msgstr "\tTamaño de la malla (`grid`): " -#: ../src/mesh/impls/bout/boutmesh.cxx:463 +#: ../src/mesh/impls/bout/boutmesh.cxx:499 #, fuzzy msgid "\tGuard cells (x,y,z): " msgstr "\tProteger celdas (x,y): " @@ -192,17 +197,17 @@ msgstr "" "\tLa entrada no debe contener el carácter ':'\n" "\tLínea: {:s}" -#: ../src/bout++.cxx:563 +#: ../src/bout++.cxx:570 #, c++-format msgid "\tLAPACK support {}\n" msgstr "" -#: ../src/bout++.cxx:586 +#: ../src/bout++.cxx:591 #, c++-format msgid "\tMessage stack {}\n" msgstr "" -#: ../src/bout++.cxx:560 +#: ../src/bout++.cxx:567 #, c++-format msgid "\tMetrics mode is {}\n" msgstr "" @@ -212,98 +217,95 @@ msgstr "" msgid "\tMultiple '=' in command-line argument '{:s}'\n" msgstr "\tMutilples '=' en el argumento de la línea de comandos '{:s}'\n" -#: ../src/bout++.cxx:562 +#: ../src/bout++.cxx:569 #, c++-format msgid "\tNatural language support {}\n" msgstr "" -#: ../src/bout++.cxx:567 +#: ../src/bout++.cxx:574 #, fuzzy, c++-format msgid "\tNetCDF support {}{}\n" msgstr "\tSoporte netCDF activado\n" -#: ../src/bout++.cxx:577 +#: ../src/bout++.cxx:585 #, fuzzy, c++-format -msgid "\tOpenMP parallelisation {}" -msgstr "\tParalelización en OpenMP desactivada\n" +msgid "\tOpenMP parallelisation {}, using {} threads\n" +msgstr "" +"\tParalelización en OpenMP activada, usando {:d} procesos (`threads`)\n" #. Mark the option as used #. Option not found -#: ../src/sys/options.cxx:311 ../src/sys/options.cxx:380 -#: ../src/sys/options.cxx:415 ../src/sys/options.cxx:457 -#: ../src/sys/options.cxx:717 ../src/sys/options.cxx:744 -#: ../src/sys/options.cxx:771 ../include/bout/options.hxx:516 -#: ../include/bout/options.hxx:549 ../include/bout/options.hxx:573 -#: ../include/bout/options.hxx:820 +#: ../include/bout/options.hxx:586 ../include/bout/options.hxx:619 +#: ../include/bout/options.hxx:643 ../include/bout/options.hxx:896 msgid "\tOption " msgstr "\tOpción " -#: ../src/sys/options.cxx:447 +#: ../src/sys/options.cxx:369 #, fuzzy, c++-format -msgid "\tOption '{:s}': Boolean expected. Got '{:s}'\n" -msgstr "\tOpción '{:s}': valor Booleano esperado. Se obtuvo '{:s}'\n" +msgid "\tOption {} = {}" +msgstr "\tOpción " #: ../src/sys/options/options_ini.cxx:70 #, fuzzy, c++-format msgid "\tOptions file '{:s}' not found\n" msgstr "\tOpciones de archivo '{:s}' no encontrados\n" -#: ../src/bout++.cxx:568 +#: ../src/bout++.cxx:576 #, c++-format msgid "\tPETSc support {}\n" msgstr "" -#: ../src/bout++.cxx:571 +#: ../src/bout++.cxx:579 #, c++-format msgid "\tPVODE support {}\n" msgstr "" -#: ../src/bout++.cxx:557 +#: ../src/bout++.cxx:564 msgid "\tParallel NetCDF support disabled\n" msgstr "\tSoporte para NetCDF paralelo desactivado\n" -#: ../src/bout++.cxx:555 +#: ../src/bout++.cxx:562 msgid "\tParallel NetCDF support enabled\n" msgstr "\tSoporte para NetCDF paralelo activado\n" -#: ../src/bout++.cxx:569 +#: ../src/bout++.cxx:577 #, c++-format msgid "\tPretty function name support {}\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:437 +#: ../src/mesh/impls/bout/boutmesh.cxx:473 msgid "\tRead nz from input grid file\n" msgstr "\tLeer nz del archivo input de la malla `grid`\n" -#: ../src/mesh/mesh.cxx:238 +#: ../src/mesh/mesh.cxx:249 msgid "\tReading contravariant vector " msgstr "\tLeyendo vector contravariante " -#: ../src/mesh/mesh.cxx:231 ../src/mesh/mesh.cxx:252 +#: ../src/mesh/mesh.cxx:242 ../src/mesh/mesh.cxx:263 msgid "\tReading covariant vector " msgstr "\tLeyendo vector covariante " -#: ../src/bout++.cxx:548 +#: ../src/bout++.cxx:555 #, c++-format msgid "\tRuntime error checking {}" msgstr "" -#: ../src/bout++.cxx:573 +#: ../src/bout++.cxx:581 #, c++-format msgid "\tSLEPc support {}\n" msgstr "" -#: ../src/bout++.cxx:574 +#: ../src/bout++.cxx:582 #, c++-format msgid "\tSUNDIALS support {}\n" msgstr "" -#: ../src/bout++.cxx:572 +#: ../src/bout++.cxx:580 #, c++-format msgid "\tScore-P support {}\n" msgstr "" -#: ../src/bout++.cxx:584 +#: ../src/bout++.cxx:589 #, fuzzy, c++-format msgid "\tSignal handling support {}\n" msgstr "\tGestión de señal desactivada\n" @@ -313,7 +315,7 @@ msgstr "\tGestión de señal desactivada\n" msgid "\tUsing a timestep {:e}\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:577 +#: ../src/mesh/impls/bout/boutmesh.cxx:613 msgid "\tdone\n" msgstr "\tlisto\n" @@ -323,7 +325,7 @@ msgid "" "\tSplit Runge-Kutta-Legendre and SSP-RK3 solver\n" msgstr "" -#: ../src/bout++.cxx:371 +#: ../src/bout++.cxx:378 #, fuzzy msgid "" "\n" @@ -343,7 +345,7 @@ msgstr "" " -v, --verbose\t\tAumentar verbosidad\n" " -q, --quiet\t\tDisminuir verbosidad\n" -#: ../src/sys/expressionparser.cxx:302 +#: ../src/sys/expressionparser.cxx:341 #, c++-format msgid "" "\n" @@ -351,7 +353,7 @@ msgid "" " Did you mean '{0}'?" msgstr "" -#: ../src/solver/solver.cxx:580 +#: ../src/solver/solver.cxx:586 #, fuzzy, c++-format msgid "" "\n" @@ -360,7 +362,7 @@ msgstr "" "\n" "Ejecución finalizada en : {:s}\n" -#: ../src/solver/solver.cxx:532 +#: ../src/solver/solver.cxx:540 #, fuzzy, c++-format msgid "" "\n" @@ -372,7 +374,7 @@ msgstr "" #. Raw string to help with the formatting of the message, and a #. separate variable so clang-format doesn't barf on the #. exception -#: ../src/sys/options.cxx:1102 +#: ../src/sys/options.cxx:1158 msgid "" "\n" "There were unused input options:\n" @@ -400,7 +402,7 @@ msgid "" "{}" msgstr "" -#: ../src/bout++.cxx:382 +#: ../src/bout++.cxx:389 #, c++-format msgid "" " --print-config\t\tPrint the compile-time configuration\n" @@ -433,57 +435,57 @@ msgid "" "model source (e.g. {:s}.cxx)\n" msgstr "" -#: ../src/bout++.cxx:379 +#: ../src/bout++.cxx:386 #, fuzzy msgid " -c, --color\t\t\tColor output using bout-log-color\n" msgstr " -c, --color\t\tSalida de color usando bout-log-color\n" -#: ../include/bout/options.hxx:823 +#: ../include/bout/options.hxx:899 msgid ") overwritten with:" msgstr "" -#: ../src/bout++.cxx:550 +#: ../src/bout++.cxx:557 #, c++-format msgid ", level {}" msgstr "" -#: ../src/bout++.cxx:579 -#, c++-format -msgid ", using {} threads" -msgstr "" - #: ../tests/unit/src/test_bout++.cxx:352 msgid "4 of 8" msgstr "" -#: ../src/sys/options.cxx:868 +#: ../src/sys/options.cxx:895 msgid "All options used\n" msgstr "Usando todas las opciones\n" -#: ../src/bout++.cxx:528 +#: ../src/bout++.cxx:535 #, fuzzy, c++-format msgid "BOUT++ version {:s}\n" msgstr "Versión de BOUT++ {:s}\n" -#: ../src/bout++.cxx:143 +#: ../src/bout++.cxx:147 #, fuzzy msgid "Bad command line arguments:\n" msgstr "\tMutilples '=' en el argumento de la línea de comandos '{:s}'\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:559 +#: ../src/sys/expressionparser.cxx:192 +#, c++-format +msgid "Boolean operator argument {:e} is not a bool" +msgstr "" + +#: ../src/mesh/impls/bout/boutmesh.cxx:595 msgid "Boundary regions in this processor: " msgstr "Regiones frontera en este procesador: " -#: ../src/mesh/impls/bout/boutmesh.cxx:355 +#: ../src/mesh/impls/bout/boutmesh.cxx:348 #, fuzzy, c++-format msgid "Cannot split {:d} X points equally between {:d} processors\n" msgstr "No se pueden dividir {:d} X points entre {:d} procesadores por igual\n" -#: ../src/bout++.cxx:818 +#: ../src/bout++.cxx:829 msgid "Check if a file exists, and exit if it does." msgstr "" -#: ../src/bout++.cxx:533 +#: ../src/bout++.cxx:540 #, fuzzy, c++-format msgid "" "Code compiled on {:s} at {:s}\n" @@ -496,7 +498,7 @@ msgstr "" msgid "Command line" msgstr "Línea de comandos" -#: ../src/bout++.cxx:544 ../tests/unit/src/test_bout++.cxx:358 +#: ../src/bout++.cxx:551 ../tests/unit/src/test_bout++.cxx:358 msgid "Compile-time options:\n" msgstr "Opciones de tiempo de compilación:\n" @@ -505,16 +507,16 @@ msgstr "Opciones de tiempo de compilación:\n" msgid "Compiled with flags" msgstr "\tCompilado con las opciones `flags` : {:s}\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:568 +#: ../src/mesh/impls/bout/boutmesh.cxx:604 msgid "Constructing default regions" msgstr "Construyendo regiones por defecto" -#: ../src/bout++.cxx:520 +#: ../src/bout++.cxx:527 #, fuzzy, c++-format msgid "Could not create PID file {:s}" msgstr "No se pudo abrir el archivo de salida `output` '{:s}'\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:318 +#: ../src/mesh/impls/bout/boutmesh.cxx:309 msgid "" "Could not find a valid value for NXPE. Try a different number of processors." msgstr "" @@ -526,30 +528,30 @@ msgstr "" msgid "Could not open output file '{:s}'\n" msgstr "No se pudo abrir el archivo de salida `output` '{:s}'\n" -#: ../src/bout++.cxx:652 +#: ../src/bout++.cxx:657 #, c++-format msgid "Could not open {:s}/{:s}.{:d} for writing" msgstr "" #. Error reading -#: ../src/mesh/mesh.cxx:532 +#: ../src/mesh/mesh.cxx:543 #, fuzzy, c++-format msgid "Could not read integer array '{:s}'\n" msgstr "No se pudo leer la matriz de enteros '{:s}'\n" #. Failed . Probably not important enough to stop the simulation -#: ../src/bout++.cxx:632 +#: ../src/bout++.cxx:637 msgid "Could not run bout-log-color. Make sure it is in your PATH\n" msgstr "" "No se pudo ejecutar bout-log-color. Asegúrese de que se encuentre en su " "PATH\n" -#: ../src/solver/solver.cxx:765 +#: ../src/solver/solver.cxx:772 #, fuzzy, c++-format msgid "Couldn't add Monitor: {:g} is not a multiple of {:g}!" msgstr "No se pudo añadir el Monitor: {:g} no és multiplo de {:g}!" -#: ../src/sys/expressionparser.cxx:273 +#: ../src/sys/expressionparser.cxx:312 #, c++-format msgid "" "Couldn't find generator '{}'. BOUT++ expressions are now case-sensitive, so " @@ -558,69 +560,69 @@ msgid "" "{}" msgstr "" -#: ../src/mesh/mesh.cxx:568 +#: ../src/mesh/mesh.cxx:587 #, fuzzy, c++-format msgid "Couldn't find region {:s} in regionMap2D" msgstr "No se pudo encontrar la región {:s} en regionMap2D" -#: ../src/mesh/mesh.cxx:560 +#: ../src/mesh/mesh.cxx:571 ../src/mesh/mesh.cxx:579 #, fuzzy, c++-format msgid "Couldn't find region {:s} in regionMap3D" msgstr "No se pudo encontrar la región {:s} en regionMap2D" -#: ../src/mesh/mesh.cxx:576 +#: ../src/mesh/mesh.cxx:595 #, fuzzy, c++-format msgid "Couldn't find region {:s} in regionMapPerp" msgstr "No se pudo encontrar la región {:s} en regionMapPerp" #. Convert any exceptions to something a bit more useful -#: ../src/sys/options.cxx:336 +#: ../src/sys/options.cxx:361 #, fuzzy, c++-format msgid "Couldn't get {} from option {:s} = '{:s}': {}" msgstr "No se pudo recuperar el entero de la opción {:s} = '{:s}'" -#: ../src/bout++.cxx:508 +#: ../src/bout++.cxx:515 #, fuzzy, c++-format msgid "DataDir \"{:s}\" does not exist or is not accessible\n" msgstr "DataDir \"{:s}\" no existe o no es accessible\n" -#: ../src/bout++.cxx:505 +#: ../src/bout++.cxx:512 #, fuzzy, c++-format msgid "DataDir \"{:s}\" is not a directory\n" msgstr "DataDir \"{:s}\" no es un directorio\n" -#: ../src/solver/solver.cxx:665 +#: ../src/solver/solver.cxx:671 msgid "ERROR: Solver is already initialised\n" msgstr "ERROR: el Solver ya se encuentra inicializado\n" -#: ../src/bout++.cxx:209 +#: ../src/bout++.cxx:216 #, fuzzy, c++-format msgid "Error encountered during initialisation: {:s}\n" msgstr "Error encontrado durante la inicialización:{:s}\n" -#: ../src/bout++.cxx:744 +#: ../src/bout++.cxx:751 msgid "Error whilst writing settings" msgstr "Error durante el paso de opciones" -#: ../src/mesh/impls/bout/boutmesh.cxx:332 +#: ../src/mesh/impls/bout/boutmesh.cxx:323 #, fuzzy, c++-format msgid "Error: nx must be greater than 2 times MXG (2 * {:d})" msgstr "Error: nx debe ser mayor que 2 veces MXG (2 * {:d})" -#: ../src/solver/solver.cxx:512 +#: ../src/solver/solver.cxx:520 msgid "Failed to initialise solver-> Aborting\n" msgstr "Fallo en inicializar el solver-> Abortando\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:290 +#: ../src/mesh/impls/bout/boutmesh.cxx:281 #, fuzzy, c++-format msgid "Finding value for NXPE (ideal = {:f})\n" msgstr "Encontrando valor para NXPE (ideal = {:f})\n" -#: ../src/solver/solver.cxx:668 +#: ../src/solver/solver.cxx:674 msgid "Initialising solver\n" msgstr "Initializando el solver\n" -#: ../src/bout++.cxx:494 +#: ../src/bout++.cxx:501 msgid "" "Input and output file for settings must be different.\n" "Provide -o to avoid this issue.\n" @@ -633,48 +635,48 @@ msgstr "" msgid "Invalid command line option '-' found - maybe check whitespace?" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:400 +#: ../src/mesh/impls/bout/boutmesh.cxx:436 msgid "Loading mesh" msgstr "Cargando malla `mesh`" -#: ../src/mesh/impls/bout/boutmesh.cxx:415 +#: ../src/mesh/impls/bout/boutmesh.cxx:451 msgid "Mesh must contain nx" msgstr "La malla `mesh` debe contener nx" -#: ../src/mesh/impls/bout/boutmesh.cxx:419 +#: ../src/mesh/impls/bout/boutmesh.cxx:455 msgid "Mesh must contain ny" msgstr "La malla `mesh` debe contener ny" #. Not found -#: ../src/mesh/mesh.cxx:536 +#: ../src/mesh/mesh.cxx:547 #, fuzzy, c++-format msgid "Missing integer array {:s}\n" msgstr "Fala la matriz entera {:s}\n" -#: ../src/solver/solver.cxx:905 +#: ../src/solver/solver.cxx:911 #, fuzzy, c++-format msgid "Monitor signalled to quit (exception {})\n" msgstr "Monitor indicó salir\n" -#: ../src/solver/solver.cxx:883 +#: ../src/solver/solver.cxx:889 #, fuzzy, c++-format msgid "Monitor signalled to quit (return code {})" msgstr "Monitor indicó salir" -#: ../src/bout++.cxx:823 +#: ../src/bout++.cxx:834 msgid "Name of file whose existence triggers a stop" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:565 +#: ../src/mesh/impls/bout/boutmesh.cxx:601 msgid "No boundary regions in this processor" msgstr "Sin regiones de frontera en este procesador" -#: ../src/mesh/impls/bout/boutmesh.cxx:550 +#: ../src/mesh/impls/bout/boutmesh.cxx:586 #, fuzzy msgid "No boundary regions; domain is periodic\n" msgstr "Sin regiones de frontera en este procesador" -#: ../src/mesh/impls/bout/boutmesh.cxx:254 +#: ../src/mesh/impls/bout/boutmesh.cxx:245 #, fuzzy, c++-format msgid "" "Number of processors ({:d}) not divisible by NPs in x direction ({:d})\n" @@ -682,7 +684,7 @@ msgstr "" "Número de procesadores ({:d}) no divisible para NPs en la dirección x " "({:d})\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:267 +#: ../src/mesh/impls/bout/boutmesh.cxx:258 #, fuzzy, c++-format msgid "" "Number of processors ({:d}) not divisible by NPs in y direction ({:d})\n" @@ -691,26 +693,26 @@ msgstr "" "({:d})\n" #. Less than 2 time-steps left -#: ../src/bout++.cxx:896 +#: ../src/bout++.cxx:908 #, fuzzy, c++-format msgid "Only {:e} seconds ({:.2f} steps) left. Quitting\n" msgstr "Solo faltan {:e} segundos. Saliendo\n" -#: ../src/sys/options.cxx:303 ../src/sys/options.cxx:345 -#: ../src/sys/options.cxx:393 ../src/sys/options.cxx:428 -#: ../src/sys/options.cxx:703 ../src/sys/options.cxx:730 -#: ../src/sys/options.cxx:757 +#: ../src/sys/options.cxx:382 ../src/sys/options.cxx:398 +#: ../src/sys/options.cxx:441 ../src/sys/options.cxx:471 +#: ../src/sys/options.cxx:745 ../src/sys/options.cxx:767 +#: ../src/sys/options.cxx:789 #, fuzzy, c++-format msgid "Option {:s} has no value" msgstr "Opción {:s} sin valor" #. Doesn't exist -#: ../src/sys/options.cxx:159 +#: ../src/sys/options.cxx:172 #, fuzzy, c++-format msgid "Option {:s}:{:s} does not exist" msgstr "Opción {:s}:{:s} no existe" -#: ../include/bout/options.hxx:828 +#: ../include/bout/options.hxx:904 #, fuzzy, c++-format msgid "" "Options: Setting a value from same source ({:s}) to new value '{:s}' - old " @@ -719,12 +721,12 @@ msgstr "" "Opciones: Cambiando valor de la misma fuente ({:s}) al valor nuevo '{:s}' - " "valor anterior era '{:s}'." -#: ../src/mesh/impls/bout/boutmesh.cxx:552 +#: ../src/mesh/impls/bout/boutmesh.cxx:588 #, fuzzy msgid "Possible boundary regions are: " msgstr "Sin regiones de frontera en este procesador" -#: ../src/bout++.cxx:538 +#: ../src/bout++.cxx:545 #, fuzzy, c++-format msgid "" "Processor number: {:d} of {:d}\n" @@ -733,32 +735,32 @@ msgstr "" "Procesador número: {:d} de {:d}\n" "\n" -#: ../src/mesh/mesh.cxx:609 +#: ../src/mesh/mesh.cxx:642 #, fuzzy, c++-format msgid "Registered region 2D {:s}" msgstr "Región 2D registrada {:s}" -#: ../src/mesh/mesh.cxx:599 +#: ../src/mesh/mesh.cxx:632 #, fuzzy, c++-format msgid "Registered region 3D {:s}" msgstr "Región 3D registrada {:s}" -#: ../src/mesh/mesh.cxx:619 +#: ../src/mesh/mesh.cxx:652 #, fuzzy, c++-format msgid "Registered region Perp {:s}" msgstr "Región Perp registrada {:s}" -#: ../src/bout++.cxx:529 +#: ../src/bout++.cxx:536 #, fuzzy, c++-format msgid "Revision: {:s}\n" msgstr "Revisión: {:s}\n" -#: ../src/solver/solver.cxx:581 +#: ../src/solver/solver.cxx:587 msgid "Run time : " msgstr "Tiempo de ejecución : " #. / Run the solver -#: ../src/solver/solver.cxx:525 +#: ../src/solver/solver.cxx:533 msgid "" "Running simulation\n" "\n" @@ -770,7 +772,7 @@ msgstr "" msgid "Signal" msgstr "" -#: ../src/bout++.cxx:865 +#: ../src/bout++.cxx:876 msgid "" "Sim Time | RHS evals | Wall Time | Calc Inv Comm I/O SOLVER\n" "\n" @@ -779,7 +781,7 @@ msgstr "" "SOLVER\n" "\n" -#: ../src/bout++.cxx:868 +#: ../src/bout++.cxx:879 msgid "" "Sim Time | RHS_e evals | RHS_I evals | Wall Time | Calc Inv " "Comm I/O SOLVER\n" @@ -789,21 +791,21 @@ msgstr "" "Com I/O SOLVER\n" "\n" -#: ../src/solver/solver.cxx:506 +#: ../src/solver/solver.cxx:514 #, fuzzy, c++-format msgid "Solver running for {:d} outputs with monitor timestep of {:e}\n" msgstr "" "Solver corriendo para {:d} outputs con intervalos de tiempo de monitor de " "{:e}\n" -#: ../src/solver/solver.cxx:502 +#: ../src/solver/solver.cxx:510 #, fuzzy, c++-format msgid "Solver running for {:d} outputs with output timestep of {:e}\n" msgstr "" "Solver corriendo para {:d} outputs con intervalos de tiempo de output de " "{:e}\n" -#: ../src/solver/solver.cxx:781 +#: ../src/solver/solver.cxx:788 #, fuzzy, c++-format msgid "" "Solver::addMonitor: Cannot reduce timestep (from {:g} to {:g}) after init is " @@ -812,7 +814,7 @@ msgstr "" "Solver::addMonitor: No se puedo reducir el intervalo de tiempo (de {:g} a " "{:g}) después de que init fuera llamado!" -#: ../src/solver/solver.cxx:1281 +#: ../src/solver/solver.cxx:1289 #, fuzzy, c++-format msgid "" "Time derivative at wrong location - Field is at {:s}, derivative is at {:s} " @@ -821,27 +823,27 @@ msgstr "" "Derivada del tiempo en lugar erróneo - El field se encuentra en {:s}, la " "derivada se encuentra en {:s} para el field '{:s}'\n" -#: ../src/solver/solver.cxx:1480 +#: ../src/solver/solver.cxx:1494 #, fuzzy, c++-format msgid "Time derivative for variable '{:s}' not set" msgstr "Derivada del tiempo para la variable '{:s}' no fijada" -#: ../src/mesh/mesh.cxx:605 +#: ../src/mesh/mesh.cxx:638 #, fuzzy, c++-format msgid "Trying to add an already existing region {:s} to regionMap2D" msgstr "Intentando añadir una región ya existente {:s} a regionMap2D" -#: ../src/mesh/mesh.cxx:595 +#: ../src/mesh/mesh.cxx:614 #, fuzzy, c++-format msgid "Trying to add an already existing region {:s} to regionMap3D" msgstr "Intentando añadir una región ya existente {:s} a regionMap3D" -#: ../src/mesh/mesh.cxx:616 +#: ../src/mesh/mesh.cxx:649 #, fuzzy, c++-format msgid "Trying to add an already existing region {:s} to regionMapPerp" msgstr "Intentando añadir una región ya existente {:s} a regionMapPerp" -#: ../src/sys/options.cxx:99 ../src/sys/options.cxx:138 +#: ../src/sys/options.cxx:112 ../src/sys/options.cxx:151 #, c++-format msgid "" "Trying to index Option '{0}' with '{1}', but '{0}' is a value, not a " @@ -850,7 +852,7 @@ msgid "" "rename one of them.\n" msgstr "" -#: ../src/mesh/coordinates.cxx:1462 +#: ../src/mesh/coordinates.cxx:1464 msgid "" "Unrecognised paralleltransform option.\n" "Valid choices are 'identity', 'shifted', 'fci'" @@ -858,31 +860,31 @@ msgstr "" "Opción paralleltransform desconocida.\n" "Opciones válidas son 'identity', 'shifted', 'fci'" -#: ../src/sys/options.cxx:872 +#: ../src/sys/options.cxx:899 msgid "Unused options:\n" msgstr "Opciones sin usar:\n" -#: ../src/bout++.cxx:439 +#: ../src/bout++.cxx:446 #, fuzzy, c++-format msgid "Usage is {:s} -d \n" msgstr "Correcto uso es {:s} -d \n" -#: ../src/bout++.cxx:448 +#: ../src/bout++.cxx:455 #, fuzzy, c++-format msgid "Usage is {:s} -f \n" msgstr "Correcto uso es {:s} -f \n" -#: ../src/bout++.cxx:466 +#: ../src/bout++.cxx:473 #, fuzzy, c++-format msgid "Usage is {:s} -l \n" msgstr "Correcto uso es {:s} -l \n" -#: ../src/bout++.cxx:457 +#: ../src/bout++.cxx:464 #, fuzzy, c++-format msgid "Usage is {:s} -o \n" msgstr "Correcto uso es {:s} -o \n" -#: ../src/bout++.cxx:353 +#: ../src/bout++.cxx:360 #, fuzzy, c++-format msgid "Usage is {} {} \n" msgstr "Correcto uso es {:s} -l \n" @@ -893,7 +895,7 @@ msgstr "" #. Print help message -- note this will be displayed once per processor as we've not #. started MPI yet. -#: ../src/bout++.cxx:367 +#: ../src/bout++.cxx:374 #, fuzzy, c++-format msgid "" "Usage: {:s} [-d ] [-f ] [restart [append]] " @@ -903,68 +905,73 @@ msgstr "" "[VAR=VALUE]\n" #. restart file should be written by physics model -#: ../src/solver/solver.cxx:921 +#: ../src/solver/solver.cxx:927 #, fuzzy msgid "User signalled to quit. Returning\n" msgstr "Monitor indicó salir\n" -#: ../src/sys/options.cxx:373 +#: ../src/sys/options.cxx:486 +#, fuzzy, c++-format +msgid "Value for option {:s} = {:e} is not a bool" +msgstr "Valor para la opción {:s} = {:e} no es un entero" + +#: ../src/sys/options.cxx:426 #, fuzzy, c++-format msgid "Value for option {:s} = {:e} is not an integer" msgstr "Valor para la opción {:s} = {:e} no es un entero" -#: ../src/sys/options.cxx:408 +#: ../src/sys/options.cxx:456 #, c++-format msgid "Value for option {:s} cannot be converted to a BoutReal" msgstr "" -#: ../src/sys/options.cxx:581 +#: ../src/sys/options.cxx:623 #, fuzzy, c++-format msgid "Value for option {:s} cannot be converted to a Field2D" msgstr "Valor para la opción {:s} = {:e} no es un entero" -#: ../src/sys/options.cxx:529 +#: ../src/sys/options.cxx:571 #, fuzzy, c++-format msgid "Value for option {:s} cannot be converted to a Field3D" msgstr "Valor para la opción {:s} = {:e} no es un entero" -#: ../src/sys/options.cxx:663 +#: ../src/sys/options.cxx:705 #, fuzzy, c++-format msgid "Value for option {:s} cannot be converted to a FieldPerp" msgstr "Valor para la opción {:s} = {:e} no es un entero" -#: ../src/sys/options.cxx:451 +#: ../src/sys/options.cxx:491 #, c++-format msgid "Value for option {:s} cannot be converted to a bool" msgstr "" -#: ../src/sys/options.cxx:709 +#: ../src/sys/options.cxx:751 #, fuzzy, c++-format msgid "Value for option {:s} cannot be converted to an Array" msgstr "Valor para la opción {:s} = {:e} no es un entero" -#: ../src/sys/options.cxx:736 +#: ../src/sys/options.cxx:773 #, fuzzy, c++-format msgid "Value for option {:s} cannot be converted to an Matrix" msgstr "Valor para la opción {:s} = {:e} no es un entero" -#: ../src/sys/options.cxx:763 +#: ../src/sys/options.cxx:795 #, fuzzy, c++-format msgid "Value for option {:s} cannot be converted to an Tensor" msgstr "Valor para la opción {:s} = {:e} no es un entero" #. Another type which can't be converted -#: ../src/sys/options.cxx:365 +#: ../src/sys/options.cxx:418 #, fuzzy, c++-format msgid "Value for option {:s} is not an integer" msgstr "Valor para la opción {:s} = {:e} no es un entero" -#: ../src/solver/solver.cxx:1232 ../src/solver/solver.cxx:1238 +#: ../src/solver/solver.cxx:1240 ../src/solver/solver.cxx:1246 #, fuzzy, c++-format msgid "Variable '{:s}' not initialised" msgstr "Variable '{:s}' sin inicializar" -#: ../src/mesh/impls/bout/boutmesh.cxx:431 +#: ../src/mesh/impls/bout/boutmesh.cxx:467 #, fuzzy, c++-format msgid "" "WARNING: Number of toroidal points should be 2^n for efficient FFT " @@ -973,27 +980,27 @@ msgstr "" "WARNING: el número de puntos toroidales debería ser 2^n para una FFT " "eficiente -- considere cambiar MZ si se usan FFTs\n" -#: ../src/mesh/coordinates.cxx:633 +#: ../src/mesh/coordinates.cxx:635 msgid "WARNING: extrapolating input mesh quantities into x-boundary cells\n" msgstr "" -#: ../src/mesh/coordinates.cxx:410 +#: ../src/mesh/coordinates.cxx:412 msgid "" "WARNING: extrapolating input mesh quantities into x-boundary cells. Set " "option extrapolate_x=false to disable this.\n" msgstr "" -#: ../src/mesh/coordinates.cxx:638 +#: ../src/mesh/coordinates.cxx:640 msgid "WARNING: extrapolating input mesh quantities into y-boundary cells\n" msgstr "" -#: ../src/mesh/coordinates.cxx:415 +#: ../src/mesh/coordinates.cxx:417 msgid "" "WARNING: extrapolating input mesh quantities into y-boundary cells. Set " "option extrapolate_y=false to disable this.\n" msgstr "" -#: ../src/bout++.cxx:814 +#: ../src/bout++.cxx:825 msgid "Wall time limit in hours. By default (< 0), no limit" msgstr "" @@ -1003,10 +1010,18 @@ msgid "Writing options to file {:s}\n" msgstr "Escribiendo opciones a archivo {:s}\n" #. / The source label given to default values -#: ../src/sys/options.cxx:15 +#: ../src/sys/options.cxx:34 msgid "default" msgstr "por defecto" +#, fuzzy, c++-format +#~ msgid "\tOpenMP parallelisation {}" +#~ msgstr "\tParalelización en OpenMP desactivada\n" + +#, fuzzy, c++-format +#~ msgid "\tOption '{:s}': Boolean expected. Got '{:s}'\n" +#~ msgstr "\tOpción '{:s}': valor Booleano esperado. Se obtuvo '{:s}'\n" + #~ msgid "\tChecking disabled\n" #~ msgstr "\tComprobación desactivada\n" @@ -1014,11 +1029,6 @@ msgstr "por defecto" #~ msgid "\tChecking enabled, level {:d}\n" #~ msgstr "\tComprobación activada, nivel {:d}\n" -#, fuzzy -#~ msgid "\tOpenMP parallelisation enabled, using {:d} threads\n" -#~ msgstr "" -#~ "\tParalelización en OpenMP activada, usando {:d} procesos (`threads`)\n" - #~ msgid "\tSignal handling enabled\n" #~ msgstr "\tGestión de señal activada\n" diff --git a/locale/fr/libbout.po b/locale/fr/libbout.po index ae88b8953c..e9b5476696 100644 --- a/locale/fr/libbout.po +++ b/locale/fr/libbout.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: BOUT++ 4.2.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-12 09:17+0100\n" +"POT-Creation-Date: 2025-08-13 23:37+0100\n" "PO-Revision-Date: 2018-10-21 22:46+0100\n" "Last-Translator: \n" "Language-Team: French\n" @@ -17,65 +17,70 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:191 +#: ../src/mesh/impls/bout/boutmesh.cxx:182 #, c++-format msgid "" "\t -> Core region jyseps2_1-jyseps1_1 ({:d}-{:d} = {:d}) must be a multiple " "of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:224 +#: ../src/mesh/impls/bout/boutmesh.cxx:215 #, c++-format msgid "" "\t -> Core region jyseps2_2-jyseps1_1 ({:d}-{:d} = {:d}) must be a multiple " "of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:199 +#: ../src/mesh/impls/bout/boutmesh.cxx:190 #, c++-format msgid "" "\t -> Core region jyseps2_2-jyseps1_2 ({:d}-{:d} = {:d}) must be a multiple " "of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:309 +#: ../src/mesh/impls/bout/boutmesh.cxx:300 msgid "\t -> Good value\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:180 +#: ../src/mesh/impls/bout/boutmesh.cxx:171 #, c++-format msgid "" "\t -> Leg region jyseps1_1+1 ({:d}) must be a multiple of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:215 +#: ../src/mesh/impls/bout/boutmesh.cxx:206 #, c++-format msgid "" "\t -> leg region jyseps1_2-ny_inner+1 ({:d}-{:d}+1 = {:d}) must be a " "multiple of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:232 +#: ../src/mesh/impls/bout/boutmesh.cxx:223 #, c++-format msgid "" "\t -> leg region ny-jyseps2_2-1 ({:d}-{:d}-1 = {:d}) must be a multiple of " "MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:208 +#: ../src/mesh/impls/bout/boutmesh.cxx:199 #, c++-format msgid "" "\t -> leg region ny_inner-jyseps2_1-1 ({:d}-{:d}-1 = {:d}) must be a " "multiple of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:175 +#: ../src/mesh/impls/bout/boutmesh.cxx:166 #, c++-format msgid "\t -> ny/NYPE ({:d}/{:d} = {:d}) must be >= MYG ({:d})\n" msgstr "" #: ../src/bout++.cxx:575 #, c++-format +msgid "\tADIOS2 support {}\n" +msgstr "" + +#: ../src/bout++.cxx:583 +#, c++-format msgid "\tBacktrace in exceptions {}\n" msgstr "" @@ -83,40 +88,40 @@ msgstr "" #. Processors divide equally #. Mesh in X divides equally #. Mesh in Y divides equally -#: ../src/mesh/impls/bout/boutmesh.cxx:297 +#: ../src/mesh/impls/bout/boutmesh.cxx:288 #, c++-format msgid "\tCandidate value: {:d}\n" msgstr "" -#: ../src/bout++.cxx:576 +#: ../src/bout++.cxx:584 #, c++-format msgid "\tColour in logs {}\n" msgstr "" -#: ../src/bout++.cxx:594 +#: ../src/bout++.cxx:599 msgid "\tCommand line options for this run : " msgstr "" #. The stringify is needed here as BOUT_FLAGS_STRING may already contain quoted strings #. which could cause problems (e.g. terminate strings). -#: ../src/bout++.cxx:590 +#: ../src/bout++.cxx:595 #, c++-format msgid "\tCompiled with flags : {:s}\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:324 +#: ../src/mesh/impls/bout/boutmesh.cxx:315 #, c++-format msgid "" "\tDomain split (NXPE={:d}, NYPE={:d}) into domains (localNx={:d}, " "localNy={:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:364 +#: ../src/mesh/impls/bout/boutmesh.cxx:357 #, c++-format msgid "\tERROR: Cannot split {:d} Y points equally between {:d} processors\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:372 +#: ../src/mesh/impls/bout/boutmesh.cxx:365 #, c++-format msgid "\tERROR: Cannot split {:d} Z points equally between {:d} processors\n" msgstr "" @@ -133,31 +138,31 @@ msgstr "" msgid "\tEmpty key or value in command line '{:s}'\n" msgstr "" -#: ../src/bout++.cxx:582 +#: ../src/bout++.cxx:587 #, c++-format msgid "\tExtra debug output {}\n" msgstr "" -#: ../src/bout++.cxx:561 +#: ../src/bout++.cxx:568 #, c++-format msgid "\tFFT support {}\n" msgstr "" -#: ../src/bout++.cxx:585 +#: ../src/bout++.cxx:590 #, c++-format msgid "\tField name tracking {}\n" msgstr "" -#: ../src/bout++.cxx:583 +#: ../src/bout++.cxx:588 #, c++-format msgid "\tFloating-point exceptions {}\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:440 +#: ../src/mesh/impls/bout/boutmesh.cxx:476 msgid "\tGrid size: " msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:463 +#: ../src/mesh/impls/bout/boutmesh.cxx:499 msgid "\tGuard cells (x,y,z): " msgstr "" @@ -168,17 +173,17 @@ msgid "" "\tLine: {:s}" msgstr "" -#: ../src/bout++.cxx:563 +#: ../src/bout++.cxx:570 #, c++-format msgid "\tLAPACK support {}\n" msgstr "" -#: ../src/bout++.cxx:586 +#: ../src/bout++.cxx:591 #, c++-format msgid "\tMessage stack {}\n" msgstr "" -#: ../src/bout++.cxx:560 +#: ../src/bout++.cxx:567 #, c++-format msgid "\tMetrics mode is {}\n" msgstr "" @@ -188,35 +193,31 @@ msgstr "" msgid "\tMultiple '=' in command-line argument '{:s}'\n" msgstr "" -#: ../src/bout++.cxx:562 +#: ../src/bout++.cxx:569 #, c++-format msgid "\tNatural language support {}\n" msgstr "" -#: ../src/bout++.cxx:567 +#: ../src/bout++.cxx:574 #, c++-format msgid "\tNetCDF support {}{}\n" msgstr "" -#: ../src/bout++.cxx:577 +#: ../src/bout++.cxx:585 #, c++-format -msgid "\tOpenMP parallelisation {}" +msgid "\tOpenMP parallelisation {}, using {} threads\n" msgstr "" #. Mark the option as used #. Option not found -#: ../src/sys/options.cxx:311 ../src/sys/options.cxx:380 -#: ../src/sys/options.cxx:415 ../src/sys/options.cxx:457 -#: ../src/sys/options.cxx:717 ../src/sys/options.cxx:744 -#: ../src/sys/options.cxx:771 ../include/bout/options.hxx:516 -#: ../include/bout/options.hxx:549 ../include/bout/options.hxx:573 -#: ../include/bout/options.hxx:820 +#: ../include/bout/options.hxx:586 ../include/bout/options.hxx:619 +#: ../include/bout/options.hxx:643 ../include/bout/options.hxx:896 msgid "\tOption " msgstr "" -#: ../src/sys/options.cxx:447 +#: ../src/sys/options.cxx:369 #, c++-format -msgid "\tOption '{:s}': Boolean expected. Got '{:s}'\n" +msgid "\tOption {} = {}" msgstr "" #: ../src/sys/options/options_ini.cxx:70 @@ -224,62 +225,62 @@ msgstr "" msgid "\tOptions file '{:s}' not found\n" msgstr "" -#: ../src/bout++.cxx:568 +#: ../src/bout++.cxx:576 #, c++-format msgid "\tPETSc support {}\n" msgstr "" -#: ../src/bout++.cxx:571 +#: ../src/bout++.cxx:579 #, c++-format msgid "\tPVODE support {}\n" msgstr "" -#: ../src/bout++.cxx:557 +#: ../src/bout++.cxx:564 msgid "\tParallel NetCDF support disabled\n" msgstr "" -#: ../src/bout++.cxx:555 +#: ../src/bout++.cxx:562 msgid "\tParallel NetCDF support enabled\n" msgstr "" -#: ../src/bout++.cxx:569 +#: ../src/bout++.cxx:577 #, c++-format msgid "\tPretty function name support {}\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:437 +#: ../src/mesh/impls/bout/boutmesh.cxx:473 msgid "\tRead nz from input grid file\n" msgstr "" -#: ../src/mesh/mesh.cxx:238 +#: ../src/mesh/mesh.cxx:249 msgid "\tReading contravariant vector " msgstr "" -#: ../src/mesh/mesh.cxx:231 ../src/mesh/mesh.cxx:252 +#: ../src/mesh/mesh.cxx:242 ../src/mesh/mesh.cxx:263 msgid "\tReading covariant vector " msgstr "" -#: ../src/bout++.cxx:548 +#: ../src/bout++.cxx:555 #, c++-format msgid "\tRuntime error checking {}" msgstr "" -#: ../src/bout++.cxx:573 +#: ../src/bout++.cxx:581 #, c++-format msgid "\tSLEPc support {}\n" msgstr "" -#: ../src/bout++.cxx:574 +#: ../src/bout++.cxx:582 #, c++-format msgid "\tSUNDIALS support {}\n" msgstr "" -#: ../src/bout++.cxx:572 +#: ../src/bout++.cxx:580 #, c++-format msgid "\tScore-P support {}\n" msgstr "" -#: ../src/bout++.cxx:584 +#: ../src/bout++.cxx:589 #, fuzzy, c++-format msgid "\tSignal handling support {}\n" msgstr "\tTraitement du signal désactivé\n" @@ -289,7 +290,7 @@ msgstr "\tTraitement du signal désactivé\n" msgid "\tUsing a timestep {:e}\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:577 +#: ../src/mesh/impls/bout/boutmesh.cxx:613 msgid "\tdone\n" msgstr "" @@ -299,7 +300,7 @@ msgid "" "\tSplit Runge-Kutta-Legendre and SSP-RK3 solver\n" msgstr "" -#: ../src/bout++.cxx:371 +#: ../src/bout++.cxx:378 msgid "" "\n" " -d \t\tLook in for input/output files\n" @@ -310,7 +311,7 @@ msgid "" " -q, --quiet\t\t\tDecrease verbosity\n" msgstr "" -#: ../src/sys/expressionparser.cxx:302 +#: ../src/sys/expressionparser.cxx:341 #, c++-format msgid "" "\n" @@ -318,7 +319,7 @@ msgid "" " Did you mean '{0}'?" msgstr "" -#: ../src/solver/solver.cxx:580 +#: ../src/solver/solver.cxx:586 #, fuzzy, c++-format msgid "" "\n" @@ -327,7 +328,7 @@ msgstr "" "\n" "L'exécution se termine à {:s}\n" -#: ../src/solver/solver.cxx:532 +#: ../src/solver/solver.cxx:540 #, fuzzy, c++-format msgid "" "\n" @@ -339,7 +340,7 @@ msgstr "" #. Raw string to help with the formatting of the message, and a #. separate variable so clang-format doesn't barf on the #. exception -#: ../src/sys/options.cxx:1102 +#: ../src/sys/options.cxx:1158 msgid "" "\n" "There were unused input options:\n" @@ -367,7 +368,7 @@ msgid "" "{}" msgstr "" -#: ../src/bout++.cxx:382 +#: ../src/bout++.cxx:389 #, c++-format msgid "" " --print-config\t\tPrint the compile-time configuration\n" @@ -400,55 +401,55 @@ msgid "" "model source (e.g. {:s}.cxx)\n" msgstr "" -#: ../src/bout++.cxx:379 +#: ../src/bout++.cxx:386 msgid " -c, --color\t\t\tColor output using bout-log-color\n" msgstr "" -#: ../include/bout/options.hxx:823 +#: ../include/bout/options.hxx:899 msgid ") overwritten with:" msgstr "" -#: ../src/bout++.cxx:550 +#: ../src/bout++.cxx:557 #, c++-format msgid ", level {}" msgstr "" -#: ../src/bout++.cxx:579 -#, c++-format -msgid ", using {} threads" -msgstr "" - #: ../tests/unit/src/test_bout++.cxx:352 msgid "4 of 8" msgstr "" -#: ../src/sys/options.cxx:868 +#: ../src/sys/options.cxx:895 msgid "All options used\n" msgstr "" -#: ../src/bout++.cxx:528 +#: ../src/bout++.cxx:535 #, c++-format msgid "BOUT++ version {:s}\n" msgstr "" -#: ../src/bout++.cxx:143 +#: ../src/bout++.cxx:147 msgid "Bad command line arguments:\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:559 +#: ../src/sys/expressionparser.cxx:192 +#, c++-format +msgid "Boolean operator argument {:e} is not a bool" +msgstr "" + +#: ../src/mesh/impls/bout/boutmesh.cxx:595 msgid "Boundary regions in this processor: " msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:355 +#: ../src/mesh/impls/bout/boutmesh.cxx:348 #, c++-format msgid "Cannot split {:d} X points equally between {:d} processors\n" msgstr "" -#: ../src/bout++.cxx:818 +#: ../src/bout++.cxx:829 msgid "Check if a file exists, and exit if it does." msgstr "" -#: ../src/bout++.cxx:533 +#: ../src/bout++.cxx:540 #, fuzzy, c++-format msgid "" "Code compiled on {:s} at {:s}\n" @@ -461,7 +462,7 @@ msgstr "" msgid "Command line" msgstr "" -#: ../src/bout++.cxx:544 ../tests/unit/src/test_bout++.cxx:358 +#: ../src/bout++.cxx:551 ../tests/unit/src/test_bout++.cxx:358 msgid "Compile-time options:\n" msgstr "" @@ -469,16 +470,16 @@ msgstr "" msgid "Compiled with flags" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:568 +#: ../src/mesh/impls/bout/boutmesh.cxx:604 msgid "Constructing default regions" msgstr "" -#: ../src/bout++.cxx:520 +#: ../src/bout++.cxx:527 #, c++-format msgid "Could not create PID file {:s}" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:318 +#: ../src/mesh/impls/bout/boutmesh.cxx:309 msgid "" "Could not find a valid value for NXPE. Try a different number of processors." msgstr "" @@ -488,28 +489,28 @@ msgstr "" msgid "Could not open output file '{:s}'\n" msgstr "" -#: ../src/bout++.cxx:652 +#: ../src/bout++.cxx:657 #, c++-format msgid "Could not open {:s}/{:s}.{:d} for writing" msgstr "" #. Error reading -#: ../src/mesh/mesh.cxx:532 +#: ../src/mesh/mesh.cxx:543 #, c++-format msgid "Could not read integer array '{:s}'\n" msgstr "" #. Failed . Probably not important enough to stop the simulation -#: ../src/bout++.cxx:632 +#: ../src/bout++.cxx:637 msgid "Could not run bout-log-color. Make sure it is in your PATH\n" msgstr "" -#: ../src/solver/solver.cxx:765 +#: ../src/solver/solver.cxx:772 #, c++-format msgid "Couldn't add Monitor: {:g} is not a multiple of {:g}!" msgstr "" -#: ../src/sys/expressionparser.cxx:273 +#: ../src/sys/expressionparser.cxx:312 #, c++-format msgid "" "Couldn't find generator '{}'. BOUT++ expressions are now case-sensitive, so " @@ -518,70 +519,70 @@ msgid "" "{}" msgstr "" -#: ../src/mesh/mesh.cxx:568 +#: ../src/mesh/mesh.cxx:587 #, c++-format msgid "Couldn't find region {:s} in regionMap2D" msgstr "" -#: ../src/mesh/mesh.cxx:560 +#: ../src/mesh/mesh.cxx:571 ../src/mesh/mesh.cxx:579 #, c++-format msgid "Couldn't find region {:s} in regionMap3D" msgstr "" -#: ../src/mesh/mesh.cxx:576 +#: ../src/mesh/mesh.cxx:595 #, c++-format msgid "Couldn't find region {:s} in regionMapPerp" msgstr "" #. Convert any exceptions to something a bit more useful -#: ../src/sys/options.cxx:336 +#: ../src/sys/options.cxx:361 #, c++-format msgid "Couldn't get {} from option {:s} = '{:s}': {}" msgstr "" -#: ../src/bout++.cxx:508 +#: ../src/bout++.cxx:515 #, fuzzy, c++-format msgid "DataDir \"{:s}\" does not exist or is not accessible\n" msgstr "" "Le répertoire de données \"{:s}\" n'existe pas ou n'est pas accessible\n" -#: ../src/bout++.cxx:505 +#: ../src/bout++.cxx:512 #, fuzzy, c++-format msgid "DataDir \"{:s}\" is not a directory\n" msgstr "\"{:s}\" n'est pas un répertoire\n" -#: ../src/solver/solver.cxx:665 +#: ../src/solver/solver.cxx:671 msgid "ERROR: Solver is already initialised\n" msgstr "" -#: ../src/bout++.cxx:209 +#: ../src/bout++.cxx:216 #, fuzzy, c++-format msgid "Error encountered during initialisation: {:s}\n" msgstr "Erreur rencontrée lors de l'initialisation : {:s}\n" -#: ../src/bout++.cxx:744 +#: ../src/bout++.cxx:751 msgid "Error whilst writing settings" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:332 +#: ../src/mesh/impls/bout/boutmesh.cxx:323 #, c++-format msgid "Error: nx must be greater than 2 times MXG (2 * {:d})" msgstr "" -#: ../src/solver/solver.cxx:512 +#: ../src/solver/solver.cxx:520 msgid "Failed to initialise solver-> Aborting\n" msgstr "Échec d'initialisation du solutionneur -> Abandonner\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:290 +#: ../src/mesh/impls/bout/boutmesh.cxx:281 #, c++-format msgid "Finding value for NXPE (ideal = {:f})\n" msgstr "" -#: ../src/solver/solver.cxx:668 +#: ../src/solver/solver.cxx:674 msgid "Initialising solver\n" msgstr "" -#: ../src/bout++.cxx:494 +#: ../src/bout++.cxx:501 msgid "" "Input and output file for settings must be different.\n" "Provide -o to avoid this issue.\n" @@ -591,122 +592,122 @@ msgstr "" msgid "Invalid command line option '-' found - maybe check whitespace?" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:400 +#: ../src/mesh/impls/bout/boutmesh.cxx:436 msgid "Loading mesh" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:415 +#: ../src/mesh/impls/bout/boutmesh.cxx:451 msgid "Mesh must contain nx" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:419 +#: ../src/mesh/impls/bout/boutmesh.cxx:455 msgid "Mesh must contain ny" msgstr "" #. Not found -#: ../src/mesh/mesh.cxx:536 +#: ../src/mesh/mesh.cxx:547 #, c++-format msgid "Missing integer array {:s}\n" msgstr "" -#: ../src/solver/solver.cxx:905 +#: ../src/solver/solver.cxx:911 #, c++-format msgid "Monitor signalled to quit (exception {})\n" msgstr "" -#: ../src/solver/solver.cxx:883 +#: ../src/solver/solver.cxx:889 #, c++-format msgid "Monitor signalled to quit (return code {})" msgstr "" -#: ../src/bout++.cxx:823 +#: ../src/bout++.cxx:834 msgid "Name of file whose existence triggers a stop" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:565 +#: ../src/mesh/impls/bout/boutmesh.cxx:601 msgid "No boundary regions in this processor" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:550 +#: ../src/mesh/impls/bout/boutmesh.cxx:586 msgid "No boundary regions; domain is periodic\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:254 +#: ../src/mesh/impls/bout/boutmesh.cxx:245 #, c++-format msgid "" "Number of processors ({:d}) not divisible by NPs in x direction ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:267 +#: ../src/mesh/impls/bout/boutmesh.cxx:258 #, c++-format msgid "" "Number of processors ({:d}) not divisible by NPs in y direction ({:d})\n" msgstr "" #. Less than 2 time-steps left -#: ../src/bout++.cxx:896 +#: ../src/bout++.cxx:908 #, c++-format msgid "Only {:e} seconds ({:.2f} steps) left. Quitting\n" msgstr "" -#: ../src/sys/options.cxx:303 ../src/sys/options.cxx:345 -#: ../src/sys/options.cxx:393 ../src/sys/options.cxx:428 -#: ../src/sys/options.cxx:703 ../src/sys/options.cxx:730 -#: ../src/sys/options.cxx:757 +#: ../src/sys/options.cxx:382 ../src/sys/options.cxx:398 +#: ../src/sys/options.cxx:441 ../src/sys/options.cxx:471 +#: ../src/sys/options.cxx:745 ../src/sys/options.cxx:767 +#: ../src/sys/options.cxx:789 #, c++-format msgid "Option {:s} has no value" msgstr "" #. Doesn't exist -#: ../src/sys/options.cxx:159 +#: ../src/sys/options.cxx:172 #, c++-format msgid "Option {:s}:{:s} does not exist" msgstr "" -#: ../include/bout/options.hxx:828 +#: ../include/bout/options.hxx:904 #, c++-format msgid "" "Options: Setting a value from same source ({:s}) to new value '{:s}' - old " "value was '{:s}'." msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:552 +#: ../src/mesh/impls/bout/boutmesh.cxx:588 msgid "Possible boundary regions are: " msgstr "" -#: ../src/bout++.cxx:538 +#: ../src/bout++.cxx:545 #, c++-format msgid "" "Processor number: {:d} of {:d}\n" "\n" msgstr "" -#: ../src/mesh/mesh.cxx:609 +#: ../src/mesh/mesh.cxx:642 #, c++-format msgid "Registered region 2D {:s}" msgstr "" -#: ../src/mesh/mesh.cxx:599 +#: ../src/mesh/mesh.cxx:632 #, c++-format msgid "Registered region 3D {:s}" msgstr "" -#: ../src/mesh/mesh.cxx:619 +#: ../src/mesh/mesh.cxx:652 #, c++-format msgid "Registered region Perp {:s}" msgstr "" -#: ../src/bout++.cxx:529 +#: ../src/bout++.cxx:536 #, c++-format msgid "Revision: {:s}\n" msgstr "" -#: ../src/solver/solver.cxx:581 +#: ../src/solver/solver.cxx:587 msgid "Run time : " msgstr "Temps d'exécution : " #. / Run the solver -#: ../src/solver/solver.cxx:525 +#: ../src/solver/solver.cxx:533 msgid "" "Running simulation\n" "\n" @@ -718,66 +719,66 @@ msgstr "" msgid "Signal" msgstr "" -#: ../src/bout++.cxx:865 +#: ../src/bout++.cxx:876 msgid "" "Sim Time | RHS evals | Wall Time | Calc Inv Comm I/O SOLVER\n" "\n" msgstr "" -#: ../src/bout++.cxx:868 +#: ../src/bout++.cxx:879 msgid "" "Sim Time | RHS_e evals | RHS_I evals | Wall Time | Calc Inv " "Comm I/O SOLVER\n" "\n" msgstr "" -#: ../src/solver/solver.cxx:506 +#: ../src/solver/solver.cxx:514 #, fuzzy, c++-format msgid "Solver running for {:d} outputs with monitor timestep of {:e}\n" msgstr "" "Le solveur fonctionne pour {:d} sorties avec un temps de moniteur de {:e}\n" -#: ../src/solver/solver.cxx:502 +#: ../src/solver/solver.cxx:510 #, fuzzy, c++-format msgid "Solver running for {:d} outputs with output timestep of {:e}\n" msgstr "" "Le solveur fonctionne pour {:d} sorties avec un pas de sortie de {:e}\n" -#: ../src/solver/solver.cxx:781 +#: ../src/solver/solver.cxx:788 #, c++-format msgid "" "Solver::addMonitor: Cannot reduce timestep (from {:g} to {:g}) after init is " "called!" msgstr "" -#: ../src/solver/solver.cxx:1281 +#: ../src/solver/solver.cxx:1289 #, c++-format msgid "" "Time derivative at wrong location - Field is at {:s}, derivative is at {:s} " "for field '{:s}'\n" msgstr "" -#: ../src/solver/solver.cxx:1480 +#: ../src/solver/solver.cxx:1494 #, c++-format msgid "Time derivative for variable '{:s}' not set" msgstr "" -#: ../src/mesh/mesh.cxx:605 +#: ../src/mesh/mesh.cxx:638 #, c++-format msgid "Trying to add an already existing region {:s} to regionMap2D" msgstr "" -#: ../src/mesh/mesh.cxx:595 +#: ../src/mesh/mesh.cxx:614 #, c++-format msgid "Trying to add an already existing region {:s} to regionMap3D" msgstr "" -#: ../src/mesh/mesh.cxx:616 +#: ../src/mesh/mesh.cxx:649 #, c++-format msgid "Trying to add an already existing region {:s} to regionMapPerp" msgstr "" -#: ../src/sys/options.cxx:99 ../src/sys/options.cxx:138 +#: ../src/sys/options.cxx:112 ../src/sys/options.cxx:151 #, c++-format msgid "" "Trying to index Option '{0}' with '{1}', but '{0}' is a value, not a " @@ -786,37 +787,37 @@ msgid "" "rename one of them.\n" msgstr "" -#: ../src/mesh/coordinates.cxx:1462 +#: ../src/mesh/coordinates.cxx:1464 msgid "" "Unrecognised paralleltransform option.\n" "Valid choices are 'identity', 'shifted', 'fci'" msgstr "" -#: ../src/sys/options.cxx:872 +#: ../src/sys/options.cxx:899 msgid "Unused options:\n" msgstr "" -#: ../src/bout++.cxx:439 +#: ../src/bout++.cxx:446 #, c++-format msgid "Usage is {:s} -d \n" msgstr "" -#: ../src/bout++.cxx:448 +#: ../src/bout++.cxx:455 #, c++-format msgid "Usage is {:s} -f \n" msgstr "" -#: ../src/bout++.cxx:466 +#: ../src/bout++.cxx:473 #, c++-format msgid "Usage is {:s} -l \n" msgstr "" -#: ../src/bout++.cxx:457 +#: ../src/bout++.cxx:464 #, c++-format msgid "Usage is {:s} -o \n" msgstr "" -#: ../src/bout++.cxx:353 +#: ../src/bout++.cxx:360 #, c++-format msgid "Usage is {} {} \n" msgstr "" @@ -827,7 +828,7 @@ msgstr "" #. Print help message -- note this will be displayed once per processor as we've not #. started MPI yet. -#: ../src/bout++.cxx:367 +#: ../src/bout++.cxx:374 #, c++-format msgid "" "Usage: {:s} [-d ] [-f ] [restart [append]] " @@ -835,94 +836,99 @@ msgid "" msgstr "" #. restart file should be written by physics model -#: ../src/solver/solver.cxx:921 +#: ../src/solver/solver.cxx:927 msgid "User signalled to quit. Returning\n" msgstr "" -#: ../src/sys/options.cxx:373 +#: ../src/sys/options.cxx:486 +#, fuzzy, c++-format +msgid "Value for option {:s} = {:e} is not a bool" +msgstr "\"{:s}\" n'est pas un répertoire\n" + +#: ../src/sys/options.cxx:426 #, c++-format msgid "Value for option {:s} = {:e} is not an integer" msgstr "" -#: ../src/sys/options.cxx:408 +#: ../src/sys/options.cxx:456 #, c++-format msgid "Value for option {:s} cannot be converted to a BoutReal" msgstr "" -#: ../src/sys/options.cxx:581 +#: ../src/sys/options.cxx:623 #, c++-format msgid "Value for option {:s} cannot be converted to a Field2D" msgstr "" -#: ../src/sys/options.cxx:529 +#: ../src/sys/options.cxx:571 #, c++-format msgid "Value for option {:s} cannot be converted to a Field3D" msgstr "" -#: ../src/sys/options.cxx:663 +#: ../src/sys/options.cxx:705 #, c++-format msgid "Value for option {:s} cannot be converted to a FieldPerp" msgstr "" -#: ../src/sys/options.cxx:451 +#: ../src/sys/options.cxx:491 #, c++-format msgid "Value for option {:s} cannot be converted to a bool" msgstr "" -#: ../src/sys/options.cxx:709 +#: ../src/sys/options.cxx:751 #, c++-format msgid "Value for option {:s} cannot be converted to an Array" msgstr "" -#: ../src/sys/options.cxx:736 +#: ../src/sys/options.cxx:773 #, c++-format msgid "Value for option {:s} cannot be converted to an Matrix" msgstr "" -#: ../src/sys/options.cxx:763 +#: ../src/sys/options.cxx:795 #, c++-format msgid "Value for option {:s} cannot be converted to an Tensor" msgstr "" #. Another type which can't be converted -#: ../src/sys/options.cxx:365 +#: ../src/sys/options.cxx:418 #, c++-format msgid "Value for option {:s} is not an integer" msgstr "" -#: ../src/solver/solver.cxx:1232 ../src/solver/solver.cxx:1238 +#: ../src/solver/solver.cxx:1240 ../src/solver/solver.cxx:1246 #, c++-format msgid "Variable '{:s}' not initialised" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:431 +#: ../src/mesh/impls/bout/boutmesh.cxx:467 #, c++-format msgid "" "WARNING: Number of toroidal points should be 2^n for efficient FFT " "performance -- consider changing MZ ({:d}) if using FFTs\n" msgstr "" -#: ../src/mesh/coordinates.cxx:633 +#: ../src/mesh/coordinates.cxx:635 msgid "WARNING: extrapolating input mesh quantities into x-boundary cells\n" msgstr "" -#: ../src/mesh/coordinates.cxx:410 +#: ../src/mesh/coordinates.cxx:412 msgid "" "WARNING: extrapolating input mesh quantities into x-boundary cells. Set " "option extrapolate_x=false to disable this.\n" msgstr "" -#: ../src/mesh/coordinates.cxx:638 +#: ../src/mesh/coordinates.cxx:640 msgid "WARNING: extrapolating input mesh quantities into y-boundary cells\n" msgstr "" -#: ../src/mesh/coordinates.cxx:415 +#: ../src/mesh/coordinates.cxx:417 msgid "" "WARNING: extrapolating input mesh quantities into y-boundary cells. Set " "option extrapolate_y=false to disable this.\n" msgstr "" -#: ../src/bout++.cxx:814 +#: ../src/bout++.cxx:825 msgid "Wall time limit in hours. By default (< 0), no limit" msgstr "" @@ -932,7 +938,7 @@ msgid "Writing options to file {:s}\n" msgstr "" #. / The source label given to default values -#: ../src/sys/options.cxx:15 +#: ../src/sys/options.cxx:34 msgid "default" msgstr "" @@ -946,10 +952,6 @@ msgstr "" #~ msgid "\tSignal handling enabled\n" #~ msgstr "\tTraitement du signal activé\n" -#, fuzzy -#~ msgid "Option {:s} is not a section" -#~ msgstr "\"{:s}\" n'est pas un répertoire\n" - #, fuzzy #~ msgid "Error encountered during initialisation\n" #~ msgstr "Erreur rencontrée lors de l'initialisation\n" diff --git a/locale/libbout.pot b/locale/libbout.pot index 3895001ba0..2ef0618dd0 100644 --- a/locale/libbout.pot +++ b/locale/libbout.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-12 09:17+0100\n" +"POT-Creation-Date: 2025-08-13 23:37+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,65 +17,70 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:191 +#: ../src/mesh/impls/bout/boutmesh.cxx:182 #, c++-format msgid "" "\t -> Core region jyseps2_1-jyseps1_1 ({:d}-{:d} = {:d}) must be a multiple " "of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:224 +#: ../src/mesh/impls/bout/boutmesh.cxx:215 #, c++-format msgid "" "\t -> Core region jyseps2_2-jyseps1_1 ({:d}-{:d} = {:d}) must be a multiple " "of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:199 +#: ../src/mesh/impls/bout/boutmesh.cxx:190 #, c++-format msgid "" "\t -> Core region jyseps2_2-jyseps1_2 ({:d}-{:d} = {:d}) must be a multiple " "of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:309 +#: ../src/mesh/impls/bout/boutmesh.cxx:300 msgid "\t -> Good value\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:180 +#: ../src/mesh/impls/bout/boutmesh.cxx:171 #, c++-format msgid "" "\t -> Leg region jyseps1_1+1 ({:d}) must be a multiple of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:215 +#: ../src/mesh/impls/bout/boutmesh.cxx:206 #, c++-format msgid "" "\t -> leg region jyseps1_2-ny_inner+1 ({:d}-{:d}+1 = {:d}) must be a " "multiple of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:232 +#: ../src/mesh/impls/bout/boutmesh.cxx:223 #, c++-format msgid "" "\t -> leg region ny-jyseps2_2-1 ({:d}-{:d}-1 = {:d}) must be a multiple of " "MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:208 +#: ../src/mesh/impls/bout/boutmesh.cxx:199 #, c++-format msgid "" "\t -> leg region ny_inner-jyseps2_1-1 ({:d}-{:d}-1 = {:d}) must be a " "multiple of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:175 +#: ../src/mesh/impls/bout/boutmesh.cxx:166 #, c++-format msgid "\t -> ny/NYPE ({:d}/{:d} = {:d}) must be >= MYG ({:d})\n" msgstr "" #: ../src/bout++.cxx:575 #, c++-format +msgid "\tADIOS2 support {}\n" +msgstr "" + +#: ../src/bout++.cxx:583 +#, c++-format msgid "\tBacktrace in exceptions {}\n" msgstr "" @@ -83,40 +88,40 @@ msgstr "" #. Processors divide equally #. Mesh in X divides equally #. Mesh in Y divides equally -#: ../src/mesh/impls/bout/boutmesh.cxx:297 +#: ../src/mesh/impls/bout/boutmesh.cxx:288 #, c++-format msgid "\tCandidate value: {:d}\n" msgstr "" -#: ../src/bout++.cxx:576 +#: ../src/bout++.cxx:584 #, c++-format msgid "\tColour in logs {}\n" msgstr "" -#: ../src/bout++.cxx:594 +#: ../src/bout++.cxx:599 msgid "\tCommand line options for this run : " msgstr "" #. The stringify is needed here as BOUT_FLAGS_STRING may already contain quoted strings #. which could cause problems (e.g. terminate strings). -#: ../src/bout++.cxx:590 +#: ../src/bout++.cxx:595 #, c++-format msgid "\tCompiled with flags : {:s}\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:324 +#: ../src/mesh/impls/bout/boutmesh.cxx:315 #, c++-format msgid "" "\tDomain split (NXPE={:d}, NYPE={:d}) into domains (localNx={:d}, " "localNy={:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:364 +#: ../src/mesh/impls/bout/boutmesh.cxx:357 #, c++-format msgid "\tERROR: Cannot split {:d} Y points equally between {:d} processors\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:372 +#: ../src/mesh/impls/bout/boutmesh.cxx:365 #, c++-format msgid "\tERROR: Cannot split {:d} Z points equally between {:d} processors\n" msgstr "" @@ -133,31 +138,31 @@ msgstr "" msgid "\tEmpty key or value in command line '{:s}'\n" msgstr "" -#: ../src/bout++.cxx:582 +#: ../src/bout++.cxx:587 #, c++-format msgid "\tExtra debug output {}\n" msgstr "" -#: ../src/bout++.cxx:561 +#: ../src/bout++.cxx:568 #, c++-format msgid "\tFFT support {}\n" msgstr "" -#: ../src/bout++.cxx:585 +#: ../src/bout++.cxx:590 #, c++-format msgid "\tField name tracking {}\n" msgstr "" -#: ../src/bout++.cxx:583 +#: ../src/bout++.cxx:588 #, c++-format msgid "\tFloating-point exceptions {}\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:440 +#: ../src/mesh/impls/bout/boutmesh.cxx:476 msgid "\tGrid size: " msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:463 +#: ../src/mesh/impls/bout/boutmesh.cxx:499 msgid "\tGuard cells (x,y,z): " msgstr "" @@ -168,17 +173,17 @@ msgid "" "\tLine: {:s}" msgstr "" -#: ../src/bout++.cxx:563 +#: ../src/bout++.cxx:570 #, c++-format msgid "\tLAPACK support {}\n" msgstr "" -#: ../src/bout++.cxx:586 +#: ../src/bout++.cxx:591 #, c++-format msgid "\tMessage stack {}\n" msgstr "" -#: ../src/bout++.cxx:560 +#: ../src/bout++.cxx:567 #, c++-format msgid "\tMetrics mode is {}\n" msgstr "" @@ -188,35 +193,31 @@ msgstr "" msgid "\tMultiple '=' in command-line argument '{:s}'\n" msgstr "" -#: ../src/bout++.cxx:562 +#: ../src/bout++.cxx:569 #, c++-format msgid "\tNatural language support {}\n" msgstr "" -#: ../src/bout++.cxx:567 +#: ../src/bout++.cxx:574 #, c++-format msgid "\tNetCDF support {}{}\n" msgstr "" -#: ../src/bout++.cxx:577 +#: ../src/bout++.cxx:585 #, c++-format -msgid "\tOpenMP parallelisation {}" +msgid "\tOpenMP parallelisation {}, using {} threads\n" msgstr "" #. Mark the option as used #. Option not found -#: ../src/sys/options.cxx:311 ../src/sys/options.cxx:380 -#: ../src/sys/options.cxx:415 ../src/sys/options.cxx:457 -#: ../src/sys/options.cxx:717 ../src/sys/options.cxx:744 -#: ../src/sys/options.cxx:771 ../include/bout/options.hxx:516 -#: ../include/bout/options.hxx:549 ../include/bout/options.hxx:573 -#: ../include/bout/options.hxx:820 +#: ../include/bout/options.hxx:586 ../include/bout/options.hxx:619 +#: ../include/bout/options.hxx:643 ../include/bout/options.hxx:896 msgid "\tOption " msgstr "" -#: ../src/sys/options.cxx:447 +#: ../src/sys/options.cxx:369 #, c++-format -msgid "\tOption '{:s}': Boolean expected. Got '{:s}'\n" +msgid "\tOption {} = {}" msgstr "" #: ../src/sys/options/options_ini.cxx:70 @@ -224,62 +225,62 @@ msgstr "" msgid "\tOptions file '{:s}' not found\n" msgstr "" -#: ../src/bout++.cxx:568 +#: ../src/bout++.cxx:576 #, c++-format msgid "\tPETSc support {}\n" msgstr "" -#: ../src/bout++.cxx:571 +#: ../src/bout++.cxx:579 #, c++-format msgid "\tPVODE support {}\n" msgstr "" -#: ../src/bout++.cxx:557 +#: ../src/bout++.cxx:564 msgid "\tParallel NetCDF support disabled\n" msgstr "" -#: ../src/bout++.cxx:555 +#: ../src/bout++.cxx:562 msgid "\tParallel NetCDF support enabled\n" msgstr "" -#: ../src/bout++.cxx:569 +#: ../src/bout++.cxx:577 #, c++-format msgid "\tPretty function name support {}\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:437 +#: ../src/mesh/impls/bout/boutmesh.cxx:473 msgid "\tRead nz from input grid file\n" msgstr "" -#: ../src/mesh/mesh.cxx:238 +#: ../src/mesh/mesh.cxx:249 msgid "\tReading contravariant vector " msgstr "" -#: ../src/mesh/mesh.cxx:231 ../src/mesh/mesh.cxx:252 +#: ../src/mesh/mesh.cxx:242 ../src/mesh/mesh.cxx:263 msgid "\tReading covariant vector " msgstr "" -#: ../src/bout++.cxx:548 +#: ../src/bout++.cxx:555 #, c++-format msgid "\tRuntime error checking {}" msgstr "" -#: ../src/bout++.cxx:573 +#: ../src/bout++.cxx:581 #, c++-format msgid "\tSLEPc support {}\n" msgstr "" -#: ../src/bout++.cxx:574 +#: ../src/bout++.cxx:582 #, c++-format msgid "\tSUNDIALS support {}\n" msgstr "" -#: ../src/bout++.cxx:572 +#: ../src/bout++.cxx:580 #, c++-format msgid "\tScore-P support {}\n" msgstr "" -#: ../src/bout++.cxx:584 +#: ../src/bout++.cxx:589 #, c++-format msgid "\tSignal handling support {}\n" msgstr "" @@ -289,7 +290,7 @@ msgstr "" msgid "\tUsing a timestep {:e}\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:577 +#: ../src/mesh/impls/bout/boutmesh.cxx:613 msgid "\tdone\n" msgstr "" @@ -299,7 +300,7 @@ msgid "" "\tSplit Runge-Kutta-Legendre and SSP-RK3 solver\n" msgstr "" -#: ../src/bout++.cxx:371 +#: ../src/bout++.cxx:378 msgid "" "\n" " -d \t\tLook in for input/output files\n" @@ -310,7 +311,7 @@ msgid "" " -q, --quiet\t\t\tDecrease verbosity\n" msgstr "" -#: ../src/sys/expressionparser.cxx:302 +#: ../src/sys/expressionparser.cxx:341 #, c++-format msgid "" "\n" @@ -318,14 +319,14 @@ msgid "" " Did you mean '{0}'?" msgstr "" -#: ../src/solver/solver.cxx:580 +#: ../src/solver/solver.cxx:586 #, c++-format msgid "" "\n" "Run finished at : {:s}\n" msgstr "" -#: ../src/solver/solver.cxx:532 +#: ../src/solver/solver.cxx:540 #, c++-format msgid "" "\n" @@ -335,7 +336,7 @@ msgstr "" #. Raw string to help with the formatting of the message, and a #. separate variable so clang-format doesn't barf on the #. exception -#: ../src/sys/options.cxx:1102 +#: ../src/sys/options.cxx:1158 msgid "" "\n" "There were unused input options:\n" @@ -363,7 +364,7 @@ msgid "" "{}" msgstr "" -#: ../src/bout++.cxx:382 +#: ../src/bout++.cxx:389 #, c++-format msgid "" " --print-config\t\tPrint the compile-time configuration\n" @@ -396,55 +397,55 @@ msgid "" "model source (e.g. {:s}.cxx)\n" msgstr "" -#: ../src/bout++.cxx:379 +#: ../src/bout++.cxx:386 msgid " -c, --color\t\t\tColor output using bout-log-color\n" msgstr "" -#: ../include/bout/options.hxx:823 +#: ../include/bout/options.hxx:899 msgid ") overwritten with:" msgstr "" -#: ../src/bout++.cxx:550 +#: ../src/bout++.cxx:557 #, c++-format msgid ", level {}" msgstr "" -#: ../src/bout++.cxx:579 -#, c++-format -msgid ", using {} threads" -msgstr "" - #: ../tests/unit/src/test_bout++.cxx:352 msgid "4 of 8" msgstr "" -#: ../src/sys/options.cxx:868 +#: ../src/sys/options.cxx:895 msgid "All options used\n" msgstr "" -#: ../src/bout++.cxx:528 +#: ../src/bout++.cxx:535 #, c++-format msgid "BOUT++ version {:s}\n" msgstr "" -#: ../src/bout++.cxx:143 +#: ../src/bout++.cxx:147 msgid "Bad command line arguments:\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:559 +#: ../src/sys/expressionparser.cxx:192 +#, c++-format +msgid "Boolean operator argument {:e} is not a bool" +msgstr "" + +#: ../src/mesh/impls/bout/boutmesh.cxx:595 msgid "Boundary regions in this processor: " msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:355 +#: ../src/mesh/impls/bout/boutmesh.cxx:348 #, c++-format msgid "Cannot split {:d} X points equally between {:d} processors\n" msgstr "" -#: ../src/bout++.cxx:818 +#: ../src/bout++.cxx:829 msgid "Check if a file exists, and exit if it does." msgstr "" -#: ../src/bout++.cxx:533 +#: ../src/bout++.cxx:540 #, c++-format msgid "" "Code compiled on {:s} at {:s}\n" @@ -455,7 +456,7 @@ msgstr "" msgid "Command line" msgstr "" -#: ../src/bout++.cxx:544 ../tests/unit/src/test_bout++.cxx:358 +#: ../src/bout++.cxx:551 ../tests/unit/src/test_bout++.cxx:358 msgid "Compile-time options:\n" msgstr "" @@ -463,16 +464,16 @@ msgstr "" msgid "Compiled with flags" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:568 +#: ../src/mesh/impls/bout/boutmesh.cxx:604 msgid "Constructing default regions" msgstr "" -#: ../src/bout++.cxx:520 +#: ../src/bout++.cxx:527 #, c++-format msgid "Could not create PID file {:s}" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:318 +#: ../src/mesh/impls/bout/boutmesh.cxx:309 msgid "" "Could not find a valid value for NXPE. Try a different number of processors." msgstr "" @@ -482,28 +483,28 @@ msgstr "" msgid "Could not open output file '{:s}'\n" msgstr "" -#: ../src/bout++.cxx:652 +#: ../src/bout++.cxx:657 #, c++-format msgid "Could not open {:s}/{:s}.{:d} for writing" msgstr "" #. Error reading -#: ../src/mesh/mesh.cxx:532 +#: ../src/mesh/mesh.cxx:543 #, c++-format msgid "Could not read integer array '{:s}'\n" msgstr "" #. Failed . Probably not important enough to stop the simulation -#: ../src/bout++.cxx:632 +#: ../src/bout++.cxx:637 msgid "Could not run bout-log-color. Make sure it is in your PATH\n" msgstr "" -#: ../src/solver/solver.cxx:765 +#: ../src/solver/solver.cxx:772 #, c++-format msgid "Couldn't add Monitor: {:g} is not a multiple of {:g}!" msgstr "" -#: ../src/sys/expressionparser.cxx:273 +#: ../src/sys/expressionparser.cxx:312 #, c++-format msgid "" "Couldn't find generator '{}'. BOUT++ expressions are now case-sensitive, so " @@ -512,69 +513,69 @@ msgid "" "{}" msgstr "" -#: ../src/mesh/mesh.cxx:568 +#: ../src/mesh/mesh.cxx:587 #, c++-format msgid "Couldn't find region {:s} in regionMap2D" msgstr "" -#: ../src/mesh/mesh.cxx:560 +#: ../src/mesh/mesh.cxx:571 ../src/mesh/mesh.cxx:579 #, c++-format msgid "Couldn't find region {:s} in regionMap3D" msgstr "" -#: ../src/mesh/mesh.cxx:576 +#: ../src/mesh/mesh.cxx:595 #, c++-format msgid "Couldn't find region {:s} in regionMapPerp" msgstr "" #. Convert any exceptions to something a bit more useful -#: ../src/sys/options.cxx:336 +#: ../src/sys/options.cxx:361 #, c++-format msgid "Couldn't get {} from option {:s} = '{:s}': {}" msgstr "" -#: ../src/bout++.cxx:508 +#: ../src/bout++.cxx:515 #, c++-format msgid "DataDir \"{:s}\" does not exist or is not accessible\n" msgstr "" -#: ../src/bout++.cxx:505 +#: ../src/bout++.cxx:512 #, c++-format msgid "DataDir \"{:s}\" is not a directory\n" msgstr "" -#: ../src/solver/solver.cxx:665 +#: ../src/solver/solver.cxx:671 msgid "ERROR: Solver is already initialised\n" msgstr "" -#: ../src/bout++.cxx:209 +#: ../src/bout++.cxx:216 #, c++-format msgid "Error encountered during initialisation: {:s}\n" msgstr "" -#: ../src/bout++.cxx:744 +#: ../src/bout++.cxx:751 msgid "Error whilst writing settings" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:332 +#: ../src/mesh/impls/bout/boutmesh.cxx:323 #, c++-format msgid "Error: nx must be greater than 2 times MXG (2 * {:d})" msgstr "" -#: ../src/solver/solver.cxx:512 +#: ../src/solver/solver.cxx:520 msgid "Failed to initialise solver-> Aborting\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:290 +#: ../src/mesh/impls/bout/boutmesh.cxx:281 #, c++-format msgid "Finding value for NXPE (ideal = {:f})\n" msgstr "" -#: ../src/solver/solver.cxx:668 +#: ../src/solver/solver.cxx:674 msgid "Initialising solver\n" msgstr "" -#: ../src/bout++.cxx:494 +#: ../src/bout++.cxx:501 msgid "" "Input and output file for settings must be different.\n" "Provide -o to avoid this issue.\n" @@ -584,122 +585,122 @@ msgstr "" msgid "Invalid command line option '-' found - maybe check whitespace?" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:400 +#: ../src/mesh/impls/bout/boutmesh.cxx:436 msgid "Loading mesh" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:415 +#: ../src/mesh/impls/bout/boutmesh.cxx:451 msgid "Mesh must contain nx" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:419 +#: ../src/mesh/impls/bout/boutmesh.cxx:455 msgid "Mesh must contain ny" msgstr "" #. Not found -#: ../src/mesh/mesh.cxx:536 +#: ../src/mesh/mesh.cxx:547 #, c++-format msgid "Missing integer array {:s}\n" msgstr "" -#: ../src/solver/solver.cxx:905 +#: ../src/solver/solver.cxx:911 #, c++-format msgid "Monitor signalled to quit (exception {})\n" msgstr "" -#: ../src/solver/solver.cxx:883 +#: ../src/solver/solver.cxx:889 #, c++-format msgid "Monitor signalled to quit (return code {})" msgstr "" -#: ../src/bout++.cxx:823 +#: ../src/bout++.cxx:834 msgid "Name of file whose existence triggers a stop" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:565 +#: ../src/mesh/impls/bout/boutmesh.cxx:601 msgid "No boundary regions in this processor" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:550 +#: ../src/mesh/impls/bout/boutmesh.cxx:586 msgid "No boundary regions; domain is periodic\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:254 +#: ../src/mesh/impls/bout/boutmesh.cxx:245 #, c++-format msgid "" "Number of processors ({:d}) not divisible by NPs in x direction ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:267 +#: ../src/mesh/impls/bout/boutmesh.cxx:258 #, c++-format msgid "" "Number of processors ({:d}) not divisible by NPs in y direction ({:d})\n" msgstr "" #. Less than 2 time-steps left -#: ../src/bout++.cxx:896 +#: ../src/bout++.cxx:908 #, c++-format msgid "Only {:e} seconds ({:.2f} steps) left. Quitting\n" msgstr "" -#: ../src/sys/options.cxx:303 ../src/sys/options.cxx:345 -#: ../src/sys/options.cxx:393 ../src/sys/options.cxx:428 -#: ../src/sys/options.cxx:703 ../src/sys/options.cxx:730 -#: ../src/sys/options.cxx:757 +#: ../src/sys/options.cxx:382 ../src/sys/options.cxx:398 +#: ../src/sys/options.cxx:441 ../src/sys/options.cxx:471 +#: ../src/sys/options.cxx:745 ../src/sys/options.cxx:767 +#: ../src/sys/options.cxx:789 #, c++-format msgid "Option {:s} has no value" msgstr "" #. Doesn't exist -#: ../src/sys/options.cxx:159 +#: ../src/sys/options.cxx:172 #, c++-format msgid "Option {:s}:{:s} does not exist" msgstr "" -#: ../include/bout/options.hxx:828 +#: ../include/bout/options.hxx:904 #, c++-format msgid "" "Options: Setting a value from same source ({:s}) to new value '{:s}' - old " "value was '{:s}'." msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:552 +#: ../src/mesh/impls/bout/boutmesh.cxx:588 msgid "Possible boundary regions are: " msgstr "" -#: ../src/bout++.cxx:538 +#: ../src/bout++.cxx:545 #, c++-format msgid "" "Processor number: {:d} of {:d}\n" "\n" msgstr "" -#: ../src/mesh/mesh.cxx:609 +#: ../src/mesh/mesh.cxx:642 #, c++-format msgid "Registered region 2D {:s}" msgstr "" -#: ../src/mesh/mesh.cxx:599 +#: ../src/mesh/mesh.cxx:632 #, c++-format msgid "Registered region 3D {:s}" msgstr "" -#: ../src/mesh/mesh.cxx:619 +#: ../src/mesh/mesh.cxx:652 #, c++-format msgid "Registered region Perp {:s}" msgstr "" -#: ../src/bout++.cxx:529 +#: ../src/bout++.cxx:536 #, c++-format msgid "Revision: {:s}\n" msgstr "" -#: ../src/solver/solver.cxx:581 +#: ../src/solver/solver.cxx:587 msgid "Run time : " msgstr "" #. / Run the solver -#: ../src/solver/solver.cxx:525 +#: ../src/solver/solver.cxx:533 msgid "" "Running simulation\n" "\n" @@ -709,64 +710,64 @@ msgstr "" msgid "Signal" msgstr "" -#: ../src/bout++.cxx:865 +#: ../src/bout++.cxx:876 msgid "" "Sim Time | RHS evals | Wall Time | Calc Inv Comm I/O SOLVER\n" "\n" msgstr "" -#: ../src/bout++.cxx:868 +#: ../src/bout++.cxx:879 msgid "" "Sim Time | RHS_e evals | RHS_I evals | Wall Time | Calc Inv " "Comm I/O SOLVER\n" "\n" msgstr "" -#: ../src/solver/solver.cxx:506 +#: ../src/solver/solver.cxx:514 #, c++-format msgid "Solver running for {:d} outputs with monitor timestep of {:e}\n" msgstr "" -#: ../src/solver/solver.cxx:502 +#: ../src/solver/solver.cxx:510 #, c++-format msgid "Solver running for {:d} outputs with output timestep of {:e}\n" msgstr "" -#: ../src/solver/solver.cxx:781 +#: ../src/solver/solver.cxx:788 #, c++-format msgid "" "Solver::addMonitor: Cannot reduce timestep (from {:g} to {:g}) after init is " "called!" msgstr "" -#: ../src/solver/solver.cxx:1281 +#: ../src/solver/solver.cxx:1289 #, c++-format msgid "" "Time derivative at wrong location - Field is at {:s}, derivative is at {:s} " "for field '{:s}'\n" msgstr "" -#: ../src/solver/solver.cxx:1480 +#: ../src/solver/solver.cxx:1494 #, c++-format msgid "Time derivative for variable '{:s}' not set" msgstr "" -#: ../src/mesh/mesh.cxx:605 +#: ../src/mesh/mesh.cxx:638 #, c++-format msgid "Trying to add an already existing region {:s} to regionMap2D" msgstr "" -#: ../src/mesh/mesh.cxx:595 +#: ../src/mesh/mesh.cxx:614 #, c++-format msgid "Trying to add an already existing region {:s} to regionMap3D" msgstr "" -#: ../src/mesh/mesh.cxx:616 +#: ../src/mesh/mesh.cxx:649 #, c++-format msgid "Trying to add an already existing region {:s} to regionMapPerp" msgstr "" -#: ../src/sys/options.cxx:99 ../src/sys/options.cxx:138 +#: ../src/sys/options.cxx:112 ../src/sys/options.cxx:151 #, c++-format msgid "" "Trying to index Option '{0}' with '{1}', but '{0}' is a value, not a " @@ -775,37 +776,37 @@ msgid "" "rename one of them.\n" msgstr "" -#: ../src/mesh/coordinates.cxx:1462 +#: ../src/mesh/coordinates.cxx:1464 msgid "" "Unrecognised paralleltransform option.\n" "Valid choices are 'identity', 'shifted', 'fci'" msgstr "" -#: ../src/sys/options.cxx:872 +#: ../src/sys/options.cxx:899 msgid "Unused options:\n" msgstr "" -#: ../src/bout++.cxx:439 +#: ../src/bout++.cxx:446 #, c++-format msgid "Usage is {:s} -d \n" msgstr "" -#: ../src/bout++.cxx:448 +#: ../src/bout++.cxx:455 #, c++-format msgid "Usage is {:s} -f \n" msgstr "" -#: ../src/bout++.cxx:466 +#: ../src/bout++.cxx:473 #, c++-format msgid "Usage is {:s} -l \n" msgstr "" -#: ../src/bout++.cxx:457 +#: ../src/bout++.cxx:464 #, c++-format msgid "Usage is {:s} -o \n" msgstr "" -#: ../src/bout++.cxx:353 +#: ../src/bout++.cxx:360 #, c++-format msgid "Usage is {} {} \n" msgstr "" @@ -816,7 +817,7 @@ msgstr "" #. Print help message -- note this will be displayed once per processor as we've not #. started MPI yet. -#: ../src/bout++.cxx:367 +#: ../src/bout++.cxx:374 #, c++-format msgid "" "Usage: {:s} [-d ] [-f ] [restart [append]] " @@ -824,94 +825,99 @@ msgid "" msgstr "" #. restart file should be written by physics model -#: ../src/solver/solver.cxx:921 +#: ../src/solver/solver.cxx:927 msgid "User signalled to quit. Returning\n" msgstr "" -#: ../src/sys/options.cxx:373 +#: ../src/sys/options.cxx:486 +#, c++-format +msgid "Value for option {:s} = {:e} is not a bool" +msgstr "" + +#: ../src/sys/options.cxx:426 #, c++-format msgid "Value for option {:s} = {:e} is not an integer" msgstr "" -#: ../src/sys/options.cxx:408 +#: ../src/sys/options.cxx:456 #, c++-format msgid "Value for option {:s} cannot be converted to a BoutReal" msgstr "" -#: ../src/sys/options.cxx:581 +#: ../src/sys/options.cxx:623 #, c++-format msgid "Value for option {:s} cannot be converted to a Field2D" msgstr "" -#: ../src/sys/options.cxx:529 +#: ../src/sys/options.cxx:571 #, c++-format msgid "Value for option {:s} cannot be converted to a Field3D" msgstr "" -#: ../src/sys/options.cxx:663 +#: ../src/sys/options.cxx:705 #, c++-format msgid "Value for option {:s} cannot be converted to a FieldPerp" msgstr "" -#: ../src/sys/options.cxx:451 +#: ../src/sys/options.cxx:491 #, c++-format msgid "Value for option {:s} cannot be converted to a bool" msgstr "" -#: ../src/sys/options.cxx:709 +#: ../src/sys/options.cxx:751 #, c++-format msgid "Value for option {:s} cannot be converted to an Array" msgstr "" -#: ../src/sys/options.cxx:736 +#: ../src/sys/options.cxx:773 #, c++-format msgid "Value for option {:s} cannot be converted to an Matrix" msgstr "" -#: ../src/sys/options.cxx:763 +#: ../src/sys/options.cxx:795 #, c++-format msgid "Value for option {:s} cannot be converted to an Tensor" msgstr "" #. Another type which can't be converted -#: ../src/sys/options.cxx:365 +#: ../src/sys/options.cxx:418 #, c++-format msgid "Value for option {:s} is not an integer" msgstr "" -#: ../src/solver/solver.cxx:1232 ../src/solver/solver.cxx:1238 +#: ../src/solver/solver.cxx:1240 ../src/solver/solver.cxx:1246 #, c++-format msgid "Variable '{:s}' not initialised" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:431 +#: ../src/mesh/impls/bout/boutmesh.cxx:467 #, c++-format msgid "" "WARNING: Number of toroidal points should be 2^n for efficient FFT " "performance -- consider changing MZ ({:d}) if using FFTs\n" msgstr "" -#: ../src/mesh/coordinates.cxx:633 +#: ../src/mesh/coordinates.cxx:635 msgid "WARNING: extrapolating input mesh quantities into x-boundary cells\n" msgstr "" -#: ../src/mesh/coordinates.cxx:410 +#: ../src/mesh/coordinates.cxx:412 msgid "" "WARNING: extrapolating input mesh quantities into x-boundary cells. Set " "option extrapolate_x=false to disable this.\n" msgstr "" -#: ../src/mesh/coordinates.cxx:638 +#: ../src/mesh/coordinates.cxx:640 msgid "WARNING: extrapolating input mesh quantities into y-boundary cells\n" msgstr "" -#: ../src/mesh/coordinates.cxx:415 +#: ../src/mesh/coordinates.cxx:417 msgid "" "WARNING: extrapolating input mesh quantities into y-boundary cells. Set " "option extrapolate_y=false to disable this.\n" msgstr "" -#: ../src/bout++.cxx:814 +#: ../src/bout++.cxx:825 msgid "Wall time limit in hours. By default (< 0), no limit" msgstr "" @@ -921,6 +927,6 @@ msgid "Writing options to file {:s}\n" msgstr "" #. / The source label given to default values -#: ../src/sys/options.cxx:15 +#: ../src/sys/options.cxx:34 msgid "default" msgstr "" diff --git a/locale/zh_CN/libbout.po b/locale/zh_CN/libbout.po index 2c53b5392c..ecf8517d62 100644 --- a/locale/zh_CN/libbout.po +++ b/locale/zh_CN/libbout.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: BOUT++ 4.2.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-12 09:17+0100\n" +"POT-Creation-Date: 2025-08-13 23:37+0100\n" "PO-Revision-Date: 2018-10-22 22:56+0100\n" "Last-Translator: \n" "Language-Team: Chinese (simplified)\n" @@ -16,65 +16,70 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:191 +#: ../src/mesh/impls/bout/boutmesh.cxx:182 #, c++-format msgid "" "\t -> Core region jyseps2_1-jyseps1_1 ({:d}-{:d} = {:d}) must be a multiple " "of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:224 +#: ../src/mesh/impls/bout/boutmesh.cxx:215 #, c++-format msgid "" "\t -> Core region jyseps2_2-jyseps1_1 ({:d}-{:d} = {:d}) must be a multiple " "of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:199 +#: ../src/mesh/impls/bout/boutmesh.cxx:190 #, c++-format msgid "" "\t -> Core region jyseps2_2-jyseps1_2 ({:d}-{:d} = {:d}) must be a multiple " "of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:309 +#: ../src/mesh/impls/bout/boutmesh.cxx:300 msgid "\t -> Good value\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:180 +#: ../src/mesh/impls/bout/boutmesh.cxx:171 #, c++-format msgid "" "\t -> Leg region jyseps1_1+1 ({:d}) must be a multiple of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:215 +#: ../src/mesh/impls/bout/boutmesh.cxx:206 #, c++-format msgid "" "\t -> leg region jyseps1_2-ny_inner+1 ({:d}-{:d}+1 = {:d}) must be a " "multiple of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:232 +#: ../src/mesh/impls/bout/boutmesh.cxx:223 #, c++-format msgid "" "\t -> leg region ny-jyseps2_2-1 ({:d}-{:d}-1 = {:d}) must be a multiple of " "MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:208 +#: ../src/mesh/impls/bout/boutmesh.cxx:199 #, c++-format msgid "" "\t -> leg region ny_inner-jyseps2_1-1 ({:d}-{:d}-1 = {:d}) must be a " "multiple of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:175 +#: ../src/mesh/impls/bout/boutmesh.cxx:166 #, c++-format msgid "\t -> ny/NYPE ({:d}/{:d} = {:d}) must be >= MYG ({:d})\n" msgstr "" #: ../src/bout++.cxx:575 #, c++-format +msgid "\tADIOS2 support {}\n" +msgstr "" + +#: ../src/bout++.cxx:583 +#, c++-format msgid "\tBacktrace in exceptions {}\n" msgstr "" @@ -82,40 +87,40 @@ msgstr "" #. Processors divide equally #. Mesh in X divides equally #. Mesh in Y divides equally -#: ../src/mesh/impls/bout/boutmesh.cxx:297 +#: ../src/mesh/impls/bout/boutmesh.cxx:288 #, c++-format msgid "\tCandidate value: {:d}\n" msgstr "" -#: ../src/bout++.cxx:576 +#: ../src/bout++.cxx:584 #, c++-format msgid "\tColour in logs {}\n" msgstr "" -#: ../src/bout++.cxx:594 +#: ../src/bout++.cxx:599 msgid "\tCommand line options for this run : " msgstr "" #. The stringify is needed here as BOUT_FLAGS_STRING may already contain quoted strings #. which could cause problems (e.g. terminate strings). -#: ../src/bout++.cxx:590 +#: ../src/bout++.cxx:595 #, c++-format msgid "\tCompiled with flags : {:s}\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:324 +#: ../src/mesh/impls/bout/boutmesh.cxx:315 #, c++-format msgid "" "\tDomain split (NXPE={:d}, NYPE={:d}) into domains (localNx={:d}, " "localNy={:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:364 +#: ../src/mesh/impls/bout/boutmesh.cxx:357 #, c++-format msgid "\tERROR: Cannot split {:d} Y points equally between {:d} processors\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:372 +#: ../src/mesh/impls/bout/boutmesh.cxx:365 #, c++-format msgid "\tERROR: Cannot split {:d} Z points equally between {:d} processors\n" msgstr "" @@ -132,31 +137,31 @@ msgstr "" msgid "\tEmpty key or value in command line '{:s}'\n" msgstr "" -#: ../src/bout++.cxx:582 +#: ../src/bout++.cxx:587 #, c++-format msgid "\tExtra debug output {}\n" msgstr "" -#: ../src/bout++.cxx:561 +#: ../src/bout++.cxx:568 #, c++-format msgid "\tFFT support {}\n" msgstr "" -#: ../src/bout++.cxx:585 +#: ../src/bout++.cxx:590 #, c++-format msgid "\tField name tracking {}\n" msgstr "" -#: ../src/bout++.cxx:583 +#: ../src/bout++.cxx:588 #, c++-format msgid "\tFloating-point exceptions {}\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:440 +#: ../src/mesh/impls/bout/boutmesh.cxx:476 msgid "\tGrid size: " msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:463 +#: ../src/mesh/impls/bout/boutmesh.cxx:499 msgid "\tGuard cells (x,y,z): " msgstr "" @@ -167,17 +172,17 @@ msgid "" "\tLine: {:s}" msgstr "" -#: ../src/bout++.cxx:563 +#: ../src/bout++.cxx:570 #, c++-format msgid "\tLAPACK support {}\n" msgstr "" -#: ../src/bout++.cxx:586 +#: ../src/bout++.cxx:591 #, c++-format msgid "\tMessage stack {}\n" msgstr "" -#: ../src/bout++.cxx:560 +#: ../src/bout++.cxx:567 #, c++-format msgid "\tMetrics mode is {}\n" msgstr "" @@ -187,98 +192,94 @@ msgstr "" msgid "\tMultiple '=' in command-line argument '{:s}'\n" msgstr "" -#: ../src/bout++.cxx:562 +#: ../src/bout++.cxx:569 #, c++-format msgid "\tNatural language support {}\n" msgstr "" -#: ../src/bout++.cxx:567 +#: ../src/bout++.cxx:574 #, c++-format msgid "\tNetCDF support {}{}\n" msgstr "" -#: ../src/bout++.cxx:577 +#: ../src/bout++.cxx:585 #, c++-format -msgid "\tOpenMP parallelisation {}" +msgid "\tOpenMP parallelisation {}, using {} threads\n" msgstr "" #. Mark the option as used #. Option not found -#: ../src/sys/options.cxx:311 ../src/sys/options.cxx:380 -#: ../src/sys/options.cxx:415 ../src/sys/options.cxx:457 -#: ../src/sys/options.cxx:717 ../src/sys/options.cxx:744 -#: ../src/sys/options.cxx:771 ../include/bout/options.hxx:516 -#: ../include/bout/options.hxx:549 ../include/bout/options.hxx:573 -#: ../include/bout/options.hxx:820 +#: ../include/bout/options.hxx:586 ../include/bout/options.hxx:619 +#: ../include/bout/options.hxx:643 ../include/bout/options.hxx:896 msgid "\tOption " msgstr "\t选项 " -#: ../src/sys/options.cxx:447 -#, c++-format -msgid "\tOption '{:s}': Boolean expected. Got '{:s}'\n" -msgstr "" +#: ../src/sys/options.cxx:369 +#, fuzzy, c++-format +msgid "\tOption {} = {}" +msgstr "\t选项 " #: ../src/sys/options/options_ini.cxx:70 #, c++-format msgid "\tOptions file '{:s}' not found\n" msgstr "" -#: ../src/bout++.cxx:568 +#: ../src/bout++.cxx:576 #, c++-format msgid "\tPETSc support {}\n" msgstr "" -#: ../src/bout++.cxx:571 +#: ../src/bout++.cxx:579 #, c++-format msgid "\tPVODE support {}\n" msgstr "" -#: ../src/bout++.cxx:557 +#: ../src/bout++.cxx:564 msgid "\tParallel NetCDF support disabled\n" msgstr "" -#: ../src/bout++.cxx:555 +#: ../src/bout++.cxx:562 msgid "\tParallel NetCDF support enabled\n" msgstr "" -#: ../src/bout++.cxx:569 +#: ../src/bout++.cxx:577 #, c++-format msgid "\tPretty function name support {}\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:437 +#: ../src/mesh/impls/bout/boutmesh.cxx:473 msgid "\tRead nz from input grid file\n" msgstr "" -#: ../src/mesh/mesh.cxx:238 +#: ../src/mesh/mesh.cxx:249 msgid "\tReading contravariant vector " msgstr "" -#: ../src/mesh/mesh.cxx:231 ../src/mesh/mesh.cxx:252 +#: ../src/mesh/mesh.cxx:242 ../src/mesh/mesh.cxx:263 msgid "\tReading covariant vector " msgstr "" -#: ../src/bout++.cxx:548 +#: ../src/bout++.cxx:555 #, c++-format msgid "\tRuntime error checking {}" msgstr "" -#: ../src/bout++.cxx:573 +#: ../src/bout++.cxx:581 #, c++-format msgid "\tSLEPc support {}\n" msgstr "" -#: ../src/bout++.cxx:574 +#: ../src/bout++.cxx:582 #, c++-format msgid "\tSUNDIALS support {}\n" msgstr "" -#: ../src/bout++.cxx:572 +#: ../src/bout++.cxx:580 #, c++-format msgid "\tScore-P support {}\n" msgstr "" -#: ../src/bout++.cxx:584 +#: ../src/bout++.cxx:589 #, fuzzy, c++-format msgid "\tSignal handling support {}\n" msgstr "\t测试关掉\n" @@ -288,7 +289,7 @@ msgstr "\t测试关掉\n" msgid "\tUsing a timestep {:e}\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:577 +#: ../src/mesh/impls/bout/boutmesh.cxx:613 msgid "\tdone\n" msgstr "" @@ -298,7 +299,7 @@ msgid "" "\tSplit Runge-Kutta-Legendre and SSP-RK3 solver\n" msgstr "" -#: ../src/bout++.cxx:371 +#: ../src/bout++.cxx:378 msgid "" "\n" " -d \t\tLook in for input/output files\n" @@ -309,7 +310,7 @@ msgid "" " -q, --quiet\t\t\tDecrease verbosity\n" msgstr "" -#: ../src/sys/expressionparser.cxx:302 +#: ../src/sys/expressionparser.cxx:341 #, c++-format msgid "" "\n" @@ -317,7 +318,7 @@ msgid "" " Did you mean '{0}'?" msgstr "" -#: ../src/solver/solver.cxx:580 +#: ../src/solver/solver.cxx:586 #, fuzzy, c++-format msgid "" "\n" @@ -326,7 +327,7 @@ msgstr "" "\n" "计算结束于 {:s}\n" -#: ../src/solver/solver.cxx:532 +#: ../src/solver/solver.cxx:540 #, fuzzy, c++-format msgid "" "\n" @@ -338,7 +339,7 @@ msgstr "" #. Raw string to help with the formatting of the message, and a #. separate variable so clang-format doesn't barf on the #. exception -#: ../src/sys/options.cxx:1102 +#: ../src/sys/options.cxx:1158 msgid "" "\n" "There were unused input options:\n" @@ -366,7 +367,7 @@ msgid "" "{}" msgstr "" -#: ../src/bout++.cxx:382 +#: ../src/bout++.cxx:389 #, c++-format msgid "" " --print-config\t\tPrint the compile-time configuration\n" @@ -399,55 +400,55 @@ msgid "" "model source (e.g. {:s}.cxx)\n" msgstr "" -#: ../src/bout++.cxx:379 +#: ../src/bout++.cxx:386 msgid " -c, --color\t\t\tColor output using bout-log-color\n" msgstr "" -#: ../include/bout/options.hxx:823 +#: ../include/bout/options.hxx:899 msgid ") overwritten with:" msgstr "" -#: ../src/bout++.cxx:550 +#: ../src/bout++.cxx:557 #, c++-format msgid ", level {}" msgstr "" -#: ../src/bout++.cxx:579 -#, c++-format -msgid ", using {} threads" -msgstr "" - #: ../tests/unit/src/test_bout++.cxx:352 msgid "4 of 8" msgstr "" -#: ../src/sys/options.cxx:868 +#: ../src/sys/options.cxx:895 msgid "All options used\n" msgstr "" -#: ../src/bout++.cxx:528 +#: ../src/bout++.cxx:535 #, c++-format msgid "BOUT++ version {:s}\n" msgstr "" -#: ../src/bout++.cxx:143 +#: ../src/bout++.cxx:147 msgid "Bad command line arguments:\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:559 +#: ../src/sys/expressionparser.cxx:192 +#, c++-format +msgid "Boolean operator argument {:e} is not a bool" +msgstr "" + +#: ../src/mesh/impls/bout/boutmesh.cxx:595 msgid "Boundary regions in this processor: " msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:355 +#: ../src/mesh/impls/bout/boutmesh.cxx:348 #, c++-format msgid "Cannot split {:d} X points equally between {:d} processors\n" msgstr "" -#: ../src/bout++.cxx:818 +#: ../src/bout++.cxx:829 msgid "Check if a file exists, and exit if it does." msgstr "" -#: ../src/bout++.cxx:533 +#: ../src/bout++.cxx:540 #, fuzzy, c++-format msgid "" "Code compiled on {:s} at {:s}\n" @@ -460,7 +461,7 @@ msgstr "" msgid "Command line" msgstr "" -#: ../src/bout++.cxx:544 ../tests/unit/src/test_bout++.cxx:358 +#: ../src/bout++.cxx:551 ../tests/unit/src/test_bout++.cxx:358 msgid "Compile-time options:\n" msgstr "" @@ -468,16 +469,16 @@ msgstr "" msgid "Compiled with flags" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:568 +#: ../src/mesh/impls/bout/boutmesh.cxx:604 msgid "Constructing default regions" msgstr "" -#: ../src/bout++.cxx:520 +#: ../src/bout++.cxx:527 #, c++-format msgid "Could not create PID file {:s}" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:318 +#: ../src/mesh/impls/bout/boutmesh.cxx:309 msgid "" "Could not find a valid value for NXPE. Try a different number of processors." msgstr "" @@ -487,28 +488,28 @@ msgstr "" msgid "Could not open output file '{:s}'\n" msgstr "" -#: ../src/bout++.cxx:652 +#: ../src/bout++.cxx:657 #, c++-format msgid "Could not open {:s}/{:s}.{:d} for writing" msgstr "" #. Error reading -#: ../src/mesh/mesh.cxx:532 +#: ../src/mesh/mesh.cxx:543 #, c++-format msgid "Could not read integer array '{:s}'\n" msgstr "" #. Failed . Probably not important enough to stop the simulation -#: ../src/bout++.cxx:632 +#: ../src/bout++.cxx:637 msgid "Could not run bout-log-color. Make sure it is in your PATH\n" msgstr "" -#: ../src/solver/solver.cxx:765 +#: ../src/solver/solver.cxx:772 #, c++-format msgid "Couldn't add Monitor: {:g} is not a multiple of {:g}!" msgstr "" -#: ../src/sys/expressionparser.cxx:273 +#: ../src/sys/expressionparser.cxx:312 #, c++-format msgid "" "Couldn't find generator '{}'. BOUT++ expressions are now case-sensitive, so " @@ -517,69 +518,69 @@ msgid "" "{}" msgstr "" -#: ../src/mesh/mesh.cxx:568 +#: ../src/mesh/mesh.cxx:587 #, c++-format msgid "Couldn't find region {:s} in regionMap2D" msgstr "" -#: ../src/mesh/mesh.cxx:560 +#: ../src/mesh/mesh.cxx:571 ../src/mesh/mesh.cxx:579 #, c++-format msgid "Couldn't find region {:s} in regionMap3D" msgstr "" -#: ../src/mesh/mesh.cxx:576 +#: ../src/mesh/mesh.cxx:595 #, c++-format msgid "Couldn't find region {:s} in regionMapPerp" msgstr "" #. Convert any exceptions to something a bit more useful -#: ../src/sys/options.cxx:336 +#: ../src/sys/options.cxx:361 #, c++-format msgid "Couldn't get {} from option {:s} = '{:s}': {}" msgstr "" -#: ../src/bout++.cxx:508 +#: ../src/bout++.cxx:515 #, fuzzy, c++-format msgid "DataDir \"{:s}\" does not exist or is not accessible\n" msgstr "\"{:s}\" 不存在或不可访问\n" -#: ../src/bout++.cxx:505 +#: ../src/bout++.cxx:512 #, fuzzy, c++-format msgid "DataDir \"{:s}\" is not a directory\n" msgstr "\"{:s}\" 不是目录\n" -#: ../src/solver/solver.cxx:665 +#: ../src/solver/solver.cxx:671 msgid "ERROR: Solver is already initialised\n" msgstr "" -#: ../src/bout++.cxx:209 +#: ../src/bout++.cxx:216 #, fuzzy, c++-format msgid "Error encountered during initialisation: {:s}\n" msgstr "启动时遇到错误 : {:s}\n" -#: ../src/bout++.cxx:744 +#: ../src/bout++.cxx:751 msgid "Error whilst writing settings" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:332 +#: ../src/mesh/impls/bout/boutmesh.cxx:323 #, c++-format msgid "Error: nx must be greater than 2 times MXG (2 * {:d})" msgstr "" -#: ../src/solver/solver.cxx:512 +#: ../src/solver/solver.cxx:520 msgid "Failed to initialise solver-> Aborting\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:290 +#: ../src/mesh/impls/bout/boutmesh.cxx:281 #, c++-format msgid "Finding value for NXPE (ideal = {:f})\n" msgstr "" -#: ../src/solver/solver.cxx:668 +#: ../src/solver/solver.cxx:674 msgid "Initialising solver\n" msgstr "" -#: ../src/bout++.cxx:494 +#: ../src/bout++.cxx:501 msgid "" "Input and output file for settings must be different.\n" "Provide -o to avoid this issue.\n" @@ -589,122 +590,122 @@ msgstr "" msgid "Invalid command line option '-' found - maybe check whitespace?" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:400 +#: ../src/mesh/impls/bout/boutmesh.cxx:436 msgid "Loading mesh" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:415 +#: ../src/mesh/impls/bout/boutmesh.cxx:451 msgid "Mesh must contain nx" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:419 +#: ../src/mesh/impls/bout/boutmesh.cxx:455 msgid "Mesh must contain ny" msgstr "" #. Not found -#: ../src/mesh/mesh.cxx:536 +#: ../src/mesh/mesh.cxx:547 #, c++-format msgid "Missing integer array {:s}\n" msgstr "" -#: ../src/solver/solver.cxx:905 +#: ../src/solver/solver.cxx:911 #, c++-format msgid "Monitor signalled to quit (exception {})\n" msgstr "" -#: ../src/solver/solver.cxx:883 +#: ../src/solver/solver.cxx:889 #, c++-format msgid "Monitor signalled to quit (return code {})" msgstr "" -#: ../src/bout++.cxx:823 +#: ../src/bout++.cxx:834 msgid "Name of file whose existence triggers a stop" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:565 +#: ../src/mesh/impls/bout/boutmesh.cxx:601 msgid "No boundary regions in this processor" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:550 +#: ../src/mesh/impls/bout/boutmesh.cxx:586 msgid "No boundary regions; domain is periodic\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:254 +#: ../src/mesh/impls/bout/boutmesh.cxx:245 #, c++-format msgid "" "Number of processors ({:d}) not divisible by NPs in x direction ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:267 +#: ../src/mesh/impls/bout/boutmesh.cxx:258 #, c++-format msgid "" "Number of processors ({:d}) not divisible by NPs in y direction ({:d})\n" msgstr "" #. Less than 2 time-steps left -#: ../src/bout++.cxx:896 +#: ../src/bout++.cxx:908 #, c++-format msgid "Only {:e} seconds ({:.2f} steps) left. Quitting\n" msgstr "" -#: ../src/sys/options.cxx:303 ../src/sys/options.cxx:345 -#: ../src/sys/options.cxx:393 ../src/sys/options.cxx:428 -#: ../src/sys/options.cxx:703 ../src/sys/options.cxx:730 -#: ../src/sys/options.cxx:757 +#: ../src/sys/options.cxx:382 ../src/sys/options.cxx:398 +#: ../src/sys/options.cxx:441 ../src/sys/options.cxx:471 +#: ../src/sys/options.cxx:745 ../src/sys/options.cxx:767 +#: ../src/sys/options.cxx:789 #, c++-format msgid "Option {:s} has no value" msgstr "" #. Doesn't exist -#: ../src/sys/options.cxx:159 +#: ../src/sys/options.cxx:172 #, c++-format msgid "Option {:s}:{:s} does not exist" msgstr "" -#: ../include/bout/options.hxx:828 +#: ../include/bout/options.hxx:904 #, c++-format msgid "" "Options: Setting a value from same source ({:s}) to new value '{:s}' - old " "value was '{:s}'." msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:552 +#: ../src/mesh/impls/bout/boutmesh.cxx:588 msgid "Possible boundary regions are: " msgstr "" -#: ../src/bout++.cxx:538 +#: ../src/bout++.cxx:545 #, c++-format msgid "" "Processor number: {:d} of {:d}\n" "\n" msgstr "" -#: ../src/mesh/mesh.cxx:609 +#: ../src/mesh/mesh.cxx:642 #, c++-format msgid "Registered region 2D {:s}" msgstr "" -#: ../src/mesh/mesh.cxx:599 +#: ../src/mesh/mesh.cxx:632 #, c++-format msgid "Registered region 3D {:s}" msgstr "" -#: ../src/mesh/mesh.cxx:619 +#: ../src/mesh/mesh.cxx:652 #, c++-format msgid "Registered region Perp {:s}" msgstr "" -#: ../src/bout++.cxx:529 +#: ../src/bout++.cxx:536 #, c++-format msgid "Revision: {:s}\n" msgstr "" -#: ../src/solver/solver.cxx:581 +#: ../src/solver/solver.cxx:587 msgid "Run time : " msgstr "计算时间" #. / Run the solver -#: ../src/solver/solver.cxx:525 +#: ../src/solver/solver.cxx:533 msgid "" "Running simulation\n" "\n" @@ -716,64 +717,64 @@ msgstr "" msgid "Signal" msgstr "" -#: ../src/bout++.cxx:865 +#: ../src/bout++.cxx:876 msgid "" "Sim Time | RHS evals | Wall Time | Calc Inv Comm I/O SOLVER\n" "\n" msgstr "" -#: ../src/bout++.cxx:868 +#: ../src/bout++.cxx:879 msgid "" "Sim Time | RHS_e evals | RHS_I evals | Wall Time | Calc Inv " "Comm I/O SOLVER\n" "\n" msgstr "" -#: ../src/solver/solver.cxx:506 +#: ../src/solver/solver.cxx:514 #, c++-format msgid "Solver running for {:d} outputs with monitor timestep of {:e}\n" msgstr "" -#: ../src/solver/solver.cxx:502 +#: ../src/solver/solver.cxx:510 #, c++-format msgid "Solver running for {:d} outputs with output timestep of {:e}\n" msgstr "" -#: ../src/solver/solver.cxx:781 +#: ../src/solver/solver.cxx:788 #, c++-format msgid "" "Solver::addMonitor: Cannot reduce timestep (from {:g} to {:g}) after init is " "called!" msgstr "" -#: ../src/solver/solver.cxx:1281 +#: ../src/solver/solver.cxx:1289 #, c++-format msgid "" "Time derivative at wrong location - Field is at {:s}, derivative is at {:s} " "for field '{:s}'\n" msgstr "" -#: ../src/solver/solver.cxx:1480 +#: ../src/solver/solver.cxx:1494 #, c++-format msgid "Time derivative for variable '{:s}' not set" msgstr "" -#: ../src/mesh/mesh.cxx:605 +#: ../src/mesh/mesh.cxx:638 #, c++-format msgid "Trying to add an already existing region {:s} to regionMap2D" msgstr "" -#: ../src/mesh/mesh.cxx:595 +#: ../src/mesh/mesh.cxx:614 #, c++-format msgid "Trying to add an already existing region {:s} to regionMap3D" msgstr "" -#: ../src/mesh/mesh.cxx:616 +#: ../src/mesh/mesh.cxx:649 #, c++-format msgid "Trying to add an already existing region {:s} to regionMapPerp" msgstr "" -#: ../src/sys/options.cxx:99 ../src/sys/options.cxx:138 +#: ../src/sys/options.cxx:112 ../src/sys/options.cxx:151 #, c++-format msgid "" "Trying to index Option '{0}' with '{1}', but '{0}' is a value, not a " @@ -782,37 +783,37 @@ msgid "" "rename one of them.\n" msgstr "" -#: ../src/mesh/coordinates.cxx:1462 +#: ../src/mesh/coordinates.cxx:1464 msgid "" "Unrecognised paralleltransform option.\n" "Valid choices are 'identity', 'shifted', 'fci'" msgstr "" -#: ../src/sys/options.cxx:872 +#: ../src/sys/options.cxx:899 msgid "Unused options:\n" msgstr "" -#: ../src/bout++.cxx:439 +#: ../src/bout++.cxx:446 #, c++-format msgid "Usage is {:s} -d \n" msgstr "" -#: ../src/bout++.cxx:448 +#: ../src/bout++.cxx:455 #, c++-format msgid "Usage is {:s} -f \n" msgstr "" -#: ../src/bout++.cxx:466 +#: ../src/bout++.cxx:473 #, c++-format msgid "Usage is {:s} -l \n" msgstr "" -#: ../src/bout++.cxx:457 +#: ../src/bout++.cxx:464 #, c++-format msgid "Usage is {:s} -o \n" msgstr "" -#: ../src/bout++.cxx:353 +#: ../src/bout++.cxx:360 #, c++-format msgid "Usage is {} {} \n" msgstr "" @@ -823,7 +824,7 @@ msgstr "" #. Print help message -- note this will be displayed once per processor as we've not #. started MPI yet. -#: ../src/bout++.cxx:367 +#: ../src/bout++.cxx:374 #, c++-format msgid "" "Usage: {:s} [-d ] [-f ] [restart [append]] " @@ -831,94 +832,99 @@ msgid "" msgstr "" #. restart file should be written by physics model -#: ../src/solver/solver.cxx:921 +#: ../src/solver/solver.cxx:927 msgid "User signalled to quit. Returning\n" msgstr "" -#: ../src/sys/options.cxx:373 +#: ../src/sys/options.cxx:486 +#, fuzzy, c++-format +msgid "Value for option {:s} = {:e} is not a bool" +msgstr "\"{:s}\" 不是目录\n" + +#: ../src/sys/options.cxx:426 #, c++-format msgid "Value for option {:s} = {:e} is not an integer" msgstr "" -#: ../src/sys/options.cxx:408 +#: ../src/sys/options.cxx:456 #, c++-format msgid "Value for option {:s} cannot be converted to a BoutReal" msgstr "" -#: ../src/sys/options.cxx:581 +#: ../src/sys/options.cxx:623 #, c++-format msgid "Value for option {:s} cannot be converted to a Field2D" msgstr "" -#: ../src/sys/options.cxx:529 +#: ../src/sys/options.cxx:571 #, c++-format msgid "Value for option {:s} cannot be converted to a Field3D" msgstr "" -#: ../src/sys/options.cxx:663 +#: ../src/sys/options.cxx:705 #, c++-format msgid "Value for option {:s} cannot be converted to a FieldPerp" msgstr "" -#: ../src/sys/options.cxx:451 +#: ../src/sys/options.cxx:491 #, c++-format msgid "Value for option {:s} cannot be converted to a bool" msgstr "" -#: ../src/sys/options.cxx:709 +#: ../src/sys/options.cxx:751 #, c++-format msgid "Value for option {:s} cannot be converted to an Array" msgstr "" -#: ../src/sys/options.cxx:736 +#: ../src/sys/options.cxx:773 #, c++-format msgid "Value for option {:s} cannot be converted to an Matrix" msgstr "" -#: ../src/sys/options.cxx:763 +#: ../src/sys/options.cxx:795 #, c++-format msgid "Value for option {:s} cannot be converted to an Tensor" msgstr "" #. Another type which can't be converted -#: ../src/sys/options.cxx:365 +#: ../src/sys/options.cxx:418 #, c++-format msgid "Value for option {:s} is not an integer" msgstr "" -#: ../src/solver/solver.cxx:1232 ../src/solver/solver.cxx:1238 +#: ../src/solver/solver.cxx:1240 ../src/solver/solver.cxx:1246 #, c++-format msgid "Variable '{:s}' not initialised" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:431 +#: ../src/mesh/impls/bout/boutmesh.cxx:467 #, c++-format msgid "" "WARNING: Number of toroidal points should be 2^n for efficient FFT " "performance -- consider changing MZ ({:d}) if using FFTs\n" msgstr "" -#: ../src/mesh/coordinates.cxx:633 +#: ../src/mesh/coordinates.cxx:635 msgid "WARNING: extrapolating input mesh quantities into x-boundary cells\n" msgstr "" -#: ../src/mesh/coordinates.cxx:410 +#: ../src/mesh/coordinates.cxx:412 msgid "" "WARNING: extrapolating input mesh quantities into x-boundary cells. Set " "option extrapolate_x=false to disable this.\n" msgstr "" -#: ../src/mesh/coordinates.cxx:638 +#: ../src/mesh/coordinates.cxx:640 msgid "WARNING: extrapolating input mesh quantities into y-boundary cells\n" msgstr "" -#: ../src/mesh/coordinates.cxx:415 +#: ../src/mesh/coordinates.cxx:417 msgid "" "WARNING: extrapolating input mesh quantities into y-boundary cells. Set " "option extrapolate_y=false to disable this.\n" msgstr "" -#: ../src/bout++.cxx:814 +#: ../src/bout++.cxx:825 msgid "Wall time limit in hours. By default (< 0), no limit" msgstr "" @@ -928,7 +934,7 @@ msgid "Writing options to file {:s}\n" msgstr "" #. / The source label given to default values -#: ../src/sys/options.cxx:15 +#: ../src/sys/options.cxx:34 msgid "default" msgstr "" @@ -939,9 +945,5 @@ msgstr "" #~ msgid "\tChecking enabled, level {:d}\n" #~ msgstr "\t测试打开,级别 {:d}\n" -#, fuzzy -#~ msgid "Option {:s} is not a section" -#~ msgstr "\"{:s}\" 不是目录\n" - #~ msgid "Error encountered during initialisation\n" #~ msgstr "启动时遇到错误\n" diff --git a/locale/zh_TW/libbout.po b/locale/zh_TW/libbout.po index de0230d68d..abf44db51f 100644 --- a/locale/zh_TW/libbout.po +++ b/locale/zh_TW/libbout.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: BOUT++ 4.2.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-12 09:17+0100\n" +"POT-Creation-Date: 2025-08-13 23:37+0100\n" "PO-Revision-Date: 2018-10-22 22:56+0100\n" "Last-Translator: \n" "Language-Team: Chinese (traditional)\n" @@ -16,64 +16,69 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:191 +#: ../src/mesh/impls/bout/boutmesh.cxx:182 #, c++-format msgid "" "\t -> Core region jyseps2_1-jyseps1_1 ({:d}-{:d} = {:d}) must be a multiple " "of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:224 +#: ../src/mesh/impls/bout/boutmesh.cxx:215 #, c++-format msgid "" "\t -> Core region jyseps2_2-jyseps1_1 ({:d}-{:d} = {:d}) must be a multiple " "of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:199 +#: ../src/mesh/impls/bout/boutmesh.cxx:190 #, c++-format msgid "" "\t -> Core region jyseps2_2-jyseps1_2 ({:d}-{:d} = {:d}) must be a multiple " "of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:309 +#: ../src/mesh/impls/bout/boutmesh.cxx:300 msgid "\t -> Good value\n" msgstr "\t -> 好的號碼\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:180 +#: ../src/mesh/impls/bout/boutmesh.cxx:171 #, c++-format msgid "" "\t -> Leg region jyseps1_1+1 ({:d}) must be a multiple of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:215 +#: ../src/mesh/impls/bout/boutmesh.cxx:206 #, c++-format msgid "" "\t -> leg region jyseps1_2-ny_inner+1 ({:d}-{:d}+1 = {:d}) must be a " "multiple of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:232 +#: ../src/mesh/impls/bout/boutmesh.cxx:223 #, c++-format msgid "" "\t -> leg region ny-jyseps2_2-1 ({:d}-{:d}-1 = {:d}) must be a multiple of " "MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:208 +#: ../src/mesh/impls/bout/boutmesh.cxx:199 #, c++-format msgid "" "\t -> leg region ny_inner-jyseps2_1-1 ({:d}-{:d}-1 = {:d}) must be a " "multiple of MYSUB ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:175 +#: ../src/mesh/impls/bout/boutmesh.cxx:166 #, c++-format msgid "\t -> ny/NYPE ({:d}/{:d} = {:d}) must be >= MYG ({:d})\n" msgstr "" #: ../src/bout++.cxx:575 +#, fuzzy, c++-format +msgid "\tADIOS2 support {}\n" +msgstr "\tOpenMP並行化已禁用\n" + +#: ../src/bout++.cxx:583 #, c++-format msgid "\tBacktrace in exceptions {}\n" msgstr "" @@ -82,40 +87,40 @@ msgstr "" #. Processors divide equally #. Mesh in X divides equally #. Mesh in Y divides equally -#: ../src/mesh/impls/bout/boutmesh.cxx:297 +#: ../src/mesh/impls/bout/boutmesh.cxx:288 #, fuzzy, c++-format msgid "\tCandidate value: {:d}\n" msgstr "\t候選人數目 {:d}\n" -#: ../src/bout++.cxx:576 +#: ../src/bout++.cxx:584 #, c++-format msgid "\tColour in logs {}\n" msgstr "" -#: ../src/bout++.cxx:594 +#: ../src/bout++.cxx:599 msgid "\tCommand line options for this run : " msgstr "" #. The stringify is needed here as BOUT_FLAGS_STRING may already contain quoted strings #. which could cause problems (e.g. terminate strings). -#: ../src/bout++.cxx:590 +#: ../src/bout++.cxx:595 #, fuzzy, c++-format msgid "\tCompiled with flags : {:s}\n" msgstr "\t用設置編譯: {:s}\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:324 +#: ../src/mesh/impls/bout/boutmesh.cxx:315 #, fuzzy, c++-format msgid "" "\tDomain split (NXPE={:d}, NYPE={:d}) into domains (localNx={:d}, " "localNy={:d})\n" msgstr "\t域 (NXPE={:d}, NYPE={:d}) 分裂成域 (localNx={:d}, localNy={:d})\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:364 +#: ../src/mesh/impls/bout/boutmesh.cxx:357 #, c++-format msgid "\tERROR: Cannot split {:d} Y points equally between {:d} processors\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:372 +#: ../src/mesh/impls/bout/boutmesh.cxx:365 #, c++-format msgid "\tERROR: Cannot split {:d} Z points equally between {:d} processors\n" msgstr "" @@ -132,31 +137,31 @@ msgstr "" msgid "\tEmpty key or value in command line '{:s}'\n" msgstr "\t命令行中的空鍵或值 '{:s}'\n" -#: ../src/bout++.cxx:582 +#: ../src/bout++.cxx:587 #, c++-format msgid "\tExtra debug output {}\n" msgstr "" -#: ../src/bout++.cxx:561 +#: ../src/bout++.cxx:568 #, c++-format msgid "\tFFT support {}\n" msgstr "" -#: ../src/bout++.cxx:585 +#: ../src/bout++.cxx:590 #, c++-format msgid "\tField name tracking {}\n" msgstr "" -#: ../src/bout++.cxx:583 +#: ../src/bout++.cxx:588 #, c++-format msgid "\tFloating-point exceptions {}\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:440 +#: ../src/mesh/impls/bout/boutmesh.cxx:476 msgid "\tGrid size: " msgstr "\t網格大小: " -#: ../src/mesh/impls/bout/boutmesh.cxx:463 +#: ../src/mesh/impls/bout/boutmesh.cxx:499 msgid "\tGuard cells (x,y,z): " msgstr "" @@ -167,17 +172,17 @@ msgid "" "\tLine: {:s}" msgstr "" -#: ../src/bout++.cxx:563 +#: ../src/bout++.cxx:570 #, c++-format msgid "\tLAPACK support {}\n" msgstr "" -#: ../src/bout++.cxx:586 +#: ../src/bout++.cxx:591 #, c++-format msgid "\tMessage stack {}\n" msgstr "" -#: ../src/bout++.cxx:560 +#: ../src/bout++.cxx:567 #, c++-format msgid "\tMetrics mode is {}\n" msgstr "" @@ -187,99 +192,95 @@ msgstr "" msgid "\tMultiple '=' in command-line argument '{:s}'\n" msgstr "" -#: ../src/bout++.cxx:562 +#: ../src/bout++.cxx:569 #, c++-format msgid "\tNatural language support {}\n" msgstr "" -#: ../src/bout++.cxx:567 +#: ../src/bout++.cxx:574 #, fuzzy, c++-format msgid "\tNetCDF support {}{}\n" msgstr "\tOpenMP並行化已禁用\n" -#: ../src/bout++.cxx:577 +#: ../src/bout++.cxx:585 #, fuzzy, c++-format -msgid "\tOpenMP parallelisation {}" -msgstr "\tOpenMP並行化已禁用\n" +msgid "\tOpenMP parallelisation {}, using {} threads\n" +msgstr "\t啟用OpenMP並行化。 使用{:d}個線程\n" #. Mark the option as used #. Option not found -#: ../src/sys/options.cxx:311 ../src/sys/options.cxx:380 -#: ../src/sys/options.cxx:415 ../src/sys/options.cxx:457 -#: ../src/sys/options.cxx:717 ../src/sys/options.cxx:744 -#: ../src/sys/options.cxx:771 ../include/bout/options.hxx:516 -#: ../include/bout/options.hxx:549 ../include/bout/options.hxx:573 -#: ../include/bout/options.hxx:820 +#: ../include/bout/options.hxx:586 ../include/bout/options.hxx:619 +#: ../include/bout/options.hxx:643 ../include/bout/options.hxx:896 msgid "\tOption " msgstr "\t選項 " -#: ../src/sys/options.cxx:447 +#: ../src/sys/options.cxx:369 #, fuzzy, c++-format -msgid "\tOption '{:s}': Boolean expected. Got '{:s}'\n" -msgstr "\t選項 '{:s}': 布爾預期. 拿到 '{:s}'\n" +msgid "\tOption {} = {}" +msgstr "\t選項 " #: ../src/sys/options/options_ini.cxx:70 #, fuzzy, c++-format msgid "\tOptions file '{:s}' not found\n" msgstr "\t找不到選項文件 '{:s}'\n" -#: ../src/bout++.cxx:568 +#: ../src/bout++.cxx:576 #, c++-format msgid "\tPETSc support {}\n" msgstr "" -#: ../src/bout++.cxx:571 +#: ../src/bout++.cxx:579 #, c++-format msgid "\tPVODE support {}\n" msgstr "" -#: ../src/bout++.cxx:557 +#: ../src/bout++.cxx:564 #, fuzzy msgid "\tParallel NetCDF support disabled\n" msgstr "\tOpenMP並行化已禁用\n" -#: ../src/bout++.cxx:555 +#: ../src/bout++.cxx:562 msgid "\tParallel NetCDF support enabled\n" msgstr "" -#: ../src/bout++.cxx:569 +#: ../src/bout++.cxx:577 #, c++-format msgid "\tPretty function name support {}\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:437 +#: ../src/mesh/impls/bout/boutmesh.cxx:473 msgid "\tRead nz from input grid file\n" msgstr "" -#: ../src/mesh/mesh.cxx:238 +#: ../src/mesh/mesh.cxx:249 msgid "\tReading contravariant vector " msgstr "" -#: ../src/mesh/mesh.cxx:231 ../src/mesh/mesh.cxx:252 +#: ../src/mesh/mesh.cxx:242 ../src/mesh/mesh.cxx:263 msgid "\tReading covariant vector " msgstr "" -#: ../src/bout++.cxx:548 +#: ../src/bout++.cxx:555 #, c++-format msgid "\tRuntime error checking {}" msgstr "" -#: ../src/bout++.cxx:573 +#: ../src/bout++.cxx:581 #, c++-format msgid "\tSLEPc support {}\n" msgstr "" -#: ../src/bout++.cxx:574 +#: ../src/bout++.cxx:582 #, c++-format msgid "\tSUNDIALS support {}\n" msgstr "" -#: ../src/bout++.cxx:572 +#: ../src/bout++.cxx:580 #, c++-format msgid "\tScore-P support {}\n" msgstr "" -#: ../src/bout++.cxx:584 +#: ../src/bout++.cxx:589 #, fuzzy, c++-format msgid "\tSignal handling support {}\n" msgstr "\t測試關掉\n" @@ -289,7 +290,7 @@ msgstr "\t測試關掉\n" msgid "\tUsing a timestep {:e}\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:577 +#: ../src/mesh/impls/bout/boutmesh.cxx:613 msgid "\tdone\n" msgstr "\t完\n" @@ -299,7 +300,7 @@ msgid "" "\tSplit Runge-Kutta-Legendre and SSP-RK3 solver\n" msgstr "" -#: ../src/bout++.cxx:371 +#: ../src/bout++.cxx:378 msgid "" "\n" " -d \t\tLook in for input/output files\n" @@ -310,7 +311,7 @@ msgid "" " -q, --quiet\t\t\tDecrease verbosity\n" msgstr "" -#: ../src/sys/expressionparser.cxx:302 +#: ../src/sys/expressionparser.cxx:341 #, c++-format msgid "" "\n" @@ -318,7 +319,7 @@ msgid "" " Did you mean '{0}'?" msgstr "" -#: ../src/solver/solver.cxx:580 +#: ../src/solver/solver.cxx:586 #, fuzzy, c++-format msgid "" "\n" @@ -327,7 +328,7 @@ msgstr "" "\n" "计算结束于 {:s}\n" -#: ../src/solver/solver.cxx:532 +#: ../src/solver/solver.cxx:540 #, fuzzy, c++-format msgid "" "\n" @@ -339,7 +340,7 @@ msgstr "" #. Raw string to help with the formatting of the message, and a #. separate variable so clang-format doesn't barf on the #. exception -#: ../src/sys/options.cxx:1102 +#: ../src/sys/options.cxx:1158 msgid "" "\n" "There were unused input options:\n" @@ -367,7 +368,7 @@ msgid "" "{}" msgstr "" -#: ../src/bout++.cxx:382 +#: ../src/bout++.cxx:389 #, c++-format msgid "" " --print-config\t\tPrint the compile-time configuration\n" @@ -400,55 +401,55 @@ msgid "" "model source (e.g. {:s}.cxx)\n" msgstr "" -#: ../src/bout++.cxx:379 +#: ../src/bout++.cxx:386 msgid " -c, --color\t\t\tColor output using bout-log-color\n" msgstr "" -#: ../include/bout/options.hxx:823 +#: ../include/bout/options.hxx:899 msgid ") overwritten with:" msgstr "" -#: ../src/bout++.cxx:550 +#: ../src/bout++.cxx:557 #, c++-format msgid ", level {}" msgstr "" -#: ../src/bout++.cxx:579 -#, c++-format -msgid ", using {} threads" -msgstr "" - #: ../tests/unit/src/test_bout++.cxx:352 msgid "4 of 8" msgstr "" -#: ../src/sys/options.cxx:868 +#: ../src/sys/options.cxx:895 msgid "All options used\n" msgstr "" -#: ../src/bout++.cxx:528 +#: ../src/bout++.cxx:535 #, fuzzy, c++-format msgid "BOUT++ version {:s}\n" msgstr "BOUT++ 版 {:s}\n" -#: ../src/bout++.cxx:143 +#: ../src/bout++.cxx:147 msgid "Bad command line arguments:\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:559 +#: ../src/sys/expressionparser.cxx:192 +#, c++-format +msgid "Boolean operator argument {:e} is not a bool" +msgstr "" + +#: ../src/mesh/impls/bout/boutmesh.cxx:595 msgid "Boundary regions in this processor: " msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:355 +#: ../src/mesh/impls/bout/boutmesh.cxx:348 #, c++-format msgid "Cannot split {:d} X points equally between {:d} processors\n" msgstr "" -#: ../src/bout++.cxx:818 +#: ../src/bout++.cxx:829 msgid "Check if a file exists, and exit if it does." msgstr "" -#: ../src/bout++.cxx:533 +#: ../src/bout++.cxx:540 #, fuzzy, c++-format msgid "" "Code compiled on {:s} at {:s}\n" @@ -461,7 +462,7 @@ msgstr "" msgid "Command line" msgstr "" -#: ../src/bout++.cxx:544 ../tests/unit/src/test_bout++.cxx:358 +#: ../src/bout++.cxx:551 ../tests/unit/src/test_bout++.cxx:358 msgid "Compile-time options:\n" msgstr "編譯選項:\n" @@ -470,16 +471,16 @@ msgstr "編譯選項:\n" msgid "Compiled with flags" msgstr "\t用設置編譯: {:s}\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:568 +#: ../src/mesh/impls/bout/boutmesh.cxx:604 msgid "Constructing default regions" msgstr "" -#: ../src/bout++.cxx:520 +#: ../src/bout++.cxx:527 #, fuzzy, c++-format msgid "Could not create PID file {:s}" msgstr "無法打開輸出文件 '{:s}'\n" -#: ../src/mesh/impls/bout/boutmesh.cxx:318 +#: ../src/mesh/impls/bout/boutmesh.cxx:309 msgid "" "Could not find a valid value for NXPE. Try a different number of processors." msgstr "無法找到NXPE的有效值。 嘗試不同數量的處理器。" @@ -489,28 +490,28 @@ msgstr "無法找到NXPE的有效值。 嘗試不同數量的處理器。" msgid "Could not open output file '{:s}'\n" msgstr "無法打開輸出文件 '{:s}'\n" -#: ../src/bout++.cxx:652 +#: ../src/bout++.cxx:657 #, c++-format msgid "Could not open {:s}/{:s}.{:d} for writing" msgstr "" #. Error reading -#: ../src/mesh/mesh.cxx:532 +#: ../src/mesh/mesh.cxx:543 #, c++-format msgid "Could not read integer array '{:s}'\n" msgstr "" #. Failed . Probably not important enough to stop the simulation -#: ../src/bout++.cxx:632 +#: ../src/bout++.cxx:637 msgid "Could not run bout-log-color. Make sure it is in your PATH\n" msgstr "" -#: ../src/solver/solver.cxx:765 +#: ../src/solver/solver.cxx:772 #, c++-format msgid "Couldn't add Monitor: {:g} is not a multiple of {:g}!" msgstr "" -#: ../src/sys/expressionparser.cxx:273 +#: ../src/sys/expressionparser.cxx:312 #, c++-format msgid "" "Couldn't find generator '{}'. BOUT++ expressions are now case-sensitive, so " @@ -519,69 +520,69 @@ msgid "" "{}" msgstr "" -#: ../src/mesh/mesh.cxx:568 +#: ../src/mesh/mesh.cxx:587 #, c++-format msgid "Couldn't find region {:s} in regionMap2D" msgstr "" -#: ../src/mesh/mesh.cxx:560 +#: ../src/mesh/mesh.cxx:571 ../src/mesh/mesh.cxx:579 #, c++-format msgid "Couldn't find region {:s} in regionMap3D" msgstr "" -#: ../src/mesh/mesh.cxx:576 +#: ../src/mesh/mesh.cxx:595 #, c++-format msgid "Couldn't find region {:s} in regionMapPerp" msgstr "" #. Convert any exceptions to something a bit more useful -#: ../src/sys/options.cxx:336 +#: ../src/sys/options.cxx:361 #, c++-format msgid "Couldn't get {} from option {:s} = '{:s}': {}" msgstr "" -#: ../src/bout++.cxx:508 +#: ../src/bout++.cxx:515 #, fuzzy, c++-format msgid "DataDir \"{:s}\" does not exist or is not accessible\n" msgstr "\"{:s}\" 不存在或不可訪問\n" -#: ../src/bout++.cxx:505 +#: ../src/bout++.cxx:512 #, fuzzy, c++-format msgid "DataDir \"{:s}\" is not a directory\n" msgstr "\"{:s}\" 不是目錄\n" -#: ../src/solver/solver.cxx:665 +#: ../src/solver/solver.cxx:671 msgid "ERROR: Solver is already initialised\n" msgstr "" -#: ../src/bout++.cxx:209 +#: ../src/bout++.cxx:216 #, fuzzy, c++-format msgid "Error encountered during initialisation: {:s}\n" msgstr "啟動時遇到錯誤 : {:s}\n" -#: ../src/bout++.cxx:744 +#: ../src/bout++.cxx:751 msgid "Error whilst writing settings" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:332 +#: ../src/mesh/impls/bout/boutmesh.cxx:323 #, c++-format msgid "Error: nx must be greater than 2 times MXG (2 * {:d})" msgstr "" -#: ../src/solver/solver.cxx:512 +#: ../src/solver/solver.cxx:520 msgid "Failed to initialise solver-> Aborting\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:290 +#: ../src/mesh/impls/bout/boutmesh.cxx:281 #, c++-format msgid "Finding value for NXPE (ideal = {:f})\n" msgstr "" -#: ../src/solver/solver.cxx:668 +#: ../src/solver/solver.cxx:674 msgid "Initialising solver\n" msgstr "初始化求解器\n" -#: ../src/bout++.cxx:494 +#: ../src/bout++.cxx:501 msgid "" "Input and output file for settings must be different.\n" "Provide -o to avoid this issue.\n" @@ -591,122 +592,122 @@ msgstr "" msgid "Invalid command line option '-' found - maybe check whitespace?" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:400 +#: ../src/mesh/impls/bout/boutmesh.cxx:436 msgid "Loading mesh" msgstr "加載網格" -#: ../src/mesh/impls/bout/boutmesh.cxx:415 +#: ../src/mesh/impls/bout/boutmesh.cxx:451 msgid "Mesh must contain nx" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:419 +#: ../src/mesh/impls/bout/boutmesh.cxx:455 msgid "Mesh must contain ny" msgstr "" #. Not found -#: ../src/mesh/mesh.cxx:536 +#: ../src/mesh/mesh.cxx:547 #, c++-format msgid "Missing integer array {:s}\n" msgstr "" -#: ../src/solver/solver.cxx:905 +#: ../src/solver/solver.cxx:911 #, c++-format msgid "Monitor signalled to quit (exception {})\n" msgstr "" -#: ../src/solver/solver.cxx:883 +#: ../src/solver/solver.cxx:889 #, c++-format msgid "Monitor signalled to quit (return code {})" msgstr "" -#: ../src/bout++.cxx:823 +#: ../src/bout++.cxx:834 msgid "Name of file whose existence triggers a stop" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:565 +#: ../src/mesh/impls/bout/boutmesh.cxx:601 msgid "No boundary regions in this processor" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:550 +#: ../src/mesh/impls/bout/boutmesh.cxx:586 msgid "No boundary regions; domain is periodic\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:254 +#: ../src/mesh/impls/bout/boutmesh.cxx:245 #, c++-format msgid "" "Number of processors ({:d}) not divisible by NPs in x direction ({:d})\n" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:267 +#: ../src/mesh/impls/bout/boutmesh.cxx:258 #, c++-format msgid "" "Number of processors ({:d}) not divisible by NPs in y direction ({:d})\n" msgstr "" #. Less than 2 time-steps left -#: ../src/bout++.cxx:896 +#: ../src/bout++.cxx:908 #, c++-format msgid "Only {:e} seconds ({:.2f} steps) left. Quitting\n" msgstr "" -#: ../src/sys/options.cxx:303 ../src/sys/options.cxx:345 -#: ../src/sys/options.cxx:393 ../src/sys/options.cxx:428 -#: ../src/sys/options.cxx:703 ../src/sys/options.cxx:730 -#: ../src/sys/options.cxx:757 +#: ../src/sys/options.cxx:382 ../src/sys/options.cxx:398 +#: ../src/sys/options.cxx:441 ../src/sys/options.cxx:471 +#: ../src/sys/options.cxx:745 ../src/sys/options.cxx:767 +#: ../src/sys/options.cxx:789 #, fuzzy, c++-format msgid "Option {:s} has no value" msgstr "\"{:s}\" 不是目錄\n" #. Doesn't exist -#: ../src/sys/options.cxx:159 +#: ../src/sys/options.cxx:172 #, fuzzy, c++-format msgid "Option {:s}:{:s} does not exist" msgstr "選項{:s}:{:s}不存在" -#: ../include/bout/options.hxx:828 +#: ../include/bout/options.hxx:904 #, c++-format msgid "" "Options: Setting a value from same source ({:s}) to new value '{:s}' - old " "value was '{:s}'." msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:552 +#: ../src/mesh/impls/bout/boutmesh.cxx:588 msgid "Possible boundary regions are: " msgstr "" -#: ../src/bout++.cxx:538 +#: ../src/bout++.cxx:545 #, c++-format msgid "" "Processor number: {:d} of {:d}\n" "\n" msgstr "" -#: ../src/mesh/mesh.cxx:609 +#: ../src/mesh/mesh.cxx:642 #, c++-format msgid "Registered region 2D {:s}" msgstr "" -#: ../src/mesh/mesh.cxx:599 +#: ../src/mesh/mesh.cxx:632 #, c++-format msgid "Registered region 3D {:s}" msgstr "" -#: ../src/mesh/mesh.cxx:619 +#: ../src/mesh/mesh.cxx:652 #, c++-format msgid "Registered region Perp {:s}" msgstr "" -#: ../src/bout++.cxx:529 +#: ../src/bout++.cxx:536 #, fuzzy, c++-format msgid "Revision: {:s}\n" msgstr "版: {:s}\n" -#: ../src/solver/solver.cxx:581 +#: ../src/solver/solver.cxx:587 msgid "Run time : " msgstr "計算時間" #. / Run the solver -#: ../src/solver/solver.cxx:525 +#: ../src/solver/solver.cxx:533 msgid "" "Running simulation\n" "\n" @@ -718,7 +719,7 @@ msgstr "" msgid "Signal" msgstr "" -#: ../src/bout++.cxx:865 +#: ../src/bout++.cxx:876 msgid "" "Sim Time | RHS evals | Wall Time | Calc Inv Comm I/O SOLVER\n" "\n" @@ -727,7 +728,7 @@ msgstr "" "間整合\n" "\n" -#: ../src/bout++.cxx:868 +#: ../src/bout++.cxx:879 msgid "" "Sim Time | RHS_e evals | RHS_I evals | Wall Time | Calc Inv " "Comm I/O SOLVER\n" @@ -737,51 +738,51 @@ msgstr "" "通訊 輸入輸出 時間整合\n" "\n" -#: ../src/solver/solver.cxx:506 +#: ../src/solver/solver.cxx:514 #, c++-format msgid "Solver running for {:d} outputs with monitor timestep of {:e}\n" msgstr "" -#: ../src/solver/solver.cxx:502 +#: ../src/solver/solver.cxx:510 #, c++-format msgid "Solver running for {:d} outputs with output timestep of {:e}\n" msgstr "" -#: ../src/solver/solver.cxx:781 +#: ../src/solver/solver.cxx:788 #, c++-format msgid "" "Solver::addMonitor: Cannot reduce timestep (from {:g} to {:g}) after init is " "called!" msgstr "" -#: ../src/solver/solver.cxx:1281 +#: ../src/solver/solver.cxx:1289 #, c++-format msgid "" "Time derivative at wrong location - Field is at {:s}, derivative is at {:s} " "for field '{:s}'\n" msgstr "" -#: ../src/solver/solver.cxx:1480 +#: ../src/solver/solver.cxx:1494 #, c++-format msgid "Time derivative for variable '{:s}' not set" msgstr "" -#: ../src/mesh/mesh.cxx:605 +#: ../src/mesh/mesh.cxx:638 #, c++-format msgid "Trying to add an already existing region {:s} to regionMap2D" msgstr "" -#: ../src/mesh/mesh.cxx:595 +#: ../src/mesh/mesh.cxx:614 #, c++-format msgid "Trying to add an already existing region {:s} to regionMap3D" msgstr "" -#: ../src/mesh/mesh.cxx:616 +#: ../src/mesh/mesh.cxx:649 #, c++-format msgid "Trying to add an already existing region {:s} to regionMapPerp" msgstr "" -#: ../src/sys/options.cxx:99 ../src/sys/options.cxx:138 +#: ../src/sys/options.cxx:112 ../src/sys/options.cxx:151 #, c++-format msgid "" "Trying to index Option '{0}' with '{1}', but '{0}' is a value, not a " @@ -790,37 +791,37 @@ msgid "" "rename one of them.\n" msgstr "" -#: ../src/mesh/coordinates.cxx:1462 +#: ../src/mesh/coordinates.cxx:1464 msgid "" "Unrecognised paralleltransform option.\n" "Valid choices are 'identity', 'shifted', 'fci'" msgstr "" -#: ../src/sys/options.cxx:872 +#: ../src/sys/options.cxx:899 msgid "Unused options:\n" msgstr "" -#: ../src/bout++.cxx:439 +#: ../src/bout++.cxx:446 #, c++-format msgid "Usage is {:s} -d \n" msgstr "" -#: ../src/bout++.cxx:448 +#: ../src/bout++.cxx:455 #, c++-format msgid "Usage is {:s} -f \n" msgstr "" -#: ../src/bout++.cxx:466 +#: ../src/bout++.cxx:473 #, c++-format msgid "Usage is {:s} -l \n" msgstr "" -#: ../src/bout++.cxx:457 +#: ../src/bout++.cxx:464 #, c++-format msgid "Usage is {:s} -o \n" msgstr "" -#: ../src/bout++.cxx:353 +#: ../src/bout++.cxx:360 #, c++-format msgid "Usage is {} {} \n" msgstr "" @@ -831,7 +832,7 @@ msgstr "" #. Print help message -- note this will be displayed once per processor as we've not #. started MPI yet. -#: ../src/bout++.cxx:367 +#: ../src/bout++.cxx:374 #, c++-format msgid "" "Usage: {:s} [-d ] [-f ] [restart [append]] " @@ -839,94 +840,99 @@ msgid "" msgstr "" #. restart file should be written by physics model -#: ../src/solver/solver.cxx:921 +#: ../src/solver/solver.cxx:927 msgid "User signalled to quit. Returning\n" msgstr "" -#: ../src/sys/options.cxx:373 +#: ../src/sys/options.cxx:486 +#, fuzzy, c++-format +msgid "Value for option {:s} = {:e} is not a bool" +msgstr "\"{:s}\" 不是目錄\n" + +#: ../src/sys/options.cxx:426 #, c++-format msgid "Value for option {:s} = {:e} is not an integer" msgstr "" -#: ../src/sys/options.cxx:408 +#: ../src/sys/options.cxx:456 #, c++-format msgid "Value for option {:s} cannot be converted to a BoutReal" msgstr "" -#: ../src/sys/options.cxx:581 +#: ../src/sys/options.cxx:623 #, c++-format msgid "Value for option {:s} cannot be converted to a Field2D" msgstr "" -#: ../src/sys/options.cxx:529 +#: ../src/sys/options.cxx:571 #, c++-format msgid "Value for option {:s} cannot be converted to a Field3D" msgstr "" -#: ../src/sys/options.cxx:663 +#: ../src/sys/options.cxx:705 #, c++-format msgid "Value for option {:s} cannot be converted to a FieldPerp" msgstr "" -#: ../src/sys/options.cxx:451 +#: ../src/sys/options.cxx:491 #, c++-format msgid "Value for option {:s} cannot be converted to a bool" msgstr "" -#: ../src/sys/options.cxx:709 +#: ../src/sys/options.cxx:751 #, c++-format msgid "Value for option {:s} cannot be converted to an Array" msgstr "" -#: ../src/sys/options.cxx:736 +#: ../src/sys/options.cxx:773 #, c++-format msgid "Value for option {:s} cannot be converted to an Matrix" msgstr "" -#: ../src/sys/options.cxx:763 +#: ../src/sys/options.cxx:795 #, c++-format msgid "Value for option {:s} cannot be converted to an Tensor" msgstr "" #. Another type which can't be converted -#: ../src/sys/options.cxx:365 +#: ../src/sys/options.cxx:418 #, c++-format msgid "Value for option {:s} is not an integer" msgstr "" -#: ../src/solver/solver.cxx:1232 ../src/solver/solver.cxx:1238 +#: ../src/solver/solver.cxx:1240 ../src/solver/solver.cxx:1246 #, c++-format msgid "Variable '{:s}' not initialised" msgstr "" -#: ../src/mesh/impls/bout/boutmesh.cxx:431 +#: ../src/mesh/impls/bout/boutmesh.cxx:467 #, c++-format msgid "" "WARNING: Number of toroidal points should be 2^n for efficient FFT " "performance -- consider changing MZ ({:d}) if using FFTs\n" msgstr "" -#: ../src/mesh/coordinates.cxx:633 +#: ../src/mesh/coordinates.cxx:635 msgid "WARNING: extrapolating input mesh quantities into x-boundary cells\n" msgstr "" -#: ../src/mesh/coordinates.cxx:410 +#: ../src/mesh/coordinates.cxx:412 msgid "" "WARNING: extrapolating input mesh quantities into x-boundary cells. Set " "option extrapolate_x=false to disable this.\n" msgstr "" -#: ../src/mesh/coordinates.cxx:638 +#: ../src/mesh/coordinates.cxx:640 msgid "WARNING: extrapolating input mesh quantities into y-boundary cells\n" msgstr "" -#: ../src/mesh/coordinates.cxx:415 +#: ../src/mesh/coordinates.cxx:417 msgid "" "WARNING: extrapolating input mesh quantities into y-boundary cells. Set " "option extrapolate_y=false to disable this.\n" msgstr "" -#: ../src/bout++.cxx:814 +#: ../src/bout++.cxx:825 msgid "Wall time limit in hours. By default (< 0), no limit" msgstr "" @@ -936,10 +942,18 @@ msgid "Writing options to file {:s}\n" msgstr "寫選項到文件 " #. / The source label given to default values -#: ../src/sys/options.cxx:15 +#: ../src/sys/options.cxx:34 msgid "default" msgstr "默认设置" +#, fuzzy, c++-format +#~ msgid "\tOpenMP parallelisation {}" +#~ msgstr "\tOpenMP並行化已禁用\n" + +#, fuzzy, c++-format +#~ msgid "\tOption '{:s}': Boolean expected. Got '{:s}'\n" +#~ msgstr "\t選項 '{:s}': 布爾預期. 拿到 '{:s}'\n" + #~ msgid "\tChecking disabled\n" #~ msgstr "\t測試關掉\n" @@ -947,13 +961,5 @@ msgstr "默认设置" #~ msgid "\tChecking enabled, level {:d}\n" #~ msgstr "\t測試打開,级别 {:d}\n" -#, fuzzy -#~ msgid "\tOpenMP parallelisation enabled, using {:d} threads\n" -#~ msgstr "\t啟用OpenMP並行化。 使用{:d}個線程\n" - -#, fuzzy -#~ msgid "Option {:s} is not a section" -#~ msgstr "\"{:s}\" 不是目錄\n" - #~ msgid "Error encountered during initialisation\n" #~ msgstr "啟動時遇到錯誤\n" From 84f60c5d8497ee35882218b0f632913c89582fa1 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Mon, 6 Oct 2025 10:49:46 +0100 Subject: [PATCH 64/78] Tweak citations updater, mention in docs --- bin/update_citations.py | 10 ++++++++++ manual/RELEASE_HOWTO.md | 5 ++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/bin/update_citations.py b/bin/update_citations.py index c7771a3611..63f597f588 100755 --- a/bin/update_citations.py +++ b/bin/update_citations.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# /// script +# requires-python = ">=3.11" +# dependencies = [ +# "ruamel-yaml", +# "unidecode", +# ] +# /// import argparse import subprocess from collections import defaultdict @@ -242,6 +249,9 @@ def update_citations(): new_authors = [] for author in unrecognised_authors: + if " " not in author: + # This is just a GitHub handle, skip + continue first_name, last_name = author.rsplit(maxsplit=1) new_authors.append({"family-names": last_name, "given-names": first_name}) diff --git a/manual/RELEASE_HOWTO.md b/manual/RELEASE_HOWTO.md index d8ced2afb5..72d1fb3f88 100644 --- a/manual/RELEASE_HOWTO.md +++ b/manual/RELEASE_HOWTO.md @@ -31,9 +31,8 @@ Before merging PR: - [ ] Update [`CHANGELOG.md`][changelog]: - Run [bout-changelog-generator.py LAST_RELEASE NEXT_RELEASE][bin/bout-changelog-generator.py] - See the docs for how to get the token -- [ ] Get list of authors: - - [ ] `git log --format='%aN' | sort | uniq` - - [ ] Compare to list in [`CITATION.cff`][citation], add new authors +- [ ] Run [`update_citations.py`][bin/update_citations.py] to add new + authors to [`CITATION.cff`](CITATION.cff) - [ ] Prep a new Zenodo release: - https://doi.org/10.5281/zenodo.1423212 - "New Version" From 265bbb9d2c4d3918f00d5999127a81c1775022b1 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Mon, 6 Oct 2025 10:50:06 +0100 Subject: [PATCH 65/78] Add new authors --- CITATION.cff | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/CITATION.cff b/CITATION.cff index 81f5c35e82..6a9881b379 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -197,6 +197,22 @@ authors: - family-names: Kryjak given-names: Mike + - family-names: Powell + given-names: Seimon + - family-names: Ağgül + given-names: Mustafa + - family-names: Parry + given-names: Owen + - family-names: Podhorszki + given-names: Norbert + - family-names: Falgout + given-names: Rob + - family-names: Li + given-names: Nami + - family-names: Body + given-names: Tom + - family-names: Tsagkaridis + given-names: Malamas version: 5.1.1 date-released: 2023-04-10 repository-code: https://github.com/boutproject/BOUT-dev From 7e96b3f9609d34b8e5e75ce3de10047b9b584cfd Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Mon, 6 Oct 2025 10:55:14 +0100 Subject: [PATCH 66/78] Add dependencies to changelog updater --- bin/bout-changelog-generator.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bin/bout-changelog-generator.py b/bin/bout-changelog-generator.py index cfb9a30bb0..d5ad11892e 100755 --- a/bin/bout-changelog-generator.py +++ b/bin/bout-changelog-generator.py @@ -1,4 +1,10 @@ #! /usr/bin/env python3 +# /// script +# requires-python = ">=3.12" +# dependencies = [ +# "pygithub", +# ] +# /// import argparse import os From 7678b8ab7723ece7dcf3c48d2dd8b728e206d6f7 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Mon, 6 Oct 2025 11:19:52 +0100 Subject: [PATCH 67/78] Tweak version updater, mention in docs --- bin/update_version_number_in_files.py | 5 ----- manual/RELEASE_HOWTO.md | 10 ++-------- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/bin/update_version_number_in_files.py b/bin/update_version_number_in_files.py index 85df930aea..ec9a31bc32 100755 --- a/bin/update_version_number_in_files.py +++ b/bin/update_version_number_in_files.py @@ -66,11 +66,6 @@ def update_version_number_in_file(relative_filepath, pattern, new_version_number def bump_version_numbers( new_version_number: VersionNumber, next_version_number: VersionNumber ): - update_version_number_in_file( - "configure.ac", - r"^AC_INIT\(\[BOUT\+\+\],\[(\d+\.\d+\.\d+)\]", - new_version_number, - ) update_version_number_in_file( "CITATION.cff", r"^version: (\d+\.\d+\.\d+)", new_version_number ) diff --git a/manual/RELEASE_HOWTO.md b/manual/RELEASE_HOWTO.md index 72d1fb3f88..d0a6ddb231 100644 --- a/manual/RELEASE_HOWTO.md +++ b/manual/RELEASE_HOWTO.md @@ -29,7 +29,7 @@ Before merging PR: - Be aware that this *will* update the timestamps and *possibly* reorder file paths in the .po and .pot files - [ ] Update [`CHANGELOG.md`][changelog]: - - Run [bout-changelog-generator.py LAST_RELEASE NEXT_RELEASE][bin/bout-changelog-generator.py] + - Run [`bout-changelog-generator.py LAST_RELEASE NEXT_RELEASE`][bin/bout-changelog-generator.py] - See the docs for how to get the token - [ ] Run [`update_citations.py`][bin/update_citations.py] to add new authors to [`CITATION.cff`](CITATION.cff) @@ -43,13 +43,7 @@ Before merging PR: - [ ] Change DOI in [`README.md`][README] to new DOI - [ ] Change date-released in [`CITATION.cff`][citation] - [ ] Check `abidiff` to see if `soname` needs bumping in `makefile`: -- [ ] Change version number, removing prerelease tag in: - - [ ] [`configure.ac`][configure]: `AC_INIT` - - [ ] [`CITATION.cff`][citation]: `version` - - [ ] [`manual/sphinx/conf.py`][sphinx_conf]: `version` and `release` - - [ ] [`manual/doxygen/Doxyfile_readthedocs`][Doxyfile_readthedocs]: `PROJECT_NUMBER` - - [ ] [`manual/doxygen/Doxyfile`][Doxyfile]: `PROJECT_NUMBER` - - [ ] [`CMakeLists.txt`][CMakeLists]: `_bout_previous_version`, `_bout_next_version` +- [ ] Run [`update_version_number.py LAST_RELEASE NEXT_RELEASE`][bin/update_version_number.py] - [ ] Update what version of PETSc and SUNDIALS we support (upper bound) From ad1d5147894557608a6a28639fbed5256df7f2e8 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Mon, 6 Oct 2025 11:20:07 +0100 Subject: [PATCH 68/78] Bump version to 5.2.0 --- CITATION.cff | 2 +- CMakeLists.txt | 4 ++-- manual/doxygen/Doxyfile | 2 +- manual/doxygen/Doxyfile_readthedocs | 2 +- manual/sphinx/conf.py | 4 ++-- tools/pylib/_boutpp_build/backend.py | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 6a9881b379..496f8a3154 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -213,7 +213,7 @@ authors: given-names: Tom - family-names: Tsagkaridis given-names: Malamas -version: 5.1.1 +version: 5.2.0 date-released: 2023-04-10 repository-code: https://github.com/boutproject/BOUT-dev url: http://boutproject.github.io/ diff --git a/CMakeLists.txt b/CMakeLists.txt index c45fca3b72..5c49e434e4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,8 +25,8 @@ endif() # CMake currently doesn't support proper semver # Set the version here, strip any extra tags to use in `project` # We try to use git to get a full description, inspired by setuptools_scm -set(_bout_previous_version "5.1.1") -set(_bout_next_version "5.2.0") +set(_bout_previous_version "5.2.0") +set(_bout_next_version "5.2.1") execute_process( COMMAND "git" describe --tags --match=v${_bout_previous_version} COMMAND sed -e s/${_bout_previous_version}-/${_bout_next_version}.dev/ -e s/-/+/ diff --git a/manual/doxygen/Doxyfile b/manual/doxygen/Doxyfile index 0e3c6f6945..e7998854b0 100644 --- a/manual/doxygen/Doxyfile +++ b/manual/doxygen/Doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = BOUT++ # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 5.1.1 +PROJECT_NUMBER = 5.2.0 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/manual/doxygen/Doxyfile_readthedocs b/manual/doxygen/Doxyfile_readthedocs index 5c67187248..73060bb6b4 100644 --- a/manual/doxygen/Doxyfile_readthedocs +++ b/manual/doxygen/Doxyfile_readthedocs @@ -38,7 +38,7 @@ PROJECT_NAME = BOUT++ # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 5.1.1 +PROJECT_NUMBER = 5.2.0 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/manual/sphinx/conf.py b/manual/sphinx/conf.py index 55d059feba..3aa6e94dc3 100755 --- a/manual/sphinx/conf.py +++ b/manual/sphinx/conf.py @@ -184,9 +184,9 @@ def __getattr__(cls, name): # built documents. # # The short X.Y version. -version = "5.1" +version = "5.2" # The full version, including alpha/beta/rc tags. -release = "5.1.1" +release = "5.2.0" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/tools/pylib/_boutpp_build/backend.py b/tools/pylib/_boutpp_build/backend.py index 3df29d276d..ae3162cf11 100755 --- a/tools/pylib/_boutpp_build/backend.py +++ b/tools/pylib/_boutpp_build/backend.py @@ -35,8 +35,8 @@ def getversion(): version = os.environ["BOUT_PRETEND_VERSION"] return version - _bout_previous_version = "v5.1.1" - _bout_next_version = "v5.2.0" + _bout_previous_version = "v5.2.0" + _bout_next_version = "v5.2.1" try: try: From 0cb29717831fec0bf858a756261efaac34afbdef Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Mon, 6 Oct 2025 11:26:20 +0100 Subject: [PATCH 69/78] Update changelog --- CHANGELOG.md | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d346d47e8..41e3e2c47b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,8 @@ # Changelog -## [v6.0.0](https://github.com/boutproject/BOUT-dev/tree/next) -[Full Changelog](https://github.com/boutproject/BOUT-dev/compare/v5.1.0...next) +## [v5.2.0](https://github.com/boutproject/BOUT-dev/tree/v5.2.0 + +[Full Changelog](https://github.com/boutproject/BOUT-dev/compare/v5.1.1...v5.2.0) ### Breaking changes @@ -16,6 +17,67 @@ confusing. Now, monitors are called with the current number of completed monitor-steps. +## Changes + +- Fixes for FreeBSD [\#3172][https://github.com/boutproject/BOUT-dev/pull/3172] ([tomc271][https://github.com/tomc271]) +- snes: Print a warning if the coloring is non-symmetric. [\#3159][https://github.com/boutproject/BOUT-dev/pull/3159] ([bendudson][https://github.com/bendudson]) +- Cmake fix from master [\#3152][https://github.com/boutproject/BOUT-dev/pull/3152] ([oparry-ukaea][https://github.com/oparry-ukaea]) +- Bump ZedThree/clang-tidy-review from 0.20.1 to 0.21.0 [\#3150][https://github.com/boutproject/BOUT-dev/pull/3150] ([ZedThree][https://github.com/ZedThree]) +- SNES solver: Added a PID controller to update the timestep [\#3146][https://github.com/boutproject/BOUT-dev/pull/3146] ([malamast][https://github.com/malamast]) +- Fix name clash in some examples and MMS tests [\#3145][https://github.com/boutproject/BOUT-dev/pull/3145] ([ZedThree][https://github.com/ZedThree]) +- Handle absolute paths to options file [\#3142][https://github.com/boutproject/BOUT-dev/pull/3142] ([bendudson][https://github.com/bendudson]) +- Revert eliminate hypre boundary equations [\#3136][https://github.com/boutproject/BOUT-dev/pull/3136] ([ZedThree][https://github.com/ZedThree]) +- CI: Switch to released fedora [\#3134][https://github.com/boutproject/BOUT-dev/pull/3134] ([dschwoerer][https://github.com/dschwoerer]) +- Generalise FakeMeshFixture to allow configurable grid spacing via templating [\#3132][https://github.com/boutproject/BOUT-dev/pull/3132] ([tomc271][https://github.com/tomc271]) +- Fixes for ELM-PB preconditioner [\#3128][https://github.com/boutproject/BOUT-dev/pull/3128] ([Steven-Roberts][https://github.com/Steven-Roberts]) +- Fix cast for new petsc [\#3117][https://github.com/boutproject/BOUT-dev/pull/3117] ([dschwoerer][https://github.com/dschwoerer]) +- Fix bug where ARKODE considered all problems linear [\#3114][https://github.com/boutproject/BOUT-dev/pull/3114] ([Steven-Roberts][https://github.com/Steven-Roberts]) +- cvode: Add linear_solver option [\#3112][https://github.com/boutproject/BOUT-dev/pull/3112] ([bendudson][https://github.com/bendudson]) +- periodicX communication fixes [\#3109][https://github.com/boutproject/BOUT-dev/pull/3109] ([bendudson][https://github.com/bendudson]) +- beuler solver timestep and Jacobian calculation [\#3107][https://github.com/boutproject/BOUT-dev/pull/3107] ([bendudson][https://github.com/bendudson]) +- Feature/snes stencil [\#3104][https://github.com/boutproject/BOUT-dev/pull/3104] ([seimtpow][https://github.com/seimtpow]) +- Add attributes to ADIOS2 output to "define" dimensions as names. We n… [\#3098][https://github.com/boutproject/BOUT-dev/pull/3098] ([pnorbert][https://github.com/pnorbert]) +- CI: Avoid issues with special characters [\#3090][https://github.com/boutproject/BOUT-dev/pull/3090] ([dschwoerer][https://github.com/dschwoerer]) +- CI: Fix clang format [\#3086][https://github.com/boutproject/BOUT-dev/pull/3086] ([dschwoerer][https://github.com/dschwoerer]) +- Small updates for FCI output [\#3085][https://github.com/boutproject/BOUT-dev/pull/3085] ([bendudson][https://github.com/bendudson]) +- Eliminate boundary equations to improve HYPRE solves [\#3082][https://github.com/boutproject/BOUT-dev/pull/3082] ([rfalgout][https://github.com/rfalgout]) +- Elm-pb example with relaxing phi [\#3081][https://github.com/boutproject/BOUT-dev/pull/3081] ([bendudson][https://github.com/bendudson]) +- CI: Show more output of dnf5 to help debugging [\#3071][https://github.com/boutproject/BOUT-dev/pull/3071] ([dschwoerer][https://github.com/dschwoerer]) +- Fix clang tidy review [\#3070][https://github.com/boutproject/BOUT-dev/pull/3070] ([ZedThree][https://github.com/ZedThree]) +- CMake: Bump downloaded SUNDIALS version [\#3067][https://github.com/boutproject/BOUT-dev/pull/3067] ([ZedThree][https://github.com/ZedThree]) +- Use isfinite, fix pvode linking [\#3063][https://github.com/boutproject/BOUT-dev/pull/3063] ([bendudson][https://github.com/bendudson]) +- Make iteration more robust and give more options in LaplaceNaulin [\#3061][https://github.com/boutproject/BOUT-dev/pull/3061] ([johnomotani][https://github.com/johnomotani]) +- Fixes zoidberg [\#3054][https://github.com/boutproject/BOUT-dev/pull/3054] ([dschwoerer][https://github.com/dschwoerer]) +- Fix finalise in boutpp [\#3053][https://github.com/boutproject/BOUT-dev/pull/3053] ([dschwoerer][https://github.com/dschwoerer]) +- Avoid some warnings for 3D Metrics [\#3052][https://github.com/boutproject/BOUT-dev/pull/3052] ([dschwoerer][https://github.com/dschwoerer]) +- Minor fixes for the python backend [\#3051][https://github.com/boutproject/BOUT-dev/pull/3051] ([dschwoerer][https://github.com/dschwoerer]) +- Cleanup BOUT_HOST_DEVICE qualifiers [\#3040][https://github.com/boutproject/BOUT-dev/pull/3040] ([ggeorgakoudis][https://github.com/ggeorgakoudis]) +- Deprecate options that are only used as default for other options [\#3038][https://github.com/boutproject/BOUT-dev/pull/3038] ([dschwoerer][https://github.com/dschwoerer]) +- Avoid using the wrong grid by accident [\#3036][https://github.com/boutproject/BOUT-dev/pull/3036] ([dschwoerer][https://github.com/dschwoerer]) +- Use PEP 625 compatible archive name (next) [\#3035][https://github.com/boutproject/BOUT-dev/pull/3035] ([dschwoerer][https://github.com/dschwoerer]) +- CI: Increase check level for debug run + unit test fixes [\#3033][https://github.com/boutproject/BOUT-dev/pull/3033] ([dschwoerer][https://github.com/dschwoerer]) +- Avoid `#define` conflict with sundials [\#3031][https://github.com/boutproject/BOUT-dev/pull/3031] ([dschwoerer][https://github.com/dschwoerer]) +- Ensure PETSc headers are included after `bout/petsclib.hxx` [\#3024][https://github.com/boutproject/BOUT-dev/pull/3024] ([ZedThree][https://github.com/ZedThree]) +- Fix minor HYPRE and ADIOS2 compilation issues [\#3022][https://github.com/boutproject/BOUT-dev/pull/3022] ([ZedThree][https://github.com/ZedThree]) +- Fix recompilation cascade [\#3021][https://github.com/boutproject/BOUT-dev/pull/3021] ([ZedThree][https://github.com/ZedThree]) +- Move `invert3x3` out of general purpose `utils.hxx` header [\#3018][https://github.com/boutproject/BOUT-dev/pull/3018] ([ZedThree][https://github.com/ZedThree]) +- Replace deprecated `boututils.file_import` [\#3017][https://github.com/boutproject/BOUT-dev/pull/3017] ([ZedThree][https://github.com/ZedThree]) +- CI: clang-tidy-review tweaks [\#3016][https://github.com/boutproject/BOUT-dev/pull/3016] ([ZedThree][https://github.com/ZedThree]) +- Backward Euler solver improvements [\#3009][https://github.com/boutproject/BOUT-dev/pull/3009] ([bendudson][https://github.com/bendudson]) +- Fix circular header dependency: mesh.hxx <-> griddata.hxx [\#3008][https://github.com/boutproject/BOUT-dev/pull/3008] ([ZedThree][https://github.com/ZedThree]) +- Fix exception message [\#3003][https://github.com/boutproject/BOUT-dev/pull/3003] ([dschwoerer][https://github.com/dschwoerer]) +- Ensure pointer is checked before dereferencing [\#3002][https://github.com/boutproject/BOUT-dev/pull/3002] ([dschwoerer][https://github.com/dschwoerer]) +- Fix: preserve regionID [\#3000][https://github.com/boutproject/BOUT-dev/pull/3000] ([dschwoerer][https://github.com/dschwoerer]) +- Lazy grid loading [\#2991][https://github.com/boutproject/BOUT-dev/pull/2991] ([dschwoerer][https://github.com/dschwoerer]) +- Fix compilation warnings with SUNDIALS 7.1.0 [\#2990][https://github.com/boutproject/BOUT-dev/pull/2990] ([Steven-Roberts][https://github.com/Steven-Roberts]) +- Add LC gitlab CI for GPU build/run tests [\#2989][https://github.com/boutproject/BOUT-dev/pull/2989] ([ggeorgakoudis][https://github.com/ggeorgakoudis]) +- BoutMask non-const operator[](Ind3D) [\#2988][https://github.com/boutproject/BOUT-dev/pull/2988] ([bendudson][https://github.com/bendudson]) +- Use consistently signed char [\#2987][https://github.com/boutproject/BOUT-dev/pull/2987] ([dschwoerer][https://github.com/dschwoerer]) +- naulin laplace: Acceptance tolerances after maxits [\#2983][https://github.com/boutproject/BOUT-dev/pull/2983] ([bendudson][https://github.com/bendudson]) +- Merge v5.1.1 into `next` [\#2978][https://github.com/boutproject/BOUT-dev/pull/2978] ([ZedThree][https://github.com/ZedThree]) +- CI: Bump all ubuntu images [\#2977][https://github.com/boutproject/BOUT-dev/pull/2977] ([ZedThree][https://github.com/ZedThree]) +- Read 2D variables into Field3D [\#2975][https://github.com/boutproject/BOUT-dev/pull/2975] ([bendudson][https://github.com/bendudson]) + ## [v5.1.1](https://github.com/boutproject/BOUT-dev/tree/v5.1.1) [Full Changelog](https://github.com/boutproject/BOUT-dev/compare/v5.1.0...v5.1.1) From 6e35ac05507c0f11bd5ccbcd955fd8b0a9860e3b Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Mon, 6 Oct 2025 13:50:13 +0100 Subject: [PATCH 70/78] CI: Don't run clang-{tidy,format} on RC branches --- .github/workflows/clang-format.yml | 2 ++ .github/workflows/clang-tidy-review.yml | 5 ++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/clang-format.yml b/.github/workflows/clang-format.yml index 60cf5b6d6f..e32c959cb2 100644 --- a/.github/workflows/clang-format.yml +++ b/.github/workflows/clang-format.yml @@ -8,6 +8,8 @@ on: jobs: clang-format: + # Release candidate branches tend to have big PRs which causes all sorts of problems + if: ${{ !endsWith(github.head_ref, '-rc') }} runs-on: ubuntu-latest steps: # Checkout the pull request branch, also include all history diff --git a/.github/workflows/clang-tidy-review.yml b/.github/workflows/clang-tidy-review.yml index 743eefe703..3f20db608f 100644 --- a/.github/workflows/clang-tidy-review.yml +++ b/.github/workflows/clang-tidy-review.yml @@ -5,9 +5,6 @@ on: paths: - '**.cxx' - '**.hxx' - branches-ignore: - # Release candidate branches tend to have big PRs which causes all sorts of problems - - 'v*rc' concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -15,6 +12,8 @@ concurrency: jobs: review: + # Release candidate branches tend to have big PRs which causes all sorts of problems + if: ${{ !endsWith(github.head_ref, '-rc') }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 From 6c78dc439884f66943842de574921367c9ffdd67 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Mon, 6 Oct 2025 14:06:09 +0100 Subject: [PATCH 71/78] Fix reorder warning from snes --- src/solver/impls/snes/snes.cxx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/solver/impls/snes/snes.cxx b/src/solver/impls/snes/snes.cxx index 2bb163f324..7965107b38 100644 --- a/src/solver/impls/snes/snes.cxx +++ b/src/solver/impls/snes/snes.cxx @@ -115,12 +115,12 @@ SNESSolver::SNESSolver(Options* opts) .doc("Convergence tolerance in terms of the norm of the change in " "the solution between steps") .withDefault(1e-8)), - maxits((*options)["max_nonlinear_iterations"] - .doc("Maximum number of nonlinear iterations per SNES solve") - .withDefault(50)), maxf((*options)["maxf"] .doc("Maximum number of function evaluations per SNES solve") .withDefault(10000)), + maxits((*options)["max_nonlinear_iterations"] + .doc("Maximum number of nonlinear iterations per SNES solve") + .withDefault(50)), lower_its((*options)["lower_its"] .doc("Iterations below which the next timestep is increased") .withDefault(static_cast(maxits * 0.5))), From f1f014376ff22cb46734dec043ee23c507052ef1 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Mon, 6 Oct 2025 14:06:27 +0100 Subject: [PATCH 72/78] Fix some easy clang-tidy snes warnings --- src/solver/impls/snes/snes.cxx | 14 +++++++------- src/solver/impls/snes/snes.hxx | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/solver/impls/snes/snes.cxx b/src/solver/impls/snes/snes.cxx index 7965107b38..de6c54388d 100644 --- a/src/solver/impls/snes/snes.cxx +++ b/src/solver/impls/snes/snes.cxx @@ -57,6 +57,7 @@ class ColoringStencil { } }; +namespace { /* * PETSc callback function, which evaluates the nonlinear * function to be solved by SNES. @@ -64,7 +65,7 @@ class ColoringStencil { * This function assumes the context void pointer is a pointer * to an SNESSolver object. */ -static PetscErrorCode FormFunction(SNES UNUSED(snes), Vec x, Vec f, void* ctx) { +PetscErrorCode FormFunction(SNES UNUSED(snes), Vec x, Vec f, void* ctx) { return static_cast(ctx)->snes_function(x, f, false); } @@ -73,7 +74,7 @@ static PetscErrorCode FormFunction(SNES UNUSED(snes), Vec x, Vec f, void* ctx) { * * This function can be a linearised form of FormFunction */ -static PetscErrorCode FormFunctionForDifferencing(void* ctx, Vec x, Vec f) { +PetscErrorCode FormFunctionForDifferencing(void* ctx, Vec x, Vec f) { return static_cast(ctx)->snes_function(x, f, true); } @@ -82,21 +83,20 @@ static PetscErrorCode FormFunctionForDifferencing(void* ctx, Vec x, Vec f) { * * This can be a linearised and simplified form of FormFunction */ -static PetscErrorCode FormFunctionForColoring(void* UNUSED(snes), Vec x, Vec f, +PetscErrorCode FormFunctionForColoring(void* UNUSED(snes), Vec x, Vec f, void* ctx) { return static_cast(ctx)->snes_function(x, f, true); } -static PetscErrorCode snesPCapply(PC pc, Vec x, Vec y) { - int ierr; - +PetscErrorCode snesPCapply(PC pc, Vec x, Vec y) { // Get the context SNESSolver* s; - ierr = PCShellGetContext(pc, reinterpret_cast(&s)); + int ierr = PCShellGetContext(pc, reinterpret_cast(&s)); CHKERRQ(ierr); PetscFunctionReturn(s->precon(x, y)); } +} SNESSolver::SNESSolver(Options* opts) : Solver(opts), diff --git a/src/solver/impls/snes/snes.hxx b/src/solver/impls/snes/snes.hxx index bd942f09ff..31deae6f06 100644 --- a/src/solver/impls/snes/snes.hxx +++ b/src/solver/impls/snes/snes.hxx @@ -57,7 +57,7 @@ BOUT_ENUM_CLASS(BoutSnesEquationForm, pseudo_transient, rearranged_backward_eule class SNESSolver : public Solver { public: explicit SNESSolver(Options* opts = nullptr); - ~SNESSolver() = default; + ~SNESSolver() override = default; int init() override; int run() override; From 6380657813022478bf2870f4fbe6d6ecabe45259 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Mon, 6 Oct 2025 14:06:51 +0100 Subject: [PATCH 73/78] Bump bundled fmt --- externalpackages/fmt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/externalpackages/fmt b/externalpackages/fmt index 2ac6c5ca8b..486e7ba579 160000 --- a/externalpackages/fmt +++ b/externalpackages/fmt @@ -1 +1 @@ -Subproject commit 2ac6c5ca8b3dfbcb1cc5cf49a8cc121e3984559c +Subproject commit 486e7ba579a2c677772d004ecd0311142ba481be From 01c406823fed18c63a5745c72333999c82ef8364 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Mon, 6 Oct 2025 16:16:30 +0100 Subject: [PATCH 74/78] Fix deprecation warning --- include/bout/invertable_operator.hxx | 56 +++++++++++++--------------- 1 file changed, 25 insertions(+), 31 deletions(-) diff --git a/include/bout/invertable_operator.hxx b/include/bout/invertable_operator.hxx index fe139986be..9b9dbba41a 100644 --- a/include/bout/invertable_operator.hxx +++ b/include/bout/invertable_operator.hxx @@ -219,21 +219,18 @@ public: localmesh->LocalNy, localmesh->LocalNz, localmesh->maxregionblocksize); } } - if (localmesh->firstY() or localmesh->lastY()) { - for (int ix = localmesh->xstart; ix <= localmesh->xend; ix++) { - if (not localmesh->periodicY(ix)) { - if (localmesh->firstY()) { - nocorner3D += - Region(ix, ix, 0, localmesh->ystart - 1, 0, - localmesh->LocalNz - 1, localmesh->LocalNy, - localmesh->LocalNz, localmesh->maxregionblocksize); - } - if (localmesh->lastY()) { - nocorner3D += Region( - ix, ix, localmesh->LocalNy - localmesh->ystart, - localmesh->LocalNy - 1, 0, localmesh->LocalNz - 1, localmesh->LocalNy, - localmesh->LocalNz, localmesh->maxregionblocksize); - } + for (int ix = localmesh->xstart; ix <= localmesh->xend; ix++) { + if (not localmesh->periodicY(ix)) { + if (localmesh->firstY(ix)) { + nocorner3D += Region( + ix, ix, 0, localmesh->ystart - 1, 0, localmesh->LocalNz - 1, + localmesh->LocalNy, localmesh->LocalNz, localmesh->maxregionblocksize); + } + if (localmesh->lastY(ix)) { + nocorner3D += Region( + ix, ix, localmesh->LocalNy - localmesh->ystart, localmesh->LocalNy - 1, + 0, localmesh->LocalNz - 1, localmesh->LocalNy, localmesh->LocalNz, + localmesh->maxregionblocksize); } } } @@ -259,20 +256,17 @@ public: 0, 0, localmesh->LocalNy, 1, localmesh->maxregionblocksize); } } - if (localmesh->firstY() or localmesh->lastY()) { - for (int ix = localmesh->xstart; ix <= localmesh->xend; ix++) { - if (not localmesh->periodicY(ix)) { - if (localmesh->firstY()) { - nocorner2D += - Region(ix, ix, 0, localmesh->ystart - 1, 0, 0, - localmesh->LocalNy, 1, localmesh->maxregionblocksize); - } - if (localmesh->lastY()) { - nocorner2D += - Region(ix, ix, localmesh->LocalNy - localmesh->ystart, - localmesh->LocalNy - 1, 0, 0, localmesh->LocalNy, 1, - localmesh->maxregionblocksize); - } + for (int ix = localmesh->xstart; ix <= localmesh->xend; ix++) { + if (not localmesh->periodicY(ix)) { + if (localmesh->firstY(ix)) { + nocorner2D += + Region(ix, ix, 0, localmesh->ystart - 1, 0, 0, + localmesh->LocalNy, 1, localmesh->maxregionblocksize); + } + if (localmesh->lastY(ix)) { + nocorner2D += Region( + ix, ix, localmesh->LocalNy - localmesh->ystart, localmesh->LocalNy - 1, + 0, 0, localmesh->LocalNy, 1, localmesh->maxregionblocksize); } } } @@ -575,7 +569,7 @@ public: }; #endif // PETSC -}; // namespace inversion -}; // namespace bout +}; // namespace inversion +}; // namespace bout #endif // HEADER GUARD From e804d0978e3d33c3bf9e003aadb6ee83efefbc77 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Mon, 6 Oct 2025 17:10:32 +0100 Subject: [PATCH 75/78] Remove `boututils` from requirements; bump `boutdata` --- requirements.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 52d3076d58..078eecac6d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,6 +4,5 @@ scipy>=1.14.1 netcdf4>=1.7.1 matplotlib>=3.7.0 Cython>=3.0.0 -boututils>=0.2.1 -boutdata>=0.2.1 +boutdata>=0.3.0 zoidberg>=0.2.2 From d5b92c70f2cf640b9e4ed80b8f0d0f79cf35bd09 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Mon, 6 Oct 2025 17:13:57 +0100 Subject: [PATCH 76/78] Suppress warning from `nodiscard` function --- tests/unit/sys/test_options.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/sys/test_options.cxx b/tests/unit/sys/test_options.cxx index 448b49fc19..a9a3bf4af4 100644 --- a/tests/unit/sys/test_options.cxx +++ b/tests/unit/sys/test_options.cxx @@ -1099,7 +1099,7 @@ value6 = 12 } TEST_F(OptionsTest, InvalidFormat) { - EXPECT_THROW(fmt::format("{:nope}", Options{}), fmt::format_error); + EXPECT_THROW([[maybe_unused]] auto none = fmt::format("{:nope}", Options{}), fmt::format_error); } TEST_F(OptionsTest, FormatValue) { From 87269806690664888e4a4a3c2469ebac59a4123b Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Mon, 6 Oct 2025 17:42:20 +0100 Subject: [PATCH 77/78] Add shim for ARKodeGetNumRhsEvals --- src/solver/impls/arkode/arkode.cxx | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/solver/impls/arkode/arkode.cxx b/src/solver/impls/arkode/arkode.cxx index 6f20ce11a6..0151f90167 100644 --- a/src/solver/impls/arkode/arkode.cxx +++ b/src/solver/impls/arkode/arkode.cxx @@ -72,6 +72,18 @@ int arkode_pre(BoutReal t, N_Vector yy, N_Vector yp, N_Vector rvec, N_Vector zve int arkode_jac(N_Vector v, N_Vector Jv, BoutReal t, N_Vector y, N_Vector fy, void* user_data, N_Vector tmp); + +#if SUNDIALS_VERSION_LESS_THAN(7, 2, 0) +// Shim for backwards compatibility +int ARKodeGetNumRhsEvals(void* arkode_mem, int partition_index, long int* num_rhs_evals) { + long int temp = 0; + if (partition_index == 0) { + return ARKStepGetNumRhsEvals(arkode_mem, num_rhs_evals, &temp); + } else { + return ARKStepGetNumRhsEvals(arkode_mem, &temp, num_rhs_evals); + } +} +#endif } // namespace // NOLINTEND(readability-identifier-length) @@ -417,8 +429,7 @@ int ArkodeSolver::init() { if (hasPreconditioner()) { output.write("\tUsing user-supplied preconditioner\n"); - if (ARKodeSetPreconditioner(arkode_mem, nullptr, arkode_pre) - != ARKLS_SUCCESS) { + if (ARKodeSetPreconditioner(arkode_mem, nullptr, arkode_pre) != ARKLS_SUCCESS) { throw BoutException("ARKodeSetPreconditioner failed\n"); } } else { @@ -516,12 +527,13 @@ int ArkodeSolver::run() { } // Get additional diagnostics - long int temp_long_int, temp_long_int2; + long int temp_long_int = 0; ARKodeGetNumSteps(arkode_mem, &temp_long_int); nsteps = int(temp_long_int); - ARKStepGetNumRhsEvals(arkode_mem, &temp_long_int, &temp_long_int2); + ARKodeGetNumRhsEvals(arkode_mem, 0, &temp_long_int); nfe_evals = int(temp_long_int); - nfi_evals = int(temp_long_int2); + ARKodeGetNumRhsEvals(arkode_mem, 1, &temp_long_int); + nfi_evals = int(temp_long_int); if (treatment == Treatment::ImEx or treatment == Treatment::Implicit) { ARKodeGetNumNonlinSolvIters(arkode_mem, &temp_long_int); nniters = int(temp_long_int); From 466fa980d8fb7f80b14252adec8769ab4e98d55a Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Fri, 10 Oct 2025 14:20:40 +0100 Subject: [PATCH 78/78] Bump DOI --- CITATION.cff | 4 ++-- README.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 496f8a3154..318fcd1406 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -214,10 +214,10 @@ authors: - family-names: Tsagkaridis given-names: Malamas version: 5.2.0 -date-released: 2023-04-10 +date-released: 2025-10-10 repository-code: https://github.com/boutproject/BOUT-dev url: http://boutproject.github.io/ -doi: 10.5281/zenodo.13753882 +doi: 10.5281/zenodo.17313945 license: 'LGPL-3.0-or-later' references: - type: article diff --git a/README.md b/README.md index c2e035e924..c9e76a1ff4 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![Build Status](https://github.com/boutproject/BOUT-dev/actions/workflows/tests.yml/badge.svg?branch=next)](https://github.com/boutproject/BOUT-dev/actions) [![License](https://img.shields.io/badge/license-LGPL-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0.en.html) [![py3comp](https://img.shields.io/badge/py3-compatible-brightgreen.svg)](https://img.shields.io/badge/py3-compatible-brightgreen.svg) -[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.13753882.svg)](https://doi.org/10.5281/zenodo.8369888) +[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.17313945.svg)](https://doi.org/10.5281/zenodo.17313945) ``` .______ ______ __ __ .___________.