1 | Boolean Sanity Test of the SBCBLK interface of NEMO via the ``STATION_ASF`` test-case |
---|
2 | ===================================================================================== |
---|
3 | |
---|
4 | Context |
---|
5 | ------- |
---|
6 | |
---|
7 | Many *idealized/academic* test-cases included in NEMO can potentially be |
---|
8 | used in a manner that could detect potential inconsistencies or bugs |
---|
9 | mistakenly introduced in a particular "part/region" of the NEMO source |
---|
10 | code. The test-case would then return a green or a red light. |
---|
11 | |
---|
12 | In the future, this could help to build an automatized chain command to |
---|
13 | check that no bug is introduced at each new commit. As we are dealing |
---|
14 | with *idealized/academic* test-cases (which are typically designed to |
---|
15 | run on 1 processor), this approach has the advantage of being |
---|
16 | substantially faster and cheaper than the SETTE set of test experiments |
---|
17 | in terms of computational requirements. Because test-cases |
---|
18 | |
---|
19 | SBCBLK and ``STATION_ASF`` |
---|
20 | -------------------------- |
---|
21 | |
---|
22 | The primary goal of the bulk interface of NEMO (SBCBLK), is to provide |
---|
23 | NEMO with the surface boundary conditions (as fluxes): |
---|
24 | |
---|
25 | - momentum flux (*a.k.a* wind stress) |
---|
26 | - net heat flux (as *net non-solar* and *net solar* components) |
---|
27 | - net freshwater flux (*a.k.a* E-P-R) |
---|
28 | |
---|
29 | ``STATION_ASF`` is used to compute all these surface fluxes at |
---|
30 | particular spot (1D), based on time series of the sea-surface state |
---|
31 | (mainly SST) and near-surface atmospheric variables (air temperature, |
---|
32 | humidity, wind speed and downwelling radiative fluxes). Depending on the |
---|
33 | bulk parameterization chosen by the user (5 different algorithms used to |
---|
34 | estimate bulk transfer coefficients) these fluxes can differ |
---|
35 | significantly from one another significantly. Yet the magnitude of these |
---|
36 | fluxes is expected to remain within a certain "reasonable range" as |
---|
37 | these algorithms have all been designed to fit flux observations. |
---|
38 | |
---|
39 | The idea, here in this current sanity check, has been to define, for a |
---|
40 | given input pattern of atmospheric state and SST, the deviation from a |
---|
41 | normal + confidence range that clearly highlights a |
---|
42 | "non-realistic/crazy" value, hence revealing the existence of a bug |
---|
43 | somewhere... |
---|
44 | |
---|
45 | Just as an example, in the following conditions: |
---|
46 | |
---|
47 | - *zu* = 10 m |
---|
48 | |
---|
49 | - *zt* = 2 m |
---|
50 | |
---|
51 | - *SST* = 22°C |
---|
52 | |
---|
53 | - *tzt* = 20°C |
---|
54 | |
---|
55 | - *RHzt* = 90 % |
---|
56 | |
---|
57 | - *Uzu* = 5 m/s |
---|
58 | |
---|
59 | :: |
---|
60 | |
---|
61 | ========================================================================================================================= |
---|
62 | Algorithm: coare3p0 | coare3p6 | ncar | ecmwf | andreas || <units> | <mean> | <std dev> |
---|
63 | ========================================================================================================================= |
---|
64 | Wind stress = 35.93964 32.35383 35.64660 38.58376 30.10945 [mN/m^2] 34.52666 2.964582 |
---|
65 | Evaporation = 2.288606 2.349655 2.300673 2.250562 1.936906 [mm/day] 2.225281 0.147623 |
---|
66 | QL = -64.86662 -66.59695 -65.20865 -63.78834 -54.89828 [W/m^2] -63.07177 4.184117 |
---|
67 | QH = -17.76094 -18.23470 -16.66991 -16.74091 -14.39284 [W/m^2] -16.75986 1.325787 |
---|
68 | |
---|
69 | One can expect two typical outcomes for a non-successful sanity check: |
---|
70 | |
---|
71 | - All bulk algorithms yield non-realistic fluxes, the cause for error |
---|
72 | is therefore to be found outside of each algorithm. This can |
---|
73 | typically be caused by corrupted input fields being passed to all |
---|
74 | algorithms, for example it can be caused by a unit inconsistencies in |
---|
75 | input variables (ex: atmospheric pressure provide in hPa rather than |
---|
76 | Pa in the netCDF files, which yields corrupted air density, and in |
---|
77 | turn will affect all flux estimates, regardless of the choice of the |
---|
78 | bulk algorithm). |
---|
79 | - Only a subset of bulk algorithms yield non-realistic fluxes, the |
---|
80 | cause for error is therefore to be found inside these particular |
---|
81 | algorithms. |
---|
82 | |
---|
83 | .. raw:: html |
---|
84 | |
---|
85 | <!--- |
---|
86 | There are two main sources of errors to expect: |
---|
87 | - 1 of the bulk algorithm is buggy, and will provide erroneous fluxes with respect to the other algorithms |
---|
88 | - a more likely source of error is the presence of a bug outside the algorithm part, which, will lead to all algorithms to provide erroneous fluxes (example error linked to the unit of an input field, sign error, etc...), ex: broken computation of the air density, all fluxes are affected! |
---|
89 | ---> |
---|
90 | |
---|
91 | It is therefore not enough to test the fluxes against each other (from |
---|
92 | different algorithms); it is necessary to check all fluxes against a |
---|
93 | trustable reference plus/minus a tolerance for a particular set of |
---|
94 | conditions, that has been computed independently from NEMO! |
---|