123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- MODULE GEOMETRY
- use GO , only : gol, goErr, goPr
- use dims, only : lm
- IMPLICIT NONE
- PRIVATE
- public :: geomtryv
- public :: geomtryh
- public :: calc_dxy
- CONTAINS
- SUBROUTINE GEOMTRYH( region )
- use binas, only: ae, pi
- use dims, only: dx, gtor, xref, dy, yref, im, jm, ybeg, areag
- use global_data, only: region_dat
- use tm5_distgrid, only: dgrid, Get_DistGrid
- integer, intent(in) :: region
- real, pointer :: dxyp(:)
- integer :: j, i0, i1, j0, j1
- real :: dxx,dyy,lat,area, deltaX, yb
- dxyp => region_dat(region)%dxyp
- call Get_DistGrid( dgrid(region), I_STRT=i0, I_STOP=i1, J_STRT=j0, J_STOP=j1 )
- dxx = dx*gtor/xref(region)
- dyy = dy*gtor/yref(region)
- deltaX = (i1-i0+1)
- lat = ybeg(region)*gtor
- area =0.0
- do j=1,jm(region)
- if (j>=j0.and.j<=j1) then
- dxyp(j) = dxx * (sin(lat+dyy)-sin(lat))*ae**2
- area = area + dxyp(j)*deltaX
- end if
- lat = lat+dyy
- end do
- areag(region) = area
- nullify(dxyp)
- END SUBROUTINE GEOMTRYH
- SUBROUTINE CALC_DXY( dxy, nlat )
- use binas, only : ae, pi
- use dims, only : gtor, nlon360
- integer, intent(in) :: nlat ! number of 1 degree zonal bands
- real, intent(out) :: dxy(nlat) ! area for each zonal band
- real :: dxx, dyy, lat
- integer :: j
- dxx = 1.0*gtor
- dyy = 1.0*gtor
- lat = -90.0*gtor
- do j=1,nlat
- dxy(j) = dxx * (sin(lat+dyy)-sin(lat))*ae**2
- lat = lat+dyy
- end do
- END SUBROUTINE CALC_DXY
- SUBROUTINE GEOMTRYV()
- use binas , only : grav
- use const_ec_v , only : a_ec, b_ec
- use dims , only : echlevs, at, bt, lm
- integer :: l
- do l = 1, lm(1)+1
- at(l) = a_ec(echlevs(l-1))
- bt(l) = b_ec(echlevs(l-1))
- end do
- END SUBROUTINE GEOMTRYV
- END MODULE GEOMETRY
|