1 | SUBROUTINE season_haze(zday,lat,press,fact) |
---|
2 | |
---|
3 | ! ============================================================================== |
---|
4 | ! Purpose |
---|
5 | ! ------- |
---|
6 | ! Compute haze opacity seasonal modulation factor based on Karkoschka 2016 |
---|
7 | ! |
---|
8 | ! Authors |
---|
9 | ! ------- |
---|
10 | ! J. Vatant d'Ollone (2018) |
---|
11 | ! ============================================================================== |
---|
12 | |
---|
13 | USE radinc_h |
---|
14 | |
---|
15 | !----------------------------------------------------------------------- |
---|
16 | ! Declarations: |
---|
17 | ! ------------- |
---|
18 | |
---|
19 | IMPLICIT NONE |
---|
20 | |
---|
21 | ! Arguments : |
---|
22 | ! ----------- |
---|
23 | REAL, INTENT(IN) :: zday ! Time elapsed since Ls=0 (sols) |
---|
24 | REAL, INTENT(IN) :: lat ! latitude of grid point |
---|
25 | REAL, DIMENSION(L_LEVELS), INTENT(IN) :: press ! layers boundary pressure (mbar) |
---|
26 | REAL, DIMENSION(L_LEVELS), INTENT(OUT) :: fact ! Haze opacity seasonal factor |
---|
27 | |
---|
28 | ! Local variables : |
---|
29 | ! ----------------- |
---|
30 | REAL :: M1,M2,D1,D2,E1,E2,B1,B2 |
---|
31 | REAL :: pi = 4.0*atan(1.0) |
---|
32 | REAL :: sol2earthyr = 15.945 / 365.25 |
---|
33 | REAL :: equinox = 2009.611 ! 11 August 2009 Ls=0 |
---|
34 | INTEGER :: i |
---|
35 | ! ------------------------------------------------------------------------- |
---|
36 | |
---|
37 | ! Mi, Ei and Di are fitted from Fig 14 from Karkoschka 2016 |
---|
38 | |
---|
39 | M1 = 0.20543*atan(0.142666*abs(lat)-2.83289)-0.560454 |
---|
40 | M2 = 1.09941*atan(-0.0584703*abs(lat)+1.30911)+0.0430241 |
---|
41 | |
---|
42 | D1 = 2.30639*( cos(-0.0311457*(abs(lat)*180.0/pi-90.0)) - cos(0.0311457*90.0) ) |
---|
43 | D2 = 68.3087*( cos(-0.0035113*(abs(lat)*180.0/pi-90.0)) - cos(0.0035113*90.0) ) |
---|
44 | |
---|
45 | E1 = 0.644826*atan(0.145421*abs(lat)-4.50363)+2003.35 |
---|
46 | E2 = 2001.93 |
---|
47 | |
---|
48 | IF (lat .GE. 0.0 ) THEN |
---|
49 | B1 = M1 + D1 * sin( (equinox+zday*sol2earthyr-E1) * 2*pi / 29.4571 ) ! Eq. 3 from Karkoschka 2016 |
---|
50 | B2 = M2 + D2 * sin( (equinox+zday*sol2earthyr-E2) * 2*pi / 29.4571 ) ! """ |
---|
51 | ELSE |
---|
52 | B1 = M1 - D1 * sin( (equinox+zday*sol2earthyr-E1) * 2*pi / 29.4571 ) |
---|
53 | B2 = M2 - D2 * sin( (equinox+zday*sol2earthyr-E2) * 2*pi / 29.4571 ) |
---|
54 | ENDIF |
---|
55 | |
---|
56 | fact(:) = 1.0 ! default value -> no adjustment of reference haze profile |
---|
57 | |
---|
58 | DO i=1,L_LEVELS |
---|
59 | |
---|
60 | IF ( press(i).GT.20.0 ) THEN |
---|
61 | fact(i) = 5.57403*exp(0.0629317*B1)-4.23873 ! Fit from table 5 of Karkoschka 2016 |
---|
62 | ELSE IF ( press(i).LT.2.0 ) THEN |
---|
63 | fact(i) = 4.83997*exp(0.0501367*B2)-3.83877 ! """ |
---|
64 | ENDIF |
---|
65 | |
---|
66 | IF ( fact(i) .LT. 1.0E-6 ) fact(i) = 1.0E-6 ! Threshold for extreme values ( fit go neg and no haze at all seems unphysical ) |
---|
67 | |
---|
68 | ENDDO |
---|
69 | |
---|
70 | |
---|
71 | END SUBROUTINE season_haze |
---|