File : s-dimmks.ads


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                         GNAT RUN-TIME COMPONENTS                         --
   4 --                                                                          --
   5 --                        S Y S T E M . D I M . M K S                       --
   6 --                                                                          --
   7 --                                  S p e c                                 --
   8 --                                                                          --
   9 --          Copyright (C) 2011-2013, Free Software Foundation, Inc.         --
  10 --                                                                          --
  11 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  12 -- terms of the  GNU General Public License as published  by the Free Soft- --
  13 -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
  14 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
  15 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
  16 -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
  17 --                                                                          --
  18 --                                                                          --
  19 --                                                                          --
  20 --                                                                          --
  21 --                                                                          --
  22 -- You should have received a copy of the GNU General Public License and    --
  23 -- a copy of the GCC Runtime Library Exception along with this program;     --
  24 -- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
  25 -- <http://www.gnu.org/licenses/>.                                          --
  26 --                                                                          --
  27 -- GNAT was originally developed  by the GNAT team at  New York University. --
  28 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
  29 --                                                                          --
  30 ------------------------------------------------------------------------------
  31 
  32 --  Defines the MKS dimension system which is the SI system of units
  33 
  34 --  Some other prefixes of this system are defined in a child package (see
  35 --  System.Dim_Mks.Other_Prefixes) in order to avoid too many constant
  36 --  declarations in this package.
  37 
  38 --  The dimension terminology is defined in System.Dim_IO package
  39 
  40 with Ada.Numerics;
  41 
  42 package System.Dim.Mks is
  43 
  44    e  : constant := Ada.Numerics.e;
  45    Pi : constant := Ada.Numerics.Pi;
  46 
  47    --  Dimensioned type Mks_Type
  48 
  49    type Mks_Type is new Long_Long_Float
  50      with
  51       Dimension_System => (
  52         (Unit_Name => Meter,    Unit_Symbol => 'm',   Dim_Symbol => 'L'),
  53         (Unit_Name => Kilogram, Unit_Symbol => "kg",  Dim_Symbol => 'M'),
  54         (Unit_Name => Second,   Unit_Symbol => 's',   Dim_Symbol => 'T'),
  55         (Unit_Name => Ampere,   Unit_Symbol => 'A',   Dim_Symbol => 'I'),
  56         (Unit_Name => Kelvin,   Unit_Symbol => 'K',   Dim_Symbol => '@'),
  57         (Unit_Name => Mole,     Unit_Symbol => "mol", Dim_Symbol => 'N'),
  58         (Unit_Name => Candela,  Unit_Symbol => "cd",  Dim_Symbol => 'J'));
  59 
  60    --  SI Base dimensioned subtypes
  61 
  62    subtype Length is Mks_Type
  63      with
  64       Dimension => (Symbol => 'm',
  65         Meter  => 1,
  66         others => 0);
  67 
  68    subtype Mass is Mks_Type
  69      with
  70       Dimension => (Symbol => "kg",
  71         Kilogram => 1,
  72         others   => 0);
  73 
  74    subtype Time is Mks_Type
  75      with
  76       Dimension => (Symbol => 's',
  77         Second => 1,
  78         others => 0);
  79 
  80    subtype Electric_Current is Mks_Type
  81      with
  82       Dimension => (Symbol => 'A',
  83         Ampere => 1,
  84         others => 0);
  85 
  86    subtype Thermodynamic_Temperature is Mks_Type
  87      with
  88       Dimension => (Symbol => 'K',
  89         Kelvin => 1,
  90         others => 0);
  91 
  92    subtype Amount_Of_Substance is Mks_Type
  93      with
  94       Dimension => (Symbol => "mol",
  95         Mole   => 1,
  96         others => 0);
  97 
  98    subtype Luminous_Intensity is Mks_Type
  99      with
 100       Dimension => (Symbol => "cd",
 101         Candela => 1,
 102         others  => 0);
 103 
 104    --  Initialize SI Base unit values
 105 
 106    --  Turn off the all the dimension warnings for these basic assignments
 107    --  since otherwise we would get complaints about assigning dimensionless
 108    --  values to dimensioned subtypes (we can't assign 1.0*m to m).
 109 
 110    pragma Warnings (Off, "*assumed to be*");
 111 
 112    m   : constant Length                    := 1.0;
 113    kg  : constant Mass                      := 1.0;
 114    s   : constant Time                      := 1.0;
 115    A   : constant Electric_Current          := 1.0;
 116    K   : constant Thermodynamic_Temperature := 1.0;
 117    mol : constant Amount_Of_Substance       := 1.0;
 118    cd  : constant Luminous_Intensity        := 1.0;
 119 
 120    pragma Warnings (On, "*assumed to be*");
 121 
 122    --  SI Derived dimensioned subtypes
 123 
 124    subtype Absorbed_Dose is Mks_Type
 125      with
 126       Dimension => (Symbol => "Gy",
 127         Meter  =>  2,
 128         Second => -2,
 129         others =>  0);
 130 
 131    subtype Angle is Mks_Type
 132      with
 133       Dimension => (Symbol => "rad",
 134         others => 0);
 135 
 136    subtype Area is Mks_Type
 137      with
 138       Dimension => (
 139         Meter  => 2,
 140         others => 0);
 141 
 142    subtype Catalytic_Activity is Mks_Type
 143      with
 144       Dimension => (Symbol => "kat",
 145         Second => -1,
 146         Mole   => 1,
 147         others => 0);
 148 
 149    subtype Celsius_Temperature is Mks_Type
 150      with
 151       Dimension => (Symbol => "°C",
 152         Kelvin => 1,
 153         others => 0);
 154 
 155    subtype Electric_Capacitance is Mks_Type
 156      with
 157       Dimension => (Symbol => 'F',
 158         Meter    => -2,
 159         Kilogram => -1,
 160         Second   =>  4,
 161         Ampere   =>  2,
 162         others   =>  0);
 163 
 164    subtype Electric_Charge is Mks_Type
 165      with
 166       Dimension => (Symbol => 'C',
 167         Second => 1,
 168         Ampere => 1,
 169         others => 0);
 170 
 171    subtype Electric_Conductance is Mks_Type
 172      with
 173       Dimension => (Symbol => 'S',
 174         Meter    => -2,
 175         Kilogram => -1,
 176         Second   =>  3,
 177         Ampere   =>  2,
 178         others   =>  0);
 179 
 180    subtype Electric_Potential_Difference is Mks_Type
 181      with
 182       Dimension => (Symbol => 'V',
 183         Meter    =>  2,
 184         Kilogram =>  1,
 185         Second   => -3,
 186         Ampere   => -1,
 187         others   =>  0);
 188 
 189    subtype Electric_Resistance is Mks_Type
 190      with
 191       Dimension => (Symbol => "Ω",
 192         Meter    =>  2,
 193         Kilogram =>  1,
 194         Second   => -3,
 195         Ampere   => -2,
 196         others   =>  0);
 197 
 198    subtype Energy is Mks_Type
 199      with
 200       Dimension => (Symbol => 'J',
 201         Meter    =>  2,
 202         Kilogram =>  1,
 203         Second   => -2,
 204         others   =>  0);
 205 
 206    subtype Equivalent_Dose is Mks_Type
 207      with
 208       Dimension => (Symbol => "Sv",
 209         Meter  =>  2,
 210         Second => -2,
 211         others =>  0);
 212 
 213    subtype Force is Mks_Type
 214      with
 215       Dimension => (Symbol => 'N',
 216         Meter    => 1,
 217         Kilogram => 1,
 218         Second   => -2,
 219         others   => 0);
 220 
 221    subtype Frequency is Mks_Type
 222      with
 223       Dimension => (Symbol => "Hz",
 224         Second => -1,
 225         others =>  0);
 226 
 227    subtype Illuminance is Mks_Type
 228      with
 229       Dimension => (Symbol => "lx",
 230         Meter   => -2,
 231         Candela =>  1,
 232         others  =>  0);
 233 
 234    subtype Inductance is Mks_Type
 235      with
 236       Dimension => (Symbol => 'H',
 237         Meter    =>  2,
 238         Kilogram =>  1,
 239         Second   => -2,
 240         Ampere   => -2,
 241         others   =>  0);
 242 
 243    subtype Luminous_Flux is Mks_Type
 244      with
 245       Dimension => (Symbol => "lm",
 246         Candela => 1,
 247         others  => 0);
 248 
 249    subtype Magnetic_Flux is Mks_Type
 250      with
 251       Dimension => (Symbol => "Wb",
 252         Meter    =>  2,
 253         Kilogram =>  1,
 254         Second   => -2,
 255         Ampere   => -1,
 256         others   =>  0);
 257 
 258    subtype Magnetic_Flux_Density is Mks_Type
 259      with
 260       Dimension => (Symbol => 'T',
 261         Kilogram =>  1,
 262         Second   => -2,
 263         Ampere   => -1,
 264         others   =>  0);
 265 
 266    subtype Power is Mks_Type
 267      with
 268       Dimension => (Symbol => 'W',
 269         Meter    =>  2,
 270         Kilogram =>  1,
 271         Second   => -3,
 272         others   =>  0);
 273 
 274    subtype Pressure is Mks_Type
 275      with
 276       Dimension => (Symbol => "Pa",
 277         Meter    => -1,
 278         Kilogram =>  1,
 279         Second   => -2,
 280         others   =>  0);
 281 
 282    subtype Radioactivity is Mks_Type
 283      with
 284       Dimension => (Symbol => "Bq",
 285         Second => -1,
 286         others =>  0);
 287 
 288    subtype Solid_Angle is Mks_Type
 289      with
 290       Dimension => (Symbol => "sr",
 291         others => 0);
 292 
 293    subtype Speed is Mks_Type
 294      with
 295       Dimension => (
 296         Meter  =>  1,
 297         Second => -1,
 298         others =>  0);
 299 
 300    subtype Volume is Mks_Type
 301      with
 302       Dimension => (
 303         Meter  => 3,
 304         others => 0);
 305 
 306    --  Initialize derived dimension values
 307 
 308    --  Turn off the all the dimension warnings for these basic assignments
 309    --  since otherwise we would get complaints about assigning dimensionless
 310    --  values to dimensioned subtypes.
 311 
 312    pragma Warnings (Off, "*assumed to be*");
 313 
 314    rad : constant Angle                         := 1.0;
 315    sr  : constant Solid_Angle                   := 1.0;
 316    Hz  : constant Frequency                     := 1.0;
 317    N   : constant Force                         := 1.0;
 318    Pa  : constant Pressure                      := 1.0;
 319    J   : constant Energy                        := 1.0;
 320    W   : constant Power                         := 1.0;
 321    C   : constant Electric_Charge               := 1.0;
 322    V   : constant Electric_Potential_Difference := 1.0;
 323    F   : constant Electric_Capacitance          := 1.0;
 324    Ohm : constant Electric_Resistance           := 1.0;
 325    Si  : constant Electric_Conductance          := 1.0;
 326    Wb  : constant Magnetic_Flux                 := 1.0;
 327    T   : constant Magnetic_Flux_Density         := 1.0;
 328    H   : constant Inductance                    := 1.0;
 329    dC  : constant Celsius_Temperature           := 273.15;
 330    lm  : constant Luminous_Flux                 := 1.0;
 331    lx  : constant Illuminance                   := 1.0;
 332    Bq  : constant Radioactivity                 := 1.0;
 333    Gy  : constant Absorbed_Dose                 := 1.0;
 334    Sv  : constant Equivalent_Dose               := 1.0;
 335    kat : constant Catalytic_Activity            := 1.0;
 336 
 337    --  SI prefixes for Meter
 338 
 339    um  : constant Length := 1.0E-06;  -- micro (u)
 340    mm  : constant Length := 1.0E-03;  -- milli
 341    cm  : constant Length := 1.0E-02;  -- centi
 342    dm  : constant Length := 1.0E-01;  -- deci
 343    dam : constant Length := 1.0E+01;  -- deka
 344    hm  : constant Length := 1.0E+02;  -- hecto
 345    km  : constant Length := 1.0E+03;  -- kilo
 346    Mem : constant Length := 1.0E+06;  -- mega
 347 
 348    --  SI prefixes for Kilogram
 349 
 350    ug  : constant Mass := 1.0E-09;  -- micro (u)
 351    mg  : constant Mass := 1.0E-06;  -- milli
 352    cg  : constant Mass := 1.0E-05;  -- centi
 353    dg  : constant Mass := 1.0E-04;  -- deci
 354    g   : constant Mass := 1.0E-03;  -- gram
 355    dag : constant Mass := 1.0E-02;  -- deka
 356    hg  : constant Mass := 1.0E-01;  -- hecto
 357    Meg : constant Mass := 1.0E+03;  -- mega
 358 
 359    --  SI prefixes for Second
 360 
 361    us  : constant Time := 1.0E-06;  -- micro (u)
 362    ms  : constant Time := 1.0E-03;  -- milli
 363    cs  : constant Time := 1.0E-02;  -- centi
 364    ds  : constant Time := 1.0E-01;  -- deci
 365    das : constant Time := 1.0E+01;  -- deka
 366    hs  : constant Time := 1.0E+02;  -- hecto
 367    ks  : constant Time := 1.0E+03;  -- kilo
 368    Mes : constant Time := 1.0E+06;  -- mega
 369 
 370    --  Other constants for Second
 371 
 372    min  : constant Time := 60.0 * s;
 373    hour : constant Time := 60.0 * min;
 374    day  : constant Time := 24.0 * hour;
 375    year : constant Time := 365.25 * day;
 376 
 377    --  SI prefixes for Ampere
 378 
 379    mA  : constant Electric_Current := 1.0E-03;  -- milli
 380    cA  : constant Electric_Current := 1.0E-02;  -- centi
 381    dA  : constant Electric_Current := 1.0E-01;  -- deci
 382    daA : constant Electric_Current := 1.0E+01;  -- deka
 383    hA  : constant Electric_Current := 1.0E+02;  -- hecto
 384    kA  : constant Electric_Current := 1.0E+03;  -- kilo
 385    MeA : constant Electric_Current := 1.0E+06;  -- mega
 386 
 387    pragma Warnings (On, "*assumed to be*");
 388 end System.Dim.Mks;