亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bilin.f90

?? CCSM Research Tools: Community Atmosphere Model (CAM)
?? F90
字號:
#include <misc.h>#include <params.h>subroutine bilin (arrin, xin, yin, nlondin, nlonin, &                  nlevdin, nlev, nlatin, arrout, xout, &                  yout, nlondout, nlonout, nlevdout, nlatout)!----------------------------------------------------------------------- ! ! Purpose: !! Do a bilinear interpolation from input mesh defined by xin, yin to output! mesh defined by xout, yout.  Circularity is assumed in the x-direction so! input x-grid must be in degrees east and must start from Greenwich.  When! extrapolation is necessary in the N-S direction, values will be copied ! from the extreme edge of the input grid.  Vectorization is over the! longitude dimension.  Input grid is assumed rectangular. Output grid! is assumed ragged, i.e. xout is a 2-d mesh.! ! Method: Interpolate first in longitude, then in latitude.! ! Author: Jim Rosinski! !-----------------------------------------------------------------------   use precision!-----------------------------------------------------------------------   implicit none!-----------------------------------------------------------------------!! Input arguments!   integer, intent(in) :: nlondin                        ! longitude dimension of input grid   integer, intent(in) :: nlonin                         ! number of real longitudes (input)   integer, intent(in) :: nlevdin                        ! vertical dimension of input grid   integer, intent(in) :: nlev                           ! number of vertical levels   integer, intent(in) :: nlatin                         ! number of input latitudes   integer, intent(in) :: nlatout                        ! number of output latitudes   integer, intent(in) :: nlondout                       ! longitude dimension of output grid   integer, intent(in) :: nlonout(nlatout)               ! number of output longitudes per lat   integer, intent(in) :: nlevdout                       ! vertical dimension of output grid   real(r8), intent(in) :: arrin(nlondin,nlevdin,nlatin) ! input array of values to interpolate   real(r8), intent(in) :: xin(nlondin)                  ! input x mesh   real(r8), intent(in) :: yin(nlatin)                   ! input y mesh   real(r8), intent(in) :: xout(nlondout,nlatout)        ! output x mesh   real(r8), intent(in) :: yout(nlatout)                 ! output y mesh!! Output arguments!   real(r8), intent(out) :: arrout(nlondout,nlevdout,nlatout) ! interpolated array!! Local workspace!   integer :: i, ii, iw, ie, iiprev ! longitude indices   integer :: j, jj, js, jn, jjprev ! latitude indices   integer :: k                     ! level index   integer :: icount                ! number of bad values   real(r8) :: extrap               ! percent grid non-overlap   real(r8) :: dxinwrap             ! delta-x on input grid for 2-pi   real(r8) :: avgdxin              ! avg input delta-x   real(r8) :: ratio                ! compare dxinwrap to avgdxin   real(r8) :: sum                  ! sum of weights (used for testing)!! Dynamic!   integer :: iim(nlondout)         ! interpolation index to the left   integer :: iip(nlondout)         ! interpolation index to the right   integer :: jjm(nlatout)          ! interpolation index to the south   integer :: jjp(nlatout)          ! interpolation index to the north   real(r8) :: wgts(nlatout)        ! interpolation weight to the north   real(r8) :: wgtn(nlatout)        ! interpolation weight to the north   real(r8) :: wgte(nlondout)       ! interpolation weight to the north   real(r8) :: wgtw(nlondout)       ! interpolation weight to the north   real(r8) :: igrid(nlonin)        ! interpolation weight to the north!! Check validity of input coordinate arrays: must be monotonically increasing,! and have a total of at least 2 elements!   if (nlonin < 2 .or. nlatin < 2) then      write(6,*)'BILIN: Must have at least 2 input points for ', &           'interpolation'      call endrun   end if   if (xin(1) < 0. .or. xin(nlonin) > 360.) then      write(6,*)'BILIN: Input x-grid must be between 0 and 360'      call endrun   end if   icount = 0   do i=1,nlonin-1      if (xin(i) >= xin(i+1)) icount = icount + 1   end do   do j=1,nlatin-1      if (yin(j) >= yin(j+1)) icount = icount + 1   end do   do j=1,nlatout-1      if (yout(j) >= yout(j+1)) icount = icount + 1   end do   do j=1,nlatout      do i=1,nlonout(j)-1         if (xout(i,j) >= xout(i+1,j)) icount = icount + 1      end do   end do   if (icount > 0) then      write(6,*)'BILIN: Non-monotonic coordinate array(s) found'      call endrun   end if   if (yout(nlatout) <= yin(1) .or. yout(1) >= yin(nlatin)) then      write(6,*)'BILIN: No overlap in y-coordinates'      call endrun   end if   do j=1,nlatout      if (xout(1,j) < 0. .or. xout(nlonout(j),j) > 360.) then         write(6,*)'BILIN: Output x-grid must be between 0 and 360'         call endrun      end if      if (xout(nlonout(j),j) <= xin(1) .or.  &          xout(1,j)          >= xin(nlonin)) then         write(6,*)'BILIN: No overlap in x-coordinates'         call endrun      end if   end do!! Initialize index arrays for later checking!   do j=1,nlatout      jjm(j) = 0      jjp(j) = 0   end do!! For values which extend beyond N and S boundaries, set weights! such that values will just be copied.!   do js=1,nlatout      if (yout(js) > yin(1)) exit      jjm(js) = 1      jjp(js) = 1      wgts(js) = 1.      wgtn(js) = 0.   end do   do jn=nlatout,1,-1      if (yout(jn) <= yin(nlatin)) exit      jjm(jn) = nlatin      jjp(jn) = nlatin      wgts(jn) = 1.      wgtn(jn) = 0.   end do!! Loop though output indices finding input indices and weights!   jjprev = 1   do j=js,jn      do jj=jjprev,nlatin-1         if (yout(j) > yin(jj) .and. yout(j) <= yin(jj+1)) then            jjm(j) = jj            jjp(j) = jj + 1            wgts(j) = (yin(jj+1) - yout(j)) / (yin(jj+1) - yin(jj))            wgtn(j) = (yout(j)   - yin(jj)) / (yin(jj+1) - yin(jj))            goto 30         end if      end do      write(6,*)'BILIN: Failed to find interp values'      call endrun30    jjprev = jj   end do   dxinwrap = xin(1) + 360. - xin(nlonin)!! Check for sane dxinwrap values.  Allow to differ no more than 10% from avg!   avgdxin = (xin(nlonin)-xin(1))/(nlonin-1.)   ratio = dxinwrap/avgdxin   if (ratio < 0.9 .or. ratio > 1.1) then      write(6,*)'BILIN: Insane dxinwrap value =',dxinwrap,' avg=', &           avgdxin      call endrun   end if!! Check grid overlap!   extrap = 100.*((js - 1.) + float(nlatout - jn))/nlatout   if (extrap > 20.) then      write(6,*)'BILIN:',extrap,' % of N/S output', &           ' grid will have to be extrapolated'   end if!! Check that interp/extrap points have been found for all outputs, and that! they are reasonable (i.e. within 32-bit roundoff)!   icount = 0   do j=1,nlatout      if (jjm(j) == 0 .or. jjp(j) == 0) icount = icount + 1      sum = wgts(j) + wgtn(j)      if (sum < 0.99999 .or. sum > 1.00001) icount = icount + 1      if (wgts(j) < 0. .or. wgts(j) > 1.) icount = icount + 1      if (wgtn(j) < 0. .or. wgtn(j) > 1.) icount = icount + 1   end do   if (icount > 0) then      write(6,*)'BILIN: something bad in latitude indices or weights'      call endrun   end if!! Do the bilinear interpolation!   do j=1,nlatout!! Initialize index arrays for later checking!      do i=1,nlondout         iim(i) = 0         iip(i) = 0      end do!! For values which extend beyond E and W boundaries, set weights such that! values will be interpolated between E and W edges of input grid.!      do iw=1,nlonout(j)         if (xout(iw,j) > xin(1)) exit         iim(iw) = nlonin         iip(iw) = 1         wgtw(iw) = (xin(1)        - xout(iw,j))   /dxinwrap         wgte(iw) = (xout(iw,j)+360. - xin(nlonin))/dxinwrap      end do      do ie=nlonout(j),1,-1         if (xout(ie,j) <= xin(nlonin)) exit         iim(ie) = nlonin         iip(ie) = 1         wgtw(ie) = (xin(1)+360. - xout(ie,j))   /dxinwrap         wgte(ie) = (xout(ie,j)    - xin(nlonin))/dxinwrap      end do!! Loop though output indices finding input indices and weights!      iiprev = 1      do i=iw,ie         do ii=iiprev,nlonin-1            if (xout(i,j) > xin(ii) .and. xout(i,j) <= xin(ii+1)) then               iim(i) = ii               iip(i) = ii + 1               wgtw(i) = (xin(ii+1) - xout(i,j)) / (xin(ii+1) - xin(ii))               wgte(i) = (xout(i,j) - xin(ii))   / (xin(ii+1) - xin(ii))               goto 60            end if         end do         write(6,*)'BILIN: Failed to find interp values'         call endrun60       iiprev = ii      end do      icount = 0      do i=1,nlonout(j)         if (iim(i) == 0 .or. iip(i) == 0) icount = icount + 1         sum = wgtw(i) + wgte(i)         if (sum < 0.99999 .or. sum > 1.00001) icount = icount + 1         if (wgtw(i) < 0. .or. wgtw(i) > 1.) icount = icount + 1         if (wgte(i) < 0. .or. wgte(i) > 1.) icount = icount + 1      end do      if (icount > 0) then         write(6,*)'BILIN: j=',j,' Something bad in longitude indices or weights'         call endrun      end if!! Do the interpolation, 1st in longitude then latitude!      do k=1,nlev         do i=1,nlonin            igrid(i) = arrin(i,k,jjm(j))*wgts(j) + arrin(i,k,jjp(j))*wgtn(j)         end do         do i=1,nlonout(j)            arrout(i,k,j) = igrid(iim(i))*wgtw(i) + igrid(iip(i))*wgte(i)         end do      end do   end do   returnend subroutine bilin

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产高清一区二区三区蜜臀| 国产美女视频91| 欧美美女视频在线观看| 亚洲国产综合人成综合网站| 欧美精品久久一区二区三区| 奇米色一区二区三区四区| 欧美一区二区三区在线| 国产一区二区调教| 久久99精品国产麻豆不卡| 久久新电视剧免费观看| av在线播放一区二区三区| 亚洲人成亚洲人成在线观看图片| 91黄色小视频| 免费看黄色91| 国产精品视频在线看| 欧美影视一区在线| 久久国产麻豆精品| 最新不卡av在线| 欧美久久久久中文字幕| 国产一区二区三区黄视频| 国产亚洲精品超碰| 亚洲一区二区三区四区五区中文| 国产一区二区视频在线| 视频一区二区欧美| 国产精品久久影院| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 日韩av网站免费在线| 亚洲自拍另类综合| 天堂精品中文字幕在线| www.性欧美| 中文在线一区二区| 亚洲成av人片在线观看无码| 波多野结衣精品在线| 久久久久久久性| 国产成人h网站| 国产精品天干天干在观线| 久久国产精品免费| 欧美成人r级一区二区三区| 亚洲制服欧美中文字幕中文字幕| 欧美大肚乱孕交hd孕妇| 日本成人在线不卡视频| 在线观看日韩一区| 偷拍一区二区三区四区| 美女www一区二区| 337p亚洲精品色噜噜噜| www.久久久久久久久| 久草热8精品视频在线观看| 亚洲女爱视频在线| 国产天堂亚洲国产碰碰| 91精品国产综合久久精品app| gogo大胆日本视频一区| 久久成人18免费观看| 午夜国产不卡在线观看视频| 欧美α欧美αv大片| 国产成人免费xxxxxxxx| 综合久久久久久| 成人av电影在线网| 国产色一区二区| 国产酒店精品激情| 中文字幕精品综合| 99re这里只有精品6| 亚洲国产乱码最新视频| 7878成人国产在线观看| 国产成a人亚洲| 亚洲卡通欧美制服中文| 久久精品综合网| 中文字幕不卡在线| 26uuu国产在线精品一区二区| 在线不卡中文字幕播放| 欧美性猛交一区二区三区精品| 91天堂素人约啪| 波多野结衣亚洲| 黄色小说综合网站| 久99久精品视频免费观看| 青青草原综合久久大伊人精品| 亚洲成av人片在线观看| 亚洲1区2区3区4区| 香蕉乱码成人久久天堂爱免费| 亚洲国产精品久久人人爱| 亚洲人亚洲人成电影网站色| 成人免费在线观看入口| 亚洲日本在线天堂| 一区二区三区日韩| 亚洲午夜久久久久久久久电影院| 国产suv精品一区二区6| 成熟亚洲日本毛茸茸凸凹| caoporen国产精品视频| 91影院在线观看| 日本大香伊一区二区三区| 在线视频一区二区免费| 在线播放国产精品二区一二区四区| 欧美日韩另类国产亚洲欧美一级| 欧美丰满美乳xxx高潮www| 欧美精品日日鲁夜夜添| 日韩一级片在线观看| 久久综合av免费| 综合分类小说区另类春色亚洲小说欧美| 最新日韩av在线| 亚洲成人高清在线| 久久超级碰视频| 成人av在线影院| 欧美丝袜第三区| 精品国产乱码久久久久久免费| 亚洲精品一区二区三区影院| 六月婷婷色综合| 国产不卡视频一区| 91蜜桃传媒精品久久久一区二区| 欧美三级视频在线观看| 精品国产一区二区三区不卡| 国产精品卡一卡二| 日韩精品高清不卡| 99在线视频精品| 91精品国产综合久久福利| 精品国产青草久久久久福利| 国产精品国产三级国产普通话蜜臀| 亚洲图片有声小说| 国产成人精品影视| 欧美裸体bbwbbwbbw| 国产性色一区二区| 午夜电影一区二区| 成人免费精品视频| 337p亚洲精品色噜噜噜| 一区在线中文字幕| 免费高清在线一区| 在线观看国产一区二区| 午夜私人影院久久久久| 粉嫩av一区二区三区在线播放| 欧美日韩高清影院| 国产精品午夜在线| 日本不卡视频一二三区| 99re热这里只有精品视频| 日韩欧美一级二级三级| 亚洲精品你懂的| 国产福利一区二区三区在线视频| 欧美日韩国产免费| 亚洲欧洲av另类| 国产精品一区二区无线| 欧美日本韩国一区| 亚洲精品久久嫩草网站秘色| 国产一区二区日韩精品| 日韩欧美国产电影| 亚洲成人精品影院| 91麻豆国产香蕉久久精品| 久久品道一品道久久精品| 男人的j进女人的j一区| 欧美日韩五月天| 亚洲在线免费播放| 91网站在线播放| 国产精品久久久久影院色老大| 久久er99精品| 一区二区成人在线观看| 国产**成人网毛片九色 | 99精品久久只有精品| 久久久久久一级片| 九色|91porny| 欧美zozo另类异族| 免费观看日韩电影| 日韩三级高清在线| 天天综合色天天| 69堂精品视频| 日韩精品一二区| 91精品国产91久久久久久一区二区| 一区二区三区免费看视频| 一本到不卡精品视频在线观看| 国产精品欧美一级免费| 成人免费视频caoporn| 国产精品青草综合久久久久99| 国产在线一区观看| 久久九九影视网| 成人美女在线视频| 国产女人18水真多18精品一级做| 国产精品12区| 亚洲三级视频在线观看| 91精彩视频在线| 香蕉av福利精品导航| 欧美一区二区视频在线观看2022| 男男gaygay亚洲| 日一区二区三区| 欧美成人性战久久| 国产麻豆视频一区二区| 国产偷v国产偷v亚洲高清| 国产高清亚洲一区| 亚洲人午夜精品天堂一二香蕉| 色妞www精品视频| 亚洲国产成人va在线观看天堂| 欧美肥妇毛茸茸| 国产乱子伦视频一区二区三区| 久久久久久毛片| 91最新地址在线播放| 亚洲一区精品在线| 欧美一区二区在线免费播放| 久久91精品久久久久久秒播| 久久精品人人做人人爽97| 国产不卡视频一区| 一区二区三区 在线观看视频| 欧美日韩成人在线| 国产精品自在在线| 亚洲免费看黄网站| 欧美一区二区三区在线观看| 国产精品一区不卡|