이번에는 현장에서 아주 빈번하게 계산해야 하는 line pressure drop계산하는 프로그램에 대해 설명해 보겠습니다.
pressure_drop.m 이라는 파일은 자료실에 올려놓았습니다. 우선 이 파일을 설명의 편의를 위해 이 파일을 /octave_files directory에 옮겨 놓습니다.
작업이 제대로 이루어졌는지 확인해 보겠습니다. Octave를 실행한 상태에서
>> ls
pressure_drop.m test.m
전에 만들었던 test.m이란 파일과 pressure_drop.m이란 파일이 directory에 존재함을 알려주고 있습니다.
Octave에서 pressure_drop과 enter를 입력하여 실행을 시켜 보겠습니다.
>> pressure_drop
Pipe Diameter (inch) :3
Flow rate (m3/hr) :30
Viscosity (cP) :1
Density (kg/m3) :1000
Line velocity = 1.83 m/s
Reynolds Number = 139243.17
Pressure drop calculated = 0.55 Kg/cm2/100m
순서대로 3, 30, 1, 1000을 입력하였을 때 pressure drop이 0.55가 계산되어 나오면 성공!
source를 한 번 살펴보겠습니다.
% Pressure drop calculation
% Prepared by SSHuh
% E-mail : huhss@hanmail.net
d=input("Pipe Diameter (inch) :");
fl=input("Flow rate (m3/hr) :");
mu=input("Viscosity (cP) :");
rho=input("Density (kg/m3) :");
D=d*2.54/100; % Convert the unit from inch to m
epsi=0.0005*0.3048; % Relative roughness in metric unit
area=pi*D^2/4; % crosssectional area of pipe
v=fl/3600/area; % Line velocity inside the pipe
NRe=rho*D*v/mu/0.001; % Reynolds number
% printf 는 C의 문법과 아주 유사하다는 것을 아실 수 있습니다.
printf("Line velocity = %4.2f m/s\n",v);
printf("Reynolds Number = %4.2f\n",NRe);
a4=((epsi/D)^1.1098)/2.8757+(7.149/NRe)^0.8981;
% Be careful to use log function. log() means natural logarithm
f=(1/(-2*log10((epsi/D)/3.7065-5.0452/NRe*log10(a4)))^2);
hf=f*100*(v^2)/(D*2*9.8);
dP=hf/10*(rho/1000);
printf("Pressure drop calculated = %4.2f Kg/cm2/100m\n",dP);
파이프 직경, 유량, 점도, 밀도값을 입력받기 위해 "input"이라는 함수가 사용되었는데 d=input("Pipe Diameter (inch) :");는 pipe diameter값을 사용자로부터 입력 받아 d라는 변수에 담으라는 뜻입니다.
"%"뒤에 입력된 내용은 프로그램 code의 이해를 돕는 comment로 Octave는 이 부분을 프로그램 실행에서 무시합니다.
이후 단위환산을 위한 몇 줄의 code가 이어지고 파이프의 단면적, 유속, 레이놀즈수를 계산하는 항이 있습니다.
pressure drop을 계산하는 부분에서는 식 자체가 복잡하기 때문에 부분부분 분리하여 계산 후 최종계산에 포함시키는 방법을 사용하였습니다.
comment 부분에서도 언급했지만 Octave 내장함수중에는 log()와 log10()로 구분되어 있으며 log()의 경우 자연로그를 의미하기 때문에 이 부분에서 틀리게 되면 엉터리 계산결과를 얻게 되지요.
program 언어에 익숙하지 않으신 분들께는 printf문이 가장 이해하기 어려우실지 모르겠습니다. 이 부분에 대해 설명을 덧붙이자면
printf("Line velocity = %4.2f m/s\n",v);
이 문장의 의미는 기본적으로는 " "로 둘러싸인 부분의 내용을 화면에 표시하라는 뜻입니다. 하지만 실제 출력되는 내용은
Line velocity = %4.2f m/s\n 가 아니고
Line velocity = 1.83 m/s 가 됩니다. 눈치가 빠르신 분은 벌써 이해를 하셨으리라 생각됩니다만 %4.2f부분이 1.83이라는 값으로 치환되어 있으며 \n은 화면에 표시가 되지 않은 것을 확인하실 수 있을 겁니다.
(실제로는 \n이 줄을 바꿔서 커서를 위치시키라는 의미이므로 화면에 이미 표시가 된 것입니다.)
%4.2f의 정확한 의미를 설명하자면
f는 화면에 표시하고자 하는 값이 정수가 아닌 실수를 의미하며
4.2는 화면에 표시하는 숫자가 1.83으로 소수점 포함하여 4개의 숫자를 표시하되 소수점 이하의 자리수가 2개인 형식으로 표현하라는 의미가 됩니다.
이 프로그램은 실무에 활용이 많이 되는 것이므로 잘 보관하고 계시다가 필요할 때 꺼내 쓰시기 바랍니다.
<연습>
1. 파일이름을 underbar(_)를 사용하지 않고 pressure drop.m이라고 고친 후 실행시켜 보십시오.
2. program code에서 line 맨 뒤에 붙어 있는 세미콜론(;)을 지우고 실행시켜 보십시오. 어떤 차이가 발견됩니까?
3. 위의 프로그램에서는 모든 printf문에 %4.2f가 사용되었는데 Reynolds number의 경우 앞서 설명드린 것과 차이가 발생함에도 불구하고 에러메시지는 내는 대신 계산결과를 출력하였습니다. 실제로 이 숫자를 출력하기 위해서 %4.2f부분을 바로잡아 보시기 바랍니다.
4. 앞서 배운 지식을 이용하여 octave root directory하부에 work라는 directory를 만들어 이 파일을 /octave_files directory대신 /work에 저장한 후 실행시켜 보십시오. mkdir()과 cd 라는 명령을 이용하여야 합니다.
pressure_drop.m 이라는 파일은 자료실에 올려놓았습니다. 우선 이 파일을 설명의 편의를 위해 이 파일을 /octave_files directory에 옮겨 놓습니다.
작업이 제대로 이루어졌는지 확인해 보겠습니다. Octave를 실행한 상태에서
>> ls
pressure_drop.m test.m
전에 만들었던 test.m이란 파일과 pressure_drop.m이란 파일이 directory에 존재함을 알려주고 있습니다.
Octave에서 pressure_drop과 enter를 입력하여 실행을 시켜 보겠습니다.
>> pressure_drop
Pipe Diameter (inch) :3
Flow rate (m3/hr) :30
Viscosity (cP) :1
Density (kg/m3) :1000
Line velocity = 1.83 m/s
Reynolds Number = 139243.17
Pressure drop calculated = 0.55 Kg/cm2/100m
순서대로 3, 30, 1, 1000을 입력하였을 때 pressure drop이 0.55가 계산되어 나오면 성공!
source를 한 번 살펴보겠습니다.
% Pressure drop calculation
% Prepared by SSHuh
% E-mail : huhss@hanmail.net
d=input("Pipe Diameter (inch) :");
fl=input("Flow rate (m3/hr) :");
mu=input("Viscosity (cP) :");
rho=input("Density (kg/m3) :");
D=d*2.54/100; % Convert the unit from inch to m
epsi=0.0005*0.3048; % Relative roughness in metric unit
area=pi*D^2/4; % crosssectional area of pipe
v=fl/3600/area; % Line velocity inside the pipe
NRe=rho*D*v/mu/0.001; % Reynolds number
% printf 는 C의 문법과 아주 유사하다는 것을 아실 수 있습니다.
printf("Line velocity = %4.2f m/s\n",v);
printf("Reynolds Number = %4.2f\n",NRe);
a4=((epsi/D)^1.1098)/2.8757+(7.149/NRe)^0.8981;
% Be careful to use log function. log() means natural logarithm
f=(1/(-2*log10((epsi/D)/3.7065-5.0452/NRe*log10(a4)))^2);
hf=f*100*(v^2)/(D*2*9.8);
dP=hf/10*(rho/1000);
printf("Pressure drop calculated = %4.2f Kg/cm2/100m\n",dP);
파이프 직경, 유량, 점도, 밀도값을 입력받기 위해 "input"이라는 함수가 사용되었는데 d=input("Pipe Diameter (inch) :");는 pipe diameter값을 사용자로부터 입력 받아 d라는 변수에 담으라는 뜻입니다.
"%"뒤에 입력된 내용은 프로그램 code의 이해를 돕는 comment로 Octave는 이 부분을 프로그램 실행에서 무시합니다.
이후 단위환산을 위한 몇 줄의 code가 이어지고 파이프의 단면적, 유속, 레이놀즈수를 계산하는 항이 있습니다.
pressure drop을 계산하는 부분에서는 식 자체가 복잡하기 때문에 부분부분 분리하여 계산 후 최종계산에 포함시키는 방법을 사용하였습니다.
comment 부분에서도 언급했지만 Octave 내장함수중에는 log()와 log10()로 구분되어 있으며 log()의 경우 자연로그를 의미하기 때문에 이 부분에서 틀리게 되면 엉터리 계산결과를 얻게 되지요.
program 언어에 익숙하지 않으신 분들께는 printf문이 가장 이해하기 어려우실지 모르겠습니다. 이 부분에 대해 설명을 덧붙이자면
printf("Line velocity = %4.2f m/s\n",v);
이 문장의 의미는 기본적으로는 " "로 둘러싸인 부분의 내용을 화면에 표시하라는 뜻입니다. 하지만 실제 출력되는 내용은
Line velocity = %4.2f m/s\n 가 아니고
Line velocity = 1.83 m/s 가 됩니다. 눈치가 빠르신 분은 벌써 이해를 하셨으리라 생각됩니다만 %4.2f부분이 1.83이라는 값으로 치환되어 있으며 \n은 화면에 표시가 되지 않은 것을 확인하실 수 있을 겁니다.
(실제로는 \n이 줄을 바꿔서 커서를 위치시키라는 의미이므로 화면에 이미 표시가 된 것입니다.)
%4.2f의 정확한 의미를 설명하자면
f는 화면에 표시하고자 하는 값이 정수가 아닌 실수를 의미하며
4.2는 화면에 표시하는 숫자가 1.83으로 소수점 포함하여 4개의 숫자를 표시하되 소수점 이하의 자리수가 2개인 형식으로 표현하라는 의미가 됩니다.
이 프로그램은 실무에 활용이 많이 되는 것이므로 잘 보관하고 계시다가 필요할 때 꺼내 쓰시기 바랍니다.
<연습>
1. 파일이름을 underbar(_)를 사용하지 않고 pressure drop.m이라고 고친 후 실행시켜 보십시오.
2. program code에서 line 맨 뒤에 붙어 있는 세미콜론(;)을 지우고 실행시켜 보십시오. 어떤 차이가 발견됩니까?
3. 위의 프로그램에서는 모든 printf문에 %4.2f가 사용되었는데 Reynolds number의 경우 앞서 설명드린 것과 차이가 발생함에도 불구하고 에러메시지는 내는 대신 계산결과를 출력하였습니다. 실제로 이 숫자를 출력하기 위해서 %4.2f부분을 바로잡아 보시기 바랍니다.
4. 앞서 배운 지식을 이용하여 octave root directory하부에 work라는 directory를 만들어 이 파일을 /octave_files directory대신 /work에 저장한 후 실행시켜 보십시오. mkdir()과 cd 라는 명령을 이용하여야 합니다.
다음검색