function [u,v]=get_obcvolcons(u,v,pm,pn,rmask,obc) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Enforce integral flux conservation around the domain % % Further Information: % http://www.croco-ocean.org % % This file is part of CROCOTOOLS % % CROCOTOOLS is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published % by the Free Software Foundation; either version 2 of the License, % or (at your option) any later version. % % CROCOTOOLS is distributed in the hope that it will be useful, but % WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program; if not, write to the Free Software % Foundation, Inc., 59 Temple Place, Suite 330, Boston, % MA 02111-1307 USA % % Copyright (c) 2001-2006 by Pierrick Penven % e-mail:Pierrick.Penven@ird.fr % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% umask=rmask(1:end,2:end).*rmask(1:end,1:end-1); vmask=rmask(2:end,1:end).*rmask(1:end-1,1:end); % dy_u=2*umask./(pn(1:end,2:end)+pn(1:end,1:end-1)); dx_v=2*vmask./(pm(2:end,1:end)+pm(1:end-1,1:end)); udy=u.*dy_u; vdx=v.*dx_v; % Flux=obc(1)*sum(vdx(1,2:end-1))-obc(2)*sum(udy(2:end-1,end))-... obc(3)*sum(vdx(end,2:end-1))+obc(4)*sum(udy(2:end-1,1)); Cross=obc(1)*sum(dx_v(1,2:end-1))+obc(2)*sum(dy_u(2:end-1,end))+... obc(3)*sum(dx_v(end,2:end-1))+obc(4)*sum(dy_u(2:end-1,1)); vcorr=Flux/Cross; disp(['Flux correction : ',num2str(vcorr)]) % v(1,:)=obc(1)*(v(1,:)-vcorr); u(:,end)=obc(2)*(u(:,end)+vcorr); v(end,:)=obc(3)*(v(end,:)+vcorr); u(:,1)=obc(4)*(u(:,1)-vcorr); % u=u.*umask; v=v.*vmask; % return