123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- module grid_tools
- use Binas, only : deg2rad, pi, ae
-
- implicit none
-
- private
-
- public :: deg2rad, pi, ae
-
- public :: ll_area
- public :: ll_area_frac
-
-
- contains
-
- real function ll_area( west, east, south, north )
-
- real, intent(in) :: west, east, south, north ! rad
- ll_area = ( sin(max(north,south)) - sin(min(north,south)) ) * abs(east-west)
-
- end function ll_area
-
- real function ll_area_frac( west1, east1, south1, north1, &
- west2, east2, south2, north2 )
-
- real, intent(in) :: west1, east1, south1, north1 ! rad
- real, intent(in) :: west2, east2, south2, north2 ! rad
- real :: xwest2, xeast2
- if ( east1 < west1 .or. east2 < west2 .or. &
- north1 < south1 .or. north2 < south2 ) then
- print *, 'found strange area:'
- print *, ' 1:', west1, east1, south1, north1
- print *, ' 2:', west2, east2, south2, north2
- stop 'FATAL ERROR IN ll_area_frac'
- end if
- if ( west2 > east1 ) then
- xwest2 = west2 - 2*pi
- xeast2 = east2 - 2*pi
- else if ( east2 < west1 ) then
- xwest2 = west2 + 2*pi
- xeast2 = east2 + 2*pi
- else
- xwest2 = west2
- xeast2 = east2
- end if
- if ( (xeast2 <= west1 ) .or. (xwest2 >= east1 ) .or. &
- (north2 <= south1) .or. (south2 >= north1) ) then
- ll_area_frac = 0.0
- else
- ll_area_frac = &
- ll_area( max(west1 ,xwest2), min(east1 ,xeast2), &
- max(south1,south2), min(north1,north2) ) &
- / ll_area( west1, east1, south1, north1 )
- end if
- end function ll_area_frac
-
- end module grid_tools
-
|