 Good evening, one and all. I am Vinesh from NIT, Durgapur. I am here to present my project, which is basically designing a graphic user interface for open modelica. So process simulation. What is process simulation? It is basically designing, developing, analyzing and optimization of technical process on a system like simulator, like which will reduce cost for implementation. So process simulation can be broadly classified into three types chemical process simulation, electric power stations and biological process simulation. We will be concentrating on chemical process simulation. So currently there are many chemical process simulators available in around, which can be broadly classified into paid or commercial and free or open source. Paid or commercial, the future one is Aspen technology, which is like, if you want to buy it, it will be around one crore for one license for one year. And there are many open source simulators like DWCM and OpenModelica. So we are working on OpenModelica. So I want to say why we choose OpenModelica over DWCM. So first DWCM has already a GUI and it solves basically study state simulation. So why OpenModelica? Currently it has no GUI and its benefit over DWCM is it solves dynamic state simulation, means properties vary with time. And it can even solve more complex processes than DWCM. So that's the reason we choose OpenModelica and we want to like fill this gap. We wanted to create a GUI for it. So our main objective was to make a graphic user interface for OpenModelica using Kiwi. The question may arise why Kiwi? Kiwi is a Python framework for developing application, cross-platform applications, which can be, one code can be deployed in several cross-platforms like Mac OS, Windows, iPhone, Android, all at a time. It can be no need of writing an extra code. So the main purpose of this project was easy to use process simulation. Like DWCM is very complex to use. Like one have to learn many things to use it. Our motive was like a simple chemical engineer who doesn't know like how to use simulators can use it. It was like a simple simulator. Deploy on multi-platforms which we are doing using Kiwi and supports dynamic simulation, which OpenModelica does. So the basic overview of what we are trying to do is, let us suppose this is the OpenModelica engine and this is our GUI. So this is written in Modulica language and that is written in Kiwi language. So if I am trying to communicate, these are like totally different languages. So we should need an interface between to communicate. So which is OM Python interface, which is made by OpenModelica developers, which is nothing but you write a code in Python, using Python in Modulica language. This OM Python interface creates a session between OpenModelica engine and itself and it will send the code created to the session created and the session will solve the values in OpenModelica engine and the session will return the results. The Python will use the result and plot it on the, like display it on the user interface. I will like demonstrate how I am writing the code and show you a sample. So let us go into the demo. This is the like actual view of the graphic user interface. You can see there is a file bar menu up, below that there is a toolbar and this is the canvas flow sheet area and these are the unit operations which we integrated until now. So this is the basic like sample circuit which I made. I will like start from the top. You can see file menu, there are two options, open and save as. I can save this file anywhere. Like I can save the circuit for future use. It is saved. Now if I delete this thing, whole circuit and open it, the GUI automatically loads the circuit. Basically what I am doing is I am saving all the parameters of each unit operation in a text file and retrieving it when I am loading the file. Next you can see there is a utility option which is basically a binary phase plotter. Like I don't know what is happening in the back end because what I need to do is using OM Python. I have to send a compound, two compounds, pressure and property package. The OM session will use the code developed by FOSSI researchers. They develop modules in OpenModelica for this calculation. What I have to do using GUI is send these values using OM session to that model. The model will calculate the values and return me and I will plot the graph. I will show and demo when I after adding compounds. Using Windows I can resize the canvas. This canvas is not fixed. You can see there is a very little space like if I want to make big circuits, you can toggle this and you can move the canvas area like this. You can move it around and after you want to lock this thing, you just select this one and adjust your circuit. So when you start your project, if you want a bigger canvas size, you can just go to this set canvas size and set the canvas. So next the toolbar here, we have first compounds. This is the like every chemical process needs some compounds to be instantiated firstly. So whenever I start the project, I need to add some compounds. Let us add two compounds. Like it auto-search. Whenever I enter a few words, it will auto-search and list the compounds. There are around 35,000 compounds data is present here. So I select Benzene and I will add it. Like Fossey Grice, I've created a database of 35,000 using DWCIM. DWCIM has a database posted online. They downloaded it and created it. Yeah, actually I saved it in a text file and I'm accessing the text file. But the simulator has to know about this stuff. Yeah, simulator is known like code is written in the modelic also. Modelic also has 35,000 compounds. I added two compounds. Second option is thermodynamics. Every like model is like whenever you are doing a circuit, it is based on one certain thermodynamic model. It is like we can see here. We use it in unit operations. Yes, sir, like we will be entering the process. Yes, sir, we will be entering. I will show you the property stuff. Here we will be entering how much amount of that compound will be going. I will be showing you. So thermodynamics, we have to select a model for our simulation. Next, this is the simulate button. Whenever you are completed with the circuit and designed it, you can just compile. Compile will produce a flow sheet.mo file, which is modlical language. Basically, what my GUI is doing is I will like generate this and show what is happening here. This is a basic modlical language file.mo file, which will be sent to open modlical engine, which is being generated by my GUI. So I already added two compounds, right? Now, if I compile, you can see two compounds are instantiated, benzene and tolin from the compound database present in simulated.mo file. Like I will load the modules. You can see similar materials. I created a material stream. So I added compounds. The code has been written. Now, there are just nothing in the flow sheet, just the two compounds. You can see two compounds have been instantiated. Now, if I drag a material stream and insert it, probably it's like I want to send temperature, pressure and molar flow to the open modlica. And I want the mole fraction of benzene to be zero and one. Like this, this mole, total mole fraction of all the compounds should be addition to be one. If that is not one, it will give an error. Showing like your sum is not one. It's a material stream. Yes, a material stream. I'm saying it's not one. It's just a total. Yes. You can see it not calculated means those calculations have not yet been done. When I submit the value, the values will be saved to the material stream. Now, if I compile, material stream zero is instantiated with number of compounds two, compound zero and compound one, which are instantiated above with a pressure value of one, zero, one, three, two, five and three, seventy three of temperature and equations. You can see compound mole fraction. I'm giving zero and one, which I said in the GUI and total mole fraction. I was sending like whichever parameters I select there will be sent here. Now, if I simulate this thing, these are the simulation options. By default, there are options. If you want, we can change the simulation options. Now you can see the calculations have been calculated. And you can check the properties of these material stream, like its pressure, temperature, liquid mole fraction, average molecular weight, all that. After making the circuit, right now, actually, the front end is made, but the back end only material stream model is connected with open modulica. These models are being developed in open modulica by Fossey guys. They were not yet ready, so I couldn't integrate it with the GUI. Right now, only material stream means in open modulica, they are considering it as a unit operation. It does some chemical reaction now. No, right now, we have not yet integrated a mixer, so there will be no chemical reaction here. So mixer class has been written, but for it to integrate with this OM python, they have to write some conductor equations and everything. So they are right now developing these models in open modulica, Fossey researchers. So I have written the code and documented it in such that anyone can easily read the documentation and add any unit operation to it and easily integrate it. Like from simulator.streams.material stream, I am statiating and sending these values, right? No sir, that mixer class is not a written in simulator file. I can write sir, but if I simulate, the modulica engine will send an error. I don't know what variable names they will be writing. I don't know it sir. It's very simple, I have made the documentation such that even a normal person can read that and add a basic unit operation. Means, who is a chemical engineering work? Sir, was I wrong, mad? That is why it's said normal. In the GUI part, if you see, when I select the inputs for a mixer, it lists all the available inputs only. Like if I connect 33 and submit it, now if I can see it, 33 should not be available for input. So if I select anything else, only 35 will be available. So it will be sorted every time. Now if I change this to none, now it will be available. Like I can change it any time. Even this lining algorithm is such that it never overlaps with the moduls. Like if I go friend, it will redesign itself. Even with the material stream, it is like not overlapping. Such that the student is not confused like it is input or output. You can just drag and drop any unit operation from this. Can I connect to what? Like it should be like... Do you have a mixer? No sir, only material streams and a valve, splitter, flash and mixer can be interconnected using material streams. There should be a material stream in between. Like if I am opening a splitter, I can only choose material streams here. Nothing else. There should be a material stream between. Like material stream 38 is available. Are you checking it for what sir? Like for simulation. The choices made by you are creating a loop. Like I don't know like how this simulation works sir. I was meant to design only the unit operations and add them. No, no, there could be a loop in the render course. There could be a loop sir. It can go like this. Yes sir, like even I can make it right now like... The only simulation. I am connected to what I need here but mixer. It has no input or output. There could be a bit more. Yes sir. In actual practice, the number of components that you would have would be very large. Yes sir. That's the reason why you are actually permitting your canvas to be compressed and full. Now in that large node, if by mistake, someone says I need a mixer here but forgets to provide any input to it and forgets to connect output to anything. That means it's a joker mixer which is standing alone and not participating in any chemical activity at all. It will work sir, like mixer will be instantiated but it will never be connected. It will just stay as a variable there. But should you not point because this probably represents a mistake made by the person who is trying to simulate. Yes sir, like I didn't know like how to implement this so I didn't thought in that way. Okay fine, no problem. And for removing compounds, you can select one compound and remove or you can select multiple compounds even if they are connected. There will be, they will be removed like if I select these two and remove this, they will be even removed from these options also automatically. Any compound, even if it is a complex circuit, any compound in between you select three or four compounds it will be automatically vanished from all the whole circuit. Now I want to show an example for this binary phase envelope plotter. I'm using ethanol and water, like I don't know like what are the actual compounds or these are the examples I actually used before. If I calculate the result will be sent and thrown back and a graph will be plotted. I don't know why the y-axis like units are not printed. Maybe it's because of the padding like this is all going, I will check it out. This is the basic binary utility which one can use. I don't know why they use it like I am not a chemical engineer. So coming back to the presentation, scope of the application, future like what we are aiming for this is basically students now like, there are small industries in around which doesn't use this because aspen is like very costlier. Many small industries doesn't use simulators and waste a lot of money in actually simulating it. So students can learn this free software and implement when they are joining any job and show how easily they can optimize their methods. So our scope in future is students can use this and small industries which doesn't cannot effort can easily download it as it is open source and use it. What I learned from doing this project is basically first git version control system before I used to like I heard about it but I was always afraid seeing it. Once I started working I learned first basically git and started using it like it was fun and creating codes with proper documentation before like I used to write basic codes but I never used to create documentation for it. I learned how to like proper documentation in code and using latex for project report and documentation I used latex. Kiwi language basically for developing the GUI, modulica language which when I started understanding how to write it so I basically understand somewhat of modulica language and photoshop for creating all the buttons and all I used photoshop and everything was written in python so before I was like very scared like what is python and everything. Now I am like considered efficient in python and these are the documentation and project links. Thank you.