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.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
Source Code
subroutine add_karplus_strong_stretched(tape,track,t1,t2,f,Amp)type(tape_recorder),intent(inout)::tapeinteger,intent(in)::trackreal(wp),intent(in)::t1,t2,f,Ampinteger::i1,i2real(wp)::rinteger::iinteger::P! Stretch factor S > 1:real(wp),parameter::S=4._wpi1=nint(t1*RATE)i2=nint(t2*RATE)-1P=nint(RATE/f)-2! Initial noise:do i=i1,i1+P! 0 <= r < 1call random_number(r)! Track 0 is used as an auxiliary track:tape%left(0,i)=Amp*(2.0_wp*r-1.0_wp)tape%right(0,i)=tape%left(0,i)end do! Delay and decay:do i=i1+P+1,i2call random_number(r)if(r<1/S)thentape%left(0,i)=+0.5_wp*(tape%left(0,i-P)+tape%left(0,i-P-1))elsetape%left(0,i)=+tape%left(0,i-P)end iftape%right(0,i)=tape%left(0,i)end do! Transfer (add) on the good track:tape%left(track,i1:i2)=tape%left(track,i1:i2)+tape%left(0,i1:i2)tape%right(track,i1:i2)=tape%right(track,i1:i2)+tape%right(0,i1:i2)end subroutine add_karplus_strong_stretched