rc-qlc 0.3.24__cp310-cp310-win32.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. qlc/__init__.py +8 -0
  2. qlc/cli/__init__.py +21 -0
  3. qlc/cli/installer.py +16 -0
  4. qlc/cli/qlc_main.py +185 -0
  5. qlc/cli/qlc_py_main.py +74 -0
  6. qlc/config/json/qlc_config.json +41 -0
  7. qlc/config/json/qlc_config_example_1a_all-obs.json +237 -0
  8. qlc/config/json/qlc_config_example_1b_all-mod.json +353 -0
  9. qlc/config/json/qlc_config_example_1c_all-coll.json +266 -0
  10. qlc/config/json/qlc_config_example_2a_all-obs.json +237 -0
  11. qlc/config/json/qlc_config_example_2b_all-mod.json +353 -0
  12. qlc/config/json/qlc_config_example_2c_all-coll.json +265 -0
  13. qlc/config/json/qlc_config_example_3a-us_obs.json +82 -0
  14. qlc/config/json/qlc_config_example_3b-us_mod.json +122 -0
  15. qlc/config/json/qlc_config_example_3c-us_coll.json +46 -0
  16. qlc/config/json/qlc_config_example_4a_eu-obs.json +41 -0
  17. qlc/config/json/qlc_config_example_4b_eu-mod.json +122 -0
  18. qlc/config/json/qlc_config_example_4c_eu-coll.json +45 -0
  19. qlc/config/nml/mars_A1_sfc.nml +19 -0
  20. qlc/config/nml/mars_A2_sfc.nml +19 -0
  21. qlc/config/nml/mars_A3_sfc.nml +19 -0
  22. qlc/config/nml/mars_B1_pl.nml +19 -0
  23. qlc/config/nml/mars_B2_pl.nml +19 -0
  24. qlc/config/nml/mars_C1_pl.nml +19 -0
  25. qlc/config/nml/mars_C2_pl.nml +19 -0
  26. qlc/config/nml/mars_C3_ml.nml +19 -0
  27. qlc/config/nml/mars_D.nml +19 -0
  28. qlc/config/nml/mars_E.nml +19 -0
  29. qlc/config/nml/mars_F.nml +19 -0
  30. qlc/config/nml/mars_G.nml +19 -0
  31. qlc/config/qlc_cams.conf +26 -0
  32. qlc/config/qlc_test.conf +26 -0
  33. qlc/config/qlc_tex.conf +107 -0
  34. qlc/doc/CONTRIBUTING.md +105 -0
  35. qlc/doc/README.md +116 -0
  36. qlc/doc/USAGE.md +58 -0
  37. qlc/examples/cams_case_1/config/json/qlc_config.json +41 -0
  38. qlc/examples/cams_case_1/config/nml/mars_A3_sfc.nml +19 -0
  39. qlc/examples/cams_case_1/config/nml/mars_B1_pl.nml +19 -0
  40. qlc/examples/cams_case_1/config/nml/mars_C1_pl.nml +19 -0
  41. qlc/examples/cams_case_1/config/qlc_cams.conf +122 -0
  42. qlc/examples/cams_case_1/mod/b2ro/2018/b2ro_20181215-20181231_A3_sfc.grb +0 -0
  43. qlc/examples/cams_case_1/mod/iqi9/2018/iqi9_20181215-20181231_A3_sfc.grb +0 -0
  44. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181201.nc +0 -0
  45. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181202.nc +0 -0
  46. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181203.nc +0 -0
  47. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181204.nc +0 -0
  48. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181205.nc +0 -0
  49. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181206.nc +0 -0
  50. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181207.nc +0 -0
  51. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181208.nc +0 -0
  52. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181209.nc +0 -0
  53. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181210.nc +0 -0
  54. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181211.nc +0 -0
  55. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181212.nc +0 -0
  56. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181213.nc +0 -0
  57. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181214.nc +0 -0
  58. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181215.nc +0 -0
  59. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181216.nc +0 -0
  60. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181217.nc +0 -0
  61. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181218.nc +0 -0
  62. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181219.nc +0 -0
  63. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181220.nc +0 -0
  64. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181221.nc +0 -0
  65. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181222.nc +0 -0
  66. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181223.nc +0 -0
  67. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181224.nc +0 -0
  68. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181225.nc +0 -0
  69. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181226.nc +0 -0
  70. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181227.nc +0 -0
  71. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181228.nc +0 -0
  72. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181229.nc +0 -0
  73. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181230.nc +0 -0
  74. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181231.nc +0 -0
  75. qlc/examples/cams_case_1/obs/ebas_station-locations.csv +50 -0
  76. qlc/install.py +285 -0
  77. qlc/py/__main__.cp310-win32.pyd +0 -0
  78. qlc/py/averaging.cp310-win32.pyd +0 -0
  79. qlc/py/bias_plots.cp310-win32.pyd +0 -0
  80. qlc/py/control.cp310-win32.pyd +0 -0
  81. qlc/py/io.cp310-win32.pyd +0 -0
  82. qlc/py/loadmod.cp310-win32.pyd +0 -0
  83. qlc/py/loadobs.cp310-win32.pyd +0 -0
  84. qlc/py/logging_utils.cp310-win32.pyd +0 -0
  85. qlc/py/map_plots.cp310-win32.pyd +0 -0
  86. qlc/py/matched.cp310-win32.pyd +0 -0
  87. qlc/py/plot_config.cp310-win32.pyd +0 -0
  88. qlc/py/plotting.cp310-win32.pyd +0 -0
  89. qlc/py/plugin_loader.cp310-win32.pyd +0 -0
  90. qlc/py/processing.cp310-win32.pyd +0 -0
  91. qlc/py/scatter_plots.cp310-win32.pyd +0 -0
  92. qlc/py/stations.cp310-win32.pyd +0 -0
  93. qlc/py/statistics.cp310-win32.pyd +0 -0
  94. qlc/py/style.cp310-win32.pyd +0 -0
  95. qlc/py/timeseries_plots.cp310-win32.pyd +0 -0
  96. qlc/py/utils.cp310-win32.pyd +0 -0
  97. qlc/py/version.cp310-win32.pyd +0 -0
  98. qlc/sh/qlc_A1.sh +127 -0
  99. qlc/sh/qlc_B1a.sh +123 -0
  100. qlc/sh/qlc_B2.sh +258 -0
  101. qlc/sh/qlc_C5.sh +825 -0
  102. qlc/sh/qlc_D1.sh +130 -0
  103. qlc/sh/qlc_Z1.sh +165 -0
  104. qlc/sh/qlc_common_functions.sh +157 -0
  105. qlc/sh/qlc_main.sh +127 -0
  106. qlc/sh/qlc_start.sh +23 -0
  107. qlc/sh/qlc_start_batch.sh +46 -0
  108. rc_qlc-0.3.24.dist-info/METADATA +142 -0
  109. rc_qlc-0.3.24.dist-info/RECORD +113 -0
  110. rc_qlc-0.3.24.dist-info/WHEEL +5 -0
  111. rc_qlc-0.3.24.dist-info/entry_points.txt +6 -0
  112. rc_qlc-0.3.24.dist-info/licenses/LICENSE +21 -0
  113. rc_qlc-0.3.24.dist-info/top_level.txt +1 -0
qlc/sh/qlc_C5.sh ADDED
@@ -0,0 +1,825 @@
1
+ #!/bin/sh -e
2
+
3
+ # Source the configuration file to load the settings
4
+ . "$CONFIG_FILE"
5
+ # Include common functions
6
+ source $FUNCTIONS
7
+
8
+ PLOTTYPE="pyferret"
9
+ SCRIPT="$0"
10
+ log "________________________________________________________________________________________"
11
+ log "Start ${SCRIPT} at `date`"
12
+ log "Create Ferret plots for selected variables (to be defined in $CONFIG_FILE) "
13
+ #log "----------------------------------------------------------------------------------------"
14
+ #log "Copyright (c) 2021-2025 ResearchConcepts io GmbH. All Rights Reserved. "
15
+ #log "Questions / comments to: Swen M. Metzger <sm@researchconcepts.io> "
16
+ log "----------------------------------------------------------------------------------------"
17
+
18
+ # Loop through and process the parameters received
19
+ for param in "$@"; do
20
+ log "Subscript $0 received parameter: $param"
21
+ done
22
+
23
+ log "$0 ANALYSIS_DIRECTORY = $ANALYSIS_DIRECTORY"
24
+
25
+ # module load for ATOS
26
+ myOS="`uname -s`"
27
+ HOST=`hostname -s | awk '{printf $1}' | cut -c 1`
28
+ log "HOST = ${HOST} | `hostname -s`"
29
+ log "myOS = ${myOS}"
30
+ if [ "${HOST}" == "a" ] && [ "${myOS}" != "Darwin" ]; then
31
+ module load ferret/7.6.3
32
+ fi
33
+
34
+ # Check if pyferret exists
35
+ if ! command_exists pyferret; then
36
+ log "Error: pyferret command not found" >&2
37
+ exit 1
38
+ else
39
+ log "Success: pyferret command found"
40
+ which pyferret
41
+ fi
42
+
43
+ # Create output directory if not existent
44
+ if [ ! -d "$PLOTS_DIRECTORY" ]; then
45
+ mkdir -p "$PLOTS_DIRECTORY"
46
+ fi
47
+
48
+ # get script name without path and extension
49
+ script_name="${SCRIPT##*/}" # Remove directory path
50
+ script_name="${script_name%.*}" # Remove extension
51
+ QLTYPE="$script_name"
52
+
53
+ # Assign the command line input parameters to variables
54
+ exp1="$1"
55
+ exp2="$2"
56
+ sDat="$3"
57
+ eDat="$4"
58
+ sDate="${sDat//[-:]/}"
59
+ eDate="${eDat//[-:]/}"
60
+ mDate="$sDate-$eDate"
61
+ ext="$PLOTEXTENSION"
62
+
63
+ hpath="$PLOTS_DIRECTORY/${exp1}-${exp2}_${mDate}"
64
+
65
+ # Create help directory if not existent
66
+ if [ ! -d "$hpath" ]; then
67
+ mkdir -p "$hpath"
68
+ fi
69
+
70
+ # list name for plot files used for final tex pdf
71
+ texPlotsfile="${hpath}/texPlotfiles_${QLTYPE}.list"
72
+ texFile="${texPlotsfile%.list}.tex"
73
+ # clean up previous plot file for current tex pdf creation
74
+ rm -f $texPlotsfile
75
+ touch $texPlotsfile
76
+
77
+ exps="$exp1 $exp2"
78
+ for exp in $exps ; do
79
+ log "----------------------------------------------------------------------------------------"
80
+ log "Processing ${PLOTTYPE} plot for experiment: $exp"
81
+
82
+ log "QLTYPE : $QLTYPE"
83
+ log "TEAM_PREFIX : $TEAM_PREFIX"
84
+ log "EVALUATION_PREFIX: $EVALUATION_PREFIX"
85
+ log "MODEL_RESOLUTION : $MODEL_RESOLUTION"
86
+ log "TIME_RESOLUTION : $TIME_RESOLUTION"
87
+ log "mDate : $mDate"
88
+ log "ext : $ext"
89
+ log "exp1 : $exp1"
90
+ log "exp2 : $exp2"
91
+
92
+ # definition of plot file base name
93
+ pfile="${TEAM_PREFIX}_${exp1}-${exp2}_${mDate}_${QLTYPE}"
94
+ log "pfile base name : $pfile"
95
+
96
+ ipath="$ANALYSIS_DIRECTORY/$exp"
97
+ tpath="$PLOTS_DIRECTORY/$exp"
98
+
99
+ # Create analysis directory if not existent
100
+ if [ ! -d "$ipath" ]; then
101
+ mkdir -p "$ipath"
102
+ fi
103
+ # Create output directory if not existent
104
+ if [ ! -d "$tpath" ]; then
105
+ mkdir -p "$tpath"
106
+ fi
107
+
108
+ cd $tpath
109
+ pwd -P
110
+
111
+ for name in "${MARS_RETRIEVALS[@]}"; do
112
+
113
+ log "name : $name"
114
+
115
+ # Define the corresponding arrays based on the name
116
+ param_var="param_${name}[@]"
117
+ ncvar_var="ncvar_${name}[@]"
118
+ myvar_var="myvar_${name}[@]"
119
+
120
+ log "param_var : $param_var"
121
+ log "ncvar_var : $ncvar_var"
122
+ log "myvar_var : $myvar_var"
123
+
124
+ # Use variable indirection to access the arrays
125
+ param=("${!param_var}")
126
+ ncvar=("${!ncvar_var}")
127
+ myvar=("${!myvar_var}")
128
+
129
+ log "param : $param"
130
+ log "ncvar : $ncvar"
131
+ log "myvar : $myvar"
132
+
133
+ # Loop through the variables for this $name
134
+ for ((i = 0; i < ${#ncvar[@]}; i++)); do
135
+
136
+ myvar_name="${myvar[i]}"
137
+ pvars="${myvar_name}"
138
+
139
+ log "i : $i"
140
+ log "#ncvar[@] : "${#ncvar[@]}
141
+ log "myvar_${name}[@] : "myvar_${name}[@]
142
+ log "myvar_name : $myvar_name"
143
+ log "pvars : ${pvars}"
144
+
145
+ # special case for diagnostic output of EQSAM4clim (71 / 80 sub-variables)
146
+ if [ "${name}" == "E" ]; then
147
+ case "$myvar_name" in
148
+ "EQdiag")
149
+ # declare -a pvars=("GFh2o" "GFhsa" "GFhna" "GFhca" "GFxam" "GFalc" "GFasu" "GFahs" "GFano" "GFacl" "GFslc" "GFssu" "GFshs" "GFsno" "GFscl" "GFplc" "GFpsu" "GFphs" "GFpno" "GFpcl" "GFc01" "GFcsu" "GFc02" "GFcno" "GFccl" "GFm01" "GFmsu" "GFm02" "GFmno" "GFmcl" "AWh2o" "AWhsa" "AWhna" "AWhca" "AWxam" "AWalc" "AWasu" "AWahs" "AWano" "AWacl" "AWslc" "AWssu" "AWshs" "AWsno" "AWscl" "AWplc" "AWpsu" "AWphs" "AWpno" "AWpcl" "AWc01" "AWcsu" "AWc02" "AWcno" "AWccl" "AWm01" "AWmsu" "AWm02" "AWmno" "AWmcl" "EQpH1" "EQpH2" "EQpH3" "EQpH4" "EQpH5" "EQAW1" "EQAW2" "EQAW3" "EQAW4" "EQAD" "EQHp" "EQPMt" "EQPMs" "EQsPM" "EQaPM" "EQRHO" "EQGF" "EQTT" "EQRH" "EQP")
150
+ # declare -a nvars=( "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30" "31" "32" "33" "34" "35" "36" "37" "38" "39" "40" "41" "42" "43" "44" "45" "46" "47" "48" "49" "50" "51" "52" "53" "54" "55" "56" "57" "58" "59" "60" "61" "62" "63" "64" "65" "66" "67" "68" "69" "70" "71" "72" "73" "74" "75" "76" "77" "78" "79" "80")
151
+ # declare -a nvars=( "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30" "31" "32" "33" "34" "35" "36" "37" "38" "39" "40" "41" "42" "43" "44" "45" "46" "47" "48" "49" "50" "51" "52" "53" "54" "55" "56" "57" "58" "59" "60" "61" "62" "63" "64" "65" "66" "67" "68" "69" "70" "71" "72" "73" "74" "75" "76" "77" "78" "79" "80")
152
+ # declare -a pvars=("pHtot" "pHaeq" "pHaer" "pHcld" "pHpre" "GFalc" "GFasu" "GFahs" "GFano" "GFacl" "GFslc" "GFssu" "GFshs" "GFsno" "GFscl" "GFplc" "GFpsu" "GFphs" "GFpno" "GFpcl" "GFc01" "GFcsu" "GFc02" "GFcno" "GFccl" "GFm01" "GFmsu" "GFm02" "GFmno" "GFmcl" "LWtot" "LWaeq" "LWaer" "LWcld" "LWpre" "AWalc" "AWasu" "AWahs" "AWano" "AWacl" "AWslc" "AWssu" "AWshs" "AWsno" "AWscl" "AWplc" "AWpsu" "AWphs" "AWpno" "AWpcl" "AWc01" "AWcsu" "AWc02" "AWcno" "AWccl" "AWm01" "AWmsu" "AWm02" "AWmno" "AWmcl" "eq_TT" "eq_RH" "eq__P" "eq_ID" "eqPMt" "eqPMs" "eqsPM" "eqaPM" "eqRHO" "eq_Hp" "eq_GF" "DUMMY" "DUMMY" "DUMMY" "DUMMY" "DUMMY" "DUMMY" "DUMMY" "DUMMY" "DUMMY")
153
+ # declare -a nvars=( "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30" "31" "32" "33" "34" "35" "36" "37" "38" "39" "40" "41" "42" "43" "44" "45" "46" "47" "48" "49" "50" "51" "52" "53" "54" "55" "56" "57" "58" "59" "60" "61" "62" "63" "64" "65" "66" "67" "68" "69" "70" "71" )
154
+ declare -a pvars=("pHtot" "pHaeq" "pHaer" "pHcld" "pHpre" "GFalc" "GFasu" "GFahs" "GFano" "GFacl" "GFslc" "GFssu" "GFshs" "GFsno" "GFscl" "GFplc" "GFpsu" "GFphs" "GFpno" "GFpcl" "GFc01" "GFcsu" "GFc02" "GFcno" "GFccl" "GFm01" "GFmsu" "GFm02" "GFmno" "GFmcl" "LWtot" "LWaeq" "LWaer" "LWcld" "LWpre" "AWalc" "AWasu" "AWahs" "AWano" "AWacl" "AWslc" "AWssu" "AWshs" "AWsno" "AWscl" "AWplc" "AWpsu" "AWphs" "AWpno" "AWpcl" "AWc01" "AWcsu" "AWc02" "AWcno" "AWccl" "AWm01" "AWmsu" "AWm02" "AWmno" "AWmcl" "eqTT" "eqRH" "eqP" "eqID" "eqPMt" "eqPMs" "eqsPM" "eqaPM" "eqRHO" "eqHp" "eqGF")
155
+ # declare -a pvars=("pHtot" "pHaeq" "pHaer" "pHcld" "pHpre" "LWtot" "LWaeq" "LWaer" "LWcld" "LWpre")
156
+ # declare -a pvars=("pHtot" "pHaeq" "pHaer" "pHcld" "pHpre")
157
+ # declare -a pvars=("GFano" "AWano")
158
+ ;;
159
+ esac
160
+ fi
161
+
162
+ log "pvars : ${pvars}"
163
+
164
+ for ((j=0; j<${#pvars[@]}; j++)); do
165
+ pvar="${pvars[$j]}"
166
+ if [[ "$pvar" == *"_"* ]]; then
167
+ pvar2=$(echo "$pvar" | sed 's/_/\-/g')
168
+ else
169
+ pvar2=$pvar
170
+ fi
171
+
172
+ log "j : $j"
173
+ log "pvar : ${pvar}"
174
+
175
+ # one NC-file file for each variable is expected here
176
+ # Extract the data level type
177
+ cd $ipath
178
+ file="`echo ${exp}_${mDate}_*${pvar}_tavg.nc`"
179
+ ltype="_$(echo "$file" | awk -F'_' '{print $4}' | cut -d'.' -f1)"
180
+ cd $tpath
181
+
182
+ # ifile="$ipath/${exp}_${mDate}_${name}${ltype}_${pvar}_tavg.nc"
183
+ # ifile1="$ANALYSIS_DIRECTORY/$exp1/${exp1}_${mDate}_${name}${ltype}_${pvar}_tavg.nc"
184
+ # ifile2="$ANALYSIS_DIRECTORY/$exp2/${exp2}_${mDate}_${name}${ltype}_${pvar}_tavg.nc"
185
+
186
+ ifile="$ipath/${exp}_${mDate}_${name}_${pvar}_tavg.nc"
187
+ ifile1="$ANALYSIS_DIRECTORY/$exp1/${exp1}_${mDate}_${name}_${pvar}_tavg.nc"
188
+ ifile2="$ANALYSIS_DIRECTORY/$exp2/${exp2}_${mDate}_${name}_${pvar}_tavg.nc"
189
+
190
+ if [ -f "${ifile}" ]; then
191
+
192
+ rm -f ${pvar}.nc
193
+ ln -s ${ifile} ${pvar}.nc
194
+
195
+ nlev="`ncdump -h ${pvar}.nc | grep 'plev = ' | awk -F' ' '{print $3}'`"
196
+ if [ "${nlev}" == "" ] ; then
197
+ plev="0"
198
+ else
199
+ plev="${nlev}"
200
+ fi
201
+ log "${plev} plot for: $pvar"
202
+
203
+ # definition of plot files for each exp + variable (log, diff for exp1)
204
+ # tfile="${pfile}_${name}_${pvar}_${exp}"
205
+ tfile="${pfile}_${name}_${pvar2}_${exp}"
206
+
207
+ log "${PLOTTYPE} plot for: $pvar - $tpath/$tfile.$ext"
208
+
209
+ # ferret journal file variable definition
210
+ var='`var`'
211
+ pal='`pal`'
212
+ lon='`lon`'
213
+ lat='`lat`'
214
+ lev='`lev`'
215
+ tim='`tim`'
216
+ # crude workaround, needs to be implemented properly
217
+ # plev="21" # 1000 hPa
218
+ if [ "${plev}" == "21" ]; then
219
+ ulev="11:15" # 100:300 hPa
220
+ elif [ "${plev}" == "16" ]; then
221
+ ulev="11:13" # 100:300 hPa
222
+ else
223
+ ulev="11:12" # default
224
+ fi
225
+ facS="1*"
226
+ facB="1*"
227
+ facZ="1*"
228
+ facM="1*"
229
+ facU="1*"
230
+ if [ "${pvar}" == "NO3a" ] || [ "${pvar}" == "NO3_ks" ] || [ "${pvar}" == "NO3_as" ] || [ "${pvar}" == "NO3_cs" ]; then
231
+ facS="1e11*"
232
+ facB="1e10*"
233
+ facZ="1e11*"
234
+ facM="1e11*"
235
+ facU="1e10*"
236
+ elif [ "${pvar}" == "NO3b" ]; then
237
+ facS="1e11*"
238
+ facB="1e10*"
239
+ facZ="1e11*"
240
+ facM="1e11*"
241
+ facU="1e11*"
242
+ elif [ "${pvar}" == "HNO3" ]; then
243
+ facS="1e11*"
244
+ facB="1e9*"
245
+ facZ="1e10*"
246
+ facM="1e10*"
247
+ facU="1e9*"
248
+ elif [ "${pvar}" == "NH3" ]; then
249
+ facS="1e11*"
250
+ facB="1e10*"
251
+ facZ="1e11*"
252
+ facM="1e11*"
253
+ facU="1e11*"
254
+ elif [ "${pvar}" == "NH4" ] || [ "${pvar}" == "NH4_ks" ] || [ "${pvar}" == "NH4_as" ] || [ "${pvar}" == "NH4_cs" ]; then
255
+ facS="1e11*"
256
+ facB="1e10*"
257
+ facZ="1e11*"
258
+ facM="1e11*"
259
+ facU="1e10*"
260
+ elif [ "${pvar}" == "O3" ]; then
261
+ facS="1e8*"
262
+ facB="1e7*"
263
+ facZ="1e7*"
264
+ facM="1e7*"
265
+ facU="1e8*"
266
+ elif [ "${pvar}" == "SO2" ]; then
267
+ facS="1e11*"
268
+ facB="1e10*"
269
+ facZ="1e11*"
270
+ facM="1e11*"
271
+ facU="1e11*"
272
+ elif [ "${pvar}" == "SO4" ] || [ "${pvar}" == "SO4_ks" ] || [ "${pvar}" == "SO4_as" ] || [ "${pvar}" == "SO4_cs" ]; then
273
+ facS="1e10*"
274
+ facB="1e9*"
275
+ facZ="1e11*"
276
+ facM="1e11*"
277
+ facU="1e10*"
278
+ fi
279
+
280
+ # create default ferret journal file (variable independent)
281
+ # To resolve system dependent memory issues, please see:
282
+ # https://ferret.pmel.noaa.gov/Ferret/documentation/users-guide/commands-reference/SET#_VPINDEXENTRY_set_memory
283
+ # SET MEMORY/SIZE=100 (Approximately 0.8 Gigabytes)
284
+ FERRETMEMSIZE="500"
285
+ LEVELS1='/LEVELS="(1,10,0.5,0)(10,50,5,0)(50,100,10,0)"'
286
+ LEVELS2='/LEVELS="(-10,10,0.5,0)"'
287
+ LEVELS3='/LEVELS="(-2,2,0.1,0)"'
288
+ LEVELS4='/LEVELS="(-10,-1,0.5,0)(-1,0,0.1,0)(0,1,0.1,0)(1,10,0.5,0)"'
289
+ LEVELS2=''
290
+ LEVELS3=''
291
+ CONTOUR='CONTOUR/OVER/NOLAB/COLOR=lightgrey'
292
+ cat > ${tfile}_burden_1x1.jnl <<EOF
293
+ ! pyferret -nodisplay -script ferret_1x1.jnl
294
+ use ${pvar}.nc
295
+ show data
296
+ CANCEL MODE logo
297
+ SET MEMORY/SIZE=${FERRETMEMSIZE}
298
+ SET VAR/BAD=-9.e+33 ${pvar}
299
+ PPL AXLSZE,0.14,0.14
300
+ PPL LABSET 0.18,0.18,0.18,0.18 ! character heights for labels
301
+ PPL SHASET 0 100 100 100 ! white for 0% LEVEL
302
+ let pal="/PALETTE=rainbow"
303
+ !let pal="/PALETTE=rain_cmyk"
304
+ !let pal="/PALETTE=no_green_centered"
305
+ !let pal="/PALETTE=white_centered"
306
+ let lon="-180:180"
307
+ let lat="-90:90"
308
+ let tim="@AVE"
309
+ let lev="@SUM"
310
+ let var="${facB}${pvar}"
311
+ fill ${pal} ${LEVELS1} /title="Burden: ${MODEL_RESOLUTION} - ${exp}: ${var}" (${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]);go land
312
+ !${CONTOUR} ${LEVELS1} (${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}])
313
+ ! FRAME/TRANSPARENT/file=${tfile}_burden.$ext
314
+ FRAME/file=${tfile}_burden.$ext
315
+ !SPAWN ls -l ${tfile}_burden.$ext
316
+ fill ${pal} ${LEVELS2} /title="Burden: ${MODEL_RESOLUTION} - ${exp}: log(${var})" log(${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]);go land
317
+ !${CONTOUR} ${LEVELS2} (log(${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]))
318
+ ! FRAME/TRANSPARENT/file=${tfile}_burden_log.$ext
319
+ FRAME/file=${tfile}_burden_log.$ext
320
+ !SPAWN ls -l ${tfile}_burden_log.$ext
321
+ !SPAWN pwd
322
+ EOF
323
+ cat > ${tfile}_burden_1x1_diff.jnl <<EOF
324
+ ! pyferret -nodisplay -script ferret_1x1.jnl
325
+ use ${ifile1}
326
+ use ${ifile2}
327
+ show data
328
+ CANCEL MODE logo
329
+ SET MEMORY/SIZE=${FERRETMEMSIZE}
330
+ SET VAR/BAD=-9.e+33 ${pvar}
331
+ PPL AXLSZE,0.14,0.14
332
+ PPL LABSET 0.18,0.18,0.18,0.18 ! character heights for labels
333
+ PPL SHASET 0 100 100 100 ! white for 0% LEVEL
334
+ !let pal="/PALETTE=rainbow"
335
+ !let pal="/PALETTE=rain_cmyk"
336
+ !let pal="/PALETTE=no_green_centered"
337
+ let pal="/PALETTE=white_centered"
338
+ let lon="-180:180"
339
+ let lat="-90:90"
340
+ let tim="@AVE"
341
+ let lev="@SUM"
342
+ let var="${facB}${pvar}"
343
+ fill ${pal} /title="Burden: ${MODEL_RESOLUTION} - Diff: ${exp1}-${exp2}: ${var}" ${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]-${var}[d=2,x=${lon},y=${lat},k=${lev},l=${tim}];go land
344
+ !${CONTOUR} (${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]-${var}[d=2,x=${lon},y=${lat},k=${lev},l=${tim}])
345
+ ! FRAME/TRANSPARENT/file=${tfile}_burden_diff.$ext
346
+ FRAME/file=${tfile}_burden_diff.$ext
347
+ !SPAWN ls -l ${tfile}_burden_diff.$ext
348
+ fill ${pal} /title="Burden: ${MODEL_RESOLUTION} - Diff: ${exp1}-${exp2}: log(${var})" log(${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]-${var}[d=2,x=${lon},y=${lat},k=${lev},l=${tim}]);go land
349
+ !${CONTOUR} (log(${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]-${var}[d=2,x=${lon},y=${lat},k=${lev},l=${tim}]))
350
+ ! FRAME/TRANSPARENT/file=${tfile}_burden_log_diff.$ext
351
+ FRAME/file=${tfile}_burden_log_diff.$ext
352
+ !SPAWN ls -l ${tfile}_burden_log_diff.$ext
353
+ !SPAWN pwd
354
+ EOF
355
+ ######## zonal plots ########
356
+ FERRETMEMSIZE="4000" # 5000
357
+ cat > ${tfile}_zonal_1x1.jnl <<EOF
358
+ ! pyferret -nodisplay -script ferret_1x1.jnl
359
+ use ${pvar}.nc
360
+ show data
361
+ CANCEL MODE logo
362
+ SET MEMORY/SIZE=${FERRETMEMSIZE}
363
+ SET VAR/BAD=-9.e+33 ${pvar}
364
+ PPL AXLSZE,0.14,0.14
365
+ PPL LABSET 0.18,0.18,0.18,0.18 ! character heights for labels
366
+ PPL SHASET 0 100 100 100 ! white for 0% LEVEL
367
+ let pal="/PALETTE=rainbow"
368
+ !let pal="/PALETTE=rain_cmyk"
369
+ !let pal="/PALETTE=no_green_centered"
370
+ !let pal="/PALETTE=white_centered"
371
+ let lon="-180:180@AVE"
372
+ let lat="-90:90"
373
+ let tim="@AVE"
374
+ let lev="1:${plev}"
375
+ let var="${facZ}${pvar}"
376
+ fill ${pal} ${LEVELS1} /title="Zonal avg: ${MODEL_RESOLUTION} - ${exp}: ${var}" (${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]);go land
377
+ ${CONTOUR} ${LEVELS1} (${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}])
378
+ ! FRAME/TRANSPARENT/file=${tfile}_zonal.$ext
379
+ FRAME/file=${tfile}_zonal.$ext
380
+ !SPAWN ls -l ${tfile}_zonal.$ext
381
+ fill ${pal} ${LEVELS2} /title="Zonal avg: ${MODEL_RESOLUTION} - ${exp}: log(${var})" log(${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]);go land
382
+ ${CONTOUR} ${LEVELS2} (log(${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]))
383
+ ! FRAME/TRANSPARENT/file=${tfile}_zonal_log.$ext
384
+ FRAME/file=${tfile}_zonal_log.$ext
385
+ !SPAWN ls -l ${tfile}_zonal_log.$ext
386
+ !SPAWN pwd
387
+ EOF
388
+ cat > ${tfile}_zonal_1x1_diff.jnl <<EOF
389
+ ! pyferret -nodisplay -script ferret_1x1.jnl
390
+ use ${ifile1}
391
+ use ${ifile2}
392
+ show data
393
+ CANCEL MODE logo
394
+ SET MEMORY/SIZE=${FERRETMEMSIZE}
395
+ PPL AXLSZE,0.14,0.14
396
+ PPL LABSET 0.18,0.18,0.18,0.18 ! character heights for labels
397
+ PPL SHASET 0 100 100 100 ! white for 0% LEVEL
398
+ SET VAR/BAD=-9.e+33 ${pvar}
399
+ !let pal="/PALETTE=rainbow"
400
+ !let pal="/PALETTE=rain_cmyk"
401
+ !let pal="/PALETTE=no_green_centered"
402
+ let pal="/PALETTE=white_centered"
403
+ let lon="-180:180@AVE"
404
+ let lat="-90:90"
405
+ let tim="@AVE"
406
+ let lev="1:${plev}"
407
+ let var="${facZ}${pvar}"
408
+ fill ${pal} /title="Zonal avg: ${MODEL_RESOLUTION} - Diff: ${exp1}-${exp2}: ${var}" ${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]-${var}[d=2,x=${lon},y=${lat},k=${lev},l=${tim}];go land
409
+ ${CONTOUR} (${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]-${var}[d=2,x=${lon},y=${lat},k=${lev},l=${tim}])
410
+ ! FRAME/TRANSPARENT/file=${tfile}_zonal_diff.$ext
411
+ FRAME/file=${tfile}_zonal_diff.$ext
412
+ !SPAWN ls -l ${tfile}_zonal_diff.$ext
413
+ fill ${pal} /title="Zonal avg: ${MODEL_RESOLUTION} - Diff: ${exp1}-${exp2}: log(${var})" log(${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]-${var}[d=2,x=${lon},y=${lat},k=${lev},l=${tim}]);go land
414
+ ${CONTOUR} (log(${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]-${var}[d=2,x=${lon},y=${lat},k=${lev},l=${tim}]))
415
+ ! FRAME/TRANSPARENT/file=${tfile}_zonal_log_diff.$ext
416
+ FRAME/file=${tfile}_zonal_log_diff.$ext
417
+ !SPAWN ls -l ${tfile}_zonal_log_diff.$ext
418
+ !SPAWN pwd
419
+ EOF
420
+ ######## meridional plots ########
421
+ cat > ${tfile}_meridional_1x1.jnl <<EOF
422
+ ! pyferret -nodisplay -script ferret_1x1.jnl
423
+ use ${pvar}.nc
424
+ show data
425
+ CANCEL MODE logo
426
+ SET MEMORY/SIZE=${FERRETMEMSIZE}
427
+ SET VAR/BAD=-9.e+33 ${pvar}
428
+ PPL AXLSZE,0.14,0.14
429
+ PPL LABSET 0.18,0.18,0.18,0.18 ! character heights for labels
430
+ PPL SHASET 0 100 100 100 ! white for 0% LEVEL
431
+ let pal="/PALETTE=rainbow"
432
+ !let pal="/PALETTE=rain_cmyk"
433
+ !let pal="/PALETTE=no_green_centered"
434
+ !let pal="/PALETTE=white_centered"
435
+ let lon="-180:180"
436
+ let lat="-90:90@AVE"
437
+ let tim="@AVE"
438
+ let lev="1:${plev}"
439
+ let var="${facM}${pvar}"
440
+ fill ${pal} ${LEVELS1} /title="Meridional avg: ${MODEL_RESOLUTION} - ${exp}: ${var}" (${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]);go land
441
+ ${CONTOUR} ${LEVELS1} (${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}])
442
+ ! FRAME/TRANSPARENT/file=${tfile}_meridional.$ext
443
+ FRAME/file=${tfile}_meridional.$ext
444
+ !SPAWN ls -l ${tfile}_meridional.$ext
445
+ fill ${pal} ${LEVELS2} /title="Meridional avg: ${MODEL_RESOLUTION} - ${exp}: log(${var})" log(${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]);go land
446
+ ${CONTOUR} ${LEVELS2} (log(${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]))
447
+ ! FRAME/TRANSPARENT/file=${tfile}_meridional_log.$ext
448
+ FRAME/file=${tfile}_meridional_log.$ext
449
+ !SPAWN ls -l ${tfile}_meridional_log.$ext
450
+ !SPAWN pwd
451
+ EOF
452
+ cat > ${tfile}_meridional_1x1_diff.jnl <<EOF
453
+ ! pyferret -nodisplay -script ferret_1x1.jnl
454
+ use ${ifile1}
455
+ use ${ifile2}
456
+ show data
457
+ CANCEL MODE logo
458
+ SET MEMORY/SIZE=${FERRETMEMSIZE}
459
+ SET VAR/BAD=-9.e+33 ${pvar}
460
+ PPL AXLSZE,0.14,0.14
461
+ PPL LABSET 0.18,0.18,0.18,0.18 ! character heights for labels
462
+ PPL SHASET 0 100 100 100 ! white for 0% LEVEL
463
+ !let pal="/PALETTE=rainbow"
464
+ !let pal="/PALETTE=rain_cmyk"
465
+ !let pal="/PALETTE=no_green_centered"
466
+ let pal="/PALETTE=white_centered"
467
+ let lon="-180:180"
468
+ let lat="-90:90@AVE"
469
+ let tim="@AVE"
470
+ let lev="1:${plev}"
471
+ let var="${facM}${pvar}"
472
+ fill ${pal} /title="Meridional avg: ${MODEL_RESOLUTION} - Diff: ${exp1}-${exp2}: ${var}" ${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]-${var}[d=2,x=${lon},y=${lat},k=${lev},l=${tim}];go land
473
+ ${CONTOUR} (${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]-${var}[d=2,x=${lon},y=${lat},k=${lev},l=${tim}])
474
+ ! FRAME/TRANSPARENT/file=${tfile}_meridional_diff.$ext
475
+ FRAME/file=${tfile}_meridional_diff.$ext
476
+ !SPAWN ls -l ${tfile}_meridional_diff.$ext
477
+ fill ${pal} /title="Meridional avg: ${MODEL_RESOLUTION} - Diff: ${exp1}-${exp2}: log(${var})" log(${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]-${var}[d=2,x=${lon},y=${lat},k=${lev},l=${tim}]);go land
478
+ ${CONTOUR} (log(${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]-${var}[d=2,x=${lon},y=${lat},k=${lev},l=${tim}]))
479
+ ! FRAME/TRANSPARENT/file=${tfile}_meridional_log_diff.$ext
480
+ FRAME/file=${tfile}_meridional_log_diff.$ext
481
+ !SPAWN ls -l ${tfile}_meridional_log_diff.$ext
482
+ !SPAWN pwd
483
+ EOF
484
+ ######## surface plots ########
485
+ FERRETMEMSIZE="500"
486
+ cat > ${tfile}_surface_1x1.jnl <<EOF
487
+ ! pyferret -nodisplay -script ferret_1x1.jnl
488
+ use ${pvar}.nc
489
+ show data
490
+ CANCEL MODE logo
491
+ SET MEMORY/SIZE=${FERRETMEMSIZE}
492
+ SET VAR/BAD=-9.e+33 ${pvar}
493
+ PPL AXLSZE,0.14,0.14
494
+ PPL LABSET 0.18,0.18,0.18,0.18 ! character heights for labels
495
+ PPL SHASET 0 100 100 100 ! white for 0% LEVEL
496
+ let pal="/PALETTE=rainbow"
497
+ !let pal="/PALETTE=rain_cmyk"
498
+ !let pal="/PALETTE=no_green_centered"
499
+ !let pal="/PALETTE=white_centered"
500
+ let lon="-180:180"
501
+ let lat="-90:90"
502
+ let tim="@AVE"
503
+ let lev="${plev}"
504
+ let var="${facS}${pvar}"
505
+ fill ${pal} ${LEVELS1} /title="Surface: ${MODEL_RESOLUTION} - ${exp}: ${var}" (${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]);go land
506
+ !${CONTOUR} ${LEVELS1} (${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}])
507
+ ! FRAME/TRANSPARENT/file=${tfile}_surface.$ext
508
+ FRAME/file=${tfile}_surface.$ext
509
+ !SPAWN ls -l ${tfile}_surface.$ext
510
+ fill ${pal} ${LEVELS2} /title="Surface: ${MODEL_RESOLUTION} - ${exp}: log(${var})" log(${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]);go land
511
+ !${CONTOUR} ${LEVELS2} (log(${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]))
512
+ ! FRAME/TRANSPARENT/file=${tfile}_surface_log.$ext
513
+ FRAME/file=${tfile}_surface_log.$ext
514
+ !SPAWN ls -l ${tfile}_surface_log.$ext
515
+ !SPAWN pwd
516
+ EOF
517
+ cat > ${tfile}_surface_1x1_diff.jnl <<EOF
518
+ ! pyferret -nodisplay -script ferret_1x1.jnl
519
+ use ${ifile1}
520
+ use ${ifile2}
521
+ show data
522
+ CANCEL MODE logo
523
+ SET MEMORY/SIZE=${FERRETMEMSIZE}
524
+ SET VAR/BAD=-9.e+33 ${pvar}
525
+ PPL AXLSZE,0.14,0.14
526
+ PPL LABSET 0.18,0.18,0.18,0.18 ! character heights for labels
527
+ PPL SHASET 0 100 100 100 ! white for 0% LEVEL
528
+ !let pal="/PALETTE=rainbow"
529
+ !let pal="/PALETTE=rain_cmyk"
530
+ !let pal="/PALETTE=no_green_centered"
531
+ let pal="/PALETTE=white_centered"
532
+ let lon="-180:180"
533
+ let lat="-90:90"
534
+ let tim="@AVE"
535
+ let lev="${plev}"
536
+ let var="${facS}${pvar}"
537
+ fill ${pal} /title="Surface: ${MODEL_RESOLUTION} - Diff: ${exp1}-${exp2}: ${var}" ${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]-${var}[d=2,x=${lon},y=${lat},k=${lev},l=${tim}];go land
538
+ !${CONTOUR} (${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]-${var}[d=2,x=${lon},y=${lat},k=${lev},l=${tim}])
539
+ ! FRAME/TRANSPARENT/file=${tfile}_surface_diff.$ext
540
+ FRAME/file=${tfile}_surface_diff.$ext
541
+ !SPAWN ls -l ${tfile}_surface_diff.$ext
542
+ fill ${pal} /title="Surface: ${MODEL_RESOLUTION} - Diff: ${exp1}-${exp2}: log(${var})" log(${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]-${var}[d=2,x=${lon},y=${lat},k=${lev},l=${tim}]);go land
543
+ !${CONTOUR} (log(${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]-${var}[d=2,x=${lon},y=${lat},k=${lev},l=${tim}]))
544
+ ! FRAME/TRANSPARENT/file=${tfile}_surface_log_diff.$ext
545
+ FRAME/file=${tfile}_surface_log_diff.$ext
546
+ !SPAWN ls -l ${tfile}_surface_log_diff.$ext
547
+ !SPAWN pwd
548
+ EOF
549
+ ######## UTLS plots ########
550
+ FERRETMEMSIZE="500"
551
+ cat > ${tfile}_utls_1x1.jnl <<EOF
552
+ ! pyferret -nodisplay -script ferret_1x1.jnl
553
+ use ${pvar}.nc
554
+ show data
555
+ CANCEL MODE logo
556
+ SET MEMORY/SIZE=${FERRETMEMSIZE}
557
+ SET VAR/BAD=-9.e+33 ${pvar}
558
+ PPL AXLSZE,0.14,0.14
559
+ PPL LABSET 0.18,0.18,0.18,0.18 ! character heights for labels
560
+ PPL SHASET 0 100 100 100 ! white for 0% LEVEL
561
+ let pal="/PALETTE=rainbow"
562
+ !let pal="/PALETTE=rain_cmyk"
563
+ !let pal="/PALETTE=no_green_centered"
564
+ !let pal="/PALETTE=white_centered"
565
+ let lon="-180:180"
566
+ let lat="-90:90"
567
+ let tim="@AVE"
568
+ let lev="${ulev}@SUM"
569
+ let var="${facU}${pvar}"
570
+ fill ${pal} ${LEVELS1} /title="UTLS: ${MODEL_RESOLUTION} - ${exp}: ${var}" (${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]);go land
571
+ !${CONTOUR} ${LEVELS1} (${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}])
572
+ ! FRAME/TRANSPARENT/file=${tfile}_utls.$ext
573
+ FRAME/file=${tfile}_utls.$ext
574
+ !SPAWN ls -l ${tfile}_utls.$ext
575
+ fill ${pal} ${LEVELS3} /title="UTLS: ${MODEL_RESOLUTION} - ${exp}: log(${var})" log(${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]);go land
576
+ !${CONTOUR} ${LEVELS3} (log(${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]))
577
+ ! FRAME/TRANSPARENT/file=${tfile}_utls_log.$ext
578
+ FRAME/file=${tfile}_utls_log.$ext
579
+ !SPAWN ls -l ${tfile}_utls_log.$ext
580
+ !SPAWN pwd
581
+ EOF
582
+ cat > ${tfile}_utls_1x1_diff.jnl <<EOF
583
+ ! pyferret -nodisplay -script ferret_1x1.jnl
584
+ use ${ifile1}
585
+ use ${ifile2}
586
+ show data
587
+ CANCEL MODE logo
588
+ SET MEMORY/SIZE=${FERRETMEMSIZE}
589
+ SET VAR/BAD=-9.e+33 ${pvar}
590
+ PPL AXLSZE,0.14,0.14
591
+ PPL LABSET 0.18,0.18,0.18,0.18 ! character heights for labels
592
+ PPL SHASET 0 100 100 100 ! white for 0% LEVEL
593
+ !let pal="/PALETTE=rainbow"
594
+ !let pal="/PALETTE=rain_cmyk"
595
+ !let pal="/PALETTE=no_green_centered"
596
+ let pal="/PALETTE=white_centered"
597
+ let lon="-180:180"
598
+ let lat="-90:90"
599
+ let tim="@AVE"
600
+ let lev="${ulev}@SUM"
601
+ let var="${facU}${pvar}"
602
+ fill ${pal} /title="UTLS: ${MODEL_RESOLUTION} - Diff: ${exp1}-${exp2}: ${var}" ${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]-${var}[d=2,x=${lon},y=${lat},k=${lev},l=${tim}];go land
603
+ !${CONTOUR} (${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]-${var}[d=2,x=${lon},y=${lat},k=${lev},l=${tim}])
604
+ ! FRAME/TRANSPARENT/file=${tfile}_utls_diff.$ext
605
+ FRAME/file=${tfile}_utls_diff.$ext
606
+ !SPAWN ls -l ${tfile}_utls_diff.$ext
607
+ fill ${pal} /title="UTLS: ${MODEL_RESOLUTION} - Diff: ${exp1}-${exp2}: log(${var})" log(${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]-${var}[d=2,x=${lon},y=${lat},k=${lev},l=${tim}]);go land
608
+ !${CONTOUR} (log(${var}[d=1,x=${lon},y=${lat},k=${lev},l=${tim}]-${var}[d=2,x=${lon},y=${lat},k=${lev},l=${tim}]))
609
+ ! FRAME/TRANSPARENT/file=${tfile}_utls_log_diff.$ext
610
+ FRAME/file=${tfile}_utls_log_diff.$ext
611
+ !SPAWN ls -l ${tfile}_utls_log_diff.$ext
612
+ !SPAWN pwd
613
+ EOF
614
+ ######## ########## ########
615
+
616
+ # ferret plots using user provided journal file
617
+ ferret="$SCRIPTS_PATH/pyferret/ferret_${pvar}"
618
+ if [ -f "$ferret.jnl" ]; then
619
+ cp -p $ferret.jnl .
620
+ rm -f ${tfile}_burden.${ext} ${tfile}_burden_log.${ext}
621
+ log "pyferret -nodisplay -script $ferret.jnl ${ifile} ${pvar} ${MODEL_RESOLUTION} ${exp} ${tfile}_burden ${ext}"
622
+ pyferret -nodisplay -script $ferret.jnl ${ifile} ${pvar} ${MODEL_RESOLUTION} ${exp} ${tfile}_burden ${ext}
623
+ else
624
+ # ferret plots for default journal file
625
+ rm -f ${tfile}_burden.${ext} ${tfile}_burden_log.${ext}
626
+ log "pyferret -nodisplay -script ${tfile}_burden_1x1.jnl"
627
+ pyferret -nodisplay -script ${tfile}_burden_1x1.jnl
628
+
629
+ rm -f ${tfile}_zonal.${ext} ${tfile}_zonal_log.${ext}
630
+ log "pyferret -nodisplay -script ${tfile}_zonal_1x1.jnl"
631
+ pyferret -nodisplay -script ${tfile}_zonal_1x1.jnl
632
+
633
+ rm -f ${tfile}_meridional.${ext} ${tfile}_meridional_log.${ext}
634
+ log "pyferret -nodisplay -script ${tfile}_meridional_1x1.jnl"
635
+ pyferret -nodisplay -script ${tfile}_meridional_1x1.jnl
636
+
637
+ rm -f ${tfile}_surface.${ext} ${tfile}_surface_log.${ext}
638
+ log "pyferret -nodisplay -script ${tfile}_surface_1x1.jnl"
639
+ pyferret -nodisplay -script ${tfile}_surface_1x1.jnl
640
+
641
+ rm -f ${tfile}_utls.${ext} ${tfile}_utls_log.${ext}
642
+ log "pyferret -nodisplay -script ${tfile}_utls_1x1.jnl"
643
+ pyferret -nodisplay -script ${tfile}_utls_1x1.jnl
644
+ fi
645
+
646
+ if [ "${exp}" == "${exp1}" ]; then
647
+ rm -f ${tfile}_burden_diff.${ext} ${tfile}_burden_log_diff.${ext}
648
+ log "pyferret -nodisplay -script ${tfile}_burden_1x1_diff.jnl"
649
+ pyferret -nodisplay -script ${tfile}_burden_1x1_diff.jnl
650
+
651
+ rm -f ${tfile}_zonal_diff.${ext} ${tfile}_zonal_log_diff.${ext}
652
+ log "pyferret -nodisplay -script ${tfile}_zonal_1x1_diff.jnl"
653
+ pyferret -nodisplay -script ${tfile}_zonal_1x1_diff.jnl
654
+
655
+ rm -f ${tfile}_meridional_diff.${ext} ${tfile}_meridional_log_diff.${ext}
656
+ log "pyferret -nodisplay -script ${tfile}_meridional_1x1_diff.jnl"
657
+ pyferret -nodisplay -script ${tfile}_meridional_1x1_diff.jnl
658
+
659
+ rm -f ${tfile}_surface_diff.${ext} ${tfile}_surface_log_diff.${ext}
660
+ log "pyferret -nodisplay -script ${tfile}_surface_1x1_diff.jnl"
661
+ pyferret -nodisplay -script ${tfile}_surface_1x1_diff.jnl
662
+
663
+ rm -f ${tfile}_utls_diff.${ext} ${tfile}_utls_log_diff.${ext}
664
+ log "pyferret -nodisplay -script ${tfile}_utls_1x1_diff.jnl"
665
+ pyferret -nodisplay -script ${tfile}_utls_1x1_diff.jnl
666
+
667
+ # files=("${tfile}" "${tfile}_log" "${tfile}_diff" "${tfile}_log_diff")
668
+ files=("${tfile}_surface" "${tfile}_surface_log" "${tfile}_surface_diff" "${tfile}_surface_log_diff" \
669
+ "${tfile}_burden" "${tfile}_burden_log" "${tfile}_burden_diff" "${tfile}_burden_log_diff" \
670
+ "${tfile}_meridional" "${tfile}_meridional_log" "${tfile}_meridional_diff" "${tfile}_meridional_log_diff" \
671
+ "${tfile}_zonal" "${tfile}_zonal_log" "${tfile}_zonal_diff" "${tfile}_zonal_log_diff" \
672
+ "${tfile}_utls" "${tfile}_utls_log" "${tfile}_utls_diff" "${tfile}_utls_log_diff" \
673
+ )
674
+ else
675
+ # files=("${tfile}" "${tfile}_log")
676
+ # files=("${tfile}" "${tfile}_log" "${tfile}_zonal" "${tfile}_zonal_log" "${tfile}_meridional" "${tfile}_meridional_log" "${tfile}_surface" "${tfile}_surface_log" "${tfile}_utls" "${tfile}_utls_log")
677
+ files=("${tfile}_surface" "${tfile}_surface_log" \
678
+ "${tfile}_burden" "${tfile}_burden_log" \
679
+ "${tfile}_meridional" "${tfile}_meridional_log" \
680
+ "${tfile}_zonal" "${tfile}_zonal_log" \
681
+ "${tfile}_utls" "${tfile}_utls_log" \
682
+ )
683
+ fi
684
+
685
+ for file in "${files[@]}"; do
686
+ file=$file.$ext
687
+ if [ -f "${file}" ]; then
688
+ log "success: ${file} generated"
689
+ ls -lh "${file}"
690
+ echo "${tpath}/${file}" >> "$texPlotsfile"
691
+ if [ "${myOS}" == "Darwin1" ] && [ "${pvar}" == "AW" ] ; then
692
+ open "${file}"
693
+ fi
694
+ else
695
+ log "error: ${file} not generated"
696
+ fi
697
+ done
698
+ else # ifile
699
+ log "error: ${ifile} not found!"
700
+ fi # ifile
701
+
702
+ done # pvar
703
+ done # ncvar
704
+ done # name
705
+ done # exps
706
+ log "----------------------------------------------------------------------------------------"
707
+ log "${texPlotsfile}"
708
+ cat ${texPlotsfile}
709
+ log "----------------------------------------------------------------------------------------"
710
+ tQLTYPE=$(echo "$QLTYPE" | sed 's/_/\\_/g')
711
+ rm -f ${texFile}
712
+ cat > ${texFile} <<EOF
713
+ %===============================================================================
714
+ \subsection{${tQLTYPE} -- ${mDate} (${TIME_RESOLUTION})}
715
+ EOF
716
+ pfiles="`cat ${texPlotsfile}`"
717
+ #log "${pfiles}"
718
+ log "----------------------------------------------------------------------------------------"
719
+ log "sorted file list:"
720
+ sorted_files="${hpath}/sorted_files_${script_name}.list"
721
+ touch ${sorted_files}
722
+ log "sort_files "${QLTYPE}" "${exp1}" "${exp2}" "$texPlotsfile" "${ext}" "${hpath}""
723
+ sort_files "${QLTYPE}" "${exp1}" "${exp2}" "$texPlotsfile" "${ext}" "${hpath}"
724
+ #cp ${texPlotsfile} ${sorted_files} # test / remove
725
+ tfiles="`cat ${sorted_files}`"
726
+ log "${tfiles}"
727
+ log "----------------------------------------------------------------------------------------"
728
+
729
+ for plot in ${tfiles} ; do
730
+
731
+ file_name=${plot}
732
+ # Extract the file name without directory and extension
733
+ file_name="${file_name##*/}" # Remove directory path
734
+ file_name="${file_name%.*}" # Remove extension
735
+
736
+ # Split the file name into parts
737
+ IFS="_" read -ra parts <<< "$file_name"
738
+
739
+ pqlc="${parts[5]}"
740
+ pnml="${parts[6]}"
741
+ # files without level type (_pl _ml _sfc)
742
+ #pvar2="${parts[7]}"
743
+ #pexp="${parts[8]}"
744
+ #ptyp="${parts[9]}"
745
+ #pdif="${parts[11]}"
746
+ # files with level type (_pl _ml _sfc)
747
+ tlev="${parts[7]}"
748
+ pvar2="${parts[8]}"
749
+ pexp="${parts[9]}"
750
+ ptyp="${parts[10]}"
751
+ plog="${parts[11]}"
752
+ pdif="${parts[12]}"
753
+ if [[ "$pvar2" == *"-"* ]]; then
754
+ # echo "INFO: variable name '$pvar2' contains dash, display as underscore."
755
+ pvar=$pvar2
756
+ # pvar=$(echo "$pvar2" | sed 's/-/\_/g')
757
+ pvar3=$(echo "$pvar2" | sed 's/-/\\_/g')
758
+ else
759
+ pvar=$pvar2
760
+ pvar3=$pvar2
761
+ fi
762
+ tvar="${ptyp}: ${pvar3} of ${exp1} vs ${exp2}"
763
+ for part in "${parts[@]}"; do
764
+ if [ "${plog}" == "log" ] ; then
765
+ tvar="${ptyp}: ${pvar3} of ${exp1} vs ${exp2} (log)"
766
+ fi
767
+ if [ "${plog}" == "diff" ]; then
768
+ tvar="${ptyp}: ${pvar3} | diff of ${exp1}-${exp2}"
769
+ fi
770
+ if [ "${pdif}" == "diff" ]; then
771
+ tvar="${ptyp}: ${pvar3} | diff of ${exp1}-${exp2} (log)"
772
+ fi
773
+ done
774
+
775
+ GO="no"
776
+ if [ "${tlev}" == "sfc" ] && [ "${ptyp}" == "surface" ] ; then
777
+ GO="GO"
778
+ fi
779
+ if [ "${tlev}" != "sfc" ] ; then
780
+ GO="GO"
781
+ fi
782
+
783
+ if [ "${GO}" == "GO" ] && [ "${pexp}" == "${exp1}" ] && [ "${plog}" == "" ] ; then
784
+ plot1="$PLOTS_DIRECTORY/${exp1}/${TEAM_PREFIX}_${exp1}-${exp2}_${mDate}_${QLTYPE}_${pnml}_${tlev}_${pvar}_${exp1}_${ptyp}.${ext}"
785
+ plot2="$PLOTS_DIRECTORY/${exp2}/${TEAM_PREFIX}_${exp1}-${exp2}_${mDate}_${QLTYPE}_${pnml}_${tlev}_${pvar}_${exp2}_${ptyp}.${ext}"
786
+ plot3="$PLOTS_DIRECTORY/${exp1}/${TEAM_PREFIX}_${exp1}-${exp2}_${mDate}_${QLTYPE}_${pnml}_${tlev}_${pvar}_${exp1}_${ptyp}_diff.${ext}"
787
+ plot4="$PLOTS_DIRECTORY/${exp1}/${TEAM_PREFIX}_${exp1}-${exp2}_${mDate}_${QLTYPE}_${pnml}_${tlev}_${pvar}_${exp1}_${ptyp}_log.${ext}"
788
+ plot5="$PLOTS_DIRECTORY/${exp2}/${TEAM_PREFIX}_${exp1}-${exp2}_${mDate}_${QLTYPE}_${pnml}_${tlev}_${pvar}_${exp2}_${ptyp}_log.${ext}"
789
+ plot6="$PLOTS_DIRECTORY/${exp1}/${TEAM_PREFIX}_${exp1}-${exp2}_${mDate}_${QLTYPE}_${pnml}_${tlev}_${pvar}_${exp1}_${ptyp}_log_diff.${ext}"
790
+ cat >> ${texFile} <<EOF
791
+ %===============================================================================
792
+ \frame{
793
+ \frametitle{${MODEL_RESOLUTION} -- ${tvar} (${tlev})}
794
+ \vspace{0mm}
795
+ \centering
796
+ \begin{minipage}[t]{0.89\textwidth}
797
+ \vspace{-2mm}
798
+ \begin{figure}[H]
799
+ \centering
800
+ \includegraphics[angle=0,clip=true, trim= 2mm 4mm 3mm 8mm, height=0.32\textheight, width=0.32\textwidth]{${plot1}}
801
+ \includegraphics[angle=0,clip=true, trim=27.5mm 4mm 3mm 8mm, height=0.32\textheight, width=0.32\textwidth]{${plot2}}
802
+ \includegraphics[angle=0,clip=true, trim=27.5mm 4mm 0mm 8mm, height=0.32\textheight, width=0.32\textwidth]{${plot3}}
803
+
804
+ \includegraphics[angle=0,clip=true, trim= 2mm 4mm 3mm 28mm, height=0.32\textheight, width=0.32\textwidth]{${plot4}}
805
+ \includegraphics[angle=0,clip=true, trim=27.5mm 4mm 3mm 28mm, height=0.32\textheight, width=0.32\textwidth]{${plot5}}
806
+ \includegraphics[angle=0,clip=true, trim=27.5mm 4mm 0mm 28mm, height=0.32\textheight, width=0.32\textwidth]{${plot6}}
807
+ % \vspace{-10mm}\caption{. }
808
+ \end{figure}
809
+ \end{minipage}
810
+ }
811
+ %===============================================================================
812
+ EOF
813
+ fi
814
+ done # plot
815
+ log "----------------------------------------------------------------------------------------"
816
+ log "${texFile}"
817
+ cat ${texFile}
818
+ log "----------------------------------------------------------------------------------------"
819
+ log "$ipath"
820
+ log "$tpath"
821
+ log "----------------------------------------------------------------------------------------"
822
+ log "End ${SCRIPT} at `date`"
823
+ log "________________________________________________________________________________________"
824
+
825
+ exit 0