Changeset 1183
- Timestamp:
- Jun 16, 2009, 5:38:46 PM (16 years ago)
- Location:
- LMDZ4/branches/LMDZ4-dev/libf/phylmd
- Files:
-
- 10 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/branches/LMDZ4-dev/libf/phylmd/aero_mod.F90
r1182 r1183 1 1 ! $Id$ 2 2 ! 3 MODULE aero sol_mod3 MODULE aero_mod 4 4 ! Declaration des indices pour les aerosols 5 5 … … 61 61 62 62 63 END MODULE aero sol_mod63 END MODULE aero_mod -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/aeropt_2bands.F90
r1181 r1183 6 6 7 7 USE dimphy 8 USE aero sol_mod8 USE aero_mod 9 9 10 10 ! Yves Balkanski le 12 avril 2006 -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/aeropt_5wv.F90
r1181 r1183 8 8 9 9 USE DIMPHY 10 USE aero sol_mod10 USE aero_mod 11 11 12 12 ! -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/newmicro.F
r1179 r1183 6 6 s xflwp, xfiwp, xflwc, xfiwc, 7 7 e ok_aie, 8 e mass_ ins_aero, mass_ins_aero_pi,8 e mass_solu_aero, mass_solu_aero_pi, 9 9 e bl95_b0, bl95_b1, 10 10 s cldtaupi, re, fl) … … 21 21 c 22 22 c ok_aie--input-L-apply aerosol indirect effect or not 23 c mass_ ins_aero-----input-R-total mass concentration for all indissoluble aerosols[ug/m^3]24 c mass_ ins_aero_pi--input-R-dito, pre-industrial value23 c mass_solu_aero-----input-R-total mass concentration for all soluble aerosols[ug/m^3] 24 c mass_solu_aero_pi--input-R-dito, pre-industrial value 25 25 c bl95_b0-input-R-a parameter, may be varied for tests (s-sea, l-land) 26 26 c bl95_b1-input-R-a parameter, may be varied for tests ( -"- ) … … 93 93 LOGICAL ok_a1lwpdep ! a1 LWP dependent? 94 94 95 REAL mass_ ins_aero(klon, klev) ! total mass concentration for all indissoluble aerosols [ug m-3]96 REAL mass_ ins_aero_pi(klon, klev) ! - " - (pre-industrial value)95 REAL mass_solu_aero(klon, klev) ! total mass concentration for all soluble aerosols [ug m-3] 96 REAL mass_solu_aero_pi(klon, klev) ! - " - (pre-industrial value) 97 97 REAL cdnc(klon, klev) ! cloud droplet number concentration [m-3] 98 98 REAL re(klon, klev) ! cloud droplet effective radius [um] … … 156 156 ! 157 157 cdnc(i,k) = 10.**(bl95_b0+bl95_b1* 158 & log(MAX(mass_ins_aero(i,k),1.e-4))/log(10.))*1.e6 !-m-3158 & log(MAX(mass_solu_aero(i,k),1.e-4))/log(10.))*1.e6 !-m-3 159 159 ! Cloud droplet number concentration (CDNC) is restricted 160 160 ! to be within [20, 1000 cm^3] … … 164 164 ! 165 165 cdnc_pi(i,k) = 10.**(bl95_b0+bl95_b1* 166 & log(MAX(mass_ins_aero_pi(i,k),1.e-4))/log(10.))*1.e6 !-m-3166 & log(MAX(mass_solu_aero_pi(i,k),1.e-4))/log(10.))*1.e6 !-m-3 167 167 cdnc_pi(i,k)=MIN(1000.e6,MAX(20.e6,cdnc_pi(i,k))) 168 168 ENDDO -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/nuage.F
r1179 r1183 5 5 . pch, pcl, pcm, pct, pctlwp, 6 6 e ok_aie, 7 e mass_ ins_aero, mass_ins_aero_pi,7 e mass_solu_aero, mass_solu_aero_pi, 8 8 e bl95_b0, bl95_b1, 9 9 s cldtaupi, re, fl) … … 19 19 c pclc----input-R-couverture nuageuse pour le rayonnement (0 a 1) 20 20 c ok_aie--input-L-apply aerosol indirect effect or not 21 c mass_ ins_aero-----input-R-total mass concentration for all indissoluble aerosols[ug/m^3]22 c mass_ ins_aero_pi--input-R-dito, pre-industrial value21 c mass_solu_aero-----input-R-total mass concentration for all soluble aerosols[ug/m^3] 22 c mass_solu_aero_pi--input-R-dito, pre-industrial value 23 23 c bl95_b0-input-R-a parameter, may be varied for tests (s-sea, l-land) 24 24 c bl95_b1-input-R-a parameter, may be varied for tests ( -"- ) … … 73 73 LOGICAL ok_aie ! Apply AIE or not? 74 74 75 REAL mass_ ins_aero(klon, klev) ! total mass concentration for all indissoluble aerosols[ug m-3]76 REAL mass_ ins_aero_pi(klon, klev) ! - " - pre-industrial value75 REAL mass_solu_aero(klon, klev) ! total mass concentration for all soluble aerosols[ug m-3] 76 REAL mass_solu_aero_pi(klon, klev) ! - " - pre-industrial value 77 77 REAL cdnc(klon, klev) ! cloud droplet number concentration [m-3] 78 78 REAL re(klon, klev) ! cloud droplet effective radius [um] … … 107 107 ! 108 108 cdnc(i,k) = 10.**(bl95_b0+bl95_b1* 109 . log(MAX(mass_ ins_aero(i,k),1.e-4))/log(10.))*1.e6 !-m-3109 . log(MAX(mass_solu_aero(i,k),1.e-4))/log(10.))*1.e6 !-m-3 110 110 ! Cloud droplet number concentration (CDNC) is restricted 111 111 ! to be within [20, 1000 cm^3] … … 113 113 cdnc(i,k)=MIN(1000.e6,MAX(20.e6,cdnc(i,k))) 114 114 cdnc_pi(i,k) = 10.**(bl95_b0+bl95_b1* 115 . log(MAX(mass_ ins_aero_pi(i,k),1.e-4))/log(10.))*1.e6 !-m-3115 . log(MAX(mass_solu_aero_pi(i,k),1.e-4))/log(10.))*1.e6 !-m-3 116 116 cdnc_pi(i,k)=MIN(1000.e6,MAX(20.e6,cdnc_pi(i,k))) 117 117 ! -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/phys_local_var_mod.F90
r1181 r1183 4 4 MODULE phys_local_var_mod 5 5 6 USE aerosol_mod7 6 ! Variables locales pour effectuer les appels en serie 8 7 !====================================================================== … … 94 93 use dimphy 95 94 use infotrac, ONLY : nbtr 95 USE aero_mod 96 96 97 IMPLICIT NONE 97 98 #include "indicesol.h" -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/phys_state_var_mod.F90
r1181 r1183 284 284 SUBROUTINE phys_state_var_init 285 285 use dimphy 286 use aero sol_mod286 use aero_mod 287 287 IMPLICIT NONE 288 288 #include "indicesol.h" -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/physiq.F
r1181 r1183 33 33 use netcdf95, only: nf95_close 34 34 use mod_phys_lmdz_mpi_data, only: is_mpi_root 35 USE aero_mod 35 36 36 37 IMPLICIT none … … 1066 1067 CHARACTER*4, DIMENSION(naero_grp) :: rfname 1067 1068 REAL, DIMENSION(klon) :: aerindex ! POLDER aerosol index 1068 REAL, DIMENSION(klon,klev) :: mass_ ins_aero! total mass concentration for all indissoluble aerosols[ug/m3]1069 REAL, DIMENSION(klon,klev) :: mass_ ins_aero_pi! - " - (pre-industrial value)1069 REAL, DIMENSION(klon,klev) :: mass_solu_aero ! total mass concentration for all soluble aerosols[ug/m3] 1070 REAL, DIMENSION(klon,klev) :: mass_solu_aero_pi ! - " - (pre-industrial value) 1070 1071 1071 1072 ! Parameters … … 2638 2639 & debut, new_aod, flag_aerosol, rjourvrai, pdtphys, 2639 2640 & pplay, paprs, t_seri, rhcl, 2640 & mass_ ins_aero, mass_ins_aero_pi,2641 & mass_solu_aero, mass_solu_aero_pi, 2641 2642 & tau_aero, piz_aero, cg_aero, 2642 2643 & tausum_aero, tau3d_aero) … … 2821 2822 2822 2823 IF (aerosol_couple) THEN 2823 mass_ ins_aero(:,:) = ccm(:,:,1)2824 mass_ ins_aero_pi(:,:) = ccm(:,:,2)2824 mass_solu_aero(:,:) = ccm(:,:,1) 2825 mass_solu_aero_pi(:,:) = ccm(:,:,2) 2825 2826 END IF 2826 2827 … … 2831 2832 . flwp, fiwp, flwc, fiwc, 2832 2833 e ok_aie, 2833 e mass_ ins_aero, mass_ins_aero_pi,2834 e mass_solu_aero, mass_solu_aero_pi, 2834 2835 e bl95_b0, bl95_b1, 2835 2836 s cldtaupi, re, fl) … … 2839 2840 . cldh, cldl, cldm, cldt, cldq, 2840 2841 e ok_aie, 2841 e mass_ ins_aero, mass_ins_aero_pi,2842 e mass_solu_aero, mass_solu_aero_pi, 2842 2843 e bl95_b0, bl95_b1, 2843 2844 s cldtaupi, re, fl) -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/readaerosol.F90
r1179 r1183 181 181 USE mod_grid_phy_lmdz 182 182 USE mod_phys_lmdz_para 183 USE iophy, ONLY : io_lon, io_lat 183 184 184 185 IMPLICIT NONE … … 216 217 REAL, DIMENSION(klon_glo,12) :: load_glo1D ! -"- on physical global grid 217 218 REAL, DIMENSION(iim,jjm+1) :: vartmp 218 LOGICAL :: new_file 219 REAL, DIMENSION(iim) :: lon_src ! longitudes in file 220 REAL, DIMENSION(jjm+1) :: lat_src, lat_src_inv ! latitudes in file 221 LOGICAL :: new_file ! true if new file format detected 222 LOGICAL :: invert_lat ! true if the field has to be inverted for latitudes 219 223 220 224 … … 232 236 WRITE(lunout,*) 'reading ', TRIM(fname) 233 237 CALL check_err( nf90_open(TRIM(fname), NF90_NOWRITE, ncid) ) 238 239 ! Test for equal longitudes and latitudes in file and model 240 !**************************************************************************************** 241 ! Read and test longitudes 242 CALL check_err( nf90_inq_varid(ncid, 'lon', varid) ) 243 CALL check_err( nf90_get_var(ncid, varid, lon_src(:)) ) 244 245 IF (minval(ABS(lon_src - io_lon)) > 0.001) THEN 246 WRITE(lunout,*) 'Problem in longitudes read from file : ',TRIM(fname) 247 WRITE(lunout,*) 'longitudes in file ', TRIM(fname),' : ', lon_src 248 WRITE(lunout,*) 'longitudes in model :', io_lon 249 250 CALL abort_gcm('get_aero_fromfile', 'longitudes are not the same in file and model',1) 251 END IF 252 253 ! Read and test latitudes 254 CALL check_err( nf90_inq_varid(ncid, 'lat', varid) ) 255 CALL check_err( nf90_get_var(ncid, varid, lat_src(:)) ) 256 257 ! Invert source latitudes 258 DO j = 1, jjm+1 259 lat_src_inv(j) = lat_src(jjm+1 +1 -j) 260 END DO 261 262 IF (minval(ABS(lat_src - io_lat)) < 0.001) THEN 263 ! Latitudes are the same 264 invert_lat=.FALSE. 265 ELSE IF (minval(ABS(lat_src_inv - io_lat)) < 0.001) THEN 266 ! Inverted source latitudes correspond to model latitudes 267 WRITE(lunout,*) 'latitudes will be inverted for file : ',TRIM(fname) 268 invert_lat=.TRUE. 269 ELSE 270 WRITE(lunout,*) 'Problem in latitudes read from file : ',TRIM(fname) 271 WRITE(lunout,*) 'latitudes in file ', TRIM(fname),' : ', lat_src 272 WRITE(lunout,*) 'latitudes in model :', io_lat 273 CALL abort_gcm('get_aero_fromfile', 'latitudes do not correspond between file and model',1) 274 END IF 234 275 235 276 ! 2) Check if old or new file is avalabale. … … 378 419 379 420 IF ((pt_b(1) < pt_b(klev_src)) .OR. .NOT. new_file) THEN 380 WRITE(lunout,*) 'Vertical axis in file ',TRIM(fname), ' needs to be inver sed'421 WRITE(lunout,*) 'Vertical axis in file ',TRIM(fname), ' needs to be inverted' 381 422 WRITE(lunout,*) 'before pt_ap = ', pt_ap 382 423 WRITE(lunout,*) 'before pt_b = ', pt_b … … 413 454 END IF 414 455 415 ! - Also the latitudes have to be inversed456 ! - Invert latitudes if necessary 416 457 DO imth=1, 12 417 ! Inverse latitudes 418 varmth(:,:,:) = varyear(:,:,:,imth) ! use varmth temporarly 419 DO k=1,klev_src 420 DO j=1,jjm+1 421 DO i=1,iim 422 varyear(i,j,k,imth) = varmth(i,jjm+1+1-j,k) 458 IF (invert_lat) THEN 459 460 ! Invert latitudes for the variable 461 varmth(:,:,:) = varyear(:,:,:,imth) ! use varmth temporarly 462 DO k=1,klev_src 463 DO j=1,jjm+1 464 DO i=1,iim 465 varyear(i,j,k,imth) = varmth(i,jjm+1+1-j,k) 466 END DO 423 467 END DO 424 468 END DO 425 END DO426 427 ! Inverse latitudes for surface pressure428 vartmp(:,:) = psurf_glo2D(:,:,imth)429 DO j=1, jjm+1430 DO i=1,iim431 psurf_glo2D(i,j,imth)= vartmp(i,jjm+1+1-j)469 470 ! Invert latitudes for surface pressure 471 vartmp(:,:) = psurf_glo2D(:,:,imth) 472 DO j=1, jjm+1 473 DO i=1,iim 474 psurf_glo2D(i,j,imth)= vartmp(i,jjm+1+1-j) 475 END DO 432 476 END DO 433 END DO434 435 ! Inverse latitudes for the load436 vartmp(:,:) = load_glo2D(:,:,imth)437 DO j=1, jjm+1438 DO i=1,iim439 load_glo2D(i,j,imth)= vartmp(i,jjm+1+1-j)477 478 ! Invert latitudes for the load 479 vartmp(:,:) = load_glo2D(:,:,imth) 480 DO j=1, jjm+1 481 DO i=1,iim 482 load_glo2D(i,j,imth)= vartmp(i,jjm+1+1-j) 483 END DO 440 484 END DO 441 END DO442 485 END IF ! invert_lat 486 443 487 ! Do zonal mead at poles and distribut at whole first and last latitude 444 488 DO k=1, klev_src … … 455 499 END DO 456 500 END DO ! imth 457 501 458 502 ALLOCATE(varyear_glo1D(klon_glo, klev_src, 12), stat=ierr) 459 503 IF (ierr /= 0) CALL abort_gcm('get_aero_fromfile', 'pb in allocation 3',1) -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/readaerosol_interp.F90
r1181 r1183 16 16 USE mod_phys_lmdz_para, ONLY : mpi_rank 17 17 USE readaerosol_mod 18 USE aero sol_mod, ONLY : naero_spc, name_aero18 USE aero_mod, ONLY : naero_spc, name_aero 19 19 USE write_field_phy 20 20 -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/readaerosol_optic.F90
r1181 r1183 3 3 SUBROUTINE readaerosol_optic(debut, new_aod, flag_aerosol, rjourvrai, pdtphys, & 4 4 pplay, paprs, t_seri, rhcl, & 5 mass_ ins_aero, mass_ins_aero_pi, &5 mass_solu_aero, mass_solu_aero_pi, & 6 6 tau_aero, piz_aero, cg_aero, & 7 7 tausum_aero, tau3d_aero ) … … 13 13 14 14 USE dimphy 15 USE aero sol_mod15 USE aero_mod 16 16 IMPLICIT NONE 17 17 … … 30 30 ! Output arguments 31 31 !**************************************************************************************** 32 REAL, DIMENSION(klon,klev), INTENT(OUT) :: mass_ ins_aero ! Total mass for all indissoluble aerosols33 REAL, DIMENSION(klon,klev), INTENT(OUT) :: mass_ ins_aero_pi ! -"- preindustrial values32 REAL, DIMENSION(klon,klev), INTENT(OUT) :: mass_solu_aero ! Total mass for all soluble aerosols 33 REAL, DIMENSION(klon,klev), INTENT(OUT) :: mass_solu_aero_pi ! -"- preindustrial values 34 34 REAL, DIMENSION(klon,klev,naero_grp,nbands), INTENT(OUT) :: tau_aero ! Aerosol optical thickness 35 35 REAL, DIMENSION(klon,klev,naero_grp,nbands), INTENT(OUT) :: piz_aero ! Single scattering albedo aerosol … … 138 138 139 139 ! 140 ! Calculate the total mass of all indissoluble aersosols140 ! Calculate the total mass of all soluble aersosols 141 141 ! 142 mass_ ins_aero(:,:) = sulfate(:,:) + bcsol(:,:) + pomsol(:,:) + &143 sscoarse(:,:) + ssacu(:,:) + cidust(:,:)144 mass_ ins_aero_pi(:,:) = sulfate_pi(:,:) + bcsol_pi(:,:) + pomsol_pi(:,:) + &145 sscoarse_pi(:,:) + ssacu_pi(:,:) + cidust_pi(:,:)142 mass_solu_aero(:,:) = sulfate(:,:) + bcsol(:,:) + pomsol(:,:) + & 143 sscoarse(:,:) + ssacu(:,:) 144 mass_solu_aero_pi(:,:) = sulfate_pi(:,:) + bcsol_pi(:,:) + pomsol_pi(:,:) + & 145 sscoarse_pi(:,:) + ssacu_pi(:,:) 146 146 147 147 !****************************************************************************************
Note: See TracChangeset
for help on using the changeset viewer.