clc;
clear;
addpath(genpath('netcdf_tools'));
addpath('D:\othercolor\')
file=dir('C:\Users\\09FA20010524*.nc');
% ncdump;
for n=69:129
filename=['C:\',file(n).name];
lon=ncread(filename,'longitude');
lat=ncread(filename,'latitude');
p=ncread(filename,'pressure');%decibar
t=ncread(filename,'temperature');%(ITS-90)
s=ncread(filename,'salinity');%PSS-78
k=find(p<1001); %深度最大只取1000
pp=p(k);
tt=t(k);
ss=s(k);
k2=find((ss>30&ss<40)&tt~=0);
pp=pp(k2);
tt=t(k2);
ss=s(k2);
des=sw_dens(ss,tt,pp);
for i=1:length(k2) %!!!这里特别注意,由于数据不全,这里找到k的实际值
des0(i)=sw_dens(35,0,pp(i));
end
a=1./des*100000000; %密度的倒数
a0=1./des0*100000000;
e=a'-a0;
for j=1:20
% for i=1:501
% ee(j)=mean(e(1,1+(j-1)*25:25+(j-1)*25));%平均
% q(20,25)=0;
q=find((1+(j-1)*50
% end
end
u=ee.*50/10000; %平均*压强差
uu(1)=sum(u);
for i=2:20
uu(i)=sum(u)-sum(u(1:i-1));
end
lo(n-68,:)=lon;%已经把所有的密度对压强积分求出(不同深度)
la(n-68,:)=lat;
uuu(n-68,:)=uu;
eeenan(n-68,:)=ee;
clear des0
end
%差值
%
% lo(n,:)=lon;%已经把所有的密度对压强积分求出(不同深度)
% la(n,:)=lat;
% eee(n,:)=ee;
% clear des0 % 注意这里一定要清楚一下,否则有些des0大 有些小,造成数组不能赋值
[la,index]=sort(la);
% index=flipud(index);
uuu=uuu(index,:); %la不是严格排序的,调整顺序
% la=flipud(la); %由于这里的代码是后来修改的 实际上不用反复反转,但是我下面的代码是逆序写的
laa=la.*(pi/180); %其实也可以直接用sind函数
for i=1:60
f(i)=2*7.29*0.00001*sin(laa(i));
kkk=(pi/180)*(6378136*(1-0.006694470));
LL(i)=(1-0.006694470*(sin(laa(i)))^2)^(2/3);
L(i)=(la(i+1)-la(i))*kkk;
LLL(i)=abs(L(i)./LL(i)); %上述几行只是公式,为了求L
vnan(60,21)=0;
vnan(i,1:20)=(uuu(i+1,:)-uuu(i,:))./(f(i).*LLL(i)); %向东为正
index2=[1:60];
% minan(i)=max(abs(vnan(i,1:20))); %剔除一些异常数据(主要由于纬度间距过小)
% index2=find(minan<3.01);
% kkkk=(uuu(49,:)-uuu(48,:))/LLL(1);
% v(i,1:20)=abs(kkkk./f(i));
end
for i=1:59
minan(i)=max(abs(vnan(i,1:20))); %剔除一些异常数据 不剔除赤道的(主要由于纬度间距过小)
index2=find(minan<2);
end
% for i=50:58
% f(i)=2*7.29*0.00001*sin(laa(i))+2*7.29*10^(-5)*cos(laa(i))*0.5;%对靠近赤道的做一个处理
% end
index2(1,46)=60; %补充赤道处
v_nan=vnan(index2',:);
% la2=flipud(la(2:49));
% la2=la2(index2');
la2=la(1:60);
la2_nan=la2(index2');
addpath(genpath('netcdf_tools'));
addpath('D:\风轻叶落\2021.6.17 新的生活\学习\海洋环流\地转流计算\othercolor\')
file=dir('C:\Users\风轻叶落\Desktop\临时\北\北\p15nb*.nc');
% ncdump;
for n=1:49 %数据刚好是高纬到低纬,第50个小于0
filename=['C:\Users\风轻叶落\Desktop\临时\北\北\',file(n).name];
lon=ncread(filename,'longitude');
lat=ncread(filename,'latitude');
% ncdisp
p=ncread(filename,'pressure');%decibar
t=ncread(filename,'temperature');%(ITS-90)
s=ncread(filename,'salinity');%PSS-78
k=find(p<1001); %深度最大只取1000
pp=p(k);
tt=t(k);
ss=s(k);
k2=find((ss>30&ss<40)&tt~=0);
pp=pp(k2);
tt=t(k2);
ss=s(k2);
des=sw_dens(ss,tt,pp);
% s0(501)=35;
% t0(501)=0;
for i=1:length(k2) %!!!这里特别注意,由于数据不全,这里找到k的实际值
des0(i)=sw_dens(35,0,pp(i));
end
a=1./des*100000000; %密度的倒数
a0=1./des0*100000000;
e=a'-a0; %差值
for j=1:20
% for i=1:501
% ee(j)=mean(e(1,1+(j-1)*25:25+(j-1)*25));%平均
% q(20,25)=0;
q=find((1+(j-1)*50
% end
end
u=ee.*50/10000; %平均*压强差
uu(1)=sum(u);
for i=2:20
uu(i)=sum(u)-sum(u(1:i-1));
end
uuu(n,:)=uu;
lo(n,:)=lon;%已经把所有的密度对压强积分求出(不同深度)
la(n,:)=lat;
eee(n,:)=ee;
clear des0 % 注意这里一定要清楚一下,否则有些des0大 有些小,造成数组不能赋值
end
[la,index]=sort(la);
index=flipud(index);
uuu=uuu(index,:); %la不是严格排序的,调整顺序
la=flipud(la); %由于这里的代码是后来修改的 实际上不用反复反转,但是我下面的代码是逆序写的
laa=la.*(pi/180); %其实也可以直接用sind函数
% for i=1:15
% f(i)=2*7.29*0.00001*sin(laa(50-i))+2*7.29*10^(-5)*cos(laa(50-i))*0.5;%对靠近赤道的做一个处理
% end
for i=1:48
f(i)=2*7.29*0.00001*sin(laa(50-i));
kkk=(pi/180)*(6378136*(1-0.006694470));
LL(i)=(1-0.006694470*(sin(laa(50-i)))^2)^(2/3);
L(i)=(la(50-i)-la(49-i))*kkk;
LLL(i)=abs(L(i)./LL(i)); %上述几行只是公式,为了求L
vbei(48,21)=0;
vbei(i,1:20)=(uuu(50-i,:)-uuu(49-i,:))./(f(i).*LLL(i)); %向东为正
% index2=[1:48];
% mibei(i)=max(abs(vbei(i,1:20))) %剔除一些异常数据(主要由于纬度间距过小)
% index2=find(mibei<2);
% kkkk=(uuu(49,:)-uuu(48,:))/LLL(1);
% v(i,1:20)=abs(kkkk./f(i));
end
for i=2:48
mibei(i)=max(abs(vbei(i,1:20))) %剔除一些异常数据 不剔除赤道的(主要由于纬度间距过小)
index2=find(mibei<2);
end
v_bei=vbei(index2',:);
% v_bei(2,:)=abs(v_bei(2,:));
la2=flipud(la(2:49));
la2_bei=la2(index2');
lanew(length(la2_nan)+length(la2_bei),1)=0;
lanew(1:length(la2_nan))=la2_nan;
lanew(length(la2_nan)+1:length(la2_nan)+length(la2_bei))=la2_bei;
v(length(la2_nan)+length(la2_bei),21)=0;
v(1:length(la2_nan),:)=v_nan;
v(length(la2_nan)+1:length(la2_nan)+length(la2_bei),:)=v_bei;
[xlatt,dep]=meshgrid(lanew,linspace(0,1000,21)); %注意这里纬度不能等间距,必须用真实值
% [c.h]=contourf(xlatt',dep',v,[-1,0,1],"ShowText","on");
% contourf(xlatt',dep',v,[-1 0 1],"ShowText","on");
% colorbar;
pcolor(xlatt',dep',v);
shading interp
% colormap(othercolor('RdYlBu6'));
% colormap(othercolor('Spectral9'));
colormap(othercolor('BuOr_8'));
xlabel('纬度(°N)');
ylabel('深度(m)');
title('地转流流速断面分布图');
% colorbar;
caxis([-0.5 0.5]);
% colormap([0 0 1;0 0.2 1;0 0.4 1;0 0.6 1;0 0.8 1;0 1 1;1 1 0;1 0.8 0;1 0.6 0;1 0.4 0;1 0.2 0;1 0 0]);
c=colorbar;
set(c,'tickdir','out') % 朝外
set(c,'YTick',-0.6:0.1:0.6); %色标值范围及显示间隔
set(c,'YTickLabel',{'-0.6','-0.5','-0.4','-0.3','-0.2','-0.1','0','0.1','0.2','0.3','0.4','0.5','0.6'}) %具体刻度赋值
caxis([-0.6 0.6])
set(gcf,'position',[200,300,800,300]);
hold on;
x=zeros(1000,1);
y=linspace(1000,0,1000);
plot(x,y)
x1=ones(1000,1);
x2(1:1000,1)=-1;
% plot(x1,y);
% plot(x2,y);
% plot([0,0],0:1000)
ax=gca;
set(gca,'YDir','reverse');
clc;
clear;
addpath(genpath('netcdf_tools'));
addpath('D:\风轻叶落\2021.6.17 新的生活\学习\海洋环流\地转流计算\othercolor\')
file=dir('C:\Users\风轻叶落\Desktop\临时\南\南\09FA20010524*.nc');
% ncdump;
for n=69:129
filename=['C:\Users\风轻叶落\Desktop\临时\南\南\',file(n).name];
lon=ncread(filename,'longitude');
lat=ncread(filename,'latitude');
p=ncread(filename,'pressure');%decibar
t=ncread(filename,'temperature');%(ITS-90)
s=ncread(filename,'salinity');%PSS-78
k=find(p<1001); %深度最大只取1000
pp=p(k);
tt=t(k);
ss=s(k);
k2=find((ss>30&ss<40)&tt~=0);
pp=pp(k2);
tt=t(k2);
ss=s(k2);
des=sw_dens(ss,tt,pp);
for i=1:length(k2) %!!!这里特别注意,由于数据不全,这里找到k的实际值
des0(i)=sw_dens(35,0,pp(i));
end
a=1./des*100000000; %密度的倒数
a0=1./des0*100000000;
e=a'-a0;
for j=1:20
% for i=1:501
% ee(j)=mean(e(1,1+(j-1)*25:25+(j-1)*25));%平均
% q(20,25)=0;
q=find((1+(j-1)*50
% end
end
u=ee.*50/10000; %平均*压强差
uu(1)=sum(u);
for i=2:20
uu(i)=sum(u)-sum(u(1:i-1));
end
lo(n-68,:)=lon;%已经把所有的密度对压强积分求出(不同深度)
la(n-68,:)=lat;
uuu(n-68,:)=uu;
eeenan(n-68,:)=ee;
clear des0
end
%差值
%
% lo(n,:)=lon;%已经把所有的密度对压强积分求出(不同深度)
% la(n,:)=lat;
% eee(n,:)=ee;
% clear des0 % 注意这里一定要清楚一下,否则有些des0大 有些小,造成数组不能赋值
[la,index]=sort(la);
% index=flipud(index);
uuu=uuu(index,:); %la不是严格排序的,调整顺序
% la=flipud(la); %由于这里的代码是后来修改的 实际上不用反复反转,但是我下面的代码是逆序写的
laa=la.*(pi/180); %其实也可以直接用sind函数
for i=1:60
f(i)=2*7.29*0.00001*sin(laa(i));
kkk=(pi/180)*(6378136*(1-0.006694470));
LL(i)=(1-0.006694470*(sin(laa(i)))^2)^(2/3);
L(i)=(la(i+1)-la(i))*kkk;
LLL(i)=abs(L(i)./LL(i)); %上述几行只是公式,为了求L
vnan(60,21)=0;
vnan(i,1:20)=(uuu(i+1,:)-uuu(i,:))./(f(i).*LLL(i)); %向东为正
index2=[1:60];
% minan(i)=max(abs(vnan(i,1:20))); %剔除一些异常数据(主要由于纬度间距过小)
% index2=find(minan<3.01);
% kkkk=(uuu(49,:)-uuu(48,:))/LLL(1);
% v(i,1:20)=abs(kkkk./f(i));
end
for i=1:59
minan(i)=max(abs(vnan(i,1:20))); %剔除一些异常数据 不剔除赤道的(主要由于纬度间距过小)
index2=find(minan<2);
end
% for i=50:58
% f(i)=2*7.29*0.00001*sin(laa(i))+2*7.29*10^(-5)*cos(laa(i))*0.5;%对靠近赤道的做一个处理
% end
index2(1,46)=60; %补充赤道处
v_nan=vnan(index2',:);
% la2=flipud(la(2:49));
% la2=la2(index2');
la2=la(1:60);
la2_nan=la2(index2');
addpath(genpath('netcdf_tools'));
addpath('D:\风轻叶落\2021.6.17 新的生活\学习\海洋环流\地转流计算\othercolor\')
file=dir('C:\Users\风轻叶落\Desktop\临时\北\北\p15nb*.nc');
% ncdump;
for n=1:49 %数据刚好是高纬到低纬,第50个小于0
filename=['C:\Users\风轻叶落\Desktop\临时\北\北\',file(n).name];
lon=ncread(filename,'longitude');
lat=ncread(filename,'latitude');
% ncdisp
p=ncread(filename,'pressure');%decibar
t=ncread(filename,'temperature');%(ITS-90)
s=ncread(filename,'salinity');%PSS-78
k=find(p<1001); %深度最大只取1000
pp=p(k);
tt=t(k);
ss=s(k);
k2=find((ss>30&ss<40)&tt~=0);
pp=pp(k2);
tt=t(k2);
ss=s(k2);
des=sw_dens(ss,tt,pp);
% s0(501)=35;
% t0(501)=0;
for i=1:length(k2) %!!!这里特别注意,由于数据不全,这里找到k的实际值
des0(i)=sw_dens(35,0,pp(i));
end
a=1./des*100000000; %密度的倒数
a0=1./des0*100000000;
e=a'-a0; %差值
for j=1:20
% for i=1:501
% ee(j)=mean(e(1,1+(j-1)*25:25+(j-1)*25));%平均
% q(20,25)=0;
q=find((1+(j-1)*50
% end
end
u=ee.*50/10000; %平均*压强差
uu(1)=sum(u);
for i=2:20
uu(i)=sum(u)-sum(u(1:i-1));
end
uuu(n,:)=uu;
lo(n,:)=lon;%已经把所有的密度对压强积分求出(不同深度)
la(n,:)=lat;
eee(n,:)=ee;
clear des0 % 注意这里一定要清楚一下,否则有些des0大 有些小,造成数组不能赋值
end
[la,index]=sort(la);
index=flipud(index);
uuu=uuu(index,:); %la不是严格排序的,调整顺序
la=flipud(la); %由于这里的代码是后来修改的 实际上不用反复反转,但是我下面的代码是逆序写的
laa=la.*(pi/180); %其实也可以直接用sind函数
% for i=1:15
% f(i)=2*7.29*0.00001*sin(laa(50-i))+2*7.29*10^(-5)*cos(laa(50-i))*0.5;%对靠近赤道的做一个处理
% end
for i=1:48
f(i)=2*7.29*0.00001*sin(laa(50-i));
kkk=(pi/180)*(6378136*(1-0.006694470));
LL(i)=(1-0.006694470*(sin(laa(50-i)))^2)^(2/3);
L(i)=(la(50-i)-la(49-i))*kkk;
LLL(i)=abs(L(i)./LL(i)); %上述几行只是公式,为了求L
vbei(48,21)=0;
vbei(i,1:20)=(uuu(50-i,:)-uuu(49-i,:))./(f(i).*LLL(i)); %向东为正
% index2=[1:48];
% mibei(i)=max(abs(vbei(i,1:20))) %剔除一些异常数据(主要由于纬度间距过小)
% index2=find(mibei<2);
% kkkk=(uuu(49,:)-uuu(48,:))/LLL(1);
% v(i,1:20)=abs(kkkk./f(i));
end
for i=2:48
mibei(i)=max(abs(vbei(i,1:20))) %剔除一些异常数据 不剔除赤道的(主要由于纬度间距过小)
index2=find(mibei<2);
end
v_bei=vbei(index2',:);
% v_bei(2,:)=abs(v_bei(2,:));
la2=flipud(la(2:49));
la2_bei=la2(index2');
lanew(length(la2_nan)+length(la2_bei),1)=0;
lanew(1:length(la2_nan))=la2_nan;
lanew(length(la2_nan)+1:length(la2_nan)+length(la2_bei))=la2_bei;
v(length(la2_nan)+length(la2_bei),21)=0;
v(1:length(la2_nan),:)=v_nan;
v(length(la2_nan)+1:length(la2_nan)+length(la2_bei),:)=v_bei;
[xlatt,dep]=meshgrid(lanew,linspace(0,1000,21)); %注意这里纬度不能等间距,必须用真实值
% [c.h]=contourf(xlatt',dep',v,[-1,0,1],"ShowText","on");
% contourf(xlatt',dep',v,[-1 0 1],"ShowText","on");
% colorbar;
pcolor(xlatt',dep',v);
shading interp
% colormap(othercolor('RdYlBu6'));
% colormap(othercolor('Spectral9'));
colormap(othercolor('BuOr_8'));
xlabel('纬度(°N)');
ylabel('深度(m)');
title('地转流流速断面分布图');
% colorbar;
caxis([-0.5 0.5]);
% colormap([0 0 1;0 0.2 1;0 0.4 1;0 0.6 1;0 0.8 1;0 1 1;1 1 0;1 0.8 0;1 0.6 0;1 0.4 0;1 0.2 0;1 0 0]);
c=colorbar;
set(c,'tickdir','out') % 朝外
set(c,'YTick',-0.6:0.1:0.6); %色标值范围及显示间隔
set(c,'YTickLabel',{'-0.6','-0.5','-0.4','-0.3','-0.2','-0.1','0','0.1','0.2','0.3','0.4','0.5','0.6'}) %具体刻度赋值
caxis([-0.6 0.6])
set(gcf,'position',[200,300,800,300]);
hold on;
x=zeros(1000,1);
y=linspace(1000,0,1000);
plot(x,y)
x1=ones(1000,1);
x2(1:1000,1)=-1;
% plot(x1,y);
% plot(x2,y);
% plot([0,0],0:1000)
ax=gca;
set(gca,'YDir','reverse');