Changeset 32
- Timestamp:
- 2004-02-17T10:20:15+01:00 (20 years ago)
- Location:
- trunk/NEMO/OPA_SRC
- Files:
-
- 42 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/DIA/diafwb.F90
r3 r32 29 29 30 30 !! * Shared module variables 31 LOGICAL, PUBLIC, PARAMETER :: lk_diafwb = .TRUE. ! fresh water budget flag31 LOGICAL, PUBLIC, PARAMETER :: lk_diafwb = .TRUE. !: fresh water budget flag 32 32 33 33 !! * Module variables 34 34 REAL(wp) :: & 35 a_emp , a_precip, a_rnf, &35 a_emp , a_precip, a_rnf, & 36 36 a_sshb, a_sshn, a_salb, a_saln, & 37 37 a_aminus, a_aplus … … 87 87 ! sshb used because diafwb called after tranxt (i.e. after the swap) 88 88 a_sshb = SUM( e1t(:,:) * e2t(:,:) * sshb(:,:) * tmask_i(:,:) ) 89 IF( lk_mpp ) CALL mpp_sum( a_sshb ) ! sum over the global domain 89 90 90 91 DO jk = 1, jpkm1 … … 96 97 END DO 97 98 END DO 99 IF( lk_mpp ) CALL mpp_sum( a_salb ) ! sum over the global domain 98 100 ENDIF 99 101 100 102 a_emp = SUM( e1t(:,:) * e2t(:,:) * emp (:,:) * tmask_i(:,:) ) 103 IF( lk_mpp ) CALL mpp_sum( a_emp ) ! sum over the global domain 101 104 #if defined key_flx_bulk_monthly || defined key_flx_bulk_daily 102 105 a_precip = SUM( e1t(:,:) * e2t(:,:) * watm (:,:) * tmask_i(:,:) ) 106 IF( lk_mpp ) CALL mpp_sum( a_precip ) ! sum over the global domain 103 107 #endif 104 108 a_rnf = SUM( e1t(:,:) * e2t(:,:) * runoff(:,:) * tmask_i(:,:) ) 109 IF( lk_mpp ) CALL mpp_sum( a_rnf ) ! sum over the global domain 105 110 106 111 IF( aminus /= 0.0 ) a_aminus = a_aminus + ( MIN( aplus, aminus ) / aminus ) 107 112 IF( aplus /= 0.0 ) a_aplus = a_aplus + ( MIN( aplus, aminus ) / aplus ) 108 109 #if defined key_mpp110 ! Mpp: sum over all the global domain111 CALL mpp_sum( a_sshn ) !!!!!! bugggggg a_sshn note befined before!!!!!112 #endif113 113 114 114 IF( kt == nitend ) THEN … … 120 120 ! Mean sea level at nitend 121 121 a_sshn = SUM( e1t(:,:) * e2t(:,:) * sshn(:,:) * tmask_i(:,:) ) 122 IF( lk_mpp ) CALL mpp_sum( a_sshn ) ! sum over the global domain 122 123 zarea = SUM( e1t(:,:) * e2t(:,:) * tmask_i(:,:) ) 124 IF( lk_mpp ) CALL mpp_sum( zarea ) ! sum over the global domain 123 125 124 126 DO jk = 1, jpkm1 … … 131 133 END DO 132 134 END DO 133 134 a_aminus = a_aminus/(nitend-nit000+1) 135 a_aplus = a_aplus/(nitend-nit000+1) 135 IF( lk_mpp ) CALL mpp_sum( a_saln ) ! sum over the global domain 136 137 a_aminus = a_aminus / ( nitend - nit000 + 1 ) 138 a_aplus = a_aplus / ( nitend - nit000 + 1 ) 136 139 137 140 ! Conversion in m3 … … 437 440 #else 438 441 !!---------------------------------------------------------------------- 439 !! Default option : Empty Module440 !!---------------------------------------------------------------------- 441 LOGICAL, PUBLIC, PARAMETER :: lk_diafwb = .FALSE. ! fresh water budget flag442 !! Default option : Dummy Module 443 !!---------------------------------------------------------------------- 444 LOGICAL, PUBLIC, PARAMETER :: lk_diafwb = .FALSE. !: fresh water budget flag 442 445 CONTAINS 443 446 SUBROUTINE dia_fwb( kt ) ! Empty routine 444 WRITE(*,*) kt ! no warning in compilation phase447 WRITE(*,*) 'dia_fwb: : You should not have seen this print! error?', kt 445 448 END SUBROUTINE dia_fwb 446 449 #endif -
trunk/NEMO/OPA_SRC/DIA/diagap.F90
r3 r32 21 21 22 22 IMPLICIT NONE 23 PRIVATE 24 25 !! * Routine accessibility 26 PUBLIC dia_gap ! called in step.F90 module 23 27 24 28 !! * Shared module variables 25 LOGICAL, PUBLIC, PARAMETER :: & 26 lk_diagap = .TRUE. ! model-data diagnostics flag 29 LOGICAL, PUBLIC, PARAMETER :: lk_diagap = .TRUE. !: model-data diagnostics flag 27 30 28 31 !! * Module variables 29 32 INTEGER :: & 30 ! !!numgap, & ! logical unit for differences diagnostic33 !??? numgap, & ! logical unit for differences diagnostic 31 34 ngap , & ! time step frequency 32 35 nprg ! switch for control print … … 125 128 END DO 126 129 END DO 127 #if defined key_mpp 128 CALL mpp_sum( volk, jpk ) 129 #endif 130 IF( lk_mpp ) CALL mpp_sum( volk, jpk ) ! sum over the global domain 131 130 132 volkr(:) = 0.e0 131 133 DO jk = 1, jpk … … 233 235 smodg(jpk) = smodg(jpk) + smodg(jk) * volk(jk) / vol 234 236 END DO 235 236 #if defined key_mpp 237 CALL mpp_sum( tdtag, jpk ) 238 CALL mpp_sum( sdtag, jpk ) 239 CALL mpp_sum( tmodg, jpk ) 240 CALL mpp_sum( smodg, jpk ) 241 #endif 237 IF( lk_mpp) CALL mpp_sum( tdtag, jpk ) ! sum over the global domain 238 IF( lk_mpp) CALL mpp_sum( sdtag, jpk ) 239 IF( lk_mpp) CALL mpp_sum( tmodg, jpk ) 240 IF( lk_mpp) CALL mpp_sum( smodg, jpk ) 242 241 243 242 ! 3. Averaged output in file numgap … … 291 290 #else 292 291 !!---------------------------------------------------------------------- 293 !! Default option : Empty module294 !!---------------------------------------------------------------------- 295 LOGICAL, PUBLIC, PARAMETER :: lk_diagap = .FALSE. ! 'key_diagap'flag292 !! Default option : Dummy module 293 !!---------------------------------------------------------------------- 294 LOGICAL, PUBLIC, PARAMETER :: lk_diagap = .FALSE. !: diagap flag 296 295 CONTAINS 297 SUBROUTINE dia_gap( kt ) ! Empty routine298 WRITE(*,*) kt ! no warning in compilation phase296 SUBROUTINE dia_gap( kt ) ! Dummy routine 297 WRITE(*,*) 'dia_gap: You should not have seen this print! error?', kt 299 298 END SUBROUTINE dia_gap 300 299 #endif -
trunk/NEMO/OPA_SRC/DIA/diahdy.F90
r3 r32 17 17 18 18 IMPLICIT NONE 19 PRIVATE 20 21 !! * Routine accessibility 22 PUBLIC dia_hdy ! called in step.F90 module 19 23 20 24 !! * Shared module variables 21 LOGICAL, PUBLIC, PARAMETER :: lk_diahdy = .TRUE. ! dynamical heigh flag25 LOGICAL, PUBLIC, PARAMETER :: lk_diahdy = .TRUE. !: dynamical heigh flag 22 26 23 27 !! * Module variables … … 60 64 !! * Local declarations 61 65 INTEGER :: ji, jj, jk 62 INTEGER :: ihdsup, ik , isup66 INTEGER :: ihdsup, ik 63 67 64 68 REAL(wp) :: zgdsup, za, zb, zciint, zfacto, zhd 65 69 REAL(wp) :: zp, zh, zt, zs, zxk, zq, zsr, zr1, zr2, zr3, zr4 66 REAL(wp) :: ze, zbw, zc, zd, zaw, zb1, za1, zkw, zk0 , zpval70 REAL(wp) :: ze, zbw, zc, zd, zaw, zb1, za1, zkw, zk0 67 71 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zsva 68 72 REAL(wp), DIMENSION(jpk) :: zwkx, zwky, zwkz … … 257 261 !! Default option : NO dynamic heigh diagnostics 258 262 !!---------------------------------------------------------------------- 259 LOGICAL, PUBLIC, PARAMETER :: lk_diahdy = .FALSE. ! dynamical heigh flag263 LOGICAL, PUBLIC, PARAMETER :: lk_diahdy = .FALSE. !: dynamical heigh flag 260 264 CONTAINS 261 265 SUBROUTINE dia_hdy( kt ) ! Empty routine 262 WRITE(*,*) kt266 WRITE(*,*) 'diahdy: You should not have seen this print! error?', kt 263 267 END SUBROUTINE dia_hdy 264 268 #endif -
trunk/NEMO/OPA_SRC/DIA/diahth.F90
r3 r32 23 23 24 24 !! * Shared module variables 25 LOGICAL , PUBLIC, PARAMETER :: & 26 lk_diahth = .TRUE. ! thermocline-20d depths flag 27 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & 28 hth , & ! depth of the max vertical temperature gradient (m) 29 hd20 , & ! depth of 20 C isotherm (m) 30 hd28 , & ! depth of 28 C isotherm (m) 31 htc3 ! heat content of first 300 m 25 LOGICAL , PUBLIC, PARAMETER :: lk_diahth = .TRUE. !: thermocline-20d depths flag 26 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & !: 27 hth , & !: depth of the max vertical temperature gradient (m) 28 hd20 , & !: depth of 20 C isotherm (m) 29 hd28 , & !: depth of 28 C isotherm (m) 30 htc3 !: heat content of first 300 m 32 31 33 32 !! * Substitutions … … 210 209 !! Default option : Empty module 211 210 !!---------------------------------------------------------------------- 212 LOGICAL , PUBLIC, PARAMETER :: & 213 lk_diahth = .FALSE. ! thermocline-20d depths flag 211 LOGICAL , PUBLIC, PARAMETER :: lk_diahth = .FALSE. !: thermocline-20d depths flag 214 212 CONTAINS 215 213 SUBROUTINE dia_hth( kt ) ! Empty routine 216 WRITE(*,*) kt214 WRITE(*,*) 'dia_hth: You should not have seen this print! error?', kt 217 215 END SUBROUTINE dia_hth 218 216 #endif -
trunk/NEMO/OPA_SRC/DIA/diaspr.F90
r3 r32 30 30 31 31 !! * Shared module variables 32 LOGICAL, PUBLIC, PARAMETER :: lk_diaspr = .TRUE. ! surface pressure diag. flag 33 34 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & 35 gps ! surface pressure) 32 LOGICAL, PUBLIC, PARAMETER :: lk_diaspr = .TRUE. !: surface pressure diag. flag 33 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: gps !: surface pressure 36 34 37 35 !! * Module variables … … 153 151 END DO 154 152 END DO 155 #if defined key_mpp 156 CALL mpp_sum( e1e2t ) 157 #endif 153 IF( lk_mpp ) CALL mpp_sum( e1e2t ) ! sum over the global domain 158 154 159 155 ! build the matrix for the surface pressure … … 241 237 END DO 242 238 END DO 243 #if defined key_mpp 244 CALL mpp_sum( rnorme ) 245 #endif 239 IF( lk_mpp ) CALL mpp_sum( rnorme ) ! sum over the global domain 240 246 241 epsr=eps*eps*rnorme 247 242 ncut=0 … … 264 259 CALL sol_pcg( nindic ) ! diagonal preconditioned conjuguate gradient 265 260 ELSE IF ( nsolv == 2 ) THEN 266 CALL sol_sor( kt,nindic ) ! successive-over-relaxation261 CALL sol_sor( nindic ) ! successive-over-relaxation 267 262 ELSE IF(nsolv == 3) THEN 268 263 CALL sol_fet( nindic ) ! FETI solver … … 321 316 END DO 322 317 END DO 323 #if defined key_mpp 324 CALL mpp_sum( zpsmea ) 325 #endif 326 zpsmea=zpsmea/e1e2t 327 gps(:,:)=(gps(:,:)-zpsmea)*tmask(:,:,1) 318 IF( lk_mpp ) CALL mpp_sum( zpsmea ) ! sum over the global domain 319 320 zpsmea = zpsmea / e1e2t 321 gps(:,:) = ( gps(:,:) - zpsmea ) * tmask(:,:,1) 328 322 329 323 IF(lwp)WRITE(numout,*) ' mean value of ps = ',zpsmea,' is substracted' … … 342 336 ! compute the max and min error 343 337 344 zemax1=0. 345 zemin1=0. 346 zemax2=0. 347 zemin2=0. 348 DO jj=2,jpj-1 349 DO ji=2,jpi-1 350 z1=ABS( spgum(ji,jj)-gpsuu(ji,jj) )*umask(ji,jj,1) 351 z2=ABS( spgvm(ji,jj)-gpsvv(ji,jj) )*vmask(ji,jj,1) 352 z3=MAX ( ABS( spgum(ji,jj) ), ABS( spgvm(ji,jj) ) ) 353 z4=MAX ( ABS( gpsuu(ji,jj) ), ABS( gpsvv(ji,jj) ) ) 354 zemax1=MAX(z1,zemax1) 355 zemax2=MAX(z2,zemax2) 356 zemin1=MAX(z3,zemin1) 357 zemin2=MAX(z4,zemin2) 358 END DO 359 END DO 360 #if defined key_mpp 361 CALL mpp_max( zemax1 ) 362 CALL mpp_max( zemax2 ) 363 CALL mpp_max( zemin1 ) 364 CALL mpp_max( zemin2 ) 365 #endif 338 zemax1 = 0.e0 339 zemin1 = 0.e0 340 zemax2 = 0.e0 341 zemin2 = 0.e0 342 DO jj = 2,jpj-1 343 DO ji = 2,jpi-1 344 z1 = ABS( spgum(ji,jj)-gpsuu(ji,jj) )*umask(ji,jj,1) 345 z2 = ABS( spgvm(ji,jj)-gpsvv(ji,jj) )*vmask(ji,jj,1) 346 z3 = MAX ( ABS( spgum(ji,jj) ), ABS( spgvm(ji,jj) ) ) 347 z4 = MAX ( ABS( gpsuu(ji,jj) ), ABS( gpsvv(ji,jj) ) ) 348 zemax1 = MAX(z1,zemax1) 349 zemax2 = MAX(z2,zemax2) 350 zemin1 = MAX(z3,zemin1) 351 zemin2 = MAX(z4,zemin2) 352 END DO 353 END DO 354 IF( lk_mpp ) CALL mpp_sum( zemax1 ) ! sum over the global domain 355 IF( lk_mpp ) CALL mpp_sum( zemax2 ) ! sum over the global domain 356 IF( lk_mpp ) CALL mpp_sum( zemin1 ) ! sum over the global domain 357 IF( lk_mpp ) CALL mpp_sum( zemin2 ) ! sum over the global domain 358 366 359 IF(lwp) THEN 367 360 WRITE(numout,*) … … 378 371 ! compute the norme and variance of this error 379 372 380 zcompt =0.381 zdif1 =0.382 zdif2 =0.383 zvar1 =0.384 zvar2 =0.373 zcompt = 0.e0 374 zdif1 = 0.e0 375 zdif2 = 0.e0 376 zvar1 = 0.e0 377 zvar2 = 0.e0 385 378 DO jj = 2, jpj-1 386 379 DO ji = 2, jpi-1 … … 394 387 END DO 395 388 END DO 396 397 #if defined key_mpp 398 CALL mpp_sum( zcompt ) 399 CALL mpp_sum( zdif1 ) 400 CALL mpp_sum( zdif2 ) 401 CALL mpp_sum( zvar1 ) 402 CALL mpp_sum( zvar2 ) 403 #endif 389 IF( lk_mpp ) CALL mpp_sum( zcompt ) ! sum over the global domain 390 IF( lk_mpp ) CALL mpp_sum( zdif1 ) ! sum over the global domain 391 IF( lk_mpp ) CALL mpp_sum( zdif2 ) ! sum over the global domain 392 IF( lk_mpp ) CALL mpp_sum( zvar1 ) ! sum over the global domain 393 IF( lk_mpp ) CALL mpp_sum( zvar2 ) ! sum over the global domain 394 404 395 IF(lwp) WRITE(numout,*) ' zcompt = ',zcompt 405 396 zdif1=zdif1/zcompt … … 605 596 !! Default option : NO surface pressure diagnostics 606 597 !!---------------------------------------------------------------------- 607 LOGICAL, PUBLIC, PARAMETER :: lk_diaspr = .FALSE. !surface pressure diag. flag598 LOGICAL, PUBLIC, PARAMETER :: lk_diaspr = .FALSE. !: surface pressure diag. flag 608 599 CONTAINS 609 600 SUBROUTINE dia_spr( kt ) ! Empty routine 610 WRITE(*,*) kt601 WRITE(*,*) 'dia_spr: You should not have seen this print! error?', kt 611 602 END SUBROUTINE dia_spr 612 603 #endif -
trunk/NEMO/OPA_SRC/DIA/diawri_dimg.h90
r3 r32 1 1 !!---------------------------------------------------------------------- 2 !! *** diawri_dimg.h90 ***2 !! *** diawri_dimg.h90 *** 3 3 !!---------------------------------------------------------------------- 4 4 !! OPA 9.0 , LODYC-IPSL (2003) … … 39 39 !! To be tested with a lot of procs !!!! 40 40 !! 41 !! level 1: taux( ji,jj) * umask(ji,jj,1) zonal stress in N.m-242 !! level 2: tauy( ji,jj) * vmask(ji,jj,1) meridional stress in N. m-243 !! level 3: q ( ji,jj) + qsr(ji,jj) total heat flux (W/m2)44 !! level 4: emp ( ji,jj) E-P flux (mm/day)45 !! level 5: tb ( ji,jj,1)-sst model SST -forcing sst (degree C)46 !! level 6: bsfb( ji,jj) streamfunction (m**3/s)47 !! level 7: qsr ( ji,jj) solar flux (W/m2)48 !! level 8: qrp ( ji,jj) relax component of T flux.49 !! level 9: erp ( ji,jj) relax component of S flux50 !! level 10: hmld( ji,jj) turbocline depth51 !! level 11: hmlp( ji,jj) mixed layer depth52 !! level 12: freeze ( ji,jj) Ice cover (1. or 0.)53 !! level 13: sst( ji,jj) the observed SST we relax to.54 !! level 14: qct( ji,jj) equivalent flux due to treshold SST55 !! level 15: fbt( ji,jj) feedback term .56 !! level 16: gps( ji,jj) the surface pressure (m).57 !! level 17: spgu( ji,jj) the surface pressure gradient in X direction.58 !! level 18: spgv( ji,jj) the surface pressure gradient in Y direction.41 !! level 1: taux(:,:) * umask(:,:,1) zonal stress in N.m-2 42 !! level 2: tauy(:,:) * vmask(:,:,1) meridional stress in N. m-2 43 !! level 3: q (:,:) + qsr(:,:) total heat flux (W/m2) 44 !! level 4: emp (:,:) E-P flux (mm/day) 45 !! level 5: tb (:,:,1)-sst model SST -forcing sst (degree C) 46 !! level 6: bsfb(:,:) streamfunction (m**3/s) 47 !! level 7: qsr (:,:) solar flux (W/m2) 48 !! level 8: qrp (:,:) relax component of T flux. 49 !! level 9: erp (:,:) relax component of S flux 50 !! level 10: hmld(:,:) turbocline depth 51 !! level 11: hmlp(:,:) mixed layer depth 52 !! level 12: freeze (:,:) Ice cover (1. or 0.) 53 !! level 13: sst(:,:) the observed SST we relax to. 54 !! level 14: qct(:,:) equivalent flux due to treshold SST 55 !! level 15: fbt(:,:) feedback term . 56 !! level 16: gps(:,:) the surface pressure (m). 57 !! level 17: spgu(:,:) the surface pressure gradient in X direction. 58 !! level 18: spgv(:,:) the surface pressure gradient in Y direction. 59 59 !! 60 60 !! History … … 69 69 !!---------------------------------------------------------------------- 70 70 !! * modules used 71 USE lib_mpp 71 72 USE dtasst, ONLY : sst 72 73 … … 76 77 !! * local declarations 77 78 INTEGER :: inbsel 78 INTEGER :: ji, jj, jk, jl 79 INTEGER :: iwrite 79 !! INTEGER :: iwrite 80 80 INTEGER :: iyear,imon,iday 81 81 … … 101 101 CHARACTER(LEN=80) :: cltext 102 102 CHARACTER(LEN=80) :: clmode 103 CHARACTER(LEN= 4):: clver103 CHARACTER(LEN= 4) :: clver 104 104 ! 105 105 ! Initialization … … 352 352 ENDIF 353 353 354 #ifdef key_mpp 355 CALL mppsync 356 #endif 357 ! 354 IF( lk_mpp ) CALL mppsync ! synchronization in mpp 358 355 359 356 !! * Log message in numout … … 387 384 !! *** ROUTINE dia_wri_state *** 388 385 !! 389 !! ** Purpose : 390 !! Dummy routine for compatibility with IOIPSL output 386 !! ** Purpose : Dummy routine for compatibility with IOIPSL output 391 387 !! 392 388 !! ** History : … … 394 390 !!-------------------------------------------------------------------- 395 391 !! * Arguments 396 CHARACTER (len=*), INTENT(in) :: &397 cdfile_name ! name of the file created398 399 IF (lwp) WRITE(numout ) 'dia_wri_state'400 IF (lwp) WRITE(numout ) '-------------'401 IF (lwp) WRITE(numout ) ' Dummy call to dia_wri_state '392 CHARACTER (len=*), INTENT(in) :: cdfile_name ! name of the file created 393 !!-------------------------------------------------------------------- 394 395 IF (lwp) WRITE(numout,*) 'dia_wri_state: Dummy call', cdfile_name 396 IF (lwp) WRITE(numout,*) '-------------' 397 IF (lwp) WRITE(numout,*) 402 398 403 399 END SUBROUTINE dia_wri_state … … 419 415 !! 03-12 (J.M. Molines ) : Original. Replace ctlopn, writn2d 420 416 !!--------------------------------------------------------------------------- 421 422 !!---------------------------------------------------------------------------423 417 !! * subsitutions 424 418 # include "domzgr_substitute.h90" 425 419 426 420 !! * Arguments 427 INTEGER, INTENT(in) :: klev ! number of level in ptab to write 421 CHARACTER(len=*),INTENT(in) :: & 422 & cd_name, & ! dimg file name 423 & cd_text ! comment to write on record #1 424 INTEGER, INTENT(in) :: klev ! number of level in ptab to write 428 425 REAL(wp),INTENT(in), DIMENSION(:,:,:) :: ptab ! 3D array to write 429 CHARACTER(LEN=*),INTENT(in) :: cd_name, & ! dimg file name 430 & cd_text ! comment to write on record #1 431 CHARACTER(LEN=1),INTENT(in) :: cd_type ! either 'T', 'W' or '2' , depending on the vertical 432 ! ! grid for ptab. 2 stands for 2D file 426 CHARACTER(LEN=1),INTENT(in) :: cd_type ! either 'T', 'W' or '2' , depending on the vertical 427 ! ! grid for ptab. 2 stands for 2D file 433 428 434 429 !! * Local declarations 435 INTEGER :: j i,jj,jk,jn! dummy loop indices430 INTEGER :: jk, jn ! dummy loop indices 436 431 INTEGER :: irecl4, & ! record length in bytes 437 432 & inum, & ! logical unit (set to 14) 438 433 & irec ! current record to be written 439 434 REAL(sp) :: zdx,zdy,zspval,zwest,ztimm 440 REAL(sp) :: zsouth ,zdtj435 REAL(sp) :: zsouth 441 436 REAL(sp),DIMENSION(jpi,jpj) :: z42d ! 2d temporary workspace (sp) 442 437 REAL(sp),DIMENSION(jpk) :: z4dep ! vertical level (sp) 443 438 444 445 439 CHARACTER(LEN=4) :: clver='@!01' 440 !!--------------------------------------------------------------------------- 446 441 447 442 !! * Initialisations … … 471 466 472 467 CASE DEFAULT 473 IF 468 IF(lwp) WRITE(numout,*) ' E R R O R : bad cd_type in dia_wri_dimg ' 474 469 STOP 'dia_wri_dimg' 475 470 … … 480 475 481 476 !! * Write header on record #1 482 IF ( lwp) WRITE(inum,REC=1 ) clver, cd_text, irecl4, &477 IF(lwp) WRITE(inum,REC=1 ) clver, cd_text, irecl4, & 483 478 & jpi,jpj, klev*jpnij, 1 , 1 , & 484 479 & zwest, zsouth, zdx, zdy, zspval, & … … 490 485 !! * Write klev levels 491 486 DO jk = 1, klev 492 irec =1 + klev * (narea -1) + jk487 irec =1 + klev * (narea -1) + jk 493 488 z42d(:,:) = ptab(:,:,jk) 494 489 WRITE(inum,REC=irec) z42d(:,:) … … 498 493 CLOSE(inum) 499 494 500 !! Rather simpler than IOIPSL isn't it ? :)501 502 495 END SUBROUTINE dia_wri_dimg -
trunk/NEMO/OPA_SRC/DOM/closea.F90
r3 r32 26 26 27 27 !! * Share module variables 28 INTEGER, PUBLIC, PARAMETER :: & 29 jpncs = 4 ! number of closed sea30 INTEGER, PUBLIC :: & !! !namclo : closed seas and lakes31 nclosea = 0 ! = 0 no closed sea or lake32 ! ! = 1 closed sea or lake in the domain33 INTEGER, PUBLIC, DIMENSION (jpncs) :: & 34 ncstt, & ! Type of closed sea35 ncsi1, ncsj1, & ! closed sea limits36 ncsi2, ncsj2, & ! 37 ncsnr ! number of point where run-off pours28 INTEGER, PUBLIC, PARAMETER :: & !: 29 jpncs = 4 !: number of closed sea 30 INTEGER, PUBLIC :: & !!: namclo : closed seas and lakes 31 nclosea = 0 !: = 0 no closed sea or lake 32 ! ! = 1 closed sea or lake in the domain 33 INTEGER, PUBLIC, DIMENSION (jpncs) :: & !: 34 ncstt, & !: Type of closed sea 35 ncsi1, ncsj1, & !: closed sea limits 36 ncsi2, ncsj2, & !: 37 ncsnr !: number of point where run-off pours 38 38 INTEGER, PUBLIC, DIMENSION (jpncs,4) :: & 39 ncsir, ncsjr ! Location of run-off39 ncsir, ncsjr !: Location of run-off 40 40 41 41 !! * Module variable … … 216 216 ENDIF 217 217 END DO 218 219 # if defined key_mpp 220 ! Mpp: sum over all the global domain 221 CALL mpp_sum ( surf, jpncs+1 ) 222 # endif 218 IF( lk_mpp ) CALL mpp_sum ( surf, jpncs+1 ) ! mpp: sum over all the global domain 223 219 224 220 IF(lwp) WRITE(numout,*)' Closed sea surfaces' … … 246 242 END DO 247 243 END DO 248 # if defined key_mpp 249 ! Mpp: sum over all the global domain 250 CALL mpp_sum ( zemp , jpncs ) 251 # endif 244 IF( lk_mpp ) CALL mpp_sum ( zemp , jpncs ) ! mpp: sum over all the global domain 252 245 253 246 IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN ! Black Sea case for ORCA_R2 configuration -
trunk/NEMO/OPA_SRC/DOM/dom_oce.F90
r3 r32 11 11 12 12 IMPLICIT NONE 13 PUBLIC 13 PUBLIC ! allows the acces to par_oce when dom_oce is used 14 ! ! exception to coding rules... to be suppressed ??? 14 15 15 16 !!---------------------------------------------------------------------- 16 17 !! space domain parameters 17 18 !! ----------------------- 18 LOGICAL :: &19 lclosea = .FALSE. , & ! closed sea flag20 lzoom = .FALSE. , & ! zoom flag21 lzoom_e = .FALSE. , & ! East zoom type flag22 lzoom_w = .FALSE. , & ! West zoom type flag23 lzoom_s = .FALSE. , & ! South zoom type flag24 lzoom_n = .FALSE. , & ! North zoom type flag25 lzoom_arct = .FALSE. , & ! ORCA arctic zoom flag26 lzoom_anta = .FALSE. ! ORCA antarctic zoom flag19 LOGICAL, PUBLIC :: & !: 20 lclosea = .FALSE. , & !: closed sea flag 21 lzoom = .FALSE. , & !: zoom flag 22 lzoom_e = .FALSE. , & !: East zoom type flag 23 lzoom_w = .FALSE. , & !: West zoom type flag 24 lzoom_s = .FALSE. , & !: South zoom type flag 25 lzoom_n = .FALSE. , & !: North zoom type flag 26 lzoom_arct = .FALSE. , & !: ORCA arctic zoom flag 27 lzoom_anta = .FALSE. !: ORCA antarctic zoom flag 27 28 28 INTEGER :: & !!!namdom : space domain (bathymetry, mesh)29 ntopo = 0 , & != 0/1 ,compute/read the bathymetry file30 ngrid = 0 , & != 0/1, compute/read the horizontal mesh file31 nmsh = 0 != 1 create a mesh-mask file29 INTEGER, PUBLIC :: & !!: namdom : space domain (bathymetry, mesh) 30 ntopo = 0 , & !: = 0/1 ,compute/read the bathymetry file 31 ngrid = 0 , & !: = 0/1, compute/read the horizontal mesh file 32 nmsh = 0 !: = 1 create a mesh-mask file 32 33 33 INTEGER :: &34 INTEGER, PUBLIC :: & !: 34 35 ! domain parameters linked to mpp 35 nperio, & ! type of lateral boundary condition36 nimpp, njmpp, & ! i- & j-indexes for mpp-subdomain left bottom37 nreci, nrecj, & ! overlap region in i and j38 nproc, & ! number for local processor39 narea, & ! number for local area40 nbondi, nbondj, & ! mark of i- and j-direction local boundaries41 npolj, & ! north fold mark (0, 3 or 4)42 nlci, nlcj, & ! i- & j-dimensions of the local subdomain43 nldi, nlei, & ! first and last indoor i- and j-indexes44 nldj, nlej, & ! 45 noea, nowe, & ! index of the local neighboring processors in46 noso, nono, & ! east, west, south and north directions47 npne, npnw, & ! index of north east and north west processor48 npse, npsw, & ! index of south east and south west processor49 nbne, nbnw, & ! logical of north east & north west processor50 nbse, nbsw ! logical of south east & south west processor36 nperio, & !: type of lateral boundary condition 37 nimpp, njmpp, & !: i- & j-indexes for mpp-subdomain left bottom 38 nreci, nrecj, & !: overlap region in i and j 39 nproc, & !: number for local processor 40 narea, & !: number for local area 41 nbondi, nbondj, & !: mark of i- and j-direction local boundaries 42 npolj, & !: north fold mark (0, 3 or 4) 43 nlci, nlcj, & !: i- & j-dimensions of the local subdomain 44 nldi, nlei, & !: first and last indoor i- and j-indexes 45 nldj, nlej, & !: 46 noea, nowe, & !: index of the local neighboring processors in 47 noso, nono, & !: east, west, south and north directions 48 npne, npnw, & !: index of north east and north west processor 49 npse, npsw, & !: index of south east and south west processor 50 nbne, nbnw, & !: logical of north east & north west processor 51 nbse, nbsw !: logical of south east & south west processor 51 52 52 INTEGER, DIMENSION(jpi) :: &53 mig ! local ==> global domain i-indice54 INTEGER, DIMENSION(jpj) :: &55 mjg ! local ==> global domain j-indice56 INTEGER, DIMENSION( jpiglo ) :: &!!bug ==> other solution?57 mi0, mi1 ! global ==> local domain i-indice58 ! ! (mi0=1 and mi1=0 if the global indice is not in the local domain)59 INTEGER, DIMENSION( jpjglo ) :: &60 mj0, mj1 ! global ==> local domain j-indice53 INTEGER, PUBLIC, DIMENSION(jpi) :: & !: 54 mig !: local ==> global domain i-indice 55 INTEGER, PUBLIC, DIMENSION(jpj) :: & !: 56 mjg !: local ==> global domain j-indice 57 INTEGER, PUBLIC, DIMENSION( jpiglo ) :: & !: !!bug ==> other solution? 58 mi0, mi1 !: global ==> local domain i-indice 59 ! ! (mi0=1 and mi1=0 if the global indice is not in the local domain) 60 INTEGER, PUBLIC, DIMENSION( jpjglo ) :: & !: 61 mj0, mj1 !: global ==> local domain j-indice 61 62 ! ! (mi0=1 and mi1=0 if the global indice is not in the local domain) 62 63 63 INTEGER, DIMENSION(jpnij) :: &64 nimppt, njmppt, & ! i-, j-indexes for each processor65 nlcit, nlcjt, & ! dimensions of every subdomain66 nldit, nldjt, & ! first, last indoor index for each i-domain67 nleit, nlejt ! first, last indoor index for each j-domain64 INTEGER, PUBLIC, DIMENSION(jpnij) :: & !: 65 nimppt, njmppt, & !: i-, j-indexes for each processor 66 nlcit, nlcjt, & !: dimensions of every subdomain 67 nldit, nldjt, & !: first, last indoor index for each i-domain 68 nleit, nlejt !: first, last indoor index for each j-domain 68 69 69 70 !!---------------------------------------------------------------------- … … 71 72 !! --------------------------------------------------------------------- 72 73 73 REAL(wp), DIMENSION(jpi,jpj) :: &74 glamt, glamu, & ! longitude of t-, u-, v- and f-points (degre)75 glamv, glamf, & ! 76 gphit, gphiu, & ! latitude of t-, u-, v- and f-points (degre)77 gphiv, gphif, & ! 78 e1t, e2t, & ! horizontal scale factors at t-point (m)79 e1u, e2u, & ! horizontal scale factors at u-point (m)80 e1v, e2v, & ! horizontal scale factors at v-point (m)81 e1f, e2f, & ! horizontal scale factors at f-point (m)82 ff ! coriolis factor (2.*omega*sin(yphi) ) (s-1)74 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & !: 75 glamt, glamu, & !: longitude of t-, u-, v- and f-points (degre) 76 glamv, glamf, & !: 77 gphit, gphiu, & !: latitude of t-, u-, v- and f-points (degre) 78 gphiv, gphif, & !: 79 e1t, e2t, & !: horizontal scale factors at t-point (m) 80 e1u, e2u, & !: horizontal scale factors at u-point (m) 81 e1v, e2v, & !: horizontal scale factors at v-point (m) 82 e1f, e2f, & !: horizontal scale factors at f-point (m) 83 ff !: coriolis factor (2.*omega*sin(yphi) ) (s-1) 83 84 84 85 !!---------------------------------------------------------------------- … … 86 87 !! -------------------------------------- 87 88 88 REAL(wp) :: & !!!* namelist namdom *89 e3zps_min = 5.0, & !miminum thickness for partial steps (meters)90 e3zps_rat = 0.1 !minimum thickness ration for partial steps89 REAL(wp), PUBLIC :: & !!: * namelist namdom * 90 e3zps_min = 5.0, & !: miminum thickness for partial steps (meters) 91 e3zps_rat = 0.1 !: minimum thickness ration for partial steps 91 92 92 93 !! z-coordinate (default option) (also used in the other cases 93 94 !! ----------------------------- as reference z-coordinate) 94 REAL(wp), DIMENSION(jpk) :: &95 gdept, gdepw, & ! reference depth of t- and w-points (m)96 e3t, e3w ! reference vertical scale factors at T- and W-pts (m)95 REAL(wp), PUBLIC, DIMENSION(jpk) :: & !: 96 gdept, gdepw, & !: reference depth of t- and w-points (m) 97 e3t, e3w !: reference vertical scale factors at T- and W-pts (m) 97 98 98 99 #if defined key_partial_steps 99 100 !! Partial steps ('key_partial_steps') 100 101 !! ----------------------------------- 101 LOGICAL, P ARAMETER :: lk_zps = .TRUE. !partial steps flag102 LOGICAL, P ARAMETER :: lk_sco = .FALSE. !s-coordinate flag103 LOGICAL, P ARAMETER :: lk_zco = .FALSE. !z-coordinate flag104 REAL(wp), DIMENSION(jpi,jpj,jpk) :: &105 gdep3w, & ! 106 gdept_ps, gdepw_ps, & ! depth of t- and w-points (m)107 e3t_ps, e3u_ps, e3v_ps, & ! vertical scale factors at t-, u-, w-,108 e3w_ps, e3f_ps, & ! w-, f-, uw- and vw- points (m)109 e3uw_ps, e3vw_ps 102 LOGICAL, PUBLIC, PARAMETER :: lk_zps = .TRUE. !: partial steps flag 103 LOGICAL, PUBLIC, PARAMETER :: lk_sco = .FALSE. !: s-coordinate flag 104 LOGICAL, PUBLIC, PARAMETER :: lk_zco = .FALSE. !: z-coordinate flag 105 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & !: 106 gdep3w, & !: ??? 107 gdept_ps, gdepw_ps, & !: depth of t- and w-points (m) 108 e3t_ps, e3u_ps, e3v_ps, & !: vertical scale factors at t-, u-, w-, 109 e3w_ps, e3f_ps, & !: w- and f- points (m) 110 e3uw_ps, e3vw_ps !: uw- and vw- points (m) 110 111 111 REAL(wp), DIMENSION(jpi,jpj) :: &112 hdept, hdepw, e3tp, e3wp 112 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & !: 113 hdept, hdepw, e3tp, e3wp !: ??? 113 114 114 115 #elif defined key_s_coord 115 116 !! s-coordinate ('key_s_coord') 116 117 !! ---------------------------- 117 LOGICAL, P ARAMETER :: lk_zps = .FALSE. !partial steps flag118 LOGICAL, P ARAMETER :: lk_sco = .TRUE. !s-coordinate flag119 LOGICAL, P ARAMETER :: lk_zco = .FALSE. !z-coordinate flag120 REAL(wp), DIMENSION(jpi,jpj) :: &121 hbatt, hbatu, & ! ocean depth at the vertical of t-, u-, v-122 hbatv, hbatf ! and f-point (m)118 LOGICAL, PUBLIC, PARAMETER :: lk_zps = .FALSE. !: partial steps flag 119 LOGICAL, PUBLIC, PARAMETER :: lk_sco = .TRUE. !: s-coordinate flag 120 LOGICAL, PUBLIC, PARAMETER :: lk_zco = .FALSE. !: z-coordinate flag 121 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & !: 122 hbatt, hbatu, & !: ocean depth at the vertical of t-, u-, v- 123 hbatv, hbatf !: and f-point (m) 123 124 124 REAL(wp), DIMENSION(jpk) :: &125 gsigt, gsigw , & ! model level depth coefficient at t-, w-levels126 gsi3w, & ! model level depth coefficient at w-level125 REAL(wp), PUBLIC, DIMENSION(jpk) :: & !: 126 gsigt, gsigw , & !: model level depth coefficient at t-, w-levels 127 gsi3w, & !: model level depth coefficient at w-level 127 128 ! defined as the sum of e3w scale factors 128 esigt, esigw ! vertical scale factor coef. at t-, w-levels129 esigt, esigw !: vertical scale factor coef. at t-, w-levels 129 130 130 131 #else 131 132 !! z-coordinate (Default option) 132 133 !! ----------------------------- 133 LOGICAL, P ARAMETER :: lk_zps = .FALSE. !partial steps flag134 LOGICAL, P ARAMETER :: lk_sco = .FALSE. !s-coordinate flag135 LOGICAL, P ARAMETER :: lk_zco = .TRUE. !s-coordinate flag134 LOGICAL, PUBLIC, PARAMETER :: lk_zps = .FALSE. !: partial steps flag 135 LOGICAL, PUBLIC, PARAMETER :: lk_sco = .FALSE. !: s-coordinate flag 136 LOGICAL, PUBLIC, PARAMETER :: lk_zco = .TRUE. !: s-coordinate flag 136 137 #endif 137 138 !!---------------------------------------------------------------------- … … 139 140 !! ----------------- 140 141 141 INTEGER , DIMENSION(jpi,jpj) :: &142 mbathy ! number of ocean level (=0, 1, ... , jpk-1)142 INTEGER , PUBLIC, DIMENSION(jpi,jpj) :: & !: 143 mbathy !: number of ocean level (=0, 1, ... , jpk-1) 143 144 144 REAL(wp), DIMENSION(jpi,jpj) :: &145 bathy , & ! ocean depth (meters)146 tmask_i ! interior domain T-point mask145 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & !: 146 bathy , & !: ocean depth (meters) 147 tmask_i !: interior domain T-point mask 147 148 148 REAL(wp), DIMENSION(jpi,jpj,jpk) :: &149 tmask, umask, & ! land/ocean mask at T-, U-, V- and F-points150 vmask, fmask ! 149 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & !: 150 tmask, umask, & !: land/ocean mask at T-, U-, V- and F-points 151 vmask, fmask !: 151 152 152 REAL(wp), DIMENSION(jpi,jpj) :: &153 bmask ! land/ocean mask of barotropic stream function153 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & !: 154 bmask !: land/ocean mask of barotropic stream function 154 155 155 REAL(wp), DIMENSION(jpiglo) :: &156 tpol, fpol ! north fold mask (nperio= 3 or 4)156 REAL(wp), PUBLIC, DIMENSION(jpiglo) :: & !: 157 tpol, fpol !: north fold mask (nperio= 3 or 4) 157 158 158 159 #if defined key_noslip_accurate 159 INTEGER, DIMENSION(4,jpk) :: &160 npcoa ! ???161 INTEGER, DIMENSION(2*(jpi+jpj),4,jpk) :: &162 nicoa, & ! ???163 njcoa ! ???160 INTEGER, PUBLIC, DIMENSION(4,jpk) :: & !: 161 npcoa !: ??? 162 INTEGER, PUBLIC, DIMENSION(2*(jpi+jpj),4,jpk) :: & !: 163 nicoa, & !: ??? 164 njcoa !: ??? 164 165 165 166 #endif … … 168 169 !! time domain 169 170 !!---------------------------------------------------------------------- 170 INTEGER :: &171 nacc = 0 , & != 0/1 use of the acceleration of convergence technique172 neuler !restart euler forward option (0=Euler)171 INTEGER, PUBLIC :: & !!: * Namelist * ??? 172 nacc = 0 , & !: = 0/1 use of the acceleration of convergence technique 173 neuler !: restart euler forward option (0=Euler) 173 174 174 175 175 REAL(wp) :: &176 rdt = 3600._wp , & ! time step for the dynamics (and tracer if nacc=0)177 rdtmin = 3600._wp , & ! minimum time step on tracers178 rdtmax = 3600._wp , & ! maximum time step on tracers179 rdth = 800._wp , & ! depth variation of tracer step180 atfp = 0.1_wp , & ! asselin time filter parameter181 atfp1 ! asselin time filter coeff. (atfp1= 1-2*atfp)176 REAL(wp), PUBLIC :: & !!: * Namelist ??? * 177 rdt = 3600._wp , & !: time step for the dynamics (and tracer if nacc=0) 178 rdtmin = 3600._wp , & !: minimum time step on tracers 179 rdtmax = 3600._wp , & !: maximum time step on tracers 180 rdth = 800._wp , & !: depth variation of tracer step 181 atfp = 0.1_wp , & !: asselin time filter parameter 182 atfp1 !: asselin time filter coeff. (atfp1= 1-2*atfp) 182 183 183 REAL(wp), DIMENSION(jpk) :: &184 rdttra ! vertical profile of tracer time step184 REAL(wp), PUBLIC, DIMENSION(jpk) :: & !: 185 rdttra !: vertical profile of tracer time step 185 186 186 187 !!---------------------------------------------------------------------- … … 188 189 !!---------------------------------------------------------------------- 189 190 190 INTEGER :: & !!!namelist ???191 n_cla ! flag (0/1) for cross land advection to191 INTEGER, PUBLIC :: & !!: namelist ??? 192 n_cla !: flag (0/1) for cross land advection to 192 193 ! ! parameterize exchanges through straits 193 194 -
trunk/NEMO/OPA_SRC/DOM/domain.F90
r3 r32 304 304 ze1max = MAXVAL( e1t(:,:), mask = tmask(:,:,1) == 1.e0 ) 305 305 ze2max = MAXVAL( e2t(:,:), mask = tmask(:,:,1) == 1.e0 ) 306 # if defined key_mpp 307 CALL mpp_min( ze1min )308 CALL mpp_min( ze2min )309 CALL mpp_min( ze1max )310 CALL mpp_min( ze2max )311 # endif 306 307 IF( lk_mpp ) CALL mpp_min( ze1min ) ! min over the global domain 308 IF( lk_mpp ) CALL mpp_min( ze2min ) 309 IF( lk_mpp ) CALL mpp_min( ze1max ) 310 IF( lk_mpp ) CALL mpp_min( ze2max ) 311 312 312 iloc = MINLOC( e1t(:,:), mask = tmask(:,:,1) == 1.e0 ) 313 313 iimi1 = iloc(1) + nimpp - 1 … … 322 322 iima2 = iloc(1) + nimpp - 1 323 323 ijma2 = iloc(2) + njmpp - 1 324 # if defined key_mpp 325 CALL mpp_isl( iimi1 ) 326 CALL mpp_isl( ijmi1 ) 327 CALL mpp_isl( iimi2 ) 328 CALL mpp_isl( ijmi2 ) 329 CALL mpp_isl( iima1 ) 330 CALL mpp_isl( ijma1 ) 331 CALL mpp_isl( iima2 ) 332 CALL mpp_isl( ijma2 ) 333 # endif 324 325 IF( lk_mpp ) THEN 326 CALL mpp_isl( iimi1 ) 327 CALL mpp_isl( ijmi1 ) 328 CALL mpp_isl( iimi2 ) 329 CALL mpp_isl( ijmi2 ) 330 CALL mpp_isl( iima1 ) 331 CALL mpp_isl( ijma1 ) 332 CALL mpp_isl( iima2 ) 333 CALL mpp_isl( ijma2 ) 334 ENDIF 334 335 335 336 IF(lwp) THEN -
trunk/NEMO/OPA_SRC/DOM/dommsk.F90
r3 r32 13 13 USE oce ! ocean dynamics and tracers 14 14 USE dom_oce ! ocean space and time domain 15 USE in_out_manager ! I/O manager16 15 USE obc_oce ! ocean open boundary conditions 17 16 USE in_out_manager ! I/O manager 18 17 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 18 USE lib_mpp 19 19 USE solisl ! ??? 20 USE dynspg_fsc ! 20 21 21 22 IMPLICIT NONE … … 84 85 !! even IF nperio is not zero. 85 86 !! 86 !! In case of open boundaries ( key_xxxobc):87 !! In case of open boundaries (lk_obc=T): 87 88 !! - tmask is set to 1 on the points to be computed bay the open 88 89 !! boundaries routines. … … 120 121 !!---------------------------------------------------------------------- 121 122 !! *Local declarations 122 INTEGER :: ji, jj, jk, ii ! dummy loop indices 123 INTEGER :: iif, iil, ijf, ijl 123 INTEGER :: ji, jj, jk, ii ! dummy loop indices 124 INTEGER :: iif, iil, ijf, ijl 125 INTEGER :: ii0, ii1, ij0, ij1 124 126 INTEGER, DIMENSION(jpi,jpj) :: imsk 125 127 … … 225 227 IF( n_cla == 1 ) THEN 226 228 ! ! vmask = 0. on Gibraltar zonal section 227 vmask(mi0(138):mi1(139), mj0(101):mj1(101) , 19:jpk ) = 0.e0 229 ij0 = 101 ; ij1 = 101 230 ii0 = 138 ; ii1 = 139 ; vmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 19:jpk ) = 0.e0 228 231 ! ! vmask = 0. on Bab el Mandeb zonal section 229 vmask( mi0(161):mi1(163) , mj0(87):mj1(87) , 18:jpk ) = 0.e0 232 ij0 = 87 ; ij1 = 87 233 ii0 = 161 ; ii1 = 163 ; vmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 18:jpk ) = 0.e0 230 234 ENDIF 231 235 … … 242 246 243 247 ! Computation 244 #if defined key_dynspg_fsc 245 bmask(:,:) = tmask(:,:,1) ! elliptic equation is written at t-point246 #else 247 bmask(:,:) = fmask(:,:,1) ! elliptic equation is written at f-point248 #endif 248 IF( lk_dynspg_fsc ) THEN 249 bmask(:,:) = tmask(:,:,1) ! elliptic equation is written at t-point 250 ELSE 251 bmask(:,:) = fmask(:,:,1) ! elliptic equation is written at f-point 252 ENDIF 249 253 250 254 ! Boundary conditions … … 262 266 ! north fold : 263 267 IF( nperio == 3 .OR. nperio == 4 ) THEN 264 #if defined key_dynspg_fsc 265 ! T-pt pivot and T-pt elliptic eq. : bmask set to 0. on row jpj and on half jpjglo-1 row266 DO ji = 1, jpi267 ii = ji + nimpp - 1268 bmask(ji,jpj-1) = bmask(ji,jpj-1) * tpol(ii)269 bmask(ji,jpj ) = 0.e0270 END DO271 #else 272 ! T-pt pivot and F-pt elliptic eq. : bmask set to 0. on rows jpj-1 and jpj273 bmask(:,jpj-1) = 0.e0274 bmask(:,jpj ) = 0.e0275 #endif 268 IF( lk_dynspg_fsc ) THEN 269 ! T-pt pivot and T-pt elliptic eq. : bmask set to 0. on row jpj and on half jpjglo-1 row 270 DO ji = 1, jpi 271 ii = ji + nimpp - 1 272 bmask(ji,jpj-1) = bmask(ji,jpj-1) * tpol(ii) 273 bmask(ji,jpj ) = 0.e0 274 END DO 275 ELSE 276 ! T-pt pivot and F-pt elliptic eq. : bmask set to 0. on rows jpj-1 and jpj 277 bmask(:,jpj-1) = 0.e0 278 bmask(:,jpj ) = 0.e0 279 ENDIF 276 280 ENDIF 277 281 IF( nperio == 5 .OR. nperio == 6 ) THEN 278 #if defined key_dynspg_fsc 279 ! F-pt pivot and T-pt elliptic eq. : bmask set to 0. on row jpj280 bmask(:,jpj) = 0.e0281 #else 282 ! F-pt pivot and F-pt elliptic eq. : bmask set to 0. on row jpj and on half jpjglo-1 row283 DO ji = 1, jpi284 ii = ji + nimpp - 1285 bmask(ji,jpj-1) = bmask(ji,jpj-1) * fpol(ii)286 bmask(ji,jpj ) = 0.e0287 END DO288 #endif 282 IF( lk_dynspg_fsc ) THEN 283 ! F-pt pivot and T-pt elliptic eq. : bmask set to 0. on row jpj 284 bmask(:,jpj) = 0.e0 285 ELSE 286 ! F-pt pivot and F-pt elliptic eq. : bmask set to 0. on row jpj and on half jpjglo-1 row 287 DO ji = 1, jpi 288 ii = ji + nimpp - 1 289 bmask(ji,jpj-1) = bmask(ji,jpj-1) * fpol(ii) 290 bmask(ji,jpj ) = 0.e0 291 END DO 292 ENDIF 289 293 ENDIF 290 294 … … 292 296 ! region for all elliptic solvers 293 297 294 #if defined key_mpp 295 IF( nbondi /= -1 .AND. nbondi /= 2 ) THEN 296 bmask(1:jpreci,:) = 0.e0 297 ENDIF 298 IF( nbondi /= 1 .AND. nbondi /= 2 ) THEN 299 bmask(nlci:jpi,:) = 0.e0 300 ENDIF 301 IF( nbondj /= -1 .AND. nbondj /= 2 ) THEN 302 bmask(:,1:jprecj) = 0.e0 303 ENDIF 304 IF( nbondj /= 1 .AND. nbondj /= 2 ) THEN 305 bmask(:,nlcj:jpj) = 0.e0 306 ENDIF 307 308 ! north fold : bmask must be set to 0. on rows jpj-1 and jpj 309 IF( npolj == 3 .OR. npolj == 4 ) THEN 310 # if defined key_dynspg_fsc 311 DO ji = 1, nlci 312 ii = ji + nimpp - 1 313 bmask(ji,nlcj-1) = bmask(ji,nlcj-1) * tpol(ii) 314 bmask(ji,nlcj ) = 0.e0 315 END DO 316 # else 317 DO ji = 1, nlci 318 bmask(ji,nlcj-1) = 0.e0 319 bmask(ji,nlcj ) = 0.e0 320 END DO 321 # endif 322 ENDIF 323 IF( npolj == 5 .OR. npolj == 6 ) THEN 324 # if defined key_dynspg_fsc 325 DO ji = 1, nlci 326 ii = ji + nimpp - 1 327 bmask(ji,nlcj ) = 0.e0 328 END DO 329 # else 330 DO ji = 1, nlci 331 bmask(ji,nlcj-1) = bmask(ji,nlcj-1) * fpol(ii) 332 bmask(ji,nlcj ) = 0.e0 333 END DO 334 # endif 335 ENDIF 336 #endif 298 IF( lk_mpp ) THEN 299 IF( nbondi /= -1 .AND. nbondi /= 2 ) bmask( 1 :jpreci,:) = 0.e0 300 IF( nbondi /= 1 .AND. nbondi /= 2 ) bmask(nlci:jpi ,:) = 0.e0 301 IF( nbondj /= -1 .AND. nbondj /= 2 ) bmask(:, 1 :jprecj) = 0.e0 302 IF( nbondj /= 1 .AND. nbondj /= 2 ) bmask(:,nlcj:jpj ) = 0.e0 303 304 ! north fold : bmask must be set to 0. on rows jpj-1 and jpj 305 IF( npolj == 3 .OR. npolj == 4 ) THEN 306 IF( lk_dynspg_fsc ) THEN 307 DO ji = 1, nlci 308 ii = ji + nimpp - 1 309 bmask(ji,nlcj-1) = bmask(ji,nlcj-1) * tpol(ii) 310 bmask(ji,nlcj ) = 0.e0 311 END DO 312 ELSE 313 DO ji = 1, nlci 314 bmask(ji,nlcj-1) = 0.e0 315 bmask(ji,nlcj ) = 0.e0 316 END DO 317 ENDIF 318 ENDIF 319 IF( npolj == 5 .OR. npolj == 6 ) THEN 320 IF( lk_dynspg_fsc ) THEN 321 DO ji = 1, nlci 322 ii = ji + nimpp - 1 323 bmask(ji,nlcj ) = 0.e0 324 END DO 325 ELSE 326 DO ji = 1, nlci 327 bmask(ji,nlcj-1) = bmask(ji,nlcj-1) * fpol(ii) 328 bmask(ji,nlcj ) = 0.e0 329 END DO 330 ENDIF 331 ENDIF 332 ENDIF 337 333 338 334 … … 354 350 IF( fmask(ji,jj,jk) == 0. ) THEN 355 351 fmask(ji,jj,jk) = shlat * MIN( 1., MAX( zwf(ji+1,jj), zwf(ji,jj+1), & 356 352 & zwf(ji-1,jj), zwf(ji,jj-1) ) ) 357 353 ENDIF 358 354 END DO … … 386 382 IF( n_cla == 0 ) THEN 387 383 ! ! Gibraltar strait and Gulf of Cadiz 388 fmask( mi0(137):mi1(140) , mj0(101):mj1(102) , 1:jpk ) = 14.7e0 384 ij0 = 101 ; ij1 = 102 385 ii0 = 137 ; ii1 = 140 ; fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 14.7e0 389 386 ! ! Bab el Mandeb strait 390 fmask( mi0(162):mi1(163) , mj0( 87):mj1( 88) , 1:jpk ) = 20.e0 387 ij0 = 87 ; ij1 = 88 388 ii0 = 162 ; ii1 = 163 ; fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 20.0e0 391 389 ! ! Sound strait 392 fmask( mi0(147):mi1(148) , mj0(116):mj1(117) , 1:jpk ) = 10.e0 390 ij0 = 116 ; ij1 = 117 391 ii0 = 147 ; ii1 = 148 ; fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 10.0e0 393 392 ELSE 394 393 ! ! Gibraltar strait and Gulf of Cadiz 395 fmask( mi0(137):mi1(139) , mj0(102):mj1(102) , 1:jpk ) = 0.e0 396 fmask( mi0(137):mi1(139) , mj0(100):mj1(100) , 1:jpk ) = 0.e0 397 fmask( mi0(139):mi1(139) , mj0(101):mj1(101) , 1:jpk ) = 0.e0 394 ij0 = 102 ; ij1 = 102 395 ii0 = 137 ; ii1 = 139 ; fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 0.0e0 396 ij0 = 101 ; ij1 = 101 397 ii0 = 139 ; ii1 = 139 ; fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 0.0e0 398 ij0 = 100 ; ij1 = 100 399 ii0 = 137 ; ii1 = 139 ; fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 0.0e0 398 400 ! ! Sound strait 399 fmask( mi0(147):mi1(148) , mj0(116):mj1(117) , 1:jpk ) = 10.e0 401 ij0 = 116 ; ij1 = 117 402 ii0 = 147 ; ii1 = 148 ; fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 10.0e0 400 403 ENDIF 401 404 ! … … 497 500 IF(lwp)WRITE(numout,*) 'dom_msk_nsa : noslip accurate boundary condition' 498 501 IF(lwp)WRITE(numout,*) '~~~~~~~~~~~ using Schchepetkin and O Brian scheme' 499 # if defined key_mpp 500 IF(lwp)WRITE(numout,cform_err)501 IF(lwp)WRITE(numout,*) ' mpp version is not yet implemented'502 nstop = nstop + 1503 # endif 502 IF( lk_mpp ) THEN 503 IF(lwp)WRITE(numout,cform_err) 504 IF(lwp)WRITE(numout,*) ' mpp version is not yet implemented' 505 nstop = nstop + 1 506 ENDIF 504 507 505 508 ! mask for second order calculation of vorticity … … 532 535 DO ji = 1, jpim1 533 536 zaa = tmask(ji ,jj,jk) + tmask(ji ,jj+1,jk) & 534 537 &+ tmask(ji+1,jj,jk) + tmask(ji+1,jj+1,jk) 535 538 IF( ABS(zaa-3.) <= 0.1 ) fmask(ji,jj,jk) = 1. 536 539 END DO … … 598 601 WRITE(numout,*) 599 602 WRITE(numout,*) ' level jk = ',jk 600 WRITE(numout,*) ' straight coast index arraies are', & 601 ' too small.:' 602 WRITE(numout,*) ' npe, npw, nps, npn = ', & 603 npcoa(1,jk), npcoa(2,jk), & 604 npcoa(3,jk), npcoa(4,jk) 603 WRITE(numout,*) ' straight coast index arraies are too small.:' 604 WRITE(numout,*) ' npe, npw, nps, npn = ', npcoa(1,jk), npcoa(2,jk), & 605 & npcoa(3,jk), npcoa(4,jk) 605 606 WRITE(numout,*) ' 2*(jpi+jpj) = ',itest,'. we stop.' 606 STOP 607 STOP !!bug nstop to be used 607 608 ENDIF 608 609 END DO … … 654 655 DO jl = 1, ierror 655 656 IF(lwp) WRITE(numout,*) 'Level:',icoord(jl,3), & 656 ' Point(',icoord(jl,1),',',icoord(jl,2),')'657 END DO 658 IF(lwp) WRITE(numout,*) 'We stop...' 657 & ' Point(',icoord(jl,1),',',icoord(jl,2),')' 658 END DO 659 IF(lwp) WRITE(numout,*) 'We stop...' !!cr print format to be used 659 660 nstop = nstop + 1 660 661 ENDIF -
trunk/NEMO/OPA_SRC/DYN/dynhpg.F90
r3 r32 31 31 !! 'key_autotasking' : j-k-i loop (j-slab) 32 32 !!---------------------------------------------------------------------- 33 LOGICAL, PUBLIC :: l_dyn_hpg_tsk = .TRUE. ! ???34 LOGICAL, PUBLIC :: l_dyn_hpg = .FALSE. ! ???33 LOGICAL, PUBLIC, PARAMETER :: lk_dynhpg_tsk = .TRUE. !: autotasked hpg flag 34 LOGICAL, PUBLIC, PARAMETER :: lk_dynhpg = .FALSE. !: vector hpg flag 35 35 #else 36 36 !!---------------------------------------------------------------------- 37 37 !! default case : k-j-i loop (vector opt.) 38 38 !!---------------------------------------------------------------------- 39 LOGICAL, PUBLIC :: l_dyn_hpg_tsk = .FALSE. ! ???40 LOGICAL, PUBLIC :: l_dyn_hpg = .TRUE. ! ???39 LOGICAL, PUBLIC, PARAMETER :: lk_dynhpg_tsk = .FALSE. !: autotasked hpg flag 40 LOGICAL, PUBLIC, PARAMETER :: lk_dynhpg = .TRUE. !: vector hpg flag 41 41 #endif 42 42 … … 67 67 !! level. s-coordinates ('key_s_coord'): a corrective term is added 68 68 !! to the horizontal pressure gradient : 69 !! zhpi = g ..... + 1/e1u mi(rhd) di[ gdep3w ]70 !! zhpj = g ..... + 1/e2v mj(rhd) dj[ gdep3w ]69 !! zhpi = grav ..... + 1/e1u mi(rhd) di[ grav dep3w ] 70 !! zhpj = grav ..... + 1/e2v mj(rhd) dj[ grav dep3w ] 71 71 !! add it to the general momentum trend (ua,va). 72 72 !! ua = ua - 1/e1u * zhpi … … 104 104 ! 0. Local constant initialization 105 105 ! -------------------------------- 106 zcoef0 = - g* 0.5106 zcoef0 = - grav * 0.5 107 107 zuap = 0.e0 108 108 zvap = 0.e0 … … 187 187 !! jk is computed by taking the vertical integral of the in-situ 188 188 !! density gradient along the model level from the suface to that 189 !! level: zhpi = g .....190 !! zhpj = g .....189 !! level: zhpi = grav ..... 190 !! zhpj = grav ..... 191 191 !! add it to the general momentum trend (ua,va). 192 192 !! ua = ua - 1/e1u * zhpi … … 223 223 ! 0. Local constant initialization 224 224 ! -------------------------------- 225 zcoef0 = - g* 0.5225 zcoef0 = - grav * 0.5 226 226 zuap = 0.e0 227 227 zvap = 0.e0 … … 342 342 !! jk is computed by taking the vertical integral of the in-situ 343 343 !! density gradient along the model level from the suface to that 344 !! level: zhpi = g .....345 !! zhpj = g .....344 !! level: zhpi = grav ..... 345 !! zhpj = grav ..... 346 346 !! add it to the general momentum trend (ua,va). 347 347 !! ua = ua - 1/e1u * zhpi … … 379 379 ! 0. Local constant initialization 380 380 ! -------------------------------- 381 zcoef0 = - g* 0.5381 zcoef0 = - grav * 0.5 382 382 zuap = 0.e0 383 383 zvap = 0.e0 -
trunk/NEMO/OPA_SRC/DYN/dynhpg_atsk.F90
r3 r32 56 56 !! level. s-coordinate case ('key_s_coord'): a corrective term is 57 57 !! added to the horizontal pressure gradient : 58 !! zhpi = g ..... + 1/e1u mi(rhd) di[ gdep3w ]59 !! zhpj = g ..... + 1/e2v mj(rhd) dj[ gdep3w ]58 !! zhpi = grav ..... + 1/e1u mi(rhd) di[ grav dep3w ] 59 !! zhpj = grav ..... + 1/e2v mj(rhd) dj[ grav dep3w ] 60 60 !! add it to the general momentum trend (ua,va). 61 61 !! ua = ua - 1/e1u * zhpi … … 92 92 ! 0. Local constant initialization 93 93 ! -------------------------------- 94 zcoef0 = - g* 0.594 zcoef0 = - grav * 0.5 95 95 96 96 ! ! =============== … … 174 174 !! jk is computed by taking the vertical integral of the in-situ 175 175 !! density gradient along the model level from the suface to that 176 !! level: zhpi = g .....177 !! zhpj = g .....176 !! level: zhpi = grav ..... 177 !! zhpj = grav ..... 178 178 !! add it to the general momentum trend (ua,va). 179 179 !! ua = ua - 1/e1u * zhpi … … 210 210 ! 0. Local constant initialization 211 211 ! -------------------------------- 212 zcoef0 = - g* 0.5212 zcoef0 = - grav * 0.5 213 213 zuap = 0.e0 214 214 zvap = 0.e0 … … 313 313 !! jk is computed by taking the vertical integral of the in-situ 314 314 !! density gradient along the model level from the suface to that 315 !! level: zhpi = g .....316 !! zhpj = g .....315 !! level: zhpi = grav ..... 316 !! zhpj = grav ..... 317 317 !! add it to the general momentum trend (ua,va). 318 318 !! ua = ua - 1/e1u * zhpi … … 351 351 ! 0. Local constant initialization 352 352 ! -------------------------------- 353 zcoef0 = - g* 0.5353 zcoef0 = - grav * 0.5 354 354 355 355 ! ! =============== -
trunk/NEMO/OPA_SRC/DYN/dynldf_bilapg.F90
r3 r32 465 465 CONTAINS 466 466 SUBROUTINE dyn_ldf_bilapg( kt ) ! Dummy routine 467 WRITE(*,*) kt467 WRITE(*,*) 'dyn_ldf_bilapg: You should not have seen this print! error?', kt 468 468 END SUBROUTINE dyn_ldf_bilapg 469 469 #endif -
trunk/NEMO/OPA_SRC/DYN/dynldf_iso.F90
r3 r32 251 251 CONTAINS 252 252 SUBROUTINE dyn_ldf_iso( kt ) ! Empty routine 253 WRITE(*,*) kt253 WRITE(*,*) 'dyn_ldf_iso: You should not have seen this print! error?', kt 254 254 END SUBROUTINE dyn_ldf_iso 255 255 #endif -
trunk/NEMO/OPA_SRC/DYN/dynnxt.F90
r3 r32 35 35 !! After velocity is compute using a leap-frog scheme environment: 36 36 !! (ua,va) = (ub,vb) + 2 rdt (ua,va) 37 !! Note that if "key_dynspg_fsc" defined, the time stepping38 !! has already been performed in dynspg.F routine37 !! Note that if lk_dynspg_fsc=T, the time stepping has already been 38 !! performed in dynspg module 39 39 !! Time filter applied on now horizontal velocity to avoid the 40 40 !! divergence of two consecutive time-steps and swap of dynamics -
trunk/NEMO/OPA_SRC/DYN/dynvor.F90
r3 r32 27 27 28 28 !! * Shared module variables 29 LOGICAL, PUBLIC :: ln_dynvor_ene = .FALSE. ! energy conserving scheme30 LOGICAL, PUBLIC :: ln_dynvor_ens = .TRUE. ! enstrophy conserving scheme31 LOGICAL, PUBLIC :: ln_dynvor_mix = .FALSE. ! mixed scheme29 LOGICAL, PUBLIC :: ln_dynvor_ene = .FALSE. !: energy conserving scheme 30 LOGICAL, PUBLIC :: ln_dynvor_ens = .TRUE. !: enstrophy conserving scheme 31 LOGICAL, PUBLIC :: ln_dynvor_mix = .FALSE. !: mixed scheme 32 32 33 33 !! * Substitutions -
trunk/NEMO/OPA_SRC/DYN/dynzdf_iso.F90
r3 r32 387 387 CONTAINS 388 388 SUBROUTINE dyn_zdf_iso( kt ) ! Dummy routine 389 WRITE(*,*) kt389 WRITE(*,*) 'dyn_zdf_iso: You should not have seen this print! error?', kt 390 390 END SUBROUTINE dyn_zdf_iso 391 391 #endif -
trunk/NEMO/OPA_SRC/LDF/ldfdyn_c2d.h90
r3 r32 17 17 !! 18 18 !! ** Method : 19 !! **** W A R N I N G ****20 !! ORCA OCEAN VERSION21 !! This method is relevant ONLY for the grid build by the method22 !! given in the 'Reference' section.23 !! **** W A R N I N G ****24 !!25 19 !! 2D eddy viscosity coefficients ( longitude, latitude ) 26 20 !! … … 55 49 56 50 zdx_max = MAXVAL( e1t(:,:) ) 57 #if defined key_mpp 58 CALL mpp_max( zdx_max ) 59 #endif 51 IF( lk_mpp ) CALL mpp_max( zdx_max ) ! max over the global domain 52 60 53 IF(lwp) WRITE(numout,*) ' laplacian operator: ahm proportional to e1' 61 54 IF(lwp) WRITE(numout,*) ' Caution, here we assume your mesh is isotropic ...' … … 96 89 97 90 zdx_max = MAXVAL( e1u(:,:) ) 98 #if defined key_mpp 99 CALL mpp_max( zdx_max ) 100 #endif 91 IF( lk_mpp ) CALL mpp_max( zdx_max ) ! max over the global domain 92 101 93 IF(lwp) WRITE(numout,*) ' bi-laplacian operator: ahm proportional to e1**3 ' 102 94 IF(lwp) WRITE(numout,*) ' Caution, here we assume your mesh is isotropic ...' … … 141 133 142 134 !! * Arguments 143 LOGICAL, INTENT (in) :: ld_print ! If true, output arrays on numout135 LOGICAL, INTENT (in) :: ld_print ! If true, output arrays on numout 144 136 145 137 !! * Local variables 146 INTEGER :: ji, jj ! dummy loop indices 147 INTEGER :: inumcf, iost, iim, ijm 148 INTEGER :: jn 149 INTEGER :: ifreq, il1, il2, ij, ii, inorth, isouth 150 INTEGER :: ipi, ipj, iumout, iwork, icompt, ibtest, ikmax 151 INTEGER :: ijpt0, ijpt1, iipt0, iipt1 152 INTEGER ,DIMENSION(jpidta,jpidta) :: idata 153 INTEGER ,DIMENSION(jpi ,jpj ) :: icof 138 INTEGER :: ji, jj, jn ! dummy loop indices 139 INTEGER :: inum = 11 ! temporary logical unit 140 INTEGER :: iost, iim, ijm 141 INTEGER :: ifreq, il1, il2, ij, ii 142 INTEGER, DIMENSION(jpidta,jpidta) :: idata 143 INTEGER, DIMENSION(jpi ,jpj ) :: icof 154 144 155 145 REAL(wp) :: zahmeq, zcoft, zcoff, zmsk … … 173 163 ! ===================== equatorial strip (20N-20S) defined at t-points 174 164 175 inumcf = 15 176 OPEN( UNIT=inumcf,FILE='ahmcoef',STATUS='OLD', & 177 FORM='FORMATTED', ACCESS='SEQUENTIAL', ERR=111 , & 178 IOSTAT= iost) 165 OPEN( UNIT=inum, FILE='ahmcoef', STATUS='OLD', & 166 & FORM='FORMATTED', ACCESS='SEQUENTIAL', ERR=111 , & 167 & IOSTAT= iost ) 179 168 IF( iost == 0 ) THEN 180 169 IF(lwp) WRITE(numout,*) ' file : ahmcoef open ok' 181 IF(lwp) WRITE(numout,*) ' unit = ', inum cf170 IF(lwp) WRITE(numout,*) ' unit = ', inum 182 171 IF(lwp) WRITE(numout,*) ' status = OLD' 183 172 IF(lwp) WRITE(numout,*) ' form = FORMATTED' … … 195 184 ENDIF 196 185 197 REWIND inum cf198 READ(inum cf,9101) clexp, iim, ijm199 READ(inum cf,'(/)')186 REWIND inum 187 READ(inum,9101) clexp, iim, ijm 188 READ(inum,'(/)') 200 189 ifreq = 40 201 190 il1 = 1 202 191 DO jn = 1, jpidta/ifreq+1 203 READ(inum cf,'(/)')192 READ(inum,'(/)') 204 193 il2 = MIN( jpidta, il1+ifreq-1 ) 205 READ(inum cf,9201) ( ii, ji = il1, il2, 5 )206 READ(inum cf,'(/)')194 READ(inum,9201) ( ii, ji = il1, il2, 5 ) 195 READ(inum,'(/)') 207 196 DO jj = jpjdta, 1, -1 208 READ(inum cf,9202) ij, ( idata(ji,jj), ji = il1, il2 )197 READ(inum,9202) ij, ( idata(ji,jj), ji = il1, il2 ) 209 198 END DO 210 199 il1 = il1 + ifreq -
trunk/NEMO/OPA_SRC/LDF/ldfdyn_c3d.h90
r3 r32 49 49 50 50 zdx_max = MAXVAL( e1t(:,:) ) 51 #if defined key_mpp 52 CALL mpp_max( zdx_max ) 53 #endif 51 IF( lk_mpp ) CALL mpp_max( zdx_max ) ! max over the global domain 52 54 53 IF(lwp) WRITE(numout,*) ' laplacian operator: ahm proportional to e1' 55 54 IF(lwp) WRITE(numout,*) ' Caution, here we assume your mesh is isotropic ...' … … 105 104 106 105 zdx_max = MAXVAL( e1u(:,:) ) 107 #if defined key_mpp 108 CALL mpp_max( zdx_max ) 109 #endif 106 IF( lk_mpp ) CALL mpp_max( zdx_max ) ! max over the global domain 107 110 108 IF(lwp) WRITE(numout,*) ' bi-laplacian operator: ahm proportional to e1**3 ' 111 109 IF(lwp) WRITE(numout,*) ' Caution, here we assume your mesh is isotropic ...' … … 133 131 ELSE ! partial steps or s-ccordinate 134 132 zc = MAXVAL( fsdept(:,:,jpkm1) ) 135 #if defined key_mpp 136 CALL mpp_max( zc ) 137 #endif 133 IF( lk_mpp ) CALL mpp_max( zc ) ! max over the global domain 134 138 135 zc = 1. / ( 1. - EXP( ( zc - zh ) / zh ) ) 139 136 DO jk = 2, jpkm1 … … 188 185 189 186 !! * local variables 190 INTEGER ::inumcf, iost, iim, ijm 191 INTEGER ::ji,jj,jk, jn 192 INTEGER ::ifreq, il1, il2, ij, ii 193 INTEGER ,DIMENSION(jpidta, jpjdta) :: idata 194 INTEGER ,DIMENSION(jpi , jpj ) :: icof 187 INTEGER :: ji, jj, jk, jn ! dummy loop indices 188 INTEGER :: inum = 11 ! temporary logical unit 189 INTEGER :: iost, iim, ijm 190 INTEGER :: ifreq, il1, il2, ij, ii 191 INTEGER, DIMENSION(jpidta, jpjdta) :: idata 192 INTEGER, DIMENSION(jpi , jpj ) :: icof 195 193 196 194 REAL(wp) :: zahmeq, zcoff, zcoft, zmsk 197 REAL(wp) :: zcoef(jpk)195 REAL(wp), DIMENSION(jpk) :: zcoef 198 196 199 197 CHARACTER (len=15) :: clexp … … 211 209 ! ===================== equatorial strip (20N-20S) defined at t-points 212 210 213 inumcf = 15 214 OPEN( UNIT=inumcf,FILE='ahmcoef',STATUS='OLD', & 215 FORM='FORMATTED', ACCESS='SEQUENTIAL', ERR=111 , & 216 IOSTAT= iost) 211 OPEN( UNIT=inum, FILE='ahmcoef', STATUS='OLD', & 212 & FORM='FORMATTED', ACCESS='SEQUENTIAL', ERR=111 , & 213 & IOSTAT= iost) 217 214 IF( iost == 0 ) THEN 218 215 IF(lwp) THEN 219 216 WRITE(numout,*) ' file : ahmcoef open ok' 220 WRITE(numout,*) ' unit = ', inum cf217 WRITE(numout,*) ' unit = ', inum 221 218 WRITE(numout,*) ' status = OLD' 222 219 WRITE(numout,*) ' form = FORMATTED' … … 235 232 ENDIF 236 233 237 REWIND inum cf238 READ(inum cf,9101) clexp, iim, ijm239 READ(inum cf,'(/)')234 REWIND inum 235 READ(inum,9101) clexp, iim, ijm 236 READ(inum,'(/)') 240 237 ifreq = 40 241 238 il1 = 1 242 239 DO jn = 1, jpidta/ifreq+1 243 READ(inum cf,'(/)')240 READ(inum,'(/)') 244 241 il2 = MIN( jpidta, il1+ifreq-1 ) 245 READ(inum cf,9201) ( ii, ji = il1, il2, 5 )246 READ(inum cf,'(/)')242 READ(inum,9201) ( ii, ji = il1, il2, 5 ) 243 READ(inum,'(/)') 247 244 DO jj = jpjdta, 1, -1 248 READ(inum cf,9202) ij, ( idata(ji,jj), ji = il1, il2 )245 READ(inum,9202) ij, ( idata(ji,jj), ji = il1, il2 ) 249 246 END DO 250 247 il1 = il1 + ifreq -
trunk/NEMO/OPA_SRC/LDF/ldfeiv_substitute.h90
r3 r32 1 #if defined key_traldf_eiv 1 #if defined key_traldf_eiv || defined key_esopa 2 2 !!---------------------------------------------------------------------- 3 3 !! *** ldfeiv_substitute.h90 *** -
trunk/NEMO/OPA_SRC/LDF/ldfslp.F90
r3 r32 29 29 30 30 !! * Share module variables 31 LOGICAL , PUBLIC, PARAMETER :: lk_ldfslp = .TRUE. ! slopes flag32 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & 33 uslp, wslpi, & ! i_slope at U- and W-points34 vslp, wslpj ! j-slope at V- and W-points31 LOGICAL , PUBLIC, PARAMETER :: lk_ldfslp = .TRUE. !: slopes flag 32 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & !: 33 uslp, wslpi, & !: i_slope at U- and W-points 34 vslp, wslpj !: j-slope at V- and W-points 35 35 36 36 !! * Module variables … … 95 95 96 96 !! * Local declarations 97 INTEGER :: ji, jj, jk ! dummy loop indices 97 INTEGER :: ji, jj, jk ! dummy loop indices 98 INTEGER :: ii0, ii1, ij0, ij1 ! temporary integer 98 99 #if defined key_partial_steps 99 100 INTEGER :: iku, ikv ! temporary integers … … 120 121 121 122 zeps = 1.e-20 122 zmg = -1.0 / g 123 zm05g = -0.5 / g 123 zmg = -1.0 / grav 124 zm05g = -0.5 / grav 124 125 125 126 zww(:,:,:) = 0.e0 … … 177 178 178 179 ! Local vertical density gradient evaluated from N^2 179 ! zwy = d/dz(prd)= - ( prd ) / g * mk(pn2) -- at t point180 ! zwy = d/dz(prd)= - ( prd ) / grav * mk(pn2) -- at t point 180 181 181 182 DO jj = 1, jpj … … 323 324 324 325 ! Local vertical density gradient evaluated from N^2 325 ! zwy = d/dz(prd)= - mk ( prd ) / g * pn2 -- at w point326 ! zwy = d/dz(prd)= - mk ( prd ) / grav * pn2 -- at w point 326 327 DO jj = 1, jpj 327 328 DO ji = 1, jpi … … 450 451 ! 451 452 ! ! Gibraltar Strait 452 uslp ( mi0(69):mi1(71) , mj0(50):mj1(53) , jk ) = 0.0e0 453 vslp ( mi0(68):mi1(71) , mj0(51):mj1(53) , jk ) = 0.0e0 454 wslpi( mi0(69):mi1(71) , mj0(51):mj1(53) , jk ) = 0.0e0 455 wslpj( mi0(69):mi1(71) , mj0(51):mj1(53) , jk ) = 0.0e0 453 ij0 = 50 ; ij1 = 53 454 ii0 = 69 ; ii1 = 71 ; uslp ( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk ) = 0.e0 455 ij0 = 51 ; ij1 = 53 456 ii0 = 68 ; ii1 = 71 ; vslp ( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk ) = 0.e0 457 ii0 = 69 ; ii1 = 71 ; wslpi( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk ) = 0.e0 458 ii0 = 69 ; ii1 = 71 ; wslpj( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk ) = 0.e0 456 459 457 460 ! ! Mediterrannean Sea 458 uslp ( mi0(71):mi1(90) , mj0(49):mj1(56) , jk ) = 0.0e0 459 vslp ( mi0(70):mi1(90) , mj0(50):mj1(56) , jk ) = 0.0e0 460 wslpi( mi0(71):mi1(90) , mj0(50):mj1(56) , jk ) = 0.0e0 461 wslpj( mi0(71):mi1(90) , mj0(50):mj1(56) , jk ) = 0.0e0 461 ij0 = 49 ; ij1 = 56 462 ii0 = 71 ; ii1 = 90 ; uslp ( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk ) = 0.e0 463 ij0 = 50 ; ij1 = 56 464 ii0 = 70 ; ii1 = 90 ; vslp ( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk ) = 0.e0 465 ii0 = 71 ; ii1 = 90 ; wslpi( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk ) = 0.e0 466 ii0 = 71 ; ii1 = 90 ; wslpj( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk ) = 0.e0 462 467 ENDIF 463 468 ! ! =============== … … 527 532 528 533 zeps = 1.e-20 529 zmg = -1.0 / g 530 zm05g = -0.5 / g 534 zmg = -1.0 / grav 535 zm05g = -0.5 / grav 531 536 532 537 … … 567 572 568 573 ! Local vertical density gradient evaluated from N^2 569 ! zwy = d/dz(prd)= - ( prd ) / g * mk(pn2) -- at t point574 ! zwy = d/dz(prd)= - ( prd ) / grav * mk(pn2) -- at t point 570 575 571 576 !----------------------------------------------------------------------- … … 619 624 620 625 ! Local vertical density gradient evaluated from N^2 621 ! zwy = d/dz(prd)= - ( prd ) / g * mk(pn2) -- at t point626 ! zwy = d/dz(prd)= - ( prd ) / grav * mk(pn2) -- at t point 622 627 zwy ( :, jpj) = 0.0e0 623 628 zwy ( jpi, :) = 0.0e0 … … 673 678 674 679 ! Local vertical density gradient evaluated from N^2 675 ! zwy = d/dz(prd)= - mk ( prd ) / g * pn2 -- at w point680 ! zwy = d/dz(prd)= - mk ( prd ) / grav * pn2 -- at w point 676 681 # if defined key_vectopt_loop && ! defined key_autotasking 677 682 jj = 1 … … 809 814 !! Dummy module : NO Rotation of lateral mixing tensor 810 815 !!------------------------------------------------------------------------ 811 LOGICAL, PUBLIC, PARAMETER :: lk_ldfslp = .FALSE. ! slopes flag816 LOGICAL, PUBLIC, PARAMETER :: lk_ldfslp = .FALSE. !: slopes flag 812 817 CONTAINS 813 818 SUBROUTINE ldf_slp( kt, prd, pn2 ) ! Dummy routine 814 819 INTEGER, INTENT(in) :: kt 815 820 REAL,DIMENSION(:,:,:), INTENT(in) :: prd, pn2 816 WRITE(*,*) kt, prd, pn2821 WRITE(*,*) 'ldf_slp: You should not have seen this print! error?', kt, prd(1,1,1), pn2(1,1,1) 817 822 END SUBROUTINE ldf_slp 818 823 #endif -
trunk/NEMO/OPA_SRC/LDF/ldftra_oce.F90
r3 r32 22 22 !!---------------------------------------------------------------------- 23 23 24 LOGICAL , PUBLIC :: & !! !** lateral mixing namelist (nam_traldf) **25 ln_traldf_lap = .TRUE. , & ! laplacian operator26 ln_traldf_bilap = .FALSE. , & ! bilaplacian operator27 ln_traldf_level = .FALSE. , & ! iso-level direction28 ln_traldf_hor = .FALSE. , & ! horizontal (geopotential) direction29 ln_traldf_iso = .TRUE. ! iso-neutral direction24 LOGICAL , PUBLIC :: & !!: ** lateral mixing namelist (nam_traldf) ** 25 ln_traldf_lap = .TRUE. , & !: laplacian operator 26 ln_traldf_bilap = .FALSE. , & !: bilaplacian operator 27 ln_traldf_level = .FALSE. , & !: iso-level direction 28 ln_traldf_hor = .FALSE. , & !: horizontal (geopotential) direction 29 ln_traldf_iso = .TRUE. !: iso-neutral direction 30 30 31 REAL(wp), PUBLIC :: & !! !** lateral mixing namelist (namldf) **32 aht0 = 2000._wp , & ! lateral eddy diffusivity (m2/s)33 ahtb0 = 0._wp , & ! lateral background eddy diffusivity (m2/s)34 aeiv0 = 2000._wp ! eddy induced velocity coefficient (m2/s)31 REAL(wp), PUBLIC :: & !!: ** lateral mixing namelist (namldf) ** 32 aht0 = 2000._wp , & !: lateral eddy diffusivity (m2/s) 33 ahtb0 = 0._wp , & !: lateral background eddy diffusivity (m2/s) 34 aeiv0 = 2000._wp !: eddy induced velocity coefficient (m2/s) 35 35 36 LOGICAL , PUBLIC :: & ! flag of the lateral diff. scheme used37 l_traldf_lap , & ! iso-level laplacian operator38 l_traldf_bilap , & ! iso-level bilaplacian operator39 l_traldf_bilapg , & ! geopotential bilap. (s-coord)40 l_traldf_iso , & ! iso-neutral laplacian or horizontal lapacian (s-coord)41 l_trazdf_iso , & ! idem for the vertical component42 l_trazdf_iso_vo , & ! idem with vectopt_memory43 l_traldf_iso_zps ! iso-neutral laplacian (partial steps)36 LOGICAL , PUBLIC :: & !: flag of the lateral diff. scheme used 37 l_traldf_lap , & !: iso-level laplacian operator 38 l_traldf_bilap , & !: iso-level bilaplacian operator 39 l_traldf_bilapg , & !: geopotential bilap. (s-coord) 40 l_traldf_iso , & !: iso-neutral laplacian or horizontal lapacian (s-coord) 41 l_trazdf_iso , & !: idem for the vertical component 42 l_trazdf_iso_vo , & !: idem with vectopt_memory 43 l_traldf_iso_zps !: iso-neutral laplacian (partial steps) 44 44 45 45 #if defined key_traldf_c3d 46 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & ! ** 3D coefficients **46 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & !: ** 3D coefficients ** 47 47 #elif defined key_traldf_c2d 48 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & ! ** 2D coefficients **48 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & !: ** 2D coefficients ** 49 49 #elif defined key_traldf_c1d 50 REAL(wp), PUBLIC, DIMENSION(jpk) :: & ! ** 1D coefficients **50 REAL(wp), PUBLIC, DIMENSION(jpk) :: & !: ** 1D coefficients ** 51 51 #else 52 REAL(wp), PUBLIC :: & ! ** 0D coefficients **52 REAL(wp), PUBLIC :: & !: ** 0D coefficients ** 53 53 #endif 54 ahtt, ahtu, ahtv, ahtw ! T-, U-, V-, W-points coefficients54 ahtt, ahtu, ahtv, ahtw !: T-, U-, V-, W-points coefficients 55 55 56 56 … … 59 59 !! 'key_traldf_eiv' eddy induced velocity 60 60 !!---------------------------------------------------------------------- 61 LOGICAL, PUBLIC, PARAMETER :: lk_traldf_eiv = .TRUE. ! eddy induced velocity flag61 LOGICAL, PUBLIC, PARAMETER :: lk_traldf_eiv = .TRUE. !: eddy induced velocity flag 62 62 63 63 # if defined key_traldf_c3d 64 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & ! ** 3D coefficients **64 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & !: ** 3D coefficients ** 65 65 # elif defined key_traldf_c2d 66 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & ! ** 2D coefficients **66 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & !: ** 2D coefficients ** 67 67 # elif defined key_traldf_c1d 68 REAL(wp), PUBLIC, DIMENSION(jpk) :: & ! ** 1D coefficients **68 REAL(wp), PUBLIC, DIMENSION(jpk) :: & !: ** 1D coefficients ** 69 69 # else 70 REAL(wp), PUBLIC :: & ! ** 0D coefficients **70 REAL(wp), PUBLIC :: & !: ** 0D coefficients ** 71 71 # endif 72 aeiu, aeiv, aeiw ! U-, V-, W-points induced velocity coef. (m2/s)72 aeiu, aeiv, aeiw !: U-, V-, W-points induced velocity coef. (m2/s) 73 73 74 74 # if defined key_diaeiv 75 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & 76 u_eiv, & ! The three component of the eddy induced velocity (m/s) 77 v_eiv, & ! saved for diagnostics and/or outputs 78 w_eiv ! 75 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & !: 76 u_eiv, v_eiv, w_eiv !: The three component of the eddy induced velocity (m/s) 79 77 # endif 80 78 … … 83 81 !! Default option : NO eddy induced velocity 84 82 !!---------------------------------------------------------------------- 85 LOGICAL , PUBLIC, PARAMETER :: lk_traldf_eiv = .FALSE. ! eddy induced velocity flag83 LOGICAL , PUBLIC, PARAMETER :: lk_traldf_eiv = .FALSE. !: eddy induced velocity flag 86 84 REAL(wp), PUBLIC :: aeiu, aeiv, aeiw 87 85 #endif -
trunk/NEMO/OPA_SRC/OBC/obc_oce.F90
r3 r32 25 25 !!General variables for open boundaries: 26 26 !!-------------------------------------- 27 INTEGER :: & 28 numrob = 51 , & ! logical units for open boundary input restart files 29 numwob = 52 , & ! logical units for open boundary output restart files 30 ! 31 nbobc , & ! number of open boundaries ( 1=< nbobc =< 4 ) 32 nobc_dta , & ! = 0 use the initial state as obc data 33 ! ! = 1 read obc data in obcxxx.dta files 34 nmoisold , & ! number of the last read month on the OBC 35 nbef, naft ! index of the aftera and before fields on the OBC 36 37 REAL(wp) :: & !!! open boundary namelist (namobc) 38 rdpein = 1. , & ! damping time scale for inflow at East open boundary 39 rdpwin = 1. , & ! " " at West open boundary 40 rdpsin = 1. , & ! " " at South open boundary 41 rdpnin = 1. , & ! " " at North open boundary 42 rdpeob = 15. , & ! damping time scale for the climatology at East open boundary 43 rdpwob = 15. , & ! " " at West open boundary 44 rdpsob = 15. , & ! " " at South open boundary 45 rdpnob = 15. , & ! " " at North open boundary 46 volemp = 1. ! = 0 the total volume will have the variability of the 47 ! surface Flux E-P else (volemp = 1) the volume will be constant 48 ! = 1 the volume will be constant during all the integration. 49 50 LOGICAL :: & 51 lfbceast, lfbcwest, & ! logical flag for a fixed East and West open boundaries 52 lfbcnorth, lfbcsouth ! logical flag for a fixed North and South open boundaries 53 ! These logical flags are set to 'true' if damping time 54 ! scale are set to 0 in the namelist, for both inflow and outflow). 55 56 REAL(wp), DIMENSION(jpi,jpj) :: & 57 obctmsk ! mask array identical to tmask, execpt along OBC where it is set to 0 58 ! it used to calculate the cumulate flux E-P in the obcvol.F90 routine 27 INTEGER :: & !: * namelist ??? * 28 nbobc = 1 , & !: number of open boundaries ( 1=< nbobc =< 4 ) 29 nobc_dta = 0 , & !: = 0 use the initial state as obc data 30 ! ! = 1 read obc data in obcxxx.dta files 31 nmoisold , & !: number of the last read month on the OBC 32 nbef, naft !: index of the aftera and before fields on the OBC 33 34 REAL(wp) :: & !!: open boundary namelist (namobc) 35 rdpein = 1. , & !: damping time scale for inflow at East open boundary 36 rdpwin = 1. , & !: " " at West open boundary 37 rdpsin = 1. , & !: " " at South open boundary 38 rdpnin = 1. , & !: " " at North open boundary 39 rdpeob = 15. , & !: damping time scale for the climatology at East open boundary 40 rdpwob = 15. , & !: " " at West open boundary 41 rdpsob = 15. , & !: " " at South open boundary 42 rdpnob = 15. , & !: " " at North open boundary 43 volemp = 1. !: = 0 the total volume will have the variability of the 44 ! surface Flux E-P else (volemp = 1) the volume will be constant 45 ! = 1 the volume will be constant during all the integration. 46 47 LOGICAL :: & !: 48 lfbceast, lfbcwest, & !: logical flag for a fixed East and West open boundaries 49 lfbcnorth, lfbcsouth !: logical flag for a fixed North and South open boundaries 50 ! ! These logical flags are set to 'true' if damping time 51 ! ! scale are set to 0 in the namelist, for both inflow and outflow). 52 53 REAL(wp), DIMENSION(jpi,jpj) :: & !: 54 obctmsk !: mask array identical to tmask, execpt along OBC where it is set to 0 55 ! ! it used to calculate the cumulate flux E-P in the obcvol.F90 routine 59 56 60 !!---------------- ---------------------------------------------------------------------------57 !!---------------- 61 58 !! Rigid lid case: 62 59 !!---------------- 63 INTEGER :: nbic ! number of isolated coastlines ( 0 <= nbic <= 3 )60 INTEGER :: nbic !: number of isolated coastlines ( 0 <= nbic <= 3 ) 64 61 65 INTEGER, DIMENSION(jpnic,0:4,3) :: & 66 miic, mjic ! position of isolated coastlines points67 68 INTEGER, DIMENSION(0:4,3) :: & 69 mnic ! number of points on isolated coastlines70 71 REAL(wp), DIMENSION(jpi,jpj) :: & 72 gcbob ! right hand side of the barotropic elliptic equation associated73 !with the OBC62 INTEGER, DIMENSION(jpnic,0:4,3) :: & !: 63 miic, mjic !: position of isolated coastlines points 64 65 INTEGER, DIMENSION(0:4,3) :: & !: 66 mnic !: number of points on isolated coastlines 67 68 REAL(wp), DIMENSION(jpi,jpj) :: & !: 69 gcbob !: right hand side of the barotropic elliptic equation associated 70 ! ! with the OBC 74 71 75 REAL(wp), DIMENSION(jpi,jpj,3) :: & 76 gcfobc ! coef. associated with the contribution of isolated coastlines77 !to the right hand side of the barotropic elliptic equation78 79 REAL(wp), DIMENSION(3) :: & 80 gcbic ! time variation of the barotropic stream function along the81 !isolated coastlines82 83 REAL(wp), DIMENSION(1) :: & 84 bsfic0 ! barotropic stream function on isolated coastline72 REAL(wp), DIMENSION(jpi,jpj,3) :: & !: 73 gcfobc !: coef. associated with the contribution of isolated coastlines 74 ! ! to the right hand side of the barotropic elliptic equation 75 76 REAL(wp), DIMENSION(3) :: & !: 77 gcbic !: time variation of the barotropic stream function along the 78 ! ! isolated coastlines 79 80 REAL(wp), DIMENSION(1) :: & !: 81 bsfic0 !: barotropic stream function on isolated coastline 85 82 86 REAL(wp), DIMENSION(3) :: & 87 bsfic ! barotropic stream function on isolated coastline83 REAL(wp), DIMENSION(3) :: & !: 84 bsfic !: barotropic stream function on isolated coastline 88 85 89 !!-------------------- -----------------------------------------------------------------------86 !!-------------------- 90 87 !! East open boundary: 91 88 !!-------------------- 92 INTEGER :: nie0 , nie1 ! do loop index in mpp case for jpieob93 INTEGER :: nie0p1, nie1p1 ! do loop index in mpp case for jpieob+194 INTEGER :: nie0m1, nie1m1 ! do loop index in mpp case for jpieob-195 INTEGER :: nje0 , nje1 ! do loop index in mpp case for jpjed, jpjef96 INTEGER :: nje0p1, nje1m1 ! do loop index in mpp case for jpjedp1,jpjefm197 INTEGER :: nje1m2, nje0m1 ! do loop index in mpp case for jpjefm1-1,jpjed98 99 REAL(wp), DIMENSION(jpj) :: & 100 bsfeob ! now barotropic stream fuction computed at the OBC. The corres-101 102 103 REAL(wp), DIMENSION(jpj,3,3) :: & 104 bebnd ! east boundary barotropic streamfunction over 3 rows105 106 107 REAL(wp), DIMENSION(jpjed:jpjef) :: & 108 bfoe ! now climatology of the east boundary barotropic stream function89 INTEGER :: nie0 , nie1 !: do loop index in mpp case for jpieob 90 INTEGER :: nie0p1, nie1p1 !: do loop index in mpp case for jpieob+1 91 INTEGER :: nie0m1, nie1m1 !: do loop index in mpp case for jpieob-1 92 INTEGER :: nje0 , nje1 !: do loop index in mpp case for jpjed, jpjef 93 INTEGER :: nje0p1, nje1m1 !: do loop index in mpp case for jpjedp1,jpjefm1 94 INTEGER :: nje1m2, nje0m1 !: do loop index in mpp case for jpjefm1-1,jpjed 95 96 REAL(wp), DIMENSION(jpj) :: & !: 97 bsfeob !: now barotropic stream fuction computed at the OBC. The corres- 98 ! ! ponding bsfn will be computed by the forward time step in dynspg. 99 100 REAL(wp), DIMENSION(jpj,3,3) :: & !: 101 bebnd !: east boundary barotropic streamfunction over 3 rows 102 ! ! and 3 time step (now, before, and before before) 103 104 REAL(wp), DIMENSION(jpjed:jpjef) :: & !: 105 bfoe !: now climatology of the east boundary barotropic stream function 109 106 110 REAL(wp), DIMENSION(jpj,jpk) :: & 111 ufoe, vfoe, & ! now climatology of the east boundary velocities112 tfoe, sfoe, & ! now climatology of the east boundary temperature and salinity113 uclie ! baroclinic componant of the zonal velocity after radiation114 115 116 REAL(wp), DIMENSION(jpjglo,jpk,1) :: & 117 uedta, tedta, sedta ! array used for interpolating monthly data on the east boundary118 119 !!------------------------------- ------------------------------------------------------------107 REAL(wp), DIMENSION(jpj,jpk) :: & !: 108 ufoe, vfoe, & !: now climatology of the east boundary velocities 109 tfoe, sfoe, & !: now climatology of the east boundary temperature and salinity 110 uclie !: baroclinic componant of the zonal velocity after radiation 111 ! ! in the obcdyn.F90 routine 112 113 REAL(wp), DIMENSION(jpjglo,jpk,1) :: & !: 114 uedta, tedta, sedta !: array used for interpolating monthly data on the east boundary 115 116 !!------------------------------- 120 117 !! Arrays for radiative East OBC: 121 118 !!------------------------------- 122 !! 123 REAL(wp), DIMENSION(jpj,jpk,3,3) :: & 124 uebnd, vebnd ! baroclinic u & v component of the velocity over 3 rows 119 REAL(wp), DIMENSION(jpj,jpk,3,3) :: & !: 120 uebnd, vebnd !: baroclinic u & v component of the velocity over 3 rows 125 121 ! and 3 time step (now, before, and before before) 126 122 127 REAL(wp), DIMENSION(jpj,jpk,2,2) :: & 128 tebnd, sebnd ! East boundary temperature and salinity over 2 rows123 REAL(wp), DIMENSION(jpj,jpk,2,2) :: & !: 124 tebnd, sebnd !: East boundary temperature and salinity over 2 rows 129 125 ! and 2 time step (now and before) 130 126 131 REAL(wp), DIMENSION(jpj,jpk) :: & 132 u_cxebnd, v_cxebnd ! Zonal component of the phase speed ratio computed with127 REAL(wp), DIMENSION(jpj,jpk) :: & !: 128 u_cxebnd, v_cxebnd !: Zonal component of the phase speed ratio computed with 133 129 ! radiation of u and v velocity (respectively) at the 134 130 ! east open boundary (u_cxebnd = cx rdt ) 135 131 136 REAL(wp), DIMENSION(jpj,jpk) :: & 137 uemsk, vemsk, temsk ! 2D mask for the East OB132 REAL(wp), DIMENSION(jpj,jpk) :: & !: 133 uemsk, vemsk, temsk !: 2D mask for the East OB 138 134 139 135 ! Note that those arrays are optimized for mpp case 140 136 ! (hence the dimension jpj is the size of one processor subdomain) 141 137 142 !!-------------------------------------------------------------------------------------------143 !! West open boundary:144 138 !!-------------------- 145 INTEGER :: niw0 , niw1 ! do loop index in mpp case for jpiwob146 INTEGER :: niw0p1, niw1p1 ! do loop index in mpp case for jpiwob+1147 INTEGER :: n jw0 , njw1 ! do loop index in mpp case for jpjwd, jpjwf148 INTEGER :: n jw0p1, njw1m1 ! do loop index in mpp case for jpjwdp1,jpjwfm1149 INTEGER :: njw 1m2, njw0m1 ! do loop index in mpp case for jpjwfm2,jpjwd150 151 REAL(wp), DIMENSION(jpj) :: &152 bsfwob ! now barotropic stream fuction computed at the OBC. The corres- 153 ! ponding bsfn will be computed by the forward time step in dynspg.154 155 REAL(wp), DIMENSION(jpj,3,3) :: &156 bwbnd ! West boundary barotropic streamfunction over 157 ! 3 rows and 3 time step (now, before, and before before)158 159 REAL(wp), DIMENSION(jpjwd:jpjwf) :: &160 bfow ! now climatology of the west boundary barotropic stream function 161 162 REAL(wp), DIMENSION(jpj,jpk) :: &163 ufow, vfow, & ! now climatology of the west velocities 164 tfow, sfow, & ! now climatology of the west temperature and salinity165 u cliw ! baroclinic componant of the zonal velocity after the radiation166 ! in the obcdyn.F90 routine167 168 REAL(wp), DIMENSION(jpjglo,jpk,1) :: &169 uwdta, twdta, swdta ! array used for interpolating monthly data on the west boundary 170 171 !!-------------------------------------------------------------------------------------------172 !! Arrays for radiative West OBC: 139 !! West open boundary 140 !!-------------------- 141 INTEGER :: niw0 , niw1 !: do loop index in mpp case for jpiwob 142 INTEGER :: niw0p1, niw1p1 !: do loop index in mpp case for jpiwob+1 143 INTEGER :: njw0 , njw1 !: do loop index in mpp case for jpjwd, jpjwf 144 INTEGER :: njw0p1, njw1m1 !: do loop index in mpp case for jpjwdp1,jpjwfm1 145 INTEGER :: njw1m2, njw0m1 !: do loop index in mpp case for jpjwfm2,jpjwd 146 147 REAL(wp), DIMENSION(jpj) :: & !: 148 bsfwob !: now barotropic stream fuction computed at the OBC. The corres- 149 ! ! ponding bsfn will be computed by the forward time step in dynspg. 150 151 REAL(wp), DIMENSION(jpj,3,3) :: & !: 152 bwbnd !: West boundary barotropic streamfunction over 153 ! ! 3 rows and 3 time step (now, before, and before before) 154 155 REAL(wp), DIMENSION(jpjwd:jpjwf) :: & !: 156 bfow !: now climatology of the west boundary barotropic stream function 157 158 REAL(wp), DIMENSION(jpj,jpk) :: & !: 159 ufow, vfow, & !: now climatology of the west velocities 160 tfow, sfow, & !: now climatology of the west temperature and salinity 161 ucliw !: baroclinic componant of the zonal velocity after the radiation 162 ! ! in the obcdyn.F90 routine 163 164 REAL(wp), DIMENSION(jpjglo,jpk,1) :: & !: 165 uwdta, twdta, swdta !: array used for interpolating monthly data on the west boundary 166 173 167 !!------------------------------- 174 !! 175 REAL(wp), DIMENSION(jpj,jpk,3,3) :: & 176 uwbnd, vwbnd ! baroclinic u & v components of the velocity over 3 rows 177 ! and 3 time step (now, before, and before before) 178 179 REAL(wp), DIMENSION(jpj,jpk,2,2) :: & 180 twbnd, swbnd ! west boundary temperature and salinity over 2 rows and 181 ! 2 time step (now and before) 182 183 REAL(wp), DIMENSION(jpj,jpk) :: & 184 u_cxwbnd, v_cxwbnd ! Zonal component of the phase speed ratio computed with 185 ! radiation of zonal and meridional velocity (respectively) 186 ! at the west open boundary (u_cxwbnd = cx rdt ) 187 188 REAL(wp), DIMENSION(jpj,jpk) :: & 189 uwmsk, vwmsk, twmsk ! 2D mask for the West OB 168 !! Arrays for radiative West OBC 169 !!------------------------------- 170 REAL(wp), DIMENSION(jpj,jpk,3,3) :: & !: 171 uwbnd, vwbnd !: baroclinic u & v components of the velocity over 3 rows 172 ! ! and 3 time step (now, before, and before before) 173 174 REAL(wp), DIMENSION(jpj,jpk,2,2) :: & !: 175 twbnd, swbnd !: west boundary temperature and salinity over 2 rows and 176 ! ! 2 time step (now and before) 177 178 REAL(wp), DIMENSION(jpj,jpk) :: & !: 179 u_cxwbnd, v_cxwbnd !: Zonal component of the phase speed ratio computed with 180 ! ! radiation of zonal and meridional velocity (respectively) 181 ! ! at the west open boundary (u_cxwbnd = cx rdt ) 182 183 REAL(wp), DIMENSION(jpj,jpk) :: & !: 184 uwmsk, vwmsk, twmsk !: 2D mask for the West OB 190 185 191 186 ! Note that those arrays are optimized for mpp case 192 187 ! (hence the dimension jpj is the size of one processor subdomain) 193 188 194 !!-------------------------------------------------------------------------------------------195 !! North open boundary:196 189 !!--------------------- 197 INTEGER :: nin0 , nin1 ! do loop index in mpp case for jpind, jpinf 198 INTEGER :: nin0p1, nin1m1 ! do loop index in mpp case for jpindp1, jpinfm1 199 INTEGER :: nin1m2, nin0m1 ! do loop index in mpp case for jpinfm1-1,jpind 200 INTEGER :: njn0 , njn1 ! do loop index in mpp case for jpnob 201 INTEGER :: njn0p1, njn1p1 ! do loop index in mpp case for jpnob+1 202 INTEGER :: njn0m1, njn1m1 ! do loop index in mpp case for jpnob-1 203 204 REAL(wp), DIMENSION(jpi) :: & 205 bsfnob ! now barotropic stream fuction computed at the OBC. The corres- 206 ! ponding bsfn will be computed by the forward time step in dynspg. 207 208 REAL(wp), DIMENSION(jpi,3,3) :: & 209 bnbnd ! north boundary barotropic streamfunction over 210 ! 3 rows and 3 time step (now, before, and before before) 211 212 REAL(wp), DIMENSION(jpind:jpinf) :: & 213 bfon ! now climatology of the north boundary barotropic stream function 214 215 REAL(wp), DIMENSION(jpi,jpk) :: & 216 ufon, vfon, & ! now climatology of the north boundary velocities 217 tfon, sfon, & ! now climatology of the north boundary temperature and salinity 218 vclin ! baroclinic componant of the meridian velocity after the radiation 219 ! in yhe obcdyn.F90 routine 220 221 REAL(wp), DIMENSION(jpiglo,jpk,1) :: & 222 vndta, tndta, sndta ! array used for interpolating monthly data on the north boundary 223 224 !!------------------------------------------------------------------------------------------- 225 !! Arrays for radiative North OBC: 190 !! North open boundary 191 !!--------------------- 192 INTEGER :: nin0 , nin1 !: do loop index in mpp case for jpind, jpinf 193 INTEGER :: nin0p1, nin1m1 !: do loop index in mpp case for jpindp1, jpinfm1 194 INTEGER :: nin1m2, nin0m1 !: do loop index in mpp case for jpinfm1-1,jpind 195 INTEGER :: njn0 , njn1 !: do loop index in mpp case for jpnob 196 INTEGER :: njn0p1, njn1p1 !: do loop index in mpp case for jpnob+1 197 INTEGER :: njn0m1, njn1m1 !: do loop index in mpp case for jpnob-1 198 199 REAL(wp), DIMENSION(jpi) :: & !: 200 bsfnob !: now barotropic stream fuction computed at the OBC. The corres- 201 ! ! ponding bsfn will be computed by the forward time step in dynspg. 202 203 REAL(wp), DIMENSION(jpi,3,3) :: & !: 204 bnbnd !: north boundary barotropic streamfunction over 205 ! ! 3 rows and 3 time step (now, before, and before before) 206 207 REAL(wp), DIMENSION(jpind:jpinf) :: & !: 208 bfon !: now climatology of the north boundary barotropic stream function 209 210 REAL(wp), DIMENSION(jpi,jpk) :: & !: 211 ufon, vfon, & !: now climatology of the north boundary velocities 212 tfon, sfon, & !: now climatology of the north boundary temperature and salinity 213 vclin !: baroclinic componant of the meridian velocity after the radiation 214 ! ! in yhe obcdyn.F90 routine 215 216 REAL(wp), DIMENSION(jpiglo,jpk,1) :: & !: 217 vndta, tndta, sndta !: array used for interpolating monthly data on the north boundary 218 219 !!-------------------------------- 220 !! Arrays for radiative North OBC 226 221 !!-------------------------------- 227 222 !! 228 REAL(wp), DIMENSION(jpi,jpk,3,3) :: & 229 unbnd, vnbnd ! baroclinic u & v components of the velocity over 3230 !rows and 3 time step (now, before, and before before)231 232 REAL(wp), DIMENSION(jpi,jpk,2,2) :: & 233 tnbnd, snbnd ! north boundary temperature and salinity over234 !2 rows and 2 time step (now and before)235 236 REAL(wp), DIMENSION(jpi,jpk) :: & 237 u_cynbnd, v_cynbnd ! Meridional component of the phase speed ratio compu-238 !ted with radiation of zonal and meridional velocity239 !(respectively) at the north OB (u_cynbnd = cx rdt )240 241 REAL(wp), DIMENSION(jpi,jpk) :: & 242 unmsk, vnmsk, tnmsk ! 2D mask for the North OB223 REAL(wp), DIMENSION(jpi,jpk,3,3) :: & !: 224 unbnd, vnbnd !: baroclinic u & v components of the velocity over 3 225 ! ! rows and 3 time step (now, before, and before before) 226 227 REAL(wp), DIMENSION(jpi,jpk,2,2) :: & !: 228 tnbnd, snbnd !: north boundary temperature and salinity over 229 ! ! 2 rows and 2 time step (now and before) 230 231 REAL(wp), DIMENSION(jpi,jpk) :: & !: 232 u_cynbnd, v_cynbnd !: Meridional component of the phase speed ratio compu- 233 ! ! ted with radiation of zonal and meridional velocity 234 ! ! (respectively) at the north OB (u_cynbnd = cx rdt ) 235 236 REAL(wp), DIMENSION(jpi,jpk) :: & !: 237 unmsk, vnmsk, tnmsk !: 2D mask for the North OB 243 238 244 239 ! Note that those arrays are optimized for mpp case 245 240 ! (hence the dimension jpj is the size of one processor subdomain) 246 241 247 !!-------------------------------------------------------------------------------------------248 !! South open boundary:249 242 !!--------------------- 250 INTEGER :: nis0 , nis1 ! do loop index in mpp case for jpisd, jpisf 251 INTEGER :: nis0p1, nis1m1 ! do loop index in mpp case for jpisdp1, jpisfm1 252 INTEGER :: nis1m2, nis0m1 ! do loop index in mpp case for jpisfm1-1,jpisd 253 INTEGER :: njs0 , njs1 ! do loop index in mpp case for jpsob 254 INTEGER :: njs0p1, njs1p1 ! do loop index in mpp case for jpsob+1 255 256 REAL(wp), DIMENSION(jpi) :: & 257 bsfsob ! now barotropic stream fuction computed at the OBC.The corres- 258 ! ponding bsfn will be computed by the forward time step in dynspg. 259 REAL(wp), DIMENSION(jpi,3,3) :: & 260 bsbnd ! south boundary barotropic stream function over 261 ! 3 rows and 3 time step (now, before, and before before) 262 263 REAL(wp), DIMENSION(jpisd:jpisf) :: & 264 bfos ! now climatology of the south boundary barotropic stream function 265 266 REAL(wp), DIMENSION(jpi,jpk) :: & 267 ufos, vfos, & ! now climatology of the south boundary velocities 268 tfos, sfos, & ! now climatology of the south boundary temperature and salinity 269 vclis ! baroclinic componant of the meridian velocity after the radiation 270 ! in the obcdyn.F90 routine 271 272 REAL(wp), DIMENSION(jpiglo,jpk,1) :: & 273 vsdta, tsdta, ssdta ! array used for interpolating monthly data on the south boundary 274 275 !!------------------------------------------------------------------------------------------- 276 !! Arrays for radiative South OBC: 243 !! South open boundary 244 !!--------------------- 245 INTEGER :: nis0 , nis1 !: do loop index in mpp case for jpisd, jpisf 246 INTEGER :: nis0p1, nis1m1 !: do loop index in mpp case for jpisdp1, jpisfm1 247 INTEGER :: nis1m2, nis0m1 !: do loop index in mpp case for jpisfm1-1,jpisd 248 INTEGER :: njs0 , njs1 !: do loop index in mpp case for jpsob 249 INTEGER :: njs0p1, njs1p1 !: do loop index in mpp case for jpsob+1 250 251 REAL(wp), DIMENSION(jpi) :: & !: 252 bsfsob !: now barotropic stream fuction computed at the OBC.The corres- 253 ! ! ponding bsfn will be computed by the forward time step in dynspg. 254 REAL(wp), DIMENSION(jpi,3,3) :: & !: 255 bsbnd !: south boundary barotropic stream function over 256 ! ! 3 rows and 3 time step (now, before, and before before) 257 258 REAL(wp), DIMENSION(jpisd:jpisf) :: & !: 259 bfos !: now climatology of the south boundary barotropic stream function 260 261 REAL(wp), DIMENSION(jpi,jpk) :: & !: 262 ufos, vfos, & !: now climatology of the south boundary velocities 263 tfos, sfos, & !: now climatology of the south boundary temperature and salinity 264 vclis !: baroclinic componant of the meridian velocity after the radiation 265 ! ! in the obcdyn.F90 routine 266 267 REAL(wp), DIMENSION(jpiglo,jpk,1) :: & !: 268 vsdta, tsdta, ssdta !: array used for interpolating monthly data on the south boundary 269 270 !!-------------------------------- 271 !! Arrays for radiative South OBC 277 272 !!-------------------------------- 278 273 !! computed by the forward time step in dynspg. 279 REAL(wp), DIMENSION(jpi,jpk,3,3) :: & 280 usbnd, vsbnd ! baroclinic u & v components of the velocity over 3281 !rows and 3 time step (now, before, and before before)282 283 REAL(wp), DIMENSION(jpi,jpk,2,2) :: & 284 tsbnd, ssbnd ! south boundary temperature and salinity over285 !2 rows and 2 time step (now and before)286 287 REAL(wp), DIMENSION(jpi,jpk) :: & 288 u_cysbnd, v_cysbnd ! Meridional component of the phase speed ratio compu-289 !ted with radiation of zonal and meridional velocity290 !(repsectively) at the south OB (u_cynbnd = cx rdt )291 292 REAL(wp), DIMENSION(jpi,jpk) :: & 293 usmsk, vsmsk, tsmsk ! 2D mask for the South OB274 REAL(wp), DIMENSION(jpi,jpk,3,3) :: & !: 275 usbnd, vsbnd !: baroclinic u & v components of the velocity over 3 276 ! ! rows and 3 time step (now, before, and before before) 277 278 REAL(wp), DIMENSION(jpi,jpk,2,2) :: & !: 279 tsbnd, ssbnd !: south boundary temperature and salinity over 280 ! ! 2 rows and 2 time step (now and before) 281 282 REAL(wp), DIMENSION(jpi,jpk) :: & !: 283 u_cysbnd, v_cysbnd !: Meridional component of the phase speed ratio compu- 284 ! ! ted with radiation of zonal and meridional velocity 285 ! ! (repsectively) at the south OB (u_cynbnd = cx rdt ) 286 287 REAL(wp), DIMENSION(jpi,jpk) :: & !: 288 usmsk, vsmsk, tsmsk !: 2D mask for the South OB 294 289 295 290 ! Note that those arrays are optimized for mpp case … … 301 296 !!---------------------------------------------------------------------- 302 297 #endif 298 303 299 !!====================================================================== 304 300 END MODULE obc_oce -
trunk/NEMO/OPA_SRC/OBC/obc_par.F90
r3 r32 18 18 PUBLIC 19 19 20 LOGICAL, PUBLIC, PARAMETER :: lk_obc = .TRUE. ! Ocean Boundary Condition flag20 LOGICAL, PUBLIC, PARAMETER :: lk_obc = .TRUE. !: Ocean Boundary Condition flag 21 21 22 22 # if defined key_eel_r5 … … 31 31 !!--------------------------------------------------------------------- 32 32 !! * EAST open boundary 33 LOGICAL, PARAMETER :: & 34 lpeastobc = .FALSE. ! to active or not the East open boundary35 INTEGER, PARAMETER :: & 36 jpieob = jpiglo-2, & ! i-localization of the East open boundary (must be ocean U-point)37 jpjed = 2, & ! j-starting indice of the East open boundary (must be land T-point)38 jpjef = jpjglo-1, & ! j-ending indice of the East open boundary (must be land T-point)39 jpjedp1 = jpjed+1, & ! first ocean point " "40 jpjefm1 = jpjef-1 ! last ocean point " "33 LOGICAL, PARAMETER :: & !: 34 lpeastobc = .FALSE. !: to active or not the East open boundary 35 INTEGER, PARAMETER :: & !: 36 jpieob = jpiglo-2, & !: i-localization of the East open boundary (must be ocean U-point) 37 jpjed = 2, & !: j-starting indice of the East open boundary (must be land T-point) 38 jpjef = jpjglo-1, & !: j-ending indice of the East open boundary (must be land T-point) 39 jpjedp1 = jpjed+1, & !: first ocean point " " 40 jpjefm1 = jpjef-1 !: last ocean point " " 41 41 42 42 !! * WEST open boundary 43 LOGICAL, PARAMETER :: & 44 lpwestobc = .FALSE. ! to active or not the West open boundary45 INTEGER, PARAMETER :: & 46 jpiwob = 2, & ! i-localization of the West open boundary (must be ocean U-point)47 jpjwd = 2, & ! j-starting indice of the West open boundary (must be land T-point)48 jpjwf = jpjglo-1, & ! j-ending indice of the West open boundary (must be land T-point)49 jpjwdp1 = jpjwd+1, & ! first ocean point " "50 jpjwfm1 = jpjwf-1 ! last ocean point " "43 LOGICAL, PARAMETER :: & !: 44 lpwestobc = .FALSE. !: to active or not the West open boundary 45 INTEGER, PARAMETER :: & !: 46 jpiwob = 2, & !: i-localization of the West open boundary (must be ocean U-point) 47 jpjwd = 2, & !: j-starting indice of the West open boundary (must be land T-point) 48 jpjwf = jpjglo-1, & !: j-ending indice of the West open boundary (must be land T-point) 49 jpjwdp1 = jpjwd+1, & !: first ocean point " " 50 jpjwfm1 = jpjwf-1 !: last ocean point " " 51 51 52 52 !! * NORTH open boundary 53 LOGICAL, PARAMETER :: &54 lpnorthobc = .FALSE. ! to active or not the North open boundary55 INTEGER, PARAMETER :: & 56 jpjnob = jpjglo-2, & ! j-localization of the North open boundary (must be ocean V-point)57 jpind = 2, & ! i-starting indice of the North open boundary (must be land T-point)58 jpinf = jpiglo-1, & ! i-ending indice of the North open boundary (must be land T-point)59 jpindp1 = jpind+1, & ! first ocean point " "60 jpinfm1 = jpinf-1 ! last ocean point " "53 LOGICAL, PARAMETER :: & !: 54 lpnorthobc = .FALSE. !: to active or not the North open boundary 55 INTEGER, PARAMETER :: & !: 56 jpjnob = jpjglo-2, & !: j-localization of the North open boundary (must be ocean V-point) 57 jpind = 2, & !: i-starting indice of the North open boundary (must be land T-point) 58 jpinf = jpiglo-1, & !: i-ending indice of the North open boundary (must be land T-point) 59 jpindp1 = jpind+1, & !: first ocean point " " 60 jpinfm1 = jpinf-1 !: last ocean point " " 61 61 62 62 !! * SOUTH open boundary 63 LOGICAL, PARAMETER :: & 64 lpsouthobc = .FALSE. ! to active or not the South open boundary65 INTEGER, PARAMETER :: & 66 jpjsob = 2, & ! j-localization of the South open boundary (must be ocean V-point)67 jpisd = 2, & ! i-starting indice of the South open boundary (must be land T-point)68 jpisf = jpiglo-1, & ! i-ending indice of the South open boundary (must be land T-point)69 jpisdp1 = jpisd+1, & ! first ocean point " "70 jpisfm1 = jpisf-1 ! last ocean point " "63 LOGICAL, PARAMETER :: & !: 64 lpsouthobc = .FALSE. !: to active or not the South open boundary 65 INTEGER, PARAMETER :: & !: 66 jpjsob = 2, & !: j-localization of the South open boundary (must be ocean V-point) 67 jpisd = 2, & !: i-starting indice of the South open boundary (must be land T-point) 68 jpisf = jpiglo-1, & !: i-ending indice of the South open boundary (must be land T-point) 69 jpisdp1 = jpisd+1, & !: first ocean point " " 70 jpisfm1 = jpisf-1 !: last ocean point " " 71 71 72 INTEGER, PARAMETER :: & 73 jpnic = 2700 ! maximum number of isolated coastlines points72 INTEGER, PARAMETER :: & !: 73 jpnic = 2700 !: maximum number of isolated coastlines points 74 74 75 75 # endif … … 79 79 !! Default option : NO open boundary condition 80 80 !!---------------------------------------------------------------------- 81 LOGICAL, PUBLIC, PARAMETER :: lk_obc = .FALSE. ! Ocean Boundary Condition flag81 LOGICAL, PUBLIC, PARAMETER :: lk_obc = .FALSE. !: Ocean Boundary Condition flag 82 82 #endif 83 83 -
trunk/NEMO/OPA_SRC/OBC/obcdom.F90
r3 r32 13 13 USE phycst ! physical constants 14 14 USE obc_oce ! ocean open boundary conditions 15 USE in_out_manager ! I/O manager 16 USE lib_mpp ! distributed memory computing library 15 17 16 18 IMPLICIT NONE … … 154 156 ! in case of zoom, icoast must be set to 0 on the domain border 155 157 ! it must be the same for the bathymetry 156 IF (lzoom -w) icoast(jpiglo ,:) = 0157 IF (lzoom -e) icoast(jpiglo +jpizoom -1,:) = 0158 IF (lzoom -s) icoast(:,jpjzoom ) = 0159 IF (lzoom -n) icoast(:,jpjglo+jpjzoom -1 ) = 0158 IF (lzoom_w) icoast(jpiglo ,:) = 0 159 IF (lzoom_e) icoast(jpiglo +jpizoom -1,:) = 0 160 IF (lzoom_s) icoast(:,jpjzoom ) = 0 161 IF (lzoom_n) icoast(:,jpjglo+jpjzoom -1 ) = 0 160 162 161 163 DO jj = 1, jpjglo … … 179 181 END DO 180 182 END DO 181 # if defined key_mpp 182 CALL mpp_sum(icheck) 183 # endif 183 IF( lk_mpp ) CALL mpp_sum(icheck) ! sum over the global domain 184 184 185 IF( icheck /= 0 ) THEN 185 186 IF(lwp) WRITE(numout,cform_err) -
trunk/NEMO/OPA_SRC/OBC/obcdyn.F90
r3 r32 20 20 USE phycst ! physical constants 21 21 USE obc_oce ! ocean open boundary conditions 22 USE lbclnk ! ??? 22 23 USE lib_mpp ! ??? 23 24 USE obccli ! ocean open boundary conditions: climatology … … 125 126 END IF 126 127 127 # if defined key_mpp 128 !!bug ???129 IF( kt >= nit000+3 .AND. ln_rstart ) THEN130 CALL mpp_lnk_3d( ub, 'U', -1. )131 CALL mpp_lnk_3d( vb, 'V', -1. )132 END IF133 CALL mpp_lnk_3d( ua, 'U', -1. )134 CALL mpp_lnk_3d( va, 'V', -1. )135 # endif 128 IF( lk_mpp ) THEN 129 IF( kt >= nit000+3 .AND. ln_rstart ) THEN 130 CALL lbc_lnk( ub, 'U', -1. ) 131 CALL lbc_lnk( vb, 'V', -1. ) 132 END IF 133 CALL lbc_lnk( ua, 'U', -1. ) 134 CALL lbc_lnk( va, 'V', -1. ) 135 ENDIF 136 136 137 END SUBROUTINE obc_dyn 137 138 139 138 140 SUBROUTINE obc_dyn_east ( kt ) 139 141 !!------------------------------------------------------------------------------ 140 !! SUBROUTINE obc_dyn_east141 !! *************************142 !! *** SUBROUTINE obc_dyn_east *** 143 !! 142 144 !! ** Purpose : 143 145 !! Apply the radiation algorithm on east OBC velocities ua, va using the … … 157 159 !! * Local declaration 158 160 REAL(wp) :: z05cx, ztau, zin 159 160 !!------------------------------------------------------------------------------161 !! OPA 8.5, LODYC-IPSL (2002)162 161 !!------------------------------------------------------------------------------ 163 162 … … 484 483 !! * Local declaration 485 484 REAL(wp) :: z05cx, ztau, zin 486 487 !!------------------------------------------------------------------------------488 !! OPA 8.5, LODYC-IPSL (2002)489 485 !!------------------------------------------------------------------------------ 490 486 -
trunk/NEMO/OPA_SRC/OBC/obcrad.F90
r3 r32 71 71 !!---------------------------------------------------------------------- 72 72 73 ! 1. East open boundary 74 ! --------------------- 75 76 IF( lpeastobc .AND. ( .NOT. lfbceast ) ) THEN 77 CALL obc_rad_east( kt ) 78 END IF 79 80 ! 2. West open boundary 81 ! --------------------- 82 83 IF( lpwestobc .AND. ( .NOT. lfbcwest ) ) THEN 84 CALL obc_rad_west( kt ) 85 END IF 86 87 ! 3. North open boundary 88 ! --------------------- 89 90 IF( lpnorthobc .AND. ( .NOT. lfbcnorth ) ) THEN 91 CALL obc_rad_north( kt ) 92 END IF 93 94 ! 4. South open boundary 95 ! --------------------- 96 97 IF( lpsouthobc .AND. ( .NOT. lfbcsouth ) ) THEN 98 CALL obc_rad_south( kt ) 99 END IF 73 IF( lpeastobc .AND. .NOT.lfbceast ) CALL obc_rad_east ( kt ) ! East open boundary 74 75 IF( lpwestobc .AND. .NOT.lfbcwest ) CALL obc_rad_west ( kt ) ! West open boundary 76 77 IF( lpnorthobc .AND. .NOT.lfbcnorth ) CALL obc_rad_north( kt ) ! North open boundary 78 79 IF( lpsouthobc .AND. .NOT.lfbcsouth ) CALL obc_rad_south( kt ) ! South open boundary 100 80 101 81 END SUBROUTINE obc_rad 102 82 83 103 84 SUBROUTINE obc_rad_east ( kt ) 104 85 !!------------------------------------------------------------------------------ 105 !! SUBROUTINE obc_rad_east106 !! *************************86 !! *** SUBROUTINE obc_rad_east *** 87 !! 107 88 !! ** Purpose : 108 89 !! Perform swap of arrays to calculate radiative phase speeds at the open … … 121 102 122 103 !! * Local declarations 123 INTEGER :: ij, ii 124 104 INTEGER :: ij 125 105 REAL(wp) :: z05cx, zdt, z4nor2, z2dx, z2dy 126 106 REAL(wp) :: zucb, zucbm, zucbm2 127 128 !!------------------------------------------------------------------------------129 !! OPA 8.5, LODYC-IPSL (2002)130 107 !!------------------------------------------------------------------------------ 131 108 … … 178 155 END DO 179 156 END DO 180 # ifdef key_mpp 181 CALL mppobc(uebnd,jpjed,jpjef,jpieob,jpk*3*3,2,jpj) 182 # endif 157 IF( lk_mpp ) CALL mppobc(uebnd,jpjed,jpjef,jpieob,jpk*3*3,2,jpj) 158 183 159 ! ... extremeties nie0, nie1 184 160 ij = jpjed +1 - njmpp … … 221 197 END DO 222 198 END DO 223 # ifdef key_mpp 224 CALL mppobc(vebnd,jpjed,jpjef,jpieob+1,jpk*3*3,2,jpj) 225 # endif 199 IF( lk_mpp ) CALL mppobc(vebnd,jpjed,jpjef,jpieob+1,jpk*3*3,2,jpj) 200 226 201 !... extremeties nie0, nie1 227 202 ij = jpjed +1 - njmpp … … 263 238 END DO 264 239 END DO 265 # ifdef key_mpp 266 CALL mppobc(tebnd,jpjed,jpjef,jpieob+1,jpk*2*2,2,jpj) 267 CALL mppobc(sebnd,jpjed,jpjef,jpieob+1,jpk*2*2,2,jpj) 268 # endif 240 IF( lk_mpp ) CALL mppobc(tebnd,jpjed,jpjef,jpieob+1,jpk*2*2,2,jpj) 241 IF( lk_mpp ) CALL mppobc(sebnd,jpjed,jpjef,jpieob+1,jpk*2*2,2,jpj) 242 269 243 ! ... extremeties nie0, nie1 270 244 ij = jpjed +1 - njmpp … … 365 339 END DO 366 340 END DO 367 # if defined key_mpp 368 CALL mppobc(v_cxebnd,jpjed,jpjef,jpieob+1,jpk,2,jpj) 369 # endif 341 IF( lk_mpp ) CALL mppobc(v_cxebnd,jpjed,jpjef,jpieob+1,jpk,2,jpj) 342 370 343 ! ... extremeties nie0, nie1 371 344 ij = jpjed +1 - njmpp … … 386 359 END SUBROUTINE obc_rad_east 387 360 361 388 362 SUBROUTINE obc_rad_west ( kt ) 389 363 !!------------------------------------------------------------------------------ 390 !! SUBROUTINE obc_rad_west391 !! *************************364 !! *** SUBROUTINE obc_rad_west *** 365 !! 392 366 !! ** Purpose : 393 367 !! Perform swap of arrays to calculate radiative phase speeds at the open … … 406 380 407 381 !! * Local declarations 408 INTEGER :: ij, ii 409 382 INTEGER :: ij 410 383 REAL(wp) :: z05cx, zdt, z4nor2, z2dx, z2dy 411 384 REAL(wp) :: zucb, zucbm, zucbm2 412 413 !!------------------------------------------------------------------------------414 !! OPA 8.5, LODYC-IPSL (2002)415 385 !!------------------------------------------------------------------------------ 416 386 … … 465 435 END DO 466 436 END DO 467 # if defined key_mpp 468 CALL mppobc(uwbnd,jpjwd,jpjwf,jpiwob,jpk*3*3,2,jpj) 469 # endif 437 IF( lk_mpp ) CALL mppobc(uwbnd,jpjwd,jpjwf,jpiwob,jpk*3*3,2,jpj) 438 470 439 ! ... extremeties niw0, niw1 471 440 ij = jpjwd +1 - njmpp … … 508 477 END DO 509 478 END DO 510 # if defined key_mpp 511 CALL mppobc(vwbnd,jpjwd,jpjwf,jpiwob,jpk*3*3,2,jpj) 512 # endif 479 IF( lk_mpp ) CALL mppobc(vwbnd,jpjwd,jpjwf,jpiwob,jpk*3*3,2,jpj) 480 513 481 ! ... extremeties niw0, niw1 514 482 ij = jpjwd +1 - njmpp … … 550 518 END DO 551 519 END DO 552 # if defined key_mpp 553 CALL mppobc(twbnd,jpjwd,jpjwf,jpiwob,jpk*2*2,2,jpj) 554 CALL mppobc(swbnd,jpjwd,jpjwf,jpiwob,jpk*2*2,2,jpj) 555 # endif 520 IF( lk_mpp ) CALL mppobc(twbnd,jpjwd,jpjwf,jpiwob,jpk*2*2,2,jpj) 521 IF( lk_mpp ) CALL mppobc(swbnd,jpjwd,jpjwf,jpiwob,jpk*2*2,2,jpj) 522 556 523 ! ... extremeties niw0, niw1 557 524 ij = jpjwd +1 - njmpp … … 655 622 END DO 656 623 END DO 657 # if defined key_mpp 658 CALL mppobc(v_cxwbnd,jpjwd,jpjwf,jpiwob,jpk,2,jpj) 659 # endif 624 IF( lk_mpp ) CALL mppobc(v_cxwbnd,jpjwd,jpjwf,jpiwob,jpk,2,jpj) 625 660 626 ! ... extremeties niw0, niw1 661 627 ij = jpjwd +1 - njmpp … … 676 642 END SUBROUTINE obc_rad_west 677 643 644 678 645 SUBROUTINE obc_rad_north ( kt ) 679 646 !!------------------------------------------------------------------------------ 680 !! SUBROUTINE obc_rad_north681 !! *************************647 !! *** SUBROUTINE obc_rad_north *** 648 !! 682 649 !! ** Purpose : 683 650 !! Perform swap of arrays to calculate radiative phase speeds at the open … … 696 663 697 664 !! * Local declarations 698 INTEGER :: ij, ii 699 665 INTEGER :: ii 700 666 REAL(wp) :: z05cx, zdt, z4nor2, z2dx, z2dy 701 667 REAL(wp) :: zvcb, zvcbm, zvcbm2 702 703 !!------------------------------------------------------------------------------704 !! OPA 8.5, LODYC-IPSL (2002)705 668 !!------------------------------------------------------------------------------ 706 669 … … 736 699 END DO 737 700 END DO 738 # if defined key_mpp 739 CALL mppobc(unbnd,jpind,jpinf,jpjnob+1,jpk*3*3,1,jpi) 740 # endif 701 IF( lk_mpp ) CALL mppobc(unbnd,jpind,jpinf,jpjnob+1,jpk*3*3,1,jpi) 702 741 703 ! ... extremeties njn0,njn1 742 704 ii = jpind + 1 - nimpp … … 798 760 END DO 799 761 END DO 800 # if defined key_mpp 801 CALL mppobc(vnbnd,jpind,jpinf,jpjnob,jpk*3*3,1,jpi) 802 # endif 762 IF( lk_mpp ) CALL mppobc(vnbnd,jpind,jpinf,jpjnob,jpk*3*3,1,jpi) 763 803 764 ! ... extremeties njn0,njn1 804 765 ii = jpind + 1 - nimpp … … 840 801 END DO 841 802 END DO 842 # if defined key_mpp 843 CALL mppobc(tnbnd,jpind,jpinf,jpjnob+1,jpk*2*2,1,jpi) 844 CALL mppobc(snbnd,jpind,jpinf,jpjnob+1,jpk*2*2,1,jpi) 845 # endif 803 IF( lk_mpp ) CALL mppobc(tnbnd,jpind,jpinf,jpjnob+1,jpk*2*2,1,jpi) 804 IF( lk_mpp ) CALL mppobc(snbnd,jpind,jpinf,jpjnob+1,jpk*2*2,1,jpi) 805 846 806 ! ... extremeties njn0,njn1 847 807 ii = jpind + 1 - nimpp … … 908 868 END DO 909 869 END DO 910 # if defined key_mpp 911 CALL mppobc(u_cynbnd,jpind,jpinf,jpjnob+1,jpk,1,jpi) 912 # endif 870 IF( lk_mpp ) CALL mppobc(u_cynbnd,jpind,jpinf,jpjnob+1,jpk,1,jpi) 871 913 872 ! ... extremeties njn0,njn1 914 873 ii = jpind + 1 - nimpp … … 973 932 END SUBROUTINE obc_rad_north 974 933 934 975 935 SUBROUTINE obc_rad_south ( kt ) 976 936 !!------------------------------------------------------------------------------ 977 !! SUBROUTINE obc_rad_south978 !! *************************937 !! *** SUBROUTINE obc_rad_south *** 938 !! 979 939 !! ** Purpose : 980 940 !! Perform swap of arrays to calculate radiative phase speeds at the open … … 993 953 994 954 !! * Local declarations 995 INTEGER :: ij, ii 996 955 INTEGER :: ii 997 956 REAL(wp) :: z05cx, zdt, z4nor2, z2dx, z2dy 998 957 REAL(wp) :: zvcb, zvcbm, zvcbm2 999 1000 !!------------------------------------------------------------------------------1001 !! OPA 8.5, LODYC-IPSL (2002)1002 958 !!------------------------------------------------------------------------------ 1003 959 … … 1033 989 END DO 1034 990 END DO 1035 # if defined key_mpp 1036 CALL mppobc(usbnd,jpisd,jpisf,jpjsob,jpk*3*3,1,jpi) 1037 # endif 991 IF( lk_mpp ) CALL mppobc(usbnd,jpisd,jpisf,jpjsob,jpk*3*3,1,jpi) 992 1038 993 ! ... extremeties njs0,njs1 1039 994 ii = jpisd + 1 - nimpp … … 1093 1048 END DO 1094 1049 END DO 1095 # if defined key_mpp 1096 CALL mppobc(vsbnd,jpisd,jpisf,jpjsob,jpk*3*3,1,jpi) 1097 # endif 1050 IF( lk_mpp ) CALL mppobc(vsbnd,jpisd,jpisf,jpjsob,jpk*3*3,1,jpi) 1051 1098 1052 ! ... extremeties njs0,njs1 1099 1053 ii = jpisd + 1 - nimpp … … 1135 1089 END DO 1136 1090 END DO 1137 # if defined key_mpp 1138 CALL mppobc(tsbnd,jpisd,jpisf,jpjsob,jpk*2*2,1,jpi) 1139 CALL mppobc(ssbnd,jpisd,jpisf,jpjsob,jpk*2*2,1,jpi) 1140 # endif 1091 IF( lk_mpp ) CALL mppobc(tsbnd,jpisd,jpisf,jpjsob,jpk*2*2,1,jpi) 1092 IF( lk_mpp ) CALL mppobc(ssbnd,jpisd,jpisf,jpjsob,jpk*2*2,1,jpi) 1093 1141 1094 ! ... extremeties njs0,njs1 1142 1095 ii = jpisd + 1 - nimpp … … 1203 1156 END DO 1204 1157 END DO 1205 # if defined key_mpp 1206 CALL mppobc(u_cysbnd,jpisd,jpisf,jpjsob,jpk,1,jpi) 1207 # endif 1158 IF( lk_mpp ) CALL mppobc(u_cysbnd,jpisd,jpisf,jpjsob,jpk,1,jpi) 1159 1208 1160 ! ... extremeties njs0,njs1 1209 1161 ii = jpisd + 1 - nimpp … … 1263 1215 END DO 1264 1216 1265 END 1217 ENDIF 1266 1218 1267 1219 END SUBROUTINE obc_rad_south 1220 1268 1221 #else 1269 1222 !!================================================================================= … … 1274 1227 SUBROUTINE obc_rad( kt ) ! No open boundaries ==> empty routine 1275 1228 INTEGER, INTENT(in) :: kt 1276 WRITE(*,*) kt1229 WRITE(*,*) 'obc_rad: You should not have seen this print! error?', kt 1277 1230 END SUBROUTINE obc_rad 1278 1231 #endif -
trunk/NEMO/OPA_SRC/OBC/obcrst.F90
r3 r32 25 25 26 26 !!--------------------------------------------------------------------------------- 27 !! OPA 9.0 , LODYC-IPSL (2003) 28 !!--------------------------------------------------------------------------------- 27 29 28 30 CONTAINS … … 30 32 SUBROUTINE obc_rst_wri ( kt ) 31 33 !!-------------------------------------------------------------------------------- 32 !! SUBROUTINE obc_rst_wri 33 !! ************************ 34 !! ** Purpose : 35 !! Write restart fields in numwob for open boundaries 34 !! *** SUBROUTINE obc_rst_wri *** 35 !! 36 !! ** Purpose : Write open boundary restart fields in restart.obc.output file 36 37 !! 37 !! ** Method : 38 !! numwob file: Direct access non formatted file. 38 !! ** Method : restart.obc.output file: Direct access non formatted file. 39 39 !! Each nstock time step , save fields which are necessary for restart. 40 40 !! - This routine is called if at least the key_obc is defined. It is called … … 58 58 !! 8.5 ! 02-10 (C. Talandier, A-M. Treguier) F90 59 59 !! ! 03-06 (J.M. Molines) Bug fix for adjacent processors 60 !! 9.0 ! 04-02 (G. Madec) suppression of numwob, use inum 60 61 !!----------------------------------------------------------------------------------- 61 62 !! * Arguments … … 64 65 !! * Local declarations 65 66 INTEGER :: ji, jj, jk, ios 67 INTEGER :: inum = 11 ! temporary logical unit 66 68 INTEGER :: ibloc, nreclo, jrec, jt, jb 67 69 INTEGER :: jfoe, jfow, ifon, ifos 68 70 INTEGER :: ino0, it0 69 71 !!----------------------------------------------------------------------------- 70 !! OPA 8.5, LODYC-IPSL (2002) 71 !!----------------------------------------------------------------------------- 72 73 ! 1. Output of restart fields (numwob) 72 73 ! 1. Output of restart fields (inum) 74 74 ! ------------------------------------ 75 75 … … 82 82 WRITE(numout,*) 'obcrst: OBC output for restart with obc_rst_wri routine' 83 83 WRITE(numout,*) '~~~~~~' 84 WRITE(numout,*) ' output done in numwob = ', numwob,' at it= ',kt, & 85 ' date= ',ndastp 84 WRITE(numout,*) ' output done in restart.obc.output file at it= ', kt, ' date= ', ndastp 86 85 END IF 87 86 … … 95 94 ! 1.1 Open file 96 95 ! ------------- 97 OPEN( UNIT = numwob,&96 OPEN( UNIT = inum, & 98 97 IOSTAT = ios, & 99 98 FILE = 'restart.obc.output', & … … 110 109 ! 1.2 Write header 111 110 ! ---------------- 112 WRITE ( numwob,REC=1) ino0,it0,nbobc,jpieob,jpiwob,jpjnob,jpjsob, &111 WRITE (inum,REC=1) ino0,it0,nbobc,jpieob,jpiwob,jpjnob,jpjsob, & 113 112 jpjed,jpjef,jpjwd,jpjwf,jpind,jpinf,jpisd,jpisf 114 113 … … 128 127 jfoe = jpjed - njmpp + 1 129 128 PRINT *,'Narea =',narea,' write jrec =2 east' 130 WRITE( numwob,REC=jrec) &129 WRITE(inum,REC=jrec) & 131 130 # if ! defined key_dynspg_fsc 132 131 (( bebnd(jfoe, jb,jt), jb=1,3),jt=1,3), & … … 143 142 jfoe = jj 144 143 jrec = 2 + jj + njmpp -1 -jpjed 145 WRITE ( numwob,REC=jrec) &144 WRITE (inum,REC=jrec) & 146 145 # if ! defined key_dynspg_fsc 147 146 (( bebnd(jfoe, jb,jt), jb=1,3),jt=1,3), & … … 173 172 jfow = jpjwd -njmpp + 1 174 173 PRINT *,'Narea =',narea,' write jrec =',jrec,' west' 175 WRITE ( numwob,REC=jrec) &174 WRITE (inum,REC=jrec) & 176 175 # if ! defined key_dynspg_fsc 177 176 (( bwbnd(jfow, jb,jt), jb=1,3),jt=1,3), & … … 188 187 jfow = jj 189 188 jrec = 3 + jpjef -jpjed + jj + njmpp -1 -jpjwd 190 WRITE ( numwob,REC=jrec) &189 WRITE (inum,REC=jrec) & 191 190 # if ! defined key_dynspg_fsc 192 191 (( bwbnd(jfow, jb,jt), jb=1,3),jt=1,3), & … … 217 216 ! ifon = jpind 218 217 ifon = jpind -nimpp +1 219 WRITE ( numwob,REC=jrec) &218 WRITE (inum,REC=jrec) & 220 219 # if ! defined key_dynspg_fsc 221 220 (( bnbnd(ifon, jb,jt), jb=1,3),jt=1,3), & … … 232 231 ifon = ji 233 232 jrec = 4 + jpjef -jpjed + jpjwf -jpjwd +ji + nimpp -1 -jpind 234 WRITE ( numwob,REC=jrec) &233 WRITE (inum,REC=jrec) & 235 234 # if ! defined key_dynspg_fsc 236 235 (( bnbnd(ifon, jb,jt), jb=1,3),jt=1,3), & … … 262 261 ! ifos = jpisd 263 262 ifos = jpisd -nimpp + 1 264 WRITE ( numwob,REC=jrec) &263 WRITE (inum,REC=jrec) & 265 264 # if ! defined key_dynspg_fsc 266 265 (( bsbnd(ifos, jb,jt), jb=1,3),jt=1,3), & … … 278 277 jrec = 5 + jpjef -jpjed + jpjwf -jpjwd +jpinf -jpind + & 279 278 ji + nimpp -1 -jpisd 280 WRITE ( numwob,REC=jrec) &279 WRITE (inum,REC=jrec) & 281 280 # if ! defined key_dynspg_fsc 282 281 (( bsbnd(ifos, jb,jt), jb=1,3),jt=1,3), & … … 292 291 END IF 293 292 END IF 294 CLOSE( numwob)293 CLOSE(inum) 295 294 296 295 END SUBROUTINE obc_rst_wri 296 297 297 298 298 SUBROUTINE obc_rst_lec 299 299 !!---------------------------------------------------------------------------- 300 !! SUBROUTINE obc_rst_lec 301 !! ************************ 302 !! ** Purpose : 303 !! Read files for restart at open boundaries 300 !! *** SUBROUTINE obc_rst_lec *** 301 !! 302 !! ** Purpose : Read files for restart at open boundaries 304 303 !! 305 !! ** Method : 306 !! Read the previous boundary arrays on unit numrob 304 !! ** Method : Read the previous boundary arrays on unit inum 307 305 !! The first record indicates previous characterics 308 306 !! … … 312 310 !!---------------------------------------------------------------------------- 313 311 !! * Local declarations 312 INTEGER :: inum = 11 ! temporary logical unit 314 313 INTEGER :: ji,jj,jk,ios 315 314 INTEGER :: ino0,it0,nbobc0,jpieob0,jpiwob0,jpjnob0,jpjsob0 … … 320 319 INTEGER :: jfoe, jfow, ifon, ifos 321 320 !!----------------------------------------------------------------------------- 322 !! OPA 8.5, LODYC-IPSL (2002)323 !!-----------------------------------------------------------------------------324 321 325 322 ! 0. Initialisations … … 358 355 ! 0.1 Open files 359 356 ! --------------- 360 OPEN( UNIT = numrob, &357 OPEN( UNIT = inum, & 361 358 IOSTAT = ios, & 362 359 FILE = 'restart.obc', & … … 374 371 ! 1.1 First record 375 372 ! ----------------- 376 READ( numrob,REC=1) ino1,it1,nbobc1,jpieob1,jpiwob1,jpjnob1, &373 READ(inum,REC=1) ino1,it1,nbobc1,jpieob1,jpiwob1,jpjnob1, & 377 374 jpjsob1,ied1,ief1,iwd1,iwf1,ind1,inf1,isd1,isf1 378 375 379 376 IF(lwp) THEN 380 377 WRITE(numout,*) ' ' 381 WRITE(numout,*) ' READ numrobwith number job : ',ino1,' with the time it: ',it1378 WRITE(numout,*) ' READ inum with number job : ',ino1,' with the time it: ',it1 382 379 WRITE(numout,*) ' ' 383 380 END IF … … 520 517 ! jfoe = jpjed 521 518 jfoe = jpjed -njmpp + 1 522 READ ( numrob,REC=jrec) &519 READ (inum,REC=jrec) & 523 520 # if ! defined key_dynspg_fsc 524 521 (( bebnd(jfoe, jb,jt), jb=1,3),jt=1,3), & … … 535 532 jfoe = jj 536 533 jrec = 2 + jj + njmpp -1 -jpjed 537 READ ( numrob,REC=jrec) &534 READ (inum,REC=jrec) & 538 535 # if ! defined key_dynspg_fsc 539 536 (( bebnd(jfoe, jb,jt), jb=1,3),jt=1,3), & … … 562 559 ! jfow = jpjwd 563 560 jfow = jpjwd -njmpp + 1 564 READ ( numrob,REC=jrec) &561 READ (inum,REC=jrec) & 565 562 # if ! defined key_dynspg_fsc 566 563 (( bwbnd(jfow, jb,jt), jb=1,3),jt=1,3), & … … 577 574 jfow = jj 578 575 jrec = 3 + jpjef -jpjed + jj + njmpp -1 -jpjwd 579 READ ( numrob,REC=jrec) &576 READ (inum,REC=jrec) & 580 577 # if ! defined key_dynspg_fsc 581 578 (( bwbnd(jfow, jb,jt), jb=1,3),jt=1,3), & … … 604 601 ! ifon = jpind 605 602 ifon = jpind -nimpp +1 606 READ ( numrob,REC=jrec) &603 READ (inum,REC=jrec) & 607 604 # if ! defined key_dynspg_fsc 608 605 (( bnbnd(ifon, jb,jt), jb=1,3),jt=1,3), & … … 619 616 ifon = ji 620 617 jrec = 4 + jpjef -jpjed + jpjwf -jpjwd +ji + nimpp -1 -jpind 621 READ ( numrob,REC=jrec) &618 READ (inum,REC=jrec) & 622 619 # if ! defined key_dynspg_fsc 623 620 (( bnbnd(ifon, jb,jt), jb=1,3),jt=1,3), & … … 646 643 ! ifos = jpisd 647 644 ifos = jpisd -nimpp + 1 648 READ ( numrob,REC=jrec) &645 READ (inum,REC=jrec) & 649 646 # if ! defined key_dynspg_fsc 650 647 (( bsbnd(ifos, jb,jt), jb=1,3),jt=1,3), & … … 662 659 jrec = 5 + jpjef -jpjed + jpjwf -jpjwd +jpinf -jpind + & 663 660 ji + nimpp -1 -jpisd 664 READ ( numrob,REC=jrec) &661 READ (inum,REC=jrec) & 665 662 # if ! defined key_dynspg_fsc 666 663 (( bsbnd(ifos, jb,jt), jb=1,3),jt=1,3), & … … 677 674 678 675 END IF 679 CLOSE(numrob) 680 681 # if defined key_mpp 682 IF( lpeastobc ) THEN 683 CALL mppobc(bebnd,jpjed,jpjef,jpieob,3*3,2,jpj) 684 CALL mppobc(uebnd,jpjed,jpjef,jpieob,jpk*3*3,2,jpj) 685 CALL mppobc(vebnd,jpjed,jpjef,jpieob+1,jpk*3*3,2,jpj) 686 CALL mppobc(tebnd,jpjed,jpjef,jpieob+1,jpk*2*2,2,jpj) 687 CALL mppobc(sebnd,jpjed,jpjef,jpieob+1,jpk*2*2,2,jpj) 688 END IF 689 IF( lpwestobc ) THEN 690 CALL mppobc(bwbnd,jpjwd,jpjwf,jpiwob,3*3,2,jpj) 691 CALL mppobc(uwbnd,jpjwd,jpjwf,jpiwob,jpk*3*3,2,jpj) 692 CALL mppobc(vwbnd,jpjwd,jpjwf,jpiwob,jpk*3*3,2,jpj) 693 CALL mppobc(twbnd,jpjwd,jpjwf,jpiwob,jpk*2*2,2,jpj) 694 CALL mppobc(swbnd,jpjwd,jpjwf,jpiwob,jpk*2*2,2,jpj) 695 END IF 696 IF( lpnorthobc ) THEN 697 CALL mppobc(bnbnd,jpind,jpinf,jpjnob ,3*3 ,1,jpi) 698 CALL mppobc(unbnd,jpind,jpinf,jpjnob+1,jpk*3*3,1,jpi) 699 CALL mppobc(vnbnd,jpind,jpinf,jpjnob ,jpk*3*3,1,jpi) 700 CALL mppobc(tnbnd,jpind,jpinf,jpjnob+1,jpk*2*2,1,jpi) 701 CALL mppobc(snbnd,jpind,jpinf,jpjnob+1,jpk*2*2,1,jpi) 702 END IF 703 IF( lpsouthobc ) THEN 704 CALL mppobc(bsbnd,jpisd,jpisf,jpjsob, 3*3,1,jpi) 705 CALL mppobc(usbnd,jpisd,jpisf,jpjsob,jpk*3*3,1,jpi) 706 CALL mppobc(vsbnd,jpisd,jpisf,jpjsob,jpk*3*3,1,jpi) 707 CALL mppobc(tsbnd,jpisd,jpisf,jpjsob,jpk*2*2,1,jpi) 708 CALL mppobc(ssbnd,jpisd,jpisf,jpjsob,jpk*2*2,1,jpi) 709 END IF 710 # endif 676 CLOSE(inum) 677 678 IF( lk_mpp ) THEN 679 IF( lpeastobc ) THEN 680 # if ! defined key_dynspg_fsc 681 CALL mppobc(bebnd,jpjed,jpjef,jpieob,3*3,2,jpj) 682 # endif 683 CALL mppobc(uebnd,jpjed,jpjef,jpieob,jpk*3*3,2,jpj) 684 CALL mppobc(vebnd,jpjed,jpjef,jpieob+1,jpk*3*3,2,jpj) 685 CALL mppobc(tebnd,jpjed,jpjef,jpieob+1,jpk*2*2,2,jpj) 686 CALL mppobc(sebnd,jpjed,jpjef,jpieob+1,jpk*2*2,2,jpj) 687 ENDIF 688 IF( lpwestobc ) THEN 689 # if ! defined key_dynspg_fsc 690 CALL mppobc(bwbnd,jpjwd,jpjwf,jpiwob,3*3,2,jpj) 691 # endif 692 CALL mppobc(uwbnd,jpjwd,jpjwf,jpiwob,jpk*3*3,2,jpj) 693 CALL mppobc(vwbnd,jpjwd,jpjwf,jpiwob,jpk*3*3,2,jpj) 694 CALL mppobc(twbnd,jpjwd,jpjwf,jpiwob,jpk*2*2,2,jpj) 695 CALL mppobc(swbnd,jpjwd,jpjwf,jpiwob,jpk*2*2,2,jpj) 696 ENDIF 697 IF( lpnorthobc ) THEN 698 # if ! defined key_dynspg_fsc 699 CALL mppobc(bnbnd,jpind,jpinf,jpjnob ,3*3 ,1,jpi) 700 # endif 701 CALL mppobc(unbnd,jpind,jpinf,jpjnob+1,jpk*3*3,1,jpi) 702 CALL mppobc(vnbnd,jpind,jpinf,jpjnob ,jpk*3*3,1,jpi) 703 CALL mppobc(tnbnd,jpind,jpinf,jpjnob+1,jpk*2*2,1,jpi) 704 CALL mppobc(snbnd,jpind,jpinf,jpjnob+1,jpk*2*2,1,jpi) 705 ENDIF 706 IF( lpsouthobc ) THEN 707 # if ! defined key_dynspg_fsc 708 CALL mppobc(bsbnd,jpisd,jpisf,jpjsob, 3*3,1,jpi) 709 # endif 710 CALL mppobc(usbnd,jpisd,jpisf,jpjsob,jpk*3*3,1,jpi) 711 CALL mppobc(vsbnd,jpisd,jpisf,jpjsob,jpk*3*3,1,jpi) 712 CALL mppobc(tsbnd,jpisd,jpisf,jpjsob,jpk*2*2,1,jpi) 713 CALL mppobc(ssbnd,jpisd,jpisf,jpjsob,jpk*2*2,1,jpi) 714 ENDIF 715 ENDIF 711 716 712 717 END SUBROUTINE obc_rst_lec … … 719 724 SUBROUTINE obc_rst_wri( kt ) ! No Open boundary ==> empty routine 720 725 INTEGER,INTENT(in) :: kt 721 WRITE(*,*) kt726 WRITE(*,*) 'obc_rst_wri: You should not have seen this print! error?', kt 722 727 END SUBROUTINE obc_rst_wri 723 728 SUBROUTINE obc_rst_lec ! No Open boundary ==> empty routine -
trunk/NEMO/OPA_SRC/OBC/obcspg.F90
r3 r32 5 5 !! open boundary 6 6 !!====================================================================== 7 #if defined key_obc &&defined key_dynspg_rl7 #if defined key_obc && defined key_dynspg_rl 8 8 !!---------------------------------------------------------------------- 9 9 !! 'key_obc' and Open Boundary Condition … … 86 86 !!---------------------------------------------------------------------- 87 87 88 ! 0. Local constant initialization 89 ! -------------------------------- 90 91 IF( kt == nit000 .OR. ln_rstart ) THEN 88 IF( kt == nit000 .OR. ln_rstart ) THEN ! Initialization 92 89 ! ... Boundary restoring coefficient 93 90 rtaue = 2. * rdt / rdpeob … … 100 97 rtaunin = 2. * rdt / rdpnin 101 98 rtausin = 2. * rdt / rdpsin 102 END IF 103 104 ! ... right hand side of the barotropic elliptic equation 99 ENDIF 100 101 ! right hand side of the barotropic elliptic equation 102 ! --------------------------------------------------- 103 104 ! Isolated coastline contribution to the RHS of the barotropic Eq. 105 105 gcbob(:,:) = 0.e0 106 107 ! 1. Isolated coastline contribution to the RHS of the barotropic Eq.108 ! -------------------------------------------------------------------109 106 DO jnic = 1, nbobc-1 110 DO jj = 1, jpj 111 DO ji = 1, jpi 112 gcbob(ji,jj) = gcbob(ji,jj) + gcfobc(ji,jj,jnic) * gcbic(jnic) 113 END DO 114 END DO 107 gcbob(:,:) = gcbob(:,:) + gcfobc(:,:,jnic) * gcbic(jnic) 115 108 END DO 116 109 117 ! 2. East open boundary 118 ! --------------------- 119 120 IF( lpeastobc ) THEN 121 CALL obc_spg_east( kt ) 122 END IF 123 124 ! 3. West open boundary 125 ! --------------------- 126 127 IF( lpwestobc ) THEN 128 CALL obc_spg_west( kt ) 129 END IF 130 131 ! 4. North open boundary 132 ! ---------------------- 133 134 IF( lpnorthobc ) THEN 135 CALL obc_spg_north( kt ) 136 END IF 137 138 ! 5. South open boundary 139 ! ---------------------- 140 141 IF( lpsouthobc ) THEN 142 CALL obc_spg_south( kt ) 143 END IF 144 145 # if defined key_mpp 146 CALL mpp_lnk_2d( gcbob, 'G', 1. ) 147 # endif 110 IF( lpeastobc ) CALL obc_spg_east ( kt ) ! East open boundary 111 112 IF( lpwestobc ) CALL obc_spg_west ( kt ) ! West open boundary 113 114 IF( lpnorthobc ) CALL obc_spg_north( kt ) ! North open boundary 115 116 IF( lpsouthobc ) CALL obc_spg_south( kt ) ! South open boundary 117 118 IF( lk_mpp ) CALL lbc_lnk( gcbob, 'G', 1. ) 148 119 149 120 END SUBROUTINE obc_spg 150 121 122 151 123 SUBROUTINE obc_spg_east ( kt ) 152 124 !!------------------------------------------------------------------------------ 153 !! SUBROUTINE obc_spg_east 154 !! ************************* 155 !! ** Purpose : 156 !! Apply the radiation algorithm on east OBC stream function. 157 !! If the logical lfbceast is .TRUE., there is no radiation but only fixed OBC 125 !! *** SUBROUTINE obc_spg_east *** 126 !! 127 !! ** Purpose : Apply the radiation algorithm on east OBC stream function. 128 !! If lfbceast=T , there is no radiation but only fixed OBC 158 129 !! 159 130 !! History : … … 169 140 !! * Local declarations 170 141 INTEGER :: ij 171 172 142 REAL(wp) :: z2dtr, ztau, zin 173 143 REAL(wp) :: z05cx, zdt, z4nor2, z2dx, z2dy 174 175 !!------------------------------------------------------------------------------176 !! OPA 8.5, LODYC-IPSL (2002)177 144 !!------------------------------------------------------------------------------ 178 145 … … 229 196 IF(lwp) WRITE(numout,*)' PB dans obc_spg_east au pt ',jj,' : z4nor=0' 230 197 z4nor2 = 0.001 231 END 198 ENDIF 232 199 z05cx = zdt * z2dx / z4nor2 * bmask(ji,jj) 233 200 z05cx = z05cx / e1v(ji+1,jj) … … 249 216 END DO 250 217 251 END IF 252 # if defined key_mpp 253 CALL mppobc(bsfeob,jpjed,jpjef,jpieob-1,1,2,jpj) 254 # endif 218 ENDIF 219 IF( lk_mpp ) CALL mppobc(bsfeob,jpjed,jpjef,jpieob-1,1,2,jpj) 220 255 221 256 222 ! 3. right hand side of the barotropic elliptic equation … … 258 224 259 225 IF( ( neuler == 0 ) .AND. ( kt == nit000 ) ) THEN 260 z2dtr =1./rdt226 z2dtr = 1.0 / rdt 261 227 ELSE 262 z2dtr =1./2./rdt263 END 228 z2dtr = 0.5 / rdt 229 ENDIF 264 230 DO ji = fs_nie0-1, fs_nie1-1 ! Vector opt. 265 231 DO jj = nje0m1, nje1 … … 351 317 IF(lwp) WRITE(numout,*)' PB dans obc_spg_west au pt ',jj,' : z4nor =0' 352 318 z4nor2=0.0001 353 END 319 ENDIF 354 320 z05cx = zdt * z2dx / z4nor2 * bmask(ji,jj) 355 321 z05cx = z05cx / e1v(ji,jj) … … 368 334 END DO 369 335 370 END IF 371 # if defined key_mpp 372 CALL mppobc(bsfwob,jpjwd,jpjwf,jpiwob+1,1,2,jpj) 373 # endif 336 ENDIF 337 IF( lk_mpp ) CALL mppobc(bsfwob,jpjwd,jpjwf,jpiwob+1,1,2,jpj) 338 374 339 375 340 ! 3. right hand side of the barotropic elliptic equation … … 377 342 378 343 IF( ( neuler == 0 ) .AND. ( kt == nit000 ) ) THEN 379 z2dtr =1./rdt344 z2dtr = 1.0 / rdt 380 345 ELSE 381 z2dtr =1./2./rdt382 END 346 z2dtr = 0.5 / rdt 347 ENDIF 383 348 DO ji = fs_niw0+1, fs_niw1+1 ! Vector opt. 384 349 DO jj = njw0m1, njw1 … … 392 357 SUBROUTINE obc_spg_north ( kt ) 393 358 !!------------------------------------------------------------------------------ 394 !! SUBROUTINE obc_spg_north 395 !! ************************* 396 !! ** Purpose : 397 !! Apply the radiation algorithm on north OBC stream function. 398 !! If the logical lfbcnorth is .TRUE., there is no radiation but only fixed OBC 359 !! *** SUBROUTINE obc_spg_north *** 360 !! 361 !! ** Purpose : Apply the radiation algorithm on north OBC stream function. 362 !! If lfbcnorth=T, there is no radiation but only fixed OBC 399 363 !! 400 364 !! History : … … 410 374 !! * Local declarations 411 375 INTEGER :: ii 412 413 376 REAL(wp) :: z2dtr, ztau, zin 414 377 REAL(wp) :: z05cx, zdt, z4nor2, z2dx, z2dy 415 416 !!------------------------------------------------------------------------------417 !! OPA 8.5, LODYC-IPSL (2002)418 378 !!------------------------------------------------------------------------------ 419 379 … … 475 435 IF( z4nor2 == 0 ) THEN 476 436 IF(lwp) WRITE(numout,*)' PB dans obc_spg_north au pt',ji,' : z4nor =0' 477 END 437 ENDIF 478 438 z05cx = zdt * z2dx / z4nor2 * bmask(ji,jj) 479 439 z05cx = z05cx / e2u(ji,jj+1) … … 492 452 END DO 493 453 494 END IF 495 # if defined key_mpp 496 call mppobc(bsfnob,jpind,jpinf,jpjnob-1,1,1,jpi) 497 # endif 454 ENDIF 455 IF( lk_mpp ) CALL mppobc(bsfnob,jpind,jpinf,jpjnob-1,1,1,jpi) 456 498 457 499 458 ! 3. right hand side of the barotropic elliptic equation … … 501 460 502 461 IF( ( neuler == 0 ) .AND. ( kt == nit000 ) ) THEN 503 z2dtr =1./rdt462 z2dtr = 1.0 / rdt 504 463 ELSE 505 z2dtr =1./2./rdt506 END 464 z2dtr = 0.5 / rdt 465 ENDIF 507 466 DO jj = fs_njn0-1, fs_njn1-1 ! Vector opt. 508 467 DO ji = nin0m1, nin1 … … 514 473 END SUBROUTINE obc_spg_north 515 474 475 516 476 SUBROUTINE obc_spg_south ( kt ) 517 477 !!------------------------------------------------------------------------------ 518 !! SUBROUTINE obc_spg_south 519 !! ************************* 520 !! ** Purpose : 521 !! Apply the radiation algorithm on south OBC stream function. 522 !! If the logical lfbcsouth is .TRUE., there is no radiation but only fixed OBC 478 !! *** SUBROUTINE obc_spg_south *** 479 !! 480 !! ** Purpose : Apply the radiation algorithm on south OBC stream function. 481 !! If lfbcsouth=T, there is no radiation but only fixed OBC 523 482 !! 524 483 !! History : … … 596 555 IF( z4nor2 == 0 ) THEN 597 556 IF(lwp) WRITE(numout,*)' PB dans obc_spg_south au pt ',ji,' : z4nor =0' 598 END 557 ENDIF 599 558 z05cx = zdt * z2dx / z4nor2 * bmask(ji,jj) 600 559 z05cx = z05cx / e2u(ji,jj) … … 613 572 END DO 614 573 615 END IF 616 # if defined key_mpp 617 CALL mppobc(bsfsob,jpisd,jpisf,jpjsob+1,1,1,jpi) 618 # endif 574 ENDIF 575 IF( lk_mpp ) CALL mppobc(bsfsob,jpisd,jpisf,jpjsob+1,1,1,jpi) 576 619 577 620 578 ! 3. right hand side of the barotropic elliptic equation 621 579 ! ------------------------------------------------------- 622 580 623 IF( ( neuler == 0 ) . and. ( kt == nit000 ) ) THEN624 z2dtr =1./rdt581 IF( ( neuler == 0 ) .AND. ( kt == nit000 ) ) THEN 582 z2dtr = 1.0 / rdt 625 583 ELSE 626 z2dtr =1./2./rdt627 END 584 z2dtr = 0.5 / rdt 585 ENDIF 628 586 DO jj = fs_njs0+1, fs_njs1+1 ! Vector opt. 629 587 DO ji = nis0m1, nis1 … … 642 600 SUBROUTINE obc_spg( kt ) ! Empty routine 643 601 INTEGER, INTENT( in ) :: kt 644 WRITE(*,*) kt602 WRITE(*,*) 'obc_spg: You should not have seen this print! error?', kt 645 603 END SUBROUTINE obc_spg 646 604 #endif -
trunk/NEMO/OPA_SRC/OBC/obctra.F90
r3 r32 20 20 USE obc_oce ! ocean open boundary conditions 21 21 USE lib_mpp ! ??? 22 USE lbclnk ! ??? 22 23 USE in_out_manager ! I/O manager 23 24 … … 29 30 30 31 !! * Module variables 31 INTEGER :: ji, jj, jk ! dummy loop indices32 33 32 INTEGER :: & ! ... boundary space indices 34 33 nib = 1, & ! nib = boundary point … … 90 89 END IF 91 90 92 ! 1. East open boundary 93 ! --------------------- 94 95 IF( lpeastobc )THEN 96 CALL obc_tra_east( kt ) 97 END IF 98 99 ! 2. West open boundary 100 ! --------------------- 101 102 IF( lpwestobc )THEN 103 CALL obc_tra_west( kt ) 104 END IF 105 106 ! 3. North open boundary 107 ! --------------------- 108 109 IF( lpnorthobc )THEN 110 CALL obc_tra_north( kt ) 111 END IF 112 113 ! 4. South open boundary 114 ! --------------------- 115 116 IF( lpsouthobc )THEN 117 CALL obc_tra_south( kt ) 118 END IF 119 120 # if defined key_mpp 121 !! bug ??? 122 IF( kt >= nit000+3 .AND. ln_rstart ) THEN 123 CALL mpp_lnk_3d( tb, 'T', 1. ) 124 CALL mpp_lnk_3d( sb, 'T', 1. ) 125 END IF 126 CALL mpp_lnk_3d( ta, 'T', 1. ) 127 CALL mpp_lnk_3d( sa, 'T', 1. ) 128 # endif 91 IF( lpeastobc ) CALL obc_tra_east ( kt ) ! East open boundary 92 93 IF( lpwestobc ) CALL obc_tra_west ( kt ) ! West open boundary 94 95 IF( lpnorthobc ) CALL obc_tra_north( kt ) ! North open boundary 96 97 IF( lpsouthobc ) CALL obc_tra_south( kt ) ! South open boundary 98 99 IF( lk_mpp ) THEN !!bug ??? 100 IF( kt >= nit000+3 .AND. ln_rstart ) THEN 101 CALL lbc_lnk( tb, 'T', 1. ) 102 CALL lbc_lnk( sb, 'T', 1. ) 103 END IF 104 CALL lbc_lnk( ta, 'T', 1. ) 105 CALL lbc_lnk( sa, 'T', 1. ) 106 ENDIF 129 107 130 108 END SUBROUTINE obc_tra … … 151 129 152 130 !! * Local declaration 131 INTEGER :: ji, jj, jk ! dummy loop indices 153 132 REAL(wp) :: z05cx, ztau, zin 154 155 !!------------------------------------------------------------------------------156 !! OPA 8.5, LODYC-IPSL (2002)157 133 !!------------------------------------------------------------------------------ 158 134 … … 253 229 254 230 !! * Local declaration 231 INTEGER :: ji, jj, jk ! dummy loop indices 255 232 REAL(wp) :: z05cx, ztau, zin 256 233 !!------------------------------------------------------------------------------ … … 351 328 352 329 !! * Local declaration 330 INTEGER :: ji, jj, jk ! dummy loop indices 353 331 REAL(wp) :: z05cx, ztau, zin 354 332 !!------------------------------------------------------------------------------ … … 452 430 453 431 !! * Local declaration 432 INTEGER :: ji, jj, jk ! dummy loop indices 454 433 REAL(wp) :: z05cx, ztau, zin 455 434 !!------------------------------------------------------------------------------ -
trunk/NEMO/OPA_SRC/OBC/obcvol.F90
r3 r32 2 2 !!================================================================================= 3 3 !! *** MODULE obcvol *** 4 !! Ocean dynamic : Volume constraint when OBC and Free surface are activated4 !! Ocean dynamic : Volume constraint when OBC and Free surface are used 5 5 !!================================================================================= 6 #if defined key_obc &&defined key_dynspg_fsc6 #if defined key_obc && defined key_dynspg_fsc 7 7 !!--------------------------------------------------------------------------------- 8 8 !! 'key_obc' and open boundary conditions … … 73 73 !! 74 74 !! History : 75 !! 8.5 ! 02-10 (C. Talandier, A-M. Treguier) Original 75 !! 8.5 ! 02-10 (C. Talandier, A-M. Treguier) Original code 76 76 !!---------------------------------------------------------------------------- 77 77 !! * Arguments … … 102 102 END DO 103 103 END DO 104 105 # if defined key_mpp 106 CALL mpp_sum( zCflxemp ) 107 # endif 104 IF( lk_mpp ) CALL mpp_sum( zCflxemp ) ! sum over the global domain 108 105 109 106 ! 2. Barotropic velocity for each open boundary … … 113 110 114 111 ! ... West open boundary 115 IF( lpwestobc ) THEN 116 117 ! ... Total transport through the West OBC 112 IF( lpwestobc ) THEN ! ... Total transport through the West OBC 118 113 DO ji = fs_niw0, fs_niw1 ! Vector opt. 119 114 DO jk = 1, jpkm1 120 115 DO jj = 1, jpj 121 zubtpecor = zubtpecor + ua(ji,jj,jk)*e2u(ji,jj)*fse3u(ji,jj,jk) & 122 * uwmsk(jj,jk) 123 END DO 124 END DO 125 END DO 126 116 zubtpecor = zubtpecor + ua(ji,jj,jk)*e2u(ji,jj)*fse3u(ji,jj,jk) * uwmsk(jj,jk) 117 END DO 118 END DO 119 END DO 127 120 END IF 128 121 129 122 ! ... East open boundary 130 IF( lpeastobc ) THEN 131 132 ! ... Total transport through the East OBC 123 IF( lpeastobc ) THEN ! ... Total transport through the East OBC 133 124 DO ji = fs_nie0, fs_nie1 ! Vector opt. 134 125 DO jk = 1, jpkm1 135 126 DO jj = 1, jpj 136 zubtpecor = zubtpecor - ua(ji,jj,jk)*e2u(ji,jj)*fse3u(ji,jj,jk) & 137 * uemsk(jj,jk) 138 END DO 139 END DO 140 END DO 141 127 zubtpecor = zubtpecor - ua(ji,jj,jk)*e2u(ji,jj)*fse3u(ji,jj,jk) * uemsk(jj,jk) 128 END DO 129 END DO 130 END DO 142 131 END IF 143 132 144 133 ! ... North open boundary 145 IF( lpnorthobc ) THEN 146 147 ! ... Total transport through the North OBC 134 IF( lpnorthobc ) THEN ! ... Total transport through the North OBC 148 135 DO jj = fs_njn0, fs_njn1 ! Vector opt. 149 136 DO jk = 1, jpkm1 150 137 DO ji = 1, jpi 151 zubtpecor = zubtpecor - va(ji,jj,jk)*e1v(ji,jj)*fse3v(ji,jj,jk) & 152 * vnmsk(ji,jk) 153 END DO 154 END DO 155 END DO 156 138 zubtpecor = zubtpecor - va(ji,jj,jk)*e1v(ji,jj)*fse3v(ji,jj,jk) * vnmsk(ji,jk) 139 END DO 140 END DO 141 END DO 157 142 END IF 158 143 159 144 ! ... South open boundary 160 IF( lpsouthobc ) THEN 161 162 ! ... Total transport through the South OBC 145 IF( lpsouthobc ) THEN ! ... Total transport through the South OBC 163 146 DO jj = fs_njs0, fs_njs1 ! Vector opt. 164 147 DO jk = 1, jpkm1 165 148 DO ji = 1, jpi 166 zubtpecor = zubtpecor + va(ji,jj,jk)*e1v(ji,jj)*fse3v(ji,jj,jk) & 167 * vsmsk(ji,jk) 168 END DO 169 END DO 170 END DO 171 172 END IF 173 174 # if defined key_mpp 175 CALL mpp_sum( zubtpecor ) 176 # endif 149 zubtpecor = zubtpecor + va(ji,jj,jk)*e1v(ji,jj)*fse3v(ji,jj,jk) * vsmsk(ji,jk) 150 END DO 151 END DO 152 END DO 153 END IF 154 155 IF( lk_mpp ) CALL mpp_sum( zubtpecor ) ! sum over the global domain 156 177 157 178 158 ! 3. The normal velocity correction … … 181 161 zubtpecor = (zubtpecor - zCflxemp*volemp)*(1./obcsurftot) 182 162 183 IF( lwp . and. mod( kt, nwrite ) == 0) THEN163 IF( lwp .AND. MOD( kt, nwrite ) == 0) THEN 184 164 IF(lwp) WRITE(numout,*)' ' 185 165 IF(lwp) WRITE(numout,*)'obc_vol : time step :', kt … … 214 194 END DO 215 195 216 # if defined key_mpp 217 CALL mpp_sum( ztransw ) 218 # endif 219 220 IF( lwp .and. mod( kt, nwrite ) == 0) THEN 196 IF( lk_mpp ) CALL mpp_sum( ztransw ) ! sum over the global domain 197 198 IF( lwp .AND. MOD( kt, nwrite ) == 0) THEN 221 199 IF(lwp) WRITE(numout,*)' West OB transport ztransw :', ztransw,'(m3/s)' 222 200 END IF … … 236 214 END DO 237 215 238 # if defined key_mpp 239 CALL mpp_sum( ztranse ) 240 # endif 241 242 IF( lwp .and. mod( kt, nwrite ) == 0) THEN 216 IF( lk_mpp ) CALL mpp_sum( ztranse ) ! sum over the global domain 217 218 IF( lwp .AND. MOD( kt, nwrite ) == 0) THEN 243 219 IF(lwp) WRITE(numout,*)' East OB transport ztranse :', ztranse,'(m3/s)' 244 220 END IF … … 257 233 END DO 258 234 END DO 259 260 # if defined key_mpp 261 CALL mpp_sum( ztransn ) 262 # endif 263 264 IF( lwp .and. mod( kt, nwrite ) == 0) THEN 235 IF( lk_mpp ) CALL mpp_sum( ztransn ) ! sum over the global domain 236 237 IF( lwp .AND. MOD( kt, nwrite ) == 0) THEN 265 238 IF(lwp) WRITE(numout,*)' North OB transport ztransn :', ztransn,'(m3/s)' 266 239 END IF … … 279 252 END DO 280 253 END DO 281 282 # if defined key_mpp 283 CALL mpp_sum( ztranss ) 284 # endif 285 286 IF( lwp .and. mod( kt, nwrite ) == 0) THEN 254 IF( lk_mpp ) CALL mpp_sum( ztranss ) ! sum over the global domain 255 256 IF( lwp .AND. MOD( kt, nwrite ) == 0) THEN 287 257 IF(lwp) WRITE(numout,*)' South OB transport ztranss :', ztranss,'(m3/s)' 288 258 END IF … … 296 266 ztranst = ztransw - ztranse + ztranss - ztransn 297 267 298 IF( lwp . and. mod( kt, nwrite ) == 0) THEN268 IF( lwp .AND. MOD( kt, nwrite ) == 0) THEN 299 269 IF(lwp) WRITE(numout,*)' ' 300 270 IF(lwp) WRITE(numout,*)' Cumulate transport ztranst =', ztranst,'(m3/s)' -
trunk/NEMO/OPA_SRC/TRA/traadv_cen2.F90
r3 r32 63 63 !! Part I : horizontal advection 64 64 !! * centered flux: 65 !! * s-coordinate ( 'key_s_coord') or66 !! * z-coordinate with partial steps ( 'key_partial_steps'),65 !! * s-coordinate (lk_sco=T) or 66 !! * z-coordinate with partial steps (lk_zps=T), 67 67 !! the vertical scale factors e3. are inside the derivatives: 68 68 !! zcenu = e2u*e3u un mi(tn) … … 72 72 !! zcenv = e1v vn mj(tn) 73 73 !! * upstream flux: 74 !! * s-coordinate ( 'key_s_coord') or75 !! * z-coordinate with partial steps ( 'key_partial_steps')74 !! * s-coordinate (lk_sco=T) or 75 !! * z-coordinate with partial steps (lk_zps=T) 76 76 !! zupsu = e2u*e3u un (tb(i) or tb(i-1) ) [un>0 or <0] 77 77 !! zupsv = e1v*e3v vn (tb(j) or tb(j-1) ) [vn>0 or <0] … … 85 85 !! zwy = zcofj * zupsv + (1-zcofj) * zcenv 86 86 !! * horizontal advective trend (divergence of the fluxes) 87 !! * s-coordinate ( 'key_s_coord') or88 !! * z-coordinate with partial steps ( 'key_partial_steps')87 !! * s-coordinate (lk_sco=T) or 88 !! * z-coordinate with partial steps (lk_zps=T) 89 89 !! zta = 1/(e1t*e2t*e3t) { di-1[zwx] + dj-1[zwy] } 90 90 !! * z-coordinate (default key), e3t=e3u=e3v: … … 180 180 ! Advective bottom boundary layer 181 181 ! ------------------------------- 182 zun(:,:,:) = un 183 zvn(:,:,:) = vn 184 zwn(:,:,:) = wn 182 zun(:,:,:) = un(:,:,:) - u_bbl(:,:,:) 183 zvn(:,:,:) = vn(:,:,:) - v_bbl(:,:,:) 184 zwn(:,:,:) = wn(:,:,:) + w_bbl(:,:,:) 185 185 #endif 186 186 -
trunk/NEMO/OPA_SRC/TRA/traadv_cen2_atsk.h90
r3 r32 26 26 !! Part I : horizontal advection 27 27 !! * centered flux: 28 !! * s-coordinate ( 'key_s_coord' defined) or29 !! * z-coordinate with partial steps ( 'key_partial_steps'),28 !! * s-coordinate (lk_sco=T) or 29 !! * z-coordinate with partial steps (lk_zps=T), 30 30 !! the vertical scale factors e3. are inside the derivatives: 31 31 !! zcenu = e2u*e3u un mi(tn) 32 32 !! zcenv = e1v*e3v vn mj(tn) 33 !! * z-coordinate ( default key), e3t=e3u=e3v:33 !! * z-coordinate (lk_zco=T), e3t=e3u=e3v: 34 34 !! zcenu = e2u un mi(tn) 35 35 !! zcenv = e1v vn mj(tn) 36 36 !! * upstream flux: 37 !! * s-coordinate ( 'key_s_coord' defined) or38 !! * z-coordinate with partial steps ( 'key_partial_steps')37 !! * s-coordinate (lk_sco=T) or 38 !! * z-coordinate with partial steps (lk_zps=T) 39 39 !! zupsu = e2u*e3u un (tb(i) or tb(i-1) ) [un>0 or <0] 40 40 !! zupsv = e1v*e3v vn (tb(j) or tb(j-1) ) [vn>0 or <0] … … 48 48 !! zwy = zcofj * zupsv + (1-zcofj) * zcenv 49 49 !! * horizontal advective trend (divergence of the fluxes) 50 !! * s-coordinate ( 'key_s_coord' defined)51 !! or z-coordinate with partial steps ( 'key_partial_steps')50 !! * s-coordinate (lk_sco=T) 51 !! or z-coordinate with partial steps (lk_zps=T) 52 52 !! zta = 1/(e1t*e2t*e3t) { di-1[zwx] + dj-1[zwy] } 53 53 !! * z-coordinate (default key), e3t=e3u=e3v: … … 77 77 !! zcenu = centered flux = wn * mk(tn) 78 78 !! The surface boundary condition is : 79 !! rigid-lid ( key_dynspg_frd = T) : zero advective flux80 !! free-surf ( key_dynspg_fsc = T) : wn(:,:,1) * tn(:,:,1)79 !! rigid-lid (lk_dynspg_frd = T) : zero advective flux 80 !! free-surf (lk_dynspg_fsc = T) : wn(:,:,1) * tn(:,:,1) 81 81 !! Add this trend now to the general trend of tracer (ta,sa): 82 82 !! (ta,sa) = (ta,sa) + ( zta , zsa ) -
trunk/NEMO/OPA_SRC/TRA/trabbc.F90
r3 r32 4 4 !! Ocean active tracers: bottom boundary condition 5 5 !!============================================================================== 6 #if defined key_trabbc6 #if defined key_trabbc || defined key_esopa 7 7 !!---------------------------------------------------------------------- 8 8 !! 'key_trabbc' geothermal heat flux … … 24 24 25 25 !! to be transfert in the namelist ???! 26 LOGICAL, PUBLIC, PARAMETER :: lk_trabbc = .TRUE. ! bbc flag26 LOGICAL, PUBLIC, PARAMETER :: lk_trabbc = .TRUE. !: bbc flag 27 27 28 28 !! * Module variables … … 237 237 !! Default option Empty module 238 238 !!---------------------------------------------------------------------- 239 LOGICAL, PUBLIC, PARAMETER :: lk_trabbc = .FALSE. ! bbc flag239 LOGICAL, PUBLIC, PARAMETER :: lk_trabbc = .FALSE. !: bbc flag 240 240 CONTAINS 241 241 SUBROUTINE tra_bbc( kt ) ! Empty routine 242 WRITE(*,*) kt ! suppress a warning when compiling242 WRITE(*,*) 'tra_bbc: You should not have seen this print! error?', kt 243 243 END SUBROUTINE tra_bbc 244 244 #endif -
trunk/NEMO/OPA_SRC/TRA/trabbl.F90
r3 r32 29 29 30 30 !! * Shared module variables 31 LOGICAL, PUBLIC, PARAMETER :: & 32 lk_trabbl_dif = .TRUE. ! diffusive bottom boundary layer flag31 LOGICAL, PUBLIC, PARAMETER :: & !: 32 lk_trabbl_dif = .TRUE. !: diffusive bottom boundary layer flag 33 33 # if defined key_trabbl_adv 34 LOGICAL, PUBLIC, PARAMETER :: & 35 lk_trabbl_adv = .TRUE. ! bottom boundary layer flag36 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & 37 w_bbl, & ! vertical increment of velocity due toadvective BBL38 ! ! only affect tracer vertical advection39 u_bbl, v_bbl ! velocity involved in exhanges in the advective BBL34 LOGICAL, PUBLIC, PARAMETER :: & !: 35 lk_trabbl_adv = .TRUE. !: advective bottom boundary layer flag 36 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & !: 37 u_bbl, v_bbl, & !: velocity involved in exhanges in the advective BBL 38 w_bbl !: vertical increment of velocity due to advective BBL 39 ! ! only affect tracer vertical advection 40 40 # else 41 LOGICAL, PUBLIC, PARAMETER :: & 42 lk_trabbl_adv = .FALSE. ! advective bottom boundary layer flag41 LOGICAL, PUBLIC, PARAMETER :: & !: 42 lk_trabbl_adv = .FALSE. !: advective bottom boundary layer flag 43 43 # endif 44 44 45 45 !! * Module variables 46 INTEGER, DIMENSION(jpi,jpj) :: & 46 INTEGER, DIMENSION(jpi,jpj) :: & !: 47 47 mbkt, mbku, mbkv ! ??? 48 48 REAL(wp) :: & !!! * bbl namelist * … … 106 106 INTEGER :: ji, jj ! dummy loop indices 107 107 INTEGER :: ik 108 INTEGER :: ii0, ii1, ij0, ij1 ! temporary integers 108 109 # if defined key_partial_steps 109 110 INTEGER :: iku1, iku2, ikv1,ikv2 ! temporary intergers … … 288 289 ! ! ======================= 289 290 ! Gibraltar enhancement of BBL 290 zkx( mi0(139):mi1(140) , mj0(102):mj1(102) ) = 4.e0 * zkx( mi0(139):mi1(140) , mj0(102):mj1(102) ) 291 zky( mi0(139):mi1(140) , mj0(102):mj1(102) ) = 4.e0 * zky( mi0(139):mi1(140) , mj0(102):mj1(102) ) 291 ij0 = 102 ; ij1 = 102 292 ii0 = 139 ; ii1 = 140 293 zkx( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 4.e0 * zkx( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) 294 zky( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 4.e0 * zky( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) 292 295 293 296 ! Red Sea enhancement of BBL 294 zkx( mi0(161):mi1(162) , mj0(88):mj1(88) ) = 10.e0 * zkx( mi0(161):mi1(162) , mj0(88):mj1(88) ) 295 zky( mi0(161):mi1(162) , mj0(88):mj1(88) ) = 10.e0 * zky( mi0(161):mi1(162) , mj0(88):mj1(88) ) 297 ij0 = 88 ; ij1 = 88 298 ii0 = 161 ; ii1 = 162 299 zkx( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 10.e0 * zkx( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) 300 zky( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 10.e0 * zky( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) 296 301 297 302 ! ! ======================= … … 299 304 ! ! ======================= 300 305 ! Gibraltar enhancement of BBL 301 zkx( mi0(70):mi1(71) , mj0(52):mj1(52) ) = 4.e0 * zkx( mi0(70):mi1(71) , mj0(52):mj1(52) ) 302 zky( mi0(70):mi1(71) , mj0(52):mj1(52) ) = 4.e0 * zky( mi0(70):mi1(71) , mj0(52):mj1(52) ) 306 ij0 = 52 ; ij1 = 52 307 ii0 = 70 ; ii1 = 71 308 zkx( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 4.e0 * zkx( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) 309 zky( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 4.e0 * zky( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) 303 310 304 311 END SELECT … … 352 359 SUBROUTINE tra_bbl_adv (kt ) ! Empty routine 353 360 INTEGER, INTENT(in) :: kt 354 WRITE(*,*) kt361 WRITE(*,*) 'tra_bbl_adv: You should not have seen this print! error?', kt 355 362 END SUBROUTINE tra_bbl_adv 356 363 # endif … … 418 425 !! Dummy module : No bottom boundary layer scheme 419 426 !!---------------------------------------------------------------------- 420 LOGICAL, PUBLIC, PARAMETER :: lk_trabbl_dif = .FALSE. 421 LOGICAL, PUBLIC, PARAMETER :: lk_trabbl_adv = .FALSE. 427 LOGICAL, PUBLIC, PARAMETER :: lk_trabbl_dif = .FALSE. !: diff bbl flag 428 LOGICAL, PUBLIC, PARAMETER :: lk_trabbl_adv = .FALSE. !: adv bbl flag 422 429 CONTAINS 423 430 SUBROUTINE tra_bbl_dif (kt ) ! Empty routine 424 431 INTEGER, INTENT(in) :: kt 425 WRITE(*,*) kt432 WRITE(*,*) 'tra_bbl_dif: You should not have seen this print! error?', kt 426 433 END SUBROUTINE tra_bbl_dif 427 434 SUBROUTINE tra_bbl_adv (kt ) ! Empty routine 428 435 INTEGER, INTENT(in) :: kt 429 WRITE(*,*) kt436 WRITE(*,*) 'tra_bbl_adv: You should not have seen this print! error?', kt 430 437 END SUBROUTINE tra_bbl_adv 431 438 #endif -
trunk/NEMO/OPA_SRC/TRA/tradmp.F90
r3 r32 4 4 !! Ocean physics: internal restoring trend on active tracers (T and S) 5 5 !!====================================================================== 6 #if defined key_tradmp6 #if defined key_tradmp || defined key_esopa 7 7 !!---------------------------------------------------------------------- 8 8 !! key_tradmp internal damping … … 17 17 USE oce ! ocean dynamics and tracers variables 18 18 USE dom_oce ! ocean space and time domain variables 19 USE trdtra_oce ! ocean active tracer trend variables19 USE trdtra_oce ! ocean active tracer trend variables 20 20 USE zdf_oce ! ocean vertical physics 21 21 USE in_out_manager ! I/O manager … … 24 24 USE dtasal ! salinity data 25 25 USE zdfmxl ! mixed layer depth 26 USE lib_mpp ! ??? 26 27 27 28 IMPLICIT NONE … … 32 33 33 34 !! * Shared module variables 34 LOGICAL , PUBLIC :: lk_tradmp = .TRUE. !internal damping flag35 LOGICAL , PUBLIC, PARAMETER :: lk_tradmp = .TRUE. !: internal damping flag 35 36 36 37 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & … … 392 393 INTEGER, PARAMETER :: jpmois=1 393 394 INTEGER :: ipi, ipj, ipk ! temporary integers 395 INTEGER :: ii0, ii1, ij0, ij1 ! " " 394 396 INTEGER :: & 395 397 idmp, & ! logical unit for file restoring damping term … … 408 410 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 409 411 zdct 410 411 INTEGER :: ii0, ii1, ij0, ij1412 412 !!---------------------------------------------------------------------- 413 413 … … 545 545 546 546 ! Mediterranean Sea 547 zmrs( mi0(81):mi1(91) , mj0(50):mj1(56) ) = 1.e0 548 zmrs( mi0(81):mi1(91) , mj0(50):mj1(56) ) = 1.e0 549 zmrs( mi0(75):mi1(80) , mj0(50):mj1(55) ) = 1.e0 550 zmrs( mi0(70):mi1(74) , mj0(52):mj1(53) ) = 1.e0 547 ij0 = 50 ; ij1 = 56 548 ii0 = 81 ; ii1 = 91 ; zmrs( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 1.e0 549 ij0 = 50 ; ij1 = 55 550 ii0 = 70 ; ii1 = 80 ; zmrs( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 1.e0 551 ij0 = 52 ; ij1 = 53 552 ii0 = 70 ; ii1 = 74 ; zmrs( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 1.e0 551 553 ! Smooth transition from 0 at surface to 1./rday at the 18th level in Med and Red Sea 552 554 DO jk = 1, 17 … … 562 564 563 565 ! Mediterranean Sea 564 zmrs( mi0(157):mi1(181) , mj0( 96):mj1(110) ) = 1.e0 565 zmrs( mi0(144):mi1(156) , mj0(100):mj1(110) ) = 1.e0 566 zmrs( mi0(139):mi1(143) , mj0(100):mj1(103) ) = 1.e0 566 ij0 = 96 ; ij1 = 110 567 ii0 = 157 ; ii1 = 181 ; zmrs( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 1.e0 568 ij0 = 100 ; ij1 = 110 569 ii0 = 144 ; ii1 = 156 ; zmrs( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 1.e0 570 ij0 = 100 ; ij1 = 103 571 ii0 = 139 ; ii1 = 143 ; zmrs( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 1.e0 567 572 ! Decrease before Gibraltar Strait 568 zmrs( mi0(139):mi1(141) , mj0(101):mj1(102) ) = 0.e0 569 zmrs( mi0(142):mi1(142) , mj0(101):mj1(102) ) = 1.e0 / 90.e0 570 zmrs( mi0(143):mi1(143) , mj0(101):mj1(102) ) = 0.40e0 571 zmrs( mi0(144):mi1(144) , mj0(101):mj1(102) ) = 0.75e0 573 ij0 = 101 ; ij1 = 102 574 ii0 = 139 ; ii1 = 141 ; zmrs( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.e0 575 ii0 = 142 ; ii1 = 142 ; zmrs( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 1.e0 / 90.e0 576 ii0 = 143 ; ii1 = 143 ; zmrs( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.40e0 577 ii0 = 144 ; ii1 = 144 ; zmrs( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.75e0 572 578 ! Red Sea 573 zmrs( mi0(147):mi1(163) , mj0( 87):mj1( 96) ) = 1.e0 579 ij0 = 87 ; ij1 = 96 580 ii0 = 147 ; ii1 = 163 ; zmrs( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 1.e0 574 581 ! Decrease before Bab el Mandeb Strait 575 zmrs( mi0(153):mi1(160) , mj0( 91):mj1( 91) ) = 0.80e0 576 zmrs( mi0(153):mi1(160) , mj0( 90):mj1( 90) ) = 0.40e0 577 zmrs( mi0(158):mi1(160) , mj0( 89):mj1( 89) ) = 1.e0 / 90.e0 578 zmrs( mi0(160):mi1(163) , mj0( 88):mj1( 88) ) = 0.e0 582 ij0 = 91 ; ij1 = 91 583 ii0 = 153 ; ii1 = 160 ; zmrs( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.80e0 584 ij0 = 90 ; ij1 = 90 585 ii0 = 153 ; ii1 = 160 ; zmrs( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.40e0 586 ij0 = 89 ; ij1 = 89 587 ii0 = 158 ; ii1 = 160 ; zmrs( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 1.e0 / 90.e0 588 ij0 = 88 ; ij1 = 88 589 ii0 = 160 ; ii1 = 163 ; zmrs( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.e0 579 590 ! Smooth transition from 0 at surface to 1./rday at the 18th level in Med and Red Sea 580 591 DO jk = 1, 17 … … 720 731 IF(lwp) WRITE(numout,*) '~~~~~~' 721 732 IF(lwp) WRITE(numout,*) 722 #if defined key_mpp 723 IF(lwp) WRITE(numout,cform_err)724 IF(lwp) WRITE(numout,*) ' Computation not yet implemented with key_mpp'725 IF(lwp) WRITE(numout,*) ' Rerun the code on another computer or '726 IF(lwp) WRITE(numout,*) ' create the "dist.coast.nc" file using IDL'727 nstop = nstop + 1728 #endif 733 IF( lk_mpp ) THEN 734 IF(lwp) WRITE(numout,cform_err) 735 IF(lwp) WRITE(numout,*) ' Computation not yet implemented with key_mpp_...' 736 IF(lwp) WRITE(numout,*) ' Rerun the code on another computer or ' 737 IF(lwp) WRITE(numout,*) ' create the "dist.coast.nc" file using IDL' 738 nstop = nstop + 1 739 ENDIF 729 740 730 741 pdct(:,:,:) = 0.e0 … … 874 885 !! Default key NO internal damping 875 886 !!---------------------------------------------------------------------- 876 LOGICAL , PUBLIC :: lk_tradmp = .FALSE. !internal damping flag887 LOGICAL , PUBLIC, PARAMETER :: lk_tradmp = .FALSE. !: internal damping flag 877 888 CONTAINS 878 889 SUBROUTINE tra_dmp( kt ) ! Empty routine 879 WRITE(*,*) kt890 WRITE(*,*) 'tra_dmp: You should not have seen this print! error?', kt 880 891 END SUBROUTINE tra_dmp 881 892 #endif -
trunk/NEMO/OPA_SRC/TRA/traldf_bilapg.F90
r3 r32 388 388 CONTAINS 389 389 SUBROUTINE tra_ldf_bilapg( kt ) ! Dummy routine 390 WRITE(*,*) kt390 WRITE(*,*) 'tra_ldf_bilapg: You should not have seen this print! error?', kt 391 391 END SUBROUTINE tra_ldf_bilapg 392 392 #endif -
trunk/NEMO/OPA_SRC/TRA/traldf_iso.F90
r3 r32 253 253 CONTAINS 254 254 SUBROUTINE tra_ldf_iso( kt ) ! Empty routine 255 WRITE(*,*) kt255 WRITE(*,*) 'tra_ldf_iso: You should not have seen this print! error?', kt 256 256 END SUBROUTINE tra_ldf_iso 257 257 #endif -
trunk/NEMO/OPA_SRC/TRA/traqsr.F90
r3 r32 25 25 PUBLIC tra_qsr_init ! routine called by opa.F90 26 26 27 LOGICAL, PUBLIC :: ln_traqsr = .TRUE. ! qsr flag (Default=T) 27 !! * Shared module variables 28 LOGICAL, PUBLIC :: ln_traqsr = .TRUE. !: qsr flag (Default=T) 28 29 29 30 !! * Module variables -
trunk/NEMO/OPA_SRC/TRA/trazdf_iso.F90
r3 r32 137 137 zsfw, zdis, zdjs, zdj1s, & 138 138 zavt, zavs 139 #if defined key_traldf_eiv 139 #if defined key_traldf_eiv || defined key_esopa 140 140 REAL(wp), DIMENSION(jpi,jpk) :: & 141 141 ztfwg, zsfwg … … 538 538 CONTAINS 539 539 SUBROUTINE tra_zdf_iso( kt ) ! empty routine 540 WRITE(*,*) kt540 WRITE(*,*) 'tra_zdf_iso: You should not have seen this print! error?', kt 541 541 END SUBROUTINE tra_zdf_iso 542 542 #endif -
trunk/NEMO/OPA_SRC/TRA/trazdf_iso_vopt.F90
r3 r32 686 686 CONTAINS 687 687 SUBROUTINE tra_zdf_iso_vopt( kt ) ! empty routine 688 WRITE(*,*) kt688 WRITE(*,*) 'tra_zdf_iso_vopt: You should not have seen this print! error?', kt 689 689 END SUBROUTINE tra_zdf_iso_vopt 690 690 #endif -
trunk/NEMO/OPA_SRC/TRA/zpshde.F90
r3 r32 250 250 REAL(wp), DIMENSION(:,:,:) :: ptem, psal, prd 251 251 REAL(wp) :: pgtu, pgsu, pgru, pgtv, pgsv, pgrv 252 WRITE(*,*) kt, ptem, psal, prd, pgtu, pgsu, pgru, pgtv, pgsv, pgrv 252 WRITE(*,*) 'zps_hde: You should not have seen this print! error?', & 253 kt, ptem, psal, prd, pgtu, pgsu, pgru, pgtv, pgsv, pgrv 253 254 END SUBROUTINE zps_hde 254 255 #endif
Note: See TracChangeset
for help on using the changeset viewer.