44real(dp),
dimension(2,2),
intent(in ):: em
45real(dp),
dimension(2,2),
intent(out):: vv,oo
46real(dp):: a,b,c,d,e,f,g,h
47a=em(1,1); b=em(1,2); c=em(2,2)
51g=sqrt(b**2+(h+abs(f))**2)
52if (g==
u0)then; vv(:,1)=(/
u1,
u0/)
53elseif(f>
u0)then; vv(:,1)=(/h+f,b/)/g
54else ; vv(:,1)=(/b,h-f/)/g
56vv(:,2)=(/-vv(2,1),vv(1,1)/)
57oo=matmul(transpose(vv),matmul(em,vv))
77real(dp),
dimension(2,2),
intent(in ):: em
78real(dp),
dimension(2,2),
intent(out):: vv,oo
79real(dp),
dimension(2,2,2,2),
intent(out):: vvd,ood
80logical,
intent(out):: ff
81real(dp),
dimension(2,2):: emd,tt,vvr
82real(dp) :: oodif,dtheta
84call eigensym2(em,vv,oo); vvr(1,:)=-vv(2,:); vvr(2,:)=vv(1,:)
85oodif=oo(1,1)-oo(2,2); ff=oodif==
u0;
if(ff)
return
94 emd(i,j)=
o2; emd(j,i)=
o2
96 tt=matmul(transpose(vv),matmul(emd,vv))
100 vvd(:,:,i,j)=vvr*dtheta
113real(dp),
dimension(2,2),
intent(in ):: em
114real(dp),
dimension(2,2),
intent(out):: z
116z(1,1)=em(2,2); z(2,1)=-em(2,1); z(1,2)=-em(1,2); z(2,2)=em(1,1)
117detem=em(1,1)*em(2,2)-em(2,1)*em(1,2)
178real(dp),
dimension(2,2),
intent(in ):: x
179real(dp),
dimension(2,2),
intent(out):: z
180real(dp),
dimension(2,2,2,2),
intent(out):: zd
181real(dp),
dimension(2,2):: px
182real(dp) :: rdetx,lrdetx,htrpxs,q
183rdetx=sqrt(x(1,1)*x(2,2)-x(1,2)*x(2,1))
186htrpxs= ((px(1,1)+px(2,2))/2)**2
190 z=z*lrdetx; zd=zd/lrdetx
204real(dp),
dimension(2,2),
intent(in ):: x
205real(dp),
dimension(2,2),
intent(out):: z
206real(dp),
dimension(2,2,2,2),
intent(out):: zd
207real(dp),
dimension(2,2,2,2):: vvd,ood
208real(dp),
dimension(2,2) :: vv,oo,oori,tt
212z=
u0; z(1,1)=sqrt(oo(1,1)); z(2,2)=sqrt(oo(2,2))
213z=matmul(matmul(vv,z),transpose(vv))
214oori=
u0; oori(1,1)=
u1/sqrt(oo(1,1)); oori(2,2)=
u1/sqrt(oo(2,2))
217 tt=matmul(vvd(:,:,i,j),transpose(vv))
218 zd(:,:,i,j)=
o2*matmul(matmul(matmul(vv,ood(:,:,i,j)),oori),transpose(vv))&
219 +matmul(tt,z)-matmul(z,tt)
237real(dp),
dimension(2,2),
intent(in ):: x
238real(dp),
dimension(2,2),
intent(out):: z
239real(dp),
dimension(2,2,2,2),
intent(out):: zd
240integer(spi),
parameter :: nit=300
241real(dp),
parameter :: crit=1.e-17
242real(dp),
dimension(2,2) :: r,rp,rd,rpd
245r=x; r(1,1)=x(1,1)-1; r(2,2)=x(2,2)-1
252 if(sum(abs(rp))<crit)
exit
253 c=-c*(n*2+1)/(2*(n+2))
262 zd(:,:,i,j)=zd(:,:,i,j)+c*rpd
263 rpd=matmul(rd,rp)+matmul(r,rpd)
265 if(sum(abs(rp))<crit)
exit
266 c=-c*(n*2+1)/(2*(n+2))
295real(dp),
dimension(2,2),
intent(in ):: x
296real(dp),
dimension(2,2),
intent(out):: z
297real(dp),
dimension(2,2,2,2),
intent(out):: zd
298real(dp),
dimension(2,2):: px
299real(dp) :: trxh,detpx
300trxh=(x(1,1)+x(2,2))*
o2
301px=x;px(1,1)=x(1,1)-trxh;px(2,2)=x(2,2)-trxh
302detpx=abs(px(1,1)*px(2,2)-px(1,2)*px(2,1))
318real(dp),
dimension(2,2),
intent(in ):: x
319real(dp),
dimension(2,2),
intent(out):: z
320real(dp),
dimension(2,2,2,2),
intent(out):: zd
321real(dp),
dimension(2,2,2,2):: vvd,ood
322real(dp),
dimension(2,2) :: vv,oo,ooe,tt
326z=
u0; z(1,1)=exp(oo(1,1)); z(2,2)=exp(oo(2,2))
327z=matmul(matmul(vv,z),transpose(vv))
328ooe=
u0; ooe(1,1)=exp(oo(1,1)); ooe(2,2)=exp(oo(2,2))
331 tt=matmul(vvd(:,:,i,j),transpose(vv))
332 zd(:,:,i,j)=matmul(matmul(matmul(vv,ood(:,:,i,j)),ooe),transpose(vv))&
333 +matmul(tt,z)-matmul(z,tt)
348real(dp),
dimension(2,2),
intent(in ):: x
349real(dp),
dimension(2,2),
intent(out):: z
350real(dp),
dimension(2,2,2,2),
intent(out):: zd
351integer(spi),
parameter :: nit=100
352real(dp),
parameter :: crit=1.e-17_dp
353real(dp),
dimension(2,2) :: xp,xd,xpd
356z=0; z(1,1)=
u1; z(2,2)=
u1
362 if(sum(abs(xp))<crit)
exit
372 zd(:,:,i,j)=zd(:,:,i,j)+c*xpd
373 xpd=matmul(xd,xp)+matmul(x,xpd)
375 if(sum(abs(xpd))<crit)
exit
411real(dp),
dimension(2,2),
intent(in ):: x
412real(dp),
dimension(2,2),
intent(out):: z
413real(dp),
dimension(2,2,2,2),
intent(out):: zd
414real(dp),
dimension(2,2):: vv,oo,d11,d12,d22,pqr,d11pqr,d12pqr,d22pqr
415real(dp) :: c,s,cc,cs,ss,c2h,p,q,r,lp,lq,L
418if(oo(1,1)<=
u0 .or. oo(2,2)<=
u0)stop
'In logsym2; matrix x is not positive definite'
419c=vv(1,1); s=vv(1,2); cc=c*c; cs=c*s; ss=s*s; c2h=(cc-ss)*
o2
420p=
u1/oo(1,1); q=
u1/oo(2,2); lp=log(p); lq=log(q); oo(1,1)=-lp; oo(2,2)=-lq
421z=matmul(vv,matmul(oo,transpose(vv)))
423d11(1,:)=(/ cc,cs /); d11(2,:)=(/ cs,ss/)
424d12(1,:)=(/-cs,c2h/); d12(2,:)=(/c2h,cs/)
425d22(1,:)=(/ ss,-cs/); d22(2,:)=(/-cs,cc/)
426pqr(1,:)=(/p,r/) ; pqr(2,:)=(/r,q/)
430zd(:,:,1,1)=matmul(vv,matmul(d11pqr,transpose(vv)))
431zd(:,:,1,2)=matmul(vv,matmul(d12pqr,transpose(vv)))
432zd(:,:,2,2)=matmul(vv,matmul(d22pqr,transpose(vv)))
433zd(:,:,2,1)=zd(:,:,1,2)