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 panel_on_surface_integrals(geometry,target,potential_integral,field_pv_integral)type(panel_geometry_type),intent(in)::geometryreal(dp),intent(in)::target(3)real(dp),intent(out)::potential_integral,field_pv_integral(3)real(dp)::endpoint(3),radius_a,radius_b,ratio,line_integral,distanceinteger::edge,next_edgepotential_integral=0.0_dpfield_pv_integral=0.0_dpdo edge=1,3next_edge=merge(edge+1,1,edge<3)endpoint=geometry%vertex(:,edge)radius_a=norm2(target-endpoint)radius_b=norm2(target-geometry%vertex(:,next_edge))ratio=geometry%edge_length(edge)/(radius_a+radius_b)if(ratio>=1.0_dp)error stop'panel on-surface target lies on an edge or vertex.'line_integral=log((1.0_dp+ratio)/(1.0_dp-ratio))distance=dot_product(endpoint-target,geometry%edge_outward(:,edge))potential_integral=potential_integral+distance*line_integralfield_pv_integral=field_pv_integral+geometry%edge_outward(:,edge)*line_integralend do end subroutine panel_on_surface_integrals