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 gauss_legendre_unit(order,node,weight)integer(i32),intent(in)::orderreal(dp),allocatable,intent(out)::node(:),weight(:)integer::i,j,midpointreal(dp)::z,z_previous,polynomial,derivative,p0,p1,p2if(order<2_i32)error stop'panel oracle quadrature order must be >= 2.'allocate(node(order),weight(order))midpoint=(order+1)/2do i=1,midpointz=cos(pi*(real(i,dp)-0.25_dp)/(real(order,dp)+0.5_dp))dop0=1.0_dpp1=zdo j=2,orderp2=((2.0_dp*real(j,dp)-1.0_dp)*z*p1-(real(j,dp)-1.0_dp)*p0)/real(j,dp)p0=p1p1=p2end dopolynomial=merge(1.0_dp,p1,order==0_i32)derivative=real(order,dp)*(z*p1-p0)/(z*z-1.0_dp)z_previous=zz=z_previous-polynomial/derivativeif(abs(z-z_previous)<=8.0_dp*epsilon(1.0_dp))exit end donode(i)=0.5_dp*(1.0_dp-z)node(order+1-i)=0.5_dp*(1.0_dp+z)weight(i)=1.0_dp/((1.0_dp-z*z)*derivative*derivative)weight(order+1-i)=weight(i)end do end subroutine gauss_legendre_unit