| 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 |
|---|