Changeset 766 for LMDZ4/trunk/libf/phylmd/phytrac.F
- Timestamp:
- Jun 4, 2007, 4:34:47 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/trunk/libf/phylmd/phytrac.F
r682 r766 63 63 64 64 USE ioipsl 65 66 #ifdef INCA 67 USE sflx 68 USE chem_tracnm 69 USE species_names 70 USE chem_mods 71 #ifdef INCA_NMHC 72 USE pht_tables, ONLY : jrates 73 USE lightning, ONLY : prod_light 74 #endif 75 #ifdef INCA_CH4 76 USE pht_tables, ONLY : jrates 77 USE lightning, ONLY : prod_light 78 #endif 79 USE transport_controls, ONLY : conv_flg, pbl_flg 80 USE airplane_src, ONLY : ptrop 81 #ifdef INCA_AER 82 USE AEROSOL_MOD, only : ntr,trmx,trnx 83 USE AEROSOL_DIAG,only : cla,las,tausum,angst,aload,cload,totaerh2o,tau, 84 $ emiss20,sconc,scavcoef_st,scavcoef_cv 85 $ ,cload05ss ,cload05bc ,cload05pom ,cload05dust ,cload05so4 86 $ ,cload125ss ,cload125bc ,cload125pom ,cload125dust ,cload125so4 87 USE AEROSOL_PROGNOS, ONLY : md,mdw 88 USE AEROSOL_METEO, only : airm 89 #endif 90 #ifdef INCA_NMHC 91 USE RESISTANCE_DIAGNOSE, ONLY : surf_alb, sol_irrad, surf_temp, surf_wind, 92 $ aero_resist, lamin_resist, surf_resist 93 #endif 94 #endif 65 USE dimphy 66 USE comgeomphy 67 USE iophy 68 USE vampir 69 95 70 IMPLICIT none 96 71 c====================================================================== … … 108 83 #include "YOMCST.h" 109 84 #include "dimensions.h" 110 #include "dimphy.h"85 cym#include "dimphy.h" 111 86 #include "indicesol.h" 112 87 #include "clesphys.h" … … 114 89 #include "paramet.h" 115 90 #include "control.h" 116 #include "comgeomphy.h"91 cym#include "comgeomphy.h" 117 92 #include "advtrac.h" 118 93 #include "thermcell.h" … … 162 137 #ifdef INCA 163 138 REAL flxmass_w(klon,klev) 139 CHARACTER(len=8) :: solsym(nqmax) 164 140 #endif 165 141 c integer iflag_con … … 227 203 cAA Pour l'instant seuls les cas du rn et du pb ont ete envisages. 228 204 229 REAL source(klon ) ! a voir lorsque le flux est prescrit205 REAL source(klon,nqmax) ! a voir lorsque le flux est prescrit 230 206 cAA 231 207 cAA Pour la source de radon et son reservoir de sol 232 208 cAA ................................................ 233 209 234 REAL trs(klon,nbtr) ! Conc. radon ds le sol 235 SAVE trs 236 237 REAL masktr(klon,nbtr) ! Masque reservoir de sol traceur 210 REAL,save,allocatable :: trs(:,:) ! Conc. radon ds le sol 211 c$OMP THREADPRIVATE(trs) 212 cym SAVE trs 213 REAL :: trs_tmp(klon2) 214 REAL,SAVE,ALLOCATABLE :: trs_mpi(:) 215 216 REAL,save,allocatable :: masktr(:,:) ! Masque reservoir de sol traceur 238 217 c Masque de l'echange avec la surface 239 218 c (1 = reservoir) ou (possible => 1 ) 240 SAVE masktr 241 REAL fshtr(klon,nbtr) ! Flux surfacique dans le reservoir de sol 242 SAVE fshtr 243 REAL hsoltr(nbtr) ! Epaisseur equivalente du reservoir de sol 244 SAVE hsoltr 245 REAL tautr(nbtr) ! Constante de decroissance radioactive 246 SAVE tautr 247 REAL vdeptr(nbtr) ! Vitesse de depot sec dans la couche Brownienne 248 SAVE vdeptr 249 REAL scavtr(nbtr) ! Coefficient de lessivage 250 SAVE scavtr 219 c$OMP THREADPRIVATE(masktr) 220 cym SAVE masktr 221 REAL,save,allocatable :: fshtr(:,:) ! Flux surfacique dans le reservoir de sol 222 c$OMP THREADPRIVATE(fshtr) 223 cym SAVE fshtr 224 REAL,save,allocatable :: hsoltr(:) ! Epaisseur equivalente du reservoir de sol 225 c$OMP THREADPRIVATE(hsoltr) 226 cym SAVE hsoltr 227 REAL,save,allocatable :: tautr(:) ! Constante de decroissance radioactive 228 c$OMP THREADPRIVATE(tautr) 229 cym SAVE tautr 230 REAL,save,allocatable :: vdeptr(:) ! Vitesse de depot sec dans la couche Brownienne 231 c$OMP THREADPRIVATE(vdeptr) 232 cym SAVE vdeptr 233 REAL,save,allocatable :: scavtr(:) ! Coefficient de lessivage 234 c$OMP THREADPRIVATE(scavtr) 235 cym SAVE scavtr 251 236 cAA 252 237 CHARACTER*2 itn … … 257 242 INTEGER nid_tra 258 243 SAVE nid_tra 244 c$OMP THREADPRIVATE(nid_tra) 259 245 #ifdef INCA_AER 260 246 INTEGER nid_tra2,nid_tra3 261 247 SAVE nid_tra2,nid_tra3 248 c$OMP THREADPRIVATE(nid_tra2,nid_tra3) 262 249 #endif 263 250 c REAL x(klon,klev,nbtr+2) ! traceurs 264 251 INTEGER ndex(1) 265 252 INTEGER ndex2d(iim*(jjm+1)),ndex3d(iim*(jjm+1)*klev) 253 REAL zx_tmp_fi2d(klon) ! variable temporaire grille physique 254 REAL zx_tmp_fi3d(klon,klev) ! variable temporaire pour champs 3D 266 255 REAL zx_tmp_2d(iim,jjm+1), zx_tmp_3d(iim,jjm+1,klev) 267 256 REAL zx_lon(iim,jjm+1), zx_lat(iim,jjm+1) … … 274 263 c 275 264 c INTEGER ecrit_tra 276 c SAVE ecrit_tra 265 c SAVE ecrit_tra 266 277 267 logical ok_sync 278 268 parameter (ok_sync = .true.) … … 280 270 C nature du traceur 281 271 c 282 logical aerosol(nbtr) ! Nature du traceur272 logical,save,allocatable :: aerosol(:) ! Nature du traceur 283 273 c ! aerosol(it) = true => aerosol 284 274 c ! aerosol(it) = false => gaz 285 275 c ! nat_trac(it) = 1. aerosol 286 logical clsol(nbtr) ! clsol(it) = true => CL sol calculee 287 logical radio(nbtr) ! radio(it)=true => decroisssance radioactive 288 save aerosol,clsol,radio 276 logical,save,allocatable :: clsol(:) ! clsol(it) = true => CL sol calculee 277 logical,save,allocatable :: radio(:) ! radio(it)=true => decroisssance radioactive 278 c$OMP THREADPRIVATE(aerosol,clsol,radio) 279 cym save aerosol,clsol,radio 289 280 C 290 281 c====================================================================== … … 334 325 save first,couchelimite,convection,lessivage, 335 326 s sorties,inirnpb 327 c$OMP THREADPRIVATE(first,couchelimite,convection,lessivage, 328 c$OMP+ sorties,inirnpb) 336 329 c data first,couchelimite,convection,lessivage,sorties 337 330 c s /.true.,.true.,.false.,.true.,.true./ … … 345 338 INTEGER :: lastgas 346 339 INTEGER :: ncsec 347 348 INTEGER :: prt_flag_ts(nbtr)=(/ 349 #ifdef INCA_CH4 350 . 1,1,1,0,0,1,1,1,1,1, 351 . 0,1,0,0,0,0,0,1,0,0, 352 . 0,1,1,1,1,0,1,1,1,0, 353 . 1,1,1,1,1,1,1,1,1,1, 354 . 1,0,0 355 #ifdef INCA_AER 356 . ,1,1,1,1,0,1,1,1,1,0, 357 . 1,1,1,1,1,1,0,1,0,1, 358 . 1,1,1,1,0,1,0,1,1,1 359 #endif 360 #endif 361 #ifdef INCA_NMHC 362 . 1,1,1,1,1,1,1,1,1,1, 363 . 1,1,1,1,1,1,1,1,1,1, 364 . 1,1,1,1,1,1,1,1,1,1, 365 . 1,1,1,1,1,1,1,1,1,1, 366 . 1,1,1,1,1,1,1,1,1,1, 367 . 1,1,1,1,1,1,1,1,1,1, 368 . 1,1,1,1,1,1,1,1,1,1, 369 . 1,1,1,1,1,1,1,1,1,1, 370 . 1,1,1,1,1,1,1 371 #ifdef INCA_AER 372 . ,1,1,1,1,0,1,1,1,1,0, 373 . 1,1,1,1,1,1,0,1,0,1, 374 . 1,1,1,1,0,1,0,1,1,1 375 #endif 376 #endif 377 #if defined(INCA_AER) && !defined(INCA_CH4) && !defined(INCA_NMHC) 378 . 1,1,1,1,1,1,1,1,1,1, 379 . 1,1,1,1,1,1,1,1,1,1, 380 . 1,1,1,1,1,1,1,1,1 381 #endif 382 #if defined(INCA) && !defined(INCA_CH4) && !defined(INCA_NMHC) && !defined(INCA_AER) 383 . 1,1,1,1,1,1,1,1,1,1, 384 . 1 385 #endif 386 387 . /) 388 340 INTEGER :: prt_flag_ts(nbtr) 389 341 390 342 REAL, PARAMETER :: dry_mass = 28.966 … … 393 345 REAL :: calday 394 346 REAL :: pdel(klon,klev) 395 REAL :: dummy(klon,klev) = 0.347 REAL :: dummy(klon,klev) 396 348 #endif 397 349 #ifdef INCA_AER … … 400 352 c 401 353 c====================================================================== 354 355 #ifdef INCA 356 prt_flag_ts(:)=(/ 357 #ifdef INCA_CH4 358 . 1,1,1,0,0,1,1,1,1,1, 359 . 0,1,0,0,0,0,0,1,0,0, 360 . 0,1,1,1,1,0,1,1,1,0, 361 . 1,1,1,1,1,1,1,1,1,1, 362 . 1,0,0 363 #ifdef INCA_AER 364 . ,1,1,1,1,0,1,1,1,1,0, 365 . 1,1,1,1,1,1,0,1,0,1, 366 . 1,1,1,1,0,1,0,1,1,1 367 #endif 368 #endif 369 #ifdef INCA_NMHC 370 . 1,1,1,1,1,1,1,1,1,1, 371 . 1,1,1,1,1,1,1,1,1,1, 372 . 1,1,1,1,1,1,1,1,1,1, 373 . 1,1,1,1,1,1,1,1,1,1, 374 . 1,1,1,1,1,1,1,1,1,1, 375 . 1,1,1,1,1,1,1,1,1,1, 376 . 1,1,1,1,1,1,1,1,1,1, 377 . 1,1,1,1,1,1,1,1,1,1, 378 . 1,1,1,1,1,1,1 379 #ifdef INCA_AER 380 . ,1,1,1,1,0,1,1,1,1,0, 381 . 1,1,1,1,1,1,0,1,0,1, 382 . 1,1,1,1,0,1,0,1,1,1 383 #endif 384 #endif 385 #if defined(INCA_AER) && !defined(INCA_CH4) && !defined(INCA_NMHC) 386 . 1,1,1,1,1,1,1,1,1,1, 387 . 1,1,1,1,1,1,1,1,1,1, 388 . 1,1,1,1,1,1,1,1,1 389 #endif 390 #if defined(INCA) && !defined(INCA_CH4) && !defined(INCA_NMHC) && !defined(INCA_AER) 391 . 1,1,1,1,1,1,1,1,1,1, 392 . 1 393 #endif 394 395 . /) 396 dummy(:,:) = 0. 397 398 #endif 402 399 modname='phytrac' 403 400 … … 405 402 406 403 if (debutphy) then 407 408 c ecrit_tra = NINT(86400./pdtphys *ecritphy) 404 allocate( trs(klon,nbtr) ) 405 c$OMP MASTER 406 allocate( trs_mpi(klon_mpi) ) 407 c$OMP END MASTER 408 allocate( masktr(klon,nbtr)) 409 allocate( fshtr(klon,nbtr) ) 410 allocate( hsoltr(nbtr)) 411 allocate( tautr(nbtr)) 412 allocate( vdeptr(nbtr)) 413 allocate( scavtr(nbtr)) 414 allocate( aerosol(nbtr)) 415 allocate( clsol(nbtr)) 416 allocate( radio(nbtr)) 417 418 419 ecrit_tra = NINT(86400./pdtphys *ecritphy) 409 420 print*,'dans phytrac ',pdtphys,ecritphy,ecrit_tra 410 421 … … 435 446 c print*,'valeur de debut dans phytrac :',debutphy 436 447 trs(:,:) = 0. 437 438 open (99,file='starttrac',status='old', 448 c$OMP MASTER 449 if (phy_rank==0) then 450 trs_tmp(:)=0. 451 open (99,file='starttrac',status='old', 439 452 . err=999,form='formatted') 440 read(99,*) (trs (i,1),i=1,klon)453 read(99,*) (trs_tmp(i),i=1,klon2) 441 454 999 close(99) 455 endif 456 call ScatterField(trs_tmp,trs_mpi,1) 457 c$OMP END MASTER 458 call ScatterField_omp(trs_mpi,trs(:,1),1) 442 459 c print*, 'apres starttrac' 443 460 … … 470 487 endif 471 488 #ifdef INCA 489 call VTe(VTphysiq) 490 call VTb(VTinca) 472 491 !====================================================================== 473 492 ! Chimie … … 509 528 $ rneb, ! for chimiaq 510 529 $ t_seri, ! for chimiaq 511 $ rh) 530 $ rh, 531 $ lafin) 512 532 ! fin changement anne 513 533 … … 515 535 516 536 CALL chemmain (tr_seri, !mmr 517 $ nas, !nas518 537 $ nstep, !nstep 519 538 $ calday, !calday … … 550 569 $ obuf, !obuf 551 570 $ iip1, !nx 552 $ jjp1) !ny 571 $ jjp1, !ny 572 $ source, 573 $ solsym) 553 574 #ifdef INCAINFO 554 575 #ifdef INCA_AER … … 582 603 END DO 583 604 #endif 605 call VTe(VTinca) 606 call VTb(VTphysiq) 584 607 #else 585 608 … … 755 778 C CALL minmaxqfi(tr_seri(1,1,it),0.,1.e33,'cltracrn it='//itn) 756 779 else ! couche limite avec flux prescrit 757 #ifdef INCA 758 DO k = 1, klon 759 source(k) = eflux(k,it)-dflux(k,it) 760 END DO 761 #else 780 #ifndef INCA 762 781 763 782 Cmaf provisoire source / traceur a creer 764 783 DO i=1, klon 765 source(i ) = 0.0 ! pas de source, pour l'instant784 source(i,it) = 0.0 ! pas de source, pour l'instant 766 785 ENDDO 767 786 C 768 787 #endif 769 788 CALL cltrac(pdtphys, coefh,t_seri, 770 s tr_seri(1,1,it), source ,789 s tr_seri(1,1,it), source(:,it), 771 790 e paprs, pplay, delp, 772 791 s d_tr_cl(1,1,it)) … … 904 923 if (lafin) then 905 924 print*, 'c est la fin de la physique' 906 open (99,file='restarttrac', form='formatted') 907 do i=1,klon 908 write(99,*) trs(i,1) 909 enddo 910 PRINT*, 'Ecriture du fichier restarttrac' 911 close(99) 925 call GatherField_omp(trs(:,1),trs_mpi,1) 926 c$OMP MASTER 927 call GatherField(trs_mpi,trs_tmp,1) 928 if (phy_rank==0) then 929 930 open (99,file='restarttrac', form='formatted') 931 do i=1,klon 932 write(99,*) trs_tmp(i) 933 enddo 934 PRINT*, 'Ecriture du fichier restarttrac' 935 close(99) 936 endif 937 c$OMP END MASTER 912 938 else 913 939 c print*, 'physique pas fini'
Note: See TracChangeset
for help on using the changeset viewer.