1 | MODULE mvc_horiz_mod |
---|
2 | |
---|
3 | implicit none |
---|
4 | |
---|
5 | contains |
---|
6 | |
---|
7 | subroutine mvc_horiz(imo,jmo,imn,jmn,rlonuo,rlatvo,rlonv, |
---|
8 | . rlatu,zdata,outdata) |
---|
9 | |
---|
10 | c======================================================================= |
---|
11 | c Maximum/minimum value composite approach for interpolate the variables |
---|
12 | c from surface.nc (summit, base... ) |
---|
13 | c Chao Wang |
---|
14 | c======================================================================= |
---|
15 | |
---|
16 | implicit none |
---|
17 | |
---|
18 | !inputs/ouputs |
---|
19 | integer, intent(in) :: imo,jmo |
---|
20 | integer, intent(in) :: imn,jmn |
---|
21 | real, intent(in) :: rlonv(imn+1) |
---|
22 | real, intent(in) :: rlatu(jmn+1) |
---|
23 | real, intent(in) :: zdata(imo*jmo) |
---|
24 | real, intent(out) :: outdata(imn+1,jmn+1) |
---|
25 | |
---|
26 | !local variables: |
---|
27 | real pi |
---|
28 | integer i,j,l,m,n |
---|
29 | real tmplon(imn+2) |
---|
30 | real tmplat(jmn+2) |
---|
31 | REAL rlonuo(imo) |
---|
32 | REAL rlatvo(jmo) |
---|
33 | |
---|
34 | integer iik(imo,jmo),jjk(imo,jmo) |
---|
35 | integer tmp |
---|
36 | |
---|
37 | c initialize |
---|
38 | iik(:,:)=0 |
---|
39 | jjk(:,:)=0 |
---|
40 | outdata(:,:)=-999999. !lowest point on Mars ~8200m |
---|
41 | |
---|
42 | pi=2.*ASIN(1.) |
---|
43 | |
---|
44 | tmplon(1)=rlonv(1) |
---|
45 | do i=2,imn+1 |
---|
46 | tmplon(i)= (rlonv(i-1)+rlonv(i))/2. |
---|
47 | enddo |
---|
48 | tmplon(imn+2)=rlonv(imn+1) |
---|
49 | |
---|
50 | tmplat(1)=rlatu(1) |
---|
51 | do j=2,jmn+1 |
---|
52 | tmplat(j)=(rlatu(j-1)+rlatu(j))/2. |
---|
53 | enddo |
---|
54 | tmplat(jmn+2)=rlatu(jmn+1) |
---|
55 | |
---|
56 | |
---|
57 | do i=1,imo |
---|
58 | do j=1,jmo |
---|
59 | do m=1,imn+1 |
---|
60 | do n=1,jmn+1 |
---|
61 | |
---|
62 | if ( ((rlonuo(i) .ge. tmplon(m)) .and. |
---|
63 | & (rlonuo(i) .lt. tmplon(m+1))) .and. |
---|
64 | & ((rlatvo(j) .lt. tmplat(n) ) .and. |
---|
65 | & (rlatvo(j) .ge. tmplat(n+1) ))) then |
---|
66 | iik(i,j)=m |
---|
67 | jjk(i,j)=n |
---|
68 | goto 1000 |
---|
69 | endif |
---|
70 | |
---|
71 | enddo |
---|
72 | enddo |
---|
73 | 1000 continue |
---|
74 | enddo |
---|
75 | enddo |
---|
76 | |
---|
77 | do m=1,imn+1 |
---|
78 | do n=1,jmn+1 |
---|
79 | do i=1,imo |
---|
80 | do j=1,jmo |
---|
81 | |
---|
82 | if ((iik(i,j) .eq. m) .and. (jjk(i,j) .eq. n)) then |
---|
83 | outdata(m,n)=max(outdata(m,n),zdata(i+imo*(j-1)) ) |
---|
84 | endif |
---|
85 | |
---|
86 | enddo |
---|
87 | enddo |
---|
88 | enddo |
---|
89 | enddo |
---|
90 | |
---|
91 | end subroutine mvc_horiz |
---|
92 | |
---|
93 | END MODULE mvc_horiz_mod |
---|