| 1 | c======================================================================= |
|---|
| 2 | c Program for simulate the impact of the CO2 snow fall on |
|---|
| 3 | c the surface infrared emission (emissivity) |
|---|
| 4 | c----------------------------------------------------------------------- |
|---|
| 5 | c Algorithme: |
|---|
| 6 | c 1 - Initialization |
|---|
| 7 | c 2 - Compute the surface emissivity |
|---|
| 8 | c----------------------------------------------------------------------- |
|---|
| 9 | c Author: F. Forget |
|---|
| 10 | c----------------------------------------------------------------------- |
|---|
| 11 | c Reference paper: |
|---|
| 12 | c Francois Forget and James B. Pollack |
|---|
| 13 | c |
|---|
| 14 | c "Thermal infrared observations of the condensing Martian polar |
|---|
| 15 | c caps: CO2 ice temperatures and radiative budget" |
|---|
| 16 | c |
|---|
| 17 | c JOURNAL OF GEOPHYSICAL RESEARCH, VOL. 101, NO. E7, PAGES 16, |
|---|
| 18 | c 865-16,879, JULY 25, 1996 |
|---|
| 19 | c======================================================================= |
|---|
| 20 | |
|---|
| 21 | SUBROUTINE co2snow(ngrid, nlayer, ptimestep, emisref, condsub, |
|---|
| 22 | & pplev, pcondicea, pcondices, pfallice, |
|---|
| 23 | & pemisurf) |
|---|
| 24 | |
|---|
| 25 | use surfdat_h, only: iceradius, dtemisice |
|---|
| 26 | use geometry_mod, only: latitude ! grid point latitudes (rad) |
|---|
| 27 | use time_phylmdz_mod, only: daysec |
|---|
| 28 | |
|---|
| 29 | IMPLICIT NONE |
|---|
| 30 | |
|---|
| 31 | #include "callkeys.h" |
|---|
| 32 | |
|---|
| 33 | c======================================================================= |
|---|
| 34 | c Variables |
|---|
| 35 | c======================================================================= |
|---|
| 36 | c Inputs: |
|---|
| 37 | c ------- |
|---|
| 38 | integer, intent(in) :: |
|---|
| 39 | & ngrid, ! number of atmospheric columns |
|---|
| 40 | & nlayer ! number of atmospheric layers |
|---|
| 41 | |
|---|
| 42 | real, intent(in) :: |
|---|
| 43 | & ptimestep, ! timestep of the physics (s) |
|---|
| 44 | & emisref(ngrid), ! grd or ice emissivity without snow |
|---|
| 45 | & pplev(ngrid,nlayer+1), ! interlayer pressure (Pa) |
|---|
| 46 | & pcondicea(ngrid,nlayer), ! CO2 condensation rate in layers |
|---|
| 47 | ! (kg/m2/s) |
|---|
| 48 | & pcondices(ngrid), ! CO2 condensation rate on the surface |
|---|
| 49 | ! (kg/m2/s) |
|---|
| 50 | & pfallice(ngrid,nlayer+1) ! falling CO2 ice (kg/m2/s) |
|---|
| 51 | |
|---|
| 52 | logical, intent(in) :: |
|---|
| 53 | & condsub(ngrid) ! true if there is CO2 condensation or |
|---|
| 54 | ! sublimation in the column |
|---|
| 55 | |
|---|
| 56 | c Output: |
|---|
| 57 | c ------- |
|---|
| 58 | real, intent(out) :: |
|---|
| 59 | & pemisurf(ngrid) ! surface emissivity |
|---|
| 60 | |
|---|
| 61 | c local: |
|---|
| 62 | c ------ |
|---|
| 63 | integer :: |
|---|
| 64 | & l, |
|---|
| 65 | & ig, |
|---|
| 66 | & icap |
|---|
| 67 | |
|---|
| 68 | real :: |
|---|
| 69 | & sumdaer, |
|---|
| 70 | & zdemisurf |
|---|
| 71 | |
|---|
| 72 | real, parameter :: |
|---|
| 73 | & alpha = 0.45 |
|---|
| 74 | |
|---|
| 75 | c saved: |
|---|
| 76 | c ------ |
|---|
| 77 | real, save :: |
|---|
| 78 | & Kscat(2) ! Kscat: coefficient for decreasing the surface |
|---|
| 79 | c ! emissivity |
|---|
| 80 | c ! |
|---|
| 81 | c ! Kscat = (0.001/3.) * alpha / iceradius |
|---|
| 82 | c ! with 0.3 < alpha < 0.6 |
|---|
| 83 | c ! |
|---|
| 84 | c ! alpha set to 0.45 (coeff from emis = f (tau)) and |
|---|
| 85 | c ! iceradius the mean radius of the scaterring |
|---|
| 86 | c ! particles (200.e-6 < iceradius < 10.e-6) |
|---|
| 87 | c ! |
|---|
| 88 | c ! (2) = N and S hemispheres |
|---|
| 89 | |
|---|
| 90 | logical, save :: |
|---|
| 91 | & firstcall = .true. |
|---|
| 92 | |
|---|
| 93 | !$OMP THREADPRIVATE(Kscat,firstcall) |
|---|
| 94 | |
|---|
| 95 | c======================================================================= |
|---|
| 96 | c BEGIN |
|---|
| 97 | c======================================================================= |
|---|
| 98 | c 1 - Initialization |
|---|
| 99 | c======================================================================= |
|---|
| 100 | if (firstcall) then |
|---|
| 101 | Kscat(1) = (0.001/3.) * alpha / iceradius(1) |
|---|
| 102 | Kscat(2) = (0.001/3.) * alpha / iceradius(2) |
|---|
| 103 | |
|---|
| 104 | firstcall = .false. |
|---|
| 105 | end if |
|---|
| 106 | c======================================================================= |
|---|
| 107 | c 2 - Compute the surface emissivity |
|---|
| 108 | c======================================================================= |
|---|
| 109 | do ig = 1, ngrid |
|---|
| 110 | if (condsub(ig)) then |
|---|
| 111 | |
|---|
| 112 | if (latitude(ig).lt.0.) then |
|---|
| 113 | icap = 2 ! Southern hemisphere |
|---|
| 114 | else |
|---|
| 115 | icap = 1 ! Northern Hemisphere |
|---|
| 116 | end if |
|---|
| 117 | |
|---|
| 118 | ! compute zdemisurf using an integrated form for numerical |
|---|
| 119 | ! safety instead |
|---|
| 120 | zdemisurf = |
|---|
| 121 | & (emisref(ig) - pemisurf(ig)) / (dtemisice(icap) * daysec) |
|---|
| 122 | & + |
|---|
| 123 | & ( emisref(ig) * |
|---|
| 124 | & ( (pemisurf(ig)/emisref(ig))**(-3) + |
|---|
| 125 | & 3.*Kscat(icap)*pfallice(ig,1)*ptimestep )**(-1/3.) |
|---|
| 126 | & - pemisurf(ig) |
|---|
| 127 | & ) / ptimestep |
|---|
| 128 | pemisurf(ig) = pemisurf(ig) + zdemisurf * ptimestep |
|---|
| 129 | if (pemisurf(ig).lt.0.1) then |
|---|
| 130 | write(*,*)'ds co2snow: emis < 0.1 !!!' |
|---|
| 131 | write(*,*)'ig =' , ig |
|---|
| 132 | write(*,*)'pemisurf(ig)', pemisurf(ig) |
|---|
| 133 | write(*,*)'zdemisurf*ptimestep', zdemisurf*ptimestep |
|---|
| 134 | end if |
|---|
| 135 | else ! if condsub(ig) is false |
|---|
| 136 | pemisurf(ig) = emisref(ig) |
|---|
| 137 | end if |
|---|
| 138 | end do ! ngrid |
|---|
| 139 | c======================================================================= |
|---|
| 140 | c END |
|---|
| 141 | c======================================================================= |
|---|
| 142 | return |
|---|
| 143 | end |
|---|