mirror of
https://github.com/sfilippone/psblas3.git
synced 2026-10-20 21:02:26 +00:00
[UPDATE] User-friendly row queries on the nested matrix
Add get_owned_rows(i_field) and get_owned_row_count(i_field) to psb_d_nest_matrix: the list of GLOBAL row indices of a field owned by the calling process (i.e. the rows it is expected to insert through ins) and their count. They replace the descriptor-level idiom field_desc(i)%get_local_rows() / field_desc(i)%l2g(...) in user code, which leaked descriptor jargon into the build loop. The high-level tests (glob, rect, builder) are rewritten on the new queries; the low-level CG test intentionally keeps the descriptor path. README updated with the new queries and an example. Author: Simone Staccone (Stack-1)
This commit is contained in:
+19
-1
@@ -82,9 +82,27 @@ use psb_d_nest_mod
|
||||
|--------|---------|
|
||||
| `a_glob` | `type(psb_dspmat_type)` — the assembled global operator; pass it to `psb_spmm`, `psb_krylov`, `prec%build` |
|
||||
| `desc_glob` | `type(psb_desc_type)` — the composed global descriptor; pass it wherever a descriptor is expected |
|
||||
| `field_desc(i)` | `type(psb_desc_type)` — the descriptor of field `i` (query `%get_local_rows()`, `%l2g(...)` to find the rows owned by this process) |
|
||||
| `field_desc(i)` | `type(psb_desc_type)` — the descriptor of field `i` (advanced use; for the common queries see `get_owned_rows` below) |
|
||||
| `n_fields` | number of fields |
|
||||
|
||||
To know which rows it must insert, a process asks the matrix directly — no
|
||||
descriptor jargon needed:
|
||||
|
||||
```fortran
|
||||
integer(psb_lpk_), allocatable :: my_rows(:)
|
||||
|
||||
my_rows = nested_matrix%get_owned_rows(1) ! global rows of field 1 owned here
|
||||
do k = 1, size(my_rows)
|
||||
global_row = my_rows(k)
|
||||
... ! build the entries of this row
|
||||
end do
|
||||
```
|
||||
|
||||
| Query | Result |
|
||||
|-------|--------|
|
||||
| `nested_matrix%get_owned_rows(i_field)` | `integer(psb_lpk_), allocatable (:)` — the GLOBAL indices (in the field index space, 1..field size) of the rows of field `i_field` owned by this process |
|
||||
| `nested_matrix%get_owned_row_count(i_field)` | `integer(psb_ipk_)` — how many rows of field `i_field` this process owns |
|
||||
|
||||
Methods (collective over the communicator unless noted):
|
||||
|
||||
#### `call nested_matrix%init(ctxt, field_sizes, info)`
|
||||
|
||||
Reference in New Issue
Block a user