C C .................................................................. C C SUBROUTINE AVCAL C C PURPOSE C PERFORM THE CALCULUS OF A FACTORIAL EXPERIMENT USING C OPERATOR SIGMA AND OPERATOR DELTA. THIS SUBROUTINE IS C PRECEDED BY SUBROUTINE ADVAT AND FOLLOWED BY SUBROUTINE C MEANQ IN THE PERFORMANCE OF ANALYSIS OF VARIANCE FOR A C COMPLETE FACTORIAL DESIGN. C C USAGE C CALL AVCAL (K,LEVEL,X,L,ISTEP,LASTS) C C DESCRIPTION OF PARAMETERS C K - NUMBER OF VARIABLES (FACTORS). K MUST BE .GT. ONE. C LEVEL - INPUT VECTOR OF LENGTH K CONTAINING LEVELS (CATE- C GORIES) WITHIN EACH VARIABLE. C X - INPUT VECTOR CONTAINING DATA. DATA HAVE BEEN PLACED C IN VECTOR X BY SUBROUTINE AVDAT. THE LENGTH OF X C IS (LEVEL(1)+1)*(LEVEL(2)+1)*...*(LEVEL(K)+1). C L - THE POSITION IN VECTOR X WHERE THE LAST INPUT DATA C IS LOCATED. L HAS BEEN CALCULATED BY SUBROUTINE C AVDAT. C ISTEP - INPUT VECTOR OF LENGTH K CONTAINING STORAGE CONTROL C STEPS WHICH HAVE BEEN CALCULATED BY SUBROUTINE C AVDAT. C LASTS - WORKING VECTOR OF LENGTH K. C C REMARKS C THIS SUBROUTINE MUST FOLLOW SUBROUTINE AVDAT. C C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED C NONE C C METHOD C THE METHOD IS BASED ON THE TECHNIQUE DISCUSSED BY H. O. C HARTLEY IN 'MATHEMATICAL METHODS FOR DIGITAL COMPUTERS', C EDITED BY A. RALSTON AND H. WILF, JOHN WILEY AND SONS, C 1962, CHAPTER 20. C C .................................................................. C SUBROUTINE AVCAL (K,LEVEL,X,L,ISTEP,LASTS) DIMENSION LEVEL(1),X(1),ISTEP(1),LASTS(1) C C ............................................................... C C IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE C C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION C STATEMENT WHICH FOLLOWS. C C DOUBLE PRECISION X,SUM C C THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS C APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS C ROUTINE. C C ............................................................... C C CALCULATE THE LAST DATA POSITION OF EACH FACTOR C LASTS(1)=L+1 DO 145 I=2,K 145 LASTS(I)=LASTS(I-1)+ISTEP(I) C C PERFORM CALCULUS OF OPERATION C 150 DO 175 I=1,K L=1 LL=1 SUM=0.0 NN=LEVEL(I) FN=NN INCRE=ISTEP(I) LAST=LASTS(I) C C SIGMA OPERATION C 155 DO 160 J=1,NN SUM=SUM+X(L) 160 L=L+INCRE X(L)=SUM C C DELTA OPERATION C DO 165 J=1,NN X(LL)=FN*X(LL)-SUM 165 LL=LL+INCRE SUM=0.0 IF(L-LAST) 167, 175, 175 167 IF(L-LAST+INCRE) 168, 168, 170 168 L=L+INCRE LL=LL+INCRE GO TO 155 170 L=L+INCRE+1-LAST LL=LL+INCRE+1-LAST GO TO 155 175 CONTINUE RETURN END