Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=r64), | intent(in) | :: | S | |||
real(kind=r64), | intent(in) | :: | W | |||
real(kind=r64), | intent(in) | :: | OHM_V_RAD | |||
real(kind=r64), | intent(in) | :: | OHM_H_RAD | |||
real(kind=r64), | intent(in) | :: | RHOFF_BT0 | |||
real(kind=r64), | intent(in) | :: | TAUFF_BB0 | |||
real(kind=r64), | intent(in) | :: | TAUFF_BD0 | |||
real(kind=r64), | intent(in) | :: | RHOFF_DD | |||
real(kind=r64), | intent(in) | :: | TAUFF_DD | |||
real(kind=r64), | intent(in) | :: | RHOBF_BT0 | |||
real(kind=r64), | intent(in) | :: | TAUBF_BB0 | |||
real(kind=r64), | intent(in) | :: | TAUBF_BD0 | |||
real(kind=r64), | intent(in) | :: | RHOBF_DD | |||
real(kind=r64), | intent(in) | :: | TAUBF_DD | |||
real(kind=r64), | intent(out) | :: | RHO_BD | |||
real(kind=r64), | intent(out) | :: | TAU_BB | |||
real(kind=r64), | intent(out) | :: | TAU_BD |
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed arrows point from an interface to procedures which implement that interface. This could include the module procedures in a generic interface or the implementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed arrows point from an interface to procedures which implement that interface. This could include the module procedures in a generic interface or the implementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
SUBROUTINE PD_BEAM(S, W, OHM_V_RAD, OHM_H_RAD, &
RHOFF_BT0, TAUFF_BB0, TAUFF_BD0, RHOFF_DD, TAUFF_DD, &
RHOBF_BT0, TAUBF_BB0, TAUBF_BD0, RHOBF_DD, TAUBF_DD, &
RHO_BD, TAU_BB, TAU_BD)
!
! SUBROUTINE INFORMATION:
! AUTHOR John L. Wright, University of Waterloo,
! Mechanical Engineering, Advanced Glazing System Laboratory
! DATE WRITTEN Unknown
! MODIFIED na
!
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! calculates the effective front-side solar optical properties of a drapery layer.
!
! METHODOLOGY EMPLOYED:
! Pleated drape flat-fabric model with rectangular enclosure
!
! REFERENCES:
! na
! USE STATEMENTS:
! na
!
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
REAL(r64), INTENT( IN) :: S ! pleat spacing (> 0)
REAL(r64), INTENT( IN) :: W ! pleat depth (>=0, same units as S)
REAL(r64), INTENT (IN) :: OHM_V_RAD ! vertical profile angle, radians +=above horiz
REAL(r64), INTENT (IN) :: OHM_H_RAD ! horizontal profile angle, radians=clockwise when viewed from above
REAL(r64), INTENT (IN) :: RHOFF_BT0 ! beam total reflectance front (outside)
REAL(r64), INTENT (IN) :: TAUFF_BB0 ! beam beam transmittance front (outside)
REAL(r64), INTENT (IN) :: TAUFF_BD0 ! beam diffuse transmittance front (outside)
REAL(r64), INTENT (IN) :: RHOFF_DD ! diffuse-diffuse reflectance front (outside)
REAL(r64), INTENT (IN) :: TAUFF_DD ! diffuse-diffuse transmittance front (outside)
REAL(r64), INTENT (IN) :: RHOBF_BT0 ! beam total reflectance back (inside)
REAL(r64), INTENT (IN) :: TAUBF_BB0 ! beam beam total transmittance back (inside)
REAL(r64), INTENT (IN) :: TAUBF_BD0 ! beam diffuse transmittance back (inside)
REAL(r64), INTENT (IN) :: RHOBF_DD ! diffuse-diffuse reflectance front (outside)
REAL(r64), INTENT (IN) :: TAUBF_DD ! diffuse-diffuse transmittance front (outside)
REAL(r64), INTENT (OUT) :: RHO_BD ! returned: drape front beam-diffuse reflectance
REAL(r64), INTENT (OUT) :: TAU_BB ! returned: drape beam-beam transmittance
REAL(r64), INTENT (OUT) :: TAU_BD ! returned: drape beam-diffuse transmittance
!
! SUBROUTINE PARAMETER DEFINITIONS:
! na
! INTERFACE BLOCK SPECIFICATIONS
! na
! DERIVED TYPE DEFINITIONS
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
REAL(r64) :: DE ! length of directly illuminated surface on side of pleat that
! is open on front (same units as S and W)
REAL(r64) :: EF ! length of pleat side shaded surface (W-DE) (same units as S and W)
REAL(r64) :: OMEGA_V, OMEGA_H ! profile angles limited to +/- PI/2
REAL(r64) :: TAUFF_BT0, TAUBF_BT0
REAL(r64) :: THETA_PARL, THETA_PERP ! beam incidence angles on pleat surface parallel / perpendicular
! to window plane
REAL(r64) :: RHOFF_BT_PARL, TAUFF_BB_PARL, TAUFF_BD_PARL
REAL(r64) :: RHOBF_BT_PARL, TAUBF_BB_PARL, TAUBF_BD_PARL
REAL(r64) :: RHOFF_BT_PERP, TAUFF_BB_PERP, TAUFF_BD_PERP
REAL(r64) :: RHOBF_BT_PERP, TAUBF_BB_PERP, TAUBF_BD_PERP
! Flow
OMEGA_V = ABS( MAX( -89.5d0*DegToRadians, MIN( 89.5d0*DegToRadians, OHM_V_RAD)))
OMEGA_H = ABS( MAX( -89.5d0*DegToRadians, MIN( 89.5d0*DegToRadians, OHM_H_RAD)))
! limit profile angles -89.5 - +89.5
! by symmetry, properties same for +/- profile angle
! incidence angles on pleat front/back (_PARL) and sides (_PERP)
THETA_PARL = ACOS(ABS(COS(ATAN(TAN(OMEGA_V)*COS(OMEGA_H)))*COS(OMEGA_H)))
THETA_PERP = ACOS(ABS(COS(ATAN(TAN(OMEGA_V)*SIN(OMEGA_H)))*SIN(OMEGA_H)))
! off-normal fabric properties, front surface
TAUFF_BT0 = TAUFF_BB0 + TAUFF_BD0
CALL FM_BEAM( THETA_PARL, RHOFF_BT0, TAUFF_BT0, TAUFF_BB0, RHOFF_BT_PARL, TAUFF_BB_PARL, TAUFF_BD_PARL)
IF (W/S < SMALL_ERROR) THEN
! flat drape (no pleats) -- return fabric properties
RHO_BD = RHOFF_BT_PARL
TAU_BD = TAUFF_BD_PARL
TAU_BB = TAUFF_BB_PARL
RETURN
END IF
CALL FM_BEAM( THETA_PERP, RHOFF_BT0, TAUFF_BT0, TAUFF_BB0, RHOFF_BT_PERP, TAUFF_BB_PERP, TAUFF_BD_PERP)
! Off-normal fabric properties, back surface
TAUBF_BT0 = TAUBF_BB0 + TAUBF_BD0
CALL FM_BEAM( THETA_PARL, RHOBF_BT0, TAUBF_BT0, TAUBF_BB0, RHOBF_BT_PARL, TAUBF_BB_PARL, TAUBF_BD_PARL)
CALL FM_BEAM( THETA_PERP, RHOBF_BT0, TAUBF_BT0, TAUBF_BB0, RHOBF_BT_PERP, TAUBF_BB_PERP, TAUBF_BD_PERP)
DE = S * ABS(COS(OMEGA_H) / MAX( .000001d0, SIN(OMEGA_H)) )
EF = W-DE
! select geometric case
IF ( DE < W - SMALL_ERROR) THEN
! illuminated length less than pleat depth
IF (DE < EF - SMALL_ERROR) THEN
! illum < shade
CALL PD_BEAM_CASE_I( S, W, OMEGA_H, DE, &
RHOFF_BT_PARL, TAUFF_BB_PARL, TAUFF_BD_PARL, &
RHOBF_BT_PARL, TAUBF_BB_PARL, TAUBF_BD_PARL, &
RHOFF_BT_PERP, TAUFF_BB_PERP, TAUFF_BD_PERP, &
RHOBF_BT_PERP, TAUBF_BB_PERP, TAUBF_BD_PERP, &
RHOBF_DD, RHOFF_DD, TAUFF_DD, TAUBF_DD, &
RHO_BD, TAU_BD, TAU_BB)
ELSE IF (DE <= EF + SMALL_ERROR) THEN
! illum and shade equal
CALL PD_BEAM_CASE_II( S, W, OMEGA_H, DE, &
RHOFF_BT_PARL, TAUFF_BB_PARL, TAUFF_BD_PARL, &
RHOBF_BT_PARL, TAUBF_BB_PARL, TAUBF_BD_PARL, &
RHOFF_BT_PERP, TAUFF_BB_PERP, TAUFF_BD_PERP, &
RHOBF_BT_PERP, TAUBF_BB_PERP, TAUBF_BD_PERP, &
RHOBF_DD, RHOFF_DD, TAUFF_DD, TAUBF_DD, &
RHO_BD, TAU_BD, TAU_BB)
ELSE
! illum > shade
CALL PD_BEAM_CASE_III( S, W, OMEGA_H, DE, &
RHOFF_BT_PARL, TAUFF_BB_PARL, TAUFF_BD_PARL, &
RHOBF_BT_PARL, TAUBF_BB_PARL, TAUBF_BD_PARL, &
RHOFF_BT_PERP, TAUFF_BB_PERP, TAUFF_BD_PERP, &
RHOBF_BT_PERP, TAUBF_BB_PERP, TAUBF_BD_PERP, &
RHOBF_DD, RHOFF_DD, TAUFF_DD, TAUBF_DD, &
RHO_BD, TAU_BD, TAU_BB)
END IF
ELSE IF (DE <= W + SMALL_ERROR) THEN
! illum length same as pleat depth
CALL PD_BEAM_CASE_IV( S, W, OMEGA_H, DE, &
RHOFF_BT_PARL, TAUFF_BB_PARL, TAUFF_BD_PARL, &
RHOBF_BT_PARL, TAUBF_BB_PARL, TAUBF_BD_PARL, &
RHOFF_BT_PERP, TAUFF_BB_PERP, TAUFF_BD_PERP, &
RHOBF_BT_PERP, TAUBF_BB_PERP, TAUBF_BD_PERP, &
RHOBF_DD, RHOFF_DD, TAUFF_DD, TAUBF_DD, &
RHO_BD, TAU_BD, TAU_BB)
ELSE IF (DE < 9000.*S) THEN
! some direct illum on pleat back
CALL PD_BEAM_CASE_V( S, W, OMEGA_H, DE, &
RHOFF_BT_PARL, TAUFF_BB_PARL, TAUFF_BD_PARL, &
RHOBF_BT_PARL, TAUBF_BB_PARL, TAUBF_BD_PARL, &
RHOFF_BT_PERP, TAUFF_BB_PERP, TAUFF_BD_PERP, &
RHOBF_BT_PERP, TAUBF_BB_PERP, TAUBF_BD_PERP, &
RHOBF_DD, RHOFF_DD, TAUFF_DD, TAUBF_DD, &
RHO_BD, TAU_BD, TAU_BB)
ELSE
! beam parallel to pleat sides (no direct illum on pleat back)
CALL PD_BEAM_CASE_VI( S, W, OMEGA_H, DE, &
RHOFF_BT_PARL, TAUFF_BB_PARL, TAUFF_BD_PARL, &
RHOBF_BT_PARL, TAUBF_BB_PARL, TAUBF_BD_PARL, &
RHOFF_BT_PERP, TAUFF_BB_PERP, TAUFF_BD_PERP, &
RHOBF_BT_PERP, TAUBF_BB_PERP, TAUBF_BD_PERP, &
RHOBF_DD, RHOFF_DD, TAUFF_DD, TAUBF_DD, &
RHO_BD, TAU_BD, TAU_BB)
ENDIF
RETURN
END SUBROUTINE PD_BEAM