1 | SUBROUTINE heating(dist,rmu0,fract,falbe,sol_htg,zswup,zswdn, |
---|
2 | . icld) |
---|
3 | |
---|
4 | |
---|
5 | c======================================================================= |
---|
6 | c |
---|
7 | c Object: Computation of the solar heating rate |
---|
8 | c SOL_HTG(klon,klev) |
---|
9 | c |
---|
10 | c Arguments: |
---|
11 | c ---------- |
---|
12 | c |
---|
13 | c Input: |
---|
14 | c ------ |
---|
15 | c |
---|
16 | c dist-----input-R- distance astronomique terre-soleil |
---|
17 | c rmu0-----input-R- cosinus de l'angle zenithal |
---|
18 | c fract----input-R- duree d'ensoleillement normalisee |
---|
19 | c falbe----input-R- surface albedo |
---|
20 | c icld-----input-I- calcul avec nuages. |
---|
21 | c p(klon,nl) pressure (level) |
---|
22 | c |
---|
23 | c Output: |
---|
24 | c ------- |
---|
25 | c sol_htg-----output-R- echauffement atmospherique (visible) (K/s) |
---|
26 | c zswup-------output-R- flux solaire upward (+ vers le haut) (W/m2) |
---|
27 | c zswdn-------output-R- flux solaire downward (+ vers le bas) (W/m2) |
---|
28 | c |
---|
29 | c======================================================================= |
---|
30 | c----------------------------------------------------------------------- |
---|
31 | c Declarations: |
---|
32 | c ------------- |
---|
33 | |
---|
34 | use dimphy |
---|
35 | use TGMDAT_MOD, ONLY: UBARI,UBARV,UBAR0 |
---|
36 | use TGMDAT_MOD, ONLY: CSUBP,F0PI |
---|
37 | IMPLICIT NONE |
---|
38 | include "dimensions.h" |
---|
39 | |
---|
40 | INTEGER NLEVEL,NLAYER,NSPECV |
---|
41 | PARAMETER(NLAYER=llm,NLEVEL=NLAYER+1) |
---|
42 | PARAMETER (NSPECV=24) |
---|
43 | c |
---|
44 | c ASTUCE POUR EVITER klon... EN ATTENDANT MIEUX |
---|
45 | INTEGER ngrid |
---|
46 | PARAMETER (ngrid=(jjm-1)*iim+2) ! = klon |
---|
47 | c |
---|
48 | |
---|
49 | c Arguments: |
---|
50 | c ---------- |
---|
51 | |
---|
52 | |
---|
53 | real dist, rmu0(klon), fract(klon), falbe(klon) |
---|
54 | integer icld |
---|
55 | |
---|
56 | real sol_htg(klon,klev) |
---|
57 | real zswup(klon,klev+1) |
---|
58 | real zswdn(klon,klev+1) |
---|
59 | |
---|
60 | c Local: |
---|
61 | c ------ |
---|
62 | |
---|
63 | INTEGER I,J,IG,K,IPRINT,ilat,nq |
---|
64 | |
---|
65 | c COMMONS for interface with local subroutines: |
---|
66 | c --------------------------------------------- |
---|
67 | |
---|
68 | REAL CH4(NLEVEL),XN2(NLEVEL),H2(NLEVEL),AR(NLEVEL) |
---|
69 | REAL XMU(NLEVEL),GAS1(NLAYER),COLDEN(NLAYER) |
---|
70 | REAL FNETV(ngrid,NLEVEL),FUPV(ngrid,NLEVEL,NSPECV) |
---|
71 | REAL FDV(ngrid,NLEVEL,NSPECV),FMNETV(ngrid,NLEVEL) |
---|
72 | |
---|
73 | COMMON /GASS/ CH4,XN2 |
---|
74 | & ,H2,AR |
---|
75 | & ,XMU,GAS1 |
---|
76 | & ,COLDEN |
---|
77 | |
---|
78 | COMMON /FLUXvV/ FNETV, |
---|
79 | & FUPV, |
---|
80 | & FDV, |
---|
81 | & FMNETV |
---|
82 | |
---|
83 | |
---|
84 | c================================================================== |
---|
85 | |
---|
86 | fnetv = 0.0 |
---|
87 | sol_htg= 0.0 |
---|
88 | zswup = 0.0 |
---|
89 | zswdn = 0.0 |
---|
90 | c pour sorties dans gfluxv... |
---|
91 | iprint = 0 |
---|
92 | |
---|
93 | DO ig=1,klon |
---|
94 | IF(fract(ig).LT.1.e-5) THEN |
---|
95 | DO j=1,nlayer |
---|
96 | sol_htg(ig,j)=0. |
---|
97 | ENDDO |
---|
98 | ELSE |
---|
99 | ubar0=rmu0(ig) |
---|
100 | |
---|
101 | CALL sfluxv(iprint,ig,dist,falbe,icld) ! #3 |
---|
102 | |
---|
103 | do K=1,NSPECV |
---|
104 | zswup(ig,:) = zswup(ig,:)+FUPV(ig,:,K)*fract(ig) ! >0 up |
---|
105 | zswdn(ig,:) = zswdn(ig,:)+FDV(ig,:,K) *fract(ig) ! >0 down |
---|
106 | enddo |
---|
107 | fnetv(ig,:) = fnetv(ig,:) *fract(ig) ! >0 up |
---|
108 | |
---|
109 | c conversion en W/m2: |
---|
110 | zswup(ig,:) = 1.e-3*zswup(ig,:) |
---|
111 | zswdn(ig,:) = 1.e-3*zswdn(ig,:) |
---|
112 | |
---|
113 | DO j=1,nlayer |
---|
114 | sol_htg(ig,j)= ! K/s |
---|
115 | s (fnetv(ig,j+1)-fnetv(ig,j)) |
---|
116 | s /(colden(j)*csubp) |
---|
117 | ENDDO |
---|
118 | ENDIF |
---|
119 | ENDDO |
---|
120 | |
---|
121 | RETURN |
---|
122 | 191 FORMAT(F8.2,1P10E10.2) |
---|
123 | 192 FORMAT(a8,1P10E10.2) |
---|
124 | END |
---|