Created a tag for the 2012 HWRF baseline tests.
[WPS-merge.git] / hwrf-baseline-20120103-1354 / metgrid / src / metgrid.F
blob477e854623bd560e807fe375371b5db41716ff62
1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2 ! Program metgrid
4 ! First version: Michael Duda -- January 2006 
5 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6 program metgrid
8    use gridinfo_module
9    use interp_option_module
10    use module_debug
11    use parallel_module
12    use process_domain_module
14    implicit none
16    ! Local variables
17    integer :: n
18    logical :: extra_row, extra_col
20    !
21    ! Do general setup
22    !
24    ! Initialize parallel stuff
25    call parallel_start()
27    call mprintf(.true.,LOGFILE,' *** Starting program metgrid.exe *** ')
29    ! Get info about how many nests there are to process, etc.
30    call get_namelist_params()
32    ! Having determined which processor we are, which grid type we are, and where 
33    !   our patch is located in the domain, we can determine if U or V staggered 
34    !   fields will have one more row or column than the M staggered fields
35    if (gridtype == 'C') then
36       if (my_x == nproc_x-1) then
37          extra_col = .true.
38       else
39          extra_col = .false.
40       end if
42       if (my_y == nproc_y-1) then
43          extra_row = .true.
44       else
45          extra_row = .false.
46       end if
47    else if (gridtype == 'E') then
48       extra_col = .false.
49       extra_row = .false.
50    end if
52    ! Get info about which interpolators should be used with each field
53    call  read_interp_table()
55    !
56    ! Now begin the processing work, looping over all domains to be processed 
57    !
59    if (gridtype == 'C') then
61       do n=1,max_dom
63          if (grid_is_active(n)) then
64             call mprintf(.true.,STDOUT,'Processing domain %i of %i', i1=n, i2=max_dom)
65             call mprintf(.true.,LOGFILE,'Processing domain %i of %i', i1=n, i2=max_dom)
67             call process_domain(n, extra_row, extra_col)
68          else
69             call mprintf(.true.,STDOUT,'Skipping domain %i of %i', i1=n, i2=max_dom)
70             call mprintf(.true.,LOGFILE,'Skipping domain %i of %i', i1=n, i2=max_dom)
71          end if
73       end do  ! Loop over max_dom
75    else if (gridtype == 'E') then
77       call mprintf(.true.,STDOUT,'Processing coarse domain only for NMM.')
78       call mprintf(.true.,LOGFILE,'Processing coarse domain only for NMM.')
80       call process_domain(1, extra_row, extra_col)
82    end if
85    !
86    ! Clean up and quit.
87    !
89    call interp_option_destroy()
91    call parallel_finish()
93    call mprintf(.true.,STDOUT,'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
94    call mprintf(.true.,STDOUT,'!  Successful completion of metgrid.  !')
95    call mprintf(.true.,STDOUT,'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
97    call mprintf(.true.,LOGFILE,' *** Successful completion of program metgrid.exe *** ')
99    stop
101 end program metgrid