View Javadoc
1   package org.djunits.value.vdouble.matrix;
2   
3   import org.djunits.unit.AbsorbedDoseUnit;
4   import org.djunits.unit.AccelerationUnit;
5   import org.djunits.unit.AmountOfSubstanceUnit;
6   import org.djunits.unit.AngleUnit;
7   import org.djunits.unit.AngularAccelerationUnit;
8   import org.djunits.unit.AngularVelocityUnit;
9   import org.djunits.unit.AreaUnit;
10  import org.djunits.unit.CatalyticActivityUnit;
11  import org.djunits.unit.DensityUnit;
12  import org.djunits.unit.DimensionlessUnit;
13  import org.djunits.unit.DurationUnit;
14  import org.djunits.unit.ElectricalCapacitanceUnit;
15  import org.djunits.unit.ElectricalChargeUnit;
16  import org.djunits.unit.ElectricalConductanceUnit;
17  import org.djunits.unit.ElectricalCurrentUnit;
18  import org.djunits.unit.ElectricalInductanceUnit;
19  import org.djunits.unit.ElectricalPotentialUnit;
20  import org.djunits.unit.ElectricalResistanceUnit;
21  import org.djunits.unit.EnergyUnit;
22  import org.djunits.unit.EquivalentDoseUnit;
23  import org.djunits.unit.FlowMassUnit;
24  import org.djunits.unit.FlowVolumeUnit;
25  import org.djunits.unit.ForceUnit;
26  import org.djunits.unit.FrequencyUnit;
27  import org.djunits.unit.IlluminanceUnit;
28  import org.djunits.unit.LengthUnit;
29  import org.djunits.unit.LinearDensityUnit;
30  import org.djunits.unit.LuminousFluxUnit;
31  import org.djunits.unit.LuminousIntensityUnit;
32  import org.djunits.unit.MagneticFluxDensityUnit;
33  import org.djunits.unit.MagneticFluxUnit;
34  import org.djunits.unit.MassUnit;
35  import org.djunits.unit.MomentumUnit;
36  import org.djunits.unit.PowerUnit;
37  import org.djunits.unit.PressureUnit;
38  import org.djunits.unit.RadioActivityUnit;
39  import org.djunits.unit.SIUnit;
40  import org.djunits.unit.SolidAngleUnit;
41  import org.djunits.unit.SpeedUnit;
42  import org.djunits.unit.TemperatureUnit;
43  import org.djunits.unit.TorqueUnit;
44  import org.djunits.unit.Unit;
45  import org.djunits.unit.VolumeUnit;
46  import org.djunits.unit.si.SIDimensions;
47  import org.djunits.unit.util.UnitRuntimeException;
48  import org.djunits.value.ValueRuntimeException;
49  import org.djunits.value.storage.StorageType;
50  import org.djunits.value.vdouble.matrix.base.DoubleMatrixRel;
51  import org.djunits.value.vdouble.matrix.data.DoubleMatrixData;
52  import org.djunits.value.vdouble.scalar.SIScalar;
53  import org.djunits.value.vdouble.vector.SIVector;
54  import org.djunits.value.vdouble.vector.data.DoubleVectorData;
55  import org.djutils.exceptions.Throw;
56  
57  import jakarta.annotation.Generated;
58  
59  /**
60   * Easy access methods for the generic Relative SI DoubleMatrix.
61   * <p>
62   * Copyright (c) 2013-2024 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. <br>
63   * All rights reserved. <br>
64   * BSD-style license. See <a href="https://djunits.org/docs/license.html">DJUNITS License</a>.
65   * </p>
66   * @author <a href="https://www.tudelft.nl/averbraeck">Alexander Verbraeck</a>
67   * @author <a href="https://www.tudelft.nl/staff/p.knoppers/">Peter Knoppers</a>
68   */
69  @Generated(value = "org.djunits.generator.GenerateDJUNIT", date = "2023-07-23T14:06:38.224104100Z")
70  public class SIMatrix extends DoubleMatrixRel<SIUnit, SIScalar, SIVector, SIMatrix>
71  {
72      /** */
73      private static final long serialVersionUID = 20150901L;
74  
75      /**
76       * Construct a new Relative Double SIMatrix on the basis of a data object.
77       * @param data DoubleMatrixData; an internal data object
78       * @param unit SIUnit; the unit
79       */
80      public SIMatrix(final DoubleMatrixData data, final SIUnit unit)
81      {
82          super(data, unit);
83      }
84  
85      /**
86       * Construct a new Relative Double SIMatrix with a unit for the float values that will also be used for the displayUnit.
87       * @param values double[][]; the values of the entries in the new Relative Double SIMatrix
88       * @param unit SIUnit; the unit of the new Relative Double SIMatrix
89       * @param storageType StorageType; the data type to use (e.g., DENSE or SPARSE)
90       * @throws ValueRuntimeException when values is null
91       */
92      public SIMatrix(final double[][] values, final SIUnit unit, final StorageType storageType) throws ValueRuntimeException
93      {
94          this(DoubleMatrixData.instantiate(values, unit.getScale(), storageType), unit);
95      }
96  
97      /**
98       * Construct a new Relative Double SIMatrix with a unit for the float values that will also be used for the displayUnit.
99       * Assume the StorageType is DENSE since we offer the content as an array.
100      * @param values double[][]; the values of the entries in the new Relative Double SIMatrix
101      * @param unit SIUnit; the unit of the new Relative Double SIMatrix
102      * @throws ValueRuntimeException when values is null
103      */
104     public SIMatrix(final double[][] values, final SIUnit unit) throws ValueRuntimeException
105     {
106         this(values, unit, StorageType.DENSE);
107     }
108 
109     /** {@inheritDoc} */
110     @Override
111     public Class<SIScalar> getScalarClass()
112     {
113         return SIScalar.class;
114     }
115 
116     /** {@inheritDoc} */
117     @Override
118     public Class<SIVector> getVectorClass()
119     {
120         return SIVector.class;
121     }
122 
123     /**
124      * Returns an SIMatrix based on an array of values and the textual representation of the unit.
125      * @param values double[][]; the values to use
126      * @param unitString String; the textual representation of the unit
127      * @param storageType StorageType; the storage type to use
128      * @return SIMatrix; the matrix representation of the values in their unit
129      * @throws IllegalArgumentException when the unit cannot be parsed or is incorrect
130      * @throws NullPointerException when the unitString argument is null
131      */
132     public static SIMatrix of(final double[][] values, final String unitString, final StorageType storageType)
133     {
134         Throw.whenNull(values, "Error parsing SIMatrix: value is null");
135         Throw.whenNull(unitString, "Error parsing SIMatrix: unitString is null");
136         Throw.whenNull(storageType, "Error parsing SIMatrix: storageType is null");
137         try
138         {
139             SIUnit unit = Unit.lookupOrCreateUnitWithSIDimensions(SIDimensions.of(unitString));
140             if (unit != null)
141             {
142                 return new SIMatrix(values, unit, storageType);
143             }
144         }
145         catch (Exception exception)
146         {
147             throw new IllegalArgumentException("Error parsing SIUnit from " + unitString, exception);
148         }
149         throw new IllegalArgumentException("Error parsing SIMatrix with unit " + unitString);
150     }
151 
152     /** {@inheritDoc} */
153     @Override
154     public SIMatrix instantiateMatrix(final DoubleMatrixData dmd, final SIUnit unit)
155     {
156         return new SIMatrix(dmd, unit);
157     }
158 
159     /** {@inheritDoc} */
160     @Override
161     public SIVector instantiateVector(final DoubleVectorData dvd, final SIUnit unit)
162     {
163         return new SIVector(dvd, unit);
164     }
165 
166     /** {@inheritDoc} */
167     @Override
168     public SIScalar instantiateScalarSI(final double valueSI, final SIUnit unit)
169     {
170         return new SIScalar(valueSI, unit);
171     }
172 
173     /** {@inheritDoc} */
174     @Override
175     public String toString(final SIUnit displayUnit, final boolean verbose, final boolean withUnit)
176     {
177         return super.toString(displayUnit, verbose, withUnit).replaceAll("!", "");
178     }
179 
180     /**********************************************************************************/
181     /******************************** 'CAST AS' METHODS *******************************/
182     /**********************************************************************************/
183 
184     /**
185      * Return the current matrix as a absorbeddose matrix.
186      * @return AbsorbedDoseMatrix; the current matrix as a absorbeddose matrix
187      */
188     public final AbsorbedDoseMatrix asAbsorbedDose()
189     {
190         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AbsorbedDoseUnit.BASE.getSiDimensions())),
191                 UnitRuntimeException.class, "cannot cast %s to AbsorbedDoseMatrix", this.toString());
192         return new AbsorbedDoseMatrix(this.data, AbsorbedDoseUnit.SI);
193     }
194 
195     /**
196      * Return the current matrix as a absorbeddose matrix, and provide a display unit.
197      * @param displayUnit the unit in which the value will be displayed
198      * @return AbsorbedDoseMatrix; the current matrix as a absorbeddose matrix
199      */
200     public final AbsorbedDoseMatrix asAbsorbedDose(final AbsorbedDoseUnit displayUnit)
201     {
202         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AbsorbedDoseUnit.BASE.getSiDimensions())),
203                 UnitRuntimeException.class, "cannot cast %s to AbsorbedDoseMatrix", this.toString());
204         AbsorbedDoseMatrix result = new AbsorbedDoseMatrix(this.data, displayUnit.getStandardUnit());
205         result.setDisplayUnit(displayUnit);
206         return result;
207     }
208 
209     /**
210      * Return the current matrix as a acceleration matrix.
211      * @return AccelerationMatrix; the current matrix as a acceleration matrix
212      */
213     public final AccelerationMatrix asAcceleration()
214     {
215         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AccelerationUnit.BASE.getSiDimensions())),
216                 UnitRuntimeException.class, "cannot cast %s to AccelerationMatrix", this.toString());
217         return new AccelerationMatrix(this.data, AccelerationUnit.SI);
218     }
219 
220     /**
221      * Return the current matrix as a acceleration matrix, and provide a display unit.
222      * @param displayUnit the unit in which the value will be displayed
223      * @return AccelerationMatrix; the current matrix as a acceleration matrix
224      */
225     public final AccelerationMatrix asAcceleration(final AccelerationUnit displayUnit)
226     {
227         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AccelerationUnit.BASE.getSiDimensions())),
228                 UnitRuntimeException.class, "cannot cast %s to AccelerationMatrix", this.toString());
229         AccelerationMatrix result = new AccelerationMatrix(this.data, displayUnit.getStandardUnit());
230         result.setDisplayUnit(displayUnit);
231         return result;
232     }
233 
234     /**
235      * Return the current matrix as a amountofsubstance matrix.
236      * @return AmountOfSubstanceMatrix; the current matrix as a amountofsubstance matrix
237      */
238     public final AmountOfSubstanceMatrix asAmountOfSubstance()
239     {
240         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AmountOfSubstanceUnit.BASE.getSiDimensions())),
241                 UnitRuntimeException.class, "cannot cast %s to AmountOfSubstanceMatrix", this.toString());
242         return new AmountOfSubstanceMatrix(this.data, AmountOfSubstanceUnit.SI);
243     }
244 
245     /**
246      * Return the current matrix as a amountofsubstance matrix, and provide a display unit.
247      * @param displayUnit the unit in which the value will be displayed
248      * @return AmountOfSubstanceMatrix; the current matrix as a amountofsubstance matrix
249      */
250     public final AmountOfSubstanceMatrix asAmountOfSubstance(final AmountOfSubstanceUnit displayUnit)
251     {
252         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AmountOfSubstanceUnit.BASE.getSiDimensions())),
253                 UnitRuntimeException.class, "cannot cast %s to AmountOfSubstanceMatrix", this.toString());
254         AmountOfSubstanceMatrix result = new AmountOfSubstanceMatrix(this.data, displayUnit.getStandardUnit());
255         result.setDisplayUnit(displayUnit);
256         return result;
257     }
258 
259     /**
260      * Return the current matrix as a angularacceleration matrix.
261      * @return AngularAccelerationMatrix; the current matrix as a angularacceleration matrix
262      */
263     public final AngularAccelerationMatrix asAngularAcceleration()
264     {
265         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AngularAccelerationUnit.BASE.getSiDimensions())),
266                 UnitRuntimeException.class, "cannot cast %s to AngularAccelerationMatrix", this.toString());
267         return new AngularAccelerationMatrix(this.data, AngularAccelerationUnit.SI);
268     }
269 
270     /**
271      * Return the current matrix as a angularacceleration matrix, and provide a display unit.
272      * @param displayUnit the unit in which the value will be displayed
273      * @return AngularAccelerationMatrix; the current matrix as a angularacceleration matrix
274      */
275     public final AngularAccelerationMatrix asAngularAcceleration(final AngularAccelerationUnit displayUnit)
276     {
277         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AngularAccelerationUnit.BASE.getSiDimensions())),
278                 UnitRuntimeException.class, "cannot cast %s to AngularAccelerationMatrix", this.toString());
279         AngularAccelerationMatrix result = new AngularAccelerationMatrix(this.data, displayUnit.getStandardUnit());
280         result.setDisplayUnit(displayUnit);
281         return result;
282     }
283 
284     /**
285      * Return the current matrix as a angularvelocity matrix.
286      * @return AngularVelocityMatrix; the current matrix as a angularvelocity matrix
287      */
288     public final AngularVelocityMatrix asAngularVelocity()
289     {
290         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AngularVelocityUnit.BASE.getSiDimensions())),
291                 UnitRuntimeException.class, "cannot cast %s to AngularVelocityMatrix", this.toString());
292         return new AngularVelocityMatrix(this.data, AngularVelocityUnit.SI);
293     }
294 
295     /**
296      * Return the current matrix as a angularvelocity matrix, and provide a display unit.
297      * @param displayUnit the unit in which the value will be displayed
298      * @return AngularVelocityMatrix; the current matrix as a angularvelocity matrix
299      */
300     public final AngularVelocityMatrix asAngularVelocity(final AngularVelocityUnit displayUnit)
301     {
302         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AngularVelocityUnit.BASE.getSiDimensions())),
303                 UnitRuntimeException.class, "cannot cast %s to AngularVelocityMatrix", this.toString());
304         AngularVelocityMatrix result = new AngularVelocityMatrix(this.data, displayUnit.getStandardUnit());
305         result.setDisplayUnit(displayUnit);
306         return result;
307     }
308 
309     /**
310      * Return the current matrix as a area matrix.
311      * @return AreaMatrix; the current matrix as a area matrix
312      */
313     public final AreaMatrix asArea()
314     {
315         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AreaUnit.BASE.getSiDimensions())),
316                 UnitRuntimeException.class, "cannot cast %s to AreaMatrix", this.toString());
317         return new AreaMatrix(this.data, AreaUnit.SI);
318     }
319 
320     /**
321      * Return the current matrix as a area matrix, and provide a display unit.
322      * @param displayUnit the unit in which the value will be displayed
323      * @return AreaMatrix; the current matrix as a area matrix
324      */
325     public final AreaMatrix asArea(final AreaUnit displayUnit)
326     {
327         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AreaUnit.BASE.getSiDimensions())),
328                 UnitRuntimeException.class, "cannot cast %s to AreaMatrix", this.toString());
329         AreaMatrix result = new AreaMatrix(this.data, displayUnit.getStandardUnit());
330         result.setDisplayUnit(displayUnit);
331         return result;
332     }
333 
334     /**
335      * Return the current matrix as a catalyticactivity matrix.
336      * @return CatalyticActivityMatrix; the current matrix as a catalyticactivity matrix
337      */
338     public final CatalyticActivityMatrix asCatalyticActivity()
339     {
340         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(CatalyticActivityUnit.BASE.getSiDimensions())),
341                 UnitRuntimeException.class, "cannot cast %s to CatalyticActivityMatrix", this.toString());
342         return new CatalyticActivityMatrix(this.data, CatalyticActivityUnit.SI);
343     }
344 
345     /**
346      * Return the current matrix as a catalyticactivity matrix, and provide a display unit.
347      * @param displayUnit the unit in which the value will be displayed
348      * @return CatalyticActivityMatrix; the current matrix as a catalyticactivity matrix
349      */
350     public final CatalyticActivityMatrix asCatalyticActivity(final CatalyticActivityUnit displayUnit)
351     {
352         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(CatalyticActivityUnit.BASE.getSiDimensions())),
353                 UnitRuntimeException.class, "cannot cast %s to CatalyticActivityMatrix", this.toString());
354         CatalyticActivityMatrix result = new CatalyticActivityMatrix(this.data, displayUnit.getStandardUnit());
355         result.setDisplayUnit(displayUnit);
356         return result;
357     }
358 
359     /**
360      * Return the current matrix as a density matrix.
361      * @return DensityMatrix; the current matrix as a density matrix
362      */
363     public final DensityMatrix asDensity()
364     {
365         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(DensityUnit.BASE.getSiDimensions())),
366                 UnitRuntimeException.class, "cannot cast %s to DensityMatrix", this.toString());
367         return new DensityMatrix(this.data, DensityUnit.SI);
368     }
369 
370     /**
371      * Return the current matrix as a density matrix, and provide a display unit.
372      * @param displayUnit the unit in which the value will be displayed
373      * @return DensityMatrix; the current matrix as a density matrix
374      */
375     public final DensityMatrix asDensity(final DensityUnit displayUnit)
376     {
377         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(DensityUnit.BASE.getSiDimensions())),
378                 UnitRuntimeException.class, "cannot cast %s to DensityMatrix", this.toString());
379         DensityMatrix result = new DensityMatrix(this.data, displayUnit.getStandardUnit());
380         result.setDisplayUnit(displayUnit);
381         return result;
382     }
383 
384     /**
385      * Return the current matrix as a dimensionless matrix.
386      * @return DimensionlessMatrix; the current matrix as a dimensionless matrix
387      */
388     public final DimensionlessMatrix asDimensionless()
389     {
390         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(DimensionlessUnit.BASE.getSiDimensions())),
391                 UnitRuntimeException.class, "cannot cast %s to DimensionlessMatrix", this.toString());
392         return new DimensionlessMatrix(this.data, DimensionlessUnit.SI);
393     }
394 
395     /**
396      * Return the current matrix as a dimensionless matrix, and provide a display unit.
397      * @param displayUnit the unit in which the value will be displayed
398      * @return DimensionlessMatrix; the current matrix as a dimensionless matrix
399      */
400     public final DimensionlessMatrix asDimensionless(final DimensionlessUnit displayUnit)
401     {
402         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(DimensionlessUnit.BASE.getSiDimensions())),
403                 UnitRuntimeException.class, "cannot cast %s to DimensionlessMatrix", this.toString());
404         DimensionlessMatrix result = new DimensionlessMatrix(this.data, displayUnit.getStandardUnit());
405         result.setDisplayUnit(displayUnit);
406         return result;
407     }
408 
409     /**
410      * Return the current matrix as a electricalcapacitance matrix.
411      * @return ElectricalCapacitanceMatrix; the current matrix as a electricalcapacitance matrix
412      */
413     public final ElectricalCapacitanceMatrix asElectricalCapacitance()
414     {
415         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalCapacitanceUnit.BASE.getSiDimensions())),
416                 UnitRuntimeException.class, "cannot cast %s to ElectricalCapacitanceMatrix", this.toString());
417         return new ElectricalCapacitanceMatrix(this.data, ElectricalCapacitanceUnit.SI);
418     }
419 
420     /**
421      * Return the current matrix as a electricalcapacitance matrix, and provide a display unit.
422      * @param displayUnit the unit in which the value will be displayed
423      * @return ElectricalCapacitanceMatrix; the current matrix as a electricalcapacitance matrix
424      */
425     public final ElectricalCapacitanceMatrix asElectricalCapacitance(final ElectricalCapacitanceUnit displayUnit)
426     {
427         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalCapacitanceUnit.BASE.getSiDimensions())),
428                 UnitRuntimeException.class, "cannot cast %s to ElectricalCapacitanceMatrix", this.toString());
429         ElectricalCapacitanceMatrix result = new ElectricalCapacitanceMatrix(this.data, displayUnit.getStandardUnit());
430         result.setDisplayUnit(displayUnit);
431         return result;
432     }
433 
434     /**
435      * Return the current matrix as a electricalcharge matrix.
436      * @return ElectricalChargeMatrix; the current matrix as a electricalcharge matrix
437      */
438     public final ElectricalChargeMatrix asElectricalCharge()
439     {
440         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalChargeUnit.BASE.getSiDimensions())),
441                 UnitRuntimeException.class, "cannot cast %s to ElectricalChargeMatrix", this.toString());
442         return new ElectricalChargeMatrix(this.data, ElectricalChargeUnit.SI);
443     }
444 
445     /**
446      * Return the current matrix as a electricalcharge matrix, and provide a display unit.
447      * @param displayUnit the unit in which the value will be displayed
448      * @return ElectricalChargeMatrix; the current matrix as a electricalcharge matrix
449      */
450     public final ElectricalChargeMatrix asElectricalCharge(final ElectricalChargeUnit displayUnit)
451     {
452         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalChargeUnit.BASE.getSiDimensions())),
453                 UnitRuntimeException.class, "cannot cast %s to ElectricalChargeMatrix", this.toString());
454         ElectricalChargeMatrix result = new ElectricalChargeMatrix(this.data, displayUnit.getStandardUnit());
455         result.setDisplayUnit(displayUnit);
456         return result;
457     }
458 
459     /**
460      * Return the current matrix as a electricalconductance matrix.
461      * @return ElectricalConductanceMatrix; the current matrix as a electricalconductance matrix
462      */
463     public final ElectricalConductanceMatrix asElectricalConductance()
464     {
465         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalConductanceUnit.BASE.getSiDimensions())),
466                 UnitRuntimeException.class, "cannot cast %s to ElectricalConductanceMatrix", this.toString());
467         return new ElectricalConductanceMatrix(this.data, ElectricalConductanceUnit.SI);
468     }
469 
470     /**
471      * Return the current matrix as a electricalconductance matrix, and provide a display unit.
472      * @param displayUnit the unit in which the value will be displayed
473      * @return ElectricalConductanceMatrix; the current matrix as a electricalconductance matrix
474      */
475     public final ElectricalConductanceMatrix asElectricalConductance(final ElectricalConductanceUnit displayUnit)
476     {
477         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalConductanceUnit.BASE.getSiDimensions())),
478                 UnitRuntimeException.class, "cannot cast %s to ElectricalConductanceMatrix", this.toString());
479         ElectricalConductanceMatrix result = new ElectricalConductanceMatrix(this.data, displayUnit.getStandardUnit());
480         result.setDisplayUnit(displayUnit);
481         return result;
482     }
483 
484     /**
485      * Return the current matrix as a electricalcurrent matrix.
486      * @return ElectricalCurrentMatrix; the current matrix as a electricalcurrent matrix
487      */
488     public final ElectricalCurrentMatrix asElectricalCurrent()
489     {
490         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalCurrentUnit.BASE.getSiDimensions())),
491                 UnitRuntimeException.class, "cannot cast %s to ElectricalCurrentMatrix", this.toString());
492         return new ElectricalCurrentMatrix(this.data, ElectricalCurrentUnit.SI);
493     }
494 
495     /**
496      * Return the current matrix as a electricalcurrent matrix, and provide a display unit.
497      * @param displayUnit the unit in which the value will be displayed
498      * @return ElectricalCurrentMatrix; the current matrix as a electricalcurrent matrix
499      */
500     public final ElectricalCurrentMatrix asElectricalCurrent(final ElectricalCurrentUnit displayUnit)
501     {
502         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalCurrentUnit.BASE.getSiDimensions())),
503                 UnitRuntimeException.class, "cannot cast %s to ElectricalCurrentMatrix", this.toString());
504         ElectricalCurrentMatrix result = new ElectricalCurrentMatrix(this.data, displayUnit.getStandardUnit());
505         result.setDisplayUnit(displayUnit);
506         return result;
507     }
508 
509     /**
510      * Return the current matrix as a electricalinductance matrix.
511      * @return ElectricalInductanceMatrix; the current matrix as a electricalinductance matrix
512      */
513     public final ElectricalInductanceMatrix asElectricalInductance()
514     {
515         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalInductanceUnit.BASE.getSiDimensions())),
516                 UnitRuntimeException.class, "cannot cast %s to ElectricalInductanceMatrix", this.toString());
517         return new ElectricalInductanceMatrix(this.data, ElectricalInductanceUnit.SI);
518     }
519 
520     /**
521      * Return the current matrix as a electricalinductance matrix, and provide a display unit.
522      * @param displayUnit the unit in which the value will be displayed
523      * @return ElectricalInductanceMatrix; the current matrix as a electricalinductance matrix
524      */
525     public final ElectricalInductanceMatrix asElectricalInductance(final ElectricalInductanceUnit displayUnit)
526     {
527         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalInductanceUnit.BASE.getSiDimensions())),
528                 UnitRuntimeException.class, "cannot cast %s to ElectricalInductanceMatrix", this.toString());
529         ElectricalInductanceMatrix result = new ElectricalInductanceMatrix(this.data, displayUnit.getStandardUnit());
530         result.setDisplayUnit(displayUnit);
531         return result;
532     }
533 
534     /**
535      * Return the current matrix as a electricalpotential matrix.
536      * @return ElectricalPotentialMatrix; the current matrix as a electricalpotential matrix
537      */
538     public final ElectricalPotentialMatrix asElectricalPotential()
539     {
540         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalPotentialUnit.BASE.getSiDimensions())),
541                 UnitRuntimeException.class, "cannot cast %s to ElectricalPotentialMatrix", this.toString());
542         return new ElectricalPotentialMatrix(this.data, ElectricalPotentialUnit.SI);
543     }
544 
545     /**
546      * Return the current matrix as a electricalpotential matrix, and provide a display unit.
547      * @param displayUnit the unit in which the value will be displayed
548      * @return ElectricalPotentialMatrix; the current matrix as a electricalpotential matrix
549      */
550     public final ElectricalPotentialMatrix asElectricalPotential(final ElectricalPotentialUnit displayUnit)
551     {
552         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalPotentialUnit.BASE.getSiDimensions())),
553                 UnitRuntimeException.class, "cannot cast %s to ElectricalPotentialMatrix", this.toString());
554         ElectricalPotentialMatrix result = new ElectricalPotentialMatrix(this.data, displayUnit.getStandardUnit());
555         result.setDisplayUnit(displayUnit);
556         return result;
557     }
558 
559     /**
560      * Return the current matrix as a electricalresistance matrix.
561      * @return ElectricalResistanceMatrix; the current matrix as a electricalresistance matrix
562      */
563     public final ElectricalResistanceMatrix asElectricalResistance()
564     {
565         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalResistanceUnit.BASE.getSiDimensions())),
566                 UnitRuntimeException.class, "cannot cast %s to ElectricalResistanceMatrix", this.toString());
567         return new ElectricalResistanceMatrix(this.data, ElectricalResistanceUnit.SI);
568     }
569 
570     /**
571      * Return the current matrix as a electricalresistance matrix, and provide a display unit.
572      * @param displayUnit the unit in which the value will be displayed
573      * @return ElectricalResistanceMatrix; the current matrix as a electricalresistance matrix
574      */
575     public final ElectricalResistanceMatrix asElectricalResistance(final ElectricalResistanceUnit displayUnit)
576     {
577         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalResistanceUnit.BASE.getSiDimensions())),
578                 UnitRuntimeException.class, "cannot cast %s to ElectricalResistanceMatrix", this.toString());
579         ElectricalResistanceMatrix result = new ElectricalResistanceMatrix(this.data, displayUnit.getStandardUnit());
580         result.setDisplayUnit(displayUnit);
581         return result;
582     }
583 
584     /**
585      * Return the current matrix as a energy matrix.
586      * @return EnergyMatrix; the current matrix as a energy matrix
587      */
588     public final EnergyMatrix asEnergy()
589     {
590         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(EnergyUnit.BASE.getSiDimensions())),
591                 UnitRuntimeException.class, "cannot cast %s to EnergyMatrix", this.toString());
592         return new EnergyMatrix(this.data, EnergyUnit.SI);
593     }
594 
595     /**
596      * Return the current matrix as a energy matrix, and provide a display unit.
597      * @param displayUnit the unit in which the value will be displayed
598      * @return EnergyMatrix; the current matrix as a energy matrix
599      */
600     public final EnergyMatrix asEnergy(final EnergyUnit displayUnit)
601     {
602         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(EnergyUnit.BASE.getSiDimensions())),
603                 UnitRuntimeException.class, "cannot cast %s to EnergyMatrix", this.toString());
604         EnergyMatrix result = new EnergyMatrix(this.data, displayUnit.getStandardUnit());
605         result.setDisplayUnit(displayUnit);
606         return result;
607     }
608 
609     /**
610      * Return the current matrix as a equivalentdose matrix.
611      * @return EquivalentDoseMatrix; the current matrix as a equivalentdose matrix
612      */
613     public final EquivalentDoseMatrix asEquivalentDose()
614     {
615         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(EquivalentDoseUnit.BASE.getSiDimensions())),
616                 UnitRuntimeException.class, "cannot cast %s to EquivalentDoseMatrix", this.toString());
617         return new EquivalentDoseMatrix(this.data, EquivalentDoseUnit.SI);
618     }
619 
620     /**
621      * Return the current matrix as a equivalentdose matrix, and provide a display unit.
622      * @param displayUnit the unit in which the value will be displayed
623      * @return EquivalentDoseMatrix; the current matrix as a equivalentdose matrix
624      */
625     public final EquivalentDoseMatrix asEquivalentDose(final EquivalentDoseUnit displayUnit)
626     {
627         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(EquivalentDoseUnit.BASE.getSiDimensions())),
628                 UnitRuntimeException.class, "cannot cast %s to EquivalentDoseMatrix", this.toString());
629         EquivalentDoseMatrix result = new EquivalentDoseMatrix(this.data, displayUnit.getStandardUnit());
630         result.setDisplayUnit(displayUnit);
631         return result;
632     }
633 
634     /**
635      * Return the current matrix as a flowmass matrix.
636      * @return FlowMassMatrix; the current matrix as a flowmass matrix
637      */
638     public final FlowMassMatrix asFlowMass()
639     {
640         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(FlowMassUnit.BASE.getSiDimensions())),
641                 UnitRuntimeException.class, "cannot cast %s to FlowMassMatrix", this.toString());
642         return new FlowMassMatrix(this.data, FlowMassUnit.SI);
643     }
644 
645     /**
646      * Return the current matrix as a flowmass matrix, and provide a display unit.
647      * @param displayUnit the unit in which the value will be displayed
648      * @return FlowMassMatrix; the current matrix as a flowmass matrix
649      */
650     public final FlowMassMatrix asFlowMass(final FlowMassUnit displayUnit)
651     {
652         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(FlowMassUnit.BASE.getSiDimensions())),
653                 UnitRuntimeException.class, "cannot cast %s to FlowMassMatrix", this.toString());
654         FlowMassMatrix result = new FlowMassMatrix(this.data, displayUnit.getStandardUnit());
655         result.setDisplayUnit(displayUnit);
656         return result;
657     }
658 
659     /**
660      * Return the current matrix as a flowvolume matrix.
661      * @return FlowVolumeMatrix; the current matrix as a flowvolume matrix
662      */
663     public final FlowVolumeMatrix asFlowVolume()
664     {
665         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(FlowVolumeUnit.BASE.getSiDimensions())),
666                 UnitRuntimeException.class, "cannot cast %s to FlowVolumeMatrix", this.toString());
667         return new FlowVolumeMatrix(this.data, FlowVolumeUnit.SI);
668     }
669 
670     /**
671      * Return the current matrix as a flowvolume matrix, and provide a display unit.
672      * @param displayUnit the unit in which the value will be displayed
673      * @return FlowVolumeMatrix; the current matrix as a flowvolume matrix
674      */
675     public final FlowVolumeMatrix asFlowVolume(final FlowVolumeUnit displayUnit)
676     {
677         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(FlowVolumeUnit.BASE.getSiDimensions())),
678                 UnitRuntimeException.class, "cannot cast %s to FlowVolumeMatrix", this.toString());
679         FlowVolumeMatrix result = new FlowVolumeMatrix(this.data, displayUnit.getStandardUnit());
680         result.setDisplayUnit(displayUnit);
681         return result;
682     }
683 
684     /**
685      * Return the current matrix as a force matrix.
686      * @return ForceMatrix; the current matrix as a force matrix
687      */
688     public final ForceMatrix asForce()
689     {
690         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ForceUnit.BASE.getSiDimensions())),
691                 UnitRuntimeException.class, "cannot cast %s to ForceMatrix", this.toString());
692         return new ForceMatrix(this.data, ForceUnit.SI);
693     }
694 
695     /**
696      * Return the current matrix as a force matrix, and provide a display unit.
697      * @param displayUnit the unit in which the value will be displayed
698      * @return ForceMatrix; the current matrix as a force matrix
699      */
700     public final ForceMatrix asForce(final ForceUnit displayUnit)
701     {
702         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ForceUnit.BASE.getSiDimensions())),
703                 UnitRuntimeException.class, "cannot cast %s to ForceMatrix", this.toString());
704         ForceMatrix result = new ForceMatrix(this.data, displayUnit.getStandardUnit());
705         result.setDisplayUnit(displayUnit);
706         return result;
707     }
708 
709     /**
710      * Return the current matrix as a frequency matrix.
711      * @return FrequencyMatrix; the current matrix as a frequency matrix
712      */
713     public final FrequencyMatrix asFrequency()
714     {
715         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(FrequencyUnit.BASE.getSiDimensions())),
716                 UnitRuntimeException.class, "cannot cast %s to FrequencyMatrix", this.toString());
717         return new FrequencyMatrix(this.data, FrequencyUnit.SI);
718     }
719 
720     /**
721      * Return the current matrix as a frequency matrix, and provide a display unit.
722      * @param displayUnit the unit in which the value will be displayed
723      * @return FrequencyMatrix; the current matrix as a frequency matrix
724      */
725     public final FrequencyMatrix asFrequency(final FrequencyUnit displayUnit)
726     {
727         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(FrequencyUnit.BASE.getSiDimensions())),
728                 UnitRuntimeException.class, "cannot cast %s to FrequencyMatrix", this.toString());
729         FrequencyMatrix result = new FrequencyMatrix(this.data, displayUnit.getStandardUnit());
730         result.setDisplayUnit(displayUnit);
731         return result;
732     }
733 
734     /**
735      * Return the current matrix as a illuminance matrix.
736      * @return IlluminanceMatrix; the current matrix as a illuminance matrix
737      */
738     public final IlluminanceMatrix asIlluminance()
739     {
740         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(IlluminanceUnit.BASE.getSiDimensions())),
741                 UnitRuntimeException.class, "cannot cast %s to IlluminanceMatrix", this.toString());
742         return new IlluminanceMatrix(this.data, IlluminanceUnit.SI);
743     }
744 
745     /**
746      * Return the current matrix as a illuminance matrix, and provide a display unit.
747      * @param displayUnit the unit in which the value will be displayed
748      * @return IlluminanceMatrix; the current matrix as a illuminance matrix
749      */
750     public final IlluminanceMatrix asIlluminance(final IlluminanceUnit displayUnit)
751     {
752         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(IlluminanceUnit.BASE.getSiDimensions())),
753                 UnitRuntimeException.class, "cannot cast %s to IlluminanceMatrix", this.toString());
754         IlluminanceMatrix result = new IlluminanceMatrix(this.data, displayUnit.getStandardUnit());
755         result.setDisplayUnit(displayUnit);
756         return result;
757     }
758 
759     /**
760      * Return the current matrix as a lineardensity matrix.
761      * @return LinearDensityMatrix; the current matrix as a lineardensity matrix
762      */
763     public final LinearDensityMatrix asLinearDensity()
764     {
765         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(LinearDensityUnit.BASE.getSiDimensions())),
766                 UnitRuntimeException.class, "cannot cast %s to LinearDensityMatrix", this.toString());
767         return new LinearDensityMatrix(this.data, LinearDensityUnit.SI);
768     }
769 
770     /**
771      * Return the current matrix as a lineardensity matrix, and provide a display unit.
772      * @param displayUnit the unit in which the value will be displayed
773      * @return LinearDensityMatrix; the current matrix as a lineardensity matrix
774      */
775     public final LinearDensityMatrix asLinearDensity(final LinearDensityUnit displayUnit)
776     {
777         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(LinearDensityUnit.BASE.getSiDimensions())),
778                 UnitRuntimeException.class, "cannot cast %s to LinearDensityMatrix", this.toString());
779         LinearDensityMatrix result = new LinearDensityMatrix(this.data, displayUnit.getStandardUnit());
780         result.setDisplayUnit(displayUnit);
781         return result;
782     }
783 
784     /**
785      * Return the current matrix as a luminousflux matrix.
786      * @return LuminousFluxMatrix; the current matrix as a luminousflux matrix
787      */
788     public final LuminousFluxMatrix asLuminousFlux()
789     {
790         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(LuminousFluxUnit.BASE.getSiDimensions())),
791                 UnitRuntimeException.class, "cannot cast %s to LuminousFluxMatrix", this.toString());
792         return new LuminousFluxMatrix(this.data, LuminousFluxUnit.SI);
793     }
794 
795     /**
796      * Return the current matrix as a luminousflux matrix, and provide a display unit.
797      * @param displayUnit the unit in which the value will be displayed
798      * @return LuminousFluxMatrix; the current matrix as a luminousflux matrix
799      */
800     public final LuminousFluxMatrix asLuminousFlux(final LuminousFluxUnit displayUnit)
801     {
802         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(LuminousFluxUnit.BASE.getSiDimensions())),
803                 UnitRuntimeException.class, "cannot cast %s to LuminousFluxMatrix", this.toString());
804         LuminousFluxMatrix result = new LuminousFluxMatrix(this.data, displayUnit.getStandardUnit());
805         result.setDisplayUnit(displayUnit);
806         return result;
807     }
808 
809     /**
810      * Return the current matrix as a luminousintensity matrix.
811      * @return LuminousIntensityMatrix; the current matrix as a luminousintensity matrix
812      */
813     public final LuminousIntensityMatrix asLuminousIntensity()
814     {
815         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(LuminousIntensityUnit.BASE.getSiDimensions())),
816                 UnitRuntimeException.class, "cannot cast %s to LuminousIntensityMatrix", this.toString());
817         return new LuminousIntensityMatrix(this.data, LuminousIntensityUnit.SI);
818     }
819 
820     /**
821      * Return the current matrix as a luminousintensity matrix, and provide a display unit.
822      * @param displayUnit the unit in which the value will be displayed
823      * @return LuminousIntensityMatrix; the current matrix as a luminousintensity matrix
824      */
825     public final LuminousIntensityMatrix asLuminousIntensity(final LuminousIntensityUnit displayUnit)
826     {
827         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(LuminousIntensityUnit.BASE.getSiDimensions())),
828                 UnitRuntimeException.class, "cannot cast %s to LuminousIntensityMatrix", this.toString());
829         LuminousIntensityMatrix result = new LuminousIntensityMatrix(this.data, displayUnit.getStandardUnit());
830         result.setDisplayUnit(displayUnit);
831         return result;
832     }
833 
834     /**
835      * Return the current matrix as a magneticfluxdensity matrix.
836      * @return MagneticFluxDensityMatrix; the current matrix as a magneticfluxdensity matrix
837      */
838     public final MagneticFluxDensityMatrix asMagneticFluxDensity()
839     {
840         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(MagneticFluxDensityUnit.BASE.getSiDimensions())),
841                 UnitRuntimeException.class, "cannot cast %s to MagneticFluxDensityMatrix", this.toString());
842         return new MagneticFluxDensityMatrix(this.data, MagneticFluxDensityUnit.SI);
843     }
844 
845     /**
846      * Return the current matrix as a magneticfluxdensity matrix, and provide a display unit.
847      * @param displayUnit the unit in which the value will be displayed
848      * @return MagneticFluxDensityMatrix; the current matrix as a magneticfluxdensity matrix
849      */
850     public final MagneticFluxDensityMatrix asMagneticFluxDensity(final MagneticFluxDensityUnit displayUnit)
851     {
852         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(MagneticFluxDensityUnit.BASE.getSiDimensions())),
853                 UnitRuntimeException.class, "cannot cast %s to MagneticFluxDensityMatrix", this.toString());
854         MagneticFluxDensityMatrix result = new MagneticFluxDensityMatrix(this.data, displayUnit.getStandardUnit());
855         result.setDisplayUnit(displayUnit);
856         return result;
857     }
858 
859     /**
860      * Return the current matrix as a magneticflux matrix.
861      * @return MagneticFluxMatrix; the current matrix as a magneticflux matrix
862      */
863     public final MagneticFluxMatrix asMagneticFlux()
864     {
865         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(MagneticFluxUnit.BASE.getSiDimensions())),
866                 UnitRuntimeException.class, "cannot cast %s to MagneticFluxMatrix", this.toString());
867         return new MagneticFluxMatrix(this.data, MagneticFluxUnit.SI);
868     }
869 
870     /**
871      * Return the current matrix as a magneticflux matrix, and provide a display unit.
872      * @param displayUnit the unit in which the value will be displayed
873      * @return MagneticFluxMatrix; the current matrix as a magneticflux matrix
874      */
875     public final MagneticFluxMatrix asMagneticFlux(final MagneticFluxUnit displayUnit)
876     {
877         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(MagneticFluxUnit.BASE.getSiDimensions())),
878                 UnitRuntimeException.class, "cannot cast %s to MagneticFluxMatrix", this.toString());
879         MagneticFluxMatrix result = new MagneticFluxMatrix(this.data, displayUnit.getStandardUnit());
880         result.setDisplayUnit(displayUnit);
881         return result;
882     }
883 
884     /**
885      * Return the current matrix as a mass matrix.
886      * @return MassMatrix; the current matrix as a mass matrix
887      */
888     public final MassMatrix asMass()
889     {
890         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(MassUnit.BASE.getSiDimensions())),
891                 UnitRuntimeException.class, "cannot cast %s to MassMatrix", this.toString());
892         return new MassMatrix(this.data, MassUnit.SI);
893     }
894 
895     /**
896      * Return the current matrix as a mass matrix, and provide a display unit.
897      * @param displayUnit the unit in which the value will be displayed
898      * @return MassMatrix; the current matrix as a mass matrix
899      */
900     public final MassMatrix asMass(final MassUnit displayUnit)
901     {
902         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(MassUnit.BASE.getSiDimensions())),
903                 UnitRuntimeException.class, "cannot cast %s to MassMatrix", this.toString());
904         MassMatrix result = new MassMatrix(this.data, displayUnit.getStandardUnit());
905         result.setDisplayUnit(displayUnit);
906         return result;
907     }
908 
909     /**
910      * Return the current matrix as a momentum matrix.
911      * @return MomentumMatrix; the current matrix as a momentum matrix
912      */
913     public final MomentumMatrix asMomentum()
914     {
915         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(MomentumUnit.BASE.getSiDimensions())),
916                 UnitRuntimeException.class, "cannot cast %s to MomentumMatrix", this.toString());
917         return new MomentumMatrix(this.data, MomentumUnit.SI);
918     }
919 
920     /**
921      * Return the current matrix as a momentum matrix, and provide a display unit.
922      * @param displayUnit the unit in which the value will be displayed
923      * @return MomentumMatrix; the current matrix as a momentum matrix
924      */
925     public final MomentumMatrix asMomentum(final MomentumUnit displayUnit)
926     {
927         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(MomentumUnit.BASE.getSiDimensions())),
928                 UnitRuntimeException.class, "cannot cast %s to MomentumMatrix", this.toString());
929         MomentumMatrix result = new MomentumMatrix(this.data, displayUnit.getStandardUnit());
930         result.setDisplayUnit(displayUnit);
931         return result;
932     }
933 
934     /**
935      * Return the current matrix as a power matrix.
936      * @return PowerMatrix; the current matrix as a power matrix
937      */
938     public final PowerMatrix asPower()
939     {
940         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(PowerUnit.BASE.getSiDimensions())),
941                 UnitRuntimeException.class, "cannot cast %s to PowerMatrix", this.toString());
942         return new PowerMatrix(this.data, PowerUnit.SI);
943     }
944 
945     /**
946      * Return the current matrix as a power matrix, and provide a display unit.
947      * @param displayUnit the unit in which the value will be displayed
948      * @return PowerMatrix; the current matrix as a power matrix
949      */
950     public final PowerMatrix asPower(final PowerUnit displayUnit)
951     {
952         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(PowerUnit.BASE.getSiDimensions())),
953                 UnitRuntimeException.class, "cannot cast %s to PowerMatrix", this.toString());
954         PowerMatrix result = new PowerMatrix(this.data, displayUnit.getStandardUnit());
955         result.setDisplayUnit(displayUnit);
956         return result;
957     }
958 
959     /**
960      * Return the current matrix as a pressure matrix.
961      * @return PressureMatrix; the current matrix as a pressure matrix
962      */
963     public final PressureMatrix asPressure()
964     {
965         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(PressureUnit.BASE.getSiDimensions())),
966                 UnitRuntimeException.class, "cannot cast %s to PressureMatrix", this.toString());
967         return new PressureMatrix(this.data, PressureUnit.SI);
968     }
969 
970     /**
971      * Return the current matrix as a pressure matrix, and provide a display unit.
972      * @param displayUnit the unit in which the value will be displayed
973      * @return PressureMatrix; the current matrix as a pressure matrix
974      */
975     public final PressureMatrix asPressure(final PressureUnit displayUnit)
976     {
977         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(PressureUnit.BASE.getSiDimensions())),
978                 UnitRuntimeException.class, "cannot cast %s to PressureMatrix", this.toString());
979         PressureMatrix result = new PressureMatrix(this.data, displayUnit.getStandardUnit());
980         result.setDisplayUnit(displayUnit);
981         return result;
982     }
983 
984     /**
985      * Return the current matrix as a radioactivity matrix.
986      * @return RadioActivityMatrix; the current matrix as a radioactivity matrix
987      */
988     public final RadioActivityMatrix asRadioActivity()
989     {
990         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(RadioActivityUnit.BASE.getSiDimensions())),
991                 UnitRuntimeException.class, "cannot cast %s to RadioActivityMatrix", this.toString());
992         return new RadioActivityMatrix(this.data, RadioActivityUnit.SI);
993     }
994 
995     /**
996      * Return the current matrix as a radioactivity matrix, and provide a display unit.
997      * @param displayUnit the unit in which the value will be displayed
998      * @return RadioActivityMatrix; the current matrix as a radioactivity matrix
999      */
1000     public final RadioActivityMatrix asRadioActivity(final RadioActivityUnit displayUnit)
1001     {
1002         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(RadioActivityUnit.BASE.getSiDimensions())),
1003                 UnitRuntimeException.class, "cannot cast %s to RadioActivityMatrix", this.toString());
1004         RadioActivityMatrix result = new RadioActivityMatrix(this.data, displayUnit.getStandardUnit());
1005         result.setDisplayUnit(displayUnit);
1006         return result;
1007     }
1008 
1009     /**
1010      * Return the current matrix as a solidangle matrix.
1011      * @return SolidAngleMatrix; the current matrix as a solidangle matrix
1012      */
1013     public final SolidAngleMatrix asSolidAngle()
1014     {
1015         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(SolidAngleUnit.BASE.getSiDimensions())),
1016                 UnitRuntimeException.class, "cannot cast %s to SolidAngleMatrix", this.toString());
1017         return new SolidAngleMatrix(this.data, SolidAngleUnit.SI);
1018     }
1019 
1020     /**
1021      * Return the current matrix as a solidangle matrix, and provide a display unit.
1022      * @param displayUnit the unit in which the value will be displayed
1023      * @return SolidAngleMatrix; the current matrix as a solidangle matrix
1024      */
1025     public final SolidAngleMatrix asSolidAngle(final SolidAngleUnit displayUnit)
1026     {
1027         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(SolidAngleUnit.BASE.getSiDimensions())),
1028                 UnitRuntimeException.class, "cannot cast %s to SolidAngleMatrix", this.toString());
1029         SolidAngleMatrix result = new SolidAngleMatrix(this.data, displayUnit.getStandardUnit());
1030         result.setDisplayUnit(displayUnit);
1031         return result;
1032     }
1033 
1034     /**
1035      * Return the current matrix as a speed matrix.
1036      * @return SpeedMatrix; the current matrix as a speed matrix
1037      */
1038     public final SpeedMatrix asSpeed()
1039     {
1040         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(SpeedUnit.BASE.getSiDimensions())),
1041                 UnitRuntimeException.class, "cannot cast %s to SpeedMatrix", this.toString());
1042         return new SpeedMatrix(this.data, SpeedUnit.SI);
1043     }
1044 
1045     /**
1046      * Return the current matrix as a speed matrix, and provide a display unit.
1047      * @param displayUnit the unit in which the value will be displayed
1048      * @return SpeedMatrix; the current matrix as a speed matrix
1049      */
1050     public final SpeedMatrix asSpeed(final SpeedUnit displayUnit)
1051     {
1052         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(SpeedUnit.BASE.getSiDimensions())),
1053                 UnitRuntimeException.class, "cannot cast %s to SpeedMatrix", this.toString());
1054         SpeedMatrix result = new SpeedMatrix(this.data, displayUnit.getStandardUnit());
1055         result.setDisplayUnit(displayUnit);
1056         return result;
1057     }
1058 
1059     /**
1060      * Return the current matrix as a torque matrix.
1061      * @return TorqueMatrix; the current matrix as a torque matrix
1062      */
1063     public final TorqueMatrix asTorque()
1064     {
1065         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(TorqueUnit.BASE.getSiDimensions())),
1066                 UnitRuntimeException.class, "cannot cast %s to TorqueMatrix", this.toString());
1067         return new TorqueMatrix(this.data, TorqueUnit.SI);
1068     }
1069 
1070     /**
1071      * Return the current matrix as a torque matrix, and provide a display unit.
1072      * @param displayUnit the unit in which the value will be displayed
1073      * @return TorqueMatrix; the current matrix as a torque matrix
1074      */
1075     public final TorqueMatrix asTorque(final TorqueUnit displayUnit)
1076     {
1077         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(TorqueUnit.BASE.getSiDimensions())),
1078                 UnitRuntimeException.class, "cannot cast %s to TorqueMatrix", this.toString());
1079         TorqueMatrix result = new TorqueMatrix(this.data, displayUnit.getStandardUnit());
1080         result.setDisplayUnit(displayUnit);
1081         return result;
1082     }
1083 
1084     /**
1085      * Return the current matrix as a volume matrix.
1086      * @return VolumeMatrix; the current matrix as a volume matrix
1087      */
1088     public final VolumeMatrix asVolume()
1089     {
1090         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(VolumeUnit.BASE.getSiDimensions())),
1091                 UnitRuntimeException.class, "cannot cast %s to VolumeMatrix", this.toString());
1092         return new VolumeMatrix(this.data, VolumeUnit.SI);
1093     }
1094 
1095     /**
1096      * Return the current matrix as a volume matrix, and provide a display unit.
1097      * @param displayUnit the unit in which the value will be displayed
1098      * @return VolumeMatrix; the current matrix as a volume matrix
1099      */
1100     public final VolumeMatrix asVolume(final VolumeUnit displayUnit)
1101     {
1102         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(VolumeUnit.BASE.getSiDimensions())),
1103                 UnitRuntimeException.class, "cannot cast %s to VolumeMatrix", this.toString());
1104         VolumeMatrix result = new VolumeMatrix(this.data, displayUnit.getStandardUnit());
1105         result.setDisplayUnit(displayUnit);
1106         return result;
1107     }
1108 
1109     /**
1110      * Return the current matrix as a angle matrix.
1111      * @return AngleMatrix; the current matrix as a angle matrix
1112      */
1113     public final AngleMatrix asAngle()
1114     {
1115         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AngleUnit.BASE.getSiDimensions())),
1116                 UnitRuntimeException.class, "cannot cast %s to AngleMatrix", this.toString());
1117         return new AngleMatrix(this.data, AngleUnit.SI);
1118     }
1119 
1120     /**
1121      * Return the current matrix as a angle matrix, and provide a display unit.
1122      * @param displayUnit the unit in which the value will be displayed
1123      * @return AngleMatrix; the current matrix as a angle matrix
1124      */
1125     public final AngleMatrix asAngle(final AngleUnit displayUnit)
1126     {
1127         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AngleUnit.BASE.getSiDimensions())),
1128                 UnitRuntimeException.class, "cannot cast %s to AngleMatrix", this.toString());
1129         AngleMatrix result = new AngleMatrix(this.data, displayUnit.getStandardUnit());
1130         result.setDisplayUnit(displayUnit);
1131         return result;
1132     }
1133 
1134     /**
1135      * Return the current matrix as a length matrix.
1136      * @return LengthMatrix; the current matrix as a length matrix
1137      */
1138     public final LengthMatrix asLength()
1139     {
1140         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(LengthUnit.BASE.getSiDimensions())),
1141                 UnitRuntimeException.class, "cannot cast %s to LengthMatrix", this.toString());
1142         return new LengthMatrix(this.data, LengthUnit.SI);
1143     }
1144 
1145     /**
1146      * Return the current matrix as a length matrix, and provide a display unit.
1147      * @param displayUnit the unit in which the value will be displayed
1148      * @return LengthMatrix; the current matrix as a length matrix
1149      */
1150     public final LengthMatrix asLength(final LengthUnit displayUnit)
1151     {
1152         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(LengthUnit.BASE.getSiDimensions())),
1153                 UnitRuntimeException.class, "cannot cast %s to LengthMatrix", this.toString());
1154         LengthMatrix result = new LengthMatrix(this.data, displayUnit.getStandardUnit());
1155         result.setDisplayUnit(displayUnit);
1156         return result;
1157     }
1158 
1159     /**
1160      * Return the current matrix as a temperature matrix.
1161      * @return TemperatureMatrix; the current matrix as a temperature matrix
1162      */
1163     public final TemperatureMatrix asTemperature()
1164     {
1165         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(TemperatureUnit.BASE.getSiDimensions())),
1166                 UnitRuntimeException.class, "cannot cast %s to TemperatureMatrix", this.toString());
1167         return new TemperatureMatrix(this.data, TemperatureUnit.SI);
1168     }
1169 
1170     /**
1171      * Return the current matrix as a temperature matrix, and provide a display unit.
1172      * @param displayUnit the unit in which the value will be displayed
1173      * @return TemperatureMatrix; the current matrix as a temperature matrix
1174      */
1175     public final TemperatureMatrix asTemperature(final TemperatureUnit displayUnit)
1176     {
1177         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(TemperatureUnit.BASE.getSiDimensions())),
1178                 UnitRuntimeException.class, "cannot cast %s to TemperatureMatrix", this.toString());
1179         TemperatureMatrix result = new TemperatureMatrix(this.data, displayUnit.getStandardUnit());
1180         result.setDisplayUnit(displayUnit);
1181         return result;
1182     }
1183 
1184     /**
1185      * Return the current matrix as a duration matrix.
1186      * @return DurationMatrix; the current matrix as a duration matrix
1187      */
1188     public final DurationMatrix asDuration()
1189     {
1190         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(DurationUnit.BASE.getSiDimensions())),
1191                 UnitRuntimeException.class, "cannot cast %s to DurationMatrix", this.toString());
1192         return new DurationMatrix(this.data, DurationUnit.SI);
1193     }
1194 
1195     /**
1196      * Return the current matrix as a duration matrix, and provide a display unit.
1197      * @param displayUnit the unit in which the value will be displayed
1198      * @return DurationMatrix; the current matrix as a duration matrix
1199      */
1200     public final DurationMatrix asDuration(final DurationUnit displayUnit)
1201     {
1202         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(DurationUnit.BASE.getSiDimensions())),
1203                 UnitRuntimeException.class, "cannot cast %s to DurationMatrix", this.toString());
1204         DurationMatrix result = new DurationMatrix(this.data, displayUnit.getStandardUnit());
1205         result.setDisplayUnit(displayUnit);
1206         return result;
1207     }
1208 
1209 }