| 1 | gforget | 1.1 |  | 
| 2 |  |  | domaine_global_def; domaine; | 
| 3 |  |  | mask=squeeze(tmask3D(:,:,1)); recl=jpi*jpj*4; | 
| 4 |  |  |  | 
| 5 |  |  | choice_plot=0; | 
| 6 |  |  | rep_out='./'; | 
| 7 |  |  |  | 
| 8 |  |  | %choiceBulkParam: | 
| 9 |  |  | %1->LY 2->COARE 3->LY/NCEP 4-> LY/ECMWF | 
| 10 |  |  | %choiceDataSet: | 
| 11 |  |  | %1->NCEP 2->ECMWF 3-> CORE (LY) | 
| 12 |  |  |  | 
| 13 |  |  | list_kcur=[1:5]; | 
| 14 |  |  | for kcur=list_kcur | 
| 15 |  |  | switch kcur | 
| 16 |  |  | %main set | 
| 17 |  |  | case 1 | 
| 18 |  |  | choiceDataSet=1; choiceBulkParam=1; ycur0=1992; ycurMax=2006; | 
| 19 |  |  | case 2 | 
| 20 |  |  | choiceDataSet=2; choiceBulkParam=1; ycur0=1992; ycurMax=2006; | 
| 21 |  |  | case 3 | 
| 22 |  |  | choiceDataSet=3; choiceBulkParam=1; ycur0=1992; ycurMax=2006; | 
| 23 |  |  | case 4 | 
| 24 |  |  | choiceDataSet=1; choiceBulkParam=2; ycur0=1992; ycurMax=2006; | 
| 25 |  |  | case 5 | 
| 26 |  |  | choiceDataSet=1; choiceBulkParam=3; ycur0=1992; ycurMax=2006; | 
| 27 |  |  | end | 
| 28 |  |  |  | 
| 29 |  |  |  | 
| 30 |  |  | if choiceDataSet==1; data_cur='.ncep.'; data_heights=[10 2 2]; albedo=0.14; | 
| 31 |  |  | elseif choiceDataSet==2; data_cur='.ecmwf.'; data_heights=[10 2 2]; albedo=0.05; | 
| 32 |  |  | else data_cur='.core.'; data_heights=[10 10 10]; albedo=0.1; | 
| 33 |  |  | end | 
| 34 |  |  |  | 
| 35 |  |  | if choiceBulkParam==1 | 
| 36 |  |  | suff_bulk='LY.'; fprintf([data_cur ' LY standard \n']); | 
| 37 |  |  | elseif choiceBulkParam==2 | 
| 38 |  |  | suff_bulk='coare.'; fprintf([data_cur ' COARE standard \n']); | 
| 39 |  |  | elseif choiceBulkParam==3 | 
| 40 |  |  | dragCur=1.4/1000; suff_bulk='LY4ncep.'; fprintf([data_cur ' LY with NCEP CST DRAG coeff \n']); | 
| 41 |  |  | elseif choiceBulkParam==4 | 
| 42 |  |  | dragCur=1.4/1000; suff_bulk='LY4ecmwf.'; fprintf([data_cur ' LY with ECMWF CST DRAG coeff \n']); | 
| 43 |  |  | end | 
| 44 |  |  |  | 
| 45 |  |  | cen2kel=273.15; | 
| 46 |  |  | rhoConstFresh=999.8; | 
| 47 |  |  | stefanBoltzmann = 5.670e-8; | 
| 48 |  |  | ocean_emissivity=5.50e-8 / 5.670e-8; | 
| 49 |  |  |  | 
| 50 |  |  | fid_runoff=fopen('/net/ross/raid0/gforget/DATAbin/forcing/CORE/runoffannual1x1','r','b'); | 
| 51 |  |  | runoff=fread(fid_runoff,[jpi jpj],'float32').*mask; | 
| 52 |  |  | fclose(fid_runoff); | 
| 53 |  |  |  | 
| 54 |  |  | %SST and ICE data: | 
| 55 |  |  | fid_sst=fopen('/net/ross/raid0/gforget/DATAbin/ICECONC/HADLEY/HadISST1_SST_9206_monthly','r','b'); | 
| 56 |  |  | field_sst=fread(fid_sst,jpi*jpj*12,'float32'); fclose(fid_sst); field_sst=reshape(field_sst,jpi,jpj,12); | 
| 57 |  |  | fid_ice=fopen('/net/ross/raid0/gforget/DATAbin/ICECONC/HADLEY/HadISST1_ICE_9206_monthly','r','b'); | 
| 58 |  |  | field_ice=fread(fid_ice,jpi*jpj*12,'float32'); fclose(fid_ice); field_ice=reshape(field_ice,jpi,jpj,12); | 
| 59 |  |  |  | 
| 60 |  |  | %for interannual sst: | 
| 61 |  |  | rep_sst='/net/ross/raid2/king/data_1x1_92-03/obs/'; pref_sst='SST_monthly_r2_'; suff_sst=''; | 
| 62 |  |  |  | 
| 63 |  |  |  | 
| 64 |  |  |  | 
| 65 |  |  | for ycur=ycur0:ycurMax | 
| 66 |  |  |  | 
| 67 |  |  | suff_out=[data_cur suff_bulk num2str(ycur) '.daily.bin']; list_tcur=[1:365]; | 
| 68 |  |  | doInitFiles=1; doWriteMean=0; | 
| 69 |  |  |  | 
| 70 |  |  | for tcur=list_tcur | 
| 71 |  |  |  | 
| 72 |  |  | for ttcur=1:4 | 
| 73 |  |  |  | 
| 74 |  |  | hcur=(tcur-1)*4+ttcur; | 
| 75 |  |  |  | 
| 76 |  |  | %part a: load fields | 
| 77 |  |  | if choiceDataSet==1; [dataFlds]=ncep_load_fields(ycur,hcur); | 
| 78 |  |  | elseif choiceDataSet==2; [dataFlds]=ecmwf_load_fields(ycur,hcur); | 
| 79 |  |  | else; [dataFlds]=core_load_fields(ycur,hcur); | 
| 80 |  |  | end; | 
| 81 |  |  |  | 
| 82 |  |  | %part b: time interpolate sst and ice fields from monthly atlas | 
| 83 |  |  | [mcur,mcurW]=coeff_MonthlyAtlasInterp(tcur); | 
| 84 |  |  | sst=(1-mcurW)*field_sst(:,:,mcur(1))+mcurW*field_sst(:,:,mcur(2)); | 
| 85 |  |  | ice=(1-mcurW)*field_ice(:,:,mcur(1))+mcurW*field_ice(:,:,mcur(2)); | 
| 86 |  |  | sst=sst.*mask; ice=ice.*mask; | 
| 87 |  |  |  | 
| 88 |  |  | %for interannual sst: | 
| 89 |  |  | sstAtlas=sst; | 
| 90 |  |  | [sst]=sst_load_field(rep_sst,suff_sst,pref_sst,ycur,hcur); | 
| 91 |  |  | sst(find(isnan(sst)))=sstAtlas(find(isnan(sst))); | 
| 92 |  |  |  | 
| 93 |  |  | %part c: complete data structure: | 
| 94 |  |  | dataFlds=setfield(dataFlds,'sst',sst); | 
| 95 |  |  | dataFlds=setfield(dataFlds,'ice',ice); | 
| 96 |  |  | dataFlds=setfield(dataFlds,'runoff',runoff); | 
| 97 |  |  |  | 
| 98 |  |  |  | 
| 99 |  |  | %part 1: bulk formulae | 
| 100 |  |  |  | 
| 101 |  |  | if choiceBulkParam==1; [bulkFlds]=exf_bulk_largeyeager04(dataFlds,data_heights); | 
| 102 |  |  | elseif choiceBulkParam==2; [bulkFlds]=gmaze_bulk_coare(dataFlds,data_heights,albedo); | 
| 103 |  |  | else; [bulkFlds]=exf_bulk_largeyeager04(dataFlds,data_heights,dragCur); | 
| 104 |  |  | end; | 
| 105 |  |  |  | 
| 106 |  |  | %[bulkFlds]=gfdl_largeyeager04(dataFlds); | 
| 107 |  |  |  | 
| 108 |  |  |  | 
| 109 |  |  | %part 2: net fluxes | 
| 110 |  |  |  | 
| 111 |  |  | %--   Compute net from downward and downward from net longwave and | 
| 112 |  |  | %     shortwave radiation, if needed. | 
| 113 |  |  | %     lwflux = Stefan-Boltzmann constant * emissivity * SST - lwdown | 
| 114 |  |  | %     swflux = - ( 1 - albedo ) * swdown | 
| 115 |  |  | lwflux=stefanBoltzmann*ocean_emissivity*((dataFlds.sst+cen2kel).^4)-dataFlds.lwdn; | 
| 116 |  |  | swflux=-(1-albedo)*dataFlds.swdn; | 
| 117 |  |  | %     Net surface heat flux. | 
| 118 |  |  | %     qnet = ( - hs - hl + lwflux + swflux ); | 
| 119 |  |  | qnet = (1-dataFlds.ice).*( - bulkFlds.hs - bulkFlds.hl + lwflux + swflux ); | 
| 120 |  |  | %     Salt flux from Precipitation and Evaporation. | 
| 121 |  |  | %     empmr = ( evap - precip - runoff ); | 
| 122 |  |  | evap=bulkFlds.evap*rhoConstFresh; %m/s->kg/m^2/s | 
| 123 |  |  | empmr = (1-dataFlds.ice).*( evap - dataFlds.precip ) - dataFlds.runoff; | 
| 124 |  |  | %       put in structure as well: | 
| 125 |  |  | netFlds=struct('lwflux',lwflux,'swflux',swflux,'qnet',qnet,'empmr',empmr); | 
| 126 |  |  |  | 
| 127 |  |  | %part 3: time average | 
| 128 |  |  | swflux = (1-dataFlds.ice).*( swflux ); turbflux = (1-dataFlds.ice).*( - bulkFlds.hs - bulkFlds.hl + lwflux ); | 
| 129 |  |  | writeFlds=struct('ustress',bulkFlds.ustress,'vstress',bulkFlds.vstress,'qnet',netFlds.qnet,'empmr',netFlds.empmr,'turbflux',turbflux,'swflux',swflux,'precip',dataFlds.precip); | 
| 130 |  |  |  | 
| 131 |  |  | averagesFields(doInitFiles,doWriteMean,rep_out,suff_out,writeFlds); | 
| 132 |  |  | doInitFiles=0; | 
| 133 |  |  |  | 
| 134 |  |  | %part 4: plot results | 
| 135 |  |  | if choice_plot==1; fig0=(choiceDataSet-1)*3; | 
| 136 |  |  | %sign conventions are not the same in exf and largyeager ... I use largeyeager | 
| 137 |  |  | %convention for plot, positive=into the ocean | 
| 138 |  |  | figure(fig0+1); | 
| 139 |  |  | subplot(2,2,1); pcolor(lon2D_t,lat2D_t,bulkFlds.ustress); shading flat; caxis([-1 1]*0.2); colorbar; | 
| 140 |  |  | subplot(2,2,2); pcolor(lon2D_t,lat2D_t,bulkFlds.vstress); shading flat; caxis([-1 1]*0.1); colorbar; | 
| 141 |  |  | subplot(2,2,3); pcolor(lon2D_t,lat2D_t,-qnet); shading flat; caxis([-1 1]*200); colorbar; | 
| 142 |  |  | subplot(2,2,4); pcolor(lon2D_t,lat2D_t,-empmr); shading flat; caxis([-1 1]*1e-4); colorbar; | 
| 143 |  |  | figure(fig0+2); | 
| 144 |  |  | subplot(2,2,1); pcolor(lon2D_t,lat2D_t,-swflux); shading flat; caxis([-1 1]*300); colorbar; | 
| 145 |  |  | subplot(2,2,2); pcolor(lon2D_t,lat2D_t,-lwflux); shading flat; caxis([-1 1]*100); colorbar; | 
| 146 |  |  | subplot(2,2,3); pcolor(lon2D_t,lat2D_t,bulkFlds.hl); shading flat; caxis([-1 0.5]*200); colorbar; | 
| 147 |  |  | subplot(2,2,4); pcolor(lon2D_t,lat2D_t,bulkFlds.hs); shading flat; caxis([-1 1]*50); colorbar; | 
| 148 |  |  | figure(fig0+3); | 
| 149 |  |  | subplot(3,1,1); pcolor(lon2D_t,lat2D_t,dataFlds.precip); shading flat; caxis([-1 1]*1e-4); colorbar; | 
| 150 |  |  | subplot(3,1,2); pcolor(lon2D_t,lat2D_t,-evap); shading flat; caxis([-1 1]*1e-4); colorbar; | 
| 151 |  |  | subplot(3,1,3); pcolor(lon2D_t,lat2D_t,dataFlds.runoff); shading flat; caxis([-1 1]*1e-4); colorbar; | 
| 152 |  |  | return; | 
| 153 |  |  | end%if choice_plot==1 | 
| 154 |  |  |  | 
| 155 |  |  | end%for ttcur=1:4 | 
| 156 |  |  | doWriteMean=1; | 
| 157 |  |  | averagesFields(doInitFiles,doWriteMean,rep_out,suff_out,writeFlds); | 
| 158 |  |  | doWriteMean=0; | 
| 159 |  |  | end%for tcur=1:365 | 
| 160 |  |  |  | 
| 161 |  |  | doInitFiles=-1; doWriteMean=0; | 
| 162 |  |  | averagesFields(doInitFiles,doWriteMean,rep_out,suff_out,writeFlds); | 
| 163 |  |  |  | 
| 164 |  |  | end%for ycur=ycur0:ycurMax | 
| 165 |  |  | end%for kcur=1:3 | 
| 166 |  |  |  | 
| 167 |  |  |  |