source: trunk/LMDZ.COMMON/libf/evolution/NS_flux_mars.F90 @ 3495

Last change on this file since 3495 was 3493, checked in by jbclement, 3 weeks ago

PEM:

  • Renaming of Norbert Schorghofer's subroutines with the prefix 'NS_';
  • Making the extension of all NS's subroutines as '.F90';
  • Deletion of the wrapper subroutine;
  • Making the initialization, variables management and arguments of the main subroutine for the dynamic computation of ice table to be more suitable.

JBC

File size: 4.7 KB
RevLine 
[3470]1pure function flux_mars77(R,decl,latitude,HA,albedo,fracir,fracscat)
2!***********************************************************************
3! flux_mars77: calculates insolation (incoming solar radiation) on Mars
4!     flat surface only; also works in polar regions
5!
6!     R: distance from sun [AU]
7!     decl: planetocentric solar declination [radians]
8!     latitude: [radians]
9!     HA: hour angle [radians from noon, clockwise]
10!     fracir: fraction of absorption
11!     fracscat: fraction of scattering
12!***********************************************************************
13  implicit none
14  real(8) flux_mars77
15  real(8), intent(IN) :: R,decl,latitude,HA,albedo,fracIR,fracScat
16  real(8), parameter :: So=1365. ! [W/m^2]
17  real(8), parameter :: sigSB=5.6704d-8
18  real(8) c1,s1,Qo,solarAttenuation,Q
19  real(8) sinbeta,sinbetaNoon,Qdir,Qscat,Qlw,Fout
20
21  c1 = cos(latitude)*cos(decl)
22  s1 = sin(latitude)*sin(decl)
23  ! beta = 90 minus incidence angle for horizontal surface
24  ! beta = elevation of sun above (horizontal) horizon
25  sinbeta = c1*cos(HA) + s1
26  sinbetaNoon = c1 + s1
27  sinbetaNoon = max(sinbetaNoon,0.d0)  ! horizon
28
29  Qo = So/(R**2)  ! solar constant at Mars
30 
31  ! short-wavelength irradiance
32  if (sinbeta>0.d0) then
33     solarAttenuation = (1.- fracIR - fracScat)**(1./max(sinbeta,0.04))
34     Qdir = Qo*sinbeta*solarAttenuation
35     Qscat = 0.5*Qo*fracScat
36     Q = (1.-albedo)*(Qdir + Qscat)
37  else
38     Q = 0.
39  endif
40
41  ! atmospheric IR contribution based on Kieffer et al. (1977), JGR 82, 4249
42  Fout = 1.*sigSB*150**4  ! matters only in polar region
43  Qlw = fracIR*max(Qo*sinbetaNoon,Fout)
44
45  ! net flux = short-wavelength + long-wavelength irradiance
46  flux_mars77 = Q + Qlw
47end function flux_mars77
48
49
50
51pure subroutine flux_mars2(R,decl,latitude,HA,fracIR,fracScat, &
52     &   SlopeAngle,azFac,emax,Qdir,Qscat,Qlw)
53!*****************************************************************************
54! flux_mars2: Insolation (incoming solar radiation) at Mars on sloped surface;
55!             returns several irradiances
56!
57! INPUTS:
58!     R: distance from sun [AU]
59!     decl: planetocentric solar declination [radians]
60!     latitude: [radians]
61!     HA: hour angle (radians from noon, clockwise)
62!     fracIR: fraction of absorption
63!     fracScat: fraction of scattering
64!     SlopeAngle: >0, [radians]
65!     azFac: azimuth of topographic gradient (radians east of north)
66!            azFac=0 is south-facing 
67!     emax: maximum horizon elevation in direction of azimuth [radians]
68! OUTPUTS:
69!     Qdir: direct incoming short-wavelength irradiance [W/m^2]
70!     Qscat: diffuse short-wavelength irradiance from atmosphere [W/m^2]
71!     Qlw: diffuse long-wavelength irradiance from atmosphere [W/m^2]
72!*****************************************************************************
73  implicit none
74  real(8), parameter :: pi=3.1415926535897932, So=1365.
75  real(8), parameter :: sigSB=5.6704d-8
76  real(8), intent(IN) :: R,decl,latitude,HA,SlopeAngle,azFac,emax
77  real(8), intent(IN) :: fracIR,fracScat
78  real(8), intent(OUT) :: Qdir,Qscat,Qlw
79  real(8) c1,s1,solarAttenuation,Qo
80  real(8) sinbeta,sinbetaNoon,cosbeta,sintheta,azSun,buf,Fout
81 
82  c1 = cos(latitude)*cos(decl)
83  s1 = sin(latitude)*sin(decl)
84  ! beta = 90 minus incidence angle for horizontal surface
85  ! beta = elevation of sun above (horizontal) horizon
86  sinbeta = c1*cos(HA) + s1
87  sinbetaNoon = c1 + s1
88  sinbetaNoon = max(sinbetaNoon,0.d0)  ! horizon
89     
90  cosbeta = sqrt(1-sinbeta**2)
91  buf = (sin(decl)-sin(latitude)*sinbeta)/(cos(latitude)*cosbeta)
92  if (buf>+1.) buf=+1.d0  ! roundoff
93  if (buf<-1.) buf=-1.d0  ! roundoff
94  azSun = acos(buf)
95  if (sin(HA)>=0) azSun = 2*pi-azSun
96 
97! theta = 90 minus incidence angle for sloped surface
98  sintheta = cos(SlopeAngle)*sinbeta - & 
99       &     sin(SlopeAngle)*cosbeta*cos(azSun-azFac)
100  if (cosbeta==0) sintheta=cos(SlopeAngle)*sinbeta  ! zenith, where azSun=NaN
101 
102  if (sintheta<0.) sintheta=0.  ! local horizon (self-shadowing)
103  if (sinbeta<0.) sintheta=0.  ! horizontal horizon at infinity
104  if (sinbeta<sin(emax)) sintheta=0. ! distant horizon
105
106! fluxes and contributions from atmosphere
107  Qo = So/R**2  ! solar constant at Mars
108  solarAttenuation = (1.- fracIR - fracScat)**(1./max(sinbeta,0.04d0))
109  Qdir = Qo*sintheta*solarAttenuation
110  Fout = 1.*sigSB*150**4  ! matters only in polar region
111  Qlw = fracIR*max(Qo*sinbetaNoon,Fout)
112  if (sinbeta>0.d0) then
113     Qscat = 0.5*fracScat*Qo
114  else
115     Qscat = 0.
116  endif
117 
118! For a horizontal and unobstructed surface
119!   absorbed flux = (1-albedo)*(Qdir+Qscat) + emiss*Qlw
120!
121! For a tilted surface
122!   absorbed flux = (1-albedo)*(Qdir+Qscat*viewfactor) + emiss*Qlw*viewfactor
123!   then add irradiance from land in field of view 
124!   in the case of a planar slope, viewfactor = cos(SlopeAngle/2.)**2
125end subroutine flux_mars2
Note: See TracBrowser for help on using the repository browser.