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