Changeset 3340 for trunk/LMDZ.TITAN/libf
- Timestamp:
- May 22, 2024, 6:23:52 PM (7 months ago)
- Location:
- trunk/LMDZ.TITAN/libf
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.TITAN/libf/chimtitan/disso.c
r2326 r3340 200 200 201 201 /* lecture des flux actiniques: 202 - suppose que l'executable est dans $LMDGCM/RUN/xxx/ 203 - et les moyennes dans $LMDGCM/datagcm/PHOT(NLAT)/Moy_(lat:1 a NLAT) 202 - suppose la presence d'un lien au même niveau que l'executable 203 pointant vers le repertoire datagcm (ou qu'il soit...) 204 - et les moyennes dans datagcm/PHOT(NLAT)/Moy_(lat:1 a NLAT) 204 205 */ 205 strcpy( dir, " ../../datagcm/PHOT" );206 strcpy( dir, "datagcm/PHOT" ); 206 207 if( (*NLAT) < 10 ) 207 208 { -
trunk/LMDZ.TITAN/libf/phytitan/optci.F90
r3318 r3340 106 106 integer dumch 107 107 real*8 dumwvl 108 integer ilev_cutoff 109 real*8 corr_haze 108 110 109 111 ! Variables for new optics … … 152 154 lkcoef(:,:) = 0.0 153 155 156 ! Level of cutoff 157 !~~~~~~~~~~~~~~~~ 158 ilev_cutoff = 26 159 154 160 do K=2,L_LEVELS 155 161 ilay = L_NLAYRAD+1 - k/2 ! int. arithmetic => gives the gcm layer index (reversed) … … 182 188 m3as = pqmo(ilay,2) / 2.0 183 189 m3af = pqmo(ilay,4) / 2.0 184 ! Cut-off (here for p = 2.7e3Pa / alt = 70km)185 IF (ilay .lt. 23) THEN186 m3as = pqmo( 23,2) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))187 m3af = pqmo( 23,4) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))190 ! Cut-off 191 IF (ilay .lt. ilev_cutoff) THEN 192 m3as = pqmo(ilev_cutoff,2) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff)) 193 m3af = pqmo(ilev_cutoff,4) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff)) 188 194 ENDIF 189 195 … … 206 212 m0as = pqmo(ilay,1) / 2.0 207 213 m3as = pqmo(ilay,2) / 2.0 208 ! If not callclouds : must have a cut-off (here for p = 2.7e3Pa / alt = 70km)214 ! If not callclouds : must have a cut-off 209 215 IF (.NOT. callclouds) THEN 210 IF (ilay .lt. 23) THEN211 m0as = pqmo( 23,1) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))212 m3as = pqmo( 23,2) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))216 IF (ilay .lt. ilev_cutoff) THEN 217 m0as = pqmo(ilev_cutoff,1) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff)) 218 m3as = pqmo(ilev_cutoff,2) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff)) 213 219 ENDIF 214 220 ENDIF … … 220 226 m0af = pqmo(ilay,3) / 2.0 221 227 m3af = pqmo(ilay,4) / 2.0 222 ! If not callclouds : must have a cut-off (here for p = 2.7e3Pa / alt = 70km)228 ! If not callclouds : must have a cut-off 223 229 IF (.NOT. callclouds) THEN 224 IF (ilay .lt. 23) THEN225 m0af = pqmo( 23,3) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))226 m3af = pqmo( 23,4) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))230 IF (ilay .lt. ilev_cutoff) THEN 231 m0af = pqmo(ilev_cutoff,3) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff)) 232 m3af = pqmo(ilev_cutoff,4) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff)) 227 233 ENDIF 228 234 ENDIF … … 248 254 ENDIF 249 255 256 ! Opacity and albedo adjustement below cutoff : 257 IF (.NOT. callclouds) THEN 258 corr_haze=0.6-0.4*TANH((PMID(K)*100.-2500.)/250.) 259 IF (ilay .lt. ilev_cutoff) THEN 260 DHAZE_T(k,nw) = DHAZE_T(k,nw) * corr_haze 261 ENDIF 262 ENDIF 263 250 264 ! Diagnostics for the haze : 251 265 DIAG_OPTH(k,nw,1) = DHAZE_T(k,nw) ! dtau -
trunk/LMDZ.TITAN/libf/phytitan/optcv.F90
r3318 r3340 117 117 integer dumch 118 118 real*8 dumwvl 119 integer ilev_cutoff ! pressure level index of cutoff 120 real*8 corr_haze 121 real*8 corr_alb 119 122 120 123 ! Variables for new optics … … 168 171 lkcoef(:,:) = 0.0 169 172 173 ! Level of cutoff 174 !~~~~~~~~~~~~~~~~ 175 ilev_cutoff = 26 176 170 177 do K=2,L_LEVELS 171 178 ilay = L_NLAYRAD+1 - k/2 ! int. arithmetic => gives the gcm layer index (reversed) … … 210 217 m3af = pqmo(ilay,4) / 2.0 211 218 ! Cut-off (here for p = 2.7e3Pa / alt = 70km) 212 IF (ilay .lt. 23) THEN213 m3as = pqmo( 23,2) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))214 m3af = pqmo( 23,4) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))219 IF (ilay .lt. ilev_cutoff) THEN 220 m3as = pqmo(ilev_cutoff,2) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff)) 221 m3af = pqmo(ilev_cutoff,4) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff)) 215 222 ENDIF 216 223 … … 235 242 ! If not callclouds : must have a cut-off (here for p = 2.7e3Pa / alt = 70km) 236 243 IF (.NOT. callclouds) THEN 237 IF (ilay .lt. 23) THEN238 m0as = pqmo( 23,1) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))239 m3as = pqmo( 23,2) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))244 IF (ilay .lt. ilev_cutoff) THEN 245 m0as = pqmo(ilev_cutoff,1) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff)) 246 m3as = pqmo(ilev_cutoff,2) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff)) 240 247 ENDIF 241 248 ENDIF … … 249 256 ! If not callclouds : must have a cut-off (here for p = 2.7e3Pa / alt = 70km) 250 257 IF (.NOT. callclouds) THEN 251 IF (ilay .lt. 23) THEN252 m0af = pqmo( 23,3) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))253 m3af = pqmo( 23,4) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(24)-zlev(23))258 IF (ilay .lt. ilev_cutoff) THEN 259 m0af = pqmo(ilev_cutoff,3) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff)) 260 m3af = pqmo(ilev_cutoff,4) / 2.0 * (zlev(ilay+1)-zlev(ilay)) / (zlev(ilev_cutoff+1)-zlev(ilev_cutoff)) 254 261 ENDIF 255 262 ENDIF … … 273 280 SSA_T(k,nw) = 1.0 274 281 ASF_T(k,nw) = 1.0 282 ENDIF 283 284 ! Opacity and albedo adjustement below cutoff 285 !---------------------------------------------- 286 corr_haze=0.85-0.15*TANH((PMID(k)*100.-2500.)/250.) 287 corr_alb =0.85-0.15*TANH((PMID(k)*100.-4500.)/1000.) 288 IF (.NOT. callclouds) THEN 289 IF (ilay .lt. ilev_cutoff) THEN 290 DHAZE_T(k,nw) = DHAZE_T(k,nw) * corr_haze 291 SSA_T(k,nw) = SSA_T(k,nw) * corr_alb 292 ENDIF 275 293 ENDIF 276 294 -
trunk/LMDZ.TITAN/libf/phytitan/physiq_mod.F90
r3318 r3340 139 139 ! pdt(ngrid,nlayer) / variables due to physical processes. 140 140 ! pdq(ngrid,nlayer) / 141 ! pdpsrf(ngrid) 141 ! pdpsrf(ngrid) / 142 142 ! 143 143 ! … … 290 290 real gmplanet 291 291 real taux(ngrid),tauy(ngrid) 292 real factlat 293 real zundg(nlayer) 292 294 293 295 … … 1117 1119 ENDDO 1118 1120 ENDIF 1121 ! In case there is no clouds, in the troposphere the moments are fixed to evacuate all aerosols 1122 IF (.NOT. callclouds) THEN 1123 DO l = 1, nlayer 1124 DO ig=1,ngrid 1125 IF (pplay(ig,l) .gt. 1000.) THEN 1126 pdq(ig,l,1)=0. 1127 pdq(ig,l,2)=0. 1128 IF (pplay(ig,l) .gt. 5000.) THEN 1129 pdq(ig,l,3)=0. 1130 pdq(ig,l,4)=0. 1131 ENDIF 1132 ENDIF 1133 ENDDO 1134 ENDDO 1135 ENDIF 1119 1136 #endif 1120 1137 … … 1354 1371 if (nudging_u) then 1355 1372 zdundg(:,:) = 0.D0 1373 j=1 1356 1374 ! boucle sur les points de grille : 1357 1375 do i = 1, ngrid 1358 ! boucle sur les latitudes : 1359 do j = 1, 49 1360 ! Nudging of the first 23 layers only !! 1361 if (ABS(REAL(u_ref(j,1)) - REAL(latitude_deg(i))) .lt. 1e-2) then 1362 zdundg(i,1:23) = (u_ref(j,2:24) - (pu(i,1:23)+pdu(i,1:23)*ptimestep)) / nudging_dt 1363 endif 1364 enddo 1376 ! interpolation linéaire des données dans le fichier lu (sur 49 latitudes) 1377 do while ((u_ref(j,1).ge.latitude_deg(i)).and.(j.lt.49)) 1378 j=j+1 1379 enddo 1380 factlat = (latitude_deg(i)-u_ref(j,1))/(u_ref(j-1,1)-u_ref(j,1)) 1381 ! Nudging of the first 23 layers only !! 1382 ! IF CHANGE IN VERTICAL RESOLUTION IN THE FIRST 23 LEVELS, IT DOES NOT WORK !!! 1383 zundg(1:23) = factlat*u_ref(j-1,2:24)+(1-factlat)*u_ref(j,2:24) 1384 zdundg(i,1:23) = (zundg(1:23) - (pu(i,1:23)+pdu(i,1:23)*ptimestep)) / nudging_dt 1365 1385 enddo 1386 1366 1387 pdu(:,:) = pdu(:,:) + zdundg(:,:) 1367 1388 endif … … 1809 1830 ! Optical diagnostics : 1810 1831 !-------------------------------------------------------- 1832 1833 if (1.eq.0) then ! not by default... 1834 1811 1835 ! Haze opacity : 1812 1836 CALL send_xios_field('ttauhv_14',zpopthv(:,:,14,2)) ! 14 --> 1.076 um … … 1877 1901 ENDIF 1878 1902 1903 endif ! 1.eq.0 ... 1904 1879 1905 ! Diagnostics for haze and clouds (4D) : 1880 1906 CALL send_xios_field('dtauhi',zpopthi(:,:,:,1)) … … 1938 1964 ! Surface (2D) : 1939 1965 CALL send_xios_field("aer_prec",mmd_aer_prec(:)) 1940 CALL send_xios_field("ccn_prec",mmd_ccn_prec(:))1941 1966 IF (callclouds) THEN 1967 CALL send_xios_field("ccn_prec",mmd_ccn_prec(:)) 1942 1968 DO iq = 1, size(ices_indx) 1943 1969 CALL send_xios_field('i'//TRIM(nameOfTracer(gazs_indx(iq)))//'_prec',mmd_ice_prec(:,iq))
Note: See TracChangeset
for help on using the changeset viewer.