The IDL program famous_transa2o
(based on hadcm3_transa2o
) tests the atmosphere to ocean coupling in FAMOUS by repeating the coupling calculations that the model performs. FAMOUS uses the Fortran UM library routine TRANSA2O
with modifications from ccouple
(~jonathan/um/transa2o1_famous
).
Briefly, data from an atmosphere field is transferred to the ocean grid first by bilinear interpolation with coastal adjustment (transa2o_bilinear
), and then imposing conservation of the global average (pp_regrid_avg
). Conservation is not applied to WSX, WSY or Runoff.
To obtain test data, I took daily means from a one-day run of FAMOUS (xbyjd) for the following atmosphere and ocean fields:
Submodel Stash Description ATMOS 0031 frac of sea ice in sea after tstep ATMOS 1203 net dn sw rad flux:open sea:sea mean ATMOS 1250 net dn sw o sea flx blw 690nm:sea mn ATMOS 2203 net dn lw rad flux:open sea:sea mean ATMOS 3201 ht flux through seaice:sea mean w/m2 ATMOS 3224 wind mix en'gy fl to sea:sea mn w/m2 ATMOS 3228 scale snowfall rate kg/m2/s ATMOS 3232 evap from open sea: sea mean kg/m2/s ATMOS 3235 seaice top melt lh flx:sea mean w/m2 ATMOS 3351 sublim.: sea-ice: sea mean kg/m2/ts ATMOS 3392 x-comp of mean sea surf stress n/m2 ATMOS 3394 y-comp of mean sea surf stress n/m2 ATMOS 4203 large scale rainfall rate kg/m2/s ATMOS 4204 large scale snowfall rate kg/m2/s ATMOS 5205 convective rainfall rate kg/m2/s ATMOS 5206 convective snowfall rate kg/m2/s ATMOS 8204 sfc runoff amount:land mean kg/m2/ts ATMOS 8205 sub-sfc runoff amt:land mn kg/m2/ts OCEAN 0150 taux: x_windstress n/m2 a OCEAN 0151 tauy: y_windstress n/m2 a OCEAN 0152 wme: wind mixing energy flux w/m2 a OCEAN 0161 sol: pen.solar*lf into ocean w/m2 a OCEAN 0162 htn:nonpen.ht.flx*lf into ocn w/m2 a OCEAN 0165 ple:precip-evap into ocean kg/m2/s a OCEAN 0166 river outflow into ocean kg/m2/s a OCEAN 0171 snowfal into ocn/onto ice kg/m2/s a OCEAN 0172 sublimination from seaice kg/m2/s a OCEAN 0190 gbm seaice topmelt heat flux w/m2 a OCEAN 0191 gbm seaice botmelt heat flux w/m2 a
The program compares it’s computed field (coded with the prefix A) to the Ocean (O) and Atmosphere (AA) fields output from FAMOUS, giving the minimum, maximum and mean values for each field. It also computes the percentage of A and O gridpoints which are “nearly equal”, i.e., within 0.01*factor of each other, where factor is a power of 10 which all the statistics are divided by. The exponent of factor is given in the column labelled “E” below.
The results of famous_transa2o
:
Quantity E AAmean Amean Omean AAmax Amax Omax AAmin Amin Omin %eq WSX -3 -1.387246 -1.205246 -1.205245 447.67 394.72 394.72 -509.76 -509.76 -509.76 1.000 WSY -3 -8.898055 -8.655645 -8.655646 292.15 275.76 275.76 -292.30 -271.65 -271.65 1.000 WME -3 1.275695 1.275906 1.275834 14.20 17.33 17.33 0.00 0.00 0.00 0.973 SOL 1 9.360770 9.362338 9.362324 18.36 20.91 20.91 0.00 0.00 0.00 0.957 HTN 1 -8.618888 -8.620217 -8.620190 12.51 12.57 12.57 -70.62 -79.47 -79.47 0.940 PME -6 -4.152116 -4.152775 -4.152775 501.34 596.97 596.97 -206.51 -179.64 -179.64 0.945 Runoff -6 6.260634 6.260634 6.173468 196.89 196.89 666.95 0.00 0.00 0.00 0.000 Snowfall -6 2.053950 2.054225 2.054225 127.10 113.25 113.25 0.00 0.00 0.00 0.961 Sublimation -7 2.492836 2.493383 2.493384 220.21 232.77 232.77 -97.39 -126.68 -126.68 0.954 BOTMELT 0 -1.140634 -1.139806 -1.139807 0.39 4.58 8.47 -103.59 -77.11 -75.88 0.957 TOPMELT 0 1.781031 1.781328 1.781329 83.11 97.41 97.41 0.00 0.00 0.00 0.975
In general, we see good agreement between the A and O values, that is, the statistics correspond to within 2 decimal places and over 94% of points are nearly equal. There are a couple of notable exceptions - runoff and botmelt. In the case of runoff, only the means should be tolerably similar (within about 1%) as exact grid-box areas are not used in the coupling routines to perform the aggregation. The botmelt values do appear strange however. Although we see 95.7% equality of points, the differences between the min and max values seems significant and warrants further investigation.
Plotting points with at least 1 unit difference between A and O values. This showed that they were all along the coast. Since land points in the ocean fields are marked with a missing data value, this suggests inconsistency in the way the interpolation routine deals with the absence of data.
To illustrate, I have picked out the largest difference found in the botmelt field, a value of −28.0443 computed by famous_transa2o
compared to −50.3755 from FAMOUS. This corresponds to grid point 55 degrees latitude, 138.75 degrees longitude, shown below for the A and O fields.
50.0
| -
| -
| 1.75771
| 1.26203
| 0.766361
| 0.587609
|
52.5
| -
| -
| 1.36132
| 1.49325
| 1.62518
| −1.04725
|
55.0
| -
| −28.0443
| 1.02570
| 1.79721
| 2.56873
| −2.63170
|
57.5
| -
| -
| −51.9511
| −49.3108
| −46.6705
| −32.0756
|
60.0
| -
| -
| -
| -
| -
| -
|
135.00
| 138.75
| 142.50
| 146.25
| 150.00
| 153.75
|
50.0
| -
| -
| 1.75770
| 1.26203
| 0.766359
| 0.587608
|
52.5
| -
| -
| 5.03115
| 3.32816
| 1.62517
| −1.04726
|
55.0
| -
| −50.3755
| 8.47122
| 5.51997
| 2.56871
| −2.63171
|
57.5
| -
| -
| −48.1647
| −47.4177
| −46.6706
| −32.0757
|
60.0
| -
| -
| -
| -
| -
| -
|
135.00
| 138.75
| 142.50
| 146.25
| 150.00
| 153.75
|
Recall the coupling is done in two stages - bilinear interpolation and then conservation of area average. Below are the ABotmelt points from above, before the conservation is applied.
50.0
| -
| -
| 0.00000
| 0.00000
| 0.00000
| 0.00000
|
52.5
| -
| -
| −2.50314
| −2.29095
| −2.07877
| −3.38277
|
55.0
| -
| −5.00629
| −5.00629
| −4.58191
| −4.15753
| −6.76553
|
57.5
| -
| -
| −38.3233
| −36.3555
| −34.3878
| −25.5245
|
60.0
| -
| -
| -
| -
| -
| -
|
135.00
| 138.75
| 142.50
| 146.25
| 150.00
| 153.75
|
The point of interest lies midway between the two highlighted points on the atmosphere grid, shown below. Since the surrounding atmosphere points contain missing data, the interpolation routine takes the value of the “nearest neighbour”. In this case, however, the two nearest points are equidistant and so the choice is arbitrary. In fact, different points have been chosen each time, and since, due to the nature of the field they have such varying values this makes the difference between A and O fields so noticeable.
The situation reveals a flaw in the bilinear interpolation algorithm. The ocean point lies exactly on an Atmosphere latitude grid-line and so the interpolation should not require points from any other rows.
50.0
| -
| 0.00000
| 0.00000
|
55.0
| −57.1143
| −5.00629
| −4.15753
|
60.0
| -
| −71.6403
| −64.6181
|
135.0
| 142.5
| 150.0
|
To test this theory, I added a small amount to the length of the grid boxes (bdx
+ 0.001), which forces the larger left hand value to be chosen as “nearest neighbour”, replicating the behaviour of FAMOUS. From the values below, we can see that the values in this region now agree with OBotmelt to 2 decimal places.
50.0
| -
| -
| 1.75791
| 1.26213
| 0.766349
| 0.587610
|
52.5
| -
| -
| 5.03128
| 3.32823
| 1.62559
| −1.04672
|
55.0
| -
| −50.3754
| 8.47126
| 5.52001
| 2.56957
| −2.63064
|
57.5
| -
| -
| −48.1648
| −47.4174
| −46.6719
| −32.0768
|
60.0
| -
| -
| -
| -
| -
| -
|
135.00
| 138.75
| 142.50
| 146.25
| 150.00
| 153.75
|
We are satisfied that this problem explains the other significantly different points in the field.
The code for famous_transa2o
can be found under ~annette/idl/famous_transa2o/
, along with the data files used to produce these results.