| 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 | 
  | 
  | 
 |