View Javadoc
1   package org.djunits.value.vfloat.scalar;
2   
3   import java.util.Locale;
4   
5   import org.djunits.unit.DimensionlessUnit;
6   import org.djunits.unit.ElectricalCapacitanceUnit;
7   import org.djunits.unit.ElectricalConductanceUnit;
8   import org.djunits.unit.ElectricalCurrentUnit;
9   import org.djunits.value.vfloat.scalar.base.FloatScalarRel;
10  import org.djutils.base.NumberParser;
11  import org.djutils.exceptions.Throw;
12  
13  import jakarta.annotation.Generated;
14  
15  /**
16   * Easy access methods for the FloatElectricalConductance FloatScalar, which is relative by definition.
17   * <p>
18   * Copyright (c) 2013-2025 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
19   * BSD-style license. See <a href="https://djunits.org/docs/license.html">DJUNITS License</a>.
20   * </p>
21   * @author <a href="https://www.tudelft.nl/averbraeck">Alexander Verbraeck</a>
22   * @author <a href="https://www.tudelft.nl/staff/p.knoppers/">Peter Knoppers</a>
23   */
24  @Generated(value = "org.djunits.generator.GenerateDJUNIT", date = "2025-09-06T15:16:28.380798Z")
25  public class FloatElectricalConductance extends FloatScalarRel<ElectricalConductanceUnit, FloatElectricalConductance>
26  {
27      /** */
28      private static final long serialVersionUID = 20150901L;
29  
30      /** Constant with value zero. */
31      public static final FloatElectricalConductance ZERO = new FloatElectricalConductance(0.0f, ElectricalConductanceUnit.SI);
32  
33      /** Constant with value one. */
34      public static final FloatElectricalConductance ONE = new FloatElectricalConductance(1.0f, ElectricalConductanceUnit.SI);
35  
36      /** Constant with value NaN. */
37      @SuppressWarnings("checkstyle:constantname")
38      public static final FloatElectricalConductance NaN =
39              new FloatElectricalConductance(Float.NaN, ElectricalConductanceUnit.SI);
40  
41      /** Constant with value POSITIVE_INFINITY. */
42      public static final FloatElectricalConductance POSITIVE_INFINITY =
43              new FloatElectricalConductance(Float.POSITIVE_INFINITY, ElectricalConductanceUnit.SI);
44  
45      /** Constant with value NEGATIVE_INFINITY. */
46      public static final FloatElectricalConductance NEGATIVE_INFINITY =
47              new FloatElectricalConductance(Float.NEGATIVE_INFINITY, ElectricalConductanceUnit.SI);
48  
49      /** Constant with value MAX_VALUE. */
50      public static final FloatElectricalConductance POS_MAXVALUE =
51              new FloatElectricalConductance(Float.MAX_VALUE, ElectricalConductanceUnit.SI);
52  
53      /** Constant with value -MAX_VALUE. */
54      public static final FloatElectricalConductance NEG_MAXVALUE =
55              new FloatElectricalConductance(-Float.MAX_VALUE, ElectricalConductanceUnit.SI);
56  
57      /**
58       * Construct FloatElectricalConductance scalar with a unit.
59       * @param value the float value, expressed in the given unit
60       * @param unit unit for the float value
61       */
62      public FloatElectricalConductance(final float value, final ElectricalConductanceUnit unit)
63      {
64          super(value, unit);
65      }
66  
67      /**
68       * Construct FloatElectricalConductance scalar.
69       * @param value Scalar from which to construct this instance
70       */
71      public FloatElectricalConductance(final FloatElectricalConductance value)
72      {
73          super(value);
74      }
75  
76      /**
77       * Construct FloatElectricalConductance scalar with a unit using a double value.
78       * @param value the double value, expressed in the given unit
79       * @param unit unit for the resulting float value
80       */
81      public FloatElectricalConductance(final double value, final ElectricalConductanceUnit unit)
82      {
83          super((float) value, unit);
84      }
85  
86      @Override
87      public final FloatElectricalConductance instantiateRel(final float value, final ElectricalConductanceUnit unit)
88      {
89          return new FloatElectricalConductance(value, unit);
90      }
91  
92      /**
93       * Construct FloatElectricalConductance scalar based on an SI value.
94       * @param value the float value in SI units
95       * @return the new scalar with the SI value
96       */
97      public static final FloatElectricalConductance ofSI(final float value)
98      {
99          return new FloatElectricalConductance(value, ElectricalConductanceUnit.SI);
100     }
101 
102     /**
103      * Interpolate between two values. Note that the first value does not have to be smaller than the second.
104      * @param zero the value at a ratio of zero
105      * @param one the value at a ratio of one
106      * @param ratio the ratio between 0 and 1, inclusive
107      * @return a FloatElectricalConductance at the given ratio between 0 and 1
108      */
109     public static FloatElectricalConductance interpolate(final FloatElectricalConductance zero,
110             final FloatElectricalConductance one, final float ratio)
111     {
112         Throw.when(ratio < 0.0 || ratio > 1.0, IllegalArgumentException.class,
113                 "ratio for interpolation should be between 0 and 1, but is %f", ratio);
114         return new FloatElectricalConductance(zero.getInUnit() * (1 - ratio) + one.getInUnit(zero.getDisplayUnit()) * ratio,
115                 zero.getDisplayUnit());
116     }
117 
118     /**
119      * Return the maximum value of two relative scalars.
120      * @param r1 the first scalar
121      * @param r2 the second scalar
122      * @return the maximum value of two relative scalars
123      */
124     public static FloatElectricalConductance max(final FloatElectricalConductance r1, final FloatElectricalConductance r2)
125     {
126         return r1.gt(r2) ? r1 : r2;
127     }
128 
129     /**
130      * Return the maximum value of more than two relative scalars.
131      * @param r1 the first scalar
132      * @param r2 the second scalar
133      * @param rn the other scalars
134      * @return the maximum value of more than two relative scalars
135      */
136     public static FloatElectricalConductance max(final FloatElectricalConductance r1, final FloatElectricalConductance r2,
137             final FloatElectricalConductance... rn)
138     {
139         FloatElectricalConductance maxr = r1.gt(r2) ? r1 : r2;
140         for (FloatElectricalConductance r : rn)
141         {
142             if (r.gt(maxr))
143             {
144                 maxr = r;
145             }
146         }
147         return maxr;
148     }
149 
150     /**
151      * Return the minimum value of two relative scalars.
152      * @param r1 the first scalar
153      * @param r2 the second scalar
154      * @return the minimum value of two relative scalars
155      */
156     public static FloatElectricalConductance min(final FloatElectricalConductance r1, final FloatElectricalConductance r2)
157     {
158         return r1.lt(r2) ? r1 : r2;
159     }
160 
161     /**
162      * Return the minimum value of more than two relative scalars.
163      * @param r1 the first scalar
164      * @param r2 the second scalar
165      * @param rn the other scalars
166      * @return the minimum value of more than two relative scalars
167      */
168     public static FloatElectricalConductance min(final FloatElectricalConductance r1, final FloatElectricalConductance r2,
169             final FloatElectricalConductance... rn)
170     {
171         FloatElectricalConductance minr = r1.lt(r2) ? r1 : r2;
172         for (FloatElectricalConductance r : rn)
173         {
174             if (r.lt(minr))
175             {
176                 minr = r;
177             }
178         }
179         return minr;
180     }
181 
182     /**
183      * Returns a FloatElectricalConductance representation of a textual representation of a value with a unit. The String
184      * representation that can be parsed is the double value in the unit, followed by a localized or English abbreviation of the
185      * unit. Spaces are allowed, but not required, between the value and the unit.
186      * @param text the textual representation to parse into a FloatElectricalConductance
187      * @return the Scalar representation of the value in its unit
188      * @throws IllegalArgumentException when the text cannot be parsed
189      * @throws NullPointerException when the text argument is null
190      */
191     public static FloatElectricalConductance valueOf(final String text)
192     {
193         Throw.whenNull(text, "Error parsing FloatElectricalConductance: text to parse is null");
194         Throw.when(text.length() == 0, IllegalArgumentException.class,
195                 "Error parsing FloatElectricalConductance: empty text to parse");
196         try
197         {
198             NumberParser numberParser = new NumberParser().lenient().trailing();
199             float f = numberParser.parseFloat(text);
200             String unitString = text.substring(numberParser.getTrailingPosition()).trim();
201             ElectricalConductanceUnit unit = ElectricalConductanceUnit.BASE.getUnitByAbbreviation(unitString);
202             Throw.when(unit == null, IllegalArgumentException.class, "Unit %s not found for quantity ElectricalConductance",
203                     unitString);
204             return new FloatElectricalConductance(f, unit);
205         }
206         catch (Exception exception)
207         {
208             throw new IllegalArgumentException("Error parsing FloatElectricalConductance from " + text + " using Locale "
209                     + Locale.getDefault(Locale.Category.FORMAT), exception);
210         }
211     }
212 
213     /**
214      * Returns a FloatElectricalConductance based on a value and the textual representation of the unit, which can be localized.
215      * @param value the value to use
216      * @param unitString the textual representation of the unit
217      * @return the Scalar representation of the value in its unit
218      * @throws IllegalArgumentException when the unit cannot be parsed or is incorrect
219      * @throws NullPointerException when the unitString argument is null
220      */
221     public static FloatElectricalConductance of(final float value, final String unitString)
222     {
223         Throw.whenNull(unitString, "Error parsing FloatElectricalConductance: unitString is null");
224         Throw.when(unitString.length() == 0, IllegalArgumentException.class,
225                 "Error parsing FloatElectricalConductance: empty unitString");
226         ElectricalConductanceUnit unit = ElectricalConductanceUnit.BASE.getUnitByAbbreviation(unitString);
227         Throw.when(unit == null, IllegalArgumentException.class, "Error parsing FloatElectricalConductance with unit %s",
228                 unitString);
229         return new FloatElectricalConductance(value, unit);
230     }
231 
232     /**
233      * Calculate the division of FloatElectricalConductance and FloatElectricalConductance, which results in a
234      * FloatDimensionless scalar.
235      * @param v scalar
236      * @return scalar as a division of FloatElectricalConductance and FloatElectricalConductance
237      */
238     public final FloatDimensionless divide(final FloatElectricalConductance v)
239     {
240         return new FloatDimensionless(this.si / v.si, DimensionlessUnit.SI);
241     }
242 
243     /**
244      * Calculate the multiplication of FloatElectricalConductance and FloatElectricalResistance, which results in a
245      * FloatDimensionless scalar.
246      * @param v scalar
247      * @return scalar as a multiplication of FloatElectricalConductance and FloatElectricalResistance
248      */
249     public final FloatDimensionless times(final FloatElectricalResistance v)
250     {
251         return new FloatDimensionless(this.si * v.si, DimensionlessUnit.SI);
252     }
253 
254     /**
255      * Calculate the multiplication of FloatElectricalConductance and FloatElectricalPotential, which results in a
256      * FloatElectricalCurrent scalar.
257      * @param v scalar
258      * @return scalar as a multiplication of FloatElectricalConductance and FloatElectricalPotential
259      */
260     public final FloatElectricalCurrent times(final FloatElectricalPotential v)
261     {
262         return new FloatElectricalCurrent(this.si * v.si, ElectricalCurrentUnit.SI);
263     }
264 
265     /**
266      * Calculate the multiplication of FloatElectricalConductance and FloatDuration, which results in a
267      * FloatElectricalCapacitance scalar.
268      * @param v scalar
269      * @return scalar as a multiplication of FloatElectricalConductance and FloatDuration
270      */
271     public final FloatElectricalCapacitance times(final FloatDuration v)
272     {
273         return new FloatElectricalCapacitance(this.si * v.si, ElectricalCapacitanceUnit.SI);
274     }
275 
276     @Override
277     public FloatElectricalResistance reciprocal()
278     {
279         return FloatElectricalResistance.ofSI(1.0f / this.si);
280     }
281 
282     /**
283      * Multiply two scalars that result in a scalar of type FloatElectricalConductance.
284      * @param scalar1 the first scalar
285      * @param scalar2 the second scalar
286      * @return the multiplication of both scalars as an instance of FloatElectricalConductance
287      */
288     public static FloatElectricalConductance multiply(final FloatScalarRel<?, ?> scalar1, final FloatScalarRel<?, ?> scalar2)
289     {
290         Throw.whenNull(scalar1, "scalar1 cannot be null");
291         Throw.whenNull(scalar2, "scalar2 cannot be null");
292         Throw.when(
293                 !scalar1.getDisplayUnit().getQuantity().getSiDimensions()
294                         .plus(scalar2.getDisplayUnit().getQuantity().getSiDimensions())
295                         .equals(ElectricalConductanceUnit.BASE.getSiDimensions()),
296                 IllegalArgumentException.class,
297                 "Multiplying %s by %s does not result in instance of type FloatElectricalConductance",
298                 scalar1.toDisplayString(), scalar2.toDisplayString());
299         return new FloatElectricalConductance(scalar1.si * scalar2.si, ElectricalConductanceUnit.SI);
300     }
301 
302     /**
303      * Divide two scalars that result in a scalar of type FloatElectricalConductance.
304      * @param scalar1 the first scalar
305      * @param scalar2 the second scalar
306      * @return the division of scalar1 by scalar2 as an instance of FloatElectricalConductance
307      */
308     public static FloatElectricalConductance divide(final FloatScalarRel<?, ?> scalar1, final FloatScalarRel<?, ?> scalar2)
309     {
310         Throw.whenNull(scalar1, "scalar1 cannot be null");
311         Throw.whenNull(scalar2, "scalar2 cannot be null");
312         Throw.when(
313                 !scalar1.getDisplayUnit().getQuantity().getSiDimensions()
314                         .minus(scalar2.getDisplayUnit().getQuantity().getSiDimensions())
315                         .equals(ElectricalConductanceUnit.BASE.getSiDimensions()),
316                 IllegalArgumentException.class,
317                 "Dividing %s by %s does not result in an instance of type FloatElectricalConductance",
318                 scalar1.toDisplayString(), scalar2.toDisplayString());
319         return new FloatElectricalConductance(scalar1.si / scalar2.si, ElectricalConductanceUnit.SI);
320     }
321 
322 }