-
-
4209 module procedure :: extract_diagonal_dbl
-
4210 module procedure :: extract_diagonal_cmplx
-
4211 module procedure :: extract_diagonal_csr
+
+
+
+
+
4211 module procedure :: extract_diagonal_dbl
+
4212 module procedure :: extract_diagonal_cmplx
+
4213 module procedure :: extract_diagonal_csr
-
-
-
-
-
-
-
4218 module subroutine mtx_mult_mtx(transa, transb, alpha, a, b, beta, c, err)
-
4219 logical,
intent(in) :: transa, transb
-
4220 real(real64),
intent(in) :: alpha, beta
-
4221 real(real64),
intent(in),
dimension(:,:) :: a, b
-
4222 real(real64),
intent(inout),
dimension(:,:) :: c
-
4223 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4226 module subroutine mtx_mult_vec(trans, alpha, a, b, beta, c, err)
-
4227 logical,
intent(in) :: trans
-
4228 real(real64),
intent(in) :: alpha, beta
-
4229 real(real64),
intent(in),
dimension(:,:) :: a
-
4230 real(real64),
intent(in),
dimension(:) :: b
-
4231 real(real64),
intent(inout),
dimension(:) :: c
-
4232 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4235 module subroutine cmtx_mult_mtx(opa, opb, alpha, a, b, beta, c, err)
-
4236 integer(int32),
intent(in) :: opa, opb
-
4237 complex(real64),
intent(in) :: alpha, beta
-
4238 complex(real64),
intent(in),
dimension(:,:) :: a, b
-
4239 complex(real64),
intent(inout),
dimension(:,:) :: c
-
4240 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4243 module subroutine cmtx_mult_vec(opa, alpha, a, b, beta, c, err)
-
4244 integer(int32),
intent(in) :: opa
-
4245 complex(real64),
intent(in) :: alpha, beta
-
4246 complex(real64),
intent(in),
dimension(:,:) :: a
-
4247 complex(real64),
intent(in),
dimension(:) :: b
-
4248 complex(real64),
intent(inout),
dimension(:) :: c
-
4249 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4252 module subroutine rank1_update_dbl(alpha, x, y, a, err)
-
4253 real(real64),
intent(in) :: alpha
-
4254 real(real64),
intent(in),
dimension(:) :: x, y
-
4255 real(real64),
intent(inout),
dimension(:,:) :: a
-
4256 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4259 module subroutine rank1_update_cmplx(alpha, x, y, a, err)
-
4260 complex(real64),
intent(in) :: alpha
-
4261 complex(real64),
intent(in),
dimension(:) :: x, y
-
4262 complex(real64),
intent(inout),
dimension(:,:) :: a
-
4263 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4266 module subroutine diag_mtx_mult_mtx(lside, trans, alpha, a, b, beta, c, err)
-
4267 logical,
intent(in) :: lside, trans
-
4268 real(real64) :: alpha, beta
-
4269 real(real64),
intent(in),
dimension(:) :: a
-
4270 real(real64),
intent(in),
dimension(:,:) :: b
-
4271 real(real64),
intent(inout),
dimension(:,:) :: c
-
4272 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4275 module subroutine diag_mtx_mult_mtx2(lside, alpha, a, b, err)
-
4276 logical,
intent(in) :: lside
-
4277 real(real64),
intent(in) :: alpha
-
4278 real(real64),
intent(in),
dimension(:) :: a
-
4279 real(real64),
intent(inout),
dimension(:,:) :: b
-
4280 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4283 module subroutine diag_mtx_mult_mtx3(lside, trans, alpha, a, b, beta, c, err)
-
4284 logical,
intent(in) :: lside, trans
-
4285 real(real64) :: alpha, beta
-
4286 complex(real64),
intent(in),
dimension(:) :: a
-
4287 real(real64),
intent(in),
dimension(:,:) :: b
-
4288 complex(real64),
intent(inout),
dimension(:,:) :: c
-
4289 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4292 module subroutine diag_mtx_mult_mtx4(lside, opb, alpha, a, b, beta, c, err)
-
4293 logical,
intent(in) :: lside
-
4294 integer(int32),
intent(in) :: opb
-
4295 real(real64) :: alpha, beta
-
4296 complex(real64),
intent(in),
dimension(:) :: a
-
4297 complex(real64),
intent(in),
dimension(:,:) :: b
-
4298 complex(real64),
intent(inout),
dimension(:,:) :: c
-
4299 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4302 module subroutine diag_mtx_mult_mtx_cmplx(lside, opb, alpha, a, b, beta, c, err)
-
4303 logical,
intent(in) :: lside
-
4304 integer(int32),
intent(in) :: opb
-
4305 complex(real64) :: alpha, beta
-
4306 complex(real64),
intent(in),
dimension(:) :: a
-
4307 complex(real64),
intent(in),
dimension(:,:) :: b
-
4308 complex(real64),
intent(inout),
dimension(:,:) :: c
-
4309 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4312 module subroutine diag_mtx_mult_mtx2_cmplx(lside, alpha, a, b, err)
-
4313 logical,
intent(in) :: lside
-
4314 complex(real64),
intent(in) :: alpha
-
4315 complex(real64),
intent(in),
dimension(:) :: a
-
4316 complex(real64),
intent(inout),
dimension(:,:) :: b
-
4317 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4320 module subroutine diag_mtx_mult_mtx_mix(lside, opb, alpha, a, b, beta, c, err)
-
4321 logical,
intent(in) :: lside
-
4322 integer(int32),
intent(in) :: opb
-
4323 complex(real64) :: alpha, beta
-
4324 real(real64),
intent(in),
dimension(:) :: a
-
4325 complex(real64),
intent(in),
dimension(:,:) :: b
-
4326 complex(real64),
intent(inout),
dimension(:,:) :: c
-
4327 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4330 module subroutine diag_mtx_mult_mtx2_mix(lside, alpha, a, b, err)
-
4331 logical,
intent(in) :: lside
-
4332 complex(real64),
intent(in) :: alpha
-
4333 real(real64),
intent(in),
dimension(:) :: a
-
4334 complex(real64),
intent(inout),
dimension(:,:) :: b
-
4335 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4338 module subroutine diag_mtx_sparse_mult(lside, alpha, a, b, err)
-
4339 logical,
intent(in) :: lside
-
4340 real(real64),
intent(in) :: alpha
-
4341 real(real64),
intent(in),
dimension(:) :: a
-
4342 type(csr_matrix),
intent(inout) :: b
-
4343 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4346 pure module function trace_dbl(x) result(y)
-
4347 real(real64),
intent(in),
dimension(:,:) :: x
-
-
-
-
4351 pure module function trace_cmplx(x) result(y)
-
4352 complex(real64),
intent(in),
dimension(:,:) :: x
-
4353 complex(real64) :: y
-
-
-
4356 module function mtx_rank_dbl(a, tol, work, olwork, err) result(rnk)
-
4357 real(real64),
intent(inout),
dimension(:,:) :: a
-
4358 real(real64),
intent(in),
optional :: tol
-
4359 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
4360 integer(int32),
intent(out),
optional :: olwork
-
4361 class(errors),
intent(inout),
optional,
target :: err
-
4362 integer(int32) :: rnk
-
-
-
4365 module function mtx_rank_cmplx(a, tol, work, olwork, rwork, err) result(rnk)
-
4366 complex(real64),
intent(inout),
dimension(:,:) :: a
-
4367 real(real64),
intent(in),
optional :: tol
-
4368 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
4369 integer(int32),
intent(out),
optional :: olwork
-
4370 real(real64),
intent(out),
target,
optional,
dimension(:) :: rwork
-
4371 class(errors),
intent(inout),
optional,
target :: err
-
4372 integer(int32) :: rnk
-
-
-
4375 module function det_dbl(a, iwork, err) result(x)
-
4376 real(real64),
intent(inout),
dimension(:,:) :: a
-
4377 integer(int32),
intent(out),
target,
optional,
dimension(:) :: iwork
-
4378 class(errors),
intent(inout),
optional,
target :: err
-
-
-
-
4382 module function det_cmplx(a, iwork, err) result(x)
-
4383 complex(real64),
intent(inout),
dimension(:,:) :: a
-
4384 integer(int32),
intent(out),
target,
optional,
dimension(:) :: iwork
-
4385 class(errors),
intent(inout),
optional,
target :: err
-
4386 complex(real64) :: x
-
-
-
4389 module subroutine swap_dbl(x, y, err)
-
4390 real(real64),
intent(inout),
dimension(:) :: x, y
-
4391 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4394 module subroutine swap_cmplx(x, y, err)
-
4395 complex(real64),
intent(inout),
dimension(:) :: x, y
-
4396 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4399 module subroutine recip_mult_array_dbl(a, x)
-
4400 real(real64),
intent(in) :: a
-
4401 real(real64),
intent(inout),
dimension(:) :: x
-
-
-
4404 module subroutine tri_mtx_mult_dbl(upper, alpha, a, beta, b, err)
-
4405 logical,
intent(in) :: upper
-
4406 real(real64),
intent(in) :: alpha, beta
-
4407 real(real64),
intent(in),
dimension(:,:) :: a
-
4408 real(real64),
intent(inout),
dimension(:,:) :: b
-
4409 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4412 module subroutine tri_mtx_mult_cmplx(upper, alpha, a, beta, b, err)
-
4413 logical,
intent(in) :: upper
-
4414 complex(real64),
intent(in) :: alpha, beta
-
4415 complex(real64),
intent(in),
dimension(:,:) :: a
-
4416 complex(real64),
intent(inout),
dimension(:,:) :: b
-
4417 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4420 module subroutine band_mtx_vec_mult_dbl(trans, kl, ku, alpha, a, x, beta, &
-
-
4422 logical,
intent(in) :: trans
-
4423 integer(int32),
intent(in) :: kl, ku
-
4424 real(real64),
intent(in) :: alpha, beta
-
4425 real(real64),
intent(in),
dimension(:,:) :: a
-
4426 real(real64),
intent(in),
dimension(:) :: x
-
4427 real(real64),
intent(inout),
dimension(:) :: y
-
4428 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4431 module subroutine band_mtx_vec_mult_cmplx(trans, kl, ku, alpha, a, x, &
-
-
4433 integer(int32),
intent(in) :: trans
-
4434 integer(int32),
intent(in) :: kl, ku
-
4435 complex(real64),
intent(in) :: alpha, beta
-
4436 complex(real64),
intent(in),
dimension(:,:) :: a
-
4437 complex(real64),
intent(in),
dimension(:) :: x
-
4438 complex(real64),
intent(inout),
dimension(:) :: y
-
4439 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4442 module subroutine band_to_full_mtx_dbl(kl, ku, b, f, err)
-
4443 integer(int32),
intent(in) :: kl, ku
-
4444 real(real64),
intent(in),
dimension(:,:) :: b
-
4445 real(real64),
intent(out),
dimension(:,:) :: f
-
4446 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4449 module subroutine band_to_full_mtx_cmplx(kl, ku, b, f, err)
-
4450 integer(int32),
intent(in) :: kl, ku
-
4451 complex(real64),
intent(in),
dimension(:,:) :: b
-
4452 complex(real64),
intent(out),
dimension(:,:) :: f
-
4453 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4456 module subroutine band_diag_mtx_mult_dbl(left, m, kl, ku, alpha, a, b, err)
-
4457 logical,
intent(in) :: left
-
4458 integer(int32),
intent(in) :: m, kl, ku
-
4459 real(real64),
intent(in) :: alpha
-
4460 real(real64),
intent(inout),
dimension(:,:) :: a
-
4461 real(real64),
intent(in),
dimension(:) :: b
-
4462 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4465 module subroutine band_diag_mtx_mult_cmplx(left, m, kl, ku, alpha, a, b, err)
-
4466 logical,
intent(in) :: left
-
4467 integer(int32),
intent(in) :: m, kl, ku
-
4468 complex(real64),
intent(in) :: alpha
-
4469 complex(real64),
intent(inout),
dimension(:,:) :: a
-
4470 complex(real64),
intent(in),
dimension(:) :: b
-
4471 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4474 module subroutine banded_to_dense_dbl(m, kl, ku, a, x, err)
-
4475 integer(int32),
intent(in) :: m, kl, ku
-
4476 real(real64),
intent(in),
dimension(:,:) :: a
-
4477 real(real64),
intent(out),
dimension(:,:) :: x
-
4478 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4481 module subroutine banded_to_dense_cmplx(m, kl, ku, a, x, err)
-
4482 integer(int32),
intent(in) :: m, kl, ku
-
4483 complex(real64),
intent(in),
dimension(:,:) :: a
-
4484 complex(real64),
intent(out),
dimension(:,:) :: x
-
4485 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4488 module subroutine dense_to_banded_dbl(a, kl, ku, x, err)
-
4489 real(real64),
intent(in),
dimension(:,:) :: a
-
4490 integer(int32),
intent(in) :: kl, ku
-
4491 real(real64),
intent(out),
dimension(:,:) :: x
-
4492 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4495 module subroutine dense_to_banded_cmplx(a, kl, ku, x, err)
-
4496 complex(real64),
intent(in),
dimension(:,:) :: a
-
4497 integer(int32),
intent(in) :: kl, ku
-
4498 complex(real64),
intent(out),
dimension(:,:) :: x
-
4499 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4502 module subroutine extract_diagonal_dbl(a, diag, err)
-
-
4504 real(real64),
intent(in),
dimension(:,:) :: a
-
4505 real(real64),
intent(out),
dimension(:) :: diag
-
4506 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4509 module subroutine extract_diagonal_cmplx(a, diag, err)
-
-
4511 complex(real64),
intent(in),
dimension(:,:) :: a
-
4512 complex(real64),
intent(out),
dimension(:) :: diag
-
4513 class(errors),
intent(inout),
optional,
target :: err
-
-
-
-
-
-
-
-
4521 module subroutine lu_factor_dbl(a, ipvt, err)
-
4522 real(real64),
intent(inout),
dimension(:,:) :: a
-
4523 integer(int32),
intent(out),
dimension(:) :: ipvt
-
4524 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4527 module subroutine lu_factor_cmplx(a, ipvt, err)
-
4528 complex(real64),
intent(inout),
dimension(:,:) :: a
-
4529 integer(int32),
intent(out),
dimension(:) :: ipvt
-
4530 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4533 module subroutine form_lu_all(lu, ipvt, u, p, err)
-
4534 real(real64),
intent(inout),
dimension(:,:) :: lu
-
4535 integer(int32),
intent(in),
dimension(:) :: ipvt
-
4536 real(real64),
intent(out),
dimension(:,:) :: u, p
-
4537 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4540 module subroutine form_lu_all_cmplx(lu, ipvt, u, p, err)
-
4541 complex(real64),
intent(inout),
dimension(:,:) :: lu
-
4542 integer(int32),
intent(in),
dimension(:) :: ipvt
-
4543 complex(real64),
intent(out),
dimension(:,:) :: u
-
4544 real(real64),
intent(out),
dimension(:,:) :: p
-
4545 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4548 module subroutine form_lu_only(lu, u, err)
-
4549 real(real64),
intent(inout),
dimension(:,:) :: lu
-
4550 real(real64),
intent(out),
dimension(:,:) :: u
-
4551 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4554 module subroutine form_lu_only_cmplx(lu, u, err)
-
4555 complex(real64),
intent(inout),
dimension(:,:) :: lu
-
4556 complex(real64),
intent(out),
dimension(:,:) :: u
-
4557 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4560 module subroutine qr_factor_no_pivot(a, tau, work, olwork, err)
-
4561 real(real64),
intent(inout),
dimension(:,:) :: a
-
4562 real(real64),
intent(out),
dimension(:) :: tau
-
4563 real(real64),
intent(out),
target,
dimension(:),
optional :: work
-
4564 integer(int32),
intent(out),
optional :: olwork
-
4565 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4568 module subroutine qr_factor_no_pivot_cmplx(a, tau, work, olwork, err)
-
4569 complex(real64),
intent(inout),
dimension(:,:) :: a
-
4570 complex(real64),
intent(out),
dimension(:) :: tau
-
4571 complex(real64),
intent(out),
target,
dimension(:),
optional :: work
-
4572 integer(int32),
intent(out),
optional :: olwork
-
4573 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4576 module subroutine qr_factor_pivot(a, tau, jpvt, work, olwork, err)
-
4577 real(real64),
intent(inout),
dimension(:,:) :: a
-
4578 real(real64),
intent(out),
dimension(:) :: tau
-
4579 integer(int32),
intent(inout),
dimension(:) :: jpvt
-
4580 real(real64),
intent(out),
target,
dimension(:),
optional :: work
-
4581 integer(int32),
intent(out),
optional :: olwork
-
4582 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4585 module subroutine qr_factor_pivot_cmplx(a, tau, jpvt, work, olwork, rwork, &
-
-
4587 complex(real64),
intent(inout),
dimension(:,:) :: a
-
4588 complex(real64),
intent(out),
dimension(:) :: tau
-
4589 integer(int32),
intent(inout),
dimension(:) :: jpvt
-
4590 complex(real64),
intent(out),
target,
dimension(:),
optional :: work
-
4591 integer(int32),
intent(out),
optional :: olwork
-
4592 real(real64),
intent(out),
target,
dimension(:),
optional :: rwork
-
4593 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4596 module subroutine form_qr_no_pivot(r, tau, q, work, olwork, err)
-
4597 real(real64),
intent(inout),
dimension(:,:) :: r
-
4598 real(real64),
intent(in),
dimension(:) :: tau
-
4599 real(real64),
intent(out),
dimension(:,:) :: q
-
4600 real(real64),
intent(out),
target,
dimension(:),
optional :: work
-
4601 integer(int32),
intent(out),
optional :: olwork
-
4602 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4605 module subroutine form_qr_no_pivot_cmplx(r, tau, q, work, olwork, err)
-
4606 complex(real64),
intent(inout),
dimension(:,:) :: r
-
4607 complex(real64),
intent(in),
dimension(:) :: tau
-
4608 complex(real64),
intent(out),
dimension(:,:) :: q
-
4609 complex(real64),
intent(out),
target,
dimension(:),
optional :: work
-
4610 integer(int32),
intent(out),
optional :: olwork
-
4611 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4614 module subroutine form_qr_pivot(r, tau, pvt, q, p, work, olwork, err)
-
4615 real(real64),
intent(inout),
dimension(:,:) :: r
-
4616 real(real64),
intent(in),
dimension(:) :: tau
-
4617 integer(int32),
intent(in),
dimension(:) :: pvt
-
4618 real(real64),
intent(out),
dimension(:,:) :: q, p
-
4619 real(real64),
intent(out),
target,
dimension(:),
optional :: work
-
4620 integer(int32),
intent(out),
optional :: olwork
-
4621 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4624 module subroutine form_qr_pivot_cmplx(r, tau, pvt, q, p, work, olwork, err)
-
4625 complex(real64),
intent(inout),
dimension(:,:) :: r
-
4626 complex(real64),
intent(in),
dimension(:) :: tau
-
4627 integer(int32),
intent(in),
dimension(:) :: pvt
-
4628 complex(real64),
intent(out),
dimension(:,:) :: q, p
-
4629 complex(real64),
intent(out),
target,
dimension(:),
optional :: work
-
4630 integer(int32),
intent(out),
optional :: olwork
-
4631 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4634 module subroutine mult_qr_mtx(lside, trans, a, tau, c, work, olwork, err)
-
4635 logical,
intent(in) :: lside, trans
-
4636 real(real64),
intent(in),
dimension(:) :: tau
-
4637 real(real64),
intent(inout),
dimension(:,:) :: a, c
-
4638 real(real64),
intent(out),
target,
dimension(:),
optional :: work
-
4639 integer(int32),
intent(out),
optional :: olwork
-
4640 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4643 module subroutine mult_qr_mtx_cmplx(lside, trans, a, tau, c, work, olwork, err)
-
4644 logical,
intent(in) :: lside, trans
-
4645 complex(real64),
intent(in),
dimension(:) :: tau
-
4646 complex(real64),
intent(inout),
dimension(:,:) :: a, c
-
4647 complex(real64),
intent(out),
target,
dimension(:),
optional :: work
-
4648 integer(int32),
intent(out),
optional :: olwork
-
4649 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4652 module subroutine mult_qr_vec(trans, a, tau, c, work, olwork, err)
-
4653 logical,
intent(in) :: trans
-
4654 real(real64),
intent(inout),
dimension(:,:) :: a
-
4655 real(real64),
intent(in),
dimension(:) :: tau
-
4656 real(real64),
intent(inout),
dimension(:) :: c
-
4657 real(real64),
intent(out),
target,
dimension(:),
optional :: work
-
4658 integer(int32),
intent(out),
optional :: olwork
-
4659 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4662 module subroutine mult_qr_vec_cmplx(trans, a, tau, c, work, olwork, err)
-
4663 logical,
intent(in) :: trans
-
4664 complex(real64),
intent(inout),
dimension(:,:) :: a
-
4665 complex(real64),
intent(in),
dimension(:) :: tau
-
4666 complex(real64),
intent(inout),
dimension(:) :: c
-
4667 complex(real64),
intent(out),
target,
dimension(:),
optional :: work
-
4668 integer(int32),
intent(out),
optional :: olwork
-
4669 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4672 module subroutine qr_rank1_update_dbl(q, r, u, v, work, err)
-
4673 real(real64),
intent(inout),
dimension(:,:) :: q, r
-
4674 real(real64),
intent(inout),
dimension(:) :: u, v
-
4675 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
4676 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4679 module subroutine qr_rank1_update_cmplx(q, r, u, v, work, rwork, err)
-
4680 complex(real64),
intent(inout),
dimension(:,:) :: q, r
-
4681 complex(real64),
intent(inout),
dimension(:) :: u, v
-
4682 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
4683 real(real64),
intent(out),
target,
optional,
dimension(:) :: rwork
-
4684 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4687 module subroutine cholesky_factor_dbl(a, upper, err)
-
4688 real(real64),
intent(inout),
dimension(:,:) :: a
-
4689 logical,
intent(in),
optional :: upper
-
4690 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4693 module subroutine cholesky_factor_cmplx(a, upper, err)
-
4694 complex(real64),
intent(inout),
dimension(:,:) :: a
-
4695 logical,
intent(in),
optional :: upper
-
4696 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4699 module subroutine cholesky_rank1_update_dbl(r, u, work, err)
-
4700 real(real64),
intent(inout),
dimension(:,:) :: r
-
4701 real(real64),
intent(inout),
dimension(:) :: u
-
4702 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
4703 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4706 module subroutine cholesky_rank1_update_cmplx(r, u, work, err)
-
4707 complex(real64),
intent(inout),
dimension(:,:) :: r
-
4708 complex(real64),
intent(inout),
dimension(:) :: u
-
4709 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
4710 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4713 module subroutine cholesky_rank1_downdate_dbl(r, u, work, err)
-
4714 real(real64),
intent(inout),
dimension(:,:) :: r
-
4715 real(real64),
intent(inout),
dimension(:) :: u
-
4716 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
4717 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4720 module subroutine cholesky_rank1_downdate_cmplx(r, u, work, err)
-
4721 complex(real64),
intent(inout),
dimension(:,:) :: r
-
4722 complex(real64),
intent(inout),
dimension(:) :: u
-
4723 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
4724 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4727 module subroutine rz_factor_dbl(a, tau, work, olwork, err)
-
4728 real(real64),
intent(inout),
dimension(:,:) :: a
-
4729 real(real64),
intent(out),
dimension(:) :: tau
-
4730 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
4731 integer(int32),
intent(out),
optional :: olwork
-
4732 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4735 module subroutine rz_factor_cmplx(a, tau, work, olwork, err)
-
4736 complex(real64),
intent(inout),
dimension(:,:) :: a
-
4737 complex(real64),
intent(out),
dimension(:) :: tau
-
4738 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
4739 integer(int32),
intent(out),
optional :: olwork
-
4740 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4743 module subroutine mult_rz_mtx(lside, trans, l, a, tau, c, work, olwork, err)
-
4744 logical,
intent(in) :: lside, trans
-
4745 integer(int32),
intent(in) :: l
-
4746 real(real64),
intent(inout),
dimension(:,:) :: a, c
-
4747 real(real64),
intent(in),
dimension(:) :: tau
-
4748 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
4749 integer(int32),
intent(out),
optional :: olwork
-
4750 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4753 module subroutine mult_rz_mtx_cmplx(lside, trans, l, a, tau, c, work, olwork, err)
-
4754 logical,
intent(in) :: lside, trans
-
4755 integer(int32),
intent(in) :: l
-
4756 complex(real64),
intent(inout),
dimension(:,:) :: a, c
-
4757 complex(real64),
intent(in),
dimension(:) :: tau
-
4758 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
4759 integer(int32),
intent(out),
optional :: olwork
-
4760 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4763 module subroutine mult_rz_vec(trans, l, a, tau, c, work, olwork, err)
-
4764 logical,
intent(in) :: trans
-
4765 integer(int32),
intent(in) :: l
-
4766 real(real64),
intent(inout),
dimension(:,:) :: a
-
4767 real(real64),
intent(in),
dimension(:) :: tau
-
4768 real(real64),
intent(inout),
dimension(:) :: c
-
4769 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
4770 integer(int32),
intent(out),
optional :: olwork
-
4771 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4774 module subroutine mult_rz_vec_cmplx(trans, l, a, tau, c, work, olwork, err)
-
4775 logical,
intent(in) :: trans
-
4776 integer(int32),
intent(in) :: l
-
4777 complex(real64),
intent(inout),
dimension(:,:) :: a
-
4778 complex(real64),
intent(in),
dimension(:) :: tau
-
4779 complex(real64),
intent(inout),
dimension(:) :: c
-
4780 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
4781 integer(int32),
intent(out),
optional :: olwork
-
4782 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4785 module subroutine svd_dbl(a, s, u, vt, work, olwork, err)
-
4786 real(real64),
intent(inout),
dimension(:,:) :: a
-
4787 real(real64),
intent(out),
dimension(:) :: s
-
4788 real(real64),
intent(out),
optional,
dimension(:,:) :: u, vt
-
4789 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
4790 integer(int32),
intent(out),
optional :: olwork
-
4791 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4794 module subroutine svd_cmplx(a, s, u, vt, work, olwork, rwork, err)
-
4795 complex(real64),
intent(inout),
dimension(:,:) :: a
-
4796 real(real64),
intent(out),
dimension(:) :: s
-
4797 complex(real64),
intent(out),
optional,
dimension(:,:) :: u, vt
-
4798 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
4799 integer(int32),
intent(out),
optional :: olwork
-
4800 real(real64),
intent(out),
target,
optional,
dimension(:) :: rwork
-
4801 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4804 module subroutine lq_factor_no_pivot(a, tau, work, olwork, err)
-
4805 real(real64),
intent(inout),
dimension(:,:) :: a
-
4806 real(real64),
intent(out),
dimension(:) :: tau
-
4807 real(real64),
intent(out),
target,
dimension(:),
optional :: work
-
4808 integer(int32),
intent(out),
optional :: olwork
-
4809 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4812 module subroutine lq_factor_no_pivot_cmplx(a, tau, work, olwork, err)
-
4813 complex(real64),
intent(inout),
dimension(:,:) :: a
-
4814 complex(real64),
intent(out),
dimension(:) :: tau
-
4815 complex(real64),
intent(out),
target,
dimension(:),
optional :: work
-
4816 integer(int32),
intent(out),
optional :: olwork
-
4817 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4820 module subroutine form_lq_no_pivot(l, tau, q, work, olwork, err)
-
4821 real(real64),
intent(inout),
dimension(:,:) :: l
-
4822 real(real64),
intent(in),
dimension(:) :: tau
-
4823 real(real64),
intent(out),
dimension(:,:) :: q
-
4824 real(real64),
intent(out),
target,
dimension(:),
optional :: work
-
4825 integer(int32),
intent(out),
optional :: olwork
-
4826 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4829 module subroutine form_lq_no_pivot_cmplx(l, tau, q, work, olwork, err)
-
4830 complex(real64),
intent(inout),
dimension(:,:) :: l
-
4831 complex(real64),
intent(in),
dimension(:) :: tau
-
4832 complex(real64),
intent(out),
dimension(:,:) :: q
-
4833 complex(real64),
intent(out),
target,
dimension(:),
optional :: work
-
4834 integer(int32),
intent(out),
optional :: olwork
-
4835 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4838 module subroutine mult_lq_mtx(lside, trans, a, tau, c, work, olwork, err)
-
4839 logical,
intent(in) :: lside, trans
-
4840 real(real64),
intent(in),
dimension(:,:) :: a
-
4841 real(real64),
intent(in),
dimension(:) :: tau
-
4842 real(real64),
intent(inout),
dimension(:,:) :: c
-
4843 real(real64),
intent(out),
target,
dimension(:),
optional :: work
-
4844 integer(int32),
intent(out),
optional :: olwork
-
4845 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4848 module subroutine mult_lq_mtx_cmplx(lside, trans, a, tau, c, work, olwork, err)
-
4849 logical,
intent(in) :: lside, trans
-
4850 complex(real64),
intent(in),
dimension(:,:) :: a
-
4851 complex(real64),
intent(in),
dimension(:) :: tau
-
4852 complex(real64),
intent(inout),
dimension(:,:) :: c
-
4853 complex(real64),
intent(out),
target,
dimension(:),
optional :: work
-
4854 integer(int32),
intent(out),
optional :: olwork
-
4855 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4858 module subroutine mult_lq_vec(trans, a, tau, c, work, olwork, err)
-
4859 logical,
intent(in) :: trans
-
4860 real(real64),
intent(in),
dimension(:,:) :: a
-
4861 real(real64),
intent(in),
dimension(:) :: tau
-
4862 real(real64),
intent(inout),
dimension(:) :: c
-
4863 real(real64),
intent(out),
target,
dimension(:),
optional :: work
-
4864 integer(int32),
intent(out),
optional :: olwork
-
4865 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4868 module subroutine mult_lq_vec_cmplx(trans, a, tau, c, work, olwork, err)
-
4869 logical,
intent(in) :: trans
-
4870 complex(real64),
intent(in),
dimension(:,:) :: a
-
4871 complex(real64),
intent(in),
dimension(:) :: tau
-
4872 complex(real64),
intent(inout),
dimension(:) :: c
-
4873 complex(real64),
intent(out),
target,
dimension(:),
optional :: work
-
4874 integer(int32),
intent(out),
optional :: olwork
-
4875 class(errors),
intent(inout),
optional,
target :: err
-
-
-
-
-
-
-
-
4883 module subroutine solve_tri_mtx(lside, upper, trans, nounit, alpha, a, b, err)
-
4884 logical,
intent(in) :: lside, upper, trans, nounit
-
4885 real(real64),
intent(in) :: alpha
-
4886 real(real64),
intent(in),
dimension(:,:) :: a
-
4887 real(real64),
intent(inout),
dimension(:,:) :: b
-
4888 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4891 module subroutine solve_tri_mtx_cmplx(lside, upper, trans, nounit, alpha, a, b, err)
-
4892 logical,
intent(in) :: lside, upper, trans, nounit
-
4893 complex(real64),
intent(in) :: alpha
-
4894 complex(real64),
intent(in),
dimension(:,:) :: a
-
4895 complex(real64),
intent(inout),
dimension(:,:) :: b
-
4896 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4899 module subroutine solve_tri_vec(upper, trans, nounit, a, x, err)
-
4900 logical,
intent(in) :: upper, trans, nounit
-
4901 real(real64),
intent(in),
dimension(:,:) :: a
-
4902 real(real64),
intent(inout),
dimension(:) :: x
-
4903 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4906 module subroutine solve_tri_vec_cmplx(upper, trans, nounit, a, x, err)
-
4907 logical,
intent(in) :: upper, trans, nounit
-
4908 complex(real64),
intent(in),
dimension(:,:) :: a
-
4909 complex(real64),
intent(inout),
dimension(:) :: x
-
4910 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4913 module subroutine solve_lu_mtx(a, ipvt, b, err)
-
4914 real(real64),
intent(in),
dimension(:,:) :: a
-
4915 integer(int32),
intent(in),
dimension(:) :: ipvt
-
4916 real(real64),
intent(inout),
dimension(:,:) :: b
-
4917 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4920 module subroutine solve_lu_mtx_cmplx(a, ipvt, b, err)
-
4921 complex(real64),
intent(in),
dimension(:,:) :: a
-
4922 integer(int32),
intent(in),
dimension(:) :: ipvt
-
4923 complex(real64),
intent(inout),
dimension(:,:) :: b
-
4924 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4927 module subroutine solve_lu_vec(a, ipvt, b, err)
-
4928 real(real64),
intent(in),
dimension(:,:) :: a
-
4929 integer(int32),
intent(in),
dimension(:) :: ipvt
-
4930 real(real64),
intent(inout),
dimension(:) :: b
-
4931 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4934 module subroutine solve_lu_vec_cmplx(a, ipvt, b, err)
-
4935 complex(real64),
intent(in),
dimension(:,:) :: a
-
4936 integer(int32),
intent(in),
dimension(:) :: ipvt
-
4937 complex(real64),
intent(inout),
dimension(:) :: b
-
4938 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4941 module subroutine solve_qr_no_pivot_mtx(a, tau, b, work, olwork, err)
-
4942 real(real64),
intent(inout),
dimension(:,:) :: a, b
-
4943 real(real64),
intent(in),
dimension(:) :: tau
-
4944 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
4945 integer(int32),
intent(out),
optional :: olwork
-
4946 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4949 module subroutine solve_qr_no_pivot_mtx_cmplx(a, tau, b, work, olwork, err)
-
4950 complex(real64),
intent(inout),
dimension(:,:) :: a, b
-
4951 complex(real64),
intent(in),
dimension(:) :: tau
-
4952 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
4953 integer(int32),
intent(out),
optional :: olwork
-
4954 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4957 module subroutine solve_qr_no_pivot_vec(a, tau, b, work, olwork, err)
-
4958 real(real64),
intent(inout),
dimension(:,:) :: a
-
4959 real(real64),
intent(in),
dimension(:) :: tau
-
4960 real(real64),
intent(inout),
dimension(:) :: b
-
4961 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
4962 integer(int32),
intent(out),
optional :: olwork
-
4963 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4966 module subroutine solve_qr_no_pivot_vec_cmplx(a, tau, b, work, olwork, err)
-
4967 complex(real64),
intent(inout),
dimension(:,:) :: a
-
4968 complex(real64),
intent(in),
dimension(:) :: tau
-
4969 complex(real64),
intent(inout),
dimension(:) :: b
-
4970 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
4971 integer(int32),
intent(out),
optional :: olwork
-
4972 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4975 module subroutine solve_qr_pivot_mtx(a, tau, jpvt, b, work, olwork, err)
-
4976 real(real64),
intent(inout),
dimension(:,:) :: a
-
4977 real(real64),
intent(in),
dimension(:) :: tau
-
4978 integer(int32),
intent(in),
dimension(:) :: jpvt
-
4979 real(real64),
intent(inout),
dimension(:,:) :: b
-
4980 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
4981 integer(int32),
intent(out),
optional :: olwork
-
4982 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4985 module subroutine solve_qr_pivot_mtx_cmplx(a, tau, jpvt, b, work, olwork, err)
-
4986 complex(real64),
intent(inout),
dimension(:,:) :: a
-
4987 complex(real64),
intent(in),
dimension(:) :: tau
-
4988 integer(int32),
intent(in),
dimension(:) :: jpvt
-
4989 complex(real64),
intent(inout),
dimension(:,:) :: b
-
4990 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
4991 integer(int32),
intent(out),
optional :: olwork
-
4992 class(errors),
intent(inout),
optional,
target :: err
-
-
-
4995 module subroutine solve_qr_pivot_vec(a, tau, jpvt, b, work, olwork, err)
-
4996 real(real64),
intent(inout),
dimension(:,:) :: a
-
4997 real(real64),
intent(in),
dimension(:) :: tau
-
4998 integer(int32),
intent(in),
dimension(:) :: jpvt
-
4999 real(real64),
intent(inout),
dimension(:) :: b
-
5000 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
5001 integer(int32),
intent(out),
optional :: olwork
-
5002 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5005 module subroutine solve_qr_pivot_vec_cmplx(a, tau, jpvt, b, work, olwork, err)
-
5006 complex(real64),
intent(inout),
dimension(:,:) :: a
-
5007 complex(real64),
intent(in),
dimension(:) :: tau
-
5008 integer(int32),
intent(in),
dimension(:) :: jpvt
-
5009 complex(real64),
intent(inout),
dimension(:) :: b
-
5010 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
5011 integer(int32),
intent(out),
optional :: olwork
-
5012 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5015 module subroutine solve_cholesky_mtx(upper, a, b, err)
-
5016 logical,
intent(in) :: upper
-
5017 real(real64),
intent(in),
dimension(:,:) :: a
-
5018 real(real64),
intent(inout),
dimension(:,:) :: b
-
5019 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5022 module subroutine solve_cholesky_mtx_cmplx(upper, a, b, err)
-
5023 logical,
intent(in) :: upper
-
5024 complex(real64),
intent(in),
dimension(:,:) :: a
-
5025 complex(real64),
intent(inout),
dimension(:,:) :: b
-
5026 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5029 module subroutine solve_cholesky_vec(upper, a, b, err)
-
5030 logical,
intent(in) :: upper
-
5031 real(real64),
intent(in),
dimension(:,:) :: a
-
5032 real(real64),
intent(inout),
dimension(:) :: b
-
5033 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5036 module subroutine solve_cholesky_vec_cmplx(upper, a, b, err)
-
5037 logical,
intent(in) :: upper
-
5038 complex(real64),
intent(in),
dimension(:,:) :: a
-
5039 complex(real64),
intent(inout),
dimension(:) :: b
-
5040 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5043 module subroutine solve_least_squares_mtx(a, b, work, olwork, err)
-
5044 real(real64),
intent(inout),
dimension(:,:) :: a, b
-
5045 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
5046 integer(int32),
intent(out),
optional :: olwork
-
5047 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5050 module subroutine solve_least_squares_mtx_cmplx(a, b, work, olwork, err)
-
5051 complex(real64),
intent(inout),
dimension(:,:) :: a, b
-
5052 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
5053 integer(int32),
intent(out),
optional :: olwork
-
5054 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5057 module subroutine solve_least_squares_vec(a, b, work, olwork, err)
-
5058 real(real64),
intent(inout),
dimension(:,:) :: a
-
5059 real(real64),
intent(inout),
dimension(:) :: b
-
5060 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
5061 integer(int32),
intent(out),
optional :: olwork
-
5062 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5065 module subroutine solve_least_squares_vec_cmplx(a, b, work, olwork, err)
-
5066 complex(real64),
intent(inout),
dimension(:,:) :: a
-
5067 complex(real64),
intent(inout),
dimension(:) :: b
-
5068 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
5069 integer(int32),
intent(out),
optional :: olwork
-
5070 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5073 module subroutine solve_least_squares_mtx_pvt(a, b, ipvt, arnk, work, olwork, err)
-
5074 real(real64),
intent(inout),
dimension(:,:) :: a, b
-
5075 integer(int32),
intent(inout),
target,
optional,
dimension(:) :: ipvt
-
5076 integer(int32),
intent(out),
optional :: arnk
-
5077 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
5078 integer(int32),
intent(out),
optional :: olwork
-
5079 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5082 module subroutine solve_least_squares_mtx_pvt_cmplx(a, b, ipvt, arnk, &
-
5083 work, olwork, rwork, err)
-
5084 complex(real64),
intent(inout),
dimension(:,:) :: a, b
-
5085 integer(int32),
intent(inout),
target,
optional,
dimension(:) :: ipvt
-
5086 integer(int32),
intent(out),
optional :: arnk
-
5087 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
5088 integer(int32),
intent(out),
optional :: olwork
-
5089 real(real64),
intent(out),
target,
optional,
dimension(:) :: rwork
-
5090 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5093 module subroutine solve_least_squares_vec_pvt(a, b, ipvt, arnk, work, olwork, err)
-
5094 real(real64),
intent(inout),
dimension(:,:) :: a
-
5095 real(real64),
intent(inout),
dimension(:) :: b
-
5096 integer(int32),
intent(inout),
target,
optional,
dimension(:) :: ipvt
-
5097 integer(int32),
intent(out),
optional :: arnk
-
5098 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
5099 integer(int32),
intent(out),
optional :: olwork
-
5100 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5103 module subroutine solve_least_squares_vec_pvt_cmplx(a, b, ipvt, arnk, &
-
5104 work, olwork, rwork, err)
-
5105 complex(real64),
intent(inout),
dimension(:,:) :: a
-
5106 complex(real64),
intent(inout),
dimension(:) :: b
-
5107 integer(int32),
intent(inout),
target,
optional,
dimension(:) :: ipvt
-
5108 integer(int32),
intent(out),
optional :: arnk
-
5109 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
5110 integer(int32),
intent(out),
optional :: olwork
-
5111 real(real64),
intent(out),
target,
optional,
dimension(:) :: rwork
-
5112 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5115 module subroutine solve_least_squares_mtx_svd(a, b, s, arnk, work, olwork, err)
-
5116 real(real64),
intent(inout),
dimension(:,:) :: a, b
-
5117 integer(int32),
intent(out),
optional :: arnk
-
5118 real(real64),
intent(out),
target,
optional,
dimension(:) :: work, s
-
5119 integer(int32),
intent(out),
optional :: olwork
-
5120 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5123 module subroutine solve_least_squares_mtx_svd_cmplx(a, b, s, arnk, work, &
-
-
5125 complex(real64),
intent(inout),
dimension(:,:) :: a, b
-
5126 integer(int32),
intent(out),
optional :: arnk
-
5127 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
5128 real(real64),
intent(out),
target,
optional,
dimension(:) :: rwork, s
-
5129 integer(int32),
intent(out),
optional :: olwork
-
5130 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5133 module subroutine solve_least_squares_vec_svd(a, b, s, arnk, work, olwork, err)
-
5134 real(real64),
intent(inout),
dimension(:,:) :: a
-
5135 real(real64),
intent(inout),
dimension(:) :: b
-
5136 integer(int32),
intent(out),
optional :: arnk
-
5137 real(real64),
intent(out),
target,
optional,
dimension(:) :: work, s
-
5138 integer(int32),
intent(out),
optional :: olwork
-
5139 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5142 module subroutine solve_least_squares_vec_svd_cmplx(a, b, s, arnk, work, &
-
-
5144 complex(real64),
intent(inout),
dimension(:,:) :: a
-
5145 complex(real64),
intent(inout),
dimension(:) :: b
-
5146 integer(int32),
intent(out),
optional :: arnk
-
5147 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
5148 real(real64),
intent(out),
target,
optional,
dimension(:) :: rwork, s
-
5149 integer(int32),
intent(out),
optional :: olwork
-
5150 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5153 module subroutine mtx_inverse_dbl(a, iwork, work, olwork, err)
-
5154 real(real64),
intent(inout),
dimension(:,:) :: a
-
5155 integer(int32),
intent(out),
target,
optional,
dimension(:) :: iwork
-
5156 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
5157 integer(int32),
intent(out),
optional :: olwork
-
5158 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5161 module subroutine mtx_inverse_cmplx(a, iwork, work, olwork, err)
-
5162 complex(real64),
intent(inout),
dimension(:,:) :: a
-
5163 integer(int32),
intent(out),
target,
optional,
dimension(:) :: iwork
-
5164 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
5165 integer(int32),
intent(out),
optional :: olwork
-
5166 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5169 module subroutine mtx_pinverse_dbl(a, ainv, tol, work, olwork, err)
-
5170 real(real64),
intent(inout),
dimension(:,:) :: a
-
5171 real(real64),
intent(out),
dimension(:,:) :: ainv
-
5172 real(real64),
intent(in),
optional :: tol
-
5173 real(real64),
intent(out),
target,
dimension(:),
optional :: work
-
5174 integer(int32),
intent(out),
optional :: olwork
-
5175 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5178 module subroutine mtx_pinverse_cmplx(a, ainv, tol, work, olwork, rwork, err)
-
5179 complex(real64),
intent(inout),
dimension(:,:) :: a
-
5180 complex(real64),
intent(out),
dimension(:,:) :: ainv
-
5181 real(real64),
intent(in),
optional :: tol
-
5182 complex(real64),
intent(out),
target,
dimension(:),
optional :: work
-
5183 integer(int32),
intent(out),
optional :: olwork
-
5184 real(real64),
intent(out),
target,
dimension(:),
optional :: rwork
-
5185 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5188 module subroutine solve_lq_mtx(a, tau, b, work, olwork, err)
-
5189 real(real64),
intent(in),
dimension(:,:) :: a
-
5190 real(real64),
intent(in),
dimension(:) :: tau
-
5191 real(real64),
intent(inout),
dimension(:,:) :: b
-
5192 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
5193 integer(int32),
intent(out),
optional :: olwork
-
5194 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5197 module subroutine solve_lq_mtx_cmplx(a, tau, b, work, olwork, err)
-
5198 complex(real64),
intent(in),
dimension(:,:) :: a
-
5199 complex(real64),
intent(in),
dimension(:) :: tau
-
5200 complex(real64),
intent(inout),
dimension(:,:) :: b
-
5201 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
5202 integer(int32),
intent(out),
optional :: olwork
-
5203 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5206 module subroutine solve_lq_vec(a, tau, b, work, olwork, err)
-
5207 real(real64),
intent(in),
dimension(:,:) :: a
-
5208 real(real64),
intent(in),
dimension(:) :: tau
-
5209 real(real64),
intent(inout),
dimension(:) :: b
-
5210 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
5211 integer(int32),
intent(out),
optional :: olwork
-
5212 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5215 module subroutine solve_lq_vec_cmplx(a, tau, b, work, olwork, err)
-
5216 complex(real64),
intent(in),
dimension(:,:) :: a
-
5217 complex(real64),
intent(in),
dimension(:) :: tau
-
5218 complex(real64),
intent(inout),
dimension(:) :: b
-
5219 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
5220 integer(int32),
intent(out),
optional :: olwork
-
5221 class(errors),
intent(inout),
optional,
target :: err
-
-
-
-
-
-
-
-
5229 module subroutine eigen_symm(vecs, a, vals, work, olwork, err)
-
5230 logical,
intent(in) :: vecs
-
5231 real(real64),
intent(inout),
dimension(:,:) :: a
-
5232 real(real64),
intent(out),
dimension(:) :: vals
-
5233 real(real64),
intent(out),
pointer,
optional,
dimension(:) :: work
-
5234 integer(int32),
intent(out),
optional :: olwork
-
5235 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5238 module subroutine eigen_asymm(a, vals, vecs, work, olwork, err)
-
5239 real(real64),
intent(inout),
dimension(:,:) :: a
-
5240 complex(real64),
intent(out),
dimension(:) :: vals
-
5241 complex(real64),
intent(out),
optional,
dimension(:,:) :: vecs
-
5242 real(real64),
intent(out),
pointer,
optional,
dimension(:) :: work
-
5243 integer(int32),
intent(out),
optional :: olwork
-
5244 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5247 module subroutine eigen_gen(a, b, alpha, beta, vecs, work, olwork, err)
-
5248 real(real64),
intent(inout),
dimension(:,:) :: a, b
-
5249 complex(real64),
intent(out),
dimension(:) :: alpha
-
5250 real(real64),
intent(out),
optional,
dimension(:) :: beta
-
5251 complex(real64),
intent(out),
optional,
dimension(:,:) :: vecs
-
5252 real(real64),
intent(out),
optional,
pointer,
dimension(:) :: work
-
5253 integer(int32),
intent(out),
optional :: olwork
-
5254 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5257 module subroutine eigen_cmplx(a, vals, vecs, work, olwork, rwork, err)
-
5258 complex(real64),
intent(inout),
dimension(:,:) :: a
-
5259 complex(real64),
intent(out),
dimension(:) :: vals
-
5260 complex(real64),
intent(out),
optional,
dimension(:,:) :: vecs
-
5261 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
-
5262 real(real64),
intent(out),
target,
optional,
dimension(:) :: rwork
-
5263 integer(int32),
intent(out),
optional :: olwork
-
5264 class(errors),
intent(inout),
optional,
target :: err
-
-
-
-
-
-
-
-
5272 module subroutine sort_dbl_array(x, ascend)
-
5273 real(real64),
intent(inout),
dimension(:) :: x
-
5274 logical,
intent(in),
optional :: ascend
-
-
-
5277 module subroutine sort_dbl_array_ind(x, ind, ascend, err)
-
5278 real(real64),
intent(inout),
dimension(:) :: x
-
5279 integer(int32),
intent(inout),
dimension(:) :: ind
-
5280 logical,
intent(in),
optional :: ascend
-
5281 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5284 module subroutine sort_cmplx_array(x, ascend)
-
5285 complex(real64),
intent(inout),
dimension(:) :: x
-
5286 logical,
intent(in),
optional :: ascend
-
-
-
5289 module subroutine sort_cmplx_array_ind(x, ind, ascend, err)
-
5290 complex(real64),
intent(inout),
dimension(:) :: x
-
5291 integer(int32),
intent(inout),
dimension(:) :: ind
-
5292 logical,
intent(in),
optional :: ascend
-
5293 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5296 module subroutine sort_eigen_cmplx(vals, vecs, ascend, err)
-
5297 complex(real64),
intent(inout),
dimension(:) :: vals
-
5298 complex(real64),
intent(inout),
dimension(:,:) :: vecs
-
5299 logical,
intent(in),
optional :: ascend
-
5300 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5303 module subroutine sort_eigen_dbl(vals, vecs, ascend, err)
-
5304 real(real64),
intent(inout),
dimension(:) :: vals
-
5305 real(real64),
intent(inout),
dimension(:,:) :: vecs
-
5306 logical,
intent(in),
optional :: ascend
-
5307 class(errors),
intent(inout),
optional,
target :: err
-
-
-
+
+
+
+
+
+
+
4220 module subroutine mtx_mult_mtx(transa, transb, alpha, a, b, beta, c, err)
+
4221 logical,
intent(in) :: transa, transb
+
4222 real(real64),
intent(in) :: alpha, beta
+
4223 real(real64),
intent(in),
dimension(:,:) :: a, b
+
4224 real(real64),
intent(inout),
dimension(:,:) :: c
+
4225 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4228 module subroutine mtx_mult_vec(trans, alpha, a, b, beta, c, err)
+
4229 logical,
intent(in) :: trans
+
4230 real(real64),
intent(in) :: alpha, beta
+
4231 real(real64),
intent(in),
dimension(:,:) :: a
+
4232 real(real64),
intent(in),
dimension(:) :: b
+
4233 real(real64),
intent(inout),
dimension(:) :: c
+
4234 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4237 module subroutine cmtx_mult_mtx(opa, opb, alpha, a, b, beta, c, err)
+
4238 integer(int32),
intent(in) :: opa, opb
+
4239 complex(real64),
intent(in) :: alpha, beta
+
4240 complex(real64),
intent(in),
dimension(:,:) :: a, b
+
4241 complex(real64),
intent(inout),
dimension(:,:) :: c
+
4242 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4245 module subroutine cmtx_mult_vec(opa, alpha, a, b, beta, c, err)
+
4246 integer(int32),
intent(in) :: opa
+
4247 complex(real64),
intent(in) :: alpha, beta
+
4248 complex(real64),
intent(in),
dimension(:,:) :: a
+
4249 complex(real64),
intent(in),
dimension(:) :: b
+
4250 complex(real64),
intent(inout),
dimension(:) :: c
+
4251 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4254 module subroutine rank1_update_dbl(alpha, x, y, a, err)
+
4255 real(real64),
intent(in) :: alpha
+
4256 real(real64),
intent(in),
dimension(:) :: x, y
+
4257 real(real64),
intent(inout),
dimension(:,:) :: a
+
4258 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4261 module subroutine rank1_update_cmplx(alpha, x, y, a, err)
+
4262 complex(real64),
intent(in) :: alpha
+
4263 complex(real64),
intent(in),
dimension(:) :: x, y
+
4264 complex(real64),
intent(inout),
dimension(:,:) :: a
+
4265 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4268 module subroutine diag_mtx_mult_mtx(lside, trans, alpha, a, b, beta, c, err)
+
4269 logical,
intent(in) :: lside, trans
+
4270 real(real64) :: alpha, beta
+
4271 real(real64),
intent(in),
dimension(:) :: a
+
4272 real(real64),
intent(in),
dimension(:,:) :: b
+
4273 real(real64),
intent(inout),
dimension(:,:) :: c
+
4274 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4277 module subroutine diag_mtx_mult_mtx2(lside, alpha, a, b, err)
+
4278 logical,
intent(in) :: lside
+
4279 real(real64),
intent(in) :: alpha
+
4280 real(real64),
intent(in),
dimension(:) :: a
+
4281 real(real64),
intent(inout),
dimension(:,:) :: b
+
4282 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4285 module subroutine diag_mtx_mult_mtx3(lside, trans, alpha, a, b, beta, c, err)
+
4286 logical,
intent(in) :: lside, trans
+
4287 real(real64) :: alpha, beta
+
4288 complex(real64),
intent(in),
dimension(:) :: a
+
4289 real(real64),
intent(in),
dimension(:,:) :: b
+
4290 complex(real64),
intent(inout),
dimension(:,:) :: c
+
4291 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4294 module subroutine diag_mtx_mult_mtx4(lside, opb, alpha, a, b, beta, c, err)
+
4295 logical,
intent(in) :: lside
+
4296 integer(int32),
intent(in) :: opb
+
4297 real(real64) :: alpha, beta
+
4298 complex(real64),
intent(in),
dimension(:) :: a
+
4299 complex(real64),
intent(in),
dimension(:,:) :: b
+
4300 complex(real64),
intent(inout),
dimension(:,:) :: c
+
4301 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4304 module subroutine diag_mtx_mult_mtx_cmplx(lside, opb, alpha, a, b, beta, c, err)
+
4305 logical,
intent(in) :: lside
+
4306 integer(int32),
intent(in) :: opb
+
4307 complex(real64) :: alpha, beta
+
4308 complex(real64),
intent(in),
dimension(:) :: a
+
4309 complex(real64),
intent(in),
dimension(:,:) :: b
+
4310 complex(real64),
intent(inout),
dimension(:,:) :: c
+
4311 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4314 module subroutine diag_mtx_mult_mtx2_cmplx(lside, alpha, a, b, err)
+
4315 logical,
intent(in) :: lside
+
4316 complex(real64),
intent(in) :: alpha
+
4317 complex(real64),
intent(in),
dimension(:) :: a
+
4318 complex(real64),
intent(inout),
dimension(:,:) :: b
+
4319 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4322 module subroutine diag_mtx_mult_mtx_mix(lside, opb, alpha, a, b, beta, c, err)
+
4323 logical,
intent(in) :: lside
+
4324 integer(int32),
intent(in) :: opb
+
4325 complex(real64) :: alpha, beta
+
4326 real(real64),
intent(in),
dimension(:) :: a
+
4327 complex(real64),
intent(in),
dimension(:,:) :: b
+
4328 complex(real64),
intent(inout),
dimension(:,:) :: c
+
4329 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4332 module subroutine diag_mtx_mult_mtx2_mix(lside, alpha, a, b, err)
+
4333 logical,
intent(in) :: lside
+
4334 complex(real64),
intent(in) :: alpha
+
4335 real(real64),
intent(in),
dimension(:) :: a
+
4336 complex(real64),
intent(inout),
dimension(:,:) :: b
+
4337 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4340 module subroutine diag_mtx_sparse_mult(lside, alpha, a, b, err)
+
4341 logical,
intent(in) :: lside
+
4342 real(real64),
intent(in) :: alpha
+
4343 real(real64),
intent(in),
dimension(:) :: a
+
4344 type(csr_matrix),
intent(inout) :: b
+
4345 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4348 pure module function trace_dbl(x) result(y)
+
4349 real(real64),
intent(in),
dimension(:,:) :: x
+
+
+
+
4353 pure module function trace_cmplx(x) result(y)
+
4354 complex(real64),
intent(in),
dimension(:,:) :: x
+
4355 complex(real64) :: y
+
+
+
4358 module function mtx_rank_dbl(a, tol, work, olwork, err) result(rnk)
+
4359 real(real64),
intent(inout),
dimension(:,:) :: a
+
4360 real(real64),
intent(in),
optional :: tol
+
4361 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
4362 integer(int32),
intent(out),
optional :: olwork
+
4363 class(errors),
intent(inout),
optional,
target :: err
+
4364 integer(int32) :: rnk
+
+
+
4367 module function mtx_rank_cmplx(a, tol, work, olwork, rwork, err) result(rnk)
+
4368 complex(real64),
intent(inout),
dimension(:,:) :: a
+
4369 real(real64),
intent(in),
optional :: tol
+
4370 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
4371 integer(int32),
intent(out),
optional :: olwork
+
4372 real(real64),
intent(out),
target,
optional,
dimension(:) :: rwork
+
4373 class(errors),
intent(inout),
optional,
target :: err
+
4374 integer(int32) :: rnk
+
+
+
4377 module function det_dbl(a, iwork, err) result(x)
+
4378 real(real64),
intent(inout),
dimension(:,:) :: a
+
4379 integer(int32),
intent(out),
target,
optional,
dimension(:) :: iwork
+
4380 class(errors),
intent(inout),
optional,
target :: err
+
+
+
+
4384 module function det_cmplx(a, iwork, err) result(x)
+
4385 complex(real64),
intent(inout),
dimension(:,:) :: a
+
4386 integer(int32),
intent(out),
target,
optional,
dimension(:) :: iwork
+
4387 class(errors),
intent(inout),
optional,
target :: err
+
4388 complex(real64) :: x
+
+
+
4391 module subroutine swap_dbl(x, y, err)
+
4392 real(real64),
intent(inout),
dimension(:) :: x, y
+
4393 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4396 module subroutine swap_cmplx(x, y, err)
+
4397 complex(real64),
intent(inout),
dimension(:) :: x, y
+
4398 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4401 module subroutine recip_mult_array_dbl(a, x)
+
4402 real(real64),
intent(in) :: a
+
4403 real(real64),
intent(inout),
dimension(:) :: x
+
+
+
4406 module subroutine tri_mtx_mult_dbl(upper, alpha, a, beta, b, err)
+
4407 logical,
intent(in) :: upper
+
4408 real(real64),
intent(in) :: alpha, beta
+
4409 real(real64),
intent(in),
dimension(:,:) :: a
+
4410 real(real64),
intent(inout),
dimension(:,:) :: b
+
4411 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4414 module subroutine tri_mtx_mult_cmplx(upper, alpha, a, beta, b, err)
+
4415 logical,
intent(in) :: upper
+
4416 complex(real64),
intent(in) :: alpha, beta
+
4417 complex(real64),
intent(in),
dimension(:,:) :: a
+
4418 complex(real64),
intent(inout),
dimension(:,:) :: b
+
4419 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4422 module subroutine band_mtx_vec_mult_dbl(trans, kl, ku, alpha, a, x, beta, &
+
+
4424 logical,
intent(in) :: trans
+
4425 integer(int32),
intent(in) :: kl, ku
+
4426 real(real64),
intent(in) :: alpha, beta
+
4427 real(real64),
intent(in),
dimension(:,:) :: a
+
4428 real(real64),
intent(in),
dimension(:) :: x
+
4429 real(real64),
intent(inout),
dimension(:) :: y
+
4430 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4433 module subroutine band_mtx_vec_mult_cmplx(trans, kl, ku, alpha, a, x, &
+
+
4435 integer(int32),
intent(in) :: trans
+
4436 integer(int32),
intent(in) :: kl, ku
+
4437 complex(real64),
intent(in) :: alpha, beta
+
4438 complex(real64),
intent(in),
dimension(:,:) :: a
+
4439 complex(real64),
intent(in),
dimension(:) :: x
+
4440 complex(real64),
intent(inout),
dimension(:) :: y
+
4441 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4444 module subroutine band_to_full_mtx_dbl(kl, ku, b, f, err)
+
4445 integer(int32),
intent(in) :: kl, ku
+
4446 real(real64),
intent(in),
dimension(:,:) :: b
+
4447 real(real64),
intent(out),
dimension(:,:) :: f
+
4448 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4451 module subroutine band_to_full_mtx_cmplx(kl, ku, b, f, err)
+
4452 integer(int32),
intent(in) :: kl, ku
+
4453 complex(real64),
intent(in),
dimension(:,:) :: b
+
4454 complex(real64),
intent(out),
dimension(:,:) :: f
+
4455 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4458 module subroutine band_diag_mtx_mult_dbl(left, m, kl, ku, alpha, a, b, err)
+
4459 logical,
intent(in) :: left
+
4460 integer(int32),
intent(in) :: m, kl, ku
+
4461 real(real64),
intent(in) :: alpha
+
4462 real(real64),
intent(inout),
dimension(:,:) :: a
+
4463 real(real64),
intent(in),
dimension(:) :: b
+
4464 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4467 module subroutine band_diag_mtx_mult_cmplx(left, m, kl, ku, alpha, a, b, err)
+
4468 logical,
intent(in) :: left
+
4469 integer(int32),
intent(in) :: m, kl, ku
+
4470 complex(real64),
intent(in) :: alpha
+
4471 complex(real64),
intent(inout),
dimension(:,:) :: a
+
4472 complex(real64),
intent(in),
dimension(:) :: b
+
4473 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4476 module subroutine banded_to_dense_dbl(m, kl, ku, a, x, err)
+
4477 integer(int32),
intent(in) :: m, kl, ku
+
4478 real(real64),
intent(in),
dimension(:,:) :: a
+
4479 real(real64),
intent(out),
dimension(:,:) :: x
+
4480 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4483 module subroutine banded_to_dense_cmplx(m, kl, ku, a, x, err)
+
4484 integer(int32),
intent(in) :: m, kl, ku
+
4485 complex(real64),
intent(in),
dimension(:,:) :: a
+
4486 complex(real64),
intent(out),
dimension(:,:) :: x
+
4487 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4490 module subroutine dense_to_banded_dbl(a, kl, ku, x, err)
+
4491 real(real64),
intent(in),
dimension(:,:) :: a
+
4492 integer(int32),
intent(in) :: kl, ku
+
4493 real(real64),
intent(out),
dimension(:,:) :: x
+
4494 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4497 module subroutine dense_to_banded_cmplx(a, kl, ku, x, err)
+
4498 complex(real64),
intent(in),
dimension(:,:) :: a
+
4499 integer(int32),
intent(in) :: kl, ku
+
4500 complex(real64),
intent(out),
dimension(:,:) :: x
+
4501 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4504 module subroutine extract_diagonal_dbl(a, diag, err)
+
+
4506 real(real64),
intent(in),
dimension(:,:) :: a
+
4507 real(real64),
intent(out),
dimension(:) :: diag
+
4508 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4511 module subroutine extract_diagonal_cmplx(a, diag, err)
+
+
4513 complex(real64),
intent(in),
dimension(:,:) :: a
+
4514 complex(real64),
intent(out),
dimension(:) :: diag
+
4515 class(errors),
intent(inout),
optional,
target :: err
+
+
+
+
+
+
+
+
4523 module subroutine lu_factor_dbl(a, ipvt, err)
+
4524 real(real64),
intent(inout),
dimension(:,:) :: a
+
4525 integer(int32),
intent(out),
dimension(:) :: ipvt
+
4526 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4529 module subroutine lu_factor_cmplx(a, ipvt, err)
+
4530 complex(real64),
intent(inout),
dimension(:,:) :: a
+
4531 integer(int32),
intent(out),
dimension(:) :: ipvt
+
4532 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4535 module subroutine form_lu_all(lu, ipvt, u, p, err)
+
4536 real(real64),
intent(inout),
dimension(:,:) :: lu
+
4537 integer(int32),
intent(in),
dimension(:) :: ipvt
+
4538 real(real64),
intent(out),
dimension(:,:) :: u, p
+
4539 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4542 module subroutine form_lu_all_cmplx(lu, ipvt, u, p, err)
+
4543 complex(real64),
intent(inout),
dimension(:,:) :: lu
+
4544 integer(int32),
intent(in),
dimension(:) :: ipvt
+
4545 complex(real64),
intent(out),
dimension(:,:) :: u
+
4546 real(real64),
intent(out),
dimension(:,:) :: p
+
4547 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4550 module subroutine form_lu_only(lu, u, err)
+
4551 real(real64),
intent(inout),
dimension(:,:) :: lu
+
4552 real(real64),
intent(out),
dimension(:,:) :: u
+
4553 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4556 module subroutine form_lu_only_cmplx(lu, u, err)
+
4557 complex(real64),
intent(inout),
dimension(:,:) :: lu
+
4558 complex(real64),
intent(out),
dimension(:,:) :: u
+
4559 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4562 module subroutine qr_factor_no_pivot(a, tau, work, olwork, err)
+
4563 real(real64),
intent(inout),
dimension(:,:) :: a
+
4564 real(real64),
intent(out),
dimension(:) :: tau
+
4565 real(real64),
intent(out),
target,
dimension(:),
optional :: work
+
4566 integer(int32),
intent(out),
optional :: olwork
+
4567 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4570 module subroutine qr_factor_no_pivot_cmplx(a, tau, work, olwork, err)
+
4571 complex(real64),
intent(inout),
dimension(:,:) :: a
+
4572 complex(real64),
intent(out),
dimension(:) :: tau
+
4573 complex(real64),
intent(out),
target,
dimension(:),
optional :: work
+
4574 integer(int32),
intent(out),
optional :: olwork
+
4575 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4578 module subroutine qr_factor_pivot(a, tau, jpvt, work, olwork, err)
+
4579 real(real64),
intent(inout),
dimension(:,:) :: a
+
4580 real(real64),
intent(out),
dimension(:) :: tau
+
4581 integer(int32),
intent(inout),
dimension(:) :: jpvt
+
4582 real(real64),
intent(out),
target,
dimension(:),
optional :: work
+
4583 integer(int32),
intent(out),
optional :: olwork
+
4584 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4587 module subroutine qr_factor_pivot_cmplx(a, tau, jpvt, work, olwork, rwork, &
+
+
4589 complex(real64),
intent(inout),
dimension(:,:) :: a
+
4590 complex(real64),
intent(out),
dimension(:) :: tau
+
4591 integer(int32),
intent(inout),
dimension(:) :: jpvt
+
4592 complex(real64),
intent(out),
target,
dimension(:),
optional :: work
+
4593 integer(int32),
intent(out),
optional :: olwork
+
4594 real(real64),
intent(out),
target,
dimension(:),
optional :: rwork
+
4595 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4598 module subroutine form_qr_no_pivot(r, tau, q, work, olwork, err)
+
4599 real(real64),
intent(inout),
dimension(:,:) :: r
+
4600 real(real64),
intent(in),
dimension(:) :: tau
+
4601 real(real64),
intent(out),
dimension(:,:) :: q
+
4602 real(real64),
intent(out),
target,
dimension(:),
optional :: work
+
4603 integer(int32),
intent(out),
optional :: olwork
+
4604 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4607 module subroutine form_qr_no_pivot_cmplx(r, tau, q, work, olwork, err)
+
4608 complex(real64),
intent(inout),
dimension(:,:) :: r
+
4609 complex(real64),
intent(in),
dimension(:) :: tau
+
4610 complex(real64),
intent(out),
dimension(:,:) :: q
+
4611 complex(real64),
intent(out),
target,
dimension(:),
optional :: work
+
4612 integer(int32),
intent(out),
optional :: olwork
+
4613 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4616 module subroutine form_qr_pivot(r, tau, pvt, q, p, work, olwork, err)
+
4617 real(real64),
intent(inout),
dimension(:,:) :: r
+
4618 real(real64),
intent(in),
dimension(:) :: tau
+
4619 integer(int32),
intent(in),
dimension(:) :: pvt
+
4620 real(real64),
intent(out),
dimension(:,:) :: q, p
+
4621 real(real64),
intent(out),
target,
dimension(:),
optional :: work
+
4622 integer(int32),
intent(out),
optional :: olwork
+
4623 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4626 module subroutine form_qr_pivot_cmplx(r, tau, pvt, q, p, work, olwork, err)
+
4627 complex(real64),
intent(inout),
dimension(:,:) :: r
+
4628 complex(real64),
intent(in),
dimension(:) :: tau
+
4629 integer(int32),
intent(in),
dimension(:) :: pvt
+
4630 complex(real64),
intent(out),
dimension(:,:) :: q, p
+
4631 complex(real64),
intent(out),
target,
dimension(:),
optional :: work
+
4632 integer(int32),
intent(out),
optional :: olwork
+
4633 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4636 module subroutine mult_qr_mtx(lside, trans, a, tau, c, work, olwork, err)
+
4637 logical,
intent(in) :: lside, trans
+
4638 real(real64),
intent(in),
dimension(:) :: tau
+
4639 real(real64),
intent(inout),
dimension(:,:) :: a, c
+
4640 real(real64),
intent(out),
target,
dimension(:),
optional :: work
+
4641 integer(int32),
intent(out),
optional :: olwork
+
4642 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4645 module subroutine mult_qr_mtx_cmplx(lside, trans, a, tau, c, work, olwork, err)
+
4646 logical,
intent(in) :: lside, trans
+
4647 complex(real64),
intent(in),
dimension(:) :: tau
+
4648 complex(real64),
intent(inout),
dimension(:,:) :: a, c
+
4649 complex(real64),
intent(out),
target,
dimension(:),
optional :: work
+
4650 integer(int32),
intent(out),
optional :: olwork
+
4651 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4654 module subroutine mult_qr_vec(trans, a, tau, c, work, olwork, err)
+
4655 logical,
intent(in) :: trans
+
4656 real(real64),
intent(inout),
dimension(:,:) :: a
+
4657 real(real64),
intent(in),
dimension(:) :: tau
+
4658 real(real64),
intent(inout),
dimension(:) :: c
+
4659 real(real64),
intent(out),
target,
dimension(:),
optional :: work
+
4660 integer(int32),
intent(out),
optional :: olwork
+
4661 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4664 module subroutine mult_qr_vec_cmplx(trans, a, tau, c, work, olwork, err)
+
4665 logical,
intent(in) :: trans
+
4666 complex(real64),
intent(inout),
dimension(:,:) :: a
+
4667 complex(real64),
intent(in),
dimension(:) :: tau
+
4668 complex(real64),
intent(inout),
dimension(:) :: c
+
4669 complex(real64),
intent(out),
target,
dimension(:),
optional :: work
+
4670 integer(int32),
intent(out),
optional :: olwork
+
4671 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4674 module subroutine qr_rank1_update_dbl(q, r, u, v, work, err)
+
4675 real(real64),
intent(inout),
dimension(:,:) :: q, r
+
4676 real(real64),
intent(inout),
dimension(:) :: u, v
+
4677 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
4678 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4681 module subroutine qr_rank1_update_cmplx(q, r, u, v, work, rwork, err)
+
4682 complex(real64),
intent(inout),
dimension(:,:) :: q, r
+
4683 complex(real64),
intent(inout),
dimension(:) :: u, v
+
4684 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
4685 real(real64),
intent(out),
target,
optional,
dimension(:) :: rwork
+
4686 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4689 module subroutine cholesky_factor_dbl(a, upper, err)
+
4690 real(real64),
intent(inout),
dimension(:,:) :: a
+
4691 logical,
intent(in),
optional :: upper
+
4692 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4695 module subroutine cholesky_factor_cmplx(a, upper, err)
+
4696 complex(real64),
intent(inout),
dimension(:,:) :: a
+
4697 logical,
intent(in),
optional :: upper
+
4698 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4701 module subroutine cholesky_rank1_update_dbl(r, u, work, err)
+
4702 real(real64),
intent(inout),
dimension(:,:) :: r
+
4703 real(real64),
intent(inout),
dimension(:) :: u
+
4704 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
4705 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4708 module subroutine cholesky_rank1_update_cmplx(r, u, work, err)
+
4709 complex(real64),
intent(inout),
dimension(:,:) :: r
+
4710 complex(real64),
intent(inout),
dimension(:) :: u
+
4711 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
4712 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4715 module subroutine cholesky_rank1_downdate_dbl(r, u, work, err)
+
4716 real(real64),
intent(inout),
dimension(:,:) :: r
+
4717 real(real64),
intent(inout),
dimension(:) :: u
+
4718 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
4719 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4722 module subroutine cholesky_rank1_downdate_cmplx(r, u, work, err)
+
4723 complex(real64),
intent(inout),
dimension(:,:) :: r
+
4724 complex(real64),
intent(inout),
dimension(:) :: u
+
4725 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
4726 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4729 module subroutine rz_factor_dbl(a, tau, work, olwork, err)
+
4730 real(real64),
intent(inout),
dimension(:,:) :: a
+
4731 real(real64),
intent(out),
dimension(:) :: tau
+
4732 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
4733 integer(int32),
intent(out),
optional :: olwork
+
4734 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4737 module subroutine rz_factor_cmplx(a, tau, work, olwork, err)
+
4738 complex(real64),
intent(inout),
dimension(:,:) :: a
+
4739 complex(real64),
intent(out),
dimension(:) :: tau
+
4740 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
4741 integer(int32),
intent(out),
optional :: olwork
+
4742 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4745 module subroutine mult_rz_mtx(lside, trans, l, a, tau, c, work, olwork, err)
+
4746 logical,
intent(in) :: lside, trans
+
4747 integer(int32),
intent(in) :: l
+
4748 real(real64),
intent(inout),
dimension(:,:) :: a, c
+
4749 real(real64),
intent(in),
dimension(:) :: tau
+
4750 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
4751 integer(int32),
intent(out),
optional :: olwork
+
4752 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4755 module subroutine mult_rz_mtx_cmplx(lside, trans, l, a, tau, c, work, olwork, err)
+
4756 logical,
intent(in) :: lside, trans
+
4757 integer(int32),
intent(in) :: l
+
4758 complex(real64),
intent(inout),
dimension(:,:) :: a, c
+
4759 complex(real64),
intent(in),
dimension(:) :: tau
+
4760 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
4761 integer(int32),
intent(out),
optional :: olwork
+
4762 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4765 module subroutine mult_rz_vec(trans, l, a, tau, c, work, olwork, err)
+
4766 logical,
intent(in) :: trans
+
4767 integer(int32),
intent(in) :: l
+
4768 real(real64),
intent(inout),
dimension(:,:) :: a
+
4769 real(real64),
intent(in),
dimension(:) :: tau
+
4770 real(real64),
intent(inout),
dimension(:) :: c
+
4771 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
4772 integer(int32),
intent(out),
optional :: olwork
+
4773 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4776 module subroutine mult_rz_vec_cmplx(trans, l, a, tau, c, work, olwork, err)
+
4777 logical,
intent(in) :: trans
+
4778 integer(int32),
intent(in) :: l
+
4779 complex(real64),
intent(inout),
dimension(:,:) :: a
+
4780 complex(real64),
intent(in),
dimension(:) :: tau
+
4781 complex(real64),
intent(inout),
dimension(:) :: c
+
4782 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
4783 integer(int32),
intent(out),
optional :: olwork
+
4784 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4787 module subroutine svd_dbl(a, s, u, vt, work, olwork, err)
+
4788 real(real64),
intent(inout),
dimension(:,:) :: a
+
4789 real(real64),
intent(out),
dimension(:) :: s
+
4790 real(real64),
intent(out),
optional,
dimension(:,:) :: u, vt
+
4791 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
4792 integer(int32),
intent(out),
optional :: olwork
+
4793 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4796 module subroutine svd_cmplx(a, s, u, vt, work, olwork, rwork, err)
+
4797 complex(real64),
intent(inout),
dimension(:,:) :: a
+
4798 real(real64),
intent(out),
dimension(:) :: s
+
4799 complex(real64),
intent(out),
optional,
dimension(:,:) :: u, vt
+
4800 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
4801 integer(int32),
intent(out),
optional :: olwork
+
4802 real(real64),
intent(out),
target,
optional,
dimension(:) :: rwork
+
4803 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4806 module subroutine lq_factor_no_pivot(a, tau, work, olwork, err)
+
4807 real(real64),
intent(inout),
dimension(:,:) :: a
+
4808 real(real64),
intent(out),
dimension(:) :: tau
+
4809 real(real64),
intent(out),
target,
dimension(:),
optional :: work
+
4810 integer(int32),
intent(out),
optional :: olwork
+
4811 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4814 module subroutine lq_factor_no_pivot_cmplx(a, tau, work, olwork, err)
+
4815 complex(real64),
intent(inout),
dimension(:,:) :: a
+
4816 complex(real64),
intent(out),
dimension(:) :: tau
+
4817 complex(real64),
intent(out),
target,
dimension(:),
optional :: work
+
4818 integer(int32),
intent(out),
optional :: olwork
+
4819 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4822 module subroutine form_lq_no_pivot(l, tau, q, work, olwork, err)
+
4823 real(real64),
intent(inout),
dimension(:,:) :: l
+
4824 real(real64),
intent(in),
dimension(:) :: tau
+
4825 real(real64),
intent(out),
dimension(:,:) :: q
+
4826 real(real64),
intent(out),
target,
dimension(:),
optional :: work
+
4827 integer(int32),
intent(out),
optional :: olwork
+
4828 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4831 module subroutine form_lq_no_pivot_cmplx(l, tau, q, work, olwork, err)
+
4832 complex(real64),
intent(inout),
dimension(:,:) :: l
+
4833 complex(real64),
intent(in),
dimension(:) :: tau
+
4834 complex(real64),
intent(out),
dimension(:,:) :: q
+
4835 complex(real64),
intent(out),
target,
dimension(:),
optional :: work
+
4836 integer(int32),
intent(out),
optional :: olwork
+
4837 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4840 module subroutine mult_lq_mtx(lside, trans, a, tau, c, work, olwork, err)
+
4841 logical,
intent(in) :: lside, trans
+
4842 real(real64),
intent(in),
dimension(:,:) :: a
+
4843 real(real64),
intent(in),
dimension(:) :: tau
+
4844 real(real64),
intent(inout),
dimension(:,:) :: c
+
4845 real(real64),
intent(out),
target,
dimension(:),
optional :: work
+
4846 integer(int32),
intent(out),
optional :: olwork
+
4847 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4850 module subroutine mult_lq_mtx_cmplx(lside, trans, a, tau, c, work, olwork, err)
+
4851 logical,
intent(in) :: lside, trans
+
4852 complex(real64),
intent(in),
dimension(:,:) :: a
+
4853 complex(real64),
intent(in),
dimension(:) :: tau
+
4854 complex(real64),
intent(inout),
dimension(:,:) :: c
+
4855 complex(real64),
intent(out),
target,
dimension(:),
optional :: work
+
4856 integer(int32),
intent(out),
optional :: olwork
+
4857 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4860 module subroutine mult_lq_vec(trans, a, tau, c, work, olwork, err)
+
4861 logical,
intent(in) :: trans
+
4862 real(real64),
intent(in),
dimension(:,:) :: a
+
4863 real(real64),
intent(in),
dimension(:) :: tau
+
4864 real(real64),
intent(inout),
dimension(:) :: c
+
4865 real(real64),
intent(out),
target,
dimension(:),
optional :: work
+
4866 integer(int32),
intent(out),
optional :: olwork
+
4867 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4870 module subroutine mult_lq_vec_cmplx(trans, a, tau, c, work, olwork, err)
+
4871 logical,
intent(in) :: trans
+
4872 complex(real64),
intent(in),
dimension(:,:) :: a
+
4873 complex(real64),
intent(in),
dimension(:) :: tau
+
4874 complex(real64),
intent(inout),
dimension(:) :: c
+
4875 complex(real64),
intent(out),
target,
dimension(:),
optional :: work
+
4876 integer(int32),
intent(out),
optional :: olwork
+
4877 class(errors),
intent(inout),
optional,
target :: err
+
+
+
+
+
+
+
+
4885 module subroutine solve_tri_mtx(lside, upper, trans, nounit, alpha, a, b, err)
+
4886 logical,
intent(in) :: lside, upper, trans, nounit
+
4887 real(real64),
intent(in) :: alpha
+
4888 real(real64),
intent(in),
dimension(:,:) :: a
+
4889 real(real64),
intent(inout),
dimension(:,:) :: b
+
4890 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4893 module subroutine solve_tri_mtx_cmplx(lside, upper, trans, nounit, alpha, a, b, err)
+
4894 logical,
intent(in) :: lside, upper, trans, nounit
+
4895 complex(real64),
intent(in) :: alpha
+
4896 complex(real64),
intent(in),
dimension(:,:) :: a
+
4897 complex(real64),
intent(inout),
dimension(:,:) :: b
+
4898 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4901 module subroutine solve_tri_vec(upper, trans, nounit, a, x, err)
+
4902 logical,
intent(in) :: upper, trans, nounit
+
4903 real(real64),
intent(in),
dimension(:,:) :: a
+
4904 real(real64),
intent(inout),
dimension(:) :: x
+
4905 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4908 module subroutine solve_tri_vec_cmplx(upper, trans, nounit, a, x, err)
+
4909 logical,
intent(in) :: upper, trans, nounit
+
4910 complex(real64),
intent(in),
dimension(:,:) :: a
+
4911 complex(real64),
intent(inout),
dimension(:) :: x
+
4912 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4915 module subroutine solve_lu_mtx(a, ipvt, b, err)
+
4916 real(real64),
intent(in),
dimension(:,:) :: a
+
4917 integer(int32),
intent(in),
dimension(:) :: ipvt
+
4918 real(real64),
intent(inout),
dimension(:,:) :: b
+
4919 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4922 module subroutine solve_lu_mtx_cmplx(a, ipvt, b, err)
+
4923 complex(real64),
intent(in),
dimension(:,:) :: a
+
4924 integer(int32),
intent(in),
dimension(:) :: ipvt
+
4925 complex(real64),
intent(inout),
dimension(:,:) :: b
+
4926 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4929 module subroutine solve_lu_vec(a, ipvt, b, err)
+
4930 real(real64),
intent(in),
dimension(:,:) :: a
+
4931 integer(int32),
intent(in),
dimension(:) :: ipvt
+
4932 real(real64),
intent(inout),
dimension(:) :: b
+
4933 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4936 module subroutine solve_lu_vec_cmplx(a, ipvt, b, err)
+
4937 complex(real64),
intent(in),
dimension(:,:) :: a
+
4938 integer(int32),
intent(in),
dimension(:) :: ipvt
+
4939 complex(real64),
intent(inout),
dimension(:) :: b
+
4940 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4943 module subroutine solve_qr_no_pivot_mtx(a, tau, b, work, olwork, err)
+
4944 real(real64),
intent(inout),
dimension(:,:) :: a, b
+
4945 real(real64),
intent(in),
dimension(:) :: tau
+
4946 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
4947 integer(int32),
intent(out),
optional :: olwork
+
4948 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4951 module subroutine solve_qr_no_pivot_mtx_cmplx(a, tau, b, work, olwork, err)
+
4952 complex(real64),
intent(inout),
dimension(:,:) :: a, b
+
4953 complex(real64),
intent(in),
dimension(:) :: tau
+
4954 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
4955 integer(int32),
intent(out),
optional :: olwork
+
4956 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4959 module subroutine solve_qr_no_pivot_vec(a, tau, b, work, olwork, err)
+
4960 real(real64),
intent(inout),
dimension(:,:) :: a
+
4961 real(real64),
intent(in),
dimension(:) :: tau
+
4962 real(real64),
intent(inout),
dimension(:) :: b
+
4963 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
4964 integer(int32),
intent(out),
optional :: olwork
+
4965 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4968 module subroutine solve_qr_no_pivot_vec_cmplx(a, tau, b, work, olwork, err)
+
4969 complex(real64),
intent(inout),
dimension(:,:) :: a
+
4970 complex(real64),
intent(in),
dimension(:) :: tau
+
4971 complex(real64),
intent(inout),
dimension(:) :: b
+
4972 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
4973 integer(int32),
intent(out),
optional :: olwork
+
4974 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4977 module subroutine solve_qr_pivot_mtx(a, tau, jpvt, b, work, olwork, err)
+
4978 real(real64),
intent(inout),
dimension(:,:) :: a
+
4979 real(real64),
intent(in),
dimension(:) :: tau
+
4980 integer(int32),
intent(in),
dimension(:) :: jpvt
+
4981 real(real64),
intent(inout),
dimension(:,:) :: b
+
4982 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
4983 integer(int32),
intent(out),
optional :: olwork
+
4984 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4987 module subroutine solve_qr_pivot_mtx_cmplx(a, tau, jpvt, b, work, olwork, err)
+
4988 complex(real64),
intent(inout),
dimension(:,:) :: a
+
4989 complex(real64),
intent(in),
dimension(:) :: tau
+
4990 integer(int32),
intent(in),
dimension(:) :: jpvt
+
4991 complex(real64),
intent(inout),
dimension(:,:) :: b
+
4992 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
4993 integer(int32),
intent(out),
optional :: olwork
+
4994 class(errors),
intent(inout),
optional,
target :: err
+
+
+
4997 module subroutine solve_qr_pivot_vec(a, tau, jpvt, b, work, olwork, err)
+
4998 real(real64),
intent(inout),
dimension(:,:) :: a
+
4999 real(real64),
intent(in),
dimension(:) :: tau
+
5000 integer(int32),
intent(in),
dimension(:) :: jpvt
+
5001 real(real64),
intent(inout),
dimension(:) :: b
+
5002 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
5003 integer(int32),
intent(out),
optional :: olwork
+
5004 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5007 module subroutine solve_qr_pivot_vec_cmplx(a, tau, jpvt, b, work, olwork, err)
+
5008 complex(real64),
intent(inout),
dimension(:,:) :: a
+
5009 complex(real64),
intent(in),
dimension(:) :: tau
+
5010 integer(int32),
intent(in),
dimension(:) :: jpvt
+
5011 complex(real64),
intent(inout),
dimension(:) :: b
+
5012 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
5013 integer(int32),
intent(out),
optional :: olwork
+
5014 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5017 module subroutine solve_cholesky_mtx(upper, a, b, err)
+
5018 logical,
intent(in) :: upper
+
5019 real(real64),
intent(in),
dimension(:,:) :: a
+
5020 real(real64),
intent(inout),
dimension(:,:) :: b
+
5021 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5024 module subroutine solve_cholesky_mtx_cmplx(upper, a, b, err)
+
5025 logical,
intent(in) :: upper
+
5026 complex(real64),
intent(in),
dimension(:,:) :: a
+
5027 complex(real64),
intent(inout),
dimension(:,:) :: b
+
5028 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5031 module subroutine solve_cholesky_vec(upper, a, b, err)
+
5032 logical,
intent(in) :: upper
+
5033 real(real64),
intent(in),
dimension(:,:) :: a
+
5034 real(real64),
intent(inout),
dimension(:) :: b
+
5035 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5038 module subroutine solve_cholesky_vec_cmplx(upper, a, b, err)
+
5039 logical,
intent(in) :: upper
+
5040 complex(real64),
intent(in),
dimension(:,:) :: a
+
5041 complex(real64),
intent(inout),
dimension(:) :: b
+
5042 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5045 module subroutine solve_least_squares_mtx(a, b, work, olwork, err)
+
5046 real(real64),
intent(inout),
dimension(:,:) :: a, b
+
5047 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
5048 integer(int32),
intent(out),
optional :: olwork
+
5049 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5052 module subroutine solve_least_squares_mtx_cmplx(a, b, work, olwork, err)
+
5053 complex(real64),
intent(inout),
dimension(:,:) :: a, b
+
5054 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
5055 integer(int32),
intent(out),
optional :: olwork
+
5056 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5059 module subroutine solve_least_squares_vec(a, b, work, olwork, err)
+
5060 real(real64),
intent(inout),
dimension(:,:) :: a
+
5061 real(real64),
intent(inout),
dimension(:) :: b
+
5062 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
5063 integer(int32),
intent(out),
optional :: olwork
+
5064 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5067 module subroutine solve_least_squares_vec_cmplx(a, b, work, olwork, err)
+
5068 complex(real64),
intent(inout),
dimension(:,:) :: a
+
5069 complex(real64),
intent(inout),
dimension(:) :: b
+
5070 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
5071 integer(int32),
intent(out),
optional :: olwork
+
5072 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5075 module subroutine solve_least_squares_mtx_pvt(a, b, ipvt, arnk, work, olwork, err)
+
5076 real(real64),
intent(inout),
dimension(:,:) :: a, b
+
5077 integer(int32),
intent(inout),
target,
optional,
dimension(:) :: ipvt
+
5078 integer(int32),
intent(out),
optional :: arnk
+
5079 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
5080 integer(int32),
intent(out),
optional :: olwork
+
5081 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5084 module subroutine solve_least_squares_mtx_pvt_cmplx(a, b, ipvt, arnk, &
+
5085 work, olwork, rwork, err)
+
5086 complex(real64),
intent(inout),
dimension(:,:) :: a, b
+
5087 integer(int32),
intent(inout),
target,
optional,
dimension(:) :: ipvt
+
5088 integer(int32),
intent(out),
optional :: arnk
+
5089 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
5090 integer(int32),
intent(out),
optional :: olwork
+
5091 real(real64),
intent(out),
target,
optional,
dimension(:) :: rwork
+
5092 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5095 module subroutine solve_least_squares_vec_pvt(a, b, ipvt, arnk, work, olwork, err)
+
5096 real(real64),
intent(inout),
dimension(:,:) :: a
+
5097 real(real64),
intent(inout),
dimension(:) :: b
+
5098 integer(int32),
intent(inout),
target,
optional,
dimension(:) :: ipvt
+
5099 integer(int32),
intent(out),
optional :: arnk
+
5100 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
5101 integer(int32),
intent(out),
optional :: olwork
+
5102 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5105 module subroutine solve_least_squares_vec_pvt_cmplx(a, b, ipvt, arnk, &
+
5106 work, olwork, rwork, err)
+
5107 complex(real64),
intent(inout),
dimension(:,:) :: a
+
5108 complex(real64),
intent(inout),
dimension(:) :: b
+
5109 integer(int32),
intent(inout),
target,
optional,
dimension(:) :: ipvt
+
5110 integer(int32),
intent(out),
optional :: arnk
+
5111 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
5112 integer(int32),
intent(out),
optional :: olwork
+
5113 real(real64),
intent(out),
target,
optional,
dimension(:) :: rwork
+
5114 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5117 module subroutine solve_least_squares_mtx_svd(a, b, s, arnk, work, olwork, err)
+
5118 real(real64),
intent(inout),
dimension(:,:) :: a, b
+
5119 integer(int32),
intent(out),
optional :: arnk
+
5120 real(real64),
intent(out),
target,
optional,
dimension(:) :: work, s
+
5121 integer(int32),
intent(out),
optional :: olwork
+
5122 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5125 module subroutine solve_least_squares_mtx_svd_cmplx(a, b, s, arnk, work, &
+
+
5127 complex(real64),
intent(inout),
dimension(:,:) :: a, b
+
5128 integer(int32),
intent(out),
optional :: arnk
+
5129 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
5130 real(real64),
intent(out),
target,
optional,
dimension(:) :: rwork, s
+
5131 integer(int32),
intent(out),
optional :: olwork
+
5132 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5135 module subroutine solve_least_squares_vec_svd(a, b, s, arnk, work, olwork, err)
+
5136 real(real64),
intent(inout),
dimension(:,:) :: a
+
5137 real(real64),
intent(inout),
dimension(:) :: b
+
5138 integer(int32),
intent(out),
optional :: arnk
+
5139 real(real64),
intent(out),
target,
optional,
dimension(:) :: work, s
+
5140 integer(int32),
intent(out),
optional :: olwork
+
5141 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5144 module subroutine solve_least_squares_vec_svd_cmplx(a, b, s, arnk, work, &
+
+
5146 complex(real64),
intent(inout),
dimension(:,:) :: a
+
5147 complex(real64),
intent(inout),
dimension(:) :: b
+
5148 integer(int32),
intent(out),
optional :: arnk
+
5149 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
5150 real(real64),
intent(out),
target,
optional,
dimension(:) :: rwork, s
+
5151 integer(int32),
intent(out),
optional :: olwork
+
5152 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5155 module subroutine mtx_inverse_dbl(a, iwork, work, olwork, err)
+
5156 real(real64),
intent(inout),
dimension(:,:) :: a
+
5157 integer(int32),
intent(out),
target,
optional,
dimension(:) :: iwork
+
5158 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
5159 integer(int32),
intent(out),
optional :: olwork
+
5160 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5163 module subroutine mtx_inverse_cmplx(a, iwork, work, olwork, err)
+
5164 complex(real64),
intent(inout),
dimension(:,:) :: a
+
5165 integer(int32),
intent(out),
target,
optional,
dimension(:) :: iwork
+
5166 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
5167 integer(int32),
intent(out),
optional :: olwork
+
5168 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5171 module subroutine mtx_pinverse_dbl(a, ainv, tol, work, olwork, err)
+
5172 real(real64),
intent(inout),
dimension(:,:) :: a
+
5173 real(real64),
intent(out),
dimension(:,:) :: ainv
+
5174 real(real64),
intent(in),
optional :: tol
+
5175 real(real64),
intent(out),
target,
dimension(:),
optional :: work
+
5176 integer(int32),
intent(out),
optional :: olwork
+
5177 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5180 module subroutine mtx_pinverse_cmplx(a, ainv, tol, work, olwork, rwork, err)
+
5181 complex(real64),
intent(inout),
dimension(:,:) :: a
+
5182 complex(real64),
intent(out),
dimension(:,:) :: ainv
+
5183 real(real64),
intent(in),
optional :: tol
+
5184 complex(real64),
intent(out),
target,
dimension(:),
optional :: work
+
5185 integer(int32),
intent(out),
optional :: olwork
+
5186 real(real64),
intent(out),
target,
dimension(:),
optional :: rwork
+
5187 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5190 module subroutine solve_lq_mtx(a, tau, b, work, olwork, err)
+
5191 real(real64),
intent(in),
dimension(:,:) :: a
+
5192 real(real64),
intent(in),
dimension(:) :: tau
+
5193 real(real64),
intent(inout),
dimension(:,:) :: b
+
5194 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
5195 integer(int32),
intent(out),
optional :: olwork
+
5196 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5199 module subroutine solve_lq_mtx_cmplx(a, tau, b, work, olwork, err)
+
5200 complex(real64),
intent(in),
dimension(:,:) :: a
+
5201 complex(real64),
intent(in),
dimension(:) :: tau
+
5202 complex(real64),
intent(inout),
dimension(:,:) :: b
+
5203 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
5204 integer(int32),
intent(out),
optional :: olwork
+
5205 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5208 module subroutine solve_lq_vec(a, tau, b, work, olwork, err)
+
5209 real(real64),
intent(in),
dimension(:,:) :: a
+
5210 real(real64),
intent(in),
dimension(:) :: tau
+
5211 real(real64),
intent(inout),
dimension(:) :: b
+
5212 real(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
5213 integer(int32),
intent(out),
optional :: olwork
+
5214 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5217 module subroutine solve_lq_vec_cmplx(a, tau, b, work, olwork, err)
+
5218 complex(real64),
intent(in),
dimension(:,:) :: a
+
5219 complex(real64),
intent(in),
dimension(:) :: tau
+
5220 complex(real64),
intent(inout),
dimension(:) :: b
+
5221 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
5222 integer(int32),
intent(out),
optional :: olwork
+
5223 class(errors),
intent(inout),
optional,
target :: err
+
+
+
+
+
+
+
+
5231 module subroutine eigen_symm(vecs, a, vals, work, olwork, err)
+
5232 logical,
intent(in) :: vecs
+
5233 real(real64),
intent(inout),
dimension(:,:) :: a
+
5234 real(real64),
intent(out),
dimension(:) :: vals
+
5235 real(real64),
intent(out),
pointer,
optional,
dimension(:) :: work
+
5236 integer(int32),
intent(out),
optional :: olwork
+
5237 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5240 module subroutine eigen_asymm(a, vals, vecs, work, olwork, err)
+
5241 real(real64),
intent(inout),
dimension(:,:) :: a
+
5242 complex(real64),
intent(out),
dimension(:) :: vals
+
5243 complex(real64),
intent(out),
optional,
dimension(:,:) :: vecs
+
5244 real(real64),
intent(out),
pointer,
optional,
dimension(:) :: work
+
5245 integer(int32),
intent(out),
optional :: olwork
+
5246 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5249 module subroutine eigen_gen(a, b, alpha, beta, vecs, work, olwork, err)
+
5250 real(real64),
intent(inout),
dimension(:,:) :: a, b
+
5251 complex(real64),
intent(out),
dimension(:) :: alpha
+
5252 real(real64),
intent(out),
optional,
dimension(:) :: beta
+
5253 complex(real64),
intent(out),
optional,
dimension(:,:) :: vecs
+
5254 real(real64),
intent(out),
optional,
pointer,
dimension(:) :: work
+
5255 integer(int32),
intent(out),
optional :: olwork
+
5256 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5259 module subroutine eigen_cmplx(a, vals, vecs, work, olwork, rwork, err)
+
5260 complex(real64),
intent(inout),
dimension(:,:) :: a
+
5261 complex(real64),
intent(out),
dimension(:) :: vals
+
5262 complex(real64),
intent(out),
optional,
dimension(:,:) :: vecs
+
5263 complex(real64),
intent(out),
target,
optional,
dimension(:) :: work
+
5264 real(real64),
intent(out),
target,
optional,
dimension(:) :: rwork
+
5265 integer(int32),
intent(out),
optional :: olwork
+
5266 class(errors),
intent(inout),
optional,
target :: err
+
+
+
+
+
+
+
+
5274 module subroutine sort_dbl_array(x, ascend)
+
5275 real(real64),
intent(inout),
dimension(:) :: x
+
5276 logical,
intent(in),
optional :: ascend
+
+
+
5279 module subroutine sort_dbl_array_ind(x, ind, ascend, err)
+
5280 real(real64),
intent(inout),
dimension(:) :: x
+
5281 integer(int32),
intent(inout),
dimension(:) :: ind
+
5282 logical,
intent(in),
optional :: ascend
+
5283 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5286 module subroutine sort_cmplx_array(x, ascend)
+
5287 complex(real64),
intent(inout),
dimension(:) :: x
+
5288 logical,
intent(in),
optional :: ascend
+
+
+
5291 module subroutine sort_cmplx_array_ind(x, ind, ascend, err)
+
5292 complex(real64),
intent(inout),
dimension(:) :: x
+
5293 integer(int32),
intent(inout),
dimension(:) :: ind
+
5294 logical,
intent(in),
optional :: ascend
+
5295 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5298 module subroutine sort_eigen_cmplx(vals, vecs, ascend, err)
+
5299 complex(real64),
intent(inout),
dimension(:) :: vals
+
5300 complex(real64),
intent(inout),
dimension(:,:) :: vecs
+
5301 logical,
intent(in),
optional :: ascend
+
5302 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5305 module subroutine sort_eigen_dbl(vals, vecs, ascend, err)
+
5306 real(real64),
intent(inout),
dimension(:) :: vals
+
5307 real(real64),
intent(inout),
dimension(:,:) :: vecs
+
5308 logical,
intent(in),
optional :: ascend
+
5309 class(errors),
intent(inout),
optional,
target :: err
+
-
-
-
-
-
5325 interface nonzero_count
-
5326 module procedure :: nonzero_count_csr
-
5327 module procedure :: nonzero_count_msr
+
5312 module subroutine sort_int32_array(x, ascend)
+
5313 integer(int32),
intent(inout),
dimension(:) :: x
+
5314 logical,
intent(in),
optional :: ascend
+
+
+
5317 module subroutine sort_int32_array_ind(x, ind, ascend, err)
+
5318 integer(int32),
intent(inout),
dimension(:) :: x
+
5319 integer(int32),
intent(inout),
dimension(:) :: ind
+
5320 logical,
intent(in),
optional :: ascend
+
5321 class(errors),
intent(inout),
optional,
target :: err
+
+
+
+
+
+
+
+
5338 interface nonzero_count
+
5339 module procedure :: nonzero_count_csr
+
5340 module procedure :: nonzero_count_msr
-
-
-
-
-
5344 module procedure :: csr_size
-
5345 module procedure :: msr_size
+
+
+
+
+
5357 module procedure :: csr_size
+
5358 module procedure :: msr_size
-
-
-
-
-
5370 module procedure :: csr_mtx_mtx_mult
-
5371 module procedure :: csr_mtx_vec_mult
+
+
+
+
+
5383 module procedure :: csr_mtx_mtx_mult
+
5384 module procedure :: csr_mtx_vec_mult
-
-
-
-
5385 interface operator(+)
-
5386 module procedure :: csr_mtx_add
+
+
+
+
5398 interface operator(+)
+
5399 module procedure :: csr_mtx_add
-
-
-
-
5400 interface operator(-)
-
5401 module procedure :: csr_mtx_sub
+
+
+
+
5413 interface operator(-)
+
5414 module procedure :: csr_mtx_sub
-
-
-
-
5416 interface operator(*)
-
5417 module procedure :: csr_mtx_mult_scalar_1
-
5418 module procedure :: csr_mtx_mult_scalar_2
+
+
+
+
5429 interface operator(*)
+
5430 module procedure :: csr_mtx_mult_scalar_1
+
5431 module procedure :: csr_mtx_mult_scalar_2
-
-
-
-
5432 interface operator(/)
-
5433 module procedure :: csr_mtx_divide_scalar_1
-
-
-
-
5437 interface assignment(=)
-
5438 module procedure :: csr_assign_to_dense
-
5439 module procedure :: dense_assign_to_csr
-
5440 module procedure :: msr_assign_to_dense
-
5441 module procedure :: dense_assign_to_msr
-
5442 module procedure :: csr_assign_to_msr
-
5443 module procedure :: msr_assign_to_csr
-
-
-
-
-
5456 module procedure :: csr_transpose
+
+
+
+
5445 interface operator(/)
+
5446 module procedure :: csr_mtx_divide_scalar_1
+
+
+
5450 interface assignment(=)
+
5451 module procedure :: csr_assign_to_dense
+
5452 module procedure :: dense_assign_to_csr
+
5453 module procedure :: msr_assign_to_dense
+
5454 module procedure :: dense_assign_to_msr
+
5455 module procedure :: csr_assign_to_msr
+
5456 module procedure :: msr_assign_to_csr
-
-
5483 interface sparse_direct_solve
-
5484 module procedure :: csr_solve_sparse_direct
+
+
+
5469 module procedure :: csr_transpose
+
+
+
+
+
5496 interface sparse_direct_solve
+
5497 module procedure :: csr_solve_sparse_direct
-
-
-
-
5533 interface pgmres_solver
-
5534 module procedure :: csr_pgmres_solver
+
+
+
+
5546 interface pgmres_solver
+
5547 module procedure :: csr_pgmres_solver
-
-
-
-
5538 module function csr_get_element(this, i, j) result(rst)
-
5539 class(csr_matrix),
intent(in) :: this
-
5540 integer(int32),
intent(in) :: i, j
-
-
-
5543 pure module function csr_size(x, dim) result(rst)
-
5544 class(csr_matrix),
intent(in) :: x
-
5545 integer(int32),
intent(in) :: dim
-
5546 integer(int32) :: rst
-
-
-
5549 module function create_empty_csr_matrix(m, n, nnz, err) result(rst)
-
5550 integer(int32),
intent(in) :: m, n, nnz
-
5551 class(errors),
intent(inout),
optional,
target :: err
-
5552 type(csr_matrix) :: rst
-
-
-
5555 pure module function nonzero_count_csr(x) result(rst)
-
5556 class(csr_matrix),
intent(in) :: x
-
5557 integer(int32) :: rst
-
-
-
5560 module function dense_to_csr(a, err) result(rst)
-
5561 real(real64),
intent(in),
dimension(:,:) :: a
-
5562 class(errors),
intent(inout),
optional,
target :: err
-
5563 type(csr_matrix) :: rst
-
-
-
5566 module subroutine csr_to_dense(a, x, err)
-
5567 class(csr_matrix),
intent(in) :: a
-
5568 real(real64),
intent(out),
dimension(:,:) :: x
-
5569 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5572 module function csr_mtx_mtx_mult(a, b) result(rst)
-
5573 class(csr_matrix),
intent(in) :: a, b
-
5574 type(csr_matrix) :: rst
-
-
-
5577 module function csr_mtx_vec_mult(a, b) result(rst)
-
5578 class(csr_matrix),
intent(in) :: a
-
5579 real(real64),
intent(in),
dimension(:) :: b
-
5580 real(real64),
allocatable,
dimension(:) :: rst
-
-
-
5583 module function csr_mtx_add(a, b) result(rst)
-
5584 class(csr_matrix),
intent(in) :: a, b
-
5585 type(csr_matrix) :: rst
-
-
-
5588 module function csr_mtx_sub(a, b) result(rst)
-
5589 class(csr_matrix),
intent(in) :: a, b
-
5590 type(csr_matrix) :: rst
-
-
-
5593 module function csr_mtx_mult_scalar_1(a, b) result(rst)
-
5594 class(csr_matrix),
intent(in) :: a
-
5595 real(real64),
intent(in) :: b
-
5596 type(csr_matrix) :: rst
-
-
-
5599 module function csr_mtx_mult_scalar_2(a, b) result(rst)
-
5600 real(real64),
intent(in) :: a
-
5601 class(csr_matrix),
intent(in) :: b
-
5602 type(csr_matrix) :: rst
-
-
-
5605 module function csr_mtx_divide_scalar_1(a, b) result(rst)
-
5606 class(csr_matrix),
intent(in) :: a
-
5607 real(real64),
intent(in) :: b
-
5608 type(csr_matrix) :: rst
-
-
-
5611 module function csr_transpose(a) result(rst)
-
5612 class(csr_matrix),
intent(in) :: a
-
5613 type(csr_matrix) :: rst
-
-
-
5616 module subroutine extract_diagonal_csr(a, diag, err)
-
5617 class(csr_matrix),
intent(in) :: a
-
5618 real(real64),
intent(out),
dimension(:) :: diag
-
5619 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5622 module subroutine csr_solve_sparse_direct(a, b, x, droptol, err)
-
5623 class(csr_matrix),
intent(in) :: a
-
5624 real(real64),
intent(in),
dimension(:) :: b
-
5625 real(real64),
intent(out),
dimension(:) :: x
-
5626 real(real64),
intent(in),
optional :: droptol
-
5627 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5630 module function diag_to_csr(a, err) result(rst)
-
5631 real(real64),
intent(in),
dimension(:) :: a
+
+
+
+
5551 module function csr_get_element(this, i, j) result(rst)
+
5552 class(csr_matrix),
intent(in) :: this
+
5553 integer(int32),
intent(in) :: i, j
+
+
+
5556 pure module function csr_size(x, dim) result(rst)
+
5557 class(csr_matrix),
intent(in) :: x
+
5558 integer(int32),
intent(in) :: dim
+
5559 integer(int32) :: rst
+
+
+
5562 module function create_empty_csr_matrix(m, n, nnz, err) result(rst)
+
5563 integer(int32),
intent(in) :: m, n, nnz
+
5564 class(errors),
intent(inout),
optional,
target :: err
+
5565 type(csr_matrix) :: rst
+
+
+
5568 pure module function nonzero_count_csr(x) result(rst)
+
5569 class(csr_matrix),
intent(in) :: x
+
5570 integer(int32) :: rst
+
+
+
5573 module function dense_to_csr(a, err) result(rst)
+
5574 real(real64),
intent(in),
dimension(:,:) :: a
+
5575 class(errors),
intent(inout),
optional,
target :: err
+
5576 type(csr_matrix) :: rst
+
+
+
5579 module subroutine csr_to_dense(a, x, err)
+
5580 class(csr_matrix),
intent(in) :: a
+
5581 real(real64),
intent(out),
dimension(:,:) :: x
+
5582 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5585 module function csr_mtx_mtx_mult(a, b) result(rst)
+
5586 class(csr_matrix),
intent(in) :: a, b
+
5587 type(csr_matrix) :: rst
+
+
+
5590 module function csr_mtx_vec_mult(a, b) result(rst)
+
5591 class(csr_matrix),
intent(in) :: a
+
5592 real(real64),
intent(in),
dimension(:) :: b
+
5593 real(real64),
allocatable,
dimension(:) :: rst
+
+
+
5596 module function csr_mtx_add(a, b) result(rst)
+
5597 class(csr_matrix),
intent(in) :: a, b
+
5598 type(csr_matrix) :: rst
+
+
+
5601 module function csr_mtx_sub(a, b) result(rst)
+
5602 class(csr_matrix),
intent(in) :: a, b
+
5603 type(csr_matrix) :: rst
+
+
+
5606 module function csr_mtx_mult_scalar_1(a, b) result(rst)
+
5607 class(csr_matrix),
intent(in) :: a
+
5608 real(real64),
intent(in) :: b
+
5609 type(csr_matrix) :: rst
+
+
+
5612 module function csr_mtx_mult_scalar_2(a, b) result(rst)
+
5613 real(real64),
intent(in) :: a
+
5614 class(csr_matrix),
intent(in) :: b
+
5615 type(csr_matrix) :: rst
+
+
+
5618 module function csr_mtx_divide_scalar_1(a, b) result(rst)
+
5619 class(csr_matrix),
intent(in) :: a
+
5620 real(real64),
intent(in) :: b
+
5621 type(csr_matrix) :: rst
+
+
+
5624 module function csr_transpose(a) result(rst)
+
5625 class(csr_matrix),
intent(in) :: a
+
5626 type(csr_matrix) :: rst
+
+
+
5629 module subroutine extract_diagonal_csr(a, diag, err)
+
5630 class(csr_matrix),
intent(in) :: a
+
5631 real(real64),
intent(out),
dimension(:) :: diag
5632 class(errors),
intent(inout),
optional,
target :: err
-
5633 type(csr_matrix) :: rst
-
-
-
5636 module function banded_to_csr(m, ml, mu, a, err) result(rst)
-
5637 integer(int32),
intent(in) :: m, ml, mu
-
5638 real(real64),
intent(in),
dimension(:,:) :: a
-
5639 class(errors),
intent(inout),
optional,
target :: err
-
5640 type(csr_matrix) :: rst
-
+
+
+
5635 module subroutine csr_solve_sparse_direct(a, b, x, droptol, err)
+
5636 class(csr_matrix),
intent(in) :: a
+
5637 real(real64),
intent(in),
dimension(:) :: b
+
5638 real(real64),
intent(out),
dimension(:) :: x
+
5639 real(real64),
intent(in),
optional :: droptol
+
5640 class(errors),
intent(inout),
optional,
target :: err
+
-
5643 module subroutine csr_assign_to_dense(dense, sparse)
-
5644 real(real64),
intent(out),
dimension(:,:) :: dense
-
5645 class(csr_matrix),
intent(in) :: sparse
-
-
-
5648 module subroutine dense_assign_to_csr(sparse, dense)
-
5649 type(csr_matrix),
intent(out) :: sparse
-
5650 real(real64),
intent(in),
dimension(:,:) :: dense
-
-
-
5653 pure module function msr_size(x, dim) result(rst)
-
5654 class(msr_matrix),
intent(in) :: x
-
5655 integer(int32),
intent(in) :: dim
-
5656 integer(int32) :: rst
-
-
-
5659 pure module function nonzero_count_msr(x) result(rst)
-
5660 class(msr_matrix),
intent(in) :: x
-
5661 integer(int32) :: rst
-
-
-
5664 module function create_empty_msr_matrix(m, n, nnz, err) result(rst)
-
5665 integer(int32),
intent(in) :: m, n, nnz
-
5666 class(errors),
intent(inout),
optional,
target :: err
-
5667 type(msr_matrix) :: rst
-
-
-
5670 module function csr_to_msr(a, err) result(rst)
-
5671 class(csr_matrix),
intent(in) :: a
-
5672 class(errors),
intent(inout),
optional,
target :: err
-
5673 type(msr_matrix) :: rst
-
-
-
5676 module function msr_to_csr(a, err) result(rst)
-
5677 class(msr_matrix),
intent(in) :: a
-
5678 class(errors),
intent(inout),
optional,
target :: err
-
5679 type(csr_matrix) :: rst
-
-
-
5682 module function dense_to_msr(a, err) result(rst)
-
5683 real(real64),
intent(in),
dimension(:,:) :: a
-
5684 class(errors),
intent(inout),
optional,
target :: err
-
5685 type(msr_matrix) :: rst
-
-
-
5688 module subroutine msr_to_dense(a, x, err)
-
+
5643 module function diag_to_csr(a, err) result(rst)
+
5644 real(real64),
intent(in),
dimension(:) :: a
+
5645 class(errors),
intent(inout),
optional,
target :: err
+
5646 type(csr_matrix) :: rst
+
+
+
5649 module function banded_to_csr(m, ml, mu, a, err) result(rst)
+
5650 integer(int32),
intent(in) :: m, ml, mu
+
5651 real(real64),
intent(in),
dimension(:,:) :: a
+
5652 class(errors),
intent(inout),
optional,
target :: err
+
5653 type(csr_matrix) :: rst
+
+
+
5656 module subroutine csr_assign_to_dense(dense, sparse)
+
5657 real(real64),
intent(out),
dimension(:,:) :: dense
+
5658 class(csr_matrix),
intent(in) :: sparse
+
+
+
5661 module subroutine dense_assign_to_csr(sparse, dense)
+
5662 type(csr_matrix),
intent(out) :: sparse
+
5663 real(real64),
intent(in),
dimension(:,:) :: dense
+
+
+
5666 pure module function msr_size(x, dim) result(rst)
+
5667 class(msr_matrix),
intent(in) :: x
+
5668 integer(int32),
intent(in) :: dim
+
5669 integer(int32) :: rst
+
+
+
5672 pure module function nonzero_count_msr(x) result(rst)
+
5673 class(msr_matrix),
intent(in) :: x
+
5674 integer(int32) :: rst
+
+
+
5677 module function create_empty_msr_matrix(m, n, nnz, err) result(rst)
+
5678 integer(int32),
intent(in) :: m, n, nnz
+
5679 class(errors),
intent(inout),
optional,
target :: err
+
5680 type(msr_matrix) :: rst
+
+
+
5683 module function csr_to_msr(a, err) result(rst)
+
5684 class(csr_matrix),
intent(in) :: a
+
5685 class(errors),
intent(inout),
optional,
target :: err
+
5686 type(msr_matrix) :: rst
+
+
+
5689 module function msr_to_csr(a, err) result(rst)
5690 class(msr_matrix),
intent(in) :: a
-
5691 real(real64),
intent(out),
dimension(:,:) :: x
-
5692 class(errors),
intent(inout),
optional,
target :: err
-
+
5691 class(errors),
intent(inout),
optional,
target :: err
+
5692 type(csr_matrix) :: rst
+
-
5695 module subroutine msr_assign_to_dense(dense, msr)
-
5696 real(real64),
intent(out),
dimension(:,:) :: dense
-
5697 class(msr_matrix),
intent(in) :: msr
-
-
-
5700 module subroutine dense_assign_to_msr(msr, dense)
-
5701 type(msr_matrix),
intent(out) :: msr
-
5702 real(real64),
intent(in),
dimension(:,:) :: dense
-
-
-
5705 module subroutine csr_assign_to_msr(msr, csr)
-
5706 type(msr_matrix),
intent(out) :: msr
-
5707 class(csr_matrix),
intent(in) :: csr
-
-
-
5710 module subroutine msr_assign_to_csr(csr, msr)
-
5711 type(csr_matrix),
intent(out) :: csr
-
5712 class(msr_matrix),
intent(in) :: msr
-
-
-
5715 module subroutine csr_lu_factor(a, lu, ju, droptol, err)
-
5716 class(csr_matrix),
intent(in) :: a
-
5717 type(msr_matrix),
intent(out) :: lu
-
5718 integer(int32),
intent(out),
dimension(:) :: ju
-
5719 real(real64),
intent(in),
optional :: droptol
-
5720 class(errors),
intent(inout),
optional,
target :: err
+
5695 module function dense_to_msr(a, err) result(rst)
+
5696 real(real64),
intent(in),
dimension(:,:) :: a
+
5697 class(errors),
intent(inout),
optional,
target :: err
+
5698 type(msr_matrix) :: rst
+
+
+
5701 module subroutine msr_to_dense(a, x, err)
+
+
5703 class(msr_matrix),
intent(in) :: a
+
5704 real(real64),
intent(out),
dimension(:,:) :: x
+
5705 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5708 module subroutine msr_assign_to_dense(dense, msr)
+
5709 real(real64),
intent(out),
dimension(:,:) :: dense
+
5710 class(msr_matrix),
intent(in) :: msr
+
+
+
5713 module subroutine dense_assign_to_msr(msr, dense)
+
5714 type(msr_matrix),
intent(out) :: msr
+
5715 real(real64),
intent(in),
dimension(:,:) :: dense
+
+
+
5718 module subroutine csr_assign_to_msr(msr, csr)
+
5719 type(msr_matrix),
intent(out) :: msr
+
5720 class(csr_matrix),
intent(in) :: csr
-
5723 module subroutine csr_lu_solve(lu, ju, b, x, err)
-
5724 class(msr_matrix),
intent(in) :: lu
-
5725 integer(int32),
intent(in),
dimension(:) :: ju
-
5726 real(real64),
intent(in),
dimension(:) :: b
-
5727 real(real64),
intent(out),
dimension(:) :: x
-
5728 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5731 module subroutine csr_pgmres_solver(a, lu, ju, b, x, im, tol, maxits, &
-
-
5733 class(csr_matrix),
intent(in) :: a
-
5734 class(msr_matrix),
intent(in) :: lu
-
5735 integer(int32),
intent(in),
dimension(:) :: ju
-
5736 real(real64),
intent(inout),
dimension(:) :: b
-
5737 real(real64),
intent(out),
dimension(:) :: x
-
5738 integer(int32),
intent(in),
optional :: im, maxits, iout
-
5739 real(real64),
intent(in),
optional :: tol
-
5740 class(errors),
intent(inout),
optional,
target :: err
-
-
-
5743 module function create_csr_matrix(m, n, rows, cols, vals, err) &
-
-
5745 integer(int32),
intent(in) :: m, n
-
5746 integer(int32),
intent(in),
dimension(:) :: rows, cols
-
5747 real(real64),
intent(in),
dimension(:) :: vals
-
5748 class(errors),
intent(inout),
optional,
target :: err
-
5749 type(csr_matrix) :: rst
-
-
-
-
-
-
Multiplies a banded matrix, A, with a diagonal matrix, B, such that A = alpha * A * B,...
-
Multiplies a banded matrix, A, by a vector x such that alpha * op(A) * x + beta * y = y.
-
Converts a banded matrix stored in dense form to a full matrix.
-
Converts a banded matrix to a dense matrix.
+
5723 module subroutine msr_assign_to_csr(csr, msr)
+
5724 type(csr_matrix),
intent(out) :: csr
+
5725 class(msr_matrix),
intent(in) :: msr
+
+
+
5728 module subroutine csr_lu_factor(a, lu, ju, droptol, err)
+
5729 class(csr_matrix),
intent(in) :: a
+
5730 type(msr_matrix),
intent(out) :: lu
+
5731 integer(int32),
intent(out),
dimension(:) :: ju
+
5732 real(real64),
intent(in),
optional :: droptol
+
5733 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5736 module subroutine csr_lu_solve(lu, ju, b, x, err)
+
5737 class(msr_matrix),
intent(in) :: lu
+
5738 integer(int32),
intent(in),
dimension(:) :: ju
+
5739 real(real64),
intent(in),
dimension(:) :: b
+
5740 real(real64),
intent(out),
dimension(:) :: x
+
5741 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5744 module subroutine csr_pgmres_solver(a, lu, ju, b, x, im, tol, maxits, &
+
+
5746 class(csr_matrix),
intent(in) :: a
+
5747 class(msr_matrix),
intent(in) :: lu
+
5748 integer(int32),
intent(in),
dimension(:) :: ju
+
5749 real(real64),
intent(inout),
dimension(:) :: b
+
5750 real(real64),
intent(out),
dimension(:) :: x
+
5751 integer(int32),
intent(in),
optional :: im, maxits, iout
+
5752 real(real64),
intent(in),
optional :: tol
+
5753 class(errors),
intent(inout),
optional,
target :: err
+
+
+
5756 module function create_csr_matrix(m, n, rows, cols, vals, err) &
+
+
5758 integer(int32),
intent(in) :: m, n
+
5759 integer(int32),
intent(in),
dimension(:) :: rows, cols
+
5760 real(real64),
intent(in),
dimension(:) :: vals
+
5761 class(errors),
intent(inout),
optional,
target :: err
+
5762 type(csr_matrix) :: rst
+
+
+
+
+
+
Multiplies a banded matrix, A, with a diagonal matrix, B, such that A = alpha * A * B,...
+
Multiplies a banded matrix, A, by a vector x such that alpha * op(A) * x + beta * y = y.
+
Converts a banded matrix stored in dense form to a full matrix.
+
Converts a banded matrix to a dense matrix.
Computes the Cholesky factorization of a symmetric, positive definite matrix.
Computes the rank 1 downdate to a Cholesky factored matrix (upper triangular).
Computes the rank 1 update to a Cholesky factored matrix (upper triangular).
-
Converts a dense matrix to a banded matrix.
+
Converts a dense matrix to a banded matrix.
Computes the determinant of a square matrix.
Multiplies a diagonal matrix with another matrix or array.
Computes the eigenvalues, and optionally the eigenvectors, of a matrix.
-
-
+
+
-
Computes the LQ factorization of an M-by-N matrix.
+
Computes the LQ factorization of an M-by-N matrix.
Computes the LU factorization of an M-by-N matrix.
-
Performs sparse matrix multiplication C = A * B.
+
Performs sparse matrix multiplication C = A * B.
Computes the inverse of a square matrix.
Performs the matrix operation: .
Computes the Moore-Penrose pseudo-inverse of a M-by-N matrix using the singular value decomposition o...
Computes the rank of a matrix.
-
Multiplies a general matrix by the orthogonal matrix Q from a LQ factorization.
+
Multiplies a general matrix by the orthogonal matrix Q from a LQ factorization.
Multiplies a general matrix by the orthogonal matrix Q from a QR factorization.
Multiplies a general matrix by the orthogonal matrix Z from an RZ factorization.
-
Determines the number of nonzero entries in a sparse matrix.
-
A preconditioned GMRES solver.
+
Determines the number of nonzero entries in a sparse matrix.
+
A preconditioned GMRES solver.
Computes the QR factorization of an M-by-N matrix.
Computes the rank 1 update to an M-by-N QR factored matrix A (M >= N) where , and such that ....
Performs the rank-1 update to matrix A such that: , where is an M-by-N matrix, is a scalar,...
@@ -2042,16 +2055,16 @@
Solves the overdetermined or underdetermined system of M equations of N unknowns,...
Solves the overdetermined or underdetermined system of M equations of N unknowns using a singular va...
Solves the overdetermined or underdetermined system of M equations of N unknowns....
-
Solves a system of M LQ-factored equations of N unknowns. N must be greater than or equal to M.
+
Solves a system of M LQ-factored equations of N unknowns. N must be greater than or equal to M.
Solves a system of LU-factored equations.
Solves a system of M QR-factored equations of N unknowns.
Solves a triangular system of equations.
-
Provides a direct solution to a square, sparse system.
+
Provides a direct solution to a square, sparse system.
Computes the singular value decomposition of a matrix A. The SVD is defined as: , where is an M-by-M...
Swaps the contents of two arrays.
Computes the trace of a matrix (the sum of the main diagonal elements).
-
Provides the transpose of a sparse matrix.
+
Provides the transpose of a sparse matrix.
Computes the triangular matrix operation: , or , where A is a triangular matrix.
Provides a set of common linear algebra routines.
A sparse matrix stored in compressed sparse row (CSR) format.
diff --git a/docs/html/linalg_8h.html b/docs/html/linalg_8h.html
index cfc62e0..f45570c 100644
--- a/docs/html/linalg_8h.html
+++ b/docs/html/linalg_8h.html
@@ -34,7 +34,7 @@
- linalg 1.8.1
+ linalg 1.8.2
A linear algebra library that provides a user-friendly interface to several BLAS and LAPACK routines.
|
diff --git a/docs/html/linalg_8h_source.html b/docs/html/linalg_8h_source.html
index 8509b3b..af0debb 100644
--- a/docs/html/linalg_8h_source.html
+++ b/docs/html/linalg_8h_source.html
@@ -34,7 +34,7 @@
- linalg 1.8.1
+ linalg 1.8.2
A linear algebra library that provides a user-friendly interface to several BLAS and LAPACK routines.
|
diff --git a/docs/html/linalg__basic_8f90_source.html b/docs/html/linalg__basic_8f90_source.html
index 2fb0713..6e3c648 100644
--- a/docs/html/linalg__basic_8f90_source.html
+++ b/docs/html/linalg__basic_8f90_source.html
@@ -34,7 +34,7 @@
- linalg 1.8.1
+ linalg 1.8.2
A linear algebra library that provides a user-friendly interface to several BLAS and LAPACK routines.
|
diff --git a/docs/html/linalg__eigen_8f90_source.html b/docs/html/linalg__eigen_8f90_source.html
index 4744cd3..7efca74 100644
--- a/docs/html/linalg__eigen_8f90_source.html
+++ b/docs/html/linalg__eigen_8f90_source.html
@@ -34,7 +34,7 @@
- linalg 1.8.1
+ linalg 1.8.2
A linear algebra library that provides a user-friendly interface to several BLAS and LAPACK routines.
|
diff --git a/docs/html/linalg__factor_8f90_source.html b/docs/html/linalg__factor_8f90_source.html
index caddaec..9976d87 100644
--- a/docs/html/linalg__factor_8f90_source.html
+++ b/docs/html/linalg__factor_8f90_source.html
@@ -34,7 +34,7 @@
- linalg 1.8.1
+ linalg 1.8.2
A linear algebra library that provides a user-friendly interface to several BLAS and LAPACK routines.
|
diff --git a/docs/html/linalg__solve_8f90_source.html b/docs/html/linalg__solve_8f90_source.html
index 7707664..990eb94 100644
--- a/docs/html/linalg__solve_8f90_source.html
+++ b/docs/html/linalg__solve_8f90_source.html
@@ -34,7 +34,7 @@
- linalg 1.8.1
+ linalg 1.8.2
A linear algebra library that provides a user-friendly interface to several BLAS and LAPACK routines.
|
diff --git a/docs/html/linalg__sorting_8f90_source.html b/docs/html/linalg__sorting_8f90_source.html
index 106f306..492cfc7 100644
--- a/docs/html/linalg__sorting_8f90_source.html
+++ b/docs/html/linalg__sorting_8f90_source.html
@@ -34,7 +34,7 @@
- linalg 1.8.1
+ linalg 1.8.2
A linear algebra library that provides a user-friendly interface to several BLAS and LAPACK routines.
|
@@ -380,294 +380,543 @@
276100
format(a, i0, a, i0, a, i0, a, i0, a)
-
-
-
-
- 295 recursive subroutine qsort_dbl_ind(ascend, x, ind)
-
- 297 logical,
intent(in) :: ascend
- 298 real(real64),
intent(inout),
dimension(:) :: x
- 299 integer(int32),
intent(inout),
dimension(:) :: ind
-
-
-
-
-
- 305 if (
size(x) > 1)
then
- 306 call dbl_partition_ind(ascend, x, ind, iq)
- 307 call qsort_dbl_ind(ascend, x(:iq-1), ind(:iq-1))
- 308 call qsort_dbl_ind(ascend, x(iq:), ind(iq:))
-
-
-
-
- 328 subroutine dbl_partition_ind(ascend, x, ind, marker)
-
- 330 logical,
intent(in) :: ascend
- 331 real(real64),
intent(inout),
dimension(:) :: x
- 332 integer(int32),
intent(inout),
dimension(:) :: ind
- 333 integer(int32),
intent(out) :: marker
-
-
- 336 integer(int32) :: i, j, itemp
- 337 real(real64) :: temp, pivot
+
+
+ 280 module subroutine sort_int32_array(x, ascend)
+
+ 282 integer(int32),
intent(inout),
dimension(:) :: x
+ 283 logical,
intent(in),
optional :: ascend
+
+
+
+
+
+ 289 if (
present(ascend))
then
+
+
+
+
+
+
+ 296 call qsort_int32(dir, x)
+
+
+
+ 300 module subroutine sort_int32_array_ind(x, ind, ascend, err)
+
+ 302 integer(int32),
intent(inout),
dimension(:) :: x
+ 303 integer(int32),
intent(inout),
dimension(:) :: ind
+ 304 logical,
intent(in),
optional :: ascend
+ 305 class(errors),
intent(inout),
optional,
target :: err
+
+
+ 308 class(errors),
pointer :: errmgr
+ 309 type(errors),
target :: deferr
+ 310 character(len = :),
allocatable :: errmsg
+
+
+
+
+
+ 316 if (
present(err))
then
+
+
+
+
+ 321 if (
present(ascend))
then
+
+
+
+
+
+
+ 328 if (
size(ind) /= n)
then
+ 329 allocate(
character(len = 256) :: errmsg)
+
+ 331 "Expected the tracking array to be of size ", n, &
+ 332 ", but found an array of size ",
size(ind),
"."
+ 333 call errmgr%report_error(
"sort_int32_array_ind", trim(errmsg), &
+
+
+
+
-
-
-
-
-
-
-
-
- 348 if (x(j) <= pivot)
exit
-
-
-
-
- 353 if (x(i) >= pivot)
exit
-
-
-
-
-
-
-
-
-
-
-
- 365 else if (i == j)
then
-
-
-
-
-
-
-
-
-
-
-
-
- 378 if (x(j) >= pivot)
exit
-
-
-
-
- 383 if (x(i) <= pivot)
exit
-
-
-
-
-
-
-
-
-
-
-
- 395 else if (i == j)
then
-
-
-
-
-
-
-
-
-
+ 340 call qsort_int32_ind(dir, x, ind)
+
+
+ 343100
format(a, i0, a, i0, a)
+
+
+
+
+
+ 362 recursive subroutine qsort_dbl_ind(ascend, x, ind)
+
+ 364 logical,
intent(in) :: ascend
+ 365 real(real64),
intent(inout),
dimension(:) :: x
+ 366 integer(int32),
intent(inout),
dimension(:) :: ind
+
+
+
+
+
+ 372 if (
size(x) > 1)
then
+ 373 call dbl_partition_ind(ascend, x, ind, iq)
+ 374 call qsort_dbl_ind(ascend, x(:iq-1), ind(:iq-1))
+ 375 call qsort_dbl_ind(ascend, x(iq:), ind(iq:))
+
+
+
+
+ 395 subroutine dbl_partition_ind(ascend, x, ind, marker)
+
+ 397 logical,
intent(in) :: ascend
+ 398 real(real64),
intent(inout),
dimension(:) :: x
+ 399 integer(int32),
intent(inout),
dimension(:) :: ind
+ 400 integer(int32),
intent(out) :: marker
+
+
+ 403 integer(int32) :: i, j, itemp
+ 404 real(real64) :: temp, pivot
-
- 421 recursive subroutine qsort_cmplx(ascend, x)
-
- 423 logical,
intent(in) :: ascend
- 424 complex(real64),
intent(inout),
dimension(:) :: x
-
-
-
+
+
+
+
+
+
+
+
+
+ 415 if (x(j) <= pivot)
exit
+
+
+
+
+ 420 if (x(i) >= pivot)
exit
+
+
+
+
+
+
+
-
- 430 if (
size(x) > 1)
then
- 431 call cmplx_partition(ascend, x, iq)
- 432 call qsort_cmplx(ascend, x(:iq-1))
- 433 call qsort_cmplx(ascend, x(iq:))
-
-
-
-
- 454 subroutine cmplx_partition(ascend, x, marker)
-
- 456 logical,
intent(in) :: ascend
- 457 complex(real64),
intent(inout),
dimension(:) :: x
- 458 integer(int32),
intent(out) :: marker
-
-
- 461 integer(int32) :: i, j
- 462 complex(real64) :: temp
- 463 real(real64) :: pivot
-
-
- 466 pivot = real(x(1), real64)
-
-
-
-
-
-
-
- 474 if (real(x(j), real64) <= pivot)
exit
-
-
-
-
- 479 if (real(x(i), real64) >= pivot)
exit
-
-
-
-
-
-
-
- 487 else if (i == j)
then
-
-
-
-
-
-
-
-
-
-
-
-
- 500 if (real(x(j), real64) >= pivot)
exit
-
-
-
-
- 505 if (real(x(i), real64) <= pivot)
exit
-
-
-
-
-
-
-
- 513 else if (i == j)
then
-
-
-
-
-
-
-
-
-
-
-
- 542 recursive subroutine qsort_cmplx_ind(ascend, x, ind)
-
- 544 logical,
intent(in) :: ascend
- 545 complex(real64),
intent(inout),
dimension(:) :: x
- 546 integer(int32),
intent(inout),
dimension(:) :: ind
-
-
-
-
-
- 552 if (
size(x) > 1)
then
- 553 call cmplx_partition_ind(ascend, x, ind, iq)
- 554 call qsort_cmplx_ind(ascend, x(:iq-1), ind(:iq-1))
- 555 call qsort_cmplx_ind(ascend, x(iq:), ind(iq:))
-
-
-
-
- 579 subroutine cmplx_partition_ind(ascend, x, ind, marker)
-
- 581 logical,
intent(in) :: ascend
- 582 complex(real64),
intent(inout),
dimension(:) :: x
- 583 integer(int32),
intent(inout),
dimension(:) :: ind
- 584 integer(int32),
intent(out) :: marker
-
-
- 587 integer(int32) :: i, j, itemp
- 588 complex(real64) :: temp
- 589 real(real64) :: pivot
+
+
+
+ 432 else if (i == j)
then
+
+
+
+
+
+
+
+
+
+
+
+
+ 445 if (x(j) >= pivot)
exit
+
+
+
+
+ 450 if (x(i) <= pivot)
exit
+
+
+
+
+
+
+
+
+
+
+
+ 462 else if (i == j)
then
+
+
+
+
+
+
+
+
+
+
+
+ 488 recursive subroutine qsort_cmplx(ascend, x)
+
+ 490 logical,
intent(in) :: ascend
+ 491 complex(real64),
intent(inout),
dimension(:) :: x
+
+
+
+
+
+ 497 if (
size(x) > 1)
then
+ 498 call cmplx_partition(ascend, x, iq)
+ 499 call qsort_cmplx(ascend, x(:iq-1))
+ 500 call qsort_cmplx(ascend, x(iq:))
+
+
+
+
+ 521 subroutine cmplx_partition(ascend, x, marker)
+
+ 523 logical,
intent(in) :: ascend
+ 524 complex(real64),
intent(inout),
dimension(:) :: x
+ 525 integer(int32),
intent(out) :: marker
+
+
+ 528 integer(int32) :: i, j
+ 529 complex(real64) :: temp
+ 530 real(real64) :: pivot
+
+
+ 533 pivot = real(x(1), real64)
+
+
+
+
+
+
+
+ 541 if (real(x(j), real64) <= pivot)
exit
+
+
+
+
+ 546 if (real(x(i), real64) >= pivot)
exit
+
+
+
+
+
+
+
+ 554 else if (i == j)
then
+
+
+
+
+
+
+
+
+
+
+
+
+ 567 if (real(x(j), real64) >= pivot)
exit
+
+
+
+
+ 572 if (real(x(i), real64) <= pivot)
exit
+
+
+
+
+
+
+
+ 580 else if (i == j)
then
+
+
+
+
+
+
+
+
+
-
- 592 pivot = real(x(1), real64)
-
-
-
-
-
-
-
- 600 if (real(x(j), real64) <= pivot)
exit
-
-
-
-
- 605 if (real(x(i), real64) >= pivot)
exit
-
-
-
-
-
-
-
-
-
-
-
- 617 else if (i == j)
then
-
-
-
-
-
-
-
-
-
-
-
-
- 630 if (real(x(j), real64) >= pivot)
exit
-
-
-
-
- 635 if (real(x(i), real64) <= pivot)
exit
-
-
-
-
-
-
-
-
-
-
-
- 647 else if (i == j)
then
-
-
-
-
-
-
-
-
-
+
+ 609 recursive subroutine qsort_cmplx_ind(ascend, x, ind)
+
+ 611 logical,
intent(in) :: ascend
+ 612 complex(real64),
intent(inout),
dimension(:) :: x
+ 613 integer(int32),
intent(inout),
dimension(:) :: ind
+
+
+
+
+
+ 619 if (
size(x) > 1)
then
+ 620 call cmplx_partition_ind(ascend, x, ind, iq)
+ 621 call qsort_cmplx_ind(ascend, x(:iq-1), ind(:iq-1))
+ 622 call qsort_cmplx_ind(ascend, x(iq:), ind(iq:))
+
+
+
+
+ 646 subroutine cmplx_partition_ind(ascend, x, ind, marker)
+
+ 648 logical,
intent(in) :: ascend
+ 649 complex(real64),
intent(inout),
dimension(:) :: x
+ 650 integer(int32),
intent(inout),
dimension(:) :: ind
+ 651 integer(int32),
intent(out) :: marker
+
+
+ 654 integer(int32) :: i, j, itemp
+ 655 complex(real64) :: temp
+ 656 real(real64) :: pivot
-
-
+
+ 659 pivot = real(x(1), real64)
+
+
+
+
+
+
+
+ 667 if (real(x(j), real64) <= pivot)
exit
+
+
+
+
+ 672 if (real(x(i), real64) >= pivot)
exit
+
+
+
+
+
+
+
+
+
+
+
+ 684 else if (i == j)
then
+
+
+
+
+
+
+
+
+
+
+
+
+ 697 if (real(x(j), real64) >= pivot)
exit
+
+
+
+
+ 702 if (real(x(i), real64) <= pivot)
exit
+
+
+
+
+
+
+
+
+
+
+
+ 714 else if (i == j)
then
+
+
+
+
+
+
+
+
+
+
+
+ 736 recursive subroutine qsort_int32(ascend, x)
+
+ 738 logical,
intent(in) :: ascend
+ 739 integer(int32),
intent(inout),
dimension(:) :: x
+
+
+
+
+
+ 745 if (
size(x) > 1)
then
+ 746 call int32_partition(ascend, x, iq)
+ 747 call qsort_int32(ascend, x(:iq-1))
+ 748 call qsort_int32(ascend, x(iq:))
+
+
+
+
+ 765 subroutine int32_partition(ascend, x, marker)
+
+ 767 logical,
intent(in) :: ascend
+ 768 integer(int32),
intent(inout),
dimension(:) :: x
+ 769 integer(int32),
intent(out) :: marker
+
+
+ 772 integer(int32) :: i, j, temp, pivot
+
+
+
+
+
+
+
+
+
+
+ 783 if (x(j) <= pivot)
exit
+
+
+
+
+ 788 if (x(i) >= pivot)
exit
+
+
+
+
+
+
+
+ 796 else if (i == j)
then
+
+
+
+
+
+
+
+
+
+
+
+
+ 809 if (x(j) >= pivot)
exit
+
+
+
+
+ 814 if (x(i) <= pivot)
exit
+
+
+
+
+
+
+
+ 822 else if (i == j)
then
+
+
+
+
+
+
+
+
+
+
+
+ 847 recursive subroutine qsort_int32_ind(ascend, x, ind)
+
+ 849 logical,
intent(in) :: ascend
+ 850 integer(int32),
intent(inout),
dimension(:) :: x
+ 851 integer(int32),
intent(inout),
dimension(:) :: ind
+
+
+
+
+
+ 857 if (
size(x) > 1)
then
+ 858 call int32_partition_ind(ascend, x, ind, iq)
+ 859 call qsort_int32_ind(ascend, x(:iq-1), ind(:iq-1))
+ 860 call qsort_int32_ind(ascend, x(iq:), ind(iq:))
+
+
+
+
+ 880 subroutine int32_partition_ind(ascend, x, ind, marker)
+
+ 882 logical,
intent(in) :: ascend
+ 883 integer(int32),
intent(inout),
dimension(:) :: x
+ 884 integer(int32),
intent(inout),
dimension(:) :: ind
+ 885 integer(int32),
intent(out) :: marker
+
+
+ 888 integer(int32) :: i, j, itemp, temp, pivot
+
+
+
+
+
+
+
+
+
+
+ 899 if (x(j) <= pivot)
exit
+
+
+
+
+ 904 if (x(i) >= pivot)
exit
+
+
+
+
+
+
+
+
+
+
+
+ 916 else if (i == j)
then
+
+
+
+
+
+
+
+
+
+
+
+
+ 929 if (x(j) >= pivot)
exit
+
+
+
+
+ 934 if (x(i) <= pivot)
exit
+
+
+
+
+
+
+
+
+
+
+
+ 946 else if (i == j)
then
+
+
+
+
+
+
+
+
+
+
+
+
Provides a set of common linear algebra routines.
diff --git a/docs/html/linalg__sparse_8f90_source.html b/docs/html/linalg__sparse_8f90_source.html
index d1d7398..2d9f7ef 100644
--- a/docs/html/linalg__sparse_8f90_source.html
+++ b/docs/html/linalg__sparse_8f90_source.html
@@ -34,7 +34,7 @@
- linalg 1.8.1
+ linalg 1.8.2
A linear algebra library that provides a user-friendly interface to several BLAS and LAPACK routines.
|
diff --git a/docs/html/namespaceblas.html b/docs/html/namespaceblas.html
index 6e26316..1994223 100644
--- a/docs/html/namespaceblas.html
+++ b/docs/html/namespaceblas.html
@@ -34,7 +34,7 @@
- linalg 1.8.1
+ linalg 1.8.2
A linear algebra library that provides a user-friendly interface to several BLAS and LAPACK routines.
|
diff --git a/docs/html/namespacelinalg.html b/docs/html/namespacelinalg.html
index 2ae55d7..b037aa2 100644
--- a/docs/html/namespacelinalg.html
+++ b/docs/html/namespacelinalg.html
@@ -34,7 +34,7 @@
- linalg 1.8.1
+ linalg 1.8.2
A linear algebra library that provides a user-friendly interface to several BLAS and LAPACK routines.
|
diff --git a/docs/html/namespacemembers.html b/docs/html/namespacemembers.html
index a60a8ce..b47fb72 100644
--- a/docs/html/namespacemembers.html
+++ b/docs/html/namespacemembers.html
@@ -34,7 +34,7 @@
- linalg 1.8.1
+ linalg 1.8.2
A linear algebra library that provides a user-friendly interface to several BLAS and LAPACK routines.
|
diff --git a/docs/html/namespacemembers_vars.html b/docs/html/namespacemembers_vars.html
index 2da7983..b7b6ede 100644
--- a/docs/html/namespacemembers_vars.html
+++ b/docs/html/namespacemembers_vars.html
@@ -34,7 +34,7 @@
- linalg 1.8.1
+ linalg 1.8.2
A linear algebra library that provides a user-friendly interface to several BLAS and LAPACK routines.
|
diff --git a/docs/html/namespaceqrupdate.html b/docs/html/namespaceqrupdate.html
index 69787ce..16f0d98 100644
--- a/docs/html/namespaceqrupdate.html
+++ b/docs/html/namespaceqrupdate.html
@@ -34,7 +34,7 @@
- linalg 1.8.1
+ linalg 1.8.2
A linear algebra library that provides a user-friendly interface to several BLAS and LAPACK routines.
|
diff --git a/docs/html/namespaces.html b/docs/html/namespaces.html
index fb52935..b458a7d 100644
--- a/docs/html/namespaces.html
+++ b/docs/html/namespaces.html
@@ -34,7 +34,7 @@
- linalg 1.8.1
+ linalg 1.8.2
A linear algebra library that provides a user-friendly interface to several BLAS and LAPACK routines.
|
diff --git a/docs/html/namespacesparskit.html b/docs/html/namespacesparskit.html
index 6307898..3c66eab 100644
--- a/docs/html/namespacesparskit.html
+++ b/docs/html/namespacesparskit.html
@@ -34,7 +34,7 @@
- linalg 1.8.1
+ linalg 1.8.2
A linear algebra library that provides a user-friendly interface to several BLAS and LAPACK routines.
|
diff --git a/docs/html/qrupdate_8f90_source.html b/docs/html/qrupdate_8f90_source.html
index ff1aa11..5d1f520 100644
--- a/docs/html/qrupdate_8f90_source.html
+++ b/docs/html/qrupdate_8f90_source.html
@@ -34,7 +34,7 @@
- linalg 1.8.1
+ linalg 1.8.2
A linear algebra library that provides a user-friendly interface to several BLAS and LAPACK routines.
|
diff --git a/docs/html/sparskit_8f90_source.html b/docs/html/sparskit_8f90_source.html
index 83beeb5..8a6104a 100644
--- a/docs/html/sparskit_8f90_source.html
+++ b/docs/html/sparskit_8f90_source.html
@@ -34,7 +34,7 @@
- linalg 1.8.1
+ linalg 1.8.2
A linear algebra library that provides a user-friendly interface to several BLAS and LAPACK routines.
|
diff --git a/docs/html/structlinalg_1_1csr__matrix-members.html b/docs/html/structlinalg_1_1csr__matrix-members.html
index 9515c6d..3e32458 100644
--- a/docs/html/structlinalg_1_1csr__matrix-members.html
+++ b/docs/html/structlinalg_1_1csr__matrix-members.html
@@ -34,7 +34,7 @@
- linalg 1.8.1
+ linalg 1.8.2
A linear algebra library that provides a user-friendly interface to several BLAS and LAPACK routines.
|
diff --git a/docs/html/structlinalg_1_1csr__matrix.html b/docs/html/structlinalg_1_1csr__matrix.html
index 264bb7c..5aff779 100644
--- a/docs/html/structlinalg_1_1csr__matrix.html
+++ b/docs/html/structlinalg_1_1csr__matrix.html
@@ -34,7 +34,7 @@
- linalg 1.8.1
+ linalg 1.8.2
A linear algebra library that provides a user-friendly interface to several BLAS and LAPACK routines.
|
diff --git a/docs/html/structlinalg_1_1msr__matrix-members.html b/docs/html/structlinalg_1_1msr__matrix-members.html
index e03f45f..0bf532d 100644
--- a/docs/html/structlinalg_1_1msr__matrix-members.html
+++ b/docs/html/structlinalg_1_1msr__matrix-members.html
@@ -34,7 +34,7 @@
- linalg 1.8.1
+ linalg 1.8.2
A linear algebra library that provides a user-friendly interface to several BLAS and LAPACK routines.
|
diff --git a/docs/html/structlinalg_1_1msr__matrix.html b/docs/html/structlinalg_1_1msr__matrix.html
index fdc666c..da224f0 100644
--- a/docs/html/structlinalg_1_1msr__matrix.html
+++ b/docs/html/structlinalg_1_1msr__matrix.html
@@ -34,7 +34,7 @@
- linalg 1.8.1
+ linalg 1.8.2
A linear algebra library that provides a user-friendly interface to several BLAS and LAPACK routines.
|
diff --git a/fpm.toml b/fpm.toml
index a054773..149d146 100644
--- a/fpm.toml
+++ b/fpm.toml
@@ -1,5 +1,5 @@
name = "linalg"
-version = "1.8.1"
+version = "1.8.2"
license = "GPL-3.0"
author = "Jason Christopherson"
maintainer = "Jason Christopherson"
diff --git a/src/linalg.f90 b/src/linalg.f90
index cb89f1f..8fbcfe5 100644
--- a/src/linalg.f90
+++ b/src/linalg.f90
@@ -3458,6 +3458,8 @@ module linalg
module procedure :: sort_cmplx_array_ind
module procedure :: sort_eigen_cmplx
module procedure :: sort_eigen_dbl
+ module procedure :: sort_int32_array
+ module procedure :: sort_int32_array_ind
end interface
!> @brief Computes the LQ factorization of an M-by-N matrix.
@@ -5307,6 +5309,17 @@ module subroutine sort_eigen_dbl(vals, vecs, ascend, err)
class(errors), intent(inout), optional, target :: err
end subroutine
+ module subroutine sort_int32_array(x, ascend)
+ integer(int32), intent(inout), dimension(:) :: x
+ logical, intent(in), optional :: ascend
+ end subroutine
+
+ module subroutine sort_int32_array_ind(x, ind, ascend, err)
+ integer(int32), intent(inout), dimension(:) :: x
+ integer(int32), intent(inout), dimension(:) :: ind
+ logical, intent(in), optional :: ascend
+ class(errors), intent(inout), optional, target :: err
+ end subroutine
end interface
! ******************************************************************************
diff --git a/src/linalg_sorting.f90 b/src/linalg_sorting.f90
index 8902521..c4c44db 100644
--- a/src/linalg_sorting.f90
+++ b/src/linalg_sorting.f90
@@ -275,6 +275,73 @@ module subroutine sort_eigen_dbl(vals, vecs, ascend, err)
! Formatting
100 format(A, I0, A, I0, A, I0, A, I0, A)
end subroutine
+
+! ------------------------------------------------------------------------------
+ module subroutine sort_int32_array(x, ascend)
+ ! Arguments
+ integer(int32), intent(inout), dimension(:) :: x
+ logical, intent(in), optional :: ascend
+
+ ! Local Variables
+ logical :: dir
+
+ ! Initialization
+ if (present(ascend)) then
+ dir = ascend
+ else
+ dir = .true.
+ end if
+
+ ! Process
+ call qsort_int32(dir, x)
+ end subroutine
+
+! ------------------------------------------------------------------------------
+ module subroutine sort_int32_array_ind(x, ind, ascend, err)
+ ! Arguments
+ integer(int32), intent(inout), dimension(:) :: x
+ integer(int32), intent(inout), dimension(:) :: ind
+ logical, intent(in), optional :: ascend
+ class(errors), intent(inout), optional, target :: err
+
+ ! Local Variables
+ class(errors), pointer :: errmgr
+ type(errors), target :: deferr
+ character(len = :), allocatable :: errmsg
+ integer(int32) :: n
+ logical :: dir
+
+ ! Initialization
+ n = size(x)
+ if (present(err)) then
+ errmgr => err
+ else
+ errmgr => deferr
+ end if
+ if (present(ascend)) then
+ dir = ascend
+ else
+ dir = .true. ! Ascend == true
+ end if
+
+ ! Input Check
+ if (size(ind) /= n) then
+ allocate(character(len = 256) :: errmsg)
+ write(errmsg, 100) &
+ "Expected the tracking array to be of size ", n, &
+ ", but found an array of size ", size(ind), "."
+ call errmgr%report_error("sort_int32_array_ind", trim(errmsg), &
+ LA_ARRAY_SIZE_ERROR)
+ return
+ end if
+ if (n <= 1) return
+
+ ! Process
+ call qsort_int32_ind(dir, x, ind)
+
+ ! Formatting
+100 format(A, I0, A, I0, A)
+ end subroutine
! ******************************************************************************
! PRIVATE HELPER ROUTINES
@@ -655,5 +722,237 @@ subroutine cmplx_partition_ind(ascend, x, ind, marker)
end if
end subroutine
+! ------------------------------------------------------------------------------
+ !> @brief A recursive quick sort algorithm.
+ !!
+ !! @param[in] ascend Set to true to sort in ascending order; else, false
+ !! to sort in descending order.
+ !! @param[in,out] x On input, the array to sort. On output, the sorted
+ !! array.
+ !!
+ !! @par Notes
+ !! This implementation is a slight modification of the code presented at
+ !! http://www.fortran.com/qsort_c.f95.
+ recursive subroutine qsort_int32(ascend, x)
+ ! Arguments
+ logical, intent(in) :: ascend
+ integer(int32), intent(inout), dimension(:) :: x
+
+ ! Local Variables
+ integer(int32) :: iq
+
+ ! Process
+ if (size(x) > 1) then
+ call int32_partition(ascend, x, iq)
+ call qsort_int32(ascend, x(:iq-1))
+ call qsort_int32(ascend, x(iq:))
+ end if
+ end subroutine
+
+! ------------------------------------------------------------------------------
+ !> @brief A routine to perform the partioning necessary for the quick sort
+ !! algorithm.
+ !!
+ !! @param[in] ascend Set to true to sort in ascending order; else, false
+ !! to sort in descending order.
+ !! @param[in,out] x On input, the array to sort. On output, the sorted
+ !! array.
+ !! @param[out] marker The partioning marker.
+ !!
+ !! @par Notes
+ !! This implementation is a slight modification of the code presented at
+ !! http://www.fortran.com/qsort_c.f95
+ subroutine int32_partition(ascend, x, marker)
+ ! Arguments
+ logical, intent(in) :: ascend
+ integer(int32), intent(inout), dimension(:) :: x
+ integer(int32), intent(out) :: marker
+
+ ! Local Variables
+ integer(int32) :: i, j, temp, pivot
+
+ ! Process
+ pivot = x(1)
+ i = 0
+ j = size(x) + 1
+ if (ascend) then
+ ! Ascending Sort
+ do
+ j = j - 1
+ do
+ if (x(j) <= pivot) exit
+ j = j - 1
+ end do
+ i = i + 1
+ do
+ if (x(i) >= pivot) exit
+ i = i + 1
+ end do
+ if (i < j) then
+ ! Exchage X(I) and X(J)
+ temp = x(i)
+ x(i) = x(j)
+ x(j) = temp
+ else if (i == j) then
+ marker = i + 1
+ return
+ else
+ marker = i
+ return
+ end if
+ end do
+ else
+ ! Descending Sort
+ do
+ j = j - 1
+ do
+ if (x(j) >= pivot) exit
+ j = j - 1
+ end do
+ i = i + 1
+ do
+ if (x(i) <= pivot) exit
+ i = i + 1
+ end do
+ if (i < j) then
+ ! Exchage X(I) and X(J)
+ temp = x(i)
+ x(i) = x(j)
+ x(j) = temp
+ else if (i == j) then
+ marker = i + 1
+ return
+ else
+ marker = i
+ return
+ end if
+ end do
+ end if
+ end subroutine
+
+! ------------------------------------------------------------------------------
+ !> @brief A recursive quick sort algorithm.
+ !!
+ !! @param[in] ascend Set to true to sort in ascending order; else, false
+ !! to sort in descending order.
+ !! @param[in,out] x On input, the array to sort. On output, the sorted
+ !! array.
+ !! @param[in,out] ind On input, a tracking array of the same length as @p x.
+ !! On output, the same array, but shuffled to match the sorting order of
+ !! @p x.
+ !!
+ !! @par Notes
+ !! This implementation is a slight modification of the code presented at
+ !! http://www.fortran.com/qsort_c.f95.
+ recursive subroutine qsort_int32_ind(ascend, x, ind)
+ ! Arguments
+ logical, intent(in) :: ascend
+ integer(int32), intent(inout), dimension(:) :: x
+ integer(int32), intent(inout), dimension(:) :: ind
+
+ ! Local Variables
+ integer(int32) :: iq
+
+ ! Process
+ if (size(x) > 1) then
+ call int32_partition_ind(ascend, x, ind, iq)
+ call qsort_int32_ind(ascend, x(:iq-1), ind(:iq-1))
+ call qsort_int32_ind(ascend, x(iq:), ind(iq:))
+ end if
+ end subroutine
+
+! ------------------------------------------------------------------------------
+ !> @brief A routine to perform the partioning necessary for the quick sort
+ !! algorithm.
+ !!
+ !! @param[in] ascend Set to true to sort in ascending order; else, false
+ !! to sort in descending order.
+ !! @param[in,out] x On input, the array to sort. On output, the sorted
+ !! array.
+ !! @param[in,out] ind On input, a tracking array of the same length as @p x.
+ !! On output, the same array, but shuffled to match the sorting order of
+ !! @p x.
+ !! @param[out] marker The partioning marker.
+ !!
+ !! @par Notes
+ !! This implementation is a slight modification of the code presented at
+ !! http://www.fortran.com/qsort_c.f95
+ subroutine int32_partition_ind(ascend, x, ind, marker)
+ ! Arguments
+ logical, intent(in) :: ascend
+ integer(int32), intent(inout), dimension(:) :: x
+ integer(int32), intent(inout), dimension(:) :: ind
+ integer(int32), intent(out) :: marker
+
+ ! Local Variables
+ integer(int32) :: i, j, itemp, temp, pivot
+
+ ! Process
+ pivot = x(1)
+ i = 0
+ j = size(x) + 1
+ if (ascend) then
+ ! Ascending Sort
+ do
+ j = j - 1
+ do
+ if (x(j) <= pivot) exit
+ j = j - 1
+ end do
+ i = i + 1
+ do
+ if (x(i) >= pivot) exit
+ i = i + 1
+ end do
+ if (i < j) then
+ ! Exchage X(I) and X(J)
+ temp = x(i)
+ x(i) = x(j)
+ x(j) = temp
+
+ itemp = ind(i)
+ ind(i) = ind(j)
+ ind(j) = itemp
+ else if (i == j) then
+ marker = i + 1
+ return
+ else
+ marker = i
+ return
+ end if
+ end do
+ else
+ ! Descending Sort
+ do
+ j = j - 1
+ do
+ if (x(j) >= pivot) exit
+ j = j - 1
+ end do
+ i = i + 1
+ do
+ if (x(i) <= pivot) exit
+ i = i + 1
+ end do
+ if (i < j) then
+ ! Exchage X(I) and X(J)
+ temp = x(i)
+ x(i) = x(j)
+ x(j) = temp
+
+ itemp = ind(i)
+ ind(i) = ind(j)
+ ind(j) = itemp
+ else if (i == j) then
+ marker = i + 1
+ return
+ else
+ marker = i
+ return
+ end if
+ end do
+ end if
+ end subroutine
+
! ------------------------------------------------------------------------------
end submodule
diff --git a/tests/linalg_test.f90 b/tests/linalg_test.f90
index 359baec..f97362b 100644
--- a/tests/linalg_test.f90
+++ b/tests/linalg_test.f90
@@ -354,6 +354,10 @@ program main
rst = test_pgmres_1()
if (.not.rst) flag = 106
+ ! More Tests
+ rst = test_int32_ascend_sort()
+ if (.not.rst) flag = 107
+
! End
if (flag /= 0) stop flag
end program
diff --git a/tests/test_sort.f90 b/tests/test_sort.f90
index c1289f8..46ec6f8 100644
--- a/tests/test_sort.f90
+++ b/tests/test_sort.f90
@@ -169,5 +169,50 @@ function test_descend_sort_cmplx() result(rst)
! End
end function
+! ------------------------------------------------------------------------------
+function test_int32_ascend_sort() result(rst)
+ ! Parameters
+ integer(int32), parameter :: n = 200
+ integer(int32), parameter :: first = -10000
+ integer(int32), parameter :: last = 10000
+
+ ! Local Variables
+ logical :: rst, ascend
+ integer(int32) :: i, ind(n), x1(n), x2(n), ri
+ real(real64) :: rv
+
+ ! Initialization
+ rst = .true.
+ ascend = .true.
+ do i = 1, n
+ call random_number(rv)
+ ri = first + floor((last + 1 - first) * rv)
+ x1(i) = ri + 1
+ x2(i) = x1(i)
+ ind(i) = i
+ end do
+
+ ! Sort into ascending order
+ call sort(x1, ascend)
+
+ ! Ensure it's increasing
+ do i = 2, n
+ if (x1(i) < x1(i-1)) then
+ rst = .false.
+ print "(A)", "Test Failed: Ascending sort of 32-bit integer array."
+ exit
+ end if
+ end do
+
+ ! Sort the other array
+ call sort(x2, ind, ascend)
+
+ ! Compare
+ if (.not.assert(x1, x2)) then
+ rst = .false.
+ print "(A)", "Test Failed: Sorted integer arrays do not match."
+ end if
+end function
+
! ------------------------------------------------------------------------------
end module