Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed arrows point from an interface to procedures which implement that interface. This could include the module procedures in a generic interface or the implementation in a submodule of an interface in a parent module.
subroutine testSpvec
type(spvec_t)::u,v,r
u%i = [1,2,3]
u%v = [1.0_wp,2.0_wp,3.0_wp]
v%i = [2,3,4]
v%v = [2.0_wp,3.0_wp,4.0_wp]
write(*,*) u.o.v
r = u+v
write(*,*) r%i
write(*,*) r%v
r = 2.0_wp*u*2.0_wp
write(*,*) r%i
write(*,*) r%v
end subroutine testSpvec