| PROGRAM FM080 |
| |
| C COMMENT SECTION 00010080 |
| C 00020080 |
| C FM080 00030080 |
| C 00040080 |
| C THIS ROUTINE CONTAINS EXTERNAL FUNCTION REFERENCE TESTS. 00050080 |
| C THE FUNCTION SUBPROGRAMS CALLED BY THIS ROUTINE ARE FF081, 00060080 |
| C FF082 AND FF083. THE FUNCTION SUBPROGRAMS ARE DEFINED AS 00070080 |
| C FF081 = INTEGER, FF082 = REAL, FF083 = IMPLICIT REAL. 00080080 |
| C THE FUNCTION SUBPROGRAM DUMMY ARGUMENTS MUST AGREE IN ORDER, 00090080 |
| C NUMBER AND TYPE WITH THE CORRESPONDING ACTUAL ARGUMENTS OF THE 00100080 |
| C MAIN PROGRAM. THE ARGUMENTS OF THE FUNCTION SUBPROGRAMS WILL 00110080 |
| C CORRESPOND TO ACTUAL ARGUMENT LIST REFERENCES OF VARIABLE-NAME, 00120080 |
| C ARRAY-NAME, ARRAY-ELEMENT-NAME AND EXPRESSION RESPECTIVELY. 00130080 |
| C 00140080 |
| C THIS ROUTINE WILL TEST THE VALUE OF THE FUNCTION AND THE 00150080 |
| C FUNCTION ARGUMENTS RETURNED FOLLOWING THE FUNCTION REFERENCE CALL.00160080 |
| C 00170080 |
| C 00180080 |
| C REFERENCES 00190080 |
| C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, 00200080 |
| C X3.9-1978 00210080 |
| C 00220080 |
| C SECTION 2.6, ARRAY 00230080 |
| C SECTION 15.5.2, REFERENCING EXTERNAL FUNCTIONS 00240080 |
| C SECTION 17.2, EVENTS THAT CAUSE ENTITIES TO BECOME DEFINED 00250080 |
| DIMENSION IADN1A (5), IADN2A (4,4) 00260080 |
| DIMENSION RADN3A (3,6,3), RADN1A (10) 00270080 |
| DIMENSION IADN3A (3,4,5) 00280080 |
| INTEGER FF081 00290080 |
| REAL FF082 00300080 |
| C 00310080 |
| C ********************************************************** 00320080 |
| C 00330080 |
| C A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE 00340080 |
| C BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN NATIONAL STANDARD 00350080 |
| C PROGRAMMING LANGUAGE FORTRAN X3.9-1978, HAS BEEN DEVELOPED BY THE 00360080 |
| C FEDERAL COBOL COMPILER TESTING SERVICE. THE FORTRAN COMPILER 00370080 |
| C VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT ROUTINES, THEIR RELATED00380080 |
| C DATA, AND AN EXECUTIVE SYSTEM. EACH AUDIT ROUTINE IS A FORTRAN 00390080 |
| C PROGRAM, SUBPROGRAM OR FUNCTION WHICH INCLUDES TESTS OF SPECIFIC 00400080 |
| C LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING THE RESULT 00410080 |
| C OF EXECUTING THESE TESTS. 00420080 |
| C 00430080 |
| C THIS PARTICULAR PROGRAM/SUBPROGRAM/FUNCTION CONTAINS FEATURES 00440080 |
| C FOUND ONLY IN THE SUBSET AS DEFINED IN X3.9-1978. 00450080 |
| C 00460080 |
| C SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO - 00470080 |
| C 00480080 |
| C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY 00490080 |
| C SOFTWARE STANDARDS VALIDATION GROUP 00500080 |
| C BUILDING 225 RM A266 00510080 |
| C GAITHERSBURG, MD 20899 00520080 |
| C ********************************************************** 00530080 |
| C 00540080 |
| C 00550080 |
| C 00560080 |
| C INITIALIZATION SECTION 00570080 |
| C 00580080 |
| C INITIALIZE CONSTANTS 00590080 |
| C ************** 00600080 |
| C I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER. 00610080 |
| I01 = 5 00620080 |
| C I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER. 00630080 |
| I02 = 6 00640080 |
| C SYSTEM ENVIRONMENT SECTION 00650080 |
| C 00660080 |
| CX010 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-010 CONTROL CARD. 00670080 |
| C THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5 00680080 |
| C (UNIT NUMBER FOR CARD READER). 00690080 |
| CX011 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-011 CONTROL CARD. 00700080 |
| C THE CX011 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00710080 |
| C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX010 ABOVE. 00720080 |
| C 00730080 |
| CX020 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-020 CONTROL CARD. 00740080 |
| C THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02 = 6 00750080 |
| C (UNIT NUMBER FOR PRINTER). 00760080 |
| CX021 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-021 CONTROL CARD. 00770080 |
| C THE CX021 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00780080 |
| C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX020 ABOVE. 00790080 |
| C 00800080 |
| IVPASS=0 00810080 |
| IVFAIL=0 00820080 |
| IVDELE=0 00830080 |
| ICZERO=0 00840080 |
| C 00850080 |
| C WRITE PAGE HEADERS 00860080 |
| WRITE (I02,90000) 00870080 |
| WRITE (I02,90001) 00880080 |
| WRITE (I02,90002) 00890080 |
| WRITE (I02, 90002) 00900080 |
| WRITE (I02,90003) 00910080 |
| WRITE (I02,90002) 00920080 |
| WRITE (I02,90004) 00930080 |
| WRITE (I02,90002) 00940080 |
| WRITE (I02,90011) 00950080 |
| WRITE (I02,90002) 00960080 |
| WRITE (I02,90002) 00970080 |
| WRITE (I02,90005) 00980080 |
| WRITE (I02,90006) 00990080 |
| WRITE (I02,90002) 01000080 |
| C 01010080 |
| C TEST SECTION 01020080 |
| C 01030080 |
| C EXTERNAL FUNCTION REFERENCE - FUNCTION SUBPROGRAM DEFINED AS 01040080 |
| C INTEGER (FF081) 01050080 |
| C 01060080 |
| 6741 CONTINUE 01070080 |
| IVTNUM = 674 01080080 |
| C 01090080 |
| C TEST 674 THROUGH 679 TEST THE FUNCTION AND ARGUMENT VALUES 01100080 |
| C FROM REFERENCE OF FUNCTION FF081. FUNCTION SUBPROGRAM FF081 IS 01110080 |
| C DEFINED AS INTEGER. 01120080 |
| C 01130080 |
| C **** TEST 674 **** 01140080 |
| C 01150080 |
| C TEST 674 TESTS THE FUNCTION VALUE RETURNED FROM FUNCTION FF081 01160080 |
| C 01170080 |
| IF (ICZERO) 36740,6740,36740 01180080 |
| 6740 CONTINUE 01190080 |
| IVON0A = 0 01200080 |
| IVON02 = 2 01210080 |
| IADN1A (3) = 8 01220080 |
| IADN1A (2) = 4 01230080 |
| IADN2A (1,3) =10 01240080 |
| IVON0A = FF081 (IVON02, IADN1A, IADN2A, 999) 01250080 |
| GO TO 46740 01260080 |
| 36740 IVDELE = IVDELE + 1 01270080 |
| WRITE (I02,80003) IVTNUM 01280080 |
| IF (ICZERO) 46740,6751,46740 01290080 |
| 46740 IF (IVON0A - 1015) 26740,16740,26740 01300080 |
| 16740 IVPASS = IVPASS + 1 01310080 |
| WRITE (I02,80001) IVTNUM 01320080 |
| GO TO 6751 01330080 |
| 26740 IVFAIL = IVFAIL + 1 01340080 |
| IVCORR = 1015 01350080 |
| IVCOMP = IVON0A 01360080 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 01370080 |
| 6751 CONTINUE 01380080 |
| IVTNUM = 675 01390080 |
| C 01400080 |
| C **** TEST 675 **** 01410080 |
| C 01420080 |
| C TEST 675 TESTS THE RETURN VALUE OF VARIABLE-NAME ARGUMENT 01430080 |
| C IVON02. VALUE OF IVON02 SHOULD BE 4. 01440080 |
| C 01450080 |
| IF (ICZERO) 36750,6750,36750 01460080 |
| 6750 CONTINUE 01470080 |
| GO TO 46750 01480080 |
| 36750 IVDELE = IVDELE + 1 01490080 |
| WRITE (I02,80003) IVTNUM 01500080 |
| IF (ICZERO) 46750,6761,46750 01510080 |
| 46750 IF (IVON02 - 4) 26750,16750,26750 01520080 |
| 16750 IVPASS = IVPASS + 1 01530080 |
| WRITE (I02,80001) IVTNUM 01540080 |
| GO TO 6761 01550080 |
| 26750 IVFAIL = IVFAIL + 1 01560080 |
| IVCORR = 4 01570080 |
| IVCOMP = IVON02 01580080 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 01590080 |
| 6761 CONTINUE 01600080 |
| IVTNUM = 676 01610080 |
| C 01620080 |
| C **** TEST 676 **** 01630080 |
| C 01640080 |
| C TEST 676 TESTS THE RETURN VALUE OF ARRAY-NAME ARGUMENT 01650080 |
| C IADN1A. IADN1A (2) IS INCREMENTED BY 40 IN FUNCTION SUBPROGRAM 01660080 |
| C AND SHOULD RETURN A VALUE OF 44. 01670080 |
| C 01680080 |
| IF (ICZERO) 36760,6760,36760 01690080 |
| 6760 CONTINUE 01700080 |
| GO TO 46760 01710080 |
| 36760 IVDELE = IVDELE + 1 01720080 |
| WRITE (I02,80003) IVTNUM 01730080 |
| IF (ICZERO) 46760,6771,46760 01740080 |
| 46760 IF (IADN1A (2) - 44) 26760,16760,26760 01750080 |
| 16760 IVPASS = IVPASS + 1 01760080 |
| WRITE (I02,80001) IVTNUM 01770080 |
| GO TO 6771 01780080 |
| 26760 IVFAIL = IVFAIL + 1 01790080 |
| IVCORR = 44 01800080 |
| IVCOMP = IADN1A (2) 01810080 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 01820080 |
| 6771 CONTINUE 01830080 |
| IVTNUM = 677 01840080 |
| C 01850080 |
| C **** TEST 677 **** 01860080 |
| C 01870080 |
| C TEST 677 TESTS THE RETURN VALUE OF ARRAY-NAME ARGUMENT IADN1A. 01880080 |
| C IADN1A (3) WAS NOT MODIFFED BY FUNCTION SUBPROGRAM AND SHOULD 01890080 |
| C HAVE A VALUE OF 8 01900080 |
| C 01910080 |
| IF (ICZERO) 36770,6770,36770 01920080 |
| 6770 CONTINUE 01930080 |
| GO TO 46770 01940080 |
| 36770 IVDELE = IVDELE + 1 01950080 |
| WRITE (I02,80003) IVTNUM 01960080 |
| IF (ICZERO) 46770,6781,46770 01970080 |
| 46770 IF (IADN1A (3) - 8) 26770,16770,26770 01980080 |
| 16770 IVPASS = IVPASS + 1 01990080 |
| WRITE (I02,80001) IVTNUM 02000080 |
| GO TO 6781 02010080 |
| 26770 IVFAIL = IVFAIL + 1 02020080 |
| IVCORR = 8 02030080 |
| IVCOMP = IADN1A (3) 02040080 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 02050080 |
| 6781 CONTINUE 02060080 |
| IVTNUM = 678 02070080 |
| C 02080080 |
| C **** TEST 678 **** 02090080 |
| C 02100080 |
| C TEST 678 TESTS THE RETURN VALUE OF ARRAY-ELEMENT-NAME 02110080 |
| C IADN2A (1,3). IADN2A (1,3) WAS INCREMENTED BY 70 IN THE FUNCTION 02120080 |
| C SUBPROGRAM AND SHOULD CONTAIN A VALUE OF 80. 02130080 |
| C 02140080 |
| IF (ICZERO) 36780,6780,36780 02150080 |
| 6780 CONTINUE 02160080 |
| GO TO 46780 02170080 |
| 36780 IVDELE = IVDELE + 1 02180080 |
| WRITE (I02,80003) IVTNUM 02190080 |
| IF (ICZERO) 46780,6791,46780 02200080 |
| 46780 IF (IADN2A (1,3) - 80) 26780,16780,26780 02210080 |
| 16780 IVPASS = IVPASS + 1 02220080 |
| WRITE (I02,80001) IVTNUM 02230080 |
| GO TO 6791 02240080 |
| 26780 IVFAIL = IVFAIL + 1 02250080 |
| IVCORR = 80 02260080 |
| IVCOMP = IADN2A (1,3) 02270080 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 02280080 |
| 6791 CONTINUE 02290080 |
| IVTNUM = 679 02300080 |
| C 02310080 |
| C **** TEST 679 **** 02320080 |
| C 02330080 |
| C TEST 679 TESTS THE VALUE OF INTEGER FUNCTION ASSIGNED 02340080 |
| C TO A REAL VARIABLE. 02350080 |
| C 02360080 |
| IF (ICZERO) 36790,6790,36790 02370080 |
| 6790 CONTINUE 02380080 |
| RVON0A = 0.0 02390080 |
| IVON02 = 2 02400080 |
| IADN1A (2) = 4 02410080 |
| IADN2A (1,3) = 10 02420080 |
| RVON0A = FF081 (IVON02, IADN1A, IADN2A, 999) 02430080 |
| GO TO 46790 02440080 |
| 36790 IVDELE = IVDELE + 1 02450080 |
| WRITE (I02,80003) IVTNUM 02460080 |
| IF (ICZERO) 46790,6801,46790 02470080 |
| 46790 IF (RVON0A - 1014.5) 26790,16790,46791 02480080 |
| 46791 IF (RVON0A - 1015.5) 16790,16790,26790 02490080 |
| 16790 IVPASS = IVPASS + 1 02500080 |
| WRITE (I02,80001) IVTNUM 02510080 |
| GO TO 6801 02520080 |
| 26790 IVFAIL = IVFAIL + 1 02530080 |
| RVCORR = 1015.0 02540080 |
| RVCOMP = RVON0A 02550080 |
| WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 02560080 |
| 6801 CONTINUE 02570080 |
| IVTNUM = 680 02580080 |
| C 02590080 |
| C EXTERNAL FUNCTION REFERENCE - FUNCTION SUBPROGRAM FF082 DEFINED AS02600080 |
| C REAL 02610080 |
| C 02620080 |
| C TESTS 680 THRU 685 TESTS THE FUNCTION AND ARGUMENT VALUES 02630080 |
| C FROM THE FUNCTION REFERENCE TO SUBPROGRAM FF082. THE FUNCTION 02640080 |
| C SUBPROGRAM IS DEFINED AS REAL. 02650080 |
| C 02660080 |
| C **** TEST 680 *** 02670080 |
| C 02680080 |
| C TEST 680 TESTS THE VALUE OF THE FUNCTION FF082. VALUE OF 02690080 |
| C FUNCTION SHOULD BE 339.0. 02700080 |
| C 02710080 |
| IF (ICZERO) 36800,6800,36800 02720080 |
| 6800 CONTINUE 02730080 |
| RVON01 = 2.0 02740080 |
| RADN3A (2,5,2) = 100.0 02750080 |
| RADN1A (5) = 210.5 02760080 |
| RVON0A = 0.0 02770080 |
| RVON0A = FF082 (RVON01, RADN3A, RADN1A, 26.5) 02780080 |
| GO TO 46800 02790080 |
| 36800 IVDELE = IVDELE + 1 02800080 |
| WRITE (I02, 80003) IVTNUM 02810080 |
| IF (ICZERO) 46800,6811,46800 02820080 |
| 46800 IF (RVON0A - 338.5) 26800,16800,46801 02830080 |
| 46801 IF (RVON0A - 339.5) 16800,16800,26800 02840080 |
| 16800 IVPASS = IVPASS + 1 02850080 |
| WRITE (I02,80001) IVTNUM 02860080 |
| GO TO 6811 02870080 |
| 26800 IVFAIL = IVFAIL + 1 02880080 |
| RVCORR = 339.0 02890080 |
| RVCOMP = RVON0A 02900080 |
| WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 02910080 |
| 6811 CONTINUE 02920080 |
| IVTNUM = 681 02930080 |
| C 02940080 |
| C **** TEST 681 **** 02950080 |
| C 02960080 |
| C TEST 681 TESTS THE VALUE OF THE VARIABLE-NAME ARGUMENT RVON01 02970080 |
| C FOLLOWING THE FUNCTION REFERENCE. VALUE OF RVON01 SHOULD BE 8.4. 02980080 |
| C 02990080 |
| IF (ICZERO) 36810,6810,36810 03000080 |
| 6810 CONTINUE 03010080 |
| GO TO 46810 03020080 |
| 36810 IVDELE = IVDELE + 1 03030080 |
| WRITE (I02,80003) IVTNUM 03040080 |
| IF (ICZERO) 46810,6821,46810 03050080 |
| 46810 IF (RVON01 - 8.395) 26810,16810,46811 03060080 |
| 46811 IF (RVON01 - 8.405) 16810,16810,26810 03070080 |
| 16810 IVPASS = IVPASS + 1 03080080 |
| WRITE (I02,80001) IVTNUM 03090080 |
| GO TO 6821 03100080 |
| 26810 IVFAIL = IVFAIL + 1 03110080 |
| RVCORR = 8.4 03120080 |
| RVCOMP = RVON01 03130080 |
| WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 03140080 |
| 6821 CONTINUE 03150080 |
| IVTNUM = 682 03160080 |
| C 03170080 |
| C **** TEST 682 **** 03180080 |
| C 03190080 |
| C TEST 682 TESTS THE VALUE OF THE ARRAY-NAME ARGUMENT RADN3A 03200080 |
| C FOLLOWING THE FUNCTION REFERENCE. RADN3A (2,5,2) WAS INITIALIZED 03210080 |
| C IN MAIN PROGRAM AND INCREMENTED IN SUBPROGRAM. VALUE OF RADN3A 03220080 |
| C (2,5,2) SHOULD BE 112.2. 03230080 |
| C 03240080 |
| IF (ICZERO) 36820,6820,36820 03250080 |
| 6820 CONTINUE 03260080 |
| GO TO 46820 03270080 |
| 36820 IVDELE = IVDELE + 1 03280080 |
| WRITE (I02,80003) IVTNUM 03290080 |
| IF (ICZERO) 46820,6831,46820 03300080 |
| 46820 IF (RADN3A (2,5,2) - 111.7) 26820,16820,46821 03310080 |
| 46821 IF (RADN3A (2,5,2) - 112.7) 16820,16820,26820 03320080 |
| 16820 IVPASS = IVPASS + 1 03330080 |
| WRITE (I02,80001) IVTNUM 03340080 |
| GO TO 6831 03350080 |
| 26820 IVFAIL = IVFAIL + 1 03360080 |
| RVCORR = 112.2 03370080 |
| RVCOMP = RADN3A (2,5,2) 03380080 |
| WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 03390080 |
| 6831 CONTINUE 03400080 |
| IVTNUM = 683 03410080 |
| C 03420080 |
| C **** TEST 683 **** 03430080 |
| C 03440080 |
| C TEST 683 TESTS THE VALUE OF THE ARRAY-NAME ARGUMENT RADN3A 03450080 |
| C FOLLOWING THE FUNCTION REFERENCE. RADN3A (1,2,1) WAS INITIALIZED 03460080 |
| C IN THE SUBPROGRAM. THE VALUE OF RADN3A (1,2,1) SHOULD BE 612.2. 03470080 |
| C 03480080 |
| IF (ICZERO) 36830,6830,36830 03490080 |
| 6830 CONTINUE 03500080 |
| GO TO 46830 03510080 |
| 36830 IVDELE = IVDELE + 1 03520080 |
| WRITE (I02,80003) IVTNUM 03530080 |
| IF (ICZERO) 46830,6841,46830 03540080 |
| 46830 IF (RADN3A (1,2,1) - 611.7) 26830,16830,46831 03550080 |
| 46831 IF (RADN3A (1,2,1) - 612.7) 16830,16830,26830 03560080 |
| 16830 IVPASS = IVPASS + 1 03570080 |
| WRITE (I02,80001) IVTNUM 03580080 |
| GO TO 6841 03590080 |
| 26830 IVFAIL = IVFAIL + 1 03600080 |
| RVCORR = 612.2 03610080 |
| RVCOMP = RADN3A (1,2,1) 03620080 |
| WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 03630080 |
| 6841 CONTINUE 03640080 |
| IVTNUM = 684 03650080 |
| C 03660080 |
| C **** TEST 684 **** 03670080 |
| C 03680080 |
| C TEST 684 TESTS THE VALUE OF THE ARRAY-ELEMENT-NAME ARGUMENT 03690080 |
| C RADN1A FOLLOWING THE FUNCTION REFERENCE. RADN1A (5) WAS 03700080 |
| C INITIALIZED IN THE MAIN PROGRAM AND INCREMENTED BY 18.8 IN THE 03710080 |
| C FUNCTION SUBPROGRAM. THE VALUE OF RADN1A SHOULD BE 229.3. 03720080 |
| C 03730080 |
| IF (ICZERO) 36840,6840,36840 03740080 |
| 6840 CONTINUE 03750080 |
| GO TO 46840 03760080 |
| 36840 IVDELE = IVDELE + 1 03770080 |
| WRITE (I02,80003) IVTNUM 03780080 |
| IF (ICZERO) 46840,6851,46840 03790080 |
| 46840 IF (RADN1A (5) - 228.8) 26840,16840,46841 03800080 |
| 46841 IF (RADN1A (5) - 229.8) 16840,16840,26840 03810080 |
| 16840 IVPASS = IVPASS + 1 03820080 |
| WRITE (I02,80001) IVTNUM 03830080 |
| GO TO 6851 03840080 |
| 26840 IVFAIL = IVFAIL + 1 03850080 |
| RVCORR = 229.3 03860080 |
| RVCOMP = RADN1A (5) 03870080 |
| WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 03880080 |
| 6851 CONTINUE 03890080 |
| IVTNUM = 685 03900080 |
| C 03910080 |
| C **** TEST 685 **** 03920080 |
| C 03930080 |
| C TEST 685 TESTS THE RESULTANT VALUE WHERE THE FUNCTION 03940080 |
| C SUBPROGRAM IS DEFINED AS REAL AND THE VARIABLE TO WHICH THE 03950080 |
| C FUNCTION VALUE IS ASSIGNED IN THE MAIN PROGRAM IS DEFINED AS 03960080 |
| C INTEGER. 03970080 |
| C 03980080 |
| IF (ICZERO) 36850,6850,36850 03990080 |
| 6850 CONTINUE 04000080 |
| RVON01 = 4.0 04010080 |
| RADN3A (2,5,2) = 200.0 04020080 |
| RADN1A (5) = 2.85 04030080 |
| IVON0A = 0.0 04040080 |
| IVON0A = FF082 (RVON01, RADN3A, RADN1A, 102.68) 04050080 |
| GO TO 46850 04060080 |
| 36850 IVDELE = IVDELE + 1 04070080 |
| WRITE (I02,80003) IVTNUM 04080080 |
| IF (ICZERO) 46850,6861,46850 04090080 |
| 46850 IF (IVON0A - 309) 26850,16850,26850 04100080 |
| 16850 IVPASS = IVPASS + 1 04110080 |
| WRITE (I02,80001) IVTNUM 04120080 |
| GO TO 6861 04130080 |
| 26850 IVFAIL = IVFAIL + 1 04140080 |
| IVCORR = 309 04150080 |
| IVCOMP = IVON0A 04160080 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 04170080 |
| 6861 CONTINUE 04180080 |
| IVTNUM = 686 04190080 |
| C 04200080 |
| C TESTS 686 THRU 690 TESTS THE FUNCTION AND ARGUMENT VALUES 04210080 |
| C FROM THE EXTERNAL FUNCTION REFERENCE TO SUBPROGRAM FF083. THE 04220080 |
| C FUNCTION SUBPROGRAM IS AN IMPLICIT DEFINITION OF REAL. 04230080 |
| C 04240080 |
| C ***** TEST 686 ***** 04250080 |
| C 04260080 |
| C TEST 686 TESTS THE VALUE OF FUNCTION FF082. THE VALUE OF THE 04270080 |
| C FUNCTION SHOULD BE 921.8. 04280080 |
| C 04290080 |
| IF (ICZERO) 36860,6860,36860 04300080 |
| 6860 CONTINUE 04310080 |
| C 04320080 |
| C 04330080 |
| IVON01 = 826 04340080 |
| IADN2A (1,1) = 77 04350080 |
| IADN3A (2,3,4) = 10 04360080 |
| RVON02 = 4.4 04370080 |
| RVON03 = 0.0 04380080 |
| C 04390080 |
| RVON03 = FF083 (IVON01, IADN2A, IADN3A, RVON02 * 2.0) 04400080 |
| GO TO 46860 04410080 |
| 36860 IVDELE = IVDELE + 1 04420080 |
| WRITE (I02,80003) IVTNUM 04430080 |
| IF (ICZERO) 46860,6871,46860 04440080 |
| 46860 IF (RVON03 - 921.3) 26860,16860,46861 04450080 |
| 46861 IF (RVON03 - 922.3) 16860,16860,26860 04460080 |
| 16860 IVPASS = IVPASS + 1 04470080 |
| WRITE (I02,80001) IVTNUM 04480080 |
| GO TO 6871 04490080 |
| 26860 IVFAIL = IVFAIL + 1 04500080 |
| RVCORR = 921.8 04510080 |
| RVCOMP = RVON03 04520080 |
| WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 04530080 |
| 6871 CONTINUE 04540080 |
| IVTNUM = 687 04550080 |
| C 04560080 |
| C **** TEST 687 ***** 04570080 |
| C 04580080 |
| C TEST 687 TESTS THE VALUE OF THE VARIABLE-NAME ARGUMENT IVON01 04590080 |
| C FOLLOWING THE FUNCTION REFERENCE. THE VALUE OF IVON01 SHOULD BE 04600080 |
| C 836. 04610080 |
| C 04620080 |
| IF (ICZERO) 36870,6870,36870 04630080 |
| 6870 CONTINUE 04640080 |
| GO TO 46870 04650080 |
| 36870 IVDELE = IVDELE + 1 04660080 |
| WRITE (I02,80003) IVTNUM 04670080 |
| IF (ICZERO) 46870,6881,46870 04680080 |
| 46870 IF (IVON01 - 836) 26870,16870,26870 04690080 |
| 16870 IVPASS = IVPASS + 1 04700080 |
| WRITE (I02,80001) IVTNUM 04710080 |
| GO TO 6881 04720080 |
| 26870 IVFAIL = IVFAIL + 1 04730080 |
| IVCORR = 836 04740080 |
| IVCOMP = IVON01 04750080 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 04760080 |
| 6881 CONTINUE 04770080 |
| IVTNUM = 688 04780080 |
| C 04790080 |
| C **** TEST 688 ***** 04800080 |
| C 04810080 |
| C TEST 688 TESTS THE VALUE OF THE ARRAY-NAME ARGUMENT IADN2A 04820080 |
| C FOLLOWING THE FUNCTION REFERENCE. THE ACTUAL ARGUMENT WAS 04830080 |
| C INITIALIZED IN THE MAIN PROGRAM AND IS INCREMENTED IN THE 04840080 |
| C SUBPROGRAM. THE VALUE OF IADN2A (1,1) SHOULD BE 97. 04850080 |
| C 04860080 |
| IF (ICZERO) 36880,6880,36880 04870080 |
| 6880 CONTINUE 04880080 |
| GO TO 46880 04890080 |
| 36880 IVDELE = IVDELE + 1 04900080 |
| WRITE (I02,80003) IVTNUM 04910080 |
| IF (ICZERO) 46880,6880,46880 04920080 |
| 46880 IF (IADN2A (1,1) - 97) 26880,16880,26880 04930080 |
| 16880 IVPASS = IVPASS + 1 04940080 |
| WRITE (I02,80001) IVTNUM 04950080 |
| GO TO 6891 04960080 |
| 26880 IVFAIL = IVFAIL + 1 04970080 |
| IVCORR = 97 04980080 |
| IVCOMP = IADN2A (1,1) 04990080 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 05000080 |
| 6891 CONTINUE 05010080 |
| IVTNUM = 689 05020080 |
| C 05030080 |
| C **** TEST 689 **** 05040080 |
| C 05050080 |
| C TEST 689 TESTS THE VALUE OF THE ARRAY-ELEMENT-NAME ARGUMENT 05060080 |
| C IADN3A FOLLOWING THE FUNCTION REFERENCE. IADN3A (2,3,4) 05070080 |
| C WAS INTIALIZED IN THE MAIN PROGRAM AND INCREMENTED BY 40 IN THE 05080080 |
| C FUNCTION SUBPROGRAM. THE VALUE OF IADN3A SHOULD BE 50. 05090080 |
| C 05100080 |
| IF (ICZERO) 36890,6890,36890 05110080 |
| 6890 CONTINUE 05120080 |
| GO TO 46890 05130080 |
| 36890 IVDELE = IVDELE + 1 05140080 |
| WRITE (I02,80003) IVTNUM 05150080 |
| IF (ICZERO) 46890,6901,46890 05160080 |
| 46890 IF (IADN3A (2,3,4) - 50) 26890,16890,26890 05170080 |
| 16890 IVPASS = IVPASS + 1 05180080 |
| WRITE (I02,80001) IVTNUM 05190080 |
| GO TO 6901 05200080 |
| 26890 IVFAIL = IVFAIL + 1 05210080 |
| IVCORR = 50 05220080 |
| IVCOMP = IADN3A (2,3,4) 05230080 |
| WRITE (I02,80004) IVTNUM,IVCOMP,IVCORR 05240080 |
| 6901 CONTINUE 05250080 |
| IVTNUM = 690 05260080 |
| C 05270080 |
| C **** TEST 690 **** 05280080 |
| C 05290080 |
| C TEST 690 TESTS THE RESULTANT VALUE WHERE THE FUNCTION 05300080 |
| C SUBPROGRAM IS IMPLICITY DEFINED AS REAL AND THE VARIABLE 05310080 |
| C TO WHICH THE FUNCTION VALUE IS ASSIGNED IN THE MAIN PROGRAM 05320080 |
| C IS DEFINED AS INTEGER. THE VALUE OF IVON03 SHOULD BE 329. 05330080 |
| C 05340080 |
| IF (ICZERO) 36900,6900,36900 05350080 |
| 6900 CONTINUE 05360080 |
| IVON01 = 226 05370080 |
| IADN2A (1,1) = 66 05380080 |
| IADN3A (2,3,4) = 20 05390080 |
| RVON02 = 8.8 05400080 |
| IVON03 = 0 05410080 |
| C 05420080 |
| IVON03 = FF083 (IVON01,IADN2A,IADN3A,RVON02 * 2.0) 05430080 |
| C 05440080 |
| GO TO 46900 05450080 |
| 36900 IVDELE = IVDELE + 1 05460080 |
| WRITE (I02,80003) IVTNUM 05470080 |
| IF (ICZERO) 46900,6911,46900 05480080 |
| 46900 IF (IVON03 - 329) 26900,16900,26900 05490080 |
| 16900 IVPASS = IVPASS + 1 05500080 |
| WRITE (I02,80001) IVTNUM 05510080 |
| GO TO 6911 05520080 |
| 26900 IVFAIL = IVFAIL + 1 05530080 |
| IVCORR = 329 05540080 |
| IVCOMP = IVON03 05550080 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 05560080 |
| 6911 CONTINUE 05570080 |
| C 05580080 |
| C WRITE PAGE FOOTINGS AND RUN SUMMARIES 05590080 |
| 99999 CONTINUE 05600080 |
| WRITE (I02,90002) 05610080 |
| WRITE (I02,90006) 05620080 |
| WRITE (I02,90002) 05630080 |
| WRITE (I02,90002) 05640080 |
| WRITE (I02,90007) 05650080 |
| WRITE (I02,90002) 05660080 |
| WRITE (I02,90008) IVFAIL 05670080 |
| WRITE (I02,90009) IVPASS 05680080 |
| WRITE (I02,90010) IVDELE 05690080 |
| C 05700080 |
| C 05710080 |
| C TERMINATE ROUTINE EXECUTION 05720080 |
| STOP 05730080 |
| C 05740080 |
| C FORMAT STATEMENTS FOR PAGE HEADERS 05750080 |
| 90000 FORMAT ("1") 05760080 |
| 90002 FORMAT (" ") 05770080 |
| 90001 FORMAT (" ",10X,"FORTRAN COMPILER VALIDATION SYSTEM" ) 05780080 |
| 90003 FORMAT (" ",21X,"VERSION 2.1" ) 05790080 |
| 90004 FORMAT (" ",10X,"FOR OFFICIAL USE ONLY - COPYRIGHT 1978" ) 05800080 |
| 90005 FORMAT (" ",5X,"TEST",5X,"PASS/FAIL", 5X,"COMPUTED",8X,"CORRECT") 05810080 |
| 90006 FORMAT (" ",5X,"----------------------------------------------" ) 05820080 |
| 90011 FORMAT (" ",18X,"SUBSET LEVEL TEST" ) 05830080 |
| C 05840080 |
| C FORMAT STATEMENTS FOR RUN SUMMARIES 05850080 |
| 90008 FORMAT (" ",15X,I5," ERRORS ENCOUNTERED" ) 05860080 |
| 90009 FORMAT (" ",15X,I5," TESTS PASSED" ) 05870080 |
| 90010 FORMAT (" ",15X,I5," TESTS DELETED" ) 05880080 |
| C 05890080 |
| C FORMAT STATEMENTS FOR TEST RESULTS 05900080 |
| 80001 FORMAT (" ",4X,I5,7X,"PASS") 05910080 |
| 80002 FORMAT (" ",4X,I5,7X,"FAIL") 05920080 |
| 80003 FORMAT (" ",4X,I5,7X,"DELETED") 05930080 |
| 80004 FORMAT (" ",4X,I5,7X,"FAIL",10X,I6,9X,I6) 05940080 |
| 80005 FORMAT (" ",4X,I5,7X,"FAIL",4X,E12.5,3X,E12.5) 05950080 |
| C 05960080 |
| 90007 FORMAT (" ",20X,"END OF PROGRAM FM080" ) 05970080 |
| END 05980080 |
| |
| INTEGER FUNCTION FF081 (IDON01, IDDN10, IDDN20, IDON02) 00010081 |
| C 00020081 |
| C COMMENT SECTION 00030081 |
| C 00040081 |
| C FF081 00050081 |
| C 00060081 |
| C THIS FUNCTION SUBPROGRAM IS CALLED BY THE MAIN PROGRAM FM080. 00070081 |
| C THE FUNCTION DUMMY ARGUMENTS IDON01, IDDN10 AND IDDN20 ARE 00080081 |
| C INCREMENTED BY 2, 40 AND 70 RESPECTIVELY BEFORE CONTROL IS 00090081 |
| C RETURNED TO THE CALLING PROGRAM. VALUE OF THE FUNCTION WILL BE 00100081 |
| C THE SUM OF THE ACTUAL ARGUMENTS AS PASSED FROM CALLING PROGRAM. 00110081 |
| C 00120081 |
| C REFERENCES 00130081 |
| C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, 00140081 |
| C X3.9-1978 00150081 |
| C 00160081 |
| C SECTION 15.5.1, FUNCTION SUBPROGRAM AND FUNCTION STATEMENT 00170081 |
| C 00180081 |
| C TEST SECTION 00190081 |
| C 00200081 |
| C FUNCTION SUBPROGRAM 00210081 |
| C 00220081 |
| DIMENSION IDDN10 (5), IDDN20 (4,4) 00230081 |
| IVON01 = IDON01 00240081 |
| IVON02 = IDDN10(2) 00250081 |
| IVON03 = IDDN20(1,3) 00260081 |
| IVON04 = IDON02 00270081 |
| C 00280081 |
| FF081 = IVON01 + IVON02 + IVON03 + IVON04 00290081 |
| IDON01 = IVON01 + 2 00300081 |
| IDDN10 (2) = IVON02 + 40 00310081 |
| IDDN20 (1,3) = IVON03 + 70 00320081 |
| IDDN10 (4) = IVON02 + 40 00330081 |
| RETURN 00340081 |
| END 00350081 |
| |
| REAL FUNCTION FF082 (RDON01, RDDN3A, RDDN1A, RDON02) 00010082 |
| DIMENSION RDDN3A (3,6,3), RDDN1A (10) 00020082 |
| C 00030082 |
| C COMMENT SECTION 00040082 |
| C 00050082 |
| C FF082 00060082 |
| C 00070082 |
| C THIS FUNCTION SUBPROGRAM IS CALLED BY THE MAIN PROGRAM FM080. 00080082 |
| C THE FUNCTION DUMMY ARGUMENTS RDON01, RDDN3A, AND RDDN1A ARE 00090082 |
| C INCREMENTED BY 6.4, 12.2 AND 18.8 RESPECTIVELY BEFORE CONTROL IS 00100082 |
| C RETURNED TO THE MAIN PROGRAM. VALUE OF THE FUNCTION WILL BE 00110082 |
| C THE SUM OF THE ACTUAL ARGUMENTS AS PASSED TO THE SUBPROGRAM. 00120082 |
| C 00130082 |
| C REFERENCES 00140082 |
| C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, 00150082 |
| C X3.9-1978 00160082 |
| C 00170082 |
| C SECTION 15.5.1, FUNCTION SUBPROGRAM AND FUNCTION STATEMENT 00180082 |
| C 00190082 |
| C TEST SECTION 00200082 |
| C 00210082 |
| C FUNCTION SUBPROGRAM 00220082 |
| C 00230082 |
| RVON01 = RDON01 00240082 |
| RVON02 = RDDN3A (2,5,2) 00250082 |
| RVON03 = RDDN1A (5) 00260082 |
| RVON04 = RDON02 00270082 |
| C 00280082 |
| FF082 = RVON01 + RVON02 + RVON03 + RVON04 00290082 |
| C 00300082 |
| RDON01 = RVON01 + 6.4 00310082 |
| RDDN3A (2,5,2) = RVON02 + 12.2 00320082 |
| RDDN1A (5) = RVON03 + 18.8 00330082 |
| RDDN3A (1,2,1) = 600.0 + 12.2 00340082 |
| RETURN 00350082 |
| END 00360082 |
| |
| FUNCTION FF083 (IDON01,IDDN2A,IDDN3A,RDON02) 00010083 |
| DIMENSION IDDN2A (2,2), IDDN3A(3,4,5) 00020083 |
| C 00030083 |
| C COMMENT SECTION 00040083 |
| C 00050083 |
| C FF083 00060083 |
| C 00070083 |
| C THIS FUNCTION SUBPROGRAM IS CALLED BY THE MAIN PROGRAM FM080. 00080083 |
| C THE TYPE DECLARATION IS IMPLICIT REAL. 00090083 |
| C THE FUNCTION DUMMY ARGUMENTS ARE BOTH INTEGER AND REAL. DUMMY 00100083 |
| C ARGUMENTS IDON01, IDDN2A AND IDDN3A ARE INCREMENTED BY 10, 20 AND 00110083 |
| C 40 RESPECTIVELY BEFORE CONTROL IS RETURNED TO THE MAIN PROGRAM. 00120083 |
| C THE VALUE OF THE FUNCTION RETURNED TO THE REFERENCING PROGRAM 00130083 |
| C WILL BE THE SUM OF THE ACTUAL ARGUMENTS AS PASSED TO THE 00140083 |
| C SUBPROGRAM FF083. 00150083 |
| C DUMMY ARGUMENT IDDN2A CORRESPONDS TO AN ARRAY-NAME IN THE 00160083 |
| C ACTUAL ARGUMENT OF THE MAIN PROGRAM. DUMMY ARGUMENT IDDN3A 00170083 |
| C CORRESPONDS TO AN ARRAY-ELEMENT-NAME IN THE ACTUAL ARGUMENT OF THE00180083 |
| C MAIN PROGRAM. DUMMY ARGUMENT IDON02 CORRESPONDS TO AN EXPRESSION00190083 |
| C CONTAINING VARIABLES,ARITHMETIC OPERATORS AND CONSTANTS IN THE 00200083 |
| C ACTUAL ARGUMENT OF THE MAIN PROGRAM. 00210083 |
| C 00220083 |
| C REFERENCES 00230083 |
| C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, 00240083 |
| C X3.9-1978 00250083 |
| C 00260083 |
| C SECTION 4.1.2, TYPE RULES FOR DATA AND PROCEDURE IDENTIFIERS 00270083 |
| C SECTION 15.5.1, FUNCTION SUBPROGRAM 00280083 |
| C 00290083 |
| C TEST SECTION 00300083 |
| C 00310083 |
| C FUNCTION SUBPROGRAM 00320083 |
| C 00330083 |
| IVON01 = IDON01 00340083 |
| IVON02 = IDDN2A (1,1) 00350083 |
| IVON03 = IDDN3A (2,3,4) 00360083 |
| RVON04 = RDON02 00370083 |
| C 00380083 |
| RVON05 = IVON01 + IVON02 + IVON03 00390083 |
| FF083 = RVON05 + RVON04 00400083 |
| C 00410083 |
| IDON01 = IVON01 + 10 00420083 |
| IDDN2A (1,1) = IVON02 + 20 00430083 |
| IDDN3A (2,3,4) = IVON03 + 40 00440083 |
| C 00450083 |
| RETURN 00460083 |
| END 00470083 |