units_and_constants.py 991 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from dataclasses import dataclass
  2. from pathlib import Path
  3. import json
  4. @dataclass
  5. class BaseUnits:
  6. distance: float
  7. charge: float
  8. voltage: float
  9. concentrationM: float
  10. @property
  11. def charge_density(self):
  12. return self.charge / (self.distance ** 2)
  13. @property
  14. def energy(self):
  15. return self.charge * self.voltage
  16. @property
  17. def concentration(self):
  18. return self.concentrationM * 6.02214076 * 1e23 / (10 * self.distance) ** 3
  19. @dataclass
  20. class Constants:
  21. Boltzmann: float
  22. epsilon0: float
  23. e0: float
  24. with open(Path(__file__).resolve().parent.joinpath('units.json')) as f:
  25. base_units = json.load(f)
  26. UNITS = BaseUnits(**base_units)
  27. # values of different constants in provided base units
  28. CONSTANTS = Constants(Boltzmann=1.380649 * 1e-23 / UNITS.energy,
  29. epsilon0=8.8541878128 * 1e-12 * UNITS.distance * UNITS.voltage / UNITS.charge,
  30. e0=1.602176634 * 1e-19 / UNITS.charge)