zonal_mpsi_Wrap
zonal mean meridonal stream 함수를 계산합니다. 메타데이터는 유지됩니다.
프로토타입
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" function zonal_mpsi_Wrap ( v : numeric, lat [*] : numeric, p [*] : numeric, ps : numeric ) return_val [(time),lev,lat] : numeric
인수
v
meridional 바람값의 다차원자료에서 가장 오른쪽에 3개의 차원은 반드시 고도,위도,경도여야 합니다.
예제 [v(고도,위도,경도),v(시간,고도,위도,경도)]
단위는 m/s여야하며, 고도에 대한 차원의 경우 위에서 아래로 이루어져야 합니다.
lat
위도에 대한 일차원 배열입니다. 규모는 v에 있는 위도차원 규모와 같아야합니다.
p
위에서 아래로 되어진 기압값의 일차원배열입니다. 규모는 v에 있는 고도 차원규모와 같아야합니다. 단위는 Pa(파스칼) 단위여야 하며, 첫번째 값은 500 pa(5mb) 보다 커야합니다. 그리고 마지막 값은 100500 Pa(1005mb).보다 작아야 합니다
(예제 500 < p(0) < p(1) < ... < 100500.)
ps
표면기압의 다차원 수치배열입니다. 규모는 v의 차원 규모와 동일해야 합니다. 보통 ps는 고도차원을 제외한 모든 것이 v에 대응합니다. 단위는 Pa이여 합니다.
반환 값
가장 오른쪽 두개의 차원은 고도와 위도가 되는 다차원 수치배열입니다. 고도차원은 위에서 아래로 입니다. 누락값(return_val@_FillValue)은 v 아래에 발생하는 위치에 할당됩니다. 단위는 kg/s 입니다.
설명
CESM 프로세서 zonal mean meridional stream 함수의 수정된 정의를 사용하여 zonal mean meridional stream 함수를 계산합니다. 변경된 정의는 다음과 같습니다.
/ PS | 2 pi a cos(lat) | ZONAL_MPSI(lev,lat) = --------------- | V(lev,lat) dp g | | / p
V 는 zonal mean meridional wind (입력된 v 값을 이용하여 내부적으로 계산), p 압력e, PS 지표압력, 지구반경, 그리고 g 중력가속도로 이루어집니다.
Buja, L. E. (1994) CCM Processor User's Guide(Unicos Version). NCAR Technical Note NCAR/TN-384+IA, pages B-17 to B-18. 메타데이터를 유지하는 방법을 제외한 나머지 기능은 내장함수 zonal_mpsi와 동일합니다.
예제
예제 1
v는 고도,위도,경도 차원의 배열이고 lat과 p는 각각 위도와 고도에 대응하는 하나의 차원인 배열입니다. p와 v의 고도차원은 위에서 아래로 되어있습니다. (i.e. p(0) < p(1) < p(2) ...) 단위는 p와 ps 모두 Pa입니다.(만약 mb라면 100을 곱하도록 합니다.)
zmpsi = zonal_mpsi_Wrap(v,lat,p,ps) ; returns zmpsi(klev,nlat)
v에 대한 좌표 변수가 올바른 순서에 있다면 v와 연관된 일차원 배열 좌표를 다음과 같은 방법으로 직접 연결 할 수 있다.
zmpsi = zonal_mpsi_Wrap(v,v&lat,v&lev,ps)
v에 대한 좌표 변수가 잘못된 순서로 있다면(예를 들어 아래에서 위로), 다음과 같음 방법을 이용하여 호출시 정렬 할 수 있습니다.
zmpsi = zonal_mpsi_Wrap(v(::-1,:,:),v&lat,v&lev(::-1),ps)
예제 2
만약 v에 시간 차원이 있다면 앞에 시간이 추가되며 다른차원은 1과 동일하게 나옵니다.
zmpsi = zonal_mpsi_Wrap(v,lat,p,ps) ; returns zmpsi(ntim,klev,nlat)
예제 3
다음은 v 와 p가 아래에서 위로 되어있는 경우 정렬이 필요합니다. 또한 p와 ps가 mb인 경우 반드시 Pa로 변환해줘야 합니다.
vt2b = v(:,::-1,:,:) ; reverse the "lev" order to top-to-bottom pPa = p(::-1)*100. ; reverse and make Pa psPa = ps*100. ; make Pa zmpsi = zonal_mpsi_Wrap(vt2b,lat,pPa,psPa) ; zmpsi(ntim,klev,nlat)
도는, 필요한 변환은 함수 호출시 가능합니다.
zmpsi = zonal_mpsi_Wrap(v(:,::-1,:,:),lat,p(::-1)*100.,ps*100.)
예제 4
v의 고도차원은 zonal_mpsi_Wrap함수가 사용되기 이전에 반드시 압력좌표로 변환되어야 합니다.
; vinth2p requires the lev_p to be expressed in mb [hPa] lev_p = (/ 10, 20, 30, 50, 70,100,150,200,250 , 300,400,500,600,700,850,925,1000 /) lev_p!0 = "lev_p" ; variable/dim name lev_p&lev_p = lev_p ; create coordinate variable lev_p@long_name = "pressure" ; attach some attributes lev_p@units = "hPa" lev_p@positive = "down" hyam = f->hyam ; read from file hybm = f->hybm P0mb = f->P0*0.01 ps = f->ps ; these are in Pa v = f->V ; convert to pressure levels vp = vinth2p(v,hyam,hybm,lev_p,ps,intyp,P0mb,1,False) ; calculate zonal meridional streamfunction zmpsi = zonal_mpsi_Wrap(vp,lat,lev_p*100.,ps)
원문주소 : http://www.ncl.ucar.edu/Document/Functions/Contributed/zonal_mpsi_Wrap.shtml