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

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

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


Revision 1.8 - (hide annotations) (download)
Fri Feb 12 22:25:49 2016 UTC (9 years, 5 months ago) by gforget
Branch: MAIN
CVS Tags: checkpoint65x, checkpoint65v, checkpoint65w, checkpoint65u
Changes since 1.7: +13 -7 lines
- bring 3D case up to date
- store full tend (either 2D or 3D) as budgO.fluxes.tend
 (budgO.tend in contrast is vertically integrated in all cases)

1 gforget 1.3 function [budgO,budgI,budgOI]=calc_budget_heat(kBudget);
2 gforget 1.1 % CALC_BUDGET_HEAT(kBudget)
3    
4     gcmfaces_global;
5    
6     %get variables from caller routine:
7     %----------------------------------
8    
9     global myparms;
10    
11     list_variables={'THETA','AB_gT','TRELAX','SIheff','SIhsnow',...
12     'TFLUX','geothFlux','SItflux','SIaaflux','oceQnet',...
13     'SIatmQnt','SIsnPrcp','SIacSubl','WTHMASS',...
14     'ADVx_TH','DFxE_TH','ADVy_TH','DFyE_TH',...
15     'ADVxHEFF','ADVxSNOW','DFxEHEFF','DFxESNOW',...
16     'ADVyHEFF','ADVySNOW','DFyEHEFF','DFyESNOW'};
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(ADVx_TH{1}))>2;
25    
26 gforget 1.8 if test3d|kBudget>1;
27     list_variables={'oceQsw','ADVr_TH','DFrE_TH',...
28     'DFrI_TH','ADVr_TH','DFrE_TH','DFrI_TH'};
29     for vv=1:length(list_variables);
30     v = evalin('caller',list_variables{vv});
31     eval([list_variables{vv} '=v;']);
32     end;
33     clear v;
34     end;
35    
36 gforget 1.1 %compute mapped budget:
37     %----------------------
38    
39 gforget 1.5 budgO.tend=myparms.rcp*THETA-myparms.rcp*AB_gT;
40     budgI.tend=-myparms.flami*(SIheff*myparms.rhoi+SIhsnow*myparms.rhosn);
41 gforget 1.1 %
42 gforget 1.8 tmptend=mk3D(mygrid.RAC,budgO.tend).*budgO.tend;%Watt
43     budgO.fluxes.tend=tmptend;
44     budgO.tend=nansum(tmptend,3);
45 gforget 1.5 budgI.tend=mygrid.RAC.*budgI.tend;%Watt
46 gforget 1.1 %
47 gforget 1.5 budgOI.tend=budgO.tend+budgI.tend;
48 gforget 1.1
49     %vertical divergence (air-sea fluxes or vertical adv/dif)
50 gforget 1.5 budgO.zconv=TFLUX+geothFlux;
51     budgI.zconv=-(SItflux+TFLUX-TRELAX);
52 gforget 1.1 %in linear surface we omit :
53 gforget 1.5 if ~myparms.useNLFS; budgO.zconv=budgO.zconv-myparms.rcp*WTHMASS; end;
54 gforget 1.1 %in virtual salt flux we omit :
55 gforget 1.5 if ~myparms.useRFWF|~myparms.useNLFS; budgI.zconv=budgI.zconv+SIaaflux; end;
56 gforget 1.1 %working approach for real fresh water (?) and virtual salt flux
57 gforget 1.5 if 0; budgI.zconv=-oceQnet-SIatmQnt-myparms.flami*(SIsnPrcp-SIacSubl); end;
58 gforget 1.6 %
59     budgO.zdia=budgO.zconv;
60 gforget 1.1 %for deep ocean layer :
61     if kBudget>1;
62 gforget 1.6 budgO.zconv=-(ADVr_TH+DFrE_TH+DFrI_TH)./mygrid.RAC*myparms.rcp;
63     budgO.zdia=-(DFrE_TH+DFrI_TH)./mygrid.RAC*myparms.rcp;
64     dd=mygrid.RF(kBudget); msk=mygrid.mskC(:,:,kBudget);
65     swfrac=0.62*exp(dd/0.6)+(1-0.62)*exp(dd/20);
66     if dd<-200; swfrac=0; end;
67     budgO.zconv=budgO.zconv+swfrac*oceQsw+geothFlux;%.*msk;
68     budgO.zdia=budgO.zdia+swfrac*oceQsw+geothFlux;%.*msk;
69 gforget 1.1 end;
70     %
71 gforget 1.6 %notes: - geothFlux remains to be accounted for in 3D case
72     % - diaWtop, diaWbot remain to be implemented in 3D case
73 gforget 1.1 if test3d;
74     trWtop=-(ADVr_TH+DFrE_TH+DFrI_TH)*myparms.rcp;
75     %
76     dd=mygrid.RF(1:end-1);
77     swfrac=0.62*exp(dd/0.6)+(1-0.62)*exp(dd/20);
78     swfrac(dd<-200)=0;
79     swtop=mk3D(swfrac,trWtop).*mk3D(mygrid.RAC.*oceQsw,trWtop);
80     swtop(isnan(mygrid.mskC))=0;
81     trWtop=trWtop+swtop;
82     %
83 gforget 1.5 trWtop(:,:,1)=budgO.zconv.*mygrid.RAC;
84 gforget 1.1 trWbot=trWtop(:,:,2:length(mygrid.RC));
85     trWbot(:,:,length(mygrid.RC))=0;
86     %
87 gforget 1.5 budgO.fluxes.trWtop=trWtop;%Watt
88     budgO.fluxes.trWbot=trWbot;%Watt
89 gforget 1.1 else;
90 gforget 1.7 budgO.fluxes.trWtop=-mygrid.RAC.*(budgO.zconv-geothFlux);
91 gforget 1.5 budgO.fluxes.trWbot=mygrid.RAC.*geothFlux;%Watt
92 gforget 1.7 budgO.fluxes.diaWtop=-mygrid.RAC.*(budgO.zdia-geothFlux);
93 gforget 1.6 budgO.fluxes.diaWbot=mygrid.RAC.*geothFlux;%Watt
94 gforget 1.1 end;
95 gforget 1.7 budgI.fluxes.trWtop=-mygrid.RAC.*(budgI.zconv+budgO.zconv);
96     budgI.fluxes.trWbot=-mygrid.RAC.*budgO.zconv;%Watt
97 gforget 1.5 %
98     budgO.zconv=mk3D(mygrid.RAC,budgO.zconv).*budgO.zconv;%Watt
99     budgI.zconv=mygrid.RAC.*budgI.zconv;%Watt
100     budgOI.zconv=budgO.zconv+budgI.zconv;
101 gforget 1.1
102     %horizontal divergence (advection and diffusion)
103     tmpUo=myparms.rcp*(ADVx_TH+DFxE_TH); tmpVo=myparms.rcp*(ADVy_TH+DFyE_TH);
104 gforget 1.5 budgO.hconv=calc_UV_conv(nansum(tmpUo,3),nansum(tmpVo,3));
105 gforget 1.6 %
106     tmpUoD=myparms.rcp*DFxE_TH; tmpVoD=myparms.rcp*DFyE_TH;
107     budgO.hdia=calc_UV_conv(nansum(tmpUoD,3),nansum(tmpVoD,3));
108     %
109 gforget 1.1 tmpUi=-myparms.flami*(myparms.rhoi*DFxEHEFF+myparms.rhosn*DFxESNOW+myparms.rhoi*ADVxHEFF+myparms.rhosn*ADVxSNOW);
110     tmpVi=-myparms.flami*(myparms.rhoi*DFyEHEFF+myparms.rhosn*DFyESNOW+myparms.rhoi*ADVyHEFF+myparms.rhosn*ADVySNOW);
111 gforget 1.5 budgI.hconv=calc_UV_conv(tmpUi,tmpVi); %no dh needed here
112     budgOI.hconv=budgO.hconv+budgI.hconv;
113 gforget 1.1 %
114 gforget 1.5 budgO.fluxes.trU=tmpUo; budgO.fluxes.trV=tmpVo;%Watt
115 gforget 1.6 budgO.fluxes.diaU=tmpUoD; budgO.fluxes.diaV=tmpVoD;%Watt
116 gforget 1.5 budgI.fluxes.trU=tmpUi; budgI.fluxes.trV=tmpVi;%Watt
117 gforget 1.1

  ViewVC Help
Powered by ViewVC 1.1.22