| Conditions | 4 |
| Total Lines | 90 |
| Code Lines | 31 |
| Lines | 0 |
| Ratio | 0 % |
| Changes | 0 | ||
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
| 1 | # -*- coding: utf-8 -*- |
||
| 85 | def subsol(year, doy, utime): |
||
| 86 | """Finds subsolar geocentric longitude and latitude. |
||
| 87 | |||
| 88 | Parameters |
||
| 89 | ------------ |
||
| 90 | year : (int) |
||
| 91 | Calendar year between 1601 and 2100 |
||
| 92 | doy : (int) |
||
| 93 | Day of year between 1-365/366 |
||
| 94 | utime : (float) |
||
| 95 | Seconds since midnight on the specified day |
||
| 96 | |||
| 97 | Returns |
||
| 98 | --------- |
||
| 99 | sbsllon : (float) |
||
| 100 | Subsolar longitude in degrees E for the given date/time |
||
| 101 | sbsllat : (float) |
||
| 102 | Subsolar latitude in degrees N for the given date/time |
||
| 103 | |||
| 104 | Notes |
||
| 105 | -------- |
||
| 106 | Based on formulas in Astronomical Almanac for the year 1996, p. C24. |
||
| 107 | (U.S. Government Printing Office, 1994). Usable for years 1601-2100, |
||
| 108 | inclusive. According to the Almanac, results are good to at least 0.01 |
||
| 109 | degree latitude and 0.025 degrees longitude between years 1950 and 2050. |
||
| 110 | Accuracy for other years has not been tested. Every day is assumed to have |
||
| 111 | exactly 86400 seconds; thus leap seconds that sometimes occur on December |
||
| 112 | 31 are ignored (their effect is below the accuracy threshold of the |
||
| 113 | algorithm). |
||
| 114 | After Fortran code by A. D. Richmond, NCAR. Translated from IDL |
||
| 115 | by K. Laundal. |
||
| 116 | """ |
||
| 117 | dstr = "Deprecated routine, may be removed in future versions" |
||
| 118 | warnings.warn(dstr, category=FutureWarning) |
||
| 119 | |||
| 120 | |||
| 121 | yr2 = year - 2000 |
||
| 122 | |||
| 123 | if year >= 2101: |
||
| 124 | logging.error('subsol invalid after 2100. Input year is:', year) |
||
| 125 | |||
| 126 | nleap = np.floor((year - 1601) / 4) |
||
| 127 | nleap = nleap - 99 |
||
| 128 | if year <= 1900: |
||
| 129 | if year <= 1600: |
||
| 130 | print('subsol.py: subsol invalid before 1601. Input year is:', year) |
||
| 131 | ncent = np.floor((year - 1601) / 100) |
||
| 132 | ncent = 3 - ncent |
||
| 133 | nleap = nleap + ncent |
||
| 134 | |||
| 135 | l_0 = -79.549 + (-0.238699 * (yr2 - 4 * nleap) + 3.08514e-2 * nleap) |
||
| 136 | g_0 = -2.472 + (-0.2558905 * (yr2 - 4 * nleap) - 3.79617e-2 * nleap) |
||
| 137 | |||
| 138 | # Days (including fraction) since 12 UT on January 1 of IYR2: |
||
| 139 | dfrac = (utime / 86400 - 1.5) + doy |
||
| 140 | |||
| 141 | # Mean longitude of Sun: |
||
| 142 | l_sun = l_0 + 0.9856474 * dfrac |
||
| 143 | |||
| 144 | # Mean anomaly: |
||
| 145 | grad = np.radians(g_0 + 0.9856003 * dfrac) |
||
| 146 | |||
| 147 | # Ecliptic longitude: |
||
| 148 | lmrad = np.radians(l_sun + 1.915 * np.sin(grad) + 0.020 * np.sin(2 * grad)) |
||
| 149 | sinlm = np.sin(lmrad) |
||
| 150 | |||
| 151 | # Days (including fraction) since 12 UT on January 1 of 2000: |
||
| 152 | epoch_day = dfrac + 365.0 * yr2 + nleap |
||
| 153 | |||
| 154 | # Obliquity of ecliptic: |
||
| 155 | epsrad = np.radians(23.439 - 4.0e-7 * epoch_day) |
||
| 156 | |||
| 157 | # Right ascension: |
||
| 158 | alpha = np.degrees(np.arctan2(np.cos(epsrad) * sinlm, np.cos(lmrad))) |
||
| 159 | |||
| 160 | # Declination, which is the subsolar latitude: |
||
| 161 | sbsllat = np.degrees(np.arcsin(np.sin(epsrad) * sinlm)) |
||
| 162 | |||
| 163 | # Equation of time (degrees): |
||
| 164 | etdeg = l_sun - alpha |
||
| 165 | etdeg = etdeg - 360.0 * np.round(etdeg / 360.0) |
||
| 166 | |||
| 167 | # Apparent time (degrees): |
||
| 168 | aptime = utime / 240.0 + etdeg # Earth rotates one degree every 240 s. |
||
| 169 | |||
| 170 | # Subsolar longitude: |
||
| 171 | sbsllon = 180.0 - aptime |
||
| 172 | sbsllon = sbsllon - 360.0 * np.round(sbsllon / 360.0) |
||
| 173 | |||
| 174 | return sbsllon, sbsllat |
||
| 175 | |||
| 271 |