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.
Source Code
FUNCTION random_gamma1(s,first)RESULT(fn_val)! Uses the algorithm in! Marsaglia, G. and Tsang, W.W. (2000) `A simple method for generating! gamma variables', Trans. om Math. Software (TOMS), vol.26(3), pp.363-372.! Generates a random gamma deviate for shape parameter s >= 1.REAL,INTENT(IN)::sLOGICAL,INTENT(IN)::firstREAL::fn_val! Local variablesREAL,SAVE::c,dREAL::u,v,xIF(first)THENd=s-one/3.c=one/SQRT(9.0*d)END IF! Start of main loopDO! Generate v = (1+cx)^3 where x is random normal; repeat if v <= 0.DOx=random_normal()v=(one+c*x)**3IF(v>zero)EXIT END DO! Generate uniform variable UCALL RANDOM_NUMBER(u)IF(u<one-0.0331*x**4)THENfn_val=d*vEXIT ELSE IF(LOG(u)<half*x**2+d*(one-v+LOG(v)))THENfn_val=d*vEXIT END IF END DO RETURNEND FUNCTION random_gamma1