conjwl
C CONJWL SOURCE CB215821 16/04/21 21:16:00 8920 & ga) C************************************************************************ C C PROJET : CASTEM 2000 C C NOM : CONJWL C C DESCRIPTION : Voir KONJA2 C C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec estensions CISI) C C AUTEUR : S. KUDRIAKOV, DM2S/SFME/LTMF C C************************************************************************ c---------------------------------------------------------------------- c GENERAL DESCRIPTION: c This subroutine provides jacobian jtl at the interfface c next to wall. c For full descriptions please see file 'conjak.eso'. c---------------------------------------------------------------------- c INPUT: c c alpha -- parameter of the AUSM+ scheme in the Pressure function; c ( -3/4 <= alpha <= 3/16 ) c c beta -- parameter of the AUSM+ scheme in the Mach function; c ( -1/16 <= beta <= 1/2 ) c c wvec_l -- vector of the primitive variables (rho,ux,uy,p) at the c left cell; c c wvec_r -- vector of the primitive variables (rho,ux,uy,p) at the c right cell; c c nvect -- normal vector to the interface (2 components in 2D); c c tvect -- tangential vector to the interface; c c ga -- ratio of the specific heats (assumed constant) c---------------------------------------------------------------------- c c OUTPUT: c c jtl -- jakobian matrix 4 by 4 - derivatives of the numerical c flux function with respect to the conservative variables c from the left cell; c c jtr -- jakobian matrix 4 by 4 - derivatives of the numerical c flux function with respect to the conservative variables c from the right cell. c---------------------------------------------------------------------- IMPLICIT INTEGER(I-N) real*8 wvec_l(4),wvec_r(4) real*8 nvect(2),tvect(2) real*8 jl(4,4),jr(4,4) real*8 wl(4,4),wr(4,4) real*8 jtl(4,4),jtr(4,4) real*8 ga, gm1 real*8 n_x,n_y real*8 un_l, un_r real*8 ml,mr,Mplus,Mmin real*8 rold_l,uold_l,vold_l,pold_l,eold_l real*8 rold_r,uold_r,vold_r,pold_r,eold_r real*8 Pplus,Pmin real*8 temp_l,temp_r,brac_l,brac_r real*8 aleft, arigh, am real*8 damr_l,damr_r,damu_l,damu_r real*8 damv_l,damv_r,damp_l,damp_r real*8 dmlr_l,dmlr_r,dmlu_l,dmlu_r real*8 dmlv_l,dmlv_r,dmlp_l,dmlp_r real*8 dmrr_l,dmrr_r,dmru_l,dmru_r real*8 dmrv_l,dmrv_r,dmrp_l,dmrp_r real*8 dPpr_l,dPpr_r,dPpu_l,dPpu_r real*8 dPpv_l,dPpv_r,dPpp_l,dPpp_r real*8 dPmr_l,dPmr_r,dPmu_l,dPmu_r real*8 dPmv_l,dPmv_r,dPmp_l,dPmp_r real*8 dpir_l,dpir_r,dpiu_l,dpiu_r real*8 dpiv_l,dpiv_r,dpip_l,dpip_r real*8 tcoef,bcoef integer i,j,k c----------------------- gm1=ga-1.0d0 c----------------------- n_x=nvect(1) n_y=nvect(2) c---------------------------- c----------------------- rold_l=wvec_l(1) uold_l=wvec_l(2) vold_l=wvec_l(3) pold_l=wvec_l(4) c----------------------- rold_r=wvec_r(1) uold_r=wvec_r(2) vold_r=wvec_r(3) pold_r=wvec_r(4) c----------------------- eold_l=(uold_l*uold_l+vold_l*vold_l)/2.0d0 eold_l=eold_l+pold_l/(gm1*rold_l) eold_r=(uold_r*uold_r+vold_r*vold_r)/2.0d0 eold_r=eold_r+pold_r/(gm1*rold_r) c------------------------------------------------------------------- c Computation of the speed of sound and its derivatives c--------------------------------------------------------------------- aleft=SQRT(ga*pold_l/rold_l) arigh=SQRT(ga*pold_r/rold_r) am=0.5d0*(aleft+arigh) c-------------------------------------------------------------------- damr_r=-arigh/(4.0d0*rold_r) damu_r=0.0d0 damv_r=0.0d0 damp_r=ga/(4.0d0*arigh*rold_r) c----------------------- damr_l=-aleft/(4.0d0*rold_l) damu_l=0.0d0 damv_l=0.0d0 damp_l=ga/(4.0d0*aleft*rold_l) c---------------------------------------------------------------------- c computing numerical Mach number and its derivatives c---------------------------------------------------------------------- un_l=uold_l*n_x+vold_l*n_y un_r=uold_r*n_x+vold_r*n_y c---------------------------------------- ml=un_l/am mr=un_r/am c print*,'ml,mr',ml,mr c------------------------------------- c Mplus and Mmin are calligraphic c lettes M+ and M- from the paper c------------------------------------- if(ABS(ml) .ge. 1.0d0) then Mplus=(ml+ABS(ml))/2.0d0 else Mplus=(ml+1.0d0)*(ml+1.0d0)/4.0d0 Mplus=Mplus+beta*(ml*ml-1.0d0)*(ml*ml-1.0d0) endif c----------------- if(ABS(mr) .ge. 1.0d0) then Mmin=(mr-ABS(mr))/2.0d0 else Mmin=-(mr-1.0d0)*(mr-1.0d0)/4.0d0 Mmin=Mmin-beta*(mr*mr-1.0d0)*(mr*mr-1.0d0) endif c--------------------------------------- c Derivatives of ml and mr with respect c to both sets of primitive variables: c left and right c-------------------------------------- temp_l=-un_l/(am*am) temp_r=-un_r/(am*am) c-------- dmlr_l=temp_l*damr_l dmlr_r=temp_l*damr_r dmrr_l=temp_r*damr_l dmrr_r=temp_r*damr_r c-------- dmlu_l=n_x/am+temp_l*damu_l dmlu_r=temp_l*damu_r dmru_l=temp_r*damu_l dmru_r=n_x/am+temp_r*damu_r c-------- dmlv_l=n_y/am+temp_l*damv_l dmlv_r=temp_l*damv_r dmrv_l=temp_r*damv_l dmrv_r=n_y/am+temp_r*damv_r c-------- dmlp_l=temp_l*damp_l dmlp_r=temp_l*damp_r dmrp_l=temp_r*damp_l dmrp_r=temp_r*damp_r c--------------------------------------------------------------- c Computing the calligraphic P+ and P- with their derivatives c--------------------------------------------------------------- if(ml .ge. 1.0d0) then Pplus = 1.0d0 else if((ml .gt. -1.0d0) .and. (ml .lt. 1.0d0)) then Pplus=(ml+1.0d0)*(ml+1.0d0)*(2.0d0-ml)/4.0d0 else Pplus = 0.0d0 endif endif c--------------------------------------------------------------- if(mr .ge. 1.0d0) then Pmin = 0.0d0 else if((mr .gt. -1.0d0) .and. (mr .lt. 1.0d0)) then Pmin=(mr-1.0d0)*(mr-1.0d0)*(2.0d0+mr)/4.0d0 else Pmin = 1.0d0 endif endif c--------------------------------------------------------------- brac_l=(ml+1.0d0)*(2.0d0-ml)/2.0d0-(ml+1.0d0)*(ml+1.0d0)/4.0d0 c-------------- brac_r=(mr-1.0d0)*(2.0d0+mr)/2.0d0+(mr-1.0d0)*(mr-1.0d0)/4.0d0 c--------------------------------------------------------------- if((ml .gt. -1.0d0) .and. (ml .lt. 1.0d0)) then dPpr_l=brac_l*dmlr_l dPpr_r=brac_l*dmlr_r c------------ dPpu_l=brac_l*dmlu_l dPpu_r=brac_l*dmlu_r c------------ dPpv_l=brac_l*dmlv_l dPpv_r=brac_l*dmlv_r c------------ dPpp_l=brac_l*dmlp_l dPpp_r=brac_l*dmlp_r c------------ else dPpr_l=0.0d0 dPpr_r=0.0d0 c----------- dPpu_l=0.0d0 dPpu_r=0.0d0 c----------- dPpv_l=0.0d0 dPpv_r=0.0d0 c----------- dPpp_l=0.0d0 dPpp_r=0.0d0 c----------- endif c--------------------------------------------------------------- if((mr .gt. -1.0d0) .and. (mr .lt. 1.0d0)) then dPmr_l=brac_r*dmrr_l dPmr_r=brac_r*dmrr_r c------------ dPmu_l=brac_r*dmru_l dPmu_r=brac_r*dmru_r c------------ dPmv_l=brac_r*dmrv_l dPmv_r=brac_r*dmrv_r c------------ dPmp_l=brac_r*dmrp_l dPmp_r=brac_r*dmrp_r c------------ else dPmr_l=0.0d0 dPmr_r=0.0d0 c----------- dPmu_l=0.0d0 dPmu_r=0.0d0 c----------- dPmv_l=0.0d0 dPmv_r=0.0d0 c----------- dPmp_l=0.0d0 dPmp_r=0.0d0 c----------- endif c--------------------------------------------------------------------- c computing pmid -- p_{1/2} and its derivatives c--------------------------------------------------------------------- dpir_l=dPpr_l*pold_l+dPmr_l*pold_r dpiu_l=dPpu_l*pold_l+dPmu_l*pold_r dpiv_l=dPpv_l*pold_l+dPmv_l*pold_r dpip_l=dPpp_l*pold_l+Pplus+dPmp_l*pold_r c---------------------------- dpir_r=dPpr_r*pold_l+dPmr_r*pold_r dpiu_r=dPpu_r*pold_l+dPmu_r*pold_r dpiv_r=dPpv_r*pold_l+dPmv_r*pold_r dpip_r=dPpp_r*pold_l+Pmin+dPmp_r*pold_r c--------------------------------------------------------------------- c !!!!!!!!!!!!!!!!!! JACOBIAN !!!!!!!!!!!!!!!!!!!!!!!!!!!! c--------------------------------------------------------------------- jl(1,1)=0.0D0 jl(1,2)=0.0D0 jl(1,3)=0.0D0 jl(1,4)=0.0D0 c------------------------------------ jr(1,1)=0.0D0 jr(1,2)=0.0D0 jr(1,3)=0.0D0 jr(1,4)=0.0D0 c------------------------------------ ccccc f222222222222 ------------- c------------------------------------ c--------------------------------------------------------- jl(2,1)=n_x*dpir_l c------------------- jl(2,2)=n_x*dpiu_l c------------------- jl(2,3)=n_x*dpiv_l c------------------- jl(2,4)=n_x*dpip_l c------------------------------------------------------------- jr(2,1)=n_x*dpir_r c------------------- jr(2,2)=n_x*dpiu_r c------------------- jr(2,3)=n_x*dpiv_r c------------------- jr(2,4)=n_x*dpip_r c------------------------------------------------------------- c------------ f33333333333333333333 --------------------- c------------------------------------------------------------- jl(3,1)=n_y*dpir_l c------------------- jl(3,2)=n_y*dpiu_l c------------------- jl(3,3)=n_y*dpiv_l c------------------- jl(3,4)=n_y*dpip_l c------------------------------------------------------------- jr(3,1)=n_y*dpir_r c------------------- jr(3,2)=n_y*dpiu_r c------------------- jr(3,3)=n_y*dpiv_r c------------------- jr(3,4)=n_y*dpip_r c------------------------------------------------------------- c ------ f44444444444444444444444444444 --------- c------------------------------------------------------------- jl(4,1)=0.0D0 c--------------------- jl(4,2)=0.0D0 c--------------------- jl(4,3)=0.0D0 c--------------------- jl(4,4)=0.0D0 c---------------------------------------------------------- c---------------------------------------------------------- jr(4,1)=0.0D0 c--------------------- jr(4,2)=0.0D0 c--------------------- jr(4,3)=0.0D0 c--------------------- jr(4,4)=0.0D0 c---------------------------------------------------------- c matrixes wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww c---------------------------------------------------------- wl(1,1)=1.0d0 wl(1,2)=0.0d0 wl(1,3)=0.0d0 wl(1,4)=0.0d0 c------------------------------ wl(2,1)=-uold_l/rold_l wl(2,2)=1.0d0/rold_l wl(2,3)=0.0d0 wl(2,4)=0.0d0 c------------------------------ wl(3,1)=-vold_l/rold_l wl(3,2)=0.0d0 wl(3,3)=1.0d0/rold_l wl(3,4)=0.0d0 c------------------------------ wl(4,1)=gm1*(uold_l*uold_l+vold_l*vold_l)/2.0d0 wl(4,2)=-uold_l*gm1 wl(4,3)=-vold_l*gm1 wl(4,4)=gm1 c------------------------------ c------------------------------ wr(1,1)=1.0d0 wr(1,2)=0.0d0 wr(1,3)=0.0d0 wr(1,4)=0.0d0 c------------------------------ wr(2,1)=-uold_r/rold_r wr(2,2)=1.0d0/rold_r wr(2,3)=0.0d0 wr(2,4)=0.0d0 c------------------------------ wr(3,1)=-vold_r/rold_r wr(3,2)=0.0d0 wr(3,3)=1.0d0/rold_r wr(3,4)=0.0d0 c------------------------------ wr(4,1)=gm1*(uold_r*uold_r+vold_r*vold_r)/2.0d0 wr(4,2)=-uold_r*gm1 wr(4,3)=-vold_r*gm1 wr(4,4)=gm1 c---------------------------------------------- c---------------------------------------------- do 1 i=1,4 do 2 j=1,4 jtl(i,j)=0.0d0 jtr(i,j)=0.0d0 do 3 k=1,4 jtl(i,j)=jtl(i,j)+jl(i,k)*wl(k,j) jtr(i,j)=jtr(i,j)+jr(i,k)*wr(k,j) 3 continue 2 continue 1 continue c----------------------------- tcoef=nvect(1)*tvect(2)+tvect(1)*nvect(2) bcoef=nvect(1)*tvect(2)-tvect(1)*nvect(2) c----------------------------- do 11 i=1,4 jtl(i,1)=jtl(i,1)+jtr(i,1) jtl(i,2)=jtl(i,2)+jtr(i,2)*(-tcoef/bcoef)+ & jtr(i,3)*2.0d0*nvect(1)*tvect(1)/bcoef jtl(i,3)=jtl(i,3)+jtr(i,2)*(-2.0d0*nvect(2)*tvect(2)/bcoef)+ & jtr(i,3)*tcoef/bcoef jtl(i,4)=jtl(i,4)+jtr(i,4) 11 continue c---------------------------------------------------------------------- return end
© Cast3M 2003 - Tous droits réservés.
Mentions légales