Source code for VESIcal.thermo.thermo_calculate_classes

from abc import abstractmethod
import warnings as w

from VESIcal.thermo import densityx, giordano


class ThermoCalculate(object):
    """
    The ThermoCalculate object is designed to emulate the VESIcal Calculate
    object. It provides a common workflow for all additional thermodynamic
    calculations one might wish to perform on a sample. It is separate from
    the VESIcal Calculate class as that is specifically for volatile
    solubility models
    """
    def __init__(self, sample, silence_warnings=False, **kwargs):
        """
        Initializes the calculation.

        Parameters
        ----------
        sample:    Sample class
            The rock composition as a Sample object.
        silence_warnings:     bool
            Silence warnings about calibration ranges. Default is False.
        """
        self.sample = sample

        self.result = self.calculate(sample=self.sample, **kwargs)
        self.calib_check = self.check_calibration_range(sample=self.sample,
                                                        **kwargs)

        if self.calib_check is not None and silence_warnings is False:
            if self.calib_check != '':
                w.warn(self.calib_check, RuntimeWarning)

    @abstractmethod
    def calculate(self):
        """ """

    @abstractmethod
    def check_calibration_range(self):
        """ """


[docs] class calculate_liquid_density(ThermoCalculate): """ Calculates the density of the liquid using the DensityX model. Using this interface will preprocess the sample, run the calculation, and then check the calibration ranges. All parameters required by the chosen model must be passed. Parameters ---------- sample: Sample class The rock composition as a Sample object. pressure: float Total pressure in bars. temperature: float Temperature in degrees C. silence_warnings bool If set to True, no warnings will be raised automatically when calibration checks fail. preprocess_sample bool If True (default), the sample will be preprocessed according to the preprocessing operations within the models. If you obtain unexpected results, try setting to False. Returns ------- Calculate object Calculate object, access results by fetching the result property. Density in g/L. """ def calculate(self, sample, pressure, temperature, **kwargs): density_g_per_L = densityx.calculate_liquid_density(sample=sample, pressure=pressure, temperature=temperature, **kwargs) return density_g_per_L def check_calibration_range(self, sample, pressure, temperature, **kwargs): pass
[docs] class calculate_liquid_viscosity(ThermoCalculate): """ Calculates the density of the liquid using the Giordano et al. (2008) model. Using this interface will preprocess the sample, run the calculation, and then check the calibration ranges. All parameters required by the chosen model must be passed. Parameters ---------- sample: Sample class The rock composition as a Sample object. temperature: float Temperature in degrees C. silence_warnings bool If set to True, no warnings will be raised automatically when calibration checks fail. preprocess_sample bool If True (default), the sample will be preprocessed according to the preprocessing operations within the models. If you obtain unexpected results, try setting to False. Returns ------- Calculate object Calculate object, access results by fetching the result property. Log viscosity in Pa*s. """ def calculate(self, sample, temperature, **kwargs): viscosity_log_nu_Pas = giordano.calculate_liquid_viscosity(sample=sample, temperature=temperature, **kwargs) return viscosity_log_nu_Pas def check_calibration_range(self, sample, temperature, **kwargs): pass