View Javadoc
1   package org.djunits.unit;
2   
3   import static org.djunits.unit.unitsystem.UnitSystem.CGS_EMU;
4   import static org.djunits.unit.unitsystem.UnitSystem.CGS_ESU;
5   import static org.djunits.unit.unitsystem.UnitSystem.OTHER;
6   import static org.djunits.unit.unitsystem.UnitSystem.SI_ACCEPTED;
7   import static org.djunits.unit.unitsystem.UnitSystem.SI_DERIVED;
8   
9   import org.djunits.unit.unitsystem.UnitSystem;
10  
11  /**
12   * Units for electrical charge.
13   * <p>
14   * Copyright (c) 2015-2019 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
15   * BSD-style license. See <a href="http://djunits.org/docs/license.html">DJUNITS License</a>.
16   * <p>
17   * $LastChangedDate: 2019-03-02 19:06:46 +0100 (Sat, 02 Mar 2019) $, @version $Revision: 342 $, by $Author: averbraeck $,
18   * initial version May 15, 2014 <br>
19   * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
20   */
21  public class ElectricalChargeUnit extends LinearUnit<ElectricalChargeUnit>
22  {
23      /** */
24      private static final long serialVersionUID = 20140607L;
25  
26      /** the unit of electrical current, e.g., Ampere. */
27      private final ElectricalCurrentUnit electricalCurrentUnit;
28  
29      /** the unit of time, e.g., second. */
30      private final DurationUnit durationUnit;
31  
32      /** The SI unit for electrical charge is Coulomb = A.s. */
33      public static final ElectricalChargeUnit SI;
34  
35      /** Coulomb = A.s. */
36      public static final ElectricalChargeUnit COULOMB;
37  
38      /** picoCoulomb = pA.s. */
39      public static final ElectricalChargeUnit PICOCOULOMB;
40  
41      /** nanoCoulomb = nA.s. */
42      public static final ElectricalChargeUnit NANOCOULOMB;
43  
44      /** microCoulomb = muA.s. */
45      public static final ElectricalChargeUnit MICROCOULOMB;
46  
47      /** milliCoulomb = mA.s. */
48      public static final ElectricalChargeUnit MILLICOULOMB;
49  
50      /** milliampere hour. */
51      public static final ElectricalChargeUnit MILLIAMPERE_HOUR;
52  
53      /** milliampere second. */
54      public static final ElectricalChargeUnit MILLIAMPERE_SECOND;
55  
56      /** ampere hour. */
57      public static final ElectricalChargeUnit AMPERE_HOUR;
58  
59      /** kiloampere hour. */
60      public static final ElectricalChargeUnit KILOAMPERE_HOUR;
61  
62      /** megaampere hour. */
63      public static final ElectricalChargeUnit MEGAAMPERE_HOUR;
64  
65      /** Faraday. */
66      public static final ElectricalChargeUnit FARADAY;
67  
68      /** atomic unit of charge. */
69      public static final ElectricalChargeUnit ATOMIC_UNIT;
70  
71      /** statcoulomb (CGS ESU). */
72      public static final ElectricalChargeUnit STATCOULOMB;
73  
74      /** franklin (CGS ESU). */
75      public static final ElectricalChargeUnit FRANKLIN;
76  
77      /** esu (CGS ESU). */
78      public static final ElectricalChargeUnit ESU;
79  
80      /** abcoulomb (CGS EMU). */
81      public static final ElectricalChargeUnit ABCOULOMB;
82  
83      /** emu (CGS EMU). */
84      public static final ElectricalChargeUnit EMU;
85  
86      static
87      {
88          SI = new ElectricalChargeUnit(ElectricalCurrentUnit.AMPERE, DurationUnit.SECOND, "ElectricalChargeUnit.C", SI_DERIVED);
89          COULOMB = SI;
90          PICOCOULOMB = new ElectricalChargeUnit("ElectricalChargeUnit.pC", SI_DERIVED, COULOMB, 1.0E-12);
91          NANOCOULOMB = new ElectricalChargeUnit("ElectricalChargeUnit.nC", SI_DERIVED, COULOMB, 1.0E-9);
92          MICROCOULOMB = new ElectricalChargeUnit("ElectricalChargeUnit.muC", SI_DERIVED, COULOMB, 1.0E-6);
93          MILLICOULOMB = new ElectricalChargeUnit("ElectricalChargeUnit.mC", SI_DERIVED, COULOMB, 1.0E-3);
94          MILLIAMPERE_HOUR = new ElectricalChargeUnit(ElectricalCurrentUnit.MILLIAMPERE, DurationUnit.HOUR,
95                  "ElectricalChargeUnit.mAh", SI_DERIVED);
96          AMPERE_HOUR = new ElectricalChargeUnit(ElectricalCurrentUnit.AMPERE, DurationUnit.HOUR, "ElectricalChargeUnit.Ah",
97                  SI_DERIVED);
98          KILOAMPERE_HOUR = new ElectricalChargeUnit(ElectricalCurrentUnit.KILOAMPERE, DurationUnit.HOUR,
99                  "ElectricalChargeUnit.kAh", SI_DERIVED);
100         MEGAAMPERE_HOUR = new ElectricalChargeUnit(ElectricalCurrentUnit.MEGAAMPERE, DurationUnit.HOUR,
101                 "ElectricalChargeUnit.MAh", SI_DERIVED);
102         MILLIAMPERE_SECOND = new ElectricalChargeUnit(ElectricalCurrentUnit.MILLIAMPERE, DurationUnit.SECOND,
103                 "ElectricalChargeUnit.mAh", SI_DERIVED);
104         FARADAY = new ElectricalChargeUnit("ElectricalChargeUnit.F", OTHER, COULOMB, 96485.3383);
105         ATOMIC_UNIT = new ElectricalChargeUnit("ElectricalChargeUnit.e", SI_ACCEPTED, COULOMB, 1.6021765314E-19);
106         STATCOULOMB = new ElectricalChargeUnit("ElectricalChargeUnit.statC", CGS_ESU, COULOMB, 3.335641E-10);
107         FRANKLIN = new ElectricalChargeUnit("ElectricalChargeUnit.Fr", CGS_ESU, STATCOULOMB, 1.0);
108         ESU = new ElectricalChargeUnit("ElectricalChargeUnit.esu", CGS_ESU, STATCOULOMB, 1.0);
109         ABCOULOMB = new ElectricalChargeUnit("ElectricalChargeUnit.abC", CGS_EMU, COULOMB, 10.0);
110         EMU = new ElectricalChargeUnit("ElectricalChargeUnit.emu", CGS_EMU, ABCOULOMB, 1.0);
111     }
112 
113     /**
114      * Build an ElectricalChargeUnit as an electrical current unit times a time unit. A Coulomb is an Ampere.second.
115      * @param electricalCurrentUnit ElectricalCurrentUnit; the unit of electrical current for the electrical charge unit, e.g.,
116      *            Ampere
117      * @param durationUnit DurationUnit; the unit of time for the electrical charge unit, e.g., second
118      * @param abbreviationKey String; the key to the locale file for the abbreviation of the unit
119      * @param unitSystem UnitSystem; the unit system, e.g. SI or Imperial
120      */
121     private ElectricalChargeUnit(final ElectricalCurrentUnit electricalCurrentUnit, final DurationUnit durationUnit,
122             final String abbreviationKey, final UnitSystem unitSystem)
123     {
124         super(abbreviationKey, unitSystem, COULOMB, electricalCurrentUnit.getScaleFactor() * durationUnit.getScaleFactor());
125         this.electricalCurrentUnit = electricalCurrentUnit;
126         this.durationUnit = durationUnit;
127     }
128 
129     /**
130      * Build a user-defined ElectricalChargeUnit as an electrical current unit times a time unit.
131      * @param electricalCurrentUnit ElectricalCurrentUnit; the unit of electrical current for the electrical charge unit, e.g.,
132      *            Ampere
133      * @param durationUnit DurationUnit; the unit of time for the electrical charge unit, e.g., second
134      * @param name String; the long name of the unit
135      * @param abbreviation String; the abbreviation of the unit
136      * @param unitSystem UnitSystem; the unit system, e.g. SI or Imperial
137      */
138     public ElectricalChargeUnit(final ElectricalCurrentUnit electricalCurrentUnit, final DurationUnit durationUnit,
139             final String name, final String abbreviation, final UnitSystem unitSystem)
140     {
141         super(name, abbreviation, unitSystem, COULOMB, electricalCurrentUnit.getScaleFactor() * durationUnit.getScaleFactor());
142         this.electricalCurrentUnit = electricalCurrentUnit;
143         this.durationUnit = durationUnit;
144     }
145 
146     /**
147      * Build a unit with a conversion factor to another unit, e.g., an abcoulomb is 10 Coulomb.
148      * @param abbreviationKey String; the key to the locale file for the abbreviation of the unit
149      * @param unitSystem UnitSystem; the unit system, e.g. SI or Imperial
150      * @param referenceUnit ElectricalChargeUnit; the unit to convert to
151      * @param scaleFactorToReferenceUnit double; multiply a value in this unit by the factor to convert to the given reference
152      *            unit
153      */
154     private ElectricalChargeUnit(final String abbreviationKey, final UnitSystem unitSystem,
155             final ElectricalChargeUnit referenceUnit, final double scaleFactorToReferenceUnit)
156     {
157         super(abbreviationKey, unitSystem, referenceUnit, scaleFactorToReferenceUnit);
158         this.electricalCurrentUnit = referenceUnit.getElectricalCurrentUnit();
159         this.durationUnit = referenceUnit.getDurationUnit();
160     }
161 
162     /**
163      * Build a user-defined unit with a conversion factor to another unit.
164      * @param name String; the long name of the unit
165      * @param abbreviation String; the abbreviation of the unit
166      * @param unitSystem UnitSystem; the unit system, e.g. SI or Imperial
167      * @param referenceUnit ElectricalChargeUnit; the unit to convert to
168      * @param scaleFactorToReferenceUnit double; multiply a value in this unit by the factor to convert to the given reference
169      *            unit
170      */
171     public ElectricalChargeUnit(final String name, final String abbreviation, final UnitSystem unitSystem,
172             final ElectricalChargeUnit referenceUnit, final double scaleFactorToReferenceUnit)
173     {
174         super(name, abbreviation, unitSystem, referenceUnit, scaleFactorToReferenceUnit);
175         this.electricalCurrentUnit = referenceUnit.getElectricalCurrentUnit();
176         this.durationUnit = referenceUnit.getDurationUnit();
177     }
178 
179     /**
180      * @return electricalCurrentUnit
181      */
182     public final ElectricalCurrentUnit getElectricalCurrentUnit()
183     {
184         return this.electricalCurrentUnit;
185     }
186 
187     /**
188      * @return durationUnit
189      */
190     public final DurationUnit getDurationUnit()
191     {
192         return this.durationUnit;
193     }
194 
195     /** {@inheritDoc} */
196     @Override
197     public final ElectricalChargeUnit getStandardUnit()
198     {
199         return COULOMB;
200     }
201 
202     /** {@inheritDoc} */
203     @Override
204     public final String getSICoefficientsString()
205     {
206         return "sA";
207     }
208 
209 }