SpaceAngleVector
Objects of this type can be acted upon by objects of the linear operator class. They are therefore generally meant to contain sources and angular fluences. In order to initialize them, use:
Type (MeshClass) :: mesh
Type (AngularClass) :: angular
Type (SpaceAngleVector) :: v
<Initialize and populate mesh and angular>
v = SpaceAngleVector (mesh, angular)
Note that this will allocate an array of length mesh%NENK * angular%NI, where NENK is the number of spatial degrees of freedom (i.e., the total number of nodes in the elemental mesh, thus including nodes whose spatial position is identical if they reside in different elements), and NI is the number of angular degrees of freedom (i.e. for \(S_{N}\), Nmu * Nphi or 2 * (L + 1)**2).
To access values of the array keep in mind that they will generally be stored in the following way:
value(e,k,i) = v%v(mesh%offset(e) + k + (i - 1) * angular%NI)
where on the LHS we have the value of some map at the element e, node (within the element) k, and angular index i. Since in general not every element will have the same number of nodes, we use the mesh offset array mesh%offset(e), where mesh%offset(e) + k gives the index of the node (e,k) in the spatial degrees of freedom indexing system.