00001 subroutine rotation_law
00002 use phys_constant, only : long
00003 use grid_parameter
00004 use coordinate_grav_r, only : rg
00005 use def_matter, only : rs, omef, jomef, jomef_int, &
00006 & utf, omeg, jomeg, jomeg_int
00007 use def_matter_parameter, only : ROT_LAW, ome
00008 use def_metric, only : alph, psi, bvxd, bvyd, bvzd
00009 use def_metric_on_SFC_CF, only : alphf, psif, bvxdf, bvydf, bvzdf
00010 use def_vector_x, only : vec_xf, vec_xg
00011 use make_array_3d
00012 use interface_interpo_gr2fl
00013 implicit none
00014 real(long) :: alp_tmp, psi_tmp, by_tmp, hyy_tmp
00015 real(long) :: omefc, jomefc, jomef_intfc, omegc, jomegc, jomeg_intgc
00016 real(long) :: xx, yy, zz, Rcyl
00017 integer :: irf, itf, ipf
00018
00019 if (ROT_LAW.eq.'DR'.and.nrf.ne.nrf_deform.or. &
00020 & ROT_LAW.eq.'OJ'.and.nrf.ne.nrf_deform) then
00021 do itf = 0, ntf
00022 do irf = 0, nrf
00023 ipf = 0
00024 xx = vec_xf(irf,itf,ipf,1)
00025 yy = vec_xf(irf,itf,ipf,2)
00026 zz = vec_xf(irf,itf,ipf,3)
00027 Rcyl = sqrt(xx**2 + yy**2)
00028 omefc = omef(irf,itf,ipf)
00029
00030 alp_tmp = alphf(irf,itf,ipf)
00031 psi_tmp = psif(irf,itf,ipf)
00032 by_tmp = bvydf(irf,itf,ipf)
00033 hyy_tmp = 0.0d0
00034
00035 call calc_omega_drot(Rcyl,alp_tmp,psi_tmp,by_tmp,hyy_tmp, &
00036 & omefc,jomefc,jomef_intfc)
00037 omef(irf,itf,0:npf) = omefc
00038 jomef(irf,itf,0:npf) = jomefc
00039 jomef_int(irf,itf,0:npf) = jomef_intfc
00040
00041 xx = vec_xg(irf,itf,ipf,1)
00042 yy = vec_xg(irf,itf,ipf,2)
00043 zz = vec_xg(irf,itf,ipf,3)
00044 Rcyl = sqrt(xx**2 + yy**2)
00045 omegc = omeg(irf,itf,ipf)
00046 alp_tmp = alph(irf,itf,ipf)
00047 psi_tmp = psi(irf,itf,ipf)
00048 by_tmp = bvyd(irf,itf,ipf)
00049 hyy_tmp = 0.0d0
00050 if (rg(irf).gt.rs(itf,ipf)) then
00051 omeg(irf,itf,ipf) = 0.0d0
00052 jomeg(irf,itf,ipf) = 0.0d0
00053 jomeg_int(irf,itf,ipf) = 0.0d0
00054 cycle
00055 end if
00056 call calc_omega_drot(Rcyl,alp_tmp,psi_tmp,by_tmp,hyy_tmp, &
00057 & omegc,jomegc,jomeg_intgc)
00058 omeg(irf,itf,0:npf) = omegc
00059 jomeg(irf,itf,0:npf) = jomegc
00060 jomeg_int(irf,itf,0:npf) = jomeg_intgc
00061 end do
00062 end do
00063 else
00064 do ipf = 0, npf
00065 do itf = 0, ntf
00066 do irf = 0, nrf
00067 omef(irf,itf,ipf) = ome
00068 jomef(irf,itf,ipf) = 0.0d0
00069 jomef_int(irf,itf,ipf) = 0.0d0
00070 omeg(irf,itf,ipf) = ome
00071 jomeg(irf,itf,ipf) = 0.0d0
00072 jomeg_int(irf,itf,ipf) = 0.0d0
00073 if (rg(irf).gt.rs(itf,ipf)) omeg(irf,itf,ipf) = 0.0d0
00074 end do
00075 end do
00076 end do
00077 end if
00078
00079 end subroutine rotation_law