Source code for pyrfu.pyrf.estimate

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# 3rd party imports
import numpy as np
from scipy import constants

__author__ = "Louis Richard"
__email__ = "louisr@irfu.se"
__copyright__ = "Copyright 2020-2023"
__license__ = "MIT"
__version__ = "2.4.2"
__status__ = "Prototype"


def _estimate_capa_disk(radius):
    return 8 * constants.epsilon_0 * radius


def _estimate_capa_sphe(radius):
    return 4 * np.pi * constants.epsilon_0 * radius


def _estimate_capa_wire(radius, length):
    if length and radius != 0 and length >= 10 * radius:
        l_ = np.log(length / radius)
        out = length / l_ * (1 + 1 / l_ * (1 - np.log(2)))
        out *= 2 * np.pi * constants.epsilon_0
    else:
        raise ValueError(
            "capacitance_wire requires length at least 10 times the radius!",
        )
    return out


def _estimate_capa_cyli(a, h):
    coef = 4 * np.pi**2 * a * constants.epsilon_0

    if 0.5 < h / a < 4:
        c_1 = h / (2.0 * a * (np.log(16 * h / a) ** 2 + np.pi**2 / 12))
        out = coef * np.pi * c_1
    elif h / a >= 4:
        o_m = 2 * (np.log(4 * h / a) - 1)
        c_1 = 2 * h / (np.pi * a) * (1.0 / o_m + (4 - np.pi**2) / o_m**3)
        out = coef * c_1
    else:
        raise ValueError("length less than diameter, do not have formula yet")

    return out


[docs]def estimate(what_to_estimate: str, radius: float, length: float = None): r"""Estimate values for some everyday stuff. Parameters ---------- what_to_estimate : str Value to estimate: * "capacitance_disk" estimates the capacitance of a disk (requires radius of the disk). * "capacitance_sphere" estimates of a sphere (requires radius of the sphere). * "capacitance_wire" estimates the capacitance of a wire (requires radius and length of the wire). * "capacitance_cylinder" estimates the capacitance of a cylinder (requires radius and half length of the cylinder). radius : float Radius of the disk, sphere, wire or cylinder length : float, Optional Length of the wire or half lenght of the cylinder. Returns ------- out : float Estimated value. Examples -------- >>> from pyrfu import pyrf Define radius of the sphere in SI units >>> r_sphere = 20e-2 Computes the capacitance of the sphere >>> c_sphere = pyrf.estimate("capacitance_sphere", r_sphere) """ if what_to_estimate.lower() == "capacitance_disk": out = _estimate_capa_disk(radius) elif what_to_estimate.lower() == "capacitance_sphere": out = _estimate_capa_sphe(radius) elif what_to_estimate.lower() == "capacitance_wire": out = _estimate_capa_wire(radius, length) elif what_to_estimate.lower() == "capacitance_cylinder": out = _estimate_capa_cyli(radius, length) else: raise NotImplementedError return out