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

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

?? cpr.f

?? CCSM Research Tools: Community Atmosphere Model (CAM)
?? F
字號:
subroutine cpr (nlon, nlat, nlev, nlevp, numcases, lnorm, verbose)!! $Id: cpr.F,v 1.2.6.1 2002/05/13 17:59:24 erik Exp $!  use precision  use header  use stats  use nldat  implicit none  include 'netcdf.inc'!! Input arguments!  integer, intent(in) :: nlon, nlat, nlev, nlevp, numcases  logical lnorm            ! Whether to print lvl-by-lvl L2 & L-INF norm stats  logical verbose!! Local workspace (static or stack)!  character*(nf_max_name) name  integer nvars            ! number of variables on tape  integer natts  integer n,n2             ! variable index  integer ndims(2)  integer idim  integer xtype(2)  integer dimids(nf_max_dims,2)  integer i, j, k          ! spatial indices  integer numlev,numlev2   ! number of levels for each field  integer isub, nval, ii  integer itime, itime2    ! loop index over time  integer ret              ! return code  integer, dimension(3) :: start2d, count2d    real(r8) wsum  real(r8) pdelbar  real(r8) denom  real(r8) rd  real(r8), parameter :: timeepsilon = 1.e-9  real(r8) :: timediff  logical twocases         ! True => 2 h-tapes are being analyzed  logical found!! Local workspace (dynamic)!  real(r8), dimension(nlon,nlat,nlevp) :: arr, arr2  real(r8) diff(nlon)             ! difference field  real(r8) pdel(nlon,nlev,numcases)  real(r8) pmid(nlon,nlev)  real(r8) rdiff(nlon)            ! relative difference field  real(r8) ps(nlon,nlat,numcases)  real(r8) wbar(nlat)  real(r8) totmass  integer indx(nlon)          ! indices of non-zero diffs!! Externals!  integer ismax, fillarr, lenchr  external ismax, fillarr, lenchr!! Define start, count arrays!  start2d(:) = 1  count2d(1) = nlon  count2d(2) = nlat  count2d(3) = 1  twocases = numcases.eq.2!! Set surface pressure to constant once and for all if requested!  if (psid(1).lt.0 .or. psid(2).lt.0) then    if (twocases .and. (p0(1) /= p0(2))) then      write(6,*)'CPR: p0 values do not match'      stop 99    end if    ps(:,:,:) = p0(1)  end if!! Find number of variables on the 1st tape!  call wrap_inq_nvars (ncid(1), nvars)!! Big loop over number of time slices.  Not written as explicit "do" since! may need to adjust time index in the middle of the loop to match time! levels on tapes.!  itime = 1  itime2 = 110 continue!! Check equality of time steps!  if (matchts .and. twocases) then    timediff = abs (time(itime) - time2(itime2))    do while (timediff .gt. timeepsilon)      write(6,'(1x,a,f12.4,/1x,a,f12.4)')&           'Current times differ:time1=', time(itime), &           '                     time2=', time2(itime2)      if (time(itime).lt.time2(itime2)) then        itime = itime + 1        if (itime.gt.ntime(1)) then          write(6,*)'End of tape 1 reached: stopping'          stop 0        end if      else        itime2 = itime2 + 1        if (itime2.gt.ntime(2)) then          write(6,*)'End of tape 2 reached: stopping'          stop 0        end if      end if      timediff = abs (time(itime) - time2(itime2))    end do  end if  if (twocases) then    write(6,800)trim(case(1)), trim(case(2)),  &                trim(title(1)), trim(title(2)), &#ifndef SUN                date_written(itime,1), date_written(itime2,2), &#else                " ", " ", &#endif                time_written(itime,1), time_written(itime2,2), &                itime, itime2, &                ntime(1), ntime(2), &                nsteph(itime,1), nsteph(itime2,2), &                ncdate(itime,1), ncdate(itime2,2), &                ncsec(itime,1),  ncsec(itime2,2)  else                               ! One tape only.    write(6,801)case(1)(1:lenchr(case(1))),  &                title(1)(1:lenchr(title(1))), &                date_written(itime,1), &                time_written(itime,1), &                itime, &                ntime(1), &                nsteph(itime,1), &                ncdate(itime,1), &                ncsec(itime,1)  end if                    ! twocases!! Read in and check the data fields sequentially!  if (iprs.ne.0) then    write(6,'(/,a,i4,a,i4, a,i3,a,i3, a,i3,a,i3)') &     ' SUMMARY OF FIELD INFORMATION FOR LONGITUDE INDICES ', &     iprs,' through ',ipre,', LATITUDE INDICES ', &     latprs,' through ',latpre,', LEVELS ',kprs,' through ',kpre    write(6,'(a,t10,a,t14,a,t18,a,t23,a,t35,a,t47,a,t70,a)') &     ' FIELD','LON','LAT','LEV','DIFF','RDIFF','CASE1','CASE2'  end if  wsum = 0.  totmass = 0.  if (twocases) then    wbar(:) = 0.5*(gw(:,1) + gw(:,2))    if (psid(1).gt.0 .and. psid(2).gt.0) then      start2d(3) = itime      call wrap_get_vara_realx (ncid(1), psid(1), start2d, count2d, ps(1,1,1))      start2d(3) = itime2      call wrap_get_vara_realx (ncid(2), psid(2), start2d, count2d, ps(1,1,2))    end if    do j=1,nlat      do n=1,2        call plevs0 (nlon, nlev, hyai(1,n), hybi(1,n), hyam(1,n), &                     hybm(1,n), ps(1,j,n), pmid, pdel(1,1,n), p0(n))      end do!! Compute total mass for 2 methods!      do k=1,nlev        do i=1,nlon          pdelbar = 0.5*(pdel(i,k,1) + pdel(i,k,2))          totmass = totmass + pdelbar*wbar(j)        end do      end do      wsum = wsum + nlon*wbar(j)    end do  else    wbar(:) = gw(:,1)  end if!! Loop over all variables on the 1st tape!  do n=1,nvars    dimids(:,1) = -1    call wrap_inq_var (ncid(1), n, name, xtype(1), ndims(1), dimids(1,1), natts)    if (verbose) then      write(6,*) 'processing ', name(1:lenchr(name))    end if!! Determine number of levels for this variable!    found = .false.    numlev = 1    do idim=1,ndims(1)      if (dimids(idim,1).eq.levdimid(1)) then        numlev = nlev        if (found) then          write(6,*) name(1:lenchr(name)),' has 2 level dims: skipping'          cycle        end if        found = .true.      else if (dimids(idim,1).eq.ilevdimid(1)) then        numlev = nlevp        if (found) then          write(6,*) name(1:lenchr(name)),' has 2 level dims: skipping'          cycle        end if        found = .true.      end if    end do    ret = fillarr (ncid(1), n, dimids(1,1), londimid(1), latdimid(1), &                   levdimid(1), ilevdimid(1), nlon, nlat, &                   numlev, arr, itime)!! Skip to the next field if fillarr failed!    if (ret.lt.0) cycle!! Initialize statistics, then modify for this field!    call initstats    xmx(1) = -1.d99    xmn(1) = +1.d99    do k=1,numlev      do j=1,nlat        do i=1,nlon          xbar(1) = xbar(1) + abs(arr(i,j,k))          if (arr(i,j,k).gt.xmx(1)) then            xmx(1) = arr(i,j,k)            imx(1) = i            jmx(1) = j            kmx(1) = k          end if          if (arr(i,j,k).lt.xmn(1)) then            xmn(1) = arr(i,j,k)            imn(1) = i            jmn(1) = j            kmn(1) = k          end if        end do      end do    end do    if (twocases) then      ret = nf_inq_varid (ncid(2), name, n2)      if (ret.ne.NF_NOERR) then        if (verbose) then          write(6,*) name, ' not found on tape 2'        end if        cycle      end if              dimids(:,2) = -1      call wrap_inq_var (ncid(2), n2, name, xtype(2), ndims(2), &                         dimids(1,2), natts)      if (xtype(1).ne.xtype(2)) then        write(6,*)'NOTE: type variables do not match for field ', &                  name(1:lenchr(name))      end if      if (xtype(1).eq.NF_FLOAT .or. xtype(2).eq.NF_FLOAT) then        write(6,*)'NOTE: At least 1 tape has 32-bit values for field ', &                  name(1:lenchr(name))      end if!! Determine number of levels for this variable!      found = .false.      numlev2 = 1      do idim=1,ndims(2)        if (dimids(idim,2).eq.levdimid(2)) then          numlev2 = nlev          if (found) then            write(6,*) name(1:lenchr(name)),' has 2 level dims: skipping'            cycle          end if          found = .true.        else if (dimids(idim,2).eq.ilevdimid(2)) then          numlev2 = nlevp          if (found) then            write(6,*) name(1:lenchr(name)),' has 2 level dims: skipping'            cycle          end if          found = .true.        end if      end do      if (numlev2.ne.numlev) then        write(6,*) name(1:lenchr(name)), ' numlev mismatch: skipping'        cycle      end if      ret = fillarr (ncid(2), n2, dimids(1,2), londimid(2), latdimid(2), &                     levdimid(2), ilevdimid(2), nlon, nlat, &                     numlev, arr2, itime2)!! Skip to the next field if fillarr failed!      if (ret.lt.0) then        write(6,*)'Tape 2 does not have field ',name,': skipping'        cycle      end if      xmx(2) = -1.d99      xmn(2) = +1.d99      do k=1,numlev        do j=1,nlat          npos = npos + nlon          diff(:) = abs (arr(:,j,k) - arr2(:,j,k))!! Only compute mass weighted RMS for variables dimensioned nlev since don't ! know pdel for nlevp!          if (numlev.eq.1) then            do i=1,nlon              diffmw = diffmw + (diff(i)**2)*wbar(j)            end do          else if (numlev.eq.nlev) then            do i=1,nlon              pdelbar = 0.5*(pdel(i,k,1) + pdel(i,k,2))              diffmw = diffmw + (diff(i)**2)*pdelbar*wbar(j)            end do          end if          do i=1,nlon            rms = rms + diff(i)**2            xbar(2) = xbar(2) + abs(arr2(i,j,k))            if (arr2(i,j,k).gt.xmx(2)) then              xmx(2) = arr2(i,j,k)              imx(2) = i              jmx(2) = j              kmx(2) = k            end if                        if (arr2(i,j,k).lt.xmn(2)) then              xmn(2) = arr2(i,j,k)              imn(2) = i              jmn(2) = j              kmn(2) = k            end if          end do          if (iprs.ne.0) then            if (numlev.eq.1 .or. (k.ge.kprs .and. k.le.kpre)) then              if (j.ge.latprs .and. j.le.latpre) then                do i=iprs,ipre                  denom = 0.5*(abs(arr(i,j,k)) + abs(arr2(i,j,k)))                  rd = 0.                  if (denom.ne.0.) rd = diff(i)/denom                  write(6,910) name,i,j,k,diff(i),rd,arr(i,j,k),arr2(i,j,k)                end do              end if            end if          end if!! Test on half of difference field rather than full field due to 0.5 factor! used in computation of "denom" later.!           nval = 0          do i=1,nlon            if (diff(i).ne.0.) then              nval = nval + 1              indx(nval) = i            end if          end do          if (nval.gt.0) then                   ! at least 1 difference            ndif = ndif + nval            isub = ismax(nlon, diff, 1)            if (diff(isub).gt.difmx) then    ! Save max diff info              difmx = diff(isub)              dmxsv(1) = arr(isub,j,k)          ! Save values              dmxsv(2) = arr2(isub,j,k)              idmxsv = isub              jdmxsv = j              kdmxsv = k            end if            rdiff(:) = 0.            do ii=1,nval                        ! Compute relative diffs              i = indx(ii)              denom = max(abs(arr(i,j,k)), abs(arr2(i,j,k)))              rdiff(i) = diff(i)/(2.*denom)              rdbar = rdbar + rdiff(i)              rdlnbar = rdlnbar - log10(rdiff(i))            end do            isub = ismax(nlon,rdiff,1)                        if (rdiff(isub).gt.rdifmx) then  ! Save max relative diff info              rdifmx = rdiff(isub)              rdmxsv(1) = arr(isub,j,k)         ! Save values & indices              rdmxsv(2) = arr2(isub,j,k)              irdmxsv = isub              jrdmxsv = j              krdmxsv = k            end if          end if        end do      end do    end if!! Print stats!    call printstats (twocases, name, numlev, nlev, nlevp, &                     nlon, nlat, wsum, totmass)  end do  ! n=1,nvars!! Proceed to next time slice if more are available!  itime = itime + 1  if (itime.gt.ntime(1)) then    write(6,*)'End of tape 1 reached: stopping'    stop 0  end if  if (twocases) then    itime2 = itime2 + 1    if (itime2.gt.ntime(2)) then      write(6,*)'End of tape 2 reached: stopping'      stop 0    end if  end if  goto 10800 format(' CASE:',2(A,1X),/, &           ' CASE1 TITLE:',a80,/, ' CASE2 TITLE:',a80,/, &           ' date_written: ',2(A8,1X),/, &           ' time_written: ',2(A8,1X),/, &           ' MFILH:  ',2I9,/,' MFILTH: ',2I9,/,' NSTEPH: ',2I9,/, &           ' NCDATE: ',2I9,/, &           ' NCSEC:  ',2I9,/,' MHISF:  ',2I9,/,' MFSTRT: ',2I9,/)801 format(' CASE1:',a,/, &           ' CASE1 TITLE:',a80,/, &           ' date_written: ',1(A8,1X),/, &           ' time_written: ',1(A8,1X),/, &           ' MFILH:  ',1I9,/,' MFILTH: ',1I9,/,' NSTEPH: ',1I9,/, &           ' NCDATE: ',1I9,/, &           ' NCSEC:  ',1I9,/,' MHISF:  ',1I9,/,' MFSTRT: ',1I9,/)910 format(1x,a8,'(',i3,',',i2,',',i2,')=',1p,2e12.4,2e23.15)end subroutine cprinteger function fillarr (ncid, varid, dimids, londimid, latdimid, &                          levdimid, ilevdimid, nlon, nlat, &                          numlev, arr, itime)  use precision  implicit none  include 'netcdf.inc'  integer :: ncid, varid  integer :: dimids(NF_MAX_DIMS)  integer :: londimid, latdimid, levdimid, ilevdimid  integer :: nlon, nlat, numlev  integer :: itime  real(r8) :: arr(nlon,nlat,numlev)!! Local workspace!  integer j, k  integer start(4), count(4)  real(r8), allocatable :: arrxzy(:,:,:)  fillarr = 0       ! Initialize return value to success  if (dimids(1).eq.londimid .and. &      dimids(2).eq.latdimid .and. &      (dimids(3).eq.levdimid .or. dimids(3).eq.ilevdimid)) then    start(1) = 1    start(2) = 1    start(3) = 1    start(4) = itime    count(1) = nlon    count(2) = nlat    count(3) = numlev    count(4) = 1    call wrap_get_vara_realx (ncid, varid, start, count, arr)  else if (dimids(1).eq.londimid .and. &           (dimids(2).eq.levdimid .or. dimids(2).eq.ilevdimid) .and. &           dimids(3).eq.latdimid ) then    start(1) = 1    start(2) = 1    start(3) = 1    start(4) = itime    count(1) = nlon    count(2) = numlev    count(3) = nlat    count(4) = 1    allocate(arrxzy(nlon,numlev,nlat))    call wrap_get_vara_realx (ncid, varid, start, count, arrxzy)    do k=1,numlev      do j=1,nlat        arr(:,j,k) = arrxzy(:,k,j)      end do    end do    deallocate(arrxzy)  else if (dimids(1).eq.londimid .and. dimids(2).eq.latdimid) then    start(1) = 1    start(2) = 1    start(3) = itime    start(4) = 0    count(1) = nlon    count(2) = nlat    count(3) = 1    count(4) = 0    call wrap_get_vara_realx (ncid, varid, start, count, arr)  else    fillarr = -1  end if  returnend function fillarr#if ( ! defined TIMING )subroutine t_startf (xxx)  character*(*) xxx  returnend subroutine t_startfsubroutine t_stopf (xxx)  character*(*) xxx  returnend subroutine t_stopfsubroutine t_prf (xxx)  integer xxx  returnend subroutine t_prf#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品三级在线观看| 欧美一区二区在线观看| 中文字幕一区二区在线观看| 国产一区二区三区黄视频 | 欧美人妖巨大在线| 亚洲国产一区二区在线播放| 欧美性生活大片视频| 亚洲国产精品久久久男人的天堂| 欧美亚洲日本一区| 亚洲国产精品一区二区久久| 欧美日韩在线一区二区| 亚洲国产va精品久久久不卡综合 | 欧美在线影院一区二区| 一区二区久久久| 在线观看国产91| 亚洲6080在线| 日韩午夜精品电影| 狠狠网亚洲精品| 国产午夜精品一区二区三区嫩草 | 国产成a人亚洲| 国产精品美女久久久久久久久久久| 高清日韩电视剧大全免费| 亚洲国产岛国毛片在线| 97超碰欧美中文字幕| 亚洲狼人国产精品| 欧美日韩色一区| 免费观看一级特黄欧美大片| 欧美精品一区二区三| 国产成人三级在线观看| 中文字幕一区二区5566日韩| 日本乱码高清不卡字幕| 日本欧美在线观看| 日韩欧美国产三级电影视频| 国产电影精品久久禁18| 亚洲另类在线视频| 制服.丝袜.亚洲.中文.综合| 精品一区二区在线视频| 国产精品视频免费看| 色噜噜狠狠色综合欧洲selulu| 午夜久久久影院| 精品人在线二区三区| 成人av在线播放网址| 亚洲高清三级视频| 日韩精品在线看片z| 盗摄精品av一区二区三区| 一区二区在线观看免费 | 欧美蜜桃一区二区三区| 精品影视av免费| 国产精品久久久久久一区二区三区 | 日韩一区精品字幕| 久久蜜臀中文字幕| 一本大道久久a久久精二百| 午夜精品久久久久久久久久| 久久男人中文字幕资源站| 一本色道亚洲精品aⅴ| 免费在线观看成人| 国产精品麻豆欧美日韩ww| 欧美日本一区二区| 国产精品白丝jk白祙喷水网站| 一区二区三区欧美久久| 日韩一级片网站| 99视频超级精品| 久88久久88久久久| 亚洲美女淫视频| 久久这里都是精品| 欧美在线观看视频一区二区三区| 精品一二线国产| 一区二区三区在线观看视频| 欧美精品一区二区三区在线| 在线观看国产一区二区| 国产成人夜色高潮福利影视| 午夜久久电影网| 中文字幕不卡在线观看| 欧美一卡二卡三卡| 一本大道综合伊人精品热热 | 免费三级欧美电影| 亚洲四区在线观看| 久久影院电视剧免费观看| 精品视频一区三区九区| 不卡的av中国片| 狂野欧美性猛交blacked| 一区二区三区四区不卡在线| 久久影音资源网| 国产精品久久久久久久久久免费看| 欧美男人的天堂一二区| 99久久99久久精品免费看蜜桃| 激情深爱一区二区| 天堂成人国产精品一区| 亚洲欧洲99久久| 久久欧美中文字幕| 日韩一区二区视频| 欧美日韩卡一卡二| av爱爱亚洲一区| 国产福利一区二区三区在线视频| 男男视频亚洲欧美| 午夜激情久久久| 亚洲精品一卡二卡| 国产精品天天看| 久久久久国产精品麻豆ai换脸| 欧美一区二区视频在线观看2020| 色视频成人在线观看免| 成人激情动漫在线观看| 国产又粗又猛又爽又黄91精品| 日韩精品国产欧美| 亚洲自拍偷拍av| 亚洲精品视频在线| 国产精品久久久久影院| 欧美国产精品劲爆| 久久久久亚洲蜜桃| 日韩美女在线视频| 日韩午夜中文字幕| 91精品免费在线| 欧美群妇大交群的观看方式| 欧美午夜视频网站| 91福利国产成人精品照片| 色域天天综合网| 色综合网色综合| 97久久精品人人做人人爽| 99热在这里有精品免费| av午夜精品一区二区三区| 成人av片在线观看| 成人av电影免费观看| 成+人+亚洲+综合天堂| a亚洲天堂av| 不卡电影免费在线播放一区| 99视频一区二区| 91视频一区二区三区| 色婷婷综合久久久久中文一区二区| 99久久精品国产麻豆演员表| 91色.com| 欧洲精品一区二区| 欧美日韩高清在线| 91.xcao| 51精品视频一区二区三区| 69久久99精品久久久久婷婷| 欧美一区二区黄色| 精品剧情在线观看| 久久日韩精品一区二区五区| 久久久久久久久一| 国产精品久久久久久久裸模| 亚洲欧洲一区二区在线播放| 亚洲女人的天堂| 亚洲制服欧美中文字幕中文字幕| 五月综合激情网| 日本色综合中文字幕| 国产在线视频一区二区三区| 成人午夜在线播放| aaa亚洲精品一二三区| 色综合 综合色| 欧美女孩性生活视频| 精品日韩欧美在线| 亚洲国产精品v| 亚洲最大成人综合| 日韩成人午夜精品| 国产一区二区三区观看| 97se亚洲国产综合在线| 欧美日韩一区二区在线观看视频| 欧美精品第1页| 久久久精品天堂| 亚洲色欲色欲www在线观看| 亚洲va欧美va国产va天堂影院| 男人的天堂久久精品| 国产经典欧美精品| 色综合久久久久久久久久久| 欧美精品在线视频| 久久男人中文字幕资源站| 日韩美女啊v在线免费观看| 五月婷婷另类国产| 精品在线一区二区| 91小视频在线| 日韩三级伦理片妻子的秘密按摩| 中文av一区特黄| 亚洲午夜久久久久久久久电影院 | 国产呦萝稀缺另类资源| 97精品国产露脸对白| 欧美一区二区三区婷婷月色| 国产女人18毛片水真多成人如厕 | 国产精品欧美一区二区三区| 亚洲福利视频一区二区| 国产一区二区久久| 在线视频一区二区三| 欧美成人官网二区| 亚洲欧洲综合另类在线| 六月丁香综合在线视频| 91亚洲男人天堂| 日韩欧美电影一区| 亚洲少妇屁股交4| 狠狠久久亚洲欧美| 欧美综合一区二区| 久久综合狠狠综合久久激情| 亚洲一级片在线观看| 国产精品亚洲专一区二区三区 | 午夜精品久久久久久久蜜桃app| 国产伦精一区二区三区| 欧美色电影在线| 国产欧美视频在线观看| 日本午夜精品视频在线观看| av电影在线观看一区| 精品处破学生在线二十三| 一区二区三区在线观看网站|