Changeset 4513 for LMDZ6/trunk/libf/phylmd/StratAer
- Timestamp:
- Apr 20, 2023, 9:57:22 AM (21 months ago)
- Location:
- LMDZ6/trunk/libf/phylmd/StratAer
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/StratAer/strataer_mod.F90
r4293 r4513 186 186 !ENDIF 187 187 188 IF (flag_sulf_emit == 1) THEN188 IF (flag_sulf_emit > 0) THEN 189 189 CALL strataer_ponde_init 190 190 WRITE(lunout,*) 'IN STRATAER INT2 END' -
LMDZ6/trunk/libf/phylmd/StratAer/traccoag_mod.F90
r4293 r4513 23 23 USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root 24 24 USE mod_phys_lmdz_para, only: gather, scatter 25 USE phys_cal_mod, ONLY : year_len, year_cur,mth_cur, day_cur, hour25 USE phys_cal_mod, ONLY : year_len, mth_len, year_cur, mth_cur, day_cur, hour 26 26 USE sulfate_aer_mod 27 27 USE phys_local_var_mod, ONLY: stratomask … … 78 78 REAL :: theta_min, theta_max ! for SAI computation between two latitudes 79 79 REAL :: dlat_loc 80 INTEGER :: injdur_sai ! injection duration for SAI case [days] 81 INTEGER :: yr, is_bissext 80 82 81 83 IF (is_mpi_root) THEN … … 229 231 CASE(2) ! stratospheric aerosol injections (SAI) 230 232 ! 231 DO i=1,klon 232 ! SAI standard scenario with continuous emission from 1 grid point at the equator 233 ! SAI emission on single month 234 ! SAI continuous emission o 233 ! Computing duration of SAI in days... 234 ! ... starting from 0... 235 injdur_sai = 0 236 ! ... then adding whole years from first to (n-1)th... 237 DO yr = year_emit_sai_start, year_emit_sai_end-1 238 ! (n % 4 == 0) and (n % 100 != 0 or n % 400 == 0) 239 is_bissext = (MOD(yr,4)==0) .AND. (MOD(yr,100) /= 0 .OR. MOD(yr,400) == 0) 240 injdur_sai = injdur_sai+365+is_bissext 241 ENDDO 242 ! ... then subtracting part of the first year where no injection yet... 243 is_bissext = (MOD(year_emit_sai_start,4)==0) .AND. (MOD(year_emit_sai_start,100) /= 0 .OR. MOD(year_emit_sai_start,400) == 0) 244 SELECT CASE(mth_emit_sai_start) 245 CASE(2) 246 injdur_sai = injdur_sai-31 247 CASE(3) 248 injdur_sai = injdur_sai-31-28-is_bissext 249 CASE(4) 250 injdur_sai = injdur_sai-31-28-is_bissext-31 251 CASE(5) 252 injdur_sai = injdur_sai-31-28-is_bissext-31-30 253 CASE(6) 254 injdur_sai = injdur_sai-31-28-is_bissext-31-30-31 255 CASE(7) 256 injdur_sai = injdur_sai-31-28-is_bissext-31-30-31-30 257 CASE(8) 258 injdur_sai = injdur_sai-31-28-is_bissext-31-30-31-30-31 259 CASE(9) 260 injdur_sai = injdur_sai-31-28-is_bissext-31-30-31-30-31-31 261 CASE(10) 262 injdur_sai = injdur_sai-31-28-is_bissext-31-30-31-30-31-31-30 263 CASE(11) 264 injdur_sai = injdur_sai-31-28-is_bissext-31-30-31-30-31-31-30-31 265 CASE(12) 266 injdur_sai = injdur_sai-31-28-is_bissext-31-30-31-30-31-31-30-31-30 267 END SELECT 268 injdur_sai = injdur_sai-day_emit_sai_start+1 269 ! ... then adding part of the n-th year 270 is_bissext = (MOD(year_emit_sai_end,4)==0) .AND. (MOD(year_emit_sai_end,100) /= 0 .OR. MOD(year_emit_sai_end,400) == 0) 271 SELECT CASE(mth_emit_sai_end) 272 CASE(2) 273 injdur_sai = injdur_sai+31 274 CASE(3) 275 injdur_sai = injdur_sai+31+28+is_bissext 276 CASE(4) 277 injdur_sai = injdur_sai+31+28+is_bissext+31 278 CASE(5) 279 injdur_sai = injdur_sai+31+28+is_bissext+31+30 280 CASE(6) 281 injdur_sai = injdur_sai+31+28+is_bissext+31+30+31 282 CASE(7) 283 injdur_sai = injdur_sai+31+28+is_bissext+31+30+31+30 284 CASE(8) 285 injdur_sai = injdur_sai+31+28+is_bissext+31+30+31+30+31 286 CASE(9) 287 injdur_sai = injdur_sai+31+28+is_bissext+31+30+31+30+31+31 288 CASE(10) 289 injdur_sai = injdur_sai+31+28+is_bissext+31+30+31+30+31+31+30 290 CASE(11) 291 injdur_sai = injdur_sai+31+28+is_bissext+31+30+31+30+31+31+30+31 292 CASE(12) 293 injdur_sai = injdur_sai+31+28+is_bissext+31+30+31+30+31+31+30+31+30 294 END SELECT 295 injdur_sai = injdur_sai+day_emit_sai_end 296 ! A security: are SAI dates of injection consistent? 297 IF (injdur_sai <= 0) THEN 298 CALL abort_physic('traccoag_mod', 'Pb in SAI dates of injection.',1) 299 ENDIF 300 ! Injection in itself 301 IF (( year_emit_sai_start <= year_cur ) & 302 .AND. ( year_cur <= year_emit_sai_end ) & 303 .AND. ( mth_emit_sai_start <= mth_cur .OR. year_emit_sai_start < year_cur ) & 304 .AND. ( mth_cur <= mth_emit_sai_end .OR. year_cur < year_emit_sai_end ) & 305 .AND. ( day_emit_sai_start <= day_cur .OR. mth_emit_sai_start < mth_cur .OR. year_emit_sai_start < year_cur ) & 306 .AND. ( day_cur <= day_emit_sai_end .OR. mth_cur < mth_emit_sai_end .OR. year_cur < year_emit_sai_end )) THEN 307 308 DO i=1,klon 235 309 dlat_loc=180./RPI/2.*(boundslat(i,1)-boundslat(i,3)) ! dlat = half difference of boundary latitudes 236 310 IF ( xlat(i).GE.xlat_sai-dlat_loc .AND. xlat(i).LT.xlat_sai+dlat_loc .AND. & … … 280 354 DO k=1, klev 281 355 ! stretch emission over whole year (360d) 282 emission=m_aer_emiss_sai*(mSO2mol/mSatom)/m_air_gridbox(i,k)*f_lay_emiss(k)/FLOAT( year_len)/86400.356 emission=m_aer_emiss_sai*(mSO2mol/mSatom)/m_air_gridbox(i,k)*f_lay_emiss(k)/FLOAT(injdur_sai)/86400. 283 357 tr_seri(i,k,id_SO2_strat)=tr_seri(i,k,id_SO2_strat)+emission*pdtphys 284 358 budg_emi_so2(i)=budg_emi_so2(i)+emission*zdm(k)*mSatom/mSO2mol … … 295 369 ENDIF ! emission grid cell 296 370 ENDDO ! klon loop 371 372 ENDIF ! Condition over injection dates 297 373 298 374 CASE(3) ! --- SAI injection over a single band of longitude and between
Note: See TracChangeset
for help on using the changeset viewer.