Changeset 2146 for LMDZ5/trunk/libf/phylmd/rrtm
- Timestamp:
- Nov 14, 2014, 9:22:21 PM (10 years ago)
- Location:
- LMDZ5/trunk/libf/phylmd/rrtm
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/rrtm/aeropt_5wv_rrtm.F90
r2058 r2146 12 12 USE aero_mod 13 13 USE phys_local_var_mod, only: od550aer,od865aer,ec550aer,od550lt1aer 14 USE YOMCST , only : RD , RG15 14 16 15 ! … … 50 49 ! 51 50 IMPLICIT NONE 51 INCLUDE "YOMCST.h" 52 52 ! 53 53 ! Input arguments: … … 55 55 REAL, DIMENSION(klon,klev), INTENT(in) :: pdel 56 56 REAL, INTENT(in) :: delt 57 REAL, DIMENSION(klon,klev,naero_ spc), INTENT(in) :: m_allaer57 REAL, DIMENSION(klon,klev,naero_tot), INTENT(in) :: m_allaer 58 58 REAL, DIMENSION(klon,klev), INTENT(in) :: RHcl ! humidite relative ciel clair 59 59 INTEGER,INTENT(in) :: flag_aerosol … … 73 73 LOGICAL :: soluble 74 74 75 INTEGER :: i, k, m 75 INTEGER :: i, k, m, aerindex 76 76 INTEGER :: spsol, spinsol, la 77 77 INTEGER :: RH_num(klon,klev) … … 96 96 REAL :: zdp1(klon,klev) 97 97 INTEGER, ALLOCATABLE, DIMENSION(:) :: aerosol_name 98 INTEGER :: nb_aer 98 INTEGER :: nb_aer, itau 99 LOGICAL :: ok_itau 99 100 100 101 REAL :: dh(KLON,KLEV) … … 105 106 REAL :: alpha_aeri_5wv(las,naero_insoluble) ! Ext. coeff. ** m2/g 106 107 107 REAL, DIMENSION(klon,klev,naero_ spc) :: mass_temp108 REAL, DIMENSION(klon,klev,naero_tot) :: mass_temp 108 109 109 110 ! … … 113 114 LOGICAL :: used_tau(naero_tot) 114 115 INTEGER :: n 115 116 116 117 ! From here on we look at the optical parameters at 5 wavelengths: 117 118 ! 443nm, 550, 670, 765 and 865 nm … … 222 223 nb_aer = 2 223 224 ALLOCATE (aerosol_name(nb_aer)) 224 aerosol_name(1) = id_ASSO4M 225 aerosol_name(2) = id_CSSO4M 225 aerosol_name(1) = id_ASSO4M_phy 226 aerosol_name(2) = id_CSSO4M_phy 226 227 ELSEIF (flag_aerosol .EQ. 2) THEN 227 228 nb_aer = 2 228 229 ALLOCATE (aerosol_name(nb_aer)) 229 aerosol_name(1) = id_ASBCM 230 aerosol_name(2) = id_AIBCM 230 aerosol_name(1) = id_ASBCM_phy 231 aerosol_name(2) = id_AIBCM_phy 231 232 ELSEIF (flag_aerosol .EQ. 3) THEN 232 233 nb_aer = 2 233 234 ALLOCATE (aerosol_name(nb_aer)) 234 aerosol_name(1) = id_ASPOMM 235 aerosol_name(2) = id_AIPOMM 235 aerosol_name(1) = id_ASPOMM_phy 236 aerosol_name(2) = id_AIPOMM_phy 236 237 ELSEIF (flag_aerosol .EQ. 4) THEN 237 238 nb_aer = 3 238 239 ALLOCATE (aerosol_name(nb_aer)) 239 aerosol_name(1) = id_CSSSM 240 aerosol_name(2) = id_SSSSM 241 aerosol_name(3) = id_ASSSM 240 aerosol_name(1) = id_CSSSM_phy 241 aerosol_name(2) = id_SSSSM_phy 242 aerosol_name(3) = id_ASSSM_phy 242 243 ELSEIF (flag_aerosol .EQ. 5) THEN 243 244 nb_aer = 1 244 245 ALLOCATE (aerosol_name(nb_aer)) 245 aerosol_name(1) = id_CIDUSTM 246 aerosol_name(1) = id_CIDUSTM_phy 246 247 ELSEIF (flag_aerosol .EQ. 6) THEN 247 248 nb_aer = 10 248 249 ALLOCATE (aerosol_name(nb_aer)) 249 aerosol_name(1) = id_ASSO4M 250 aerosol_name(2) = id_ASBCM 251 aerosol_name(3) = id_AIBCM 252 aerosol_name(4) = id_ASPOMM 253 aerosol_name(5) = id_AIPOMM 254 aerosol_name(6) = id_CSSSM 255 aerosol_name(7) = id_SSSSM 256 aerosol_name(8) = id_ASSSM 257 aerosol_name(9) = id_CIDUSTM 258 aerosol_name(10) = id_CSSO4M 250 aerosol_name(1) = id_ASSO4M_phy 251 aerosol_name(2) = id_ASBCM_phy 252 aerosol_name(3) = id_AIBCM_phy 253 aerosol_name(4) = id_ASPOMM_phy 254 aerosol_name(5) = id_AIPOMM_phy 255 aerosol_name(6) = id_CSSSM_phy 256 aerosol_name(7) = id_SSSSM_phy 257 aerosol_name(8) = id_ASSSM_phy 258 aerosol_name(9) = id_CIDUSTM_phy 259 aerosol_name(10) = id_CSSO4M_phy 259 260 ENDIF 260 261 … … 293 294 DO m=1,nb_aer ! tau is only computed for each mass 294 295 fac=1.0 295 IF (aerosol_name(m).EQ.id_ASBCM ) THEN296 IF (aerosol_name(m).EQ.id_ASBCM_phy) THEN 296 297 soluble=.TRUE. 297 298 spsol=1 298 ELSEIF (aerosol_name(m).EQ.id_ASPOMM ) THEN299 ELSEIF (aerosol_name(m).EQ.id_ASPOMM_phy) THEN 299 300 soluble=.TRUE. 300 301 spsol=2 301 ELSEIF (aerosol_name(m).EQ.id_ASSO4M ) THEN302 ELSEIF (aerosol_name(m).EQ.id_ASSO4M_phy) THEN 302 303 soluble=.TRUE. 303 304 spsol=3 304 305 fac=1.375 ! (NH4)2-SO4/SO4 132/96 mass conversion factor for OD 305 ELSEIF (aerosol_name(m).EQ.id_CSSO4M ) THEN306 ELSEIF (aerosol_name(m).EQ.id_CSSO4M_phy) THEN 306 307 soluble=.TRUE. 307 308 spsol=4 308 309 fac=1.375 ! (NH4)2-SO4/SO4 132/96 mass conversion factor for OD 309 ELSEIF (aerosol_name(m).EQ.id_SSSSM ) THEN310 ELSEIF (aerosol_name(m).EQ.id_SSSSM_phy) THEN 310 311 soluble=.TRUE. 311 312 spsol=5 312 ELSEIF (aerosol_name(m).EQ.id_CSSSM ) THEN313 ELSEIF (aerosol_name(m).EQ.id_CSSSM_phy) THEN 313 314 soluble=.TRUE. 314 315 spsol=6 315 ELSEIF (aerosol_name(m).EQ.id_ASSSM ) THEN316 ELSEIF (aerosol_name(m).EQ.id_ASSSM_phy) THEN 316 317 soluble=.TRUE. 317 318 spsol=7 318 ELSEIF (aerosol_name(m).EQ.id_CIDUSTM ) THEN319 ELSEIF (aerosol_name(m).EQ.id_CIDUSTM_phy) THEN 319 320 soluble=.FALSE. 320 321 spinsol=1 321 ELSEIF (aerosol_name(m).EQ.id_AIBCM ) THEN322 ELSEIF (aerosol_name(m).EQ.id_AIBCM_phy) THEN 322 323 soluble=.FALSE. 323 324 spinsol=2 324 ELSEIF (aerosol_name(m).EQ.id_AIPOMM ) THEN325 ELSEIF (aerosol_name(m).EQ.id_AIPOMM_phy) THEN 325 326 soluble=.FALSE. 326 327 spinsol=3 … … 335 336 ENDIF 336 337 338 aerindex=aerosol_name(m) 339 337 340 DO la=1,las 338 341 … … 344 347 (alpha_aers_5wv(RH_num(i,k)+1,la,spsol) - & 345 348 alpha_aers_5wv(RH_num(i,k),la,spsol)) 346 tau(i,k,la, spsol) = mass_temp(i,k,spsol)*1000.*zdp1(i,k)&347 *tau_ae5wv_int*delt*fac348 tausum(i,la, spsol)=tausum(i,la,spsol)+tau(i,k,la,spsol)349 tau(i,k,la,aerindex) = mass_temp(i,k,aerindex)*1000.*zdp1(i,k)* & 350 tau_ae5wv_int*delt*fac 351 tausum(i,la,aerindex)=tausum(i,la,aerindex)+tau(i,k,la,aerindex) 349 352 ENDDO 350 353 ENDDO 351 354 352 355 ELSE ! For insoluble aerosol 353 356 … … 355 358 DO i=1, KLON 356 359 tau_ae5wv_int = alpha_aeri_5wv(la,spinsol) 357 tau(i,k,la,naero_soluble+spinsol) = mass_temp(i,k,naero_soluble+spinsol)*1000.*zdp1(i,k)* & 358 tau_ae5wv_int*delt*fac 359 tausum(i,la,naero_soluble+spinsol)= tausum(i,la,naero_soluble+spinsol) & 360 +tau(i,k,la,naero_soluble+spinsol) 360 tau(i,k,la,aerindex) = mass_temp(i,k,aerindex)*1000.*zdp1(i,k)* & 361 tau_ae5wv_int*delt*fac 362 tausum(i,la,aerindex)= tausum(i,la,aerindex)+tau(i,k,la,aerindex) 361 363 ENDDO 362 364 ENDDO … … 405 407 ENDDO 406 408 407 od550lt1aer(:)=tausum(:,la550,id_ASSO4M )+tausum(:,la550,id_ASBCM) +tausum(:,la550,id_AIBCM)+ &408 tausum(:,la550,id_ASPOMM )+tausum(:,la550,id_AIPOMM)+tausum(:,la550,id_ASSSM)+ &409 0.03*tausum(:,la550,id_CSSSM )+0.4*tausum(:,la550,id_CIDUSTM)409 od550lt1aer(:)=tausum(:,la550,id_ASSO4M_phy)+tausum(:,la550,id_ASBCM_phy) +tausum(:,la550,id_AIBCM_phy)+ & 410 tausum(:,la550,id_ASPOMM_phy)+tausum(:,la550,id_AIPOMM_phy)+tausum(:,la550,id_ASSSM_phy)+ & 411 0.03*tausum(:,la550,id_CSSSM_phy)+0.4*tausum(:,la550,id_CIDUSTM_phy) 410 412 411 413 DEALLOCATE(aerosol_name) -
LMDZ5/trunk/libf/phylmd/rrtm/aeropt_6bands_rrtm.F90
r2058 r2146 6 6 tau_allaer, piz_allaer, & 7 7 cg_allaer, m_allaer_pi, & 8 flag_aerosol, pplay, t_seri)8 flag_aerosol, zrho ) 9 9 10 10 USE dimphy 11 11 USE aero_mod 12 12 USE phys_local_var_mod, only: absvisaer 13 USE YOMCST , only: RD , RG14 13 15 14 ! Yves Balkanski le 12 avril 2006 … … 22 21 IMPLICIT NONE 23 22 23 INCLUDE "YOMCST.h" 24 24 INCLUDE "iniprint.h" 25 25 INCLUDE "clesphys.h" … … 30 30 REAL, DIMENSION(klon,klev), INTENT(in) :: pdel 31 31 REAL, INTENT(in) :: delt 32 REAL, DIMENSION(klon,klev,naero_ spc), INTENT(in) :: m_allaer33 REAL, DIMENSION(klon,klev,naero_ spc), INTENT(in) :: m_allaer_pi32 REAL, DIMENSION(klon,klev,naero_tot), INTENT(in) :: m_allaer 33 REAL, DIMENSION(klon,klev,naero_tot), INTENT(in) :: m_allaer_pi 34 34 REAL, DIMENSION(klon,klev), INTENT(in) :: RHcl ! humidite relative ciel clair 35 35 INTEGER, INTENT(in) :: flag_aerosol 36 REAL, DIMENSION(klon,klev), INTENT(in) :: pplay 37 REAL, DIMENSION(klon,klev), INTENT(in) :: t_seri 36 REAL, DIMENSION(klon,klev), INTENT(in) :: zrho 38 37 ! 39 38 ! Output arguments: … … 41 40 ! 2= natural aerosols 42 41 ! 43 REAL, DIMENSION(klon,klev,2,nbands_ rrtm), INTENT(out) :: tau_allaer ! epaisseur optique aerosol44 REAL, DIMENSION(klon,klev,2,nbands_ rrtm), INTENT(out) :: piz_allaer ! single scattering albedo aerosol45 REAL, DIMENSION(klon,klev,2,nbands_ rrtm), INTENT(out) :: cg_allaer ! asymmetry parameter aerosol42 REAL, DIMENSION(klon,klev,2,nbands_sw_rrtm), INTENT(out) :: tau_allaer ! epaisseur optique aerosol 43 REAL, DIMENSION(klon,klev,2,nbands_sw_rrtm), INTENT(out) :: piz_allaer ! single scattering albedo aerosol 44 REAL, DIMENSION(klon,klev,2,nbands_sw_rrtm), INTENT(out) :: cg_allaer ! asymmetry parameter aerosol 46 45 47 46 ! … … 67 66 REAL :: cg_ae2b_int ! Intermediate computation of Assymetry parameter 68 67 REAL :: Fact_RH(nbre_RH) 69 REAL :: zrho70 68 REAL :: fac 71 69 REAL :: zdp1(klon,klev) … … 73 71 INTEGER :: nb_aer 74 72 75 REAL, DIMENSION(klon,klev,naero_ spc) :: mass_temp76 REAL, DIMENSION(klon,klev,naero_ spc) :: mass_temp_pi77 REAL, DIMENSION(klon,klev,naero_tot,nbands_ rrtm) :: tau_ae78 REAL, DIMENSION(klon,klev,naero_tot,nbands_ rrtm) :: tau_ae_pi79 REAL, DIMENSION(klon,klev,naero_tot,nbands_ rrtm) :: piz_ae80 REAL, DIMENSION(klon,klev,naero_tot,nbands_ rrtm) :: cg_ae73 REAL, DIMENSION(klon,klev,naero_tot) :: mass_temp 74 REAL, DIMENSION(klon,klev,naero_tot) :: mass_temp_pi 75 REAL, DIMENSION(klon,klev,naero_tot,nbands_sw_rrtm) :: tau_ae 76 REAL, DIMENSION(klon,klev,naero_tot,nbands_sw_rrtm) :: tau_ae_pi 77 REAL, DIMENSION(klon,klev,naero_tot,nbands_sw_rrtm) :: piz_ae 78 REAL, DIMENSION(klon,klev,naero_tot,nbands_sw_rrtm) :: cg_ae 81 79 82 80 … … 84 82 ! Proprietes optiques 85 83 ! 86 REAL:: alpha_aers_6bands(nbre_RH,nbands_ rrtm,naero_soluble) !--unit m2/g SO487 REAL:: alpha_aeri_6bands(nbands_ rrtm,naero_insoluble)88 REAL:: cg_aers_6bands(nbre_RH,nbands_ rrtm,naero_soluble) !--unit89 REAL:: cg_aeri_6bands(nbands_ rrtm,naero_insoluble)90 REAL:: piz_aers_6bands(nbre_RH,nbands_ rrtm,naero_soluble) !-- unit91 REAL:: piz_aeri_6bands(nbands_ rrtm,naero_insoluble) !-- unit84 REAL:: alpha_aers_6bands(nbre_RH,nbands_sw_rrtm,naero_soluble) !--unit m2/g SO4 85 REAL:: alpha_aeri_6bands(nbands_sw_rrtm,naero_insoluble) 86 REAL:: cg_aers_6bands(nbre_RH,nbands_sw_rrtm,naero_soluble) !--unit 87 REAL:: cg_aeri_6bands(nbands_sw_rrtm,naero_insoluble) 88 REAL:: piz_aers_6bands(nbre_RH,nbands_sw_rrtm,naero_soluble) !-- unit 89 REAL:: piz_aeri_6bands(nbands_sw_rrtm,naero_insoluble) !-- unit 92 90 93 91 INTEGER :: id … … 280 278 spsol = 0 281 279 spinsol = 0 282 if(NSW.NE.nbands_rrtm) then280 IF (NSW.NE.nbands_sw_rrtm) THEN 283 281 print *,'Erreur NSW doit etre egal a 6 pour cette routine' 284 282 stop 285 endif283 ENDIF 286 284 287 285 DO k=1, klev 288 286 DO i=1, klon 289 zrho=pplay(i,k)/t_seri(i,k)/RD ! kg/m3 290 !CDIR UNROLL=naero_spc 291 mass_temp(i,k,:) = m_allaer(i,k,:) / zrho / 1.e+9 292 !CDIR UNROLL=naero_spc 293 mass_temp_pi(i,k,:) = m_allaer_pi(i,k,:) / zrho / 1.e+9 287 !CDIR UNROLL=naero_tot 288 mass_temp(i,k,:) = m_allaer(i,k,:) / zrho(i,k) / 1.e+9 !--kg/kg 289 !CDIR UNROLL=naero_tot 290 mass_temp_pi(i,k,:) = m_allaer_pi(i,k,:) / zrho(i,k) / 1.e+9 294 291 zdp1(i,k)=pdel(i,k)/(RG*delt) ! air mass auxiliary variable --> zdp1 [kg/(m^2 *s)] 295 292 ENDDO … … 299 296 nb_aer = 2 300 297 ALLOCATE (aerosol_name(nb_aer)) 301 aerosol_name(1) = id_ASSO4M 302 aerosol_name(2) = id_CSSO4M 298 aerosol_name(1) = id_ASSO4M_phy 299 aerosol_name(2) = id_CSSO4M_phy 303 300 ELSEIF (flag_aerosol .EQ. 2) THEN 304 301 nb_aer = 2 305 302 ALLOCATE (aerosol_name(nb_aer)) 306 aerosol_name(1) = id_ASBCM 307 aerosol_name(2) = id_AIBCM 303 aerosol_name(1) = id_ASBCM_phy 304 aerosol_name(2) = id_AIBCM_phy 308 305 ELSEIF (flag_aerosol .EQ. 3) THEN 309 306 nb_aer = 2 310 307 ALLOCATE (aerosol_name(nb_aer)) 311 aerosol_name(1) = id_ASPOMM 312 aerosol_name(2) = id_AIPOMM 308 aerosol_name(1) = id_ASPOMM_phy 309 aerosol_name(2) = id_AIPOMM_phy 313 310 ELSEIF (flag_aerosol .EQ. 4) THEN 314 311 nb_aer = 3 315 312 ALLOCATE (aerosol_name(nb_aer)) 316 aerosol_name(1) = id_CSSSM 317 aerosol_name(2) = id_SSSSM 318 aerosol_name(3) = id_ASSSM 313 aerosol_name(1) = id_CSSSM_phy 314 aerosol_name(2) = id_SSSSM_phy 315 aerosol_name(3) = id_ASSSM_phy 319 316 ELSEIF (flag_aerosol .EQ. 5) THEN 320 317 nb_aer = 1 321 318 ALLOCATE (aerosol_name(nb_aer)) 322 aerosol_name(1) = id_CIDUSTM 319 aerosol_name(1) = id_CIDUSTM_phy 323 320 ELSEIF (flag_aerosol .EQ. 6) THEN 324 321 nb_aer = 10 325 322 ALLOCATE (aerosol_name(nb_aer)) 326 aerosol_name(1) = id_ASSO4M 327 aerosol_name(2) = id_ASBCM 328 aerosol_name(3) = id_AIBCM 329 aerosol_name(4) = id_ASPOMM 330 aerosol_name(5) = id_AIPOMM 331 aerosol_name(6) = id_CSSSM 332 aerosol_name(7) = id_SSSSM 333 aerosol_name(8) = id_ASSSM 334 aerosol_name(9) = id_CIDUSTM 335 aerosol_name(10)= id_CSSO4M 323 aerosol_name(1) = id_ASSO4M_phy 324 aerosol_name(2) = id_ASBCM_phy 325 aerosol_name(3) = id_AIBCM_phy 326 aerosol_name(4) = id_ASPOMM_phy 327 aerosol_name(5) = id_AIPOMM_phy 328 aerosol_name(6) = id_CSSSM_phy 329 aerosol_name(7) = id_SSSSM_phy 330 aerosol_name(8) = id_ASSSM_phy 331 aerosol_name(9) = id_CIDUSTM_phy 332 aerosol_name(10)= id_CSSO4M_phy 336 333 ENDIF 337 334 … … 354 351 DO i=1, KLON 355 352 rh(i,k)=MIN(RHcl(i,k)*100.,RH_MAX) 356 RH_num(i,k) = INT( 353 RH_num(i,k) = INT(rh(i,k)/10. + 1.) 357 354 IF (rh(i,k).GT.85.) RH_num(i,k)=10 358 355 IF (rh(i,k).GT.90.) RH_num(i,k)=11 … … 365 362 DO m=1,nb_aer ! tau is only computed for each mass 366 363 fac=1.0 367 IF (aerosol_name(m).EQ.id_ASBCM ) THEN364 IF (aerosol_name(m).EQ.id_ASBCM_phy) THEN 368 365 soluble=.TRUE. 369 366 spsol=1 370 ELSEIF (aerosol_name(m).EQ.id_ASPOMM ) THEN367 ELSEIF (aerosol_name(m).EQ.id_ASPOMM_phy) THEN 371 368 soluble=.TRUE. 372 369 spsol=2 373 ELSEIF (aerosol_name(m).EQ.id_ASSO4M ) THEN370 ELSEIF (aerosol_name(m).EQ.id_ASSO4M_phy) THEN 374 371 soluble=.TRUE. 375 372 spsol=3 376 373 fac=1.375 ! (NH4)2-SO4/SO4 132/96 mass conversion factor for OD 377 ELSEIF (aerosol_name(m).EQ.id_CSSO4M ) THEN374 ELSEIF (aerosol_name(m).EQ.id_CSSO4M_phy) THEN 378 375 soluble=.TRUE. 379 376 spsol=4 380 377 fac=1.375 ! (NH4)2-SO4/SO4 132/96 mass conversion factor for OD 381 ELSEIF (aerosol_name(m).EQ.id_SSSSM ) THEN378 ELSEIF (aerosol_name(m).EQ.id_SSSSM_phy) THEN 382 379 soluble=.TRUE. 383 380 spsol=5 384 ELSEIF (aerosol_name(m).EQ.id_CSSSM ) THEN381 ELSEIF (aerosol_name(m).EQ.id_CSSSM_phy) THEN 385 382 soluble=.TRUE. 386 383 spsol=6 387 ELSEIF (aerosol_name(m).EQ.id_ASSSM ) THEN384 ELSEIF (aerosol_name(m).EQ.id_ASSSM_phy) THEN 388 385 soluble=.TRUE. 389 386 spsol=7 390 ELSEIF (aerosol_name(m).EQ.id_CIDUSTM ) THEN387 ELSEIF (aerosol_name(m).EQ.id_CIDUSTM_phy) THEN 391 388 soluble=.FALSE. 392 389 spinsol=1 393 ELSEIF (aerosol_name(m).EQ.id_AIBCM ) THEN390 ELSEIF (aerosol_name(m).EQ.id_AIBCM_phy) THEN 394 391 soluble=.FALSE. 395 392 spinsol=2 396 ELSEIF (aerosol_name(m).EQ.id_AIPOMM ) THEN393 ELSEIF (aerosol_name(m).EQ.id_AIPOMM_phy) THEN 397 394 soluble=.FALSE. 398 395 spinsol=3 … … 471 468 DO i=1, KLON 472 469 !--anthropogenic aerosol 473 tau_allaer(i,k,2,inu)=tau_ae(i,k,id_ASSO4M ,inu)+tau_ae(i,k,id_CSSO4M,inu)+ &474 tau_ae(i,k,id_ASBCM ,inu)+tau_ae(i,k,id_AIBCM,inu)+ &475 tau_ae(i,k,id_ASPOMM ,inu)+tau_ae(i,k,id_AIPOMM,inu)+ &476 tau_ae(i,k,id_ASSSM ,inu)+tau_ae(i,k,id_CSSSM,inu)+ &477 tau_ae(i,k,id_SSSSM ,inu)+ tau_ae(i,k,id_CIDUSTM,inu)470 tau_allaer(i,k,2,inu)=tau_ae(i,k,id_ASSO4M_phy,inu)+tau_ae(i,k,id_CSSO4M_phy,inu)+ & 471 tau_ae(i,k,id_ASBCM_phy,inu)+tau_ae(i,k,id_AIBCM_phy,inu)+ & 472 tau_ae(i,k,id_ASPOMM_phy,inu)+tau_ae(i,k,id_AIPOMM_phy,inu)+ & 473 tau_ae(i,k,id_ASSSM_phy,inu)+tau_ae(i,k,id_CSSSM_phy,inu)+ & 474 tau_ae(i,k,id_SSSSM_phy,inu)+ tau_ae(i,k,id_CIDUSTM_phy,inu) 478 475 tau_allaer(i,k,2,inu)=MAX(tau_allaer(i,k,2,inu),1e-5) 479 476 480 piz_allaer(i,k,2,inu)=(tau_ae(i,k,id_ASSO4M ,inu)*piz_ae(i,k,id_ASSO4M,inu)+ &481 tau_ae(i,k,id_CSSO4M ,inu)*piz_ae(i,k,id_CSSO4M,inu)+ &482 tau_ae(i,k,id_ASBCM ,inu)*piz_ae(i,k,id_ASBCM,inu)+ &483 tau_ae(i,k,id_AIBCM ,inu)*piz_ae(i,k,id_AIBCM,inu)+ &484 tau_ae(i,k,id_ASPOMM ,inu)*piz_ae(i,k,id_ASPOMM,inu)+ &485 tau_ae(i,k,id_AIPOMM ,inu)*piz_ae(i,k,id_AIPOMM,inu)+ &486 tau_ae(i,k,id_ASSSM ,inu)*piz_ae(i,k,id_ASSSM,inu)+ &487 tau_ae(i,k,id_CSSSM ,inu)*piz_ae(i,k,id_CSSSM,inu)+ &488 tau_ae(i,k,id_SSSSM ,inu)*piz_ae(i,k,id_SSSSM,inu)+ &489 tau_ae(i,k,id_CIDUSTM ,inu)*piz_ae(i,k,id_CIDUSTM,inu)) &477 piz_allaer(i,k,2,inu)=(tau_ae(i,k,id_ASSO4M_phy,inu)*piz_ae(i,k,id_ASSO4M_phy,inu)+ & 478 tau_ae(i,k,id_CSSO4M_phy,inu)*piz_ae(i,k,id_CSSO4M_phy,inu)+ & 479 tau_ae(i,k,id_ASBCM_phy,inu)*piz_ae(i,k,id_ASBCM_phy,inu)+ & 480 tau_ae(i,k,id_AIBCM_phy,inu)*piz_ae(i,k,id_AIBCM_phy,inu)+ & 481 tau_ae(i,k,id_ASPOMM_phy,inu)*piz_ae(i,k,id_ASPOMM_phy,inu)+ & 482 tau_ae(i,k,id_AIPOMM_phy,inu)*piz_ae(i,k,id_AIPOMM_phy,inu)+ & 483 tau_ae(i,k,id_ASSSM_phy,inu)*piz_ae(i,k,id_ASSSM_phy,inu)+ & 484 tau_ae(i,k,id_CSSSM_phy,inu)*piz_ae(i,k,id_CSSSM_phy,inu)+ & 485 tau_ae(i,k,id_SSSSM_phy,inu)*piz_ae(i,k,id_SSSSM_phy,inu)+ & 486 tau_ae(i,k,id_CIDUSTM_phy,inu)*piz_ae(i,k,id_CIDUSTM_phy,inu)) & 490 487 /tau_allaer(i,k,2,inu) 491 488 piz_allaer(i,k,2,inu)=MAX(piz_allaer(i,k,2,inu),0.1) 492 489 493 cg_allaer(i,k,2,inu)=(tau_ae(i,k,id_ASSO4M ,inu)*piz_ae(i,k,id_ASSO4M,inu)*cg_ae(i,k,id_ASSO4M,inu)+ &494 tau_ae(i,k,id_CSSO4M ,inu)*piz_ae(i,k,id_CSSO4M,inu)*cg_ae(i,k,id_CSSO4M,inu)+ &495 tau_ae(i,k,id_ASBCM ,inu)*piz_ae(i,k,id_ASBCM,inu)*cg_ae(i,k,id_ASBCM,inu)+ &496 tau_ae(i,k,id_AIBCM ,inu)*piz_ae(i,k,id_AIBCM,inu)*cg_ae(i,k,id_AIBCM,inu)+ &497 tau_ae(i,k,id_ASPOMM ,inu)*piz_ae(i,k,id_ASPOMM,inu)*cg_ae(i,k,id_ASPOMM,inu)+ &498 tau_ae(i,k,id_AIPOMM ,inu)*piz_ae(i,k,id_AIPOMM,inu)*cg_ae(i,k,id_AIPOMM,inu)+ &499 tau_ae(i,k,id_ASSSM ,inu)*piz_ae(i,k,id_ASSSM,inu)*cg_ae(i,k,id_ASSSM,inu)+ &500 tau_ae(i,k,id_CSSSM ,inu)*piz_ae(i,k,id_CSSSM,inu)*cg_ae(i,k,id_CSSSM,inu)+ &501 tau_ae(i,k,id_SSSSM ,inu)*piz_ae(i,k,id_SSSSM,inu)*cg_ae(i,k,id_SSSSM,inu)+ &502 tau_ae(i,k,id_CIDUSTM ,inu)*piz_ae(i,k,id_CIDUSTM,inu)*cg_ae(i,k,id_CIDUSTM,inu))/ &490 cg_allaer(i,k,2,inu)=(tau_ae(i,k,id_ASSO4M_phy,inu)*piz_ae(i,k,id_ASSO4M_phy,inu)*cg_ae(i,k,id_ASSO4M_phy,inu)+ & 491 tau_ae(i,k,id_CSSO4M_phy,inu)*piz_ae(i,k,id_CSSO4M_phy,inu)*cg_ae(i,k,id_CSSO4M_phy,inu)+ & 492 tau_ae(i,k,id_ASBCM_phy,inu)*piz_ae(i,k,id_ASBCM_phy,inu)*cg_ae(i,k,id_ASBCM_phy,inu)+ & 493 tau_ae(i,k,id_AIBCM_phy,inu)*piz_ae(i,k,id_AIBCM_phy,inu)*cg_ae(i,k,id_AIBCM_phy,inu)+ & 494 tau_ae(i,k,id_ASPOMM_phy,inu)*piz_ae(i,k,id_ASPOMM_phy,inu)*cg_ae(i,k,id_ASPOMM_phy,inu)+ & 495 tau_ae(i,k,id_AIPOMM_phy,inu)*piz_ae(i,k,id_AIPOMM_phy,inu)*cg_ae(i,k,id_AIPOMM_phy,inu)+ & 496 tau_ae(i,k,id_ASSSM_phy,inu)*piz_ae(i,k,id_ASSSM_phy,inu)*cg_ae(i,k,id_ASSSM_phy,inu)+ & 497 tau_ae(i,k,id_CSSSM_phy,inu)*piz_ae(i,k,id_CSSSM_phy,inu)*cg_ae(i,k,id_CSSSM_phy,inu)+ & 498 tau_ae(i,k,id_SSSSM_phy,inu)*piz_ae(i,k,id_SSSSM_phy,inu)*cg_ae(i,k,id_SSSSM_phy,inu)+ & 499 tau_ae(i,k,id_CIDUSTM_phy,inu)*piz_ae(i,k,id_CIDUSTM_phy,inu)*cg_ae(i,k,id_CIDUSTM_phy,inu))/ & 503 500 (tau_allaer(i,k,2,inu)*piz_allaer(i,k,2,inu)) 504 501 505 502 !--natural aerosol 506 tau_allaer(i,k,1,inu)=tau_ae_pi(i,k,id_ASSO4M ,inu)+tau_ae_pi(i,k,id_CSSO4M,inu)+ &507 tau_ae_pi(i,k,id_ASBCM ,inu)+tau_ae_pi(i,k,id_AIBCM,inu)+ &508 tau_ae_pi(i,k,id_ASPOMM ,inu)+tau_ae_pi(i,k,id_AIPOMM,inu)+ &509 tau_ae_pi(i,k,id_ASSSM ,inu)+tau_ae_pi(i,k,id_CSSSM,inu)+ &510 tau_ae_pi(i,k,id_SSSSM ,inu)+ tau_ae_pi(i,k,id_CIDUSTM,inu)503 tau_allaer(i,k,1,inu)=tau_ae_pi(i,k,id_ASSO4M_phy,inu)+tau_ae_pi(i,k,id_CSSO4M_phy,inu)+ & 504 tau_ae_pi(i,k,id_ASBCM_phy,inu)+tau_ae_pi(i,k,id_AIBCM_phy,inu)+ & 505 tau_ae_pi(i,k,id_ASPOMM_phy,inu)+tau_ae_pi(i,k,id_AIPOMM_phy,inu)+ & 506 tau_ae_pi(i,k,id_ASSSM_phy,inu)+tau_ae_pi(i,k,id_CSSSM_phy,inu)+ & 507 tau_ae_pi(i,k,id_SSSSM_phy,inu)+ tau_ae_pi(i,k,id_CIDUSTM_phy,inu) 511 508 tau_allaer(i,k,1,inu)=MAX(tau_allaer(i,k,1,inu),1e-5) 512 509 513 piz_allaer(i,k,1,inu)=(tau_ae_pi(i,k,id_ASSO4M ,inu)*piz_ae(i,k,id_ASSO4M,inu)+ &514 tau_ae_pi(i,k,id_CSSO4M ,inu)*piz_ae(i,k,id_CSSO4M,inu)+ &515 tau_ae_pi(i,k,id_ASBCM ,inu)*piz_ae(i,k,id_ASBCM,inu)+ &516 tau_ae_pi(i,k,id_AIBCM ,inu)*piz_ae(i,k,id_AIBCM,inu)+ &517 tau_ae_pi(i,k,id_ASPOMM ,inu)*piz_ae(i,k,id_ASPOMM,inu)+ &518 tau_ae_pi(i,k,id_AIPOMM ,inu)*piz_ae(i,k,id_AIPOMM,inu)+ &519 tau_ae_pi(i,k,id_ASSSM ,inu)*piz_ae(i,k,id_ASSSM,inu)+ &520 tau_ae_pi(i,k,id_CSSSM ,inu)*piz_ae(i,k,id_CSSSM,inu)+ &521 tau_ae_pi(i,k,id_SSSSM ,inu)*piz_ae(i,k,id_SSSSM,inu)+ &522 tau_ae_pi(i,k,id_CIDUSTM ,inu)*piz_ae(i,k,id_CIDUSTM,inu)) &510 piz_allaer(i,k,1,inu)=(tau_ae_pi(i,k,id_ASSO4M_phy,inu)*piz_ae(i,k,id_ASSO4M_phy,inu)+ & 511 tau_ae_pi(i,k,id_CSSO4M_phy,inu)*piz_ae(i,k,id_CSSO4M_phy,inu)+ & 512 tau_ae_pi(i,k,id_ASBCM_phy,inu)*piz_ae(i,k,id_ASBCM_phy,inu)+ & 513 tau_ae_pi(i,k,id_AIBCM_phy,inu)*piz_ae(i,k,id_AIBCM_phy,inu)+ & 514 tau_ae_pi(i,k,id_ASPOMM_phy,inu)*piz_ae(i,k,id_ASPOMM_phy,inu)+ & 515 tau_ae_pi(i,k,id_AIPOMM_phy,inu)*piz_ae(i,k,id_AIPOMM_phy,inu)+ & 516 tau_ae_pi(i,k,id_ASSSM_phy,inu)*piz_ae(i,k,id_ASSSM_phy,inu)+ & 517 tau_ae_pi(i,k,id_CSSSM_phy,inu)*piz_ae(i,k,id_CSSSM_phy,inu)+ & 518 tau_ae_pi(i,k,id_SSSSM_phy,inu)*piz_ae(i,k,id_SSSSM_phy,inu)+ & 519 tau_ae_pi(i,k,id_CIDUSTM_phy,inu)*piz_ae(i,k,id_CIDUSTM_phy,inu)) & 523 520 /tau_allaer(i,k,1,inu) 524 521 piz_allaer(i,k,1,inu)=MAX(piz_allaer(i,k,1,inu),0.1) 525 522 526 cg_allaer(i,k,1,inu)=(tau_ae_pi(i,k,id_ASSO4M ,inu)*piz_ae(i,k,id_ASSO4M,inu)*cg_ae(i,k,id_ASSO4M,inu)+ &527 tau_ae_pi(i,k,id_CSSO4M ,inu)*piz_ae(i,k,id_CSSO4M,inu)*cg_ae(i,k,id_CSSO4M,inu)+ &528 tau_ae_pi(i,k,id_ASBCM ,inu)*piz_ae(i,k,id_ASBCM,inu)*cg_ae(i,k,id_ASBCM,inu)+ &529 tau_ae_pi(i,k,id_AIBCM ,inu)*piz_ae(i,k,id_AIBCM,inu)*cg_ae(i,k,id_AIBCM,inu)+ &530 tau_ae_pi(i,k,id_ASPOMM ,inu)*piz_ae(i,k,id_ASPOMM,inu)*cg_ae(i,k,id_ASPOMM,inu)+ &531 tau_ae_pi(i,k,id_AIPOMM ,inu)*piz_ae(i,k,id_AIPOMM,inu)*cg_ae(i,k,id_AIPOMM,inu)+ &532 tau_ae_pi(i,k,id_ASSSM ,inu)*piz_ae(i,k,id_ASSSM,inu)*cg_ae(i,k,id_ASSSM,inu)+ &533 tau_ae_pi(i,k,id_CSSSM ,inu)*piz_ae(i,k,id_CSSSM,inu)*cg_ae(i,k,id_CSSSM,inu)+ &534 tau_ae_pi(i,k,id_SSSSM ,inu)*piz_ae(i,k,id_SSSSM,inu)*cg_ae(i,k,id_SSSSM,inu)+ &535 tau_ae_pi(i,k,id_CIDUSTM ,inu)*piz_ae(i,k,id_CIDUSTM,inu)*cg_ae(i,k,id_CIDUSTM,inu))/ &523 cg_allaer(i,k,1,inu)=(tau_ae_pi(i,k,id_ASSO4M_phy,inu)*piz_ae(i,k,id_ASSO4M_phy,inu)*cg_ae(i,k,id_ASSO4M_phy,inu)+ & 524 tau_ae_pi(i,k,id_CSSO4M_phy,inu)*piz_ae(i,k,id_CSSO4M_phy,inu)*cg_ae(i,k,id_CSSO4M_phy,inu)+ & 525 tau_ae_pi(i,k,id_ASBCM_phy,inu)*piz_ae(i,k,id_ASBCM_phy,inu)*cg_ae(i,k,id_ASBCM_phy,inu)+ & 526 tau_ae_pi(i,k,id_AIBCM_phy,inu)*piz_ae(i,k,id_AIBCM_phy,inu)*cg_ae(i,k,id_AIBCM_phy,inu)+ & 527 tau_ae_pi(i,k,id_ASPOMM_phy,inu)*piz_ae(i,k,id_ASPOMM_phy,inu)*cg_ae(i,k,id_ASPOMM_phy,inu)+ & 528 tau_ae_pi(i,k,id_AIPOMM_phy,inu)*piz_ae(i,k,id_AIPOMM_phy,inu)*cg_ae(i,k,id_AIPOMM_phy,inu)+ & 529 tau_ae_pi(i,k,id_ASSSM_phy,inu)*piz_ae(i,k,id_ASSSM_phy,inu)*cg_ae(i,k,id_ASSSM_phy,inu)+ & 530 tau_ae_pi(i,k,id_CSSSM_phy,inu)*piz_ae(i,k,id_CSSSM_phy,inu)*cg_ae(i,k,id_CSSSM_phy,inu)+ & 531 tau_ae_pi(i,k,id_SSSSM_phy,inu)*piz_ae(i,k,id_SSSSM_phy,inu)*cg_ae(i,k,id_SSSSM_phy,inu)+ & 532 tau_ae_pi(i,k,id_CIDUSTM_phy,inu)*piz_ae(i,k,id_CIDUSTM_phy,inu)*cg_ae(i,k,id_CIDUSTM_phy,inu))/ & 536 533 (tau_allaer(i,k,1,inu)*piz_allaer(i,k,1,inu)) 537 534 -
LMDZ5/trunk/libf/phylmd/rrtm/radlsw.F90
r2043 r2146 11 11 & PFRSOD,PSUDU , PUVDF, PPARF, PPARCF, PTINCF,& 12 12 & PSFSWDIR, PSFSWDIF,PFSDNN,PFSDNV ,& 13 & LRDUST,PPIZA_DST,PCGA_DST,PTAUREL_DST,PFLUX,PFLUC,& 14 & PFSDN ,PFSUP , PFSCDN , PFSCUP) 13 & LRDUST,PPIZA_DST,PCGA_DST,PTAUREL_DST,& 14 & PTAU_LW,& 15 & PFLUX,PFLUC,PFSDN ,PFSUP , PFSCDN , PFSCUP) 15 16 16 17 use write_field_phy … … 57 58 ! PCGA_DST : (KPROMA,KLEV,NSW); Assymetry factor for dust 58 59 ! PTAUREL_DST: (KPROMA,KLEV,NSW); Optical depth of dust relative to at 550nm 60 ! PTAU_LW (KPROMA,KLEV,NLW); LW Optical depth of aerosols 59 61 ! PREF_LIQ (KPROMA,KLEV) ; Liquid droplet radius (um) 60 62 ! PREF_ICE (KPROMA,KLEV) ; Ice crystal radius (um) … … 127 129 !USE YOERAD , ONLY : NSW ,LRRTM ,LCCNL ,LCCNO, LDIFFC, & 128 130 ! NSW mis dans .def MPL 20140211 129 USE YOERAD , ONLY : LRRTM ,LCCNL ,LCCNO, LDIFFC, &131 USE YOERAD , ONLY : NLW, LRRTM ,LCCNL ,LCCNO, LDIFFC, & 130 132 & NRADIP , NRADLP , NICEOPT, NLIQOPT, NINHOM ,NLAYINH ,& 131 133 & RCCNLND, RCCNSEA, RLWINHF, RSWINHF, RRe2De ,& … … 154 156 155 157 include "clesphys.h" 158 !!include "clesrrtm.h" 156 159 include "YOETHF.h" 157 160 INTEGER(KIND=JPIM),INTENT(IN) :: KLON … … 192 195 REAL(KIND=JPRB) ,INTENT(IN) :: PCGA_DST(KLON,KLEV,NSW) 193 196 REAL(KIND=JPRB) ,INTENT(IN) :: PTAUREL_DST(KLON,KLEV,NSW) 197 !--C.Kleinschmitt 198 REAL(KIND=JPRB) ,INTENT(IN) :: PTAU_LW(KLON,KLEV,NLW) 199 !--end 194 200 REAL(KIND=JPRB) ,INTENT(IN) :: PREF_LIQ(KLON,KLEV) 195 201 REAL(KIND=JPRB) ,INTENT(IN) :: PREF_ICE(KLON,KLEV) … … 1101 1107 & PTS , PTH , PT,& 1102 1108 & ZEMIS , ZEMIW,& 1103 & PQ , PCCO2 , ZOZN , ZCLDSW , ZTAUCLD,& 1104 & ZEMIT , PFLUX , PFLUC , ZTCLEAR & 1105 & ) 1109 & PQ , PCCO2 , ZOZN ,& 1110 & ZCLDSW , ZTAUCLD,& 1111 & PTAU_LW,& 1112 & ZEMIT , PFLUX , PFLUC , ZTCLEAR ) 1106 1113 print *,'RADLSW: apres CALL RRTM_RRTM_140GP' 1107 1114 -
LMDZ5/trunk/libf/phylmd/rrtm/radlsw.intfb.h
r1990 r2146 1 1 INTERFACE 2 SUBROUTINE RADLSW &3 & ( KIDIA, KFDIA , KLON , KLEV , KMODE, KAER,&2 SUBROUTINE RADLSW & 3 & ( KIDIA, KFDIA , KLON , KLEV , KMODE, KAER,& 4 4 & PRII0,& 5 5 & PAER , PALBD , PALBP, PAPH , PAP,& 6 6 & PCCNL, PCCNO,& 7 & PCCO2, PCLFR , PDP , PEMIS, PEMIW , PLSM , PMU0, POZON,&8 & PQ , PQIWP , PQLWP, PQS, PQRAIN, PRAINT,&9 & PTH , PT , PTS, PNBAS, PNTOP,&10 & PREF_LIQ 11 & PEMIT, PFCT , PFLT , PFCS , PFLS,&7 & PCCO2, PCLFR , PDP , PEMIS, PEMIW , PLSM , PMU0, POZON,& 8 & PQ , PQIWP , PQLWP, PQS , PQRAIN, PRAINT,& 9 & PTH , PT , PTS , PNBAS, PNTOP,& 10 & PREF_LIQ, PREF_ICE,& 11 & PEMIT, PFCT , PFLT , PFCS , PFLS,& 12 12 & PFRSOD,PSUDU , PUVDF, PPARF, PPARCF, PTINCF,& 13 & PSFSWDIR, PSFSWDIF,PFSDNN,PFSDNV,& 14 & LRDUST,PPIZA_DST,PCGA_DST,PTAUREL_DST,PFLUX,PFLUC,& 15 & PFSDN ,PFSUP , PFSCDN , PFSCUP) 13 & PSFSWDIR, PSFSWDIF,PFSDNN,PFSDNV ,& 14 & LRDUST,PPIZA_DST,PCGA_DST,PTAUREL_DST,& 15 & PTAU_LW,& 16 & PFLUX,PFLUC,PFSDN ,PFSUP , PFSCDN , PFSCUP) 17 16 18 USE PARKIND1 ,ONLY : JPIM ,JPRB 17 USE YOERAD , ONLY : LRRTM ,LCCNL ,LCCNO, LDIFFC,&19 USE YOERAD , ONLY : NLW, LRRTM ,LCCNL ,LCCNO, LDIFFC,& 18 20 & NRADIP , NRADLP , NICEOPT, NLIQOPT, NINHOM ,NLAYINH ,& 19 21 & RCCNLND, RCCNSEA, RLWINHF, RSWINHF, RRe2De ,& … … 59 61 REAL(KIND=JPRB) ,INTENT(IN) :: PCGA_DST(KLON,KLEV,NSW) 60 62 REAL(KIND=JPRB) ,INTENT(IN) :: PTAUREL_DST(KLON,KLEV,NSW) 63 !--C.Kleinschmitt 64 REAL(KIND=JPRB) ,INTENT(IN) :: PTAU_LW(KLON,KLEV,NLW) 65 !--end 61 66 REAL(KIND=JPRB) ,INTENT(OUT) :: PEMIT(KLON) 62 67 REAL(KIND=JPRB) ,INTENT(OUT) :: PFCT(KLON,KLEV+1) -
LMDZ5/trunk/libf/phylmd/rrtm/readaerosol_optic_rrtm.F90
r2005 r2146 1 1 ! $Id$ 2 2 ! 3 SUBROUTINE readaerosol_optic_rrtm(debut, new_aod, flag_aerosol, itap, rjourvrai, & 3 SUBROUTINE readaerosol_optic_rrtm(debut, aerosol_couple, & 4 new_aod, flag_aerosol, itap, rjourvrai, & 4 5 pdtphys, pplay, paprs, t_seri, rhcl, presnivs, & 5 mass_solu_aero, mass_solu_aero_pi, &6 tr_seri, mass_solu_aero, mass_solu_aero_pi, & 6 7 tau_aero, piz_aero, cg_aero, & 7 8 tausum_aero, tau3d_aero ) 8 9 9 ! This routine will :10 ! 1) recevie the aerosols(already read and interpolated) corresponding to flag_aerosol11 ! 2) calculate the optical properties for the aerosols12 !13 10 ! This routine will : 11 ! 1) recevie the aerosols(already read and interpolated) corresponding to flag_aerosol 12 ! 2) calculate the optical properties for the aerosols 13 ! 14 14 15 USE dimphy 15 16 USE aero_mod 16 USE phys_local_var_mod, only: sconcso4,sconcoa,sconcbc,sconcss,sconcdust, & 17 concso4,concoa,concbc,concss,concdust,loadso4,loadoa,loadbc,loadss,loaddust, & 18 load_tmp1,load_tmp2,load_tmp3,load_tmp4,load_tmp5,load_tmp6,load_tmp7 17 USE phys_local_var_mod, only: sconcso4,sconcno3,sconcoa,sconcbc,sconcss,sconcdust, & 18 concso4,concno3,concoa,concbc,concss,concdust,loadso4,loadoa,loadbc,loadss,loaddust, & 19 load_tmp1,load_tmp2,load_tmp3,load_tmp4,load_tmp5,load_tmp6,load_tmp7 20 21 USE infotrac 22 19 23 IMPLICIT NONE 20 24 include "clesphys.h" 21 22 ! Input arguments 23 !**************************************************************************************** 25 include "YOMCST.h" 26 27 28 ! Input arguments 29 !**************************************************************************************** 24 30 LOGICAL, INTENT(IN) :: debut 31 LOGICAL, INTENT(IN) :: aerosol_couple 25 32 LOGICAL, INTENT(IN) :: new_aod 26 33 INTEGER, INTENT(IN) :: flag_aerosol … … 33 40 REAL, DIMENSION(klon,klev), INTENT(IN) :: rhcl ! humidite relative ciel clair 34 41 REAL, DIMENSION(klev), INTENT(IN) :: presnivs 35 36 ! Output arguments 37 !**************************************************************************************** 42 REAL, DIMENSION(klon,klev,nbtr), INTENT(IN) :: tr_seri ! concentration tracer 43 44 ! Output arguments 45 !**************************************************************************************** 38 46 REAL, DIMENSION(klon,klev), INTENT(OUT) :: mass_solu_aero ! Total mass for all soluble aerosols 39 47 REAL, DIMENSION(klon,klev), INTENT(OUT) :: mass_solu_aero_pi ! -"- preindustrial values … … 41 49 REAL, DIMENSION(klon,klev,2,NSW), INTENT(OUT) :: piz_aero ! Single scattering albedo aerosol 42 50 REAL, DIMENSION(klon,klev,2,NSW), INTENT(OUT) :: cg_aero ! asymmetry parameter aerosol 43 ! REAL, DIMENSION(klon,nwave,naero_spc), INTENT(OUT) :: tausum_aero44 ! REAL, DIMENSION(klon,klev,nwave,naero_spc), INTENT(OUT) :: tau3d_aero45 !--correction minibug OB46 51 REAL, DIMENSION(klon,nwave,naero_tot), INTENT(OUT) :: tausum_aero 47 52 REAL, DIMENSION(klon,klev,nwave,naero_tot), INTENT(OUT) :: tau3d_aero 48 53 49 ! Local variables 50 !**************************************************************************************** 51 REAL, DIMENSION(klon) :: aerindex ! POLDER aerosol index 52 REAL, DIMENSION(klon,klev) :: sulfate ! SO4 aerosol concentration [ug/m3] 53 REAL, DIMENSION(klon,klev) :: bcsol ! BC soluble concentration [ug/m3] 54 REAL, DIMENSION(klon,klev) :: bcins ! BC insoluble concentration [ug/m3] 55 REAL, DIMENSION(klon,klev) :: pomsol ! POM soluble concentration [ug/m3] 56 REAL, DIMENSION(klon,klev) :: pomins ! POM insoluble concentration [ug/m3] 57 REAL, DIMENSION(klon,klev) :: cidust ! DUST aerosol concentration [ug/m3] 58 REAL, DIMENSION(klon,klev) :: sscoarse ! SS Coarse concentration [ug/m3] 59 REAL, DIMENSION(klon,klev) :: sssupco ! SS Super Coarse concentration [ug/m3] 60 REAL, DIMENSION(klon,klev) :: ssacu ! SS Acumulation concentration [ug/m3] 61 REAL, DIMENSION(klon,klev) :: sulfate_pi 54 ! Local variables 55 !**************************************************************************************** 56 REAL, DIMENSION(klon) :: aerindex ! POLDER aerosol index 57 REAL, DIMENSION(klon,klev) :: sulfacc ! SO4 accumulation concentration [ug/m3] 58 REAL, DIMENSION(klon,klev) :: sulfcoarse ! SO4 coarse concentration [ug/m3] 59 REAL, DIMENSION(klon,klev) :: bcsol ! BC soluble concentration [ug/m3] 60 REAL, DIMENSION(klon,klev) :: bcins ! BC insoluble concentration [ug/m3] 61 REAL, DIMENSION(klon,klev) :: pomsol ! POM soluble concentration [ug/m3] 62 REAL, DIMENSION(klon,klev) :: pomins ! POM insoluble concentration [ug/m3] 63 REAL, DIMENSION(klon,klev) :: cidust ! DUST aerosol concentration [ug/m3] 64 REAL, DIMENSION(klon,klev) :: sscoarse ! SS Coarse concentration [ug/m3] 65 REAL, DIMENSION(klon,klev) :: sssupco ! SS Super Coarse concentration [ug/m3] 66 REAL, DIMENSION(klon,klev) :: ssacu ! SS Acumulation concentration [ug/m3] 67 REAL, DIMENSION(klon,klev) :: nitracc ! nitrate accumulation concentration [ug/m3] 68 REAL, DIMENSION(klon,klev) :: nitrcoarse ! nitrate coarse concentration [ug/m3] 69 REAL, DIMENSION(klon,klev) :: nitrinscoarse ! nitrate insoluble coarse concentration [ug/m3] 70 REAL, DIMENSION(klon,klev) :: sulfacc_pi 71 REAL, DIMENSION(klon,klev) :: sulfcoarse_pi 62 72 REAL, DIMENSION(klon,klev) :: bcsol_pi 63 73 REAL, DIMENSION(klon,klev) :: bcins_pi … … 68 78 REAL, DIMENSION(klon,klev) :: sssupco_pi 69 79 REAL, DIMENSION(klon,klev) :: ssacu_pi 70 REAL, DIMENSION(klon,klev) :: pdel 71 REAL, DIMENSION(klon,klev,naero_spc) :: m_allaer 72 REAL, DIMENSION(klon,klev,naero_spc) :: m_allaer_pi !RAF 73 ! REAL, DIMENSION(klon,naero_tot) :: fractnat_allaer !RAF delete?? 74 80 REAL, DIMENSION(klon,klev) :: nitracc_pi 81 REAL, DIMENSION(klon,klev) :: nitrcoarse_pi 82 REAL, DIMENSION(klon,klev) :: nitrinscoarse_pi 83 REAL, DIMENSION(klon,klev) :: pdel, zrho 84 REAL, DIMENSION(klon,klev,naero_tot) :: m_allaer 85 REAL, DIMENSION(klon,klev,naero_tot) :: m_allaer_pi !RAF 86 ! REAL, DIMENSION(klon,naero_tot) :: fractnat_allaer !RAF delete?? 87 character(len=8), dimension(nbtr) :: tracname 88 integer :: id_ASBCM, id_ASPOMM, id_ASSO4M, id_ASMSAM, id_CSSO4M, id_CSMSAM, id_SSSSM 89 integer :: id_CSSSM, id_ASSSM, id_CIDUSTM, id_AIBCM, id_AIPOMM, id_ASNO3M, id_CSNO3M, id_CINO3M 75 90 INTEGER :: k, i 76 77 !**************************************************************************************** 78 ! 1) Get aerosol mass 79 ! 80 !**************************************************************************************** 81 ! Read and interpolate sulfate 82 IF ( flag_aerosol .EQ. 1 .OR. & 83 flag_aerosol .EQ. 6 ) THEN 84 85 CALL readaerosol_interp(id_ASSO4M, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sulfate, sulfate_pi,loadso4) 86 ELSE 87 sulfate(:,:) = 0. ; sulfate_pi(:,:) = 0. 88 loadso4=0. 89 END IF 90 91 ! Read and interpolate bcsol and bcins 92 IF ( flag_aerosol .EQ. 2 .OR. & 93 flag_aerosol .EQ. 6 ) THEN 94 95 ! Get bc aerosol distribution 96 CALL readaerosol_interp(id_ASBCM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, bcsol, bcsol_pi, load_tmp1 ) 97 CALL readaerosol_interp(id_AIBCM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, bcins, bcins_pi, load_tmp2 ) 98 loadbc(:)=load_tmp1(:)+load_tmp2(:) 99 ELSE 100 bcsol(:,:) = 0. ; bcsol_pi(:,:) = 0. 101 bcins(:,:) = 0. ; bcins_pi(:,:) = 0. 102 loadbc=0. 103 END IF 104 105 106 ! Read and interpolate pomsol and pomins 107 IF ( flag_aerosol .EQ. 3 .OR. & 108 flag_aerosol .EQ. 6 ) THEN 109 110 CALL readaerosol_interp(id_ASPOMM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomsol, pomsol_pi, load_tmp3) 111 CALL readaerosol_interp(id_AIPOMM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomins, pomins_pi, load_tmp4) 112 loadoa(:)=load_tmp3(:)+load_tmp4(:) 113 ELSE 114 pomsol(:,:) = 0. ; pomsol_pi(:,:) = 0. 115 pomins(:,:) = 0. ; pomins_pi(:,:) = 0. 116 loadoa=0. 117 END IF 118 119 120 ! Read and interpolate csssm, ssssm, assssm 121 IF (flag_aerosol .EQ. 4 .OR. & 122 flag_aerosol .EQ. 6 ) THEN 123 124 CALL readaerosol_interp(id_SSSSM ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sssupco, sssupco_pi, load_tmp5) 125 CALL readaerosol_interp(id_CSSSM ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sscoarse,sscoarse_pi, load_tmp6) 126 CALL readaerosol_interp(id_ASSSM ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, ssacu, ssacu_pi, load_tmp7) 127 loadss(:)=load_tmp5(:)+load_tmp6(:)+load_tmp7(:) 128 ELSE 129 sscoarse(:,:) = 0. ; sscoarse_pi(:,:) = 0. 130 ssacu(:,:) = 0. ; ssacu_pi(:,:) = 0. 131 sssupco(:,:) = 0. ; sssupco_pi = 0. 132 loadss=0. 133 ENDIF 134 135 ! Read and interpolate cidustm 136 IF (flag_aerosol .EQ. 5 .OR. & 137 flag_aerosol .EQ. 6 ) THEN 138 139 CALL readaerosol_interp(id_CIDUSTM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, cidust, cidust_pi, loaddust) 140 141 ELSE 142 cidust(:,:) = 0. ; cidust_pi(:,:) = 0. 143 loaddust=0. 144 ENDIF 145 146 ! 147 ! Store all aerosols in one variable 148 ! 149 m_allaer(:,:,id_ASBCM) = bcsol(:,:) ! ASBCM 150 m_allaer(:,:,id_ASPOMM) = pomsol(:,:) ! ASPOMM 151 m_allaer(:,:,id_ASSO4M) = sulfate(:,:) ! ASSO4M (= SO4) 152 m_allaer(:,:,id_CSSO4M) = 0. ! CSSO4M 153 m_allaer(:,:,id_SSSSM) = sssupco(:,:) ! SSSSM 154 m_allaer(:,:,id_CSSSM) = sscoarse(:,:) ! CSSSM 155 m_allaer(:,:,id_ASSSM) = ssacu(:,:) ! ASSSM 156 m_allaer(:,:,id_CIDUSTM)= cidust(:,:) ! CIDUSTM 157 m_allaer(:,:,id_AIBCM) = bcins(:,:) ! AIBCM 158 m_allaer(:,:,id_AIPOMM) = pomins(:,:) ! AIPOMM 159 160 !RAF 161 m_allaer_pi(:,:,1) = bcsol_pi(:,:) ! ASBCM pre-ind 162 m_allaer_pi(:,:,2) = pomsol_pi(:,:) ! ASPOMM pre-ind 163 m_allaer_pi(:,:,3) = sulfate_pi(:,:) ! ASSO4M (= SO4) pre-ind 164 m_allaer_pi(:,:,4) = 0. ! CSSO4M pre-ind 165 m_allaer_pi(:,:,5) = sssupco_pi(:,:) ! SSSSM pre-ind 166 m_allaer_pi(:,:,6) = sscoarse_pi(:,:) ! CSSSM pre-ind 167 m_allaer_pi(:,:,7) = ssacu_pi(:,:) ! ASSSM pre-ind 168 m_allaer_pi(:,:,8) = cidust_pi(:,:) ! CIDUSTM pre-ind 169 m_allaer_pi(:,:,9) = bcins_pi(:,:) ! AIBCM pre-ind 170 m_allaer_pi(:,:,10) = pomins_pi(:,:) ! AIPOMM pre-ind 171 172 ! 173 ! Calculate the total mass of all soluble aersosols 174 ! 175 mass_solu_aero(:,:) = sulfate(:,:) + bcsol(:,:) + pomsol(:,:) ! + & 176 ! sscoarse(:,:) + ssacu(:,:) + sssupco(:,:) 177 mass_solu_aero_pi(:,:) = sulfate_pi(:,:) + bcsol_pi(:,:) + pomsol_pi(:,:) ! + & 178 ! sscoarse_pi(:,:) + ssacu_pi(:,:) + sssupco_pi(:,:) 179 180 !**************************************************************************************** 181 ! 2) Calculate optical properties for the aerosols 182 ! 183 !**************************************************************************************** 91 92 !--air density 93 zrho(:,:)=pplay(:,:)/t_seri(:,:)/RD !--kg/m3 94 95 !**************************************************************************************** 96 ! 1) Get aerosol mass 97 ! 98 !**************************************************************************************** 99 ! 100 ! 101 IF (aerosol_couple) THEN !--we get aerosols from tr_seri array from INCA 102 ! 103 !--copy fields from INCA tr_seri 104 !--convert to ug m-3 unit for consistency with offline fields 105 ! 106 #ifdef INCA 107 call tracinca_name(tracname) 108 #endif 109 110 do i=1,nbtr 111 select case(trim(tracname(i))) 112 case ("ASBCM") 113 id_ASBCM = i 114 case ("ASPOMM") 115 id_ASPOMM = i 116 case ("ASSO4M") 117 id_ASSO4M = i 118 case ("ASMSAM") 119 id_ASMSAM = i 120 case ("CSSO4M") 121 id_CSSO4M = i 122 case ("CSMSAM") 123 id_CSMSAM = i 124 case ("SSSSM") 125 id_SSSSM = i 126 case ("CSSSM") 127 id_CSSSM = i 128 case ("ASSSM") 129 id_ASSSM = i 130 case ("CIDUSTM") 131 id_CIDUSTM = i 132 case ("AIBCM") 133 id_AIBCM = i 134 case ("AIPOMM") 135 id_AIPOMM = i 136 case ("ASNO3M") 137 id_ASNO3M = i 138 case ("CSNO3M") 139 id_CSNO3M = i 140 case ("CINO3M") 141 id_CINO3M = i 142 end select 143 enddo 144 145 146 bcsol(:,:) = tr_seri(:,:,id_ASBCM) *zrho(:,:)*1.e9 ! ASBCM 147 pomsol(:,:) = tr_seri(:,:,id_ASPOMM) *zrho(:,:)*1.e9 ! ASPOMM 148 sulfacc(:,:) = (tr_seri(:,:,id_ASSO4M)+tr_seri(:,:,id_ASMSAM))*zrho(:,:)*1.e9 ! ASSO4M (=SO4) + ASMSAM (=MSA) 149 sulfcoarse(:,:) = (tr_seri(:,:,id_CSSO4M)+tr_seri(:,:,id_CSMSAM))*zrho(:,:)*1.e9 ! CSSO4M (=SO4) + CSMSAM (=MSA) 150 sssupco(:,:) = tr_seri(:,:,id_SSSSM) *zrho(:,:)*1.e9 ! SSSSM 151 sscoarse(:,:) = tr_seri(:,:,id_CSSSM) *zrho(:,:)*1.e9 ! CSSSM 152 ssacu(:,:) = tr_seri(:,:,id_ASSSM) *zrho(:,:)*1.e9 ! ASSSM 153 cidust(:,:) = tr_seri(:,:,id_CIDUSTM) *zrho(:,:)*1.e9 ! CIDUSTM 154 bcins(:,:) = tr_seri(:,:,id_AIBCM) *zrho(:,:)*1.e9 ! AIBCM 155 pomins(:,:) = tr_seri(:,:,id_AIPOMM) *zrho(:,:)*1.e9 ! AIPOMM 156 nitracc(:,:) = tr_seri(:,:,id_ASNO3M) *zrho(:,:)*1.e9 ! ASNO3M 157 nitrcoarse(:,:) = tr_seri(:,:,id_CSNO3M) *zrho(:,:)*1.e9 ! CSNO3M 158 nitrinscoarse(:,:)= tr_seri(:,:,id_CINO3M) *zrho(:,:)*1.e9 ! CINO3M 159 ! 160 bcsol_pi(:,:) = 0.0 ! ASBCM pre-ind 161 pomsol_pi(:,:) = 0.0 ! ASPOMM pre-ind 162 sulfacc_pi(:,:) = 0.0 ! ASSO4M (=SO4) + ASMSAM (=MSA) pre-ind 163 sulfcoarse_pi(:,:) = 0.0 ! CSSO4M (=SO4) + CSMSAM (=MSA) pre-ind 164 sssupco_pi(:,:) = 0.0 ! SSSSM pre-ind 165 sscoarse_pi(:,:) = 0.0 ! CSSSM pre-ind 166 ssacu_pi(:,:) = 0.0 ! ASSSM pre-ind 167 cidust_pi(:,:) = 0.0 ! CIDUSTM pre-ind 168 bcins_pi(:,:) = 0.0 ! AIBCM pre-ind 169 pomins_pi(:,:) = 0.0 ! AIPOMM pre-ind 170 nitracc_pi(:,:) = 0.0 ! ASNO3M pre-ind 171 nitrcoarse_pi(:,:) = 0.0 ! CSNO3M pre-ind 172 nitrinscoarse_pi(:,:)= 0.0 ! CINO3M 173 ! 174 ELSE !--not aerosol_couple 175 ! 176 ! Read and interpolate sulfate 177 IF ( flag_aerosol .EQ. 1 .OR. & 178 flag_aerosol .EQ. 6 ) THEN 179 180 CALL readaerosol_interp(id_ASSO4M_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sulfacc, sulfacc_pi,loadso4) 181 ELSE 182 sulfacc(:,:) = 0. ; sulfacc_pi(:,:) = 0. 183 loadso4=0. 184 END IF 185 186 ! Read and interpolate bcsol and bcins 187 IF ( flag_aerosol .EQ. 2 .OR. & 188 flag_aerosol .EQ. 6 ) THEN 189 190 ! Get bc aerosol distribution 191 CALL readaerosol_interp(id_ASBCM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, bcsol, bcsol_pi, load_tmp1 ) 192 CALL readaerosol_interp(id_AIBCM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, bcins, bcins_pi, load_tmp2 ) 193 loadbc(:)=load_tmp1(:)+load_tmp2(:) 194 ELSE 195 bcsol(:,:) = 0. ; bcsol_pi(:,:) = 0. 196 bcins(:,:) = 0. ; bcins_pi(:,:) = 0. 197 loadbc=0. 198 END IF 199 200 201 ! Read and interpolate pomsol and pomins 202 IF ( flag_aerosol .EQ. 3 .OR. & 203 flag_aerosol .EQ. 6 ) THEN 204 205 CALL readaerosol_interp(id_ASPOMM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomsol, pomsol_pi, load_tmp3) 206 CALL readaerosol_interp(id_AIPOMM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomins, pomins_pi, load_tmp4) 207 loadoa(:)=load_tmp3(:)+load_tmp4(:) 208 ELSE 209 pomsol(:,:) = 0. ; pomsol_pi(:,:) = 0. 210 pomins(:,:) = 0. ; pomins_pi(:,:) = 0. 211 loadoa=0. 212 END IF 213 214 215 ! Read and interpolate csssm, ssssm, assssm 216 IF (flag_aerosol .EQ. 4 .OR. & 217 flag_aerosol .EQ. 6 ) THEN 218 219 CALL readaerosol_interp(id_SSSSM_phy ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sssupco, sssupco_pi, load_tmp5) 220 CALL readaerosol_interp(id_CSSSM_phy ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sscoarse,sscoarse_pi, load_tmp6) 221 CALL readaerosol_interp(id_ASSSM_phy ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, ssacu, ssacu_pi, load_tmp7) 222 loadss(:)=load_tmp5(:)+load_tmp6(:)+load_tmp7(:) 223 ELSE 224 sscoarse(:,:) = 0. ; sscoarse_pi(:,:) = 0. 225 ssacu(:,:) = 0. ; ssacu_pi(:,:) = 0. 226 sssupco(:,:) = 0. ; sssupco_pi = 0. 227 loadss=0. 228 ENDIF 229 230 ! Read and interpolate cidustm 231 IF (flag_aerosol .EQ. 5 .OR. & 232 flag_aerosol .EQ. 6 ) THEN 233 234 CALL readaerosol_interp(id_CIDUSTM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, cidust, cidust_pi, loaddust) 235 236 ELSE 237 cidust(:,:) = 0. ; cidust_pi(:,:) = 0. 238 loaddust=0. 239 ENDIF 240 ! 241 sulfcoarse(:,:) = 0.0 ! CSSO4M (=SO4) + CSMSAM (=MSA) 242 sulfcoarse_pi(:,:) = 0.0 ! CSSO4M (=SO4) + CSMSAM (=MSA) pre-ind 243 ! 244 !--placeholder for offline nitrate 245 ! 246 nitracc(:,:) = 0.0 247 nitracc_pi(:,:) = 0.0 248 nitrcoarse(:,:) = 0.0 249 nitrcoarse_pi(:,:) = 0.0 250 nitrinscoarse(:,:) = 0.0 251 nitrinscoarse_pi(:,:)= 0.0 252 253 ENDIF !--not aerosol_couple 254 255 ! 256 ! Store all aerosols in one variable 257 ! 258 m_allaer(:,:,id_ASBCM_phy) = bcsol(:,:) ! ASBCM 259 m_allaer(:,:,id_ASPOMM_phy) = pomsol(:,:) ! ASPOMM 260 m_allaer(:,:,id_ASSO4M_phy) = sulfacc(:,:) ! ASSO4M (= SO4) 261 m_allaer(:,:,id_CSSO4M_phy) = sulfcoarse(:,:) ! CSSO4M 262 m_allaer(:,:,id_SSSSM_phy) = sssupco(:,:) ! SSSSM 263 m_allaer(:,:,id_CSSSM_phy) = sscoarse(:,:) ! CSSSM 264 m_allaer(:,:,id_ASSSM_phy) = ssacu(:,:) ! ASSSM 265 m_allaer(:,:,id_CIDUSTM_phy)= cidust(:,:) ! CIDUSTM 266 m_allaer(:,:,id_AIBCM_phy) = bcins(:,:) ! AIBCM 267 m_allaer(:,:,id_ASNO3M_phy) = nitracc(:,:) ! ASNO3M 268 m_allaer(:,:,id_CSNO3M_phy) = nitrcoarse(:,:) ! CSNO3M 269 m_allaer(:,:,id_CINO3M_phy) = nitrinscoarse(:,:)! CINO3M 270 m_allaer(:,:,id_AIPOMM_phy) = pomins(:,:) ! AIPOMM 271 m_allaer(:,:,id_STRAT_phy) = 0.0 272 273 !RAF 274 m_allaer_pi(:,:,id_ASBCM_phy) = bcsol_pi(:,:) ! ASBCM pre-ind 275 m_allaer_pi(:,:,id_ASPOMM_phy) = pomsol_pi(:,:) ! ASPOMM pre-ind 276 m_allaer_pi(:,:,id_ASSO4M_phy) = sulfacc_pi(:,:) ! ASSO4M (= SO4) pre-ind 277 m_allaer_pi(:,:,id_CSSO4M_phy) = sulfcoarse_pi(:,:) ! CSSO4M pre-ind 278 m_allaer_pi(:,:,id_SSSSM_phy) = sssupco_pi(:,:) ! SSSSM pre-ind 279 m_allaer_pi(:,:,id_CSSSM_phy) = sscoarse_pi(:,:) ! CSSSM pre-ind 280 m_allaer_pi(:,:,id_ASSSM_phy) = ssacu_pi(:,:) ! ASSSM pre-ind 281 m_allaer_pi(:,:,id_CIDUSTM_phy)= cidust_pi(:,:) ! CIDUSTM pre-ind 282 m_allaer_pi(:,:,id_AIBCM_phy) = bcins_pi(:,:) ! AIBCM pre-ind 283 m_allaer_pi(:,:,id_ASNO3M_phy) = nitracc_pi(:,:) ! ASNO3M pre-ind 284 m_allaer_pi(:,:,id_CSNO3M_phy) = nitrcoarse_pi(:,:) ! CSNO3M pre-ind 285 m_allaer_pi(:,:,id_CINO3M_phy) = nitrinscoarse_pi(:,:)! CINO3M pre-ind 286 m_allaer_pi(:,:,id_AIPOMM_phy) = pomins_pi(:,:) ! AIPOMM pre-ind 287 m_allaer_pi(:,:,id_STRAT_phy) = 0.0 288 289 ! 290 ! Calculate the total mass of all soluble aersosols 291 ! to be revisited for AR6 292 mass_solu_aero(:,:) = sulfacc(:,:) + bcsol(:,:) + pomsol(:,:) + nitracc(:,:) ! + & 293 ! sscoarse(:,:) + ssacu(:,:) + sssupco(:,:) 294 mass_solu_aero_pi(:,:) = sulfacc_pi(:,:) + bcsol_pi(:,:) + pomsol_pi(:,:) + nitracc_pi(:,:) ! + & 295 ! sscoarse_pi(:,:) + ssacu_pi(:,:) + sssupco_pi(:,:) 296 297 !**************************************************************************************** 298 ! 2) Calculate optical properties for the aerosols 299 ! 300 !**************************************************************************************** 184 301 DO k = 1, klev 185 302 DO i = 1, klon … … 188 305 END DO 189 306 307 ! aeropt_6bands for rrtm 190 308 CALL aeropt_6bands_rrtm( & 191 pdel, m_allaer, pdtphys, rhcl, & 192 tau_aero, piz_aero, cg_aero, & 193 m_allaer_pi, flag_aerosol, & 194 pplay, t_seri, presnivs) 195 196 ! aeropt_5wv only for validation and diagnostics. 197 CALL aeropt_5wv_rrtm( & 198 pdel, m_allaer, & 199 pdtphys, rhcl, aerindex, & 200 flag_aerosol, pplay, t_seri, & 201 tausum_aero, tau3d_aero ) 202 203 ! Diagnostics calculation for CMIP5 protocol 204 sconcso4(:)=m_allaer(:,1,id_ASSO4M)*1.e-9 205 sconcoa(:)=(m_allaer(:,1,id_ASPOMM)+m_allaer(:,1,id_AIPOMM))*1.e-9 206 sconcbc(:)=(m_allaer(:,1,id_ASBCM)+m_allaer(:,1,id_AIBCM))*1.e-9 207 sconcss(:)=(m_allaer(:,1,id_ASSSM)+m_allaer(:,1,id_CSSSM)+m_allaer(:,1,id_SSSSM))*1.e-9 208 sconcdust(:)=m_allaer(:,1,id_CIDUSTM)*1.e-9 209 concso4(:,:)=m_allaer(:,:,id_ASSO4M)*1.e-9 210 concoa(:,:)=(m_allaer(:,:,id_ASPOMM)+m_allaer(:,:,id_AIPOMM))*1.e-9 211 concbc(:,:)=(m_allaer(:,:,id_ASBCM)+m_allaer(:,:,id_AIBCM))*1.e-9 212 concss(:,:)=(m_allaer(:,:,id_ASSSM)+m_allaer(:,:,id_CSSSM)+m_allaer(:,:,id_SSSSM))*1.e-9 213 concdust(:,:)=m_allaer(:,:,id_CIDUSTM)*1.e-9 309 pdel, m_allaer, pdtphys, rhcl, & 310 tau_aero, piz_aero, cg_aero, & 311 m_allaer_pi, flag_aerosol, & 312 zrho ) 313 314 ! aeropt_5wv only for validation and diagnostics 315 CALL aeropt_5wv_rrtm( & 316 pdel, m_allaer, & 317 pdtphys, rhcl, aerindex, & 318 flag_aerosol, pplay, t_seri, & 319 tausum_aero, tau3d_aero ) 320 321 ! Diagnostics calculation for CMIP5 protocol 322 sconcso4(:) =m_allaer(:,1,id_ASSO4M_phy)*1.e-9 323 sconcno3(:) =(m_allaer(:,1,id_ASNO3M_phy)+m_allaer(:,1,id_CSNO3M_phy)+m_allaer(:,1,id_CINO3M_phy))*1.e-9 324 sconcoa(:) =(m_allaer(:,1,id_ASPOMM_phy)+m_allaer(:,1,id_AIPOMM_phy))*1.e-9 325 sconcbc(:) =(m_allaer(:,1,id_ASBCM_phy)+m_allaer(:,1,id_AIBCM_phy))*1.e-9 326 sconcss(:) =(m_allaer(:,1,id_ASSSM_phy)+m_allaer(:,1,id_CSSSM_phy)+m_allaer(:,1,id_SSSSM_phy))*1.e-9 327 sconcdust(:) =m_allaer(:,1,id_CIDUSTM_phy)*1.e-9 328 concso4(:,:) =m_allaer(:,:,id_ASSO4M_phy)*1.e-9 329 concno3(:,:) =(m_allaer(:,:,id_ASNO3M_phy)+m_allaer(:,:,id_CSNO3M_phy)+m_allaer(:,:,id_CINO3M_phy))*1.e-9 330 concoa(:,:) =(m_allaer(:,:,id_ASPOMM_phy)+m_allaer(:,:,id_AIPOMM_phy))*1.e-9 331 concbc(:,:) =(m_allaer(:,:,id_ASBCM_phy)+m_allaer(:,:,id_AIBCM_phy))*1.e-9 332 concss(:,:) =(m_allaer(:,:,id_ASSSM_phy)+m_allaer(:,:,id_CSSSM_phy)+m_allaer(:,:,id_SSSSM_phy))*1.e-9 333 concdust(:,:)=m_allaer(:,:,id_CIDUSTM_phy)*1.e-9 214 334 215 335 END SUBROUTINE readaerosol_optic_rrtm -
LMDZ5/trunk/libf/phylmd/rrtm/readaerosolstrato_rrtm.F90
r2058 r2146 16 16 USE aero_mod 17 17 USE dimphy 18 USE YOERAD , ONLY : NLW 18 19 19 20 implicit none 20 21 22 include "YOMCST.h" 21 23 include "dimensions.h" 22 24 … … 33 35 real, pointer:: time(:) 34 36 real, pointer:: lev(:) 35 integer k, band, wave 37 integer k, band, wave, i 36 38 integer, save :: mth_pre 37 39 … … 45 47 real, allocatable:: tauaerstrat_mois_glo_bands(:,:,:) 46 48 49 real, allocatable:: sum_tau_aer_strat(:) 50 47 51 ! For NetCDF: 48 52 integer ncid_in ! IDs for input files … … 50 54 51 55 ! Stratospheric aerosols optical properties 52 ! alpha_strat over the 2 bands is normalised by the 550 nm extinction coefficient 53 ! alpha_strat_wave is *not* normalised by the 550 nm extinction coefficient 54 real, dimension(nbands_rrtm) :: alpha_strat, piz_strat, cg_strat 55 data alpha_strat/0.938538969, 0.990073204, 0.992904723, 0.829215884, 0.439313501, 0.156857833/ 56 data cg_strat /0.699142992, 0.716326416, 0.735462785, 0.736726701, 0.712068975, 0.575097859/ 57 data piz_strat /1.000000000, 1.000000000, 1.000000000, 1.000000000, 0.997781098, 0.452584684/ 58 real, dimension(nwave) :: alpha_strat_wave 59 data alpha_strat_wave/3.36780953,3.34667683,3.20444202,3.0293026,2.82108808/ 60 56 ! alpha_sw_strat over the 6 bands is normalised by the 550 nm extinction coefficient 57 real, dimension(nbands_sw_rrtm) :: alpha_sw_strat, piz_sw_strat, cg_sw_strat 58 data alpha_sw_strat/0.8545564, 0.8451642, 0.9821724, 0.8145110, 0.3073565, 7.7966176E-02/ 59 data cg_sw_strat /0.6997170, 0.6810035, 0.7403592, 0.7562674, 0.6676504, 0.3478689/ 60 data piz_sw_strat /0.9999998, 0.9999998, 1.000000000, 0.9999958, 0.9977155, 0.4510679/ 61 ! 62 !--diagnostics AOD in the SW 63 ! alpha_sw_strat_wave is *not* normalised by the 550 nm extinction coefficient 64 real, dimension(nwave) :: alpha_sw_strat_wave 65 data alpha_sw_strat_wave/3.708007,4.125824,4.136584,3.887478,3.507738/ 66 ! 67 !--diagnostics AOD in the LW at 10 um 68 real :: alpha_lw_strat_wave 69 data alpha_lw_strat_wave/0.2746812/ 70 ! 71 real, dimension(nbands_lw_rrtm) :: alpha_lw_abs_rrtm 72 data alpha_lw_abs_rrtm/ 8.8340312E-02, 6.9856711E-02, 6.2652975E-02, 5.7188231E-02, & 73 6.3157059E-02, 5.5072524E-02, 5.0571125E-02, 0.1349073, & 74 0.1381676, 9.6506312E-02, 5.1312990E-02, 2.4256418E-02, & 75 2.7191756E-02, 3.3862915E-02, 1.6132960E-02, 1.4275438E-02/ ! calculated with Mie_SW_LW_RRTM_V2.4 (bimodal, corrected) 76 ! for r_0=/0.13E-6, 0.41E-6/ m, sigma_g=/1.26, 1.30/ 77 ! order: increasing wavelength! 61 78 !-------------------------------------------------------- 62 79 63 80 IF (.not.ALLOCATED(tau_aer_strat)) ALLOCATE(tau_aer_strat(klon,klev)) 81 IF (.not.ALLOCATED(sum_tau_aer_strat)) ALLOCATE(sum_tau_aer_strat(klon)) 64 82 65 83 IF (is_mpi_root) THEN … … 67 85 IF (debut.OR.mth_cur.NE.mth_pre) THEN 68 86 69 IF (nbands_ rrtm.NE.6) THEN70 print *,'nbands_ rrtm doit etre egal a 6 dans readaerosolstrat_rrtm'87 IF (nbands_sw_rrtm.NE.6) THEN 88 print *,'nbands_sw_rrtm doit etre egal a 6 dans readaerosolstrat_rrtm' 71 89 STOP 72 90 ENDIF … … 112 130 ALLOCATE(tauaerstrat_mois(n_lon, n_lat, n_lev)) 113 131 ALLOCATE(tauaerstrat_mois_glo(klon_glo, n_lev)) 114 ALLOCATE(tauaerstrat_mois_glo_bands(klon_glo, n_lev,nbands_ rrtm))132 ALLOCATE(tauaerstrat_mois_glo_bands(klon_glo, n_lev,nbands_sw_rrtm)) 115 133 116 134 !--reading stratospheric AOD at 550 nm … … 143 161 ENDIF !--is_mpi_root 144 162 145 !--total vertical aod at the 5 wavelengths163 !--total vertical aod at the 5 SW wavelengths 146 164 DO wave=1, nwave 147 165 DO k=1, klev 148 tausum_aero(:,wave,id_ strat)=tausum_aero(:,wave,id_strat)+tau_aer_strat(:,k)*alpha_strat_wave(wave)/alpha_strat_wave(2)166 tausum_aero(:,wave,id_STRAT_phy)=tausum_aero(:,wave,id_STRAT_phy)+tau_aer_strat(:,k)*alpha_sw_strat_wave(wave)/alpha_sw_strat_wave(2) 149 167 ENDDO 150 168 ENDDO 151 169 152 170 !--weighted average for cg, piz and tau, adding strat aerosols on top of tropospheric ones 153 DO band=1, nbands_rrtm 154 !--anthropogenic aerosols bands 1 to nbands_rrtm 155 cg_aero_rrtm(:,:,2,band) = ( cg_aero_rrtm(:,:,2,band)*piz_aero_rrtm(:,:,2,band)*tau_aero_rrtm(:,:,2,band) + & 156 cg_strat(band)*piz_strat(band)*alpha_strat(band)*tau_aer_strat(:,:) ) / & 157 MAX( piz_aero_rrtm(:,:,2,band)*tau_aero_rrtm(:,:,2,band) + & 158 piz_strat(band)*alpha_strat(band)*tau_aer_strat(:,:), 1.e-15 ) 159 piz_aero_rrtm(:,:,2,band) = ( piz_aero_rrtm(:,:,2,band)*tau_aero_rrtm(:,:,2,band) + & 160 piz_strat(band)*alpha_strat(band)*tau_aer_strat(:,:) ) / & 161 MAX( tau_aero_rrtm(:,:,2,band) + alpha_strat(band)*tau_aer_strat(:,:), 1.e-15 ) 162 tau_aero_rrtm(:,:,2,band) = tau_aero_rrtm(:,:,2,band) + alpha_strat(band)*tau_aer_strat(:,:) 163 !--natural aerosols bands 1 to nbands_rrtm 164 cg_aero_rrtm(:,:,1,band) = ( cg_aero_rrtm(:,:,1,band)*piz_aero_rrtm(:,:,1,band)*tau_aero_rrtm(:,:,1,band) + & 165 cg_strat(band)*piz_strat(band)*alpha_strat(band)*tau_aer_strat(:,:) ) / & 166 MAX( piz_aero_rrtm(:,:,1,band)*tau_aero_rrtm(:,:,1,band) + & 167 piz_strat(band)*alpha_strat(band)*tau_aer_strat(:,:), 1.e-15 ) 168 piz_aero_rrtm(:,:,1,band) = ( piz_aero_rrtm(:,:,1,band)*tau_aero_rrtm(:,:,1,band) + & 169 piz_strat(band)*alpha_strat(band)*tau_aer_strat(:,:) ) / & 170 MAX( tau_aero_rrtm(:,:,1,band) + alpha_strat(band)*tau_aer_strat(:,:),1.e-15 ) 171 tau_aero_rrtm(:,:,1,band) = tau_aero_rrtm(:,:,1,band) + alpha_strat(band)*tau_aer_strat(:,:) 171 DO band=1, nbands_sw_rrtm 172 !--anthropogenic aerosols bands 1 to nbands_sw_rrtm 173 cg_aero_sw_rrtm(:,:,2,band) = ( cg_aero_sw_rrtm(:,:,2,band)*piz_aero_sw_rrtm(:,:,2,band)*tau_aero_sw_rrtm(:,:,2,band) + & 174 cg_sw_strat(band)*piz_sw_strat(band)*alpha_sw_strat(band)*tau_aer_strat(:,:) ) / & 175 MAX( piz_aero_sw_rrtm(:,:,2,band)*tau_aero_sw_rrtm(:,:,2,band) + & 176 piz_sw_strat(band)*alpha_sw_strat(band)*tau_aer_strat(:,:), 1.e-15 ) 177 piz_aero_sw_rrtm(:,:,2,band) = ( piz_aero_sw_rrtm(:,:,2,band)*tau_aero_sw_rrtm(:,:,2,band) + & 178 piz_sw_strat(band)*alpha_sw_strat(band)*tau_aer_strat(:,:) ) / & 179 MAX( tau_aero_sw_rrtm(:,:,2,band) + alpha_sw_strat(band)*tau_aer_strat(:,:), 1.e-15 ) 180 tau_aero_sw_rrtm(:,:,2,band) = tau_aero_sw_rrtm(:,:,2,band) + alpha_sw_strat(band)*tau_aer_strat(:,:) 181 !--natural aerosols bands 1 to nbands_sw_rrtm 182 cg_aero_sw_rrtm(:,:,1,band) = ( cg_aero_sw_rrtm(:,:,1,band)*piz_aero_sw_rrtm(:,:,1,band)*tau_aero_sw_rrtm(:,:,1,band) + & 183 cg_sw_strat(band)*piz_sw_strat(band)*alpha_sw_strat(band)*tau_aer_strat(:,:) ) / & 184 MAX( piz_aero_sw_rrtm(:,:,1,band)*tau_aero_sw_rrtm(:,:,1,band) + & 185 piz_sw_strat(band)*alpha_sw_strat(band)*tau_aer_strat(:,:), 1.e-15 ) 186 piz_aero_sw_rrtm(:,:,1,band) = ( piz_aero_sw_rrtm(:,:,1,band)*tau_aero_sw_rrtm(:,:,1,band) + & 187 piz_sw_strat(band)*alpha_sw_strat(band)*tau_aer_strat(:,:) ) / & 188 MAX( tau_aero_sw_rrtm(:,:,1,band) + alpha_sw_strat(band)*tau_aer_strat(:,:),1.e-15 ) 189 tau_aero_sw_rrtm(:,:,1,band) = tau_aero_sw_rrtm(:,:,1,band) + alpha_sw_strat(band)*tau_aer_strat(:,:) 190 !--no stratospheric aerosol in index 1 for these tests 191 ! cg_aero_sw_rrtm(:,:,1,band) = cg_aero_sw_rrtm(:,:,1,band) 192 ! piz_aero_sw_rrtm(:,:,1,band) = piz_aero_sw_rrtm(:,:,1,band) 193 ! tau_aero_sw_rrtm(:,:,1,band) = tau_aero_sw_rrtm(:,:,1,band) 194 ENDDO 195 196 !--stratospheric AOD in LW 197 IF (nbands_lw_rrtm .NE. NLW) then 198 print*, 'different values for NLW (=',NLW,') and nbands_lw_rrtm (=', nbands_lw_rrtm, ')' 199 STOP 200 ENDIF 201 202 DO band=1, nbands_lw_rrtm 203 tau_aero_lw_rrtm(:,:,2,band) = tau_aero_lw_rrtm(:,:,2,band) + alpha_lw_abs_rrtm(band)*tau_aer_strat(:,:) 204 tau_aero_lw_rrtm(:,:,1,band) = tau_aero_lw_rrtm(:,:,1,band) + alpha_lw_abs_rrtm(band)*tau_aer_strat(:,:) 205 !--no stratospheric aerosols in index 1 for these tests 206 ! tau_aero_lw_rrtm(:,:,1,band) = tau_aero_lw_rrtm(:,:,1,band) 172 207 ENDDO 173 208 -
LMDZ5/trunk/libf/phylmd/rrtm/recmwf_aero.F90
r2005 r2146 20 20 & PPIZA_NAT,PCGA_NAT,PTAU_NAT, & 21 21 !--fin OB 22 !--C.Kleinschmitt 23 & PTAU_LW_TOT, PTAU_LW_NAT, & 24 !--end 22 25 & PFLUX,PFLUC,& 23 26 & PFSDN ,PFSUP , PFSCDN , PFSCUP,& … … 27 30 & PTOPSWAIAERO,PSOLSWAIAERO,& 28 31 & PTOPSWCFAERO,PSOLSWCFAERO,& 32 !--LW diagnostics CK 33 & PTOPLWADAERO,PSOLLWADAERO,& 34 & PTOPLWAD0AERO,PSOLLWAD0AERO,& 35 & PTOPLWAIAERO,PSOLLWAIAERO,& 36 !..end 29 37 & ok_ade, ok_aie, flag_aerosol,flag_aerosol_strat) 30 38 !--fin … … 79 87 ! PCGA_NAT : (KPROMA,KLEV,NSW); Assymetry factor for natural aerosol 80 88 ! PTAU_NAT: (KPROMA,KLEV,NSW) ; Optical depth of natural aerosol 89 ! PTAU_LW_TOT (KPROMA,KLEV,NLW); LW Optical depth of total aerosols 90 ! PTAU_LW_NAT (KPROMA,KLEV,NLW); LW Optical depth of natural aerosols 81 91 !--fin OB 82 92 … … 136 146 USE YOMCST , ONLY : RMD ,RMO3 137 147 USE YOMPHY3 , ONLY : RII0 148 USE YOERAD , ONLY : NLW, NAER, RCCNLND ,RCCNSEA 138 149 USE YOERAD , ONLY : NAER, RCCNLND ,RCCNSEA 139 150 USE YOERDU , ONLY : REPSCQ … … 150 161 IMPLICIT NONE 151 162 INCLUDE "clesphys.h" 163 152 164 153 165 INTEGER(KIND=JPIM),INTENT(IN) :: KPROMA … … 186 198 REAL(KIND=JPRB) :: PTAU_ZERO(KPROMA,KLEV,NSW) 187 199 !--fin 200 !--C.Kleinschmitt 201 REAL(KIND=JPRB) :: PTAU_LW_ZERO(KPROMA,KLEV,NLW) 202 REAL(KIND=JPRB) ,INTENT(IN) :: PTAU_LW_TOT(KPROMA,KLEV,NLW) 203 REAL(KIND=JPRB) ,INTENT(IN) :: PTAU_LW_NAT(KPROMA,KLEV,NLW) 204 !--end 188 205 REAL(KIND=JPRB) ,INTENT(IN) :: PREF_LIQ(KPROMA,KLEV) 189 206 REAL(KIND=JPRB) ,INTENT(IN) :: PREF_ICE(KPROMA,KLEV) … … 199 216 REAL(KIND=JPRB) ,INTENT(OUT) :: PTOPSWCFAERO(KPROMA,3), PSOLSWCFAERO(KPROMA,3) !--do we keep this ? 200 217 !--fin 218 !--CK 219 REAL(KIND=JPRB) ,INTENT(out) :: PTOPLWADAERO(KPROMA), PSOLLWADAERO(KPROMA) ! LW Aerosol direct forcing at TOA + surface 220 REAL(KIND=JPRB) ,INTENT(OUT) :: PTOPLWAD0AERO(KPROMA), PSOLLWAD0AERO(KPROMA) ! LW Aerosol direct forcing at TOA + surface 221 REAL(KIND=JPRB) ,INTENT(OUT) :: PTOPLWAIAERO(KPROMA), PSOLLWAIAERO(KPROMA) ! LW Aer. indirect forcing at TOA + surface 222 !--end 201 223 REAL(KIND=JPRB) ,INTENT(OUT) :: PEMTD(KPROMA,KLEV+1) 202 224 REAL(KIND=JPRB) ,INTENT(OUT) :: PEMTU(KPROMA,KLEV+1) … … 295 317 REAL(KIND=JPRB) :: ZFSUP0_AERO(KPROMA,KLEV+1,5) 296 318 REAL(KIND=JPRB) :: ZFSDN0_AERO(KPROMA,KLEV+1,5) 319 !--LW (CK): 320 REAL(KIND=JPRB) :: LWUP_AERO(KPROMA,KLEV+1,5) 321 REAL(KIND=JPRB) :: LWDN_AERO(KPROMA,KLEV+1,5) 322 REAL(KIND=JPRB) :: LWUP0_AERO(KPROMA,KLEV+1,5) 323 REAL(KIND=JPRB) :: LWDN0_AERO(KPROMA,KLEV+1,5) 297 324 298 325 #include "radlsw.intfb.h" … … 313 340 ZFSDN0_AERO(:,:,:)=0. 314 341 342 LWUP_AERO (:,:,:)=0. 343 LWDN_AERO (:,:,:)=0. 344 LWUP0_AERO(:,:,:)=0. 345 LWDN0_AERO(:,:,:)=0. 346 315 347 PTAU_ZERO(:,:,:) =1.e-15 316 348 PPIZA_ZERO(:,:,:)=1.0 317 349 PCGA_ZERO(:,:,:) =0.0 350 351 PTAU_LW_ZERO(:,:,:) =1.e-15 318 352 319 353 … … 431 465 & ZFRSOD, ZSUDU , ZUVDF , ZPARF , ZPARCF, ZTINCF, PSFSWDIR,& 432 466 & PSFSWDIF,PFSDNN, PFSDNV ,& 433 & LRDUST,PPIZA_NAT,PCGA_NAT,PTAU_NAT,P FLUX,PFLUC,&467 & LRDUST,PPIZA_NAT,PCGA_NAT,PTAU_NAT,PTAU_LW_NAT,PFLUX,PFLUC,& 434 468 & PFSDN , PFSUP , PFSCDN , PFSCUP ) 435 469 … … 440 474 ZFSUP_AERO(:,:,1) = PFSUP(:,:) 441 475 ZFSDN_AERO(:,:,1) = PFSDN(:,:) 476 477 LWUP0_AERO(:,:,1) = PFLUC(:,1,:) 478 LWDN0_AERO(:,:,1) = PFLUC(:,2,:) 479 480 LWUP_AERO(:,:,1) = PFLUX(:,1,:) 481 LWDN_AERO(:,:,1) = PFLUX(:,2,:) 442 482 443 483 ENDIF … … 463 503 & ZFRSOD, ZSUDU , ZUVDF , ZPARF , ZPARCF, ZTINCF, PSFSWDIR,& 464 504 & PSFSWDIF,PFSDNN, PFSDNV ,& 465 & LRDUST,PPIZA_NAT,PCGA_NAT,PTAU_NAT,P FLUX,PFLUC,&505 & LRDUST,PPIZA_NAT,PCGA_NAT,PTAU_NAT,PTAU_LW_NAT,PFLUX,PFLUC,& 466 506 & PFSDN , PFSUP , PFSCDN , PFSCUP ) 467 507 … … 472 512 ZFSUP_AERO(:,:,2) = PFSUP(:,:) 473 513 ZFSDN_AERO(:,:,2) = PFSDN(:,:) 514 515 LWUP0_AERO(:,:,2) = PFLUC(:,1,:) 516 LWDN0_AERO(:,:,2) = PFLUC(:,2,:) 517 518 LWUP_AERO(:,:,2) = PFLUX(:,1,:) 519 LWDN_AERO(:,:,2) = PFLUX(:,2,:) 474 520 475 521 ENDIF ! ok_aie … … 495 541 & ZFRSOD, ZSUDU , ZUVDF , ZPARF , ZPARCF, ZTINCF, PSFSWDIR,& 496 542 & PSFSWDIF,PFSDNN, PFSDNV ,& 497 & LRDUST,PPIZA_TOT,PCGA_TOT,PTAU_TOT,P FLUX,PFLUC,&543 & LRDUST,PPIZA_TOT,PCGA_TOT,PTAU_TOT,PTAU_LW_TOT,PFLUX,PFLUC,& 498 544 & PFSDN , PFSUP , PFSCDN , PFSCUP ) 499 545 … … 504 550 ZFSUP_AERO(:,:,3) = PFSUP(:,:) 505 551 ZFSDN_AERO(:,:,3) = PFSDN(:,:) 552 553 LWUP0_AERO(:,:,3) = PFLUC(:,1,:) 554 LWDN0_AERO(:,:,3) = PFLUC(:,2,:) 555 556 LWUP_AERO(:,:,3) = PFLUX(:,1,:) 557 LWDN_AERO(:,:,3) = PFLUX(:,2,:) 506 558 507 559 ENDIF !-end ok_ade … … 527 579 & ZFRSOD, ZSUDU , ZUVDF , ZPARF , ZPARCF, ZTINCF, PSFSWDIR,& 528 580 & PSFSWDIF,PFSDNN, PFSDNV ,& 529 & LRDUST,PPIZA_TOT,PCGA_TOT,PTAU_TOT,P FLUX,PFLUC,&581 & LRDUST,PPIZA_TOT,PCGA_TOT,PTAU_TOT,PTAU_LW_TOT,PFLUX,PFLUC,& 530 582 & PFSDN , PFSUP , PFSCDN , PFSCUP ) 531 583 … … 536 588 ZFSUP_AERO(:,:,4) = PFSUP(:,:) 537 589 ZFSDN_AERO(:,:,4) = PFSDN(:,:) 590 591 LWUP0_AERO(:,:,4) = PFLUC(:,1,:) 592 LWDN0_AERO(:,:,4) = PFLUC(:,2,:) 593 594 LWUP_AERO(:,:,4) = PFLUX(:,1,:) 595 LWDN_AERO(:,:,4) = PFLUX(:,2,:) 538 596 539 597 ENDIF ! ok_ade .and. ok_aie … … 563 621 & ZFRSOD, ZSUDU , ZUVDF , ZPARF , ZPARCF, ZTINCF, PSFSWDIR,& 564 622 & PSFSWDIF,PFSDNN, PFSDNV ,& 565 & LRDUST,PPIZA_ZERO,PCGA_ZERO,PTAU_ZERO, PFLUX,PFLUC,&623 & LRDUST,PPIZA_ZERO,PCGA_ZERO,PTAU_ZERO, PTAU_LW_ZERO,PFLUX,PFLUC,& 566 624 & PFSDN , PFSUP , PFSCDN , PFSCUP ) 567 625 … … 572 630 ZFSUP_AERO(:,:,5) = PFSUP(:,:) 573 631 ZFSDN_AERO(:,:,5) = PFSDN(:,:) 632 633 LWUP0_AERO(:,:,5) = PFLUC(:,1,:) 634 LWDN0_AERO(:,:,5) = PFLUC(:,2,:) 635 636 LWUP_AERO(:,:,5) = PFLUX(:,1,:) 637 LWDN_AERO(:,:,5) = PFLUX(:,2,:) 574 638 575 639 ENDIF ! .not. AEROSOLFEEDBACK_ACTIVE … … 643 707 PFSCUP(:,:) = ZFSUP0_AERO(:,:,4) 644 708 PFSCDN(:,:) = ZFSDN0_AERO(:,:,4) 709 710 PFLUX(:,1,:) = LWUP_AERO(:,:,4) 711 PFLUX(:,2,:) = LWDN_AERO(:,:,4) 712 PFLUC(:,1,:) = LWUP0_AERO(:,:,4) 713 PFLUC(:,2,:) = LWDN0_AERO(:,:,4) 645 714 ENDIF 646 715 … … 650 719 PFSCUP(:,:) = ZFSUP0_AERO(:,:,3) 651 720 PFSCDN(:,:) = ZFSDN0_AERO(:,:,3) 721 722 PFLUX(:,1,:) = LWUP_AERO(:,:,3) 723 PFLUX(:,2,:) = LWDN_AERO(:,:,3) 724 PFLUC(:,1,:) = LWUP0_AERO(:,:,3) 725 PFLUC(:,2,:) = LWDN0_AERO(:,:,3) 652 726 ENDIF 653 727 … … 657 731 PFSCUP(:,:) = ZFSUP0_AERO(:,:,2) 658 732 PFSCDN(:,:) = ZFSDN0_AERO(:,:,2) 733 734 PFLUX(:,1,:) = LWUP_AERO(:,:,2) 735 PFLUX(:,2,:) = LWDN_AERO(:,:,2) 736 PFLUC(:,1,:) = LWUP0_AERO(:,:,2) 737 PFLUC(:,2,:) = LWDN0_AERO(:,:,2) 659 738 ENDiF 660 739 … … 664 743 PFSCUP(:,:) = ZFSUP0_AERO(:,:,1) 665 744 PFSCDN(:,:) = ZFSDN0_AERO(:,:,1) 745 746 PFLUX(:,1,:) = LWUP_AERO(:,:,1) 747 PFLUX(:,2,:) = LWDN_AERO(:,:,1) 748 PFLUC(:,1,:) = LWUP0_AERO(:,:,1) 749 PFLUC(:,2,:) = LWDN0_AERO(:,:,1) 666 750 ENDIF 667 751 … … 677 761 PFSCDN(:,:) = ZFSDN0_AERO(:,:,5) 678 762 763 PFLUX(:,1,:) = LWUP_AERO(:,:,5) 764 PFLUX(:,2,:) = LWDN_AERO(:,:,5) 765 PFLUC(:,1,:) = LWUP0_AERO(:,:,5) 766 PFLUC(:,2,:) = LWDN0_AERO(:,:,5) 767 679 768 ENDIF 680 769 … … 683 772 ! requires a natural aerosol field read and used 684 773 ! Difference of net fluxes from double call to radiation 685 ! Will need to be extended to LW radiation 774 ! Will need to be extended to LW radiation -> done by CK (2014-05-23) 686 775 687 776 IF (flag_aerosol .GT. 0 .OR. flag_aerosol_strat) THEN … … 709 798 PTOPSWCFAERO(:,3) = 0.0 710 799 800 ! LW direct anthropogenic forcing 801 PSOLLWADAERO(:) = (-LWDN_AERO(:,1,4) -LWUP_AERO(:,1,4)) -(-LWDN_AERO(:,1,2) -LWUP_AERO(:,1,2)) 802 PTOPLWADAERO(:) = (-LWDN_AERO(:,KLEV+1,4) -LWUP_AERO(:,KLEV+1,4)) -(-LWDN_AERO(:,KLEV+1,2) -LWUP_AERO(:,KLEV+1,2)) 803 PSOLLWAD0AERO(:) = (-LWDN0_AERO(:,1,4) -LWUP0_AERO(:,1,4)) -(-LWDN0_AERO(:,1,2) -LWUP0_AERO(:,1,2)) 804 PTOPLWAD0AERO(:) = (-LWDN0_AERO(:,KLEV+1,4)-LWUP0_AERO(:,KLEV+1,4))-(-LWDN0_AERO(:,KLEV+1,2)-LWUP0_AERO(:,KLEV+1,2)) 805 806 ! LW indirect anthropogenic forcing 807 PSOLLWAIAERO(:) = (-LWDN_AERO(:,1,4) -LWUP_AERO(:,1,4)) -(-LWDN_AERO(:,1,3) -LWUP_AERO(:,1,3)) 808 PTOPLWAIAERO(:) = (-LWDN_AERO(:,KLEV+1,4)-LWUP_AERO(:,KLEV+1,4))-(-LWDN_AERO(:,KLEV+1,3)-LWUP_AERO(:,KLEV+1,3)) 809 711 810 ENDIF 712 811 … … 733 832 PTOPSWCFAERO(:,3) = 0.0 734 833 834 ! LW direct anthropogenic forcing 835 PSOLLWADAERO(:) = (-LWDN_AERO(:,1,3) -LWUP_AERO(:,1,3)) -(-LWDN_AERO(:,1,1) -LWUP_AERO(:,1,1)) 836 PTOPLWADAERO(:) = (-LWDN_AERO(:,KLEV+1,3) -LWUP_AERO(:,KLEV+1,3)) -(-LWDN_AERO(:,KLEV+1,1) -LWUP_AERO(:,KLEV+1,1)) 837 PSOLLWAD0AERO(:) = (-LWDN0_AERO(:,1,3) -LWUP0_AERO(:,1,3)) -(-LWDN0_AERO(:,1,1) -LWUP0_AERO(:,1,1)) 838 PTOPLWAD0AERO(:) = (-LWDN0_AERO(:,KLEV+1,3)-LWUP0_AERO(:,KLEV+1,3))-(-LWDN0_AERO(:,KLEV+1,1)-LWUP0_AERO(:,KLEV+1,1)) 839 840 ! LW indirect anthropogenic forcing 841 PSOLLWAIAERO(:) = 0.0 842 PTOPLWAIAERO(:) = 0.0 843 735 844 ENDIF 736 845 … … 757 866 PTOPSWCFAERO(:,3) = 0.0 758 867 868 ! LW direct anthropogenic forcing 869 PSOLLWADAERO(:) = 0.0 870 PTOPLWADAERO(:) = 0.0 871 PSOLLWAD0AERO(:) = 0.0 872 PTOPLWAD0AERO(:) = 0.0 873 874 ! LW indirect anthropogenic forcing 875 PSOLLWAIAERO(:) = (-LWDN_AERO(:,1,2) -LWUP_AERO(:,1,2)) -(-LWDN_AERO(:,1,1) -LWUP_AERO(:,1,1)) 876 PTOPLWAIAERO(:) = (-LWDN_AERO(:,KLEV+1,2)-LWUP_AERO(:,KLEV+1,2))-(-LWDN_AERO(:,KLEV+1,1)-LWUP_AERO(:,KLEV+1,1)) 877 759 878 ENDIF 760 879 … … 781 900 PTOPSWCFAERO(:,3) = 0.0 782 901 902 ! LW direct anthropogenic forcing 903 PSOLLWADAERO(:) = 0.0 904 PTOPLWADAERO(:) = 0.0 905 PSOLLWAD0AERO(:) = 0.0 906 PTOPLWAD0AERO(:) = 0.0 907 908 ! LW indirect anthropogenic forcing 909 PSOLLWAIAERO(:) = 0.0 910 PTOPLWAIAERO(:) = 0.0 911 783 912 ENDIF 784 913 … … 790 919 PSOLSWCFAERO(:,3) = (ZFSDN_AERO(:,1,5) -ZFSUP_AERO(:,1,5)) -(ZFSDN0_AERO(:,1,5) -ZFSUP0_AERO(:,1,5)) 791 920 PTOPSWCFAERO(:,3) = (ZFSDN_AERO(:,KLEV+1,5)-ZFSUP_AERO(:,KLEV+1,5))-(ZFSDN0_AERO(:,KLEV+1,5)-ZFSUP0_AERO(:,KLEV+1,5)) 921 792 922 ENDIF 793 923 -
LMDZ5/trunk/libf/phylmd/rrtm/rrtm_ecrt_140gp.F90
r2027 r2146 10 10 & P_ZEMIS, P_ZEMIW,& 11 11 & pq , pcco2, pozn, pcldf, ptaucld, ptclear,& 12 & P_CLDFRAC,P_TAUCLD,P_COLDRY,P_WKL,P_WX,& 13 & P_TAUAERL,PAVEL,P_TAVEL,PZ,P_TZ,P_TBOUND,K_NLAYERS,P_SEMISS,K_IREFLECT) 12 & P_CLDFRAC,P_TAUCLD,& 13 & PTAU_LW,& 14 & P_COLDRY,P_WKL,P_WX,& 15 & P_TAUAERL,PAVEL,P_TAVEL,PZ,P_TZ,P_TBOUND,K_NLAYERS,P_SEMISS,K_IREFLECT ) 14 16 15 17 ! Reformatted for F90 by JJMorcrette, ECMWF, 980714 … … 28 30 USE PARRRTM , ONLY : JPBAND ,JPXSEC ,JPLAY ,& 29 31 & JPINPX 30 USE YOERAD , ONLY : N OVLP31 !USE YOERDI , ONLY : RCH4 ,RN2O ,RCFC11 ,RCFC1232 USE YOERAD , ONLY : NLW ,NOVLP 33 USE YOERDI , ONLY : RCH4 ,RN2O ,RCFC11 ,RCFC12 32 34 USE YOESW , ONLY : RAER 33 35 34 36 !------------------------------Arguments-------------------------------- 35 37 36 37 38 38 IMPLICIT NONE 39 39 40 #include "clesphys.h" 40 41 41 INTEGER(KIND=JPIM),INTENT(IN) :: KLON! Number of atmospheres (longitudes) 42 42 INTEGER(KIND=JPIM),INTENT(IN) :: KLEV! Number of atmospheric layers … … 56 56 REAL(KIND=JPRB) ,INTENT(IN) :: PCLDF(KLON,KLEV) ! Cloud fraction 57 57 REAL(KIND=JPRB) ,INTENT(IN) :: PTAUCLD(KLON,KLEV,JPBAND) ! Cloud optical depth 58 !--C.Kleinschmitt 59 REAL(KIND=JPRB) ,INTENT(IN) :: PTAU_LW(KLON,KLEV,NLW) ! LW Optical depth of aerosols 60 !--end 58 61 REAL(KIND=JPRB) ,INTENT(OUT) :: PTCLEAR 59 62 REAL(KIND=JPRB) ,INTENT(OUT) :: P_CLDFRAC(JPLAY) ! Cloud fraction … … 258 261 P_TAUAERL(I_L,16)=ZTAUAER(5) 259 262 ENDDO 263 !--Use LW AOD from own Mie calculations (C. Kleinschmitt) 264 DO I_L=1,KLEV 265 JK=KLEV-I_L+1 266 ! DO JAE=1, NLW 267 DO JAE=1, 16 268 P_TAUAERL(I_L,JAE) = MAX( PTAU_LW(K_IPLON, JK, JAE), 1e-30 ) 269 ENDDO 270 ENDDO 271 !--end C. Kleinschmitt 260 272 261 273 DO J2=1,KLEV … … 390 402 ! ------------------------------------------------------------------ 391 403 392 393 394 404 IF (LHOOK) CALL DR_HOOK('RRTM_ECRT_140GP',1,ZHOOK_HANDLE) 395 405 END SUBROUTINE RRTM_ECRT_140GP -
LMDZ5/trunk/libf/phylmd/rrtm/rrtm_ecrt_140gp.intfb.h
r1990 r2146 1 INTERFACE 2 SUBROUTINE RRTM_ECRT_140GP &1 INTERFACE 2 SUBROUTINE RRTM_ECRT_140GP & 3 3 & ( K_IPLON, klon , klev, kcld,& 4 4 & paer , paph , pap,& 5 & pts , pth, pt,&5 & pts , pth , pt,& 6 6 & P_ZEMIS, P_ZEMIW,& 7 & pq , pcco2, pozn, pcldf, ptaucld, ptclear,& 8 & P_CLDFRAC,P_TAUCLD,P_COLDRY,P_WKL,P_WX,& 9 & P_TAUAERL,PAVEL,P_TAVEL,PZ,P_TZ,P_TBOUND,K_NLAYERS,P_SEMISS,K_IREFLECT) 10 USE PARKIND1 ,ONLY : JPIM ,JPRB 11 USE PARRRTM , ONLY : JPBAND ,JPXSEC ,JPLAY ,& 12 & JPINPX 7 & pq , pcco2, pozn, pcldf, ptaucld, ptclear,& 8 & P_CLDFRAC,P_TAUCLD,& 9 & PTAU_LW,& 10 & P_COLDRY,P_WKL,P_WX,& 11 & P_TAUAERL,PAVEL,P_TAVEL,PZ,P_TZ,P_TBOUND,K_NLAYERS,P_SEMISS,K_IREFLECT ) 12 USE PARKIND1 ,ONLY : JPIM ,JPRB 13 USE PARRRTM , ONLY : JPBAND ,JPXSEC ,JPLAY ,& 14 & JPINPX 15 USE YOERAD , ONLY : NLW ,NOVLP 16 USE YOERDI , ONLY : RCH4 ,RN2O ,RCFC11 ,RCFC12 17 USE YOESW , ONLY : RAER 13 18 INTEGER(KIND=JPIM),INTENT(IN) :: KLON 14 19 INTEGER(KIND=JPIM),INTENT(IN) :: KLEV … … 28 33 REAL(KIND=JPRB) ,INTENT(IN) :: PCLDF(KLON,KLEV) 29 34 REAL(KIND=JPRB) ,INTENT(IN) :: PTAUCLD(KLON,KLEV,JPBAND) 35 !--C.Kleinschmitt 36 REAL(KIND=JPRB) ,INTENT(IN) :: PTAU_LW(KLON,KLEV,NLW) ! LW Optical depth of aerosols 37 !--end 30 38 REAL(KIND=JPRB) ,INTENT(OUT) :: PTCLEAR 31 39 REAL(KIND=JPRB) ,INTENT(OUT) :: P_CLDFRAC(JPLAY) -
LMDZ5/trunk/libf/phylmd/rrtm/rrtm_rrtm_140gp.F90
r1990 r2146 40 40 & PQ , PCCO2 , POZN,& 41 41 & PCLDF , PTAUCLD,& 42 & PTAU_LW,& 42 43 & PEMIT , PFLUX , PFLUC, PTCLEAR & 43 44 & ) … … 55 56 USE PARKIND1 ,ONLY : JPIM ,JPRB 56 57 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 57 58 USE YOERAD ,ONLY : NLW 58 59 USE PARRRTM , ONLY : JPBAND ,JPXSEC ,JPGPT ,JPLAY ,& 59 60 & JPINPX … … 80 81 REAL(KIND=JPRB) ,INTENT(IN) :: PCLDF(KLON,KLEV) ! Cloud fraction 81 82 REAL(KIND=JPRB) ,INTENT(IN) :: PTAUCLD(KLON,KLEV,JPBAND) ! Cloud optical depth 83 !--C.Kleinschmitt 84 REAL(KIND=JPRB) ,INTENT(IN) :: PTAU_LW(KLON,KLEV,NLW) ! LW Optical depth of aerosols 85 !--end 82 86 REAL(KIND=JPRB) ,INTENT(OUT) :: PEMIT(KLON) ! Surface LW emissivity 83 87 REAL(KIND=JPRB) ,INTENT(OUT) :: PFLUX(KLON,2,KLEV+1) ! LW total sky flux (1=up, 2=down) … … 204 208 & P_ZEMIS, P_ZEMIW,& 205 209 & pq , pcco2, pozn, pcldf, ptaucld, ztclear,& 206 & Z_CLDFRAC,Z_TAUCLD,Z_COLDRY,Z_WKL,Z_WX,& 210 & Z_CLDFRAC,Z_TAUCLD,& 211 & PTAU_LW,& 212 & Z_COLDRY,Z_WKL,Z_WX,& 207 213 & Z_TAUAERL,Z_PAVEL,Z_TAVEL,Z_PZ,Z_TZ,Z_TBOUND,I_NLAYERS,Z_SEMISS,IREFLECT) 208 214 -
LMDZ5/trunk/libf/phylmd/rrtm/rrtm_rrtm_140gp.intfb.h
r1990 r2146 1 1 INTERFACE 2 SUBROUTINE RRTM_RRTM_140GP &2 SUBROUTINE RRTM_RRTM_140GP & 3 3 & ( KIDIA , KFDIA , KLON , KLEV,& 4 & PAER , PAPH, PAP,&5 & PTS , PTH, PT,&4 & PAER , PAPH , PAP,& 5 & PTS , PTH , PT,& 6 6 & P_ZEMIS , P_ZEMIW,& 7 & PQ , PCCO2 , POZN,&7 & PQ , PCCO2 , POZN,& 8 8 & PCLDF , PTAUCLD,& 9 & P EMIT , PFLUX , PFLUC, PTCLEAR&10 & )9 & PTAU_LW,& 10 & PEMIT , PFLUX , PFLUC, PTCLEAR ) 11 11 USE PARKIND1 ,ONLY : JPIM ,JPRB 12 USE YOERAD ,ONLY : NLW !--C.Kleinschmitt 12 13 USE PARRRTM , ONLY : JPBAND ,JPXSEC ,JPGPT ,JPLAY ,& 13 & JPINPX 14 & JPINPX 15 !-NLW in clesphys now OB 16 include "clesphys.h" 14 17 INTEGER(KIND=JPIM),INTENT(IN) :: KLON 15 18 INTEGER(KIND=JPIM),INTENT(IN) :: KLEV … … 29 32 REAL(KIND=JPRB) ,INTENT(IN) :: PCLDF(KLON,KLEV) 30 33 REAL(KIND=JPRB) ,INTENT(IN) :: PTAUCLD(KLON,KLEV,JPBAND) 34 !--C.Kleinschmitt 35 REAL(KIND=JPRB) ,INTENT(IN) :: PTAU_LW(KLON,KLEV,NLW) ! LW Optical depth of aerosols 36 !--end 31 37 REAL(KIND=JPRB) ,INTENT(OUT) :: PEMIT(KLON) 32 38 REAL(KIND=JPRB) ,INTENT(OUT) :: PFLUX(KLON,2,KLEV+1)
Note: See TracChangeset
for help on using the changeset viewer.