|
15 | 15 | ## EOF2 based variability modes |
16 | 16 | - NPO: North Pacific Oscillation (2nd EOFs of PNA domain) |
17 | 17 | - NPGO: North Pacific Gyre Oscillation (2nd EOFs of PDO domain) |
| 18 | +- PSA2: Pacific South America Mode (2nd EOFs of SAM domain) |
| 19 | +
|
| 20 | +## EOF3 based variability modes |
| 21 | +- PSA3: Pacific South America Mode (3rd EOFs of SAM domain) |
18 | 22 |
|
19 | 23 | ## Reference: |
20 | 24 | Lee, J., K. Sperber, P. Gleckler, C. Bonfils, and K. Taylor, 2019: |
|
175 | 179 | eofn_obs = param.eofn_obs |
176 | 180 | eofn_mod = param.eofn_mod |
177 | 181 |
|
| 182 | +if mode in ["NAM", "NAO", "SAM", "PNA", "PDO", "AMO"]: |
| 183 | + eofn_expected = 1 |
| 184 | +elif mode in ["NPGO", "NPO", "PSA1"]: |
| 185 | + eofn_expected = 2 |
| 186 | +elif mode in ["PSA2"]: |
| 187 | + eofn_expected = 3 |
| 188 | +else: |
| 189 | + raise ValueError( |
| 190 | + f"Mode '{mode}' is not defiend with associated expected EOF number" |
| 191 | + ) |
| 192 | + |
178 | 193 | if eofn_obs is None: |
179 | | - if mode in ["NAM", "NAO", "SAM", "PNA", "PDO", "AMO"]: |
180 | | - eofn_obs = 1 |
181 | | - elif mode in ["NPGO", "NPO"]: |
182 | | - eofn_obs = 2 |
183 | | - else: |
184 | | - raise ValueError(f"{eofn_obs} is not given for {mode}") |
| 194 | + eofn_obs = eofn_expected |
185 | 195 | else: |
186 | 196 | eofn_obs = int(eofn_obs) |
| 197 | + if eofn_obs != eofn_expected: |
| 198 | + raise ValueError( |
| 199 | + f"Observation EOF number ({eofn_obs}) does not match expected EOF number ({eofn_expected}) for mode {mode}" |
| 200 | + ) |
187 | 201 |
|
188 | 202 | if eofn_mod is None: |
189 | | - if mode in ["NAM", "NAO", "SAM", "PNA", "PDO", "AMO"]: |
190 | | - eofn_mod = 1 |
191 | | - elif mode in ["NPGO", "NPO"]: |
192 | | - eofn_mod = 2 |
193 | | - else: |
194 | | - raise ValueError(f"{eofn_mod} is not given for {mode}") |
| 203 | + eofn_mod = eofn_expected |
195 | 204 | else: |
196 | 205 | eofn_mod = int(eofn_mod) |
| 206 | + if eofn_mod != eofn_expected: |
| 207 | + raise ValueError( |
| 208 | + f"Model EOF number ({eofn_mod}) does not match expected EOF number ({eofn_expected}) for mode {mode}" |
| 209 | + ) |
197 | 210 |
|
198 | 211 | print("eofn_obs:", eofn_obs) |
199 | 212 | print("eofn_mod:", eofn_mod) |
|
830 | 843 | # Conventional EOF approach as supplementary |
831 | 844 | # - - - - - - - - - - - - - - - - - - - - - - - - - |
832 | 845 | if ConvEOF: |
833 | | - eofn_mod_max = 3 |
| 846 | + eofn_mod_max = max(3, eofn_mod) |
834 | 847 |
|
835 | 848 | # EOF analysis |
836 | 849 | debug_print("conventional EOF analysis start", debug) |
|
976 | 989 | debug=debug, |
977 | 990 | ) |
978 | 991 | plot_map( |
979 | | - mode + "_teleconnection", |
| 992 | + f"{mode}_teleconnection", |
980 | 993 | f"{mip.upper()} {model} ({run}) - EOF{n + 1}", |
981 | 994 | msyear, |
982 | 995 | meyear, |
983 | 996 | season, |
984 | 997 | # eof_lr(longitude=(lon1_global, lon2_global)), |
985 | 998 | eof_lr, |
986 | 999 | frac, |
987 | | - output_img_file + "_teleconnection", |
| 1000 | + f"{output_img_file}_teleconnection", |
988 | 1001 | debug=debug, |
989 | 1002 | ) |
990 | 1003 |
|
|
0 commit comments