Changeset 2302 for trunk/LMDZ.MARS/libf/aeronomars
- Timestamp:
- Apr 28, 2020, 9:53:07 AM (5 years ago)
- Location:
- trunk/LMDZ.MARS/libf/aeronomars
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.MARS/libf/aeronomars/calchim_mod.F90
r2284 r2302 22 22 igcm_coplus, igcm_cplus, igcm_nplus, & 23 23 igcm_noplus, igcm_n2plus, igcm_hplus, & 24 igcm_hco2plus, igcm_hcoplus, igcm_elec, mmol 24 igcm_hco2plus, igcm_hcoplus, igcm_h2oplus, & 25 igcm_elec, mmol 25 26 26 27 use conc_mod, only: mmean ! mean molecular mass of the atmosphere … … 142 143 integer,save :: i_hco2plus=0 143 144 integer,save :: i_hcoplus=0 145 integer,save :: i_h2oplus=0 144 146 integer,save :: i_elec=0 145 147 … … 240 242 if (i_co2 == 0) then 241 243 write(*,*) "calchim: Error; no CO2 tracer !!!" 242 stop244 call abort_physic("calchim","missing co2 tracer",1) 243 245 else 244 246 nbq = nbq + 1 … … 248 250 if (i_co == 0) then 249 251 write(*,*) "calchim: Error; no CO tracer !!!" 250 stop252 call abort_physic("calchim","missing co tracer",1) 251 253 else 252 254 nbq = nbq + 1 … … 256 258 if (i_o == 0) then 257 259 write(*,*) "calchim: Error; no O tracer !!!" 258 stop260 call abort_physic("calchim","missing o tracer",1) 259 261 else 260 262 nbq = nbq + 1 … … 264 266 if (i_o1d == 0) then 265 267 write(*,*) "calchim: Error; no O1D tracer !!!" 266 stop268 call abort_physic("calchim","missing o1d tracer",1) 267 269 else 268 270 nbq = nbq + 1 … … 272 274 if (i_o2 == 0) then 273 275 write(*,*) "calchim: Error; no O2 tracer !!!" 274 stop276 call abort_physic("calchim","missing o2 tracer",1) 275 277 else 276 278 nbq = nbq + 1 … … 280 282 if (i_o3 == 0) then 281 283 write(*,*) "calchim: Error; no O3 tracer !!!" 282 stop284 call abort_physic("calchim","missing o3 tracer",1) 283 285 else 284 286 nbq = nbq + 1 … … 288 290 if (i_h == 0) then 289 291 write(*,*) "calchim: Error; no H tracer !!!" 290 stop292 call abort_physic("calchim","missing h tracer",1) 291 293 else 292 294 nbq = nbq + 1 … … 296 298 if (i_h2 == 0) then 297 299 write(*,*) "calchim: Error; no H2 tracer !!!" 298 stop300 call abort_physic("calchim","missing h2 tracer",1) 299 301 else 300 302 nbq = nbq + 1 … … 304 306 if (i_oh == 0) then 305 307 write(*,*) "calchim: Error; no OH tracer !!!" 306 stop308 call abort_physic("calchim","missing oh tracer",1) 307 309 else 308 310 nbq = nbq + 1 … … 312 314 if (i_ho2 == 0) then 313 315 write(*,*) "calchim: Error; no HO2 tracer !!!" 314 stop316 call abort_physic("calchim","missing ho2 tracer",1) 315 317 else 316 318 nbq = nbq + 1 … … 320 322 if (i_h2o2 == 0) then 321 323 write(*,*) "calchim: Error; no H2O2 tracer !!!" 322 stop324 call abort_physic("calchim","missing h2o2 tracer",1) 323 325 else 324 326 nbq = nbq + 1 … … 336 338 if (i_n2 == 0) then 337 339 write(*,*) "calchim: Error; no N2 tracer !!!" 338 stop340 call abort_physic("calchim","missing n2 tracer",1) 339 341 else 340 342 nbq = nbq + 1 … … 345 347 if (photochem) then 346 348 write(*,*) "calchim: Error; no N tracer !!!" 347 stop349 call abort_physic("calchim","missing n tracer",1) 348 350 end if 349 351 else … … 355 357 if (photochem) then 356 358 write(*,*) "calchim: Error; no N2D tracer !!!" 357 stop359 call abort_physic("calchim","missing n2d tracer",1) 358 360 end if 359 361 else … … 365 367 if (photochem) then 366 368 write(*,*) "calchim: Error; no NO tracer !!!" 367 stop369 call abort_physic("calchim","missing no tracer",1) 368 370 end if 369 371 else … … 375 377 if (photochem) then 376 378 write(*,*) "calchim: Error; no NO2 tracer !!!" 377 stop379 call abort_physic("calchim","missing no2 tracer",1) 378 380 end if 379 381 else … … 384 386 if (i_h2o == 0) then 385 387 write(*,*) "calchim: Error; no water vapor tracer !!!" 386 stop388 call abort_physic("calchim","missing h2o_vap tracer",1) 387 389 else 388 390 nbq = nbq + 1 … … 405 407 write(*,*) "calchim: Error, no CO2+ tracer !!!" 406 408 write(*,*) "CO2+ is needed if O2+ is in traceur.def" 407 stop409 call abort_physic("calchim","missing co2plus tracer",1) 408 410 else 409 411 nbq = nbq + 1 … … 414 416 write(*,*) "calchim: Error: CO2+ is present, but O2+ is not!!!" 415 417 write(*,*) "Both must be in traceur.def if ion chemistry wanted" 416 stop418 call abort_physic("calchim","missing o2plus tracer",1) 417 419 endif 418 420 endif … … 422 424 write(*,*) "calchim: Error, no O+ tracer !!!" 423 425 write(*,*) "O+ is needed if O2+ is in traceur.def" 424 stop426 call abort_physic("calchim","missing oplus tracer",1) 425 427 else 426 428 nbq = nbq + 1 … … 431 433 write(*,*) "calchim: Error: O+ is present, but O2+ is not!!!" 432 434 write(*,*) "Both must be in traceur.def if ion chemistry wanted" 433 stop435 call abort_physic("calchim","missing o2plus tracer",1) 434 436 endif 435 437 endif … … 439 441 write(*,*) "calchim: Error, no NO+ tracer !!!" 440 442 write(*,*) "NO+ is needed if O2+ is in traceur.def" 441 stop443 call abort_physic("calchim","missing noplus tracer",1) 442 444 else 443 445 nbq = nbq + 1 … … 455 457 write(*,*) "calchim: Error, no CO+ tracer !!!" 456 458 write(*,*) "CO+ is needed if O2+ is in traceur.def" 457 stop459 call abort_physic("calchim","missing coplus tracer",1) 458 460 else 459 461 nbq = nbq + 1 … … 471 473 write(*,*) "calchim: Error, no C+ tracer !!!" 472 474 write(*,*) "C+ is needed if O2+ is in traceur.def" 473 stop475 call abort_physic("calchim","missing cplus tracer",1) 474 476 else 475 477 nbq = nbq + 1 … … 487 489 write(*,*) "calchim: Error, no N2+ tracer !!!" 488 490 write(*,*) "N2+ is needed if O2+ is in traceur.def" 489 stop491 call abort_physic("calchim","missing n2plus tracer",1) 490 492 else 491 493 nbq = nbq + 1 … … 503 505 write(*,*) "calchim: Error, no N+ tracer !!!" 504 506 write(*,*) "N+ is needed if O2+ is in traceur.def" 505 stop507 call abort_physic("calchim","missing nplus tracer",1) 506 508 else 507 509 nbq = nbq + 1 … … 519 521 write(*,*) "calchim: Error, no H+ tracer !!!" 520 522 write(*,*) "H+ is needed if O2+ is in traceur.def" 521 stop523 call abort_physic("calchim","missing hplus tracer",1) 522 524 else 523 525 nbq = nbq + 1 … … 535 537 write(*,*) "calchim: Error, no HCO2+ tracer !!!" 536 538 write(*,*) "HCO2+ is needed if O2+ is in traceur.def" 537 stop539 call abort_physic("calchim","missing hco2plus tracer",1) 538 540 else 539 541 nbq = nbq + 1 … … 551 553 write(*,*) "calchim: Error, no HCO+ tracer !!!" 552 554 write(*,*) "HCO+ is needed if O2+ is in traceur.def" 553 stop555 call abort_physic("calchim","missing hcoplus tracer",1) 554 556 else 555 557 nbq = nbq + 1 … … 559 561 if (i_hcoplus /= 0) then 560 562 write(*,*) "calchim: Error: HCO+ is present, but O2+ is not!!!" 563 write(*,*) "Both must be in traceur.def if ion chemistry wanted" 564 endif 565 endif 566 i_h2oplus=igcm_h2oplus 567 if(ionchem) then 568 if (i_h2oplus == 0) then 569 write(*,*) "calchim: Error, no H2O+ tracer !!!" 570 write(*,*) "H2O+ is needed if O2+ is in traceur.def" 571 call abort_physic("calchim","missing h2oplus tracer",1) 572 else 573 nbq = nbq + 1 574 niq(nbq) = i_h2oplus 575 end if 576 else 577 if (i_h2oplus /= 0) then 578 write(*,*) "calchim: Error: H2O+ is present, but O2+ is not!!!" 561 579 write(*,*) "Both must be in traceur.def if ion chemistry wanted" 562 580 endif … … 567 585 write(*,*) "calchim: Error, no e- tracer !!!" 568 586 write(*,*) "e- is needed if O2+ is in traceur.def" 569 stop587 call abort_physic("calchim","missing elec tracer",1) 570 588 else 571 589 nbq = nbq + 1 … … 647 665 ! set number of reactions, depending on ion chemistry or not 648 666 if (ionchem) then 649 nb_reaction_4_max = 67! set number of bimolecular reactions667 nb_reaction_4_max = 80 ! set number of bimolecular reactions 650 668 nb_reaction_3_max = 6 ! set number of quadratic reactions 651 669 nquench = 9 ! set number of quenching + heterogeneous reactions -
trunk/LMDZ.MARS/libf/aeronomars/inichim_newstart.F90
r2284 r2302 118 118 igcm_hco2plus=0 119 119 igcm_hcoplus=0 120 igcm_h2oplus=0 120 121 igcm_elec=0 121 122 … … 338 339 count = count + 1 339 340 end if 341 if (noms(iq) == "h2oplus") then 342 igcm_h2oplus = iq 343 mmol(igcm_h2oplus) = 18. 344 count = count + 1 345 end if 340 346 if (noms(iq) == "elec") then 341 347 igcm_elec = iq … … 362 368 write(*,*) ' ', iq, ' ', trim(noms(iq)) 363 369 end do 364 stop370 call abort_physic("inichim_newstart","tracer mismatch",1) 365 371 else 366 372 write(*,*) "inichim_newstart: found all expected tracers" … … 378 384 write(*,*)'N, NO2 and/or N2D are in traceur.def, but not NO' 379 385 write(*,*)'stop' 380 stop386 call abort_physic("inichim_newstart","missing no tracer",1) 381 387 endif 382 388 flagnitro = .false. … … 388 394 write(*,*)'if NO is in traceur.def, N, NO2 and N2D must also be' 389 395 write(*,*)'stop' 390 stop396 call abort_physic("inichim_newstart","missing n* tracer",1) 391 397 endif 392 398 flagnitro = .true. … … 470 476 write(*,*)' can be obtained online on:' 471 477 write(*,*)' http://www.lmd.jussieu.fr/~lmdz/planets/mars/datadir' 472 stop478 call abort_physic("inichim_newstart","missing input file",1) 473 479 end if 474 480 open(220, iostat=ierr,file=trim(datadir)//'/atmosfera_LMD_min.dat') … … 482 488 write(*,*)' can be obtained online on:' 483 489 write(*,*)' http://www.lmd.jussieu.fr/~lmdz/planets/mars/datadir' 484 stop490 call abort_physic("inichim_newstart","missing input file",1) 485 491 end if 486 492 if(flagnitro) then … … 495 501 write(*,*)' can be obtained online on:' 496 502 write(*,*)' http://www.lmd.jussieu.fr/~lmdz/planets/mars/datadir' 497 STOP503 call abort_physic("inichim_newstart","missing input file",1) 498 504 endif 499 505 endif ! Of if(flagnitro) … … 599 605 .or. igcm_cplus == 0 .or. igcm_nplus == 0 .or. igcm_noplus == 0 & 600 606 .or. igcm_n2plus == 0 .or. igcm_hplus == 0 .or. igcm_hco2plus == 0 & 601 .or. igcm_hcoplus == 0 .or. igcm_ elec == 0) then607 .or. igcm_hcoplus == 0 .or. igcm_h2oplus == 0 .or. igcm_elec == 0) then 602 608 write(*,*)'inichim_newstart error:' 603 609 write(*,*)'if co2plus is in traceur.def, all other ions must also be' 604 610 write(*,*)'o2plus, oplus, coplus, cplus, nplus, noplus, n2plus' 605 write(*,*)'hplus, hco2plus, hcoplus, and elec'611 write(*,*)'hplus, hco2plus, hcoplus, h2oplus, and elec' 606 612 write(*,*)'stop' 607 stop613 call abort_physic("inichim_newstart","missing ions in tracers",1) 608 614 end if 609 615 … … 623 629 pq(i,j,l,igcm_hco2plus) = 0. 624 630 pq(i,j,l,igcm_hcoplus) = 0. 631 pq(i,j,l,igcm_h2oplus) = 0. 625 632 pq(i,j,l,igcm_elec) = 0. 626 633 end do … … 641 648 qsurf(1:ngrid,igcm_hco2plus) = 0. 642 649 qsurf(1:ngrid,igcm_hcoplus) = 0. 650 qsurf(1:ngrid,igcm_h2oplus) = 0. 643 651 qsurf(1:ngrid,igcm_elec) = 0. 644 652 … … 648 656 .or. igcm_cplus /= 0 .or. igcm_nplus /= 0 .or. igcm_noplus /= 0 & 649 657 .or. igcm_n2plus /= 0 .or. igcm_hplus /= 0 .or. igcm_hco2plus /= 0 & 650 .or. igcm_hcoplus /= 0 .or. igcm_ elec /= 0) then658 .or. igcm_hcoplus /= 0 .or. igcm_h2oplus /= 0 .or. igcm_elec /= 0) then 651 659 write(*,*)'inichim_newstart error:' 652 660 write(*,*)'some ions are in traceur.def, but not co2plus' 653 661 write(*,*)'stop' 654 stop662 call abort_physic("inichim_newstart","missing ions in tracers",1) 655 663 end if 656 664 end if ! of if(igcm_co2 /= 0) -
trunk/LMDZ.MARS/libf/aeronomars/photochemistry.F90
r2284 r2302 24 24 implicit none 25 25 26 #include "callkeys.h"26 include "callkeys.h" 27 27 28 28 !=================================================================== … … 113 113 integer,parameter :: i_hco2plus= 27 114 114 integer,parameter :: i_hcoplus = 28 115 integer,parameter :: i_elec = 29 115 integer,parameter :: i_h2oplus = 29 116 integer,parameter :: i_elec = 30 116 117 117 118 integer :: ilay … … 156 157 i_oplus, i_o2plus, i_noplus, i_coplus, i_cplus, & 157 158 i_n2plus, i_nplus, i_hplus, i_hco2plus, i_hcoplus, & 158 i_ elec)159 i_h2oplus, i_elec) 159 160 firstcall = .false. 160 161 end if … … 170 171 i_oplus, i_o2plus, i_noplus, i_coplus, i_cplus, & 171 172 i_n2plus, i_nplus, i_hplus, i_hco2plus, & 172 i_hcoplus, i_ elec, dens, rm, c)173 i_hcoplus, i_h2oplus, i_elec, dens, rm, c) 173 174 174 175 !=================================================================== … … 344 345 #else 345 346 write(*,*) "photochemistry error, missing LAPACK routine dgesv" 346 stop347 call abort_physic("photochemistry","missing LAPACK routine",1) 347 348 #endif 348 349 … … 366 367 c(ilev,i_noplus)+c(ilev,i_coplus)+c(ilev,i_cplus)+c(ilev,i_n2plus)+& 367 368 c(ilev,i_nplus)+c(ilev,i_hplus)+c(ilev,i_hco2plus)+ & 368 c(ilev,i_hcoplus) ) then369 c(ilev,i_hcoplus)+c(ilev,i_h2oplus)) then 369 370 c(ilev,i_elec) = c(ilev,i_co2plus)+c(ilev,i_oplus)+c(ilev,i_o2plus)+ & 370 371 c(ilev,i_noplus)+c(ilev,i_coplus)+c(ilev,i_cplus)+ & 371 372 c(ilev,i_n2plus)+c(ilev,i_nplus)+c(ilev,i_hplus)+ & 372 c(ilev,i_hco2plus)+c(ilev,i_hcoplus) 373 c(ilev,i_hco2plus)+c(ilev,i_hcoplus)+c(ilev,i_h2oplus) 373 374 ! write(*,*)'photochemistry/359' 374 375 ! write(*,*)'Forcing charge neutrality at ilev,',ilev,' ig=',ig … … 396 397 i_oplus, i_o2plus, i_noplus, i_coplus, i_cplus, & 397 398 i_n2plus, i_nplus, i_hplus, i_hco2plus, & 398 i_hcoplus, i_ elec, dens, c)399 i_hcoplus, i_h2oplus, i_elec, dens, c) 399 400 contains 400 401 … … 481 482 #else 482 483 write(*,*) "photochemistry error, missing LAPACK routine dgesv" 483 stop484 call abort_physic("photochemistry","missing LAPACK routine",1) 484 485 #endif 485 486 … … 596 597 i020, i021, i022, i023, i024, i025, i026, & 597 598 i027, i028, i029, i030, i031, i032, i033, & 598 i034, i035, i036, & 599 i034, i035, i036, i037, i038, i039, i040, & 600 i041, i042, i043, i044, i045, i046, i047, & 601 i048, i049, & 599 602 h001, h002, h003, h004, h005 600 603 … … 1413 1416 nb_reaction_4 = nb_reaction_4 + 1 1414 1417 v_4(:,nb_reaction_4) = i036(:) 1418 1419 !--- i037: CO2+ + H2O -> H2O+ + CO2 1420 1421 !UMIST, from Karpas, Z., Anicich, V.G., and Huntress, W.T., Chem. Phys. Lett., 59, 84 (1978) 1422 1423 i037(:) = 2.04e-9 *((300./t_elect(:))**0.5) 1424 nb_reaction_4 = nb_reaction_4 + 1 1425 v_4(:,nb_reaction_4) = i037(:) 1426 1427 !--- i038: CO+ + H2O -> H2O+ + CO 1428 1429 !UMIST, from Huntress, W.T., McEwan, M.J., Karpas, Z., and Anicich, V.G., Astrophys. J. Supp. Series, 44, 481 (1980) 1430 1431 i038(:) = 1.72e-9*((300./t_elect(:))**0.5) 1432 nb_reaction_4 = nb_reaction_4 + 1 1433 v_4(:,nb_reaction_4) = i038(:) 1434 1435 !--- i039: O+ + H2O -> H2O+ + O 1436 1437 !UMIST, from Adams, N.G., Smith, D., and Paulson, J.F., J. Chem. Phys., 72, 288 (1980); Smith, D., Adams, N.G., and Miller, T.M., J. Chem. Phys.., 69, 308 (1978) 1438 1439 i039(:) = 3.2e-9*((300./t_elect(:))**0.5) 1440 nb_reaction_4 = nb_reaction_4 + 1 1441 v_4(:,nb_reaction_4) = i039(:) 1442 1443 !--- i040: N2+ + H2O -> H2O+ + N2 1444 1445 !UMIST, from Adams, N.G., Smith, D., and Paulson, J.F., J. Chem. Phys., 72, 288 (1980); Smith, D., Adams, N.G., and Miller, T.M., J. Chem. Phys.., 69, 308 (1978) 1446 1447 i040(:) = 2.3e-9*((300./t_elect(:))**0.5) 1448 nb_reaction_4 = nb_reaction_4 + 1 1449 v_4(:,nb_reaction_4) = i040(:) 1450 1451 !--- i041: N+ + H2O -> H2O+ + N 1452 1453 !UMIST, from Adams, N.G., Smith, D., and Paulson, J.F., J. Chem. Phys., 72, 288 (1980); Smith, D., Adams, N.G., and Miller, T.M., J. Chem. Phys.., 69, 308 (1978) 1454 1455 i041(:) = 2.8e-9*((300./t_elect(:))**0.5) 1456 nb_reaction_4 = nb_reaction_4 + 1 1457 v_4(:,nb_reaction_4) = i041(:) 1458 1459 1460 !--- i042: H+ + H2O -> H2O+ + H 1461 1462 !UMIST, from D. Smith, P. Spanel and C. A. Mayhew, Int. J. Mass Spectrom. Ion Proc., 117, 457-473(1992) 1463 1464 i042(:) = 6.9e-9*((300./t_elect(:))**0.5) 1465 nb_reaction_4 = nb_reaction_4 + 1 1466 v_4(:,nb_reaction_4) = i042(:) 1467 1468 !--- i043: H2O+ + O2 -> O2+ + H2O 1469 1470 !UMIST, from A. B. Raksit and P. Warneck, J. Chem. Soc. Faraday Trans., 76, 1084-1092(1980) 1471 1472 i043(:) = 4.6e-10 1473 nb_reaction_4 = nb_reaction_4 + 1 1474 v_4(:,nb_reaction_4) = i043(:) 1475 1476 !--- i044: H2O+ + CO -> HCO+ + OH 1477 1478 !UMIST, from Jones, J.D.C., Birkinshaw, K., and Twiddy, N.D., Chem. Phys. Lett., 77, 484 (1981) 1479 1480 i044(:) = 5.0e-10 1481 nb_reaction_4 = nb_reaction_4 + 1 1482 v_4(:,nb_reaction_4) = i044(:) 1483 1484 !--- i045: H2O+ + O -> O2+ + H2 1485 1486 !UMIST, from Viggiano, A.A, Howarka, F., Albritton, D.L., Fehsenfeld, F.C., Adams, N.G., and Smith, D., Astrophys. J., 236, 492 (1980) 1487 1488 i045(:) = 4.0e-11 1489 nb_reaction_4 = nb_reaction_4 + 1 1490 v_4(:,nb_reaction_4) = i045(:) 1491 1492 !--- i046: H2O+ + NO -> NO+ + H2O 1493 1494 !UMIST, from A. B. Raksit and P. Warneck, J. Chem. Soc. Faraday Trans., 76, 1084-1092(1980) 1495 1496 i046(:) = 2.7e-10 1497 nb_reaction_4 = nb_reaction_4 + 1 1498 v_4(:,nb_reaction_4) = i046(:) 1499 1500 !--- i047: H2O+ + e- -> H + H + O 1501 1502 !UMIST, from Rosen, S., Derkatch, A., Semaniak, J., et al., 2000, Far. Disc., 115, 295 1503 1504 i047(:) = 3.05e-7*((300./t_elect(:))**0.5) 1505 nb_reaction_4 = nb_reaction_4 + 1 1506 v_4(:,nb_reaction_4) = i047(:) 1507 1508 !--- i048: H2O+ + e- -> H + OH 1509 1510 !UMIST, from Rosen, S., Derkatch, A., Semaniak, J., et al., 2000, Far. Disc., 115, 295 1511 1512 i048(:) = 8.6e-8*((300./t_elect(:))**0.5) 1513 nb_reaction_4 = nb_reaction_4 + 1 1514 v_4(:,nb_reaction_4) = i048(:) 1515 1516 !--- i049: H2O+ + e- -> O + H2 1517 1518 !UMIST, from Rosen, S., Derkatch, A., Semaniak, J., et al., 2000, Far. Disc., 115, 295 1519 1520 i049(:) = 3.9e-8*((300./t_elect(:))**0.5) 1521 nb_reaction_4 = nb_reaction_4 + 1 1522 v_4(:,nb_reaction_4) = i049(:) 1415 1523 1416 1524 end if !ionchem … … 1626 1734 i_oplus, i_o2plus, i_noplus, i_coplus, i_cplus, & 1627 1735 i_n2plus, i_nplus, i_hplus, i_hco2plus, i_hcoplus, & 1628 i_ elec)1736 i_h2oplus, i_elec) 1629 1737 1630 1738 !================================================================ … … 1651 1759 i_co2plus, i_oplus, i_o2plus, i_noplus, i_coplus, & 1652 1760 i_cplus, i_n2plus, i_nplus, i_hplus, i_hco2plus, & 1653 i_hcoplus, i_ elec1761 i_hcoplus, i_h2oplus, i_elec 1654 1762 integer, intent(in) :: nb_reaction_3_max 1655 1763 ! number of quadratic reactions … … 2545 2653 indice_4(nb_reaction_4) = z4spec(1.0, i_hcoplus, 1.0, i_elec, 1.0, i_co, 1.0, i_h) 2546 2654 2655 !=========================================================== 2656 ! i037 : CO2+ + H2O -> H2O+ + CO2 2657 !=========================================================== 2658 2659 nb_reaction_4 = nb_reaction_4 + 1 2660 indice_4(nb_reaction_4) = z4spec(1.0, i_co2plus, 1.0, i_h2o, 1.0, i_h2oplus, 1.0, i_co2) 2661 2662 !=========================================================== 2663 ! i038 : CO+ + H2O -> H2O+ + CO 2664 !=========================================================== 2665 2666 nb_reaction_4 = nb_reaction_4 + 1 2667 indice_4(nb_reaction_4) = z4spec(1.0, i_coplus, 1.0, i_h2o, 1.0, i_h2oplus, 1.0, i_co) 2668 2669 !=========================================================== 2670 ! i039 : O+ + H2O -> H2O+ + O 2671 !=========================================================== 2672 2673 nb_reaction_4 = nb_reaction_4 + 1 2674 indice_4(nb_reaction_4) = z4spec(1.0, i_oplus, 1.0, i_h2o, 1.0, i_h2oplus, 1.0, i_o) 2675 2676 !=========================================================== 2677 ! i040 : N2+ + H2O -> H2O+ + N2 2678 !=========================================================== 2679 2680 nb_reaction_4 = nb_reaction_4 + 1 2681 indice_4(nb_reaction_4) = z4spec(1.0, i_n2plus, 1.0, i_h2o, 1.0, i_h2oplus, 1.0, i_n2) 2682 2683 !=========================================================== 2684 ! i041 : N+ + H2O -> H2O+ + N 2685 !=========================================================== 2686 2687 nb_reaction_4 = nb_reaction_4 + 1 2688 indice_4(nb_reaction_4) = z4spec(1.0, i_nplus, 1.0, i_h2o, 1.0, i_h2oplus, 1.0, i_n) 2689 2690 !=========================================================== 2691 ! i042 : H+ + H2O -> H2O+ + H 2692 !=========================================================== 2693 2694 nb_reaction_4 = nb_reaction_4 + 1 2695 indice_4(nb_reaction_4) = z4spec(1.0, i_hplus, 1.0, i_h2o, 1.0, i_h2oplus, 1.0, i_h) 2696 2697 !=========================================================== 2698 ! i043 : H2O+ + O2 -> O2+ + H2O 2699 !=========================================================== 2700 2701 nb_reaction_4 = nb_reaction_4 + 1 2702 indice_4(nb_reaction_4) = z4spec(1.0, i_h2oplus, 1.0, i_o2, 1.0, i_o2plus, 1.0, i_h2o) 2703 2704 !=========================================================== 2705 ! i044 : H2O+ + CO -> HCO+ + OH 2706 !=========================================================== 2707 2708 nb_reaction_4 = nb_reaction_4 + 1 2709 indice_4(nb_reaction_4) = z4spec(1.0, i_h2oplus, 1.0, i_co, 1.0, i_hcoplus, 1.0, i_oh) 2710 2711 !=========================================================== 2712 ! i045 : H2O+ + O -> O2+ + H2 2713 !=========================================================== 2714 2715 nb_reaction_4 = nb_reaction_4 + 1 2716 indice_4(nb_reaction_4) = z4spec(1.0, i_h2oplus, 1.0, i_o, 1.0, i_o2plus, 1.0, i_h2) 2717 2718 !=========================================================== 2719 ! i046 : H2O+ + NO -> NO+ + H2O 2720 !=========================================================== 2721 2722 nb_reaction_4 = nb_reaction_4 + 1 2723 indice_4(nb_reaction_4) = z4spec(1.0, i_h2oplus, 1.0, i_no, 1.0, i_noplus, 1.0, i_h2o) 2724 2725 !=========================================================== 2726 ! i047 : H2O+ + e- -> H + H + O 2727 !=========================================================== 2728 2729 nb_reaction_4 = nb_reaction_4 + 1 2730 indice_4(nb_reaction_4) = z4spec(1.0, i_h2oplus, 1.0, i_elec, 2.0, i_h, 1.0, i_o) 2731 2732 !=========================================================== 2733 ! i048 : H2O+ + e- -> H + OH 2734 !=========================================================== 2735 2736 nb_reaction_4 = nb_reaction_4 + 1 2737 indice_4(nb_reaction_4) = z4spec(1.0, i_h2oplus, 1.0, i_elec, 1.0, i_h, 1.0, i_oh) 2738 2739 !=========================================================== 2740 ! i049 : H2O+ + e- -> H2 + O 2741 !=========================================================== 2742 2743 nb_reaction_4 = nb_reaction_4 + 1 2744 indice_4(nb_reaction_4) = z4spec(1.0, i_h2oplus, 1.0, i_elec, 1.0, i_h2, 1.0, i_o) 2547 2745 2548 2746 end if !ionchem … … 2610 2808 (nb_reaction_4 /= nb_reaction_4_max)) then 2611 2809 print*, 'wrong dimensions in indice' 2612 stop2810 call abort_physic("indice","wrong array dimensions",1) 2613 2811 end if 2614 2812 … … 2623 2821 i_co2plus, i_oplus, i_o2plus, i_noplus, & 2624 2822 i_coplus, i_cplus, i_n2plus, i_nplus, & 2625 i_hplus, i_hco2plus, i_hcoplus, i_ elec,&2626 dens, rm, c)2823 i_hplus, i_hco2plus, i_hcoplus, i_h2oplus,& 2824 i_elec, dens, rm, c) 2627 2825 2628 2826 !***************************************************************** … … 2635 2833 & igcm_noplus, igcm_coplus, igcm_cplus, & 2636 2834 & igcm_n2plus, igcm_nplus, igcm_hplus, & 2637 & igcm_hco2plus, igcm_hcoplus, igcm_elec 2835 & igcm_hco2plus, igcm_hcoplus, igcm_h2oplus, & 2836 & igcm_elec 2638 2837 2639 2838 implicit none 2640 2839 2641 #include "callkeys.h"2840 include "callkeys.h" 2642 2841 2643 2842 !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc … … 2656 2855 i_co2plus, i_oplus, i_o2plus, i_noplus, i_coplus, & 2657 2856 i_cplus, i_n2plus, i_nplus, i_hplus, i_hco2plus, & 2658 i_hcoplus, i_ elec2857 i_hcoplus, i_h2oplus, i_elec 2659 2858 2660 2859 real :: zycol(nlayer,nq) ! volume mixing ratios in the gcm … … 2683 2882 if (igcm_co2 == 0) then 2684 2883 write(*,*) "gcmtochim: Error; no CO2 tracer !!!" 2685 stop2884 call abort_physic("gcmtochim","missing co2 tracer",1) 2686 2885 endif 2687 2886 if (igcm_co == 0) then 2688 2887 write(*,*) "gcmtochim: Error; no CO tracer !!!" 2689 stop2888 call abort_physic("gcmtochim","missing co tracer",1) 2690 2889 end if 2691 2890 if (igcm_o == 0) then 2692 2891 write(*,*) "gcmtochim: Error; no O tracer !!!" 2693 stop2892 call abort_physic("gcmtochim","missing o tracer",1) 2694 2893 end if 2695 2894 if (igcm_o1d == 0) then 2696 2895 write(*,*) "gcmtochim: Error; no O1D tracer !!!" 2697 stop2896 call abort_physic("gcmtochim","missing o1d tracer",1) 2698 2897 end if 2699 2898 if (igcm_o2 == 0) then 2700 2899 write(*,*) "gcmtochim: Error; no O2 tracer !!!" 2701 stop2900 call abort_physic("gcmtochim","missing o2 tracer",1) 2702 2901 end if 2703 2902 if (igcm_o3 == 0) then 2704 2903 write(*,*) "gcmtochim: Error; no O3 tracer !!!" 2705 stop2904 call abort_physic("gcmtochim","missing o3 tracer",1) 2706 2905 end if 2707 2906 if (igcm_h == 0) then 2708 2907 write(*,*) "gcmtochim: Error; no H tracer !!!" 2709 stop2908 call abort_physic("gcmtochim","missing h tracer",1) 2710 2909 end if 2711 2910 if (igcm_h2 == 0) then 2712 2911 write(*,*) "gcmtochim: Error; no H2 tracer !!!" 2713 stop2912 call abort_physic("gcmtochim","missing h2 tracer",1) 2714 2913 end if 2715 2914 if (igcm_oh == 0) then 2716 2915 write(*,*) "gcmtochim: Error; no OH tracer !!!" 2717 stop2916 call abort_physic("gcmtochim","missing oh tracer",1) 2718 2917 end if 2719 2918 if (igcm_ho2 == 0) then 2720 2919 write(*,*) "gcmtochim: Error; no HO2 tracer !!!" 2721 stop2920 call abort_physic("gcmtochim","missing ho2 tracer",1) 2722 2921 end if 2723 2922 if (igcm_h2o2 == 0) then 2724 2923 write(*,*) "gcmtochim: Error; no H2O2 tracer !!!" 2725 stop2924 call abort_physic("gcmtochim","missing h2o2 tracer",1) 2726 2925 end if 2727 2926 if (igcm_n == 0) then 2728 2927 write(*,*) "gcmtochim: Error; no N tracer !!!" 2729 stop2928 call abort_physic("gcmtochim","missing n tracer",1) 2730 2929 end if 2731 2930 if (igcm_n2d == 0) then 2732 2931 write(*,*) "gcmtochim: Error; no N2D tracer !!!" 2733 stop2932 call abort_physic("gcmtochim","missing n2d tracer",1) 2734 2933 end if 2735 2934 if (igcm_no == 0) then 2736 2935 write(*,*) "gcmtochim: Error; no NO tracer !!!" 2737 stop2936 call abort_physic("gcmtochim","missing no tracer",1) 2738 2937 end if 2739 2938 if (igcm_no2 == 0) then 2740 2939 write(*,*) "gcmtochim: Error; no NO2 tracer !!!" 2741 stop2940 call abort_physic("gcmtochim","missing no2 tracer",1) 2742 2941 end if 2743 2942 if (igcm_n2 == 0) then 2744 2943 write(*,*) "gcmtochim: Error; no N2 tracer !!!" 2745 stop2944 call abort_physic("gcmtochim","missing n2 tracer",1) 2746 2945 end if 2747 2946 if (igcm_h2o_vap == 0) then 2748 2947 write(*,*) "gcmtochim: Error; no water vapor tracer !!!" 2749 stop2948 call abort_physic("gcmtochim","missing h2o_vap tracer",1) 2750 2949 end if 2751 2950 if (ionchem) then 2752 2951 if (igcm_co2plus == 0) then 2753 2952 write(*,*) "gcmtochim: Error; no CO2+ tracer !!!" 2754 stop2953 call abort_physic("gcmtochim","missing co2plus tracer",1) 2755 2954 end if 2756 2955 if (igcm_oplus == 0) then 2757 2956 write(*,*) "gcmtochim: Error; no O+ tracer !!!" 2758 stop2957 call abort_physic("gcmtochim","missing oplus tracer",1) 2759 2958 end if 2760 2959 if (igcm_o2plus == 0) then 2761 2960 write(*,*) "gcmtochim: Error; no O2+ tracer !!!" 2762 stop2961 call abort_physic("gcmtochim","missing o2plus tracer",1) 2763 2962 end if 2764 2963 if (igcm_noplus == 0) then 2765 2964 write(*,*) "gcmtochim: Error; no NO+ tracer !!!" 2766 stop2965 call abort_physic("gcmtochim","missing noplus tracer",1) 2767 2966 endif 2768 2967 if (igcm_coplus == 0) then 2769 2968 write(*,*) "gcmtochim: Error; no CO+ tracer !!!" 2770 stop2969 call abort_physic("gcmtochim","missing coplus tracer",1) 2771 2970 endif 2772 2971 if (igcm_cplus == 0) then 2773 2972 write(*,*) "gcmtochim: Error; no C+ tracer !!!" 2774 stop2973 call abort_physic("gcmtochim","missing cplus tracer",1) 2775 2974 endif 2776 2975 if (igcm_n2plus == 0) then 2777 2976 write(*,*) "gcmtochim: Error; no N2+ tracer !!!" 2778 stop2977 call abort_physic("gcmtochim","missing n2plus tracer",1) 2779 2978 endif 2780 2979 if (igcm_nplus == 0) then 2781 2980 write(*,*) "gcmtochim: Error; no N+ tracer !!!" 2782 stop2981 call abort_physic("gcmtochim","missing nplus tracer",1) 2783 2982 endif 2784 2983 if (igcm_hplus == 0) then 2785 2984 write(*,*) "gcmtochim: Error; no H+ tracer !!!" 2786 stop2985 call abort_physic("gcmtochim","missing hplus tracer",1) 2787 2986 endif 2788 2987 if (igcm_hco2plus == 0) then 2789 2988 write(*,*) "gcmtochim: Error; no HCO2+ tracer !!!" 2790 stop2989 call abort_physic("gcmtochim","missing hco2plus tracer",1) 2791 2990 endif 2792 2991 if (igcm_hcoplus == 0) then 2793 2992 write(*,*) "gcmtochim: Error; no HCO+ tracer !!!" 2794 stop 2993 call abort_physic("gcmtochim","missing hcoplus tracer",1) 2994 endif 2995 if (igcm_h2oplus == 0) then 2996 write(*,*) "gcmtochim: Error; no H2O+ tracer !!!" 2997 call abort_physic("gcmtochim","missing h2oplus tracer",1) 2795 2998 endif 2796 2999 if (igcm_elec == 0) then 2797 3000 write(*,*) "gcmtochim: Error; no e- tracer !!!" 2798 stop3001 call abort_physic("gcmtochim","missing elec tracer",1) 2799 3002 end if 2800 3003 end if ! ionchem … … 2839 3042 rm(l,i_hco2plus) = zycol(l, igcm_hco2plus) 2840 3043 rm(l,i_hcoplus) = zycol(l, igcm_hcoplus) 3044 rm(l,i_h2oplus) = zycol(l, igcm_h2oplus) 2841 3045 rm(l,i_elec) = zycol(l, igcm_elec) 2842 3046 end do … … 2867 3071 i_co2plus, i_oplus, i_o2plus, i_noplus, & 2868 3072 i_coplus, i_cplus, i_n2plus, i_nplus, & 2869 i_hplus, i_hco2plus, i_hcoplus, i_ elec,&2870 dens, c)3073 i_hplus, i_hco2plus, i_hcoplus, i_h2oplus, & 3074 i_elec, dens, c) 2871 3075 2872 3076 !***************************************************************** … … 2879 3083 igcm_noplus, igcm_coplus, igcm_cplus, & 2880 3084 igcm_n2plus, igcm_nplus, igcm_hplus, & 2881 igcm_hco2plus, igcm_hcoplus, igcm_elec 3085 igcm_hco2plus, igcm_hcoplus, igcm_h2oplus, & 3086 igcm_elec 2882 3087 2883 3088 implicit none … … 2899 3104 i_co2plus, i_oplus, i_o2plus, i_noplus, & 2900 3105 i_coplus, i_cplus, i_n2plus, i_nplus, & 2901 i_hplus, i_hco2plus, i_hcoplus, i_ elec3106 i_hplus, i_hco2plus, i_hcoplus, i_h2oplus, i_elec 2902 3107 2903 3108 real :: dens(nlayer) ! total number density (molecule.cm-3) … … 2953 3158 zycol(l, igcm_hco2plus)= c(l,i_hco2plus)/dens(l) 2954 3159 zycol(l, igcm_hcoplus) = c(l,i_hcoplus)/dens(l) 3160 zycol(l, igcm_h2oplus) = c(l,i_h2oplus)/dens(l) 2955 3161 zycol(l, igcm_elec) = c(l,i_elec)/dens(l) 2956 3162 end do
Note: See TracChangeset
for help on using the changeset viewer.