/[MITgcm]/MITgcm_contrib/gael/matlab_class/gcmfaces_calc/calc_budget_mass.m
ViewVC logotype

Annotation of /MITgcm_contrib/gael/matlab_class/gcmfaces_calc/calc_budget_mass.m

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.5 - (hide annotations) (download)
Mon Feb 8 23:40:18 2016 UTC (9 years, 5 months ago) by gforget
Branch: MAIN
Changes since 1.4: +31 -52 lines
- store flux terms in budg?.fluxes
- rename cont as tend
- reduce usage of intermediate variables

1 gforget 1.3 function [budgO,budgI,budgOI]=calc_budget_mass(kBudget);
2 gforget 1.1 % CALC_BUDGET_MASS(kBudget,doMoreBudgetOutput)
3    
4     gcmfaces_global;
5    
6     %get variables from caller routine:
7     %----------------------------------
8    
9     global myparms;
10    
11     list_variables={'ETAN','SIheff','SIhsnow','oceFWflx','SIatmFW','oceFWflx',...
12     'UVELMASS','VVELMASS',...
13     'ADVxHEFF','ADVxSNOW','DFxEHEFF','DFxESNOW',...
14     'ADVyHEFF','ADVySNOW','DFyEHEFF','DFyESNOW'};
15    
16     if kBudget>1; list_variables={list_variables{:},'WVELMASS'}; end;
17    
18     for vv=1:length(list_variables);
19     v = evalin('caller',list_variables{vv});
20     eval([list_variables{vv} '=v;']);
21     end;
22     clear v;
23    
24     test3d=length(size(UVELMASS{1}))>2;
25    
26     %compute mapped budget:
27     %----------------------
28    
29     %mass = myparms.rhoconst * sea level
30 gforget 1.5 budgO.tend=ETAN*myparms.rhoconst;
31     budgI.tend=(SIheff*myparms.rhoi+SIhsnow*myparms.rhosn);
32 gforget 1.1 %for deep ocean layer :
33     if kBudget>1&myparms.useNLFS<2;
34 gforget 1.5 budgO.tend=0;
35 gforget 1.1 elseif kBudget>1;%rstar case
36 gforget 1.5 tmp1=mk3D(mygrid.DRF,mygrid.hFacC).*mygrid.hFacC;
37     tmp2=sum(tmp1(:,:,kBudget:length(mygrid.RC)),3)./mygrid.Depth;
38     budgO.tend=tmp2.*ETAN*myparms.rhoconst;
39 gforget 1.1 end;
40     %
41     if test3d;
42     tmp1=mk3D(mygrid.DRF,mygrid.hFacC).*mygrid.hFacC;
43     tmp2=tmp1./mk3D(mygrid.Depth,tmp1);
44 gforget 1.5 budgO.tend=tmp2.*mk3D(ETAN,tmp2)*myparms.rhoconst;
45 gforget 1.1 end;
46 gforget 1.5 %
47     budgO.tend=mk3D(mygrid.RAC,budgO.tend).*budgO.tend;%kg/s
48     budgI.tend=mygrid.RAC.*budgI.tend;%kg/s
49     budgOI.tend=budgO.tend+budgI.tend;
50 gforget 1.1
51     %vertical divergence (air-sea fluxes or vertical advection)
52 gforget 1.5 budgO.zconv=oceFWflx;
53     budgI.zconv=SIatmFW-oceFWflx;
54 gforget 1.1 %in virtual salt flux we omit :
55 gforget 1.5 if ~myparms.useRFWF; budgO.zconv=0*budgO.zconv; end;
56 gforget 1.1 %for deep ocean layer :
57 gforget 1.5 if kBudget>1; budgO.zconv=-WVELMASS*myparms.rhoconst; end;
58 gforget 1.1 %
59     if test3d;
60     trWtop=-WVELMASS*myparms.rhoconst;
61 gforget 1.5 %trWtop(:,:,1)=budgO.zconv;
62 gforget 1.1 trWbot=trWtop(:,:,2:length(mygrid.RC));
63     trWbot(:,:,length(mygrid.RC))=0;
64     %
65 gforget 1.5 budgO.fluxes.trWtop=mk3D(mygrid.RAC,trWtop).*trWtop;
66     budgO.fluxes.trWbot=mk3D(mygrid.RAC,trWbot).*trWbot;%kg/s
67 gforget 1.1 else;
68 gforget 1.5 budgO.fluxes.trWtop=mygrid.RAC.*budgO.zconv;
69     budgO.fluxes.trWbot=mygrid.RAC*0;%kg/s
70 gforget 1.1 end;
71 gforget 1.5 budgI.fluxes.trWtop=mygrid.RAC.*(budgI.zconv+budgO.zconv);
72     budgI.fluxes.trWbot=mygrid.RAC.*budgO.zconv;%kg/s
73     %
74     budgO.zconv=mk3D(mygrid.RAC,budgO.zconv).*budgO.zconv;%kg/s
75     budgI.zconv=mygrid.RAC.*budgI.zconv;%kg/s
76     budgOI.zconv=budgO.zconv+budgI.zconv;
77 gforget 1.1
78     %horizontal divergence (advection and ice diffusion)
79     if test3d;
80     %3D UVELMASS,VVELMASS are multiplied by DRF
81     %(2D diagnostics are expectedly vertically integrated by MITgcm)
82     tmp1=mk3D(mygrid.DRF,UVELMASS);
83     UVELMASS=tmp1.*UVELMASS;
84     VVELMASS=tmp1.*VVELMASS;
85     end;
86     dxg=mk3D(mygrid.DXG,VVELMASS); dyg=mk3D(mygrid.DYG,UVELMASS);
87     tmpUo=myparms.rhoconst*dyg.*UVELMASS;
88     tmpVo=myparms.rhoconst*dxg.*VVELMASS;
89 gforget 1.5 budgO.hconv=calc_UV_conv(nansum(tmpUo,3),nansum(tmpVo,3));
90 gforget 1.4 tmpUi=(myparms.rhoi*DFxEHEFF+myparms.rhosn*DFxESNOW+...
91     myparms.rhoi*ADVxHEFF+myparms.rhosn*ADVxSNOW);
92     tmpVi=(myparms.rhoi*DFyEHEFF+myparms.rhosn*DFyESNOW+...
93     myparms.rhoi*ADVyHEFF+myparms.rhosn*ADVySNOW);
94 gforget 1.5 budgI.hconv=calc_UV_conv(tmpUi,tmpVi); %dh needed is alerady in DFxEHEFF etc
95     budgOI.hconv=budgO.hconv+budgI.hconv;
96 gforget 1.1 %
97 gforget 1.5 budgO.fluxes.trU=tmpUo; budgO.fluxes.trV=tmpVo;%kg/s
98     budgI.fluxes.trU=tmpUi; budgI.fluxes.trV=tmpVi;%kg/s
99 gforget 1.1

  ViewVC Help
Powered by ViewVC 1.1.22