Changeset 1657 for LMDZ5/trunk/libf/dyn3dmem/calfis_loc.F
- Timestamp:
- Oct 2, 2012, 5:57:45 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/dyn3dmem/calfis_loc.F
r1632 r1657 1 1 ! 2 ! $Id : calfis_p.F 1299 2010-01-20 14:27:21Z fairhead$2 ! $Id$ 3 3 ! 4 4 C … … 108 108 #include "comvert.h" 109 109 #include "comgeom2.h" 110 #include "iniprint.h" 110 111 #ifdef CPP_MPI 111 112 include 'mpif.h' … … 180 181 REAL,SAVE,ALLOCATABLE :: flxwfi_omp(:,:) ! Flux de masse verticale sur la grille physiq 181 182 183 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 184 ! Introduction du splitting (FH) 185 ! Question pour Yann : 186 ! J'ai été surpris au début que les tableaux zufi_omp, zdufi_omp n'co soitent 187 ! en SAVE. Je crois comprendre que c'est parce que tu voulais qu'il 188 ! soit allocatable (plutot par exemple que de passer une dimension 189 ! dépendant du process en argument des routines) et que, du coup, 190 ! le SAVE évite d'avoir à refaire l'allocation à chaque appel. 191 ! Tu confirmes ? 192 ! J'ai suivi le même principe pour les zdufic_omp 193 ! Mais c'est surement bien que tu controles. 194 ! 195 196 REAL,ALLOCATABLE,SAVE :: zdufic_omp(:,:) 197 REAL,ALLOCATABLE,SAVE :: zdvfic_omp(:,:) 198 REAL,ALLOCATABLE,SAVE :: zdtfic_omp(:,:) 199 REAL,ALLOCATABLE,SAVE :: zdqfic_omp(:,:,:) 200 REAL jH_cur_split,zdt_split 201 LOGICAL debut_split,lafin_split 202 INTEGER isplit 203 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 204 182 205 c$OMP THREADPRIVATE(zplev_omp,zplay_omp,zphi_omp,zphis_omp, 183 206 c$OMP+ presnivs_omp,zufi_omp,zvfi_omp,ztfi_omp, 184 207 c$OMP+ zqfi_omp,zdufi_omp,zdvfi_omp, 185 c$OMP+ zdtfi_omp,zdqfi_omp,zdpsrf_omp,flxwfi_omp) 208 c$OMP+ zdtfi_omp,zdqfi_omp,zdpsrf_omp,flxwfi_omp, 209 c$OMP+ zdufic_omp,zdvfic_omp,zdtfic_omp,zdqfic_omp) 186 210 187 211 LOGICAL,SAVE :: first_omp=.true. … … 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 241 STOP 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 266 STOP 242 267 ENDIF 243 268 c$OMP MASTER … … 533 558 allocate(zdtfi_omp(klon,llm)) 534 559 allocate(zdqfi_omp(klon,llm,nqtot)) 560 allocate(zdufic_omp(klon,llm)) 561 allocate(zdvfic_omp(klon,llm)) 562 allocate(zdtfic_omp(klon,llm)) 563 allocate(zdqfic_omp(klon,llm,nqtot)) 535 564 allocate(zdpsrf_omp(klon)) 536 565 allocate(flxwfi_omp(klon,llm)) … … 635 664 if (planet_type=="earth") then 636 665 #ifdef CPP_EARTH 666 667 668 !$OMP MASTER 669 write(lunout,*) 'PHYSIQUE AVEC NSPLIT_PHYS=',nsplit_phys 670 !$OMP END MASTER 671 zdt_split=dtphys/nsplit_phys 672 zdufic_omp(:,:)=0. 673 zdvfic_omp(:,:)=0. 674 zdtfic_omp(:,:)=0. 675 zdqfic_omp(:,:,:)=0. 676 677 do isplit=1,nsplit_phys 678 679 jH_cur_split=jH_cur+(isplit-1) * dtvr / (daysec *nsplit_phys) 680 debut_split=debut.and.isplit==1 681 lafin_split=lafin.and.isplit==nsplit_phys 682 683 637 684 CALL physiq (klon, 638 685 . llm, 639 . debut ,640 . lafin ,686 . debut_split, 687 . lafin_split, 641 688 . jD_cur, 642 . jH_cur ,643 . dtphys,689 . jH_cur_split, 690 . zdt_split, 644 691 . zplev_omp, 645 692 . zplay_omp, … … 663 710 . pducov, 664 711 . PVteta) 712 713 zufi_omp(:,:)=zufi_omp(:,:)+zdufi_omp(:,:)*zdt_split 714 zvfi_omp(:,:)=zvfi_omp(:,:)+zdvfi_omp(:,:)*zdt_split 715 ztfi_omp(:,:)=ztfi_omp(:,:)+zdtfi_omp(:,:)*zdt_split 716 zqfi_omp(:,:,:)=zqfi_omp(:,:,:)+zdqfi_omp(:,:,:)*zdt_split 717 718 zdufic_omp(:,:)=zdufic_omp(:,:)+zdufi_omp(:,:) 719 zdvfic_omp(:,:)=zdvfic_omp(:,:)+zdvfi_omp(:,:) 720 zdtfic_omp(:,:)=zdtfic_omp(:,:)+zdtfi_omp(:,:) 721 zdqfic_omp(:,:,:)=zdqfic_omp(:,:,:)+zdqfi_omp(:,:,:) 722 723 enddo 724 725 zdufi_omp(:,:)=zdufic_omp(:,:)/nsplit_phys 726 zdvfi_omp(:,:)=zdvfic_omp(:,:)/nsplit_phys 727 zdtfi_omp(:,:)=zdtfic_omp(:,:)/nsplit_phys 728 zdqfi_omp(:,:,:)=zdqfic_omp(:,:,:)/nsplit_phys 729 665 730 #endif 666 731 endif !of if (planet_type=="earth") … … 1116 1181 #else 1117 1182 write(*,*) "calfis_p: for now can only work with parallel physics" 1183 write(lunout,*) 1184 & "calfis_p: for now can only work with parallel physics" 1118 1185 stop 1119 1186 #endif
Note: See TracChangeset
for help on using the changeset viewer.