SUBROUTINE LOG2PT(KFILDI,KFILDO,X1,Y1,X2,Y2,GL) C C JUNE 2018 GLAHN MOS-2000 C JANUARY 2020 GLAHN CHANGED y (LC) TO Y (UC) IN C SEVERAL PLACES C C C PURPOSE C TO FIT A LOGIT CURVE TO TWO POINTS. THIS CAN BE USED C TO BLEND TWO GRIDS TOGETHER, POINT BY POINT, AFTER C OVERLAPPING THE GRIDS. THE FUNCTION DETERMINED IS C EVALLUATED FOR EACH INTEGER BETWEEN AND INCLUDING C X1 AND X2 INNCLUSIVELY AND THE RESULT RETURNED C IN GL( ). C C A LINEAR LINE IS FIRST FIT TO THE TWO POINTS TO FURNISH C A FIRST GUESS FOR THE ITERATIVE LOGISTIC SOLUTION. C C DIAGNOSTIC INFORMATION AND THE TIME STAMPS CAN BE C ELIMINATED, IF DESIRED. C C DATA SET USE C KFILDI - UNIT NUMBER OF INPUT FILE. (INPUT) (NOT USED) C KFILDO - UNIT NUMBER OF OUTPUT (PRINT) FILE. (OUTPUT) C C VARIABLES C KFILDI = UNIT NUMBER OF INPUT FILE. (INPUT) (NOT USED) C KFILDO = UNIT NUMBER OF OUTPUT (PRINT) FILE. (OUTPUT) C X1 = FIRST X POSITION. (INPUT) C Y1 = FIRST Y POSITION. (INPUT) C X2 = SECOND X POSITION. (INPUT) C Y2 = SECOND Y POSITION. (INPUT) C GL(L) = LOGIT VALUES FOR S = X1 THROUGH X2. THE ARRAY C SIZE OF GL( ) IS NINT(X2). (OUTPUT) C 1 2 3 4 5 6 7 X C C NONSYSTEM SUBROUTINES USED C NONE C DIMENSION BSTAR(2),B(2),C(2,2),D(2),X(2),Y(2),P(2), 1 CINV(2,2),CINVD(2),GL(NINT(X2)),HL(NINT(X2)) C C FIRST FIT A LINEAR LINE 'Y = A + BX' TO THE TWO POINTS TO C FURNISH THE FIRST GUESS FOR THE LOGIT. C CALL TIMPR(KFILDO,KFILDO,'START LOG2PT ') C CCCC WRITE(KFILDO,105)X1,Y1,X2,Y2 CCCC 105 FORMAT(/' AT 105 IN LOG2PT--X1,Y1,X2,Y2',4F10.4) C B1=(Y2-Y1)/(X2-X1) B0=Y1-X1*B1 CCCC WRITE(KFILDO,110)B0,B1 CCCC 110 FORMAT(/' LINE IS B0 + B1*X WITH B0 = ',F10.4, CCCC 1 ' AND B1 =',F10.4) C C VERIFY. C Y11=B0+B1*X1 Y22=B0+B1*X2 CCCC WRITE(KFILDO,115)Y11,Y22 CCCC 115 FORMAT(/' VERIFY, Y11, Y22 =',2F10.3) C C COMPUTE INITIAL LOGIT FIT FOR Y11 AND Y22 C X(1)=X1 X(2)=X2 Y(1)=Y1 Y(2)=Y2 B(1)=B0 B(2)=B1 C Y11=EXP(B(1)+B(2)*X(1)) Y22=EXP(B(1)+B(2)*X(2)) Y11=Y11/(1.+Y11) Y22=Y22/(1.+Y22) C CCCC WRITE(KFILDO,118)Y11,Y22 CCCC 118 FORMAT(/' Y11,Y22',2F10.4) C ICOUNT=0 C 120 ICOUNT=ICOUNT+1 C(1,1)=0. C(2,1)=0. C(1,2)=0. C(2,2)=0. D(1)=0. D(2)=0. C DO 140 L=1,2 P(L)=EXP(B(1)+B(2)*X(L)) P(L)=P(L)/(1.+P(L)) C(1,1)=C(1,1)+P(L)**2-P(L) C(2,1)=C(2,1)+X(L)*(P(L)**2-P(L)) C(1,2)=C(1,2)+X(L)*(P(L)**2-P(L)) C(2,2)=C(2,2)+X(L)**2*(P(L)**2-P(L)) D(1)=D(1)+Y(L)-P(L) D(2)=D(2)+X(L)*(Y(L)-P(L)) C 140 CONTINUE C DETC=C(1,1)*C(2,2)-C(1,2)*C(2,1) CINV(1,1)=C(2,2)/DETC CINV(2,1)=-C(2,1)/DETC CINV(1,2)=-C(1,2)/DETC CINV(2,2)=C(1,1)/DETC C CINVD(1)=CINV(1,1)*D(1)+CINV(1,2)*D(2) CINVD(2)=CINV(2,1)*D(1)+CINV(2,2)*D(2) C BSTAR(1)=B(1)-CINVD(1) BSTAR(2)=B(2)-CINVD(2) C Y11=EXP(BSTAR(1)+BSTAR(2)*X(1)) Y22=EXP(BSTAR(1)+BSTAR(2)*X(2)) Y11=Y11/(1.+Y11) Y22=Y22/(1.+Y22) C CCCC WRITE(KFILDO,150)BSTAR(1),BSTAR(2),Y11,Y22 CCCC 150 FORMAT(/' BSTAR(1),BSTAR(2),Y11,Y22',4F10.4) C B(1)=BSTAR(1) B(2)=BSTAR(2) IF(ICOUNT.LT.10)GO TO 120 C CCCC WRITE(KFILDO,164) CCCC 164 FORMAT(/' X LOGIT LINEAR') C DO 160 L=1,NINT(X2) GL(L)=EXP(B(1)+B(2)*L) GL(L)=GL(L)/(1.+GL(L)) HL(L)=L/(X2+1) CCCC WRITE(KFILDO,165)L,GL(L),HL(L) CCCCC THE PRINT FOR EACH VALUE OF X IS (1) THE LOGIT VALUE, CCCCC AND (2) A LINEAR FIT. CCCC 165 FORMAT(/' L,GL(L),HL(L)',I4,2F10.4) 160 CONTINUE C CCCC CALL TIMPR(KFILDO,KFILDO,'END LOG2PT ') C RETURN END