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

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

?? bivar.f90

?? FORTRAN程序 共有8個插值程序 希望能幫到大家
?? F90
?? 第 1 頁 / 共 5 頁
字號:
subroutine idbvip ( md, ndp, xd, yd, zd, nip, xi, yi, zi, iwk, wk )
!
!*******************************************************************************
!
!! IDBVIP performs bivariate interpolation of irregular X, Y data.
!
!
!  Discussion:
!
!    The data points must be distinct and their projections in the
!    X-Y plane must not be collinear, otherwise an error return
!    occurs.
!
!    Inadequate work space IWK and WK may cause incorrect results.
!
!  Latest revision:
!
!    January, 1985
!
!  Purpose:
!
!    To provide bivariate interpolation and smooth surface fitting for 
!    values given at irregularly distributed points.
!
!    The resulting interpolating function and its first-order partial 
!    derivatives are continuous.
!
!    The method employed is local, i.e. a change in the data in one area 
!    of the plane does not affect the interpolating function except in
!    that local area.  This is advantageous over global interpolation 
!    methods.
!
!    Also, the method gives exact results when all points lie in a plane. 
!    This is advantageous over other methods such as two-dimensional
!    Fourier series interpolation.
!
!  Usage:
!
!    This package contains two user entries, IDBVIP and IDSFFT, both 
!    requiring input data to be given at points
!      ( X(I), Y(I) ), I = 1,...,N.
!
!    If the user desires the interpolated data to be output at grid 
!    points, i.e. at points
!      ( XI(I), YI(J) ), I = 1,...,NXI, J=1,...,NYI,
!    then IDSFFT should be used.  This is useful for generating an 
!    interpolating surface.
!
!    The other user entry point, IDBVIP, will produce interpolated 
!    values at scattered points
!      ( XI(I), YI(I) ), i = 1,...,NIP.  
!    This is useful for filling in missing data points on a grid.
!
!  History:
!
!    The original version of BIVAR was written by Hiroshi Akima in 
!    August 1975 and rewritten by him in late 1976.  It was incorporated 
!    into NCAR's public software libraries in January 1977.  In August 
!    1984 a new version of BIVAR, incorporating changes described in the 
!    Rocky Mountain Journal of Mathematics article cited below, was 
!    obtained from Dr Akima by Michael Pernice of NCAR's Scientific 
!    Computing Division, who evaluated it and made it available in February, 
!    1985.
!
!  Accuracy:
!
!    Accurate to machine precision on the input data points.  Accuracy at 
!    other points greatly depends on the input data.
!
!  References:
!
!    Hiroshi Akima,  
!    A Method of Bivariate Interpolation and Smooth Surface Fitting
!      for Values Given at Irregularly Distributed Points,
!    ACM Transactions on Mathematical Software, 
!    Volume 4, Number 2, June 1978.
!
!    Hiroshi Akima,  
!    On Estimating Partial Derivatives for Bivariate Interpolation
!      of Scattered Data,
!    Rocky Mountain Journal of Mathematics,
!    Volume 14, Number 1, Winter 1984.
!
!  Method:
!
!    The XY plane is divided into triangular cells, each cell having 
!    projections of three data points in the plane as its vertices, and
!    a bivariate quintic polynomial in X and Y is fitted to each 
!    triangular cell.
!
!    The coefficients in the fitted quintic polynomials are determined 
!    by continuity requirements and by estimates of partial derivatives 
!    at the vertices and along the edges of the triangles.  The method 
!    described in the rocky mountain journal reference guarantees that 
!    the generated surface depends continuously on the triangulation.
!
!    The resulting interpolating function is invariant under the following 
!    types of linear coordinate transformations:
!      1) a rotation of the XY coordinate system
!      2) linear scale transformation of the Z axis
!      3) tilting of the XY plane, i.e. new coordinates (u,v,w) given by
!           u = x
!           v = y
!           w = z + a*x + b*y
!         where a, b are arbitrary constants.
!
!    complete details of the method are given in the reference publications.
!
!  Parameters:
!
!    Input, integer MD, mode of computation.   MD must be 1,
!    2, or 3, else an error return occurs.
!
!    1: if this is the first call to this subroutine, or if the
!    value of NDP has been changed from the previous call, or
!    if the contents of the XD or YD arrays have been changed
!    from the previous call.
!
!    2: if the values of NDP and the XD and YD arrays are unchanged
!    from the previous call, but new values for XI, YI are being
!    used.  If MD = 2 and NDP has been changed since the previous
!    call to IDBVIP, an error return occurs.
!
!    3: if the values of NDP, NIP, XD, YD, XI, YI are unchanged from
!    the previous call, i.e. if the only change on input to idbvip is
!    in the ZD array.  If MD = 3 and NDP or NIP has been changed since
!    the previous call to IDBVIP, an error return occurs.
!
!    Between the call with MD = 2 or MD = 3 and the preceding call, the
!    IWK and WK work arrays should not be disturbed.
!
!    Input, integer NDP, the number of data points (must be 4 or
!    greater, else an error return occurs).
!
!    Input, real XD(NDP), Y(NDP), the X and Y coordinates of the data points.
!
!    Input, real ZD(NDP), the data values at the data points.
!
!    Input, integer NIP, the number of output points at which
!    interpolation is to be performed (must be 1 or greater, else an
!    error return occurs).
!
!    Input, real XI(NIP), YI(NIP), the coordinates of the points at which
!    interpolation is to be performed.
!
!    Output, real ZI(NIP), the interpolated data values.
!
!    Workspace, integer IWK(31*NDP+NIP).
!
!    Workspace, real WK(8*NDP).
!
  implicit none
!
  integer ndp
  integer nip
!
  real ap
  real bp
  real cp
  real dp
  integer iip
  integer itipv
  integer itpv
  integer iwk(31*ndp + nip)
  integer jwipl
  integer jwipt
  integer jwit
  integer jwit0
  integer jwiwk
  integer jwiwl
  integer jwiwp
  integer jwwpd
  integer md
  integer nl
  integer nt
  integer ntsc
  real p00
  real p01
  real p02
  real p03
  real p04
  real p05
  real p10
  real p11
  real p12
  real p13
  real p14
  real p20
  real p21
  real p22
  real p23
  real p30
  real p31
  real p32
  real p40
  real p41
  real p50
  real wk(8*ndp)
  real x0
  real xd(ndp)
  real xi(nip)
  real xs1
  real xs2
  real y0
  real yd(ndp)
  real yi(nip)
  real ys1
  real ys2
  real zd(ndp)
  real zi(nip)
!
  save /idlc/
  save /idpt/
!
  common /idlc/ itipv,xs1,xs2,ys1,ys2,ntsc(9)
  common /idpt/ itpv,x0,y0,ap,bp,cp,dp, &
                p00,p10,p20,p30,p40,p50,p01,p11,p21,p31,p41, &
                p02,p12,p22,p32,p03,p13,p23,p04,p14,p05
!
!  Error check.
!
  if ( md < 1 .or. md > 3 ) then
    write ( *, '(a)' ) ' '
    write ( *, '(a)' ) 'IDBVIP - Fatal error!'
    write ( *, '(a)' ) '  Input parameter MD out of range.'
    stop
  end if
 
  if ( ndp < 4 ) then
    write ( *, '(a)' ) ' '
    write ( *, '(a)' ) 'IDBVIP - Fatal error!'
    write ( *, '(a)' ) '  Input parameter NDP out of range.'
    stop
  end if
 
  if ( nip < 1 ) then
    write ( *, '(a)' ) ' '
    write ( *, '(a)' ) 'IDBVIP - Fatal error!'
    write ( *, '(a)' ) '  Input parameter NIP out of range.'
    stop
  end if
 
  if ( md == 1 ) then
    iwk(1) = ndp
  else
    if ( ndp /= iwk(1) ) then
      write ( *, '(a)' ) ' '
      write ( *, '(a)' ) 'IDBVIP - Fatal error!'
      write ( *, '(a)' ) '  MD = 2 or 3 but NDP was changed since last call.'
      stop
    end if
  end if
 
  if ( md <= 2 ) then
    iwk(3) = nip
  else
    if ( nip < iwk(3) ) then
      write ( *, '(a)' ) ' '
      write ( *, '(a)' ) 'IDBVIP - Fatal error!'
      write ( *, '(a)' ) '  MD = 3 but NIP was changed since last call.'
      stop
    end if
  end if
!
!  Allocation of storage areas in the IWK array.
!
  jwipt = 16
  jwiwl = 6*ndp+1
  jwiwk = jwiwl
  jwipl = 24*ndp+1
  jwiwp = 30*ndp+1
  jwit0 = 31*ndp
  jwwpd = 5*ndp+1
!
!  Triangulate the XY plane.
!
  if ( md == 1 ) then

    call idtang ( ndp, xd, yd, nt, iwk(jwipt), nl, iwk(jwipl), &
      iwk(jwiwl), iwk(jwiwp), wk )

    iwk(5) = nt
    iwk(6) = nl

    if ( nt == 0 ) then
      return
    end if

  else

    nt = iwk(5)
    nl = iwk(6)

  end if
!
!  Locate all points at which interpolation is to be performed.
!
  if ( md <= 2 ) then

    itipv = 0
    jwit = jwit0

    do iip = 1, nip

      jwit = jwit+1

      call idlctn ( ndp, xd, yd, nt, iwk(jwipt), nl, iwk(jwipl), &
        xi(iip), yi(iip), iwk(jwit), iwk(jwiwk), wk )

    end do

  end if
!
!  Estimate the partial derivatives at all data points.
!
  call idpdrv ( ndp, xd, yd, zd, nt, iwk(jwipt), wk, wk(jwwpd) )
!
!  Interpolate the ZI values.
!
  itpv = 0
  jwit = jwit0

  do iip = 1, nip

    jwit = jwit + 1

    call idptip ( ndp, xd, yd, zd, nt, iwk(jwipt), nl, iwk(jwipl), wk, &
      iwk(jwit), xi(iip), yi(iip), zi(iip) )

  end do
 
  return
end
subroutine idgrid ( xd, yd, nt, ipt, nl, ipl, nxi, nyi, xi, yi, ngp, igp )
!
!*******************************************************************************
!
!! IDGRID organizes grid points for surface fitting.
!
!
!  Discussion:
!
!    IDGRID sorts the points in ascending order of triangle numbers and 
!    of the border line segment number.
!
!  Parameters:
!
!    Input, real XD(NDP), YD(NDP), the X and Y coordinates of the data 
!    points.
!
!    Input, integer NT, the number of triangles.
!
!    Input, integer IPT(3*NT), the indices of the triangle vertexes.
!
!    Input, integer NL, the number of border line segments.
!
!    Input, integer IPL(3*NL), containing the point numbers of the end points 
!    of the border line segments and their respective triangle numbers,
!
!    Input, integer NXI, NYI, the number of grid points in the X and Y
!    coordinates.
!
!    Input, real XI(NXI), YI(NYI), the coordinates of the grid points.
!
!    Output, integer NGP(2*(NT+2*NL)) where the
!    number of grid points that belong to each of the
!    triangles or of the border line segments are to be stored.
!
!    Output, integer IGP(NXI*NYI), where the grid point numbers are to be 
!    stored in ascending order of the triangle number and the border line
!    segment number.
!
  implicit none
!
  integer nl
  integer nt
  integer nxi
  integer nyi
!
  integer igp(nxi*nyi)
  integer il0
  integer il0t3
  integer ilp1
  integer ilp1t3
  integer insd
  integer ip1
  integer ip2
  integer ip3
  integer ipl(3*nl)
  integer ipt(3*nt)
  integer it0
  integer it0t3
  integer ixi
  integer iximn
  integer iximx
  integer iyi
  integer izi
  integer jigp0
  integer jigp1
  integer jigp1i
  integer jngp0
  integer jngp1
  integer l
  integer ngp(2*(nt+2*nl))
  integer ngp0
  integer ngp1
  integer nl0
  integer nt0
  integer nxinyi
  real spdt
  real u1
  real u2
  real u3
  real v1
  real v2
  real v3
  real vpdt
  real x1
  real x2
  real x3
  real xd(*)
  real xi(nxi)
  real xii
  real ximn
  real ximx
  real xmn
  real xmx
  real y1
  real y2
  real y3
  real yd(*)
  real yi(nyi)
  real yii
  real yimn
  real yimx
  real ymn
  real ymx
!
!  Statement functions
!
  spdt(u1,v1,u2,v2,u3,v3) = (u1-u2)*(u3-u2)+(v1-v2)*(v3-v2)

  vpdt(u1,v1,u2,v2,u3,v3) = (u1-u3)*(v2-v3)-(v1-v3)*(u2-u3)
!
!  Preliminary processing
!
  nt0 = nt
  nl0 = nl
  nxinyi = nxi * nyi
  ximn = min ( xi(1), xi(nxi) )
  ximx = max ( xi(1), xi(nxi) )
  yimn = min ( yi(1), yi(nyi) )
  yimx = max ( yi(1), yi(nyi) )
!
!  Determine grid points inside the data area.
!
  jngp0 = 0
  jngp1 = 2*(nt0+2*nl0)+1
  jigp0 = 0
  jigp1 = nxinyi + 1
 
  do it0 = 1, nt0

    ngp0 = 0
    ngp1 = 0
    it0t3 = it0*3
    ip1 = ipt(it0t3-2)
    ip2 = ipt(it0t3-1)
    ip3 = ipt(it0t3)
    x1 = xd(ip1)
    y1 = yd(ip1)
    x2 = xd(ip2)
    y2 = yd(ip2)
    x3 = xd(ip3)
    y3 = yd(ip3)
    xmn = min ( x1, x2, x3 )
    xmx = max ( x1, x2, x3 )
    ymn = min ( y1, y2, y3 )
    ymx = max ( y1, y2, y3 )
    insd = 0

    do ixi = 1, nxi

      if ( xi(ixi) < xmn .or. xi(ixi) > xmx ) then
        if ( insd == 0 ) then
          cycle
        end if
        iximx = ixi-1
        go to 23
      end if

      if ( insd /= 1 ) then
        insd = 1
        iximn = ixi
      end if

    end do
 
    if ( insd == 0 ) then
      go to 38
    end if

    iximx = nxi

23  continue

    do iyi = 1, nyi

      yii = yi(iyi)

      if ( yii < ymn .or. yii > ymx ) then
        go to 37
      end if

      do ixi = iximn, iximx

        xii = xi(ixi)
        l = 0
        if ( vpdt(x1,y1,x2,y2,xii,yii) ) 36,25,26

25      continue

        l = 1
26      continue
        if(vpdt(x2,y2,x3,y3,xii,yii))     36,27,28
27      continue
        l = 1
28      continue
        if(vpdt(x3,y3,x1,y1,xii,yii))     36,29,30
29      continue
        l = 1
30      continue
        izi = nxi*(iyi-1)+ixi

        if ( l == 1 ) go to 31

        ngp0 = ngp0+1
        jigp0 = jigp0+1
        igp(jigp0) = izi
        go to 36

31      continue
 
        do jigp1i = jigp1,nxinyi
          if ( izi == igp(jigp1i) ) then
            go to 36
          end if
        end do
 
        ngp1 = ngp1+1
        jigp1 = jigp1-1
        igp(jigp1) = izi

36      continue

      end do

37    continue

    end do

38  continue

    jngp0 = jngp0+1
    ngp(jngp0) = ngp0
    jngp1 = jngp1-1
    ngp(jngp1) = ngp1

  end do
!
!  Determine grid points outside the data area.
!  in semi-infinite rectangular area.
!
  do il0 = 1, nl0

    ngp0 = 0
    ngp1 = 0
    il0t3 = il0*3
    ip1 = ipl(il0t3-2)
    ip2 = ipl(il0t3-1)
    x1 = xd(ip1)
    y1 = yd(ip1)
    x2 = xd(ip2)
    y2 = yd(ip2)

    xmn = ximn
    xmx = ximx
    ymn = yimn

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩中文字幕1| 亚洲欧美一区二区三区国产精品| 日韩精品视频网站| 欧美一级理论片| 国产麻豆精品久久一二三| 国产欧美日产一区| 91福利小视频| 水蜜桃久久夜色精品一区的特点 | 国产欧美日韩另类视频免费观看| 国产黄色精品网站| 亚洲人成精品久久久久| 欧美人妇做爰xxxⅹ性高电影| 久久精品国产久精国产爱| 久久新电视剧免费观看| 99re在线视频这里只有精品| 亚洲狠狠爱一区二区三区| 日韩欧美视频一区| 成人的网站免费观看| 一区二区三区毛片| 日韩美女一区二区三区四区| 国产不卡一区视频| 亚洲高清一区二区三区| 2020日本不卡一区二区视频| 色猫猫国产区一区二在线视频| 日本vs亚洲vs韩国一区三区| 国产精品区一区二区三区| 欧美日本韩国一区| eeuss鲁片一区二区三区在线看| 一区二区三区四区视频精品免费| 精品三级在线看| 在线免费观看日本一区| 精品在线你懂的| 一级女性全黄久久生活片免费| 精品国产伦一区二区三区观看方式 | 欧美国产丝袜视频| 欧美日韩国产一二三| 国产成人自拍高清视频在线免费播放| 亚洲精品免费电影| 中文一区二区完整视频在线观看| 欧美老女人在线| 99久久精品情趣| 亚洲国产精品激情在线观看| 免费在线看一区| 久久―日本道色综合久久| 国产精品一二三四| 国产精品久久久久永久免费观看| 9久草视频在线视频精品| 亚洲乱码精品一二三四区日韩在线| 色综合久久66| 午夜av一区二区| 精品国产乱码久久久久久图片 | 综合久久综合久久| 欧美性受xxxx| 九一九一国产精品| 国产精品麻豆网站| 欧美夫妻性生活| 国产精品1区2区| 亚洲影视在线播放| 久久综合999| 91精品91久久久中77777| 美腿丝袜亚洲综合| 1区2区3区国产精品| 91精品一区二区三区在线观看| 精品制服美女久久| 亚洲欧美成aⅴ人在线观看| 制服丝袜av成人在线看| 丁香一区二区三区| 日本不卡一二三| 亚洲欧洲三级电影| 欧美一级久久久| 91日韩精品一区| 久久国产精品第一页| 亚洲日本电影在线| 欧美zozo另类异族| 欧美三级蜜桃2在线观看| 国内精品久久久久影院薰衣草| 亚洲欧美日韩国产一区二区三区| 日韩欧美在线综合网| 欧洲一区二区三区在线| 岛国精品在线观看| 美国毛片一区二区| 亚洲午夜在线观看视频在线| 欧美国产一区二区| 日韩一级免费一区| 欧美日本一区二区三区四区| 99免费精品在线| 国产一区二区精品久久99| 日韩激情一二三区| 一区二区三区av电影 | 99久久99久久精品免费观看| 久久99精品久久久久| 亚洲综合丁香婷婷六月香| 国产欧美日本一区视频| 精品奇米国产一区二区三区| 欧美日韩亚洲综合在线| 色噜噜夜夜夜综合网| 不卡av电影在线播放| 国产91在线观看丝袜| 色8久久人人97超碰香蕉987| 国产伦精品一区二区三区视频青涩| 同产精品九九九| 亚洲在线免费播放| 亚洲主播在线播放| 亚洲黄色小视频| 一区二区成人在线| 亚洲国产va精品久久久不卡综合| 亚洲男人的天堂在线观看| 国产日韩欧美激情| 国产精品视频九色porn| 国产欧美日产一区| 亚洲欧洲另类国产综合| 国产精品国产三级国产aⅴ入口 | 亚洲一二三区在线观看| 亚洲色欲色欲www在线观看| 亚洲日本在线a| 一区二区三区四区在线播放| 亚洲韩国一区二区三区| 天堂午夜影视日韩欧美一区二区| 五月天婷婷综合| 蜜桃久久av一区| 国产呦萝稀缺另类资源| 成人免费的视频| 99这里只有精品| 欧美三级电影在线看| 欧美一级片在线看| 久久久午夜精品理论片中文字幕| 2020日本不卡一区二区视频| 欧美极品少妇xxxxⅹ高跟鞋 | 久久久91精品国产一区二区精品 | 国产欧美日韩在线视频| 国产精品萝li| 偷拍与自拍一区| 国产一区激情在线| 91蝌蚪porny| 日韩一级完整毛片| 国产欧美日韩亚州综合 | 亚洲卡通动漫在线| 午夜精品久久久久久| 精品亚洲欧美一区| 99久久综合精品| 欧美女孩性生活视频| 久久综合九色综合欧美98 | 日本特黄久久久高潮| 国产精品亚洲人在线观看| 99re这里只有精品6| 欧美一区二区三区视频免费播放 | 日本视频一区二区| 岛国一区二区三区| 777久久久精品| 国产精品色在线| 麻豆精品视频在线| 色综合久久天天综合网| 欧美v国产在线一区二区三区| 亚洲欧洲精品成人久久奇米网| 亚洲国产aⅴ天堂久久| 国产高清不卡一区二区| 欧美日本一区二区三区四区| 国产精品久久一级| 日本午夜精品视频在线观看 | 久久99国产精品麻豆| 99久久夜色精品国产网站| 91精品国产色综合久久| 中文字幕亚洲成人| 麻豆成人av在线| 欧美偷拍一区二区| 国产精品久久久久永久免费观看| 日本欧美久久久久免费播放网| 91丨九色丨国产丨porny| 精品剧情在线观看| 性感美女久久精品| jlzzjlzz亚洲日本少妇| 久久久99精品免费观看| 久久精品国产999大香线蕉| 欧洲生活片亚洲生活在线观看| 中文在线资源观看网站视频免费不卡| 奇米888四色在线精品| 在线亚洲一区二区| 国产精品妹子av| 成人网在线播放| 国产欧美日韩不卡免费| 国产一区二三区| 久久综合久久综合久久综合| 日韩av一区二区三区四区| 欧洲国产伦久久久久久久| 国产精品伦理一区二区| 成人精品在线视频观看| 国产亚洲一二三区| 国产精品香蕉一区二区三区| 2023国产一二三区日本精品2022| 免费一区二区视频| 日韩欧美另类在线| 久久99这里只有精品| 日韩三级精品电影久久久| 青青草精品视频| 日韩一区二区免费电影| 激情五月激情综合网| 精品国产免费久久| 国产999精品久久| 亚洲欧洲日韩女同| 91麻豆精品一区二区三区|