00001 subroutine SEM_tensor
00002 use phys_constant, only : long
00003 use grid_parameter, only : nrf, ntf, npf
00004 use def_metric_on_SFC_CF, only : psif, alphf, bvxdf, bvydf, bvzdf
00005 use def_metric_on_SFC_WL, only : hxxdf, hxydf, hxzdf, hyydf, hyzdf, hzzdf, &
00006 & hxxuf, hxyuf, hxzuf, hyyuf, hyzuf, hzzuf
00007 use def_matter, only : emd , utf, uxf, uyf, uzf
00008 use def_SEM_tensor, only : rhoH, jmd, smijd, trsm
00009 implicit none
00010 integer :: irf, itf, ipf, ia, ib
00011 real(long) :: psifc, psifc4, psifc4inv, psifc8,
00012 alpfc, bvxdfc, bvydfc, bvzdfc
00013 real(long) :: emdfc, hhfc, prefc, rhofc, enefc
00014 real(long) :: utfc, uxfc, uyfc, uzfc, ut, ux, uy, uz, vx, vy, vz
00015 real(long) :: gamd(3,3), gamu(3,3), ovdfc(3)
00016
00017
00018
00019
00020 do ipf = 0, npf
00021 do itf = 0, ntf
00022 do irf = 0, nrf
00023
00024 psifc = psif(irf,itf,ipf)
00025 alpfc = alphf(irf,itf,ipf)
00026 bvxdfc = bvxdf(irf,itf,ipf)
00027 bvydfc = bvydf(irf,itf,ipf)
00028 bvzdfc = bvzdf(irf,itf,ipf)
00029 gamd(1,1) = hxxdf(irf,itf,ipf) + 1.0d0
00030 gamd(1,2) = hxydf(irf,itf,ipf)
00031 gamd(1,3) = hxzdf(irf,itf,ipf)
00032 gamd(2,2) = hyydf(irf,itf,ipf) + 1.0d0
00033 gamd(2,3) = hyzdf(irf,itf,ipf)
00034 gamd(3,3) = hzzdf(irf,itf,ipf) + 1.0d0
00035 gamd(2,1) = gamd(1,2)
00036 gamd(3,1) = gamd(1,3)
00037 gamd(3,2) = gamd(2,3)
00038 gamu(1,1) = hxxuf(irf,itf,ipf) + 1.0d0
00039 gamu(1,2) = hxyuf(irf,itf,ipf)
00040 gamu(1,3) = hxzuf(irf,itf,ipf)
00041 gamu(2,2) = hyyuf(irf,itf,ipf) + 1.0d0
00042 gamu(2,3) = hyzuf(irf,itf,ipf)
00043 gamu(3,3) = hzzuf(irf,itf,ipf) + 1.0d0
00044 gamu(2,1) = gamu(1,2)
00045 gamu(3,1) = gamu(1,3)
00046 gamu(3,2) = gamu(2,3)
00047 psifc4 = psifc**4
00048 psifc4inv = 1.0d0/psifc**4
00049 psifc8 = psifc**8
00050
00051 emdfc = emd(irf,itf,ipf)
00052 if (irf.eq.nrf) then
00053 emdfc = 0.0d0
00054 end if
00055 call peos_q2hprho(emdfc, hhfc, prefc, rhofc, enefc)
00056 utfc = utf(irf,itf,ipf)
00057 uxfc = uxf(irf,itf,ipf)
00058 uyfc = uyf(irf,itf,ipf)
00059 uzfc = uzf(irf,itf,ipf)
00060
00061 ut = utfc
00062 ux = uxfc
00063 uy = uyfc
00064 uz = uzfc
00065 vx = ux/ut
00066 vy = uy/ut
00067 vz = uz/ut
00068 ovdfc(1) = bvxdfc + gamd(1,1)*vx + gamd(1,2)*vy + gamd(1,3)*vz
00069 ovdfc(2) = bvydfc + gamd(2,1)*vx + gamd(2,2)*vy + gamd(2,3)*vz
00070 ovdfc(3) = bvzdfc + gamd(3,1)*vx + gamd(3,2)*vy + gamd(3,3)*vz
00071
00072 rhoH(irf,itf,ipf) = hhfc*rhofc*(alpfc*utfc)**2 - prefc
00073
00074 do ia = 1, 3
00075 jmd(irf,itf,ipf,ia) = hhfc*rhofc*alpfc*utfc**2*psifc4*ovdfc(ia)
00076 do ib = 1, 3
00077 smijd(irf,itf,ipf,ia,ib) &
00078 & = hhfc*rhofc*utfc**2*psifc8*ovdfc(ia)*ovdfc(ib) &
00079 & + prefc*psifc4*gamd(ia,ib)
00080 end do
00081 end do
00082
00083 trsm(irf,itf,ipf) = 0.0d0
00084 do ib = 1, 3
00085 do ia = 1, 3
00086 trsm(irf,itf,ipf) = trsm(irf,itf,ipf) &
00087 & + psifc4inv*gamu(ia,ib)*smijd(irf,itf,ipf,ia,ib)
00088 end do
00089 end do
00090
00091 end do
00092 end do
00093 end do
00094
00095 end subroutine SEM_tensor