1 SUBROUTINE surface(rc, rs, zs, zc, xm, xn, mnmax)
3 USE parallel_include_module
9 REAL(dp),
DIMENSION(mnmax) :: rc, rs, zs, zc, xm, xn
13 INTEGER :: i, mn, m, n, n1
14 REAL(dp),
ALLOCATABLE,
DIMENSION(:) ::
15 1 ruu, ruv, rvv, zuu, zuv, zvv, cosmn1, sinmn1
16 REAL(dp) :: tsurfon, tsurfoff
32 ALLOCATE (ruu(nuv3), ruv(nuv3), rvv(nuv3), zuu(nuv3), zuv(nuv3),
33 1 zvv(nuv3), cosmn1(nuv3), sinmn1(nuv3), stat = i)
34 IF (i .ne. 0) stop
'Allocation error in SURFACE'
37 DO i = nuv3min, nuv3max
38 zub(i) = 0; zvb(i) = 0; zuu(i) = 0; zuv(i) = 0; zvv(i) = 0
39 rub(i) = 0; rvb(i) = 0; ruu(i) = 0; ruv(i) = 0; rvv(i) = 0
44 n = nint(xn(mn)/(nfper))
46 cosmn1(:) = cosu1(:,m)*cosv1(:,n1) + csign(n)*sinu1(:,m)*
48 sinmn1(:) = sinu1(:,m)*cosv1(:,n1) - csign(n)*cosu1(:,m)*
51 r1b(i) = r1b(i) + rc(mn) * cosmn1(i)
52 z1b(i) = z1b(i) + zs(mn) * sinmn1(i)
54 DO i = nuv3min, nuv3max
55 rub(i) = rub(i) - xm(mn) * rc(mn) * sinmn1(i)
56 rvb(i) = rvb(i) + xn(mn) * rc(mn) * sinmn1(i)
57 zub(i) = zub(i) + xm(mn) * zs(mn) * cosmn1(i)
58 zvb(i) = zvb(i) - xn(mn) * zs(mn) * cosmn1(i)
59 ruu(i) = ruu(i) - xm(mn)*xm(mn)*rc(mn) * cosmn1(i)
60 ruv(i) = ruv(i) + xm(mn)*xn(mn)*rc(mn) * cosmn1(i)
61 rvv(i) = rvv(i) - xn(mn)*xn(mn)*rc(mn) * cosmn1(i)
62 zuu(i) = zuu(i) - xm(mn)*xm(mn)*zs(mn) * sinmn1(i)
63 zuv(i) = zuv(i) + xm(mn)*xn(mn)*zs(mn) * sinmn1(i)
64 zvv(i) = zvv(i) - xn(mn)*xn(mn)*zs(mn) * sinmn1(i)
70 r1b(i) = r1b(i) + rs(mn) * sinmn1(i)
71 z1b(i) = z1b(i) + zc(mn) * cosmn1(i)
73 DO i = nuv3min, nuv3max
74 rub(i) = rub(i) + xm(mn) * rs(mn) * cosmn1(i)
75 rvb(i) = rvb(i) - xn(mn) * rs(mn) * cosmn1(i)
76 zub(i) = zub(i) - xm(mn) * zc(mn) * sinmn1(i)
77 zvb(i) = zvb(i) + xn(mn) * zc(mn) * sinmn1(i)
78 ruu(i) = ruu(i) - xm(mn)*xm(mn)*rs(mn) * sinmn1(i)
79 ruv(i) = ruv(i) + xm(mn)*xn(mn)*rs(mn) * sinmn1(i)
80 rvv(i) = rvv(i) - xn(mn)*xn(mn)*rs(mn) * sinmn1(i)
81 zuu(i) = zuu(i) - xm(mn)*xm(mn)*zc(mn) * cosmn1(i)
82 zuv(i) = zuv(i) + xm(mn)*xn(mn)*zc(mn) * cosmn1(i)
83 zvv(i) = zvv(i) - xn(mn)*xn(mn)*zc(mn) * cosmn1(i)
105 DO i = nuv3min, nuv3max
106 guu_b(i) = rub(i)*rub(i) + zub(i)*zub(i)
107 guv_b(i) = (rub(i)*rvb(i)+ zub(i)*zvb(i))*onp*2
108 gvv_b(i) = (rvb(i)*rvb(i)+ zvb(i)*zvb(i)+(r1b(i)*r1b(i)))*onp2
109 snr(i) = signgs*r1b(i)*zub(i)
110 snv(i) = signgs*(rub(i)*zvb(i) - rvb(i)*zub(i))
111 snz(i) =-signgs*r1b(i)*rub(i)
112 drv(i) = -(r1b(i)*snr(i) + z1b(i)*snz(i))
113 auu(i) = p5*(snr(i)*ruu(i) + snz(i)*zuu(i))
114 auv(i) = (snr(i)*ruv(i) + snv(i)*rub(i) + snz(i)*zuv(i))*onp
115 avv(i) = (snv(i)*rvb(i) + p5*(snr(i)*(rvv(i) - r1b(i))
116 1 + snz(i)* zvv(i)))*onp2
120 rzb2(i) = r1b(i)*r1b(i) + z1b(i)*z1b(i)
123 DO i = 1 + nv, nuv3 - nv
124 rzb2(imirr(i)) = rzb2(i)
125 r1b(imirr(i)) = r1b(i)
126 z1b(imirr(i)) =-z1b(i)
131 rcosuv(i) = r1b(i)*cosuv(i)
132 rsinuv(i) = r1b(i)*sinuv(i)
135 DEALLOCATE (ruu, ruv, rvv, zuu, zuv, zvv, cosmn1, sinmn1, stat=i)
137 CALL second0(tsurfoff)
138 surface_time = surface_time + (tsurfoff-tsurfon)
140 END SUBROUTINE surface