Changeset 1657 for LMDZ5/trunk
- Timestamp:
- Oct 2, 2012, 5:57:45 PM (12 years ago)
- Location:
- LMDZ5/trunk/libf/dyn3dmem
- Files:
-
- 1 added
- 13 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 -
LMDZ5/trunk/libf/dyn3dmem/conf_gcm.F
r1632 r1657 1 1 ! 2 ! $Id: conf_gcm.F 1 299 2010-01-20 14:27:21Z fairhead$2 ! $Id: conf_gcm.F 1357 2010-04-14 14:03:19Z emillour $ 3 3 ! 4 4 c … … 174 174 CALL getin('day_step',day_step) 175 175 176 !Config Key = nsplit_phys 177 !Config Desc = nombre d'iteration de la physique 178 !Config Def = 240 179 !Config Help = nombre d'itration de la physique 180 ! 181 nsplit_phys = 1 182 CALL getin('nsplit_phys',nsplit_phys) 183 176 184 !Config Key = iperiod 177 185 !Config Desc = periode pour le pas Matsuno … … 594 602 CALL getin('ok_dynzon',ok_dynzon) 595 603 604 !Config Key = ok_dyn_ins 605 !Config Desc = sorties instantanees dans la dynamique 606 !Config Def = n 607 !Config Help = 608 !Config 609 ok_dyn_ins = .FALSE. 610 CALL getin('ok_dyn_ins',ok_dyn_ins) 611 612 !Config Key = ok_dyn_ave 613 !Config Desc = sorties moyennes dans la dynamique 614 !Config Def = n 615 !Config Help = 616 !Config 617 ok_dyn_ave = .FALSE. 618 CALL getin('ok_dyn_ave',ok_dyn_ave) 596 619 597 620 write(lunout,*)' #########################################' … … 604 627 write(lunout,*)' day_step = ', day_step 605 628 write(lunout,*)' iperiod = ', iperiod 629 write(lunout,*)' nsplit_phys = ', nsplit_phys 606 630 write(lunout,*)' iconser = ', iconser 607 631 write(lunout,*)' iecri = ', iecri … … 633 657 write(lunout,*)' config_inca = ', config_inca 634 658 write(lunout,*)' ok_dynzon = ', ok_dynzon 659 write(lunout,*)' ok_dyn_ins = ', ok_dyn_ins 660 write(lunout,*)' ok_dyn_ave = ', ok_dyn_ave 635 661 636 662 RETURN … … 765 791 ok_dynzon = .FALSE. 766 792 CALL getin('ok_dynzon',ok_dynzon) 793 794 !Config Key = ok_dyn_ins 795 !Config Desc = sorties instantanees dans la dynamique 796 !Config Def = n 797 !Config Help = 798 !Config 799 ok_dyn_ins = .FALSE. 800 CALL getin('ok_dyn_ins',ok_dyn_ins) 801 802 !Config Key = ok_dyn_ave 803 !Config Desc = sorties moyennes dans la dynamique 804 !Config Def = n 805 !Config Help = 806 !Config 807 ok_dyn_ave = .FALSE. 808 CALL getin('ok_dyn_ave',ok_dyn_ave) 767 809 768 810 !Config Key = use_filtre_fft … … 859 901 write(lunout,*)' config_inca = ', config_inca 860 902 write(lunout,*)' ok_dynzon = ', ok_dynzon 903 write(lunout,*)' ok_dyn_ins = ', ok_dyn_ins 904 write(lunout,*)' ok_dyn_ave = ', ok_dyn_ave 861 905 write(lunout,*)' use_filtre_fft = ', use_filtre_fft 862 906 write(lunout,*)' use_mpi_alloc = ', use_mpi_alloc -
LMDZ5/trunk/libf/dyn3dmem/control_mod.F90
r1632 r1657 11 11 12 12 REAL :: periodav 13 INTEGER :: nday,day_step,iperiod,iapp_tracvl 13 INTEGER :: nday,day_step,iperiod,iapp_tracvl,nsplit_phys 14 14 INTEGER :: iconser,iecri,idissip,iphysiq,iecrimoy 15 15 INTEGER :: dayref,anneeref, raz_date, ip_ebil_dyn 16 LOGICAL :: offline , output_grads_dyn16 LOGICAL :: offline 17 17 CHARACTER (len=4) :: config_inca 18 CHARACTER (len=10) :: planet_type 18 CHARACTER (len=10) :: planet_type ! planet type ('earth','mars',...) 19 LOGICAL output_grads_dyn ! output dynamics diagnostics in 20 ! binary grads file 'dyn.dat' (y/n) 21 LOGICAL ok_dynzon ! output zonal transports in dynzon.nc file 22 LOGICAL ok_dyn_ins ! output instantaneous values of fields 23 ! in the dynamics in NetCDF files dyn_hist*nc 24 LOGICAL ok_dyn_ave ! output averaged values of fields in the dynamics 25 ! in NetCDF files dyn_hist*ave.nc 19 26 20 27 LOGICAL ok_dynzon ! output zonal transports in dynzon.nc file -
LMDZ5/trunk/libf/dyn3dmem/dynetat0.F
r1632 r1657 1 1 ! 2 ! $ Header$2 ! $Id $ 3 3 ! 4 4 SUBROUTINE dynetat0(fichnom,vcov,ucov, 5 5 . teta,q,masse,ps,phis,time) 6 6 7 USE infotrac 7 8 IMPLICIT NONE … … 33 34 #include "serre.h" 34 35 #include "logic.h" 36 #include "iniprint.h" 35 37 36 38 c Arguments: … … 52 54 53 55 c----------------------------------------------------------------------- 56 54 57 c Ouverture NetCDF du fichier etat initial 55 58 56 59 ierr = NF_OPEN (fichnom, NF_NOWRITE,nid) 57 60 IF (ierr.NE.NF_NOERR) THEN 58 write( 6,*)'Pb d''ouverture du fichier start.nc'59 write( 6,*)' ierr = ', ierr61 write(lunout,*)'dynetat0: Pb d''ouverture du fichier start.nc' 62 write(lunout,*)' ierr = ', ierr 60 63 CALL ABORT 61 64 ENDIF … … 64 67 ierr = NF_INQ_VARID (nid, "controle", nvarid) 65 68 IF (ierr .NE. NF_NOERR) THEN 66 PRINT*,"dynetat0: Le champ <controle> est absent"69 write(lunout,*)"dynetat0: Le champ <controle> est absent" 67 70 CALL abort 68 71 ENDIF … … 73 76 #endif 74 77 IF (ierr .NE. NF_NOERR) THEN 75 PRINT*,"dynetat0: Lecture echoue pour <controle>"78 write(lunout,*)"dynetat0: Lecture echoue pour <controle>" 76 79 CALL abort 77 80 ENDIF … … 119 122 c 120 123 c 121 PRINT*,'rad,omeg,g,cpp,kappa',rad,omeg,g,cpp,kappa 124 write(lunout,*)'dynetat0: rad,omeg,g,cpp,kappa', 125 & rad,omeg,g,cpp,kappa 122 126 123 127 IF( im.ne.iim ) THEN … … 134 138 ierr = NF_INQ_VARID (nid, "rlonu", nvarid) 135 139 IF (ierr .NE. NF_NOERR) THEN 136 PRINT*,"dynetat0: Le champ <rlonu> est absent"140 write(lunout,*)"dynetat0: Le champ <rlonu> est absent" 137 141 CALL abort 138 142 ENDIF … … 143 147 #endif 144 148 IF (ierr .NE. NF_NOERR) THEN 145 PRINT*,"dynetat0: Lecture echouee pour <rlonu>"149 write(lunout,*)"dynetat0: Lecture echouee pour <rlonu>" 146 150 CALL abort 147 151 ENDIF … … 149 153 ierr = NF_INQ_VARID (nid, "rlatu", nvarid) 150 154 IF (ierr .NE. NF_NOERR) THEN 151 PRINT*,"dynetat0: Le champ <rlatu> est absent"155 write(lunout,*)"dynetat0: Le champ <rlatu> est absent" 152 156 CALL abort 153 157 ENDIF … … 158 162 #endif 159 163 IF (ierr .NE. NF_NOERR) THEN 160 PRINT*,"dynetat0: Lecture echouee pour <rlatu>"164 write(lunout,*)"dynetat0: Lecture echouee pour <rlatu>" 161 165 CALL abort 162 166 ENDIF … … 164 168 ierr = NF_INQ_VARID (nid, "rlonv", nvarid) 165 169 IF (ierr .NE. NF_NOERR) THEN 166 PRINT*,"dynetat0: Le champ <rlonv> est absent"170 write(lunout,*)"dynetat0: Le champ <rlonv> est absent" 167 171 CALL abort 168 172 ENDIF … … 173 177 #endif 174 178 IF (ierr .NE. NF_NOERR) THEN 175 PRINT*,"dynetat0: Lecture echouee pour <rlonv>"179 write(lunout,*)"dynetat0: Lecture echouee pour <rlonv>" 176 180 CALL abort 177 181 ENDIF … … 179 183 ierr = NF_INQ_VARID (nid, "rlatv", nvarid) 180 184 IF (ierr .NE. NF_NOERR) THEN 181 PRINT*,"dynetat0: Le champ <rlatv> est absent"185 write(lunout,*)"dynetat0: Le champ <rlatv> est absent" 182 186 CALL abort 183 187 ENDIF … … 188 192 #endif 189 193 IF (ierr .NE. NF_NOERR) THEN 190 PRINT*,"dynetat0: Lecture echouee pour rlatv"194 write(lunout,*)"dynetat0: Lecture echouee pour rlatv" 191 195 CALL abort 192 196 ENDIF … … 194 198 ierr = NF_INQ_VARID (nid, "cu", nvarid) 195 199 IF (ierr .NE. NF_NOERR) THEN 196 PRINT*,"dynetat0: Le champ <cu> est absent"200 write(lunout,*)"dynetat0: Le champ <cu> est absent" 197 201 CALL abort 198 202 ENDIF … … 203 207 #endif 204 208 IF (ierr .NE. NF_NOERR) THEN 205 PRINT*,"dynetat0: Lecture echouee pour <cu>"209 write(lunout,*)"dynetat0: Lecture echouee pour <cu>" 206 210 CALL abort 207 211 ENDIF … … 209 213 ierr = NF_INQ_VARID (nid, "cv", nvarid) 210 214 IF (ierr .NE. NF_NOERR) THEN 211 PRINT*,"dynetat0: Le champ <cv> est absent"215 write(lunout,*)"dynetat0: Le champ <cv> est absent" 212 216 CALL abort 213 217 ENDIF … … 218 222 #endif 219 223 IF (ierr .NE. NF_NOERR) THEN 220 PRINT*,"dynetat0: Lecture echouee pour <cv>"224 write(lunout,*)"dynetat0: Lecture echouee pour <cv>" 221 225 CALL abort 222 226 ENDIF … … 224 228 ierr = NF_INQ_VARID (nid, "aire", nvarid) 225 229 IF (ierr .NE. NF_NOERR) THEN 226 PRINT*,"dynetat0: Le champ <aire> est absent"230 write(lunout,*)"dynetat0: Le champ <aire> est absent" 227 231 CALL abort 228 232 ENDIF … … 233 237 #endif 234 238 IF (ierr .NE. NF_NOERR) THEN 235 PRINT*,"dynetat0: Lecture echouee pour <aire>"239 write(lunout,*)"dynetat0: Lecture echouee pour <aire>" 236 240 CALL abort 237 241 ENDIF … … 239 243 ierr = NF_INQ_VARID (nid, "phisinit", nvarid) 240 244 IF (ierr .NE. NF_NOERR) THEN 241 PRINT*,"dynetat0: Le champ <phisinit> est absent"245 write(lunout,*)"dynetat0: Le champ <phisinit> est absent" 242 246 CALL abort 243 247 ENDIF … … 248 252 #endif 249 253 IF (ierr .NE. NF_NOERR) THEN 250 PRINT*,"dynetat0: Lecture echouee pour <phisinit>"254 write(lunout,*)"dynetat0: Lecture echouee pour <phisinit>" 251 255 CALL abort 252 256 ENDIF … … 254 258 ierr = NF_INQ_VARID (nid, "temps", nvarid) 255 259 IF (ierr .NE. NF_NOERR) THEN 256 PRINT*,"dynetat0: Le champ <temps> est absent"260 write(lunout,*)"dynetat0: Le champ <temps> est absent" 257 261 CALL abort 258 262 ENDIF … … 263 267 #endif 264 268 IF (ierr .NE. NF_NOERR) THEN 265 PRINT*,"dynetat0: Lecture echouee <temps>"269 write(lunout,*)"dynetat0: Lecture echouee <temps>" 266 270 CALL abort 267 271 ENDIF … … 269 273 ierr = NF_INQ_VARID (nid, "ucov", nvarid) 270 274 IF (ierr .NE. NF_NOERR) THEN 271 PRINT*,"dynetat0: Le champ <ucov> est absent"275 write(lunout,*)"dynetat0: Le champ <ucov> est absent" 272 276 CALL abort 273 277 ENDIF … … 278 282 #endif 279 283 IF (ierr .NE. NF_NOERR) THEN 280 PRINT*,"dynetat0: Lecture echouee pour <ucov>"284 write(lunout,*)"dynetat0: Lecture echouee pour <ucov>" 281 285 CALL abort 282 286 ENDIF … … 284 288 ierr = NF_INQ_VARID (nid, "vcov", nvarid) 285 289 IF (ierr .NE. NF_NOERR) THEN 286 PRINT*,"dynetat0: Le champ <vcov> est absent"290 write(lunout,*)"dynetat0: Le champ <vcov> est absent" 287 291 CALL abort 288 292 ENDIF … … 293 297 #endif 294 298 IF (ierr .NE. NF_NOERR) THEN 295 PRINT*,"dynetat0: Lecture echouee pour <vcov>"299 write(lunout,*)"dynetat0: Lecture echouee pour <vcov>" 296 300 CALL abort 297 301 ENDIF … … 299 303 ierr = NF_INQ_VARID (nid, "teta", nvarid) 300 304 IF (ierr .NE. NF_NOERR) THEN 301 PRINT*,"dynetat0: Le champ <teta> est absent"305 write(lunout,*)"dynetat0: Le champ <teta> est absent" 302 306 CALL abort 303 307 ENDIF … … 308 312 #endif 309 313 IF (ierr .NE. NF_NOERR) THEN 310 PRINT*, "dynetat0: Lecture echouee pour <teta>" 311 CALL abort 312 ENDIF 313 314 314 write(lunout,*)"dynetat0: Lecture echouee pour <teta>" 315 CALL abort 316 ENDIF 317 318 319 IF(nqtot.GE.1) THEN 315 320 DO iq=1,nqtot 316 321 ierr = NF_INQ_VARID (nid, tname(iq), nvarid) 317 322 IF (ierr .NE. NF_NOERR) THEN 318 PRINT*, "dynetat0: Le champ <"//tname(iq)//"> est absent" 319 PRINT*, " Il est donc initialise a zero" 323 write(lunout,*)"dynetat0: Le champ <"//tname(iq)// 324 & "> est absent" 325 write(lunout,*)" Il est donc initialise a zero" 320 326 q(:,:,iq)=0. 321 327 ELSE … … 326 332 #endif 327 333 IF (ierr .NE. NF_NOERR) THEN 328 PRINT*,"dynetat0: Lecture echouee pour "//tname(iq)329 334 write(lunout,*)"dynetat0: Lecture echouee pour "//tname(iq) 335 CALL abort 330 336 ENDIF 331 337 ENDIF 332 338 ENDDO 339 ENDIF 333 340 334 341 ierr = NF_INQ_VARID (nid, "masse", nvarid) 335 342 IF (ierr .NE. NF_NOERR) THEN 336 PRINT*,"dynetat0: Le champ <masse> est absent"343 write(lunout,*)"dynetat0: Le champ <masse> est absent" 337 344 CALL abort 338 345 ENDIF … … 343 350 #endif 344 351 IF (ierr .NE. NF_NOERR) THEN 345 PRINT*,"dynetat0: Lecture echouee pour <masse>"352 write(lunout,*)"dynetat0: Lecture echouee pour <masse>" 346 353 CALL abort 347 354 ENDIF … … 349 356 ierr = NF_INQ_VARID (nid, "ps", nvarid) 350 357 IF (ierr .NE. NF_NOERR) THEN 351 PRINT*,"dynetat0: Le champ <ps> est absent"358 write(lunout,*)"dynetat0: Le champ <ps> est absent" 352 359 CALL abort 353 360 ENDIF … … 358 365 #endif 359 366 IF (ierr .NE. NF_NOERR) THEN 360 PRINT*,"dynetat0: Lecture echouee pour <ps>"367 write(lunout,*)"dynetat0: Lecture echouee pour <ps>" 361 368 CALL abort 362 369 ENDIF -
LMDZ5/trunk/libf/dyn3dmem/dynetat0_loc.F
r1632 r1657 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 SUBROUTINE dynetat0_loc(fichnom,vcov,ucov, … … 34 34 #include "serre.h" 35 35 #include "logic.h" 36 #include "iniprint.h" 36 37 37 38 c Arguments: … … 61 62 ierr = NF_OPEN (fichnom, NF_NOWRITE,nid) 62 63 IF (ierr.NE.NF_NOERR) THEN 63 write(6,*)' Pb d''ouverture du fichier start.nc' 64 write(6,*)' ierr = ', ierr 64 write(lunout,*) 65 & 'dynetat0_loc: Pb d''ouverture du fichier start.nc' 66 write(lunout,*)' ierr = ', ierr 65 67 CALL ABORT 66 68 ENDIF … … 69 71 ierr = NF_INQ_VARID (nid, "controle", nvarid) 70 72 IF (ierr .NE. NF_NOERR) THEN 71 PRINT*, "dynetat0: Le champ <controle> est absent"73 write(lunout,*)"dynetat0_loc: Le champ <controle> est absent" 72 74 CALL abort 73 75 ENDIF … … 78 80 #endif 79 81 IF (ierr .NE. NF_NOERR) THEN 80 PRINT*, "dynetat0: Lecture echoue pour <controle>"82 write(lunout,*)"dynetat0_loc: Lecture echoue pour <controle>" 81 83 CALL abort 82 84 ENDIF … … 124 126 c 125 127 c 126 PRINT*,'rad,omeg,g,cpp,kappa',rad,omeg,g,cpp,kappa 128 write(lunout,*)'dynetat0_loc: rad,omeg,g,cpp,kappa', 129 & rad,omeg,g,cpp,kappa 127 130 128 131 IF( im.ne.iim ) THEN … … 139 142 ierr = NF_INQ_VARID (nid, "rlonu", nvarid) 140 143 IF (ierr .NE. NF_NOERR) THEN 141 PRINT*, "dynetat0: Le champ <rlonu> est absent"144 write(lunout,*)"dynetat0_loc: Le champ <rlonu> est absent" 142 145 CALL abort 143 146 ENDIF … … 148 151 #endif 149 152 IF (ierr .NE. NF_NOERR) THEN 150 PRINT*, "dynetat0: Lecture echouee pour <rlonu>"153 write(lunout,*)"dynetat0_loc: Lecture echouee pour <rlonu>" 151 154 CALL abort 152 155 ENDIF … … 154 157 ierr = NF_INQ_VARID (nid, "rlatu", nvarid) 155 158 IF (ierr .NE. NF_NOERR) THEN 156 PRINT*, "dynetat0: Le champ <rlatu> est absent"159 write(lunout,*)"dynetat0_loc: Le champ <rlatu> est absent" 157 160 CALL abort 158 161 ENDIF … … 163 166 #endif 164 167 IF (ierr .NE. NF_NOERR) THEN 165 PRINT*, "dynetat0: Lecture echouee pour <rlatu>"168 write(lunout,*)"dynetat0_loc: Lecture echouee pour <rlatu>" 166 169 CALL abort 167 170 ENDIF … … 169 172 ierr = NF_INQ_VARID (nid, "rlonv", nvarid) 170 173 IF (ierr .NE. NF_NOERR) THEN 171 PRINT*, "dynetat0: Le champ <rlonv> est absent"174 write(lunout,*)"dynetat0_loc: Le champ <rlonv> est absent" 172 175 CALL abort 173 176 ENDIF … … 178 181 #endif 179 182 IF (ierr .NE. NF_NOERR) THEN 180 PRINT*, "dynetat0: Lecture echouee pour <rlonv>"183 write(lunout,*)"dynetat0_loc: Lecture echouee pour <rlonv>" 181 184 CALL abort 182 185 ENDIF … … 184 187 ierr = NF_INQ_VARID (nid, "rlatv", nvarid) 185 188 IF (ierr .NE. NF_NOERR) THEN 186 PRINT*, "dynetat0: Le champ <rlatv> est absent"189 write(lunout,*)"dynetat0_loc: Le champ <rlatv> est absent" 187 190 CALL abort 188 191 ENDIF … … 193 196 #endif 194 197 IF (ierr .NE. NF_NOERR) THEN 195 PRINT*, "dynetat0: Lecture echouee pour rlatv"198 write(lunout,*)"dynetat0_loc: Lecture echouee pour rlatv" 196 199 CALL abort 197 200 ENDIF … … 199 202 ierr = NF_INQ_VARID (nid, "cu", nvarid) 200 203 IF (ierr .NE. NF_NOERR) THEN 201 PRINT*, "dynetat0: Le champ <cu> est absent"204 write(lunout,*)"dynetat0_loc: Le champ <cu> est absent" 202 205 CALL abort 203 206 ENDIF … … 208 211 #endif 209 212 IF (ierr .NE. NF_NOERR) THEN 210 PRINT*, "dynetat0: Lecture echouee pour <cu>"213 write(lunout,*)"dynetat0_loc: Lecture echouee pour <cu>" 211 214 CALL abort 212 215 ENDIF … … 214 217 ierr = NF_INQ_VARID (nid, "cv", nvarid) 215 218 IF (ierr .NE. NF_NOERR) THEN 216 PRINT*, "dynetat0: Le champ <cv> est absent"219 write(lunout,*)"dynetat0_loc: Le champ <cv> est absent" 217 220 CALL abort 218 221 ENDIF … … 223 226 #endif 224 227 IF (ierr .NE. NF_NOERR) THEN 225 PRINT*, "dynetat0: Lecture echouee pour <cv>"228 write(lunout,*)"dynetat0_loc: Lecture echouee pour <cv>" 226 229 CALL abort 227 230 ENDIF … … 229 232 ierr = NF_INQ_VARID (nid, "aire", nvarid) 230 233 IF (ierr .NE. NF_NOERR) THEN 231 PRINT*, "dynetat0: Le champ <aire> est absent"234 write(lunout,*)"dynetat0_loc: Le champ <aire> est absent" 232 235 CALL abort 233 236 ENDIF … … 238 241 #endif 239 242 IF (ierr .NE. NF_NOERR) THEN 240 PRINT*, "dynetat0: Lecture echouee pour <aire>"243 write(lunout,*)"dynetat0_loc: Lecture echouee pour <aire>" 241 244 CALL abort 242 245 ENDIF … … 246 249 ierr = NF_INQ_VARID (nid, "phisinit", nvarid) 247 250 IF (ierr .NE. NF_NOERR) THEN 248 PRINT*, "dynetat0: Le champ <phisinit> est absent"251 write(lunout,*)"dynetat0_loc: Le champ <phisinit> est absent" 249 252 CALL abort 250 253 ENDIF … … 255 258 #endif 256 259 IF (ierr .NE. NF_NOERR) THEN 257 PRINT*, "dynetat0: Lecture echouee pour <phisinit>"260 write(lunout,*)"dynetat0_loc: Lecture echouee pour <phisinit>" 258 261 CALL abort 259 262 ENDIF … … 263 266 ierr = NF_INQ_VARID (nid, "temps", nvarid) 264 267 IF (ierr .NE. NF_NOERR) THEN 265 PRINT*, "dynetat0: Le champ <temps> est absent"268 write(lunout,*)"dynetat0_loc: Le champ <temps> est absent" 266 269 CALL abort 267 270 ENDIF … … 272 275 #endif 273 276 IF (ierr .NE. NF_NOERR) THEN 274 PRINT*, "dynetat0: Lecture echouee <temps>"277 write(lunout,*)"dynetat0_loc: Lecture echouee <temps>" 275 278 CALL abort 276 279 ENDIF … … 278 281 ierr = NF_INQ_VARID (nid, "ucov", nvarid) 279 282 IF (ierr .NE. NF_NOERR) THEN 280 PRINT*, "dynetat0: Le champ <ucov> est absent"283 write(lunout,*)"dynetat0_loc: Le champ <ucov> est absent" 281 284 CALL abort 282 285 ENDIF … … 290 293 #endif 291 294 IF (ierr .NE. NF_NOERR) THEN 292 PRINT*, "dynetat0: Lecture echouee pour <ucov>"295 write(lunout,*)"dynetat0_loc: Lecture echouee pour <ucov>" 293 296 CALL abort 294 297 ENDIF … … 300 303 ierr = NF_INQ_VARID (nid, "vcov", nvarid) 301 304 IF (ierr .NE. NF_NOERR) THEN 302 PRINT*, "dynetat0: Le champ <vcov> est absent"305 write(lunout,*)"dynetat0_loc: Le champ <vcov> est absent" 303 306 CALL abort 304 307 ENDIF … … 309 312 #endif 310 313 IF (ierr .NE. NF_NOERR) THEN 311 PRINT*, "dynetat0: Lecture echouee pour <vcov>"314 write(lunout,*)"dynetat0_loc: Lecture echouee pour <vcov>" 312 315 CALL abort 313 316 ENDIF … … 318 321 ierr = NF_INQ_VARID (nid, "teta", nvarid) 319 322 IF (ierr .NE. NF_NOERR) THEN 320 PRINT*, "dynetat0: Le champ <teta> est absent"323 write(lunout,*)"dynetat0_loc: Le champ <teta> est absent" 321 324 CALL abort 322 325 ENDIF … … 327 330 #endif 328 331 IF (ierr .NE. NF_NOERR) THEN 329 PRINT*, "dynetat0: Lecture echouee pour <teta>"332 write(lunout,*)"dynetat0_loc: Lecture echouee pour <teta>" 330 333 CALL abort 331 334 ENDIF … … 339 342 ierr = NF_INQ_VARID (nid, tname(iq), nvarid) 340 343 IF (ierr .NE. NF_NOERR) THEN 341 PRINT*, "dynetat0: Le champ <"//tname(iq)//"> est absent" 342 PRINT*, " Il est donc initialise a zero" 343 q_glo(:,:)=0. 344 write(lunout,*)"dynetat0_loc: Le champ <"//tname(iq)// 345 & "> est absent" 346 write(lunout,*)" Il est donc initialise a zero" 347 q(:,:,iq)=0. 344 348 ELSE 345 349 #ifdef NC_DOUBLE … … 349 353 #endif 350 354 IF (ierr .NE. NF_NOERR) THEN 351 PRINT*, "dynetat0: Lecture echouee pour "//tname(iq) 352 CALL abort 355 write(lunout,*) 356 & "dynetat0_loc: Lecture echouee pour "//tname(iq) 357 CALL abort 353 358 ENDIF 354 359 ENDIF … … 361 366 ierr = NF_INQ_VARID (nid, "masse", nvarid) 362 367 IF (ierr .NE. NF_NOERR) THEN 363 PRINT*, "dynetat0: Le champ <masse> est absent"368 write(lunout,*)"dynetat0_loc: Le champ <masse> est absent" 364 369 CALL abort 365 370 ENDIF … … 370 375 #endif 371 376 IF (ierr .NE. NF_NOERR) THEN 372 PRINT*, "dynetat0: Lecture echouee pour <masse>"377 write(lunout,*)"dynetat0_loc: Lecture echouee pour <masse>" 373 378 CALL abort 374 379 ENDIF … … 379 384 ierr = NF_INQ_VARID (nid, "ps", nvarid) 380 385 IF (ierr .NE. NF_NOERR) THEN 381 PRINT*, "dynetat0: Le champ <ps> est absent"386 write(lunout,*)"dynetat0_loc: Le champ <ps> est absent" 382 387 CALL abort 383 388 ENDIF … … 388 393 #endif 389 394 IF (ierr .NE. NF_NOERR) THEN 390 PRINT*, "dynetat0: Lecture echouee pour <ps>"395 write(lunout,*)"dynetat0_loc: Lecture echouee pour <ps>" 391 396 CALL abort 392 397 ENDIF -
LMDZ5/trunk/libf/dyn3dmem/dynredem_loc.F
r1632 r1657 27 27 #include "description.h" 28 28 #include "serre.h" 29 #include "iniprint.h" 29 30 30 31 c Arguments: … … 64 65 if (mpi_rank==0) then 65 66 66 modname='dynredem0_ p'67 modname='dynredem0_loc' 67 68 68 69 #ifdef CPP_IOIPSL … … 132 133 ierr = NF_CREATE(fichnom, NF_CLOBBER, nid) 133 134 IF (ierr.NE.NF_NOERR) THEN 134 WRITE(6,*)" Pb d ouverture du fichier "//fichnom 135 WRITE(6,*)' ierr = ', ierr 135 write(lunout,*)"dynredem0: Pb d ouverture du fichier " 136 & //trim(fichnom) 137 write(lunout,*)' ierr = ', ierr 136 138 CALL ABORT 137 139 ENDIF … … 514 516 ierr = NF_CLOSE(nid) ! fermer le fichier 515 517 516 517 PRINT*,'iim,jjm,llm,iday_end',iim,jjm,llm,iday_end518 PRINT*,'rad,omeg,g,cpp,kappa',519 ,rad,omeg,g,cpp,kappa518 write(lunout,*)'dynredem_loc: iim,jjm,llm,iday_end', 519 & iim,jjm,llm,iday_end 520 write(lunout,*)'dynredem_loc: rad,omeg,g,cpp,kappa', 521 & rad,omeg,g,cpp,kappa 520 522 521 523 endif ! mpi_rank==0 … … 540 542 #include "comgeom.h" 541 543 #include "temps.h" 544 #include "iniprint.h" 542 545 543 546 INTEGER l … … 579 582 !$OMP MASTER 580 583 if (mpi_rank==0) then 581 modname = 'dynredem1 '584 modname = 'dynredem1_loc' 582 585 ierr = NF_OPEN(fichnom, NF_WRITE, nid) 583 586 IF (ierr .NE. NF_NOERR) THEN 584 PRINT*, "Pb. d ouverture "//fichnom587 write(lunout,*)"dynredem1: Pb. d ouverture "//trim(fichnom) 585 588 CALL abort 586 589 ENDIF … … 591 594 ierr = NF_INQ_VARID(nid, "temps", nvarid) 592 595 IF (ierr .NE. NF_NOERR) THEN 593 print *,NF_STRERROR(ierr)596 write(lunout,*) NF_STRERROR(ierr) 594 597 abort_message='Variable temps n est pas definie' 595 598 CALL abort_gcm(modname,abort_message,ierr) … … 600 603 ierr = NF_PUT_VAR1_REAL (nid,nvarid,nb,time) 601 604 #endif 602 PRINT*, "Enregistrement pour ", nb, time605 write(lunout,*) "dynredem1_loc: Enregistrement pour ", nb, time 603 606 604 607 c -
LMDZ5/trunk/libf/dyn3dmem/exner_hyb.F
r1632 r1657 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 SUBROUTINE exner_hyb ( ngrid, ps, p,alpha,beta, pks, pk, pkf ) … … 51 51 REAL SSUM 52 52 c 53 54 if (llm.eq.1) then 55 ! Specific behaviour for Shallow Water (1 vertical layer) case 53 56 57 ! Sanity checks 58 if (kappa.ne.1) then 59 call abort_gcm("exner_hyb", 60 & "kappa!=1 , but running in Shallow Water mode!!",42) 61 endif 62 if (cpp.ne.r) then 63 call abort_gcm("exner_hyb", 64 & "cpp!=r , but running in Shallow Water mode!!",42) 65 endif 66 67 ! Compute pks(:),pk(:),pkf(:) 68 69 DO ij = 1, ngrid 70 pks(ij) = (cpp/preff) * ps(ij) 71 pk(ij,1) = .5*pks(ij) 72 ENDDO 73 74 CALL SCOPY ( ngrid * llm, pk, 1, pkf, 1 ) 75 CALL filtreg ( pkf, jmp1, llm, 2, 1, .TRUE., 1 ) 76 77 ! our work is done, exit routine 78 return 79 endif ! of if (llm.eq.1) 80 81 54 82 unpl2k = 1.+ 2.* kappa 55 83 c -
LMDZ5/trunk/libf/dyn3dmem/exner_hyb_loc.F
r1632 r1657 1 c 2 c $Id$ 3 c 1 4 SUBROUTINE exner_hyb_loc(ngrid, ps, p,alpha,beta, pks,pk,pkf) 2 5 c … … 56 59 c 57 60 c$OMP BARRIER 61 62 if (llm.eq.1) then 63 ! Specific behaviour for Shallow Water (1 vertical layer) case 64 65 ! Sanity checks 66 if (kappa.ne.1) then 67 call abort_gcm("exner_hyb", 68 & "kappa!=1 , but running in Shallow Water mode!!",42) 69 endif 70 if (cpp.ne.r) then 71 call abort_gcm("exner_hyb", 72 & "cpp!=r , but running in Shallow Water mode!!",42) 73 endif 74 75 ! Compute pks(:),pk(:),pkf(:) 76 ijb=ij_begin 77 ije=ij_end 78 !$OMP DO SCHEDULE(STATIC) 79 DO ij=ijb, ije 80 pks(ij)=(cpp/preff)*ps(ij) 81 pk(ij,1) = .5*pks(ij) 82 pkf(ij,1)=pk(ij,1) 83 ENDDO 84 !$OMP ENDDO 85 86 !$OMP MASTER 87 if (pole_nord) then 88 DO ij = 1, iim 89 ppn(ij) = aire( ij ) * pks( ij ) 90 ENDDO 91 xpn = SSUM(iim,ppn,1) /apoln 92 93 DO ij = 1, iip1 94 pks( ij ) = xpn 95 pk(ij,1) = .5*pks(ij) 96 pkf(ij,1)=pk(ij,1) 97 ENDDO 98 endif 99 100 if (pole_sud) then 101 DO ij = 1, iim 102 pps(ij) = aire(ij+ip1jm) * pks(ij+ip1jm ) 103 ENDDO 104 xps = SSUM(iim,pps,1) /apols 105 106 DO ij = 1, iip1 107 pks( ij+ip1jm ) = xps 108 pk(ij+ip1jm,1)=.5*pks(ij+ip1jm) 109 pkf(ij+ip1jm,1)=pk(ij+ip1jm,1) 110 ENDDO 111 endif 112 !$OMP END MASTER 113 114 jjb=jj_begin 115 jje=jj_end 116 CALL filtreg_p ( pkf,jjb_u,jje_u,jjb,jje, jmp1, llm, 117 & 2, 1, .TRUE., 1 ) 118 119 ! our work is done, exit routine 120 return 121 endif ! of if (llm.eq.1) 122 123 58 124 unpl2k = 1.+ 2.* kappa 59 125 c -
LMDZ5/trunk/libf/dyn3dmem/gcm.F
r1632 r1657 1 1 ! 2 ! $Id: gcm.F 13 16 2010-02-22 14:51:12Z acozic$2 ! $Id: gcm.F 1397 2010-06-02 12:57:39Z emillour $ 3 3 ! 4 4 c … … 70 70 #include "description.h" 71 71 #include "serre.h" 72 #include "com_io_dyn.h"72 !#include "com_io_dyn.h" 73 73 #include "iniprint.h" 74 74 #include "tracstoke.h" 75 #ifdef INCA 76 ! Only INCA needs these informations (from the Earth's physics) 75 77 #include "indicesol.h" 78 #endif 76 79 77 80 INTEGER longcles … … 273 276 if (read_start) then 274 277 ! we still need to run iniacademic to initialize some 275 ! constants & fields, if we run the 'newtonian' case:276 if (iflag_phys. eq.2) then278 ! constants & fields, if we run the 'newtonian' or 'SW' cases: 279 if (iflag_phys.ne.1) then 277 280 CALL iniacademic(vcov,ucov,teta,q,masse,ps,phis,time_0) 278 281 endif 279 !#ifdef CPP_IOIPSL 282 280 283 if (planet_type.eq."earth") then 281 284 #ifdef CPP_EARTH 282 285 ! Load an Earth-format start file 283 286 CALL dynetat0_loc("start.nc",vcov,ucov, 284 . teta,q,masse,ps,phis, time_0) 287 & teta,q,masse,ps,phis, time_0) 288 #else 289 ! SW model also has Earth-format start files 290 ! (but can be used without the CPP_EARTH directive) 291 if (iflag_phys.eq.0) then 292 CALL dynetat0_loc("start.nc",vcov,ucov, 293 & teta,q,masse,ps,phis, time_0) 294 endif 285 295 #endif 286 296 endif ! of if (planet_type.eq."earth") … … 326 336 C on remet le calendrier à zero si demande 327 337 c 328 if (annee_ref .ne. anneeref .or. day_ref .ne. dayref) then 338 IF (raz_date == 1) THEN 339 annee_ref = anneeref 340 day_ref = dayref 341 day_ini = dayref 342 itau_dyn = 0 343 itau_phy = 0 344 time_0 = 0. 345 write(lunout,*) 346 . 'GCM: On reinitialise a la date lue dans gcm.def' 347 ELSE IF (annee_ref .ne. anneeref .or. day_ref .ne. dayref) THEN 329 348 write(lunout,*) 330 349 . 'GCM: Attention les dates initiales lues dans le fichier' … … 332 351 . ' restart ne correspondent pas a celles lues dans ' 333 352 write(lunout,*)' gcm.def' 334 write(lunout,*)' annee_ref=',annee_ref," anneeref=",anneeref 335 write(lunout,*)' day_ref=',day_ref," dayref=",dayref 336 if (raz_date .ne. 1) then 337 write(lunout,*) 338 . 'GCM: On garde les dates du fichier restart' 339 else 340 annee_ref = anneeref 341 day_ref = dayref 342 day_ini = dayref 343 itau_dyn = 0 344 itau_phy = 0 345 time_0 = 0. 346 write(lunout,*) 347 . 'GCM: On reinitialise a la date lue dans gcm.def' 348 endif 349 ELSE 350 raz_date = 0 351 endif 353 write(lunout,*)' annee_ref=',annee_ref," anneeref=",anneeref 354 write(lunout,*)' day_ref=',day_ref," dayref=",dayref 355 write(lunout,*)' Pas de remise a zero' 356 ENDIF 357 c if (annee_ref .ne. anneeref .or. day_ref .ne. dayref) then 358 c write(lunout,*) 359 c . 'GCM: Attention les dates initiales lues dans le fichier' 360 c write(lunout,*) 361 c . ' restart ne correspondent pas a celles lues dans ' 362 c write(lunout,*)' gcm.def' 363 c write(lunout,*)' annee_ref=',annee_ref," anneeref=",anneeref 364 c write(lunout,*)' day_ref=',day_ref," dayref=",dayref 365 c if (raz_date .ne. 1) then 366 c write(lunout,*) 367 c . 'GCM: On garde les dates du fichier restart' 368 c else 369 c annee_ref = anneeref 370 c day_ref = dayref 371 c day_ini = dayref 372 c itau_dyn = 0 373 c itau_phy = 0 374 c time_0 = 0. 375 c write(lunout,*) 376 c . 'GCM: On reinitialise a la date lue dans gcm.def' 377 c endif 378 c ELSE 379 c raz_date = 0 380 c endif 352 381 353 382 #ifdef CPP_IOIPSL … … 428 457 if (planet_type.eq."earth") then 429 458 #ifdef CPP_EARTH 430 CALL iniphysiq(ngridmx,llm,daysec,day_ini,dtphys ,459 CALL iniphysiq(ngridmx,llm,daysec,day_ini,dtphys/nsplit_phys , 431 460 , latfi,lonfi,airefi,zcufi,zcvfi,rad,g,r,cpp ) 432 461 #endif … … 473 502 474 503 #ifdef CPP_IOIPSL 475 if ( 1.eq.1) then476 504 time_step = zdtvr 477 t_ops = iecri * daysec 478 t_wrt = iecri * daysec 479 ! CALL inithist_p(dynhist_file,day_ref,annee_ref,time_step, 480 ! . t_ops, t_wrt, histid, histvid) 505 IF (mpi_rank==0) then 506 if (ok_dyn_ins) then 507 ! initialize output file for instantaneous outputs 508 ! t_ops = iecri * daysec ! do operations every t_ops 509 t_ops =((1.0*iecri)/day_step) * daysec 510 t_wrt = daysec ! iecri * daysec ! write output every t_wrt 511 t_wrt = daysec ! iecri * daysec ! write output every t_wrt 512 CALL inithist(day_ref,annee_ref,time_step, 513 & t_ops,t_wrt) 514 endif 481 515 482 516 IF (ok_dyn_ave) THEN 483 t_ops = iperiod * time_step 484 t_wrt = periodav * daysec 517 ! initialize output file for averaged outputs 518 t_ops = iperiod * time_step ! do operations every t_ops 519 t_wrt = periodav * daysec ! write output every t_wrt 485 520 CALL initdynav_loc(day_ref,annee_ref,time_step,t_ops,t_wrt) 486 END IF 521 END IF 522 ENDIF 487 523 dtav = iperiod*dtvr/daysec 488 endif489 490 491 524 #endif 492 525 ! #endif of #ifdef CPP_IOIPSL -
LMDZ5/trunk/libf/dyn3dmem/iniacademic.F
r1632 r1657 1 1 ! 2 ! $Id: iniacademic.F 1 299 2010-01-20 14:27:21Z fairhead$2 ! $Id: iniacademic.F 1363 2010-04-16 09:50:10Z emillour $ 3 3 ! 4 4 c … … 8 8 USE filtreg_mod 9 9 USE infotrac, ONLY : nqtot 10 USE control_mod 11 10 12 11 13 c%W% %G% … … 31 33 c 32 34 c======================================================================= 33 USE control_mod34 35 IMPLICIT NONE 35 36 c----------------------------------------------------------------------- … … 46 47 #include "temps.h" 47 48 #include "iniprint.h" 49 #include "logic.h" 48 50 49 51 c Arguments: … … 55 57 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) ! vents covariants 56 58 REAL teta(ip1jmp1,llm) ! temperature potentielle 57 REAL q(ip1jmp1,llm,nqtot) ! champs advectes59 REAL q(ip1jmp1,llm,nqtot) ! champs advectes 58 60 REAL ps(ip1jmp1) ! pression au sol 59 61 REAL masse(ip1jmp1,llm) ! masse d'air … … 84 86 time_0=0. 85 87 day_ref=0 86 88 annee_ref=0 87 89 88 90 im = iim … … 105 107 ang0 = 0. 106 108 109 if (llm.eq.1) then 110 ! specific initializations for the shallow water case 111 kappa=1 112 endif 113 107 114 CALL iniconst 108 115 CALL inigeom 109 116 CALL inifilr 110 117 111 ps=0. 112 phis=0. 118 if (llm.eq.1) then 119 ! initialize fields for the shallow water case, if required 120 if (.not.read_start) then 121 phis(:)=0. 122 q(:,:,1)=1.e-10 123 q(:,:,2)=1.e-15 124 q(:,:,3:nqtot)=0. 125 CALL sw_case_williamson91_6(vcov,ucov,teta,masse,ps) 126 endif 127 endif 128 129 if (iflag_phys.eq.2) then 130 ! initializations for the academic case 131 ps(:)=1.e5 132 phis(:)=0. 113 133 c--------------------------------------------------------------------- 114 134 115 taurappel=10.*daysec135 taurappel=10.*daysec 116 136 117 137 c--------------------------------------------------------------------- … … 119 139 c -------------------------------------- 120 140 121 DO l=1,llm122 zsig=ap(l)/preff+bp(l)123 if (zsig.gt.0.3) then124 lsup=l125 tetarappell=1./8.*(-log(zsig)-.5)126 DO j=1,jjp1141 DO l=1,llm 142 zsig=ap(l)/preff+bp(l) 143 if (zsig.gt.0.3) then 144 lsup=l 145 tetarappell=1./8.*(-log(zsig)-.5) 146 DO j=1,jjp1 127 147 ddsin=sin(rlatu(j))-sin(pi/20.) 128 148 tetajl(j,l)=300.*(1+1./18.*(1.-3.*ddsin*ddsin)+tetarappell) 129 ENDDO130 else149 ENDDO 150 else 131 151 c Choix isotherme au-dessus de 300 mbar 132 do j=1,jjp1133 tetajl(j,l)=tetajl(j,lsup)*(0.3/zsig)**kappa134 enddo135 endif ! of if (zsig.gt.0.3)136 ENDDO ! of DO l=1,llm137 138 do l=1,llm139 do j=1,jjp1152 do j=1,jjp1 153 tetajl(j,l)=tetajl(j,lsup)*(0.3/zsig)**kappa 154 enddo 155 endif ! of if (zsig.gt.0.3) 156 ENDDO ! of DO l=1,llm 157 158 do l=1,llm 159 do j=1,jjp1 140 160 do i=1,iip1 141 161 ij=(j-1)*iip1+i 142 162 tetarappel(ij,l)=tetajl(j,l) 143 163 enddo 144 enddo145 enddo164 enddo 165 enddo 146 166 147 167 c call dump2d(jjp1,llm,tetajl,'TEQ ') 148 168 149 ps=1.e5 150 phis=0. 151 CALL pression ( ip1jmp1, ap, bp, ps, p ) 152 CALL exner_hyb( ip1jmp1, ps, p,alpha,beta, pks, pk, pkf ) 153 CALL massdair(p,masse) 169 CALL pression ( ip1jmp1, ap, bp, ps, p ) 170 CALL exner_hyb( ip1jmp1, ps, p,alpha,beta, pks, pk, pkf ) 171 CALL massdair(p,masse) 154 172 155 173 c intialisation du vent et de la temperature 156 teta(:,:)=tetarappel(:,:)157 CALL geopot(ip1jmp1,teta,pk,pks,phis,phi)158 call ugeostr(phi,ucov)159 vcov=0.160 q(:,:,1 )=1.e-10161 q(:,:,2 )=1.e-15162 q(:,:,3:nqtot)=0.174 teta(:,:)=tetarappel(:,:) 175 CALL geopot(ip1jmp1,teta,pk,pks,phis,phi) 176 call ugeostr(phi,ucov) 177 vcov=0. 178 q(:,:,1 )=1.e-10 179 q(:,:,2 )=1.e-15 180 q(:,:,3:nqtot)=0. 163 181 164 182 165 183 c perturbation aleatoire sur la temperature 166 idum = -1167 zz = ran1(idum)168 idum = 0169 do l=1,llm170 do ij=iip2,ip1jm184 idum = -1 185 zz = ran1(idum) 186 idum = 0 187 do l=1,llm 188 do ij=iip2,ip1jm 171 189 teta(ij,l)=teta(ij,l)*(1.+0.005*ran1(idum)) 172 enddo173 enddo174 175 do l=1,llm176 do ij=1,ip1jmp1,iip1190 enddo 191 enddo 192 193 do l=1,llm 194 do ij=1,ip1jmp1,iip1 177 195 teta(ij+iim,l)=teta(ij,l) 178 enddo179 enddo196 enddo 197 enddo 180 198 181 199 … … 187 205 188 206 c initialisation d'un traceur sur une colonne 189 j=jjp1*3/4 190 i=iip1/2 191 ij=(j-1)*iip1+i 192 q(ij,:,3)=1. 193 207 j=jjp1*3/4 208 i=iip1/2 209 ij=(j-1)*iip1+i 210 q(ij,:,3)=1. 211 endif ! of if (iflag_phys.eq.2) 212 194 213 else 195 214 write(lunout,*)"iniacademic: planet types other than earth", -
LMDZ5/trunk/libf/dyn3dmem/iniconst.F
r1632 r1657 1 1 ! 2 ! $Id: iniconst.F 1 299 2010-01-20 14:27:21Z fairhead$2 ! $Id: iniconst.F 1380 2010-05-06 12:24:59Z emillour $ 3 3 ! 4 4 SUBROUTINE iniconst 5 5 6 6 USE control_mod 7 7 8 IMPLICIT NONE 8 9 c … … 18 19 #include "temps.h" 19 20 #include "comvert.h" 21 #include "iniprint.h" 20 22 21 23 … … 53 55 r = cpp * kappa 54 56 55 PRINT*,'R CP Kappa ', r , cpp, kappa57 write(lunout,*)'iniconst: R CP Kappa ', r , cpp, kappa 56 58 c 57 59 c----------------------------------------------------------------------- -
LMDZ5/trunk/libf/dyn3dmem/inter_barxy_m.F90
r1632 r1657 118 118 IMPLICIT NONE 119 119 120 REAL, intent(in):: dlonid(:) 121 real, intent(in):: fdat(:) 122 real, intent(in):: rlonimod(:) 120 REAL, intent(in):: dlonid(:) ! dim(idatmax) 121 real, intent(in):: fdat(:) ! dim(idatmax) 122 real, intent(in):: rlonimod(:) ! dim(imodmax) 123 123 124 124 real inter_barx(size(rlonimod)) … … 176 176 177 177 DO idat = 1, idatmax 178 xxd(idat) = AMOD( xxd(idat) - xim0, 360. )178 xxd(idat) = MOD( xxd(idat) - xim0, 360. ) 179 179 fdd(idat) = fdat (idat) 180 180 ENDDO -
LMDZ5/trunk/libf/dyn3dmem/leapfrog_loc.F
r1632 r1657 75 75 #include "description.h" 76 76 #include "serre.h" 77 #include "com_io_dyn.h"77 !#include "com_io_dyn.h" 78 78 #include "iniprint.h" 79 79 #include "academic.h" … … 397 397 398 398 IF( purmats ) THEN 399 ! Purely Matsuno time stepping 399 400 IF( MOD(itau,iconser) .EQ.0.AND. forward ) conser = .TRUE. 400 401 IF( MOD(itau,idissip ).EQ.0.AND..NOT.forward ) apdiss = .TRUE. … … 402 403 s .and. iflag_phys.EQ.1 ) apphys = .TRUE. 403 404 ELSE 405 ! Leapfrog/Matsuno time stepping 404 406 IF( MOD(itau ,iconser) .EQ. 0 ) conser = .TRUE. 405 407 IF( MOD(itau+1,idissip) .EQ. 0 ) apdiss = .TRUE. … … 407 409 END IF 408 410 411 ! Ehouarn: for Shallow Water case (ie: 1 vertical layer), 412 ! supress dissipation step 413 if (llm.eq.1) then 414 apdiss=.false. 415 endif 416 409 417 cym ---> Pour le moment 410 418 cym apphys = .FALSE. 411 419 statcl = .FALSE. 412 conser = .FALSE. 420 conser = .FALSE. ! ie: no output of control variables to stdout in // 413 421 414 422 if (firstCaldyn) then … … 1069 1077 ijb=ij_begin 1070 1078 ije=ij_end 1071 teta(ijb:ije,:)=teta(ijb:ije,:) 1072 s -iphysiq*dtvr*(teta(ijb:ije,:)-tetarappel(ijb:ije,:))/taurappel 1079 !LF teta(ijb:ije,:)=teta(ijb:ije,:) 1080 !LF s -iphysiq*dtvr*(teta(ijb:ije,:)-tetarappel(ijb:ije,:))/taurappel 1081 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1082 do l=1,llm 1083 teta(ijb:ije,l)=teta(ijb:ije,l) 1084 & -iphysiq*dtvr*(teta(ijb:ije,l)-tetarappel(ijb:ije,l))/taurappel 1085 enddo 1086 !$OMP END DO 1073 1087 1074 1088 call Register_Hallo_u(ucov,llm,0,1,1,0,Request_Physic) … … 1077 1091 c$OMP BARRIER 1078 1092 call WaitRequest(Request_Physic) 1079 1093 c$OMP BARRIER 1080 1094 call friction_loc(ucov,vcov,iphysiq*dtvr) 1095 !$OMP BARRIER 1081 1096 ENDIF ! of IF(iflag_phys.EQ.2) 1082 1097 … … 1312 1327 !c$OMP END MASTER 1313 1328 !c$OMP BARRIER 1314 END IF 1329 END IF ! of IF(apdiss) 1315 1330 1316 1331 cc$OMP END PARALLEL
Note: See TracChangeset
for help on using the changeset viewer.