爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: river

[图形美化] 任意两点间斜剖面做法总结【利用GRADS自带函数】

  [复制链接]

新浪微博达人勋

发表于 2014-8-21 15:09:48 | 显示全部楼层
river 发表于 2014-8-20 19:42
这个是最基本的啊,肯定可以。

嗯嗯 谢谢 我改改试试
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-8-21 19:13:14 | 显示全部楼层
深度狙杀 发表于 2014-8-21 15:09
嗯嗯 谢谢 我改改试试

你说的剖面图不需要照着这个改,你搜索剖面图,看一般的那种就对了。在这个基础上改反而很麻烦
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-22 10:18:34 | 显示全部楼层
本帖最后由 深度狙杀 于 2014-8-22 10:22 编辑
river 发表于 2014-8-21 19:13
你说的剖面图不需要照着这个改,你搜索剖面图,看一般的那种就对了。在这个基础上改反而很麻烦

我现在想按照一篇文献里的做法,画沿着一条直线的剖面。
为了直观(如图2),想用‘set y 1 12’但那个coll2gr函数不支持.

PS:我在这个地方用一个‘set xyrev on’  Grads就不能用呃  不知道怎么回事

沿黑色直线切开

沿黑色直线切开

切开后的时间剖面,纵坐标显示纬度

切开后的时间剖面,纵坐标显示纬度
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-22 14:31:55 | 显示全部楼层
guoyunqian 发表于 2013-10-11 11:03
下了地形数据,感谢楼主!

请问,您是从什么地方下载的地形数据?我的EMAIL: phj1970@163.com
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-8-22 19:09:46 | 显示全部楼层
深度狙杀 发表于 2014-8-22 10:18
我现在想按照一篇文献里的做法,画沿着一条直线的剖面。
为了直观(如图2),想用‘set y 1 12’但那个c ...

不行,那个函数现在还不支持时间的剖面,所以你只能通过计算这条直线上的值,输出成二进制文件,编写ctl再画图
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-22 21:55:24 | 显示全部楼层
很牛的帖子~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-23 14:26:51 | 显示全部楼层
本帖最后由 深度狙杀 于 2014-8-23 14:28 编辑
river 发表于 2014-8-22 19:09
不行,那个函数现在还不支持时间的剖面,所以你只能通过计算这条直线上的值,输出成二进制文件,编写ctl ...

我的资料里时间有24个时次,但层次只有一层,而这个函数支持的是层次,我就改动了一下ctl吧时次当层次处理,应该不会影响结果

我想把时间轴调到横坐标。但用了 xyrev on 之后就画不了了 ,秒退了

差不多就这样了

差不多就这样了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-8-23 16:28:34 | 显示全部楼层
深度狙杀 发表于 2014-8-23 14:26
我的资料里时间有24个时次,但层次只有一层,而这个函数支持的是层次,我就改动了一下ctl吧时次当层次处 ...

首先我很佩服你,你的这个想法非常好,是可以的,不会影响最终结果。其次批评你一下,出现问题了就需要详细描述一下,顺便把你的gs帖上来,不然你这么说我也不知道问题在哪。最后再给你点个赞
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-24 15:05:34 | 显示全部楼层
本帖最后由 深度狙杀 于 2014-8-24 15:13 编辑
river 发表于 2014-8-23 16:28
首先我很佩服你,你的这个想法非常好,是可以的,不会影响最终结果。其次批评你一下,出现问题了就需要详 ...

ctl 将时间维想象为垂直坐标(24个时次)
dset D:\Mechanism\Basic\diagnose\result\Zadv\za.grd
undef 32767.
title   anormal sst
xdef  360  linear -179.  1.0
ydef  416  linear  -73.834 0.333
zdef   24  linear  2  10
tdef   1 linear  01jan1990   1mo
vars  1
zad  24  -999  sst
endvars

编写gs
'enable print D:\Mechanism\Basic\diagnose\result\Zadv\zad.gmf '
'set grads off'
'set csmooth on'
'set x 1'
'set y 1'
'set t 1'
'set z 4 16'
lon1 = 165.
lon2 = 245.
lat1 = -5.
lat2 = 25.0
lon = lon1
'collect 1 free'
while (lon <= lon2)
lat = lat1 + (lat2-lat1)*(lon-lon1)/(lon2-lon1)
'collect 1 gr2stn(zad,'lon','lat')'
lon = lon + 1
endwhile
'set x 1 14'
'set ylabs 5S,165E|0N,178E|5N,169W|10N,155W|15N,142W|20N,128W|25N,115W'
'set xlabs 90/04|90/06|90/08|90/10|90/12|91/02|91/04'
'set xyrev on'
'set gxout contour'
'set missconn on'
'set cthick 8'
'set cint 0.3'
'd coll2gr(1,13)'

'print'
'disable print'
;



PS:这个还未解决,又出现了新问题,编出的程序,计算值和论文相比明显偏大。
方法是根据海温诊断方程,计算每一项的贡献。
我的参数定义
module dat
implicit none
integer,parameter::nx=360,ny=416,nyear=2,nt=12
real,parameter::undef=32767.,month=30*24*60*60
real,parameter::pi=3.1416,r=6371000
real,dimension(nx,ny,nt)::u,v,temp,w,tgave
real,dimension(nx,ny,nt,nyear)::ua,va,wa,ta,q,tte,tga
real,dimension(nx,ny,nt,nyear)::zad,mad,vad,hq,total
integer::i,j,t,k
real::dy,sig;  real,dimension(ny)::dx
end module

步长:
dy=2*pi*r*(0.333/360)
print*,dy
do j=1,ny
sig=-73.834+0.333*(j-1)
dx(j)=2*pi*r*cosd(sig)/360.
!print*,dx(j)
end do


纬向平流计算过程:边界采用前后差,中间采用中央差
zad=32767.
do k=1,nyear
do t=1,nt
!!!!!!!!!!!left boundary
do j=1,ny
   if(u(1,j,t)/=undef.and.ta(2,j,t,k)/=undef.and.ta(1,j,t,k)/=undef.and.ua(1,j,t,k)/=undef.and.temp(2,j,t)/=undef.and.temp(1,j,t)/=undef)then
   zad(1,j,t,k)=-u(1,j,t)*(ta(2,j,t,k)-ta(1,j,t,k))/(dx(j)) &
           &-ua(1,j,t,k)*(temp(2,j,t)-temp(1,j,t))/(dx(j)) &
          &-ua(1,j,t,k)*(ta(2,j,t,k)-ta(1,j,t,k))/(dx(j))
  zad(1,j,t,k)=zad(1,j,t,k)*month
                !        write(*,*)  zad(i,j,t,k)
                        else
                zad(1,j,t,k)=undef
                endif

!!!!!!!!!!!right boundary
        
   if(u(nx,j,t)/=undef.and.ta(nx-1,j,t,k)/=undef.and.ta(nx,j,t,k)/=undef.and.ua(nx,j,t,k)/=undef.and.temp(nx-1,j,t)/=undef.and.temp(nx,j,t)/=undef)then
   zad(nx,j,t,k)=-u(nx,j,t)*(ta(nx,j,t,k)-ta(nx-1,j,t,k))/(dx(j)) &
            &-ua(nx,j,t,k)*(temp(nx,j,t)-temp(nx-1,j,t))/(dx(j)) &
            &-ua(nx,j,t,k)*(ta(nx,j,t,k)-ta(nx-1,j,t,k))/(dx(j))
  zad(nx,j,t,k)=zad(nx,j,t,k)*month
                !        write(*,*)  zad(i,j,t,k)
                        else
                zad(nx,j,t,k)=undef
                endif


do i=2,nx-1

   if(u(i,j,t)/=undef.and.ta(i+1,j,t,k)/=undef.and.ta(i-1,j,t,k)/=undef.and.ua(i,j,t,k)/=undef.and.temp(i+1,j,t)/=undef.and.temp(i-1,j,t)/=undef)then
   zad(i,j,t,k)=-u(i,j,t)*(ta(i+1,j,t,k)-ta(i-1,j,t,k))/(2*dx(j)) &
            &-ua(i,j,t,k)*(temp(i+1,j,t)-temp(i-1,j,t))/(2*dx(j)) &
            &-ua(i,j,t,k)*(ta(i+1,j,t,k)-ta(i-1,j,t,k))/(2*dx(j))
  zad(i,j,t,k)=zad(i,j,t,k)*month
                !        write(*,*)  zad(i,j,t,k)
                        else
                zad(i,j,t,k)=undef
                endif
  end do
end do
end do
end do

资料里海洋纬向流单位是m/s,所以计算出来后单位为K/S,我乘以month,然后得到K/month.感觉计算过程没错,就是最后整体偏大。郁闷!!!资料取自GODAS,按前人的做法,选取0-50m深的平均

请你帮我支支招,谢谢

采用xyrev后提示错误

采用xyrev后提示错误

有错误但可以画出图形,不能保存为gmf,且纵坐标只显示几个

有错误但可以画出图形,不能保存为gmf,且纵坐标只显示几个

不采用用xyrev可绘出图形

不采用用xyrev可绘出图形

海温诊断方程

海温诊断方程
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-8-24 17:18:49 | 显示全部楼层
深度狙杀 发表于 2014-8-24 15:05
ctl 将时间维想象为垂直坐标(24个时次)
dset D:\Mechanism\Basic\diagnose\result\Zadv\za.grd
undef ...

我晕,这么专业的问题,你最好还是发个新帖来提问,这样做过的人就可以给你出主意了。你的set x 1 14是什么意思呢?
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表