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