FVCOM has the ability for you to specify locations at which you would like to extract variables as time series.

The main model namelist has the following section to control the probes.

     PROBES_ON     = T
     PROBES_FILE   = 'irish_sea_v20_probes.nml'

The PROBES_FILE is a separate namelist in the input directory, whose format is:

     PROBE_INTERVAL = "seconds=300.0",
     PROBE_LOCATION = 6724,
     PROBE_TITLE = "L4_el.dat",
     PROBE_DESCRIPTION = "Surface elevation at L4",
     PROBE_VARIABLE = "el",
     PROBE_VAR_NAME = "Surface elevation (m)"

     PROBE_INTERVAL = "seconds=300.0",
     PROBE_LOCATION = 6724,
     PROBE_TITLE = "L4_t1.dat",
     PROBE_LEVELS = 1 20,
     PROBE_DESCRIPTION = "Temperature at L4",
     PROBE_VARIABLE = "t1",
     PROBE_VAR_NAME = "Temperature (Celsius)"

This configuration has two probes (PROBES_NUMBER = 2 in the main namelist), one outputting surface elevation every five minutes, the other exporting temperature at all vertical levels every five minutes. The number of probes in the main model name list (in PROBES_NUMBER) must match the number of probes in the probes namelist (PROBES_FILE).

There is a relatively limited number of variables which can be exported:

Probe variable nameDescriptionMain model netCDF variable name equivalent1D/2D
elSurface elevation (metres)zeta1D
t1Temperature (Celsius)temp2D
s1Salinity (PSU)salinity2D
rho1Density (kg m-3 )-2D
uu-velocity component (m s-1 )u2D
vv-velocity component (m s-1 )v2D
uaDepth-averaged u-velocity component (m s-1 )-1D
vaDepth-averaged v-velocity component (m s-1 )-1D
wVertical velocity (m s-1 )omega2D
wwVertical velocity on sigma levels (m s-1 )-2D
q2Turbulent kinetic energy (TKE) squared (m2 s-2 )q22D
lLength scale (m)l2D
q2lq2 scaled by the length scale (m3 s-2 )q2l2D
kmTurbulent vertical diffusivity for momentum (m2 s-1 )km2D
khTurbulent vertical diffusivity for scalars (m2 s-1 )kh2D
kqTurbulent Eddy Viscosity For q2/q2l (m2 s-1 )kq2D
aiceConcentration of ice??
viceVolume per unit area of ice (m - in mod_ice.F at line 120, but a volume as metres?…)??
uice2Ice u-velocity component (m s-1 ) (?)??
vice2Ice v-velocity component (m s-1 ) (?)??
csedSuspended sediment concentration (g L-1 ) (?)coarse_sand?1D?

A typical output file for a 1D variable (e.g. el) might be:

     Surface elevation at L4
     Surface elevation (m)

     !========MODEL START DATE==========
     !    Day #    :                 56699
     ! MicroSecond #:           40058900000
     ! (Date Time=2014-02-11T11:07:38.900000Z)

              K1            K2
              -1             -1
          X(M)          Y(M)            DEPTH(M)
      413731.906    5567297.000         52.880
          LON           LAT               DEPTH(M)
          -4.210         50.252         52.880

     Time(days)    Data...
        55593.00000   -1.458
        55593.00347   -1.380
        55593.00694   -1.299
        55593.01042   -1.216
        55593.01389   -1.131
        55593.01736   -1.046
        55593.02083   -0.960
        55593.02431   -0.874
        55593.02778   -0.789

The MATLAB fvcom-toolbox can automatically write a probes namelist. The following code example creates a probes file to extract both 2 and 3D variables at a number of sites.

    Mobj.Positions % contains x, y coordinate pairs for the probe extraction.
    Mobj.Names =   % contains list of site names (must match the Positions length)
    % Find grid nodes within a threshold distance of the specified locations.
    if strcmpi(Mobj.nativeCoords, 'cartesian')
        Mobj = add_stations_list(Mobj, Mobj.Positions, Mobj.Names, 4000);
    elseif strcmpi(Mobj.nativeCoords, 'spherical')
        Mobj = add_stations_list(Mobj, Mobj.Positions, Mobj.Names, 0.01);
        error('Unknown native coordinate type')
    % Make the required struct for the probes function.
    for i = 1:length(Mobj.stations)
        sname = Mobj.stations{i};
        % Clean up illegal characters from the names.
        sname = regexprep(regexprep(regexprep(sname{6}, __, ''), '\.', '_'), '-', '_');
        if ~isnan(str2double(sname))
            sname = sprintf('probe_%d', str2double(sname));
        Mobj.probes.(sname).file = sprintf('%s.dat', regexprep(cell2mat(Mobj.stations{i}(6)), __, ''));
        Mobj.probes.(sname).locations = regexprep(cell2mat(Mobj.stations{i}(6)), __, '');
        Mobj.probes.(sname).node = cell2mat(Mobj.stations{i}(4));
        Mobj.probes.(sname).elem = cell2mat(Mobj.stations{i}(7));
        Mobj.probes.(sname).levels = [1, length(Mobj.siglay)];
        Mobj.probes.(sname).description = {...
            sprintf('Surface elevation at %s', sname), ...
            sprintf('u-velocity component at %s', sname), ...
            sprintf('v-velocity component at %s', sname), ...
            sprintf('Vertical velocity at %s', sname), ...
            sprintf('Vertical velocity on sigma levels at %s', sname), ...
            sprintf('Density at %s', sname), ...
            sprintf('Temperature at %s', sname), ...
            sprintf('Salinity at %s', sname), ...
        Mobj.probes.(sname).variable = {'el', 'u', 'v', 'ww', 'w', 'rho1', 't1', 's1'};
        Mobj.probes.(sname).longname = {'Surface elevation (m)', ...
            'u-velocity (ms^{-1})', ...
            'v-velocity (ms^{-1})',...
            'Vertical velocity (ms^{-1})', ...
            'Vertical velocity on sigma levels (ms^{-1})', ...
            'Density (kg/m^{3})', ...
            'Temperature (Celsius)', ...
            'Salinity (PSU)', ...
  • configuration/probes.txt
  • Last modified: 2018/04/10 16:18
  • by pica