aboutsummaryrefslogtreecommitdiff
path: root/src/GRHydro_Eigenproblem_Marquina.F90
diff options
context:
space:
mode:
Diffstat (limited to 'src/GRHydro_Eigenproblem_Marquina.F90')
-rw-r--r--src/GRHydro_Eigenproblem_Marquina.F90708
1 files changed, 11 insertions, 697 deletions
diff --git a/src/GRHydro_Eigenproblem_Marquina.F90 b/src/GRHydro_Eigenproblem_Marquina.F90
index 9aa3765..79c7390 100644
--- a/src/GRHydro_Eigenproblem_Marquina.F90
+++ b/src/GRHydro_Eigenproblem_Marquina.F90
@@ -97,7 +97,7 @@ subroutine eigenproblem_marquina(handle,rhor,velxr,velyr,&
integer :: keyerr(1)
real*8 :: xpress
real*8 :: xeps
- real*8 :: xtemp
+ real*8 :: xtemp
real*8 :: xye
! end EOS Omni vars
n=1;keytemp=0;anyerr=0;keyerr(1)=0
@@ -763,8 +763,8 @@ subroutine eigenproblem_marquina(handle,rhor,velxr,velyr,&
end subroutine eigenproblem_marquina
-subroutine eigenproblem_marquina_hot(handle,rhor,velxr,velyr,&
- velzr,epsr,rhol,velxl,velyl,velzl,epsl,temp,ye_l,ye_r,gxx,gxy,gxz,&
+subroutine eigenproblem_marquina_hot(handle,keytemp,rhor,velxr,velyr,&
+ velzr,epsr,rhol,velxl,velyl,velzl,epsl,templ,tempr,ye_l,ye_r,gxx,gxy,gxz,&
gyy,gyz,gzz,u,det,alp,beta,densl,sxl,syl,szl,taul,&
densr,sxr,syr,szr,taur,flux1,flux2,flux3,flux4,flux5)
@@ -778,7 +778,7 @@ subroutine eigenproblem_marquina_hot(handle,rhor,velxr,velyr,&
CCTK_REAL rhol,velxl,velyl,velzl,epsl,w_lorentzl
CCTK_REAL densl,sxl,syl,szl,taul
CCTK_REAL densr,sxr,syr,szr,taur
- CCTK_REAL temp,ye_l,ye_r
+ CCTK_REAL templ,tempr,ye_l,ye_r
CCTK_REAL lam(5),p(5,5),q(5,5),dw(5)
CCTK_REAL rfluxr(5),rfluxl(5)
@@ -827,7 +827,7 @@ subroutine eigenproblem_marquina_hot(handle,rhor,velxr,velyr,&
real*8 :: xtemp
real*8 :: xye
! end EOS Omni vars
- n=1;keytemp=0;anyerr=0;keyerr(1)=0
+ n=1;anyerr=0;keyerr(1)=0
xpress=0.0d0;xeps=0.0d0;xtemp=0.0d0;xye=0.0d0
one = 1.0d0
@@ -838,11 +838,11 @@ subroutine eigenproblem_marquina_hot(handle,rhor,velxr,velyr,&
!!$ Set required fluid quantities
invrhol = one / rhol
call EOS_Omni_press(handle,keytemp,GRHydro_eos_rf_prec,n,&
- rhol,epsl,temp,ye_l,pressl,keyerr,anyerr)
+ rhol,epsl,templ,ye_l,pressl,keyerr,anyerr)
call EOS_Omni_cs2(handle,keytemp,GRHydro_eos_rf_prec,n,&
- rhol,epsl,temp,ye_l,cs2l,keyerr,anyerr)
+ rhol,epsl,templ,ye_l,cs2l,keyerr,anyerr)
call EOS_Omni_DPressByDEps(handle,keytemp,GRHydro_eos_rf_prec,n,&
- rhol,epsl,temp,ye_l,dpdepsl,keyerr,anyerr)
+ rhol,epsl,templ,ye_l,dpdepsl,keyerr,anyerr)
enthalpyl = one + epsl + pressl * invrhol
@@ -881,11 +881,11 @@ subroutine eigenproblem_marquina_hot(handle,rhor,velxr,velyr,&
invrhor = one / rhor
call EOS_Omni_press(handle,keytemp,GRHydro_eos_rf_prec,n,&
- rhor,epsr,temp,ye_r,pressr,keyerr,anyerr)
+ rhor,epsr,tempr,ye_r,pressr,keyerr,anyerr)
call EOS_Omni_cs2(handle,keytemp,GRHydro_eos_rf_prec,n,&
- rhor,epsr,temp,ye_r,cs2r,keyerr,anyerr)
+ rhor,epsr,tempr,ye_r,cs2r,keyerr,anyerr)
call EOS_Omni_DPressByDEps(handle,keytemp,GRHydro_eos_rf_prec,n,&
- rhor,epsr,temp,ye_r,dpdepsr,keyerr,anyerr)
+ rhor,epsr,tempr,ye_r,dpdepsr,keyerr,anyerr)
enthalpyr = one + epsr + pressr * invrhor
@@ -1481,689 +1481,3 @@ subroutine eigenproblem_marquina_hot(handle,rhor,velxr,velyr,&
end subroutine eigenproblem_marquina_hot
- /*@@
- @routine eigenproblem_marquina
- @date Wed Feb 13 12:27:59 2002
- @author Pedro Montero, Toni Font, Joachim Frieben
- @desc
- Computes the eigenvectors (p) and eigenvalues (lam) for
- Marquina flux formula
- for the input primitive state.
- @enddesc
- @calls
- @calledby
- @history
- Follows the routines by Toni Font and GR3D of Mark Miller.
- @endhistory
-
-@@*/
-
-subroutine eigenproblem_marquina_general(&
- rhor,velxr,velyr,velzr,epsr,pressr,cs2r,dpdepsr,&
- rhol,velxl,velyl,velzl,epsl,pressl,cs2l,dpdepsl,&
- gxx,gxy,gxz,gyy,gyz,gzz,u,det,alp,beta,&
- densl,sxl,syl,szl,taul,&
- densr,sxr,syr,szr,taur,&
- flux1,flux2,flux3,flux4,flux5)
-
- USE GRHydro_Scalars
-
- implicit none
-
- DECLARE_CCTK_PARAMETERS
-
- CCTK_REAL rhor,velxr,velyr,velzr,epsr
- CCTK_REAL rhol,velxl,velyl,velzl,epsl
- CCTK_REAL densl,sxl,syl,szl,taul
- CCTK_REAL densr,sxr,syr,szr,taur
-
- CCTK_REAL lam(5),p(5,5),q(5,5),dw(5)
- CCTK_REAL rfluxr(5),rfluxl(5)
- CCTK_REAL gxx,gxy,gxz,gyy,gyz,gzz,u,det
- CCTK_REAL alp,beta,flux1r,flux2r,flux3r,flux4r,flux5r
- CCTK_REAL flux1l,flux2l,flux3l,flux4l,flux5l
- CCTK_REAL flux1,flux2,flux3,flux4,flux5
-
-!!$ LOCAL VARS
-
- CCTK_REAL du(5),aa(5,5),qdiff1,qdiff2,qdiff3,qdiff4,qdiff5
- integer i,j,k,l
- CCTK_REAL paug(5,6),tmp1,tmp2,sump,summ,f_du(5)
- CCTK_REAL leivec1l(5),leivec2l(5),leivec3l(5),leivecpl(5),leivecml(5)
- CCTK_REAL leivec1r(5),leivec2r(5),leivec3r(5),leivecpr(5),leivecmr(5)
- CCTK_REAL reivec1l(5),reivec2l(5),reivec3l(5),reivecpl(5),reivecml(5)
- CCTK_REAL reivec1r(5),reivec2r(5),reivec3r(5),reivecpr(5),reivecmr(5)
- CCTK_REAL lam1l,lam2l,lam3l,lamml,lampl,lamm_nobetal,lamp_nobetal
- CCTK_REAL lam1r,lam2r,lam3r,lammr,lampr,lamm_nobetar,lamp_nobetar
- CCTK_REAL lam1,lam2,lam3,lamm,lamp
-
- CCTK_REAL cs2l,cs2r,one,two
- CCTK_REAL vlowxr,vlowyr,vlowzr,v2r,wr
- CCTK_REAL vlowxl,vlowyl,vlowzl,v2l,wl
-
- CCTK_REAL lamp_nobeta,lamm_nobeta
-
- CCTK_REAL pressl,dpdepsl,enthalpyl,kappal
- CCTK_REAL pressr,dpdepsr,enthalpyr,kappar
- CCTK_REAL axpl,axml,vxpl,vxml,xsil,dltl
- CCTK_REAL axpr,axmr,vxpr,vxmr,xsir,dltr
- CCTK_REAL cxx,cxy,cxz,gam,vxa,vxb
-
- one = 1.0d0
- two = 2.0d0
-
-!!$ LEFT
-
-!!$ Set required fluid quantities
-
- enthalpyl = one + epsl + pressl / rhol
-
- vlowxl = gxx*velxl + gxy*velyl + gxz*velzl
- vlowyl = gxy*velxl + gyy*velyl + gyz*velzl
- vlowzl = gxz*velxl + gyz*velyl + gzz*velzl
- v2l = vlowxl*velxl + vlowyl*velyl + vlowzl*velzl
-
-!!$ Assume consistent primitive data
-
- wl = one / sqrt(one - v2l)
-
-!!$ EIGENVALUES
-
- lam1l = velxl - beta/alp
- lam2l = lam1l
- lam3l = lam1l
- lamp_nobetal = (velxl*(one-cs2l) + sqrt(cs2l*(one-v2l)* &
- (u*(one-v2l*cs2l) - velxl**2*(one-cs2l))))/(one-v2l*cs2l)
- lamm_nobetal = (velxl*(one-cs2l) - sqrt(cs2l*(one-v2l)* &
- (u*(one-v2l*cs2l) - velxl**2*(one-cs2l))))/(one-v2l*cs2l)
-
- lampl = lamp_nobetal - beta/alp
- lamml = lamm_nobetal - beta/alp
-
-!!$ RIGHT
-
-!!$ Set required fluid quantities
-
- enthalpyr = one + epsr + pressr / rhor
-
- vlowxr = gxx*velxr + gxy*velyr + gxz*velzr
- vlowyr = gxy*velxr + gyy*velyr + gyz*velzr
- vlowzr = gxz*velxr + gyz*velyr + gzz*velzr
- v2r = vlowxr*velxr + vlowyr*velyr + vlowzr*velzr
-
-!!$ Assume consistent primitive data
-
- wr = one / sqrt(one - v2r)
-
-!!$ EIGENVALUES
-
- lam1r = velxr - beta/alp
- lam2r = lam1r
- lam3r = lam1r
- lamp_nobetar = (velxr*(one-cs2r) + sqrt(cs2r*(one-v2r)* &
- (u*(one-v2r*cs2r) - velxr**2*(one-cs2r))))/(one-v2r*cs2r)
- lamm_nobetar = (velxr*(one-cs2r) - sqrt(cs2r*(one-v2r)* &
- (u*(one-v2r*cs2r) - velxr**2*(one-cs2r))))/(one-v2r*cs2r)
-
- lampr = lamp_nobetar - beta/alp
- lammr = lamm_nobetar - beta/alp
-
-!!$ FINAL
-
- lam1 = max(abs(lam1l),abs(lam1r))
- lam2 = lam1
- lam3 = lam1
- lamp = max(abs(lampl),abs(lampr))
- lamm = max(abs(lamml),abs(lammr))
-
-!!$ lam(1) = lamm
-!!$ lam(2) = lam1
-!!$ lam(3) = lam2
-!!$ lam(4) = lam3
-!!$ lam(5) = lamp
-
- lam(1) = lamm
- lam(5) = lam1
- lam(3) = lam2
- lam(4) = lam3
- lam(2) = lamp
-
-!!$ LEFT
-
-!!$ Compute some auxiliary quantities
-
- axpl = (u - velxl*velxl)/(u - velxl*lamp_nobetal)
- axml = (u - velxl*velxl)/(u - velxl*lamm_nobetal)
- vxpl = (velxl - lamp_nobetal)/(u - velxl * lamp_nobetal)
- vxml = (velxl - lamm_nobetal)/(u - velxl * lamm_nobetal)
-
-!!$ Calculate associated right eigenvectors
-
- kappal = dpdepsl / (dpdepsl - rhol * cs2l)
-
-!!$ Right eigenvector # 1
-
- reivec1l(1) = kappal / (enthalpyl * wl)
- reivec1l(2) = vlowxl
- reivec1l(3) = vlowyl
- reivec1l(4) = vlowzl
- reivec1l(5) = one - reivec1l(1)
-
-!!$ Right eigenvector # 2
-
- reivec2l(1) = wl * vlowyl
- reivec2l(2) = enthalpyl * (gxy + two * wl * wl * vlowxl * vlowyl)
- reivec2l(3) = enthalpyl * (gyy + two * wl * wl * vlowyl * vlowyl)
- reivec2l(4) = enthalpyl * (gyz + two * wl * wl * vlowyl * vlowzl)
- reivec2l(5) = vlowyl * wl * (two * wl * enthalpyl - one)
-
-!!$ Right eigenvector # 3
-
- reivec3l(1) = wl * vlowzl
- reivec3l(2) = enthalpyl * (gxz + two * wl * wl * vlowxl * vlowzl)
- reivec3l(3) = enthalpyl * (gyz + two * wl * wl * vlowyl * vlowzl)
- reivec3l(4) = enthalpyl * (gzz + two * wl * wl * vlowzl * vlowzl)
- reivec3l(5) = vlowzl * wl * (two * wl * enthalpyl - one)
-
-!!$ Right + eigenvector
-
- reivecpl(1) = one
- reivecpl(2) = enthalpyl * wl * (vlowxl - vxpl)
- reivecpl(3) = enthalpyl * wl * vlowyl
- reivecpl(4) = enthalpyl * wl * vlowzl
- reivecpl(5) = enthalpyl * wl * axpl - one
-
-!!$ Right - eigenvector
-
- reivecml(1) = one
- reivecml(2) = enthalpyl * wl * (vlowxl - vxml)
- reivecml(3) = enthalpyl * wl * vlowyl
- reivecml(4) = enthalpyl * wl * vlowzl
- reivecml(5) = enthalpyl * wl * axml - one
-
-!!$ RIGHT
-
-!!$ Compute some auxiliary quantities
-
- axpr = (u - velxr*velxr)/(u - velxr*lamp_nobetar)
- axmr = (u - velxr*velxr)/(u - velxr*lamm_nobetar)
- vxpr = (velxr - lamp_nobetar)/(u - velxr * lamp_nobetar)
- vxmr = (velxr - lamm_nobetar)/(u - velxr * lamm_nobetar)
-
-!!$ Calculate associated right eigenvectors
-
- kappar = dpdepsr / (dpdepsr - rhor * cs2r)
-
-!!$ Right eigenvector # 1
-
- reivec1r(1) = kappar / (enthalpyr * wr)
- reivec1r(2) = vlowxr
- reivec1r(3) = vlowyr
- reivec1r(4) = vlowzr
- reivec1r(5) = one - reivec1r(1)
-
-!!$ Right eigenvector # 2
-
- reivec2r(1) = wr * vlowyr
- reivec2r(2) = enthalpyr * (gxy + two * wr * wr * vlowxr * vlowyr)
- reivec2r(3) = enthalpyr * (gyy + two * wr * wr * vlowyr * vlowyr)
- reivec2r(4) = enthalpyr * (gyz + two * wr * wr * vlowyr * vlowzr)
- reivec2r(5) = vlowyr * wr * (two * wr * enthalpyr - one)
-
-!!$ Right eigenvector # 3
-
- reivec3r(1) = wr * vlowzr
- reivec3r(2) = enthalpyr * (gxz + two * wr * wr * vlowxr * vlowzr)
- reivec3r(3) = enthalpyr * (gyz + two * wr * wr * vlowyr * vlowzr)
- reivec3r(4) = enthalpyr * (gzz + two * wr * wr * vlowzr * vlowzr)
- reivec3r(5) = vlowzr * wr * (two * wr * enthalpyr - one)
-
-!!$ Right + eigenvector
-
- reivecpr(1) = one
- reivecpr(2) = enthalpyr * wr * (vlowxr - vxpr)
- reivecpr(3) = enthalpyr * wr * vlowyr
- reivecpr(4) = enthalpyr * wr * vlowzr
- reivecpr(5) = enthalpyr * wr * axpr - one
-
-!!$ Right - eigenvector
-
- reivecmr(1) = one
- reivecmr(2) = enthalpyr * wr * (vlowxr - vxmr)
- reivecmr(3) = enthalpyr * wr * vlowyr
- reivecmr(4) = enthalpyr * wr * vlowzr
- reivecmr(5) = enthalpyr * wr * axmr - one
-
-!!$ Calculate associated left eigenvectors if requested
-
- if (ANALYTICAL) then
-
- cxx = gyy * gzz - gyz * gyz
- cxy = gxz * gyz - gxy * gzz
- cxz = gxy * gyz - gxz * gyy
- gam = gxx * cxx + gxy * cxy + gxz * cxz
-
-!!$ LEFT
-
- xsil = cxx - gam * velxl * velxl
- dltl = enthalpyl**3 * wl * (kappal - one) * (vxml - vxpl) * xsil
-
-!!$ Left eigenvector # 1
-
- tmp1 = wl / (kappal - one)
-
- leivec1l(1) = tmp1 * (enthalpyl - wl)
- leivec1l(2) = tmp1 * wl * velxl
- leivec1l(3) = tmp1 * wl * velyl
- leivec1l(4) = tmp1 * wl * velzl
- leivec1l(5) =-tmp1 * wl
-
-!!$ Left eigenvector # 2
-
- tmp1 = one / (xsil * enthalpyl)
-
- leivec2l(1) = (gyz * vlowzl - gzz * vlowyl) * tmp1
- leivec2l(2) = (gzz * vlowyl - gyz * vlowzl) * tmp1 * velxl
- leivec2l(3) = (gzz * (one - velxl * vlowxl) + gxz * vlowzl * velxl ) * tmp1
- leivec2l(4) = (gyz * (velxl * vlowxl - one) - gxz * velxl * vlowyl) * tmp1
- leivec2l(5) = (gyz * vlowzl - gzz * vlowyl) * tmp1
-
-!!$ Left eigenvector # 3
-
- leivec3l(1) = (gyz * vlowyl - gyy * vlowzl) * tmp1
- leivec3l(2) = (gyy * vlowzl - gyz * vlowyl) * tmp1 * velxl
- leivec3l(3) = (gyz * (velxl * vlowxl - one) - gxy * velxl * vlowzl) * tmp1
- leivec3l(4) = (gyy * (one - velxl * vlowxl) + gxy * velxl * vlowyl) * tmp1
- leivec3l(5) = (gyz * vlowyl - gyy * vlowzl) * tmp1
-
-!!$ Left + eigenvector
-
- tmp1 = enthalpyl * enthalpyl / dltl
- tmp2 = wl * wl * xsil
-
- leivecpl(1) = - (enthalpyl * wl * vxml * xsil + (one - kappal) * &
- (vxml * (tmp2 - cxx) - gam * velxl) - kappal * tmp2 * vxml) * tmp1
- leivecpl(2) = - (cxx * (one - kappal * axml) + (two * kappal - one) * &
- vxml * (tmp2 * velxl - cxx * velxl)) * tmp1
- leivecpl(3) = - (cxy * (one - kappal * axml) + (two * kappal - one) * &
- vxml * (tmp2 * velyl - cxy * velxl)) * tmp1
- leivecpl(4) = - (cxz * (one - kappal * axml) + (two * kappal - one) * &
- vxml * (tmp2 * velzl - cxz * velxl)) * tmp1
- leivecpl(5) = - ((one - kappal) * (vxml * (tmp2 - cxx) - gam * velxl) - &
- kappal * tmp2 * vxml) * tmp1
-
-!!$ Left - eigenvector
-
- leivecml(1) = (enthalpyl * wl * vxpl * xsil + (one - kappal) * &
- (vxpl * (tmp2 - cxx) - gam * velxl) - kappal * tmp2 * vxpl) * tmp1
- leivecml(2) = (cxx * (one - kappal * axpl) + (two * kappal - one) * &
- vxpl * (tmp2 * velxl - cxx * velxl)) * tmp1
- leivecml(3) = (cxy * (one - kappal * axpl) + (two * kappal - one) * &
- vxpl * (tmp2 * velyl - cxy * velxl)) * tmp1
- leivecml(4) = (cxz * (one - kappal * axpl) + (two * kappal - one) * &
- vxpl * (tmp2 * velzl - cxz * velxl)) * tmp1
- leivecml(5) = ((one - kappal) * (vxpl * (tmp2 - cxx) - gam * &
- velxl) - kappal * tmp2 * vxpl) * tmp1
-
-!!$ RIGHT
-
- xsir = cxx - gam * velxr * velxr
- dltr = enthalpyr**3 * wr * (kappar - one) * (vxmr - vxpr) * xsir
-
-!!$ Left eigenvector # 1
-
- tmp1 = wr / (kappar - one)
-
- leivec1r(1) = tmp1 * (enthalpyr - wr)
- leivec1r(2) = tmp1 * wr * velxr
- leivec1r(3) = tmp1 * wr * velyr
- leivec1r(4) = tmp1 * wr * velzr
- leivec1r(5) =-tmp1 * wr
-
-!!$ Left eigenvector # 2
-
- tmp1 = one / (xsir * enthalpyr)
-
- leivec2r(1) = (gyz * vlowzr - gzz * vlowyr) * tmp1
- leivec2r(2) = (gzz * vlowyr - gyz * vlowzr) * tmp1 * velxr
- leivec2r(3) = (gzz * (one - velxr * vlowxr) + gxz * vlowzr * velxr) * tmp1
- leivec2r(4) = (gyz * (velxr * vlowxr - one) - gxz * velxr * vlowyr) * tmp1
- leivec2r(5) = (gyz * vlowzr - gzz * vlowyr) * tmp1
-
-!!$ Left eigenvector # 3
-
- leivec3r(1) = (gyz * vlowyr - gyy * vlowzr) * tmp1
- leivec3r(2) = (gyy * vlowzr - gyz * vlowyr) * tmp1 * velxr
- leivec3r(3) = (gyz * (velxr * vlowxr - one) - gxy * velxr * vlowzr) * tmp1
- leivec3r(4) = (gyy * (one - velxr * vlowxr) + gxy * velxr * vlowyr) * tmp1
- leivec3r(5) = (gyz * vlowyr - gyy * vlowzr) * tmp1
-
-!!$ Left + eigenvector
-
- tmp1 = enthalpyr * enthalpyr / dltr
- tmp2 = wr * wr * xsir
-
- leivecpr(1) = - (enthalpyr * wr * vxmr * xsir + (one - kappar) * &
- (vxmr * (tmp2 - cxx) - gam * velxr) - kappar * tmp2 * vxmr) * tmp1
- leivecpr(2) = - (cxx * (one - kappar * axmr) + (two * kappar - one) * &
- vxmr * (tmp2 * velxr - cxx * velxr)) * tmp1
- leivecpr(3) = - (cxy * (one - kappar * axmr) + (two * kappar - one) * &
- vxmr * (tmp2 * velyr - cxy * velxr)) * tmp1
- leivecpr(4) = - (cxz * (one - kappar * axmr) + (two * kappar - one) * &
- vxmr * (tmp2 * velzr - cxz * velxr)) * tmp1
- leivecpr(5) = - ((one - kappar) * (vxmr * (tmp2 - cxx) - gam * velxr) - &
- kappar * tmp2 * vxmr) * tmp1
-
-!!$ Left - eigenvector
-
- leivecmr(1) = (enthalpyr * wr * vxpr * xsir + (one - kappar) * &
- (vxpr * (tmp2 - cxx) - gam * velxr) - kappar * tmp2 * vxpr) * tmp1
- leivecmr(2) = (cxx * (one - kappar * axpr) + (two * kappar - one) * &
- vxpr * (tmp2 * velxr - cxx * velxr)) * tmp1
- leivecmr(3) = (cxy * (one - kappar * axpr) + (two * kappar - one) * &
- vxpr * (tmp2 * velyr - cxy * velxr)) * tmp1
- leivecmr(4) = (cxz * (one - kappar * axpr) + (two * kappar - one) * &
- vxpr * (tmp2 * velzr - cxz * velxr)) * tmp1
- leivecmr(5) = ((one - kappar) * (vxpr * (tmp2 - cxx) - gam * &
- velxr) - kappar * tmp2 * vxpr) * tmp1
-
- endif
-
-!!$ LEFT
-!!$ PUT RIGHT EIGENVECTORS IN THE P MATRIX
-
-!!$ p(:,1) = reivecml(:)
-!!$ p(:,2) = reivec1l(:)
-!!$ p(:,3) = reivec2l(:)
-!!$ p(:,4) = reivec3l(:)
-!!$ p(:,5) = reivecpl(:)
-
- p(:,1) = reivecml(:)
- p(:,2) = reivecpl(:)
- p(:,3) = reivec2l(:)
- p(:,4) = reivec3l(:)
- p(:,5) = reivec1l(:)
-
-!!$ Calculate change in u:
-
- du(1) = densl
- du(2) = sxl
- du(3) = syl
- du(4) = szl
- du(5) = taul
-
- if (ANALYTICAL) then
-
- if (FAST) then
-
- sump = 0.0d0
- summ = 0.0d0
-
- do i=1,5
- sump = sump + (lamp - lam1) * leivecpl(i) * du(i)
- summ = summ + (lamm - lam1) * leivecml(i) * du(i)
- enddo
-
- vxa = sump + summ
- vxb =-(sump * vxpl + summ * vxml)
-
- rfluxl(1) = lam1 * du(1) + vxa
- rfluxl(2) = lam1 * du(2) + enthalpyl * wl * (vlowxl * vxa + vxb)
- rfluxl(3) = lam1 * du(3) + enthalpyl * wl * (vlowyl * vxa)
- rfluxl(4) = lam1 * du(4) + enthalpyl * wl * (vlowzl * vxa)
- rfluxl(5) = lam1 * du(5) + enthalpyl * wl * (velxl * vxb + vxa) - vxa
-
- else
-
-!!$ PUT LEFT EIGENVECTORS IN THE Q MATRIX
-
- q(1,:) = leivecml(:)
- q(2,:) = leivecpl(:)
- q(3,:) = leivec2l(:)
- q(4,:) = leivec3l(:)
- q(5,:) = leivec1l(:)
-
- do i=1,5
- dw(i) = 0.0d0
- do j=1,5
- dw(i) = dw(i) + q(i,j) * du(j)
- enddo
- enddo
-
- do i = 1, 5
- rfluxl(i) = 0.d0
- do j = 1, 5
- rfluxl(i) = rfluxl(i) + p(i,j) * lam(j) * dw(j)
- end do
- end do
-
- endif
-
- else
-
-!!$ Solve for characteristic variable change, dw
-
- dw=du
- aa = p
-
- do i=1,5
- paug(:,i) = p(:,i)
- enddo
-
-!same, but in old F77 style!
-!!$ do i=1,5
-!!$ dw(i) = du(i)
-!!$ do j=1,5
-!!$ aa(i,j) = p(i,j)
-!!$ end do
-!!$ enddo
-!!$
-!!$ do i=1,5
-!!$ paug(i,1) = p(i,1)
-!!$ paug(i,2) = p(i,2)
-!!$ paug(i,3) = p(i,3)
-!!$ paug(i,4) = p(i,4)
-!!$ paug(i,5) = p(i,5)
-!!$ enddo
-
- paug(1,6) = du(1)
- paug(2,6) = du(2)
- paug(3,6) = du(3)
- paug(4,6) = du(4)
- paug(5,6) = du(5)
-
-!!$ Get lower left triangle to be all zeros
- do i=1,5
-!!$ First, make diagonal element 1
- tmp1 = paug(i,i)
- do j=i,6
- paug(i,j) = paug(i,j)/tmp1
- enddo
-!!$ Now, get rid of everything below that diagonal
- do j=i+1,5
- tmp1 = - (paug(j,i))
- do k=i,6
- paug(j,k) = paug(j,k) + tmp1*paug(i,k)
- enddo
- enddo
- enddo
-!!$ Back substitute
- f_du(5) = paug(5,6)
- do i=4,1,-1
- f_du(i) = paug(i,6)
- do j=i+1,5
- f_du(i) = f_du(i) - paug(i,j)*f_du(j)
- enddo
- enddo
-
- dw(1) = f_du(1)
- dw(2) = f_du(2)
- dw(3) = f_du(3)
- dw(4) = f_du(4)
- dw(5) = f_du(5)
-
- do i = 1, 5
- rfluxl(i) = 0.d0
- do j = 1, 5
- rfluxl(i) = rfluxl(i) + p(i,j) * lam(j) * dw(j)
- end do
- end do
-
- endif
-
- flux1l = rfluxl(1)
- flux2l = rfluxl(2)
- flux3l = rfluxl(3)
- flux4l = rfluxl(4)
- flux5l = rfluxl(5)
-
-!!$ RIGHT
-
-!!$ PUT RIGHT EIGENVECTORS IN THE P MATRIX
-
-!!$ p(:,1) = reivecmr(:)
-!!$ p(:,2) = reivec1r(:)
-!!$ p(:,3) = reivec2r(:)
-!!$ p(:,4) = reivec3r(:)
-!!$ p(:,5) = reivecpr(:)
-
- p(:,1) = reivecmr(:)
- p(:,2) = reivecpr(:)
- p(:,3) = reivec2r(:)
- p(:,4) = reivec3r(:)
- p(:,5) = reivec1r(:)
-
- du(1) = densr
- du(2) = sxr
- du(3) = syr
- du(4) = szr
- du(5) = taur
-
- if (ANALYTICAL) then
-
- if (FAST) then
-
- sump = 0.0d0
- summ = 0.0d0
-
- do i=1,5
- sump = sump + (lamp - lam1) * leivecpr(i) * du(i)
- summ = summ + (lamm - lam1) * leivecmr(i) * du(i)
- enddo
-
- vxa = sump + summ
- vxb =-(sump * vxpr + summ * vxmr)
-
- rfluxr(1) = lam1 * du(1) + vxa
- rfluxr(2) = lam1 * du(2) + enthalpyr * wr * (vlowxr * vxa + vxb)
- rfluxr(3) = lam1 * du(3) + enthalpyr * wr * (vlowyr * vxa)
- rfluxr(4) = lam1 * du(4) + enthalpyr * wr * (vlowzr * vxa)
- rfluxr(5) = lam1 * du(5) + enthalpyr * wr * (velxr * vxb + vxa) - vxa
-
- else
-
-!!$ PUT LEFT EIGENVECTORS IN THE Q MATRIX
-
- q(1,:) = leivecmr(:)
- q(2,:) = leivecpr(:)
- q(3,:) = leivec2r(:)
- q(4,:) = leivec3r(:)
- q(5,:) = leivec1r(:)
-
- do i=1,5
- dw(i) = 0.0d0
- do j=1,5
- dw(i) = dw(i) + q(i,j) * du(j)
- enddo
- enddo
-
- do i = 1, 5
- rfluxr(i) = 0.d0
- do j = 1, 5
- rfluxr(i) = rfluxr(i) + p(i,j) * lam(j) * dw(j)
- end do
- end do
-
- endif
-
- else
-
-!!$ Solve for characteristic variable change, dw
-
- do i=1,5
- dw(i) = du(i)
- do j=1,5
- aa(i,j) = p(i,j)
- end do
- enddo
-
- do i=1,5
- paug(i,1) = p(i,1)
- paug(i,2) = p(i,2)
- paug(i,3) = p(i,3)
- paug(i,4) = p(i,4)
- paug(i,5) = p(i,5)
- enddo
-
- paug(1,6) = du(1)
- paug(2,6) = du(2)
- paug(3,6) = du(3)
- paug(4,6) = du(4)
- paug(5,6) = du(5)
-
-!!$ Get lower left triangle to be all zeros
-
- do i=1,5
-!!$ First, make diagonal element 1
- tmp1 = paug(i,i)
- do j=i,6
- paug(i,j) = paug(i,j)/tmp1
- enddo
-!!$ Now, get rid of everything below that diagonal
- do j=i+1,5
- tmp1 = - (paug(j,i))
- do k=i,6
- paug(j,k) = paug(j,k) + tmp1*paug(i,k)
- enddo
- enddo
- enddo
-!!$ Back substitute
-
- f_du(5) = paug(5,6)
- do i=4,1,-1
- f_du(i) = paug(i,6)
- do j=i+1,5
- f_du(i) = f_du(i) - paug(i,j)*f_du(j)
- enddo
- enddo
-
- dw(1) = f_du(1)
- dw(2) = f_du(2)
- dw(3) = f_du(3)
- dw(4) = f_du(4)
- dw(5) = f_du(5)
-
- do i = 1, 5
- rfluxr(i) = 0.d0
- do j = 1, 5
- rfluxr(i) = rfluxr(i) + p(i,j) * lam(j) * dw(j)
- end do
- end do
-
- endif
-
- flux1r = rfluxr(1)
- flux2r = rfluxr(2)
- flux3r = rfluxr(3)
- flux4r = rfluxr(4)
- flux5r = rfluxr(5)
-
- flux1 = flux1r - flux1l
- flux2 = flux2r - flux2l
- flux3 = flux3r - flux3l
- flux4 = flux4r - flux4l
- flux5 = flux5r - flux5l
-
- return
-
-end subroutine eigenproblem_marquina_general