def _gti_dirint_lt_90(poa_global, aoi, aoi_lt_90, solar_zenith, solar_azimuth,<EOL>times, surface_tilt, surface_azimuth, pressure=<NUM_LIT>,<EOL>use_delta_kt_prime=True, temp_dew=None, albedo=<NUM_LIT>,<EOL>model='<STR_LIT>', model_perez='<STR_LIT>',<EOL>max_iterations=<NUM_LIT:30>):
I0 = get_extra_radiation(times, <NUM_LIT>, '<STR_LIT>')<EOL>cos_zenith = tools.cosd(solar_zenith)<EOL>I0h = I0 * np.maximum(<NUM_LIT>, cos_zenith)<EOL>airmass = atmosphere.get_relative_airmass(solar_zenith, model='<STR_LIT>')<EOL>airmass = atmosphere.get_absolute_airmass(airmass, pressure)<EOL>coeffs = np.empty(max(<NUM_LIT:30>, max_iterations))<EOL>coeffs[<NUM_LIT:0>:<NUM_LIT:3>] = <NUM_LIT:1><EOL>coeffs[<NUM_LIT:3>:<NUM_LIT:10>] = <NUM_LIT:0.5><EOL>coeffs[<NUM_LIT:10>:<NUM_LIT:20>] = <NUM_LIT><EOL>coeffs[<NUM_LIT:20>:] = <NUM_LIT><EOL>coeffs = coeffs[:max_iterations]  <EOL>diff = pd.Series(<NUM_LIT>, index=times)<EOL>best_diff = diff<EOL>poa_global_i = poa_global<EOL>for iteration, coeff in enumerate(coeffs):<EOL><INDENT>best_diff_lte_1 = best_diff <= <NUM_LIT:1><EOL>best_diff_lte_1_lt_90 = best_diff_lte_1[aoi_lt_90]<EOL>if best_diff_lte_1_lt_90.all():<EOL><INDENT>break<EOL><DEDENT>kt = clearness_index(poa_global_i, aoi, I0)  <EOL>disc_dni = np.maximum(_disc_kn(kt, airmass)[<NUM_LIT:0>] * I0, <NUM_LIT:0>)<EOL>kt_prime = clearness_index_zenith_independent(kt, airmass)<EOL>dni = _dirint_from_dni_ktprime(disc_dni, kt_prime, solar_zenith,<EOL>use_delta_kt_prime, temp_dew)<EOL>ghi = kt * I0h                  <EOL>dhi = ghi - dni * cos_zenith    <EOL>dni = np.maximum(dni, <NUM_LIT:0>)<EOL>ghi = np.maximum(ghi, <NUM_LIT:0>)<EOL>dhi = np.maximum(dhi, <NUM_LIT:0>)<EOL>all_irrad = get_total_irradiance(<EOL>surface_tilt, surface_azimuth, solar_zenith, solar_azimuth,<EOL>dni, ghi, dhi, dni_extra=I0, airmass=airmass,<EOL>albedo=albedo, model=model, model_perez=model_perez)<EOL>gti_model = all_irrad['<STR_LIT>']<EOL>diff = gti_model - poa_global<EOL>diff_abs = diff.abs()<EOL>smallest_diff = diff_abs < best_diff<EOL>best_diff = diff_abs.where(smallest_diff, best_diff)<EOL>if iteration == <NUM_LIT:0>:<EOL><INDENT>best_ghi = ghi<EOL>best_dni = dni<EOL>best_dhi = dhi<EOL>best_kt_prime = kt_prime<EOL><DEDENT>else:<EOL><INDENT>best_ghi = ghi.where(smallest_diff, best_ghi)<EOL>best_dni = dni.where(smallest_diff, best_dni)<EOL>best_dhi = dhi.where(smallest_diff, best_dhi)<EOL>best_kt_prime = kt_prime.where(smallest_diff, best_kt_prime)<EOL><DEDENT>poa_global_i = np.maximum(<NUM_LIT:1.0>, poa_global_i - coeff * diff)<EOL><DEDENT>else:<EOL><INDENT>import warnings<EOL>failed_points = best_diff[aoi_lt_90][~best_diff_lte_1_lt_90]<EOL>warnings.warn(<EOL>('<STR_LIT>'<EOL>% (len(failed_points), max_iterations, failed_points)),<EOL>RuntimeWarning)<EOL><DEDENT>return best_ghi, best_dni, best_dhi, best_kt_prime<EOL>
GTI-DIRINT model for AOI < 90 degrees. See Marion 2015 Section 2.1.

See gti_dirint signature for parameter details.