From patchwork Thu Jul 6 13:05:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ludovic_Court=C3=A8s?= X-Patchwork-Id: 51604 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 1615627BBE9; Thu, 6 Jul 2023 14:06:22 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,SPF_HELO_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id C3C2027BBE2 for ; Thu, 6 Jul 2023 14:06:17 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qHOgS-0005B1-K8; Thu, 06 Jul 2023 09:06:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qHOgP-0005Ak-Lf for guix-patches@gnu.org; Thu, 06 Jul 2023 09:06:05 -0400 Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qHOgP-0002jL-DI for guix-patches@gnu.org; Thu, 06 Jul 2023 09:06:05 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1qHOgM-0007k7-3g; Thu, 06 Jul 2023 09:06:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#64107] [PATCH v3] gnu: arpack-ng: Update to 3.9.0. References: <30555c3ed595e2d89849fb2ea60710ef3b0e2b4a.1686922052.git.ludo@gnu.org> In-Reply-To: <30555c3ed595e2d89849fb2ea60710ef3b0e2b4a.1686922052.git.ludo@gnu.org> Resent-From: Ludovic =?utf-8?q?Court=C3=A8s?= Original-Sender: "Debbugs-submit" Resent-CC: andreas@enge.fr, efraim@flashner.co.il, bavier@posteo.net, guix-patches@gnu.org Resent-Date: Thu, 06 Jul 2023 13:06:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 64107 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 64107@debbugs.gnu.org Cc: Ludovic =?utf-8?q?Court=C3=A8s?= , Andreas Enge , Efraim Flashner , Eric Bavier X-Debbugs-Original-Xcc: Andreas Enge , Efraim Flashner , Eric Bavier Received: via spool by 64107-submit@debbugs.gnu.org id=B64107.168864873929725 (code B ref 64107); Thu, 06 Jul 2023 13:06:02 +0000 Received: (at 64107) by debbugs.gnu.org; 6 Jul 2023 13:05:39 +0000 Received: from localhost ([127.0.0.1]:40374 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qHOfy-0007jM-EQ for submit@debbugs.gnu.org; Thu, 06 Jul 2023 09:05:39 -0400 Received: from eggs.gnu.org ([209.51.188.92]:57374) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qHOfv-0007j8-3Q for 64107@debbugs.gnu.org; Thu, 06 Jul 2023 09:05:37 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qHOfo-0002Tr-CR; Thu, 06 Jul 2023 09:05:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:Date:Subject:To:From:in-reply-to: references; bh=psAcpPoMLXZTdBl+fdINkNT3xC6COfNPWhnwRJbJ4+s=; b=r1LvUNVbb52bhL vpI9D5qZBWEo0KiPatF9+F5pLOiPp4WV/WWX/Pf2vrexMDny0haFqhbkbcZjBiPCVjoATV1BTbbBn fDxoMMJgC7JNZLx4EGFCkG22UBnryc9MAFLsCjtB3ldkros9HqjUTr5pfS/qM4KmoHrgixl7j4r2q u0TArT3q30yi5sNERHnTRtUEiCUFu3A9qC7FqA/cuqqHiB1DynfSxIhwWnHVzDjiywf0rkJJB5Qwc 6+5aCHNwJLyNTKRck6ALcZQqTCsVFT82RKN+CYYbx0uqtT6l2y0lDUj6fi+2h6xbXwb0j7RzvlJeT v/y0c672LJX+vDkmczcw==; Received: from [193.50.110.205] (helo=gnu.org) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qHOfk-0001nS-Pr; Thu, 06 Jul 2023 09:05:27 -0400 From: Ludovic =?utf-8?q?Court=C3=A8s?= Date: Thu, 6 Jul 2023 15:05:09 +0200 Message-Id: <3b29429467473163c018d008862873e732fccfd4.1688648664.git.ludo@gnu.org> X-Mailer: git-send-email 2.40.1 MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches From: Ludovic Courtès * gnu/packages/maths.scm (arpack-ng): Update to 3.9.0. [source]: Add 'patches'. [build-system]: Switch to CMAKE-BUILD-SYSTEM. [native-inputs]: Remove AUTOCONF, AUTOMAKE, and LIBTOOL. (arpack-ng-openmpi)[inputs]: Use 'modify-inputs'. [arguments]: Use gexps. * gnu/packages/patches/arpack-ng-propagate-rng-state.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. --- gnu/local.mk | 1 + gnu/packages/maths.scm | 25 +- .../arpack-ng-propagate-rng-state.patch | 523 ++++++++++++++++++ 3 files changed, 537 insertions(+), 12 deletions(-) create mode 100644 gnu/packages/patches/arpack-ng-propagate-rng-state.patch base-commit: 2426e51688d479042ea115a634c6be2d8b9f3b99 diff --git a/gnu/local.mk b/gnu/local.mk index 6470f1abd4..e7c89c83bb 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -905,6 +905,7 @@ dist_patch_DATA = \ %D%/packages/patches/aoflagger-use-system-provided-pybind11.patch \ %D%/packages/patches/apr-skip-getservbyname-test.patch \ %D%/packages/patches/ark-skip-xar-test.patch \ + %D%/packages/patches/arpack-ng-propagate-rng-state.patch \ %D%/packages/patches/aspell-CVE-2019-25051.patch \ %D%/packages/patches/aspell-default-dict-dir.patch \ %D%/packages/patches/ath9k-htc-firmware-binutils.patch \ diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm index 653e76027a..05119d2f5f 100644 --- a/gnu/packages/maths.scm +++ b/gnu/packages/maths.scm @@ -973,7 +973,7 @@ (define-public vinci (define-public arpack-ng (package (name "arpack-ng") - (version "3.8.0") + (version "3.9.0") (home-page "https://github.com/opencollab/arpack-ng") (source (origin (method git-fetch) @@ -981,10 +981,11 @@ (define-public arpack-ng (file-name (git-file-name name version)) (sha256 (base32 - "0l7as5z6xvbxly8alam9s4kws70952qq35a6vkljzayi4b9gbklx")))) - (build-system gnu-build-system) + "09smxilyn8v9xs3kpx3nlj2s7ql3v8z40mpc09kccbb6smyd35iv")) + (patches (search-patches "arpack-ng-propagate-rng-state.patch")))) + (build-system cmake-build-system) (native-inputs - (list autoconf automake libtool pkg-config)) + (list pkg-config)) (inputs (list eigen lapack gfortran)) (synopsis "Fortran subroutines for solving eigenvalue problems") @@ -998,16 +999,16 @@ (define-public arpack-ng-openmpi (package (inherit arpack-ng) (name "arpack-ng-openmpi") (inputs - `(("mpi" ,openmpi) - ,@(package-inputs arpack-ng))) + (modify-inputs (package-inputs arpack-ng) + (prepend openmpi))) (arguments (substitute-keyword-arguments (package-arguments arpack-ng) - ((#:configure-flags _ '()) - ''("--enable-mpi")) - ((#:phases phases '%standard-phases) - `(modify-phases ,phases - (add-before 'check 'mpi-setup - ,%openmpi-setup))))) + ((#:configure-flags _ #~()) + #~'("-DMPI=ON")) + ((#:phases phases #~%standard-phases) + #~(modify-phases #$phases + (add-before 'check 'mpi-setup + #$%openmpi-setup))))) (synopsis "Fortran subroutines for solving eigenvalue problems with MPI"))) (define-public lapack diff --git a/gnu/packages/patches/arpack-ng-propagate-rng-state.patch b/gnu/packages/patches/arpack-ng-propagate-rng-state.patch new file mode 100644 index 0000000000..4466bb8e50 --- /dev/null +++ b/gnu/packages/patches/arpack-ng-propagate-rng-state.patch @@ -0,0 +1,523 @@ +Fix a bug that manifests while running the test suite of 'python-igraph': + + https://github.com/opencollab/arpack-ng/issues/401 + https://github.com/opencollab/arpack-ng/pull/414 + +From d885b7be4ecdc9c1496f2d6f256f6c0d34962459 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Szabolcs=20Horva=CC=81t?= +Date: Sun, 9 Apr 2023 16:36:35 +0200 +Subject: [PATCH] fix: ensure that LAPACK RNG state is propagated + + - fixes #401, #410, #411 + - restores 'inits' variable removed in ce2e69a849da1d10dad5d6d3ec4db6120b3ecf50, ensuring that the RNG state is propagated + - reverts e0d67054f573da351f12a226f7c7cc65a690ef3d to ensure that seed is different on each parallel thread + - updates seed initialization of parallel pdgetv0/psgetv0 so that they match that of pzgetv0/pcgetv0 +--- + PARPACK/SRC/MPI/pcgetv0.f | 48 +++++++++++++++++++++++---------------- + PARPACK/SRC/MPI/pdgetv0.f | 40 ++++++++++++++++++++++++++------ + PARPACK/SRC/MPI/psgetv0.f | 43 ++++++++++++++++++++++++++--------- + PARPACK/SRC/MPI/pzgetv0.f | 48 +++++++++++++++++++++++---------------- + SRC/cgetv0.f | 21 ++++++++++++----- + SRC/dgetv0.f | 21 ++++++++++++----- + SRC/sgetv0.f | 21 ++++++++++++----- + SRC/zgetv0.f | 21 ++++++++++++----- + 8 files changed, 183 insertions(+), 80 deletions(-) + +diff --git a/PARPACK/SRC/MPI/pcgetv0.f b/PARPACK/SRC/MPI/pcgetv0.f +index 59e3d1658..24fe8a0f1 100644 +--- a/PARPACK/SRC/MPI/pcgetv0.f ++++ b/PARPACK/SRC/MPI/pcgetv0.f +@@ -176,13 +176,13 @@ subroutine pcgetv0 + c | Local Scalars & Arrays | + c %------------------------% + c +- logical first, orth ++ logical first, inits, orth + integer idist, iseed(4), iter, msglvl, jj, myid, igen + Real + & rnorm0 + Complex + & cnorm, cnorm2 +- save first, iseed, iter, msglvl, orth, rnorm0 ++ save first, iseed, inits, iter, msglvl, orth, rnorm0 + c + Complex + & cnorm_buf, buf2(1) +@@ -203,6 +203,12 @@ subroutine pcgetv0 + & ccdotc + external ccdotc, pscnorm2, slapy2 + c ++c %-----------------% ++c | Data Statements | ++c %-----------------% ++c ++ data inits /.true./ ++c + c %-----------------------% + c | Executable Statements | + c %-----------------------% +@@ -213,26 +219,30 @@ subroutine pcgetv0 + c | random number generator | + c %-----------------------------------% + c ++ if (inits) then + c +-c %-----------------------------------% +-c | Generate a seed on each processor | +-c | using process id (myid). | +-c | Note: the seed must be between 1 | +-c | and 4095. iseed(4) must be odd. | +-c %-----------------------------------% ++c %-----------------------------------% ++c | Generate a seed on each processor | ++c | using process id (myid). | ++c | Note: the seed must be between 1 | ++c | and 4095. iseed(4) must be odd. | ++c %-----------------------------------% + c +- call MPI_COMM_RANK(comm, myid, ierr) +- igen = 1000 + 2*myid + 1 +- if (igen .gt. 4095) then +- write(0,*) 'Error in p_getv0: seed exceeds 4095!' +- end if ++ call MPI_COMM_RANK(comm, myid, ierr) ++ igen = 1000 + 2*myid + 1 ++ if (igen .gt. 4095) then ++ write(0,*) 'Error in p_getv0: seed exceeds 4095!' ++ end if ++c ++ iseed(1) = igen/1000 ++ igen = mod(igen,1000) ++ iseed(2) = igen/100 ++ igen = mod(igen,100) ++ iseed(3) = igen/10 ++ iseed(4) = mod(igen,10) + c +- iseed(1) = igen/1000 +- igen = mod(igen,1000) +- iseed(2) = igen/100 +- igen = mod(igen,100) +- iseed(3) = igen/10 +- iseed(4) = 7 ++ inits = .false. ++ end if + c + if (ido .eq. 0) then + c +diff --git a/PARPACK/SRC/MPI/pdgetv0.f b/PARPACK/SRC/MPI/pdgetv0.f +index 0f348b820..5a1956997 100644 +--- a/PARPACK/SRC/MPI/pdgetv0.f ++++ b/PARPACK/SRC/MPI/pdgetv0.f +@@ -177,11 +177,11 @@ subroutine pdgetv0 + c | Local Scalars & Arrays | + c %------------------------% + c +- logical first, orth +- integer idist, iseed(4), iter, msglvl, jj ++ logical first, inits, orth ++ integer idist, iseed(4), iter, msglvl, jj, myid, igen + Double precision + & rnorm0, buf2(1) +- save first, iseed, iter, msglvl, orth, rnorm0 ++ save first, iseed, inits, iter, msglvl, orth, rnorm0 + c + Double precision + & rnorm_buf +@@ -206,6 +206,12 @@ subroutine pdgetv0 + c + intrinsic abs, sqrt + c ++c %-----------------% ++c | Data Statements | ++c %-----------------% ++c ++ data inits /.true./ ++c + c %-----------------------% + c | Executable Statements | + c %-----------------------% +@@ -216,10 +222,30 @@ subroutine pdgetv0 + c | random number generator | + c %-----------------------------------% + c +- iseed(1) = 1 +- iseed(2) = 3 +- iseed(3) = 5 +- iseed(4) = 7 ++ if (inits) then ++c ++c %-----------------------------------% ++c | Generate a seed on each processor | ++c | using process id (myid). | ++c | Note: the seed must be between 1 | ++c | and 4095. iseed(4) must be odd. | ++c %-----------------------------------% ++c ++ call MPI_COMM_RANK(comm, myid, ierr) ++ igen = 1000 + 2*myid + 1 ++ if (igen .gt. 4095) then ++ write(0,*) 'Error in p_getv0: seed exceeds 4095!' ++ end if ++c ++ iseed(1) = igen/1000 ++ igen = mod(igen,1000) ++ iseed(2) = igen/100 ++ igen = mod(igen,100) ++ iseed(3) = igen/10 ++ iseed(4) = mod(igen,10) ++c ++ inits = .false. ++ end if + c + if (ido .eq. 0) then + c +diff --git a/PARPACK/SRC/MPI/psgetv0.f b/PARPACK/SRC/MPI/psgetv0.f +index d79a513b2..078e4fa8c 100644 +--- a/PARPACK/SRC/MPI/psgetv0.f ++++ b/PARPACK/SRC/MPI/psgetv0.f +@@ -177,11 +177,11 @@ subroutine psgetv0 + c | Local Scalars & Arrays | + c %------------------------% + c +- logical first, orth +- integer idist, iseed(4), iter, msglvl, jj ++ logical first, inits, orth ++ integer idist, iseed(4), iter, msglvl, jj, myid, igen + Real + & rnorm0 +- save first, iseed, iter, msglvl, orth, rnorm0 ++ save first, iseed, inits, iter, msglvl, orth, rnorm0 + c + Real + & rnorm_buf +@@ -206,20 +206,41 @@ subroutine psgetv0 + c + intrinsic abs, sqrt + c ++c %-----------------% ++c | Data Statements | ++c %-----------------% ++c ++ data inits /.true./ ++c + c %-----------------------% + c | Executable Statements | + c %-----------------------% + c + c +-c %-----------------------------------% +-c | Initialize the seed of the LAPACK | +-c | random number generator | +-c %-----------------------------------% ++ if (inits) then + c +- iseed(1) = 1 +- iseed(2) = 3 +- iseed(3) = 5 +- iseed(4) = 7 ++c %-----------------------------------% ++c | Generate a seed on each processor | ++c | using process id (myid). | ++c | Note: the seed must be between 1 | ++c | and 4095. iseed(4) must be odd. | ++c %-----------------------------------% ++c ++ call MPI_COMM_RANK(comm, myid, ierr) ++ igen = 1000 + 2*myid + 1 ++ if (igen .gt. 4095) then ++ write(0,*) 'Error in p_getv0: seed exceeds 4095!' ++ end if ++c ++ iseed(1) = igen/1000 ++ igen = mod(igen,1000) ++ iseed(2) = igen/100 ++ igen = mod(igen,100) ++ iseed(3) = igen/10 ++ iseed(4) = mod(igen,10) ++c ++ inits = .false. ++ end if + c + if (ido .eq. 0) then + c +diff --git a/PARPACK/SRC/MPI/pzgetv0.f b/PARPACK/SRC/MPI/pzgetv0.f +index 731fb319f..94fb705f3 100644 +--- a/PARPACK/SRC/MPI/pzgetv0.f ++++ b/PARPACK/SRC/MPI/pzgetv0.f +@@ -176,13 +176,13 @@ subroutine pzgetv0 + c | Local Scalars & Arrays | + c %------------------------% + c +- logical first, orth ++ logical first, inits, orth + integer idist, iseed(4), iter, msglvl, jj, myid, igen + Double precision + & rnorm0 + Complex*16 + & cnorm, cnorm2 +- save first, iseed, iter, msglvl, orth, rnorm0 ++ save first, iseed, inits, iter, msglvl, orth, rnorm0 + c + Complex*16 + & cnorm_buf, buf2(1) +@@ -203,6 +203,12 @@ subroutine pzgetv0 + & zzdotc + external zzdotc , pdznorm2 , dlapy2 + c ++c %-----------------% ++c | Data Statements | ++c %-----------------% ++c ++ data inits /.true./ ++c + c %-----------------------% + c | Executable Statements | + c %-----------------------% +@@ -213,26 +219,30 @@ subroutine pzgetv0 + c | random number generator | + c %-----------------------------------% + c ++ if (inits) then + c +-c %-----------------------------------% +-c | Generate a seed on each processor | +-c | using process id (myid). | +-c | Note: the seed must be between 1 | +-c | and 4095. iseed(4) must be odd. | +-c %-----------------------------------% ++c %-----------------------------------% ++c | Generate a seed on each processor | ++c | using process id (myid). | ++c | Note: the seed must be between 1 | ++c | and 4095. iseed(4) must be odd. | ++c %-----------------------------------% + c +- call MPI_COMM_RANK(comm, myid, ierr) +- igen = 1000 + 2*myid + 1 +- if (igen .gt. 4095) then +- write(0,*) 'Error in p_getv0: seed exceeds 4095!' +- end if ++ call MPI_COMM_RANK(comm, myid, ierr) ++ igen = 1000 + 2*myid + 1 ++ if (igen .gt. 4095) then ++ write(0,*) 'Error in p_getv0: seed exceeds 4095!' ++ end if ++c ++ iseed(1) = igen/1000 ++ igen = mod(igen,1000) ++ iseed(2) = igen/100 ++ igen = mod(igen,100) ++ iseed(3) = igen/10 ++ iseed(4) = mod(igen,10) + c +- iseed(1) = igen/1000 +- igen = mod(igen,1000) +- iseed(2) = igen/100 +- igen = mod(igen,100) +- iseed(3) = igen/10 +- iseed(4) = 7 ++ inits = .false. ++ end if + c + if (ido .eq. 0) then + c +diff --git a/SRC/cgetv0.f b/SRC/cgetv0.f +index b49e66708..c231eadcb 100644 +--- a/SRC/cgetv0.f ++++ b/SRC/cgetv0.f +@@ -156,13 +156,13 @@ subroutine cgetv0 + c | Local Scalars & Arrays | + c %------------------------% + c +- logical first, orth ++ logical first, inits, orth + integer idist, iseed(4), iter, msglvl, jj + Real + & rnorm0 + Complex + & cnorm +- save first, iseed, iter, msglvl, orth, rnorm0 ++ save first, iseed, inits, iter, msglvl, orth, rnorm0 + c + c %----------------------% + c | External Subroutines | +@@ -180,6 +180,12 @@ subroutine cgetv0 + & ccdotc + external ccdotc, scnrm2, slapy2 + c ++c %-----------------% ++c | Data Statements | ++c %-----------------% ++c ++ data inits /.true./ ++c + c %-----------------------% + c | Executable Statements | + c %-----------------------% +@@ -190,10 +196,13 @@ subroutine cgetv0 + c | random number generator | + c %-----------------------------------% + c +- iseed(1) = 1 +- iseed(2) = 3 +- iseed(3) = 5 +- iseed(4) = 7 ++ if (inits) then ++ iseed(1) = 1 ++ iseed(2) = 3 ++ iseed(3) = 5 ++ iseed(4) = 7 ++ inits = .false. ++ end if + c + if (ido .eq. 0) then + c +diff --git a/SRC/dgetv0.f b/SRC/dgetv0.f +index 8be4fa26d..1d6dc01bd 100644 +--- a/SRC/dgetv0.f ++++ b/SRC/dgetv0.f +@@ -157,11 +157,11 @@ subroutine dgetv0 + c | Local Scalars & Arrays | + c %------------------------% + c +- logical first, orth ++ logical first, inits, orth + integer idist, iseed(4), iter, msglvl, jj + Double precision + & rnorm0 +- save first, iseed, iter, msglvl, orth, rnorm0 ++ save first, iseed, inits, iter, msglvl, orth, rnorm0 + c + c %----------------------% + c | External Subroutines | +@@ -183,6 +183,12 @@ subroutine dgetv0 + c + intrinsic abs, sqrt + c ++c %-----------------% ++c | Data Statements | ++c %-----------------% ++c ++ data inits /.true./ ++c + c %-----------------------% + c | Executable Statements | + c %-----------------------% +@@ -193,10 +199,13 @@ subroutine dgetv0 + c | random number generator | + c %-----------------------------------% + c +- iseed(1) = 1 +- iseed(2) = 3 +- iseed(3) = 5 +- iseed(4) = 7 ++ if (inits) then ++ iseed(1) = 1 ++ iseed(2) = 3 ++ iseed(3) = 5 ++ iseed(4) = 7 ++ inits = .false. ++ end if + c + if (ido .eq. 0) then + c +diff --git a/SRC/sgetv0.f b/SRC/sgetv0.f +index 26130a014..d861b2d6d 100644 +--- a/SRC/sgetv0.f ++++ b/SRC/sgetv0.f +@@ -157,11 +157,11 @@ subroutine sgetv0 + c | Local Scalars & Arrays | + c %------------------------% + c +- logical first, orth ++ logical first, inits, orth + integer idist, iseed(4), iter, msglvl, jj + Real + & rnorm0 +- save first, iseed, iter, msglvl, orth, rnorm0 ++ save first, iseed, inits, iter, msglvl, orth, rnorm0 + c + c %----------------------% + c | External Subroutines | +@@ -183,6 +183,12 @@ subroutine sgetv0 + c + intrinsic abs, sqrt + c ++c %-----------------% ++c | Data Statements | ++c %-----------------% ++c ++ data inits /.true./ ++c + c %-----------------------% + c | Executable Statements | + c %-----------------------% +@@ -193,10 +199,13 @@ subroutine sgetv0 + c | random number generator | + c %-----------------------------------% + c +- iseed(1) = 1 +- iseed(2) = 3 +- iseed(3) = 5 +- iseed(4) = 7 ++ if (inits) then ++ iseed(1) = 1 ++ iseed(2) = 3 ++ iseed(3) = 5 ++ iseed(4) = 7 ++ inits = .false. ++ end if + c + if (ido .eq. 0) then + c +diff --git a/SRC/zgetv0.f b/SRC/zgetv0.f +index cc13c3cfb..1fbd50851 100644 +--- a/SRC/zgetv0.f ++++ b/SRC/zgetv0.f +@@ -156,13 +156,13 @@ subroutine zgetv0 + c | Local Scalars & Arrays | + c %------------------------% + c +- logical first, orth ++ logical first, inits, orth + integer idist, iseed(4), iter, msglvl, jj + Double precision + & rnorm0 + Complex*16 + & cnorm +- save first, iseed, iter, msglvl, orth, rnorm0 ++ save first, iseed, inits, iter, msglvl, orth, rnorm0 + c + c %----------------------% + c | External Subroutines | +@@ -180,6 +180,12 @@ subroutine zgetv0 + & zzdotc + external zzdotc, dznrm2, dlapy2 + c ++c %-----------------% ++c | Data Statements | ++c %-----------------% ++c ++ data inits /.true./ ++c + c %-----------------------% + c | Executable Statements | + c %-----------------------% +@@ -190,10 +196,13 @@ subroutine zgetv0 + c | random number generator | + c %-----------------------------------% + c +- iseed(1) = 1 +- iseed(2) = 3 +- iseed(3) = 5 +- iseed(4) = 7 ++ if (inits) then ++ iseed(1) = 1 ++ iseed(2) = 3 ++ iseed(3) = 5 ++ iseed(4) = 7 ++ inits = .false. ++ end if + c + if (ido .eq. 0) then + c