Changeset 2845
- Timestamp:
- Apr 6, 2017, 6:21:59 PM (8 years ago)
- Location:
- LMDZ5/branches/testing
- Files:
-
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/branches/testing
- Property svn:mergeinfo changed
/LMDZ5/trunk merged: 2840-2842
- Property svn:mergeinfo changed
-
LMDZ5/branches/testing/DefLists/field_def_lmdz.xml
r2839 r2845 338 338 <field id="od550aer" long_name="Total aerosol optical depth at 550nm" unit="-" /> 339 339 <field id="od865aer" long_name="Total aerosol optical depth at 870nm" unit="-" /> 340 <field id="abs visaer" long_name="Absorption aerosol visible optical depth" unit="-" />340 <field id="abs550aer" long_name="Absorption aerosol optical depth at 550nm" unit="-" /> 341 341 <field id="od550lt1aer" long_name="Fine mode optical depth" unit="-" /> 342 342 <field id="sconcso4" long_name="Surface Concentration of Sulfate " unit="kg/m3" /> -
LMDZ5/branches/testing/DefLists/file_def_histLES_lmdz.xml
r2839 r2845 337 337 <field field_ref="od550aer" level="10" /> 338 338 <field field_ref="od865aer" level="10" /> 339 <field field_ref="abs visaer" level="10" />339 <field field_ref="abs550aer" level="10" /> 340 340 <field field_ref="od550lt1aer" level="10" /> 341 341 <field field_ref="sconcso4" level="10" /> -
LMDZ5/branches/testing/DefLists/file_def_histday_lmdz.xml
r2839 r2845 343 343 <field field_ref="od550aer" level="6" /> 344 344 <field field_ref="od865aer" level="6" /> 345 <field field_ref="abs visaer" level="6" />345 <field field_ref="abs550aer" level="6" /> 346 346 <field field_ref="od550lt1aer" level="6" /> 347 347 <field field_ref="sconcso4" level="6" /> -
LMDZ5/branches/testing/DefLists/file_def_histhf_lmdz.xml
r2839 r2845 337 337 <field field_ref="od550aer" level="10" /> 338 338 <field field_ref="od865aer" level="10" /> 339 <field field_ref="abs visaer" level="10" />339 <field field_ref="abs550aer" level="10" /> 340 340 <field field_ref="od550lt1aer" level="10" /> 341 341 <field field_ref="sconcso4" level="10" /> -
LMDZ5/branches/testing/DefLists/file_def_histins_lmdz.xml
r2839 r2845 337 337 <field field_ref="od550aer" level="10" /> 338 338 <field field_ref="od865aer" level="10" /> 339 <field field_ref="abs visaer" level="10" />339 <field field_ref="abs550aer" level="10" /> 340 340 <field field_ref="od550lt1aer" level="10" /> 341 341 <field field_ref="sconcso4" level="10" /> -
LMDZ5/branches/testing/DefLists/file_def_histmth_lmdz.xml
r2839 r2845 363 363 <field field_ref="od550aer" level="2" /> 364 364 <field field_ref="od865aer" level="2" /> 365 <field field_ref="abs visaer" level="2" />365 <field field_ref="abs550aer" level="2" /> 366 366 <field field_ref="od550lt1aer" level="2" /> 367 367 <field field_ref="sconcso4" level="2" /> -
LMDZ5/branches/testing/DefLists/file_def_histstn_lmdz.xml
r2839 r2845 337 337 <field field_ref="od550aer" level="10" /> 338 338 <field field_ref="od865aer" level="10" /> 339 <field field_ref="abs visaer" level="10" />339 <field field_ref="abs550aer" level="10" /> 340 340 <field field_ref="od550lt1aer" level="10" /> 341 341 <field field_ref="sconcso4" level="10" /> -
LMDZ5/branches/testing/libf/phylmd/aeropt_2bands.F90
r2641 r2845 10 10 USE dimphy 11 11 USE aero_mod 12 USE phys_local_var_mod, only: absvisaer13 12 USE pres2lev_mod 14 13 … … 1127 1126 ENDDO 1128 1127 1129 inu=1 ! visible waveband1130 mrfspecies=2 ! total aerosol AER1131 DO i=1, KLON1132 absvisaer(i)=SUM((1-piz_allaer(i,:,mrfspecies,inu))*tau_allaer(i,:,mrfspecies,inu))1133 ENDDO1134 1135 1128 DEALLOCATE(aerosol_name) 1136 1129 -
LMDZ5/branches/testing/libf/phylmd/phys_local_var_mod.F90
r2839 r2845 167 167 REAL, SAVE, ALLOCATABLE :: od550aer(:) 168 168 !$OMP THREADPRIVATE(od550aer) 169 REAL, SAVE, ALLOCATABLE :: abs visaer(:)170 !$OMP THREADPRIVATE(abs visaer)169 REAL, SAVE, ALLOCATABLE :: abs550aer(:) 170 !$OMP THREADPRIVATE(abs550aer) 171 171 REAL, SAVE, ALLOCATABLE :: od865aer(:) 172 172 !$OMP THREADPRIVATE(od865aer) … … 579 579 allocate(od550aer(klon)) 580 580 allocate(od865aer(klon)) 581 allocate(abs visaer(klon))581 allocate(abs550aer(klon)) 582 582 allocate(ec550aer(klon,klev)) 583 583 allocate(od550lt1aer(klon)) … … 838 838 deallocate(od550aer) 839 839 deallocate(od865aer) 840 deallocate(abs visaer)840 deallocate(abs550aer) 841 841 deallocate(ec550aer) 842 842 deallocate(od550lt1aer) -
LMDZ5/branches/testing/libf/phylmd/phys_output_ctrlout_mod.F90
r2839 r2845 1100 1100 TYPE(ctrl_out), SAVE :: o_od865aer = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11, 11/), & 1101 1101 'od865aer', 'Total aerosol optical depth at 870nm', '-', (/ ('', i=1, 10) /)) 1102 TYPE(ctrl_out), SAVE :: o_abs visaer = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11, 11/), &1103 'abs visaer', 'Absorption aerosol visible optical depth', '-', (/ ('', i=1, 10) /))1102 TYPE(ctrl_out), SAVE :: o_abs550aer = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11, 11/), & 1103 'abs550aer', 'Absorption aerosol optical depth at 550nm', '-', (/ ('', i=1, 10) /)) 1104 1104 TYPE(ctrl_out), SAVE :: o_od550lt1aer = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11, 11/), & 1105 1105 'od550lt1aer', 'Fine mode optical depth', '-', (/ ('', i=1, 10) /)) -
LMDZ5/branches/testing/libf/phylmd/phys_output_write_mod.F90
r2839 r2845 100 100 o_solldown, o_dtsvdfo, o_dtsvdft, & 101 101 o_dtsvdfg, o_dtsvdfi, o_z0m, o_z0h, o_od443aer, o_od550aer, & 102 o_od865aer, o_abs visaer, o_od550lt1aer, &102 o_od865aer, o_abs550aer, o_od550lt1aer, & 103 103 o_sconcso4, o_sconcno3, o_sconcoa, o_sconcbc, & 104 104 o_sconcss, o_sconcdust, o_concso4, o_concno3, & … … 253 253 pmflxr, pmflxs, prfl, psfl, re, fl, rh2m, & 254 254 qsat2m, tpote, tpot, d_ts, od443aer, od550aer, & 255 od865aer, abs visaer, od550lt1aer, sconcso4, sconcno3, &255 od865aer, abs550aer, od550lt1aer, sconcso4, sconcno3, & 256 256 sconcoa, sconcbc, sconcss, sconcdust, concso4, concno3, & 257 257 concoa, concbc, concss, concdust, loadso4, & … … 1173 1173 CALL histwrite_phy(o_od550aer, od550aer) 1174 1174 CALL histwrite_phy(o_od865aer, od865aer) 1175 CALL histwrite_phy(o_abs visaer, absvisaer)1175 CALL histwrite_phy(o_abs550aer, abs550aer) 1176 1176 CALL histwrite_phy(o_od550lt1aer, od550lt1aer) 1177 1177 CALL histwrite_phy(o_sconcso4, sconcso4) -
LMDZ5/branches/testing/libf/phylmd/readaerosol.F90
r2839 r2845 42 42 REAL, POINTER, DIMENSION(:,:,:) :: pt_2 43 43 REAL, DIMENSION(klon,12) :: psurf2, load2 44 REAL :: p0 ! Reference pressure45 44 INTEGER :: iyr1, iyr2, klev_src2 46 45 INTEGER :: it, k, i … … 58 57 ! get_aero_fromfile returns pt_out allocated and initialized with data for 12 month 59 58 ! pt_out has dimensions (klon, klev_src, 12) 60 CALL get_aero_fromfile(name_aero, cyear, filename, klev_src, pt_ap, pt_b, p 0, pt_out, psurf, load)59 CALL get_aero_fromfile(name_aero, cyear, filename, klev_src, pt_ap, pt_b, pt_out, psurf, load) 61 60 62 61 … … 67 66 ! get_aero_fromfile returns pt_out allocated and initialized with data for 12 month 68 67 ! pt_out has dimensions (klon, klev_src, 12) 69 CALL get_aero_fromfile(name_aero, cyear, filename, klev_src, pt_ap, pt_b, p 0, pt_out, psurf, load)68 CALL get_aero_fromfile(name_aero, cyear, filename, klev_src, pt_ap, pt_b, pt_out, psurf, load) 70 69 71 70 ELSE IF (type == 'annuel') THEN … … 76 75 ! get_aero_fromfile returns pt_out allocated and initialized with data for nbr_tsteps month 77 76 ! pt_out has dimensions (klon, klev_src, 12) 78 CALL get_aero_fromfile(name_aero, cyear, filename, klev_src, pt_ap, pt_b, p 0, pt_out, psurf, load)77 CALL get_aero_fromfile(name_aero, cyear, filename, klev_src, pt_ap, pt_b, pt_out, psurf, load) 79 78 80 79 ELSE IF (type == 'scenario') THEN … … 86 85 ! get_aero_fromfile returns pt_out allocated and initialized with data for 12 month 87 86 ! pt_out has dimensions (klon, klev_src, 12) 88 CALL get_aero_fromfile(name_aero, cyear, filename, klev_src, pt_ap, pt_b, p 0, pt_out, psurf, load)87 CALL get_aero_fromfile(name_aero, cyear, filename, klev_src, pt_ap, pt_b, pt_out, psurf, load) 89 88 90 89 ELSE IF (iyr_in .GE. 2100) THEN … … 93 92 ! get_aero_fromfile returns pt_out allocated and initialized with data for 12 month 94 93 ! pt_out has dimensions (klon, klev_src, 12) 95 CALL get_aero_fromfile(name_aero, cyear, filename, klev_src, pt_ap, pt_b, p 0, pt_out, psurf, load)94 CALL get_aero_fromfile(name_aero, cyear, filename, klev_src, pt_ap, pt_b, pt_out, psurf, load) 96 95 97 96 ELSE … … 113 112 ! get_aero_fromfile returns pt_out allocated and initialized with data for 12 month 114 113 ! pt_out has dimensions (klon, klev_src, 12) 115 CALL get_aero_fromfile(name_aero, cyear, filename, klev_src, pt_ap, pt_b, p 0, pt_out, psurf, load)114 CALL get_aero_fromfile(name_aero, cyear, filename, klev_src, pt_ap, pt_b, pt_out, psurf, load) 116 115 117 116 ! If to read two decades: … … 125 124 ! get_aero_fromfile returns pt_2 allocated and initialized with data for 12 month 126 125 ! pt_2 has dimensions (klon, klev_src, 12) 127 CALL get_aero_fromfile(name_aero, cyear, filename, klev_src2, pt_ap, pt_b, p 0, pt_2, psurf2, load2)126 CALL get_aero_fromfile(name_aero, cyear, filename, klev_src2, pt_ap, pt_b, pt_2, psurf2, load2) 128 127 ! Test for same number of vertical levels 129 128 IF (klev_src /= klev_src2) THEN … … 168 167 169 168 170 SUBROUTINE get_aero_fromfile(varname, cyr, filename, klev_src, pt_ap, pt_b, p 0, pt_year, psurf_out, load_out)169 SUBROUTINE get_aero_fromfile(varname, cyr, filename, klev_src, pt_ap, pt_b, pt_year, psurf_out, load_out) 171 170 !**************************************************************************************** 172 171 ! Read 12 month aerosol from file and distribute to local process on physical grid. … … 205 204 REAL, POINTER, DIMENSION(:) :: pt_ap ! Pointer for describing the vertical levels 206 205 REAL, POINTER, DIMENSION(:) :: pt_b ! Pointer for describing the vertical levels 207 REAL :: p0 ! Reference pressure value208 206 REAL, POINTER, DIMENSION(:,:,:) :: pt_year ! Pointer-variabale from file, 12 month, grid : klon,klev_src 209 207 REAL, DIMENSION(klon,12), INTENT(OUT) :: psurf_out ! Surface pression for 12 months … … 292 290 IF (ierr /= NF90_NOERR) THEN 293 291 ! Coordinate axe lev not found. Check for presnivs. 294 ierr = nf90_inq_dimid(ncid, ' PRESNIVS', dimid)292 ierr = nf90_inq_dimid(ncid, 'presnivs', dimid) 295 293 IF (ierr /= NF90_NOERR) THEN 296 ! Dimension PRESNIVS not found either 297 CALL abort_physic('get_aero_fromfile', 'dimension lev or presnivs not in file',1) 298 ELSE 299 ! Old file found 300 new_file=.FALSE. 301 WRITE(lunout,*) 'Vertical interpolation for ',TRIM(varname),' will not be done' 302 END IF 294 ierr = nf90_inq_dimid(ncid, 'PRESNIVS', dimid) 295 IF (ierr /= NF90_NOERR) THEN 296 ! Dimension PRESNIVS not found either 297 CALL abort_physic('get_aero_fromfile', 'dimension lev,PRESNIVS or presnivs not in file',1) 298 ELSE 299 ! Old file found 300 new_file=.FALSE. 301 WRITE(lunout,*) 'Vertical interpolation for ',TRIM(varname),' will not be done' 302 END IF 303 ELSE 304 ! New file found 305 new_file=.TRUE. 306 WRITE(lunout,*) 'Vertical interpolation for ',TRIM(varname),' will be done' 307 ENDIF 303 308 ELSE 304 309 ! New file found … … 328 333 !************************************************************************************************** 329 334 ierr = nf90_inq_dimid(ncid, 'TIME',dimid) 330 CALL check_err( nf90_inquire_dimension(ncid, dimid, len = nbr_tsteps),"pb inq dim TIME" ) 335 if (ierr /= NF90_NOERR) THEN 336 ierr = nf90_inq_dimid(ncid, 'time_counter', dimid) 337 ENDIF 338 CALL check_err( nf90_inquire_dimension(ncid, dimid, len = nbr_tsteps),"pb inq dim TIME or time_counter" ) 331 339 ! IF (nbr_tsteps /= 12 .AND. nbr_tsteps /= 14) THEN 332 340 IF (nbr_tsteps /= 12 ) THEN … … 382 390 CALL check_err( nf90_get_var(ncid, varid, pt_b),"pb get var b" ) 383 391 384 ! ++) Read p0 : reference pressure385 !****************************************************************************************386 ! Get variable id387 CALL check_err( nf90_inq_varid(ncid, "p0", varid),"pb inq var p0" )388 ! Get the variable389 CALL check_err( nf90_get_var(ncid, varid, p0),"pb get var p0" )390 392 391 393 -
LMDZ5/branches/testing/libf/phylmd/readaerosol_interp.F90
r2542 r2845 162 162 NULLIFY(pt_ap) 163 163 NULLIFY(pt_b) 164 END 164 ENDIF 165 165 166 166 !**************************************************************************************** … … 187 187 filename='aerosols' 188 188 type='annuel' 189 END 189 ENDIF 190 190 ELSE IF (aer_type == 'mix2') THEN 191 191 ! Special case using a mix of decenal sulfate file and natrual aerosols … … 196 196 filename='aerosols' 197 197 type='preind' 198 END 198 ENDIF 199 199 ELSE IF (aer_type == 'mix3') THEN 200 200 ! Special case using a mix of annual sulfate file and natrual aerosols … … 205 205 filename='aerosols' 206 206 type='preind' 207 END 207 ENDIF 208 208 ELSE 209 209 CALL abort_physic('readaerosol_interp', 'this aer_type not supported',1) 210 END 210 ENDIF 211 211 212 212 CALL readaerosol(name_aero(id_aero), type, filename, iyr, klev_src, pt_ap, pt_b, pt_tmp, & … … 215 215 ALLOCATE(var_year(klon, klev_src, 12, naero_spc), stat=ierr) 216 216 IF (ierr /= 0) CALL abort_physic('readaerosol_interp', 'pb in allocation 5',1) 217 END 217 ENDIF 218 218 var_year(:,:,:,id_aero) = pt_tmp(:,:,:) 219 219 … … 229 229 WRITE(lunout,*) 'Aerosol : ', name_aero(id_aero) 230 230 CALL abort_physic('readaerosol_interp','Differnt vertical axes in aerosol forcing files',1) 231 END 231 ENDIF 232 232 233 233 IF (.NOT. ALLOCATED(pi_var_year)) THEN 234 234 ALLOCATE(pi_var_year(klon, klev_src, 12, naero_spc), stat=ierr) 235 235 IF (ierr /= 0) CALL abort_physic('readaerosol_interp', 'pb in allocation 6',1) 236 END 236 ENDIF 237 237 pi_var_year(:,:,:,id_aero) = pt_tmp(:,:,:) 238 238 … … 244 244 CALL writefield_phy('load_year_src',load_year(:,:,id_aero),1) 245 245 CALL writefield_phy('pi_load_year_src',pi_load_year(:,:,id_aero),1) 246 END 246 ENDIF 247 247 248 248 ! Pointer no more useful, deallocate. … … 258 258 WRITE(lunout,*) 'Warning! All forcing files for the same aerosol must have the same structure' 259 259 CALL abort_physic('readaerosol_interp', 'The aerosol files have not the same format',1) 260 END 260 ENDIF 261 261 262 262 IF (klev /= klev_src) THEN 263 263 WRITE(lunout,*) 'Old format of aerosol file do not allowed vertical interpolation' 264 264 CALL abort_physic('readaerosol_interp', 'Old aerosol file not possible',1) 265 END 265 ENDIF 266 266 267 267 ELSE 268 268 vert_interp = .TRUE. 269 END 269 ENDIF 270 270 271 271 ! Calendar initialisation … … 286 286 endif 287 287 288 END 288 ENDIF ! IF ( (first .OR. iday==0) .AND. lnewday ) THEN 289 289 290 290 !**************************************************************************************** … … 309 309 ! the month is january, thus the month before december 310 310 im2=12 311 END 311 ENDIF 312 312 ELSE 313 313 ! the second half of the month … … 319 319 im2=1 320 320 ENDIF 321 END 321 ENDIF 322 322 ELSE IF (nbr_tsteps == 14) then 323 323 im = im + 1 … … 332 332 day1 = month_mid(im) 333 333 day2 = month_mid(im2) 334 END 334 ENDIF 335 335 ELSE 336 336 CALL abort_physic('readaerosol_interp', 'number of months undefined',1) … … 358 358 pi_var_year(i,k,im2,id_aero) - (jDay-day2)/(day1-day2) * & 359 359 (pi_var_year(i,k,im2,id_aero) - pi_var_year(i,k,im,id_aero)) 360 END 361 END 360 ENDDO 361 ENDDO 362 362 363 363 ! Time interpolation for pressure at surface, still on vertical source grid … … 370 370 pi_psurf_year(i,im2,id_aero) - (jDay-day2)/(day1-day2) * & 371 371 (pi_psurf_year(i,im2,id_aero) - pi_psurf_year(i,im,id_aero)) 372 END 372 ENDDO 373 373 374 374 ! Time interpolation for the load, still on vertical source grid … … 381 381 pi_load_year(i,im2,id_aero) - (jDay-day2)/(day1-day2) * & 382 382 (pi_load_year(i,im2,id_aero) - pi_load_year(i,im,id_aero)) 383 END 383 ENDDO 384 384 385 385 !**************************************************************************************** … … 397 397 DO i = 1, klon 398 398 pplay_src(i,k)= pt_ap(k) + pt_b(k)*psurf_day(i) 399 END 400 END 399 ENDDO 400 ENDDO 401 401 402 402 IF (debug) THEN … … 406 406 CALL writefield_phy('day_src',tmp1,klev_src) 407 407 CALL writefield_phy('pi_day_src',tmp2,klev_src) 408 END 408 ENDIF 409 409 410 410 ! b) vertical interpolation on pressure leveles … … 422 422 DO i = 1, klon 423 423 delp(i,k) = paprs(i,k) - paprs (i,k+1) 424 END 425 END 424 ENDDO 425 ENDDO 426 426 427 427 ! Find the mass load in the actual pillar, on target grid … … 431 431 zrho = pplay(i,k)/t_seri(i,k)/RD ! [kg/m3] 432 432 volm = var_day(i,k,id_aero)*1.E-9/zrho ! [kg/kg] 433 load_tgt(i) = load_tgt(i) + 1/RG * volm *delp(i,k)434 END 435 END 433 load_tgt(i) = load_tgt(i) + volm *delp(i,k)/RG 434 ENDDO 435 ENDDO 436 436 437 437 ! Adjust, uniform 438 438 DO k = 1, klev 439 439 DO i = 1, klon 440 var_day(i,k,id_aero) = var_day(i,k,id_aero)*load_src(i)/ load_tgt(i)441 END 442 END 440 var_day(i,k,id_aero) = var_day(i,k,id_aero)*load_src(i)/max(1.e-30,load_tgt(i)) 441 ENDDO 442 ENDDO 443 443 444 444 IF (debug) THEN … … 448 448 zrho = pplay(i,k)/t_seri(i,k)/RD ! [kg/m3] 449 449 volm = var_day(i,k,id_aero)*1.E-9/zrho ! [kg/kg] 450 load_tgt_test(i) = load_tgt_test(i) + 1/RG * volm*delp(i,k)451 END 452 END 450 load_tgt_test(i) = load_tgt_test(i) + volm*delp(i,k)/RG 451 ENDDO 452 ENDDO 453 453 454 454 CALL writefield_phy('day_tgt2',var_day(:,:,id_aero),klev) … … 456 456 CALL writefield_phy('load_tgt_test',load_tgt_test(:),1) 457 457 CALL writefield_phy('load_src',load_src(:),1) 458 END 458 ENDIF 459 459 460 460 ! - Interpolate variable tmp2 (source grid) to pi_var_day (target grid) … … 464 464 DO i = 1, klon 465 465 pplay_src(i,k)= pt_ap(k) + pt_b(k)*pi_psurf_day(i) 466 END 467 END 466 ENDDO 467 ENDDO 468 468 469 469 IF (debug) THEN 470 470 CALL writefield_phy('pi_psurf_day_src',pi_psurf_day(:),1) 471 471 CALL writefield_phy('pi_pplay_src',pplay_src(:,:),klev_src) 472 END 472 ENDIF 473 473 474 474 ! b) vertical interpolation on pressure leveles … … 488 488 zrho = pplay(i,k)/t_seri(i,k)/RD ! [kg/m3] 489 489 volm = pi_var_day(i,k,id_aero)*1.E-9/zrho ! [kg/kg] 490 load_tgt(i) = load_tgt(i) + 1/RG * volm * delp(i,k)491 END 492 END 490 load_tgt(i) = load_tgt(i) + volm*delp(i,k)/RG 491 ENDDO 492 ENDDO 493 493 494 494 DO k = 1, klev 495 495 DO i = 1, klon 496 pi_var_day(i,k,id_aero) = pi_var_day(i,k,id_aero)*pi_load_src(i)/ load_tgt(i)497 END 498 END 496 pi_var_day(i,k,id_aero) = pi_var_day(i,k,id_aero)*pi_load_src(i)/max(1.e-30,load_tgt(i)) 497 ENDDO 498 ENDDO 499 499 500 500 IF (debug) THEN … … 504 504 zrho = pplay(i,k)/t_seri(i,k)/RD ! [kg/m3] 505 505 volm = pi_var_day(i,k,id_aero)*1.E-9/zrho ! [kg/kg] 506 load_tgt_test(i) = load_tgt_test(i) + 1/RG * volm * delp(i,k)507 END 508 END 506 load_tgt_test(i) = load_tgt_test(i) + volm*delp(i,k)/RG 507 ENDDO 508 ENDDO 509 509 CALL writefield_phy('pi_day_tgt2',pi_var_day(:,:,id_aero),klev) 510 510 CALL writefield_phy('pi_load_tgt',load_tgt(:),1) 511 511 CALL writefield_phy('pi_load_tgt_test',load_tgt_test(:),1) 512 512 CALL writefield_phy('pi_load_src',pi_load_src(:),1) 513 END 513 ENDIF 514 514 515 515 … … 519 519 pi_var_day(:,:,id_aero) = tmp2(:,:) 520 520 521 END 521 ENDIF ! vert_interp 522 522 523 523 … … 539 539 trim(name_aero(id_aero)),'(i,k,im)=', & 540 540 var_year(i,k,im2,id_aero) - var_year(i,k,im,id_aero) 541 END 541 ENDIF 542 542 WRITE(lunout,*) 'stop for aerosol : ',name_aero(id_aero) 543 543 WRITE(lunout,*) 'day1, day2, jDay = ', day1, day2, jDay 544 544 CALL abort_physic('readaerosol_interp','Error in interpolation 1',1) 545 END 546 END 547 END 548 END 545 ENDIF 546 ENDDO 547 ENDDO 548 ENDIF 549 549 550 550 IF (MINVAL(pi_var_day(:,:,id_aero)) < 0. ) THEN … … 558 558 trim(name_aero(id_aero)),'(i,k,im)=', & 559 559 pi_var_year(i,k,im2,id_aero) - pi_var_year(i,k,im,id_aero) 560 END 560 ENDIF 561 561 562 562 WRITE(lunout,*) 'stop for aerosol : ',name_aero(id_aero) 563 563 CALL abort_physic('readaerosol_interp','Error in interpolation 2',1) 564 END 565 END 566 END 567 END 568 569 END 564 ENDIF 565 ENDDO 566 ENDDO 567 ENDIF 568 569 ENDIF ! lnewday 570 570 571 571 !**************************************************************************************** -
LMDZ5/branches/testing/libf/phylmd/rrtm/aeropt_5wv_rrtm.F90
r2839 r2845 12 12 USE DIMPHY 13 13 USE aero_mod 14 USE phys_local_var_mod, ONLY: od443aer,od550aer,od865aer,ec550aer,od550lt1aer 14 USE phys_local_var_mod, ONLY: od443aer,od550aer,od865aer,ec550aer,od550lt1aer,abs550aer 15 15 USE YOMCST, ONLY: RD,RG 16 16 … … 68 68 REAL, DIMENSION(klon,nwave,naero_tot), INTENT(OUT) :: tausum 69 69 REAL, DIMENSION(klon,klev,nwave,naero_tot), INTENT(OUT) :: tau 70 71 70 ! 72 71 ! Local … … 95 94 REAL :: delta(klon,klev), rh(klon,klev) 96 95 REAL :: tau_ae5wv_int ! Intermediate computation of epaisseur optique aerosol 96 REAL :: abs_ae5wv_int ! Intermediate computation of epaisseur optique aerosol 97 97 REAL :: od670aer(klon) ! epaisseur optique aerosol extinction 670 nm 98 98 REAL :: fac … … 104 104 105 105 REAL :: alpha_aers_5wv(nbre_RH,las,naero_soluble) ! Ext. coeff. ** m2/g 106 REAL :: abs_aers_5wv(nbre_RH,las,naero_soluble) ! Abs. coeff. ** m2/g 106 107 REAL :: alpha_aeri_5wv(las,naero_insoluble) ! Ext. coeff. ** m2/g 108 REAL :: abs_aeri_5wv(las,naero_insoluble) ! Abs. coeff. ** m2/g 107 109 108 110 ! … … 117 119 ! Geophys. Res. Atmos. Added by R. Wang and OB 118 120 REAL :: alpha_MG_5wv(nbre_RH,las,nbclassbc) 121 REAL :: abs_MG_5wv(nbre_RH,las,nbclassbc) 119 122 120 123 ! … … 191 194 ! Nitrate insoluble 192 195 0.726, 0.753, 0.780, 0.797, 0.811 / 196 ! 197 DATA abs_aers_5wv/ & 198 ! absorption BC Accumulation Soluble (AS) 199 2.861, 2.861, 2.861, 2.861, 2.861, 3.089, 3.316, 3.767, 4.167, 4.211, 4.255, 4.647, & 200 2.806, 2.806, 2.806, 2.806, 2.806, 3.010, 3.209, 3.597, 3.935, 3.971, 4.008, 4.333, & 201 2.674, 2.674, 2.674, 2.674, 2.674, 2.847, 3.015, 3.335, 3.608, 3.638, 3.667, 3.924, & 202 2.566, 2.566, 2.566, 2.566, 2.566, 2.723, 2.872, 3.155, 3.393, 3.419, 3.444, 3.667, & 203 2.444, 2.444, 2.444, 2.444, 2.444, 2.585, 2.719, 2.968, 3.176, 3.199, 3.221, 3.413, & 204 ! absorption POM Accumulation Soluble (AS) 205 0.170, 0.170, 0.170, 0.170, 0.170, 0.167, 0.165, 0.162, 0.160, 0.160, 0.159, 0.158, & 206 0.145, 0.145, 0.145, 0.145, 0.145, 0.143, 0.142, 0.139, 0.138, 0.138, 0.138, 0.137, & 207 0.125, 0.125, 0.125, 0.125, 0.125, 0.123, 0.122, 0.120, 0.119, 0.119, 0.119, 0.119, & 208 0.131, 0.131, 0.131, 0.131, 0.131, 0.130, 0.129, 0.127, 0.127, 0.127, 0.127, 0.127, & 209 0.133, 0.133, 0.133, 0.133, 0.133, 0.132, 0.131, 0.131, 0.131, 0.131, 0.131, 0.131, & 210 ! absorption Sulfate Coarse Soluble (CS) 211 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 212 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 213 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 214 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 215 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 216 !-- Absorption Sulfate Accumulation (BC content=0) 217 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 218 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 219 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 220 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 221 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 222 ! absorption Seasalt Super Coarse Soluble (SS) 223 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 224 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 225 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 226 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 227 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 228 ! absorption Seasalt Coarse Soluble (CS) 229 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 230 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 231 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 232 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 233 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 234 ! absorption Seasalt Accumulation Soluble (AS) 235 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 236 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 237 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 238 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 239 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 240 ! absorption Nitrate Coarse Soluble (CS) 241 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 242 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 243 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 244 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 245 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 246 ! absorption Nitrate Accumulation Soluble (AS) 247 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 248 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 249 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 250 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 251 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000 / 252 253 DATA abs_aeri_5wv/ & 254 ! absorption Dust insoluble 255 0.081, 0.048, 0.032, 0.027, 0.019, & 256 ! absorption BC insoluble 257 2.861, 2.806, 2.674, 2.566, 2.444, & 258 ! absorption POM insoluble 259 0.170, 0.145, 0.125, 0.131, 0.133, & 260 ! absorption Nitrate insoluble 261 0.000, 0.000, 0.000, 0.000, 0.000 / 193 262 194 263 ! Added by R. Wang (July 31 2016) … … 232 301 4.505, 4.505, 4.505, 4.505, 4.520, 4.444, 4.356, 4.243, 4.089, 3.997, 3.912, 4.179, & 233 302 4.295, 4.295, 4.295, 4.295, 4.307, 4.239, 4.157, 4.045, 3.876, 3.757, 3.602, 3.569 / 303 ! 304 DATA abs_MG_5wv/ & 305 !--BC content=0.001 306 13.416, 13.416, 13.416, 13.416, 12.041, 11.928, 11.793, 11.680, 11.488, 11.367, 11.200, 10.968,& 307 10.085, 10.085, 10.085, 10.085, 9.116, 9.061, 8.977, 8.901, 8.778, 8.712, 8.617, 8.474, & 308 7.491, 7.491, 7.491, 7.491, 6.836, 6.808, 6.764, 6.719, 6.659, 6.613, 6.568, 6.508, & 309 6.269, 6.269, 6.269, 6.269, 5.774, 5.761, 5.734, 5.706, 5.665, 5.637, 5.615, 5.579, & 310 5.300, 5.300, 5.300, 5.300, 4.919, 4.913, 4.899, 4.882, 4.863, 4.847, 4.831, 4.825, & 311 !--BC content=0.010 312 12.829, 12.829, 12.829, 12.829, 11.692, 11.618, 11.523, 11.419, 11.278, 11.192, 11.055, 10.850,& 313 9.766, 9.766, 9.766, 9.766, 8.932, 8.890, 8.828, 8.762, 8.671, 8.617, 8.528, 8.411, & 314 7.316, 7.316, 7.316, 7.316, 6.739, 6.716, 6.684, 6.643, 6.597, 6.561, 6.517, 6.465, & 315 6.154, 6.154, 6.154, 6.154, 5.708, 5.696, 5.676, 5.651, 5.624, 5.602, 5.576, 5.543, & 316 5.216, 5.216, 5.216, 5.216, 4.874, 4.870, 4.860, 4.848, 4.835, 4.823, 4.810, 4.800, & 317 !--BC content=0.020 318 12.290, 12.290, 12.290, 12.290, 11.358, 11.315, 11.248, 11.175, 11.073, 11.008, 10.902, 10.743,& 319 9.455, 9.455, 9.455, 9.455, 8.743, 8.716, 8.671, 8.622, 8.556, 8.513, 8.442, 8.349, & 320 7.142, 7.142, 7.142, 7.142, 6.635, 6.621, 6.596, 6.567, 6.532, 6.503, 6.469, 6.428, & 321 6.033, 6.033, 6.033, 6.033, 5.634, 5.629, 5.615, 5.598, 5.578, 5.561, 5.541, 5.517, & 322 5.130, 5.130, 5.130, 5.130, 4.821, 4.821, 4.816, 4.809, 4.801, 4.794, 4.784, 4.781, & 323 !--BC content=0.050 324 10.989, 10.989, 10.989, 10.989, 10.504, 10.523, 10.528, 10.528, 10.522, 10.512, 10.485, 10.445,& 325 8.671, 8.671, 8.671, 8.671, 8.239, 8.249, 8.248, 8.242, 8.233, 8.221, 8.199, 8.176, & 326 6.688, 6.688, 6.688, 6.688, 6.346, 6.354, 6.353, 6.350, 6.346, 6.339, 6.328, 6.322, & 327 5.707, 5.707, 5.707, 5.707, 5.427, 5.437, 5.440, 5.441, 5.444, 5.442, 5.438, 5.444, & 328 4.894, 4.894, 4.894, 4.894, 4.671, 4.682, 4.688, 4.694, 4.702, 4.705, 4.709, 4.726, & 329 !--BC content=0.100 330 9.397, 9.397, 9.397, 9.397, 9.357, 9.443, 9.525, 9.615, 9.725, 9.788, 9.866, 9.991, & 331 7.654, 7.654, 7.654, 7.654, 7.527, 7.581, 7.629, 7.682, 7.746, 7.781, 7.825, 7.901, & 332 6.070, 6.070, 6.070, 6.070, 5.922, 5.956, 5.986, 6.018, 6.057, 6.079, 6.105, 6.156, & 333 5.252, 5.252, 5.252, 5.252, 5.117, 5.146, 5.171, 5.198, 5.231, 5.250, 5.274, 5.322, & 334 4.557, 4.557, 4.557, 4.557, 4.441, 4.466, 4.489, 4.513, 4.544, 4.562, 4.586, 4.634, & 335 !--BC content=0.200 336 7.300, 7.300, 7.300, 7.300, 7.649, 7.799, 7.960, 8.149, 8.397, 8.559, 8.779, 9.149, & 337 6.225, 6.225, 6.225, 6.225, 6.403, 6.504, 6.610, 6.733, 6.893, 6.996, 7.136, 7.372, & 338 5.145, 5.145, 5.145, 5.145, 5.216, 5.282, 5.350, 5.429, 5.530, 5.595, 5.682, 5.833, & 339 4.550, 4.550, 4.550, 4.550, 4.587, 4.640, 4.694, 4.756, 4.836, 4.887, 4.957, 5.079, & 340 4.023, 4.023, 4.023, 4.023, 4.041, 4.084, 4.128, 4.178, 4.244, 4.286, 4.344, 4.447 / 234 341 ! 235 342 ! Initialisations … … 237 344 tausum(:,:,:) = 0. 238 345 tau(:,:,:,:)=0. 346 347 abs550aer(:)=0.0 239 348 240 349 DO k=1, klev … … 396 505 ENDIF 397 506 398 tau_ae5wv_int = alpha_MG_5wv(RH_num(i,k),la,classbc)+DELTA(i,k)* & 399 (alpha_MG_5wv(RH_num(i,k)+1,la,classbc) - & 400 alpha_MG_5wv(RH_num(i,k),la,classbc)) 401 tau(i,k,la,aerindex) = m_allaer(i,k,aerindex)/1.e6*zdh(i,k)*tau_ae5wv_int*fac 402 tausum(i,la,aerindex)=tausum(i,la,aerindex)+tau(i,k,la,aerindex) 507 tau_ae5wv_int = alpha_MG_5wv(RH_num(i,k),la,classbc)+DELTA(i,k)* & 508 (alpha_MG_5wv(RH_num(i,k)+1,la,classbc) - & 509 alpha_MG_5wv(RH_num(i,k),la,classbc)) 510 tau(i,k,la,aerindex) = m_allaer(i,k,aerindex)/1.e6*zdh(i,k)*tau_ae5wv_int*fac 511 tausum(i,la,aerindex)=tausum(i,la,aerindex)+tau(i,k,la,aerindex) 512 513 IF (la.EQ.la550) THEN 514 abs_ae5wv_int = abs_MG_5wv(RH_num(i,k),la,classbc)+DELTA(i,k)* & 515 (abs_MG_5wv(RH_num(i,k)+1,la,classbc) - & 516 abs_MG_5wv(RH_num(i,k),la,classbc)) 517 abs550aer(i)=abs550aer(i)+m_allaer(i,k,aerindex)/1.e6*zdh(i,k)*abs_ae5wv_int*fac 518 ENDIF 519 403 520 ENDDO 404 521 ENDDO … … 414 531 tau(i,k,la,aerindex) = m_allaer(i,k,aerindex)/1.e6*zdh(i,k)*tau_ae5wv_int*fac 415 532 tausum(i,la,aerindex)=tausum(i,la,aerindex)+tau(i,k,la,aerindex) 533 534 IF (la.EQ.la550) THEN 535 abs_ae5wv_int = abs_aers_5wv(RH_num(i,k),la,spsol)+DELTA(i,k)* & 536 (abs_aers_5wv(RH_num(i,k)+1,la,spsol) - & 537 abs_aers_5wv(RH_num(i,k),la,spsol)) 538 abs550aer(i)=abs550aer(i)+m_allaer(i,k,aerindex)/1.e6*zdh(i,k)*abs_ae5wv_int*fac 539 ENDIF 540 416 541 ENDDO 417 542 ENDDO … … 424 549 DO k=1, klev 425 550 DO i=1, klon 551 426 552 tau_ae5wv_int = alpha_aeri_5wv(la,spinsol) 427 553 tau(i,k,la,aerindex) = m_allaer(i,k,aerindex)/1.e6*zdh(i,k)*tau_ae5wv_int*fac 428 554 tausum(i,la,aerindex)= tausum(i,la,aerindex)+tau(i,k,la,aerindex) 555 556 IF (la.EQ.la550) THEN 557 abs_ae5wv_int = abs_aeri_5wv(la,spsol) 558 abs550aer(i)=abs550aer(i)+m_allaer(i,k,aerindex)/1.e6*zdh(i,k)*abs_ae5wv_int*fac 559 ENDIF 560 429 561 ENDDO 430 562 ENDDO -
LMDZ5/branches/testing/libf/phylmd/rrtm/aeropt_6bands_rrtm.F90
r2839 r2845 10 10 USE dimphy 11 11 USE aero_mod 12 USE phys_local_var_mod, only: absvisaer13 12 USE YOMCST, ONLY: RG 14 13 … … 835 834 ENDDO 836 835 837 !--waveband 2 and all aerosol (third index = 2)838 inu=2839 DO i=1, klon840 absvisaer(i)=SUM((1-piz_allaer(i,:,2,inu))*tau_allaer(i,:,2,inu))841 ENDDO842 843 836 DEALLOCATE(aerosol_name) 844 837
Note: See TracChangeset
for help on using the changeset viewer.