1
2! KGEN-generated Fortran source file
3!
4! Filename    : kernel_driver.f90
5! Generated at: 2015-07-31 20:35:44
6! KGEN version: 0.4.13
7
8
9PROGRAM kernel_driver
10    USE rrtmg_sw_rad, ONLY : rrtmg_sw
11    USE rrsw_tbl, ONLY : kgen_read_externs_rrsw_tbl
12    USE rrsw_kg19, ONLY : kgen_read_externs_rrsw_kg19
13    USE rrsw_kg18, ONLY : kgen_read_externs_rrsw_kg18
14    USE rrsw_kg17, ONLY : kgen_read_externs_rrsw_kg17
15    USE rrsw_kg16, ONLY : kgen_read_externs_rrsw_kg16
16    USE rrsw_wvn, ONLY : kgen_read_externs_rrsw_wvn
17    USE rrsw_vsn, ONLY : kgen_read_externs_rrsw_vsn
18    USE rrsw_kg24, ONLY : kgen_read_externs_rrsw_kg24
19    USE rrsw_kg25, ONLY : kgen_read_externs_rrsw_kg25
20    USE rrsw_kg26, ONLY : kgen_read_externs_rrsw_kg26
21    USE rrsw_kg27, ONLY : kgen_read_externs_rrsw_kg27
22    USE rrsw_kg20, ONLY : kgen_read_externs_rrsw_kg20
23    USE rrsw_kg21, ONLY : kgen_read_externs_rrsw_kg21
24    USE rrsw_kg22, ONLY : kgen_read_externs_rrsw_kg22
25    USE rrsw_kg23, ONLY : kgen_read_externs_rrsw_kg23
26    USE rrsw_kg28, ONLY : kgen_read_externs_rrsw_kg28
27    USE rrsw_kg29, ONLY : kgen_read_externs_rrsw_kg29
28    USE rrsw_con, ONLY : kgen_read_externs_rrsw_con
29        USE kgen_utils_mod, ONLY : kgen_dp, check_t, kgen_init_check, kgen_print_check
30
31    IMPLICIT NONE
32
33    INTEGER :: kgen_mpi_rank
34    CHARACTER(LEN=16) ::kgen_mpi_rank_conv
35    INTEGER, DIMENSION(3), PARAMETER :: kgen_mpi_rank_at = (/ 1, 4, 8 /)
36    INTEGER :: kgen_ierr, kgen_unit
37    INTEGER :: kgen_repeat_counter
38    INTEGER :: kgen_counter
39    CHARACTER(LEN=16) :: kgen_counter_conv
40    INTEGER, DIMENSION(3), PARAMETER :: kgen_counter_at = (/ 1, 10, 5 /)
41    CHARACTER(LEN=1024) :: kgen_filepath
42    INTEGER :: lchnk
43    INTEGER :: ncol
44    INTEGER :: nlay
45
46    DO kgen_repeat_counter = 0, 8
47        kgen_counter = kgen_counter_at(mod(kgen_repeat_counter, 3)+1)
48        WRITE( kgen_counter_conv, * ) kgen_counter
49        kgen_mpi_rank = kgen_mpi_rank_at(mod(kgen_repeat_counter, 3)+1)
50        WRITE( kgen_mpi_rank_conv, * ) kgen_mpi_rank
51        kgen_filepath = "../data/spcvmc_sw." // trim(adjustl(kgen_counter_conv)) // "." // trim(adjustl(kgen_mpi_rank_conv))
52        kgen_unit = kgen_get_newunit()
53        OPEN (UNIT=kgen_unit, FILE=kgen_filepath, STATUS="OLD", ACCESS="STREAM", FORM="UNFORMATTED", ACTION="READ", IOSTAT=kgen_ierr, CONVERT="BIG_ENDIAN")
54        WRITE (*,*)
55        IF ( kgen_ierr /= 0 ) THEN
56            CALL kgen_error_stop( "FILE OPEN ERROR: " // trim(adjustl(kgen_filepath)) )
57        END IF
58        WRITE (*,*)
59        WRITE (*,*) "** Verification against '" // trim(adjustl(kgen_filepath)) // "' **"
60
61            CALL kgen_read_externs_rrsw_tbl(kgen_unit)
62            CALL kgen_read_externs_rrsw_kg19(kgen_unit)
63            CALL kgen_read_externs_rrsw_kg18(kgen_unit)
64            CALL kgen_read_externs_rrsw_kg17(kgen_unit)
65            CALL kgen_read_externs_rrsw_kg16(kgen_unit)
66            CALL kgen_read_externs_rrsw_wvn(kgen_unit)
67            CALL kgen_read_externs_rrsw_vsn(kgen_unit)
68            CALL kgen_read_externs_rrsw_kg24(kgen_unit)
69            CALL kgen_read_externs_rrsw_kg25(kgen_unit)
70            CALL kgen_read_externs_rrsw_kg26(kgen_unit)
71            CALL kgen_read_externs_rrsw_kg27(kgen_unit)
72            CALL kgen_read_externs_rrsw_kg20(kgen_unit)
73            CALL kgen_read_externs_rrsw_kg21(kgen_unit)
74            CALL kgen_read_externs_rrsw_kg22(kgen_unit)
75            CALL kgen_read_externs_rrsw_kg23(kgen_unit)
76            CALL kgen_read_externs_rrsw_kg28(kgen_unit)
77            CALL kgen_read_externs_rrsw_kg29(kgen_unit)
78            CALL kgen_read_externs_rrsw_con(kgen_unit)
79
80            ! driver variables
81            READ(UNIT=kgen_unit) lchnk
82            READ(UNIT=kgen_unit) ncol
83            READ(UNIT=kgen_unit) nlay
84
85            call rrtmg_sw(lchnk, ncol, nlay, kgen_unit)
86
87            CLOSE (UNIT=kgen_unit)
88        END DO
89    CONTAINS
90
91        ! write subroutines
92        ! No subroutines
93        FUNCTION kgen_get_newunit() RESULT(new_unit)
94           INTEGER, PARAMETER :: UNIT_MIN=100, UNIT_MAX=1000000
95           LOGICAL :: is_opened
96           INTEGER :: nunit, new_unit, counter
97
98           new_unit = -1
99           DO counter=UNIT_MIN, UNIT_MAX
100               inquire(UNIT=counter, OPENED=is_opened)
101               IF (.NOT. is_opened) THEN
102                   new_unit = counter
103                   EXIT
104               END IF
105           END DO
106        END FUNCTION
107
108        SUBROUTINE kgen_error_stop( msg )
109            IMPLICIT NONE
110            CHARACTER(LEN=*), INTENT(IN) :: msg
111
112            WRITE (*,*) msg
113            STOP 1
114        END SUBROUTINE
115
116
117    END PROGRAM kernel_driver
118