| 1 |
gforget |
1.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 |
|
|
|