# DMNetworkAddSubnetwork
Add a subnetwork 
## Synopsis
```
#include "petscdmnetwork.h"  
PetscErrorCode DMNetworkAddSubnetwork(DM dm, const char *name, PetscInt ne, PetscInt edgelist[], PetscInt *netnum)
```
Collective on dm


## Input Parameters

- ***dm -*** the dm object
- ***name -*** name of the subnetwork
- ***ne -*** number of local edges of this subnetwork
- ***edgelist -*** list of edges for this subnetwork, this is a one dimensional array with pairs of entries being the two vertices (in global numbering of the vertices) of each edge,


```none
[first vertex of first edge, second vertex of first edge, first vertex of second edge, second vertex of second edge, etc]
```


## Output Parameters

- ***netnum -*** global index of the subnetwork



## Notes
There is no copy involved in this operation, only the pointer is referenced. The edgelist should
not be destroyed before the call to DMNetworkLayoutSetUp()

A network can comprise of a single subnetwork OR multiple subnetworks. For a single subnetwork, the subnetwork can be read either in serial or parallel. For a multiple subnetworks,
each subnetwork topology needs to be set on a unique rank and the communicator size needs to be at least equal to the number of subnetworks.




## Example usage

## Consider the following networks

## 1) A single subnetwork
```none
 network 0:
 rank[0]:
   v0 --> v2; v1 --> v2
 rank[1]:
   v3 --> v5; v4 --> v5
```


The resulting input

## network 0

## rank[0]
ne = 2
edgelist = [0 2 | 1 2]

## rank[1]
ne = 2
edgelist = [3 5 | 4 5]


## 2) Two subnetworks
```none
 subnetwork 0:
 rank[0]:
   v0 --> v2; v2 --> v1; v1 --> v3;
 subnetwork 1:
 rank[1]:
   v0 --> v3; v3 --> v2; v2 --> v1;
```


The resulting input

## subnetwork 0

## rank[0]
ne = 3
edgelist = [0 2 | 2 1 | 1 3]

## rank[1]
ne = 0
edgelist = NULL


## subnetwork 1

## rank[0]
ne = 0
edgelist = NULL

## rank[1]
edgelist = [0 3 | 3 2 | 2 1]


## See Also
 `DMNetworkCreate()`, `DMNetworkSetNumSubnetworks()`

## Level
beginner

## Location
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/dm/impls/network/network.c.html#DMNetworkAddSubnetwork">src/dm/impls/network/network.c</A>


---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/dm/impls/network/network.c)


[Index of all DMNetwork routines](index.md)  
[Table of Contents for all manual pages](/docs/manualpages/index.md)  
[Index of all manual pages](/docs/manualpages/singleindex.md)  
