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_gamma(s,first)RESULT(fn_val)! Adapted from Fortran 77 code from the book:! Dagpunar, J. 'Principles of random variate generation'! Clarendon Press, Oxford, 1988. ISBN 0-19-852202-9! FUNCTION GENERATES A RANDOM GAMMA VARIATE.! CALLS EITHER random_gamma1 (S > 1.0)! OR random_exponential (S = 1.0)! OR random_gamma2 (S < 1.0).! S = SHAPE PARAMETER OF DISTRIBUTION (0 < REAL).REAL,INTENT(IN)::sLOGICAL,INTENT(IN)::firstREAL::fn_valIF(s<=zero)THEN WRITE(*,*)'SHAPE PARAMETER VALUE MUST BE POSITIVE'STOP END IF IF(s>one)THENfn_val=random_gamma1(s,first)ELSE IF(s<one)THENfn_val=random_gamma2(s,first)ELSEfn_val=random_exponential()END IF RETURNEND FUNCTION random_gamma