Changeset 1409 for LMDZ4/trunk
- Timestamp:
- Jul 8, 2010, 1:46:29 PM (14 years ago)
- Location:
- LMDZ4/trunk/libf/phylmd
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/trunk/libf/phylmd/cltracrn.F90
r1279 r1409 8 8 9 9 USE dimphy 10 USE traclmdz_mod, ONLY : id_rn, id_pb 10 11 IMPLICIT NONE 11 12 !====================================================================== … … 20 21 !--------------------------------------------------------------------- 21 22 ! Arguments: 22 ! itr......input-R- le type de traceur 1- Rn 2 - Pb23 ! itr......input-R- le type de traceur : id_rn(radon), id_pb(plomb) 23 24 ! dtime....input-R- intervalle du temps (en secondes) ~ pdtphys 24 25 ! u1lay....input-R- vent u de la premiere couche (m/s) … … 195 196 !-------------------------------------------------------- 196 197 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.) ) THEN198 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 199 200 zx_trs(i) = local_trs(i) 200 201 zx_a = zx_trs(i) & … … 221 222 !--------------------------------------------------------------- 222 223 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.)) THEN224 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 225 226 zx_trs(i) = 0. 226 227 local_trs(i) = 0. … … 230 231 ! des oceans et des continents 231 232 !-------------------------------------------------------------- 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.)) THEN233 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 234 235 zx_trs(i) = 0. 235 236 local_trs(i) = 0. … … 239 240 !-------------------------------------------- 240 241 241 IF (itr.eq. 1.AND.NINT(masktr(i)).EQ.0) THEN242 IF (itr.eq.id_rn.AND.NINT(masktr(i)).EQ.0) THEN 242 243 zx_trs(i) = 0. 243 244 local_trs(i) = 0. -
LMDZ4/trunk/libf/phylmd/initrrnpb.F90
r1403 r1409 5 5 USE dimphy 6 6 USE infotrac, ONLY : nbtr 7 USE traclmdz_mod, ONLY : id_rn, id_pb 7 8 IMPLICIT NONE 8 9 !====================================================================== 9 10 ! Auteur(s): AA + CG (LGGE/CNRS) Date 24-06-94 10 11 ! 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 15 14 !====================================================================== 16 15 ! Arguments: … … 42 41 CHARACTER (LEN=80) :: abort_message 43 42 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) 44 62 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 46 71 ! 47 ! Radon it = 172 ! 210Pb it = id_pb 48 73 !---------------- 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 102 96 END SUBROUTINE initrrnpb -
LMDZ4/trunk/libf/phylmd/radio_decay.F90
r1279 r1409 8 8 USE dimphy 9 9 USE infotrac, ONLY : nbtr 10 USE traclmdz_mod, ONLY : id_rn, id_pb 10 11 IMPLICIT NONE 11 12 !----------------------------------------------------------------------- 12 13 ! Auteur(s): AA + CG (LGGE/CNRS) Date 24-06-94 13 14 ! 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 16 16 !----------------------------------------------------------------------- 17 17 ! … … 34 34 35 35 DO it = 1,nbtr 36 d_tr(:,:,it) = 0. 36 37 IF ( radio(it) ) THEN 37 38 IF (tautr(it) .GT. 0.) THEN … … 41 42 END DO 42 43 END DO 43 ELSE44 d_tr(:,:,it) = 0.45 44 END IF 46 ELSE47 d_tr(:,:,it) = 0.48 45 END IF 49 46 END DO 47 50 48 !------------------------------------------------------- 51 ! CG161294 : Cas particulier radon [it=1] => plomb [it=2]49 ! Cas particulier radon (id_rn) => plomb (id_pb) 52 50 !------------------------------------------------------- 53 51 IF ( rnpb ) THEN 54 52 DO k = 1,klev 55 53 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) 57 55 ENDDO 58 56 ENDDO -
LMDZ4/trunk/libf/phylmd/traclmdz_mod.F90
r1403 r1409 34 34 !$OMP THREADPRIVATE(trs) 35 35 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 36 44 INTEGER,SAVE :: id_be ! Activation et position du traceur Be7 [ id_be=0 -> desactive ] 37 45 !$OMP THREADPRIVATE(id_be) … … 51 59 ! 0 means no ozone tracer 52 60 53 LOGICAL,SAVE :: rnpb=. TRUE. ! Presence du couple Rn222, Pb21061 LOGICAL,SAVE :: rnpb=.FALSE. ! Presence du couple Rn222, Pb210 54 62 !$OMP THREADPRIVATE(rnpb) 55 63 … … 143 151 ! Recherche des traceurs connus : Be7, O3, CO2,... 144 152 ! -------------------------------------------- 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. & 150 176 tname(iiq) == "BE7" .OR. tname(iiq) == "Be7" ) THEN 151 177 ! Recherche du Beryllium 7 … … 165 191 166 192 id_dry=0 167 168 193 DO it=1,nbtr 169 194 iiq=niadv(it+2) … … 224 249 ! Valeurs specifiques pour les traceurs Rn222 et Pb210 225 250 ! ---------------------------------------------- 226 IF ( rnpb) THEN227 228 radio( 1)= .TRUE.229 radio( 2)= .TRUE.230 pbl_flg( 1) = 0 ! au lieu de clsol=true ! CL au sol calcule231 pbl_flg( 2) = 0 ! au lieu de clsol=true232 233 aerosol( 2) = .TRUE. ! le Pb est un aerosol251 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 234 259 235 260 CALL initrrnpb (ftsol,pctsrf,masktr,fshtr,hsoltr,tautr,vdeptr,scavtr) … … 480 505 WRITE(solsym(it),'(i2)') it 481 506 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 482 528 !====================================================================== 483 529 ! -- Calcul de l'effet de la couche limite -- … … 497 543 498 544 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 500 547 CALL cltracrn(it, pdtphys, yu1, yv1, & 501 548 cdragh, coefh,t_seri,ftsol,pctsrf, &
Note: See TracChangeset
for help on using the changeset viewer.