82 topo, zTop, vcoord_id, lcmesh, elem, lcmesh2D, elem2D, &
90 real(rp),
intent(out) :: g13(elem%np,lcmesh%nea)
91 real(rp),
intent(out) :: g23(elem%np,lcmesh%nea)
92 real(rp),
intent(out) :: zlev(elem%np,lcmesh%nea)
93 real(rp),
intent(inout) :: gsqrtv(elem%np,lcmesh%nea)
94 real(rp),
intent(in) :: topo(elem2d%np,lcmesh2d%nea)
95 integer,
intent(in) :: vcoord_id
96 real(rp),
intent(in) :: ztop
101 integer :: ke, ke2d, p
102 real(rp) :: del_flux(elem2d%nfptot,lcmesh2d%ne,2)
103 real(rp) :: fx2d(elem2d%np), fy2d(elem2d%np), liftdelflux2d(elem2d%np,2)
104 real(rp) :: gradzs(elem2d%np,lcmesh2d%ne,2)
107 integer :: indexh2dto3d(elem%np)
119 indexh2dto3d(:) = elem%IndexH2Dto3D(:)
123 call cal_del_flux( del_flux, &
124 topo, lcmesh2d%normal_fn(:,:,1), lcmesh2d%normal_fn(:,:,2), &
125 lcmesh2d%VMapM, lcmesh2d%VMapP, lcmesh2d, elem2d )
131 do ke2d=1, lcmesh2d%Ne
135 call sparsemat_matmul( lift2d, lcmesh2d%Fscale(:,ke2d), del_flux(:,ke2d,1), liftdelflux2d(:,1))
136 call sparsemat_matmul( lift2d, lcmesh2d%Fscale(:,ke2d), del_flux(:,ke2d,2), liftdelflux2d(:,2))
138 call sparsemat_matmul( lift2d, lcmesh2d%Fscale(:,ke2d) * del_flux(:,ke2d,1), liftdelflux2d(:,1))
139 call sparsemat_matmul( lift2d, lcmesh2d%Fscale(:,ke2d) * del_flux(:,ke2d,2), liftdelflux2d(:,2))
143 gradzs(p,ke2d,1) = lcmesh2d%Escale(p,ke2d,1,1) * fx2d(p) + liftdelflux2d(p,1)
144 gradzs(p,ke2d,2) = lcmesh2d%Escale(p,ke2d,2,2) * fy2d(p) + liftdelflux2d(p,2)
152 ke2d = lcmesh%EMap3Dto2D(ke)
155 coef3d = 1.0_rp - lcmesh%pos_en(p,ke,3) / ztop
156 zlev(p,ke) = lcmesh%pos_en(p,ke,3) &
157 + coef3d * topo(indexh2dto3d(p),ke2d)
159 gsqrtv(p,ke) = 1.0_rp - topo(indexh2dto3d(p),ke2d) / ztop
161 coef3d = - coef3d / gsqrtv(p,ke)
162 g13(p,ke) = coef3d * gradzs(indexh2dto3d(p),ke2d,1)
163 g23(p,ke) = coef3d * gradzs(indexh2dto3d(p),ke2d,2)
172 log_error(
"Mesh_VCoord_GetMetric",*)
"vcoord_id is inappropriate. Check!", vcoord_id
subroutine, public meshutil_vcoord_getmetric(g13, g23, zlev, gsqrtv, topo, ztop, vcoord_id, lcmesh, elem, lcmesh2d, elem2d, dx2d, dy2d, lift2d)
Get metric terms of vertical coordinate transformation.