diff --git a/bld/tnx0.125v4/kdm.cntiso_hybrid b/bld/tnx0.125v4/kdm.cntiso_hybrid new file mode 100644 index 00000000..f6b91e0e --- /dev/null +++ b/bld/tnx0.125v4/kdm.cntiso_hybrid @@ -0,0 +1 @@ +56 diff --git a/bld/tnx0.125v4/patch.input.2867 b/bld/tnx0.125v4/patch.input.2867 new file mode 100644 index 00000000..41684044 --- /dev/null +++ b/bld/tnx0.125v4/patch.input.2867 @@ -0,0 +1,1060 @@ + npes npe mpe idm jdm ibig jbig nreg minsea maxsea avesea + 2867 32 128 2880 2161 90 17 2 0 1530 1279 + +ispt( 1) = 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 2248 2251 0 0 0 0 0 0 +iipe( 1) = 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 3 49 0 0 0 0 0 0 +ispt( 2) = 0 0 0 0 366 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 2176 2251 0 0 0 0 0 0 +iipe( 2) = 0 0 0 0 71 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 75 69 0 0 0 0 0 0 +ispt( 3) = 0 0 0 327 361 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 2026 2130 + 2161 2251 0 0 0 0 0 0 +iipe( 3) = 0 0 0 34 83 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 31 31 + 90 84 0 0 0 0 0 0 +ispt( 4) = 0 0 0 317 361 451 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 2026 2071 + 2161 2251 2341 0 0 0 0 0 +iipe( 4) = 0 0 0 44 90 6 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 45 90 + 90 90 50 0 0 0 0 0 +ispt( 5) = 0 0 0 297 361 451 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 2019 2071 + 2161 2251 2341 0 0 0 0 0 +iipe( 5) = 0 0 0 64 90 26 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 52 90 + 90 90 62 0 0 0 0 0 +ispt( 6) = 0 0 0 286 361 451 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 2020 2071 + 2161 2251 2341 0 0 0 0 0 +iipe( 6) = 0 0 0 75 90 44 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 51 90 + 90 90 64 0 0 0 0 0 +ispt( 7) = 0 0 267 271 361 451 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 2019 2071 + 2161 2251 2341 0 0 0 0 0 +iipe( 7) = 0 0 4 90 90 59 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 52 90 + 90 90 76 0 0 0 0 0 +ispt( 8) = 0 0 244 271 361 451 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 2021 2071 + 2161 2251 2341 2431 0 0 0 0 +iipe( 8) = 0 0 27 90 90 63 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 50 90 + 90 90 90 50 0 0 0 0 +ispt( 9) = 0 0 223 271 361 451 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 2021 2071 + 2161 2251 2341 2431 0 0 2723 2791 +iipe( 9) = 0 0 48 90 90 72 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 50 90 + 90 90 90 76 0 0 68 3 +ispt( 10) = 0 0 224 271 361 451 541 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 2030 2071 + 2161 2251 2341 2431 2521 2695 2701 2791 +iipe( 10) = 0 0 47 90 90 90 5 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 41 90 + 90 90 90 90 57 6 90 3 +ispt( 11) = 50 0 231 271 361 451 541 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 2039 2071 + 2161 2251 2341 2431 2521 2611 2701 0 +iipe( 11) = 23 0 40 90 90 90 15 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 32 90 + 90 90 90 90 90 90 90 0 +ispt( 12) = 31 91 233 271 361 451 541 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 2048 2071 + 2161 2251 2341 2431 2521 2611 2701 0 +iipe( 12) = 60 58 38 90 90 90 22 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 23 90 + 90 90 90 90 90 90 90 0 +ispt( 13) = 1 91 240 271 361 451 541 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 2074 + 2161 2251 2341 2431 2521 2611 2701 2835 +iipe( 13) = 90 58 31 90 90 90 52 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 87 + 90 90 90 90 90 90 80 46 +ispt( 14) = 1 91 237 271 361 451 541 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 2078 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 14) = 90 51 34 90 90 90 84 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 83 + 90 90 90 90 90 90 90 90 +ispt( 15) = 1 91 235 271 361 451 541 631 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 2064 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 15) = 90 47 36 90 90 90 90 3 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 7 90 + 90 90 90 90 90 90 90 90 +ispt( 16) = 1 91 234 271 361 451 541 631 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 2016 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 16) = 90 50 37 90 90 90 90 64 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 55 90 + 90 90 90 90 90 90 90 90 +ispt( 17) = 1 91 228 271 361 451 541 631 + 721 811 901 1013 0 0 1310 0 + 0 0 0 0 0 0 2000 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 17) = 90 84 43 90 90 90 90 90 + 90 90 56 26 0 0 16 0 + 0 0 0 0 0 0 71 90 + 90 90 90 90 90 90 90 90 +ispt( 18) = 1 91 181 271 361 451 541 631 + 721 811 901 999 0 0 1303 0 + 0 0 0 0 0 1962 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 18) = 90 90 90 90 90 90 90 90 + 90 90 82 41 0 0 42 0 + 0 0 0 0 0 19 90 90 + 90 90 90 90 90 90 90 90 +ispt( 19) = 1 91 181 271 361 451 541 631 + 721 811 901 991 0 0 1277 1351 + 0 0 0 0 0 1897 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 19) = 90 90 90 90 90 90 90 90 + 90 90 90 75 0 0 74 7 + 0 0 0 0 0 84 90 90 + 90 90 90 90 90 90 90 90 +ispt( 20) = 1 91 181 271 361 451 541 631 + 721 811 901 991 1081 1192 1261 1351 + 0 0 0 0 1879 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 20) = 90 90 90 90 90 90 90 90 + 90 90 90 90 35 69 90 38 + 0 0 0 0 12 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 21) = 1 91 181 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1573 1637 1711 1824 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 21) = 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 40 34 74 49 67 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 22) = 1 91 181 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 22) = 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 23) = 1 91 181 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 23) = 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 24) = 1 91 181 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 24) = 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 25) = 1 91 181 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 25) = 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 26) = 1 91 181 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 26) = 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 27) = 1 91 181 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 27) = 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 28) = 1 91 181 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 28) = 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 29) = 1 91 181 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 29) = 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 30) = 1 91 181 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 30) = 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 31) = 1 91 181 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 31) = 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 32) = 1 91 181 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 32) = 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 33) = 1 91 181 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 33) = 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 34) = 1 91 181 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 34) = 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 35) = 1 91 181 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 35) = 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 36) = 1 91 181 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 36) = 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 37) = 1 91 181 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 37) = 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 38) = 1 91 181 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 38) = 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 39) = 1 91 181 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 39) = 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 40) = 1 91 181 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2080 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 40) = 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 85 81 + 90 90 90 90 90 90 90 90 +ispt( 41) = 1 91 195 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 41) = 90 48 76 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 42) = 1 91 199 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 42) = 90 50 72 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 43) = 1 91 199 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 43) = 90 50 72 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 44) = 1 91 221 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 44) = 90 45 50 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 45) = 1 91 255 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1897 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 45) = 90 48 16 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 82 84 90 90 + 90 90 90 90 90 90 90 90 +ispt( 46) = 1 91 253 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1920 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 46) = 90 55 18 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 40 61 90 90 + 90 90 90 90 90 90 90 90 +ispt( 47) = 1 91 252 271 361 451 541 631 + 721 811 901 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1926 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 47) = 90 59 19 90 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 29 55 90 90 + 90 90 90 90 90 90 90 90 +ispt( 48) = 1 91 0 297 361 451 541 631 + 721 811 941 991 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1933 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 48) = 90 59 0 64 90 90 90 90 + 90 58 50 90 90 90 90 90 + 90 90 90 90 25 48 90 90 + 90 90 90 90 90 90 90 90 +ispt( 49) = 1 91 0 304 361 451 541 631 + 721 811 959 991 1081 1171 1261 1351 + 1441 1531 1621 0 0 1943 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 49) = 90 60 0 57 90 90 90 90 + 90 55 32 90 90 90 90 90 + 90 90 25 0 0 38 90 90 + 90 90 90 90 90 90 90 90 +ispt( 50) = 1 91 0 321 361 451 541 631 + 721 811 969 991 1081 1171 1261 1351 + 1441 1531 1621 0 0 1944 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 50) = 90 64 0 40 90 90 90 90 + 90 47 22 90 90 90 90 90 + 90 90 21 0 0 37 90 90 + 90 90 90 90 90 90 90 90 +ispt( 51) = 1 91 0 331 361 451 541 631 + 721 811 981 991 1081 1171 1261 1351 + 1441 1531 1621 0 0 1943 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 51) = 90 67 0 30 90 90 90 90 + 90 35 10 90 90 90 90 90 + 90 90 15 0 0 38 90 90 + 90 90 90 90 90 90 90 90 +ispt( 52) = 1 91 0 332 361 451 541 631 + 721 811 982 991 1081 1171 1261 1351 + 1441 1531 1621 0 0 1927 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 52) = 90 68 0 29 90 90 90 90 + 90 31 9 90 90 90 90 90 + 90 90 15 0 0 54 90 90 + 90 90 90 90 90 90 90 90 +ispt( 53) = 1 91 0 351 361 451 541 631 + 721 811 0 1001 1100 1171 1261 1351 + 1441 1531 1621 0 0 1914 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 53) = 90 70 0 10 90 90 90 90 + 90 28 0 71 71 90 90 90 + 90 90 27 0 0 67 90 90 + 90 90 90 90 90 90 90 90 +ispt( 54) = 1 91 0 0 392 451 541 631 + 721 811 0 998 1105 1171 1261 1351 + 1441 1531 1621 0 0 1897 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 54) = 90 70 0 0 59 90 90 90 + 90 24 0 80 66 90 90 90 + 90 90 71 0 0 84 90 90 + 90 90 90 90 90 90 90 90 +ispt( 55) = 1 91 0 0 399 451 541 631 + 721 811 0 998 1110 1171 1261 1351 + 1441 1531 1621 0 1835 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 55) = 90 70 0 0 52 90 90 90 + 90 15 0 80 61 90 90 90 + 90 90 90 0 56 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 56) = 1 91 0 0 404 451 541 631 + 721 811 0 1016 1081 1171 1261 1351 + 1441 1531 1621 1711 1809 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 56) = 90 64 0 0 47 90 90 90 + 90 7 0 65 90 90 90 90 + 90 90 90 9 82 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 57) = 1 91 0 0 408 451 541 631 + 721 811 0 1041 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 57) = 90 38 0 0 43 90 90 90 + 90 12 0 40 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 58) = 1 91 0 0 408 451 541 631 + 721 811 0 1044 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 58) = 90 21 0 0 43 90 90 90 + 90 22 0 37 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 59) = 1 91 0 0 420 451 541 631 + 721 811 0 1037 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 59) = 90 14 0 0 31 90 90 90 + 90 22 0 44 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 60) = 1 91 0 0 434 451 541 631 + 721 811 0 1034 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 60) = 90 5 0 0 17 90 90 90 + 90 18 0 47 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 61) = 1 0 0 0 423 451 541 631 + 721 811 0 1030 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 61) = 85 0 0 0 28 90 90 90 + 90 15 0 51 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 62) = 1 0 0 0 364 451 541 631 + 721 811 0 1032 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 62) = 82 0 0 0 87 90 90 90 + 90 8 0 49 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 63) = 1 0 0 332 361 451 541 631 + 721 0 0 1040 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 63) = 82 0 0 29 90 90 90 90 + 86 0 0 41 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 64) = 1 0 0 319 361 451 541 631 + 721 0 0 1055 1081 1171 1261 1351 + 1441 1536 1656 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 64) = 90 0 0 42 90 90 90 90 + 78 0 0 26 90 90 90 90 + 85 73 55 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 65) = 1 91 0 311 361 451 541 631 + 721 0 0 1070 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 65) = 90 12 0 50 90 90 90 90 + 80 0 0 11 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 66) = 1 91 0 289 361 451 541 631 + 721 0 0 0 1093 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 66) = 90 13 0 72 90 90 90 90 + 80 0 0 0 78 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 67) = 1 91 249 271 361 451 541 631 + 721 0 0 0 1107 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 67) = 90 13 22 90 90 90 90 90 + 44 0 0 0 64 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 68) = 1 91 222 271 361 451 541 0 + 0 0 0 0 1116 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 68) = 90 63 49 90 90 90 86 0 + 0 0 0 0 55 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 69) = 1 91 181 271 361 451 541 0 + 0 0 0 1064 1081 1171 1261 1351 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 69) = 90 90 90 90 90 90 74 0 + 0 0 0 17 90 90 90 90 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 70) = 1 91 181 271 361 451 541 0 + 0 0 0 1053 1081 1171 1261 1358 + 1441 1531 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 70) = 90 90 90 90 90 90 57 0 + 0 0 0 28 90 90 67 83 + 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 71) = 1 91 181 271 361 451 541 0 + 0 0 0 1034 1088 1171 1261 1361 + 1441 1586 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 71) = 90 90 90 90 90 90 49 0 + 0 0 0 34 83 90 58 80 + 87 35 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 +ispt( 72) = 9 91 181 271 361 451 541 0 + 0 0 0 1027 1136 1171 1261 1362 + 1441 1571 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 72) = 82 90 90 90 90 90 53 0 + 0 0 0 38 35 90 51 79 + 63 50 90 90 90 90 90 90 + 90 90 90 90 90 90 90 65 +ispt( 73) = 14 91 181 271 361 451 541 0 + 0 0 0 1018 1162 1171 1261 1386 + 1441 1565 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2791 +iipe( 73) = 77 90 90 90 90 90 57 0 + 0 0 0 41 9 90 46 55 + 37 56 90 90 90 90 90 90 + 90 90 90 90 90 90 90 87 +ispt( 74) = 1 91 181 271 361 451 541 0 + 0 0 0 1015 0 1182 1261 1403 + 1441 1567 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2818 +iipe( 74) = 90 90 90 90 90 90 51 0 + 0 0 0 34 0 79 44 38 + 31 54 90 90 90 90 90 90 + 90 90 90 90 90 90 60 63 +ispt( 75) = 1 91 181 271 361 451 541 0 + 0 0 0 1004 0 1177 1261 1418 + 1441 1584 1621 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2817 +iipe( 75) = 90 90 90 90 90 90 57 0 + 0 0 0 31 0 84 42 23 + 16 37 90 90 90 90 90 90 + 90 90 90 90 90 90 58 64 +ispt( 76) = 1 91 181 271 361 451 541 0 + 0 0 0 995 1121 1171 1261 0 + 0 0 1655 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2817 +iipe( 76) = 90 90 90 90 90 90 65 0 + 0 0 0 36 50 90 9 0 + 0 0 56 90 90 90 90 90 + 90 90 90 90 90 90 48 64 +ispt( 77) = 1 91 181 271 361 451 541 0 + 0 0 988 991 1112 1171 0 0 + 0 0 1675 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2818 +iipe( 77) = 90 90 90 90 90 90 82 0 + 0 0 3 28 59 84 0 0 + 0 0 36 90 90 90 90 90 + 90 90 90 90 90 90 33 63 +ispt( 78) = 1 91 181 271 361 451 541 631 + 0 0 979 991 1104 1171 0 0 + 0 0 1682 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2820 +iipe( 78) = 90 90 90 90 90 90 90 12 + 0 0 12 17 67 6 0 0 + 0 0 29 90 90 90 90 90 + 90 90 90 90 90 90 22 61 +ispt( 79) = 1 91 181 271 361 451 541 631 + 0 844 935 991 1103 0 0 0 + 0 0 1687 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 2701 2828 +iipe( 79) = 90 90 90 90 90 90 90 14 + 0 39 56 10 27 0 0 0 + 0 0 24 90 90 90 90 90 + 90 90 90 90 90 90 6 53 +ispt( 80) = 1 91 181 271 361 451 541 631 + 808 811 901 991 0 0 0 0 + 0 0 1687 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 0 2877 +iipe( 80) = 90 90 90 90 90 90 90 26 + 3 90 90 10 0 0 0 0 + 0 0 24 90 90 90 90 90 + 90 90 90 90 90 90 0 4 +ispt( 81) = 71 91 181 271 361 451 541 631 + 800 811 901 991 0 0 0 0 + 0 0 1679 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 0 0 +iipe( 81) = 20 90 90 90 90 90 90 77 + 11 90 90 16 0 0 0 0 + 0 0 32 90 90 90 90 90 + 90 90 90 90 90 56 0 0 +ispt( 82) = 83 91 181 271 361 451 541 631 + 721 811 901 991 0 0 0 0 + 0 0 1675 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 0 0 +iipe( 82) = 8 90 90 90 90 90 90 90 + 90 90 90 17 0 0 0 0 + 0 0 36 90 90 90 90 90 + 90 90 90 90 90 50 0 0 +ispt( 83) = 0 99 181 271 361 451 541 631 + 721 811 901 991 0 0 0 0 + 0 0 1675 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 0 0 +iipe( 83) = 0 82 90 90 90 90 90 90 + 90 90 90 18 0 0 0 0 + 0 0 36 90 90 90 90 90 + 90 90 90 90 90 24 0 0 +ispt( 84) = 0 112 181 271 361 451 541 631 + 721 811 901 0 0 0 0 0 + 0 0 1675 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 0 0 +iipe( 84) = 0 69 90 90 90 90 90 90 + 90 90 37 0 0 0 0 0 + 0 0 36 90 90 90 90 90 + 90 90 90 90 90 16 0 0 +ispt( 85) = 0 110 181 271 361 451 541 631 + 721 811 901 0 0 0 0 0 + 0 0 1664 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 0 0 +iipe( 85) = 0 71 90 90 90 90 90 90 + 90 90 50 0 0 0 0 0 + 0 0 47 90 90 90 90 90 + 90 90 90 90 90 9 0 0 +ispt( 86) = 0 110 181 271 361 451 541 631 + 730 811 901 997 0 0 0 0 + 0 0 1664 1711 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 0 0 0 +iipe( 86) = 0 71 90 90 90 90 90 23 + 81 90 79 49 0 0 0 0 + 0 0 47 90 90 90 90 90 + 90 90 90 90 90 0 0 0 +ispt( 87) = 0 110 181 271 361 451 541 631 + 743 811 935 991 0 0 0 0 + 0 0 1679 1714 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 0 0 0 +iipe( 87) = 0 71 90 90 90 90 90 81 + 68 58 56 58 0 0 0 0 + 0 0 27 87 90 90 90 90 + 90 90 90 90 85 0 0 0 +ispt( 88) = 0 130 181 271 361 451 541 631 + 783 811 937 991 0 0 0 0 + 0 0 1694 1764 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 0 0 0 +iipe( 88) = 0 51 90 90 90 90 90 83 + 28 33 54 58 0 0 0 0 + 0 0 10 37 90 90 90 90 + 90 90 90 90 82 0 0 0 +ispt( 89) = 0 131 181 271 361 451 541 631 + 0 811 942 991 0 0 0 0 + 0 0 0 1778 1801 1891 1981 2071 + 2161 2251 2341 2431 2521 0 0 0 +iipe( 89) = 0 50 90 90 90 90 90 83 + 0 23 49 41 0 0 0 0 + 0 0 0 23 90 90 90 90 + 90 90 90 90 79 0 0 0 +ispt( 90) = 0 154 181 271 361 451 541 631 + 0 0 949 991 0 0 0 0 + 0 0 0 0 1817 1891 1981 2071 + 2161 2251 2341 2431 2521 0 0 0 +iipe( 90) = 0 27 90 90 90 90 90 80 + 0 0 42 27 0 0 0 0 + 0 0 0 0 74 90 90 90 + 90 90 90 90 77 0 0 0 +ispt( 91) = 0 158 181 271 361 451 541 631 + 721 0 0 991 0 0 0 0 + 0 0 0 0 1831 1891 1981 2071 + 2161 2251 2341 2431 2521 0 0 0 +iipe( 91) = 0 23 90 90 90 90 90 90 + 10 0 0 32 0 0 0 0 + 0 0 0 0 60 90 90 90 + 90 90 90 90 77 0 0 0 +ispt( 92) = 0 162 181 271 361 451 541 631 + 721 0 0 1013 0 0 0 0 + 0 0 0 0 1842 1891 1981 2071 + 2161 2251 2341 2431 2521 0 0 0 +iipe( 92) = 0 19 90 90 90 90 90 90 + 23 0 0 10 0 0 0 0 + 0 0 0 0 49 90 90 90 + 90 90 90 90 76 0 0 0 +ispt( 93) = 0 175 181 271 361 451 541 631 + 726 0 0 0 0 0 0 0 + 0 0 0 0 1853 1891 1981 2071 + 2161 2251 2341 2431 2521 0 0 0 +iipe( 93) = 0 6 90 90 90 90 90 70 + 37 0 0 0 0 0 0 0 + 0 0 0 0 38 90 90 90 + 90 90 90 90 76 0 0 0 +ispt( 94) = 0 0 197 271 361 451 541 631 + 721 0 0 0 0 0 0 0 + 0 0 0 0 1862 1891 1981 2071 + 2161 2251 2341 2431 2521 0 0 0 +iipe( 94) = 0 0 74 90 90 90 90 90 + 51 0 0 0 0 0 0 0 + 0 0 0 0 29 90 90 90 + 90 90 90 90 73 0 0 0 +ispt( 95) = 0 0 219 271 361 451 541 631 + 721 811 0 0 0 0 0 0 + 0 0 0 0 1866 1891 1981 2071 + 2161 2251 2341 2431 2521 0 0 0 +iipe( 95) = 0 0 52 90 90 90 90 90 + 90 26 0 0 0 0 0 0 + 0 0 0 0 25 90 90 90 + 90 90 90 90 82 0 0 0 +ispt( 96) = 0 0 217 271 361 451 541 631 + 721 811 0 0 0 0 0 0 + 0 0 0 0 1870 1891 1981 2071 + 2161 2251 2341 2431 2521 0 0 0 +iipe( 96) = 0 0 54 90 90 90 90 90 + 90 55 0 0 0 0 0 0 + 0 0 0 0 21 90 90 90 + 90 90 90 90 82 0 0 0 +ispt( 97) = 0 0 215 271 361 451 541 631 + 721 811 0 0 0 0 0 0 + 0 0 0 0 1877 1891 1981 2071 + 2161 2251 2341 2431 2521 0 0 0 +iipe( 97) = 0 0 56 90 90 90 90 90 + 90 60 0 0 0 0 0 0 + 0 0 0 0 14 90 90 90 + 90 90 90 90 78 0 0 0 +ispt( 98) = 0 170 211 271 361 451 541 631 + 721 811 0 0 0 0 0 0 + 0 0 0 0 1854 1891 1981 2071 + 2161 2251 2341 2431 2521 0 0 0 +iipe( 98) = 0 8 60 90 90 90 90 90 + 90 72 0 0 0 0 0 0 + 0 0 0 0 37 90 90 90 + 90 90 90 90 57 0 0 0 +ispt( 99) = 0 171 181 271 361 451 541 631 + 721 832 0 0 0 0 0 0 + 0 0 0 0 1851 1891 1981 2071 + 2161 2251 2341 2431 2521 0 0 0 +iipe( 99) = 0 10 90 90 90 90 90 90 + 80 55 0 0 0 0 0 0 + 0 0 0 0 40 90 90 90 + 90 90 90 90 27 0 0 0 +ispt(100) = 0 178 181 271 361 451 541 631 + 721 832 0 0 0 0 0 0 + 0 0 0 0 1845 1891 1981 2071 + 2161 2251 2341 2431 2521 0 0 0 +iipe(100) = 0 3 90 90 90 90 90 90 + 75 54 0 0 0 0 0 0 + 0 0 0 0 46 90 90 90 + 90 90 90 90 16 0 0 0 +ispt(101) = 0 0 186 312 361 451 541 631 + 721 831 901 0 0 0 0 0 + 0 0 0 0 1846 1891 1981 2071 + 2161 2251 2341 2431 0 0 0 0 +iipe(101) = 0 0 70 49 90 90 90 90 + 34 70 3 0 0 0 0 0 + 0 0 0 0 45 90 90 90 + 90 90 90 85 0 0 0 0 +ispt(102) = 0 0 197 314 361 451 541 631 + 721 827 901 0 0 0 0 0 + 0 0 0 0 1874 1891 1981 2112 + 2161 2251 2341 2431 0 0 0 0 +iipe(102) = 0 0 45 47 90 90 90 90 + 38 74 12 0 0 0 0 0 + 0 0 0 0 17 90 82 49 + 90 90 90 81 0 0 0 0 +ispt(103) = 0 0 218 313 361 451 541 631 + 721 827 901 0 0 0 0 0 + 0 0 0 0 0 1897 2006 2071 + 2161 2251 2341 2431 0 0 0 0 +iipe(103) = 0 0 9 48 90 90 90 90 + 52 74 12 0 0 0 0 0 + 0 0 0 0 0 69 65 90 + 90 90 90 54 0 0 0 0 +ispt(104) = 0 0 0 308 361 451 541 631 + 721 827 0 0 0 0 0 0 + 0 0 0 0 0 0 2058 2071 + 2161 2251 2341 2431 0 0 0 0 +iipe(104) = 0 0 0 53 90 90 90 90 + 61 26 0 0 0 0 0 0 + 0 0 0 0 0 0 13 90 + 90 90 90 50 0 0 0 0 +ispt(105) = 0 0 0 309 361 451 541 631 + 721 834 0 0 0 0 0 0 + 0 0 0 0 0 0 0 2145 + 2161 2251 2417 2448 0 0 0 0 +iipe(105) = 0 0 0 52 90 90 90 90 + 70 24 0 0 0 0 0 0 + 0 0 0 0 0 0 0 16 + 90 24 5 12 0 0 0 0 +ispt(106) = 0 0 0 304 361 451 541 638 + 721 841 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 2161 2255 0 0 0 0 0 0 +iipe(106) = 0 0 0 57 90 90 63 83 + 72 21 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 79 17 0 0 0 0 0 0 +ispt(107) = 0 0 0 303 361 455 541 631 + 721 842 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 2186 2251 0 0 0 0 0 0 +iipe(107) = 0 0 0 58 79 86 90 90 + 76 22 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 65 13 0 0 0 0 0 0 +ispt(108) = 0 0 0 303 361 466 541 631 + 721 0 913 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 2167 2251 0 0 0 0 0 0 +iipe(108) = 0 0 0 58 78 75 90 90 + 79 0 28 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 84 12 0 0 0 0 0 0 +ispt(109) = 0 0 0 303 361 482 541 631 + 721 893 901 0 0 0 0 0 + 0 0 0 0 0 0 0 2102 + 2161 0 0 0 0 0 0 0 +iipe(109) = 0 0 0 58 66 59 90 90 + 87 8 45 0 0 0 0 0 + 0 0 0 0 0 0 0 59 + 83 0 0 0 0 0 0 0 +ispt(110) = 0 0 0 311 361 492 541 631 + 721 811 901 0 0 0 0 0 + 0 0 0 0 0 0 2066 2071 + 2161 0 0 0 0 0 0 0 +iipe(110) = 0 0 0 50 68 49 90 90 + 90 90 45 0 0 0 0 0 + 0 0 0 0 0 0 5 90 + 83 0 0 0 0 0 0 0 +ispt(111) = 0 0 0 315 361 0 548 631 + 721 811 930 0 0 0 0 0 + 0 0 0 0 0 0 2063 2071 + 2161 2251 0 0 0 0 0 0 +iipe(111) = 0 0 0 46 72 0 83 90 + 90 22 25 0 0 0 0 0 + 0 0 0 0 0 0 8 90 + 90 3 0 0 0 0 0 0 +ispt(112) = 0 0 0 317 361 0 596 631 + 721 811 901 0 0 0 0 0 + 0 0 0 0 0 0 2035 2071 + 2161 2251 0 0 0 0 0 0 +iipe(112) = 0 0 0 44 78 0 35 90 + 90 90 58 0 0 0 0 0 + 0 0 0 0 0 0 36 90 + 90 49 0 0 0 0 0 0 +ispt(113) = 0 0 0 291 361 0 601 631 + 721 811 901 0 0 0 0 0 + 0 0 0 0 0 0 2031 2071 + 2161 2251 2341 0 0 0 0 0 +iipe(113) = 0 0 0 70 82 0 30 90 + 90 90 64 0 0 0 0 0 + 0 0 0 0 0 0 40 90 + 90 90 30 0 0 0 0 0 +ispt(114) = 0 0 0 289 361 451 610 631 + 721 811 901 0 0 0 0 0 + 0 0 0 0 0 0 2025 2071 + 2161 2251 2341 0 0 0 0 0 +iipe(114) = 0 0 0 72 90 5 21 90 + 90 90 63 0 0 0 0 0 + 0 0 0 0 0 0 46 90 + 90 90 31 0 0 0 0 0 +ispt(115) = 0 0 0 290 361 451 621 631 + 721 811 901 0 0 0 0 0 + 0 0 0 0 0 0 1981 2071 + 2161 2251 2341 0 0 0 0 0 +iipe(115) = 0 0 0 71 90 42 10 90 + 90 90 66 0 0 0 0 0 + 0 0 0 0 0 0 90 90 + 90 90 39 0 0 0 0 0 +ispt(116) = 0 135 0 293 361 451 0 643 + 721 811 901 0 0 0 0 0 + 0 0 0 0 0 1949 1981 2071 + 2161 2251 2341 0 0 0 0 0 +iipe(116) = 0 25 0 68 90 51 0 78 + 90 90 82 0 0 0 0 0 + 0 0 0 0 0 32 90 90 + 90 90 64 0 0 0 0 0 +ispt(117) = 0 134 0 305 361 451 0 647 + 721 811 901 991 0 0 0 0 + 0 0 0 0 0 1949 1981 2071 + 2161 2251 2341 0 0 0 0 0 +iipe(117) = 0 36 0 56 90 57 0 74 + 90 90 90 6 0 0 0 0 + 0 0 0 0 0 32 90 90 + 90 90 73 0 0 0 0 0 +ispt(118) = 0 136 181 311 361 451 0 653 + 721 811 901 991 0 0 0 0 + 0 0 0 0 0 1952 1981 2071 + 2161 2251 2341 2431 0 0 0 0 +iipe(118) = 0 45 57 50 90 59 0 68 + 90 90 90 6 0 0 0 0 + 0 0 0 0 0 29 90 90 + 90 90 90 5 0 0 0 0 +ispt(119) = 0 141 181 316 385 451 0 657 + 721 811 901 991 0 0 0 0 + 0 0 0 0 0 1951 1981 2071 + 2161 2251 2341 2431 0 0 0 0 +iipe(119) = 0 40 66 29 66 68 0 64 + 90 90 90 10 0 0 0 0 + 0 0 0 0 0 30 90 90 + 90 90 90 37 0 0 0 0 +ispt(120) = 0 144 181 271 420 451 0 668 + 721 811 901 991 0 0 0 0 + 0 0 0 0 0 1943 1981 2071 + 2161 2251 2341 2431 0 0 0 0 +iipe(120) = 0 37 90 76 31 83 0 53 + 90 90 90 33 0 0 0 0 + 0 0 0 0 0 38 90 90 + 90 90 90 41 0 0 0 0 +ispt(121) = 0 155 181 271 361 451 541 662 + 721 811 901 991 0 0 0 0 + 0 0 0 0 0 1942 1981 2071 + 2161 2251 2341 2431 0 0 0 0 +iipe(121) = 0 26 90 90 90 90 3 59 + 90 90 90 33 0 0 0 0 + 0 0 0 0 0 39 90 90 + 90 90 90 52 0 0 0 0 +ispt(122) = 0 169 181 271 361 451 541 654 + 721 811 901 1002 0 0 0 0 + 0 0 0 0 0 1935 1981 2071 + 2161 2251 2341 2456 0 0 0 0 +iipe(122) = 0 12 90 90 90 90 3 67 + 90 90 78 48 0 0 0 0 + 0 0 0 0 0 46 90 90 + 90 90 67 26 0 0 0 0 +ispt(123) = 0 178 181 271 361 451 0 631 + 721 811 901 991 0 0 0 0 + 0 0 0 0 0 1919 1981 2071 + 2161 2251 2341 2456 0 0 0 0 +iipe(123) = 0 3 90 90 90 90 0 90 + 90 90 90 56 0 0 0 0 + 0 0 0 0 0 62 90 90 + 90 90 84 34 0 0 0 0 +ispt(124) = 0 178 181 271 361 454 541 631 + 721 811 901 991 0 0 0 0 + 0 0 0 0 0 1917 1981 2071 + 2161 2251 2341 2431 0 0 0 0 +iipe(124) = 0 3 90 90 71 87 90 90 + 90 90 90 49 0 0 0 0 + 0 0 0 0 0 64 90 90 + 90 90 90 62 0 0 0 0 +ispt(125) = 0 178 181 271 361 458 541 631 + 721 811 901 991 0 0 0 0 + 0 0 0 0 0 1967 1981 2071 + 2161 2251 2341 2431 0 2615 0 0 +iipe(125) = 0 3 90 90 71 83 90 90 + 90 90 90 13 0 0 0 0 + 0 0 0 0 0 14 90 90 + 90 90 90 64 0 31 0 0 +ispt(126) = 0 0 184 271 361 458 541 631 + 721 811 901 991 0 0 0 0 + 0 0 0 0 0 1953 1981 2071 + 2161 2251 2341 2431 2595 2611 0 0 +iipe(126) = 0 0 87 90 61 83 90 90 + 90 90 90 6 0 0 0 0 + 0 0 0 0 0 28 90 90 + 90 90 90 76 16 64 0 0 +ispt(127) = 0 0 188 271 361 451 541 631 + 721 811 901 991 0 0 0 0 + 0 0 0 0 0 1950 1981 2071 + 2161 2251 2341 2431 2579 2611 0 0 +iipe(127) = 0 0 83 90 90 90 90 90 + 90 90 90 6 0 0 0 0 + 0 0 0 0 0 31 90 90 + 90 90 90 75 32 66 0 0 +ispt(128) = 0 0 181 271 361 451 541 631 + 721 811 901 0 0 0 0 0 + 0 0 0 0 0 1891 1981 2071 + 2161 2251 2341 2431 2521 2611 0 0 +iipe(128) = 0 0 90 90 90 90 90 90 + 90 90 90 0 0 0 0 0 + 0 0 0 0 0 90 90 90 + 90 90 90 90 90 90 0 0 + +jspt( 1) = 1 17 33 49 65 81 97 113 + 130 147 164 181 198 215 232 249 + 266 283 300 317 334 351 368 385 + 402 419 436 453 470 487 504 521 + 538 555 572 589 606 623 640 657 + 674 691 708 725 742 759 776 793 + 810 827 844 861 878 895 912 929 + 946 963 980 997 1014 1031 1048 1065 + 1082 1099 1116 1133 1150 1167 1184 1201 + 1218 1235 1252 1269 1286 1303 1320 1337 + 1354 1371 1388 1405 1422 1439 1456 1473 + 1490 1507 1524 1541 1558 1575 1592 1609 + 1626 1643 1660 1677 1694 1711 1728 1745 + 1762 1779 1796 1813 1830 1847 1864 1881 + 1898 1915 1932 1949 1966 1983 2000 2017 + 2034 2050 2066 2082 2098 2114 2130 2146 +jjpe( 1) = 16 16 16 16 16 16 16 17 + 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 + 16 16 16 16 16 16 16 16 diff --git a/cime_config/buildnml b/cime_config/buildnml index c1b81d83..eecf5a68 100755 --- a/cime_config/buildnml +++ b/cime_config/buildnml @@ -136,6 +136,7 @@ set DITFLX = .false. set DISFLX = .false. set SRXBAL = .false. set SCFILE = "'unset'" +set WAVSRC = "'none'" set SMTFRC = .true. set SPRFAC = .false. set ATM_PATH = "'unset'" @@ -207,6 +208,8 @@ else set BDMC2 = 1.e-5 endif set TKEPF = .006 +set SMOBLD = .true. +set LNGMTP = "'none'" if ($BLOM_VCOORD == isopyc_bulkml) then set BDMLDP = .true. set LTEDTP = "'layer'" @@ -231,7 +234,7 @@ if ($BLOM_N_DEPOSITION == TRUE) then else if( $BLOM_NDEP_SCENARIO == 1850 && $OCN_GRID == tnx0.25v4) then set NDEPFNAME = ndep_1850_CMIP6_tnx0.25v4_20190912.nc else if( $BLOM_NDEP_SCENARIO == 1850 && $OCN_GRID == tnx0.125v4) then - set NDEPFNAME = ndep_1850_CMIP6_tnx0.125v4_20190912.nc + set NDEPFNAME = ndep_1850_CMIP6_tnx0.125v4_20221013.nc else if( $BLOM_NDEP_SCENARIO == 2000 && $OCN_GRID == tnx2v1) then set NDEPFNAME = ndep_2000_CMIP6_tnx2v1_20200826.nc else if( $BLOM_NDEP_SCENARIO == 2000 && $OCN_GRID == tnx1v4) then @@ -311,6 +314,8 @@ set H2D_HMLTFZ = '0, 4, 0' set H2D_HSNW = '0, 0, 0' set H2D_IAGE = '0, 0, 0' set H2D_IDKEDT = '0, 4, 0' +set H2D_LAMULT = '0, 4, 0' +set H2D_LASL = '0, 4, 0' set H2D_LIP = '0, 4, 0' set H2D_MAXMLD = '4, 4, 0' set H2D_MLD = '0, 4, 0' @@ -355,8 +360,10 @@ set H2D_UB = '0, 4, 0' set H2D_UICE = '0, 0, 0' set H2D_USTAR = '0, 4, 0' set H2D_USTAR3 = '0, 4, 0' +set H2D_USTOKES = '0, 0, 0' set H2D_VB = '0, 4, 0' set H2D_VICE = '0, 0, 0' +set H2D_VSTOKES = '0, 0, 0' set H2D_ZTX = '0, 4, 0' set LYR_BFSQ = '0, 4, 0' set LYR_DIFDIA = '0, 4, 0' @@ -776,24 +783,25 @@ else if ($OCN_GRID == tnx0.125v4) then set CWBDTS = .75e-4 set CWBDLS = 25 if ($BLOM_UNIT == cgs) then - set MDV2HI = .5 + set MDV2HI = .1 set MDV2LO = .1 set MDV4HI = 0. set MDV4LO = 0. set MDC2HI = 300.e4 set MDC2LO = 100.e4 else - set MDV2HI = .005 + set MDV2HI = .001 set MDV2LO = .001 set MDV4HI = 0. set MDV4LO = 0. set MDC2HI = 300. set MDC2LO = 100. endif - set VSC2HI = .5 - set VSC2LO = .5 - set VSC4HI = 0.0 - set VSC4LO = 0.0 + set VSC2HI = 0. + set VSC2LO = 0. + set VSC4HI = .06 + set VSC4LO = .06 + set LTEDTP = "'layer'" else echo "$0 ERROR: Cannot deal with GRID = $OCN_GRID " exit -1 @@ -885,19 +893,19 @@ else if ($OCN_GRID == tnx0.25v4) then set NDEPFILE = "''" endif else if ($OCN_GRID == tnx0.125v4) then - set GRFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/grid_tnx0.125v4_20200722.nc'" - set ICFILE = "'$DIN_LOC_ROOT/ocn/blom/inicon/inicon_tnx0.125v4_20200728.nc'" - set TDFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/tidal_dissipation_tnx0.125v4_20200722.nc'" - set MER_ORFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/ocean_regions_tnx0.125v4_20200722.nc'" - set MER_MIFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/mertra_index_tnx0.125v4_20200722.dat'" - set SEC_SIFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/section_index_tnx0.125v4_20200722.dat'" - set CCFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/chlorophyll_concentration_tnx0.125v4_20200722.nc'" - set SCFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/sss_clim_core_tnx0.125v4_20200722.nc'" - set FEDEPFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/dustdep_mhw2006_tnx0.125v4_20200722.nc'" + set GRFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/grid_tnx0.125v4_20221013.nc'" + set ICFILE = "'$DIN_LOC_ROOT/ocn/blom/inicon/inicon_tnx0.125v4_20230318.nc'" + set TDFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/tidal_dissipation_tnx0.125v4_20221013.nc'" + set MER_ORFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/ocean_regions_tnx0.125v4_20221013.nc'" + set MER_MIFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/mertra_index_tnx0.125v4_20221013.dat'" + set SEC_SIFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/section_index_tnx0.125v4_20221013.dat'" + set CCFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/chlorophyll_concentration_tnx0.125v4_20221013.nc'" + set SCFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/sss_clim_core_tnx0.125v4_20221013.nc'" + set FEDEPFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/dustdep_mhw2006_tnx0.125v4_20221013.nc'" set SWACLIMFILE = "''" set SEDPORFILE = "''" if ($BLOM_RIVER_NUTRIENTS == TRUE) then - set RIVINFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/river_nutrients_GNEWS2000_tnx0.125v4_20170821.nc'" + set RIVINFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/river_nutrients_GNEWS2000_tnx0.125v4_20221013.nc'" else set RIVINFILE = "''" endif @@ -1007,6 +1015,7 @@ cat >! $RUNDIR/ocn_in$inststr << EOF ! DISFLX : Diagnose freshwater flux flag (l) ! SRXBAL : Balance the SSS relaxation (l) ! SCFILE : Name of file containing SSS climatology used for relaxation (a) +! WAVSRC : Source of wave fields. Valid source: 'none', 'param', 'extern' (a) ! SMTFRC : Smooth CESM forcing (l) ! SPRFAC : Send precipitation/runoff factor to CESM coupler (l) ! ATM_PATH : Path to forcing fields in case of EXPCNF 'ben02clim' or @@ -1074,6 +1083,7 @@ cat >! $RUNDIR/ocn_in$inststr << EOF DISFLX = $DISFLX SRXBAL = $SRXBAL SCFILE = $SCFILE + WAVSRC = $WAVSRC SMTFRC = $SMTFRC SPRFAC = $SPRFAC ATM_PATH = $ATM_PATH @@ -1157,6 +1167,10 @@ cat >>! $RUNDIR/ocn_in$inststr << EOF ! Gregg et al. (2003) (l) ! TKEPF : Fraction of surface TKE that penetrates beneath mixed layer ! () (f) +! SMOBLD : If true, apply lateral smoothing of CVMix estimated +! boundary layer depth (l) +! LNGMTP : Type of CVMix Langmuir turbulence parameterization. Valid +! types: 'none', 'vr12-ma', 'lf17' ! LTEDTP : Type of lateral tracer eddy diffusion: Valid methods: ! 'layer', 'neutral'. &DIFFUSION @@ -1182,6 +1196,8 @@ cat >>! $RUNDIR/ocn_in$inststr << EOF BDMC2 = $BDMC2 BDMLDP = $BDMLDP TKEPF = $TKEPF + SMOBLD = $SMOBLD + LNGMTP = $LNGMTP LTEDTP = $LTEDTP / EOF @@ -1309,6 +1325,8 @@ cat >>! $RUNDIR/ocn_in$inststr << EOF ! HSNW - snow depth [m] ! IAGE - ice age [d] ! IDKEDT - mixed layer inertial kinetic energy tendency [kg s-3] +! LAMULT - Langmuir enhancement factor [] +! LASL - Surface layer averaged Langmuir number [] ! LIP - liquid precipitation [kg m-2 s-1] ! MAXMLD - maximum mixed layer depth [m] ! MLD - mixed layer depth [m] @@ -1353,8 +1371,10 @@ cat >>! $RUNDIR/ocn_in$inststr << EOF ! UICE - ice velocity x-component [m s-1] ! USTAR - friction velocity [m s-1] ! USTAR3 - friction velocity cubed [m3 s-3] +! USTOKES - surface Stokes drift x-componen [m s-1] ! VB - barotropic velocity y-component [m s-1] ! VICE - ice velocity y-component [m s-1] +! VSTOKES - surface Stokes drift y-componen [m s-1] ! ZTX - wind stress x-component [N m-2] ! BFSQ - buoyancy frequency squared [s-1] ! DIFDIA - vertical diffusivity [log10(m2 s-1)|m2 s-1] @@ -1440,6 +1460,8 @@ cat >>! $RUNDIR/ocn_in$inststr << EOF H2D_HSNW = $H2D_HSNW H2D_IAGE = $H2D_IAGE H2D_IDKEDT = $H2D_IDKEDT + H2D_LAMULT = $H2D_LAMULT + H2D_LASL = $H2D_LASL H2D_LIP = $H2D_LIP H2D_MAXMLD = $H2D_MAXMLD H2D_MLD = $H2D_MLD @@ -1484,8 +1506,10 @@ cat >>! $RUNDIR/ocn_in$inststr << EOF H2D_UICE = $H2D_UICE H2D_USTAR = $H2D_USTAR H2D_USTAR3 = $H2D_USTAR3 + H2D_USTOKES = $H2D_USTOKES H2D_VB = $H2D_VB H2D_VICE = $H2D_VICE + H2D_VSTOKES = $H2D_VSTOKES H2D_ZTX = $H2D_ZTX LYR_BFSQ = $LYR_BFSQ LYR_DIFDIA = $LYR_DIFDIA diff --git a/drivers/nuopc/mod_nuopc_methods.F90 b/drivers/nuopc/mod_nuopc_methods.F90 index 6cdd659a..53b52d1e 100644 --- a/drivers/nuopc/mod_nuopc_methods.F90 +++ b/drivers/nuopc/mod_nuopc_methods.F90 @@ -30,7 +30,8 @@ module mod_nuopc_methods use mod_grid, only: scuy, scvx, scp2, scuxi, scvyi, plon, plat, & cosang, sinang use mod_state, only: u, v, dp, temp, saln, pbu, pbv, ubflxs, vbflxs, sealv - use mod_forcing, only: sprfac, prfac, flxco2, flxdms, flxbrf + use mod_forcing, only: wavsrc_opt, wavsrc_extern, sprfac, prfac, flxco2, & + flxdms, flxbrf use mod_difest, only: obldepth use mod_vcoord, only: vcoord_type_tag, isopyc_bulkml, cntiso_hybrid use mod_cesm, only: frzpot, mltpot, & @@ -687,67 +688,71 @@ subroutine blom_importflds(fldlist_num, fldlist) call fill_global(mval, fval, halo_ps, abswnd_da(1-nbdy,1-nbdy,l2ci)) call fill_global(mval, fval, halo_ps, ficem_da(1-nbdy,1-nbdy,l2ci)) - call getfldindex(fldlist_num, fldlist, 'Sw_lamult', index_Sw_lamult) - call getfldindex(fldlist_num, fldlist, 'Sw_ustokes', index_Sw_ustokes) - call getfldindex(fldlist_num, fldlist, 'Sw_vstokes', index_Sw_vstokes) - call getfldindex(fldlist_num, fldlist, 'Sw_hstokes', index_Sw_hstokes) + if (wavsrc_opt == wavsrc_extern) then - !$omp parallel do private(i, n, utmp, vtmp) - do j = 1, jjcpl - do i = 1, ii - if (ip(i,j) == 0) then - util1(i,j) = mval - util2(i,j) = mval - lamult_da(i,j,l2ci) = mval - lasl_da(i,j,l2ci) = mval - elseif (cplmsk(i,j) == 0) then - util1(i,j) = fval - util2(i,j) = fval - lamult_da(i,j,l2ci) = fval - lasl_da(i,j,l2ci) = fval - else - n = (j - 1)*ii + i + call getfldindex(fldlist_num, fldlist, 'Sw_lamult', index_Sw_lamult) + call getfldindex(fldlist_num, fldlist, 'Sw_ustokes', index_Sw_ustokes) + call getfldindex(fldlist_num, fldlist, 'Sw_vstokes', index_Sw_vstokes) + call getfldindex(fldlist_num, fldlist, 'Sw_hstokes', index_Sw_hstokes) - utmp = fldlist(index_Sw_ustokes)%dataptr(n) - vtmp = fldlist(index_Sw_vstokes)%dataptr(n) - util1(i,j) = utmp*cosang(i,j) + vtmp*sinang(i,j) - util2(i,j) = - utmp*sinang(i,j) + vtmp*cosang(i,j) + !$omp parallel do private(i, n, utmp, vtmp) + do j = 1, jjcpl + do i = 1, ii + if (ip(i,j) == 0) then + util1(i,j) = mval + util2(i,j) = mval + lamult_da(i,j,l2ci) = mval + lasl_da(i,j,l2ci) = mval + elseif (cplmsk(i,j) == 0) then + util1(i,j) = fval + util2(i,j) = fval + lamult_da(i,j,l2ci) = fval + lasl_da(i,j,l2ci) = fval + else + n = (j - 1)*ii + i - ! Langmuir enhancement factor []. - lamult_da(i,j,l2ci) = fldlist(index_Sw_lamult)%dataptr(n) + utmp = fldlist(index_Sw_ustokes)%dataptr(n) + vtmp = fldlist(index_Sw_vstokes)%dataptr(n) + util1(i,j) = utmp*cosang(i,j) + vtmp*sinang(i,j) + util2(i,j) = - utmp*sinang(i,j) + vtmp*cosang(i,j) - ! Surface layer averaged Langmuir number []. - lasl_da(i,j,l2ci) = fldlist(index_Sw_hstokes)%dataptr(n) + ! Langmuir enhancement factor []. + lamult_da(i,j,l2ci) = fldlist(index_Sw_lamult)%dataptr(n) - endif + ! Surface layer averaged Langmuir number []. + lasl_da(i,j,l2ci) = fldlist(index_Sw_hstokes)%dataptr(n) + + endif + enddo enddo - enddo - !$omp end parallel do + !$omp end parallel do - call fill_global(mval, fval, halo_pv, util1) - call fill_global(mval, fval, halo_pv, util2) - call fill_global(mval, fval, halo_ps, lamult_da(1-nbdy,1-nbdy,l2ci)) - call fill_global(mval, fval, halo_ps, lasl_da(1-nbdy,1-nbdy,l2ci)) + call fill_global(mval, fval, halo_pv, util1) + call fill_global(mval, fval, halo_pv, util2) + call fill_global(mval, fval, halo_ps, lamult_da(1-nbdy,1-nbdy,l2ci)) + call fill_global(mval, fval, halo_ps, lasl_da(1-nbdy,1-nbdy,l2ci)) - call xctilr(util1, 1,1, 1,1, halo_pv) - call xctilr(util2, 1,1, 1,1, halo_pv) + call xctilr(util1, 1,1, 1,1, halo_pv) + call xctilr(util2, 1,1, 1,1, halo_pv) - !$omp parallel do private(l, i) - do j = 1, jj - do l = 1, isu(j) - do i = max(1,ifu(j,l)), min(ii,ilu(j,l)) - ! x-component of surface Stokes drift [m s-1]. - ustokes_da(i,j,l2ci) = .5_r8*(util1(i-1,j) + util1(i,j)) - enddo - enddo - do l = 1,isv(j) - do i = max(1,ifv(j,l)), min(ii,ilv(j,l)) - ! y-component of surface Stokes drift [m s-1]. - vstokes_da(i,j,l2ci) = .5_r8*(util2(i,j-1) + util2(i,j)) - enddo + !$omp parallel do private(l, i) + do j = 1, jj + do l = 1, isu(j) + do i = max(1,ifu(j,l)), min(ii,ilu(j,l)) + ! x-component of surface Stokes drift [m s-1]. + ustokes_da(i,j,l2ci) = .5_r8*(util1(i-1,j) + util1(i,j)) + enddo + enddo + do l = 1,isv(j) + do i = max(1,ifv(j,l)), min(ii,ilv(j,l)) + ! y-component of surface Stokes drift [m s-1]. + vstokes_da(i,j,l2ci) = .5_r8*(util2(i,j-1) + util2(i,j)) + enddo + enddo enddo - enddo - !$omp end parallel do + !$omp end parallel do + + endif #ifdef PROGCO2 call getfldindex(fldlist_num, fldlist, 'Sa_co2prog', index_Sa_co2prog) diff --git a/meson.build b/meson.build index 9f237b7e..20b496d4 100644 --- a/meson.build +++ b/meson.build @@ -29,7 +29,7 @@ elif fcc.get_id() == 'intel' language: 'fortran') endif if get_option('buildtype') == 'release' - add_project_arguments('-fp-model precise'.split(),language: 'fortran') + add_project_arguments('-O2 -fp-model precise'.split(),language: 'fortran') endif if get_option('processors') == 1 and get_option('grid') == 'channel' add_project_arguments('-mcmodel=medium', language: 'fortran') diff --git a/phy/blom_init.F b/phy/blom_init.F index 629c02d2..786c94d6 100644 --- a/phy/blom_init.F +++ b/phy/blom_init.F @@ -30,7 +30,7 @@ subroutine blom_init use mod_xc use mod_pointtest, only: init_ptest use mod_inicon, only: icfile - use mod_state, only: dp, dpu, dpv, uflx, vflx, p, phi + use mod_state, only: dp, dpu, dpv, uflx, vflx, p, pu, pv, phi use mod_barotp, only: pvtrop use mod_pgforc, only: pgfxm, pgfym, xixp, xixm, xiyp, xiym use mod_niw, only: uml, vml, umlres, vmlres @@ -49,7 +49,7 @@ subroutine blom_init c implicit none c - integer istat,ncid,varid,i,j,k,l,m,n,mm,nn,k1m,k1n,mt,mmt,km + integer istat,ncid,varid,i,j,k,l,m,n,mm,nn,k1m,k1n,mt,mmt,kn,km real q logical icrest,fexist c @@ -274,12 +274,31 @@ subroutine blom_init call xctilr(dpu, 1,2*kk, 3,3, halo_us) call xctilr(dpv, 1,2*kk, 3,3, halo_vs) c -c$OMP PARALLEL DO PRIVATE(k,l,i) +c$OMP PARALLEL DO PRIVATE(k,km,l,i) do j=-2,jj+2 do k=1,kk + km=k+mm do l=1,isp(j) do i=max(-2,ifp(j,l)),min(ii+2,ilp(j,l)) - p(i,j,k+1)=p(i,j,k)+dp(i,j,k+mm) + p(i,j,k+1)=p(i,j,k)+dp(i,j,km) + enddo + enddo + enddo + enddo +c$OMP END PARALLEL DO +c +c$OMP PARALLEL DO PRIVATE(k,kn,l,i) + do j=1,jj + do k=1,kk + kn=k+nn + do l=1,isu(j) + do i=max(1,ifu(j,l)),min(ii,ilu(j,l)) + pu(i,j,k+1)=pu(i,j,k)+dpu(i,j,kn) + enddo + enddo + do l=1,isv(j) + do i=max(1,ifv(j,l)),min(ii,ilv(j,l)) + pv(i,j,k+1)=pv(i,j,k)+dpv(i,j,kn) enddo enddo enddo diff --git a/phy/cntiso_hybrid_forcing.F90 b/phy/cntiso_hybrid_forcing.F90 index 3bc528f7..bc068560 100644 --- a/phy/cntiso_hybrid_forcing.F90 +++ b/phy/cntiso_hybrid_forcing.F90 @@ -31,7 +31,6 @@ subroutine cntiso_hybrid_forcing(m, n, mm, nn, k1m, k1n) use mod_swabs, only: swbgal, swbgfc, swamxd use mod_forcing, only: surflx, sswflx, salflx, brnflx, buoyfl, & t_sw_nonloc, s_br_nonloc - use mod_diffusion, only: t_ns_nonloc, s_nb_nonloc use mod_cmnfld, only: mlts use mod_checksum, only: csdiag, chksummsk @@ -184,10 +183,8 @@ subroutine cntiso_hybrid_forcing(m, n, mm, nn, k1m, k1n) ! Buoyancy flux at subsurface layer interfaces [cm2 s-3]. do k = 2, kk+1 - buoyfl(i,j,k) = - ( dsgdt*( t_ns_nonloc(i,j,k)*hfns & - + t_sw_nonloc(i,j,k)*hfsw)*cpi & - + dsgds*( s_nb_nonloc(i,j,k)*sfnb & - + s_br_nonloc(i,j,k)*sfbr))*gaa + buoyfl(i,j,k) = - ( dsgdt*t_sw_nonloc(i,j,k)*hfsw*cpi & + + dsgds*s_br_nonloc(i,j,k)*sfbr)*gaa enddo enddo diff --git a/phy/mod_dia.F b/phy/mod_dia.F index 330bc613..f06e4f03 100644 --- a/phy/mod_dia.F +++ b/phy/mod_dia.F @@ -1,5 +1,5 @@ ! ------------------------------------------------------------------------------ -! Copyright (C) 2010-2022 Ingo Bethke, Mats Bentsen, Mehmet Ilicak, +! Copyright (C) 2010-2023 Ingo Bethke, Mats Bentsen, Mehmet Ilicak, ! Alok Kumar Gupta, Jörg Schwinger, Ping-Gin Chiu ! ! This file is part of BLOM. @@ -53,7 +53,8 @@ module mod_dia use mod_cmnfld, only: z, bfsql, dz, mlts use mod_seaice, only: ficem, hicem, hsnwm, uicem, vicem, iagem use mod_forcing, only: swa, nsf, hmltfz, lip, sop, eva, rnf, rfi, - . fmltfz, sfl, ztx, mty, abswnd, surflx, + . fmltfz, sfl, ztx, mty, abswnd, + . lamult, lasl, ustokes, vstokes, surflx, . surrlx, salflx, brnflx, salrlx, taux, tauy, . ustar, ustar3 use mod_niw, only: idkedt @@ -187,17 +188,17 @@ module mod_dia integer, dimension(nphymax), save :: . H2D_ABSWND ,H2D_ALB ,H2D_BTMSTR ,H2D_BRNFLX ,H2D_BRNPD , . H2D_DFL ,H2D_EVA ,H2D_FICE ,H2D_FMLTFZ ,H2D_HICE , - . H2D_HMLTFZ ,H2D_HSNW ,H2D_IAGE ,H2D_IDKEDT ,H2D_LIP , - . H2D_MAXMLD ,H2D_MLD ,H2D_MLTS ,H2D_MLTSMN ,H2D_MLTSMX , - . H2D_MLTSSQ ,H2D_MTKEUS ,H2D_MTKENI ,H2D_MTKEBF ,H2D_MTKERS , - . H2D_MTKEPE ,H2D_MTKEKE ,H2D_MTY ,H2D_NSF ,H2D_PBOT , - . H2D_PSRF ,H2D_RFIFLX ,H2D_RNFFLX ,H2D_SALFLX ,H2D_SALRLX , - . H2D_SBOT ,H2D_SEALV ,H2D_SLVSQ ,H2D_SFL ,H2D_SOP , - . H2D_SIGMX ,H2D_SSS ,H2D_SSSSQ ,H2D_SST ,H2D_SSTSQ , - . H2D_SURFLX ,H2D_SURRLX ,H2D_SWA ,H2D_T20D ,H2D_TAUX , - . H2D_TAUY ,H2D_TBOT ,H2D_TICE ,H2D_TSRF ,H2D_UB , - . H2D_UICE ,H2D_USTAR ,H2D_USTAR3 ,H2D_VB ,H2D_VICE , - . H2D_ZTX , + . H2D_HMLTFZ ,H2D_HSNW ,H2D_IAGE ,H2D_IDKEDT ,H2D_LAMULT , + . H2D_LASL ,H2D_LIP ,H2D_MAXMLD ,H2D_MLD ,H2D_MLTS , + . H2D_MLTSMN ,H2D_MLTSMX ,H2D_MLTSSQ ,H2D_MTKEUS ,H2D_MTKENI , + . H2D_MTKEBF ,H2D_MTKERS ,H2D_MTKEPE ,H2D_MTKEKE ,H2D_MTY , + . H2D_NSF ,H2D_PBOT ,H2D_PSRF ,H2D_RFIFLX ,H2D_RNFFLX , + . H2D_SALFLX ,H2D_SALRLX ,H2D_SBOT ,H2D_SEALV ,H2D_SLVSQ , + . H2D_SFL ,H2D_SOP ,H2D_SIGMX ,H2D_SSS ,H2D_SSSSQ , + . H2D_SST ,H2D_SSTSQ ,H2D_SURFLX ,H2D_SURRLX ,H2D_SWA , + . H2D_T20D ,H2D_TAUX ,H2D_TAUY ,H2D_TBOT ,H2D_TICE , + . H2D_TSRF ,H2D_UB ,H2D_UICE ,H2D_USTAR ,H2D_USTAR3 , + . H2D_USTOKES,H2D_VB ,H2D_VICE ,H2D_VSTOKES,H2D_ZTX , . LYR_BFSQ ,LYR_DIFDIA ,LYR_DIFVMO ,LYR_DIFVHO ,LYR_DIFVSO , . LYR_DIFINT ,LYR_DIFISO ,LYR_DP ,LYR_DPU ,LYR_DPV , . LYR_DZ ,LYR_SALN ,LYR_TEMP ,LYR_TRC ,LYR_UFLX , @@ -226,17 +227,18 @@ module mod_dia integer, dimension(nphymax), save :: . ACC_ABSWND ,ACC_ALB ,ACC_BRNFLX ,ACC_BRNPD ,ACC_DFL , . ACC_EVA ,ACC_FICE ,ACC_FMLTFZ ,ACC_HICE ,ACC_HMLTFZ , - . ACC_HSNW ,ACC_IAGE ,ACC_IDKEDT ,ACC_LIP ,ACC_MAXMLD , - . ACC_MLD ,ACC_MLTS ,ACC_MLTSMN ,ACC_MLTSMX ,ACC_MLTSSQ , - . ACC_MTKEUS ,ACC_MTKENI ,ACC_MTKEBF ,ACC_MTKERS ,ACC_MTKEPE , - . ACC_MTKEKE ,ACC_MTY ,ACC_NSF ,ACC_PBOT ,ACC_PSRF , - . ACC_RFIFLX ,ACC_RNFFLX ,ACC_SALFLX ,ACC_SALRLX ,ACC_SBOT , - . ACC_SEALV ,ACC_SLVSQ ,ACC_SFL ,ACC_SOP ,ACC_SIGMX , - . ACC_SSS ,ACC_SSSSQ ,ACC_SST ,ACC_SSTSQ ,ACC_SURFLX , - . ACC_SURRLX ,ACC_SWA ,ACC_T20D ,ACC_TAUX ,ACC_TAUY , - . ACC_TBOT ,ACC_TICE ,ACC_TSRF ,ACC_UB ,ACC_UBFLXS , - . ACC_UICE ,ACC_USTAR ,ACC_USTAR3 ,ACC_VB ,ACC_VBFLXS , - . ACC_VICE ,ACC_ZTX ,ACC_IVOLU ,ACC_IVOLV ,ACC_UTILH2D, + . ACC_HSNW ,ACC_IAGE ,ACC_IDKEDT ,ACC_LAMULT ,ACC_LASL , + . ACC_LIP ,ACC_MAXMLD ,ACC_MLD ,ACC_MLTS ,ACC_MLTSMN , + . ACC_MLTSMX ,ACC_MLTSSQ ,ACC_MTKEUS ,ACC_MTKENI ,ACC_MTKEBF , + . ACC_MTKERS ,ACC_MTKEPE ,ACC_MTKEKE ,ACC_MTY ,ACC_NSF , + . ACC_PBOT ,ACC_PSRF ,ACC_RFIFLX ,ACC_RNFFLX ,ACC_SALFLX , + . ACC_SALRLX ,ACC_SBOT ,ACC_SEALV ,ACC_SLVSQ ,ACC_SFL , + . ACC_SOP ,ACC_SIGMX ,ACC_SSS ,ACC_SSSSQ ,ACC_SST , + . ACC_SSTSQ ,ACC_SURFLX ,ACC_SURRLX ,ACC_SWA ,ACC_T20D , + . ACC_TAUX ,ACC_TAUY ,ACC_TBOT ,ACC_TICE ,ACC_TSRF , + . ACC_UB ,ACC_UBFLXS ,ACC_UICE ,ACC_USTAR ,ACC_USTAR3 , + . ACC_USTOKES,ACC_VB ,ACC_VBFLXS ,ACC_VICE ,ACC_VSTOKES, + . ACC_ZTX ,ACC_IVOLU ,ACC_IVOLV ,ACC_UTILH2D, . ACC_BFSQ ,ACC_DIFDIA ,ACC_DIFVMO ,ACC_DIFVHO ,ACC_DIFVSO , . ACC_DIFINT ,ACC_DIFISO ,ACC_DP ,ACC_DPU ,ACC_DPV , . ACC_DZ ,ACC_SALN ,ACC_TEMP ,ACC_UFLX ,ACC_UTFLX , @@ -267,17 +269,17 @@ module mod_dia namelist /DIAPHY/ . H2D_ABSWND ,H2D_ALB ,H2D_BTMSTR ,H2D_BRNFLX ,H2D_BRNPD , . H2D_DFL ,H2D_EVA ,H2D_FICE ,H2D_FMLTFZ ,H2D_HICE , - . H2D_HMLTFZ ,H2D_HSNW ,H2D_IAGE ,H2D_IDKEDT ,H2D_LIP , - . H2D_MAXMLD ,H2D_MLD ,H2D_MLTS ,H2D_MLTSMN ,H2D_MLTSMX , - . H2D_MLTSSQ ,H2D_MTKEUS ,H2D_MTKENI ,H2D_MTKEBF ,H2D_MTKERS , - . H2D_MTKEPE ,H2D_MTKEKE ,H2D_MTY ,H2D_NSF ,H2D_PBOT , - . H2D_PSRF ,H2D_RFIFLX ,H2D_RNFFLX ,H2D_SALFLX ,H2D_SALRLX , - . H2D_SBOT ,H2D_SEALV ,H2D_SLVSQ ,H2D_SFL ,H2D_SOP , - . H2D_SIGMX ,H2D_SSS ,H2D_SSSSQ ,H2D_SST ,H2D_SSTSQ , - . H2D_SURFLX ,H2D_SURRLX ,H2D_SWA ,H2D_T20D ,H2D_TAUX , - . H2D_TAUY ,H2D_TBOT ,H2D_TICE ,H2D_TSRF ,H2D_UB , - . H2D_UICE ,H2D_USTAR ,H2D_USTAR3 ,H2D_VB ,H2D_VICE , - . H2D_ZTX , + . H2D_HMLTFZ ,H2D_HSNW ,H2D_IAGE ,H2D_IDKEDT ,H2D_LAMULT , + . H2D_LASL ,H2D_LIP ,H2D_MAXMLD ,H2D_MLD ,H2D_MLTS , + . H2D_MLTSMN ,H2D_MLTSMX ,H2D_MLTSSQ ,H2D_MTKEUS ,H2D_MTKENI , + . H2D_MTKEBF ,H2D_MTKERS ,H2D_MTKEPE ,H2D_MTKEKE ,H2D_MTY , + . H2D_NSF ,H2D_PBOT ,H2D_PSRF ,H2D_RFIFLX ,H2D_RNFFLX , + . H2D_SALFLX ,H2D_SALRLX ,H2D_SBOT ,H2D_SEALV ,H2D_SLVSQ , + . H2D_SFL ,H2D_SOP ,H2D_SIGMX ,H2D_SSS ,H2D_SSSSQ , + . H2D_SST ,H2D_SSTSQ ,H2D_SURFLX ,H2D_SURRLX ,H2D_SWA , + . H2D_T20D ,H2D_TAUX ,H2D_TAUY ,H2D_TBOT ,H2D_TICE , + . H2D_TSRF ,H2D_UB ,H2D_UICE ,H2D_USTAR ,H2D_USTAR3 , + . H2D_USTOKES,H2D_VB ,H2D_VICE ,H2D_VSTOKES,H2D_ZTX , . LYR_BFSQ ,LYR_DIFDIA ,LYR_DIFVMO ,LYR_DIFVHO ,LYR_DIFVSO , . LYR_DIFINT ,LYR_DIFISO ,LYR_DP ,LYR_DPU ,LYR_DPV , . LYR_DZ ,LYR_SALN ,LYR_TEMP ,LYR_TRC ,LYR_UFLX , @@ -464,6 +466,8 @@ subroutine diaini ACC_IDKEDT(n) = H2D_IDKEDT(n) ACC_IVOLU(n) = H2D_UICE(n) ACC_IVOLV(n) = H2D_VICE(n) + ACC_LAMULT(n) = H2D_LAMULT(n) + ACC_LASL(n) = H2D_LASL(n) ACC_LIP(n) = H2D_LIP(n) ACC_MAXMLD(n) = H2D_MAXMLD(n) ACC_MLD(n) = H2D_MLD(n) @@ -510,9 +514,11 @@ subroutine diaini ACC_UICE(n) = H2D_UICE(n) ACC_USTAR(n) = H2D_USTAR(n) ACC_USTAR3(n) = H2D_USTAR3(n) + ACC_USTOKES(n) = H2D_USTOKES(n) ACC_VB(n) = H2D_VB(n) ACC_VBFLXS(n) = H2D_BTMSTR(n) ACC_VICE(n) = H2D_VICE(n) + ACC_VSTOKES(n) = H2D_VSTOKES(n) ACC_ZTX(n) = H2D_ZTX(n) ACC_BFSQ(n) = LYR_BFSQ(n) ACC_BFSQLVL(n) = LVL_BFSQ(n) @@ -661,6 +667,10 @@ subroutine diaini ACC_IVOLU(n)=nphyh2d*min(1,ACC_IVOLU(n)) if (ACC_IVOLV(n).ne.0) nphyh2d=nphyh2d+1 ACC_IVOLV(n)=nphyh2d*min(1,ACC_IVOLV(n)) + if (ACC_LAMULT(n).ne.0) nphyh2d=nphyh2d+1 + ACC_LAMULT(n)=nphyh2d*min(1,ACC_LAMULT(n)) + if (ACC_LASL(n).ne.0) nphyh2d=nphyh2d+1 + ACC_LASL(n)=nphyh2d*min(1,ACC_LASL(n)) if (ACC_LIP(n).ne.0) nphyh2d=nphyh2d+1 ACC_LIP(n)=nphyh2d*min(1,ACC_LIP(n)) if (ACC_MAXMLD(n).ne.0) nphyh2d=nphyh2d+1 @@ -751,12 +761,16 @@ subroutine diaini ACC_USTAR(n)=nphyh2d*min(1,ACC_USTAR(n)) if (ACC_USTAR3(n).ne.0) nphyh2d=nphyh2d+1 ACC_USTAR3(n)=nphyh2d*min(1,ACC_USTAR3(n)) + if (ACC_USTOKES(n).ne.0) nphyh2d=nphyh2d+1 + ACC_USTOKES(n)=nphyh2d*min(1,ACC_USTOKES(n)) if (ACC_VB(n).ne.0) nphyh2d=nphyh2d+1 ACC_VB(n)=nphyh2d*min(1,ACC_VB(n)) if (ACC_VBFLXS(n).ne.0) nphyh2d=nphyh2d+1 ACC_VBFLXS(n)=nphyh2d*min(1,ACC_VBFLXS(n)) if (ACC_VICE(n).ne.0) nphyh2d=nphyh2d+1 ACC_VICE(n)=nphyh2d*min(1,ACC_VICE(n)) + if (ACC_VSTOKES(n).ne.0) nphyh2d=nphyh2d+1 + ACC_VSTOKES(n)=nphyh2d*min(1,ACC_VSTOKES(n)) if (ACC_ZTX(n).ne.0) nphyh2d=nphyh2d+1 ACC_ZTX(n)=nphyh2d*min(1,ACC_ZTX(n)) c @@ -1295,6 +1309,9 @@ subroutine diaacc(m,n,mm,nn,k1m,k1n) c --- weighted u-component of ice velocity [m^2/s] call acch2d(ACC_UICE,uicem,util1,1,'u') c +c --- u-component of surface Stokes drift [m/s] + call acch2d(ACC_USTOKES,ustokes,dummy,0,'u') +c c --- v-component of barotropic velocity [cm/s] call acch2d(ACC_VB,vb(1-nbdy,1-nbdy,m),dummy,0,'v') c @@ -1310,6 +1327,9 @@ subroutine diaacc(m,n,mm,nn,k1m,k1n) c --- weighted v-component of ice velocity [m^2/s] call acch2d(ACC_VICE,vicem,util3,1,'v') c +c --- v-component of surface Stokes drift [m/s] + call acch2d(ACC_VSTOKES,vstokes,dummy,0,'v') +c c --- surface pressure [g/cm/s^2] call acch2d(ACC_PSRF,p(1-nbdy,1-nbdy,1),dummy,0,'p') c @@ -1409,6 +1429,12 @@ subroutine diaacc(m,n,mm,nn,k1m,k1n) c --- mixed layer TKE tendency related to kinetic energy change [cm3 s-3] call acch2d(ACC_MTKEKE,mtkeke,dummy,0,'p') c +c --- Langmuir enhancement factor [] + call acch2d(ACC_LAMULT,lamult,dummy,0,'p') +c +c --- Surface layer averaged Langmuir number [] + call acch2d(ACC_LASL,lasl,dummy,0,'p') +c c --- sea surface salinity [g kg-1] call acch2d(ACC_SSS,saln(1-nbdy,1-nbdy,k1m),dummy,0,'p') c @@ -2516,6 +2542,21 @@ subroutine diaout(iogrp,m,n,mm,nn,k1m,k1n) . 'Mixed layer turbulent kinetic energy tendency '// . 'per unit area related to kinetic energy change', . ' ','kg s-3') +c + call wrth2d(ACC_LAMULT(iogrp),H2D_LAMULT(iogrp),rnacc,0., + . cmpflg,ip,'p','lamult','Langmuir enhancement factor',' ','1') +c + call wrth2d(ACC_LASL(iogrp),H2D_LASL(iogrp),rnacc,0., + . cmpflg,ip,'p','lasl','Surface layer averaged Langmuir number', + . ' ','1') +c + call wrth2d(ACC_USTOKES(iogrp),H2D_USTOKES(iogrp),rnacc,0., + . cmpflg,iuu,'u','ustokes','Surface Stokes drift x-component',' ', + . 'm s-1') +c + call wrth2d(ACC_VSTOKES(iogrp),H2D_VSTOKES(iogrp),rnacc,0., + . cmpflg,ivv,'v','vstokes','Surface Stokes drift y-component',' ', + . 'm s-1') c call wrth2d(ACC_SFL(iogrp),H2D_SFL(iogrp),rnacc,0., . cmpflg,ip,'p','sfl','Salt flux',' ','kg m-2 s-1') @@ -5361,6 +5402,7 @@ subroutine inifld(iogrp) call inih2d(ACC_TAUX(iogrp),'u',0.) call inih2d(ACC_UICE(iogrp),'u',0.) call inih2d(ACC_IVOLU(iogrp),'u',0.) + call inih2d(ACC_USTOKES(iogrp),'u',0.) c call inih2d(ACC_VB(iogrp),'v',0.) call inih2d(ACC_VBFLXS(iogrp),'v',0.) @@ -5368,6 +5410,7 @@ subroutine inifld(iogrp) call inih2d(ACC_TAUY(iogrp),'v',0.) call inih2d(ACC_VICE(iogrp),'v',0.) call inih2d(ACC_IVOLV(iogrp),'v',0.) + call inih2d(ACC_VSTOKES(iogrp),'v',0.) c call inih2d(ACC_PSRF(iogrp),'p',0.) call inih2d(ACC_PBOT(iogrp),'p',0.) @@ -5413,6 +5456,8 @@ subroutine inifld(iogrp) call inih2d(ACC_MTKERS(iogrp),'p',0.) call inih2d(ACC_MTKEPE(iogrp),'p',0.) call inih2d(ACC_MTKEKE(iogrp),'p',0.) + call inih2d(ACC_LAMULT(iogrp),'p',0.) + call inih2d(ACC_LASL(iogrp),'p',0.) call inih2d(ACC_FMLTFZ(iogrp),'p',0.) call inih2d(ACC_HMLTFZ(iogrp),'p',0.) call inih2d(ACC_HICE(iogrp),'p',0.) @@ -6452,6 +6497,18 @@ subroutine definevar(irec,iogrp,cmpflg,timeunits,calendar) . 'Mixed layer turbulent kinetic energy tendency '// . 'per unit area related to kinetic energy change', . ' ','kg s-3',0) +c + call ncdefvar3d(H2D_LAMULT(iogrp),cmpflg,'p','lamult', + . 'Langmuir enhancement factor',' ','1',0) +c + call ncdefvar3d(H2D_LASL(iogrp),cmpflg,'p','lasl', + . 'Surface layer averaged Langmuir number',' ','1',0) +c + call ncdefvar3d(H2D_USTOKES(iogrp),cmpflg,'u','ustokes', + . 'Surface Stokes drift x-component',' ','m s-1',0) +c + call ncdefvar3d(H2D_VSTOKES(iogrp),cmpflg,'v','vstokes', + . 'Surface Stokes drift y-component',' ','m s-1',0) c call ncdefvar3d(H2D_SFL(iogrp),cmpflg,'p','sfl', . 'Salt flux',' ','kg m-2 s-1',0) diff --git a/phy/mod_difest.F b/phy/mod_difest.F index 75db2551..6250a5ed 100644 --- a/phy/mod_difest.F +++ b/phy/mod_difest.F @@ -32,17 +32,21 @@ module mod_difest use mod_state, only: u, v, dp, dpu, dpv, temp, saln, sigma, p, . pbu, pbv, ubflxs_p, vbflxs_p, kfpla use mod_diffusion, only: egc, eggam, eglsmn, egmndf, egmxdf, - . egidfq, rhiscf, ri0, bdmc1, bdmc2, tkepf, - . bdmtyp, eddf2d, edsprs, edanis, redi3d, - . rhsctp, bdmldp, edritp_opt, edritp_shear, + . egidfq, rhiscf, ri0, bdmc1, bdmc2, + . bdmldp, tkepf, bdmtyp, eddf2d, edsprs, + . edanis, redi3d, rhsctp, smobld, lngmtp, + . edritp_opt, edritp_shear, . edritp_large_scale, edwmth_opt, . edwmth_smooth, edwmth_step, . difint, difiso, difdia, difmxp, difwgt, . Kvisc_m, Kdiff_t, Kdiff_s, - . t_ns_nonloc, s_nb_nonloc + . t_ns_nonloc, s_nb_nonloc, + . mu_nonloc, mv_nonloc use mod_cmnfld, only: bfsqi, nnslpx, nnslpy, mlts - use mod_forcing, only: ustar, ustarb, ustar3, buoyfl, t_sw_nonloc - . , surflx, sswflx, salflx + use mod_forcing, only: wavsrc_opt, wavsrc_param, + . abswnd, lamult, lasl, + . ustar, ustarb, ustar3, + . buoyfl, t_sw_nonloc, surflx, sswflx, salflx use mod_tidaldissip, only: twedon use mod_niw, only: niwgf, niwbf, niwlf, idkedt, niw_ke_tendency use mod_seaice, only: ficem @@ -54,6 +58,7 @@ module mod_difest use CVMix_kpp, only : CVMix_kpp_compute_OBL_depth use CVMix_kpp, only : CVmix_kpp_compute_unresolved_shear use CVMix_kpp, only : CVMix_kpp_compute_kOBL_depth + use CVMix_kpp, only : cvmix_kpp_EFactor_model use CVMix_shear, only : CVMix_init_shear, CVMix_coeffs_shear use CVMix_background, only : CVMix_init_bkgnd, CVMix_coeffs_bkgnd use CVMix_convection, only : CVMix_init_conv, CVMix_coeffs_conv @@ -195,6 +200,9 @@ module mod_difest . kappa=.4,bfeps=1.e-16*A_mks2cgs,sleps=.1,zetas=-1., . cpsemin=-0.2*L_mks2cgs,urmsemin=0.05*L_mks2cgs, . as=-28.86,cs=98.96,minOBLdepth=1.0) +c + character(len = 16) :: + . langmuir_mixing_opt, langmuir_entrainment_opt c public :: OBLdepth, inivar_difest, init_difest, difest_isobml, . difest_lateral_hybrid, difest_vertical_hybrid, hOBL @@ -240,6 +248,34 @@ subroutine init_difest c --- ------------------------------------------------------------------ c integer :: i,j,l +c + select case (lngmtp) + case ('none') + if (mnproc.eq.1) then + write (lp,'(a38)') 'no Langmuir turbulence parameterization' + endif + langmuir_mixing_opt = 'NONE' + langmuir_entrainment_opt = 'NONE' + case ('vr12-ma') + if (mnproc.eq.1) then + write (lp,'(a38)') 'Langmuir param. type: vr12-ma ' + endif + langmuir_mixing_opt = 'LWF16' + langmuir_entrainment_opt = 'LWF16' + case ('lf17') + if (mnproc.eq.1) then + write (lp,'(a38)') 'Langmuir param. type: lf17 ' + endif + langmuir_mixing_opt = 'LWF16' + langmuir_entrainment_opt = 'LF17' + case default + if (mnproc.eq.1) then + write (lp,'(3a)') "Error: '", trim(lngmtp), + ."' is not a valid type of Langmuir turbulence parameterization" + endif + call xcstop('(init_difest)') + stop '(init_difest)' + end select c c -- ------- Background diapycnal mixing. c The Bryan-Lewis parameterization is based on the following: @@ -261,6 +297,7 @@ subroutine init_difest call CVMix_put(CVMix_glb_params,'Prandtl',1.0) call CVMix_put(CVMix_glb_params,'FreshWaterDensity',1000.0) call CVMix_put(CVMix_glb_params,'SaltWaterDensity',1025.0) + call CVMix_put(CVMix_glb_params,'Gravity',g*iL_mks2cgs) call cvmix_init_shear(mix_scheme='KPP', . KPP_nu_zero=nus0*A_cgs2mks, . KPP_Ri_zero=ri0, @@ -279,6 +316,8 @@ subroutine init_difest c . lenhanced_diff=.true., c . lnonzero_surf_nonlocal=.false. , c . lnoDGat1=.true. , +c . Langmuir_mixing_str=Langmuir_mixing_str, +c . Langmuir_entrainment_str=Langmuir_entrainment_str, c . CVMix_kpp_params_user=KPP_params ) c call CVMix_init_kpp(Ri_crit=0.3, c . minOBLdepth=minOBLdepth, @@ -293,6 +332,8 @@ subroutine init_difest c . lenhanced_diff=.true., c . lnonzero_surf_nonlocal=.false. , c . lnoDGat1=.false. , +c . Langmuir_mixing_str=Langmuir_mixing_str, +c . Langmuir_entrainment_str=Langmuir_entrainment_str, c . CVMix_kpp_params_user=KPP_params ) call CVMix_init_kpp(Ri_crit=0.3, . minOBLdepth=minOBLdepth, @@ -307,6 +348,8 @@ subroutine init_difest . lenhanced_diff=.true., . lnonzero_surf_nonlocal=.true. , . lnoDGat1=.true. , + . Langmuir_mixing_str=langmuir_mixing_opt, + . Langmuir_entrainment_str=langmuir_entrainment_opt, . CVMix_kpp_params_user=KPP_params ) c c$OMP PARALLEL DO PRIVATE(l,i) @@ -587,6 +630,9 @@ subroutine difest_common_hyb(m,n,mm,nn,k1m,k1n) enddo enddo enddo + do i=1,ii + mskv(i,j,1)=iv(i,j) + enddo do k=2,kk do i=1,ii dv2(i,j,k)=0. @@ -623,6 +669,9 @@ subroutine difest_common_hyb(m,n,mm,nn,k1m,k1n) enddo enddo enddo + do i=1,ii+1 + msku(i,j,1)=iu(i,j) + enddo do k=2,kk do i=1,ii+1 du2(i,k)=0. @@ -835,8 +884,6 @@ subroutine difest_vertical_hybrid(m,n,mm,nn,k1m,k1n) c --- ------------------------------------------------------------------ c integer m,n,mm,nn,k1m,k1n -c - integer i,j,k,l,kn c c --- ------------------------------------------------------------------ c --- update halos of various fields @@ -874,6 +921,8 @@ subroutine difest_vertical_hyb(m,n,mm,nn,k1m,k1n) real q c type(CVMix_tidal_params_type) :: CVMix_tidal_params + real, dimension(1-nbdy:idm+nbdy,1-nbdy:jdm+nbdy,kdm+1) :: z_int + real, dimension(1-nbdy:idm+nbdy,1-nbdy:jdm+nbdy,kdm) :: z_mid real, dimension(kdm+1) :: depth_int real, dimension(kdm+1) :: Kv_col, Kd_col ! background visc/diff real, dimension(kdm+1) :: Kv_shr, Kd_shr ! shear driven visc/diff @@ -905,6 +954,7 @@ subroutine difest_vertical_hyb(m,n,mm,nn,k1m,k1n) real :: SLdepth_0d, hTot real :: Simmons_coeff, zBottomMinusOffset real :: bl1, bl2, bl3, bl4 + real :: ws, ww, we, wn, wc integer ki, ksfc, ktmp, kOBL, kn1 c surf_layer_ext = 0.1 @@ -912,6 +962,25 @@ subroutine difest_vertical_hyb(m,n,mm,nn,k1m,k1n) bl2 = 1.05e-4 bl3 = 4.5e-3 bl4 = 2500.0 + +c --- Obtain interface and cell heights. + do j=0,jj+1 + do l=1,isp(j) + do i=max(0,ifp(j,l)),min(ii+1,ilp(j,l)) + z_int(i,j,1) = -p(i,j,1)/onem + hcorr = 0. + do k=1,kk + kn = k + nn + dh = dp(i,j,kn)/onem + dh = dh + hcorr ! Take away the accumulated error (could temporarily make dh<0) + hcorr = min(dh - 1e-10, 0.) ! If inflating then hcorr<0 + dh = max(dh, 1e-10) ! Limit increment dh>=min_thicknes + z_mid(i,j,k) = z_int(i,j,k) - 0.5 * dh + z_int(i,j,k+1) = z_int(i,j,k) - dh + enddo + enddo + enddo + enddo c c single column diffusivity do j=1,jj @@ -920,60 +989,23 @@ subroutine difest_vertical_hyb(m,n,mm,nn,k1m,k1n) c c -- ------- CVMix variables computed below c - surfBuoyFlux2 = 0.0 + surfBuoyFlux2(:) = 0.0 surfBuoyFlux = 0.0 -c Ws_1d = 0.0 - bvfbot = 0. - dps = 0. - depth_int = 0. - hcorr = 0. - Kv_col = 0. - Kd_col = 0. - vert_dep = 0. - Kv_tidal = 0. - Kd_tidal = 0. - Kv_conv = 0. - Kd_conv = 0. - Kv_shr = 0. - Kd_shr = 0. - iFaceHeight = 0. - cellHeight = 0. - bvfsq_i = 0. - rho_lwr(:)= drho0 - rho_zeros(:)= 0. - rho_1d = 0. - nonLocalTrans(:,:) = 0.0 - rig_i = 1.e8 !Initialize w/ large Richardson value - Kv_kpp = 0.0 - Kt_kpp = 0.0 - Ks_kpp = 0.0 - do k=1,kk+1 - Kv_kpp(k) = Kvisc_m(i,j,k)*A_cgs2mks - Kt_kpp(k) = Kdiff_t(i,j,k)*A_cgs2mks - Ks_kpp(k) = Kdiff_s(i,j,k)*A_cgs2mks - enddo - depth_int(1) = p(i,j,1)/onem - iFaceHeight(1) = -depth_int(1) + iFaceHeight(:) = 0. + cellHeight(:) = 0. + rho_1d(:) = 0. + rig_i(:) = 1.e8 !Initialize w/ large Richardson value + + iFaceHeight(1) = z_int(i,j,1) ! convert cm/s to m/s surfFricVel = ustar(i,j) * iL_mks2cgs ! convert cm2/s3 to m2/s3 - surfBuoyFlux = - buoyfl(i,j,1) * A_cgs2mks + surfBuoyFlux = (buoyfl(i,j,2) - buoyfl(i,j,1)) * A_cgs2mks do k=1,kk kn = k + nn kn1 = max(nn+1,kn-1) - ! Old method to compute interface location, thicknesses -c depth_int(k+1) = p(i,j,k+1)/onem -c iFaceHeight(k+1) = -depth_int(k+1) -c cellHeight(k) = 0.5*(iFaceHeight(k+1) + -c . iFaceHeight(k)) - ! New method to compute interface location, thicknesses - dh = dp(i,j,kn)/onem - dh = dh + hcorr ! Take away the accumulated error (could temporarily make dh<0) - hcorr = min(dh - 1e-10, 0.) ! If inflating then hcorr<0 - dh = max(dh, 1e-10) ! Limit increment dh>=min_thicknes - cellHeight(k) = iFaceHeight(k) - 0.5 * dh - iFaceHeight(k+1) = iFaceHeight(k) - dh - depth_int(k+1) = -iFaceHeight(k+1) + cellHeight(k) = z_mid(i,j,k) + iFaceHeight(k+1) = z_int(i,j,k+1) ! compute rho_1d at the interfaces rho_1d(k)=rho(p(i,j,k),temp(i,j,kn),saln(i,j,kn)) @@ -1024,6 +1056,161 @@ subroutine difest_vertical_hyb(m,n,mm,nn,k1m,k1n) Vk = vp(i,j,k) - surfV deltaU2(k) = (Uk**2 + Vk**2) + ! XXX: Temporary de-scaling of N2_int(i,:) into a + ! temporary variable + bvf_i(k) = sqrt( max( bfsqi(i,j,k), 0.) ) + +c --- ------- Local gradient Richardson number + rig_i(k)=rig(i,j,k) + + surfBuoyFlux2(k) = ( buoyfl(i,j,k+1) + . - buoyfl(i,j,1 )) * A_cgs2mks +c + enddo ! k + ! convert cm2/s2 to m2/s2 + deltaU2 = deltaU2*A_cgs2mks + + ! bottom values for the Ri and N + rig_i(kk+1) = rig_i(kk) + bvf_i(kk+1) = sqrt( max( bfsqi(i,j,kk+1), 0.) ) + +c --- ------ turbulent velocity scales w_s and w_m computed at the cell +c --- ------ centers. + call CVMix_kpp_compute_turbulent_scales( + . surf_layer_ext, ! (in) Normalized surface layer Cdepth; sigma = CS%surf_layer_ext + . -cellHeight(:), ! (in) Assume here that OBL depth [m] = -cellHeight(k) + . surfBuoyFlux2(:), ! (in) Buoyancy flux at surface [m2 s-3] + . surfFricVel, ! (in) Turbulent friction velocity at surface [m s-1] + . w_s=Ws_1d(:), ! (out) Turbulent velocity scale profile [m s-1] + . CVMix_kpp_params_user=KPP_params) + + if (wavsrc_opt == wavsrc_param) then + lamult(i,j) = cvmix_kpp_EFactor_model( + . abswnd(i,j), + . surfFricVel, + . OBLdepth(i,j), + . CVMix_glb_params) + lamult(i,j) = lamult(i,j)*(1. - ficem(i,j)) + ficem(i,j) + endif + + ! Compute unresolved shear for CVMix + VT2(:) = CVmix_kpp_compute_unresolved_shear( + . zt_cntr=cellHeight(:),! Depth ofcell center [m] + . ws_cntr=Ws_1d(:), ! Turbulent velocity scale profile, at centers [m s-1] + . N_iface=bvf_i(:), ! Buoyancy frequency at the interface [s-1] + . EFactor=lamult(i,j), ! Langmuir enhancement factor [] + . LaSL=lasl(i,j), ! Surface layer averaged Langmuir number [] + . bfsfc=surfBuoyFlux, ! Surface buoyancy flux [m2 s-3] + . ustar=surfFricVel, ! Friction velocity [] + . CVMix_kpp_params_user=KPP_params) + + ! Calculate Bulk Richardson number from eq (21) of LMD94 + BulkRi_1d(:) = CVmix_kpp_compute_bulk_Richardson( + . zt_cntr = cellHeight(:), ! Depth of cell center [m] + . delta_buoy_cntr=g*alpha0*deltaRho(:)*iL_mks2cgs, ! Bulk buoyancy difference, Br-B(z) [m s-2] + . delta_Vsqr_cntr=deltaU2(:), ! Square of resolved velocity difference [m2 s-2] + . Vt_sqr_cntr=VT2(:), ! Unresolved shear [m2 s-2] + . ws_cntr=Ws_1d(:), ! Turbulent velocity scale profile [m s-1] + . N_iface=bvf_i(:), ! Buoyancy frequency at the interface [s-1] + . CVMix_kpp_params_user=KPP_params ) ! KPP parameters + + ! Compute OBL depth for KPP + call CVMix_kpp_compute_OBL_depth( + . BulkRi_1d(:), ! (in) Bulk Richardson number + . iFaceHeight(:), ! (in) Height of interfaces [m] + . OBLdepth(i,j), ! (out) OBL depth [m] + . hOBL(i,j), ! (out) level (+fraction) of OBL extent + . zt_cntr = cellHeight(:),! Depth of cell center [m] + . surf_fric=surfFricVel, ! (in) Turbulent friction velocity at surface [m s-1] + . surf_buoy=surfBuoyFlux, ! (in) Buoyancy flux at surface [m2 s-3] + . Coriolis=coriop(i,j), ! (in) Coriolis parameter [s-1] + . CVMix_kpp_params_user=KPP_params ) ! KPP parameters + + ! Avoid KPP reaching bottom + zBottomMinusOffset = iFaceHeight(kk+1) + . + min(1.0,-0.1*iFaceHeight(kk+1)) + OBLdepth(i,j) = min(OBLdepth(i,j), -zBottomMinusOffset) + ! no shallower than top layer + OBLdepth(i,j) = max(OBLdepth(i,j), -iFaceHeight(2)) + ! no deeper than bottom + OBLdepth(i,j) = min(OBLdepth(i,j), -iFaceHeight(kk+1)) + + enddo + enddo + enddo +c + if (smobld) then +c +c --- -- Smooth OBLdepth + call xctilr(OBLdepth, 1,1, 2,2, halo_ps) + util1(:,:) = OBLdepth(:,:) + do j=0,jj+1 + do l=1,isp(j) + do i=max(0,ifp(j,l)),min(ii+1,ilp(j,l)) + ws = .125*ip(i ,j-1) + ww = .125*ip(i-1,j ) + we = .125*ip(i+1,j ) + wn = .125*ip(i ,j+1) + wc = 1. - (ws + ww + we + wn) + OBLdepth(i,j) = ws*util1(i ,j-1) + . + ww*util1(i-1,j ) + . + wc*util1(i ,j ) + . + we*util1(i+1,j ) + . + wn*util1(i ,j+1) + OBLdepth(i,j) = min(OBLdepth(i,j), -z_int(i,j,kk+1)) + enddo + enddo + enddo + else + call xctilr(OBLdepth, 1,1, 1,1, halo_ps) + endif +c + do j=1,jj + do l=1,isp(j) + do i=max(1,ifp(j,l)),min(ii,ilp(j,l)) +c +c -- ------- CVMix variables computed below +c + surfBuoyFlux = 0.0 + bvfbot = 0. + dps = 0. + depth_int(:) = 0. + Kv_col(:) = 0. + Kd_col(:) = 0. + vert_dep(:) = 0. + Kv_tidal(:) = 0. + Kd_tidal(:) = 0. + Kv_conv(:) = 0. + Kd_conv(:) = 0. + Kv_shr(:) = 0. + Kd_shr(:) = 0. + iFaceHeight(:) = 0. + cellHeight(:) = 0. + bvfsq_i(:) = 0. + rho_lwr(:)= drho0 + rho_zeros(:)= 0. + nonLocalTrans(:,:) = 0.0 + rig_i(:) = 1.e8 !Initialize w/ large Richardson value + Kv_kpp(:) = 0.0 + Kt_kpp(:) = 0.0 + Ks_kpp(:) = 0.0 + do k=1,kk+1 + Kv_kpp(k) = Kvisc_m(i,j,k)*A_cgs2mks + Kt_kpp(k) = Kdiff_t(i,j,k)*A_cgs2mks + Ks_kpp(k) = Kdiff_s(i,j,k)*A_cgs2mks + enddo + iFaceHeight(1) = z_int(i,j,1) + ! convert cm/s to m/s + depth_int(1) = -iFaceHeight(1) + surfFricVel = ustar(i,j) * iL_mks2cgs + ! convert cm2/s3 to m2/s3 + + do k=1,kk + kn=k+nn + cellHeight(k) = z_mid(i,j,k) + iFaceHeight(k+1) = z_int(i,j,k+1) + depth_int(k+1) = -iFaceHeight(k+1) + ! XXX: Temporary de-scaling of N2_int(i,:) into a ! temporary variable bvfsq_i(k) = bfsqi(i,j,k) @@ -1039,18 +1226,17 @@ subroutine difest_vertical_hyb(m,n,mm,nn,k1m,k1n) c --- ------- Local gradient Richardson number rig_i(k)=rig(i,j,k) - surfBuoyFlux2(k) = ( buoyfl(i,j,k+1) - . - buoyfl(i,j,1 )) * A_cgs2mks -c enddo ! k + if(dps.gt.0.) bvfbot=bvfbot/dps - ! convert cm2/s2 to m2/s2 - deltaU2 = deltaU2*A_cgs2mks - ! bottom values for the Ri, N2, and N + ! bottom values for the Ri and N2 rig_i(kk+1) = rig_i(kk) bvfsq_i(kk+1) = bfsqi(i,j,kk+1) - bvf_i(kk+1) = sqrt( max( bvfsq_i(kk+1), 0.) ) + + ! gets index of the level and interface above hbl + hOBL(i,j) = CVMix_kpp_compute_kOBL_depth(iFaceHeight(:), + . cellHeight(:),OBLdepth(i,j)) c -- ------- Background diapycnal mixing. if (bdmtyp.eq.1) then @@ -1058,8 +1244,8 @@ subroutine difest_vertical_hyb(m,n,mm,nn,k1m,k1n) call CVMix_init_bkgnd(max_nlev=kk, zw = depth_int(:), . bl1 = bl1, bl2 = bl2, bl3 = bl3, bl4 = bl4, . prandtl = CVMix_glb_params%Prandtl) - call CVMix_coeffs_bkgnd(Mdiff_out=Kv_col, - . Tdiff_out=Kd_col, nlev=kk, max_nlev=kk) + call CVMix_coeffs_bkgnd(Mdiff_out=Kv_col(:), + . Tdiff_out=Kd_col(:), nlev=kk, max_nlev=kk) elseif (bdmtyp.eq.2) then c --- --------- Type 2: Background diffusivity is a constant ! convert cm2/s2 to m2/s2 @@ -1092,21 +1278,22 @@ subroutine difest_vertical_hyb(m,n,mm,nn,k1m,k1n) call CVMix_compute_Simmons_invariant(nlev=kk, . energy_flux=twedon(i,j)*bvfbot*iM_mks2cgs, . rho=CVMix_glb_params%FreshWaterDensity, - . SimmonsCoeff = Simmons_coeff, VertDep = vert_dep, - . zw = iFaceHeight, zt = cellHeight, + . SimmonsCoeff = Simmons_coeff, + . VertDep = vert_dep(:), + . zw = iFaceHeight(:), zt = cellHeight(:), . CVmix_tidal_params_user=CVMix_tidal_params) - call CVMix_coeffs_tidal(Mdiff_out=Kv_tidal, - . Tdiff_out=Kd_tidal, Nsqr = bvfsq_i, + call CVMix_coeffs_tidal(Mdiff_out=Kv_tidal(:), + . Tdiff_out=Kd_tidal(:), Nsqr = bvfsq_i(:), . OceanDepth = -iFaceHeight(kk+1), . SimmonsCoeff = Simmons_coeff, - . vert_dep = vert_dep, + . vert_dep = vert_dep(:), . nlev=kk, max_nlev=kk, . cvmix_params = CVMix_glb_params, . CVmix_tidal_params_user=CVMix_tidal_params) else - Kd_tidal=0. + Kd_tidal(:)=0. endif ! Call to CVMix wrapper for computing interior mixing coefficients. @@ -1116,67 +1303,15 @@ subroutine difest_vertical_hyb(m,n,mm,nn,k1m,k1n) . nlev=kk, . max_nlev=kk) - -c --- ------ turbulent velocity scales w_s and w_m computed at the cell -c --- ------ centers. - call CVMix_kpp_compute_turbulent_scales( - . surf_layer_ext, ! (in) Normalized surface layer Cdepth; sigma = CS%surf_layer_ext - . -cellHeight, ! (in) Assume here that OBL depth [m] = -cellHeight(k) - . surfBuoyFlux2, ! (in) Buoyancy flux at surface [m2 s-3] - . surfFricVel, ! (in) Turbulent friction velocity at surface [m s-1] - . w_s=Ws_1d, ! (out) Turbulent velocity scale profile [m s-1] - . CVMix_kpp_params_user=KPP_params) - - ! Compute unresolved shear for CVMix - VT2(:) = CVmix_kpp_compute_unresolved_shear( - . zt_cntr=cellHeight, ! Depth ofcell center [m] - . ws_cntr=Ws_1d, ! Turbulent velocity scale profile, at centers [m s-1] - . N_iface=bvf_i, ! Buoyancy frequency at the interface [s-1] - . CVMix_kpp_params_user=KPP_params) - - ! Calculate Bulk Richardson number from eq (21) of LMD94 - BulkRi_1d = CVmix_kpp_compute_bulk_Richardson( - . zt_cntr = cellHeight, ! Depth of cell center [m] - . delta_buoy_cntr=g*alpha0*deltaRho*iL_mks2cgs, ! Bulk buoyancy difference, Br-B(z) [m s-2] - . delta_Vsqr_cntr=deltaU2, ! Square of resolved velocity difference [m2 s-2] - . Vt_sqr_cntr=VT2(:), ! Unresolved shear [m2 s-2] - . ws_cntr=Ws_1d, ! Turbulent velocity scale profile [m s-1] - . N_iface=bvf_i, ! Buoyancy frequency at the interface [s-1] - . CVMix_kpp_params_user=KPP_params ) ! KPP parameters - - ! Compute OBL depth for KPP - call CVMix_kpp_compute_OBL_depth( - . BulkRi_1d, ! (in) Bulk Richardson number - . iFaceHeight, ! (in) Height of interfaces [m] - . OBLdepth(i,j), ! (out) OBL depth [m] - . hOBL(i,j), ! (out) level (+fraction) of OBL extent - . zt_cntr = cellHeight, ! Depth of cell center [m] - . surf_fric=surfFricVel, ! (in) Turbulent friction velocity at surface [m s-1] - . surf_buoy=surfBuoyFlux, ! (in) Buoyancy flux at surface [m2 s-3] - . Coriolis=coriop(i,j), ! (in) Coriolis parameter [s-1] - . CVMix_kpp_params_user=KPP_params ) ! KPP parameters - - ! Avoid KPP reaching bottom - zBottomMinusOffset = iFaceHeight(kk+1) - . + min(1.0,-0.1*iFaceHeight(kk+1)) - OBLdepth(i,j) = min(OBLdepth(i,j), -zBottomMinusOffset) - ! no shallower than top layer - OBLdepth(i,j) = max(OBLdepth(i,j), -iFaceHeight(2)) - ! no deeper than bottom - OBLdepth(i,j) = min(OBLdepth(i,j), -iFaceHeight(kk+1)) - ! gets index of the level and interface above hbl - hOBL(i,j) = CVMix_kpp_compute_kOBL_depth(iFaceHeight, - . cellHeight,OBLdepth(i,j)) - ! gets index of the level and interface above hbl kOBL = int(hOBL(i,j)) ! index of interface above OBL depth c --- ------ Diapycnal mixing when local stability is weak c --- ------ convection routine based on N2 not rho c --- ------ make sure it is in metrics if stability depends on rho - call CVMix_coeffs_conv(Mdiff_out=Kv_conv, - . Tdiff_out=Kd_conv, Nsqr = bvfsq_i, - . dens=rho_zeros,dens_lwr=rho_lwr, + call CVMix_coeffs_conv(Mdiff_out=Kv_conv(:), + . Tdiff_out=Kd_conv(:), Nsqr = bvfsq_i(:), + . dens=rho_zeros(:),dens_lwr=rho_lwr(:), . nlev=kk, max_nlev=kk, . OBL_ind=kOBL) ! Do not apply mixing due to convection within the boundary layer @@ -1198,8 +1333,8 @@ subroutine difest_vertical_hyb(m,n,mm,nn,k1m,k1n) call CVMix_coeffs_kpp(Kv_kpp(:), ! (inout) Total viscosity [m2 s-1] . Kt_kpp(:), ! (inout) Total temp diffusivity [m2 s-1] . Ks_kpp(:), ! (inout) Total salt diffusivity [m2 s-1] - . iFaceHeight, ! (in) Height of interfaces [m] - . cellHeight, ! (in) Height of level centers [m] + . iFaceHeight(:), ! (in) Height of interfaces [m] + . cellHeight(:), ! (in) Height of level centers [m] . Kv_kpp(:), ! (in) Original viscosity [m2 s-1] . Kt_kpp(:), ! (in) Original temp diffusivity [m2 s-1] . Ks_kpp(:), ! (in) Original salt diffusivity [m2 s-1] @@ -1211,6 +1346,7 @@ subroutine difest_vertical_hyb(m,n,mm,nn,k1m,k1n) . surfBuoyFlux, ! (in) Buoyancy flux at surface [m2 s-3] . kk, ! (in) Number of levels to compute coeffs for . kk, ! (in) Number of levels in array shape + . lamult(i,j), ! (in) Langmuir enhancement factor [] . CVMix_kpp_params_user=KPP_params ) ! KPP parameters c ---- ccc ------- @@ -1236,6 +1372,37 @@ subroutine difest_vertical_hyb(m,n,mm,nn,k1m,k1n) c end of single column c enddo ! j-index +c + do j = 1, jj + do l = 1, isu(j) + do i = max(1, ifu(j,l)), min(ii, ilu(j,l)) + dps = 0. + do k = 2, kk+1 + dps = dps + dpu(i,j,k-1+mm) + q = 2.*dps/((OBLdepth(i-1,j) + OBLdepth(i,j))*onem) + if (q.lt.1.) then + mu_nonloc(i,j,k) = (1. - q)**2 + else + mu_nonloc(i,j,k) = 0. + endif + enddo + enddo + enddo + do l = 1, isv(j) + do i = max(1, ifv(j,l)), min(ii, ilv(j,l)) + dps = 0. + do k = 2, kk+1 + dps = dps + dpv(i,j,k-1+mm) + q = 2.*dps/((OBLdepth(i,j-1) + OBLdepth(i,j))*onem) + if (q.lt.1.) then + mv_nonloc(i,j,k) = (1. - q)**2 + else + mv_nonloc(i,j,k) = 0. + endif + enddo + enddo + enddo + enddo c if (csdiag) then if (mnproc.eq.1) then @@ -1246,6 +1413,8 @@ subroutine difest_vertical_hyb(m,n,mm,nn,k1m,k1n) call chksummsk(Kdiff_s,ip,kk+1,'Kdiff_s') call chksummsk(t_ns_nonloc,ip,kk+1,'t_ns_nonloc') call chksummsk(s_nb_nonloc,ip,kk+1,'s_nb_nonloc') + call chksummsk(mu_nonloc,iu,kk+1,'mu_nonloc') + call chksummsk(mv_nonloc,iv,kk+1,'mv_nonloc') endif c end subroutine difest_vertical_hyb diff --git a/phy/mod_diffusion.F90 b/phy/mod_diffusion.F90 index 0e16a2de..607ec3ab 100644 --- a/phy/mod_diffusion.F90 +++ b/phy/mod_diffusion.F90 @@ -26,6 +26,7 @@ module mod_diffusion use mod_config, only: inst_suffix use mod_constants, only: spval, epsilk use mod_xc + use mod_forcing, only: wavsrc_opt, wavsrc_none, wavsrc_param, wavsrc_extern implicit none @@ -68,11 +69,15 @@ module mod_diffusion ! structure based in the 3D structure of anisotropy. rhsctp, & ! If true, use the minimum of planetary and topographic beta ! to define the Rhines scale. - bdmldp ! If true, make the background mixing latitude dependent + bdmldp, & ! If true, make the background mixing latitude dependent ! according to Gregg et al. (2003). + smobld ! If true, apply lateral smoothing of CVMix estimated boundary + ! layer depth. character(len = 256) :: & tbfile ! Name of file containing topographic beta parameter. character(len = 80) :: & + lngmtp, & ! Type of Langmuir turbulence parameterization. Valid types: + ! 'none', 'vr12-ma', 'lf17' eitmth, & ! Eddy-induced transport parameterization method. Valid ! methods: 'intdif', 'gm'. edritp, & ! Type of Richardson number used in eddy diffusivity @@ -118,9 +123,13 @@ module mod_diffusion Kdiff_s, & ! salinity eddy diffusivity [cm2 s-1]. t_ns_nonloc, & ! Non-local transport term that is the fraction of ! non-shortwave flux passing a layer interface []. - s_nb_nonloc ! Non-local transport term that is the fraction of + s_nb_nonloc, & ! Non-local transport term that is the fraction of ! non-brine material tracer flux passing a layer interface ! []. + mu_nonloc, & ! Non-local transport term that is the fraction of + ! u-component momentum flux passing a layer interface []. + mv_nonloc ! Non-local transport term that is the fraction of + ! u-component momentum flux passing a layer interface []. real(r8), dimension(1 - nbdy:idm + nbdy,1 - nbdy:jdm + nbdy) :: & difmxp, & ! Maximum lateral diffusivity at p-points [cm2 s-1]. @@ -162,8 +171,8 @@ module mod_diffusion ! [g2 cm kg-1 s-2]. public :: egc, eggam, eglsmn, egmndf, egmxdf, egidfq, & - rhiscf, ri0, bdmc1, bdmc2, tkepf, bdmtyp, & - eddf2d, edsprs, edanis, redi3d, rhsctp, bdmldp, tbfile, & + rhiscf, ri0, bdmc1, bdmc2, bdmldp, tkepf, bdmtyp, & + eddf2d, edsprs, edanis, redi3d, rhsctp, tbfile, smobld, lngmtp, & eitmth_opt, eitmth_intdif, eitmth_gm, edritp_opt, edritp_shear, & edritp_large_scale, edwmth_opt, edwmth_smooth, edwmth_step, & ltedtp_opt, ltedtp_layer, ltedtp_neutral, & @@ -172,7 +181,8 @@ module mod_diffusion utflsm, vtflsm, utflld, vtflld, usfltd, vsfltd, & usflsm, vsflsm, usflld, vsflld, & Kvisc_m, Kdiff_t, Kdiff_s, & - t_ns_nonloc, s_nb_nonloc, readnml_diffusion, inivar_diffusion + t_ns_nonloc, s_nb_nonloc, mu_nonloc, mv_nonloc, & + readnml_diffusion, inivar_diffusion contains @@ -187,8 +197,8 @@ subroutine readnml_diffusion namelist /diffusion/ & egc, eggam, eglsmn, egmndf, egmxdf, egidfq, rhiscf, ri0, & - bdmc1, bdmc2, tkepf, bdmtyp, eddf2d, edsprs, edanis, redi3d, rhsctp, & - bdmldp, tbfile, eitmth, edritp, edwmth, ltedtp + bdmc1, bdmc2, bdmldp, tkepf, bdmtyp, eddf2d, edsprs, edanis, redi3d, & + rhsctp, tbfile, smobld, lngmtp, eitmth, edritp, edwmth, ltedtp ! Read variables in the namelist group 'diffusion'. if (mnproc == 1) then @@ -227,6 +237,7 @@ subroutine readnml_diffusion call xcbcst(ri0) call xcbcst(bdmc1) call xcbcst(bdmc2) + call xcbcst(bdmldp) call xcbcst(tkepf) call xcbcst(bdmtyp) call xcbcst(eddf2d) @@ -234,8 +245,9 @@ subroutine readnml_diffusion call xcbcst(edanis) call xcbcst(redi3d) call xcbcst(rhsctp) - call xcbcst(bdmldp) call xcbcst(tbfile) + call xcbcst(smobld) + call xcbcst(lngmtp) call xcbcst(eitmth) call xcbcst(edritp) call xcbcst(edwmth) @@ -253,6 +265,7 @@ subroutine readnml_diffusion write (lp,*) ' ri0 = ', ri0 write (lp,*) ' bdmc1 = ', bdmc1 write (lp,*) ' bdmc2 = ', bdmc2 + write (lp,*) ' bdmldp = ', bdmldp write (lp,*) ' tkepf = ', tkepf write (lp,*) ' bdmtyp = ', bdmtyp write (lp,*) ' eddf2d = ', eddf2d @@ -260,8 +273,9 @@ subroutine readnml_diffusion write (lp,*) ' edanis = ', edanis write (lp,*) ' redi3d = ', redi3d write (lp,*) ' rhsctp = ', rhsctp - write (lp,*) ' bdmldp = ', bdmldp + write (lp,*) ' smobld = ', smobld write (lp,*) ' tbfile = ', trim(tbfile) + write (lp,*) ' lngmtp = ', trim(lngmtp) write (lp,*) ' eitmth = ', trim(eitmth) write (lp,*) ' edritp = ', trim(edritp) write (lp,*) ' edwmth = ', trim(edwmth) @@ -321,6 +335,34 @@ subroutine readnml_diffusion call xcstop('(readnml_diffusion)') stop '(readnml_diffusion)' end select + select case (trim(lngmtp)) + case ('none') + case ('vr12-ma') + if (wavsrc_opt == wavsrc_none) then + if (mnproc == 1) & + write (lp,'(3a)') & + ' readnml_diffusion: lngmtp = ', trim(lngmtp), & + ' requires wavsrc = param or wavsrc = extern!' + call xcstop('(readnml_diffusion)') + stop '(readnml_diffusion)' + endif + case ('lf17') + if (wavsrc_opt /= wavsrc_extern) then + if (mnproc == 1) & + write (lp,'(3a)') & + ' readnml_diffusion: lngmtp = ', trim(lngmtp), & + ' requires wavsrc = extern!' + call xcstop('(readnml_diffusion)') + stop '(readnml_diffusion)' + endif + case default + if (mnproc == 1) & + write (lp,'(3a)') & + ' readnml_diffusion: lngmtp = ', trim(lngmtp), & + ' is unsupported!' + call xcstop('(readnml_diffusion)') + stop '(readnml_diffusion)' + end select end subroutine readnml_diffusion @@ -372,6 +414,8 @@ subroutine inivar_diffusion Kdiff_s(i, j, k) = epsilk t_ns_nonloc(i, j, k) = spval s_nb_nonloc(i, j, k) = spval + mu_nonloc(i, j, k) = spval + mv_nonloc(i, j, k) = spval enddo enddo enddo @@ -450,6 +494,16 @@ subroutine inivar_diffusion s_nb_nonloc(i, j, 1) = 1._r8 enddo enddo + do l = 1, isu(j) + do i = max(1, ifu(j, l)), min(ii, ilu(j, l)) + mu_nonloc(i, j, 1) = 1._r8 + enddo + enddo + do l = 1, isv(j) + do i = max(1, ifv(j, l)), min(ii, ilv(j, l)) + mv_nonloc(i, j, 1) = 1._r8 + enddo + enddo do k = 2, kk + 1 do l = 1, isp(j) do i = max(1, ifp(j, l)), min(ii, ilp(j, l)) @@ -457,6 +511,16 @@ subroutine inivar_diffusion s_nb_nonloc(i, j, k) = 0._r8 enddo enddo + do l = 1, isu(j) + do i = max(1, ifu(j, l)), min(ii, ilu(j, l)) + mu_nonloc(i, j, k) = 0._r8 + enddo + enddo + do l = 1, isv(j) + do i = max(1, ifv(j, l)), min(ii, ilv(j, l)) + mv_nonloc(i, j, k) = 0._r8 + enddo + enddo enddo enddo !$omp end parallel do diff --git a/phy/mod_forcing.F90 b/phy/mod_forcing.F90 index 515009fc..e13064a5 100644 --- a/phy/mod_forcing.F90 +++ b/phy/mod_forcing.F90 @@ -55,8 +55,20 @@ module mod_forcing srxlim ! Maximum absolute value of SSS difference in relaxation ! [g kg-1]. character(len = 256) :: & - scfile ! Name of file containing monthly SSS climatology. + scfile, & ! Name of file containing monthly SSS climatology. + wavsrc ! Source of wave fields. Valid source: 'none', 'param', + ! 'extern'. + ! Options derived from string options. + integer :: & + wavsrc_opt + + ! Parameters: + integer, parameter :: & + ! Wave source options: + wavsrc_none = 0, & ! No wave fields. + wavsrc_param = 1, & ! Parameterized wave fields. + wavsrc_extern = 2 ! Receive external wave fields. ! Constants used in forcing computations. real(r8) :: & @@ -116,7 +128,6 @@ module mod_forcing flxbrf, & ! sea-air bromoform flux atmbrf ! atmospheric bromoform concentration - real(r8), dimension(1 - nbdy:idm + nbdy,1 - nbdy:jdm + nbdy) :: & surflx, & ! Surface thermal energy flux [W cm-2]. surrlx, & ! Surface relaxation thermal energy flux [W cm-2]. @@ -145,6 +156,7 @@ module mod_forcing public :: aptflx, apsflx, ditflx, disflx, srxbal, sprfac, & trxday, srxday, trxdpt, srxdpt, trxlim, srxlim, scfile, & + wavsrc, wavsrc_opt, wavsrc_none, wavsrc_param, wavsrc_extern, & sref, tflxap, sflxap, tflxdi, sflxdi, nflxdi, & sstclm, ricclm, sssclm, prfac, eiacc, pracc, & swa, nsf, hmltfz, lip, sop, eva, rnf, rfi, fmltfz, sfl, ztx, mty, & diff --git a/phy/mod_hor3map.F90 b/phy/mod_hor3map.F90 index fd28b6e9..093c6e6d 100644 --- a/phy/mod_hor3map.F90 +++ b/phy/mod_hor3map.F90 @@ -31,8 +31,8 @@ module mod_hor3map ! desired grid cell edge data values. ! ------------------------------------------------------------------------------ -#undef DEBUG #define DEBUG +#undef DEBUG use, intrinsic :: iso_fortran_env, only: real64 #ifdef DEBUG diff --git a/phy/mod_momtum.F b/phy/mod_momtum.F index 9eea25bf..0cd29045 100644 --- a/phy/mod_momtum.F +++ b/phy/mod_momtum.F @@ -30,6 +30,7 @@ module mod_momtum . onem, onemm use mod_time, only: delt1, dlt use mod_xc + use mod_vcoord, only: vcoord_type_tag, isopyc_bulkml use mod_grid, only: scqx, scqy, scpx, scpy, scux, scuy, . scvx, scvy, scp2, scu2, scv2, scq2i, scp2i, . scuxi, scvyi, corioq @@ -38,7 +39,8 @@ module mod_momtum . pbu_p, pbv_p, ubcors_p, vbcors_p use mod_pgforc, only: wpgf, pgfx, pgfy, pgfxo, pgfyo use mod_tmsmt, only: wuv1, wuv2, dpuold, dpvold - use mod_diffusion, only: difmxp, difmxq, difwgt + use mod_diffusion, only: difmxp, difmxq, difwgt, + . mu_nonloc, mv_nonloc use mod_forcing, only: taux, tauy, ustarb use mod_utility, only: utotm, vtotm, utotn, vtotn, uflux, vflux, . uflux2, vflux2, uflux3, vflux3, @@ -925,24 +927,34 @@ subroutine momtum(m,n,mm,nn,k1m,k1n) enddo enddo enddo -c - if (k.eq.1) then c c --- --- store wind forcing in -stress- c - do j=1,jj - do l=1,isu(j) - do i=max(1,ifu(j,l)),min(ii,ilu(j,l)) - stress(i,j)=-2.*taux(i,j)*g*scux(i,j) - . /(p(i,j,2)+p(i-1,j,2)) + if (vcoord_type_tag.eq.isopyc_bulkml) then + if (k.eq.1) then + do j=1,jj + do l=1,isu(j) + do i=max(1,ifu(j,l)),min(ii,ilu(j,l)) + stress(i,j)=-2.*taux(i,j)*g*scux(i,j) + . /(p(i,j,2)+p(i-1,j,2)) + enddo + enddo enddo + else + do j=1,jj + do l=1,isu(j) + do i=max(1,ifu(j,l)),min(ii,ilu(j,l)) + stress(i,j)=0. + enddo + enddo enddo - enddo + endif else do j=1,jj do l=1,isu(j) do i=max(1,ifu(j,l)),min(ii,ilu(j,l)) - stress(i,j)=0. + stress(i,j)=-(mu_nonloc(i,j,k)-mu_nonloc(i,j,k+1)) + . *taux(i,j)*g*scux(i,j)/max(onemm,dpu(i,j,km)) enddo enddo enddo @@ -1078,24 +1090,34 @@ subroutine momtum(m,n,mm,nn,k1m,k1n) enddo enddo enddo -c - if (k.eq.1) then c c --- - store wind forcing in -stress- c - do j=1,jj - do l=1,isv(j) - do i=max(1,ifv(j,l)),min(ii,ilv(j,l)) - stress(i,j)=-2.*tauy(i,j)*g*scvy(i,j) - . /(p(i,j,2)+p(i,j-1,2)) + if (vcoord_type_tag.eq.isopyc_bulkml) then + if (k.eq.1) then + do j=1,jj + do l=1,isv(j) + do i=max(1,ifv(j,l)),min(ii,ilv(j,l)) + stress(i,j)=-2.*tauy(i,j)*g*scvy(i,j) + . /(p(i,j,2)+p(i,j-1,2)) + enddo + enddo enddo + else + do j=1,jj + do l=1,isv(j) + do i=max(1,ifv(j,l)),min(ii,ilv(j,l)) + stress(i,j)=0. + enddo + enddo enddo - enddo + endif else do j=1,jj do l=1,isv(j) do i=max(1,ifv(j,l)),min(ii,ilv(j,l)) - stress(i,j)=0. + stress(i,j)=-(mv_nonloc(i,j,k)-mv_nonloc(i,j,k+1)) + . *tauy(i,j)*g*scvy(i,j)/max(onemm,dpv(i,j,km)) enddo enddo enddo diff --git a/phy/mod_ndiff.F90 b/phy/mod_ndiff.F90 index d31b0f34..8f304cb1 100644 --- a/phy/mod_ndiff.F90 +++ b/phy/mod_ndiff.F90 @@ -777,9 +777,23 @@ subroutine ndiff_flx(p_srcdi_m, t_srcdi_m, tpc_src_m, & advance_src_p = .true. else + open(nfu, file='ndiff.uf', form='unformatted') + write(nfu) i_m, j_m, i_p, j_p, kk, ntr_loc, p_ord + write(nfu) p_srcdi_m, t_srcdi_m, tpc_src_m, & + drhodt_srcdi_m, drhods_srcdi_m, & + p_dst_m, ksmx_m, kdmx_m, & + p_srcdi_p, t_srcdi_p, tpc_src_p, & + drhodt_srcdi_p, drhods_srcdi_p, & + p_dst_p, ksmx_p, kdmx_p + close(nfu) write(lp,*) 'Unexpected case_m == 2 and case_p == 2!' - call xchalt('(ndiff_flx)') - stop '(ndiff_flx)' + write(lp,*) 'case_m', case_m, 'case_p', case_p + write(lp,*) 'i_p', i0 + i_p, 'j_p', j0 + j_p + write(lp,*) 'is_m', is_m, 'ks_m', ks_m + write(lp,*) 'is_p', is_p, 'ks_p', ks_p + write(lp,*) 'kd_m', kd_m, 'kd_p', kd_p + advance_src_m = .true. + advance_src_p = .true. endif if (found_ni) then diff --git a/phy/rdlim.F b/phy/rdlim.F index 17927f3b..c7214100 100644 --- a/phy/rdlim.F +++ b/phy/rdlim.F @@ -1,5 +1,5 @@ ! ------------------------------------------------------------------------------ -! Copyright (C) 2008-2022 Mats Bentsen, Mehmet Ilicak, Ingo Bethke, +! Copyright (C) 2008-2023 Mats Bentsen, Mehmet Ilicak, Ingo Bethke, ! Ping-Gin Chiu, Aleksi Nummelin ! ! This file is part of BLOM. @@ -42,7 +42,10 @@ subroutine rdlim . mdc2lo, vsc2hi, vsc2lo, vsc4hi, vsc4lo, . cbar, cb, mommth use mod_barotp, only: cwbdts, cwbdls - use mod_forcing, only: aptflx, apsflx, ditflx, disflx, scfile, + use mod_forcing, only: aptflx, apsflx, ditflx, disflx, + . scfile, + . wavsrc, wavsrc_opt, wavsrc_none, + . wavsrc_param, wavsrc_extern, . trxday, srxday, trxdpt, srxdpt, trxlim, . srxlim, srxbal, sprfac use mod_swabs, only: swamth, jwtype, chlopt, ccfile @@ -75,7 +78,8 @@ subroutine rdlim . rm0,rm5,ce,tdfile,niwgf,niwbf,niwlf, . swamth,jwtype,chlopt,ccfile, . trxday,srxday,trxdpt,srxdpt,trxlim,srxlim, - . aptflx,apsflx,ditflx,disflx,srxbal,scfile,smtfrc,sprfac, + . aptflx,apsflx,ditflx,disflx,srxbal,scfile, + . wavsrc,smtfrc,sprfac, . atm_path, . itest,jtest, . cnsvdi, @@ -160,6 +164,7 @@ subroutine rdlim write (lp,*) 'DISFLX',DISFLX write (lp,*) 'SRXBAL',SRXBAL write (lp,*) 'SCFILE ',trim(SCFILE) + write (lp,*) 'WAVSRC ',trim(WAVSRC) write (lp,*) 'SMTFRC',SMTFRC write (lp,*) 'SPRFAC',SPRFAC write (lp,*) 'ATM_PATH ',trim(ATM_PATH) @@ -230,6 +235,7 @@ subroutine rdlim call xcbcst(disflx) call xcbcst(srxbal) call xcbcst(scfile) + call xcbcst(wavsrc) call xcbcst(smtfrc) call xcbcst(sprfac) call xcbcst(atm_path) @@ -242,6 +248,31 @@ subroutine rdlim call xcbcst(rstcmp) call xcbcst(iotype) c +c --- resolve options + select case (trim(wavsrc)) + case ('none') + wavsrc_opt = wavsrc_none + case ('param') + wavsrc_opt = wavsrc_param + case ('extern') + if (expcnf.ne.'cesm') then + if (mnproc == 1) + . write (lp,'(3a)') + . ' rdlim: wavsrc = ', trim(wavsrc), + . ' is only supported for expcnf = cesm!' + call xcstop('(rdlim)') + stop '(rdlim)' + endif + wavsrc_opt = wavsrc_extern + case default + if (mnproc == 1) + . write (lp,'(3a)') + . ' rdlim: wavsrc = ', trim(wavsrc), + . ' is unsupported!' + call xcstop('(rdlim)') + stop '(rdlim)' + end select +c c --- read vertical coordinate namelist variables call readnml_vcoord c @@ -310,6 +341,20 @@ subroutine rdlim if (srxday.eq.0.) then H2D_SALRLX(1:nphy)=0 endif + select case (wavsrc_opt) + case (wavsrc_none) + H2D_LAMULT(1:nphy)=0 + H2D_LASL(1:nphy)=0 + H2D_USTOKES(1:nphy)=0 + H2D_VSTOKES(1:nphy)=0 + case (wavsrc_param) + if (vcoord_type_tag /= cntiso_hybrid) then + H2D_LAMULT(1:nphy)=0 + endif + H2D_LASL(1:nphy)=0 + H2D_USTOKES(1:nphy)=0 + H2D_VSTOKES(1:nphy)=0 + end select c c --- - print diaphy namelist write (lp,*) @@ -333,6 +378,8 @@ subroutine rdlim write (lp,*) 'H2D_HSNW ',H2D_HSNW(1:nphy) write (lp,*) 'H2D_IAGE ',H2D_IAGE(1:nphy) write (lp,*) 'H2D_IDKEDT ',H2D_IDKEDT(1:nphy) + write (lp,*) 'H2D_LAMULT ',H2D_LAMULT(1:nphy) + write (lp,*) 'H2D_LASL ',H2D_LASL(1:nphy) write (lp,*) 'H2D_LIP ',H2D_LIP(1:nphy) write (lp,*) 'H2D_MAXMLD ',H2D_MAXMLD(1:nphy) write (lp,*) 'H2D_MLD ',H2D_MLD(1:nphy) @@ -377,8 +424,10 @@ subroutine rdlim write (lp,*) 'H2D_UICE ',H2D_UICE(1:nphy) write (lp,*) 'H2D_USTAR ',H2D_USTAR(1:nphy) write (lp,*) 'H2D_USTAR3 ',H2D_USTAR3(1:nphy) + write (lp,*) 'H2D_USTOKES ',H2D_USTOKES(1:nphy) write (lp,*) 'H2D_VB ',H2D_VB(1:nphy) write (lp,*) 'H2D_VICE ',H2D_VICE(1:nphy) + write (lp,*) 'H2D_VSTOKES ',H2D_VSTOKES(1:nphy) write (lp,*) 'H2D_ZTX ',H2D_ZTX(1:nphy) write (lp,*) 'LYR_BFSQ ',LYR_BFSQ(1:nphy) write (lp,*) 'LYR_DIFDIA ',LYR_DIFDIA(1:nphy) @@ -507,6 +556,8 @@ subroutine rdlim call xcbcst(H2D_HSNW) call xcbcst(H2D_IAGE) call xcbcst(H2D_IDKEDT) + call xcbcst(H2D_LAMULT) + call xcbcst(H2D_LASL) call xcbcst(H2D_LIP) call xcbcst(H2D_MAXMLD) call xcbcst(H2D_MLD) @@ -551,8 +602,10 @@ subroutine rdlim call xcbcst(H2D_UICE) call xcbcst(H2D_USTAR) call xcbcst(H2D_USTAR3) + call xcbcst(H2D_USTOKES) call xcbcst(H2D_VB) call xcbcst(H2D_VICE) + call xcbcst(H2D_VSTOKES) call xcbcst(H2D_ZTX) call xcbcst(LYR_BFSQ) call xcbcst(LYR_DIFDIA) diff --git a/phy/restart_rd.F b/phy/restart_rd.F index 83af8266..b8a3eeb9 100644 --- a/phy/restart_rd.F +++ b/phy/restart_rd.F @@ -50,7 +50,8 @@ subroutine restart_rd use mod_niw, only: uml, vml, umlres, vmlres use mod_difest, only: OBLdepth use mod_diffusion, only: difiso, Kvisc_m, Kdiff_t, Kdiff_s, - . t_ns_nonloc, s_nb_nonloc + . t_ns_nonloc, s_nb_nonloc, + . mu_nonloc, mv_nonloc use mod_cesm, only: frzpot, mltpot, swa_da, nsf_da, hmlt_da, . lip_da, sop_da, eva_da, rnf_da, rfi_da, . fmltfz_da, sfl_da, ztx_da, mty_da, ustarw_da, @@ -526,6 +527,8 @@ subroutine restart_rd call ncread('OBLdepth',OBLdepth,ip,1,0.) call ncread('t_ns_nonloc',t_ns_nonloc,ip,1,0.) call ncread('s_nb_nonloc',s_nb_nonloc,ip,1,0.) + call ncread('mu_nonloc',mu_nonloc,iu,1,0.) + call ncread('mv_nonloc',mv_nonloc,iv,1,0.) endif c if (sprfac) then @@ -842,6 +845,14 @@ subroutine restart_rd . phyh2d(1-nbdy,1-nbdy,ACC_MTKEPE(n)),ip,1,0.) if (ACC_MTKEKE(n).ne.0) call ncread('mtkeke_phy'//c2, . phyh2d(1-nbdy,1-nbdy,ACC_MTKEKE(n)),ip,1,0.) + if (ACC_LAMULT(n).ne.0) call ncread('lamult_phy'//c2, + . phyh2d(1-nbdy,1-nbdy,ACC_LAMULT(n)),ip,1,0.) + if (ACC_LASL(n).ne.0) call ncread('lasl_phy'//c2, + . phyh2d(1-nbdy,1-nbdy,ACC_LASL(n)),ip,1,0.) + if (ACC_USTOKES(n).ne.0) call ncread('ustokes_phy'//c2, + . phyh2d(1-nbdy,1-nbdy,ACC_USTOKES(n)),iuu,1,0.) + if (ACC_VSTOKES(n).ne.0) call ncread('vstokes_phy'//c2, + . phyh2d(1-nbdy,1-nbdy,ACC_VSTOKES(n)),ivv,1,0.) if (ACC_FMLTFZ(n).ne.0) call ncread('fmltfz_phy'//c2, . phyh2d(1-nbdy,1-nbdy,ACC_FMLTFZ(n)),ip,1,0.) if (ACC_HMLTFZ(n).ne.0) call ncread('hmltfz_phy'//c2, @@ -920,6 +931,12 @@ subroutine restart_rd . phylyr(1-nbdy,1-nbdy,1,ACC_BFSQ(n)),ip,1,0.) if (ACC_DIFDIA(n).ne.0) call ncread('difdia_phy'//c2, . phylyr(1-nbdy,1-nbdy,1,ACC_DIFDIA(n)),ip,1,0.) + if (ACC_DIFVMO(n).ne.0) call ncread('difvmo_phy'//c2, + . phylyr(1-nbdy,1-nbdy,1,ACC_DIFVMO(n)),ip,1,0.) + if (ACC_DIFVHO(n).ne.0) call ncread('difvho_phy'//c2, + . phylyr(1-nbdy,1-nbdy,1,ACC_DIFVHO(n)),ip,1,0.) + if (ACC_DIFVSO(n).ne.0) call ncread('difvso_phy'//c2, + . phylyr(1-nbdy,1-nbdy,1,ACC_DIFVSO(n)),ip,1,0.) if (ACC_DIFINT(n).ne.0) call ncread('difint_phy'//c2, . phylyr(1-nbdy,1-nbdy,1,ACC_DIFINT(n)),ip,1,0.) if (ACC_DIFISO(n).ne.0) call ncread('difiso_phy'//c2, @@ -1006,6 +1023,12 @@ subroutine restart_rd . phylvl(1-nbdy,1-nbdy,1,ACC_BFSQLVL(n)),ip,1,0.) if (ACC_DIFDIALVL(n).ne.0) call ncread('difdialvl_phy'//c2, . phylvl(1-nbdy,1-nbdy,1,ACC_DIFDIALVL(n)),ip,1,0.) + if (ACC_DIFVMOLVL(n).ne.0) call ncread('difvmolvl_phy'//c2, + . phylvl(1-nbdy,1-nbdy,1,ACC_DIFVMOLVL(n)),ip,1,0.) + if (ACC_DIFVHOLVL(n).ne.0) call ncread('difvholvl_phy'//c2, + . phylvl(1-nbdy,1-nbdy,1,ACC_DIFVHOLVL(n)),ip,1,0.) + if (ACC_DIFVSOLVL(n).ne.0) call ncread('difvsolvl_phy'//c2, + . phylvl(1-nbdy,1-nbdy,1,ACC_DIFVSOLVL(n)),ip,1,0.) if (ACC_DIFINTLVL(n).ne.0) call ncread('difintlvl_phy'//c2, . phylvl(1-nbdy,1-nbdy,1,ACC_DIFINTLVL(n)),ip,1,0.) if (ACC_DIFISOLVL(n).ne.0) call ncread('difisolvl_phy'//c2, diff --git a/phy/restart_wt.F b/phy/restart_wt.F index 861dee7d..77faa50b 100644 --- a/phy/restart_wt.F +++ b/phy/restart_wt.F @@ -48,7 +48,8 @@ subroutine restart_wt use mod_niw, only: uml, vml, umlres, vmlres use mod_difest, only: OBLdepth use mod_diffusion, only: difiso, Kvisc_m, Kdiff_t, Kdiff_s, - . t_ns_nonloc, s_nb_nonloc + . t_ns_nonloc, s_nb_nonloc, + . mu_nonloc, mv_nonloc use mod_cesm, only: frzpot, mltpot, swa_da, nsf_da, hmlt_da, . lip_da, sop_da, eva_da, rnf_da, rfi_da, . fmltfz_da, sfl_da, ztx_da, mty_da, ustarw_da, @@ -304,6 +305,8 @@ subroutine restart_wt . t_ns_nonloc,ip) call wrtrst('s_nb_nonloc',trim(c5p)//' kkp1 time', . s_nb_nonloc,ip) + call wrtrst('mu_nonloc',trim(c5u)//' kkp1 time',mu_nonloc,iu) + call wrtrst('mv_nonloc',trim(c5v)//' kkp1 time',mv_nonloc,iv) call wrtrst('umflsm',trim(c5u)//' kk2 time',umflsm,iuu) call wrtrst('utflsm',trim(c5u)//' kk2 time',utflsm,iuu) call wrtrst('usflsm',trim(c5u)//' kk2 time',usflsm,iuu) @@ -504,6 +507,14 @@ subroutine restart_wt . trim(c5p)//' time',phyh2d(1-nbdy,1-nbdy,ACC_MTKEPE(n)),ip) if (ACC_MTKEKE(n) .ne.0) call wrtrst('mtkeke_phy'//c2, . trim(c5p)//' time',phyh2d(1-nbdy,1-nbdy,ACC_MTKEKE(n)),ip) + if (ACC_LAMULT(n) .ne.0) call wrtrst('lamult_phy'//c2, + . trim(c5p)//' time',phyh2d(1-nbdy,1-nbdy,ACC_LAMULT(n)),ip) + if (ACC_LASL(n) .ne.0) call wrtrst('lasl_phy'//c2, + . trim(c5p)//' time',phyh2d(1-nbdy,1-nbdy,ACC_LASL(n)),ip) + if (ACC_USTOKES(n) .ne.0) call wrtrst('ustokes_phy'//c2, + . trim(c5u)//' time',phyh2d(1-nbdy,1-nbdy,ACC_USTOKES(n)),iuu) + if (ACC_VSTOKES(n) .ne.0) call wrtrst('vstokes_phy'//c2, + . trim(c5v)//' time',phyh2d(1-nbdy,1-nbdy,ACC_VSTOKES(n)),ivv) if (ACC_FMLTFZ(n) .ne.0) call wrtrst('fmltfz_phy'//c2, . trim(c5p)//' time',phyh2d(1-nbdy,1-nbdy,ACC_FMLTFZ(n)),ip) if (ACC_HMLTFZ(n) .ne.0) call wrtrst('hmltfz_phy'//c2, @@ -611,6 +622,15 @@ subroutine restart_wt . ip) if (ACC_DIFDIA(n).ne.0) call wrtrst('difdia_phy'//c2, . trim(c5p)//' kk time',phylyr(1-nbdy,1-nbdy,1,ACC_DIFDIA(n)), + . ip) + if (ACC_DIFVMO(n).ne.0) call wrtrst('difvmo_phy'//c2, + . trim(c5p)//' kk time',phylyr(1-nbdy,1-nbdy,1,ACC_DIFVMO(n)), + . ip) + if (ACC_DIFVHO(n).ne.0) call wrtrst('difvho_phy'//c2, + . trim(c5p)//' kk time',phylyr(1-nbdy,1-nbdy,1,ACC_DIFVHO(n)), + . ip) + if (ACC_DIFVSO(n).ne.0) call wrtrst('difvso_phy'//c2, + . trim(c5p)//' kk time',phylyr(1-nbdy,1-nbdy,1,ACC_DIFVSO(n)), . ip) if (ACC_DIFINT(n).ne.0) call wrtrst('difint_phy'//c2, . trim(c5p)//' kk time',phylyr(1-nbdy,1-nbdy,1,ACC_DIFINT(n)), @@ -725,6 +745,15 @@ subroutine restart_wt if (ACC_DIFDIALVL(n).ne.0) call wrtrst('difdialvl_phy'//c2, . trim(c5p)//' plev time',phylvl(1-nbdy,1-nbdy,1, . ACC_DIFDIALVL(n)),ip) + if (ACC_DIFVMOLVL(n).ne.0) call wrtrst('difvmolvl_phy'//c2, + . trim(c5p)//' plev time',phylvl(1-nbdy,1-nbdy,1, + . ACC_DIFVMOLVL(n)),ip) + if (ACC_DIFVHOLVL(n).ne.0) call wrtrst('difvholvl_phy'//c2, + . trim(c5p)//' plev time',phylvl(1-nbdy,1-nbdy,1, + . ACC_DIFVHOLVL(n)),ip) + if (ACC_DIFVSOLVL(n).ne.0) call wrtrst('difvsolvl_phy'//c2, + . trim(c5p)//' plev time',phylvl(1-nbdy,1-nbdy,1, + . ACC_DIFVSOLVL(n)),ip) if (ACC_DIFINTLVL(n).ne.0) call wrtrst('difintlvl_phy'//c2, . trim(c5p)//' plev time',phylvl(1-nbdy,1-nbdy,1, . ACC_DIFINTLVL(n)),ip) @@ -952,6 +981,8 @@ subroutine defvar_restart(c5p,c5u,c5v,c5q) call defvarrst('OBLdepth',trim(c5p)//' time') call defvarrst('t_ns_nonloc',trim(c5p)//' kkp1 time') call defvarrst('s_nb_nonloc',trim(c5p)//' kkp1 time') + call defvarrst('mu_nonloc',trim(c5u)//' kkp1 time') + call defvarrst('mv_nonloc',trim(c5v)//' kkp1 time') call defvarrst('umflsm',trim(c5u)//' kk2 time') call defvarrst('utflsm',trim(c5u)//' kk2 time') call defvarrst('usflsm',trim(c5u)//' kk2 time') @@ -1149,6 +1180,14 @@ subroutine defvar_restart(c5p,c5u,c5v,c5q) . trim(c5p)//' time') if (ACC_MTKEKE(n) .ne.0) call defvarrst('mtkeke_phy'//c2, . trim(c5p)//' time') + if (ACC_LAMULT(n) .ne.0) call defvarrst('lamult_phy'//c2, + . trim(c5p)//' time') + if (ACC_LASL(n) .ne.0) call defvarrst('lasl_phy'//c2, + . trim(c5p)//' time') + if (ACC_USTOKES(n) .ne.0) call defvarrst('ustokes_phy'//c2, + . trim(c5u)//' time') + if (ACC_VSTOKES(n) .ne.0) call defvarrst('vstokes_phy'//c2, + . trim(c5v)//' time') if (ACC_FMLTFZ(n) .ne.0) call defvarrst('fmltfz_phy'//c2, . trim(c5p)//' time') if (ACC_HMLTFZ(n) .ne.0) call defvarrst('hmltfz_phy'//c2, @@ -1226,6 +1265,12 @@ subroutine defvar_restart(c5p,c5u,c5v,c5q) if (ACC_BFSQ(n) .ne.0) call defvarrst('bfsq_phy'//c2, . trim(c5p)//' kk time') if (ACC_DIFDIA(n).ne.0) call defvarrst('difdia_phy'//c2, + . trim(c5p)//' kk time') + if (ACC_DIFVMO(n).ne.0) call defvarrst('difvmo_phy'//c2, + . trim(c5p)//' kk time') + if (ACC_DIFVHO(n).ne.0) call defvarrst('difvho_phy'//c2, + . trim(c5p)//' kk time') + if (ACC_DIFVSO(n).ne.0) call defvarrst('difvso_phy'//c2, . trim(c5p)//' kk time') if (ACC_DIFINT(n).ne.0) call defvarrst('difint_phy'//c2, . trim(c5p)//' kk time') @@ -1302,6 +1347,12 @@ subroutine defvar_restart(c5p,c5u,c5v,c5q) if (ACC_BFSQLVL(n).ne.0) call defvarrst('bfsqlvl_phy'//c2, . trim(c5p)//' plev time') if (ACC_DIFDIALVL(n).ne.0) call defvarrst('difdialvl_phy'//c2, + . trim(c5p)//' plev time') + if (ACC_DIFVMOLVL(n).ne.0) call defvarrst('difvmolvl_phy'//c2, + . trim(c5p)//' plev time') + if (ACC_DIFVHOLVL(n).ne.0) call defvarrst('difvholvl_phy'//c2, + . trim(c5p)//' plev time') + if (ACC_DIFVSOLVL(n).ne.0) call defvarrst('difvsolvl_phy'//c2, . trim(c5p)//' plev time') if (ACC_DIFINTLVL(n).ne.0) call defvarrst('difintlvl_phy'//c2, . trim(c5p)//' plev time') diff --git a/tests/fuk95/limits b/tests/fuk95/limits index 3f87143a..fbfa7a4d 100644 --- a/tests/fuk95/limits +++ b/tests/fuk95/limits @@ -73,6 +73,7 @@ ! DISFLX : Diagnose freshwater flux flag (l) ! SRXBAL : Balance the SSS relaxation (l) ! SCFILE : Name of file containing SSS climatology used for relaxation (a) +! WAVSRC : Source of wave fields. Valid source: 'none', 'param', 'extern' (a) ! SMTFRC : Smooth CESM forcing (l) ! SPRFAC : Send precipitation/runoff factor to CESM coupler (l) ! ATM_PATH : Path to forcing fields in case of EXPCNF 'ben02clim' or @@ -140,11 +141,14 @@ DISFLX = .false. SRXBAL = .false. SCFILE = 'unset' + WAVSRC = 'none' SMTFRC = .false. SPRFAC = .false. ATM_PATH = 'unset' ITEST = 78 JTEST = 16 + CNSVDI = .false. + CSDIAG = .false. RSTFRQ = 1 RSTFMT = 1 RSTCMP = 1 @@ -194,6 +198,10 @@ ! Gregg et al. (2003) (l) ! TKEPF : Fraction of surface TKE that penetrates beneath mixed layer ! () (f) +! SMOBLD : If true, apply lateral smoothing of CVMix estimated +! boundary layer depth (l) +! LNGMTP : Type of CVMix Langmuir turbulence parameterization. Valid +! types: 'none', 'vr12-ma', 'lf17' ! LTEDTP : Type of lateral tracer eddy diffusion: Valid methods: ! 'layer', 'neutral'. &DIFFUSION @@ -219,6 +227,8 @@ BDMC2 = .15 BDMLDP = .false. TKEPF = 0. + SMOBLD = .true. + LNGMTP = 'none' LTEDTP = 'layer' / @@ -335,6 +345,8 @@ ! HSNW - snow depth [m] ! IAGE - ice age [d] ! IDKEDT - mixed layer inertial kinetic energy tendency [kg s-3] +! LAMULT - Langmuir enhancement factor [] +! LASL - Surface layer averaged Langmuir number [] ! LIP - liquid precipitation [kg m-2 s-1] ! MAXMLD - maximum mixed layer depth [m] ! MLD - mixed layer depth [m] @@ -379,8 +391,10 @@ ! UICE - ice velocity x-component [m s-1] ! USTAR - friction velocity [m s-1] ! USTAR3 - friction velocity cubed [m3 s-3] +! USTOKES - surface Stokes drift x-componen [m s-1] ! VB - barotropic velocity y-component [m s-1] ! VICE - ice velocity y-component [m s-1] +! VSTOKES - surface Stokes drift y-componen [m s-1] ! ZTX - wind stress x-component [N m-2] ! BFSQ - buoyancy frequency squared [s-1] ! DIFDIA - vertical diffusivity [log10(m2 s-1)|m2 s-1] @@ -466,6 +480,8 @@ H2D_HSNW = 0, 0 H2D_IAGE = 0, 0 H2D_IDKEDT = 0, 4 + H2D_LAMULT = 0, 4 + H2D_LASL = 0, 4 H2D_LIP = 0, 0 H2D_MAXMLD = 4, 4 H2D_MLD = 0, 4 @@ -510,8 +526,10 @@ H2D_UICE = 0, 0 H2D_USTAR = 0, 0 H2D_USTAR3 = 0, 0 + H2D_USTOKES = 0, 0 H2D_VB = 4, 4 H2D_VICE = 0, 0 + H2D_VSTOKES = 0, 0 H2D_ZTX = 0, 0 LYR_BFSQ = 0, 4 LYR_DIFDIA = 0, 4