【三系波浪能转换器】计算浸没式圆柱形三系波浪能转换器的发电量和平准化能量成本(Matlab代码实现)

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

  • 计算浸没式圆柱形三系波浪能转换器的发电量和平准化能量成本涉及多个因素,包括波浪资源、装置设计、转换效率等。以下是一些常见的方法和指标,可用于计算和评估浸没式圆柱形三系波浪能转换器的发电量和平准化能量成本:

    1. 发电量计算:

      • 波浪资源评估:通过测量或模拟波浪数据,确定波浪的频率、振幅和能量密度等参数。

      • 转换效率评估:根据装置设计和性能参数,估计转换器从波浪能量中提取的能量比例。

      • 发电量计算:将波浪资源和转换效率结合起来,计算转换器的年发电量。这可以通过将波浪能量密度与转换效率相乘,并考虑装置的运行时间和可利用性来实现。

    2. 平准化能量成本计算:

      • 投资成本评估:考虑转换器的设计、制造和安装成本,以及与之相关的基础设施和电网连接成本。

      • 运维成本评估:考虑转换器的维护、修理和监控成本,以及与之相关的人力和资源成本。

      • 折旧和财务成本评估:考虑转换器的寿命和折旧,以及与之相关的财务成本,如利息和税收。

      • 平准化能量成本计算:将投资成本、运维成本和财务成本结合起来,除以转换器的年发电量,计算单位能量的平准化成本。

    需要注意的是,具体的计算方法和参数取决于具体的转换器设计和运行条件。因此,建议参考相关的研究论文、技术报告或专业文献,以获取更详细和准确的计算方法和数据。此外,与该领域的专业人士进行讨论和咨询也是获取准确信息的好途径。

📚2 运行结果

部分代码:

%% Code is written by N. Y. Sergiienko
% University of Adelaide

%% 20/11/2019 Shape optimisation
% Shape: cylinder
% Number of buoys: 1 buoy
% Fitness function: power
% Sea site: Albany
% Hydrodynamics: analytical based on Linton (1991)
% Model: spectral domain

clear;
clc;
close all;

opts = optimset('Diagnostics','off', 'Display','off');

load Albany_table

% Number of sea states
N_ss = length(Hs_table);

%% Cylinder parameters to be optimised
a   = 5;                            % Acceptable range = 1 - 20 m
H   = 5;                            % Acceptable range = 1 - 30 m
alpha = deg2rad(45);                % Acceptable range = 10-80 deg = 0.1745 - 1.3963 rad
alphaAP = deg2rad(45);              % Acceptable range = 10-80 deg = 0.1745 - 1.3963 rad
Kpto_table = 2e5*ones(N_ss, 1);     % Acceptable range = 1e3 - 1e8
Bpto_table = 1.5e5*ones(N_ss, 1);   % Acceptable range = 1e3 - 1e8

%%
h   = 50;       % water depth
ds  = 2 + H/2;  % submergence depth (from water level to the buoy centre)
rho = 1025;     % water density
g   = 9.81;     % gravitational acceleration
V = pi*a^2*H;   % volume
m = 0.5*V*rho;    % mass
I3 = eye(3);

% Buoyancy force
Fb = (rho*V - m)*g;
Fbuoy = [0 0 Fb 0 0]';

% Mass matrix
Iz = m*a^2/2;
Ix = 1/12*m*(3*a^2+H^2);
Iy = Ix;
M = diag([m m m Ix Iy Iz]);

% Drag coefficients
Cx = 1;
Cy = 1;
Cz = -0.12*(H/a) + 1.2; % Took data from AWTEC (2016) and did a linear fit - matches well with other literature
Cxz = 0.2;
Cyz = 0.2;

Cd = diag([Cx Cy Cz Cxz Cyz 0]);

Ax = H*2*a;
Ay = Ax;
Az = pi*a^2;

D = 2*a;

Ad = diag([Ax Ay Az D^4*D D^4*D D^4*D]);

%% Hydrodynamic parameters
numFreqs    = 50;
numApprox   = 50;
w_min       = 0.1;
w_max       = 2.5;

w_array = linspace(w_min, w_max, numFreqs);

A = zeros(6,6,numFreqs);
B = zeros(6,6,numFreqs);
fexc = zeros(6,numFreqs);

for count_w = 1:length(w_array)
    
    w = w_array(count_w);
    
    % Hydrodynamic parameters of a submerged sphere in finite depth
    k = fsolve(@(x)w^2-g*x*tanh(x*h), w^2/g*sqrt(coth(w^2/g*h)), opts);
    
    % Hydrodynamic parameters of a submerged cylinder in finite depth
   [a11, a33, a55, a51, b11, b33, b55, b51, fx, fz, My] = submergedCylinder(a, H, h, ds, k, rho, w, numApprox);

   % Excitation force
   fexc(:,count_w) = [fx; 0; fz; 0; My; 0];
   
   % Added mass matrix
   A(:,:,count_w) = ...
            [a11    0       0       0       a51     0;
             0      a11     0       a51     0       0;
             0      0       a33     0       0       0;
             0      a51     0       a55     0       0;
             a51    0       0       0       a55     0;
             0      0       0       0       0       0];     
   % Damping matrix
   B(:,:,count_w) = ...
             [b11    0       0       0       b51     0;
             0      b11     0       b51     0       0;
             0      0       b33     0       0       0;
             0      b51     0       b55     0       0;
             b51    0       0       0       b55     0;
             0      0       0       0       0       0];
                 
end

%% Interpolate data for 300 points
numFreqs_interp = 300;
A_interp    = zeros(6,6,numFreqs_interp);
B_interp    = zeros(6,6,numFreqs_interp);
fexc_interp = zeros(6,numFreqs_interp);

w_interp = linspace(w_min, w_max, numFreqs_interp)';

for mode_i = 1:6
    for mode_j = 1:6
        A_interp(mode_i, mode_j, :) = interp1(w_array, squeeze(A(mode_i, mode_j,:)), w_interp);
        B_interp(mode_i, mode_j, :) = interp1(w_array, squeeze(B(mode_i, mode_j,:)), w_interp);
    end
    fexc_interp(mode_i, :) = interp1(w_array, fexc(mode_i, :), w_interp);
end

%% WEC model
% Linearised model of the three-tether WEC (from Scruggs)
if tan(alphaAP) > a/(H/2)
    bAbs = a/sin(alphaAP);
else
    bAbs = H/2/cos(alphaAP);
end

L0 = (h - ds - bAbs*cos(alphaAP))/cos(alpha);

% Unit vectors with alpha
es01 = [-sin(alpha); 0; cos(alpha)];
es02 = [sin(alpha)/2;  sqrt(3)/2*sin(alpha); cos(alpha)];
es03 = [sin(alpha)/2; -sqrt(3)/2*sin(alpha); cos(alpha)];

% Unit vectors with alphaAP
es01AP = [-sin(alphaAP); 0; cos(alphaAP)];
es02AP = [sin(alphaAP)/2;  sqrt(3)/2*sin(alphaAP); cos(alphaAP)];
es03AP = [sin(alphaAP)/2; -sqrt(3)/2*sin(alphaAP); cos(alphaAP)];

% Vectors on the sea floor from the centre to the attachment points
d1 = - (L0*es01 + bAbs*es01AP);     d1(3) = 0;
d2 = - (L0*es02 + bAbs*es02AP);     d2(3) = 0;
d3 = - (L0*es03 + bAbs*es03AP);     d3(3) = 0;

% Eq.(1)
ES01 = crossV2M(es01);
ES02 = crossV2M(es02);
ES03 = crossV2M(es03);
ES01AP = crossV2M(es01AP);
ES02AP = crossV2M(es02AP);
ES03AP = crossV2M(es03AP);

% Attachment point of tethers
n01 = -bAbs*es01AP;
n02 = -bAbs*es02AP;
n03 = -bAbs*es03AP;

B01 = bAbs*(-ES01AP);
B02 = bAbs*(-ES02AP);
B03 = bAbs*(-ES03AP);

s0n = L0;

S01 = ES01*s0n;
S02 = ES02*s0n;
S03 = ES03*s0n;

% Initial tention in a leg - function of an inclination angle
t0(1,1) = Fb/(3*cos(alpha));
t0(2,1) = Fb/(3*cos(alpha));
t0(3,1) = t0(2,1);

gam0 = t0/s0n;

% Kt and Ct from Scruggs (2013)
% Eq.11
Gt1 = (-[I3; B01']*es01);
Gt2 = (-[I3; B02']*es02);
Gt3 = (-[I3; B03']*es03);

%% Loop over all sea states

Power_ss = zeros(N_ss, 1);

for count_ss = 1:N_ss

    Hs = Hs_table(count_ss);
    Tp = Te_table(count_ss)/0.858;
    
    % Wave spectrum for this sea state
    Spec = spectrum_PM_n(Hs, Tp, w_interp);
    Sw = Spec.data;

    %% PTO matrices for this sea state
    Kpto = Kpto_table(count_ss);
    Bpto = Bpto_table(count_ss);
    
    % Eq.13
    Ct1 = Bpto*(Gt1*Gt1');
    Ct2 = Bpto*(Gt2*Gt2');
    Ct3 = Bpto*(Gt3*Gt3');

    % Eq.14
    Kt1 = ((Kpto-gam0(1))*(Gt1*Gt1') + gam0(1)*[I3; B01']*[I3 B01] + [zeros(3) zeros(3); zeros(3) gam0(1)*S01*B01]);
    Kt2 = ((Kpto-gam0(2))*(Gt2*Gt2') + gam0(2)*[I3; B02']*[I3 B02] + [zeros(3) zeros(3); zeros(3) gam0(2)*S02*B02]);
    Kt3 = ((Kpto-gam0(3))*(Gt3*Gt3') + gam0(3)*[I3; B03']*[I3 B03] + [zeros(3) zeros(3); zeros(3) gam0(3)*S03*B03]);

    Ct = Ct1 + Ct2 + Ct3;
    Kt = Kt1 + Kt2 + Kt3;

    %% Spectral domain model
    Beq = zeros(6);
    n = 0;

    Sq       = zeros(6, 6, numFreqs_interp);
    Sds      = zeros(3, numFreqs_interp);
    ddelta_s = zeros(3, numFreqs_interp);
%     sig_0     = zeros(1,6);
    sig       = zeros(1,6);
    d_sig = 1e6*ones(1,3);
    sig_ds = zeros(1,3);
    
%     for count_w = 1:length(w_interp)
%         w = w_interp(count_w);
%         Sf = Sw(count_w)*abs(fexc_interp(:, count_w)).^2;
%         Hx = (-w^2*(M + A_interp(:,:,count_w)) + 1i*w*(B_interp(:,:,count_w) + Ct + Beq) + Kt)^(-1);
%         Sq_SL(:,:,count_w) = Hx*diag(Sf)*Hx';
%     end

%     
%     for mode = 1:6
%         sig(mode) = abs(trapz(w_interp, w_interp.^2.*squeeze(Sq_SL(mode,mode,:))));
%     end

    while any(~(d_sig <= 0.01)) && n < 100

        sig_0 = sig;
        Beq = 1/2*rho*Cd*Ad*sqrt(8/pi)*diag(sig);

        for count_w = 1:length(w_interp)
            w = w_interp(count_w);
            Sf = Sw(count_w)*abs(fexc_interp(:, count_w)).^2;
            Hx_w = pinv(-w^2*(M + A_interp(:,:,count_w)) + 1i*w*(B_interp(:,:,count_w) + Ct + Beq) + Kt);
            RAO = Hx_w*fexc_interp(:, count_w);
            Sq(:,:,count_w) = Hx_w*diag(Sf)*Hx_w';
            ddelta_s(1, count_w) = es01'*(1i*w*RAO(1:3) + B01*1i*w*RAO(4:6));
            ddelta_s(2, count_w) = es02'*(1i*w*RAO(1:3) + B02*1i*w*RAO(4:6));
            ddelta_s(3, count_w) = es03'*(1i*w*RAO(1:3) + B03*1i*w*RAO(4:6));

        end

        for kk = 1:3
            Sds(kk,:) = Sw.*abs(ddelta_s(kk, :)).^2;
            sig_ds(kk) = abs(trapz(w_interp, abs(Sds(kk,:))));
        end

        for mode = 1:6
            sig(mode) = abs(trapz(w_interp, w_interp.^2.*squeeze(abs(Sq(mode,mode,:)))));
        end

        d_sig = abs(sig - sig_0);
        n = n+1;

    end
    
    numIter(count_ss) = n;
    Power_ss(count_ss) = sum(Bpto*sig_ds);
    
end

%% Annual power output
Power = sum(Power_ss.*N_HsTe_table/sum(N_HsTe_table));

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

Jiang, S., Gou, Y., Teng, B., & Ning, D. (2014). Analytical solution of a wave diffraction problem on a submerged cylinder. Journal of Engineering Mechanics, 140(1), 225-232.
Jiang, S.-c., Gou, Y., & Teng, B. (2014). Water wave radiation problem by a submerged cylinder. Journal of Engineering Mechanics, 140(5), 06014003.

🌈4 Matlab代码实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值