/[MITgcm]/MITgcm/pkg/thsice/thsice_albedo.F
ViewVC logotype

Annotation of /MITgcm/pkg/thsice/thsice_albedo.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.7 - (hide annotations) (download)
Tue Oct 12 15:55:34 2010 UTC (13 years, 7 months ago) by mlosch
Branch: MAIN
CVS Tags: checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64f, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63g, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint64, checkpoint63, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62w, checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62z, checkpoint62y, checkpoint62x
Changes since 1.6: +55 -42 lines
vectorization: move print and stop statements out of loops

1 mlosch 1.7 C $Header: /u/gcmpack/MITgcm/pkg/thsice/thsice_albedo.F,v 1.6 2009/07/08 23:35:05 jmc Exp $
2 jmc 1.1 C $Name: $
3    
4     #include "THSICE_OPTIONS.h"
5    
6 jmc 1.2 CBOP
7 jmc 1.4 C !ROUTINE: THSICE_ALBEDO
8 jmc 1.2 C !INTERFACE:
9     SUBROUTINE THSICE_ALBEDO(
10 jmc 1.4 I bi, bj, siLo, siHi, sjLo, sjHi,
11     I iMin,iMax, jMin,jMax,
12     I iceMask, hIce, hSnow, tSrf, ageSnw,
13 jmc 1.6 O sAlb, sAlbNIR,
14 jmc 1.4 I myTime, myIter, myThid )
15 jmc 1.2 C !DESCRIPTION: \bv
16 jmc 1.1 C *==========================================================*
17     C | S/R THSICE_ALBEDO
18     C *==========================================================*
19 jmc 1.4 C | Compute surface albedo over sea-ice
20 jmc 1.1 C *==========================================================*
21 jmc 1.2 C \ev
22    
23     C !USES:
24 jmc 1.1 IMPLICIT NONE
25    
26     C == Global data ==
27 jmc 1.3 #include "EEPARAMS.h"
28 jmc 1.1 #include "THSICE_PARAMS.h"
29    
30 jmc 1.2 C !INPUT/OUTPUT PARAMETERS:
31 jmc 1.1 C == Routine Arguments ==
32 jmc 1.4 C siLo,siHi :: size of input/output array: 1rst dim. lower,higher bounds
33     C sjLo,sjHi :: size of input/output array: 2nd dim. lower,higher bounds
34     C bi,bj :: tile indices
35     C iMin,iMax :: computation domain: 1rst index range
36     C jMin,jMax :: computation domain: 2nd index range
37     C--- Input:
38     C iceMask :: sea-ice fractional mask [0-1]
39     C hIce (hi) :: ice height [m]
40     C hSnow (hs) :: snow height [m]
41     C tSrf (Tsf) :: surface (ice or snow) temperature [oC]
42     C ageSnw (age) :: snow age [s]
43     C--- Output
44     C sAlb (albedo) :: surface albedo [0-1]
45 jmc 1.6 C sAlbNIR(albedo):: near IR surface albedo [0-1]
46 jmc 1.4 C--- Input:
47     C myTime :: current Time of simulation [s]
48     C myIter :: current Iteration number in simulation
49     C myThid :: my Thread Id number
50     INTEGER siLo, siHi, sjLo, sjHi
51     INTEGER bi,bj
52     INTEGER iMin, iMax
53     INTEGER jMin, jMax
54     _RL iceMask(siLo:siHi,sjLo:sjHi)
55     _RL hIce (siLo:siHi,sjLo:sjHi)
56     _RL hSnow (siLo:siHi,sjLo:sjHi)
57     _RL tSrf (siLo:siHi,sjLo:sjHi)
58     _RL ageSnw (siLo:siHi,sjLo:sjHi)
59     _RL sAlb (siLo:siHi,sjLo:sjHi)
60 jmc 1.6 _RL sAlbNIR(siLo:siHi,sjLo:sjHi)
61 jmc 1.4 _RL myTime
62     INTEGER myIter
63     INTEGER myThid
64     CEOP
65    
66     #ifdef ALLOW_THSICE
67     C !LOCAL VARIABLES:
68     C--- local copy of input/output argument list variables (see description above)
69 jmc 1.1 _RL hi ! ice height
70     _RL hs ! snow height
71     _RL Tsf ! surface temperature
72     _RL age ! snow age
73     _RL albedo ! surface albedo
74     C == Local variables ==
75 jmc 1.4 C frsnow :: fractional snow cover
76 jmc 1.1 C albsno :: albedo of snow
77     C albice :: albedo of ice
78     C albNewSnow :: albedo of new (fresh) snow
79 jmc 1.4 C albNewSnow :: albedo of new (fresh) snow
80     C msgBuf :: Informational/error meesage buffer
81 jmc 1.2 c _RL frsnow
82 mlosch 1.7 _RL albsno
83     _RL albice
84 jmc 1.1 _RL albNewSnow
85 jmc 1.6 _RL albNIR_ocean, albNIR_thick, albNIR_dsnow
86     _RL albNIR_ice, albNIR_fHice, recFac_albNIR
87 jmc 1.4 INTEGER i,j
88 mlosch 1.7 INTEGER ii,jj,icount
89 jmc 1.4 CHARACTER*(MAX_LEN_MBUF) msgBuf
90    
91     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
92 jmc 1.1
93 jmc 1.6 IF ( thSIce_calc_albNIR ) THEN
94     C Near-InfraRed albedo
95     albNIR_ocean = 0.06 _d 0
96     albNIR_thick = 0.33 _d 0
97     albNIR_dsnow = 0.68 _d 0
98     albNIR_fHice = 4. _d 0
99     recFac_albNIR = 1. _d 0 / ATAN(albNIR_fHice*0.5 _d 0)
100     ENDIF
101    
102 mlosch 1.7 icount = 0
103 jmc 1.4 DO j = jMin, jMax
104     DO i = iMin, iMax
105     IF ( iceMask(i,j).GT.0. _d 0 ) THEN
106 mlosch 1.7 hi = hIce(i,j)
107     hs = hSnow(i,j)
108     Tsf = tSrf(i,j)
109     age = ageSnw(i,j)
110    
111 jmc 1.4 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
112 jmc 1.1 C-- Albedo of Bare Sea-Ice
113 mlosch 1.7 albice = albIceMax + (albIceMin-albIceMax)*EXP(-hi/hAlbIce)
114 jmc 1.1
115     C-- LANL albedo calculation
116     c frsnow = 0.
117     c if (hs .gt. 0.) frsnow = 1.
118     c if (Tsf .lt. 0.) then
119     c albedo = frsnow*albColdSnow + (1.-frsnow)*albice
120     c else
121     c albedo = frsnow*albWarmSnow + (1.-frsnow)*albice
122     c endif
123 jmc 1.4 C-end LANL albedo calculation
124 jmc 1.1
125     C-- GISS model albedo calculation
126     c albice = 0.7 _d 0
127    
128 jmc 1.5 C- New snow: (linear) transition between tempSnowAlb (oC) and 0.oC
129 jmc 1.1 C from cold/dry snow albedo to warm/wet snow albedo
130 mlosch 1.7 IF ( tempSnowAlb.LT.0. _d 0 ) THEN
131     albNewSnow = albColdSnow
132     & + (albWarmSnow - albColdSnow)
133     & *MAX( 0. _d 0, MIN(1. _d 0 - Tsf/tempSnowAlb, 1. _d 0) )
134     ELSE
135     albNewSnow = albColdSnow
136     ENDIF
137 jmc 1.1 C- albedo of snow is function of snow-age (make age units into days):
138 mlosch 1.7 albsno = albOldSnow
139     & +(albNewSnow-albOldSnow)*EXP(-0.2 _d 0*age/86400. _d 0)
140 jmc 1.1 C- layer of snow over the ice:
141 mlosch 1.7 albedo = albsno + (albice-albsno)*EXP(-hs/hAlbSnow)
142 jmc 1.1
143 mlosch 1.7 IF ( thSIce_calc_albNIR ) THEN
144 jmc 1.6 C-- Compute near-infrared albedo
145 mlosch 1.7 albNIR_ice = albNIR_ocean + (albNIR_thick - albNIR_ocean)*
146     & MIN( recFac_albNIR*ATAN(albNIR_fHice*hi), 1. _d 0 )
147     & + 0.075 _d 0 * MIN( -Tsf - 1. _d 0, 0. _d 0 )
148    
149     sAlbNIR(i,j) = albNIR_ice * ( 1. _d 0 - hs/(hs + 0.02 _d 0) )
150     & + ( albNIR_dsnow
151     & + 0.15 _d 0 *MIN( -Tsf - 1. _d 0, 0. _d 0) )
152     & * hs/(hs + 0.02 _d 0)
153     ELSE
154     sAlbNIR(i,j) = albedo
155     ENDIF
156 jmc 1.4 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
157 mlosch 1.7 IF (albedo.GT.1. _d 0 .OR. albedo.LT. .2 _d 0) THEN
158     C test for potential errors (move print statements out of i,j-loops
159     C for vectorization
160     ii=i
161     jj=j
162     icount=icount+1
163     ENDIF
164     sAlb(i,j) = albedo
165 jmc 1.4 ELSE
166 mlosch 1.7 sAlb(i,j) = 0. _d 0
167     sAlbNIR(i,j) = 0. _d 0
168 jmc 1.4 ENDIF
169     ENDDO
170     ENDDO
171 mlosch 1.7 C catch potential errors
172     IF (icount .gt. 0) THEN
173     c print*,'QQ - albedo problem', albedo, age, hs, albsno
174     WRITE(msgBuf,'(A,I10,4I6)')
175     & 'THSICE_ALBEDO: Problem, e.g., at:', myIter,ii,jj,bi,bj
176     CALL PRINT_ERROR( msgBuf , myThid)
177     WRITE(msgBuf,'(A,1P3E17.9)')
178     & 'THSICE_ALBEDO: albedo=', sAlb(ii,jj),ageSnw(ii,jj),
179     & hsnow(ii,jj)
180     CALL PRINT_ERROR( msgBuf , myThid)
181     STOP 'THSICE_ALBEDO: albedo out of range'
182     ENDIF
183 jmc 1.1
184     #endif /* ALLOW_THSICE */
185    
186     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
187    
188     RETURN
189     END

  ViewVC Help
Powered by ViewVC 1.1.22