DOI: 10.5061/dryad.r4xgxd2qb
title: Data from: The seasonal cycles of tropical sea surface temperature from Earth's axial tilt and orbital eccentricity

description: We explore the relative roles of Earth’s axial tilt (‘tilt effect’) and
 orbital eccentricity (‘distance effect’) on the seasonal cycle of tropical
 sea surface temperature (SST), decomposing the two contributions using
 simulations of an Earth System model varying eccentricity and longitude of
 perihelion.  This dataset archives model output produced in this
 investigation using the Community Earth System Model version 2, and MATLAB
 code for analyzing the data.
description: # Data from: The seasonal cycles of tropical sea surface temperature from
 Earth's axial tilt and orbital eccentricity
 [https://doi.org/10.5061/dryad.r4xgxd2qb](https://doi.org/10.5061/dryad.r4xgxd2qb) ## Description of the data and file structure The dataset contains model output and MATLAB analysis code from: Chiang, JCH, and LYL Kong, 2025: The Seasonal Cycles of Tropical Sea Surface Temperature from Earth’s Axial Tilt and Orbital Eccentricity.  In press for Journal of Climate, July 2025 1.  Model output Model output is contained in Data.tar and unpacked into the 'CESM2_LOP_fixedang' directory. All data are in NetCDF format, and were generated by the Community Earth System Model 2.1.3 (Danabasoglu et al. 2020) Simulations are done with the Community Earth System Model version 2.1.3 (hereafter CESM2) at a 1.9x2.5 degree finite-volume grid, and ocean and sea ice on a nominal 1 degree rotated pole grid (gx1v6). Each simulation is for 100 years, and the last 50 years are averaged to form a monthly climatology.  The ocean monthly climatological output was further interpolated to a rectangular 1x1 degree grid from the native gx1v6 grid.  A calendar adjustment was applied to account for the shift in equinoxes and solstices under high eccentricity by assigning each month to 30 degrees of arc in the orbit. The method of Pollard and Reusch (2002) was used to alter the monthly mean output from the standard calendar to a fixed angle. Simulations varying the longitude of perihelion (LOP) are done at intervals of 30 degrees from 0 to 330 degrees, and for multiples of the 1850 or preindustrial (PI) eccentricity (e = 0.016764) for 1xPI, 2xPI, and 3xPI. Obliquity is set to the 1850 value of 23.459 degrees. All other boundary conditions are set to preindustrial.  An e = 0 simulation is also performed, with LOP set to 0 degrees (note that LOP has no effect here). A preindustrial (1850) simulation is also performed, with LOP = 100.3269 degrees and obliquity of 23.459 degrees. 2.  MATLAB analysis code MATLAB analysis code is contained in Code.tar and unpacked into the ‘Figures’ directory. MATLAB code is provided for processing/analysis of model output (in the Subroutines subfolder), and for generating each figure (subfolders Fig1 to Fig12, and FigS1to FigS10).  MATLAB version R2024a was used, and the Statistics and Machine Learning Toolbox is also required.   3.  References Danabasoglu, G., Lamarque, J. F., Bacmeister, J., Bailey, D. A., DuVivier, A. K., Edwards, J., ... & Strand, W. G. (2020). The community earth system model version 2 (CESM2). Journal of Advances in Modeling Earth Systems, 12(2), e2019MS001916. Pollard, D., & Reusch, D. B. (2002). A calendar conversion method for monthly mean paleoclimate model output with orbital forcing. Journal of Geophysical Research: Atmospheres, 107(D22), ACL-3. ## Files and variables ### File: Data.tar **Description:**  Model output are unpacked into the 'CESM2_LOP_fixedang' directory.  All data are in NetCDF format.  Simulations varying the longitude of perihelion (LOP) are done at intervals of 30 degrees from 0 to 330 degrees, and for multiples of the 1850 or preindustrial (PI) eccentricity (e = 0.016764) for 1xPI, 2xPI, and 3xPI. Obliquity is set to the 1850 value of 23.459 degrees. All other boundary conditions are set to preindustrial.  An e = 0 simulation is also performed, with LOP set to 0 degrees (note that LOP has no effect here). A preindustrial (1850) simulation is also performed, with LOP = 100.3269 degrees and obliquity of 23.459 degrees. Data are arranged in folders according to eccentricity: EC000 is e=0, EC167 is 1xPI, EC335 is 2xPI, and EC502 is 3xPI.  The naming convention for each filename is [atm/ocn]*fixedang*[LOP]_*EC[XX].nc, where* * *atm/ocn indicates atmosphere or ocean data* * *LOP = longitude of perihelion in degrees, with 000 being 0 degrees, etc.* * *ECXX = eccentricity, as above* The preindustrial run is archived in the B1850 folder. Finally, two files are provided for data processing: * gw.nc are the Gaussian weights - landfrac.nc contains the land fraction data ### File: Code.tar **Description:** MATLAB code is contained in the Code.tar, and unpacked into the 'Figures' directory. Make sure that this directory is at the same level as the CESM2_LOP_fixedang directory, where the model output is kept. The figures directory contains subfolders for each figure (Fig1-Fig12, and FigS1-FigS10) in the manuscript, and a 'Subroutines' subfolder with various data processing code. ###### 'Subroutines' subfolder: The 'Subroutines' folder contains various MATLAB codes for processing and analyzing the CESM2 data.  These codes should be run prior to using the code for generating figures generate_soldata.m - Generates tropical mean insolation data, saved in solindata.mat. It contains the following: * lop - longitude of perihelion in degrees * month - month of year * solindata000 - monthly insolation (with annual mean removed) averaged over 20S-20N for the e=0 case, in W/m^2 * solindata167 - monthly insolation (with annual mean removed) averaged over 20S-20N for each LOP for the 1xPI case, in W/m^2 * solindata335 - monthly insolation (with annual mean removed) averaged over 20S-20N for each LOP for the 2xPI case, in W/m^2 * solindata502 - monthly insolation (with annual mean removed) averaged over 20S-20N for each LOP for the 3xPI case, in W/m^2 generate_tmdata.m - Generates the tropical mean SST seasonal data, saved in tmdata.mat. It contains the following: * lop - longitude of perihelion in degrees * month - month of year * data000 - monthly mean SST (with annual mean removed) averaged over 20S-20N for the e=0 case, in K * data167 - monthly mean SST (with annual mean removed) averaged over 20S-20N for each LOP for the 1xPI case, in K * data335 - monthly mean SST (with annual mean removed) averaged over 20S-20N for each LOP for the 2xPI case, in K * data502 - monthly mean SST (with annual mean removed) averaged over 20S-20N for each LOP for the 3xPI case, in K generate_zmdata.m - Generates the zonal mean SST seasonal data, saved in zmdata.mat. It contains the following: * lop - longitude of perihelion in degrees * month - month of year * lat1 - latitude (in degrees) * zmdata000 - zonal and monthly mean SST (with annual mean removed) for the e=0 case, in K * zmdata167 - zonal and monthly mean SST (with annual mean removed) for each LOP for the 1xPI case, in K * zmdata335 - zonal and monthly mean SST (with annual mean removed) for each LOP for the 2xPI case, in K * zmdata502 - zonal and monthly mean SST (with annual mean removed) for each LOP for the 3xPI case, in K generate_zmfits.m - Fits zonal mean SST data to equation 1, saved in zmfits.mat.  Uses fit_allECC.m, fit_month.m, fit_monthxlop.m, adjust_modulo.m.  zmfits.mat contains the following: * lat1 - latitude (in degrees) * wmeans - weighted mean of the fit to zonal mean SST (in order of Ad1 Ad2 Ad3 At1 At2 At3 pd1 pd2 pd3 pt1 pt2 pt3) * werrs - weighted uncertainty expressed as 95% CI (in order of Ad1 Ad2 Ad3 At1 At2 At3 pd1 pd2 pd3 pt1 pt2 pt3) * slopes - slope of the distance annual amplitude with eccentricity (K per eccentricity unit) * Vdatas - variance of the zonal SST data (K^2) * Vfits - variance of the fit (K^2) * V4fits - variance accounted for by the tilt annual+semiannual+triannual and distance annual components (K^2) * RMSEfits - the root mean squared error of the fit to zonal mean SST (K) * f000Array - result of the fit to zonal mean SST for the e=0 case * f167Array - result of the fit to zonal mean SST for the 1xPI case * f335Array - result of the fit to zonal mean SST for the 2xPI case * f502Array - result of the fit to zonal mean SST for the 3xPI case * fPIArray - used to reconstruct the preindustrial case using the weighted mean values for the distance annual and tilt annual+semiannual+triannual and slope x 1xPI eccentricity for the distance annual amplitude. generate_spatialdata.m - Generates spatial tropical SST seasonal data, saved in spatialdata.mat. It contains the following: * lop - longitude of perihelion in degrees * month - month of year * lat1 - latitude (in degrees) * lon - longitude (in degrees) * data000 - monthly mean SST (with annual mean removed) for the e=0 case, in K * data167 - monthly mean SST (with annual mean removed) for each LOP for the 1xPI case, in K * data335 - monthly mean SST (with annual mean removed) for each LOP for the 2xPI case, in K * data502 - monthly mean SST (with annual mean removed) for each LOP for the 3xPI case, in K generate_spatialfits.m - Fits spatial SST data to equation 1, saved in spatialfits.mat. Uses fit_allECC.m, fit_month.m, fit_monthxlop.m, adjust_modulo.m.  spatialfits.mat contains the following: * lon - longitude (in degrees) * lat1 - latitude (in degrees) * month - month of year * landfrac_map - land-ocean mask (1=land, 0=ocean) * wmeans - weighted mean of the fit to zonal mean SST (in order of Ad1 Ad2 Ad3 At1 At2 At3 pd1 pd2 pd3 pt1 pt2 pt3) * werrs - weighted uncertainty expressed as 95% CI (in order of Ad1 Ad2 Ad3 At1 At2 At3 pd1 pd2 pd3 pt1 pt2 pt3) * slopes - slope of the distance annual amplitude with eccentricity (K per eccentricity unit) * Vdatas - variance of the zonal SST data (K^2) * Vfits - variance of the fit (K^2) * V4fits - variance accounted for by the tilt annual+semiannual+triannual and distance annual components (K^2) * RMSEfits - the root mean squared error of the fit to zonal mean SST (K) * f000Array - result of the fit to zonal mean SST for the e=0 case * f167Array - result of the fit to zonal mean SST for the 1xPI case * f335Array - result of the fit to zonal mean SST for the 2xPI case * f502Array - result of the fit to zonal mean SST for the 3xPI case * fPIArray - used to reconstruct the preindustrial case using the weighted mean values for the distance annual and tilt annual+semiannual+triannual and slope x 1xPI eccentricity for the distance annual amplitude. * Ad1slopeArray - result of the weighted linear regression on the distance annual amplitude with eccentricity generate_spatialfitPI.mat - Reconstructs 1xPI spatial SST data using equation 7, saved in spatialfitPI.mat. It contains the following: * lon - longitude (in degrees) * lat1 - latitude (in degrees) * month - month of year * plop - LOP value for preindustrial, in degrees * At1s - Tilt annual amplitude (K) * At2s - Tilt semiannual amplitude (K) * At3s - Tilt triannual amplitude (K) * Ad1s - Distance annual amplitude (K) * pt1s - Tilt annual phase (degrees) * pt2s - Tilt semiannual phase (degrees) * pt3s - Tilt triannual phase (degrees) * pd1s - Distance annual phase (degrees) * pd1s_adj - Distance annual phase adjusted for preindustrial (degrees) * tilts - Tilt contribution to preindustrial monthly SST (annual mean removed) * tiltanns - Tilt annual contribution to preindustrial monthly SST (annual mean removed) (K) * tiltsemis - Tilt semiannual contribution to preindustrial monthly SST (annual mean removed) (K) * tilttris - Tilt contribution to preindustrial monthly SST (annual mean removed) (K) * distances - Distance annual contribution to preindustrial monthly SST (annual mean removed) (K) * pifits - Preindustrial monthly SST derived from the fit (annual mean removed) (K) * b1850s - Preindustrial monthly SST from model simulation (annual mean removed) (K) generate_thermocline_data.m - Generates equatorial thermocline depth seasonal data, saved in thermocline_data.mat.  Uses find_thermocline.m, find_temp.m, intersections.m.  thermocline_data.mat contains the following: * lon - longitude (in degrees) * lop - longitude of perihelion (in degrees) * month - month of year * isotherm - subsurface temperature used to infer thermocline depth (degrees C) * depth000 - monthly thermocline depth for e=0 case (m) * depth167 -  monthly thermocline depth for 1xPI case for each LOP (m) * depth335 -  monthly thermocline depth for 2xPI case for each LOP (m) * depth502 -  monthly thermocline depth for 3xPI case for each LOP (m) generate_thermocline_fits.m - Fits thermocline depth data to equation 1, saved in thermocline_fits.mat. Uses fit_allECC.m, fit_month.m, fit_monthxlop.m, adjust_modulo.m.  thermocline_fits.mat contains the following: * lon - longitude (in degrees) * month - month of year * wmeans - weighted mean of the fit to thermocline depth (in order of Ad1 Ad2 Ad3 At1 At2 At3 pd1 pd2 pd3 pt1 pt2 pt3) * werrs - weighted uncertainty expressed as 95% CI (in order of Ad1 Ad2 Ad3 At1 At2 At3 pd1 pd2 pd3 pt1 pt2 pt3) * slopes - slope of the distance annual amplitude with eccentricity (K per eccentricity unit) * Vdatas - variance of the thermocline depth data (m^2) * Vfits - variance of the fit (m^2) * V4fits - variance accounted for by the tilt annual+semiannual+triannual and distance annual components (m^2) * RMSEfits - the root mean squared error of the fit to thermocline depth (m) * f000Array - result of the fit to zonal mean SST for the e=0 case * f167Array - result of the fit to zonal mean SST for the 1xPI case * f335Array - result of the fit to zonal mean SST for the 2xPI case * f502Array - result of the fit to zonal mean SST for the 3xPI case * fPIArray - used to reconstruct the preindustrial case using the weighted mean values for the distance annual and tilt annual+semiannual+triannual and slope x 1xPI eccentricity for the distance annual amplitude. generate_thermocline_PI.m - Reconstructs 1xPI equatorial thermocline depth using equation 7, saved in thermocline_fit_PI.mat. It contains the following: * lon - longitude (in degrees) * month - month of year * plop - LOP value for preindustrial, in degrees * At1s - Tilt annual amplitude (m) * At2s - Tilt semiannual amplitude (m) * At3s - Tilt triannual amplitude (m) * Ad1s - Distance annual amplitude (m) * pt1s - Tilt annual phase (degrees) * pt2s - Tilt semiannual phase (degrees) * pt3s - Tilt triannual phase (degrees) * pd1s - Distance annual phase (degrees) * pd1s_adj - Distance annual phase adjusted for preindustrial (degrees) * tilts - Tilt contribution to preindustrial monthly thermocline depth (annual mean removed) (m) * tiltanns - Tilt annual contribution to preindustrial monthly thermocline depth (annual mean removed) (m) * tiltsemis - Tilt semiannual contribution to preindustrial monthly thermocline depth (annual mean removed) (m) * tilttris - Tilt contribution to preindustrial monthly thermocline depth (annual mean removed) (m) * distances - Distance annual contribution to preindustrial monthly thermocline depth (annual mean removed) (m) * pifits - Preindustrial monthly thermocline depth derived from the fit (annual mean removed) (m) * b1850s - Preindustrial monthly thermocline depth from model simulation (annual mean removed) (m) Other miscellaneous .mat files used include: landfrac_map.mat    Land-ocean mask * lon - longitude (degrees) * lat1 - latitude (degrees) * landfrac_map - land-ocean mask (1=land, 0=ocean) gw.mat  Area weights * lon - longitude (degrees) * lat1 - latitude (degrees) * gw - area weight for each grid point cm.mat  Color map used for plotting.  Includes the variable cm - color map vector ###### 'Fig1' subfolder: Figure 1.  Tropical insolation seasonality from tilt and distance effects. (a) Insolation seasonality from the tilt effect (contour interval 20 W/m2). (b) Insolation seasonality from the distance effect (contour interval 20 W/m2). (c) Insolation at the equator from tilt (blue) and distance (red) effects. Insolation is calculated using code from Huybers and Eisenmann (2006) imposing preindustrial (1850 AD) orbital parameters: e = 0.016764, obliquity = 23.459°, and longitude of perihelion 100.3269°. For calculating the insolation from tilt, the eccentricity was set to zero, and for the insolation from distance, the obliquity was set to zero. As with the rest of this manuscript, the month axis here is defined such that 0 is the beginning of the year, and 12 is the end of the year. For reference, perihelion occurred on December 31 for 1850 AD. Figure1.m is the main MATLAB code to generate this figure, and outputs figures in JPEG and eps formats. It calls daily_insolation.m daily_insolation.m computes daily average insolation as a function of day and latitude at any point during the past 5 million years. Code from Huybers and Eisenmann (2006) cm.mat  Color map used for plotting. Includes the variable cm - color map vector ###### 'Fig2 subfolder: Figure 2.  EOF analysis of tropical SST seasonality (20°S- 2 0°N) in a CESM2 preindustrial simulation. (a)  EOF 1; (b) EOF 2; (c) PC 1; and (d) PC 2. The principal components (PCs) are normalized such that it has the largest absolute value of 1, and the EOFs are the linear regression of the SST onto the corresponding normalized PC; thus, the EOF loading at a given location is interpreted as the maximum absolute value that the location can attain for that mode. Figure2.m is the main MATLAB code to generate this figure, and outputs figures in JPEG and eps formats. It outputs B1850PC.mat, which is used in Figure 9. cm.mat  Color map used for plotting.  Includes the variable cm - color map vector B1850PC.mat contains the principle components from the EOF analysis. It includes the following * month - month of year * B1850PC - Principal components 1-12. The first dimension is month, and the second dimension is the PC. ###### 'Fig3' subfolder: Figure 3. Tropical averaged SST seasonal cycle and fit to equation 1. (a) Tropical averaged SST (20°S-20°N) seasonal cycle with varying LOP. The annual means are removed prior to plotting. (b) Fit to (a), using equation 1. (c) Residual (a minus b). (d) Tilt annual contribution. (e) Tilt semiannual contribution. (f) Distance annual contribution. Note that the color scale is the same for all panels. For reference, LOP = 0°, 90°, 180°, and 270° (or -90°) correspond to perihelion at autumn equinox, NH winter solstice, spring equinox, and NH summer solstice, respectively. Figure3.m is the main MATLAB code to generate this figure, and outputs figures in JPEG and eps formats. It calls fit_monthxlop.m fit_monthxlop.m fits data equation 1 of Chiang and Kong (2025) for the 1xPI, 2xPI, and 3xPI cases. cm.mat Color map used for plotting. Includes the variable cm - color map vector ###### 'Fig4' subfolder: Figure 4. Tropical averaged SST amplitude and phases of various components under various eccentricities.  (a) Tilt annual amplitude, (b) tilt annual phase, (c) Tilt semiannual amplitude, (d) tilt semiannual phase, (e) distance annual amplitude, and (f) distance annual phase.  For all panels except (e), the weighted average is shown by the red line, and weighted uncertainty (95% CI) with the gray shading.  In (e) the least-square linear fit to the data is shown by the black dashed line, and the slope is 0.223K per 1xPI eccentricity. The range of the y-axes in all panels (except panel e) is small compared the absolute values, indicating the consistency in the amplitudes (or phases) across eccentricity values. Figure4.m is the main MATLAB code to generate this figure, and outputs figures in JPEG and eps formats. It calls fit_allECC.m. fit_allECC.m takes data for all eccentricity cases, computes the fit for each, and calculate weighted mean, weighted uncertainty (95%CI), z-values, and the maximum difference between the weighted mean and one of the estimates. It calls adjust_modulo.m, fit_month.m and fit_monthxlop.m  adjust_modulo.m given a range of values modulo md, adjust each value so that they are closest in distance to the first value  fit_month.m fits data equation 1 of Chiang and Kong (2025) for the e=0 case.  fit_monthxlop.m fits data equation 1 of Chiang and Kong (2025) for the 1xPI, 2xPI, and 3xPI cases  cm.mat  Color map used for plotting. Includes the variable cm - color map vector ###### 'Fig5' subfolder: Figure 5. Fitting equation (1) of Chiang and Kong (2026) to zonally averaged SST at each latitude, 20°S-20°N. All fits across eccentricities are plotted (0xPI, 1xPI, 2xPI, and 3xPI for the tilt contributions, and 1xPI, 2xPI, and 3xPI for the distance contributions) as colored dots.  Except for the distance annual amplitude, the fits across eccentricity values are very close to each other so are not readily distinguishable.  (a) Tilt annual amplitude.  (b) Tilt annual phase. (c) Tilt semiannual amplitude. (d) Tilt semiannual phase. (e) Distance annual amplitude. (f) Distance annual phase (corresponding to preindustrial LOP, 100.3269°). Except for panel (e), the black line shows the weighted mean fit. For panel (e), the lines correspond to the slope of the linear regression across eccentricity values, multiplied by the corresponding eccentricity. For reference, the phases for vernal equinox, NH summer solstice, autumn equinox, and NH winter solstice are 2.6, 5.6, 8.6, and 11.6, respectively. The phase of perihelion is around 0 for 1850 AD, so the distance annual phase essentially gives the time lag between perihelion and the peak response for the distance annual component. Figure5.m is the main MATLAB code to generate this figure, and outputs figures in JPEG and eps formats. It uses data from zmfits.mat contained in the Subroutine subdirectory. ###### 'Fig6' subfolder: Figure 6. Zonal mean tropical SST seasonality for the preindustrial run and its decomposition. (a) Zonal mean tropical SST seasonal variation from the preindustrial simulation. (b) Reconstruction of preindustrial zonal mean tropical SST seasonal variation using equation 6 (with e = 0.016764 and LOP = 100.3269o). (c) Residual (a minus b). (d) Tilt annual contribution. (e) Tilt semiannual contribution; and (f) distance annual contribution.  In panels a,b,d, the contour interval is 0.25K, and in panels c,e,f, the contour interval is 0.1K. Figure6.m is the main MATLAB code to generate this figure, and outputs figures in JPEG and eps formats. It uses data from zmfits.mat and zmdata.mat contained in the Subroutine subdirectory. cm.mat Color map used for plotting. Includes the variable cm - color map vector ###### 'Fig7' subfolder:     Figure 7.  Weighted mean amplitude and phase of the fit to tropical SST at every gridpoint from 20°S-20°N, plotted as vectors with the length representing the amplitude and direction as the phase, with north corresponding to month 0.  For clarity, only every third gridpoint is shown. (a) Tilt annual component, with the phase ranging from month 0 to month 12; (b) Tilt semiannual component, with the phase ranging from month 0 to month 6; (c) Tilt triannual component, with the phase ranging from month 0 to month 4; and (d) distance annual component, with the length representing the amplitude for 1xPI eccentricity and the phase ranging from month 0 to month 12. An eastward-pointed vector has a phase of 0 month and increases counterclockwise. For the distance annual plot, the phase corresponds to preindustrial LOP (100.3269°) as per equation 2 of Chiang and Kong (2025). Figure7.m is the main MATLAB code to generate this figure, and outputs figures in JPEG and eps formats. It uses data from spatialfitPI.mat contained in the Subroutine subdirectory. ###### 'Fig18 subfolder: Figure 8. Ratio of distance annual amplitude to tilt annual amplitude, for (a) 1xPI eccentricity, and (b) 3xPI eccentricity.  Values are shaded if the ratio exceeds 0.25, i.e., the distance annual amplitude is at least 25% that of the tilt annual amplitude. Red contours indicate regions where the ratio is 1 or 2; for the latter, it means that in the region enclosed, the distance annual amplitude is at least twice that of the tilt annual amplitude. Figure8.m is the main MATLAB code to generate this figure, and outputs figures in JPEG and eps formats. It uses data from spatialfitPI.mat contained in the Subroutine subdirectory. ###### 'Fig9' subfolder: Figure 9. Contribution of the tilt and distance effects to the EOF 1 and 2 patterns in figure 2. (a - b) Regression of PC1 of figure 2 on the (a) tilt and (b) distance effect SST seasonal data. (c - d) same as (a, b) but onto PC2. Note the different color bar ranges for the regression into the tilt and distance contributions Figure9.m is the main MATLAB code to generate this figure, and outputs figures in JPEG and eps formats. It uses data from spatialfitPI.mat contained in the Subroutine subdirectory, and B1850PC.mat generated by Figure 2. cm.mat Color map used for plotting.  Includes the variable cm - color map vector ###### 'Fig10' subfolder: Figure 10. EOF analysis of the distance effect contribution to tropical SST seasonality (20°S - 20°N). (a)  EOF 1; (b) EOF 2; (c) PC 1; and (d) PC 2. The PCs are normalized such that it has the largest absolute value of 1, and the EOFs are the linear regression of the SST onto the corresponding normalized PC; thus, the EOF loading at a given location is interpreted as the maximum absolute value that the location can attain for that mode.  Figure10.m is the main MATLAB code to generate this figure, and outputs figures in JPEG and eps formats. It uses data from spatialfitPI.mat contained in the Subroutine subdirectory. cm.mat Color map used for plotting. Includes the variable cm - color map vector ###### 'Fig11' subfolder: Figure 11. Decomposition of the equatorial Pacific SST annual cycle.  We plot the SST seasonal cycle averaged between -1.9S and 1.9S. (a) Simulated preindustrial SST; (b) Reconstruction from the fit given by equation 7; (c) Tilt contribution (annual + semiannual + triannual components); (d) Tilt annual contribution; (e) Tilt semiannual contribution; (f) Tilt triannual contribution, and (g) Distance annual contribution. Figure11.m is the main MATLAB code to generate this figure, and outputs figures in JPEG and eps formats. It uses data from spatialfitPI.mat contained in the Subroutine subdirectory. cm.mat Color map used for plotting. Includes the variable cm - color map vector ###### 'Fig12' subfolder: Figure 12. Decomposition of the equatorial Pacific thermocline depth seasonal cycle.  We plot the thermocline depth seasonal cycle averaged between 2°S and 2°N; a negative value indicates a shallower thermocline. (a) Preindustrial thermocline depth; (b) Reconstruction from the fit given by equation 7; (c) Tilt contribution (annual + semiannual + triannual components); (d) Tilt annual contribution; (e) Tilt semiannual contribution; (f) Tilt triannual contribution; and (f) Distance annual contribution. Figure12.m is the main MATLAB code to generate this figure, and outputs figures in JPEG and eps formats. It uses data from thermocline_fit_PI.mat contained in the Subroutine subdirectory. cm.mat Color map used for plotting. Includes the variable cm - color map vector ###### 'FigS1' subfolder: Figure S1 - Schematic diagram of Earth’s orbit around the Sun, showing the current position of perihelion and aphelion relative to the solstices and equinoxes. ra is the Earth-Sun distance at aphelion, and rp at perihelion. The longitude of perihelion (LOP) is defined to be the angle between the vernal equinox and perihelion following the Earth’s orbit, minus 180 degrees (following Berger 1988). The definition of eccentricity (e) is also shown. For preindustrial conditions (1850 AD), e = 0.016764. Contains the file FigureS1.pptx, which is the figure file in PowerPoint format, and FigureS1.jpg, which is the figure file in JPEG format. ###### 'FigS2' subfolder: Figure S2. EOF analysis of tropical SST seasonality (20°S- 20°N) in NOAA ERSST v5.  The monthly climatology is taken over 1981-2010. (a) EOF 1; (b) EOF 2; (c) PC 1; and (d) PC 2. The PCs are normalized such that it has the largest absolute value of 1, and the EOFs are the linear regression of the SST onto the corresponding normalized PC; thus, the EOF loading at a given location is interpreted as the maximum absolute value that the location can attain for that mode. This can be compared to Figure 2, which shows the same analysis but using the CESM2 preindustrial simulation. FigureS2.m is the main MATLAB code to generate this figure, and outputs figures in JPEG and eps formats. It uses data from sst.mon.ltm.1981-2010.nc sst.mon.ltm.1981-2010.nc is NOAA ERSST v5 SST monthly climatology data from [https://psl.noaa.gov](https://psl.noaa.gov) cm.mat Color map used for plotting. Includes the variable cm - color map vector ###### 'FigS3' subfolder: Figure S3. Tropical averaged insolation seasonal cycle and fit to equation 1 in Chiang and Kong 2025. (a) Tropical mean insolation (20°S - 20°N) seasonal cycle with varying LOP.  The annual mean is removed prior to plotting. (b) Fit to (a), using equation 1. (c) Residual (a minus b). (d) Tilt annual contribution. (e) Tilt semiannual contribution. (f) Distance annual contribution.  Note that the color scale is the same for all panels. FigureS3.m is the main MATLAB code to generate this figure, and outputs figures in JPEG and eps formats. It calls fit_monthxlop.m fit_monthxlop.m fits data equation 1 of Chiang and Kong (2025) for the 1xPI, 2xPI, and 3xPI cases. cm.mat Color map used for plotting. Includes the variable cm - color map vector ###### 'FigS4' subfolder: Figure S4. Same as figure 3, but for 3xPI eccentricity. (a) Tropical averaged SST (20°S - 20°N) seasonal cycle with varying LOP. The annual means are removed prior to plotting. (b) Fit to (a), using equation 1. (c) Residual (a minus b). (d) Tilt annual contribution. (e) Tilt semiannual contribution. (f) Distance annual contribution. Note that the color scale is the same for all panels. The figure illustrates the dominance of the distance annual contribution at high eccentricity, and specifically the emergence of an annual cycle in tropical averaged SST whose phase shifts with the longitude of perihelion. FigureS4.m is the main MATLAB code to generate this figure, and outputs figures in JPEG and eps formats. It calls fit_monthxlop.m fit_monthxlop.m fits data equation 1 of Chiang and Kong (2025) for the 1xPI, 2xPI, and 3xPI cases. cm.mat  Color map used for plotting. Includes the variable cm - color map vector ###### 'FigS5_S6' subfolder: Figure S5. Variance explained at each latitude for the 1xPI eccentricity case. (a) Variance of the data. (b) Fractional variance not explained by the fit to equation 1.  (c-h) Fractional variance explained by the (c) tilt annual component, (d) tilt semiannual component, (e) tilt triannual component, (f) distance annual component, (g) distance semiannual component, and (h) distance triannual component.  The results demonstrate that the model (equation 1) does an excellent job of fitting the zonal mean SST seasonal cycle, and that over 99% of the variance is explained by the top 3 components (tilt annual, tilt semiannual, and distance annual). Figure S6. Same as figure S5, but for the 3xPI eccentricity case. FigureS5_S6.m is the main MATLAB code to generate both Figure S5 and S6, and outputs figures in JPEG and eps formats.  It uses data from zmfits.mat in the Subroutines subdirectory. ###### 'FigS7' subfolder: Figure S7. Variance of the seasonal data and its contributions, for 1xPI eccentricity.  (a) Variance of the seasonal data. (b - e) fractional variance explained by the tilt annual, tilt semiannual, tilt triannual, and distance annual contributions, respectively. (f) Fractional variance not explained by the tilt annual, semiannual, triannual, and distance annual components.  In panels (b) through (f), values less than 0.05 are not shaded. FigureS7.m is the main MATLAB code to generate this figure, and outputs figures in JPEG and eps formats. It uses data from spatialfits.mat in the Subroutines subdirectory. ###### 'FigS8' subfolder: Figure S8. EOF analysis of the distance contribution to tropical SST seasonality (20°S- 20°N).  (a) EOF 1; (b) EOF 2; (c) PC 1; and (d) PC 2. The PCs are normalized such that it has the largest absolute value of 1, and the EOFs are the linear regression of the SST onto the corresponding normalized PC; thus, the EOF loading at a given location is interpreted as the maximum absolute value that the location can attain for that mode. FigureS8.m is the main MATLAB code to generate this figure, and outputs figures in JPEG and eps formats. It uses data from spatialfitPI.mat in the Subroutines subdirectory cm.mat Color map used for plotting. Includes the variable cm - color map vector ###### 'FigS9' subfolder: Figure S9. (a-c) 95% confidence limit for the weighted mean tilt annual, semiannual, and triannual amplitudes.  Values below 0.02K are not shaded. (d) R2 for the linear regression of the distance annual amplitude, here plotted as 1-R2; values below 0.2 (i.e., R2 &gt; 0.8) are not shaded. (e-h) 95% confidence limit for the weighted mean tilt annual, semiannual, and triannual phases.  Values below 0.25 month are not shaded. FigureS9.m is the main MATLAB code to generate this figure, and outputs figures in JPEG and eps formats. It uses data from spatialfits.mat in the Subroutines subdirectory ###### 'FigS10' subfolder: Figure S10. Fit to equation 1 of a gridpoint in the western equatorial Pacific, 165°E 4.7°S. (a) Seasonal data for 1xPI eccentricity. (b) Fit to the data in (a). (c) Residual (a minus b). (d) Seasonal data for 3xPI eccentricity. (e) Fit to the data in (d). (f) Residual (d minus e). (g) Contribution of the new distance annual component in equation 8 to the fit for 3xPI eccentricity. (h) Fit of the 3xPI data (d) to equation 8 with the new term. (f) New residual (g minus h). The numbers for each of the panels indicate the fraction of variance explained by the corresponding data. The results indicate that the new distance annual term accounts for much of the remaining variance not modeled by equation 1. FigureS10.m is the main MATLAB code to generate this figure, and outputs figures in JPEG and eps formats. It uses data from spatialdata.mat in the Subroutines subdirectory, and calls fit_monthxlop.m and fit_monthxlop_newterm.m fit_monthxlop.m fits data equation 1 of Chiang and Kong (2025) for the 1xPI, 2xPI, and 3xPI cases.    fit_monthxlop_newterm.m is a modification of fit_monthxlop.m to allow for an additional term to equation 1 (equation 8 of Chiang and Kong 2025) in the fit. cm.mat Color map used for plotting. Includes the variable cm - color map vector ###### 'TableS1' subfolder: Contains code to produce the numbers reported in Table S1 of Chiang and Kong (2025).   TableS1.m is the main MATLAB code to generate the numbers. It uses data from tmdata.mat in the Subroutines subdirectory, and calls fit_month.m and fit_monthxlop.m fit_month.m fits data equation 1 of Chiang and Kong (2025) for the e=0 case. fit_monthxlop.m fits data equation 1 of Chiang and Kong (2025) for the 1xPI, 2xPI, and 3xPI cases.