Changeset 1409 for LMDZ4


Ignore:
Timestamp:
Jul 8, 2010, 1:46:29 PM (14 years ago)
Author:
jghattas
Message:
  • Added tracer "Age of stratospheric air", activated by putting Aga in tracer.def.
  • The logical rnpb is now controled during execution. rnpb is true only if both tracers RN and PB existe in tracer.def. RN and PB can now be removed from tracer.def
  • In tracer.def, the 2 water traceurs (H2Ov and H2Ol) must still be the first 2 tracers. The following tracers have no specific order(RN and PB can now change places). Still a minimum of 3 tracers are required.
Location:
LMDZ4/trunk/libf/phylmd
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/trunk/libf/phylmd/cltracrn.F90

    r1279 r1409  
    88 
    99  USE dimphy
     10  USE traclmdz_mod, ONLY : id_rn, id_pb
    1011  IMPLICIT NONE
    1112!======================================================================
     
    2021!---------------------------------------------------------------------
    2122! Arguments:
    22 ! itr......input-R-  le type de traceur 1- Rn 2 - Pb
     23! itr......input-R-  le type de traceur : id_rn(radon), id_pb(plomb)
    2324! dtime....input-R-  intervalle du temps (en secondes) ~ pdtphys
    2425! u1lay....input-R-  vent u de la premiere couche (m/s)
     
    195196!--------------------------------------------------------
    196197
    197      IF ( (itr.eq.1.AND.NINT(masktr(i)).EQ.1.AND.lat(i).GE.60..AND.lat(i).LE.70.).OR.      &
    198           (itr.eq.2.AND.NINT(masktr(i)).EQ.1.AND.lat(i).GE.60..AND.lat(i).LE.70.) ) THEN
     198     IF ( (itr.eq.id_rn.AND.NINT(masktr(i)).EQ.1.AND.lat(i).GE.60..AND.lat(i).LE.70.).OR.      &
     199          (itr.eq.id_pb.AND.NINT(masktr(i)).EQ.1.AND.lat(i).GE.60..AND.lat(i).LE.70.) ) THEN
    199200        zx_trs(i) = local_trs(i)
    200201        zx_a = zx_trs(i)                                           &
     
    221222!---------------------------------------------------------------
    222223
    223      IF ( (itr.EQ.1.AND.NINT(masktr(i)).EQ.0).OR.       &
    224           (itr.EQ.1.AND.NINT(masktr(i)).EQ.1.AND.lat(i).LT.-60.)) THEN
     224     IF ( (itr.EQ.id_rn.AND.NINT(masktr(i)).EQ.0).OR.       &
     225          (itr.EQ.id_rn.AND.NINT(masktr(i)).EQ.1.AND.lat(i).LT.-60.)) THEN
    225226        zx_trs(i) = 0.
    226227        local_trs(i) = 0.
     
    230231! des oceans et des continents
    231232!--------------------------------------------------------------
    232      IF ( (itr.EQ.1.AND.NINT(masktr(i)).EQ.0).OR.    &
    233           (itr.EQ.1.AND.NINT(masktr(i)).EQ.1.AND.lat(i).GT.70.)) THEN
     233     IF ( (itr.EQ.id_rn.AND.NINT(masktr(i)).EQ.0).OR.    &
     234          (itr.EQ.id_rn.AND.NINT(masktr(i)).EQ.1.AND.lat(i).GT.70.)) THEN
    234235        zx_trs(i) = 0.
    235236        local_trs(i) = 0.
     
    239240!--------------------------------------------
    240241
    241      IF (itr.eq.1.AND.NINT(masktr(i)).EQ.0) THEN
     242     IF (itr.eq.id_rn.AND.NINT(masktr(i)).EQ.0) THEN
    242243        zx_trs(i) = 0.
    243244        local_trs(i) = 0.
  • LMDZ4/trunk/libf/phylmd/initrrnpb.F90

    r1403 r1409  
    55  USE dimphy
    66  USE infotrac, ONLY : nbtr
     7  USE traclmdz_mod, ONLY : id_rn, id_pb
    78  IMPLICIT NONE
    89!======================================================================
    910! Auteur(s): AA + CG (LGGE/CNRS) Date 24-06-94
    1011! Objet: initialisation des constantes des traceurs
    11 !AA Revison pour le controle avec la temperature du sol
    12 !AA
    13 !AA   it = 1 radon ss controle de ts
    14 !AA   it = 2 plomb ss controle de ts 
     12! id_rn : identificateur du traceur radon
     13! id_pb : identificateur du traceur plomb
    1514!======================================================================
    1615! Arguments:
     
    4241  CHARACTER (LEN=80) :: abort_message
    4342
     43!
     44! Radon it = id_rn
     45!----------------
     46  IF (id_rn /= 0) THEN
     47     it = id_rn
     48     s = 1.E4             ! Source: atome par m2
     49     hsoltr(it) = 0.1     ! Hauteur equivalente du reservoir :
     50                          ! 1 m * porosite 0.1
     51     tautr(it) = 4.765E5  ! Decroissance du radon, secondes
     52     vdeptr(it) = 0.      ! Pas de depot sec pour le radon
     53     scavtr(it) = 0.      ! Pas de lessivage pour le radon
     54     
     55     WRITE(*,*)'-------------- SOURCE DU RADON ------------------------ '
     56     WRITE(*,*)'it = ',it
     57     WRITE(*,*)'Source : ', s
     58     WRITE(*,*)'Hauteur equivalente du reservoir de sol: ',hsoltr(it)
     59     WRITE(*,*)'Decroissance (s): ', tautr(it)
     60     WRITE(*,*)'Vitesse de depot sec: ',vdeptr(it)
     61     WRITE(*,*)'Facteur de lessivage: ',scavtr(it)
    4462
    45   WRITE(*,*)'PASSAGE initrrnpb ...'
     63     DO i = 1,klon
     64        masktr(i,it) = 0.
     65        IF ( NINT(pctsrf(i,1)) .EQ. 1 ) masktr(i,it) = 1.
     66        fshtr(i,it) = s * masktr(i,it)
     67     END DO
     68
     69  END IF ! id_rn /= 0
     70
    4671!
    47 ! Radon it = 1
     72! 210Pb it = id_pb
    4873!----------------
    49   IF ( nbtr .LE. 0 ) then
    50     abort_message = '**PHYTRAC:initrrnpb:** nbtr < 0; verifier RN dans traceur.def'
    51     CALL abort_gcm (modname,abort_message,1)
    52   ENDIF
    53   it = 1
    54   s = 1.E4             ! Source: atome par m2
    55   hsoltr(it) = 0.1     ! Hauteur equivalente du reservoir :
    56                        ! 1 m * porosite 0.1
    57   tautr(it) = 4.765E5  ! Decroissance du radon, secondes
    58   vdeptr(it) = 0.      ! Pas de depot sec pour le radon
    59   scavtr(it) = 0.      ! Pas de lessivage pour le radon
    60  
    61   WRITE(*,*)'-------------- SOURCE DU RADON ------------------------ '
    62   WRITE(*,*)'it = ',it
    63   WRITE(*,*)'Source : ', s
    64   WRITE(*,*)'Hauteur equivalente du reservoir de sol: ',hsoltr(it)
    65   WRITE(*,*)'Decroissance (s): ', tautr(it)
    66   WRITE(*,*)'Vitesse de depot sec: ',vdeptr(it)
    67   WRITE(*,*)'Facteur de lessivage: ',scavtr(it)
    68 
    69   DO i = 1,klon
    70      masktr(i,it) = 0.
    71      IF ( NINT(pctsrf(i,1)) .EQ. 1 ) masktr(i,it) = 1.
    72      fshtr(i,it) = s * masktr(i,it)
    73   END DO
    74 !
    75 ! 210Pb it = 2
    76 !----------------
    77   IF ( nbtr .LE. 1 ) THEN
    78     abort_message='**PHYTRAC**:initrrnpb:** nbtr <= 1; verifier PB dans traceur.def'
    79     CALL abort_gcm (modname,abort_message,1)
    80   ENDIF
    81   it = 2
    82   s = 0.                ! Pas de source
    83   hsoltr(it) = 10.      ! Hauteur equivalente du reservoir
    84                         ! a partir duquel le depot Brownien a lieu
    85   tautr(it) = 1.028E9   ! Decroissance du Pb210, secondes
    86   vdeptr(it) = 1.E-3    ! 1 mm/s pour le 210Pb
    87   scavtr(it) =  .5      ! Lessivage du Pb210
    88   DO i = 1,klon
    89      masktr(i,it) = 1.  ! Le depot sec peut avoir lieu partout
    90      fshtr(i,it) = s * masktr(i,it)
    91   END DO
    92   WRITE(*,*)'-------------- SOURCE DU PLOMB ------------------------ '
    93   WRITE(*,*)'it = ',it
    94   WRITE(*,*)'Source : ', s
    95   WRITE(*,*)'Hauteur equivalente du reservoir : ',hsoltr(it)
    96   WRITE(*,*)'Decroissance (s): ', tautr(it)
    97   WRITE(*,*)'Vitesse de depot sec: ',vdeptr(it)
    98   WRITE(*,*)'Facteur de lessivage: ',scavtr(it)
    99 
    100   WRITE(*,*) 'Initialisation RN et PB ok'
    101 
     74  IF (id_pb /= 0) THEN
     75     it = id_pb
     76     s = 0.                ! Pas de source
     77     hsoltr(it) = 10.      ! Hauteur equivalente du reservoir
     78                           ! a partir duquel le depot Brownien a lieu
     79     tautr(it) = 1.028E9   ! Decroissance du Pb210, secondes
     80     vdeptr(it) = 1.E-3    ! 1 mm/s pour le 210Pb
     81     scavtr(it) =  .5      ! Lessivage du Pb210
     82     DO i = 1,klon
     83        masktr(i,it) = 1.  ! Le depot sec peut avoir lieu partout
     84        fshtr(i,it) = s * masktr(i,it)
     85     END DO
     86     WRITE(*,*)'-------------- SOURCE DU PLOMB ------------------------ '
     87     WRITE(*,*)'it = ',it
     88     WRITE(*,*)'Source : ', s
     89     WRITE(*,*)'Hauteur equivalente du reservoir : ',hsoltr(it)
     90     WRITE(*,*)'Decroissance (s): ', tautr(it)
     91     WRITE(*,*)'Vitesse de depot sec: ',vdeptr(it)
     92     WRITE(*,*)'Facteur de lessivage: ',scavtr(it)
     93     
     94  END IF
     95     
    10296END SUBROUTINE initrrnpb
  • LMDZ4/trunk/libf/phylmd/radio_decay.F90

    r1279 r1409  
    88  USE dimphy
    99  USE infotrac, ONLY : nbtr
     10  USE traclmdz_mod, ONLY : id_rn, id_pb
    1011  IMPLICIT NONE
    1112!-----------------------------------------------------------------------
    1213! Auteur(s): AA + CG (LGGE/CNRS) Date 24-06-94
    1314! Objet: Calcul de la tendance radioactive des traceurs type radioelements
    14 !CG240694 : Pour un traceur, le radon
    15 !CG161294 : Plus un 2eme traceur, le 210Pb. Le radon decroit en plomb.
     15!        Cas particulier pour le couple radon-plomb : Le radon decroit en plomb
    1616!-----------------------------------------------------------------------
    1717!
     
    3434
    3535  DO it = 1,nbtr
     36     d_tr(:,:,it) = 0.
    3637     IF ( radio(it) ) THEN
    3738        IF (tautr(it) .GT. 0.) THEN
     
    4142              END DO
    4243           END DO
    43         ELSE
    44            d_tr(:,:,it) = 0.
    4544        END IF
    46      ELSE
    47         d_tr(:,:,it) = 0.
    4845     END IF
    4946  END DO
     47
    5048!-------------------------------------------------------
    51 !CG161294 : Cas particulier radon [it=1] => plomb [it=2]
     49! Cas particulier radon (id_rn) => plomb (id_pb)
    5250!-------------------------------------------------------
    5351  IF ( rnpb ) THEN
    5452     DO k = 1,klev
    5553        DO i = 1,klon
    56            d_tr(i,k,2) = d_tr(i,k,2) - d_tr(i,k,1)
     54           d_tr(i,k,id_pb) = d_tr(i,k,id_pb) - d_tr(i,k,id_rn)
    5755        ENDDO
    5856     ENDDO
  • LMDZ4/trunk/libf/phylmd/traclmdz_mod.F90

    r1403 r1409  
    3434!$OMP THREADPRIVATE(trs)
    3535
     36  INTEGER,SAVE :: id_aga      ! Identification number for tracer : Age of stratospheric air
     37!$OMP THREADPRIVATE(id_aga)
     38  INTEGER,SAVE :: lev_1p5km   ! Approximative vertical layer number at 1.5km above surface, used for calculation of the age of air. The result shouldn't be that sensible to the exactness of this value as long as it is in the lower troposphere.
     39!$OMP THREADPRIVATE(lev_1p5km)
     40
     41  INTEGER,SAVE :: id_rn, id_pb ! Identification number for tracer : radon (Rn222), lead (Pb210)
     42!$OMP THREADPRIVATE(id_rn, id_pb)
     43
    3644  INTEGER,SAVE :: id_be       ! Activation et position du traceur Be7 [ id_be=0 -> desactive ]
    3745!$OMP THREADPRIVATE(id_be)
     
    5159  ! 0 means no ozone tracer
    5260
    53   LOGICAL,SAVE :: rnpb=.TRUE. ! Presence du couple Rn222, Pb210
     61  LOGICAL,SAVE :: rnpb=.FALSE. ! Presence du couple Rn222, Pb210
    5462!$OMP THREADPRIVATE(rnpb)
    5563
     
    143151! Recherche des traceurs connus : Be7, O3, CO2,...
    144152! --------------------------------------------
    145     id_be=0
    146     id_o3=0
    147     DO it=1,nbtr
    148        iiq=niadv(it+2)
    149        IF ( tname(iiq) == "BE" .OR. tname(iiq) == "Be" .OR.  &
     153    id_rn=0; id_pb=0; id_aga=0; id_be=0; id_o3=0
     154    DO it=1,nbtr
     155       iiq=niadv(it+2)
     156       IF ( tname(iiq) == "RN" ) THEN
     157          id_rn=it ! radon
     158       ELSE IF ( tname(iiq) == "PB") THEN
     159          id_pb=it ! plomb
     160       ELSE IF ( tname(iiq) == "Aga" .OR. tname(iiq) == "AGA" ) THEN
     161          ! Age of stratospheric air
     162          id_aga=it
     163          radio(id_aga) = .FALSE.
     164          aerosol(id_aga) = .FALSE.
     165          pbl_flg(id_aga) = 0
     166         
     167          ! Find the first model layer above 1.5km from the surface
     168          IF (klev>=30) THEN
     169             lev_1p5km=6   ! NB! This value is for klev=39
     170          ELSE IF (klev>=10) THEN
     171             lev_1p5km=5   ! NB! This value is for klev=19
     172          ELSE
     173             lev_1p5km=klev/2
     174          END IF
     175       ELSE IF ( tname(iiq) == "BE" .OR. tname(iiq) == "Be" .OR.  &
    150176            tname(iiq) == "BE7" .OR. tname(iiq) == "Be7" ) THEN 
    151177          ! Recherche du Beryllium 7
     
    165191
    166192    id_dry=0
    167 
    168193    DO it=1,nbtr
    169194       iiq=niadv(it+2)
     
    224249! Valeurs specifiques pour les traceurs Rn222 et Pb210
    225250! ----------------------------------------------
    226     IF (rnpb) THEN
    227         
    228        radio(1)= .TRUE.
    229        radio(2)= .TRUE.
    230        pbl_flg(1) = 0 ! au lieu de clsol=true ! CL au sol calcule
    231        pbl_flg(2) = 0 ! au lieu de clsol=true
    232        
    233        aerosol(2) = .TRUE. ! le Pb est un aerosol
     251    IF ( id_rn/=0 .AND. id_pb/=0 ) THEN
     252       rnpb = .TRUE.
     253       radio(id_rn)= .TRUE.
     254       radio(id_pb)= .TRUE.
     255       pbl_flg(id_rn) = 0 ! au lieu de clsol=true ! CL au sol calcule
     256       pbl_flg(id_pb) = 0 ! au lieu de clsol=true
     257       aerosol(id_rn) = .FALSE.
     258       aerosol(id_pb) = .TRUE. ! le Pb est un aerosol
    234259       
    235260       CALL initrrnpb (ftsol,pctsrf,masktr,fshtr,hsoltr,tautr,vdeptr,scavtr)
     
    480505       WRITE(solsym(it),'(i2)') it
    481506    END DO
     507
     508!=================================================================
     509! Update tracer : Age of stratospheric air
     510!=================================================================
     511    IF (id_aga/=0) THEN
     512       
     513       ! Bottom layers
     514       DO k = 1, lev_1p5km
     515          tr_seri(:,k,id_aga) = 0.0
     516       END DO
     517       
     518       ! Layers above 1.5km
     519       DO k = lev_1p5km+1,klev-1
     520          tr_seri(:,k,id_aga) = tr_seri(:,k,id_aga) + pdtphys
     521       END DO
     522       
     523       ! Top layer
     524       tr_seri(:,klev,id_aga) = tr_seri(:,klev-1,id_aga)
     525       
     526    END IF
     527
    482528!======================================================================
    483529!     -- Calcul de l'effet de la couche limite --
     
    497543   
    498544    DO it=1, nbtr
    499        IF (couchelimite .AND. pbl_flg(it) == 0 ) THEN ! couche limite avec quantite dans le sol calculee
     545       IF (couchelimite .AND. pbl_flg(it) == 0 .AND. (it==id_rn .OR. it==id_pb)) THEN
     546          ! couche limite avec quantite dans le sol calculee
    500547          CALL cltracrn(it, pdtphys, yu1, yv1,     &
    501548               cdragh, coefh,t_seri,ftsol,pctsrf,  &
Note: See TracChangeset for help on using the changeset viewer.