39      im, jm, lon, lat, id1, id2, jdc, s2c, agrid )
 
   42    integer, 
intent(in):: is, ie, js, je
 
   43    integer, 
intent(in):: im, jm
 
   44    real,    
intent(in):: lon(im), lat(jm)
 
   45    real,    
intent(out):: s2c(is:ie,js:je,4)
 
   46    integer, 
intent(out), 
dimension(is:ie,js:je):: id1, id2, jdc
 
   47    real,    
intent(in):: agrid(is:ie,js:je,2)
 
   52    real, 
parameter :: pi = 3.1415926
 
   53    integer i,j, i1, i2, jc, i0, j0
 
   55      rdlon(i) = 1. / (lon(i+1) - lon(i))
 
   57    rdlon(im) = 1. / (lon(1) + 2.*pi - lon(im))
 
   60      rdlat(j) = 1. / (lat(j+1) - lat(j))
 
   68        if ( agrid(i,j,1)>lon(im) ) 
then 
   70          a1 = (agrid(i,j,1)-lon(im)) * rdlon(im)
 
   71        elseif ( agrid(i,j,1)<lon(1) ) 
then 
   73          a1 = (agrid(i,j,1)+2.*pi-lon(im)) * rdlon(im)
 
   76            if ( agrid(i,j,1)>=lon(i0) .and. agrid(i,j,1)<=lon(i0+1) ) 
then 
   78              a1 = (agrid(i,j,1)-lon(i1)) * rdlon(i0)
 
   85        if ( agrid(i,j,2)<lat(1) ) 
then 
   88        elseif ( agrid(i,j,2)>lat(jm) ) 
then 
   93            if ( agrid(i,j,2)>=lat(j0) .and. agrid(i,j,2)<=lat(j0+1) ) 
then 
   95              b1 = (agrid(i,j,2)-lat(jc)) * rdlat(jc)
 
  102        if ( a1<0.0 .or. a1>1.0 .or.  b1<0.0 .or. b1>1.0 ) 
then 
  103             write(*,*) 
'gid=', i,j,a1, b1
 
  106        s2c(i,j,1) = (1.-a1) * (1.-b1)
 
  107        s2c(i,j,2) =     a1  * (1.-b1)
 
  109        s2c(i,j,4) = (1.-a1) *     b1
 
 
subroutine, public remap_coef(is, ie, js, je, im, jm, lon, lat, id1, id2, jdc, s2c, agrid)
Generate the weights and index of the grids used in the bilinear interpolation.