00001 subroutine source_vep_WL_peos(souv)
00002   use phys_constant, only  : long
00003   use grid_parameter, only : nrf, ntf, npf
00004   use def_metric_on_SFC, only : alphf, psif, bvxuf, bvyuf, bvzuf, &
00005   &                             hxxuf, hxyuf, hxzuf, hyyuf, hyzuf, hzzuf
00006   use def_gamma_crist
00007   use def_vector_phi, only : hvec_phif
00008   use interface_interpo_linear_type0
00009   use interface_flgrad_midpoint_type0
00010   use make_array_3d
00011   implicit none
00012   real(long), pointer :: souv(:,:,:)
00013   real(long), pointer :: hut(:,:,:), hutp6(:,:,:), aloh(:,:,:)
00014   real(long) :: psifc, alphfc, bvxufc, bvyufc, bvzufc
00015   real(long) :: rotshx, rotshy, rotshz
00016   real(long) :: hhxxu, hhxyu, hhxzu, hhyxu, hhyyu, hhyzu, 
00017                hhzxu, hhzyu, hhzzu
00018   real(long) :: gamxxu, gamxyu, gamxzu, gamyxu, gamyyu, gamyzu, 
00019                gamzxu, gamzyu, gamzzu
00020   real(long) :: emdfc, utfc, hhfc, prefc, rhofc, enefc, abin, abct
00021   real(long) :: hhut, pfinv, pf2inv, pf4
00022   real(long) :: dxemd, dyemd, dzemd, dxpsi, dypsi, dzpsi
00023   real(long) :: dxvpd, dyvpd, dzvpd, dxvpu, dyvpu, dzvpu
00024   real(long) :: dxhutp6, dyhutp6, dzhutp6
00025   real(long) :: dxaloh, dyaloh, dzaloh, dxlnarh, dylnarh, dzlnarh
00026   real(long) :: dxbvxu, dybvxu, dzbvxu, dxbvyu, dybvyu, dzbvyu, 
00027                dxbvzu, dybvzu, dzbvzu, divbvf
00028   real(long) :: gcx, gcy, gcz
00029   real(long) :: dabvep(3,3)
00030   integer :: ir, it, ip
00031 
00032   call alloc_array3d(hut, 0, nrf, 0, ntf, 0, npf)
00033   call alloc_array3d(hutp6, 0, nrf, 0, ntf, 0, npf)
00034   call alloc_array3d(aloh, 0, nrf, 0, ntf, 0, npf)
00035 
00036   do ip = 0, npf
00037     do it = 0, ntf
00038       do ir = 0, nrf
00039         psifc = psif(ir,it,ip)
00040         alphfc= alphf(ir,it,ip)
00041         emdfc = emd(ir,it,ip)
00042         utfc  = utf(ir,it,ip)
00043 
00044         call peos_q2hprhoab(emdfc, hhfc, prefc, rhofc, enefc, abin, abct)
00045 
00046         hut(ir,it,ip) = hhfc*utfc
00047         hutp6(ir,it,ip) = hut(ir,it,ip)*psifc**6
00048         aloh(ir,it,ip) = dlog(alphfc/hhfc)
00049 
00050       end do
00051     end do
00052   end do
00053 
00054 
00055 
00056 
00057 
00058 
00059 
00060 
00061   souv(:,:,:) = 0.0d0
00062 
00063   do ip = 1, npf
00064     do it = 1, ntf
00065       do ir = 1, nrf
00066         call interpo_linear_type0(hhxxu,hxxuf,ir,it,ip)
00067         call interpo_linear_type0(hhxyu,hxyuf,ir,it,ip)
00068         call interpo_linear_type0(hhxzu,hxzuf,ir,it,ip)
00069         call interpo_linear_type0(hhyyu,hyyuf,ir,it,ip)
00070         call interpo_linear_type0(hhyzu,hyzuf,ir,it,ip)
00071         call interpo_linear_type0(hhzzu,hzzuf,ir,it,ip)
00072         hhyxu = hhxyu
00073         hhzxu = hhxzu
00074         hhzyu = hhyzu
00075         gamxxu = hhxxu + 1.0d0
00076         gamxyu = hhxyu
00077         gamxzu = hhxzu
00078         gamyyu = hhyyu + 1.0d0
00079         gamyzu = hhyzu
00080         gamzzu = hhzzu + 1.0d0
00081         gamyxu = gamxyu
00082         gamzxu = gamxzu
00083         gamzyu = gamyzu
00084         call interpo_linear_type0(bvxufc,bvxuf,ir,it,ip)
00085         call interpo_linear_type0(bvyufc,bvyuf,ir,it,ip)
00086         call interpo_linear_type0(bvzufc,bvzuf,ir,it,ip)
00087         rotshx = bvxufc + ome*hvec_phif(ir,it,ip,1)
00088         rotshy = bvyufc + ome*hvec_phif(ir,it,ip,2)
00089         rotshz = bvzufc + ome*hvec_phif(ir,it,ip,3)
00090 
00091         call interpo_gr2fl_midpoint_type0(gcx,gmcrix,ir,it,ip)
00092         call interpo_gr2fl_midpoint_type0(gcy,gmcriy,ir,it,ip)
00093         call interpo_gr2fl_midpoint_type0(gcz,gmcriz,ir,it,ip)
00094 
00095         call interpo_linear_type0(psifc,psif,ir,it,ip)
00096         pfinv = 1.0d0/psifc
00097         pf2inv = pfinv**2
00098         pf4 = psifc**4
00099 
00100         call flgrad_midpoint_type0(psif,dxpsi,dypsi,dzpsi,ir,it,ip)
00101         call flgrad_midpoint_type0(vep,dxvpd,dyvpd,dzvpd,ir,it,ip)
00102         dxvpu = gamxxu*dxvpd + gamxyu*dyvpd + gamxzu*dzvpd
00103         dyvpu = gamyxu*dxvpd + gamyyu*dyvpd + gamyzu*dzvpd
00104         dzvpu = gamzxu*dxvpd + gamzyu*dyvpd + gamzzu*dzvpd
00105 
00106         call interpo_linear_type0(hhut,hut,ir,it,ip)
00107         call flgrad_midpoint_type0(hutp6,dxhutp6,dyhutp6,dzhutp6,ir,it,ip)
00108 
00109         call interpo_linear_type0(emdfc,emd,ir,it,ip)
00110         call peos_q2hprhoab(emdfc, hhfc, prefc, rhofc, enefc, abin, abct)
00111         pind = 1.0d0/(abin-1.0d0)
00112 
00113         call flgrad_midpoint_type0(emd,dxemd,dyemd,dzemd,ir,it,ip)
00114         call flgrad_midpoint_type0(aloh,dxaloh,dyaloh,dzaloh,ir,it,ip)
00115         dxlnarh = dxaloh + pind*dxemd/emdfc
00116         dylnarh = dyaloh + pind*dyemd/emdfc
00117         dzlnarh = dzaloh + pind*dzemd/emdfc
00118 
00119         call flgrad_midpoint_type0(bvxuf,dxbvxu,dybvxu,dzbvxu,ir,it,ip)
00120         call flgrad_midpoint_type0(bvyuf,dxbvyu,dybvyu,dzbvyu,ir,it,ip)
00121         call flgrad_midpoint_type0(bvzuf,dxbvzu,dybvzu,dzbvzu,ir,it,ip)
00122         divbvf = dxbvxu + dybvyu + dzbvzu
00123 
00124         call dadbscalar_fluid_type0(vep,dabvep,ir,it,ip)
00125 
00126         souv(ir,it,ip) = &
00127      &  -(hhxxu*dabvep(1,1) + hhxyu*dabvep(1,2) + hhxzu*dabvep(1,3)  &
00128      &  + hhyxu*dabvep(2,1) + hhyyu*dabvep(2,2) + hhyzu*dabvep(2,3)  &
00129      &  + hhzxu*dabvep(3,1) + hhzyu*dabvep(3,2) + hhzzu*dabvep(3,3)) &
00130      &  + gcx*dxvpd + gcy*dyvpd + gcz*dzvpd                          &
00131      &  - 2.0d0*pfinv*(dxvpu*dxpsi + dyvpu*dypsi + dzvpu*dzpsi)      &
00132      &  + pf2inv*(rotshx*dxhutp6 + rotshy*dyhutp6 + rotshz*dzhutp6)  &
00133      &  + pf4*hhut*divbvf                                            &
00134      &  -(dxvpu - pf4*hhut*rotshx)*dxlnarh                           &
00135      &  -(dyvpu - pf4*hhut*rotshy)*dylnarh                           &
00136      &  -(dzvpu - pf4*hhut*rotshz)*dzlnarh
00137 
00138       end do
00139     end do
00140   end do
00141 
00142   deallocate()
00143 
00144 end subroutine source_vep_WL_peos