Home > utilities > calc_scoord.m

calc_scoord

PURPOSE ^

%n=18;iesub=63;jesub=36;

SYNOPSIS ^

function [polcoms]=calc_scoord(polcoms)

DESCRIPTION ^

 %n=18;iesub=63;jesub=36;
dir_path='/users/modellers/rito/research/Projects/MERSEA/dataWCH/WCH2_rito/data2003/';
filenameb= 'WCH.bathy_WCH2'
filenameiu= 'WCH.ipexu_WCH2'
filenameib= 'WCH.ipexb_WCH2'
 program to calculate the scoordinates from model run
dir_data = '/data/milkyway/rito/lolo/mpi_H_POLCOMS_VIGO_3D_OK_2/setups/data2002_03/'
 Model parameters
n=18;iesub=50;jesub=70;
  S coordinate parameters

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [polcoms]=calc_scoord(polcoms)
0002 % %n=18;iesub=63;jesub=36;
0003 %dir_path='/users/modellers/rito/research/Projects/MERSEA/dataWCH/WCH2_rito/data2003/';
0004 %filenameb= 'WCH.bathy_WCH2'
0005 %filenameiu= 'WCH.ipexu_WCH2'
0006 %filenameib= 'WCH.ipexb_WCH2'
0007 % program to calculate the scoordinates from model run
0008 %dir_data = '/data/milkyway/rito/lolo/mpi_H_POLCOMS_VIGO_3D_OK_2/setups/data2002_03/'
0009 % Model parameters
0010 %n=18;iesub=50;jesub=70;
0011 %  S coordinate parameters
0012 hs = polcoms.bathy;
0013 % Read ipexb
0014 
0015 polcoms.ipexbM= zeros(polcoms.iesub,polcoms.jesub);
0016 for aa=1:length(polcoms.isea)
0017     polcoms.ipexbM(polcoms.isea(aa),polcoms.jsea(aa))=1;
0018 end
0019 polcoms.ipexuM= zeros(polcoms.iesub,polcoms.jesub);
0020 for aa=1:length(polcoms.npusea)
0021     polcoms.ipexuM(polcoms.iusea(aa),polcoms.jusea(aa))=1;
0022 end
0023 
0024 %  Evenly spaced S values
0025 %
0026 
0027 dsc = 1.0d0/(polcoms.params.n-2);
0028 sval(1)   = -1.0d0;
0029 for k=2:polcoms.params.n-2
0030     sval(k) = sval(k-1)+dsc;
0031 end
0032 sval(polcoms.params.n-1) = 0.0d0;
0033 %JPO  START
0034 sval(polcoms.params.n)   = 0.0d0;
0035 %JPO  END
0036 for j=1:polcoms.jesub
0037     for i=1:polcoms.iesub
0038         sigo(1,i,j) = -1.0d0;
0039         for k=2:polcoms.params.n-2
0040 %             c               for identical to sigma on shelf
0041 %             c
0042             if (hs(i,j)>polcoms.scoord.hc) 
0043                 ffh=(hs(i,j)-polcoms.scoord.hc)/hs(i,j);
0044                 cs = (1.0d0-polcoms.scoord.bb)*(sinh(polcoms.scoord.theta*sval(k)))/sinh(polcoms.scoord.theta)+...
0045                     polcoms.scoord.bb*(tanh(polcoms.scoord.theta*(sval(k)+0.5d0))...
0046                     -tanh(0.5d0*polcoms.scoord.theta))/...
0047                     (2.*tanh(0.5d0*polcoms.scoord.theta));
0048                 sigo(k,i,j) = sval(k)+ffh*(cs-sval(k));
0049             else
0050                 sigo(k,i,j) = sval(k);
0051             end
0052         end
0053         sigo(polcoms.params.n-1,i,j) = 0.0d0;
0054 %         CJPO START
0055         sigo(polcoms.params.n,i,j) = 0.0d0;
0056 %         CJPO END
0057         %
0058     end
0059     %
0060 end
0061 %
0062 %     Define coordinates on B points
0063 %
0064 ds = 0.0;
0065 for j=1:polcoms.jesub
0066     for i=1:polcoms.iesub
0067         for k=1:polcoms.params.n-2
0068             ds(k,i,j) = sigo(k+1,i,j)-sigo(k,i,j);
0069         end
0070         %c
0071         %c           Set surface level to ensure correct sum for ds
0072         %c
0073         sds = 0.0d0;
0074         for k=1:polcoms.params.n-3
0075             sds = sds+ds(k,i,j);
0076         end
0077         ds(polcoms.params.n-2,i,j) = 1.0d0-sds;
0078         %c
0079         dsu(1,i,j) = ds(1,i,j);
0080         for k=2:polcoms.params.n-2
0081             dsu(k,i,j) = 0.5d0*(ds(k,i,j)+ds(k-1,i,j));
0082         end
0083         dsu(polcoms.params.n-1,i,j) = ds(polcoms.params.n-2,i,j);
0084         %c
0085         %sig(0,i,j) = -1.0d0;
0086         sig(1,i,j) = -1.0d0+0.5d0*ds(1,i,j);
0087         for k=2:polcoms.params.n-2
0088             sig(k,i,j) = sig(k-1,i,j)+dsu(k,i,j);
0089         end
0090         sig(polcoms.params.n-1,i,j) = 0.0d0;
0091         %CJPO START
0092         sig(polcoms.params.n,i,j) = 0.0d0;
0093         %CJPO END
0094     end
0095 end
0096 sigov = nan*ones(size(sig));
0097 dsv = nan*ones(size(dsu));
0098 dsuv = nan*ones(size(dsu));
0099 %c
0100 %c     Average coordinates onto U points
0101 %c
0102 for j=2:polcoms.jesub
0103     for i=2:polcoms.iesub
0104         if ( polcoms.ipexbM(i,j)~=0 | polcoms.ipexuM(i,j)~=0 )
0105             sigov(1,i,j) = -1.0d0;
0106             for k=2:polcoms.params.n-2
0107                 sigov(k,i,j) = 0.25d0*...
0108                     (sigo(k,i  ,j  )+sigo(k,i-1,j  )...
0109                     +sigo(k,i-1,j-1)+sigo(k,i  ,j-1));
0110             end
0111             sigov(polcoms.params.n-1,i,j) = 0.0d0;
0112             %c
0113         end
0114         %c
0115         for k=1:polcoms.params.n-2
0116             dsv(k,i,j) = sigov(k+1,i,j)-sigov(k,i,j);
0117         end
0118         %c
0119         %cjth        Set surface level to ensure correct sum for DS
0120         %c
0121         sds=0.;
0122         for k=1:polcoms.params.n-3
0123             sds=sds+dsv(k,i,j);
0124         end
0125         dsv(polcoms.params.n-2,i,j) = 1.0d0-sds;
0126         %c
0127         dsuv(1,i,j) = dsv(1,i,j);
0128         dsuv(polcoms.params.n-1,i,j) = dsv(polcoms.params.n-2,i,j);
0129         for k=2:polcoms.params.n-2
0130             dsuv(k,i,j) = 0.5d0*(dsv(k,i,j)+dsv(k-1,i,j));
0131         end
0132         %c
0133 %        sigv(0,i,j) = -1.0d0;
0134         sigv(1,i,j) = -1.0d0+0.5d0*dsv(1,i,j);
0135         for k=2:polcoms.params.n-2
0136             sigv(k,i,j) = sigv(k-1,i,j)+dsuv(k,i,j);
0137         end
0138         sigv(polcoms.params.n-1,i,j) = 0.0d0;
0139         %CJPO START
0140         sigv(polcoms.params.n,i,j) = 0.0d0;
0141         %CJPO END
0142     end
0143 end
0144 sigv(:,1,:)=sigo(:,1,:);sigv(:,:,1)=sigo(:,:,1);
0145 polcoms.sig=sig;
0146 polcoms.sigv=sigv;
0147 polcoms.sigo=sigo;
0148 polcoms.sigov=sigov;
0149 polcoms.ds=ds;
0150 polcoms.dsu=dsu;
0151 polcoms.dsv=dsv;
0152 polcoms.dsuv=dsuv;
0153 
0154 return

Generated on Wed 20-Feb-2019 16:06:01 by m2html © 2005