SUBROUTINE KSMAIN (NDV,NOBJ,NCON,X,XLB,XUB,OBJ,G, 1 WORK,NWORK, 2 ITMAX,RDFUN,RHOMIN,RHOMAX,IOUT,IPRINT,INAME, 3 NFEVAL,NGEVAL,OBJFUN,GRDFUN) C IMPLICIT DOUBLE PRECISION(A-H,O-Z) C DIMENSION WORK(NWORK) DIMENSION X(NDV),OBJ(NOBJ),G(NCON) DIMENSION XLB(NDV),XUB(NDV),SCALE(NDV) DIMENSION DF(NOBJ,NDV),DG(NCON,NDV) CHARACTER*(*) INAME EXTERNAL OBJFUN,GRDFUN C C PARAMETERS C NSIDE=1 NSCALE=1 IF (IPRINT.EQ.0) IPRNT=000 IF (IPRINT.EQ.1) IPRNT=001 IF (IPRINT.EQ.2) IPRNT=012 IF (IPRINT.EQ.3) IPRNT=013 IGRAD=1 ISDRST=0 ADFUN=0.0 FDELT=0.0 FDMIN=0.0 RHODEL=0.0 C C OPEN WRITE FILE C IF (IPRINT.EQ.0) GO TO 5 OPEN(UNIT=IOUT,FILE=INAME,STATUS='UNKNOWN') 5 CONTINUE C C C INITIALIZE C CALL KSINIT(X,XLB,XUB,SCALE,WORK,NDV,NCON,NOBJ,NSIDE, 1 NSCALE,IPRNT,ITMAX,IGRAD,ISDRST,RDFUN,ADFUN,FDELT, 2 FDMIN,RHOMIN,RHOMAX,RHODEL,IOUT,IREQ) C NOMAX=NOBJ NGMAX=NCON C C OPTIMIZE C ISEL=-1 10 CONTINUE CALL KSOPT(ISEL,X,OBJ,G,DF,DG,NOMAX,NGMAX,WORK) IF (ISEL.EQ.0) GO TO 50 IF (ISEL.EQ.1) GO TO 20 IF (ISEL.EQ.2) GO TO 30 C C EVALUATE OBJECTIVE AND CONSTRAINTS C 20 CONTINUE CALL OBJFUN(NDV,NOBJ,NCON,X,OBJ,G) NFEVAL=NFEVAL+1 GO TO 10 C C EVALUATE GRADIENTS C 30 CONTINUE CALL GRDFUN(NDV,NOBJ,NCON,X,OBJ,G,DF,DG) NGEVAL=NGEVAL+1 GO TO 10 C 50 CONTINUE C C PRINT FINAL RESULTS C IF (IPRINT.EQ.0) GO TO 60 WRITE(IOUT,1650) NFEVAL WRITE(IOUT,1750) NGEVAL 60 CONTINUE C RETURN C ------------------------------------------------------------------ C FORMATS C ------------------------------------------------------------------ 1650 FORMAT(//8X,'NUMBER OF FUNC-CALLS: NFUN =',I5) 1750 FORMAT(/8X,'NUMBER OF GRAD-CALLS: NGRD =',I5) C END