## psb_cdins -- Communication descriptor insert routine

    call psb_cdins(nz, ia, ja, desc_a, info [,ila,jla])
    call psb_cdins(nz,ja,desc,info[,jla,mask,lidx])

This subroutine examines the edges of the graph associated with the discretization mesh (and isomorphic to the sparsity pattern of a linear system coefficient matrix), storing them as necessary into the communication descriptor. In the first form the edges are specified as pairs of indices ; the starting index should belong to the current process. In the second form only the remote indices are specified.

Type:
  Asynchronous.
On Entry
nz
  the number of points being inserted.
  Scope: local.
  Type: required.
  Intent: in.
  Specified as: an integer value.
ia
  the indices of the starting vertex of the edges being inserted.
  Scope: local.
  Type: required.
  Intent: in.
  Specified as: an integer array of length .
ja
  the indices of the end vertex of the edges being inserted.
  Scope: local.
  Type: required.
  Intent: in.
  Specified as: an integer array of length .
mask
  Mask entries in `ja`, they are inserted only when the corresponding `mask` entries are `.true.`
  Scope: local.
  Type: optional.
  Intent: in.
  Specified as: a logical array of length , default `.true.`.
lidx
  User defined local indices for `ja`.
  Scope: local.
  Type: optional.
  Intent: in.
  Specified as: an integer array of length .

On Return
desc_a
  the updated communication descriptor.
  Scope:local.
  Type:required.
  Intent: inout.
  Specified as: a structured data of type descdata`psb_desc_type`.
info
  Error code.
  Scope: local
  Type: required
  Intent: out.
  An integer value; 0 means no error has been detected.
ila
  the local indices of the starting vertex of the edges being inserted.
  Scope: local.
  Type: optional.
  Intent: out.
  Specified as: an integer array of length .
jla
  the local indices of the end vertex of the edges being inserted.
  Scope: local.
  Type: optional.
  Intent: out.
  Specified as: an integer array of length .

Notes

1. This routine may only be called if the descriptor is in the build state;
2. This routine automatically ignores edges that do not insist on the current process, i.e. edges for which neither the starting nor the end vertex belong to the current process.
3. The second form of this routine will be useful when dealing with user-specified index mappings; see also 2.3.1.