Source code for aiida_lsmo.calcfunctions.wrappers

# -*- coding: utf-8 -*-
"""Calculation functions that wrap some advanced script for process evaluation."""

from aiida.engine import calcfunction
from aiida.orm import Dict

PE_PARAMETERS_DEFAULT = { # Parameters used in 10.1021/acscentsci.9b00619
    'gasin': 'coal',
    'vf': 0.35,
    'process': 'TPSA',
    'cp': 985.0,
    'yd': 0.99,
    'eleff': 'carnot',
    'opt': 'PE',
}


[docs]@calcfunction def calc_co2_parasitic_energy(isot_co2, isot_n2, pe_parameters): """ Submit calc_pe calculation using AiiDA, for the CO2 parasitic energy. :isot_co2: (Dict) CO2 IsothermWorkChainNode.outputs['output_parameters'] :isot_n2: (Dict) N2 IsothermWorkChainNode.outputs['output_parameters'] :pe_parameters: (Dict) See PE_PARAMETERS_DEFAULT """ import pandas as pd from calc_pe import mainPE if not isot_co2['is_porous'] or not isot_n2['is_porous']: return Dict(dict={'is_porous': False}) bar2pa = 1e5 # convert pressure from bar to Pa gcm2kgm = 1000 # convert density from g/cm3 to kg/m3 t_iso = {} iso_df = {} for i in [0, 1]: gas = ['CO_2', 'N_2'][i] isot = [isot_co2, isot_n2][i].get_dict() t_iso[gas] = isot['temperature'] iso_df[gas] = pd.DataFrame(columns=['pressure(Pa)', 'loading(mol/kg)', 'HoA(kJ/mol)']) iso_df[gas]['pressure(Pa)'] = [p * bar2pa for p in isot['isotherm']['pressure']] iso_df[gas]['loading(mol/kg)'] = isot['isotherm']['loading_absolute_average'] iso_df[gas]['HoA(kJ/mol)'] = isot['isotherm']['enthalpy_of_adsorption_average'] # TRICK: use the enthalpy from widom (energy-RT) which is more accurate # that the one at 0.001 bar (and which also is NaN for weakly interacting systems) iso_df[gas]['HoA(kJ/mol)'].loc[0] = isot['adsorption_energy_widom_average'] - isot['temperature'] / 120.027 pe_dict = mainPE( rho=isot['Density'] * gcm2kgm, T_iso=t_iso, # [T_iso_CO2, T_iso_N2] iso_df=iso_df, # [iso_df_CO2, iso_df_N2] df containing pressure (Pa), loading (mol/kg), HoA (kJ/mol) **pe_parameters.get_dict() # all other parameters that are specific of the modelling ) pe_dict['is_porous'] = True return Dict(dict=pe_dict)