From ed6b5111edad2265cb6b0562724c576190dc2c1c Mon Sep 17 00:00:00 2001 From: ashbre <ashbre@noc.ac.uk> Date: Wed, 27 Mar 2019 11:44:11 +0000 Subject: [PATCH] Adding matlab function for IC generation --- SCRIPTS/nemo_IC_salinity.m | 66 +++++++++++++++++++++++++++++++++++ SCRIPTS/nemo_IC_temperature.m | 64 +++++++++++++++++++++++++++++++++ SCRIPTS/smooth2.m | 54 ++++++++++++++++++++++++++++ 3 files changed, 184 insertions(+) create mode 100644 SCRIPTS/nemo_IC_salinity.m create mode 100644 SCRIPTS/nemo_IC_temperature.m create mode 100644 SCRIPTS/smooth2.m diff --git a/SCRIPTS/nemo_IC_salinity.m b/SCRIPTS/nemo_IC_salinity.m new file mode 100644 index 0000000..de693b5 --- /dev/null +++ b/SCRIPTS/nemo_IC_salinity.m @@ -0,0 +1,66 @@ +clear all +clc +addpath('/projectsa/ETI/Tracer_work/Matlab_progs') + +fname = 'initcd_vosaline.nc'; +fname_data = 'Sal_16_0000.nc'; +z_data = 'domain_cfg.nc'; + +Sin=ncread(fname_data,'so'); +xin=double(ncread(fname_data,'longitude')); +yin=double(ncread(fname_data,'latitude')); +zin=double(ncread(fname_data,'depth')); +Sin=permute(Sin,[2 1 3]); + +Sout=double(ncread(fname,'vosaline')); +xout=double(ncread(fname,'x')); +yout=double(ncread(fname,'y')); +dzout=ncread(z_data,'e3t_0'); + +xout=repmat(xout,1,1,size(Sout,3)); +yout=repmat(yout,1,1,size(Sout,3)); + + + + +z=zeros(size(Sout,1),size(Sout,2),size(Sout,3)); + +for i=1:size(Sout,3) + + + if i==1 + z(:,:,i)=dzout(:,:,i); + else + z(:,:,i)=z(:,:,i-1)+dzout(:,:,i); + end + + + +end + +zin(1)=0; +zin(end)=max(z(:))+1; + + +% +% parfor i=1:size(Sin,3) +% i +% Sin(:,:,i)=smooth2(Sin(:,:,i),100,100); +% +% end + + + + +Sinterp=interp3(xin,yin,zin,Sin,xout,yout,z); + + + + + +ncid=netcdf.open(fname,'WRITE'); +varid = netcdf.inqVarID(ncid,'vosaline'); + +netcdf.putVar(ncid,varid,Sinterp) + + diff --git a/SCRIPTS/nemo_IC_temperature.m b/SCRIPTS/nemo_IC_temperature.m new file mode 100644 index 0000000..413ad8e --- /dev/null +++ b/SCRIPTS/nemo_IC_temperature.m @@ -0,0 +1,64 @@ +clear all +clc + +fname = 'initcd_votemper.nc'; +fname_data = 'Temp_16_0000.nc'; +z_data = 'domain_cfg.nc'; + +Tin=ncread(fname_data,'thetao'); +xin=double(ncread(fname_data,'longitude')); +yin=double(ncread(fname_data,'latitude')); +zin=double(ncread(fname_data,'depth')); +Tin=permute(Tin,[2 1 3]); + +Tout=double(ncread(fname,'votemper')); +xout=double(ncread(fname,'x')); +yout=double(ncread(fname,'y')); +dzout=ncread(z_data,'e3t_0'); + +xout=repmat(xout,1,1,size(Tout,3)); +yout=repmat(yout,1,1,size(Tout,3)); + + + + +z=zeros(size(Tout,1),size(Tout,2),size(Tout,3)); + +for i=1:size(Tout,3) + + + if i==1 + z(:,:,i)=dzout(:,:,i); + else + z(:,:,i)=z(:,:,i-1)+dzout(:,:,i); + end + + + +end + +zin(1)=0; +zin(end)=max(z(:))+1; + + + +% parfor i=1:size(Tin,3) +% i +% Tin(:,:,i)=smooth2(Tin(:,:,i),100,100); +% +% end + + + +Tinterp=interp3(xin,yin,zin,Tin,xout,yout,z); + + + + + +ncid=netcdf.open(fname,'WRITE'); +varid = netcdf.inqVarID(ncid,'votemper'); + +netcdf.putVar(ncid,varid,Tinterp) + + diff --git a/SCRIPTS/smooth2.m b/SCRIPTS/smooth2.m new file mode 100644 index 0000000..aa7c399 --- /dev/null +++ b/SCRIPTS/smooth2.m @@ -0,0 +1,54 @@ +function [mat_new] = smooth2(mat_old,stencilx,stencily) + + +%stencil = 2; + +% check matrix in each direction + +% mat(x,y) + +%mat_new=nan(size(mat_old,1),size(mat_old,2)); + +mat_new = mat_old; + +for i=1:size(mat_old,1) + for j=1:size(mat_old,2) + + if isnan(mat_old(i,j)) + + type1=(i-1); + type2=abs(i-size(mat_old,1)); + type3=(j-1); + type4=abs(j-size(mat_old,2)); + + + %adj_stencil=min([stencil type1 type2 type3 type4]); + + + + + + x_min=(i-min([stencilx type1])); + x_max=(i+min([stencilx type2])); + y_min=(j-min([stencily type3])); + y_max=(j+min([stencily type4])); + + sub_mat = mat_old(x_min:x_max,y_min:y_max); + + + mat_new(i,j) = nanmean(sub_mat(:)); + + %end + + % if isnan(mat_old(i,j)) + % mat_new(i,j)=NaN; + % end + + + end + end +end + + +end + -- GitLab