C #CHISM V1A 3-JULY-73. C LAST UPDATE: C FUNCTION CHISM( FT, DT, WT, N, MODE) DIMENSION DT(N), FT(N), WT(N) C C *PURPOSE. C TO EVALUATE THE WEIGHTED SUM OF SQUARES OF DIFFERENCES C BETWEEN THE "FT" ARRAY AND THE "DT" ARRAY. THE WEIGHTS C ARE TAKEN FROM "WT" ARRAY IN ONE OF FOUR FORMS OR ELSE ARE C TAKEN AS CONSTANT EQUAL TO UNITY. C C *PARAMETERS: C C FT - REAL ARRAY OF DIMENSION "N" OR MORE CONTAINING THE FIT. C DT - REAL ARRAY OF DIMENSION "N" OR MORE CONTAINING THE DATA. C WT - REAL ARRAY OF DIMENSION "N" OR MORE CONTAINING THE WEIGHTS C IF "MODE" NON-ZERO. IF "MODE"=0 THIS ARGUMENT IS IGNORED SO C MAY BE ANYTHING AND IT IS NOT NECESSARY TO RESERVE EXTRA C STORAGE FOR WEIGHTS. C N - INTEGER VALUE OF THE NUMBER OF POINTS TO BE SUMMED. C MODE - INTEGER VALUE DETERMINING THE FORM OF WEIGHTING TO BE C USED AS FOLLOWS: C -2 SUMS (FT(I) - DT(I))**2 / (WT(I)**2) C -1 SUMS (FT(I) - DT(I))**2 / WT(I) C 0 SUMS (FT(I) - DT(I))**2 C 1 SUMS (FT(I) - DT(I))**2 * WT(I) C 2 SUMS (FT(I) - DT(I))**2 * (WT(I)**2) C C NOTE! THE "WT" ARRAY CAN BE THE SAME ARRAY AS EITHER OF "DT" C OR "FT" GIVING THE USER STANDARD STATISTICAL FORMS! C C INPUT PARAMETERS: C DT, FT, WT, N, MODE C OUTPUT PARAMETERS: C (REAL FUNCTION VALUE ONLY). C C *METHOD. C THE METHOD IS STRAIGHTFORWARD. IT SHOULD BE NOTED THAT THE C WEIGHTS MAY BE ZERO FOR SOME "I" VALUES THUS DELETING THESE C POINTS FROM THE SUM EVEN IF THE WEIGHTING MODE IS ONE OF THE C RECIPROCAL FORMS . THERE IS NO RESTRICTION OR CHECK ON C NEGATIVE WEIGHTS. C IT SHOULD BE NOTED THAT ALTHOUGH THIS ROUTINE ALLOWS FOR FIVE C DIFFERENT EXPRESSIONS THERE IS LITTLE OVERHEAD IN USING THE C ROUTINE INSTEAD OF THE DIRECTLY CODED LOOPS. THE ROUTINE C HAS BEEN WRITTEN ON THE ASSUMPTION THAT THE "ASSIGNED GO TO" C IS ONE OF THE FASTEST INSTRUCTIONS AVAILABLE (SELDOM WRONG!) C AND THE MINIMUM AMOUNT OF WORK FOR ANY WEIGHT FORM PLUS THREE C OR FOUR "GO TO'S" IS DONE INSIDE THE LOOP. C C *ACCURACY. C C *RESTRICTIONS. C IF "MODE" IS NOT IN THE RANGE -2 TO +2 AN INTERNAL COMPUTED GOTO C WILL BE OUT OF RANGE. THE RESULT DEPENDS ON THE IMPLEMENTATION. C C *ERROR CONDITIONS. C NONE. C C *NON STANDARD ROUTINES CALLED. C NONE. C C *TYPICAL TIMES. C C *ORIGIN. C M.R.MANNING. C C *COMMENTS. C C #END. C INTEGER LABELA, LABELB, LABELC, IX C C ** PHASE 1. - SET SWITCHED GO TO'S. C IX= MODE + 3 GO TO (10, 20, 30, 40, 50), IX C C INVERSE SQUARE WEIGHTS. C 10 ASSIGN 84 TO LABELB GO TO 52 C C INVERSE WEIGHTS. C 20 ASSIGN 90 TO LABELC GO TO 42 C C CONSTANT UNIT WEIGHTS. C 30 ASSIGN 94 TO LABELC ASSIGN 80 TO LABELA GO TO 60 C C WEIGHTS AS ARE. C 40 ASSIGN 92 TO LABELC C 42 ASSIGN 80 TO LABELB GO TO 55 C C WEIGHTS TO BE SQUARED. C 50 ASSIGN 82 TO LABELB C 52 ASSIGN 94 TO LABELC C 55 ASSIGN 70 TO LABELA C C ** PHASE 2. - LOOP FOR EACH POINT. C 60 SUM= 0. DO 100 I= 1, N GO TO LABELA C 70 W= WT(I) IF ( W .EQ. 0.) GO TO 100 GO TO LABELB C 80 DEL= FT(I) - DT(I) GO TO LABELC C 82 DEL= (FT(I) - DT(I))*W GO TO LABELC C 84 DEL= (FT(I) - DT(I))/W GO TO LABELC C 90 SUM= SUM + DEL*DEL/W GO TO 100 C 92 SUM= SUM + DEL*DEL*W GO TO 100 C 94 SUM= SUM + DEL*DEL C 100 CONTINUE C CHISM= SUM RETURN END