From 1a5ee8c46a4a332fce997522560d7b9f6dbde547 Mon Sep 17 00:00:00 2001
From: Salvatore Filippone <salvatore.filippone@cranfield.ac.uk>
Date: Thu, 13 Sep 2018 14:21:52 +0100
Subject: [PATCH] Fix bounds computation in set_vect. Bug report by Alexandre
Silva Lopes
---
base/modules/serial/psb_c_base_vect_mod.f90 | 5 +++--
base/modules/serial/psb_d_base_vect_mod.f90 | 5 +++--
base/modules/serial/psb_i_base_vect_mod.f90 | 5 +++--
base/modules/serial/psb_s_base_vect_mod.f90 | 5 +++--
base/modules/serial/psb_z_base_vect_mod.f90 | 5 +++--
5 files changed, 15 insertions(+), 10 deletions(-)
diff --git a/base/modules/serial/psb_c_base_vect_mod.f90 b/base/modules/serial/psb_c_base_vect_mod.f90
index 6fa0bc70..54635a6d 100644
--- a/base/modules/serial/psb_c_base_vect_mod.f90
+++ b/base/modules/serial/psb_c_base_vect_mod.f90
@@ -749,9 +749,10 @@ subroutine c_base_set_vect(x,val,first,last)
integer(psb_ipk_) :: info, first_, last_, nr
- first_=1
- last_=min(psb_size(x%v),size(val))
+
+ first_ = 1
if (present(first)) first_ = max(1,first)
+ last_ = min(psb_size(x%v),first_+size(val)-1)
if (present(last)) last_ = min(last,last_)
if (allocated(x%v)) then
diff --git a/base/modules/serial/psb_d_base_vect_mod.f90 b/base/modules/serial/psb_d_base_vect_mod.f90
index 36e95142..3ec2356a 100644
--- a/base/modules/serial/psb_d_base_vect_mod.f90
+++ b/base/modules/serial/psb_d_base_vect_mod.f90
@@ -749,9 +749,10 @@ subroutine d_base_set_vect(x,val,first,last)
integer(psb_ipk_) :: info, first_, last_, nr
- first_=1
- last_=min(psb_size(x%v),size(val))
+
+ first_ = 1
if (present(first)) first_ = max(1,first)
+ last_ = min(psb_size(x%v),first_+size(val)-1)
if (present(last)) last_ = min(last,last_)
if (allocated(x%v)) then
diff --git a/base/modules/serial/psb_i_base_vect_mod.f90 b/base/modules/serial/psb_i_base_vect_mod.f90
index 4cc592ac..cdbe91e5 100644
--- a/base/modules/serial/psb_i_base_vect_mod.f90
+++ b/base/modules/serial/psb_i_base_vect_mod.f90
@@ -718,9 +718,10 @@ subroutine i_base_set_vect(x,val,first,last)
integer(psb_ipk_) :: info, first_, last_, nr
- first_=1
- last_=min(psb_size(x%v),size(val))
+
+ first_ = 1
if (present(first)) first_ = max(1,first)
+ last_ = min(psb_size(x%v),first_+size(val)-1)
if (present(last)) last_ = min(last,last_)
if (allocated(x%v)) then
diff --git a/base/modules/serial/psb_s_base_vect_mod.f90 b/base/modules/serial/psb_s_base_vect_mod.f90
index 9ee77ea6..97c7c11e 100644
--- a/base/modules/serial/psb_s_base_vect_mod.f90
+++ b/base/modules/serial/psb_s_base_vect_mod.f90
@@ -749,9 +749,10 @@ subroutine s_base_set_vect(x,val,first,last)
integer(psb_ipk_) :: info, first_, last_, nr
- first_=1
- last_=min(psb_size(x%v),size(val))
+
+ first_ = 1
if (present(first)) first_ = max(1,first)
+ last_ = min(psb_size(x%v),first_+size(val)-1)
if (present(last)) last_ = min(last,last_)
if (allocated(x%v)) then
diff --git a/base/modules/serial/psb_z_base_vect_mod.f90 b/base/modules/serial/psb_z_base_vect_mod.f90
index 0960624a..8c1b6baf 100644
--- a/base/modules/serial/psb_z_base_vect_mod.f90
+++ b/base/modules/serial/psb_z_base_vect_mod.f90
@@ -749,9 +749,10 @@ subroutine z_base_set_vect(x,val,first,last)
integer(psb_ipk_) :: info, first_, last_, nr
- first_=1
- last_=min(psb_size(x%v),size(val))
+
+ first_ = 1
if (present(first)) first_ = max(1,first)
+ last_ = min(psb_size(x%v),first_+size(val)-1)
if (present(last)) last_ = min(last,last_)
if (allocated(x%v)) then