我是靠谱客的博主 酷酷樱桃,最近开发中收集的这篇文章主要介绍2021-10-27提取FVCOM开边界点elems前言一、哪个toolbox函数需要用到obc_elems?二、MATLAB函数代码总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 前言
  • 一、哪个toolbox函数需要用到obc_elems?
  • 二、MATLAB函数代码
  • 总结


前言

FVCOM的toolbox没有找到提取开边界elems的函数,但有提取nodes的函数,在read_FVCOM_obc.m的模板上稍加更改,利用水深文件grd.dat来获得elems(元素?三角形网格的区域),在制作开边界温盐输入文件时,寻找开边界最深水深的时候需要用到Mobj.read_obc_elems,所以手动添加了这个函数。


一、哪个toolbox函数需要用到obc_elems?

get_HYCOM_tsobc.m
在这里插入图片描述

Mobj.read_obc_nodes有函数能提取,但elems并没有找到,也许是我没找到(请找到的朋友告诉我一声),所以下文我分享一下我自己改的提取elems的函数。

二、MATLAB函数代码

function Mobj = read_obc_elems(Mobj,grdfile,nobc)
% Read fvcom grd file and achieve cell

% DESCRIPTION:
%    Read FVCOM open boundary cell file.
%
% INPUT:
%   Mobj : existing mesh object into which obc data is added
%   grdfile : fvcom grd.dat file
%   nobc : number of obc
% OUTPUT:
%    Mobj.read_obc_elems : open boundary  cell array .
%
%
% EXAMPLE USAGE
%    Mobj = read_fvcom_obc(Mobj,'grd.dat')

%==========================================================================
subname = 'read_obc_elems';
global ftbverbose
if ftbverbose
    fprintf('nbegin : %sn', subname)
end

have_strings = false;

%--------------------------------------------------------------------------
% read in the FVCOM open boundary file
%--------------------------------------------------------------------------
fid = fopen(grdfile,'r');
assert(fid >= 0, 'file: %s does not exist.', grdfile)%

reading = true;

while reading
    lin = fgetl(fid);%
    if lin ~= -1 % EOF is -1
        lin = strtrim(lin);%
            case 'No'
                tmp = regexp(lin, ' = ', 'split');%
                nObcNodes = str2double(tmp(end));%
                clear tmp
                read_obc_elems = cell(1, 1);%
        end
    else
        reading = false;
    end
end
fclose(fid);

if nObcNodes > 0
    have_strings = true;
    fprintf('nObcNodes = %dn', nObcNodes)
end

% We have to assume we have only a single open boundary as the _obc.dat
% file has no way of indicating how many open boundaries there are.
fid = fopen(grdfile,'r');
% S = textscan(fid, '%f%f%f%*s%*s%[^nr]', 'HeaderLines', 2, ...
%     'Delimiter', {'t',' '}, 'MultipleDelimsAsOne', true);
S = textscan(fid, '%f%f%f%f%[^nr]', 'HeaderLines', 2, ...
    'Delimiter', {'t',' '}, 'MultipleDelimsAsOne', true);
%Read formatted data from text file or string.
fclose(fid);
%%

elems = [S{1,2}(1:nobc);S{1,3}(1:nobc);S{1,4}(1:nobc)];
elems1 = unique(elems);
read_obc_elems{1} = elems1;
%%
if have_strings
    Mobj.read_obc_elems = read_obc_elems;
end

if ftbverbose
    fprintf('nend   : %sn', subname)
end

总结

例如:以上就是今天要讲的内容,简单地改了一下现有的函数。

最后

以上就是酷酷樱桃为你收集整理的2021-10-27提取FVCOM开边界点elems前言一、哪个toolbox函数需要用到obc_elems?二、MATLAB函数代码总结的全部内容,希望文章能够帮你解决2021-10-27提取FVCOM开边界点elems前言一、哪个toolbox函数需要用到obc_elems?二、MATLAB函数代码总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(75)

评论列表共有 0 条评论

立即
投稿
返回
顶部