About me


Picture of me

Hello, my name is Daniel Vázquez Vázquez. I am a researcher at ETH Zürich, with a background on Chemical and Process Engineering. My research focuses on process modeling and optimization, using both commercial simulation solvers such as Aspen PLUS/HYSYS and mathematical algebraic formulation. To add to these fields, I also try to use machine learning tools together with sustainability assessment methodologies in order to optimize not only one, but multiple objectives. For any question or comment, please do not hesitate to contact me!

Education

  • BSc + MSc in Chemical engineering (2009 - 2015)

    University of Santiago de Compostela, Galicia, Spain

  • PhD in Chemical engineering (2016 - 2020)

    University of Alicante, Com.Valenciana, Spain

Research

  • Pre-doctoral researcher (2017 - 2018)

    Universitat Rovira i Virgili, Catalunya, Spain

  • Pre-doctoral researcher (2018 - 2020)

    University of Alicante, Com. Valenciana, Spain

  • Post-doctoral researcher (2020 - Present)

    ETH Zurich, Zürich, Switzerland



Code and Projects


My work involves mostly optimization and modeling of chemical processes. In order to represent these processes, it is common to use process simulation software, such as Aspen HYSYS, Aspen Plus, DWSIM, gPROMS, etc. Therefore, it is important to connect these software to data treatment and visualization tools. For this, two main (toy) packages are in development, in order to reduce the amount of boilerplate code to connect with the two most common process simulators.

PySIS: Python-Aspen HYSYS high level interface using win32 COM

The interface works through the pywin32 package in order to easily communicate between Python and Aspen HYSYS. In order to install it, please follow the instructions in the repository
# Import the main class and load the file
                            from pysis import Simulation
                            hy_file = r"path/to/simulation.hsc"
                            FS = Simulation(path = hy_file)
                            FS.set_visible(1) # Sets the flowsheet to visible

                            # Specify objects
                            F1 = FS.MatStreams["Feed"]
                            F2 = FS.MatStreams["Feed2"]
                            Output = FS.MatStreams["1"]
                            Mixer = FS.Operations["MIX-100"]

                            # Read properties
                            prop_to_read = {
                                "Temperature":"C",
                            "Pressure":"bar",
                            "CompMolarFlow": "kgmole/h",
                            ...
                            }
                            F1prop = F1.get_properties(prop_to_read)

                            # Set properties
                            prop_to_set = {
                                "Temperature":(150, "K"),
                            "Pressure":(4, "atm"),
                            "CompMolarFlow": {"CO2":(43, "kgmole/h"), ...}
                            ...
                            }
                            F1.set_properties(prop_to_set)

                            # Save (If you want to)
                            FS.save()
                            # Close (Important)
                            FS.close()
                            
Picture of example hysys

PyAPLUS: Python-Aspen Plus high level interface using win32 COM

The interface works through the pywin32 package in order to easily communicate between Python and Aspen Plus. In order to install it, please follow the instructions in the repository. This one is certainly less developed than the HYSYS one.
# Import the main class and load the file
                            from pyaplus.flowsheet import Simulation
                            ap_file = r"path/to/simulation.bkp" 
                            FS = Simulation(path = ap_file)
                            FS.set_visible(1) # Sets the flowsheet to visible

                            # Specify objects
                            F1 = FS.get_stream["FEED"]
                            F2 = FS.get_stream["FEED2"]
                            Output = FS.get_stream["1"]
                            Mixer = FS.get_block["MIX-100"]

                            # Read properties. It comes in the flowsheet
                            # Aplus units
                            prop_to_read = [
                                "TEMP",
                            "PRES",
                            ("COMPMOLEFLOW", "ChemicalName"),
                            ...
                            ]
                            F1prop = F1.get_properties(prop_to_read)

                            # Set properties. The units are the same as the 
                            # flowsheet
                            prop_to_set = {
                                "TEMP":100,
                            "PRES":4,
                            ("COMPFLOW", "ChemicalName"): 43
                            ...
                            }
                            F1.set_properties(prop_to_set)

                            # Save (If you want to)
                            FS.save()
                            # Close (Important)
                            FS.close()
                            
Picture of example aspen

In the same manner, I tend to use mathematical optimization software to optimize the different models I come across. The most used by me is GAMS. It is very elegant in how the mathematical equations are defined, but lacks the ability to perform data treatment in an efficient manner. For this, I generated another toy package that reads the .gdx generated by GAMS and transforms it in a Pandas dataframe in Python. Or you can use Pyomo. Or Jump, which is even cooler.

PyGDX: Python-based reader of GDX files

The interface works through the Python API that GAMS provides. In order to install it, please follow the instructions in the repository.
# Import the main class and load the file
                            import pygdx.core as gdx 
                            import pandas as pd 

                            # State the path to the GDX file and to GAMS executable
                            GAMS_FOLDER = r"C:\GAMS\38"    # May look something like this.
                            GDX_File    = r"GDX_File.gdx"

                            # Generate an instance of the class and use the read method
                            results = gdx.GDXFile(gdx_path= GDX_File, gams_path=GAMS_FOLDER)
                            results.read_gdx()

                            # You can now read sets, parameters and variables dictionaries
                            sets = results.sets_df
                            parameters = results.parameters_df 
                            variables = results.variables_df 

                            


Publications


Title Citations Year
Bayesian Symbolic Learning to Build Analytical Correlations from Rigorous Process Simulations: Application to CO2 Capture Technologies

Valentina Negri, Daniel Vázquez, Marta Sales-Pardo, Roger Guimerà, and Gonzalo Guillén-Gosálbez

ACS Omega 2022, 7, 45, 41147–41164

0 2022
Automatic modeling of socioeconomic drivers of energy consumption and pollution using Bayesian symbolic regression

Daniel Vázquez, Roger Guimerà, Marta Sales-Pardo, Gonzalo Guillén-Gosálbez

Sustainable Production and Consumption, Volume 30, March 2022, Pages 596-607

3 2022
Process design within planetary boundaries: Application to CO2 based methanol production

Daniel Vázquez, Gonzalo Guillén-Gosálbez

Chemical Engineering Science, Volume 246, December 2021, 116891

11 2021
Delaying carbon dioxide removal in the European Union puts climate targets at risk

Daniel Vázquez, Ángel Galán-Martín, Selene Cobo, Niall Mac Dowell, José Antonio Caballero, Gonzalo Guillén-Gosálbez

Nature Communications, 12, 6490, 2021

13 2021
Mixed integer non-linear programming model for reliable and safer design at an early stage

Daniel Vázquez, Rubén Ruiz-Femenia, José Antonio Caballero

Computers & Chemical Engineering, 147, 107256, 2021

3 2021
Alternative carbon dioxide utilization in dimethyl carbonate synthesis and comparison with current technologies

Juan Diego Medrano-García, Juan Javaloyes-Antón, Daniel Vázquez, Rubén Ruiz-Femenia, José Antonio Caballero

Journal of CO2 Utilization, 45, 101436, 2021

6 2021
OFISI, a novel optimizable inherent safety index based on fuzzy logic

Daniel Vázquez, Rubén Ruiz-Femenia, José Antonio Caballero

Computers & Chemical Engineering, 129, 106526, 2019

8 2019
MILP models for objective reduction in multi-objective optimization: Error measurement considerations and non-redundancy ratio

Daniel Vázquez, Rubén Ruiz-Femenia, José Antonio Caballero

Computers & Chemical Engineering, 115, 323-332, 2018

3 2018
Multiobjective early design of complex distillation sequences considering economic and inherent safety criteria

Daniel Vázquez, Rubén Ruiz-Femenia, Laureano Jiménez, José Antonio Caballero

Industrial & Engineering Chemistry Research, 57, 20, 6992-7007, 2018

18 2018
MILP method for objective reduction in multi-objective optimization

Daniel Vázquez, María José Fernández-Torres, Rubén Ruiz-Femenia, Laureano Jiménez, José Antonio Caballero

Computers & Chemical Engineering, 108, 382-394, 2018

14 2018