0001 function [polcoms]=calc_scoord(polcoms)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 hs = polcoms.bathy;
0013
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
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
0034 sval(polcoms.params.n) = 0.0d0;
0035
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
0041
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
0055 sigo(polcoms.params.n,i,j) = 0.0d0;
0056
0057
0058 end
0059
0060 end
0061
0062
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
0071
0072
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
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
0085
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
0092 sig(polcoms.params.n,i,j) = 0.0d0;
0093
0094 end
0095 end
0096 sigov = nan*ones(size(sig));
0097 dsv = nan*ones(size(dsu));
0098 dsuv = nan*ones(size(dsu));
0099
0100
0101
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
0113 end
0114
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
0119
0120
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
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
0133
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
0140 sigv(polcoms.params.n,i,j) = 0.0d0;
0141
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