merge standard release WRF/WPS V3.0.1.1 into wrffire
[wrffire.git] / WPS / geogrid / util / plotter.F
blobf79bdc54eb89d25320aaaca1029798cde10e5130
1 program plotter
3    implicit none
5    integer :: nx, ny
6    integer :: i, j
7    real :: start_r, start_g, start_b, end_r, end_g, end_b
8    real :: lu, val, xlat, xlon, left, right, bottom, top, maxter, minter
10    call opngks
12    call gopwk(13, 41, 3)
14    call gscr(1, 0, 1.00, 1.00, 1.00)
15    call gscr(1, 1, 0.00, 0.00, 0.00)
16    call gscr(1, 2, 0.25, 0.25, 0.25)
17    call gscr(1, 3, 1.00, 1.00, 0.50)
18    call gscr(1, 4, 0.50, 1.00, 0.50)
19    call gscr(1, 5, 1.00, 1.00, 0.00)
20    call gscr(1, 6, 1.00, 1.00, 0.00)
21    call gscr(1, 7, 0.50, 1.00, 0.50)
22    call gscr(1, 8, 1.00, 1.00, 0.50)
23    call gscr(1, 9, 0.50, 1.00, 0.50)
24    call gscr(1,10, 0.50, 1.00, 0.50)
25    call gscr(1,11, 1.00, 1.00, 0.50)
26    call gscr(1,12, 0.00, 1.00, 0.00)
27    call gscr(1,13, 0.00, 0.50, 0.00)
28    call gscr(1,14, 0.00, 1.00, 0.00)
29    call gscr(1,15, 0.00, 0.50, 0.00)
30    call gscr(1,16, 0.00, 1.00, 0.00)
31    call gscr(1,17, 0.50, 0.50, 1.00)
32    call gscr(1,18, 0.00, 1.00, 0.00)
33    call gscr(1,19, 0.00, 1.00, 0.00)
34    call gscr(1,20, 0.75, 0.75, 0.75)
35    call gscr(1,21, 0.75, 0.75, 0.75)
36    call gscr(1,22, 0.00, 0.50, 0.00)
37    call gscr(1,23, 0.75, 0.75, 0.75)
38    call gscr(1,24, 0.75, 0.75, 0.75)
39    call gscr(1,25, 1.00, 1.00, 1.00)
41    start_r = 0.00
42    end_r   = 0.50
43    start_g = 1.00
44    end_g   = 0.25
45    start_b = 0.00
46    end_b   = 0.00
47    do i=26,76
48      call gscr(1,i,start_r+((end_r-start_r)/50.)*real(i-26),start_g+((end_g-start_g)/50.)*real(i-26),start_b+((end_b-start_b)/50.)*real(i-26))
49    end do
51    start_r = 0.50
52    end_r   = 1.00
53    start_g = 0.25
54    end_g   = 1.00
55    start_b = 0.00
56    end_b   = 1.00
57    do i=77,126
58      call gscr(1,i,start_r+((end_r-start_r)/50.)*real(i-77),start_g+((end_g-start_g)/50.)*real(i-77),start_b+((end_b-start_b)/50.)*real(i-77))
59    end do
61    nx = 5324
62    ny = 3344
64    left = 0.1
65    right = 0.9
66    bottom = 0.1
67    top = 0.9
68    call mappos(left,right,bottom,top)
69    call mapstc('OU','US')
70    call maproj('LC', 30., -98.00, 60.)
71    call mapset('CO', 20.144764, -122.505325, 48.201309, -59.35916)
72    call mapint()
74    open(42,file='lu.dat',form='formatted')
75    open(43,file='lat.dat',form='formatted')
76    open(44,file='lon.dat',form='formatted')
78    do j=1,ny 
79       do i=1,nx 
80          read(42,*) val
81          read(43,*) xlat
82          read(44,*) xlon
83          call map_square(xlat, xlon, (right-left)/real(nx), (top-bottom)/real(nx), nint(val)+1)
84       end do
85    end do
87    close(42)
88    close(43)
89    close(44)
91    call maplot() 
93    call frame()
95    open(41,file='lu.dat',form='formatted')
96    open(42,file='ter.dat',form='formatted')
97    open(43,file='lat.dat',form='formatted')
98    open(44,file='lon.dat',form='formatted')
99    maxter = -1000.
100    minter = 10000.
101    do j=1,ny 
102       do i=1,nx 
103          read(42,*) val
104          if (val > maxter) maxter = val 
105          if (val < minter) minter = val 
106       end do
107    end do
109    rewind(42)
111    do j=1,ny 
112       do i=1,nx 
113          read(41,*) lu
114          read(42,*) val
115          read(43,*) xlat
116          read(44,*) xlon
117          val = ((val-minter) * 99.)/(maxter-minter) + 26.
118          if (nint(lu) ==  16) then
119             call map_square(xlat, xlon, (right-left)/real(nx), (top-bottom)/real(nx), 17)
120          else if (nint(lu) ==  1) then
121             call map_square(xlat, xlon, (right-left)/real(nx), (top-bottom)/real(nx), 2)
122          else
123             call map_square(xlat, xlon, (right-left)/real(nx), (top-bottom)/real(nx), nint(val))
124          end if
125       end do
126    end do
128    close(41)
129    close(42)
130    close(43)
131    close(44)
133    call maplot() 
135    call gclwk(13)
137    call clsgks
139 end program plotter
142 subroutine map_square(rlat, rlon, width, height, colr)
144     implicit none
146     ! Arguments
147     real :: rlat, rlon, width, height
148     integer :: colr
150     ! Local variables
151     real :: u, v
152     real, dimension(4) :: xra, yra
153     real, dimension(2000) :: dst
154     integer, dimension(3000) :: ind
156     call maptrn(rlat, rlon, u, v)
158     u = u + (width/2.)
159     v = v + (height/2.)
161     xra(1) = u-(width/2.)
162     xra(2) = u+(width/2.)
163     xra(3) = u+(width/2.)
164     xra(4) = u-(width/2.)
166     yra(1) = v-(height/2.)
167     yra(2) = v-(height/2.)
168     yra(3) = v+(height/2.)
169     yra(4) = v+(height/2.)
171     call sfsgfa(xra, yra, 4, dst, 2000, ind, 3000, colr)
173 end subroutine map_square