/[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.8 - (hide 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 gforget 1.3 function [budgO,budgI,budgOI]=calc_budget_mass(kBudget);
2 gforget 1.1 % CALC_BUDGET_MASS(kBudget,doMoreBudgetOutput)
3 gforget 1.8 %
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 gforget 1.1
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 gforget 1.7 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 gforget 1.1 %compute mapped budget:
38     %----------------------
39    
40     %mass = myparms.rhoconst * sea level
41 gforget 1.5 budgO.tend=ETAN*myparms.rhoconst;
42     budgI.tend=(SIheff*myparms.rhoi+SIhsnow*myparms.rhosn);
43 gforget 1.1 %for deep ocean layer :
44     if kBudget>1&myparms.useNLFS<2;
45 gforget 1.5 budgO.tend=0;
46 gforget 1.1 elseif kBudget>1;%rstar case
47 gforget 1.5 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 gforget 1.1 end;
51     %
52     if test3d;
53     tmp1=mk3D(mygrid.DRF,mygrid.hFacC).*mygrid.hFacC;
54     tmp2=tmp1./mk3D(mygrid.Depth,tmp1);
55 gforget 1.5 budgO.tend=tmp2.*mk3D(ETAN,tmp2)*myparms.rhoconst;
56 gforget 1.1 end;
57 gforget 1.5 %
58 gforget 1.7 tmptend=mk3D(mygrid.RAC,budgO.tend).*budgO.tend;%kg/s
59     budgO.fluxes.tend=tmptend;
60     budgO.tend=nansum(tmptend,3);
61 gforget 1.5 budgI.tend=mygrid.RAC.*budgI.tend;%kg/s
62     budgOI.tend=budgO.tend+budgI.tend;
63 gforget 1.1
64     %vertical divergence (air-sea fluxes or vertical advection)
65 gforget 1.5 budgO.zconv=oceFWflx;
66     budgI.zconv=SIatmFW-oceFWflx;
67 gforget 1.1 %in virtual salt flux we omit :
68 gforget 1.5 if ~myparms.useRFWF; budgO.zconv=0*budgO.zconv; end;
69 gforget 1.1 %for deep ocean layer :
70 gforget 1.5 if kBudget>1; budgO.zconv=-WVELMASS*myparms.rhoconst; end;
71 gforget 1.1 %
72     if test3d;
73     trWtop=-WVELMASS*myparms.rhoconst;
74 gforget 1.5 %trWtop(:,:,1)=budgO.zconv;
75 gforget 1.1 trWbot=trWtop(:,:,2:length(mygrid.RC));
76     trWbot(:,:,length(mygrid.RC))=0;
77     %
78 gforget 1.5 budgO.fluxes.trWtop=mk3D(mygrid.RAC,trWtop).*trWtop;
79     budgO.fluxes.trWbot=mk3D(mygrid.RAC,trWbot).*trWbot;%kg/s
80 gforget 1.1 else;
81 gforget 1.6 budgO.fluxes.trWtop=-mygrid.RAC.*budgO.zconv;
82 gforget 1.5 budgO.fluxes.trWbot=mygrid.RAC*0;%kg/s
83 gforget 1.1 end;
84 gforget 1.6 budgI.fluxes.trWtop=-mygrid.RAC.*(budgI.zconv+budgO.zconv);
85     budgI.fluxes.trWbot=-mygrid.RAC.*budgO.zconv;%kg/s
86 gforget 1.5 %
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 gforget 1.1
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 gforget 1.5 budgO.hconv=calc_UV_conv(nansum(tmpUo,3),nansum(tmpVo,3));
103 gforget 1.4 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 gforget 1.5 budgI.hconv=calc_UV_conv(tmpUi,tmpVi); %dh needed is alerady in DFxEHEFF etc
108 gforget 1.7 %
109     budgOI.hconv=budgO.hconv;
110     budgOI.hconv(:,:,1)=budgOI.hconv(:,:,1)+budgI.hconv;
111 gforget 1.1 %
112 gforget 1.5 budgO.fluxes.trU=tmpUo; budgO.fluxes.trV=tmpVo;%kg/s
113     budgI.fluxes.trU=tmpUi; budgI.fluxes.trV=tmpVi;%kg/s
114 gforget 1.1

  ViewVC Help
Powered by ViewVC 1.1.22