SUBROUTINE NLFSUB(NV,NVMIN,ND,NDAT,NPOW,IEND,FR, 2 CPOL,CMIN,VARY,CONS,VCONS,XCONS,BBEST,SM,PF,QPF,MPPF,PC,QPC, 3 MPPC,XPC,QXPC,MPXPC,PPCC,QPPCC,MPPPCC,CHI,IFLJ,IFLT) C *** this routine is "essentially" nlfitsub.for without call C *** poly - the call poly's are in ChiPdd, ChiPdq etc. IMPLICIT REAL*8 (A-H,O-Z) C *** This routine initiates POLYSA and calls chiders and robmin PARAMETER(IT=63) CHARACTER*1 CSTOP CHARACTER*4 CPOL,CMIN CHARACTER*64 CTEMP C COMMENT OUT FOR WATCOM REAL*16 QPF,QPC,QXPC,QPPCC LOGICAL VARY DIMENSION VARY(*),CONS(*),VCONS(*),XCONS(*),BBEST(*),SM(*), 2 PF(*),QPF(*),MPPF(IT+1,*),PC(*),QPC(*),MPPC(IT+1,*), 3 XPC(*),QXPC(*),MPXPC(IT+1,*),PPCC(*),QPPCC(*),MPPPCC(IT+1,*) INIT=1 NVD=(NVMIN*(NVMIN+1))/2 12 CONTINUE OPEN(1,FILE='nlfit.tmp') WRITE(1,'(2I3,I9,2X,A)')NV,ND,NDAT,CPOL DO I=1,NV WRITE(1,'(L4,1PE24.15)')VARY(I),CONS(I) ENDDO CLOSE(1) CALL FSYSTEM('POLYSA') C CALL POLYSUB(NV,ND,NDAT,X,VARY,CONS, C 2 PF,QPF,MPPF,CPOL) REWIND(9) REWIND(10) C *** THE CHIDERS SECTION IF(CPOL.EQ.'DOUB')THEN IF(CMIN.EQ.'DOUB')THEN CALL ChiPDD(CHI,PC,PPCC,PF,NPOW,NVMIN,NDAT) ELSEIF(CMIN.EQ.'QUAD')THEN C COMMENT OUT FOR watcom CALL ChiPDQ(CHI,QPC,QPPCC,PF,QPF,NPOW,NVMIN,NDAT) ELSEIF(CMIN.EQ.'MULT')THEN CALL ChiPDM(CHI,MPPC,MPPPCC,PF,MPPF,NPOW,NVMIN,NDAT) ELSE PRINT*,' NO ',CPOL,' ',CMIN,' OPTION ' STOP 37 ENDIF ELSEIF(CPOL.EQ.'QUAD')THEN IF(CMIN.EQ.'QUAD')THEN C COMMENT OUT FOR Watcom CALL ChiPQQ(CHI,QPC,QPPCC,QPF,NPOW,NVMIN,NDAT) ELSEIF(CMIN.EQ.'MULT')THEN C COMMENT OUT FOR Watcom CALL ChiPQM(CHI,MPPC,MPPPCC,QPF,MPPF,NPOW,NVMIN,NDAT) ELSE PRINT*,' NO ',CPOL,' ',CMIN,' OPTION ' STOP 28 ENDIF ELSEIF(CPOL.EQ.'MULT')THEN IF(CMIN.EQ.'MULT')THEN CALL ChiPMM(CHI,MPPC,MPPPCC,MPPF,NPOW,NVMIN,NDAT) ELSE PRINT*,' NO ',CPOL,' ',CMIN,' OPTION ' STOP 29 ENDIF ELSE PRINT*,' NO ',CPOL,' ',CMIN,' OPTION ' STOP 30 ENDIF IF(IEND.EQ.0)THEN IF(CMIN.EQ.'DOUB')THEN CALL SMINV(PPCC,NVMIN,IFLJ,IFLT,ICONT) ELSEIF(CMIN.EQ.'QUAD')THEN C COMMENT OUT FOR WATCOM CALL SMINVQ(QPPCC,NVMIN,IFLJ,IFLT,ICONT) DO I=1,NVD PPCC(I)=QPPCC(I) ENDDO ELSE CALL MPSMINV(MPPPCC,NVMIN,IFLJ,IFLT,ICONT) DO I=1,NVD PPCC(I)=DPMP(MPPPCC(1,I)) ENDDO ENDIF RETURN ENDIF C THE ROBMIN SECTION K=0 DO I=1,NV IF(VARY(I))THEN K=K+1 VCONS(K)=CONS(I) ENDIF ENDDO CALL ROBMIN(CHI,VCONS,XCONS,BBEST,SM,PC,QPC,MPPC,XPC,QXPC, 2 MPXPC,PPCC,QPPCC,MPPPCC,NVMIN,FR,IEND,INIT,CMIN) K=0 DO I=1,NV IF(VARY(I))THEN K=K+1 WRITE(CTEMP,'(G24.16)')VCONS(K) READ(CTEMP,*)CONS(I) ENDIF ENDDO OPEN(1,FILE='STOP.IN',STATUS='OLD',ERR=45) READ(1,'(A)',ERR=45)CSTOP IF(CSTOP.EQ.'S'.OR.CSTOP.EQ.'s')IEND=MIN(IEND,1) 45 CONTINUE GOTO 12 END