Changeset 1403 for LMDZ4/trunk/libf/dyn3dpar/calfis_p.F
- Timestamp:
- Jul 1, 2010, 11:02:53 AM (14 years ago)
- Location:
- LMDZ4/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/trunk
- Property svn:mergeinfo changed
-
LMDZ4/trunk/libf/dyn3dpar/calfis_p.F
r1279 r1403 34 34 USE dimphy 35 35 USE mod_phys_lmdz_para, mpi_root_xx=>mpi_root 36 USE mod_interface_dyn_phys 37 USE IOPHY 38 #endif 36 39 USE parallel, ONLY : omp_chunk, using_mpi 37 USE mod_interface_dyn_phys38 40 USE Write_Field 39 41 Use Write_field_p 40 42 USE Times 41 USE IOPHY42 43 USE infotrac 44 USE control_mod 43 45 44 46 IMPLICIT NONE … … 107 109 #include "comvert.h" 108 110 #include "comgeom2.h" 109 #include " control.h"111 #include "iniprint.h" 110 112 #ifdef CPP_MPI 111 113 include 'mpif.h' … … 114 116 c ----------- 115 117 LOGICAL lafin 116 REAL heure117 118 ! REAL heure 119 REAL, intent(in):: jD_cur, jH_cur 118 120 REAL pvcov(iip1,jjm,llm) 119 121 REAL pucov(iip1,jjp1,llm) … … 128 130 REAL pdteta(iip1,jjp1,llm) 129 131 REAL pdq(iip1,jjp1,llm,nqtot) 132 REAL flxw(iip1,jjp1,llm) ! Flux de masse verticale sur la grille dynamique 130 133 c 131 134 REAL pps(iip1,jjp1) … … 143 146 REAL clesphy0( longcles ) 144 147 145 148 #ifdef CPP_EARTH 146 149 c Local variables : 147 150 c ----------------- … … 180 183 REAL,SAVE,ALLOCATABLE :: flxwfi_omp(:,:) ! Flux de masse verticale sur la grille physiq 181 184 185 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 186 ! Introduction du splitting (FH) 187 ! Question pour Yann : 188 ! J'ai été surpris au début que les tableaux zufi_omp, zdufi_omp n'co soitent 189 ! en SAVE. Je crois comprendre que c'est parce que tu voulais qu'il 190 ! soit allocatable (plutot par exemple que de passer une dimension 191 ! dépendant du process en argument des routines) et que, du coup, 192 ! le SAVE évite d'avoir à refaire l'allocation à chaque appel. 193 ! Tu confirmes ? 194 ! J'ai suivi le même principe pour les zdufic_omp 195 ! Mais c'est surement bien que tu controles. 196 ! 197 198 REAL,ALLOCATABLE,SAVE :: zdufic_omp(:,:) 199 REAL,ALLOCATABLE,SAVE :: zdvfic_omp(:,:) 200 REAL,ALLOCATABLE,SAVE :: zdtfic_omp(:,:) 201 REAL,ALLOCATABLE,SAVE :: zdqfic_omp(:,:,:) 202 REAL jH_cur_split,zdt_split 203 LOGICAL debut_split,lafin_split 204 INTEGER isplit 205 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 206 182 207 c$OMP THREADPRIVATE(zplev_omp,zplay_omp,zphi_omp,zphis_omp, 183 208 c$OMP+ presnivs_omp,zufi_omp,zvfi_omp,ztfi_omp, 184 209 c$OMP+ zqfi_omp,zdufi_omp,zdvfi_omp, 185 c$OMP+ zdtfi_omp,zdqfi_omp,zdpsrf_omp,flxwfi_omp) 210 c$OMP+ zdtfi_omp,zdqfi_omp,zdpsrf_omp,flxwfi_omp, 211 c$OMP+ zdufic_omp,zdvfic_omp,zdtfic_omp,zdqfic_omp) 186 212 187 213 LOGICAL,SAVE :: first_omp=.true. … … 199 225 REAL PVteta(klon,ntetaSTD) 200 226 201 REAL flxw(iip1,jjp1,llm) ! Flux de masse verticale sur la grille dynamique202 227 203 228 REAL SSUM … … 207 232 SAVE firstcal,debut 208 233 c$OMP THREADPRIVATE(firstcal,debut) 209 REAL, intent(in):: jD_cur, jH_cur210 234 211 235 REAL,SAVE,dimension(1:iim,1:llm):: du_send,du_recv,dv_send,dv_recv … … 235 259 debut = .TRUE. 236 260 IF (ngridmx.NE.2+(jjm-1)*iim) THEN 237 PRINT*,'STOP dans calfis' 238 PRINT*,'La dimension ngridmx doit etre egale a 2 + (jjm-1)*iim' 239 PRINT*,' ngridmx jjm iim ' 240 PRINT*,ngridmx,jjm,iim 261 write(lunout,*) 'STOP dans calfis' 262 write(lunout,*) 263 & 'La dimension ngridmx doit etre egale a 2 + (jjm-1)*iim' 264 write(lunout,*) ' ngridmx jjm iim ' 265 write(lunout,*) ngridmx,jjm,iim 241 266 STOP 242 267 ENDIF … … 498 523 allocate(zdtfi_omp(klon,llm)) 499 524 allocate(zdqfi_omp(klon,llm,nqtot)) 525 allocate(zdufic_omp(klon,llm)) 526 allocate(zdvfic_omp(klon,llm)) 527 allocate(zdtfic_omp(klon,llm)) 528 allocate(zdqfic_omp(klon,llm,nqtot)) 500 529 allocate(zdpsrf_omp(klon)) 501 530 allocate(flxwfi_omp(klon,llm)) … … 600 629 if (planet_type=="earth") then 601 630 #ifdef CPP_EARTH 631 632 !$OMP MASTER 633 write(lunout,*) 'PHYSIQUE AVEC NSPLIT_PHYS=',nsplit_phys 634 !$OMP END MASTER 635 zdt_split=dtphys/nsplit_phys 636 zdufic_omp(:,:)=0. 637 zdvfic_omp(:,:)=0. 638 zdtfic_omp(:,:)=0. 639 zdqfic_omp(:,:,:)=0. 640 641 do isplit=1,nsplit_phys 642 643 jH_cur_split=jH_cur+(isplit-1) * dtvr / (daysec *nsplit_phys) 644 debut_split=debut.and.isplit==1 645 lafin_split=lafin.and.isplit==nsplit_phys 646 647 602 648 CALL physiq (klon, 603 649 . llm, 604 . debut ,605 . lafin ,650 . debut_split, 651 . lafin_split, 606 652 . jD_cur, 607 . jH_cur ,608 . dtphys,653 . jH_cur_split, 654 . zdt_split, 609 655 . zplev_omp, 610 656 . zplay_omp, … … 628 674 . pducov, 629 675 . PVteta) 676 677 zufi_omp(:,:)=zufi_omp(:,:)+zdufi_omp(:,:)*zdt_split 678 zvfi_omp(:,:)=zvfi_omp(:,:)+zdvfi_omp(:,:)*zdt_split 679 ztfi_omp(:,:)=ztfi_omp(:,:)+zdtfi_omp(:,:)*zdt_split 680 zqfi_omp(:,:,:)=zqfi_omp(:,:,:)+zdqfi_omp(:,:,:)*zdt_split 681 682 zdufic_omp(:,:)=zdufic_omp(:,:)+zdufi_omp(:,:) 683 zdvfic_omp(:,:)=zdvfic_omp(:,:)+zdvfi_omp(:,:) 684 zdtfic_omp(:,:)=zdtfic_omp(:,:)+zdtfi_omp(:,:) 685 zdqfic_omp(:,:,:)=zdqfic_omp(:,:,:)+zdqfi_omp(:,:,:) 686 687 enddo 688 689 zdufi_omp(:,:)=zdufic_omp(:,:)/nsplit_phys 690 zdvfi_omp(:,:)=zdvfic_omp(:,:)/nsplit_phys 691 zdtfi_omp(:,:)=zdtfic_omp(:,:)/nsplit_phys 692 zdqfi_omp(:,:,:)=zdqfic_omp(:,:,:)/nsplit_phys 693 630 694 #endif 631 695 endif !of if (planet_type=="earth") … … 1047 1111 1048 1112 #else 1049 write(*,*) "calfis_p: for now can only work with parallel physics" 1113 write(lunout,*) 1114 & "calfis_p: for now can only work with parallel physics" 1050 1115 stop 1051 1116 #endif
Note: See TracChangeset
for help on using the changeset viewer.