1
2! KGEN-generated Fortran source file
3!
4! Filename    : kernel_driver.f90
5! Generated at: 2015-03-31 09:44:40
6! KGEN version: 0.4.5
7
8
9PROGRAM kernel_driver
10    USE micro_mg_cam, ONLY : micro_mg_cam_tend
11    USE shr_kind_mod, ONLY: r8 => shr_kind_r8
12    USE micro_mg_cam, ONLY : kgen_read_externs_micro_mg_cam
13    USE micro_mg_utils, ONLY : kgen_read_externs_micro_mg_utils
14    USE micro_mg2_0, ONLY : kgen_read_externs_micro_mg2_0
15    USE wv_sat_methods, ONLY : kgen_read_externs_wv_sat_methods
16
17    IMPLICIT NONE
18
19    INTEGER :: kgen_mpi_rank
20    CHARACTER(LEN=16) ::kgen_mpi_rank_conv
21    INTEGER, DIMENSION(3), PARAMETER :: kgen_mpi_rank_at = (/ 0, 100, 300 /)
22    INTEGER :: kgen_ierr, kgen_unit
23    INTEGER :: kgen_repeat_counter
24    INTEGER :: kgen_counter
25    CHARACTER(LEN=16) :: kgen_counter_conv
26    INTEGER, DIMENSION(3), PARAMETER :: kgen_counter_at = (/ 10, 100, 50 /)
27    CHARACTER(LEN=1024) :: kgen_filepath
28    REAL(KIND=r8) :: dtime
29
30    DO kgen_repeat_counter = 0, 8
31        kgen_counter = kgen_counter_at(mod(kgen_repeat_counter, 3)+1)
32        WRITE( kgen_counter_conv, * ) kgen_counter
33        kgen_mpi_rank = kgen_mpi_rank_at(mod(kgen_repeat_counter, 3)+1)
34        WRITE( kgen_mpi_rank_conv, * ) kgen_mpi_rank
35        kgen_filepath = "../data/micro_mg_tend2_0." // trim(adjustl(kgen_counter_conv)) // "." // trim(adjustl(kgen_mpi_rank_conv))
36        kgen_unit = kgen_get_newunit()
37        OPEN (UNIT=kgen_unit, FILE=kgen_filepath, STATUS="OLD", ACCESS="STREAM", FORM="UNFORMATTED", ACTION="READ", IOSTAT=kgen_ierr, CONVERT="BIG_ENDIAN")
38        WRITE (*,*)
39        IF ( kgen_ierr /= 0 ) THEN
40            CALL kgen_error_stop( "FILE OPEN ERROR: " // trim(adjustl(kgen_filepath)) )
41        END IF
42        WRITE (*,*)
43        WRITE (*,*) "** Verification against '" // trim(adjustl(kgen_filepath)) // "' **"
44
45            CALL kgen_read_externs_micro_mg_cam(kgen_unit)
46            CALL kgen_read_externs_micro_mg_utils(kgen_unit)
47            CALL kgen_read_externs_micro_mg2_0(kgen_unit)
48            CALL kgen_read_externs_wv_sat_methods(kgen_unit)
49
50            ! driver variables
51            READ(UNIT=kgen_unit) dtime
52
53            call micro_mg_cam_tend(dtime, kgen_unit)
54
55            CLOSE (UNIT=kgen_unit)
56        END DO
57    CONTAINS
58
59        ! write subroutines
60        ! No subroutines
61        FUNCTION kgen_get_newunit() RESULT(new_unit)
62           INTEGER, PARAMETER :: UNIT_MIN=100, UNIT_MAX=1000000
63           LOGICAL :: is_opened
64           INTEGER :: nunit, new_unit, counter
65
66           new_unit = -1
67           DO counter=UNIT_MIN, UNIT_MAX
68               inquire(UNIT=counter, OPENED=is_opened)
69               IF (.NOT. is_opened) THEN
70                   new_unit = counter
71                   EXIT
72               END IF
73           END DO
74        END FUNCTION
75
76        SUBROUTINE kgen_error_stop( msg )
77            IMPLICIT NONE
78            CHARACTER(LEN=*), INTENT(IN) :: msg
79
80            WRITE (*,*) msg
81            STOP 1
82        END SUBROUTINE
83
84
85    END PROGRAM kernel_driver
86