0001 if (nargin<6), sCoeffSum='No'; end;
0002
0003 nNbLambda=length(xp);
0004
0005 if strcmpi(sCoeffSum,'ESAonly')
0006 sCoeffSum='coeffSum';
0007 nNmax=0;
0008 stMdip.MTotPerp=[];
0009 stMdip.MTotPara=[];
0010 stMdip.MTotPerpCoeffs=[];
0011 stMdip.MTotParaCoeffs=[];
0012
0013 else
0014
0015 nNmax=size(stGD.Gamma,2);
0016
0017 if (nargin<5), nNmaxESA=nNmax; end;
0018
0019
0020 stRBxp=GenRBall(nNmax,xp);
0021
0022 n=transpose(1:nNmax);
0023 cc1 = (2.*n+1);
0024 cc2 = cc1 .*(n+1).*n;
0025
0026 xp2inv=1./(xp.^2);
0027
0028
0029
0030 tmp1=GenCheckSum2Mat(stRBxp.psi, stGD.Delta.*stRBxp.xi,'tmp1_1','DipMcoeff');
0031 tmpMat= abs(tmp1).^2;
0032 stMdip.MRadPerp = 3/2* xp2inv.^2 .* (tmpMat * cc2);
0033
0034
0035 if strcmpi(sCoeffSum,'coeffsum')
0036 xp2invmat=repmat(xp2inv,1,nNmax);
0037 stMdip.MRadPerpCoeffs=3/2*xp2invmat.^2 .* (tmpMat .* repmat(transpose(cc2),nNbLambda,1));
0038 end
0039
0040
0041 tmp1=GenCheckSum2Mat(stRBxp.psi, stGD.Gamma.*stRBxp.xi,'tmp1_2','DipMcoeff');
0042 tmp2=GenCheckSum2Mat(stRBxp.Dpsi, stGD.Delta.*stRBxp.Dxi,'tmp2_2','DipMcoeff');
0043 tmpMat= abs(tmp1).^2 + abs(tmp2).^2;
0044 stMdip.MRadPara = 3/4*xp2inv .* (tmpMat * cc1);
0045
0046 if strcmpi(sCoeffSum,'coeffsum')
0047 stMdip.MRadParaCoeffs=3/4*xp2invmat .* (tmpMat .* repmat(transpose(cc1),nNbLambda,1));
0048 end
0049
0050
0051
0052
0053
0054 xi2=stRBxp.xi.^2;
0055 Dxi2=stRBxp.Dxi.^2;
0056
0057
0058 tmpMat=GenCheckSumReal(stGD.Delta .* xi2,'tmpMat_2','DipMcoeff');
0059 stMdip.MTotPerp = 1+3/2*xp2inv.^2 .* GenCheckSumMatVec(tmpMat,cc2,'MTotPerp','DipMcoeff');
0060
0061 if strcmpi(sCoeffSum,'coeffsum')
0062 stMdip.MTotPerpCoeffs=3/2*xp2invmat.^2 .* (tmpMat .* repmat(transpose(cc2),nNbLambda,1));
0063 end
0064
0065
0066 tmp1=GenCheckSumReal(stGD.Delta .* Dxi2,'tmp1_3','DipMcoeff');
0067 tmp2=GenCheckSumReal(stGD.Gamma .* xi2,'tmp2_3','DipMcoeff');
0068 tmpMat= GenCheckSum2Mat(tmp1,tmp2,'tmpMat_3','DipMcoeff');
0069 stMdip.MTotPara = 1+3/4*xp2inv .* GenCheckSumMatVec(tmpMat,cc1,'MTotPara','DipMcoeff');
0070
0071 if strcmpi(sCoeffSum,'coeffsum')
0072 stMdip.MTotParaCoeffs=3/4*xp2invmat .* (tmpMat .* repmat(transpose(cc1),nNbLambda,1));
0073 end
0074 clear tmp1 tmp2 tmpMat xi2 Dxi2;
0075 end
0076
0077
0078 if nNmaxESA>nNmax
0079 nES=(nNmax+1):nNmaxESA;
0080 nNbNES=length(nES);
0081 ccES = (nES+1).*(a/(a+d)).^(2*nES+1);
0082 s2mat=repmat(s.^2,1,nNbNES);
0083 imAlphaES=imag( (s2mat-1)./(s2mat+1+repmat(1./nES,nNbLambda,1)));
0084 xp3inv=1./(xp.^3);
0085 MTotPerpES=3/2*xp3inv.* (imAlphaES * transpose(ccES.*(nES+1)));
0086 MTotParaES=3/4*xp3inv.* (imAlphaES * transpose(ccES.*(nES)));
0087 stMdip.MTotPerp =stMdip.MTotPerp + MTotPerpES;
0088 stMdip.MTotPara =stMdip.MTotPara + MTotParaES;
0089 if strcmpi(sCoeffSum,'coeffsum')
0090 xp3invmat=repmat(xp3inv,1,nNbNES);
0091 stMdip.MTotPerpCoeffs = [stMdip.MTotPerpCoeffs, 3/2*xp3invmat .* imAlphaES .* repmat(ccES.*(nES+1),nNbLambda,1)];
0092 stMdip.MTotParaCoeffs = [stMdip.MTotParaCoeffs, 3/4*xp3invmat .* imAlphaES .* repmat(ccES.*(nES),nNbLambda,1)];
0093 end
0094 end
0095