00001 subroutine source_vep_CF_peos(souv)
00002 use phys_constant, only : long
00003 use grid_parameter, only : nrf, ntf, npf
00004 use def_metric_on_SFC_CF
00005 use def_matter
00006 use def_matter_parameter, only : ome, ber
00007 use def_vector_phi, only : hvec_phif, vec_phif
00008
00009 use def_velocity_potential
00010 use interface_interpo_linear_type0
00011 use interface_flgrad_midpoint_type0
00012 use interface_flgrad_4th_gridpoint
00013 use interface_flgrad_2nd_gridpoint
00014 use make_array_3d
00015 implicit none
00016 real(long), pointer :: souv(:,:,:)
00017 real(long), pointer :: hut(:,:,:), aloh(:,:,:)
00018 real(long), pointer :: wx(:,:,:), wy(:,:,:), wz(:,:,:)
00019 real(long) :: psifc, alphfc, bvxdfc, bvydfc, bvzdfc
00020 real(long) :: rotshx, rotshy, rotshz
00021 real(long) :: emdfc, utfc, hhfc, prefc, rhofc, enefc, abin, abct
00022 real(long) :: hhut, pfinv, pf2inv, pf4
00023 real(long) :: dxemd, dyemd, dzemd, dxpsi, dypsi, dzpsi
00024 real(long) :: dxvpd, dyvpd, dzvpd, hwx, hwy, hwz
00025 real(long) :: dxhut, dyhut, dzhut, wdpsi, wdaloh, divw
00026 real(long) :: dxaloh, dyaloh, dzaloh
00027 real(long) :: dxwx, dywx, dzwx, dxwy, dywy, dzwy, dxwz, dywz, dzwz
00028 real(long) :: dxbvxd, dybvxd, dzbvxd, dxbvyd, dybvyd, dzbvyd,
00029 dxbvzd, dybvzd, dzbvzd, divbvf
00030 real(long) :: vphif(3)
00031 real(long) :: ovdfc(3), ovdfc2
00032 real(long) :: dxvep, dyvep, dzvep, lam, alpfc2
00033
00034
00035
00036 integer :: ir, it, ip, irf,itf,ipf
00037
00038 call alloc_array3d(hut , 0, nrf, 0, ntf, 0, npf)
00039 call alloc_array3d(aloh, 0, nrf, 0, ntf, 0, npf)
00040
00041
00042
00043
00044 do ip = 0, npf
00045 do it = 0, ntf
00046 do ir = 0, nrf
00047 psifc = psif(ir,it,ip)
00048 alphfc= alphf(ir,it,ip)
00049 emdfc = emd(ir,it,ip)
00050
00051 call peos_q2hprho(emdfc, hhfc, prefc, rhofc, enefc)
00052
00053 vphif(1) = vec_phif(ir,it,ip,1)
00054 vphif(2) = vec_phif(ir,it,ip,2)
00055 vphif(3) = vec_phif(ir,it,ip,3)
00056
00057 ovdfc(1) = bvxdf(ir,it,ip) + ome*vphif(1)
00058 ovdfc(2) = bvydf(ir,it,ip) + ome*vphif(2)
00059 ovdfc(3) = bvzdf(ir,it,ip) + ome*vphif(3)
00060
00061 call flgrad_2nd_gridpoint(vep,dxvep,dyvep,dzvep,ir,it,ip)
00062
00063 alpfc2 = alphfc**2
00064 lam = ber + ovdfc(1)*dxvep + ovdfc(2)*dyvep + ovdfc(3)*dzvep
00065
00066 hut(ir,it,ip) = lam/alpfc2
00067
00068 utf(ir,it,ip) = hut(ir,it,ip)/hhfc
00069
00070 aloh(ir,it,ip) = dlog(alphfc*rhofc/hhfc)
00071
00072
00073
00074 end do
00075 end do
00076 end do
00077
00078
00079
00080
00081
00082
00083
00084
00085 souv(1:nrf,1:ntf,1:npf) = 0.0d0
00086
00087 do ip = 1, npf
00088 do it = 1, ntf
00089 do ir = 1, nrf-1
00090 call interpo_linear_type0(bvxdfc,bvxdf,ir,it,ip)
00091 call interpo_linear_type0(bvydfc,bvydf,ir,it,ip)
00092 call interpo_linear_type0(bvzdfc,bvzdf,ir,it,ip)
00093
00094 rotshx = bvxdfc + ome*hvec_phif(ir,it,ip,1)
00095 rotshy = bvydfc + ome*hvec_phif(ir,it,ip,2)
00096 rotshz = bvzdfc + ome*hvec_phif(ir,it,ip,3)
00097
00098 call interpo_linear_type0(hhut,hut,ir,it,ip)
00099 call interpo_linear_type0(psifc,psif,ir,it,ip)
00100 pfinv = 1.0d0/psifc
00101 pf2inv = pfinv**2
00102 pf4 = psifc**4
00103
00104 call flgrad_midpoint_type0(psif,dxpsi, dypsi, dzpsi, ir,it,ip)
00105 call flgrad_midpoint_type0( vep,dxvpd, dyvpd, dzvpd, ir,it,ip)
00106 call flgrad_midpoint_type0( hut,dxhut, dyhut, dzhut, ir,it,ip)
00107 call flgrad_midpoint_type0(aloh,dxaloh,dyaloh,dzaloh,ir,it,ip)
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121 souv(ir,it,ip) = - 2.0d0*pfinv*(dxvpd*dxpsi + dyvpd*dypsi + dzvpd*dzpsi) &
00122 & + pf4*(rotshx*dxhut + rotshy*dyhut + rotshz*dzhut) &
00123 & + (pf4*hhut*rotshx - dxvpd)*dxaloh &
00124 & + (pf4*hhut*rotshy - dyvpd)*dyaloh &
00125 & + (pf4*hhut*rotshz - dzvpd)*dzaloh
00126
00127
00128 end do
00129 end do
00130 end do
00131
00132 do ip = 1, npf
00133 do it = 1, ntf
00134 souv(nrf,it,ip) = 2.0d0*souv(nrf-1,it,ip) - souv(nrf-2,it,ip)
00135 end do
00136 end do
00137
00138 deallocate(hut)
00139 deallocate(aloh)
00140
00141
00142
00143
00144 end subroutine source_vep_CF_peos