Skip to content

Unit

jax_lab.core.unit.Unit

Convert quantities between LBM (lattice) units and SI units.

The conversion is defined by four independent scale factors (mass, length, time and temperature), each expressed as SI units per lattice unit. All derived quantities (density, velocity, pressure, force, viscosity) are converted using combinations of these factors. Conversion methods accept scalars, JAX/numpy arrays or pytrees of arrays, so both single phase fields and multiphase/multicomponent field trees (as used by the Multiphase class) are supported. The temperature scale is only relevant for thermal flows; isothermal flows can leave it at its default.

Parameters

lbm_mass (float, optional): Mass of one lattice mass unit in kg. Defaults to 1.0.

lbm_length (float, optional): Length of one lattice spacing in m. Defaults to 1.0.

lbm_time (float, optional): Duration of one lattice time step in s. Defaults to 1.0.

lbm_temperature (float, optional): Temperature of one lattice temperature unit in K. Defaults to 1.0.

Source code in jax_lab/core/unit.py
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
class Unit:
    """
    Convert quantities between LBM (lattice) units and SI units.

    The conversion is defined by four independent scale factors (mass, length, time and temperature), each expressed as SI units per lattice unit. All derived quantities
    (density, velocity, pressure, force, viscosity) are converted using combinations of these factors. Conversion methods accept scalars, JAX/numpy arrays or pytrees of
    arrays, so both single phase fields and multiphase/multicomponent field trees (as used by the Multiphase class) are supported. The temperature scale is only relevant
    for thermal flows; isothermal flows can leave it at its default.

    Parameters
    ----------
    lbm_mass (float, optional): Mass of one lattice mass unit in kg. Defaults to 1.0.

    lbm_length (float, optional): Length of one lattice spacing in m. Defaults to 1.0.

    lbm_time (float, optional): Duration of one lattice time step in s. Defaults to 1.0.

    lbm_temperature (float, optional): Temperature of one lattice temperature unit in K. Defaults to 1.0.
    """

    def __init__(self, **kwargs):
        # LBM -> Physical scaling parameters; the Physical -> LBM parameters (si_mass,
        # si_length, si_time, si_temperature) are exposed as computed properties so they
        # can never go stale when a scale is updated.
        self.lbm_mass = kwargs.get("lbm_mass", 1.0)
        self.lbm_length = kwargs.get("lbm_length", 1.0)
        self.lbm_time = kwargs.get("lbm_time", 1.0)
        self.lbm_temperature = kwargs.get("lbm_temperature", 1.0)

    @property
    def lbm_mass(self):
        return self._lbm_mass

    @lbm_mass.setter
    def lbm_mass(self, value):
        if value <= 0:
            raise ValueError("lbm mass scale must be positive.")
        self._lbm_mass = value

    @property
    def lbm_length(self):
        return self._lbm_length

    @lbm_length.setter
    def lbm_length(self, value):
        if value <= 0:
            raise ValueError("lbm length scale must be positive.")
        self._lbm_length = value

    @property
    def lbm_time(self):
        return self._lbm_time

    @lbm_time.setter
    def lbm_time(self, value):
        if value <= 0:
            raise ValueError("lbm time scale must be positive.")
        self._lbm_time = value

    @property
    def lbm_temperature(self):
        return self._lbm_temperature

    @lbm_temperature.setter
    def lbm_temperature(self, value):
        if value <= 0:
            raise ValueError("lbm temperature scale must be positive.")
        self._lbm_temperature = value

    @property
    def si_mass(self):
        return 1.0 / self.lbm_mass

    @property
    def si_length(self):
        return 1.0 / self.lbm_length

    @property
    def si_time(self):
        return 1.0 / self.lbm_time

    @property
    def si_temperature(self):
        return 1.0 / self.lbm_temperature

    def _scale(self, value, factor):
        """
        Multiply a scalar, array or pytree of arrays by a scalar conversion factor.

        Parameters
        ----------
        value (float or jax.Array or pytree of jax.Array): Quantity to be scaled.

        factor (float): Conversion factor.

        Returns
        -------
        float or jax.Array or pytree of jax.Array
            Scaled quantity with the same structure as value.
        """
        return tree_map(lambda leaf: leaf * factor, value)

    def to_si_length(self, value):
        """
        Convert a length from LBM units to SI units (m).

        Parameters
        ----------
        value (float or jax.Array or pytree of jax.Array): Length in LBM units.

        Returns
        -------
        float or jax.Array or pytree of jax.Array
            Length in SI units.
        """
        return self._scale(value, self.lbm_length)

    def to_lbm_length(self, value):
        """
        Convert a length from SI units (m) to LBM units.

        Parameters
        ----------
        value (float or jax.Array or pytree of jax.Array): Length in SI units.

        Returns
        -------
        float or jax.Array or pytree of jax.Array
            Length in LBM units.
        """
        return self._scale(value, 1.0 / self.lbm_length)

    def to_si_time(self, value):
        """
        Convert a time from LBM units to SI units (s).

        Parameters
        ----------
        value (float or jax.Array or pytree of jax.Array): Time in LBM units.

        Returns
        -------
        float or jax.Array or pytree of jax.Array
            Time in SI units.
        """
        return self._scale(value, self.lbm_time)

    def to_lbm_time(self, value):
        """
        Convert a time from SI units (s) to LBM units.

        Parameters
        ----------
        value (float or jax.Array or pytree of jax.Array): Time in SI units.

        Returns
        -------
        float or jax.Array or pytree of jax.Array
            Time in LBM units.
        """
        return self._scale(value, 1.0 / self.lbm_time)

    def to_si_density(self, value):
        """
        Convert a density field from LBM units to SI units (kg/m^3).

        Parameters
        ----------
        value (float or jax.Array or pytree of jax.Array): Density field in LBM units; a pytree for multiphase flows.

        Returns
        -------
        float or jax.Array or pytree of jax.Array
            Density field in SI units.
        """
        return self._scale(value, self.lbm_mass / self.lbm_length**3)

    def to_lbm_density(self, value):
        """
        Convert a density field from SI units (kg/m^3) to LBM units.

        Parameters
        ----------
        value (float or jax.Array or pytree of jax.Array): Density field in SI units; a pytree for multiphase flows.

        Returns
        -------
        float or jax.Array or pytree of jax.Array
            Density field in LBM units.
        """
        return self._scale(value, self.lbm_length**3 / self.lbm_mass)

    def to_si_velocity(self, value):
        """
        Convert a velocity field from LBM units to SI units (m/s).

        Parameters
        ----------
        value (float or jax.Array or pytree of jax.Array): Velocity field in LBM units; a pytree for multiphase flows.

        Returns
        -------
        float or jax.Array or pytree of jax.Array
            Velocity field in SI units.
        """
        return self._scale(value, self.lbm_length / self.lbm_time)

    def to_lbm_velocity(self, value):
        """
        Convert a velocity field from SI units (m/s) to LBM units.

        Parameters
        ----------
        value (float or jax.Array or pytree of jax.Array): Velocity field in SI units; a pytree for multiphase flows.

        Returns
        -------
        float or jax.Array or pytree of jax.Array
            Velocity field in LBM units.
        """
        return self._scale(value, self.lbm_time / self.lbm_length)

    def to_si_kinematic_viscosity(self, value):
        """
        Convert a kinematic viscosity from LBM units to SI units (m^2/s).

        Parameters
        ----------
        value (float or jax.Array or pytree of jax.Array): Kinematic viscosity in LBM units.

        Returns
        -------
        float or jax.Array or pytree of jax.Array
            Kinematic viscosity in SI units.
        """
        return self._scale(value, self.lbm_length**2 / self.lbm_time)

    def to_lbm_kinematic_viscosity(self, value):
        """
        Convert a kinematic viscosity from SI units (m^2/s) to LBM units.

        Parameters
        ----------
        value (float or jax.Array or pytree of jax.Array): Kinematic viscosity in SI units.

        Returns
        -------
        float or jax.Array or pytree of jax.Array
            Kinematic viscosity in LBM units.
        """
        return self._scale(value, self.lbm_time / self.lbm_length**2)

    def to_si_pressure(self, value):
        """
        Convert a pressure field from LBM units to SI units (Pa).

        Parameters
        ----------
        value (float or jax.Array or pytree of jax.Array): Pressure field in LBM units; a pytree for multiphase flows.

        Returns
        -------
        float or jax.Array or pytree of jax.Array
            Pressure field in SI units.
        """
        return self._scale(value, self.lbm_mass / (self.lbm_length * self.lbm_time**2))

    def to_lbm_pressure(self, value):
        """
        Convert a pressure field from SI units (Pa) to LBM units.

        Parameters
        ----------
        value (float or jax.Array or pytree of jax.Array): Pressure field in SI units; a pytree for multiphase flows.

        Returns
        -------
        float or jax.Array or pytree of jax.Array
            Pressure field in LBM units.
        """
        return self._scale(value, self.lbm_length * self.lbm_time**2 / self.lbm_mass)

    def to_si_force(self, value):
        """
        Convert a force field from LBM units to SI units (N).

        Parameters
        ----------
        value (float or jax.Array or pytree of jax.Array): Force field in LBM units; a pytree for multiphase flows.

        Returns
        -------
        float or jax.Array or pytree of jax.Array
            Force field in SI units.
        """
        return self._scale(value, self.lbm_mass * self.lbm_length / self.lbm_time**2)

    def to_lbm_force(self, value):
        """
        Convert a force field from SI units (N) to LBM units.

        Parameters
        ----------
        value (float or jax.Array or pytree of jax.Array): Force field in SI units; a pytree for multiphase flows.

        Returns
        -------
        float or jax.Array or pytree of jax.Array
            Force field in LBM units.
        """
        return self._scale(value, self.lbm_time**2 / (self.lbm_mass * self.lbm_length))

    def to_si_temperature(self, value):
        """
        Convert a temperature field from LBM units to SI units (K).

        Assumes the temperature scale was set (thermal flows); with the default scale
        of 1.0 the value is returned unchanged.

        Parameters
        ----------
        value (float or jax.Array or pytree of jax.Array): Temperature field in LBM units.

        Returns
        -------
        float or jax.Array or pytree of jax.Array
            Temperature field in SI units.
        """
        return self._scale(value, self.lbm_temperature)

    def to_lbm_temperature(self, value):
        """
        Convert a temperature field from SI units (K) to LBM units.

        Assumes the temperature scale was set (thermal flows); with the default scale
        of 1.0 the value is returned unchanged.

        Parameters
        ----------
        value (float or jax.Array or pytree of jax.Array): Temperature field in SI units.

        Returns
        -------
        float or jax.Array or pytree of jax.Array
            Temperature field in LBM units.
        """
        return self._scale(value, 1.0 / self.lbm_temperature)

    def determine_lbm_scale_singlephase(
        self, si_kinematic_visc, si_density, lbm_kinematic_visc, lbm_density=1.0, lbm_length=None, lbm_time=None, lbm_mass=None
    ):
        """
        Determine the mass, length and time scales for a single phase flow.

        Matching kinematic viscosity and density between SI and LBM units fixes two of the three mechanical scales, so exactly one of lbm_length, lbm_time or lbm_mass
        must be provided to close the system. Assumes the LBM viscosity was chosen for the target relaxation time, nu = cs^2 * (tau - 1/2) (see Krüger et al., 2017).

        Parameters
        ----------
        si_kinematic_visc (float): Kinematic viscosity in SI units (m^2/s).

        si_density (float): Reference density in SI units (kg/m^3).

        lbm_kinematic_visc (float): Kinematic viscosity in LBM units.

        lbm_density (float, optional): Reference density in LBM units. Defaults to 1.0.

        lbm_length (float, optional): Length of one lattice spacing in m.

        lbm_time (float, optional): Duration of one lattice time step in s.

        lbm_mass (float, optional): Mass of one lattice mass unit in kg.

        Returns
        -------
        None
            The mass, length and time scales of this instance are updated in place.
        """
        if sum(scale is not None for scale in (lbm_length, lbm_time, lbm_mass)) != 1:
            raise ValueError("Exactly one of lbm_length, lbm_time or lbm_mass must be provided.")

        visc_scale = si_kinematic_visc / lbm_kinematic_visc
        density_scale = si_density / lbm_density
        if lbm_length is not None:
            self.lbm_length = lbm_length
            self.lbm_time = lbm_length**2 / visc_scale
        elif lbm_time is not None:
            self.lbm_time = lbm_time
            self.lbm_length = (visc_scale * lbm_time) ** 0.5
        else:
            self.lbm_length = (lbm_mass / density_scale) ** (1.0 / 3.0)
            self.lbm_time = self.lbm_length**2 / visc_scale
        self.lbm_mass = density_scale * self.lbm_length**3

    def determine_lbm_scale_multiphase(
        self,
        si_kinematic_visc,
        si_density,
        lbm_kinematic_visc,
        lbm_density,
        si_temperature=None,
        lbm_temperature=None,
        lbm_length=None,
        lbm_time=None,
        lbm_mass=None,
    ):
        """
        Determine the mass, length, time and temperature scales for a multiphase flow.

        Same closure as determine_lbm_scale_singlephase, but the LBM reference density is fixed by the equation of state (typically the critical or coexistence liquid
        density) and must be provided. For thermal flows, matching a reference temperature (typically the critical temperature of the EOS) sets the temperature scale;
        isothermal flows can omit it (see Yuan and Schaefer, 2006, https://doi.org/10.1063/1.2187070).

        Parameters
        ----------
        si_kinematic_visc (float): Kinematic viscosity in SI units (m^2/s).

        si_density (float): Reference density in SI units (kg/m^3).

        lbm_kinematic_visc (float): Kinematic viscosity in LBM units.

        lbm_density (float): Reference density in LBM units, as given by the EOS.

        si_temperature (float, optional): Reference temperature in SI units (K); required together with lbm_temperature
            for thermal flows.

        lbm_temperature (float, optional): Reference temperature in LBM units, as given by the EOS.

        lbm_length (float, optional): Length of one lattice spacing in m.

        lbm_time (float, optional): Duration of one lattice time step in s.

        lbm_mass (float, optional): Mass of one lattice mass unit in kg.

        Returns
        -------
        None
            The mass, length, time and (for thermal flows) temperature scales of this
            instance are updated in place.
        """
        self.determine_lbm_scale_singlephase(
            si_kinematic_visc, si_density, lbm_kinematic_visc, lbm_density, lbm_length=lbm_length, lbm_time=lbm_time, lbm_mass=lbm_mass
        )
        if (si_temperature is None) != (lbm_temperature is None):
            raise ValueError("si_temperature and lbm_temperature must be provided together.")
        if si_temperature is not None:
            self.lbm_temperature = si_temperature / lbm_temperature

determine_lbm_scale_multiphase

determine_lbm_scale_multiphase(si_kinematic_visc, si_density, lbm_kinematic_visc, lbm_density, si_temperature=None, lbm_temperature=None, lbm_length=None, lbm_time=None, lbm_mass=None)

Determine the mass, length, time and temperature scales for a multiphase flow.

Same closure as determine_lbm_scale_singlephase, but the LBM reference density is fixed by the equation of state (typically the critical or coexistence liquid density) and must be provided. For thermal flows, matching a reference temperature (typically the critical temperature of the EOS) sets the temperature scale; isothermal flows can omit it (see Yuan and Schaefer, 2006, https://doi.org/10.1063/1.2187070).

Parameters

si_kinematic_visc (float): Kinematic viscosity in SI units (m^2/s).

si_density (float): Reference density in SI units (kg/m^3).

lbm_kinematic_visc (float): Kinematic viscosity in LBM units.

lbm_density (float): Reference density in LBM units, as given by the EOS.

si_temperature (float, optional): Reference temperature in SI units (K); required together with lbm_temperature for thermal flows.

lbm_temperature (float, optional): Reference temperature in LBM units, as given by the EOS.

lbm_length (float, optional): Length of one lattice spacing in m.

lbm_time (float, optional): Duration of one lattice time step in s.

lbm_mass (float, optional): Mass of one lattice mass unit in kg.

Returns

None The mass, length, time and (for thermal flows) temperature scales of this instance are updated in place.

Source code in jax_lab/core/unit.py
def determine_lbm_scale_multiphase(
    self,
    si_kinematic_visc,
    si_density,
    lbm_kinematic_visc,
    lbm_density,
    si_temperature=None,
    lbm_temperature=None,
    lbm_length=None,
    lbm_time=None,
    lbm_mass=None,
):
    """
    Determine the mass, length, time and temperature scales for a multiphase flow.

    Same closure as determine_lbm_scale_singlephase, but the LBM reference density is fixed by the equation of state (typically the critical or coexistence liquid
    density) and must be provided. For thermal flows, matching a reference temperature (typically the critical temperature of the EOS) sets the temperature scale;
    isothermal flows can omit it (see Yuan and Schaefer, 2006, https://doi.org/10.1063/1.2187070).

    Parameters
    ----------
    si_kinematic_visc (float): Kinematic viscosity in SI units (m^2/s).

    si_density (float): Reference density in SI units (kg/m^3).

    lbm_kinematic_visc (float): Kinematic viscosity in LBM units.

    lbm_density (float): Reference density in LBM units, as given by the EOS.

    si_temperature (float, optional): Reference temperature in SI units (K); required together with lbm_temperature
        for thermal flows.

    lbm_temperature (float, optional): Reference temperature in LBM units, as given by the EOS.

    lbm_length (float, optional): Length of one lattice spacing in m.

    lbm_time (float, optional): Duration of one lattice time step in s.

    lbm_mass (float, optional): Mass of one lattice mass unit in kg.

    Returns
    -------
    None
        The mass, length, time and (for thermal flows) temperature scales of this
        instance are updated in place.
    """
    self.determine_lbm_scale_singlephase(
        si_kinematic_visc, si_density, lbm_kinematic_visc, lbm_density, lbm_length=lbm_length, lbm_time=lbm_time, lbm_mass=lbm_mass
    )
    if (si_temperature is None) != (lbm_temperature is None):
        raise ValueError("si_temperature and lbm_temperature must be provided together.")
    if si_temperature is not None:
        self.lbm_temperature = si_temperature / lbm_temperature

determine_lbm_scale_singlephase

determine_lbm_scale_singlephase(si_kinematic_visc, si_density, lbm_kinematic_visc, lbm_density=1.0, lbm_length=None, lbm_time=None, lbm_mass=None)

Determine the mass, length and time scales for a single phase flow.

Matching kinematic viscosity and density between SI and LBM units fixes two of the three mechanical scales, so exactly one of lbm_length, lbm_time or lbm_mass must be provided to close the system. Assumes the LBM viscosity was chosen for the target relaxation time, nu = cs^2 * (tau - 1/2) (see Krüger et al., 2017).

Parameters

si_kinematic_visc (float): Kinematic viscosity in SI units (m^2/s).

si_density (float): Reference density in SI units (kg/m^3).

lbm_kinematic_visc (float): Kinematic viscosity in LBM units.

lbm_density (float, optional): Reference density in LBM units. Defaults to 1.0.

lbm_length (float, optional): Length of one lattice spacing in m.

lbm_time (float, optional): Duration of one lattice time step in s.

lbm_mass (float, optional): Mass of one lattice mass unit in kg.

Returns

None The mass, length and time scales of this instance are updated in place.

Source code in jax_lab/core/unit.py
def determine_lbm_scale_singlephase(
    self, si_kinematic_visc, si_density, lbm_kinematic_visc, lbm_density=1.0, lbm_length=None, lbm_time=None, lbm_mass=None
):
    """
    Determine the mass, length and time scales for a single phase flow.

    Matching kinematic viscosity and density between SI and LBM units fixes two of the three mechanical scales, so exactly one of lbm_length, lbm_time or lbm_mass
    must be provided to close the system. Assumes the LBM viscosity was chosen for the target relaxation time, nu = cs^2 * (tau - 1/2) (see Krüger et al., 2017).

    Parameters
    ----------
    si_kinematic_visc (float): Kinematic viscosity in SI units (m^2/s).

    si_density (float): Reference density in SI units (kg/m^3).

    lbm_kinematic_visc (float): Kinematic viscosity in LBM units.

    lbm_density (float, optional): Reference density in LBM units. Defaults to 1.0.

    lbm_length (float, optional): Length of one lattice spacing in m.

    lbm_time (float, optional): Duration of one lattice time step in s.

    lbm_mass (float, optional): Mass of one lattice mass unit in kg.

    Returns
    -------
    None
        The mass, length and time scales of this instance are updated in place.
    """
    if sum(scale is not None for scale in (lbm_length, lbm_time, lbm_mass)) != 1:
        raise ValueError("Exactly one of lbm_length, lbm_time or lbm_mass must be provided.")

    visc_scale = si_kinematic_visc / lbm_kinematic_visc
    density_scale = si_density / lbm_density
    if lbm_length is not None:
        self.lbm_length = lbm_length
        self.lbm_time = lbm_length**2 / visc_scale
    elif lbm_time is not None:
        self.lbm_time = lbm_time
        self.lbm_length = (visc_scale * lbm_time) ** 0.5
    else:
        self.lbm_length = (lbm_mass / density_scale) ** (1.0 / 3.0)
        self.lbm_time = self.lbm_length**2 / visc_scale
    self.lbm_mass = density_scale * self.lbm_length**3

to_lbm_density

to_lbm_density(value)

Convert a density field from SI units (kg/m^3) to LBM units.

Parameters

value (float or jax.Array or pytree of jax.Array): Density field in SI units; a pytree for multiphase flows.

Returns

float or jax.Array or pytree of jax.Array Density field in LBM units.

Source code in jax_lab/core/unit.py
def to_lbm_density(self, value):
    """
    Convert a density field from SI units (kg/m^3) to LBM units.

    Parameters
    ----------
    value (float or jax.Array or pytree of jax.Array): Density field in SI units; a pytree for multiphase flows.

    Returns
    -------
    float or jax.Array or pytree of jax.Array
        Density field in LBM units.
    """
    return self._scale(value, self.lbm_length**3 / self.lbm_mass)

to_lbm_force

to_lbm_force(value)

Convert a force field from SI units (N) to LBM units.

Parameters

value (float or jax.Array or pytree of jax.Array): Force field in SI units; a pytree for multiphase flows.

Returns

float or jax.Array or pytree of jax.Array Force field in LBM units.

Source code in jax_lab/core/unit.py
def to_lbm_force(self, value):
    """
    Convert a force field from SI units (N) to LBM units.

    Parameters
    ----------
    value (float or jax.Array or pytree of jax.Array): Force field in SI units; a pytree for multiphase flows.

    Returns
    -------
    float or jax.Array or pytree of jax.Array
        Force field in LBM units.
    """
    return self._scale(value, self.lbm_time**2 / (self.lbm_mass * self.lbm_length))

to_lbm_kinematic_viscosity

to_lbm_kinematic_viscosity(value)

Convert a kinematic viscosity from SI units (m^2/s) to LBM units.

Parameters

value (float or jax.Array or pytree of jax.Array): Kinematic viscosity in SI units.

Returns

float or jax.Array or pytree of jax.Array Kinematic viscosity in LBM units.

Source code in jax_lab/core/unit.py
def to_lbm_kinematic_viscosity(self, value):
    """
    Convert a kinematic viscosity from SI units (m^2/s) to LBM units.

    Parameters
    ----------
    value (float or jax.Array or pytree of jax.Array): Kinematic viscosity in SI units.

    Returns
    -------
    float or jax.Array or pytree of jax.Array
        Kinematic viscosity in LBM units.
    """
    return self._scale(value, self.lbm_time / self.lbm_length**2)

to_lbm_length

to_lbm_length(value)

Convert a length from SI units (m) to LBM units.

Parameters

value (float or jax.Array or pytree of jax.Array): Length in SI units.

Returns

float or jax.Array or pytree of jax.Array Length in LBM units.

Source code in jax_lab/core/unit.py
def to_lbm_length(self, value):
    """
    Convert a length from SI units (m) to LBM units.

    Parameters
    ----------
    value (float or jax.Array or pytree of jax.Array): Length in SI units.

    Returns
    -------
    float or jax.Array or pytree of jax.Array
        Length in LBM units.
    """
    return self._scale(value, 1.0 / self.lbm_length)

to_lbm_pressure

to_lbm_pressure(value)

Convert a pressure field from SI units (Pa) to LBM units.

Parameters

value (float or jax.Array or pytree of jax.Array): Pressure field in SI units; a pytree for multiphase flows.

Returns

float or jax.Array or pytree of jax.Array Pressure field in LBM units.

Source code in jax_lab/core/unit.py
def to_lbm_pressure(self, value):
    """
    Convert a pressure field from SI units (Pa) to LBM units.

    Parameters
    ----------
    value (float or jax.Array or pytree of jax.Array): Pressure field in SI units; a pytree for multiphase flows.

    Returns
    -------
    float or jax.Array or pytree of jax.Array
        Pressure field in LBM units.
    """
    return self._scale(value, self.lbm_length * self.lbm_time**2 / self.lbm_mass)

to_lbm_temperature

to_lbm_temperature(value)

Convert a temperature field from SI units (K) to LBM units.

Assumes the temperature scale was set (thermal flows); with the default scale of 1.0 the value is returned unchanged.

Parameters

value (float or jax.Array or pytree of jax.Array): Temperature field in SI units.

Returns

float or jax.Array or pytree of jax.Array Temperature field in LBM units.

Source code in jax_lab/core/unit.py
def to_lbm_temperature(self, value):
    """
    Convert a temperature field from SI units (K) to LBM units.

    Assumes the temperature scale was set (thermal flows); with the default scale
    of 1.0 the value is returned unchanged.

    Parameters
    ----------
    value (float or jax.Array or pytree of jax.Array): Temperature field in SI units.

    Returns
    -------
    float or jax.Array or pytree of jax.Array
        Temperature field in LBM units.
    """
    return self._scale(value, 1.0 / self.lbm_temperature)

to_lbm_time

to_lbm_time(value)

Convert a time from SI units (s) to LBM units.

Parameters

value (float or jax.Array or pytree of jax.Array): Time in SI units.

Returns

float or jax.Array or pytree of jax.Array Time in LBM units.

Source code in jax_lab/core/unit.py
def to_lbm_time(self, value):
    """
    Convert a time from SI units (s) to LBM units.

    Parameters
    ----------
    value (float or jax.Array or pytree of jax.Array): Time in SI units.

    Returns
    -------
    float or jax.Array or pytree of jax.Array
        Time in LBM units.
    """
    return self._scale(value, 1.0 / self.lbm_time)

to_lbm_velocity

to_lbm_velocity(value)

Convert a velocity field from SI units (m/s) to LBM units.

Parameters

value (float or jax.Array or pytree of jax.Array): Velocity field in SI units; a pytree for multiphase flows.

Returns

float or jax.Array or pytree of jax.Array Velocity field in LBM units.

Source code in jax_lab/core/unit.py
def to_lbm_velocity(self, value):
    """
    Convert a velocity field from SI units (m/s) to LBM units.

    Parameters
    ----------
    value (float or jax.Array or pytree of jax.Array): Velocity field in SI units; a pytree for multiphase flows.

    Returns
    -------
    float or jax.Array or pytree of jax.Array
        Velocity field in LBM units.
    """
    return self._scale(value, self.lbm_time / self.lbm_length)

to_si_density

to_si_density(value)

Convert a density field from LBM units to SI units (kg/m^3).

Parameters

value (float or jax.Array or pytree of jax.Array): Density field in LBM units; a pytree for multiphase flows.

Returns

float or jax.Array or pytree of jax.Array Density field in SI units.

Source code in jax_lab/core/unit.py
def to_si_density(self, value):
    """
    Convert a density field from LBM units to SI units (kg/m^3).

    Parameters
    ----------
    value (float or jax.Array or pytree of jax.Array): Density field in LBM units; a pytree for multiphase flows.

    Returns
    -------
    float or jax.Array or pytree of jax.Array
        Density field in SI units.
    """
    return self._scale(value, self.lbm_mass / self.lbm_length**3)

to_si_force

to_si_force(value)

Convert a force field from LBM units to SI units (N).

Parameters

value (float or jax.Array or pytree of jax.Array): Force field in LBM units; a pytree for multiphase flows.

Returns

float or jax.Array or pytree of jax.Array Force field in SI units.

Source code in jax_lab/core/unit.py
def to_si_force(self, value):
    """
    Convert a force field from LBM units to SI units (N).

    Parameters
    ----------
    value (float or jax.Array or pytree of jax.Array): Force field in LBM units; a pytree for multiphase flows.

    Returns
    -------
    float or jax.Array or pytree of jax.Array
        Force field in SI units.
    """
    return self._scale(value, self.lbm_mass * self.lbm_length / self.lbm_time**2)

to_si_kinematic_viscosity

to_si_kinematic_viscosity(value)

Convert a kinematic viscosity from LBM units to SI units (m^2/s).

Parameters

value (float or jax.Array or pytree of jax.Array): Kinematic viscosity in LBM units.

Returns

float or jax.Array or pytree of jax.Array Kinematic viscosity in SI units.

Source code in jax_lab/core/unit.py
def to_si_kinematic_viscosity(self, value):
    """
    Convert a kinematic viscosity from LBM units to SI units (m^2/s).

    Parameters
    ----------
    value (float or jax.Array or pytree of jax.Array): Kinematic viscosity in LBM units.

    Returns
    -------
    float or jax.Array or pytree of jax.Array
        Kinematic viscosity in SI units.
    """
    return self._scale(value, self.lbm_length**2 / self.lbm_time)

to_si_length

to_si_length(value)

Convert a length from LBM units to SI units (m).

Parameters

value (float or jax.Array or pytree of jax.Array): Length in LBM units.

Returns

float or jax.Array or pytree of jax.Array Length in SI units.

Source code in jax_lab/core/unit.py
def to_si_length(self, value):
    """
    Convert a length from LBM units to SI units (m).

    Parameters
    ----------
    value (float or jax.Array or pytree of jax.Array): Length in LBM units.

    Returns
    -------
    float or jax.Array or pytree of jax.Array
        Length in SI units.
    """
    return self._scale(value, self.lbm_length)

to_si_pressure

to_si_pressure(value)

Convert a pressure field from LBM units to SI units (Pa).

Parameters

value (float or jax.Array or pytree of jax.Array): Pressure field in LBM units; a pytree for multiphase flows.

Returns

float or jax.Array or pytree of jax.Array Pressure field in SI units.

Source code in jax_lab/core/unit.py
def to_si_pressure(self, value):
    """
    Convert a pressure field from LBM units to SI units (Pa).

    Parameters
    ----------
    value (float or jax.Array or pytree of jax.Array): Pressure field in LBM units; a pytree for multiphase flows.

    Returns
    -------
    float or jax.Array or pytree of jax.Array
        Pressure field in SI units.
    """
    return self._scale(value, self.lbm_mass / (self.lbm_length * self.lbm_time**2))

to_si_temperature

to_si_temperature(value)

Convert a temperature field from LBM units to SI units (K).

Assumes the temperature scale was set (thermal flows); with the default scale of 1.0 the value is returned unchanged.

Parameters

value (float or jax.Array or pytree of jax.Array): Temperature field in LBM units.

Returns

float or jax.Array or pytree of jax.Array Temperature field in SI units.

Source code in jax_lab/core/unit.py
def to_si_temperature(self, value):
    """
    Convert a temperature field from LBM units to SI units (K).

    Assumes the temperature scale was set (thermal flows); with the default scale
    of 1.0 the value is returned unchanged.

    Parameters
    ----------
    value (float or jax.Array or pytree of jax.Array): Temperature field in LBM units.

    Returns
    -------
    float or jax.Array or pytree of jax.Array
        Temperature field in SI units.
    """
    return self._scale(value, self.lbm_temperature)

to_si_time

to_si_time(value)

Convert a time from LBM units to SI units (s).

Parameters

value (float or jax.Array or pytree of jax.Array): Time in LBM units.

Returns

float or jax.Array or pytree of jax.Array Time in SI units.

Source code in jax_lab/core/unit.py
def to_si_time(self, value):
    """
    Convert a time from LBM units to SI units (s).

    Parameters
    ----------
    value (float or jax.Array or pytree of jax.Array): Time in LBM units.

    Returns
    -------
    float or jax.Array or pytree of jax.Array
        Time in SI units.
    """
    return self._scale(value, self.lbm_time)

to_si_velocity

to_si_velocity(value)

Convert a velocity field from LBM units to SI units (m/s).

Parameters

value (float or jax.Array or pytree of jax.Array): Velocity field in LBM units; a pytree for multiphase flows.

Returns

float or jax.Array or pytree of jax.Array Velocity field in SI units.

Source code in jax_lab/core/unit.py
def to_si_velocity(self, value):
    """
    Convert a velocity field from LBM units to SI units (m/s).

    Parameters
    ----------
    value (float or jax.Array or pytree of jax.Array): Velocity field in LBM units; a pytree for multiphase flows.

    Returns
    -------
    float or jax.Array or pytree of jax.Array
        Velocity field in SI units.
    """
    return self._scale(value, self.lbm_length / self.lbm_time)