5 INTEGER,
intent(in) :: n
8 real,
intent(out) :: x(n)
9 real,
intent(out) :: w(n)
15 DOUBLE PRECISION p1,p2,p3,pp,xl,xm,z,z1
21 z=cos(3.141592654d0*(i-.25d0)/(n+.5d0))
28 p1=((2.d0*j-1.d0)*z*p2-(j-1.d0)*p3)/j
30 pp=n*(z*p1-p2)/(z*z-1.d0)
34 if(abs(z-z1).gt.eps)
goto 1
37 w(i)=2.d0*xl/((1.d0-z*z)*pp*pp)
45 subroutine z_cmpcg(sigma,depth,grav,cg)
75 real,
intent(in) :: sigma
76 real,
intent(in) :: depth
77 real,
intent(in) :: grav
78 real,
intent(out) :: cg
87 if(depth <= 0. .or. sigma <= 0.)
then
90 if(depth*k > 30.)
then
93 cg = sigma/k*(0.5+depth*k/sinh(2.*depth*k))
101 subroutine z_intp1(x1,y1,x2,y2,n1,n2,ierr)
139 integer,
intent(in) :: n1
140 integer,
intent(in) :: n2
141 real,
intent(in) :: x1(n1)
142 real,
intent(in) :: y1(n1)
143 real,
intent(in) :: x2(n2)
144 real,
intent(out) :: y2(n2)
145 integer,
intent(out) :: ierr
186 real,
parameter :: eps=1.e-20
206 if (abs(xmin1-xmax1) < eps .or. abs(x1(1)-x1(n1)) < eps)
then
211 if ((abs(xmin2-xmax2) < eps .or. abs(x2(1)-x2(n2)) < eps) .and. n2 > 1)
then
218 if(x1(1) < x1(n1))
then
220 if(x1(i1) > x1(i1+1))
then
222 write(*,*)
'z_intp1: i1 x1(i1) x1(i1+1):',i1,x1(i1),x1(i1+1)
228 if(x2(i2) > x2(i2+1))
then
230 write(*,*)
'z_intp1: i2 x2(i2) x2(i2+1):',i2,x2(i2),x2(i2+1)
237 if(x1(i1) < x1(i1+1))
then
239 write(*,*)
'z_intp1: i1 x1(i1) x1(i1+1):',i1,x1(i1),x1(i1+1)
245 if(x2(i2) < x2(i2+1))
then
247 write(*,*)
'z_intp1: i2 x2(i2) x2(i2+1):',i2,x2(i2),x2(i2+1)
262 do while (s1 <= s2 .and. i1 < n1)
274 fac = ds/(x1(i1)-x1(i1-1))
275 y2(i2) = y1(i1-1) + fac*(y1(i1)-y1(i1-1))
280 if(i2==n2 .and. s2>s1) y2(n2) = y1(n1)
318 integer,
intent(in) :: npol
319 real,
intent(in) :: xpol(npol)
320 real,
intent(in) :: ypol(npol)
321 real,
intent(out) :: area
330 real xmin,xmax,ymin,ymax
353 xmean = 0.5*(xmin + xmax)
354 ymean = 0.5*(ymin + ymax)
365 if(ipol==npol) ipol1 = 1
371 darea = 0.5*((xa-xmean)*(yb-ymean) - (xb-xmean)*(ya-ymean))
373 sumx = sumx + darea*(xa+xb+xmean)/3.
374 sumy = sumy + darea*(ya+yb+ymean)/3.
403 integer,
intent(in) :: nx
404 real,
intent(in) :: x(nx)
405 real,
intent(out) :: dx(nx)
416 dx(ix) = 0.5 * (x(ix+1) - x(ix-1))
420 dx(1) = dx(2)*dx(2)/dx(3)
421 dx(nx) = dx(nx-1)*dx(nx-1)/dx(nx-2)
431 real function z_root2(func,x1,x2,xacc,iprint,ierr)
500 real,
intent (in) :: x1
501 real,
intent (in) :: x2
502 real,
intent (in) :: xacc
503 integer,
intent (in) :: iprint
504 integer,
intent (out) :: ierr
513 parameter(maxit = 20)
536 inquire(unit=luprint,opened=lopen)
539 write(*,
'(a,i4)')
'Z_ROOT2: invalid unit number:',iprint
557 if((fl > 0. .and. fh < 0.) .or. (fl < 0. .and. fh > 0.))
then
565 s = sqrt(fm**2-fl*fh)
566 if(s == 0.)
goto 9000
567 xnew = xm+(xm-xl)*(sign(1.,fl-fh)*fm/s)
572 if (abs(xnew-zriddr) <= xacc)
then
579 if (fnew == 0.)
goto 9000
581 if(sign(fm,fnew) /= fm)
then
586 elseif(sign(fl,fnew) /= fl)
then
589 elseif(sign(fh,fnew) /= fh)
then
597 if(abs(xh-xl) <= xacc)
goto 9000
599 if(luprint > 0)
write(luprint,
'(a,i4,5e14.6)') &
600 &
'Z_ROOT2: iter,x1,x2,|x1-x2|,xacc,z:', iter,xl,xh,abs(xl-xh),xacc,fnew
604 if(luprint > 0)
write(luprint,
'(a)')
'Z_ROOT2: -> ierr=2'
606 else if (fl == 0.)
then
608 else if (fh == 0.)
then
620 if(luprint > 0)
write(luprint,
'(a,2i3,5e13.5)') &
621 &
'Z_ROOT2: ierr,iter,xl,xh,acc,x0,z0:', ierr,iter,xl,xh,xacc,
z_root2,func(
z_root2)
652 character(len=*),
intent(inout) :: str
661 integer i,ial,iau,izl
670 if(ichar(str(i:i)) >= ial.and. ichar(str(i:i)) <= izl)
then
671 str(i:i) = char(ichar(str(i:i))-ial+iau)
679 real function z_wnumb(w,d,grav)
709 real,
intent(in) :: w
710 real,
intent(in) :: d
711 real,
intent(in) :: grav
724 if(d<=0 .or. w<= 0.)
then
729 xx = y*(y+1./(1.+y*(0.66667+y*(0.35550+y*(0.16084+y*(0.06320+y* &
730 & (0.02174+y*(0.00654+y*(0.00171+y*(0.00039+y*0.00011))))))))))