The main documentation of the Assemble_AV_from_DV Procedure contains additional explanation of this code listing.
subroutine Assemble_AV_from_DV (AV, DV) ! Input variable. type(Distributed_Vector_type), intent(in) :: DV ! DV to be assembled. ! Input/Output variable. type(Assembled_Vector_type), intent(inout) :: AV ! Assembled vector. ! Internal variables. type(integer) :: i, j, k ! Loop counters. !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Verify requirements. VERIFY(Valid_State(DV),5) ! DV is valid. VERIFY(Valid_State(AV),5) ! AV is valid. VERIFY(ASSOCIATED(AV%Structure,DV%Structure),5) ! AV, DV -> same structure. VERIFY(AV%Dimensionality == DV%Dimensionality,5) ! AV, DV have same Dims. ! Do the assembly. This could be done faster for multiple dimensions by ! packing everything into a single vector, assembling, and then unpacking. ! Maybe in a later version. select case (DV%Dimensionality) case (1) call Assemble (AV%Values1, DV%Values1) case (2) do i = 1, DV%Dimensions(1) call Assemble (AV%Values2(i,:), DV%Values2(i,:)) end do case (3) do i = 1, DV%Dimensions(1) do j = 1, DV%Dimensions(2) call Assemble (AV%Values3(i,j,:), DV%Values3(i,j,:)) end do end do case (4) do i = 1, DV%Dimensions(1) do j = 1, DV%Dimensions(2) do k = 1, DV%Dimensions(3) call Assemble (AV%Values4(i,j,k,:), DV%Values4(i,j,k,:)) end do end do end do !case (-1) ! call Assemble (AV%ValuesRR, DV%ValuesRR) end select ! Set the version number. AV = Version(DV) ! Verify guarantees. VERIFY(Valid_State(AV),5) ! AV is valid. return end subroutine Assemble_AV_from_DV