Sei sulla pagina 1di 3

function [U_x_n1, U_y_n1, P_n1] = avanzamento_NS2d(U_x_n, U_y_n, P_n)

% avanzamento equazioni dei NS caso incompressibile bidimensionale

Dichiarazione/caricamento variabili iniziali e


boundary condition
% Caricamento variabili globali
global rk_ord nx dt mu
global err_flag Filter i_filter iBC ndt_filter
global filter_type alpha_filter

Avanzamento temporale schema RK


for i = rk_ord:-1:1

% Calcolo di tutte le derivate


dxU_x_n = der1_x_BC(U_x_n);
dyU_y_n = der1_y_BC(U_y_n);
dxU_y_n = der1_x_BC(U_y_n);
dyU_x_n = der1_y_BC(U_x_n);
d2xU_x_n = der2_x_BC(U_x_n);
d2yU_x_n = der2_y_BC(U_x_n);
d2xU_y_n = der2_x_BC(U_y_n);
d2yU_y_n = der2_y_BC(U_y_n);
% Calcolo pressione tramite eq Poisson con la velocità a step
intermedio

% preparazione termine sorgente

b = (dxU_x_n).^2 + 2*(der1_x_BC(U_y_n)*der1_y_BC(U_x_n))+(dyU_y_n).^2
- 1/dt*(dxU_x_n + dyU_y_n);
b = -b; % ok segno giusto
%
%P_n = zeros(nx);
P_n1 = Poisson_BC(b,P_n);

% L. Barba mette nell'equazione del momento già questa pressione


per il
% calcolo di U_n1, perchè ne garantisce l'incompressibilità

% Avanzamento equazione del momento

% Componente x equazione del moto

% Termine da derivare rispetto a x direzione periodica


Aij = (U_x_n .* U_x_n) + P_n1 - mu*der1_x_BC(U_x_n); % Axx
RHS = der1_x_BC(Aij);

1
% Termine da derivare rispetto a y direzione periodica
Aij = (U_y_n .* U_x_n) - mu*der1_y_BC(U_x_n); % Ayx
RHS = RHS + der1_y_BC(Aij); % aggiungo la derivata-calcolo
della divergenza

% schema alternativo non in forma (pseudo) conservativa


% RHS = U_x_n.*dxU_x_n + U_y_n.*dyU_x_n + der1_x_BC(P_n1) -
mu*(d2xU_x_n+d2yU_x_n);

% avanzamento eq. per la componente x della velocità


U_x_n1 = U_x_n - RHS*dt/i;

% Componente y equazione del moto

% Termine da derivare rispetto a y direzione periodica


Aij = (U_y_n .* U_y_n) + P_n1 - mu*der1_y_BC(U_y_n); % Ayy
RHS = der1_y_BC(Aij);

% Termine da derivare rispetto a x direzione periodica


Aij = (U_y_n .* U_x_n) - mu*der1_x_BC(U_y_n); % Ayx
RHS = RHS + der1_x_BC(Aij); % aggiungo la derivata-calcolo
della divergenza

% schema alternativo non in forma (pseudo) conservativa


% RHS = U_x_n.*dxU_y_n + U_y_n.*dyU_y_n + der1_y_BC(P_n1) -
mu*(d2xU_y_n+d2yU_y_n);

% avanzamento eq. per la componente y della velocità


U_y_n1 = U_y_n - RHS*dt/i;

% Filtraggio di tutte le quantità calcolate al nuovo tempo intermedio


% U_x_n1 = filter_per(U_x_n1);
% U_y_n1 = filter_per(U_y_n1);
% P_n1 = filter_per(P_n1);

% imposizone BCs su velocità


U_x_n1(:,1) = 0;
U_x_n1(:,end) = 0;
U_x_n1(1,:) = 0;
U_x_n1(end,:) = 1;

U_y_n1(:,1) = 0; % cavity lid velocity


U_y_n1(:,end) = 0;
U_y_n1(1,:) = 0;
U_y_n1(end,:) = 0;

% aggiornamento output per il ciclo successivo

U_x_n = U_x_n1;
U_y_n = U_y_n1;
P_n = P_n1;

end

2
Not enough input arguments.

Error in avanzamento_NS2d (line 15)


dxU_x_n = der1_x_BC(U_x_n);

Published with MATLAB® R2017a

Potrebbero piacerti anche