160 lines
7.0 KiB
Plaintext
160 lines
7.0 KiB
Plaintext
CREATE OR REPLACE PACKAGE BODY EFT_NOM.cout_energy_calculations IS
|
|
|
|
/**
|
|
-- Purpose : Utilities for energy and volume calculations
|
|
-- #version $Revision: 1 $
|
|
-- #author $Author: Gilberta $
|
|
-- Created : 13/09/2004 09:39:11
|
|
*/
|
|
|
|
/*
|
|
$Header: /Isle Of Grain/database/PLSQL/cout_energy_calculations.pck 1 7/01/05 12:54 Gilberta $ Logfile, Revision, Date, Author
|
|
|
|
$Date: 7/01/05 12:54 $ Date and time of last checkin
|
|
$Modtime: 4/01/05 16:41 $ Date and time of last modification
|
|
|
|
$History: cout_energy_calculations.pck $
|
|
*
|
|
* ***************** Version 1 *****************
|
|
* User: Gilberta Date: 7/01/05 Time: 12:54
|
|
* Created in $/Isle Of Grain/database/PLSQL
|
|
* Initial Version
|
|
*/
|
|
|
|
FUNCTION energy_to_volume(p_energy IN NUMBER
|
|
,p_cv IN NUMBER
|
|
,p_energy_unit_of_size IN cout_units_of_measure.g_t_si_prefix DEFAULT cout_units_of_measure.g_c_kilo
|
|
,p_energy_derived_unit IN cout_units_of_measure.g_t_joule_or_watthour DEFAULT cout_units_of_measure.g_c_watthour
|
|
,p_cv_unit_of_size IN cout_units_of_measure.g_t_si_prefix DEFAULT cout_units_of_measure.g_c_mega
|
|
,p_cv_unit_quantity IN cout_units_of_measure.g_t_volume_or_mass DEFAULT cout_units_of_measure.g_c_volume
|
|
,p_cv_density_of_lng IN NUMBER DEFAULT 424.5 -- kg per cubic metre
|
|
,p_unit_of_size_required IN cout_units_of_measure.g_t_si_prefix DEFAULT cout_units_of_measure.g_c_mega)
|
|
RETURN NUMBER IS
|
|
/*
|
|
* Notes:
|
|
* One watt is equal to one joule per second.
|
|
* Therefore, 1 watt hour (Wh) is equivalent to exactly 3.6 kilojoule (kJ) of energy.
|
|
* Calorific Value (CV) is the ratio of:
|
|
* energy (Joules) to volume (cubic metres), OR
|
|
* energy (Joules) to mass (kilograms)
|
|
*
|
|
*/
|
|
l_c_seconds_in_hour CONSTANT NUMBER := 60 * 60;
|
|
|
|
l_energy_j NUMBER;
|
|
l_cv NUMBER := p_cv * p_cv_unit_of_size;
|
|
l_volume_cubic_metres NUMBER;
|
|
l_substitution_list cout_err.g_t_substitution_list;
|
|
|
|
BEGIN
|
|
--
|
|
l_substitution_list(1) := 'CV';
|
|
cout_assert.istrue(p_cv > 0
|
|
,p_exception => -20051
|
|
,p_message => 'CV must be a positive non-zero value'
|
|
,p_substitution_list => l_substitution_list);
|
|
|
|
l_substitution_list(1) := 'Energy Unit of Size';
|
|
cout_assert.isnotnull(p_energy_unit_of_size
|
|
,p_exception => -20100
|
|
,p_message => 'Energy unit of size must not be null');
|
|
|
|
l_substitution_list(1) := 'Energy Unit of Size Required';
|
|
cout_assert.isnotnull(p_unit_of_size_required
|
|
,p_exception => -20100
|
|
,p_message => 'Unit of size required must not be null'
|
|
,p_substitution_list => l_substitution_list);
|
|
|
|
l_substitution_list(1) := p_cv_unit_quantity;
|
|
l_substitution_list(2) := 'CV Unit Quantity';
|
|
cout_assert.istrue(p_cv_unit_quantity IN
|
|
(cout_units_of_measure.g_c_volume,
|
|
cout_units_of_measure.g_c_mass)
|
|
,'CV unit quantity invalid, expect ' ||
|
|
cout_units_of_measure.g_c_volume || ' or ' ||
|
|
cout_units_of_measure.g_c_mass || ', got ' ||
|
|
p_cv_unit_quantity
|
|
,p_exception => -20101
|
|
,p_substitution_list => l_substitution_list);
|
|
|
|
l_substitution_list(1) := 'CV Unit of Size';
|
|
cout_assert.isnotnull(p_cv_unit_of_size
|
|
,p_exception => -20100
|
|
,p_message => 'CV unit of size must not be null');
|
|
|
|
l_substitution_list(1) := 'CV Density';
|
|
cout_assert.istrue(p_cv_density_of_lng > 0
|
|
,p_exception => -20051
|
|
,p_message => 'CV density must be a positive non-zero value'
|
|
,p_substitution_list => l_substitution_list);
|
|
|
|
l_substitution_list(1) := p_energy_derived_unit;
|
|
l_substitution_list(2) := 'Energy Derived Unit';
|
|
cout_assert.istrue(p_energy_derived_unit IN
|
|
(cout_units_of_measure.g_c_watthour,
|
|
cout_units_of_measure.g_c_joule)
|
|
,'Energy derived unit invalid, expect ' ||
|
|
cout_units_of_measure.g_c_joule || ' or ' ||
|
|
cout_units_of_measure.g_c_watthour || ', got ' ||
|
|
p_energy_derived_unit
|
|
,p_substitution_list => l_substitution_list);
|
|
|
|
IF p_energy_derived_unit = cout_units_of_measure.g_c_watthour THEN
|
|
l_energy_j := p_energy * l_c_seconds_in_hour;
|
|
ELSE
|
|
l_energy_j := p_energy;
|
|
END IF;
|
|
|
|
l_energy_j := l_energy_j * p_energy_unit_of_size;
|
|
|
|
IF p_cv_unit_quantity = cout_units_of_measure.g_c_volume THEN
|
|
--
|
|
-- CV = energy(J)/volume(m3)
|
|
-- therefore, volume(m3) = energy(J)/CV
|
|
--
|
|
l_volume_cubic_metres := l_energy_j / l_cv;
|
|
|
|
ELSIF p_cv_unit_quantity = cout_units_of_measure.g_c_mass THEN
|
|
--
|
|
-- CV = energy(J)/mass(kg)
|
|
-- mass = density * volume
|
|
-- therefore, volume(m3) = energy(J) / (density * CV)
|
|
--
|
|
l_volume_cubic_metres := l_energy_j / (p_cv_density_of_lng * l_cv);
|
|
END IF;
|
|
|
|
RETURN l_volume_cubic_metres / p_unit_of_size_required;
|
|
|
|
END energy_to_volume;
|
|
|
|
FUNCTION kwh_to_mcm(p_energy IN NUMBER
|
|
,p_cv IN NUMBER) RETURN NUMBER IS
|
|
BEGIN
|
|
RETURN energy_to_volume(p_energy => p_energy
|
|
,p_cv => p_cv
|
|
,p_energy_unit_of_size => cout_units_of_measure.g_c_kilo
|
|
,p_energy_derived_unit => cout_units_of_measure.g_c_watthour
|
|
,p_cv_unit_of_size => cout_units_of_measure.g_c_mega
|
|
,p_cv_unit_quantity => cout_units_of_measure.g_c_volume
|
|
,p_unit_of_size_required => cout_units_of_measure.g_c_mega);
|
|
END kwh_to_mcm;
|
|
|
|
FUNCTION kwh_to_cm(p_energy IN NUMBER
|
|
,p_cv IN NUMBER) RETURN NUMBER IS
|
|
BEGIN
|
|
RETURN energy_to_volume(p_energy => p_energy
|
|
,p_cv => p_cv
|
|
,p_energy_unit_of_size => cout_units_of_measure.g_c_kilo
|
|
,p_energy_derived_unit => cout_units_of_measure.g_c_watthour
|
|
,p_cv_unit_of_size => cout_units_of_measure.g_c_mega
|
|
,p_cv_unit_quantity => cout_units_of_measure.g_c_volume
|
|
,p_unit_of_size_required => cout_units_of_measure.g_c_unit);
|
|
END kwh_to_cm;
|
|
|
|
BEGIN
|
|
-- Initialization
|
|
NULL;
|
|
END cout_energy_calculations;
|
|
/
|
|
|