00001 subroutine teos_h2qprho(h,q,pre,rho,ened)
00002
00003 use def_teos_parameter
00004 implicit none
00005
00006 real(8), intent(inout) :: h
00007 real(8), intent(out) :: q, pre, rho, ened
00008 real(8), external :: fn_lagint, fn_lagint_2nd
00009 real(8) :: x4(4), f4(4), x2(2), f2(2)
00010 integer :: i, i0, ii
00011 integer, save :: iphase
00012
00013 if (h < hi(0)) then
00014 q=0.0d0; h=1.0d0; pre=0.0d0; rho=0.0d0; ened=0.0d0
00015 return
00016 end if
00017
00018 ii=iphase
00019 if(h.lt.hi(iphase)) then
00020 do i = ii, 1, -1
00021 if( (h.ge.hi(i-1)) .and. (h.le.hi(i))) then
00022 iphase = i
00023 exit
00024 end if
00025 end do
00026 else
00027 do i = ii, nphase
00028 if( (h.ge.hi(i-1)) .and. (h.le.hi(i))) then
00029 iphase = i
00030 exit
00031 end if
00032 end do
00033 end if
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 i0 = min0(max0(iphase-2,0),nphase-3)
00044 x4(1:4) = hi(i0:i0+3)
00045 f4(1:4) = qi(i0:i0+3)
00046 q = fn_lagint(x4,f4,h)
00047
00048 f4(1:4) = prei(i0:i0+3)
00049 pre = fn_lagint(x4,f4,h)
00050
00051 f4(1:4) = rhoi(i0:i0+3)
00052 rho = fn_lagint(x4,f4,h)
00053
00054 f4(1:4) = enei(i0:i0+3)
00055 ened = fn_lagint(x4,f4,h)
00056
00057
00058 end subroutine teos_h2qprho