FE-Project
Loading...
Searching...
No Matches
scale_atm_phy_rd_dgm_common.F90
Go to the documentation of this file.
1!> module FElib / Atmosphere / Physics radiation
2!!
3!! @par Description
4!! Common module for radiation process
5!!
6!! @author Yuta Kawai, Team SCALE
7!<
8!-------------------------------------------------------------------------------
9#include "scaleFElib.h"
11 !-----------------------------------------------------------------------------
12 !
13 !++ Used modules
14 !
15 use scale_precision
16 use scale_io
17 use scale_prc
18 use scale_prof
19
20 use scale_atmos_phy_rd_common, only: &
21 i_up, i_dn, i_lw, i_sw
22
23 use scale_element_base, only: &
31
33
34 !-----------------------------------------------------------------------------
35 implicit none
36 private
37 !-----------------------------------------------------------------------------
38 !
39 !++ Public type & procedure
40 !
42
43 !-----------------------------------------------------------------------------
44 !++ Public parameters & variables
45 !
46 !-----------------------------------------------------------------------------
47 !
48 !++ Private procedure
49 !
50 !-----------------------------------------------------------------------------
51 !
52 !++ Private parameters & variables
53 !
54contains
55!OCL SERIAL
56 subroutine atm_phy_rd_dgm_calc_heating( RHOH, &
57 flux_rad, DDENS, DENS_hyd, CVtot, &
58 lcmesh, elem3D, elem2D, &
59 element3D_operation, &
60 TEMP_t )
61 implicit none
62 class(localmesh3d), intent(in) :: lcmesh
63 class(elementbase3d), intent(in) :: elem3d
64 class(elementbase2d), intent(in) :: elem2d
65 real(rp), intent(out) :: rhoh(elem3d%np,lcmesh%nea)
66 real(rp), intent(in) :: flux_rad(elem3d%np,lcmesh%ne,2,2)
67 real(rp), intent(in) :: ddens(elem3d%np,lcmesh%nea)
68 real(rp), intent(in) :: dens_hyd(elem3d%np,lcmesh%nea)
69 real(rp), intent(in) :: cvtot(elem3d%np,lcmesh%nea)
70 class(elementoperationbase3d), intent(in) :: element3d_operation
71 real(rp), intent(out), optional :: temp_t(elem3d%np,lcmesh%nea,2)
72
73 integer :: ke
74 real(rp) :: fz_lw(elem3d%np)
75 real(rp) :: fz_sw(elem3d%np)
76 real(rp) :: dens(elem3d%np)
77
78 logical :: cal_temp_t
79 !------------------------------------------------------------------------------
80
81 if (present(temp_t)) then
82 cal_temp_t = .true.
83 else
84 cal_temp_t = .false.
85 end if
86
87 !$omp parallel do private(Fz_LW, Fz_SW, DENS)
88 do ke=lcmesh%NeS, lcmesh%NeE
89 call element3d_operation%Dz( flux_rad(:,ke,i_lw,i_up) - flux_rad(:,ke,i_lw,i_dn), fz_lw )
90 call element3d_operation%Dz( flux_rad(:,ke,i_sw,i_up) - flux_rad(:,ke,i_sw,i_dn), fz_sw )
91
92 rhoh(:,ke) = - lcmesh%Escale(:,ke,3,3) * ( fz_lw(:) + fz_sw(:) )
93
94 if ( cal_temp_t ) then
95 dens(:) = dens_hyd(:,ke) + ddens(:,ke)
96 temp_t(:,ke,1) = - lcmesh%Escale(:,ke,3,3) * fz_lw(:) / ( dens(:) * cvtot(:,ke) )
97 temp_t(:,ke,2) = - lcmesh%Escale(:,ke,3,3) * fz_sw(:) / ( dens(:) * cvtot(:,ke) )
98 end if
99 end do
100
101 return
102 end subroutine atm_phy_rd_dgm_calc_heating
module FElib / Atmosphere / Physics radiation
subroutine, public atm_phy_rd_dgm_calc_heating(rhoh, flux_rad, ddens, dens_hyd, cvtot, lcmesh, elem3d, elem2d, element3d_operation, temp_t)
module FElib / Element / Base
module FElib / Element / hexahedron
module FElib / Element / Operation / Base
module FElib / Mesh / Local 2D
module FElib / Mesh / Local 3D
module FElib / Mesh / Base 3D
module FElib / Data / base
Derived type representing a 1D reference element.
Derived type representing a 2D reference element.
Derived type representing a 3D reference element.
Derived type representing a hexahedral element.
Derived type representing a local mesh for 2D domain.
Derived type to manage a local 3D computational domain.
Derived type representing a field with 3D local mesh.
Derived type to manage a computational mesh (base type for 3D domain)
Derived type representing a field with 3D mesh.