- 积分
 - 7546
 
	- 贡献
 -  
 
	- 精华
 
	- 在线时间
 -  小时
 
	- 注册时间
 - 2013-4-20
 
	- 最后登录
 - 1970-1-1
 
 
 
 
 
 
 | 
	
 
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册 
 
 
 
x
 
这几天做论文,苦的一逼,直接求大神指导啊……全是眼泪啊…… 
我先说说,怎么回事,原始数据为月平均温度资料,格式nc,分辨率2.5°*2.5°,然后导出:纬度0-60°N,经度40-180°E,200hPa,1983年1月-2012年12月30年共360个月份的温度资料,格式dat,接着编程定义经向温度梯度,每月 求其 各个经线上经向温度梯度最大值的所在纬度,做纬度平均(     就是lat-ave  = (maxlat 1 + maxlat 2 +……+maxlat n)/ n          ),一共360个数据(就是360个lat-ave)。但是 做出来的结果不理想,跟急流轴的位置有出入。 
直接上图吧…… 
………………………………………………………………………………割线…………………………………………………………………………………… 
先上程序,      program main 
 
        integer,parameter:: nye=30,nmo=12,nx=25,ny=57 
        real dat(nye,nmo,nx,ny),   dmax(ny),     arr(nye,nmo,57),     res1(nye,nmo),    dT(30,12,24,57),  
        !       原始数据          温度梯度最大值   梯度最大值所在纬度      平均纬度            温度梯度 
!        real resu(nye,nmo),  summ, 
!       平均后温度梯度   
        summ=0.0 
        smean=0.0 
 
!     读入数据 
        open(1,file='G:\Fair\x.dat',status='old',form='unformatted',access='direct',recl=nx*ny) 
                                                                       !改为binary ? 
      irec=1 
        do i=1,30 
        do j=1,12 
          read(1,rec=irec) ((dat(i,j,k,l),l=1,ny),k=1,nx)                       ! i:year j:month k:25 l:57 
          irec=irec+1 
        enddo 
        enddo 
        close(1) 
 
!        write(*,*) dat 
!      stop "a" 
 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!计算温度梯度!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
        do i=1,30 
        do j=1,12 
        do m=1,24 
        do n=1,57 
        dT(i,j,m,n)=abs(dat(i,j,m+1,n)-dat(i,j,m,n))/2.5    !加绝对值? 
!        dT(i,j,m,n)=-(dat(i,j,m+1,n)-dat(i,j,m,n))/2.5      !不加绝对值? 
        end do 
        end do 
        end do 
        end do 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!选最大值!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
      do year=1,30 
          do month=1,12 
          do n=1,57 
          dmax(n)=0 
          arr(year,month,n)=0 
          do m=1,23 
            if(dT(year,month,m,n).gt.dmax(n)) then 
            dmax(n)=dT(year,month,m,n)            !温度梯度最大值 
            arr(year,month,n)=m*2.5-1.25         !纬度                    !数据读入顺序? 
!        write(*,*) 'kk',ii,jj,ll,kk,arr(ii,jj,ll) 
            end if 
          enddo 
          enddo 
            sumn=0 
        res1(year,month)=0 
            do n=1,57 
!            summ=summ+dmax(n) 
            res1(year,month)=res1(year,month)+arr(year,month,n) 
            enddo 
!        write(*,*) 'res1(ii,jj)',res1(ii,jj) 
!            resu(year,month)=summ/57.0                    !平均后温度梯度值 
            res1(year,month)=res1(year,month)/57.0        !平均后纬度值 
 
!        write(*,*) 'res1(ii,jj)',res1(ii,jj) 
        enddo 
        enddo 
 
!     输出结果resu(30,12) 
 
!      write(*,*) resu 
 
 
 
        open(5,file='G:\Fair\result5.txt',status='unknown',form='formatted') 
                irec=1 
      do m=1,30 
        write(5,200) (res1(m,n),n=1,12) 
        irec=irec+1 
        enddo 
        close(5) 
200   format(12(f12.5)) 
 
        end 
 
………………………………………………………………有问题的程序结束(可能原理方法都有问题)……………………………………………………… 
…………………………………………………………上结果图…………………………………………………… 
数据结果 
 
理想的结果应该是前三列都在30°左右(我认为是这样的,但老师说应该在26都°以南),后面几列 数据逐渐变大,到7或8列最大,约为45左右,然后逐渐变小,到最后一列又接近30左右(或者老师说的26)。 
我用grads做了一下,将1983年-2012年的12个月的经向温度图做了一下,跟急流轴的位置对应其实很好,可是老师说冬季的应该在26°以南,事实上,急流轴的冬季位置在30°左右,与冬季经向温度梯度最大值所在纬度(约30°)配合很好。老师认为青藏高原冬季是冷源,只剩下南支急流,经向温度梯度最大值应该在高原南侧,高原最南的纬度约为26°。听着也不无道理啊?对吧? 
………………………………………………………………再割一下,说说我的困惑……………………………………………… 
不知道dat格式数据怎么存放,F语言该怎么读,第一个数据是从南还是北开始?还有温度梯度的定义对不对啊?现在感觉自己就是个傻子啊,感觉越弄越糊涂,有点上火…… 
求大神知道…… 
全是眼泪啊…… 
 |   
 
 
 
 |