Vai al contenuto

Geotecnica — Cap. 6

Verifiche geotecniche secondo NTC18 Cap. 6.

Riferimento normativo

NTC18 Cap. 6, Tab. 6.2.I–V, Tab. 6.4.I–VI, Tab. 6.5.1, Tab. 6.6.1/III, Formule [6.2.1]–[6.6.2]

Include capacità portante fondazioni superficiali (Brinch-Hansen), resistenza pali (laterale, punta, totale), fattori di correlazione Tab. 6.4.III–V, cedimenti elastici e da consolidazione, fattori parziali muri di sostegno [Tab. 6.5.1], fattori di correlazione e parziali ancoraggi [Tab. 6.6.1/III].

API

pyntc.checks.geotechnical

Progettazione geotecnica — NTC18 Cap.6.

Coefficienti parziali, fattori di correlazione e verifiche per fondazioni superficiali, fondazioni su pali, opere di sostegno, tiranti di ancoraggio e opere di materiali sciolti.

geo_action_partial_factors(load_type, effect, combination)

Coefficiente parziale per le azioni geotecniche [-].

NTC18 §6.2.4.1.1 — Tab. 6.2.1.

Parameters

load_type : str Tipo di carico: "G1" (permanenti strutturali), "G2" (permanenti non strutturali), "Q" (variabili). effect : str "favorable" o "unfavorable". combination : str Combinazione di coefficienti: "EQU", "A1" o "A2".

Returns

float Coefficiente parziale gamma_F [-].

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.2.4.1.1", table="Tab.6.2.1", latex=r"\text{Tab.\,6.2.I}")
def geo_action_partial_factors(
    load_type: str,
    effect: str,
    combination: str,
) -> float:
    """Coefficiente parziale per le azioni geotecniche [-].

    NTC18 §6.2.4.1.1 — Tab. 6.2.1.

    Parameters
    ----------
    load_type : str
        Tipo di carico: ``"G1"`` (permanenti strutturali),
        ``"G2"`` (permanenti non strutturali), ``"Q"`` (variabili).
    effect : str
        ``"favorable"`` o ``"unfavorable"``.
    combination : str
        Combinazione di coefficienti: ``"EQU"``, ``"A1"`` o ``"A2"``.

    Returns
    -------
    float
        Coefficiente parziale gamma_F [-].
    """
    key = (load_type, effect, combination)
    if key not in _ACTION_FACTORS:
        valid_loads = {"G1", "G2", "Q"}
        valid_effects = {"favorable", "unfavorable"}
        valid_combs = {"EQU", "A1", "A2"}
        if load_type not in valid_loads:
            raise ValueError(
                f"Tipo di carico non valido: {load_type!r}. "
                f"Valori ammessi: {valid_loads}"
            )
        if effect not in valid_effects:
            raise ValueError(
                f"Effetto non valido: {effect!r}. Valori ammessi: {valid_effects}"
            )
        if combination not in valid_combs:
            raise ValueError(
                f"Combinazione non valida: {combination!r}. "
                f"Valori ammessi: {valid_combs}"
            )
        raise ValueError(f"Combinazione non trovata: {key}")  # pragma: no cover
    return _ACTION_FACTORS[key]

geo_anchor_characteristic_resistance(R_values, method)

Resistenza caratteristica di un ancoraggio [kN].

NTC18 §6.6.2 — [6.6.1]/[6.6.2].

Parameters

R_values : list[float] Valori delle resistenze misurate o calcolate [kN]. method : str Metodo: "tests" (prove di progetto, [6.6.1]) o "profiles" (profili di indagine, [6.6.2]).

Returns

float Resistenza caratteristica R_a,k [kN].

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.6.2", formula="6.6.1", latex=r"R_{a,k} = \min\!\left(\frac{R_{a,\mathrm{medio}}}{\xi_{a1}},\;\frac{R_{a,\min}}{\xi_{a2}}\right)")
def geo_anchor_characteristic_resistance(
    R_values: list[float],
    method: str,
) -> float:
    """Resistenza caratteristica di un ancoraggio [kN].

    NTC18 §6.6.2 — [6.6.1]/[6.6.2].

    Parameters
    ----------
    R_values : list[float]
        Valori delle resistenze misurate o calcolate [kN].
    method : str
        Metodo: ``"tests"`` (prove di progetto, [6.6.1]) o
        ``"profiles"`` (profili di indagine, [6.6.2]).

    Returns
    -------
    float
        Resistenza caratteristica R_a,k [kN].
    """
    if not R_values:
        raise ValueError("La lista delle resistenze non puo' essere vuota.")

    arr = np.asarray(R_values, dtype=float)
    n = len(arr)
    mean_val = float(np.mean(arr))
    min_val = float(np.min(arr))

    if method == "tests":
        xi1, xi2 = geo_anchor_correlation_tests.__wrapped__(n)
        return min(mean_val / xi1, min_val / xi2)
    elif method == "profiles":
        xi3, xi4 = geo_anchor_correlation_profiles.__wrapped__(n)
        return min(mean_val / xi3, min_val / xi4)
    else:
        raise ValueError(
            f"Metodo non valido: {method!r}. "
            f"Valori ammessi: 'tests', 'profiles'"
        )

geo_anchor_check(R_Ed, R_ak, gamma_g)

Verifica di un ancoraggio: R_Ed <= R_d = R_ak / γ_g.

NTC18 §6.6.2.

Parameters

R_Ed : float Valore di progetto dell'azione sull'ancoraggio [kN]. R_ak : float Resistenza caratteristica dell'ancoraggio [kN]. gamma_g : float Coefficiente parziale sulla resistenza [-].

Returns

tuple[bool, float] (verificato, rapporto R_Ed / R_d).

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(
    article="6.6.2",
    formula="6.6.1",
    latex=r"R_{Ed} \le R_d = \frac{R_{a,k}}{\gamma_g}",
)
def geo_anchor_check(
    R_Ed: float,
    R_ak: float,
    gamma_g: float,
) -> tuple[bool, float]:
    """Verifica di un ancoraggio: R_Ed <= R_d = R_ak / γ_g.

    NTC18 §6.6.2.

    Parameters
    ----------
    R_Ed : float
        Valore di progetto dell'azione sull'ancoraggio [kN].
    R_ak : float
        Resistenza caratteristica dell'ancoraggio [kN].
    gamma_g : float
        Coefficiente parziale sulla resistenza [-].

    Returns
    -------
    tuple[bool, float]
        (verificato, rapporto R_Ed / R_d).
    """
    if R_ak <= 0:
        raise ValueError(f"R_ak deve essere positivo: {R_ak}")
    if gamma_g <= 0:
        raise ValueError(f"gamma_g deve essere positivo: {gamma_g}")
    R_d = R_ak / gamma_g
    ratio = R_Ed / R_d
    return ratio <= 1.0, ratio

geo_anchor_correlation_factors(n_profiles)

Fattori di correlazione ζ_as e ζ_at per ancoraggi (Tab. 6.6.III).

NTC18 §6.6.2 — Tab. 6.6.III.

Parameters

n_profiles : int Numero di profili di indagine. Per n_profiles >= 5 si usano i valori di n = 5.

Returns

tuple[float, float] (ζ_as, ζ_at).

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(
    article="6.6.2",
    table="Tab.6.6.III",
    latex=r"\zeta_{as},\;\zeta_{at}",
)
def geo_anchor_correlation_factors(n_profiles: int) -> tuple[float, float]:
    """Fattori di correlazione ζ_as e ζ_at per ancoraggi (Tab. 6.6.III).

    NTC18 §6.6.2 — Tab. 6.6.III.

    Parameters
    ----------
    n_profiles : int
        Numero di profili di indagine. Per n_profiles >= 5 si usano i valori
        di n = 5.

    Returns
    -------
    tuple[float, float]
        (ζ_as, ζ_at).
    """
    if n_profiles < 1:
        raise ValueError(
            f"Il numero di profili deve essere >= 1: {n_profiles}"
        )
    if n_profiles >= 5:
        return (1.60, 1.55)
    return _ANCHOR_ZETA_PROFILES[n_profiles]

geo_anchor_correlation_profiles(n_profiles)

Fattori di correlazione xi per profili di indagine per ancoraggi.

NTC18 §6.6.2 — Tab. 6.6.III.

Parameters

n_profiles : int Numero di profili di indagine.

Returns

tuple[float, float] (xi_a3, xi_a4).

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.6.2", table="Tab.6.6.III", latex=r"\text{Tab.\,6.6.III} \;\to\; (\xi_{a3},\,\xi_{a4})")
def geo_anchor_correlation_profiles(n_profiles: int) -> tuple[float, float]:
    """Fattori di correlazione xi per profili di indagine per ancoraggi.

    NTC18 §6.6.2 — Tab. 6.6.III.

    Parameters
    ----------
    n_profiles : int
        Numero di profili di indagine.

    Returns
    -------
    tuple[float, float]
        (xi_a3, xi_a4).
    """
    if n_profiles < 1:
        raise ValueError(
            f"Numero di profili deve essere >= 1: {n_profiles}"
        )
    if n_profiles >= 5:
        return (1.60, 1.55)
    return _ANCHOR_XI_PROFILES[n_profiles]

geo_anchor_correlation_tests(n_tests)

Fattori di correlazione xi per prove di progetto su ancoraggi.

NTC18 §6.6.2 — Tab. 6.6.II.

Parameters

n_tests : int Numero di ancoraggi di prova.

Returns

tuple[float, float] (xi_a1, xi_a2).

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.6.2", table="Tab.6.6.II", latex=r"\text{Tab.\,6.6.II} \;\to\; (\xi_{a1},\,\xi_{a2})")
def geo_anchor_correlation_tests(n_tests: int) -> tuple[float, float]:
    """Fattori di correlazione xi per prove di progetto su ancoraggi.

    NTC18 §6.6.2 — Tab. 6.6.II.

    Parameters
    ----------
    n_tests : int
        Numero di ancoraggi di prova.

    Returns
    -------
    tuple[float, float]
        (xi_a1, xi_a2).
    """
    if n_tests < 1:
        raise ValueError(f"Numero di prove deve essere >= 1: {n_tests}")
    if n_tests > 2:
        return (1.3, 1.2)
    return _ANCHOR_XI_TESTS[n_tests]

geo_anchor_partial_factor(anchor_type)

Coefficiente parziale γ_g per la resistenza degli ancoraggi [-].

NTC18 §6.6.2 — Tab. 6.6.1.

Parameters

anchor_type : str Tipo di ancoraggio: "temporary" (temporanei, γ_g = 1.1) o "permanent" (permanenti, γ_g = 1.2).

Returns

float Coefficiente parziale γ_g [-].

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(
    article="6.6.2",
    table="Tab.6.6.1",
    latex=r"\gamma_g",
)
def geo_anchor_partial_factor(anchor_type: str) -> float:
    """Coefficiente parziale γ_g per la resistenza degli ancoraggi [-].

    NTC18 §6.6.2 — Tab. 6.6.1.

    Parameters
    ----------
    anchor_type : str
        Tipo di ancoraggio: ``"temporary"`` (temporanei, γ_g = 1.1) o
        ``"permanent"`` (permanenti, γ_g = 1.2).

    Returns
    -------
    float
        Coefficiente parziale γ_g [-].
    """
    factors = {"temporary": 1.1, "permanent": 1.2}
    if anchor_type not in factors:
        raise ValueError(
            f"Tipo di ancoraggio non valido: {anchor_type!r}. "
            f"Valori ammessi: {set(factors.keys())}"
        )
    return factors[anchor_type]

geo_anchor_resistance_factors(anchor_type)

Coefficiente parziale per la resistenza degli ancoraggi [-].

NTC18 §6.6.2 — Tab. 6.6.1.

Parameters

anchor_type : str Tipo di ancoraggio: "temporary" o "permanent".

Returns

float Coefficiente parziale gamma_R [-].

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.6.2", table="Tab.6.6.1", latex=r"\text{Tab.\,6.6.I}")
def geo_anchor_resistance_factors(anchor_type: str) -> float:
    """Coefficiente parziale per la resistenza degli ancoraggi [-].

    NTC18 §6.6.2 — Tab. 6.6.1.

    Parameters
    ----------
    anchor_type : str
        Tipo di ancoraggio: ``"temporary"`` o ``"permanent"``.

    Returns
    -------
    float
        Coefficiente parziale gamma_R [-].
    """
    factors = {"temporary": 1.1, "permanent": 1.2}
    if anchor_type not in factors:
        raise ValueError(
            f"Tipo di ancoraggio non valido: {anchor_type!r}. "
            f"Valori ammessi: {set(factors.keys())}"
        )
    return factors[anchor_type]

geo_bearing_capacity_factors(phi_k)

Fattori di portanza N_c, N_q, N_γ secondo Brinch-Hansen.

NTC18 §6.4.1.

Parameters

phi_k : float Angolo di attrito caratteristico [gradi].

Returns

dict[str, float] Dizionario con chiavi "N_c", "N_q", "N_gamma".

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.4.1", latex=r"N_q = e^{\pi\tan\phi}\tan^2(45+\phi/2)")
def geo_bearing_capacity_factors(phi_k: float) -> dict[str, float]:
    """Fattori di portanza N_c, N_q, N_γ secondo Brinch-Hansen.

    NTC18 §6.4.1.

    Parameters
    ----------
    phi_k : float
        Angolo di attrito caratteristico [gradi].

    Returns
    -------
    dict[str, float]
        Dizionario con chiavi ``"N_c"``, ``"N_q"``, ``"N_gamma"``.
    """
    if phi_k < 0:
        raise ValueError(f"phi_k deve essere >= 0: {phi_k}")
    if phi_k >= 90:
        raise ValueError(f"phi_k deve essere < 90: {phi_k}")

    phi_rad = np.radians(phi_k)

    if phi_k == 0.0:
        N_q = 1.0
        N_c = np.pi + 2.0  # = 5.14159...
        N_gamma = 0.0
    else:
        N_q = np.exp(np.pi * np.tan(phi_rad)) * np.tan(np.pi / 4.0 + phi_rad / 2.0) ** 2
        N_c = (N_q - 1.0) / np.tan(phi_rad)
        N_gamma = 2.0 * (N_q + 1.0) * np.tan(phi_rad)

    return {"N_c": float(N_c), "N_q": float(N_q), "N_gamma": float(N_gamma)}

geo_consolidation_settlement(mv, sigma_v_inc, H)

Cedimento di consolidazione primaria [m].

NTC18 §6.4.2 — s_c = mv * sigma_v_inc * H.

Parameters

mv : float Coefficiente di compressibilita' volumetrica [1/kPa]. sigma_v_inc : float Incremento di tensione verticale efficace [kPa]. H : float Spessore dello strato compressibile [m].

Returns

float Cedimento di consolidazione s_c [m].

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.4.2", latex=r"s_c = m_v \Delta\sigma_v H")
def geo_consolidation_settlement(mv: float, sigma_v_inc: float, H: float) -> float:
    """Cedimento di consolidazione primaria [m].

    NTC18 §6.4.2 — s_c = mv * sigma_v_inc * H.

    Parameters
    ----------
    mv : float
        Coefficiente di compressibilita' volumetrica [1/kPa].
    sigma_v_inc : float
        Incremento di tensione verticale efficace [kPa].
    H : float
        Spessore dello strato compressibile [m].

    Returns
    -------
    float
        Cedimento di consolidazione s_c [m].
    """
    if mv <= 0:
        raise ValueError(f"mv deve essere > 0, ricevuto {mv}")
    if sigma_v_inc < 0:
        raise ValueError(f"sigma_v_inc deve essere >= 0, ricevuto {sigma_v_inc}")
    if H <= 0:
        raise ValueError(f"H deve essere > 0, ricevuto {H}")
    return mv * sigma_v_inc * H

geo_design_check(E_d, R_d)

Verifica geotecnica E_d <= R_d [6.2.1].

NTC18 §6.2.4.1.

Parameters

E_d : float Valore di progetto dell'effetto delle azioni [kN]. R_d : float Valore di progetto della resistenza [kN].

Returns

tuple[bool, float] (verificato, rapporto E_d / R_d).

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.2.4.1", formula="6.2.1", latex=r"E_d \le R_d")
def geo_design_check(E_d: float, R_d: float) -> tuple[bool, float]:
    """Verifica geotecnica E_d <= R_d [6.2.1].

    NTC18 §6.2.4.1.

    Parameters
    ----------
    E_d : float
        Valore di progetto dell'effetto delle azioni [kN].
    R_d : float
        Valore di progetto della resistenza [kN].

    Returns
    -------
    tuple[bool, float]
        (verificato, rapporto E_d / R_d).
    """
    if R_d <= 0:
        raise ValueError(f"R_d deve essere positivo: {R_d}")
    ratio = E_d / R_d
    return ratio <= 1.0, ratio

geo_design_resistance(R_k, gamma_R)

Resistenza di progetto geotecnica [kN].

NTC18 §6.2.4.1.2 — R_d = R_k / gamma_R [6.2.3].

Parameters

R_k : float Resistenza caratteristica [kN]. gamma_R : float Coefficiente parziale sulla resistenza [-].

Returns

float Resistenza di progetto R_d [kN].

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.2.4.1.2", formula="6.2.3", latex=r"R_d = \frac{R_k}{\gamma_R}")
def geo_design_resistance(R_k: float, gamma_R: float) -> float:
    """Resistenza di progetto geotecnica [kN].

    NTC18 §6.2.4.1.2 — R_d = R_k / gamma_R [6.2.3].

    Parameters
    ----------
    R_k : float
        Resistenza caratteristica [kN].
    gamma_R : float
        Coefficiente parziale sulla resistenza [-].

    Returns
    -------
    float
        Resistenza di progetto R_d [kN].
    """
    if R_k < 0:
        raise ValueError(f"R_k non puo' essere negativa: {R_k}")
    if gamma_R <= 0:
        raise ValueError(f"gamma_R deve essere positivo: {gamma_R}")
    return R_k / gamma_R

geo_destabilising_force(C_inst_d, Q_inst_d)

Forza instabilizzante di progetto per verifiche idrauliche [kN].

NTC18 §6.2.4.2 — Formula [6.2.5]:

.. math:: V_{\mathrm{inst},d} = C_{\mathrm{inst},d} + Q_{\mathrm{inst},d}

Parameters

C_inst_d : float Componente permanente instabilizzante di progetto [kN]. Q_inst_d : float Componente variabile instabilizzante di progetto [kN].

Returns

float Forza instabilizzante totale V_inst,d [kN].

Raises

ValueError Se uno dei parametri è negativo.

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(
    article="6.2.4.2",
    formula="6.2.5",
    latex=r"V_{\mathrm{inst},d} = C_{\mathrm{inst},d} + Q_{\mathrm{inst},d}",
)
def geo_destabilising_force(C_inst_d: float, Q_inst_d: float) -> float:
    """Forza instabilizzante di progetto per verifiche idrauliche [kN].

    NTC18 §6.2.4.2 — Formula [6.2.5]:

    .. math::
        V_{\\mathrm{inst},d} = C_{\\mathrm{inst},d} + Q_{\\mathrm{inst},d}

    Parameters
    ----------
    C_inst_d : float
        Componente permanente instabilizzante di progetto [kN].
    Q_inst_d : float
        Componente variabile instabilizzante di progetto [kN].

    Returns
    -------
    float
        Forza instabilizzante totale V_inst,d [kN].

    Raises
    ------
    ValueError
        Se uno dei parametri è negativo.
    """
    if C_inst_d < 0:
        raise ValueError(f"C_inst_d non puo' essere negativa: {C_inst_d}")
    if Q_inst_d < 0:
        raise ValueError(f"Q_inst_d non puo' essere negativa: {Q_inst_d}")
    return C_inst_d + Q_inst_d

geo_embankment_resistance_factor()

Coefficiente parziale R2 per opere di materiali sciolti e fronti di scavo [-].

NTC18 §6.8.2 — Tab. 6.8.1.

Returns

float Coefficiente parziale gamma_R = 1.1 [-].

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.8.2", table="Tab.6.8.1", latex=r"\gamma_R = 1{,}1")
def geo_embankment_resistance_factor() -> float:
    """Coefficiente parziale R2 per opere di materiali sciolti e fronti di scavo [-].

    NTC18 §6.8.2 — Tab. 6.8.1.

    Returns
    -------
    float
        Coefficiente parziale gamma_R = 1.1 [-].
    """
    return 1.1

geo_material_partial_factors(parameter, group)

Coefficiente parziale per i parametri geotecnici del terreno [-].

NTC18 §6.2.4.1.2 — Tab. 6.2.II.

Parameters

parameter : str Parametro geotecnico: "tan_phi" (angolo di resistenza al taglio), "cohesion" (coesione efficace c'), "undrained" (resistenza non drenata c_u), "unit_weight" (peso dell'unita' di volume). group : str Gruppo di coefficienti: "M1" o "M2".

Returns

float Coefficiente parziale gamma_M [-].

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.2.4.1.2", table="Tab.6.2.II", latex=r"\text{Tab.\,6.2.II}")
def geo_material_partial_factors(parameter: str, group: str) -> float:
    """Coefficiente parziale per i parametri geotecnici del terreno [-].

    NTC18 §6.2.4.1.2 — Tab. 6.2.II.

    Parameters
    ----------
    parameter : str
        Parametro geotecnico: ``"tan_phi"`` (angolo di resistenza al taglio),
        ``"cohesion"`` (coesione efficace c'), ``"undrained"`` (resistenza
        non drenata c_u), ``"unit_weight"`` (peso dell'unita' di volume).
    group : str
        Gruppo di coefficienti: ``"M1"`` o ``"M2"``.

    Returns
    -------
    float
        Coefficiente parziale gamma_M [-].
    """
    key = (parameter, group)
    if key not in _MATERIAL_FACTORS:
        valid_params = {"tan_phi", "cohesion", "undrained", "unit_weight"}
        valid_groups = {"M1", "M2"}
        if parameter not in valid_params:
            raise ValueError(
                f"Parametro non valido: {parameter!r}. "
                f"Valori ammessi: {valid_params}"
            )
        if group not in valid_groups:
            raise ValueError(
                f"Gruppo non valido: {group!r}. Valori ammessi: {valid_groups}"
            )
        raise ValueError(f"Combinazione non trovata: {key}")  # pragma: no cover
    return _MATERIAL_FACTORS[key]

geo_pile_base_resistance(q_b, A_b)

Resistenza di punta caratteristica di un palo.

NTC18 §6.4.3.1.

Parameters

q_b : float Resistenza unitaria di punta [kPa]. A_b : float Area della sezione di punta del palo [m²].

Returns

float Resistenza di punta caratteristica R_b,k [kN].

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.4.3.1", latex=r"R_{b,k} = q_b \cdot A_b")
def geo_pile_base_resistance(q_b: float, A_b: float) -> float:
    """Resistenza di punta caratteristica di un palo.

    NTC18 §6.4.3.1.

    Parameters
    ----------
    q_b : float
        Resistenza unitaria di punta [kPa].
    A_b : float
        Area della sezione di punta del palo [m²].

    Returns
    -------
    float
        Resistenza di punta caratteristica R_b,k [kN].
    """
    if q_b < 0:
        raise ValueError(f"q_b deve essere >= 0: {q_b}")
    if A_b <= 0:
        raise ValueError(f"A_b deve essere > 0: {A_b}")

    return float(q_b * A_b)

geo_pile_characteristic_resistance(R_values, method)

Resistenza caratteristica del palo singolo [kN].

NTC18 §6.4.3.1.1 — [6.4.1]-[6.4.5].

Parameters

R_values : list[float] Valori delle resistenze misurate o calcolate [kN]. method : str Metodo di determinazione: "static" (prove statiche, [6.4.1]), "profiles" (verticali di indagine, [6.4.3]), "dynamic" (prove dinamiche, [6.4.5]).

Returns

float Resistenza caratteristica R_c,k [kN].

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.4.3.1.1", formula="6.4.1", latex=r"R_{c,k} = \min\!\left(\frac{R_{c,\mathrm{medio}}}{\xi_1},\;\frac{R_{c,\min}}{\xi_2}\right)")
def geo_pile_characteristic_resistance(
    R_values: list[float],
    method: str,
) -> float:
    """Resistenza caratteristica del palo singolo [kN].

    NTC18 §6.4.3.1.1 — [6.4.1]-[6.4.5].

    Parameters
    ----------
    R_values : list[float]
        Valori delle resistenze misurate o calcolate [kN].
    method : str
        Metodo di determinazione: ``"static"`` (prove statiche, [6.4.1]),
        ``"profiles"`` (verticali di indagine, [6.4.3]),
        ``"dynamic"`` (prove dinamiche, [6.4.5]).

    Returns
    -------
    float
        Resistenza caratteristica R_c,k [kN].
    """
    if not R_values:
        raise ValueError("La lista delle resistenze non puo' essere vuota.")

    arr = np.asarray(R_values, dtype=float)
    n = len(arr)
    mean_val = float(np.mean(arr))
    min_val = float(np.min(arr))

    if method == "static":
        xi1, xi2 = geo_pile_correlation_static.__wrapped__(n)
        return min(mean_val / xi1, min_val / xi2)
    elif method == "profiles":
        xi3, xi4 = geo_pile_correlation_profiles.__wrapped__(n)
        return min(mean_val / xi3, min_val / xi4)
    elif method == "dynamic":
        xi5, xi6 = geo_pile_correlation_dynamic.__wrapped__(n)
        return min(mean_val / xi5, min_val / xi6)
    else:
        raise ValueError(
            f"Metodo non valido: {method!r}. "
            f"Valori ammessi: 'static', 'profiles', 'dynamic'"
        )

geo_pile_check(N_Ed, R_c_d)

Verifica portanza assiale di un palo — NTC18 §6.4.3.1.

Parameters

N_Ed : float Carico assiale di progetto [kN]. R_c_d : float Resistenza totale di progetto del palo [kN].

Returns

tuple[bool, float] (verificato, rapporto N_Ed / R_c,d).

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.4.3.1", latex=r"N_{Ed} \le R_{c,d}")
def geo_pile_check(N_Ed: float, R_c_d: float) -> tuple[bool, float]:
    """Verifica portanza assiale di un palo — NTC18 §6.4.3.1.

    Parameters
    ----------
    N_Ed : float
        Carico assiale di progetto [kN].
    R_c_d : float
        Resistenza totale di progetto del palo [kN].

    Returns
    -------
    tuple[bool, float]
        (verificato, rapporto N_Ed / R_c,d).
    """
    if R_c_d <= 0:
        raise ValueError(f"R_c_d deve essere > 0: {R_c_d}")

    ratio = N_Ed / R_c_d
    return ratio <= 1.0, float(ratio)

geo_pile_correlation_dynamic(n_tests)

Fattori di correlazione xi per prove dinamiche su pali.

NTC18 §6.4.3.1.1 — Tab. 6.4.V.

Parameters

n_tests : int Numero di prove dinamiche ad alto livello di deformazione.

Returns

tuple[float, float] (xi_5, xi_6).

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.4.3.1.1", table="Tab.6.4.V", latex=r"\text{Tab.\,6.4.V} \;\to\; (\xi_5,\,\xi_6)")
def geo_pile_correlation_dynamic(n_tests: int) -> tuple[float, float]:
    """Fattori di correlazione xi per prove dinamiche su pali.

    NTC18 §6.4.3.1.1 — Tab. 6.4.V.

    Parameters
    ----------
    n_tests : int
        Numero di prove dinamiche ad alto livello di deformazione.

    Returns
    -------
    tuple[float, float]
        (xi_5, xi_6).
    """
    if n_tests < 2:
        raise ValueError(
            f"Numero di prove dinamiche deve essere >= 2: {n_tests}"
        )
    for min_n, xi5, xi6 in _PILE_XI_DYNAMIC:
        if n_tests >= min_n:
            return (xi5, xi6)
    return _PILE_XI_DYNAMIC[-1][1:]  # pragma: no cover

geo_pile_correlation_profiles(n_profiles)

Fattori di correlazione xi per verticali di indagine su pali.

NTC18 §6.4.3.1.1 — Tab. 6.4.IV.

Parameters

n_profiles : int Numero di verticali di indagine.

Returns

tuple[float, float] (xi_3, xi_4).

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.4.3.1.1", table="Tab.6.4.IV", latex=r"\text{Tab.\,6.4.IV} \;\to\; (\xi_3,\,\xi_4)")
def geo_pile_correlation_profiles(n_profiles: int) -> tuple[float, float]:
    """Fattori di correlazione xi per verticali di indagine su pali.

    NTC18 §6.4.3.1.1 — Tab. 6.4.IV.

    Parameters
    ----------
    n_profiles : int
        Numero di verticali di indagine.

    Returns
    -------
    tuple[float, float]
        (xi_3, xi_4).
    """
    if n_profiles < 1:
        raise ValueError(
            f"Numero di verticali di indagine deve essere >= 1: {n_profiles}"
        )
    return _interpolate_pile_profiles(n_profiles, _PILE_XI_PROFILES)

geo_pile_correlation_static(n_tests)

Fattori di correlazione xi per prove di carico statiche su pali.

NTC18 §6.4.3.1.1 — Tab. 6.4.III.

Parameters

n_tests : int Numero di prove di carico statiche su pali pilota.

Returns

tuple[float, float] (xi_1, xi_2).

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.4.3.1.1", table="Tab.6.4.III", latex=r"\text{Tab.\,6.4.III} \;\to\; (\xi_1,\,\xi_2)")
def geo_pile_correlation_static(n_tests: int) -> tuple[float, float]:
    """Fattori di correlazione xi per prove di carico statiche su pali.

    NTC18 §6.4.3.1.1 — Tab. 6.4.III.

    Parameters
    ----------
    n_tests : int
        Numero di prove di carico statiche su pali pilota.

    Returns
    -------
    tuple[float, float]
        (xi_1, xi_2).
    """
    if n_tests < 1:
        raise ValueError(f"Numero di prove deve essere >= 1: {n_tests}")
    if n_tests >= 5:
        return (1.0, 1.0)
    return _PILE_XI_STATIC[n_tests]

geo_pile_resistance_factors(resistance, pile_type)

Coefficiente parziale R3 per resistenza assiale dei pali [-].

NTC18 §6.4.3.1.1 — Tab. 6.4.II.

Parameters

resistance : str Tipo di resistenza: "base", "shaft" (laterale compressione), "total", "shaft_tension" (laterale trazione). pile_type : str Tipo di palo: "driven" (infissi), "bored" (trivellati), "cfa" (ad elica continua).

Returns

float Coefficiente parziale gamma_R [-].

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.4.3.1.1", table="Tab.6.4.II", latex=r"\text{Tab.\,6.4.II}")
def geo_pile_resistance_factors(resistance: str, pile_type: str) -> float:
    """Coefficiente parziale R3 per resistenza assiale dei pali [-].

    NTC18 §6.4.3.1.1 — Tab. 6.4.II.

    Parameters
    ----------
    resistance : str
        Tipo di resistenza: ``"base"``, ``"shaft"`` (laterale compressione),
        ``"total"``, ``"shaft_tension"`` (laterale trazione).
    pile_type : str
        Tipo di palo: ``"driven"`` (infissi), ``"bored"`` (trivellati),
        ``"cfa"`` (ad elica continua).

    Returns
    -------
    float
        Coefficiente parziale gamma_R [-].
    """
    key = (resistance, pile_type)
    if key not in _PILE_FACTORS:
        valid_res = {"base", "shaft", "total", "shaft_tension"}
        valid_types = {"driven", "bored", "cfa"}
        if resistance not in valid_res:
            raise ValueError(
                f"Tipo di resistenza non valido: {resistance!r}. "
                f"Valori ammessi: {valid_res}"
            )
        if pile_type not in valid_types:
            raise ValueError(
                f"Tipo di palo non valido: {pile_type!r}. "
                f"Valori ammessi: {valid_types}"
            )
        raise ValueError(f"Combinazione non trovata: {key}")  # pragma: no cover
    return _PILE_FACTORS[key]

geo_pile_skin_friction(c_u, alpha, perimeter, length)

Resistenza laterale caratteristica di un palo in argilla — metodo α.

NTC18 §6.4.3.1.

Parameters

c_u : float Resistenza al taglio non drenata [kPa]. alpha : float Fattore di adesione [-] (tipico 0.5–1.0). perimeter : float Perimetro della sezione del palo [m]. length : float Lunghezza del palo [m].

Returns

float Resistenza laterale caratteristica R_s,k [kN].

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.4.3.1", latex=r"R_{s,k} = \alpha\,c_u\,U\,L")
def geo_pile_skin_friction(
    c_u: float,
    alpha: float,
    perimeter: float,
    length: float,
) -> float:
    """Resistenza laterale caratteristica di un palo in argilla — metodo α.

    NTC18 §6.4.3.1.

    Parameters
    ----------
    c_u : float
        Resistenza al taglio non drenata [kPa].
    alpha : float
        Fattore di adesione [-] (tipico 0.5–1.0).
    perimeter : float
        Perimetro della sezione del palo [m].
    length : float
        Lunghezza del palo [m].

    Returns
    -------
    float
        Resistenza laterale caratteristica R_s,k [kN].
    """
    if c_u < 0:
        raise ValueError(f"c_u deve essere >= 0: {c_u}")
    if alpha <= 0:
        raise ValueError(f"alpha deve essere > 0: {alpha}")
    if perimeter <= 0:
        raise ValueError(f"perimeter deve essere > 0: {perimeter}")
    if length <= 0:
        raise ValueError(f"length deve essere > 0: {length}")

    return float(alpha * c_u * perimeter * length)

geo_pile_total_resistance(R_s_k, R_b_k, xi, gamma_t=1.15)

Resistenza totale di progetto di un palo [kN].

NTC18 §6.4.3.1.1 — R_c,d = (R_s,k + R_b,k) / (xi * gamma_t).

Parameters

R_s_k : float Resistenza laterale caratteristica [kN]. R_b_k : float Resistenza di punta caratteristica [kN]. xi : float Fattore di correlazione xi [-]. gamma_t : float, optional Coefficiente parziale gamma_t [-], default 1.15.

Returns

float Resistenza totale di progetto R_c,d [kN].

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.4.3.1.1", formula="6.4.2", latex=r"R_{c,d} = R_{c,k} / \gamma_t")
def geo_pile_total_resistance(
    R_s_k: float,
    R_b_k: float,
    xi: float,
    gamma_t: float = 1.15,
) -> float:
    """Resistenza totale di progetto di un palo [kN].

    NTC18 §6.4.3.1.1 — R_c,d = (R_s,k + R_b,k) / (xi * gamma_t).

    Parameters
    ----------
    R_s_k : float
        Resistenza laterale caratteristica [kN].
    R_b_k : float
        Resistenza di punta caratteristica [kN].
    xi : float
        Fattore di correlazione xi [-].
    gamma_t : float, optional
        Coefficiente parziale gamma_t [-], default 1.15.

    Returns
    -------
    float
        Resistenza totale di progetto R_c,d [kN].
    """
    if R_s_k < 0:
        raise ValueError(f"R_s_k deve essere >= 0: {R_s_k}")
    if R_b_k < 0:
        raise ValueError(f"R_b_k deve essere >= 0: {R_b_k}")
    if xi <= 0:
        raise ValueError(f"xi deve essere > 0: {xi}")
    if gamma_t <= 0:
        raise ValueError(f"gamma_t deve essere > 0: {gamma_t}")

    R_c_k = R_s_k + R_b_k
    return float(R_c_k / (xi * gamma_t))

geo_pile_transverse_factor()

Coefficiente parziale R3 per pali soggetti a carichi trasversali [-].

NTC18 §6.4.3.1.2 — Tab. 6.4.VI.

Returns

float Coefficiente parziale gamma_T = 1.3 [-].

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.4.3.1.2", table="Tab.6.4.VI", latex=r"\gamma_T = 1{,}3")
def geo_pile_transverse_factor() -> float:
    """Coefficiente parziale R3 per pali soggetti a carichi trasversali [-].

    NTC18 §6.4.3.1.2 — Tab. 6.4.VI.

    Returns
    -------
    float
        Coefficiente parziale gamma_T = 1.3 [-].
    """
    return 1.3

geo_retaining_wall_factors(verification)

Coefficiente parziale R3 per muri di sostegno [-].

NTC18 §6.5.3.1.1 — Tab. 6.5.1.

Parameters

verification : str Tipo di verifica: "bearing" (capacita' portante), "sliding" (scorrimento), "overturning" (ribaltamento), "passive" (resistenza del terreno a valle).

Returns

float Coefficiente parziale gamma_R [-].

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.5.3.1.1", table="Tab.6.5.1", latex=r"\text{Tab.\,6.5.I}")
def geo_retaining_wall_factors(verification: str) -> float:
    """Coefficiente parziale R3 per muri di sostegno [-].

    NTC18 §6.5.3.1.1 — Tab. 6.5.1.

    Parameters
    ----------
    verification : str
        Tipo di verifica: ``"bearing"`` (capacita' portante),
        ``"sliding"`` (scorrimento), ``"overturning"`` (ribaltamento),
        ``"passive"`` (resistenza del terreno a valle).

    Returns
    -------
    float
        Coefficiente parziale gamma_R [-].
    """
    factors = {
        "bearing": 1.4,
        "sliding": 1.1,
        "overturning": 1.15,
        "passive": 1.4,
    }
    if verification not in factors:
        raise ValueError(
            f"Tipo di verifica non valido: {verification!r}. "
            f"Valori ammessi: {set(factors.keys())}"
        )
    return factors[verification]

geo_retaining_wall_resistance_factor(verification)

Coefficiente parziale R3 per muri di sostegno [-].

NTC18 §6.5.3.1.1 — Tab. 6.5.1.

Parameters

verification : str Tipo di verifica: "bearing" (capacita' portante della fondazione, 1.4), "sliding" (scorrimento, 1.1), "overturning" (ribaltamento, 1.15), "passive" (resistenza del terreno a valle, 1.4).

Returns

float Coefficiente parziale γ_n [-].

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(
    article="6.5.3.1.1",
    table="Tab.6.5.1",
    latex=r"\gamma_n \;\text{(R3)}",
)
def geo_retaining_wall_resistance_factor(verification: str) -> float:
    """Coefficiente parziale R3 per muri di sostegno [-].

    NTC18 §6.5.3.1.1 — Tab. 6.5.1.

    Parameters
    ----------
    verification : str
        Tipo di verifica: ``"bearing"`` (capacita' portante della fondazione,
        1.4), ``"sliding"`` (scorrimento, 1.1), ``"overturning"``
        (ribaltamento, 1.15), ``"passive"`` (resistenza del terreno a valle,
        1.4).

    Returns
    -------
    float
        Coefficiente parziale γ_n [-].
    """
    if verification not in _RETAINING_WALL_FACTORS:
        raise ValueError(
            f"Tipo di verifica non valido: {verification!r}. "
            f"Valori ammessi: {set(_RETAINING_WALL_FACTORS.keys())}"
        )
    return _RETAINING_WALL_FACTORS[verification]

geo_settlement_check(s_calc, s_lim)

Verifica del cedimento calcolato rispetto al limite ammissibile.

NTC18 §6.4.2 — s_calc <= s_lim.

Parameters

s_calc : float Cedimento calcolato [m o mm]. s_lim : float Cedimento limite ammissibile [m o mm].

Returns

tuple[bool, float] (verificato, ratio = s_calc / s_lim).

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.4.2", latex=r"s \le s_{lim}")
def geo_settlement_check(s_calc: float, s_lim: float) -> tuple[bool, float]:
    """Verifica del cedimento calcolato rispetto al limite ammissibile.

    NTC18 §6.4.2 — s_calc <= s_lim.

    Parameters
    ----------
    s_calc : float
        Cedimento calcolato [m o mm].
    s_lim : float
        Cedimento limite ammissibile [m o mm].

    Returns
    -------
    tuple[bool, float]
        (verificato, ratio = s_calc / s_lim).
    """
    if s_calc < 0:
        raise ValueError(f"s_calc deve essere >= 0, ricevuto {s_calc}")
    if s_lim <= 0:
        raise ValueError(f"s_lim deve essere > 0, ricevuto {s_lim}")
    ratio = s_calc / s_lim
    return ratio <= 1.0, ratio

geo_settlement_elastic(q, B, E_s, nu=0.3, I_s=0.8)

Cedimento elastico di fondazione superficiale [m].

NTC18 §6.4.2 — Formula di Janbu/Schmertmann semplificata.

Parameters

q : float Pressione di contatto [kPa]. B : float Dimensione caratteristica della fondazione [m]. E_s : float Modulo elastico del terreno [kPa]. nu : float Coefficiente di Poisson (default 0.3). I_s : float Fattore di forma (default 0.8 per fondazione flessibile quadrata).

Returns

float Cedimento elastico s [m].

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.4.2", latex=r"s = q B (1-\nu^2) I_s / E_s")
def geo_settlement_elastic(
    q: float,
    B: float,
    E_s: float,
    nu: float = 0.3,
    I_s: float = 0.8,
) -> float:
    """Cedimento elastico di fondazione superficiale [m].

    NTC18 §6.4.2 — Formula di Janbu/Schmertmann semplificata.

    Parameters
    ----------
    q : float
        Pressione di contatto [kPa].
    B : float
        Dimensione caratteristica della fondazione [m].
    E_s : float
        Modulo elastico del terreno [kPa].
    nu : float
        Coefficiente di Poisson (default 0.3).
    I_s : float
        Fattore di forma (default 0.8 per fondazione flessibile quadrata).

    Returns
    -------
    float
        Cedimento elastico s [m].
    """
    if q < 0:
        raise ValueError(f"q deve essere >= 0, ricevuto {q}")
    if B <= 0:
        raise ValueError(f"B deve essere > 0, ricevuto {B}")
    if E_s <= 0:
        raise ValueError(f"E_s deve essere > 0, ricevuto {E_s}")
    if not (0.0 <= nu < 0.5):
        raise ValueError(f"nu deve essere in [0, 0.5), ricevuto {nu}")
    return q * B * (1.0 - nu**2) / E_s * I_s

geo_shallow_bearing_capacity(c_k, phi_k, gamma, B, L, D, q_surcharge=0.0)

Resistenza caratteristica di una fondazione superficiale [kPa].

NTC18 §6.4.1 — Formula di Brinch-Hansen semplificata (senza fattori di inclinazione/forma).

Parameters

c_k : float Coesione caratteristica del terreno [kPa]. phi_k : float Angolo di attrito caratteristico [gradi]. gamma : float Peso specifico del terreno [kN/m³]. B : float Larghezza della fondazione [m]. L : float Lunghezza della fondazione [m] (riservato per estensioni future). D : float Profondità del piano di posa [m]. q_surcharge : float, optional Sovraccarico aggiuntivo in superficie [kPa], default 0.0.

Returns

float Carico limite unitario q_lim [kPa].

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.4.1", latex=r"q_{lim} = c N_c + q N_q + 0.5\,\gamma B N_\gamma")
def geo_shallow_bearing_capacity(
    c_k: float,
    phi_k: float,
    gamma: float,
    B: float,
    L: float,
    D: float,
    q_surcharge: float = 0.0,
) -> float:
    """Resistenza caratteristica di una fondazione superficiale [kPa].

    NTC18 §6.4.1 — Formula di Brinch-Hansen semplificata (senza fattori di
    inclinazione/forma).

    Parameters
    ----------
    c_k : float
        Coesione caratteristica del terreno [kPa].
    phi_k : float
        Angolo di attrito caratteristico [gradi].
    gamma : float
        Peso specifico del terreno [kN/m³].
    B : float
        Larghezza della fondazione [m].
    L : float
        Lunghezza della fondazione [m] (riservato per estensioni future).
    D : float
        Profondità del piano di posa [m].
    q_surcharge : float, optional
        Sovraccarico aggiuntivo in superficie [kPa], default 0.0.

    Returns
    -------
    float
        Carico limite unitario q_lim [kPa].
    """
    if c_k < 0:
        raise ValueError(f"c_k deve essere >= 0: {c_k}")
    if gamma <= 0:
        raise ValueError(f"gamma deve essere > 0: {gamma}")
    if B <= 0:
        raise ValueError(f"B deve essere > 0: {B}")
    if D < 0:
        raise ValueError(f"D deve essere >= 0: {D}")

    factors = geo_bearing_capacity_factors.__wrapped__(phi_k)
    N_c = factors["N_c"]
    N_q = factors["N_q"]
    N_gamma = factors["N_gamma"]

    q = gamma * D + q_surcharge
    q_lim = c_k * N_c + q * N_q + 0.5 * gamma * B * N_gamma
    return float(q_lim)

geo_shallow_foundation_check(N_Ed, A, q_lim, gamma_R=1.0)

Verifica portanza fondazione superficiale — NTC18 §6.4.1.

Parameters

N_Ed : float Carico verticale di progetto [kN]. A : float Area della fondazione [m²]. q_lim : float Carico limite unitario caratteristico [kPa]. gamma_R : float, optional Coefficiente parziale sulla resistenza [-], default 1.0.

Returns

tuple[bool, float] (verificato, rapporto q_Ed / R_d).

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.4.1", formula="6.2.1", latex=r"q_{Ed} \le q_{lim}/\gamma_R")
def geo_shallow_foundation_check(
    N_Ed: float,
    A: float,
    q_lim: float,
    gamma_R: float = 1.0,
) -> tuple[bool, float]:
    """Verifica portanza fondazione superficiale — NTC18 §6.4.1.

    Parameters
    ----------
    N_Ed : float
        Carico verticale di progetto [kN].
    A : float
        Area della fondazione [m²].
    q_lim : float
        Carico limite unitario caratteristico [kPa].
    gamma_R : float, optional
        Coefficiente parziale sulla resistenza [-], default 1.0.

    Returns
    -------
    tuple[bool, float]
        (verificato, rapporto q_Ed / R_d).
    """
    if A <= 0:
        raise ValueError(f"A deve essere > 0: {A}")
    if q_lim <= 0:
        raise ValueError(f"q_lim deve essere > 0: {q_lim}")
    if gamma_R <= 0:
        raise ValueError(f"gamma_R deve essere > 0: {gamma_R}")

    q_Ed = N_Ed / A
    R_d = q_lim / gamma_R
    ratio = q_Ed / R_d
    return ratio <= 1.0, float(ratio)

geo_shallow_foundation_factors(verification)

Coefficiente parziale R3 per fondazioni superficiali [-].

NTC18 §6.4.2.1 — Tab. 6.4.1.

Parameters

verification : str Tipo di verifica: "bearing" (carico limite) o "sliding" (scorrimento).

Returns

float Coefficiente parziale gamma_R [-].

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.4.2.1", table="Tab.6.4.1", latex=r"\text{Tab.\,6.4.I}")
def geo_shallow_foundation_factors(verification: str) -> float:
    """Coefficiente parziale R3 per fondazioni superficiali [-].

    NTC18 §6.4.2.1 — Tab. 6.4.1.

    Parameters
    ----------
    verification : str
        Tipo di verifica: ``"bearing"`` (carico limite) o
        ``"sliding"`` (scorrimento).

    Returns
    -------
    float
        Coefficiente parziale gamma_R [-].
    """
    factors = {"bearing": 2.3, "sliding": 1.1}
    if verification not in factors:
        raise ValueError(
            f"Tipo di verifica non valido: {verification!r}. "
            f"Valori ammessi: {set(factors.keys())}"
        )
    return factors[verification]

geo_sifonamento_check(value, critical, check_type)

Verifica al sifonamento.

NTC18 §6.2.4.2.

Parameters

value : float Gradiente idraulico i (per "mean" e "outflow") oppure pressione interstiziale in eccesso delta_u [kPa] (per "excess_pressure"). critical : float Gradiente idraulico critico i_c (per "mean" e "outflow") oppure tensione verticale efficace sigma'_v [kPa] (per "excess_pressure"). check_type : str "mean" (gradiente medio, gamma_R=3), "outflow" (gradiente di efflusso, gamma_R=2), "excess_pressure" (pressione in eccesso, gamma_R=2).

Returns

tuple[bool, float] (verificato, rapporto value / limite).

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.2.4.2", latex=r"i \le \frac{i_c}{\gamma_R}")
def geo_sifonamento_check(
    value: float,
    critical: float,
    check_type: str,
) -> tuple[bool, float]:
    """Verifica al sifonamento.

    NTC18 §6.2.4.2.

    Parameters
    ----------
    value : float
        Gradiente idraulico i (per ``"mean"`` e ``"outflow"``) oppure
        pressione interstiziale in eccesso delta_u [kPa] (per
        ``"excess_pressure"``).
    critical : float
        Gradiente idraulico critico i_c (per ``"mean"`` e ``"outflow"``)
        oppure tensione verticale efficace sigma'_v [kPa] (per
        ``"excess_pressure"``).
    check_type : str
        ``"mean"`` (gradiente medio, gamma_R=3),
        ``"outflow"`` (gradiente di efflusso, gamma_R=2),
        ``"excess_pressure"`` (pressione in eccesso, gamma_R=2).

    Returns
    -------
    tuple[bool, float]
        (verificato, rapporto value / limite).
    """
    if check_type == "mean":
        limit = critical / 3.0
    elif check_type == "outflow":
        limit = critical / 2.0
    elif check_type == "excess_pressure":
        limit = critical / 2.0
    else:
        raise ValueError(
            f"Tipo di verifica non valido: {check_type!r}. "
            f"Valori ammessi: 'mean', 'outflow', 'excess_pressure'"
        )
    ratio = value / limit
    return ratio <= 1.0, ratio

geo_uplift_check(V_inst_d, G_stb_d, R_d)

Verifica al sollevamento [6.2.4].

NTC18 §6.2.4.2 — V_inst,d <= G_stb,d + R_d.

Parameters

V_inst_d : float Valore di progetto dell'azione instabilizzante [kN]. G_stb_d : float Valore di progetto dell'azione stabilizzante [kN]. R_d : float Valore di progetto della resistenza [kN].

Returns

tuple[bool, float] (verificato, rapporto V_inst_d / (G_stb_d + R_d)).

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.2.4.2", formula="6.2.4", latex=r"V_{\mathrm{inst},d} \le G_{\mathrm{stb},d} + R_d")
def geo_uplift_check(
    V_inst_d: float,
    G_stb_d: float,
    R_d: float,
) -> tuple[bool, float]:
    """Verifica al sollevamento [6.2.4].

    NTC18 §6.2.4.2 — V_inst,d <= G_stb,d + R_d.

    Parameters
    ----------
    V_inst_d : float
        Valore di progetto dell'azione instabilizzante [kN].
    G_stb_d : float
        Valore di progetto dell'azione stabilizzante [kN].
    R_d : float
        Valore di progetto della resistenza [kN].

    Returns
    -------
    tuple[bool, float]
        (verificato, rapporto V_inst_d / (G_stb_d + R_d)).
    """
    if V_inst_d < 0 or G_stb_d < 0 or R_d < 0:
        raise ValueError("I valori non possono essere negativi.")
    stb = G_stb_d + R_d
    if stb == 0:
        raise ValueError("La somma G_stb_d + R_d non puo' essere zero.")
    ratio = V_inst_d / stb
    return ratio <= 1.0, ratio

geo_uplift_partial_factors(load_type, effect)

Coefficiente parziale per verifiche al sollevamento (UPL) [-].

NTC18 §6.2.4.2 — Tab. 6.2.III.

Parameters

load_type : str Tipo di carico: "G1", "G2", "Q". effect : str "favorable" o "unfavorable".

Returns

float Coefficiente parziale gamma_F [-].

Source code in src/pyntc/checks/geotechnical.py
@ntc_ref(article="6.2.4.2", table="Tab.6.2.III", latex=r"\text{Tab.\,6.2.III}")
def geo_uplift_partial_factors(load_type: str, effect: str) -> float:
    """Coefficiente parziale per verifiche al sollevamento (UPL) [-].

    NTC18 §6.2.4.2 — Tab. 6.2.III.

    Parameters
    ----------
    load_type : str
        Tipo di carico: ``"G1"``, ``"G2"``, ``"Q"``.
    effect : str
        ``"favorable"`` o ``"unfavorable"``.

    Returns
    -------
    float
        Coefficiente parziale gamma_F [-].
    """
    key = (load_type, effect)
    if key not in _UPLIFT_FACTORS:
        valid_loads = {"G1", "G2", "Q"}
        valid_effects = {"favorable", "unfavorable"}
        if load_type not in valid_loads:
            raise ValueError(
                f"Tipo di carico non valido: {load_type!r}. "
                f"Valori ammessi: {valid_loads}"
            )
        if effect not in valid_effects:
            raise ValueError(
                f"Effetto non valido: {effect!r}. Valori ammessi: {valid_effects}"
            )
        raise ValueError(f"Combinazione non trovata: {key}")  # pragma: no cover
    return _UPLIFT_FACTORS[key]