2022년 8월 17일 수요일

Plotting with Tensorflow

Finding a reaction rate is one of the most essential procedure in chemical reaction engineering. This enables us to estimate not only performance of the reaction, but design of the reactor, and eventually to scale-up the plant. 

Determining of reaction rate is not a simple work even with all kinds of reaction data in various reaction conditions in hands, and even though it follows a very good elementary reaction. The reason of this difficulty is simply because experimental data is actually a combination of many of physical and chemical phenomena, and we are only looking for a way to find a reaction rate out of the data of very complex phenomena involved.

Mathematical calculation with formula, numerical calculation, or graphical method of calculation often does not satisfy what we really want in terms of plotting data with relations of one of the reaction variables. We just cannot separate one phenomenon to another by looking at data itself. 

Classical approach of determining a reaction rate always requires certain assumptions; isothermal, isobaric, uniform concentration (or perfect mixing), no residence time distribution, type of reactors and many others. How can we possibly match these assumptions with actual data? 

Plotting between variables and reaction results is a great method to give an insight of reaction behavior. This plotting procedure I would say is the most important work in chemical reaction engineering. At the same time, this plot needs to have a certain tendency for engineers to understand or utilize the meaning of Lab experiments. 

To give a meaning of a trend in experimental data is a very hard work, and not to mention determining reaction rate. Well, we can simply forget all the conventional or classical approach of reaction engineering for now, and let the computer work to find a relation with numbers instead of formula.      

 



2022년 8월 8일 월요일

Arrhenius Eqn (아레이우스 식)

 - Arrhenius 식

   : 반응 속도 상수를 결정하는 경험식 

   : 온도의 범위가 넓은 경우, 온도에 대한 보정식을 위해 T^n 을 추가하여 활용하기도 함 



   Activation energy (Ea) 와 k0 의 값을 이용하여 k를 결정하면, 

   반응에서 생성되는 중간체 및 최종 생성물의 선택도도 예측할 수 있다 


   예를 들어, 

   A --> B --> C 

   와 같은 반응이 진행된다고 할 때, 

   A의 전환율 및 B의 생성 정도를 결정하면, C의 생성 속도 및 그 양을 가늠할 수 있다. 

   대체로 화학반응 중에서 얻고자 하는 물질은 B (Ea 작음) 의 경우가 많고, 

   C (Ea 큼) 가 생성되는 것을 억제 하고자 하는 경우가 대부분이다 

   아래의 그래프는 A의 전환율에 따른, 

   B와 C의 생성 정도를 Ea 의 크기 및 T 에 대해 나타내었다  

   다만, 전환율이 높아지는 경우, 

   C의 생성 비율이 급격히 높아져, 결국 B의 선택도가 낮아지는 현상이 발생함 

   연속 반응의 경우, residence time 및 반응 온도를 설정하는데 중요한 인자가 된다 















2022년 8월 4일 목요일

Reaction Engineering (반응 공학)

 # 반응 공학은 무엇인가? 

   


   : Input 이 있을 때, 어떤 output 이 얼만큼 발생할 것인가를 예측하는 학문 

   : 대부분의 관계식은 경험식으로 얻어지며, 새로운 coefficient 를 도입하는 형태로 다양한 조건을 보정함 

  : 화학 반응에서는 mass balance, heat balance, reaction, residence time distribution, catalyst decay, mixing efficiency 등이 중요하게 다루어짐  

  : 기상, 액상, 고상에 대한 물질의 고유한 물리/화학적 특성에 대한 보정값도 많이 활용됨 

  : Input 과 output 의 종류 - 온도, 압력, 물질의 종류, 농도 등 화학 반응 뿐만 아니라 물리적 변화와 관련된 모든 것 

  : System은 반응기, 열교환기, mixer, 등등 물성이 변할 수 있는 여건을 만들어 주는 장치


#  예를 들어, A --> B 라는 화학 반응이 진행 된다고 할 때, 

   : A 를 넣으면, B 는 얼마나 만들어 질 것인가? 

   : 30ºC 로 A 를 넣으면, B 의 온도는 얼마나 될 것인가? 

   : A 를 넣으면 1 bar 였던 반응기는 압력이 어떻게 변할 것인가? 

 --> 이렇게 다양한 궁금증을 어떻게 해결할 것인가 / 어떤 식을 어떻게 사용해야 B 를 예측할 것인가 / 실험을 통해 얻어진 값을 어떻게 새로운 경험식으로 도출할 것인가 ..... 

2022년 8월 3일 수요일

Data Regression (데이터 함수 구하기)

 4) 주어진 데이터를 regression 하여, 

     함수를 구하는 방법으로, 

     analytical 함수를 얻기 위해 polynomial 등의 일반식을 이용하는 경우가 많으나, 

     실제로는 데이터의 regression이 생각보다 잘 나오지 않는다 

     예를 들어, 아래와 같은 데이터가 있다고 한다면,  


Data (Reaction:  A --> B)

T (min)     0.0        1.0        3.5        7.0        12.0     

A (mol)    0.05       0.04      0.03      0.02        0.01



     Python의 numpy polyfit 을 통해 2nd order 의 함수를 얻기는 했으나, 
    
     벗어난 데이터들도 있고 뭔가 부족한 느낌이 든다 

     데이터의 오차로 치부해 버리기 쉬우나, 

     신빙성이 높은 실제 데이터라고 한다면, 저 차이를 무시하기 어렵다  

     그렇다고, 3차 또는 4차 식으로 만들지도 못한다 

     Regression의 모양이 매우 이상해진다 


 4-1) Tensorflow 를 이용하여 regression 을 해보자 


      프로그램 활용에 조금은 시간 투자를 해야 하지만, 

      Tensorflow를 활용하여 regression 한 경우,

      데이터의 fit이 훨씬 좋은 느낌이 든다 

      물론, 반응 속도를 계산하기 위해 미분값을 이용하기 위해서는, 

      analytical로 활용하지 못하고 numerical method 를 활용하여야 하나, 

      특정 시간의 미분값이 실제값에 훨씬 더 근접한 계산이 될 수 있다  


4-2) 간단하게는 numpy의 gradient 함수를 이용할 수도 있다 


*반응 속도의 값을 비교하기 위해서는 regression으로 얻은 함수를 시간에 대해 미분하여, 각각의 Time point에 해당하는 반응 속도를 구할 수 있다 

**다만, 실제로 상기 두 가지의 regression에서 T=0 에서의 미분값을 구하면 2배 이상의 값 차이가 생긴다 (데이터 fit의 차이에 따른 값이 꽤나 크다 / 얼핏 보아도 처음 붉은점 2개의 기울기가 푸른 실선의 기울기 보다 크게 보인다)

***이 정도의 반응 속도 차이를 보인다면, design equation 등에도 활용하기가 까다롭다 (어느 것이 신뢰가 높을지 판단하기도 어렵다 / 어느 것을 오차로 치부할지도 어렵다) 

****그래프를 그려서 육안으로 보이는 경향성을 신뢰하자 (데이터는 오차가 없다는 가정을 하던지, 실험을 많이 해서 오차가 없는 데이터를 얻어내던지) 


2022년 8월 2일 화요일

Reaction rate calculation (반응속도 계산하기)

- 시간에 따른 농도의 변화가 있다고 할 때,  (A --> B)

T (min)     0.0        1.0        3.5        7.0        12.0     
A (mol)    0.05       0.04      0.03      0.02        0.01


Python을 이용하여,  
1) 그래프도 그려보고 (Time vs. [A])
2) 구간별로 평균 반응속도도 구해보고 (Time vs. -Delta [A] /Delta Time)
3) 각 시간에 따른 미분값에 해당하는 반응 속도도 구해보자 (Time vs. -dCA/dt)
4) Regression 을 이용한 반응 속도 계산 (polynomial method, numerical method) 



1) Python, matplotlib 를 이용하여 간단하게 그래프를 그려 경향을 살핀다 



2) numpy array 및 for 문을 적절히 활용하여, 
   구간별 평균 반응 속도도 구해보고, 
   속도의 변화도도 살펴본다 



3) Graphical method 를 활용하여, 
   각각의 시간에서 미분값에 해당하는 반응 속도를 구해보고, 
   average 값과 비교도 해보고, 
   graphical vs. average 비교도 해 본다



Python을 잘 활용하면, 참 쓸모가 많다~~!!