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