1 ------------------------------------------------------------------------------
3 -- GNAT RUN-TIME COMPONENTS --
5 -- S Y S T E M . D I M . M K S --
9 -- Copyright (C) 2011-2017, Free Software Foundation, Inc. --
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. --
18 -- As a special exception under Section 7 of GPL version 3, you are granted --
19 -- additional permissions described in the GCC Runtime Library Exception, --
20 -- version 3.1, as published by the Free Software Foundation. --
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/>. --
27 -- GNAT was originally developed by the GNAT team at New York University. --
28 -- Extensive contributions were provided by Ada Core Technologies Inc. --
30 ------------------------------------------------------------------------------
32 -- Defines the MKS dimension system which is the SI system of units
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.
38 -- The dimension terminology is defined in System.Dim_IO package
42 package System
.Dim
.Mks
is
44 e
: constant := Ada
.Numerics
.e
;
45 Pi
: constant := Ada
.Numerics
.Pi
;
47 -- Dimensioned type Mks_Type
49 type Mks_Type
is new Long_Long_Float
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'));
60 -- SI Base dimensioned subtypes
62 subtype Length
is Mks_Type
64 Dimension
=> (Symbol
=> 'm',
68 subtype Mass
is Mks_Type
70 Dimension
=> (Symbol
=> "kg",
74 subtype Time
is Mks_Type
76 Dimension
=> (Symbol
=> 's',
80 subtype Electric_Current
is Mks_Type
82 Dimension
=> (Symbol
=> 'A',
86 subtype Thermodynamic_Temperature
is Mks_Type
88 Dimension
=> (Symbol
=> 'K',
92 subtype Amount_Of_Substance
is Mks_Type
94 Dimension
=> (Symbol
=> "mol",
98 subtype Luminous_Intensity
is Mks_Type
100 Dimension
=> (Symbol
=> "cd",
104 -- Initialize SI Base unit values
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).
110 pragma Warnings
(Off
, "*assumed to be*");
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;
120 pragma Warnings
(On
, "*assumed to be*");
122 -- SI Derived dimensioned subtypes
124 subtype Absorbed_Dose
is Mks_Type
126 Dimension
=> (Symbol
=> "Gy",
131 subtype Angle
is Mks_Type
133 Dimension
=> (Symbol
=> "rad",
136 subtype Area
is Mks_Type
142 subtype Catalytic_Activity
is Mks_Type
144 Dimension
=> (Symbol
=> "kat",
149 subtype Celsius_Temperature
is Mks_Type
151 Dimension
=> (Symbol
=> "°C",
155 subtype Electric_Capacitance
is Mks_Type
157 Dimension
=> (Symbol
=> 'F',
164 subtype Electric_Charge
is Mks_Type
166 Dimension
=> (Symbol
=> 'C',
171 subtype Electric_Conductance
is Mks_Type
173 Dimension
=> (Symbol
=> 'S',
180 subtype Electric_Potential_Difference
is Mks_Type
182 Dimension
=> (Symbol
=> 'V',
189 -- Note the type punning below. The Symbol is a single "ohm" character
190 -- encoded in UTF-8 (ce a9 in hexadecimal), but this file is not compiled
191 -- with -gnatW8, so we're treating the string literal as a two-character
194 subtype Electric_Resistance
is Mks_Type
196 Dimension
=> (Symbol
=> "Ω",
203 subtype Energy
is Mks_Type
205 Dimension
=> (Symbol
=> 'J',
211 subtype Equivalent_Dose
is Mks_Type
213 Dimension
=> (Symbol
=> "Sv",
218 subtype Force
is Mks_Type
220 Dimension
=> (Symbol
=> 'N',
226 subtype Frequency
is Mks_Type
228 Dimension
=> (Symbol
=> "Hz",
232 subtype Illuminance
is Mks_Type
234 Dimension
=> (Symbol
=> "lx",
239 subtype Inductance
is Mks_Type
241 Dimension
=> (Symbol
=> 'H',
248 subtype Luminous_Flux
is Mks_Type
250 Dimension
=> (Symbol
=> "lm",
254 subtype Magnetic_Flux
is Mks_Type
256 Dimension
=> (Symbol
=> "Wb",
263 subtype Magnetic_Flux_Density
is Mks_Type
265 Dimension
=> (Symbol
=> 'T',
271 subtype Power
is Mks_Type
273 Dimension
=> (Symbol
=> 'W',
279 subtype Pressure
is Mks_Type
281 Dimension
=> (Symbol
=> "Pa",
287 subtype Radioactivity
is Mks_Type
289 Dimension
=> (Symbol
=> "Bq",
293 subtype Solid_Angle
is Mks_Type
295 Dimension
=> (Symbol
=> "sr",
298 subtype Speed
is Mks_Type
305 subtype Volume
is Mks_Type
311 -- Initialize derived dimension values
313 -- Turn off the all the dimension warnings for these basic assignments
314 -- since otherwise we would get complaints about assigning dimensionless
315 -- values to dimensioned subtypes.
317 pragma Warnings
(Off
, "*assumed to be*");
319 rad
: constant Angle
:= 1.0;
320 sr
: constant Solid_Angle
:= 1.0;
321 Hz
: constant Frequency
:= 1.0;
322 N
: constant Force
:= 1.0;
323 Pa
: constant Pressure
:= 1.0;
324 J
: constant Energy
:= 1.0;
325 W
: constant Power
:= 1.0;
326 C
: constant Electric_Charge
:= 1.0;
327 V
: constant Electric_Potential_Difference
:= 1.0;
328 F
: constant Electric_Capacitance
:= 1.0;
329 Ohm
: constant Electric_Resistance
:= 1.0;
330 Si
: constant Electric_Conductance
:= 1.0;
331 Wb
: constant Magnetic_Flux
:= 1.0;
332 T
: constant Magnetic_Flux_Density
:= 1.0;
333 H
: constant Inductance
:= 1.0;
334 dC
: constant Celsius_Temperature
:= 273.15;
335 lm
: constant Luminous_Flux
:= 1.0;
336 lx
: constant Illuminance
:= 1.0;
337 Bq
: constant Radioactivity
:= 1.0;
338 Gy
: constant Absorbed_Dose
:= 1.0;
339 Sv
: constant Equivalent_Dose
:= 1.0;
340 kat
: constant Catalytic_Activity
:= 1.0;
342 -- SI prefixes for Meter
344 um
: constant Length
:= 1.0E-06; -- micro (u)
345 mm
: constant Length
:= 1.0E-03; -- milli
346 cm
: constant Length
:= 1.0E-02; -- centi
347 dm
: constant Length
:= 1.0E-01; -- deci
348 dam
: constant Length
:= 1.0E+01; -- deka
349 hm
: constant Length
:= 1.0E+02; -- hecto
350 km
: constant Length
:= 1.0E+03; -- kilo
351 Mem
: constant Length
:= 1.0E+06; -- mega
353 -- SI prefixes for Kilogram
355 ug
: constant Mass
:= 1.0E-09; -- micro (u)
356 mg
: constant Mass
:= 1.0E-06; -- milli
357 cg
: constant Mass
:= 1.0E-05; -- centi
358 dg
: constant Mass
:= 1.0E-04; -- deci
359 g
: constant Mass
:= 1.0E-03; -- gram
360 dag
: constant Mass
:= 1.0E-02; -- deka
361 hg
: constant Mass
:= 1.0E-01; -- hecto
362 Meg
: constant Mass
:= 1.0E+03; -- mega
364 -- SI prefixes for Second
366 us
: constant Time
:= 1.0E-06; -- micro (u)
367 ms
: constant Time
:= 1.0E-03; -- milli
368 cs
: constant Time
:= 1.0E-02; -- centi
369 ds
: constant Time
:= 1.0E-01; -- deci
370 das
: constant Time
:= 1.0E+01; -- deka
371 hs
: constant Time
:= 1.0E+02; -- hecto
372 ks
: constant Time
:= 1.0E+03; -- kilo
373 Mes
: constant Time
:= 1.0E+06; -- mega
375 -- Other constants for Second
377 min
: constant Time
:= 60.0 * s
;
378 hour
: constant Time
:= 60.0 * min
;
379 day
: constant Time
:= 24.0 * hour
;
380 year
: constant Time
:= 365.25 * day
;
382 -- SI prefixes for Ampere
384 mA
: constant Electric_Current
:= 1.0E-03; -- milli
385 cA
: constant Electric_Current
:= 1.0E-02; -- centi
386 dA
: constant Electric_Current
:= 1.0E-01; -- deci
387 daA
: constant Electric_Current
:= 1.0E+01; -- deka
388 hA
: constant Electric_Current
:= 1.0E+02; -- hecto
389 kA
: constant Electric_Current
:= 1.0E+03; -- kilo
390 MeA
: constant Electric_Current
:= 1.0E+06; -- mega
392 pragma Warnings
(On
, "*assumed to be*");