home *** CD-ROM | disk | FTP | other *** search
- with PHYSICAL_UNITS_BASIC ; use PHYSICAL_UNITS_BASIC ;
- with PHYSICAL_UNITS_MECHANICAL ; use PHYSICAL_UNITS_MECHANICAL ;
- with PHYSICAL_UNITS_ELECTRICAL ; use PHYSICAL_UNITS_ELECTRICAL ;
- with PHYSICAL_UNITS_OTHER ; use PHYSICAL_UNITS_OTHER ;
-
- -- This package defines operators needed to evaluate equations of
- -- physics using dimensional and units checking. Only MKS units
- -- are used. A conversion package is available to convert from
- -- other metric units and English units to the MKS units.
- --
- -- This package is not complete. Completeness would imply all
- -- possible operators that combine physical dimensions and yeild
- -- other physical dimensions. Users can provide local definitions
- -- or this package can be augmented.
- --
-
- package MKS_PHYSICS_ELECTRICAL is
-
- function "/" ( LEFT : VOLTAGE_VOLT ;
- RIGHT : CURRENT_AMPERE ) return RESISTANCE_OHM ;
-
- function "/" ( LEFT : CURRENT_AMPERE ;
- RIGHT : VOLTAGE_VOLT ) return CONDUCTANCE_MHO ;
-
- function "/" ( LEFT : VOLTAGE_VOLT ;
- RIGHT : RESISTANCE_OHM ) return CURRENT_AMPERE ;
-
- function "*" ( LEFT : RESISTANCE_OHM ;
- RIGHT : CURRENT_AMPERE ) return VOLTAGE_VOLT ;
-
- function "*" ( LEFT : CURRENT_AMPERE ;
- RIGHT : RESISTANCE_OHM ) return VOLTAGE_VOLT ;
-
- function "*" ( LEFT : INDUCTANCE_HENRY ;
- RIGHT : AMPERE_PER_SECOND ) return VOLTAGE_VOLT ;
-
- function "/" ( LEFT : CAPACITANCE_FARAD ;
- RIGHT : VOLT_PER_SECOND ) return CURRENT_AMPERE ;
-
- function "/" ( LEFT : VOLTAGE_VOLT ;
- RIGHT : TIME_SECOND ) return VOLT_PER_SECOND ;
-
- function "/" ( LEFT : CURRENT_AMPERE ;
- RIGHT : TIME_SECOND ) return AMPERE_PER_SECOND ;
-
- function "*" ( LEFT : PERMITTIVITY ;
- RIGHT : LENGTH_METER ) return CAPACITANCE_FARAD ;
-
- function "*" ( LEFT : PERMEABILITY ;
- RIGHT : LENGTH_METER ) return INDUCTANCE_HENRY ;
-
- function "/" ( LEFT : CURRENT_AMPERE ;
- RIGHT : LENGTH_METER ) return MAGNETIC_INTENSITY ;
-
- function "/" ( LEFT : VOLTAGE_VOLT ;
- RIGHT : LENGTH_METER ) return ELECTRIC_FIELD ;
-
- function "*" ( LEFT : PERMITTIVITY ;
- RIGHT : ELECTRIC_FIELD ) return ELECTRIC_DISPLACEMENT ;
-
- function "*" ( LEFT : ELECTRIC_FIELD ;
- RIGHT : PERMITTIVITY ) return ELECTRIC_DISPLACEMENT ;
-
- function "*" ( LEFT : PERMEABILITY ;
- RIGHT : MAGNETIC_INTENSITY ) return MAGNETIC_FLUX_DENSITY ;
-
- function "*" ( LEFT : ELECTRIC_FIELD ;
- RIGHT : PERMEABILITY ) return MAGNETIC_FLUX_DENSITY ;
-
- -- Note: Relations between power, energy, force and pressure are in
- -- MKS_PHYSICS_MECHANICAL. Operators to yeild power, energy,
- -- force and pressure ( energy density ) from electrical units
- -- are provided in this package
- --
-
- function "*" ( LEFT : CURRENT_AMPERE ;
- RIGHT : VOLTAGE_VOLT ) return POWER_WATT ;
-
- function "*" ( LEFT : VOLTAGE_VOLT ;
- RIGHT : CURRENT_AMPERE ) return POWER_WATT ;
-
- function "*" ( LEFT : AMPERE_SQUARED ;
- RIGHT : RESISTANCE_OHM ) return POWER_WATT ;
-
- function "*" ( LEFT : RESISTANCE_OHM ;
- RIGHT : AMPERE_SQUARED ) return POWER_WATT ;
-
- function "/" ( LEFT : VOLT_SQUARED ;
- RIGHT : RESISTANCE_OHM ) return POWER_WATT ;
-
- function "*" ( LEFT : CAPACITANCE_FARAD ;
- RIGHT : VOLT_SQUARED ) return ENERGY_JOULE ;
-
- function "*" ( LEFT : INDUCTANCE_HENRY ;
- RIGHT : AMPERE_SQUARED ) return ENERGY_JOULE ;
-
- -- energy density (pressure) := D * E
-
- function "*" ( LEFT : ELECTRIC_DISPLACEMENT ;
- RIGHT : ELECTRIC_FIELD ) return PRESSURE_MKS ;
-
- function "*" ( LEFT : ELECTRIC_FIELD ;
- RIGHT : ELECTRIC_DISPLACEMENT ) return PRESSURE_MKS ;
-
- -- energy density (pressure) := B * H
-
- function "*" ( LEFT : MAGNETIC_FLUX_DENSITY ;
- RIGHT : MAGNETIC_INTENSITY ) return PRESSURE_MKS ;
-
- function "*" ( LEFT : MAGNETIC_INTENSITY ;
- RIGHT : MAGNETIC_FLUX_DENSITY ) return PRESSURE_MKS ;
-
- -- intermediate results
-
- function "*" ( LEFT , RIGHT : VOLTAGE_VOLT ) return VOLT_SQUARED ;
-
- function "**" ( LEFT : VOLTAGE_VOLT ;
- RIGHT : INTEGER ) return VOLT_SQUARED ;
-
- function SQRT ( LEFT : VOLT_SQUARED ) return VOLTAGE_VOLT ;
-
- function "*" ( LEFT , RIGHT : CURRENT_AMPERE ) return AMPERE_SQUARED ;
-
- function "**" ( LEFT : CURRENT_AMPERE ;
- RIGHT : INTEGER ) return AMPERE_SQUARED ;
-
- function SQRT ( LEFT : AMPERE_SQUARED ) return CURRENT_AMPERE ;
-
- pragma INLINE ( "*" , "/" , "**" , SQRT ) ;
- end MKS_PHYSICS_ELECTRICAL ;
- with REFUNCT ; use REFUNCT ;
- with PHYSICAL_REAL ; use PHYSICAL_REAL ;
-
- package body MKS_PHYSICS_ELECTRICAL is
-
- function "/" ( LEFT : VOLTAGE_VOLT ;
- RIGHT : CURRENT_AMPERE ) return RESISTANCE_OHM is
-
- begin
- return RESISTANCE_OHM' --
- ( DIMENSION( UNDIMENSION( LEFT ) / UNDIMENSION ( RIGHT ))) ;
- end "/" ;
-
- function "/" ( LEFT : CURRENT_AMPERE ;
- RIGHT : VOLTAGE_VOLT ) return CONDUCTANCE_MHO is
-
- begin
- return CONDUCTANCE_MHO' --
- ( DIMENSION( UNDIMENSION( LEFT ) / UNDIMENSION ( RIGHT ))) ;
- end "/" ;
-
- function "/" ( LEFT : VOLTAGE_VOLT ;
- RIGHT : RESISTANCE_OHM ) return CURRENT_AMPERE is
-
- begin
- return CURRENT_AMPERE' --
- ( DIMENSION( UNDIMENSION( LEFT ) / UNDIMENSION ( RIGHT ))) ;
- end "/" ;
-
- function "*" ( LEFT : RESISTANCE_OHM ;
- RIGHT : CURRENT_AMPERE ) return VOLTAGE_VOLT is
-
- begin
- return VOLTAGE_VOLT' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( RIGHT ))) ;
- end "*" ;
-
- function "*" ( LEFT : CURRENT_AMPERE ;
- RIGHT : RESISTANCE_OHM ) return VOLTAGE_VOLT is
-
- begin
- return VOLTAGE_VOLT' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( RIGHT ))) ;
- end "*" ;
-
- function "*" ( LEFT : INDUCTANCE_HENRY ;
- RIGHT : AMPERE_PER_SECOND ) return VOLTAGE_VOLT is
-
- begin
- return VOLTAGE_VOLT' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( RIGHT ))) ;
- end "*" ;
-
- function "/" ( LEFT : CAPACITANCE_FARAD ;
- RIGHT : VOLT_PER_SECOND ) return CURRENT_AMPERE is
-
- begin
- return CURRENT_AMPERE' --
- ( DIMENSION( UNDIMENSION( LEFT ) / UNDIMENSION ( RIGHT ))) ;
- end "/" ;
-
- function "/" ( LEFT : VOLTAGE_VOLT ;
- RIGHT : TIME_SECOND ) return VOLT_PER_SECOND is
-
- begin
- return VOLT_PER_SECOND' --
- ( DIMENSION( UNDIMENSION( LEFT ) / UNDIMENSION ( RIGHT ))) ;
- end "/" ;
-
- function "/" ( LEFT : CURRENT_AMPERE ;
- RIGHT : TIME_SECOND ) return AMPERE_PER_SECOND is
-
- begin
- return AMPERE_PER_SECOND' --
- ( DIMENSION( UNDIMENSION( LEFT ) / UNDIMENSION ( RIGHT ))) ;
- end "/" ;
-
- function "*" ( LEFT : PERMITTIVITY ;
- RIGHT : LENGTH_METER ) return CAPACITANCE_FARAD is
-
- begin
- return CAPACITANCE_FARAD' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( RIGHT ))) ;
- end "*" ;
-
- function "*" ( LEFT : PERMEABILITY ;
- RIGHT : LENGTH_METER ) return INDUCTANCE_HENRY is
-
- begin
- return INDUCTANCE_HENRY' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( RIGHT ))) ;
- end "*" ;
-
- function "/" ( LEFT : CURRENT_AMPERE ;
- RIGHT : LENGTH_METER ) return MAGNETIC_INTENSITY is
-
- begin
- return MAGNETIC_INTENSITY' --
- ( DIMENSION( UNDIMENSION( LEFT ) / UNDIMENSION ( RIGHT ))) ;
- end "/" ;
-
- function "/" ( LEFT : VOLTAGE_VOLT ;
- RIGHT : LENGTH_METER ) return ELECTRIC_FIELD is
-
- begin
- return ELECTRIC_FIELD' --
- ( DIMENSION( UNDIMENSION( LEFT ) / UNDIMENSION ( RIGHT ))) ;
- end "/" ;
-
- function "*" ( LEFT : PERMITTIVITY ;
- RIGHT : ELECTRIC_FIELD ) return ELECTRIC_DISPLACEMENT is
-
- begin
- return ELECTRIC_DISPLACEMENT' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( RIGHT ))) ;
- end "*" ;
-
- function "*" ( LEFT : ELECTRIC_FIELD ;
- RIGHT : PERMITTIVITY ) return ELECTRIC_DISPLACEMENT is
-
- begin
- return ELECTRIC_DISPLACEMENT' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( RIGHT ))) ;
- end "*" ;
-
- function "*" ( LEFT : PERMEABILITY ;
- RIGHT : MAGNETIC_INTENSITY ) return MAGNETIC_FLUX_DENSITY is
-
- begin
- return MAGNETIC_FLUX_DENSITY' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( RIGHT ))) ;
- end "*" ;
-
- function "*" ( LEFT : ELECTRIC_FIELD ;
- RIGHT : PERMEABILITY ) return MAGNETIC_FLUX_DENSITY is
-
- begin
- return MAGNETIC_FLUX_DENSITY' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( RIGHT ))) ;
- end "*" ;
-
- function "*" ( LEFT : CURRENT_AMPERE ;
- RIGHT : VOLTAGE_VOLT ) return POWER_WATT is
-
- begin
- return POWER_WATT' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( RIGHT ))) ;
- end "*" ;
-
- function "*" ( LEFT : VOLTAGE_VOLT ;
- RIGHT : CURRENT_AMPERE ) return POWER_WATT is
-
- begin
- return POWER_WATT' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( RIGHT ))) ;
- end "*" ;
-
- function "*" ( LEFT : AMPERE_SQUARED ;
- RIGHT : RESISTANCE_OHM ) return POWER_WATT is
-
- begin
- return POWER_WATT' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( RIGHT ))) ;
- end "*" ;
-
- function "*" ( LEFT : RESISTANCE_OHM ;
- RIGHT : AMPERE_SQUARED ) return POWER_WATT is
-
- begin
- return POWER_WATT' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( RIGHT ))) ;
- end "*" ;
-
- function "/" ( LEFT : VOLT_SQUARED ;
- RIGHT : RESISTANCE_OHM ) return POWER_WATT is
-
- begin
- return POWER_WATT' --
- ( DIMENSION( UNDIMENSION( LEFT ) / UNDIMENSION ( RIGHT ))) ;
- end "/" ;
-
- function "*" ( LEFT : CAPACITANCE_FARAD ;
- RIGHT : VOLT_SQUARED ) return ENERGY_JOULE is
-
- begin
- return ENERGY_JOULE' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( RIGHT ))) ;
- end "*" ;
-
- function "*" ( LEFT : INDUCTANCE_HENRY ;
- RIGHT : AMPERE_SQUARED ) return ENERGY_JOULE is
-
- begin
- return ENERGY_JOULE' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( RIGHT ))) ;
- end "*" ;
-
- function "*" ( LEFT : ELECTRIC_DISPLACEMENT ;
- RIGHT : ELECTRIC_FIELD ) return PRESSURE_MKS is
-
- begin
- return PRESSURE_MKS' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( RIGHT ))) ;
- end "*" ;
-
- function "*" ( LEFT : ELECTRIC_FIELD ;
- RIGHT : ELECTRIC_DISPLACEMENT ) return PRESSURE_MKS is
-
- begin
- return PRESSURE_MKS' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( RIGHT ))) ;
- end "*" ;
-
- function "*" ( LEFT : MAGNETIC_FLUX_DENSITY ;
- RIGHT : MAGNETIC_INTENSITY ) return PRESSURE_MKS is
-
- begin
- return PRESSURE_MKS' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( RIGHT ))) ;
- end "*" ;
-
- function "*" ( LEFT : MAGNETIC_INTENSITY ;
- RIGHT : MAGNETIC_FLUX_DENSITY ) return PRESSURE_MKS is
-
- begin
- return PRESSURE_MKS' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( RIGHT ))) ;
- end "*" ;
-
- function "*" ( LEFT , RIGHT : VOLTAGE_VOLT ) return VOLT_SQUARED is
-
- begin
- return VOLT_SQUARED' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( RIGHT ))) ;
- end "*" ;
-
- function "**" ( LEFT : VOLTAGE_VOLT ;
- RIGHT : INTEGER ) return VOLT_SQUARED is
-
- begin
- if RIGHT /= 2 then
- raise NUMERIC_ERROR ;
- end if ;
- return VOLT_SQUARED' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( LEFT ))) ;
- end "**" ;
-
- function SQRT ( LEFT : VOLT_SQUARED ) return VOLTAGE_VOLT is
-
- begin
- return VOLTAGE_VOLT' ( DIMENSION( SQRT( UNDIMENSION( LEFT )))) ;
- end SQRT ;
-
- function "*" ( LEFT , RIGHT : CURRENT_AMPERE ) return AMPERE_SQUARED is
-
- begin
- return AMPERE_SQUARED' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( RIGHT ))) ;
- end "*" ;
-
- function "**" ( LEFT : CURRENT_AMPERE ;
- RIGHT : INTEGER ) return AMPERE_SQUARED is
-
- begin
- if RIGHT /= 2 then
- raise NUMERIC_ERROR ;
- end if ;
- return AMPERE_SQUARED' --
- ( DIMENSION( UNDIMENSION( LEFT ) * UNDIMENSION ( LEFT ))) ;
- end "**" ;
-
- function SQRT ( LEFT : AMPERE_SQUARED ) return CURRENT_AMPERE is
-
- begin
- return CURRENT_AMPERE' ( DIMENSION( SQRT( UNDIMENSION( LEFT )))) ;
- end SQRT ;
- end MKS_PHYSICS_ELECTRICAL ;
-