diff --git a/hsl_subset/hsl_ma48/hsl_ma48r.f90 b/hsl_subset/hsl_ma48/hsl_ma48r.f90 index aa4d8a3..c526e44 100644 --- a/hsl_subset/hsl_ma48/hsl_ma48r.f90 +++ b/hsl_subset/hsl_ma48/hsl_ma48r.f90 @@ -149,14 +149,14 @@ subroutine ma48_initialize_real(factors,control) end subroutine ma48_initialize_real subroutine ma48_analyse_real(matrix,factors,control,ainfo,finfo, & - perm,lastcol) + perm,endcol) type(zd11_type), Intent(in) :: matrix type(ma48_factors), intent(inout) :: factors type(ma48_control), intent(in) :: control type(ma48_ainfo) :: ainfo type(ma48_finfo), optional :: finfo integer(ip_), intent(in), optional :: perm(matrix%m+matrix%n) ! Init perm - integer(ip_), intent(in), optional :: lastcol(matrix%n) ! last cols + integer(ip_), intent(in), optional :: endcol(matrix%n) ! last cols IF ( control%lp >= 0 ) WRITE( control%lp, & "( ' We regret that the solution options that you have ', /, & @@ -233,7 +233,7 @@ subroutine ma48_special_rows_and_cols_real(factors,rank,rows,cols, & end subroutine ma48_special_rows_and_cols_real subroutine ma48_get_perm_real(factors,perm) - type(ma48_factors), intent(in), optional :: factors + type(ma48_factors), intent(in) :: factors integer(ip_), intent(out) :: perm(:) end subroutine ma48_get_perm_real diff --git a/hsl_subset/hsl_ma77/hsl_ma77r.f90 b/hsl_subset/hsl_ma77/hsl_ma77r.f90 index 3c9f034..6146291 100644 --- a/hsl_subset/hsl_ma77/hsl_ma77r.f90 +++ b/hsl_subset/hsl_ma77/hsl_ma77r.f90 @@ -301,7 +301,7 @@ subroutine MA77_factor_solve_real(pos_def,keep,control,info,nrhs, & call MA77_unavailable( info, control, 'ma77_factor_solve' ) end subroutine MA77_factor_solve_real - subroutine MA77_resid_real(nrhs,lx,x,lresid,resid,keep,control,info,anorm) + subroutine MA77_resid_real(nrhs,lx,x,lresid,resid,keep,control,info,anorm_bnd) integer(ip_) :: nrhs integer(ip_) :: lx integer(ip_) :: lresid @@ -310,7 +310,7 @@ subroutine MA77_resid_real(nrhs,lx,x,lresid,resid,keep,control,info,anorm) type (MA77_keep), intent (inout) :: keep type (MA77_control), intent (in) :: control type (MA77_info), intent (inout) :: info - real(rp_),optional :: anorm + real(rp_),optional :: anorm_bnd call MA77_unavailable( info, control, 'ma77_resid' ) end subroutine MA77_resid_real diff --git a/hsl_subset/hsl_ma86/hsl_ma86r.f90 b/hsl_subset/hsl_ma86/hsl_ma86r.f90 index f708aa3..1f58530 100644 --- a/hsl_subset/hsl_ma86/hsl_ma86r.f90 +++ b/hsl_subset/hsl_ma86/hsl_ma86r.f90 @@ -358,7 +358,7 @@ subroutine MA86_analyse_real(n, ptr, row, order, keep, control, info) ! order(i) must hold position of i in the pivot sequence. ! On exit, holds the pivot order to be used by MA86_factor. ! For details of keep, control, info : see derived type descriptions - type(MA86_keep) :: keep + type(MA86_keep), intent(out) :: keep type(MA86_control), intent(in) :: control type(MA86_info), intent(inout) :: info @@ -379,7 +379,7 @@ subroutine MA86_analyse_real(n, ptr, row, order, keep, control, info) info%stat = 0 end subroutine MA86_analyse_real -subroutine MA86_factor_real(n, ptr, row, val, order, keep, control, info) +subroutine MA86_factor_real(n, ptr, row, val, order, keep, control, info, scale) integer(ip_), intent(in) :: n ! order of A integer(ip_), intent(in) :: row(:) ! row indices of lower triangular part integer(ip_), intent(in) :: ptr(:) ! col pointers for lower triangular part @@ -388,7 +388,8 @@ subroutine MA86_factor_real(n, ptr, row, val, order, keep, control, info) ! since the analyse phase) type(MA86_keep), intent(inout) :: keep ! see description of derived type type(MA86_control), intent(in) :: control ! see description of derived type - type(MA86_info) :: info ! see description of derived type + type(MA86_info), intent(out) :: info ! see description of derived type + real(rp_), optional, intent(inout) :: scale(*) IF ( control%unit_error >= 0 ) WRITE( control%unit_error, & "( ' We regret that the solution options that you have ', /, & @@ -409,7 +410,7 @@ subroutine MA86_factor_real(n, ptr, row, val, order, keep, control, info) end subroutine MA86_factor_real subroutine MA86_factor_solve_one_real(n, ptr, row, val, order, keep, control,& - info, x) + info, x, scale) integer(ip_), intent(in) :: n ! order of A integer(ip_), intent(in) :: row(:) ! row indices of lower triangular part integer(ip_), intent(in) :: ptr(:) ! col pointers for lower triangular part @@ -418,7 +419,8 @@ subroutine MA86_factor_solve_one_real(n, ptr, row, val, order, keep, control,& ! since the analyse phase) type(MA86_keep), intent(inout) :: keep ! see description of derived type type(MA86_control), intent(in) :: control ! see description of derived type - type(MA86_info) :: info ! see description of derived type + type(MA86_info), intent(out) :: info ! see description of derived type + real(rp_), optional, intent(inout) :: scale(*) real(rp_), intent(inout) :: x(keep%n) ! On entry, x must ! be set so that if i has been used to index a variable, ! x(i) is the corresponding component of the right-hand side. @@ -443,7 +445,7 @@ subroutine MA86_factor_solve_one_real(n, ptr, row, val, order, keep, control,& end subroutine MA86_factor_solve_one_real subroutine MA86_factor_solve_mult_real(n, ptr, row, val, order, keep, & - control, info, nrhs, lx, x) + control, info, nrhs, lx, x, scale) integer(ip_), intent(in) :: n ! order of A integer(ip_), intent(in) :: row(:) ! row indices of lower triangular part integer(ip_), intent(in) :: ptr(:) ! col pointers for lower triangular part @@ -452,7 +454,8 @@ subroutine MA86_factor_solve_mult_real(n, ptr, row, val, order, keep, & ! since the analyse phase) type(MA86_keep), intent(inout) :: keep ! see description of derived type type(MA86_control), intent(in) :: control ! see description of derived type - type(MA86_info) :: info ! see description of derived type + type(MA86_info), intent(out) :: info ! see description of derived type + real(rp_), optional, intent(inout) :: scale(*) integer(ip_), intent(in) :: nrhs ! number of right-hand sides to solver for integer(ip_), intent(in) :: lx ! first dimension of x real(rp_), intent(inout) :: x(lx,nrhs) ! On entry, x must @@ -479,7 +482,7 @@ subroutine MA86_factor_solve_mult_real(n, ptr, row, val, order, keep, & info%stat = 0 end subroutine MA86_factor_solve_mult_real -subroutine MA86_solve_one_real(x,order,keep,control,info,job) +subroutine MA86_solve_one_real(x,order,keep,control,info,job, scale) type(MA86_keep), intent(inout) :: keep real(rp_), intent(inout) :: x(keep%n) ! On entry, x must ! be set so that if i has been used to index a variable, @@ -489,7 +492,8 @@ subroutine MA86_solve_one_real(x,order,keep,control,info,job) integer(ip_), intent(in) :: order(:) ! pivot order. must be unchanged ! For details of keep, control, info : see derived type description type(MA86_control), intent(in) :: control - type(MA86_info) :: info + type(MA86_info), intent(out) :: info + real(rp_), optional, intent(in) :: scale(*) integer(ip_), optional, intent(in) :: job ! used to indicate whether ! partial solution required ! job = 0 or absent: complete solve performed @@ -513,7 +517,7 @@ subroutine MA86_solve_one_real(x,order,keep,control,info,job) info%stat = 0 end subroutine MA86_solve_one_real -subroutine MA86_solve_mult_real(nrhs,lx,x,order,keep, control,info,job) +subroutine MA86_solve_mult_real(nrhs,lx,x,order,keep, control,info,job, scale) integer(ip_), intent(in) :: nrhs ! number of right-hand sides to solver for integer(ip_), intent(in) :: lx ! first dimension of x real(rp_), intent(inout) :: x(lx,nrhs) ! On entry, x must @@ -526,7 +530,8 @@ subroutine MA86_solve_mult_real(nrhs,lx,x,order,keep, control,info,job) ! For details of keep, control, info : see derived type description type(MA86_keep), intent(inout) :: keep type(MA86_control), intent(in) :: control - type(MA86_info) :: info + type(MA86_info), intent(out) :: info + real(rp_), optional, intent(in) :: scale(*) integer(ip_), optional, intent(in) :: job ! used to indicate whether ! partial solution required ! job = 0 or absent: complete solve performed diff --git a/hsl_subset/hsl_ma97/hsl_ma97r.f90 b/hsl_subset/hsl_ma97/hsl_ma97r.f90 index 955ac80..52540e1 100644 --- a/hsl_subset/hsl_ma97/hsl_ma97r.f90 +++ b/hsl_subset/hsl_ma97/hsl_ma97r.f90 @@ -238,13 +238,14 @@ subroutine analyse_real(check, n, ptr, row, akeep, & end subroutine analyse_real subroutine MA97_analyse_coord_real( n, ne, row, col, akeep, & - control, info, order) + control, info, order, val) integer(ip_), intent(in) :: n, ne integer(ip_), intent(in) :: row(:), col(:) type (MA97_akeep), intent (out) :: akeep type (MA97_control), intent(in) :: control type (MA97_info), intent(out) :: info integer(ip_), OPTIONAL, intent (inout) :: order(:) + real(rp_), optional, intent(in) :: val(:) IF ( control%unit_error >= 0 .AND. control%print_level > 0 ) & WRITE( control%unit_error, & @@ -264,9 +265,9 @@ subroutine MA97_factor_real(matrix_type,val,akeep,fkeep,control,info, & integer(ip_), intent(in) :: matrix_type real(rp_), intent(in) :: val(*) type (MA97_akeep), intent (in) :: akeep - type (MA97_fkeep), intent (out) :: fkeep + type (MA97_fkeep), intent(inout) :: fkeep type (MA97_control), intent (in) :: control - type (MA97_info), intent (inout) :: info + type (MA97_info), intent(out) :: info real(rp_), intent(inout), optional :: scale(:) integer(ip_), intent(in), optional :: ptr(akeep%n+1) integer(ip_), intent(in), optional :: row(*) @@ -284,16 +285,16 @@ subroutine MA97_factor_real(matrix_type,val,akeep,fkeep,control,info, & end subroutine MA97_factor_real - subroutine MA97_factor_solve_real(matrix_type,val,nrhs,x,lx,akeep,fkeep, & + subroutine MA97_factor_solve_real(matrix_type,val,nrhs,x,ldx,akeep,fkeep, & control,info,scale,ptr,row) integer(ip_), intent(in) :: matrix_type real(rp_), intent(in) :: val(*) - integer(ip_) :: lx, nrhs - real(rp_), intent(inout) :: x(lx,nrhs) + integer(ip_) :: ldx, nrhs + real(rp_), intent(inout) :: x(ldx,nrhs) type (MA97_akeep), intent (in) :: akeep - type (MA97_fkeep), intent (out) :: fkeep + type (MA97_fkeep), intent(inout) :: fkeep type (MA97_control), intent (in) :: control - type (MA97_info), intent (inout) :: info + type (MA97_info), intent(out) :: info real(rp_), intent(inout), optional :: scale(:) integer(ip_), intent(in), optional :: ptr(akeep%n+1) integer(ip_), intent(in), optional :: row(*) @@ -317,9 +318,9 @@ subroutine MA97_factor_solve_one_real(matrix_type,val,x1,akeep,fkeep, & real(rp_), intent(in) :: val(*) real(rp_), intent(inout) :: x1(:) type (MA97_akeep), intent (in) :: akeep - type (MA97_fkeep), intent(out) :: fkeep + type (MA97_fkeep), intent(inout) :: fkeep type (MA97_control), intent (in) :: control - type (MA97_info), intent (inout) :: info + type (MA97_info), intent(out) :: info real(rp_), intent(inout), optional :: scale(:) integer(ip_), intent(in), optional :: ptr(akeep%n+1) integer(ip_), intent(in), optional :: row(*) @@ -371,13 +372,12 @@ subroutine ma97_solve_mult_real(nrhs,x,ldx,akeep,fkeep,control,info,job) integer(ip_), optional, intent(in) :: job end subroutine ma97_solve_mult_real - subroutine MA97_solve_one_real(x,akeep,fkeep,control,info,scale,job) + subroutine MA97_solve_one_real(x,akeep,fkeep,control,info,job) real(rp_), intent (inout) :: x(:) type (MA97_akeep), intent (in) :: akeep type (MA97_fkeep), intent (in) :: fkeep type (MA97_control), intent (in) :: control - type (MA97_info), intent (inout) :: info - real(rp_), intent(in), optional :: scale(:) + type (MA97_info), intent(out) :: info integer(ip_), optional, intent (in) :: job IF ( control%unit_error >= 0 .AND. control%print_level > 0 ) & @@ -467,8 +467,8 @@ subroutine MA97_enquire_posdef_real(akeep,fkeep,control,info,d) real(rp_), dimension( : ), intent(out) :: d type (MA97_akeep), intent (in) :: akeep type (MA97_fkeep), intent(in) :: fkeep - type (MA97_control), intent (inout) :: control - type (MA97_info), intent (inout) :: info + type (MA97_control), intent(in) :: control + type (MA97_info), intent(out) :: info IF ( control%unit_error >= 0 .AND. control%print_level > 0 ) & WRITE( control%unit_error, & @@ -488,8 +488,8 @@ subroutine MA97_enquire_indef_real(akeep,fkeep,control,info,piv_order,d) real(rp_), optional, intent(out) :: d(:,:) type (MA97_akeep), intent (in) :: akeep type (MA97_fkeep), intent (in) :: fkeep - type (MA97_control), intent (inout) :: control - type (MA97_info), intent (inout) :: info + type (MA97_control), intent(in) :: control + type (MA97_info), intent(out) :: info IF ( control%unit_error >= 0 .AND. control%print_level > 0 ) & WRITE( control%unit_error, & @@ -507,9 +507,9 @@ end subroutine MA97_enquire_indef_real subroutine MA97_alter_real(d,akeep,fkeep,control,info) real(rp_), intent (in) :: d(:,:) type (MA97_akeep), intent (in) :: akeep - type (MA97_fkeep), intent (in) :: fkeep - type (MA97_control), intent (inout) :: control - type (MA97_info), intent (inout) :: info + type (MA97_fkeep), intent (inout) :: fkeep + type (MA97_control), intent(in) :: control + type (MA97_info), intent(out) :: info IF ( control%unit_error >= 0 .AND. control%print_level > 0 ) & WRITE( control%unit_error, & diff --git a/hsl_subset/hsl_mi28/hsl_mi28r.f90 b/hsl_subset/hsl_mi28/hsl_mi28r.f90 index ca1e746..f3b4b91 100644 --- a/hsl_subset/hsl_mi28/hsl_mi28r.f90 +++ b/hsl_subset/hsl_mi28/hsl_mi28r.f90 @@ -86,7 +86,7 @@ module hsl_mi28_real contains subroutine mi28_factorize_real(n, ptr, row, val, lsize, rsize, keep, & - control, info, scale, invp) + control, info, scale, perm) integer(ip_), intent(in) :: n integer(ip_), intent(inout) :: ptr(n+1) integer(ip_), intent(inout) :: row(:) @@ -97,7 +97,7 @@ subroutine mi28_factorize_real(n, ptr, row, val, lsize, rsize, keep, & type(mi28_control), intent(in) :: control type(mi28_info), intent(out) :: info real(rp_), intent(in), optional :: scale(n) - integer(ip_), intent(in), optional :: invp(n) + integer(ip_), intent(in), optional :: perm(n) IF ( control%unit_error >= 0 ) WRITE( control%unit_error, & "( ' We regret that the solution options that you have ', /, & & ' chosen are not all freely available with GALAHAD.', /, &