00001 subroutine source_qua_loc_spin_peos_fluid(souf,irs)
00002 use phys_constant, only : long, nmpt
00003 use grid_parameter, only : nrf, ntf, npf
00004 use coordinate_grav_r, only : hrg
00005 use def_metric, only : psi, tfkij
00006 use def_metric_on_SFC_CF, only : psif
00007 use def_excurve_on_SFC_CF
00008 use def_matter, only : rs
00009 use def_vector_phi, only : hvec_phif
00010 use def_vector_x, only : hvec_xf
00011 use interface_interpo_gr2fl
00012 use interface_interpo_linear_surface_type0
00013 use interface_calc_surface_normal_tangent_midpoint
00014 use make_array_1d
00015 use make_array_3d
00016 use make_array_4d
00017 implicit none
00018 real(long), pointer :: souf(:,:), nv(:), tv(:)
00019 real(long), pointer :: tfkij_surf(:,:,:,:), tempf(:,:,:)
00020 real(long) :: Aij_surf, psif6, psifc
00021 integer :: irf, itf, ipf, irs, ia, ib, ii
00022
00023 call alloc_array4d(tfkij_surf,0,ntf,0,npf,1,3,1,3)
00024 call alloc_array3d(tempf,0,nrf,0,ntf,0,npf)
00025 call alloc_array1d(nv, 1, 3)
00026 call alloc_array1d(tv, 1, 3)
00027 call interpo_gr2fl(psi, psif)
00028
00029 irf = irs
00030 do ib = 1, 3
00031 do ia = 1, 3
00032 tempf(0:nrf,0:ntf,0:npf) = tfkij_grid_fluid(0:nrf,0:ntf,0:npf,ia,ib)
00033 do itf = 1, ntf
00034 do ipf = 1, npf
00035 call interpo_linear_surface_type0(Aij_surf,tempf,irf,itf,ipf)
00036 tfkij_surf(itf,ipf,ia,ib) = Aij_surf
00037 end do
00038 end do
00039 end do
00040 end do
00041
00042 call calc_vector_x_matter(1)
00043 call calc_vector_phi_matter(1)
00044
00045
00046 souf = 0.0d0
00047 do ipf = 1, npf
00048 do itf = 1, ntf
00049 nv = 0.0d0; tv=0.0d0
00050 call interpo_linear_surface_type0(psifc,psif,irf,itf,ipf)
00051 psif6 = psifc**6
00052
00053 if (irf==nrf) then
00054 call calc_surface_normal_tangent_midpoint(rs,nv,tv,itf,ipf)
00055
00056 else
00057 nv(1:3) = hvec_xf(irf,itf,ipf,1:3)/hrg(irf)
00058 tv(1:3) = hvec_phif(irf,itf,ipf,1:3)
00059 end if
00060
00061 do ib = 1, 3
00062 do ia = 1, 3
00063 Aij_surf = tfkij_surf(itf,ipf,ia,ib)
00064 souf(itf,ipf) = souf(itf,ipf) + Aij_surf*tv(ia)*nv(ib)
00065 end do
00066 end do
00067
00068
00069
00070
00071
00072
00073
00074 souf(itf,ipf) = souf(itf,ipf)*psif6
00075 end do
00076 end do
00077
00078 deallocate(tfkij_surf)
00079 deallocate(tempf)
00080 deallocate(nv)
00081 deallocate(tv)
00082 end subroutine source_qua_loc_spin_peos_fluid