REAL FUNCTION MINCIR (N, XX) C MINIMUM MUTUAL DISTANCE OF M CIRCLES FILLED INTO A CIRCLE C CONTAINER OF RADIUS 1 C The radii of the interior circles are assumed to be in C increasing arithmetic progression, i.e. r1:r2:r3:...:n=1:2:3:...:n C C History of changes C Jan 6 2006 Single precision, ignore small circles C Nov 25 2005 Avoid square roots C Oct 14 2005 Double precision C Apr 18 2005 Initial version created by modification of MINCUB parameter ( ONE=1.0, VLARGE=1.0E35 ) REAL XX(N) INTEGER N C N <= 2*MM MUST HOLD PARAMETER ( MM=50 ) REAL X(MM), Y(MM) COMMON /COORD/ MSTART, M, X, Y C COPY VARIABLE VECTOR TO COMMON BLOCK C L = 0 DO 10 K = MSTART, M L = L + 1 X(K) = XX(L) L = L + 1 Y(K) = XX(L) 10 CONTINUE C C DETERMINE MINIMUM OF MUTUAL DISTANCES BETWEEN CIRCLES AND C DISTANCE TO ENCLOSING CONTAINER CIRCLE RDIS = VLARGE DMS = VLARGE C DO 100 K = MSTART, M C C Scaled distance from enclosing sphere R = ( one - sqrt(X(K)**2 + Y(K)**2) ) / FLOAT(k) RDIS = MIN ( RDIS, R ) C RMAX = MAX ( R, RMAX ) C MINIMUM weighted DISTANCE OF SPHERE K FROM OTHER SPHERES IF ( K .LT. M ) THEN DO 20 I = K+1, M D = ( (X(I)-X(K))**2 + (Y(I)-Y(K))**2 ) / (FLOAT(k+i))**2 DMS = MIN ( DMS, D ) 20 CONTINUE ENDIF 100 CONTINUE C DMIN = MIN ( RDIS, SQRT(DMS) ) C FOR USE IN MINIMIZATION PROGRAM SET OUTPUT NEGATIVE MINCIR = - DMIN RETURN END