LMDZ
tracreprobus_mod.F90
Go to the documentation of this file.
2 !
3 ! This module prepares and calls the Reprobus main subroutine
4 !
5 
6 CONTAINS
7 
8  SUBROUTINE tracreprobus(pdtphys, gmtime, debutphy, julien, &
9  presnivs, xlat, xlon, pphis, pphi, &
10  t_seri, pplay, paprs, sh , &
11  tr_seri)
12 
13  USE dimphy
14  USE infotrac_phy
15 #ifdef REPROBUS
16  USE chem_rep, ONLY : pdt_rep, & ! pas de temps reprobus
17  daynum, iter, & ! jourjulien, iteration chimie
18  pdel
19 #endif
20  IMPLICIT NONE
21 
22 ! Input argument
23 !---------------
24  REAL,INTENT(IN) :: pdtphys ! Pas d'integration pour la physique (seconde)
25  REAL,INTENT(IN) :: gmtime ! Heure courante
26  LOGICAL,INTENT(IN) :: debutphy ! le flag de l'initialisation de la physique
27  INTEGER,INTENT(IN) :: julien ! Jour julien
28 
29  REAL,DIMENSION(klev),INTENT(IN) :: presnivs! pressions approximat. des milieux couches (en PA)
30  REAL,DIMENSION(klon),INTENT(IN) :: xlat ! latitudes pour chaque point
31  REAL,DIMENSION(klon),INTENT(IN) :: xlon ! longitudes pour chaque point
32  REAL,DIMENSION(klon),INTENT(IN) :: pphis ! geopotentiel du sol
33  REAL,DIMENSION(klon,klev),INTENT(IN) :: pphi ! geopotentiel de chaque couche
34 
35  REAL,DIMENSION(klon,klev),INTENT(IN) :: t_seri ! Temperature
36  REAL,DIMENSION(klon,klev),INTENT(IN) :: pplay ! pression pour le mileu de chaque couche (en Pa)
37  REAL,DIMENSION(klon,klev+1),INTENT(IN) :: paprs ! pression pour chaque inter-couche (en Pa)
38  REAL,DIMENSION(klon,klev),INTENT(IN) :: sh ! humidite specifique
39 
40 
41 ! Output argument
42 !----------------
43  REAL,DIMENSION(klon,klev,nbtr),INTENT(INOUT) :: tr_seri ! Concentration Traceur [U/KgA]
44 
45 
46 ! Local variables
47 !----------------
48  INTEGER :: it, k
49 
50 #ifdef REPROBUS
51  ! -- CHIMIE REPROBUS --
52  pdt_rep=pdtphys/2.
53 
54  DO k = 1, klev
55  pdel(:,k) = paprs(:,k) - paprs(:,k+1)
56  END DO
57 
58  ! initialisation de ozone passif a ozone en debut d hiver HN et HS
59  IF (julien == 341 .OR. julien == 181) THEN
60  tr_seri(:,:,11)=tr_seri(:,:,8)
61  END IF
62 
63  DO iter = 1,2
64  daynum = float(julien) + gmtime + (iter-1)*pdt_rep/86400.
65 
66  DO it=1, nbtr
67 ! WRITE(lunout,*)it,' ',minval(tr_seri(:,:,it)),maxval(tr_seri(:,:,it))
68 ! seulement pour les especes chimiques (pas l'age de l'air)
69 ! verif valeurs extremes
70 ! correction: a 1.e-30 quand =0 ou negatif et
71 ! call abort si >ou= 1.e10
72  WRITE(*,*)it,'nqtot',nqtot,'nbtr',nbtr
73  IF (it < nqtot) THEN
74  WRITE(*,*)'ici',it,nqtot
75 #ifdef REPROBUS
76  CALL minmaxqfi_chimie(tr_seri(1,1,it),0.,1.e10,'avant chimie ')
77 #endif
78  WRITE(*,*)'apres'
79  ENDIF
80  ENDDO
81 
82 #ifdef REPROBUS
83  CALL chemmain_rlong_1401( &
84  tr_seri, & !argument phytrac (change de nom apres: vmr)
85  xlon, & !argument phytrac (change de nom apres: lon)
86  xlat, & !argument phytrac (change de nom apres: lat)
87  t_seri, & !argument phytrac (meme nom)
88  pplay, & !argument phytrac (meme nom)
89  pphi, & !argument phytrac (meme nom)
90  pphis, & !argument phytrac (meme nom)
91  presnivs, & !argument phytrac (meme nom)
92  sh, & !argument phytrac (meme nom)
93  debutphy) !argument phytrac (change de nom apres: debut)
94  ! pdel, pdt_rep, daynum : definit dans phytrac et utilise dans chemmain
95  ! et transporte par CHEM_REP
96 #endif
97 
98  END DO
99 
100 
101  !
102  DO it=1,nbtr
103  WRITE(solsym(it),'(i2)') it
104  END DO
105 #endif
106  END SUBROUTINE tracreprobus
107 
108 END MODULE tracreprobus_mod
character(len=8), dimension(:), allocatable, save solsym
integer, save nbtr
integer, save klev
Definition: dimphy.F90:7
!$Id presnivs(llm)
integer, save nqtot
Definition: infotrac_phy.F90:8
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL pplay
Definition: calcul_STDlev.h:26
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL &zphi geo500!IM on interpole a chaque pas de temps le paprs
Definition: dimphy.F90:1
subroutine tracreprobus(pdtphys, gmtime, debutphy, julien, presnivs, xlat, xlon, pphis, pphi, t_seri, pplay, paprs, sh, tr_seri)