The virt array stores the virtual unknowns for a certain block. Specifically, the virt arrays store the intermediate representations (See smsg ). of the virtual unknowns at all internal subfaces sequentially. Virtual unknowns must be stored for each degree of freedom and at each time level, therefore:
double precision virt(0:ndegfd, 1:ntimlv, 1:vlen)The degree of freedom 0 is reserved for transported normal fluxes on the block interfaces (itrans = 2). There is a slight difference with the solut array in that virt(i,*,*) for i=1 and i=2 does not indicate the V(1) and V(2) fluxes. Instead, the following holds for i=1 and i=2:
The parameter vlen is equal to the number of virtual tangential fluxes to be stored and is computed by routine isddvlen . Note that vlen is therefore slightly too large for i>1 and i = 0. The itopol array stores for each sub face of a block the starting position in virt of the virtual unknowns for that sub face.