1 |
\section{Profiles: transect and float ocean sampling of MITgcm |
2 |
\label{sectionprofiles}} |
3 |
\begin{rawhtml} |
4 |
<!-- CMIREDIR:profiles: --> |
5 |
\end{rawhtml} |
6 |
|
7 |
Author: Gael Forget |
8 |
|
9 |
\bigskip |
10 |
|
11 |
The purpose of pkg/profiles is to allow sampling of MITgcm runs according to a chosen pathway (after a ship or a drifter, along altimeter tracks, etc.), typically leading to easy model-data comparisons. Given input files that contain positions and dates, pkg/profiles will interpolate the model trajectory at the observed location. In particular, pkg/profiles can be used to do model-data comparison online and formulate a least-squares problem (ECCO application). |
12 |
|
13 |
\bigskip |
14 |
|
15 |
pkg/profiles is associated with three CPP keys: \\ |
16 |
(k1) ALLOW\_PROFILES \\ |
17 |
(k2) ALLOW\_PROFILES\_GENERICGRID \\ |
18 |
(k3) ALLOW\_PROFILES\_CONTRIBUTION \\ |
19 |
k1 switches the package on. By default, pkg/profiles assumes a regular lat-long grid. For other grids such as the cubed sphere, k2 and pre-processing (see below) are necessary. k3 switches the least-squares application on (pkg/ecco needed). pkg/profiles requires needs pkg/cal and netcdf libraries. |
20 |
|
21 |
\bigskip |
22 |
|
23 |
The namelist (data.profiles) is illustrated in table \ref{PkgProfNamelist}. This example includes two input netcdf files name (ARGOifremer\_r8.nc and XBT\_v5.nc are to be provided) and {\it cost function} multipliers (for least-squares only). The first index is a file number and the second index (in mult* only) is a variable number. By convention, the variable number is an integer ranging 1 to 6: temperature, salinity, zonal velocity, meridional velocity, sea surface height anomaly, and passive tracer. |
24 |
|
25 |
\bigskip |
26 |
|
27 |
The input file structure is illustrated in table \ref{PkgProfInput}. To create such files, one can use the netcdf\_ecco\_create.m matlab script, which can be checked out of \\ |
28 |
MITgcm\_contrib/gael/profilesMatlabProcessing/ \\ |
29 |
along with a full suite of matlab scripts associated with pkg/profiles. At run time, each file is scanned to determine which variables are included; these will be interpolated. The (final) output file structure is similar but with interpolated model values in prof\_T etc., and it contains model mask variables (e.g. prof\_Tmask). The very model output consists of one binary (or netcdf) file per processor. The final netcdf output is to be built from those using netcdf\_ecco\_recompose.m (offline). |
30 |
|
31 |
\bigskip |
32 |
|
33 |
When the k2 option is used (e.g. for cubed sphere runs), the input file is to be completed with interpolation grid points and coefficients computed offline using netcdf\_ecco\_GenericgridMain.m. Typically, you would first provide the standard namelist and files. After detecting that interpolation information is missing, the model will generate special grid files (profilesXCincl1PointOverlap* etc.) and then stop. You then want to run netcdf\_ecco\_GenericgridMain.m using the special grid files. {\it This operation could eventually be inlined.} |
34 |
|
35 |
\bigskip |
36 |
|
37 |
\begin{table}[htbp] |
38 |
\begin{tabbing} |
39 |
\#\\ |
40 |
\# ******************\\ |
41 |
\# PROFILES cost function\\ |
42 |
\# ****************** \\ |
43 |
\&PROFILES\_NML\\ |
44 |
\#\\ |
45 |
profilesfiles(1)= 'ARGOifremer\_r8',\\ |
46 |
mult\_profiles(1,1) = 1.,\\ |
47 |
mult\_profiles(1,2) = 1.,\\ |
48 |
profilesfiles(2)= 'XBT\_v5',\\ |
49 |
mult\_profiles(2,1) = 1.,\\ |
50 |
\#\\ |
51 |
/\\ |
52 |
\end{tabbing} |
53 |
\caption{pkg/profiles: data.profiles example.} |
54 |
\label{PkgProfNamelist} |
55 |
\end{table} |
56 |
|
57 |
|
58 |
|
59 |
\begin{table}[phtb] |
60 |
\begin{tabbing} |
61 |
netcdf XBT\_v5 \{\\ |
62 |
dimensions:\\ |
63 |
\hspace{0.1cm} \= i\=PROF = 278026 ;\\ |
64 |
\> iDEPTH = 55 ;\\ |
65 |
\> lTXT = 30 ;\\ |
66 |
variables:\\ |
67 |
\> double depth(iDEPTH) ;\\ |
68 |
\> \> depth:units = "meters" ;\\ |
69 |
\> double prof\_YYYYMMDD(iPROF) ;\\ |
70 |
\> \> prof\_YYYYMMDD:missing\_value = -9999. ;\\ |
71 |
\> \> prof\_YYYYMMDD:long\_name = "year (4 digits), month (2 digits), day (2 digits)" ;\\ |
72 |
\> double prof\_HHMMSS(iPROF) ;\\ |
73 |
\> \> prof\_HHMMSS:missing\_value = -9999. ;\\ |
74 |
\> \> prof\_HHMMSS:long\_name = "hour (2 digits), minute (2 digits), seconde (2 digits)" ;\\ |
75 |
\> double prof\_lon(iPROF) ;\\ |
76 |
\> \> prof\_lon:units = "(degree E)" ;\\ |
77 |
\> \> prof\_lon:missing\_value = -9999. ;\\ |
78 |
\> double prof\_lat(iPROF) ;\\ |
79 |
\> \> prof\_lat:units = "(degree N)" ;\\ |
80 |
\> \> prof\_lat:missing\_value = -9999. ;\\ |
81 |
\> char prof\_descr(iPROF, lTXT) ;\\ |
82 |
\> \> prof\_descr:long\_name = "profile description" ;\\ |
83 |
\> double prof\_T(iPROF, iDEPTH) ;\\ |
84 |
\> \> prof\_T:long\_name = "potential temperature" ;\\ |
85 |
\> \> prof\_T:units = "degree Celsius" ;\\ |
86 |
\> \> prof\_T:missing\_value = -9999. ;\\ |
87 |
\> double prof\_Tweight(iPROF, iDEPTH) ;\\ |
88 |
\> \> prof\_Tweight:long\_name = "weights" ;\\ |
89 |
\> \> prof\_Tweight:units = "(degree Celsius)\^-2" ;\\ |
90 |
\> \> prof\_Tweight:missing\_value = -9999. ;\\ |
91 |
\}\\ |
92 |
\end{tabbing} |
93 |
\caption{pkg/profiles: input file structure as would be shown by "ncdump -h ARGOifremer\_r8.nc".} |
94 |
\label{PkgProfInput} |
95 |
\end{table} |
96 |
|