2016-08-23 5 views
0

코드는이 대답은 작동합니까 Add a new dimension하지만 내가하고 싶은 일을하지 않습니다.netCDF의 기존 변수에 새 치수를 추가하는 방법은 무엇입니까?

내 문제를 자세히 설명하기 위해 - 다음 정의가 있습니다 시간 (무제한), 위도, 경도, 4 차원 및 1 개의 가변 지오 전위가 있습니다. 내가 원하는 것은 기존의 가변 지오 전위 높이에 dimz_Z 차원을 추가하는 것입니다. netCDF의 파일이 ncdump

float hgt(time, level, lat, lon) 

그러나 ncks의 출력에서 ​​아래와 같이 dimz_Z 치수가 누락과 같은 모양을

은 지금 여기에 위의 코드에서 답이다.

hgt dimension 0: time, size = 1 NC_DOUBLE, chunksize = 1 (Record coordinate is time) 
hgt dimension 1: level, size = 1 NC_FLOAT, chunksize = 1 (Coordinate is level) 
hgt dimension 2: lat, size = 23 NC_FLOAT, chunksize = 23 (Coordinate is lat) 
hgt dimension 3: lon, size = 21 NC_FLOAT, chunksize = 21 (Coordinate is lon) 

그것은 정의에 표시 않고 독립형 차원과 HGT의 차원의 하지 일환으로

dimz_Z: type NC_FLOAT, 1 dimension, 0 attributes, compressed? no, chunked? no, packed? no 
dimz_Z size (RAM) = 483*sizeof(NC_FLOAT) = 483*4 = 1932 bytes 
dimz_Z dimension 0: dimz_Z, size = 483 NC_FLOAT (Coordinate is dimz_Z) 

이 파일의 출력

time[0]=1879032 level[0]=1000 lat[0]=60 lon[0]=50 hgt[0]=53 m 
time[0]=1879032 level[0]=1000 lat[0]=60 lon[1]=52.5 hgt[1]=55 m 

내가 원하는 것은 다음과 같습니다.

time[0]=1879032 level[0]=1000 lat[0]=60 lon[0]=50 dimz_Z[0]=0 hgt[0]=53 m 
time[0]=1879032 level[0]=1000 lat[0]=60 lon[1]=52.5 dimz_Z[0]=0 hgt[1]=55 m 

내가 친구에게 들었던 말은 기존 변수에이 측정 기준을 추가 할 수 없다는 것입니다. 대신 fortran에서 hgt 변수를 다시 5 차원 변수로 정의하고 다시 값을 넣어야합니다. 그게 맞습니까? 아니면 대안이 있습니까? Fortran 77 netcdf API를 사용하고 있습니다.

+2

친구가 맞습니다. – cmaster

+0

dimz_Z 단지 풀린 lon/lat 격자 (21 * 23 = 483)가 아닌가요? 왜 파일에있는 데이터의 양을 정사각형으로 만들고 싶습니까? 나는 당신이 다른 것을하고 싶다는 것을 확신합니다. 실제 높이가있는 변수를 추가하지 않으시겠습니까? 이것은 포트란 질문이 아닙니다. – RussF

+0

@RussF - 내 시스템의 수직 좌표입니다. 나는 위도와 경도와 η을 가지고있다. 그것을 입체로 만들기 – gansub

답변

1

친구가 맞습니다. 그러나 고려할 수있는 몇 가지 옵션이 남아 있습니다. 프로그래밍과 관련하여 거의 언제나 옵션이 있습니다.

  1. 초기 netcdf 파일을 새로 작성하고 새 치수에 변수를 정의하여 추가 치수를 지정하십시오. 포트란에서 그렇게 할 수 있습니다
  2. netcdf 처리 도구 (nco)를 사용하여 원하는 속성으로 새 변수를 만들고 다른 속성을 삭제하십시오.
+0

첫 번째 포인트를 보여주는 몇 가지 코드를 추가 할 수 있습니까? 나는 당신의 대답을 받아 들일 것이다 – gansub

+0

나는 당신이 어떤 것을 추가하지 않았기 때문에 약간의 코드를 추가하기에 충분한 정보가 없었다. 고정 된 형태 (f77) 또는 자유로운 형태 (f90 +)를 쓰는 것이 좋다. 그러나 https://www.unidata.ucar.edu/software/netcdf/examples/programs/에서 예제를 따를 수 있습니다. https://www.unidata.ucar.edu/software/netcdf/examples/programs/simple_xy_rd.f90 예를 들어 https://www.unidata.ucar.edu/software/netcdf/examples/programs/을 읽는 방법을 보여줍니다. simple_xy_wr.f90은 쓰기 방법을 보여줍니다. 예제를 읽고이를 귀하의 케이스로 번역하면 많은 것을 배울 수 있습니다. – innoSPG

+0

이 질문을 업데이트했습니다. 내가 링크 된 대답은 코드 샘플을 가지고 있습니다. – gansub

관련 문제