1 /*
2 * Copyright (c) 2019 Kevin Townsend (KTOWN)
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7 #include <math.h>
8 #include <errno.h>
9 #include <zsl/zsl.h>
10 #include <zsl/physics/gases.h>
11
12 int
zsl_phy_gas_av_vel(zsl_real_t m,zsl_real_t n,zsl_real_t t,zsl_real_t * v)13 zsl_phy_gas_av_vel(zsl_real_t m, zsl_real_t n, zsl_real_t t, zsl_real_t *v)
14 {
15 if (m <= 0 || n < 0 || t < 0) {
16 *v = NAN;
17 return -EINVAL;
18 }
19
20 *v = ZSL_SQRT((3.0 * n * ZSL_IDEAL_GAS_CONST * t) / m);
21
22 return 0;
23 }
24
25 int
zsl_phy_gas_press(zsl_real_t v,zsl_real_t n,zsl_real_t t,zsl_real_t * p)26 zsl_phy_gas_press(zsl_real_t v, zsl_real_t n, zsl_real_t t, zsl_real_t *p)
27 {
28 if (v <= 0 || n < 0 || t < 0) {
29 *p = NAN;
30 return -EINVAL;
31 }
32
33 *p = (n * ZSL_IDEAL_GAS_CONST * t) / v;
34
35 return 0;
36 }
37
38 int
zsl_phy_gas_boyle(zsl_real_t pi,zsl_real_t vi,zsl_real_t pf,zsl_real_t * vf)39 zsl_phy_gas_boyle(zsl_real_t pi, zsl_real_t vi, zsl_real_t pf, zsl_real_t *vf)
40 {
41 if (pf <= 0 || vi < 0 || pi < 0) {
42 *vf = NAN;
43 return -EINVAL;
44 }
45
46 *vf = (vi * pi) / pf;
47
48 return 0;
49 }
50
51 int
zsl_phy_gas_charles_lussac(zsl_real_t ti,zsl_real_t vi,zsl_real_t tf,zsl_real_t * vf)52 zsl_phy_gas_charles_lussac(zsl_real_t ti, zsl_real_t vi, zsl_real_t tf,
53 zsl_real_t *vf)
54 {
55 if (ti <= 0 || vi < 0 || tf < 0) {
56 *vf = NAN;
57 return -EINVAL;
58 }
59
60 *vf = (vi * tf) / ti;
61
62 return 0;
63 }
64