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