Changeset 1665 for LMDZ5/branches/testing/libf/dyn3dpar
- Timestamp:
- Oct 9, 2012, 3:35:26 PM (12 years ago)
- Location:
- LMDZ5/branches/testing
- Files:
-
- 1 deleted
- 29 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/branches/testing
- Property svn:mergeinfo changed
/LMDZ5/trunk merged: 1576-1580,1582,1584,1591-1593,1597-1598,1600,1604-1620,1622-1628
- Property svn:mergeinfo changed
-
LMDZ5/branches/testing/libf/dyn3dpar/bands.F90
r1279 r1665 93 93 SUBROUTINE Set_Bands 94 94 USE parallel 95 #ifdef CPP_ EARTH96 ! Ehouarn: what follows is only related to // physics ; for now only for Earth95 #ifdef CPP_PHYS 96 ! Ehouarn: what follows is only related to // physics 97 97 USE mod_phys_lmdz_para, ONLY : jj_para_begin,jj_para_end 98 98 #endif … … 106 106 enddo 107 107 108 #ifdef CPP_EARTH 109 ! Ehouarn: what follows is only related to // physics; for now only for Earth 108 #ifdef CPP_PHYS 110 109 do i=0,MPI_Size-1 111 110 jj_Nb_physic(i)=jj_para_end(i)-jj_para_begin(i)+1 … … 332 331 subroutine AdjustBands_physic 333 332 use times 334 #ifdef CPP_ EARTH335 ! Ehouarn: what follows is only related to // physics ; for now only for Earth333 #ifdef CPP_PHYS 334 ! Ehouarn: what follows is only related to // physics 336 335 USE mod_phys_lmdz_para, only : klon_mpi_para_nb 337 336 #endif … … 359 358 medium=medium/mpi_size 360 359 NbTot=0 361 #ifdef CPP_EARTH 362 ! Ehouarn: what follows is only related to // physics; for now only for Earth 360 #ifdef CPP_PHYS 363 361 do i=0,mpi_size-1 364 362 Inc(i)=nint(klon_mpi_para_nb(i)*(medium-value(i))/value(i)) -
LMDZ5/branches/testing/libf/dyn3dpar/calfis_p.F
r1407 r1665 27 27 $ pdqfi, 28 28 $ pdpsfi) 29 #ifdef CPP_EARTH 30 ! Ehouarn: For now, calfis_p needs Earth physics 31 c 32 c Auteur : P. Le Van, F. Hourdin 33 c ......... 29 #ifdef CPP_PHYS 30 ! If using physics 34 31 USE dimphy 35 32 USE mod_phys_lmdz_para, mpi_root_xx=>mpi_root … … 146 143 REAL clesphy0( longcles ) 147 144 148 #ifdef CPP_EARTH 145 #ifdef CPP_PHYS 146 ! Ehouarn: for now calfis_p needs some informations from physics to compile 149 147 c Local variables : 150 148 c ----------------- … … 222 220 PARAMETER(ntetaSTD=3) 223 221 REAL rtetaSTD(ntetaSTD) 224 DATA rtetaSTD/350., 380., 405./ 222 DATA rtetaSTD/350., 380., 405./ ! Earth-specific values, beware !! 225 223 REAL PVteta(klon,ntetaSTD) 226 224 … … 489 487 490 488 491 IF (is_sequential) THEN 492 c 489 IF (is_sequential.and.(planet_type=="earth")) THEN 490 #ifdef CPP_PHYS 491 ! PVtheta calls tetalevel, which is in the physics 493 492 cIM calcul PV a teta=350, 380, 405K 494 493 CALL PVtheta(ngridmx,llm,pucov,pvcov,pteta, … … 496 495 $ ntetaSTD,rtetaSTD,PVteta) 497 496 c 497 #endif 498 498 ENDIF 499 499 … … 627 627 c$OMP BARRIER 628 628 629 if (planet_type=="earth") then630 #ifdef CPP_EARTH631 632 629 !$OMP MASTER 633 630 ! write(lunout,*) 'PHYSIQUE AVEC NSPLIT_PHYS=',nsplit_phys … … 639 636 zdqfic_omp(:,:,:)=0. 640 637 638 if (planet_type=="earth") then 639 #ifdef CPP_PHYS 641 640 do isplit=1,nsplit_phys 642 641 … … 687 686 enddo 688 687 688 #endif 689 ! of #ifdef CPP_PHYS 690 endif !of if (planet_type=="earth") 691 689 692 zdufi_omp(:,:)=zdufic_omp(:,:)/nsplit_phys 690 693 zdvfi_omp(:,:)=zdvfic_omp(:,:)/nsplit_phys 691 694 zdtfi_omp(:,:)=zdtfic_omp(:,:)/nsplit_phys 692 695 zdqfi_omp(:,:,:)=zdqfic_omp(:,:,:)/nsplit_phys 693 694 #endif695 endif !of if (planet_type=="earth")696 696 c$OMP BARRIER 697 697 … … 1110 1110 firstcal = .FALSE. 1111 1111 1112 #else 1113 write(lunout,*) 1114 & "calfis_p: for now can only work with parallel physics" 1115 stop 1116 #endif 1117 ! of #ifdef CPP_ EARTH1112 #else 1113 write(lunout,*) 1114 & "calfis_p: for now can only work with parallel physics" 1115 stop 1116 #endif 1117 ! of #ifdef CPP_PHYS 1118 1118 RETURN 1119 1119 END -
LMDZ5/branches/testing/libf/dyn3dpar/ce0l.F90
r1664 r1665 19 19 USE dimphy 20 20 USE comgeomphy 21 USE mod_phys_lmdz_para 21 USE mod_phys_lmdz_para, mpi_root_xx=>mpi_root 22 22 USE mod_const_mpi 23 23 USE infotrac … … 31 31 IMPLICIT NONE 32 32 #ifndef CPP_EARTH 33 #include "iniprint.h" 33 34 WRITE(lunout,*)'limit_netcdf: Earth-specific routine, needs Earth physics' 34 35 #else … … 42 43 #include "temps.h" 43 44 #include "logic.h" 45 #ifdef CPP_MPI 46 include 'mpif.h' 47 #endif 48 44 49 INTEGER, PARAMETER :: longcles=20 50 INTEGER :: ierr 45 51 REAL, DIMENSION(longcles) :: clesphy0 46 52 REAL, DIMENSION(iip1,jjp1) :: masque … … 50 56 CALL conf_gcm( 99, .TRUE. , clesphy0 ) 51 57 58 #ifdef CPP_MPI 52 59 CALL init_mpi 60 #endif 53 61 54 62 CALL Init_Phys_lmdz(iim,jjp1,llm,1,(/(jjm-1)*iim+2/)) … … 115 123 END IF 116 124 125 #ifdef CPP_MPI 117 126 !$OMP MASTER 118 CALL finalize_parallel 127 CALL MPI_FINALIZE(ierr) 128 IF (ierr /= 0) CALL abort_gcm('ce0l','Error in MPI_FINALIZE',1) 119 129 !$OMP END MASTER 130 #endif 120 131 121 132 #endif -
LMDZ5/branches/testing/libf/dyn3dpar/comvert.h
r1520 r1665 9 9 & aps(llm),bps(llm),scaleheight 10 10 11 common/comverti/disvert_type 11 common/comverti/disvert_type, pressure_exner 12 12 13 13 real ap ! hybrid pressure contribution at interlayers … … 30 30 ! using 'z2sig.def' (or 'esasig.def) file 31 31 32 logical pressure_exner 33 ! compute pressure inside layers using Exner function, else use mean 34 ! of pressure values at interfaces 35 32 36 !----------------------------------------------------------------------- -
LMDZ5/branches/testing/libf/dyn3dpar/conf_gcm.F
r1664 r1665 167 167 nday = 10 168 168 CALL getin('nday',nday) 169 170 !Config Key = starttime 171 !Config Desc = Heure de depart de la simulation 172 !Config Def = 0 173 !Config Help = Heure de depart de la simulation 174 !Config en jour 175 starttime = 0 176 CALL getin('starttime',starttime) 169 177 170 178 !Config Key = day_step -
LMDZ5/branches/testing/libf/dyn3dpar/control_mod.F90
r1502 r1665 10 10 IMPLICIT NONE 11 11 12 REAL :: periodav 12 REAL :: periodav, starttime 13 13 INTEGER :: nday,day_step,iperiod,iapp_tracvl,nsplit_phys 14 14 INTEGER :: iconser,iecri,dissip_period,iphysiq,iecrimoy -
LMDZ5/branches/testing/libf/dyn3dpar/disvert.F90
r1524 r1665 4 4 5 5 ! Auteur : P. Le Van 6 7 use new_unit_m, only: new_unit 8 use ioipsl, only: getin 6 9 7 10 IMPLICIT NONE … … 26 29 real zk, zkm1, dzk1, dzk2, k0, k1 27 30 28 INTEGER l 31 INTEGER l, unit 29 32 REAL dsigmin 30 33 REAL alpha, beta, deltaz 31 INTEGER iostat32 34 REAL x 33 35 character(len=*),parameter :: modname="disvert" 34 36 37 character(len=6):: vert_sampling 38 ! (allowed values are "param", "tropo", "strato" and "read") 39 35 40 !----------------------------------------------------------------------- 41 42 print *, "Call sequence information: disvert" 36 43 37 44 ! default scaleheight is 8km for earth 38 45 scaleheight=8. 39 46 40 OPEN(99, file='sigma.def', status='old', form='formatted', iostat=iostat) 47 vert_sampling = merge("strato", "tropo ", ok_strato) ! default value 48 call getin('vert_sampling', vert_sampling) 49 print *, 'vert_sampling = ' // vert_sampling 41 50 42 IF (iostat == 0) THEN 43 ! cas 1 on lit les options dans sigma.def: 51 select case (vert_sampling) 52 case ("param") 53 ! On lit les options dans sigma.def: 54 OPEN(99, file='sigma.def', status='old', form='formatted') 44 55 READ(99, *) scaleheight ! hauteur d'echelle 8. 45 56 READ(99, *) deltaz ! epaiseur de la premiere couche 0.04 … … 68 79 69 80 sig(llm+1)=0. 70 71 DO l = 1, llm 72 dsig(l) = sig(l)-sig(l+1) 73 end DO 74 ELSE 75 if (ok_strato) then 76 if (llm==39) then 77 dsigmin=0.3 78 else if (llm==50) then 79 dsigmin=1. 80 else 81 write(lunout,*) trim(modname), & 82 ' ATTENTION discretisation z a ajuster' 83 dsigmin=1. 84 endif 85 write(lunout,*) trim(modname), & 86 ' Discretisation verticale DSIGMIN=',dsigmin 87 endif 88 81 case("tropo") 89 82 DO l = 1, llm 90 83 x = 2*asin(1.) * (l - 0.5) / (llm + 1) 91 92 IF (ok_strato) THEN 93 dsig(l) =(dsigmin + 7. * SIN(x)**2) & 94 *(0.5*(1.-tanh(1.*(x-asin(1.))/asin(1.))))**2 95 ELSE 96 dsig(l) = 1.0 + 7.0 * SIN(x)**2 97 ENDIF 84 dsig(l) = 1.0 + 7.0 * SIN(x)**2 98 85 ENDDO 99 86 dsig = dsig / sum(dsig) … … 102 89 sig(l) = sig(l+1) + dsig(l) 103 90 ENDDO 104 ENDIF 91 case("strato") 92 if (llm==39) then 93 dsigmin=0.3 94 else if (llm==50) then 95 dsigmin=1. 96 else 97 write(lunout,*) trim(modname), ' ATTENTION discretisation z a ajuster' 98 dsigmin=1. 99 endif 100 WRITE(LUNOUT,*) trim(modname), 'Discretisation verticale DSIGMIN=',dsigmin 101 102 DO l = 1, llm 103 x = 2*asin(1.) * (l - 0.5) / (llm + 1) 104 dsig(l) =(dsigmin + 7. * SIN(x)**2) & 105 *(0.5*(1.-tanh(1.*(x-asin(1.))/asin(1.))))**2 106 ENDDO 107 dsig = dsig / sum(dsig) 108 sig(llm+1) = 0. 109 DO l = llm, 1, -1 110 sig(l) = sig(l+1) + dsig(l) 111 ENDDO 112 case("read") 113 call new_unit(unit) 114 open(unit, file="hybrid.txt", status="old", action="read", & 115 position="rewind") 116 read(unit, fmt=*) ! skip title line 117 do l = 1, llm + 1 118 read(unit, fmt=*) sig(l) 119 end do 120 close(unit) 121 case default 122 call abort_gcm("disvert", 'Wrong value for "vert_sampling"', 1) 123 END select 105 124 106 125 DO l=1, llm -
LMDZ5/branches/testing/libf/dyn3dpar/dynetat0.F
r1421 r1665 119 119 day_ini = tab_cntrl(30) 120 120 itau_dyn = tab_cntrl(31) 121 start_time = tab_cntrl(32) 121 122 c ................................................................. 122 123 c -
LMDZ5/branches/testing/libf/dyn3dpar/dynredem.F
r1664 r1665 120 120 tab_cntrl(30) = REAL(iday_end) 121 121 tab_cntrl(31) = REAL(itau_dyn + itaufin) 122 c start_time: start_time of simulation (not necessarily 0.) 123 tab_cntrl(32) = start_time 122 124 c 123 125 c ......................................................... -
LMDZ5/branches/testing/libf/dyn3dpar/dynredem_p.F
r1664 r1665 120 120 tab_cntrl(30) = REAL(iday_end) 121 121 tab_cntrl(31) = REAL(itau_dyn + itaufin) 122 c start_time: start_time of simulation (not necessarily 0.) 123 tab_cntrl(32) = start_time 122 124 c 123 125 c ......................................................... -
LMDZ5/branches/testing/libf/dyn3dpar/etat0_netcdf.F90
r1520 r1665 251 251 !******************************************************************************* 252 252 CALL pression(ip1jmp1, ap, bp, psol, p3d) 253 if ( disvert_type.eq.1) then253 if (pressure_exner) then 254 254 CALL exner_hyb(ip1jmp1, psol, p3d, alpha, beta, pks, pk, y) 255 else ! we assume that we are in the disvert_type==2 case255 else 256 256 CALL exner_milieu(ip1jmp1,psol,p3d,beta,pks,pk,y) 257 257 endif -
LMDZ5/branches/testing/libf/dyn3dpar/exner_hyb.F
r1520 r1665 56 56 ! Sanity check 57 57 if (firstcall) then 58 ! check that vertical discretization is compatible59 ! with this routine60 if (disvert_type.ne.1) then61 call abort_gcm(modname,62 & "this routine should only be called if disvert_type==1",42)63 endif64 65 58 ! sanity checks for Shallow Water case (1 vertical layer) 66 59 if (llm.eq.1) then -
LMDZ5/branches/testing/libf/dyn3dpar/exner_hyb_p.F
r1664 r1665 60 60 ! Sanity check 61 61 if (firstcall) then 62 ! check that vertical discretization is compatible63 ! with this routine64 if (disvert_type.ne.1) then65 call abort_gcm(modname,66 & "this routine should only be called if disvert_type==1",42)67 endif68 69 62 ! sanity checks for Shallow Water case (1 vertical layer) 70 63 if (llm.eq.1) then -
LMDZ5/branches/testing/libf/dyn3dpar/exner_milieu.F
r1520 r1665 53 53 ! Sanity check 54 54 if (firstcall) then 55 ! check that vertical discretization is compatible56 ! with this routine57 if (disvert_type.ne.2) then58 call abort_gcm(modname,59 & "this routine should only be called if disvert_type==2",42)60 endif61 62 55 ! sanity checks for Shallow Water case (1 vertical layer) 63 56 if (llm.eq.1) then -
LMDZ5/branches/testing/libf/dyn3dpar/exner_milieu_p.F
r1664 r1665 56 56 ! Sanity check 57 57 if (firstcall) then 58 ! check that vertical discretization is compatible59 ! with this routine60 if (disvert_type.ne.2) then61 call abort_gcm(modname,62 & "this routine should only be called if disvert_type==2",42)63 endif64 65 58 ! sanity checks for Shallow Water case (1 vertical layer) 66 59 if (llm.eq.1) then -
LMDZ5/branches/testing/libf/dyn3dpar/filtreg_p.F
r1146 r1665 208 208 IF( ifiltre.EQ.-2 ) THEN 209 209 DO j = jdfil,jffil 210 #ifdef BLAS 210 211 CALL DGEMM("N", "N", iim, nbniv_loc, iim, 1.0, 211 212 & matrinvn(1,1,j), iim, 212 213 & champ_loc(1,j,1), iip1*nlat, 0.0, 213 214 & champ_fft(1,j-jdfil+1,1), iip1*nlat) 215 #else 216 champ_fft(:,j-jdfil+1,:) 217 & =matmul(matrinvn(:,:,j),champ_loc(:iim,j,:)) 218 #endif 214 219 ENDDO 215 220 216 221 ELSE IF ( griscal ) THEN 217 222 DO j = jdfil,jffil 223 #ifdef BLAS 218 224 CALL DGEMM("N", "N", iim, nbniv_loc, iim, 1.0, 219 225 & matriceun(1,1,j), iim, 220 226 & champ_loc(1,j,1), iip1*nlat, 0.0, 221 227 & champ_fft(1,j-jdfil+1,1), iip1*nlat) 228 #else 229 champ_fft(:,j-jdfil+1,:) 230 & =matmul(matriceun(:,:,j),champ_loc(:iim,j,:)) 231 #endif 222 232 ENDDO 223 233 224 234 ELSE 225 235 DO j = jdfil,jffil 236 #ifdef BLAS 226 237 CALL DGEMM("N", "N", iim, nbniv_loc, iim, 1.0, 227 238 & matricevn(1,1,j), iim, 228 239 & champ_loc(1,j,1), iip1*nlat, 0.0, 229 240 & champ_fft(1,j-jdfil+1,1), iip1*nlat) 241 #else 242 champ_fft(:,j-jdfil+1,:) 243 & =matmul(matricevn(:,:,j),champ_loc(:iim,j,:)) 244 #endif 230 245 ENDDO 231 246 … … 236 251 IF( ifiltre.EQ.-2 ) THEN 237 252 DO j = jdfil,jffil 253 #ifdef BLAS 238 254 CALL DGEMM("N", "N", iim, nbniv_loc, iim, 1.0, 239 255 & matrinvs(1,1,j-jfiltsu+1), iim, 240 256 & champ_loc(1,j,1), iip1*nlat, 0.0, 241 257 & champ_fft(1,j-jdfil+1,1), iip1*nlat) 258 #else 259 champ_fft(:,j-jdfil+1,:) 260 & =matmul(matrinvs(:,:,j-jfiltsu+1), 261 & champ_loc(:iim,j,:)) 262 #endif 242 263 ENDDO 243 264 … … 245 266 246 267 DO j = jdfil,jffil 268 #ifdef BLAS 247 269 CALL DGEMM("N", "N", iim, nbniv_loc, iim, 1.0, 248 270 & matriceus(1,1,j-jfiltsu+1), iim, 249 271 & champ_loc(1,j,1), iip1*nlat, 0.0, 250 272 & champ_fft(1,j-jdfil+1,1), iip1*nlat) 273 #else 274 champ_fft(:,j-jdfil+1,:) 275 & =matmul(matriceus(:,:,j-jfiltsu+1), 276 & champ_loc(:iim,j,:)) 277 #endif 251 278 ENDDO 252 279 … … 254 281 255 282 DO j = jdfil,jffil 283 #ifdef BLAS 256 284 CALL DGEMM("N", "N", iim, nbniv_loc, iim, 1.0, 257 285 & matricevs(1,1,j-jfiltsv+1), iim, 258 286 & champ_loc(1,j,1), iip1*nlat, 0.0, 259 287 & champ_fft(1,j-jdfil+1,1), iip1*nlat) 288 #else 289 champ_fft(:,j-jdfil+1,:) 290 & =matmul(matricevs(:,:,j-jfiltsv+1), 291 & champ_loc(:iim,j,:)) 292 #endif 260 293 ENDDO 261 294 -
LMDZ5/branches/testing/libf/dyn3dpar/gcm.F
r1664 r1665 20 20 USE control_mod 21 21 22 ! Ehouarn: for now these only apply to Earth: 23 #ifdef CPP_EARTH 22 #ifdef CPP_PHYS 24 23 USE mod_grid_phy_lmdz 25 24 USE mod_phys_lmdz_para, ONLY : klon_mpi_para_nb … … 87 86 88 87 REAL zdtvr 89 c INTEGER nbetatmoy, nbetatdem,nbetat90 INTEGER nbetatmoy, nbetatdem91 88 92 89 c variables dynamiques … … 189 186 call ini_getparam("out.def") 190 187 call Read_Distrib 191 ! Ehouarn : temporarily (?) keep this only for Earth 192 if (planet_type.eq."earth") then 193 #ifdef CPP_EARTH 188 189 #ifdef CPP_PHYS 194 190 CALL Init_Phys_lmdz(iim,jjp1,llm,mpi_size,distrib_phys) 195 191 #endif 196 endif ! of if (planet_type.eq."earth")197 192 CALL set_bands 198 #ifdef CPP_EARTH 199 ! Ehouarn: For now only Earth physics is parallel 193 #ifdef CPP_PHYS 200 194 CALL Init_interface_dyn_phys 201 195 #endif … … 209 203 c$OMP END PARALLEL 210 204 211 ! Ehouarn : temporarily (?) keep this only for Earth 212 if (planet_type.eq."earth") then 213 #ifdef CPP_EARTH 205 #ifdef CPP_PHYS 214 206 c$OMP PARALLEL 215 207 call InitComgeomphy 216 208 c$OMP END PARALLEL 217 209 #endif 218 endif ! of if (planet_type.eq."earth")219 210 220 211 c----------------------------------------------------------------------- … … 323 314 C on remet le calendrier à zero si demande 324 315 c 316 IF (start_time /= starttime) then 317 WRITE(lunout,*)' GCM: Attention l''heure de depart lue dans le' 318 &,' fichier restart ne correspond pas à celle lue dans le run.def' 319 IF (raz_date == 1) then 320 WRITE(lunout,*)'Je prends l''heure lue dans run.def' 321 start_time = starttime 322 ELSE 323 WRITE(lunout,*)'Je m''arrete' 324 CALL abort 325 ENDIF 326 ENDIF 325 327 IF (raz_date == 1) THEN 326 328 annee_ref = anneeref … … 390 392 #endif 391 393 392 c nombre d'etats dans les fichiers demarrage et histoire393 nbetatdem = nday / iecri394 nbetatmoy = nday / periodav + 1395 394 396 395 if (iflag_phys.eq.1) then … … 445 444 WRITE(lunout,*) 446 445 . 'GCM: WARNING!!! vitesse verticale nulle dans la physique' 447 ! Earth: 448 if (planet_type.eq."earth") then 449 #ifdef CPP_EARTH 446 ! Physics: 447 #ifdef CPP_PHYS 450 448 CALL iniphysiq(ngridmx,llm,daysec,day_ini,dtphys/nsplit_phys , 451 449 , latfi,lonfi,airefi,zcufi,zcvfi,rad,g,r,cpp ) 452 450 #endif 453 endif ! of if (planet_type.eq."earth")454 451 call_iniphys=.false. 455 452 ENDIF ! of IF (call_iniphys.and.(iflag_phys.eq.1)) … … 484 481 301 FORMAT('1'/,15x,'run du ', i2,'/',i2,'/',i4) 485 482 302 FORMAT('1'/,15x,' au ', i2,'/',i2,'/',i4) 483 #endif 484 485 #ifdef CPP_PHYS 486 ! Create start file (startphy.nc) and boundary conditions (limit.nc) 487 ! for the Earth verstion 488 if (iflag_phys>=100) then 489 call iniaqua(ngridmx,latfi,lonfi,iflag_phys) 490 endif 486 491 #endif 487 492 -
LMDZ5/branches/testing/libf/dyn3dpar/gr_dyn_fi_p.F
r1279 r1665 3 3 ! 4 4 SUBROUTINE gr_dyn_fi_p(nfield,im,jm,ngrid,pdyn,pfi) 5 #ifdef CPP_ EARTH5 #ifdef CPP_PHYS 6 6 ! Interface with parallel physics, 7 ! for now this routine only works with Earth physics8 7 USE mod_interface_dyn_phys 9 8 USE dimphy … … 40 39 ENDDO 41 40 c$OMP END DO NOWAIT 42 #else43 write(lunout,*) "gr_fi_dyn_p : This routine should not be called",44 & "without parallelized physics"45 stop46 41 #endif 47 ! of #ifdef CPP_ EARTH42 ! of #ifdef CPP_PHYS 48 43 RETURN 49 44 END -
LMDZ5/branches/testing/libf/dyn3dpar/gr_fi_dyn_p.F
r1279 r1665 3 3 ! 4 4 SUBROUTINE gr_fi_dyn_p(nfield,ngrid,im,jm,pfi,pdyn) 5 #ifdef CPP_ EARTH5 #ifdef CPP_PHYS 6 6 ! Interface with parallel physics, 7 ! for now this routine only works with Earth physics8 7 USE mod_interface_dyn_phys 9 8 USE dimphy … … 52 51 ENDDO 53 52 c$OMP END DO NOWAIT 54 #else55 write(lunout,*) "gr_fi_dyn_p : This routine should not be called",56 & "without parallelized physics"57 stop58 53 #endif 59 ! of #ifdef CPP_ EARTH54 ! of #ifdef CPP_PHYS 60 55 RETURN 61 56 END -
LMDZ5/branches/testing/libf/dyn3dpar/guide_p_mod.F90
r1520 r1665 455 455 ! Calcul niveaux pression milieu de couches 456 456 CALL pression_p( ip1jmp1, ap, bp, ps, p ) 457 if ( disvert_type==1) then457 if (pressure_exner) then 458 458 CALL exner_hyb_p(ip1jmp1,ps,p,alpha,beta,pks,pk,pkf) 459 459 else … … 755 755 ELSE 756 756 CALL pression_p( ip1jmp1, ap, bp, psi, p ) 757 if ( disvert_type==1) then757 if (pressure_exner) then 758 758 CALL exner_hyb_p(ip1jmp1,psi,p,alpha,beta,pks,pk,pkf) 759 else ! we assume that we are in the disvert_type==2 case759 else 760 760 CALL exner_milieu_p(ip1jmp1,psi,p,beta,pks,pk,pkf) 761 761 endif -
LMDZ5/branches/testing/libf/dyn3dpar/iniacademic.F90
r1664 r1665 222 222 223 223 CALL pression ( ip1jmp1, ap, bp, ps, p ) 224 if ( disvert_type.eq.1) then224 if (pressure_exner) then 225 225 CALL exner_hyb( ip1jmp1, ps, p,alpha,beta, pks, pk, pkf ) 226 else if (disvert_type.eq.2) then226 else 227 227 call exner_milieu(ip1jmp1,ps,p,beta,pks,pk,pkf) 228 else229 write(abort_message,*) "Wrong value for disvert_type: ", &230 disvert_type231 call abort_gcm(modname,abort_message,0)232 228 endif 233 229 CALL massdair(p,masse) -
LMDZ5/branches/testing/libf/dyn3dpar/inidissip.F90
r1502 r1665 28 28 ! Local variables: 29 29 REAL fact,zvert(llm),zz 30 REAL zh(ip1jmp1),zu(ip1jmp1),zv(ip1jm),deltap(ip1jmp1,llm) 30 REAL zh(ip1jmp1),zu(ip1jmp1), gx(ip1jmp1), divgra(ip1jmp1) 31 real zv(ip1jm), gy(ip1jm), deltap(ip1jmp1,llm) 31 32 REAL ullm,vllm,umin,vmin,zhmin,zhmax 32 REAL zllm ,z1llm33 REAL zllm 33 34 34 35 INTEGER l,ij,idum,ii … … 78 79 DO l = 1,50 79 80 IF(lstardis) THEN 80 CALL divgrad2(1,zh,deltap,niterh, zh)81 CALL divgrad2(1,zh,deltap,niterh,divgra) 81 82 ELSE 82 CALL divgrad (1,zh,niterh, zh)83 CALL divgrad (1,zh,niterh,divgra) 83 84 ENDIF 84 85 85 CALL minmax(iip1*jjp1,zh,zhmin,zhmax ) 86 87 zllm = ABS( zhmax ) 88 z1llm = 1./zllm 89 DO ij = 1,ip1jmp1 90 zh(ij) = zh(ij)* z1llm 91 ENDDO 86 zllm = ABS(maxval(divgra)) 87 zh = divgra / zllm 92 88 ENDDO 93 89 … … 123 119 !cccc CALL covcont( 1,zu,zv,zu,zv ) 124 120 IF(lstardis) THEN 125 CALL gradiv2( 1,zu,zv,nitergdiv, zu,zv)121 CALL gradiv2( 1,zu,zv,nitergdiv,gx,gy ) 126 122 ELSE 127 CALL gradiv ( 1,zu,zv,nitergdiv, zu,zv)123 CALL gradiv ( 1,zu,zv,nitergdiv,gx,gy ) 128 124 ENDIF 129 125 ELSE 130 126 IF(lstardis) THEN 131 CALL nxgraro2( 1,zu,zv,nitergrot, zu,zv)127 CALL nxgraro2( 1,zu,zv,nitergrot,gx,gy ) 132 128 ELSE 133 CALL nxgrarot( 1,zu,zv,nitergrot, zu,zv)129 CALL nxgrarot( 1,zu,zv,nitergrot,gx,gy ) 134 130 ENDIF 135 131 ENDIF 136 132 137 CALL minmax(iip1*jjp1,zu,umin,ullm ) 138 CALL minmax(iip1*jjm, zv,vmin,vllm ) 139 140 ullm = ABS ( ullm ) 141 vllm = ABS ( vllm ) 142 143 zllm = MAX( ullm,vllm ) 144 z1llm = 1./ zllm 145 DO ij = 1, ip1jmp1 146 zu(ij) = zu(ij)* z1llm 147 ENDDO 148 DO ij = 1, ip1jm 149 zv(ij) = zv(ij)* z1llm 150 ENDDO 133 zllm = max(abs(maxval(gx)), abs(maxval(gy))) 134 zu = gx / zllm 135 zv = gy / zllm 151 136 end DO 152 137 -
LMDZ5/branches/testing/libf/dyn3dpar/inigrads.F
r774 r1665 9 9 implicit none 10 10 11 integer if,im,jm,lm,i,j,l ,lnblnk11 integer if,im,jm,lm,i,j,l 12 12 real x(im),y(jm),z(lm),fx,fy,fz,dt 13 13 real xmin,xmax,ymin,ymax … … 40 40 ivar(if)=0 41 41 42 fichier(if)= file(1:lnblnk(file))42 fichier(if)=trim(file) 43 43 44 44 firsttime(if)=.true. … … 70 70 71 71 print*,4*(ifd(if)-iid(if))*(jfd(if)-jid(if)) 72 print*, file(1:lnblnk(file))//'.dat'72 print*,trim(file)//'.dat' 73 73 74 OPEN (unit(if)+1,FILE= file(1:lnblnk(file))//'.dat'74 OPEN (unit(if)+1,FILE=trim(file)//'.dat' 75 75 s ,FORM='unformatted', 76 76 s ACCESS='direct' -
LMDZ5/branches/testing/libf/dyn3dpar/integrd_p.F
r1550 r1665 4 4 SUBROUTINE integrd_p 5 5 $ ( nq,vcovm1,ucovm1,tetam1,psm1,massem1, 6 $ dv,du,dteta,dq,dp,vcov,ucov,teta,q,ps0,masse,phis ,finvmaold)6 $ dv,du,dteta,dq,dp,vcov,ucov,teta,q,ps0,masse,phis) !,finvmaold) 7 7 USE parallel 8 8 USE control_mod, only : planet_type … … 33 33 #include "temps.h" 34 34 #include "serre.h" 35 #include "iniprint.h" 35 36 36 37 c Arguments: 37 38 c ---------- 38 39 39 INTEGER nq 40 41 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm) 42 REAL q(ip1jmp1,llm,nq) 43 REAL ps0(ip1jmp1),masse(ip1jmp1,llm),phis(ip1jmp1) 44 45 REAL vcovm1(ip1jm,llm),ucovm1(ip1jmp1,llm) 46 REAL tetam1(ip1jmp1,llm),psm1(ip1jmp1),massem1(ip1jmp1,llm) 47 48 REAL dv(ip1jm,llm),du(ip1jmp1,llm) 49 REAL dteta(ip1jmp1,llm),dp(ip1jmp1) 50 REAL dq(ip1jmp1,llm,nq), finvmaold(ip1jmp1,llm) 40 integer,intent(in) :: nq ! number of tracers to handle in this routine 41 real,intent(inout) :: vcov(ip1jm,llm) ! covariant meridional wind 42 real,intent(inout) :: ucov(ip1jmp1,llm) ! covariant zonal wind 43 real,intent(inout) :: teta(ip1jmp1,llm) ! potential temperature 44 real,intent(inout) :: q(ip1jmp1,llm,nq) ! advected tracers 45 real,intent(inout) :: ps0(ip1jmp1) ! surface pressure 46 real,intent(inout) :: masse(ip1jmp1,llm) ! atmospheric mass 47 real,intent(in) :: phis(ip1jmp1) ! ground geopotential !!! unused 48 ! values at previous time step 49 real,intent(inout) :: vcovm1(ip1jm,llm) 50 real,intent(inout) :: ucovm1(ip1jmp1,llm) 51 real,intent(inout) :: tetam1(ip1jmp1,llm) 52 real,intent(inout) :: psm1(ip1jmp1) 53 real,intent(inout) :: massem1(ip1jmp1,llm) 54 ! the tendencies to add 55 real,intent(in) :: dv(ip1jm,llm) 56 real,intent(in) :: du(ip1jmp1,llm) 57 real,intent(in) :: dteta(ip1jmp1,llm) 58 real,intent(in) :: dp(ip1jmp1) 59 real,intent(in) :: dq(ip1jmp1,llm,nq) !!! unused 60 ! real,intent(out) :: finvmaold(ip1jmp1,llm) !!! unused 51 61 52 62 c Local: … … 54 64 55 65 REAL vscr( ip1jm ),uscr( ip1jmp1 ),hscr( ip1jmp1 ),pscr(ip1jmp1) 56 REAL massescr( ip1jmp1,llm ), finvmasse(ip1jmp1,llm) 66 REAL massescr( ip1jmp1,llm ) 67 ! REAL finvmasse(ip1jmp1,llm) 57 68 REAL,SAVE :: p(ip1jmp1,llmp1) 58 69 REAL tpn,tps,tppn(iim),tpps(iim) … … 60 71 REAL,SAVE :: deltap( ip1jmp1,llm ) 61 72 62 INTEGER l,ij,iq 73 INTEGER l,ij,iq,i,j 63 74 64 75 REAL SSUM … … 126 137 127 138 IF( .NOT. checksum ) THEN 128 PRINT*,' Au point ij = ',stop_it, ' , pression sol neg. ' 129 & , ps(stop_it) 130 print *, ' dans integrd' 131 stop 1 139 write(lunout,*) "integrd: negative surface pressure ", 140 & ps(stop_it) 141 write(lunout,*) " at node ij =", stop_it 142 ! since ij=j+(i-1)*jjp1 , we have 143 j=modulo(stop_it,jjp1) 144 i=1+(stop_it-j)/jjp1 145 write(lunout,*) " lon = ",rlonv(i)*180./pi, " deg", 146 & " lat = ",rlatu(j)*180./pi, " deg" 132 147 ENDIF 133 148 … … 167 182 CALL massdair_p ( p , masse ) 168 183 169 c CALL SCOPY( ijp1llm , masse, 1, finvmasse, 1 ) 170 ijb=ij_begin 171 ije=ij_end 172 173 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 174 DO l = 1,llm 175 finvmasse(ijb:ije,l)=masse(ijb:ije,l) 176 ENDDO 177 c$OMP END DO NOWAIT 178 179 jjb=jj_begin 180 jje=jj_end 181 CALL filtreg_p( finvmasse,jjb,jje, jjp1, llm, -2, 2, .TRUE., 1 ) 184 ! Ehouarn : we don't use/need finvmaold and finvmasse, 185 ! so might as well not compute them 186 !c CALL SCOPY( ijp1llm , masse, 1, finvmasse, 1 ) 187 ! ijb=ij_begin 188 ! ije=ij_end 189 ! 190 !c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 191 ! DO l = 1,llm 192 ! finvmasse(ijb:ije,l)=masse(ijb:ije,l) 193 ! ENDDO 194 !c$OMP END DO NOWAIT 195 ! 196 ! jjb=jj_begin 197 ! jje=jj_end 198 ! CALL filtreg_p( finvmasse,jjb,jje, jjp1, llm, -2, 2, .TRUE., 1 ) 182 199 c 183 200 … … 330 347 ENDIF 331 348 332 c CALL SCOPY( ijp1llm , finvmasse, 1, finvmaold, 1 ) 333 334 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 335 DO l = 1, llm 336 finvmaold(ijb:ije,l)=finvmasse(ijb:ije,l) 337 ENDDO 338 c$OMP END DO NOWAIT 349 ! Ehouarn: forget about finvmaold 350 !c CALL SCOPY( ijp1llm , finvmasse, 1, finvmaold, 1 ) 351 ! 352 !c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 353 ! DO l = 1, llm 354 ! finvmaold(ijb:ije,l)=finvmasse(ijb:ije,l) 355 ! ENDDO 356 !c$OMP END DO NOWAIT 339 357 340 358 endif ! of if (planet_type.eq."earth") -
LMDZ5/branches/testing/libf/dyn3dpar/leapfrog_p.F
r1664 r1665 75 75 76 76 real zqmin,zqmax 77 INTEGER nbetatmoy, nbetatdem,nbetat78 77 79 78 c variables dynamiques … … 125 124 REAL SSUM 126 125 REAL time_0 127 REAL,SAVE :: finvmaold(ip1jmp1,llm)126 ! REAL,SAVE :: finvmaold(ip1jmp1,llm) 128 127 129 128 cym LOGICAL lafin … … 234 233 dq(:,:,:)=0. 235 234 CALL pression ( ip1jmp1, ap, bp, ps, p ) 236 if ( disvert_type==1) then235 if (pressure_exner) then 237 236 CALL exner_hyb( ip1jmp1, ps, p,alpha,beta, pks, pk, pkf ) 238 else ! we assume that we are in the disvert_type==2 case237 else 239 238 CALL exner_milieu( ip1jmp1, ps, p, beta, pks, pk, pkf ) 240 239 endif … … 245 244 c et du parallelisme !! 246 245 247 1 CONTINUE 248 249 jD_cur = jD_ref + day_ini - day_ref + int (itau * dtvr / daysec) 250 jH_cur = jH_ref + & 251 & (itau * dtvr / daysec - int(itau * dtvr / daysec)) 246 1 CONTINUE ! Matsuno Forward step begins here 247 248 jD_cur = jD_ref + day_ini - day_ref + & 249 & itau/day_step 250 jH_cur = jH_ref + start_time + & 251 & mod(itau,day_step)/float(day_step) 252 if (jH_cur > 1.0 ) then 253 jD_cur = jD_cur +1. 254 jH_cur = jH_cur -1. 255 endif 252 256 253 257 … … 280 284 massem1= masse 281 285 psm1= ps 282 283 finvmaold = masse 284 CALL filtreg ( finvmaold ,jjp1, llm, -2,2, .TRUE., 1 ) 286 287 ! Ehouarn: finvmaold is actually not used 288 ! finvmaold = masse 289 ! CALL filtreg ( finvmaold ,jjp1, llm, -2,2, .TRUE., 1 ) 285 290 c$OMP END MASTER 286 291 c$OMP BARRIER … … 300 305 tetam1 (ijb:ije,l) = teta (ijb:ije,l) 301 306 massem1 (ijb:ije,l) = masse (ijb:ije,l) 302 finvmaold(ijb:ije,l)=masse(ijb:ije,l)307 ! finvmaold(ijb:ije,l)=masse(ijb:ije,l) 303 308 304 309 if (pole_sud) ije=ij_end-iip1 … … 309 314 c$OMP ENDDO 310 315 311 312 CALL filtreg_p ( finvmaold ,jj_begin,jj_end,jjp1,313 . llm, -2,2, .TRUE., 1 )316 ! Ehouarn: finvmaold not used 317 ! CALL filtreg_p ( finvmaold ,jj_begin,jj_end,jjp1, 318 ! . llm, -2,2, .TRUE., 1 ) 314 319 315 320 endif ! of if (FirstCaldyn) … … 327 332 cym call minmax(ijp1llm,q(:,:,3),zqmin,zqmax) 328 333 329 2 CONTINUE 334 2 CONTINUE ! Matsuno backward or leapfrog step begins here 330 335 331 336 c$OMP MASTER … … 472 477 call Register_SwapFieldHallo(phi,phi,ip1jmp1,llm, 473 478 & jj_Nb_caldyn,0,0,TestRequest) 474 call Register_SwapFieldHallo(finvmaold,finvmaold,ip1jmp1,llm,475 & jj_Nb_caldyn,0,0,TestRequest)479 ! call Register_SwapFieldHallo(finvmaold,finvmaold,ip1jmp1,llm, 480 ! & jj_Nb_caldyn,0,0,TestRequest) 476 481 477 482 do j=1,nqtot … … 555 560 call start_timer(timer_caldyn) 556 561 562 ! compute geopotential phi() 557 563 CALL geopot_p ( ip1jmp1, teta , pk , pks, phis , phi ) 558 564 … … 629 635 630 636 CALL integrd_p ( 2,vcovm1,ucovm1,tetam1,psm1,massem1 , 631 $ dv,du,dteta,dq,dp,vcov,ucov,teta,q,ps,masse,phis ,632 $ finvmaold )637 $ dv,du,dteta,dq,dp,vcov,ucov,teta,q,ps,masse,phis ) 638 ! $ finvmaold ) 633 639 634 640 ! CALL FTRACE_REGION_END("integrd") … … 693 699 694 700 c$OMP BARRIER 695 if ( disvert_type==1) then701 if (pressure_exner) then 696 702 CALL exner_hyb_p( ip1jmp1, ps, p,alpha,beta,pks, pk, pkf ) 697 else ! we assume that we are in the disvert_type==2 case703 else 698 704 CALL exner_milieu_p( ip1jmp1, ps, p, beta, pks, pk, pkf ) 699 705 endif 700 706 c$OMP BARRIER 701 707 jD_cur = jD_ref + day_ini - day_ref 702 $ + i nt (itau * dtvr / daysec)703 jH_cur = jH_ref + 704 & (itau * dtvr / daysec - int(itau * dtvr / daysec))708 $ + itau/day_step 709 jH_cur = jH_ref + start_time + & 710 & mod(itau,day_step)/float(day_step) 705 711 ! call ju2ymds(jD_cur+jH_cur, an, mois, jour, secondes) 712 if (jH_cur > 1.0 ) then 713 jD_cur = jD_cur +1. 714 jH_cur = jH_cur -1. 715 endif 706 716 707 717 c rajout debug … … 719 729 ! Ehouarn: be careful, diagedyn is Earth-specific (includes ../phylmd/..)! 720 730 IF (planet_type.eq."earth") THEN 731 #ifdef CPP_EARTH 721 732 CALL diagedyn(ztit,2,1,1,dtphys 722 733 & , ucov , vcov , ps, p ,pk , teta , q(:,:,1), q(:,:,2)) 734 #endif 723 735 ENDIF 724 736 ENDIF … … 1036 1048 CALL pression_p ( ip1jmp1, ap, bp, ps, p ) 1037 1049 c$OMP BARRIER 1038 if ( disvert_type==1) then1050 if (pressure_exner) then 1039 1051 CALL exner_hyb_p( ip1jmp1, ps, p,alpha,beta, pks, pk, pkf ) 1040 else ! we assume that we are in the disvert_type==2 case1052 else 1041 1053 CALL exner_milieu_p( ip1jmp1, ps, p, beta, pks, pk, pkf ) 1042 1054 endif … … 1185 1197 c$OMP END DO NOWAIT 1186 1198 1199 if (1 == 0) then 1200 !!! Ehouarn: lines here 1) kill 1+1=2 in the dynamics 1201 !!! 2) should probably not be here anyway 1202 !!! but are kept for those who would want to revert to previous behaviour 1187 1203 c$OMP MASTER 1188 1204 DO ij = 1,iim … … 1195 1211 ENDDO 1196 1212 c$OMP END MASTER 1197 endif 1213 endif ! of if (1 == 0) 1214 endif ! of of (pole_nord) 1198 1215 1199 1216 if (pole_sud) then … … 1211 1228 c$OMP END DO NOWAIT 1212 1229 1230 if (1 == 0) then 1231 !!! Ehouarn: lines here 1) kill 1+1=2 in the dynamics 1232 !!! 2) should probably not be here anyway 1233 !!! but are kept for those who would want to revert to previous behaviour 1213 1234 c$OMP MASTER 1214 1235 DO ij = 1,iim … … 1221 1242 ENDDO 1222 1243 c$OMP END MASTER 1223 endif 1244 endif ! of if (1 == 0) 1245 endif ! of if (pole_sud) 1224 1246 1225 1247 … … 1431 1453 c$OMP BARRIER 1432 1454 c$OMP MASTER 1433 nbetat = nbetatdem1434 1455 CALL geopot_p(ip1jmp1,teta,pk,pks,phis,phi) 1435 1456 … … 1634 1655 c$OMP BARRIER 1635 1656 c$OMP MASTER 1636 nbetat = nbetatdem1637 1657 CALL geopot_p(ip1jmp1,teta,pk,pks,phis,phi) 1638 1658 -
LMDZ5/branches/testing/libf/dyn3dpar/mod_interface_dyn_phys.F90
r1279 r1665 7 7 8 8 9 #ifdef CPP_ EARTH9 #ifdef CPP_PHYS 10 10 ! Interface with parallel physics, 11 ! for now this routine only works with Earth physics12 11 CONTAINS 13 12 … … 56 55 END SUBROUTINE Init_interface_dyn_phys 57 56 #endif 58 ! of #ifdef CPP_ EARTH57 ! of #ifdef CPP_PHYS 59 58 END MODULE mod_interface_dyn_phys -
LMDZ5/branches/testing/libf/dyn3dpar/temps.h
r1279 r1665 14 14 15 15 COMMON/temps/itaufin, dt, day_ini, day_end, annee_ref, day_ref, & 16 & itau_dyn, itau_phy, jD_ref, jH_ref, calend 16 & itau_dyn, itau_phy, jD_ref, jH_ref, calend, & 17 & start_time 18 17 19 18 20 INTEGER itaufin 19 21 INTEGER itau_dyn, itau_phy 20 22 INTEGER day_ini, day_end, annee_ref, day_ref 21 REAL dt, jD_ref, jH_ref 23 REAL dt, jD_ref, jH_ref, start_time 22 24 CHARACTER (len=10) :: calend 23 25 -
LMDZ5/branches/testing/libf/dyn3dpar/wrgrads.F
r774 r1665 22 22 c local 23 23 24 integer im,jm,lm,i,j,l, lnblnk,iv,iii,iji,iif,ijf24 integer im,jm,lm,i,j,l,iv,iii,iji,iif,ijf 25 25 26 26 logical writectl … … 55 55 nvar(if)=ivar(if) 56 56 var(ivar(if),if)=name 57 tvar(ivar(if),if)=t itlevar(1:lnblnk(titlevar))57 tvar(ivar(if),if)=trim(titlevar) 58 58 nld(ivar(if),if)=nl 59 59 print*,'initialisation ecriture de ',var(ivar(if),if) … … 96 96 file=fichier(if) 97 97 c WARNING! on reecrase le fichier .ctl a chaque ecriture 98 open(unit(if),file= file(1:lnblnk(file))//'.ctl'98 open(unit(if),file=trim(file)//'.ctl' 99 99 & ,form='formatted',status='unknown') 100 100 write(unit(if),'(a5,1x,a40)') 101 & 'DSET ','^'// file(1:lnblnk(file))//'.dat'101 & 'DSET ','^'//trim(file)//'.dat' 102 102 103 103 write(unit(if),'(a12)') 'UNDEF 1.0E30'
Note: See TracChangeset
for help on using the changeset viewer.