[1565] | 1 | MODULE tracreprobus_mod |
---|
[5099] | 2 | |
---|
[5185] | 3 | ! This module prepares and calls the Reprobus main SUBROUTINE |
---|
[1565] | 4 | |
---|
| 5 | CONTAINS |
---|
| 6 | |
---|
| 7 | SUBROUTINE tracreprobus(pdtphys, gmtime, debutphy, julien, & |
---|
[5185] | 8 | presnivs, xlat, xlon, pphis, pphi, & |
---|
| 9 | t_seri, pplay, paprs, sh, & |
---|
| 10 | tr_seri) |
---|
[1565] | 11 | |
---|
| 12 | USE dimphy |
---|
[4124] | 13 | USE infotrac_phy, ONLY: nbtr |
---|
[5185] | 14 | USE lmdz_cppkeys_wrapper, ONLY: CPPKEY_REPROBUS |
---|
| 15 | USE lmdz_reprobus_wrappers, ONLY: pdt_rep, & ! pas de temps reprobus |
---|
| 16 | daynum, iter, & ! jourjulien, iteration chimie |
---|
| 17 | pdel, & |
---|
| 18 | d_q_rep, d_ql_rep, d_qi_rep |
---|
[1565] | 19 | IMPLICIT NONE |
---|
| 20 | |
---|
[5185] | 21 | ! Input argument |
---|
| 22 | !--------------- |
---|
| 23 | REAL, INTENT(IN) :: pdtphys ! Pas d'integration pour la physique (seconde) |
---|
| 24 | REAL, INTENT(IN) :: gmtime ! Heure courante |
---|
| 25 | LOGICAL, INTENT(IN) :: debutphy ! le flag de l'initialisation de la physique |
---|
| 26 | INTEGER, INTENT(IN) :: julien ! Jour julien |
---|
[1565] | 27 | |
---|
[5185] | 28 | REAL, DIMENSION(klev), INTENT(IN) :: presnivs! pressions approximat. des milieux couches (en PA) |
---|
| 29 | REAL, DIMENSION(klon), INTENT(IN) :: xlat ! latitudes pour chaque point |
---|
| 30 | REAL, DIMENSION(klon), INTENT(IN) :: xlon ! longitudes pour chaque point |
---|
| 31 | REAL, DIMENSION(klon), INTENT(IN) :: pphis ! geopotentiel du sol |
---|
| 32 | REAL, DIMENSION(klon, klev), INTENT(IN) :: pphi ! geopotentiel de chaque couche |
---|
[1565] | 33 | |
---|
[5185] | 34 | REAL, DIMENSION(klon, klev), INTENT(IN) :: t_seri ! Temperature |
---|
| 35 | REAL, DIMENSION(klon, klev), INTENT(IN) :: pplay ! pression pour le mileu de chaque couche (en Pa) |
---|
| 36 | REAL, DIMENSION(klon, klev + 1), INTENT(IN) :: paprs ! pression pour chaque inter-couche (en Pa) |
---|
| 37 | REAL, DIMENSION(klon, klev), INTENT(IN) :: sh ! humidite specifique |
---|
[1565] | 38 | |
---|
| 39 | |
---|
[5185] | 40 | ! Output argument |
---|
| 41 | !---------------- |
---|
| 42 | REAL, DIMENSION(klon, klev, nbtr), INTENT(INOUT) :: tr_seri ! Concentration Traceur [U/KgA] |
---|
[1565] | 43 | |
---|
[5185] | 44 | |
---|
| 45 | ! Local variables |
---|
| 46 | !---------------- |
---|
[3666] | 47 | INTEGER :: it, k, niter |
---|
[1565] | 48 | |
---|
[5185] | 49 | IF (CPPKEY_REPROBUS) THEN |
---|
| 50 | ! -- CHIMIE REPROBUS -- |
---|
| 51 | ! pdt_rep=pdtphys/2. |
---|
| 52 | niter = pdtphys / pdt_rep |
---|
| 53 | WRITE(*, *)'nb d appel de REPROBUS', niter |
---|
[3666] | 54 | |
---|
[5185] | 55 | DO k = 1, klev |
---|
| 56 | pdel(:, k) = paprs(:, k) - paprs (:, k + 1) |
---|
| 57 | END DO |
---|
[3125] | 58 | |
---|
[5185] | 59 | ! initialisation de ozone passif a ozone en debut d hiver HN et HS |
---|
| 60 | IF (julien == 341 .OR. julien == 181) THEN |
---|
| 61 | tr_seri(:, :, 11) = tr_seri(:, :, 8) |
---|
| 62 | END IF |
---|
[3125] | 63 | |
---|
[5185] | 64 | d_q_rep(:, :) = 0. |
---|
| 65 | d_ql_rep(:, :) = 0. |
---|
| 66 | d_qi_rep(:, :) = 0. |
---|
| 67 | |
---|
| 68 | DO iter = 1, niter |
---|
| 69 | daynum = FLOAT(julien) + gmtime + (iter - 1) * pdt_rep / 86400. |
---|
| 70 | |
---|
| 71 | ! DO it=1, nbtr |
---|
| 72 | ! WRITE(lunout,*)it,' ',minval(tr_seri(:,:,it)),maxval(tr_seri(:,:,it)) |
---|
| 73 | ! seulement pour les especes chimiques (pas l'age de l'air) |
---|
| 74 | ! verif valeurs extremes |
---|
| 75 | ! correction: a 1.e-30 quand =0 ou negatif et |
---|
| 76 | ! CALL abort si >ou= 1.e10 |
---|
| 77 | ! WRITE(*,*)it,'nqtot',nqtot,'nbtr',nbtr |
---|
| 78 | ! IF (it < nqtot) THEN |
---|
| 79 | ! WRITE(*,*)'iciav',it,nqtot |
---|
| 80 | ! CALL minmaxqfi_chimie(it,tr_seri(1,1,it),0.,1.e10,'avant chimie ') |
---|
| 81 | ! WRITE(*,*)iter,'avpres' |
---|
| 82 | ! ENDIF |
---|
| 83 | ! ENDDO |
---|
| 84 | |
---|
| 85 | CALL chemmain_rlong_1401(& |
---|
| 86 | tr_seri, & !argument phytrac (change de nom apres: vmr) |
---|
| 87 | xlon, & !argument phytrac (change de nom apres: lon) |
---|
| 88 | xlat, & !argument phytrac (change de nom apres: lat) |
---|
| 89 | t_seri, & !argument phytrac (meme nom) |
---|
| 90 | pplay, & !argument phytrac (meme nom) |
---|
| 91 | paprs, & |
---|
| 92 | pphi, & !argument phytrac (meme nom) |
---|
| 93 | pphis, & !argument phytrac (meme nom) |
---|
| 94 | presnivs, & !argument phytrac (meme nom) |
---|
| 95 | sh, & !argument phytrac (meme nom) |
---|
| 96 | debutphy) !argument phytrac (change de nom apres: debut) |
---|
| 97 | ! pdel, pdt_rep, daynum : definit dans phytrac et utilise dans chemmain |
---|
| 98 | ! et transporte par CHEM_REP |
---|
| 99 | |
---|
| 100 | ! DO it=1, nbtr |
---|
| 101 | ! WRITE(lunout,*)it,' ',minval(tr_seri(:,:,it)),maxval(tr_seri(:,:,it)) |
---|
| 102 | ! seulement pour les especes chimiques (pas l'age de l'air) |
---|
| 103 | ! verif valeurs extremes |
---|
| 104 | ! correction: a 1.e-30 quand =0 ou negatif et |
---|
| 105 | ! CALL abort si >ou= 1.e10 |
---|
| 106 | ! WRITE(*,*)it,'nqtot',nqtot,'nbtr',nbtr |
---|
| 107 | ! IF (it < nqtot) THEN |
---|
| 108 | ! WRITE(*,*)'iciap',it,nqtot |
---|
| 109 | ! CALL minmaxqfi_chimie(it,tr_seri(1,1,it),0.,1.e10,'apres chemmain') |
---|
| 110 | ! WRITE(*,*)iter,'appres' |
---|
| 111 | ! ENDIF |
---|
| 112 | ! ENDDO |
---|
| 113 | |
---|
| 114 | END DO |
---|
| 115 | END IF |
---|
[1565] | 116 | END SUBROUTINE tracreprobus |
---|
| 117 | |
---|
| 118 | END MODULE tracreprobus_mod |
---|