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 gaussian_kernel_2d(x,y,mean,sigma)result(gaussian_kernel)real(8),intent(in)::x(:),y(:)real(8),intent(in)::mean(2)real(8),intent(in)::sigma(2,2)real(8)::gaussian_kernel(size(x),size(y))real(8),parameter::pi2=2d0*acos(-1d0)real(8)::detSigmareal(8)::InvSigma(2,2)real(8)::gaussian_factorreal(8)::arg,xvec(2)integer::i,j!detSigma=det(sigma)gaussian_factor=1/pi2/sqrt(detSigma)!InvSigma=Sigmacall inv(InvSigma)do i=1,size(x)do j=1,size(y)xvec=[x(i),y(j)]-meanarg=dot_product(xvec,matmul(InvSigma,xvec))!gaussian_kernel(i,j)=gaussian_factor*exp(-0.5d0*arg)!enddo enddoend function gaussian_kernel_2d