Changeset 960 for LMDZ4/trunk/libf/dyn3dpar
- Timestamp:
- May 27, 2008, 6:46:50 PM (17 years ago)
- Location:
- LMDZ4/trunk/libf/dyn3dpar
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/trunk/libf/dyn3dpar/advtrac_p.F
r764 r960 4 4 c 5 5 c 6 #ifdef INCA7 6 SUBROUTINE advtrac_p(pbaru,pbarv , 8 7 * p, masse,q,iapptrac,teta, 9 8 * flxw, 10 9 * pk ) 11 #else12 SUBROUTINE advtrac_p(pbaru,pbarv ,13 * p, masse,q,iapptrac,teta,14 * pk)15 #endif16 10 17 11 c Auteur : F. Hourdin … … 55 49 REAL p( ip1jmp1,llmp1 ),teta(ip1jmp1,llm) 56 50 REAL pk(ip1jmp1,llm) 57 #ifdef INCA 58 REAL :: flxw(ip1jmp1,llm) 59 #endif 51 REAL :: flxw(ip1jmp1,llm) 60 52 61 53 c------------------------------------------------------------- … … 209 201 c$OMP BARRIER 210 202 211 #ifdef INCA212 203 ! ... Flux de masse diaganostiques traceurs 213 c flxw = wg / FLOAT(iapp_tracvl)214 204 ijb=ij_begin 215 205 ije=ij_end 216 206 flxw(ijb:ije,1:llm)=wg(ijb:ije,1:llm)/FLOAT(iapp_tracvl) 217 #endif218 207 219 208 c test sur l'eventuelle creation de valeurs negatives de la masse … … 327 316 328 317 call pentes_ini (q(1,1,iq),wg,massem,pbarug,pbarvg,0) 329 #ifdef INCA330 do iiq = iq+1, iq+3331 q(:,:,iiq)=q(:,:,iiq)*1332 enddo333 #endif334 318 335 319 c ---------------------------------------------------------------- … … 346 330 call prather(q(1,1,iq),wg,massem,pbarug,pbarvg, 347 331 s n,dtbon) 348 #ifdef INCA349 do iiq = iq+1, iq+9350 q(:,:,iiq)=q(:,:,iiq)*1351 enddo352 #endif353 332 c ---------------------------------------------------------------- 354 333 c Schemas PPM Lin et Rood … … 487 466 enddo 488 467 489 #ifdef INCA 490 call Register_SwapFieldHallo(flxw,flxw,ip1jmp1,llm, 491 * jj_nb_caldyn,0,0,Request_vanleer) 492 #endif 468 call Register_SwapFieldHallo(flxw,flxw,ip1jmp1,llm, 469 * jj_nb_caldyn,0,0,Request_vanleer) 470 493 471 call SetDistrib(jj_nb_caldyn) 494 472 call SendRequest(Request_vanleer) -
LMDZ4/trunk/libf/dyn3dpar/caladvtrac_p.F
r764 r960 4 4 c 5 5 c 6 #ifdef INCA7 6 SUBROUTINE caladvtrac_p(q,pbaru,pbarv , 8 7 * p ,masse, dq , teta, 9 * flxw, 10 * pk, 11 * iapptrac) 12 #else 13 SUBROUTINE caladvtrac_p(q,pbaru,pbarv , 14 * p ,masse, dq , teta, 15 * pk,iapptrac) 16 #endif 8 * flxw, pk, iapptrac) 17 9 USE parallel 18 10 c … … 40 32 REAL p( ip1jmp1,llmp1),q( ip1jmp1,llm,nqmx),dq( ip1jmp1,llm,2 ) 41 33 REAL teta( ip1jmp1,llm),pk( ip1jmp1,llm) 42 #ifdef INCA43 34 REAL :: flxw(ip1jmp1,llm) 44 #endif 35 45 36 integer ijb,ije,jjb,jje 46 37 … … 74 65 c print *,'appel a advtrac' 75 66 76 #ifdef INCA77 67 CALL advtrac_p( pbaru,pbarv, 78 68 * p, masse,q,iapptrac, teta, 79 . flxw, 80 . pk) 81 #else 82 CALL advtrac_p( pbaru,pbarv, 83 * p, masse,q,iapptrac, teta, 84 . pk) 85 #endif 86 c 69 . flxw, pk) 87 70 88 71 goto 9999 -
LMDZ4/trunk/libf/dyn3dpar/calfis_p.F
r774 r960 22 22 $ pdteta, 23 23 $ pdq, 24 $ pw,25 #ifdef INCA26 24 $ flxw, 27 #endif28 25 $ clesphy0, 29 26 $ pdufi, … … 130 127 REAL pdq(iip1,jjp1,llm,nqmx) 131 128 c 132 REAL pw(iip1,jjp1,llm)133 134 129 REAL pps(iip1,jjp1) 135 130 REAL pp(iip1,jjp1,llmp1) … … 161 156 REAL,ALLOCATABLE,SAVE :: pcvgt(:,:), pcvgq(:,:,:) 162 157 c 163 REAL,ALLOCATABLE,SAVE :: pvervel(:,:)158 c REAL,ALLOCATABLE,SAVE :: pvervel(:,:) 164 159 c 165 160 REAL,ALLOCATABLE,SAVE :: zdufi(:,:),zdvfi(:,:) … … 176 171 REAL,ALLOCATABLE,SAVE :: ztfi_omp(:,:) 177 172 REAL,ALLOCATABLE,SAVE :: zqfi_omp(:,:,:) 178 REAL,ALLOCATABLE,SAVE :: pvervel_omp(:,:)173 c REAL,ALLOCATABLE,SAVE :: pvervel_omp(:,:) 179 174 REAL,ALLOCATABLE,SAVE :: zdufi_omp(:,:) 180 175 REAL,ALLOCATABLE,SAVE :: zdvfi_omp(:,:) … … 202 197 REAL PVteta(klon,ntetaSTD) 203 198 204 #ifdef INCA 205 REAL flxw(iip1,jjp1,llm) 206 REAL flxwfi(klon,llm) 207 #endif 208 c 199 REAL flxw(iip1,jjp1,llm) ! Flux de masse verticale sur la grille dynamique 200 REAL flxwfi(klon,llm) ! Flux de masse verticale sur la grille physiq 209 201 210 202 REAL SSUM … … 257 249 ALLOCATE(pcvgu(klon,llm), pcvgv(klon,llm)) 258 250 ALLOCATE(pcvgt(klon,llm), pcvgq(klon,llm,2)) 259 ALLOCATE(pvervel(klon,llm))251 c ALLOCATE(pvervel(klon,llm)) 260 252 ALLOCATE(zdufi(klon,llm),zdvfi(klon,llm)) 261 253 ALLOCATE(zdtfi(klon,llm),zdqfi(klon,llm,nqmx)) … … 380 372 ENDDO 381 373 ENDDO 382 c$OMP END DO NOWAIT 374 c$OMP END DO NOWAIT 375 383 376 c .... Calcul de la vitesse verticale ( en Pa*m*s ou Kg/s ) .... 384 c 385 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 386 DO l=1,llm 387 do ig0=1,klon 388 i=index_i(ig0) 389 j=index_j(ig0) 390 pvervel(ig0,l) = pw(i,j,l)*g* unsaire(i,j) 391 enddo 392 if (is_north_pole) pvervel(1,l)=pw(1,1,l)*g /apoln 393 if (is_south_pole) pvervel(klon,l)=pw(1,jjp1,l)*g/apols 394 ENDDO 395 c$OMP END DO NOWAIT 377 c JG : ancien calcule de omega utilise dans physiq.F. Maintenant le flux 378 c de masse est calclue dans advtrac_p.F 379 c 380 cc$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 381 c DO l=1,llm 382 c do ig0=1,klon 383 c i=index_i(ig0) 384 c j=index_j(ig0) 385 c pvervel(ig0,l) = pw(i,j,l)*g* unsaire(i,j) 386 c enddo 387 c if (is_north_pole) pvervel(1,l)=pw(1,1,l)*g /apoln 388 c if (is_south_pole) pvervel(klon,l)=pw(1,jjp1,l)*g/apols 389 c ENDDO 390 cc$OMP END DO NOWAIT 396 391 397 392 c … … 514 509 c 515 510 ENDIF 516 #ifdef INCA 511 512 c On change de grille, dynamique vers physiq, pour le flux de masse verticale 517 513 CALL gr_dyn_fi_p(llm,iip1,jjp1,klon,flxw,flxwfi) 518 #endif519 520 514 521 515 c----------------------------------------------------------------------- … … 548 542 allocate(ztfi_omp(klon,llm)) 549 543 allocate(zqfi_omp(klon,llm,nq)) 550 allocate(pvervel_omp(klon,llm))544 c allocate(pvervel_omp(klon,llm)) 551 545 allocate(zdufi_omp(klon,llm)) 552 546 allocate(zdvfi_omp(klon,llm)) … … 614 608 enddo 615 609 616 do l=1,llm617 do i=1,klon618 pvervel_omp(i,l)=pvervel(offset+i,l)619 enddo620 enddo610 c do l=1,llm 611 c do i=1,klon 612 c pvervel_omp(i,l)=pvervel(offset+i,l) 613 c enddo 614 c enddo 621 615 622 616 do l=1,llm … … 671 665 . ztfi_omp, 672 666 . zqfi_omp, 673 . pvervel_omp,674 #ifdef INCA667 c . pvervel_omp, 668 c#ifdef INCA 675 669 . flxwfi, 676 #endif670 c#endif 677 671 . zdufi_omp, 678 672 . zdvfi_omp, … … 742 736 enddo 743 737 744 do l=1,llm745 do i=1,klon746 pvervel(offset+i,l)=pvervel_omp(i,l)747 enddo748 enddo738 c do l=1,llm 739 c do i=1,klon 740 c pvervel(offset+i,l)=pvervel_omp(i,l) 741 c enddo 742 c enddo 749 743 750 744 do l=1,llm -
LMDZ4/trunk/libf/dyn3dpar/conf_gcm.F
r764 r960 600 600 offline = .FALSE. 601 601 CALL getin('offline',offline) 602 603 !Config Key = config_inca 604 !Config Desc = Choix de configuration de INCA 605 !Config Def = none 606 !Config Help = Choix de configuration de INCA : 607 !Config 'none' = sans INCA 608 !Config 'chem' = INCA avec calcul de chemie 609 !Config 'aero' = INCA avec calcul des aerosols 610 config_inca = 'none' 611 CALL getin('config_inca',config_inca) 602 612 603 613 … … 643 653 write(lunout,*)' tauyy = ', tauyy 644 654 write(lunout,*)' offline = ', offline 655 write(lunout,*)' config_inca = ', config_inca 645 656 646 657 RETURN … … 755 766 offline = .FALSE. 756 767 CALL getin('offline',offline) 757 write(lunout,*)' offline = ', offline 768 769 !Config Key = config_inca 770 !Config Desc = Choix de configuration de INCA 771 !Config Def = none 772 !Config Help = Choix de configuration de INCA : 773 !Config 'none' = sans INCA 774 !Config 'chem' = INCA avec calcul de chemie 775 !Config 'aero' = INCA avec calcul des aerosols 776 config_inca = 'none' 777 CALL getin('config_inca',config_inca) 758 778 759 779 … … 799 819 write(lunout,*)' tauy = ', tauy 800 820 write(lunout,*)' offline = ', offline 821 write(lunout,*)' config_inca = ', config_inca 801 822 c 802 823 RETURN -
LMDZ4/trunk/libf/dyn3dpar/control.h
r792 r960 14 14 & iperiod,iapp_tracvl,iconser,iecri,idissip,iphysiq , & 15 15 & periodav,ecritphy,iecrimoy,dayref,anneeref, & 16 & raz_date,offline,ip_ebil_dyn 16 & raz_date,offline,ip_ebil_dyn,config_inca 17 17 18 18 INTEGER nday,day_step,iperiod,iapp_tracvl,iconser,iecri, & … … 21 21 REAL periodav, ecritphy 22 22 logical offline 23 23 CHARACTER*4 config_inca 24 24 !----------------------------------------------------------------------- -
LMDZ4/trunk/libf/dyn3dpar/gcm.F
r949 r960 230 230 call InitComgeomphy 231 231 c$OMP END PARALLEL 232 233 IF (config_inca /= 'none') THEN 232 234 #ifdef INCA 233 call init_const_lmdz(nbtrac,anneeref,dayref,iphysiq,day_step,nday) 234 call init_inca_para(iim,jjm+1,klon_glo,mpi_size,klon_mpi_para_nb, 235 $ COMM_LMDZ) 236 #endif 235 call init_const_lmdz(nbtrac,anneeref,dayref,iphysiq,day_step,nday) 236 call init_inca_para(iim,jjm+1,klon_glo,mpi_size,klon_mpi_para_nb, 237 $ COMM_LMDZ) 238 #endif 239 END IF 237 240 238 241 c----------------------------------------------------------------------- … … 262 265 endif 263 266 267 IF (config_inca /= 'none') THEN 264 268 #ifdef INCA 265 call init_inca_dim(klon,llm,iim,jjm,266 $ rlonu,rlatu,rlonv,rlatv)267 #endif 268 269 call init_inca_dim(klon,llm,iim,jjm, 270 $ rlonu,rlatu,rlonv,rlatv) 271 #endif 272 END IF 269 273 270 274 c le cas echeant, creation d un etat initial -
LMDZ4/trunk/libf/dyn3dpar/iniadvtrac.F
r764 r960 27 27 #include "dimensions.h" 28 28 #include "advtrac.h" 29 #include "control.h" 29 30 30 31 c local … … 55 56 descrq(30)='PRA' 56 57 58 IF (config_inca /= 'none') THEN 57 59 #ifdef INCA 58 59 CALL init_transport( 60 $ hadv_flg, 61 $ vadv_flg, 62 $ conv_flg, 63 $ pbl_flg, 64 $ tracnam) 60 CALL init_transport( 61 $ hadv_flg, 62 $ vadv_flg, 63 $ conv_flg, 64 $ pbl_flg, 65 $ tracnam) 65 66 #endif 66 67 END IF 67 68 c----------------------------------------------------------------------- 68 69 c Choix des schemas d'advection pour l'eau et les traceurs … … 109 110 c dans fichier traceur.def 110 111 c------------------------------------------------------------------ 111 #ifdef INCA 112 113 IF (config_inca /= 'none') THEN 112 114 C le module de chimie fournit les noms des traceurs 113 115 C et les schemas d'advection associes. 114 tnom(1)='H2Ov'115 tnom(2)='H2Ol'116 nq=nbtrac+2116 tnom(1)='H2Ov' 117 tnom(2)='H2Ol' 118 nq=nbtrac+2 117 119 118 120 if (nq.gt.nqmx) then … … 127 129 vadv(iq)= vadv_flg(iq) 128 130 end do 129 #else130 print*,'ouverture de traceur.def'131 open(90,file='traceur.def',form='formatted',status='old',132 s iostat=ierr)131 ELSE ! config_inca=none 132 print*,'ouverture de traceur.def' 133 open(90,file='traceur.def',form='formatted',status='old', 134 s iostat=ierr) 133 135 if(ierr.eq.0) then 134 136 print*,'ouverture de traceur.def ok' … … 171 173 end do 172 174 173 #endif 175 END IF ! config_inca 176 174 177 c a partir du nom court du traceur et du schema d'advection au detemine le nom long. 175 178 iiq=0 -
LMDZ4/trunk/libf/dyn3dpar/leapfrog_p.F
r949 r960 146 146 147 147 REAL,SAVE :: alpha(ip1jmp1,llm),beta(ip1jmp1,llm) 148 #ifdef INCA 149 REAL,SAVE :: flxw(ip1jmp1,llm) 150 #endif 148 REAL,SAVE :: flxw(ip1jmp1,llm) ! flux de masse verticale 151 149 152 150 c+jld variables test conservation energie … … 565 563 cc$OMP PARALLEL DEFAULT(SHARED) 566 564 c 567 #ifdef INCA 568 CALL caladvtrac_p(q,pbaru,pbarv, 569 * p, masse, dq, teta, 570 . flxw, 571 . pk, 572 . iapptrac) 573 #else 574 CALL caladvtrac_p(q,pbaru,pbarv, 575 * p, masse, dq, teta, 576 . pk,iapptrac) 577 #endif 578 579 580 565 CALL caladvtrac_p(q,pbaru,pbarv, 566 * p, masse, dq, teta, 567 . flxw,pk, iapptrac) 568 581 569 c do j=1,nqmx 582 570 c call WriteField_p('q'//trim(int2str(j)), … … 722 710 * jj_Nb_physic,2,2,Request_physic) 723 711 enddo 724 #ifdef INCA 712 725 713 call Register_SwapFieldHallo(flxw,flxw,ip1jmp1,llm, 726 714 * jj_Nb_physic,2,2,Request_physic) 727 #endif728 715 call SetDistrib(jj_nb_Physic) 729 716 … … 748 735 CALL calfis_p( nq, lafin ,rdayvrai,time , 749 736 $ ucov,vcov,teta,q,masse,ps,p,pk,phis,phi , 750 $ du,dv,dteta,dq,w, 751 #ifdef INCA 737 $ du,dv,dteta,dq, 752 738 $ flxw, 753 #endif754 739 $ clesphy0, dufi,dvfi,dtetafi,dqfi,dpfi ) 755 740 ijb=ij_begin
Note: See TracChangeset
for help on using the changeset viewer.