NCL

NCL 기초

이석사 중 2022. 11. 1. 16:07
728x90

 

오늘은 Ncar Command Language 줄여서 NCL이라고 불리는 언어를 공부해보겠습니다

 

대기과학에서 정말 많이 사용하는 언어입니다

단순히 툴 정도가 아니라 Language라고 이름이 붙은 만큼 언어로 인정을 받고 있습니다

 

미국 국립 기상연구소에서 전산 계산 및 데이터 시각화를 위에 만들어 졌습니다

 

netCDF - 4, GRIB1, GRIB2, ASCII, BINARAY 등 대기 과학에서 많이 사용하는 파일 형식들은

모두 읽어올 수 있습니다

 

numpy처럼 연산도 가능하고

matplotlib처럼 데이터 시각화도 가능합니다

 

보통 포트란과 연결지어서 많이 사용합니다

 

시각화나 연산 뿐만 아니라 통계 분석도 가능합니다

평균을 구하거나 표준편차를 구하는 메소드도 존재합니다

 

matplotlib는 단일 라이브러리로는 지구형태나 한반도 지도 같은 그림들에 대해

섬세한 조정 작업들이 어렵습니다

 

하지만 NCL은 대기과학 언어답게 기본 툴만 가지고도 충분히 가능합니다

 

기본적인 막대그래프나 선그래프도 가능하고

등압선이나 등고선 같은 contour 그림, 전 지구 그림이나 위도 경도를 설정해서

일부만 그리는 것도 가능합니다


언어 자체는 하나도 어렵지 않습니다

 

다른 언어를 한 번 쯤이라도 공부해보셨으면 정말 쉽게 배우실 수 있습니다

 

정말 직관적이고 강력한 언어라고 생각합니다

 

a = 10
b = 20       ; 변수 할당
; 주석입니다

a + b        ; 더하기
a - b        ; 빼기
a * b        ; 곱하기
a / b        ; 나누기
a % b        ; 나머지 
 

이렇게 기본적인 사칙연산은 기본적으로 가능합니다

 

a ^ b
 

제곱 표시는 **가 아니라 ^로 표현합니다

 

10에 제곱을 표현할 경우는 다른 언어들과 마찬가지로

3e10
 

이런 형태로 사용합니다

 

또 다른 것이 있다면 array를 만들 때 입니다

python = [1, 2, 3, 4, 5]

NCL    = (/1, 2, 3, 4, 5/)
 

파이썬은 대괄호로 열고 닫지만

 

NCL은 (/ /)의 형태로 열고 닫습니다

 

a .eq. b     ; a와 b가 같은지
a .lt. b     ; a가 b보다 작은지
a .gt. b     ; a가 b보다 큰지
a .le. b     ; a가 b보다 작거나 같은지
a .ge. b     ; a가 b보다 크거나 같은지
a .not. b    ; a와 b가 다른지
a .and. b    ; a와 b가 둘 다 참인지
a. or. b     ; a와 b 둘 중 하나만 참인지
 

if 문을 사용할 때 포트란과 비슷하게 사용하지만

비교 문자들을 조금 다르니 참고하시면 좋을거 같습니다

 

자료의 format도 다른 언어들과 크게 다르지 않습니다

 

총 7개의 포맷이 있습니다

( integer, long, float, double, logical, string, character )

 

특이한 점이라고 한다면 정수형과 실수형 자료가 32bit와 64bit로 나누어져 있습니다

물론 다른 언어들도 나누어져 있지만 bit수를 변경해 줄 뿐 format 이름이 따로 정해지지는 않았습니다

 

먼저 정수형부터 보겠습니다

 

정수형은 integer와 long으로 구성되어 있습니다

integer는 32bit 정수형 자료로

최소 -2,147,483,648부터 최대 2,147,483,648까지 표현이 가능합니다

 

long은 64bit 정수형 자료로

최소 -9천경부터 최대 9천경까지 표현이 가능합니다

 

NCL은 포트란처럼 '내가 선언할 변수가 이런 포맷이야'를 미리 알려주는게 아니라

 

이런 변수를 선언할건데 포맷은 이걸로 할께 이런 느낌입니다

C = 32          ;32bit integer
D = 32l         ;64bit integer
 

변수와 할당할 값을 선언해주고 뒤에 format을 붙여주는 방식으로 사용합니다

 

실수형은 float과 double로 나누어져 있습니다

float은 32bit 실수로

-1.175494 * 10 -38부터 1.701411 * 1038까지 가능합니다

 

종종 이보다도 작은 숫자들을 계산할 수도 있기 때문에

double도 존재합니다

double은 64bit 실수로

-2.22057 * 10-308부터 8.98846 * 10308까지 정말 넓은 범위의 숫자를 표현합니다

 

하지만 double을 사용할 만큼 크거나 작은 수들을 많이 사용하지 않기 때문에

사용 빈도는 적은 편입니다

6.62607015 × 10-34 m2 kg / s

플랑크 상수도 10-34까지 밖에 계산하니까 double이 얼마나 작은지 아시겠죠??

 

E = 10.2        ; 32bit real number
F = 10.2d       ; 64bit real number
 

실수형도 똑같이 변수와 할당할 값을 선언하고 뒤에 format을 붙여줍니다

 

이제 4개 설명했고 나머지 3개입니다

 

logical은 참과 거짓의 형태를 나타냅니다

( True, False )

string은 "Hello World!"처럼 문자열 자료를 나타낼 때 사용합니다

character는 string과 비슷하지만 자주 사용하지 않습니다


이 외에는 포트란과 거의 똑같거나 유사한 점이 많습니다

 

파이썬과도 유사한 점이 많아서 쉽게 배우실 수 있습니다

 

그림을 그릴때 필요한 문법은 resource를 설정해주어야 하는데

 

resource는 본격적으로 그림을 하나씩 그려보면서 설명드리겠습니다

 

https://www.ncl.ucar.edu/

 

위에는 ncl 공식 홈페이지입니다

 

들어가시면 다양한 예제가 있으니까여 해보시는 것도 좋을 것 같습니다

 

728x90