probes - UK-FVCOM-Usergroup/uk-fvcom GitHub Wiki

Probes

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

Main namelist

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

    &NML_PROBES
     PROBES_ON     = T
     PROBES_NUMBER = 2,
     PROBES_FILE   = 'irish_sea_v20_probes.nml'
    /

Probes namelist

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

    &NML_PROBE
     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)"
    /

    &NML_PROBE
     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).

Available output variables

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

|Probe variable name|Description|Main model netCDF variable name equivalent|1D/2D| |el|Surface elevation (metres)|zeta|1D| |t1|Temperature (Celsius)|temp|2D| |s1|Salinity (PSU)|salinity|2D| |rho1|Density (kg m-3 )|-|2D| |u|u-velocity component (m s-1 )|u|2D| |v|v-velocity component (m s-1 )|v|2D| |ua|Depth-averaged u-velocity component (m s-1 )|-|1D| |va|Depth-averaged v-velocity component (m s-1 )|-|1D| |w|Vertical velocity (m s-1 )|omega|2D| |ww|Vertical velocity on sigma levels (m s-1 )|-|2D| |q2|Turbulent kinetic energy (TKE) squared (m2 s-2 )|q2|2D| |l|Length scale (m)|l|2D| |q2l|q2 scaled by the length scale (m3 s-2 )|q2l|2D| |km|Turbulent vertical diffusivity for momentum (m2 s-1 )|km|2D| |kh|Turbulent vertical diffusivity for scalars (m2 s-1 )|kh|2D| |kq|Turbulent Eddy Viscosity For q2/q2l (m2 s-1 )|kq|2D| |aice|Concentration of ice|?|?| |vice|Volume per unit area of ice (m - in mod_ice.F at line 120, but a volume as metres?...)|?|?| |uice2|Ice u-velocity component (m s-1 ) (?)|?|?| |vice2|Ice v-velocity component (m s-1 ) (?)|?|?| |csed|Suspended sediment concentration (g L-1 ) (?)|coarse_sand?|1D?|

Example output

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

     DATA FOLLOWS:
     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
        ...

MATLAB

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);
    else
        error('Unknown native coordinate type')
    end

    % 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));
        end
        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)', ...
            };
    end
⚠️ **GitHub.com Fallback** ⚠️