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

Contents 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.8 - (show annotations) (download)
Thu Jul 28 18:30:45 2016 UTC (9 years ago) by gforget
Branch: MAIN
CVS Tags: checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, HEAD
Changes since 1.7: +4 -0 lines
- document the specific meaning of THETA, SALT, ETAN, SIheff, and SIhsnow
  (tendencies computed by diags_diff_snapshots.m) in the context of these routines

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

  ViewVC Help
Powered by ViewVC 1.1.22