Changeset 473 for trunk/NEMO/OPA_SRC
- Timestamp:
- 2006-05-11T17:04:37+02:00 (18 years ago)
- Location:
- trunk/NEMO/OPA_SRC
- Files:
-
- 28 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/DOM/domhgr.F90
r434 r473 4 4 !! Ocean initialization : domain initialization 5 5 !!============================================================================== 6 !! History : ! 88-03 (G. Madec) 7 !! ! 91-11 (G. Madec) 8 !! ! 92-06 (M. Imbard) 9 !! ! 96-01 (G. Madec) terrain following coordinates 10 !! ! 97-02 (G. Madec) print mesh informations 11 !! ! 99-11 (M. Imbard) NetCDF format with IO-IPSL 12 !! ! 00-08 (D. Ludicone) Reduced section at Bab el Mandeb 13 !! ! 01-09 (M. Levy) eel config: grid in km, beta-plane 14 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module, namelist 15 !! 9.0 ! 04-01 (A.M. Treguier, J.M. Molines) Case 4 (Mercator mesh) 16 !! use of parameters in par_CONFIG-Rxx.h90, not in namelist 17 !! ! 04-05 (A. Koch-Larrouy) Add Gyre configuration 18 !!---------------------------------------------------------------------- 6 19 7 20 !!---------------------------------------------------------------------- … … 27 40 !! OPA 9.0 , LOCEAN-IPSL (2005) 28 41 !! $Header$ 29 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt42 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 30 43 !!---------------------------------------------------------------------- 31 44 … … 84 97 !! define ff: coriolis factor at f-point 85 98 !! 86 !! References : 87 !! Marti, Madec and Delecluse, 1992, j. geophys. res., in press. 88 !! 89 !! History : 90 !! ! 88-03 (G. Madec) 91 !! ! 91-11 (G. Madec) 92 !! ! 92-06 (M. Imbard) 93 !! ! 96-01 (G. Madec) terrain following coordinates 94 !! ! 97-02 (G. Madec) print mesh informations 95 !! ! 01-09 (M. Levy) eel config: grid in km, beta-plane 96 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module, namelist 97 !! 9.0 ! 04-01 (A.M. Treguier, J.M. Molines) Case 4 (Mercator mesh) 98 !! use of parameters in par_CONFIG-Rxx.h90, not in namelist 99 !! ! 04-05 (A. Koch-Larrouy) Add Gyre configuration 99 !! References : Marti, Madec and Delecluse, 1992, JGR 100 !! Madec, Imbard, 1996, Clim. Dyn. 100 101 !!---------------------------------------------------------------------- 101 !! * local declarations102 102 INTEGER :: ji, jj ! dummy loop indices 103 103 INTEGER :: ii0, ii1, ij0, ij1 ! temporary integers … … 164 164 IF(lwp) WRITE(numout,*) 165 165 IF(lwp) WRITE(numout,*) ' orca_r05: Reduced e2u at the Gibraltar Strait' 166 ! 167 ii0 = 627 ; ii1 = 628 ! Bosphore Strait (e2u = 10 km) 168 ij0 = 343 ; ij1 = 343 ; e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 10.e3 169 IF(lwp) WRITE(numout,*) 170 IF(lwp) WRITE(numout,*) ' orca_r05: Reduced e2u at the Bosphore Strait' 171 ! 172 ii0 = 93 ; ii1 = 94 ! Sumba Strait (e2u = 40 km) 173 ij0 = 232 ; ij1 = 232 ; e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 40.e3 174 IF(lwp) WRITE(numout,*) 175 IF(lwp) WRITE(numout,*) ' orca_r05: Reduced e2u at the Sumba Strait' 176 ! 177 ii0 = 103 ; ii1 = 103 ! Ombai Strait (e2u = 15 km) 178 ij0 = 232 ; ij1 = 232 ; e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 15.e3 179 IF(lwp) WRITE(numout,*) 180 IF(lwp) WRITE(numout,*) ' orca_r05: Reduced e2u at the Ombai Strait' 181 ! 182 ii0 = 15 ; ii1 = 15 ! Palk Strait (e2u = 10 km) 183 ij0 = 270 ; ij1 = 270 ; e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 10.e3 184 IF(lwp) WRITE(numout,*) 185 IF(lwp) WRITE(numout,*) ' orca_r05: Reduced e2u at the Palk Strait' 186 ! 187 ii0 = 87 ; ii1 = 87 ! Lombok Strait (e1v = 10 km) 188 ij0 = 232 ; ij1 = 233 ; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 10.e3 189 IF(lwp) WRITE(numout,*) 190 IF(lwp) WRITE(numout,*) ' orca_r05: Reduced e1v at the Lombok Strait' 191 ! 192 ! 193 ii0 = 662 ; ii1 = 662 ! Bab el Mandeb (e1v = 25 km) 194 ij0 = 276 ; ij1 = 276 ; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 25.e3 195 IF(lwp) WRITE(numout,*) 196 IF(lwp) WRITE(numout,*) ' orca_r05: Reduced e1v at the Bab el Mandeb' 166 197 ! 167 198 ENDIF … … 269 300 IF(lwp) WRITE(numout,*) ' geographical mesh on the sphere, MERCATOR type' 270 301 IF(lwp) WRITE(numout,*) ' longitudinal/latitudinal spacing given by ppe1_deg' 271 IF ( ppgphi0 == -90 ) THEN 272 IF(lwp) WRITE(numout,*) ' Mercator grid cannot start at south pole !!!! ' 273 IF(lwp) WRITE(numout,*) ' We stop ' 274 STOP 275 ENDIF 302 IF ( ppgphi0 == -90 ) CALL ctl_stop( ' Mercator grid cannot start at south pole !!!! ' ) 276 303 277 304 ! Find index corresponding to the equator, given the grid spacing e1_deg … … 368 395 369 396 CASE DEFAULT 370 IF(lwp) WRITE(numout,cform_err) 371 IF(lwp) WRITE(numout,*) ' bad flag value for jphgr_msh = ', jphgr_msh 372 nstop = nstop + 1 397 WRITE(ctmp1,*) ' bad flag value for jphgr_msh = ', jphgr_msh 398 CALL ctl_stop( ctmp1 ) 373 399 374 400 END SELECT … … 480 506 IF( nperio == 2 ) THEN 481 507 znorme = SQRT( SUM( gphiu(:,2) * gphiu(:,2) ) ) / FLOAT( jpi ) 482 IF( znorme > 1.e-13 ) THEN 483 IF(lwp) WRITE(numout,cform_err) 484 IF(lwp) WRITE(numout,*) ' ===>>>> : symmetrical condition: rerun with good equator line' 485 nstop = nstop + 1 486 ENDIF 508 IF( znorme > 1.e-13 ) CALL ctl_stop( ' ===>>>> : symmetrical condition: rerun with good equator line' ) 487 509 ENDIF 488 510 … … 499 521 !! or semi-analytical method. It is read in a NetCDF file. 500 522 !! 501 !! References :502 !! Marti, Madec and Delecluse, 1992, JGR, 97, 12,763-12,766.503 !! Madec, Imbard, 1996, Clim. Dyn., 12, 381-388.504 !!505 !! History :506 !! ! (O. Marti) Original code507 !! ! 91-03 (G. Madec)508 !! ! 92-07 (M. Imbard)509 !! ! 99-11 (M. Imbard) NetCDF format with IOIPSL510 !! ! 00-08 (D. Ludicone) Reduced section at Bab el Mandeb511 !! 8.5 ! 02-06 (G. Madec) F90: Free form512 523 !!---------------------------------------------------------------------- 513 !! * Modules used 514 USE ioipsl 515 516 !! * Local declarations 517 LOGICAL :: llog = .FALSE. 518 CHARACTER(len=21) :: clname 519 INTEGER :: ji, jj ! dummy loop indices 520 INTEGER :: inum ! temporary logical unit 521 INTEGER :: ilev, itime ! temporary integers 522 REAL(wp) :: zdt, zdate0 ! temporary scalars 523 REAL(wp) :: zdept(1) ! temporary workspace 524 REAL(wp), DIMENSION(jpidta,jpjdta) :: & 525 zlamt, zphit, zdta ! temporary workspace (NetCDF read) 524 USE iom 525 526 INTEGER :: inum ! temporary logical unit 526 527 !!---------------------------------------------------------------------- 527 clname = 'coordinates'528 #if defined key_agrif529 if ( .NOT. Agrif_Root() ) then530 clname = TRIM(Agrif_CFixed())//'_'//TRIM(clname)531 endif532 #endif533 534 535 ! 1. Read of the grid coordinates and scale factors536 ! -------------------------------------------------537 528 538 529 IF(lwp) THEN 539 530 WRITE(numout,*) 540 531 WRITE(numout,*) 'hgr_read : read the horizontal coordinates' 541 WRITE(numout,*) '~~~~~~~~ ~~~jpiglo = ', jpiglo, ' jpjglo = ', jpjglo, ' jpk = ', jpk532 WRITE(numout,*) '~~~~~~~~ jpiglo = ', jpiglo, ' jpjglo = ', jpjglo, ' jpk = ', jpk 542 533 ENDIF 543 544 ! read the file 545 itime = 0 546 ilev = 1 547 zlamt(:,:) = 0.e0 548 zphit(:,:) = 0.e0 549 CALL restini( clname, jpidta, jpjdta, zlamt , zphit, & 550 & ilev , zdept , 'NONE', & 551 & itime , zdate0, zdt , inum, domain_id=nidom ) 552 553 CALL restget( inum, 'glamt', jpidta, jpjdta, 1, itime, llog, zdta ) 554 DO jj = 1, nlcj 555 DO ji = 1, nlci 556 glamt(ji,jj) = zdta(mig(ji),mjg(jj)) 557 END DO 558 END DO 559 CALL restget( inum, 'glamu', jpidta, jpjdta, 1, itime, llog, zdta ) 560 DO jj = 1, nlcj 561 DO ji = 1, nlci 562 glamu(ji,jj) = zdta(mig(ji),mjg(jj)) 563 END DO 564 END DO 565 CALL restget( inum, 'glamv', jpidta, jpjdta, 1, itime, llog, zdta ) 566 DO jj = 1, nlcj 567 DO ji = 1, nlci 568 glamv(ji,jj) = zdta(mig(ji),mjg(jj)) 569 END DO 570 END DO 571 CALL restget( inum, 'glamf', jpidta, jpjdta, 1, itime, llog, zdta ) 572 DO jj = 1, nlcj 573 DO ji = 1, nlci 574 glamf(ji,jj) = zdta(mig(ji),mjg(jj)) 575 END DO 576 END DO 577 CALL restget( inum, 'gphit', jpidta, jpjdta, 1, itime, llog, zdta ) 578 DO jj = 1, nlcj 579 DO ji = 1, nlci 580 gphit(ji,jj) = zdta(mig(ji),mjg(jj)) 581 END DO 582 END DO 583 CALL restget( inum, 'gphiu', jpidta, jpjdta, 1, itime, llog, zdta ) 584 DO jj = 1, nlcj 585 DO ji = 1, nlci 586 gphiu(ji,jj) = zdta(mig(ji),mjg(jj)) 587 END DO 588 END DO 589 CALL restget( inum, 'gphiv', jpidta, jpjdta, 1, itime, llog, zdta ) 590 DO jj = 1, nlcj 591 DO ji = 1, nlci 592 gphiv(ji,jj) = zdta(mig(ji),mjg(jj)) 593 END DO 594 END DO 595 CALL restget( inum, 'gphif', jpidta, jpjdta, 1, itime, llog, zdta ) 596 DO jj = 1, nlcj 597 DO ji = 1, nlci 598 gphif(ji,jj) = zdta(mig(ji),mjg(jj)) 599 END DO 600 END DO 601 CALL restget( inum, 'e1t', jpidta, jpjdta, 1, itime, llog, zdta ) 602 DO jj = 1, nlcj 603 DO ji = 1, nlci 604 e1t (ji,jj) = zdta(mig(ji),mjg(jj)) 605 END DO 606 END DO 607 CALL restget( inum, 'e1u', jpidta, jpjdta, 1, itime, llog, zdta ) 608 DO jj = 1, nlcj 609 DO ji = 1, nlci 610 e1u (ji,jj) = zdta(mig(ji),mjg(jj)) 611 END DO 612 END DO 613 CALL restget( inum, 'e1v', jpidta, jpjdta, 1, itime, llog, zdta ) 614 DO jj = 1, nlcj 615 DO ji = 1, nlci 616 e1v (ji,jj) = zdta(mig(ji),mjg(jj)) 617 END DO 618 END DO 619 CALL restget( inum, 'e1f', jpidta, jpjdta, 1, itime, llog, zdta ) 620 DO jj = 1, nlcj 621 DO ji = 1, nlci 622 e1f (ji,jj) = zdta(mig(ji),mjg(jj)) 623 END DO 624 END DO 625 CALL restget( inum, 'e2t', jpidta, jpjdta, 1, itime, llog, zdta ) 626 DO jj = 1, nlcj 627 DO ji = 1, nlci 628 e2t (ji,jj) = zdta(mig(ji),mjg(jj)) 629 END DO 630 END DO 631 CALL restget( inum, 'e2u', jpidta, jpjdta, 1, itime, llog, zdta ) 632 DO jj = 1, nlcj 633 DO ji = 1, nlci 634 e2u (ji,jj) = zdta(mig(ji),mjg(jj)) 635 END DO 636 END DO 637 CALL restget( inum, 'e2v', jpidta, jpjdta, 1, itime, llog, zdta ) 638 DO jj = 1, nlcj 639 DO ji = 1, nlci 640 e2v (ji,jj) = zdta(mig(ji),mjg(jj)) 641 END DO 642 END DO 643 CALL restget( inum, 'e2f', jpidta, jpjdta, 1, itime, llog, zdta ) 644 DO jj = 1, nlcj 645 DO ji = 1, nlci 646 e2f (ji,jj) = zdta(mig(ji),mjg(jj)) 647 END DO 648 END DO 649 650 CALL restclo( inum ) 651 652 ! set extra rows add in mpp to none zero values 653 DO jj = nlcj+1, jpj 654 DO ji = 1, nlci 655 glamt(ji,jj) = glamt(ji,1) ; gphit(ji,jj) = gphit(ji,1) 656 glamu(ji,jj) = glamu(ji,1) ; gphiu(ji,jj) = gphiu(ji,1) 657 glamv(ji,jj) = glamv(ji,1) ; gphiv(ji,jj) = gphiv(ji,1) 658 glamf(ji,jj) = glamf(ji,1) ; gphif(ji,jj) = gphif(ji,1) 659 e1t (ji,jj) = e1t (ji,1) ; e2t (ji,jj) = e2t (ji,1) 660 e1u (ji,jj) = e1u (ji,1) ; e2u (ji,jj) = e2u (ji,1) 661 e1v (ji,jj) = e1v (ji,1) ; e2v (ji,jj) = e2v (ji,1) 662 e1f (ji,jj) = e1f (ji,1) ; e2f (ji,jj) = e2f (ji,1) 663 END DO 664 END DO 665 666 ! set extra columns add in mpp to none zero values 667 DO ji = nlci+1, jpi 668 glamt(ji,:) = glamt(1,:) ; gphit(ji,:) = gphit(1,:) 669 glamu(ji,:) = glamu(1,:) ; gphiu(ji,:) = gphiu(1,:) 670 glamv(ji,:) = glamv(1,:) ; gphiv(ji,:) = gphiv(1,:) 671 glamf(ji,:) = glamf(1,:) ; gphif(ji,:) = gphif(1,:) 672 e1t (ji,:) = e1t (1,:) ; e2t (ji,:) = e2t (1,:) 673 e1u (ji,:) = e1u (1,:) ; e2u (ji,:) = e2u (1,:) 674 e1v (ji,:) = e1v (1,:) ; e2v (ji,:) = e2v (1,:) 675 e1f (ji,:) = e1f (1,:) ; e2f (ji,:) = e2f (1,:) 676 END DO 677 678 END SUBROUTINE hgr_read 679 534 535 CALL iom_open( 'coordinates', inum ) 536 537 CALL iom_get( inum, jpdom_data, 'glamt', glamt ) 538 CALL iom_get( inum, jpdom_data, 'glamu', glamu ) 539 CALL iom_get( inum, jpdom_data, 'glamv', glamv ) 540 CALL iom_get( inum, jpdom_data, 'glamf', glamf ) 541 542 CALL iom_get( inum, jpdom_data, 'gphit', gphit ) 543 CALL iom_get( inum, jpdom_data, 'gphiu', gphiu ) 544 CALL iom_get( inum, jpdom_data, 'gphiv', gphiv ) 545 CALL iom_get( inum, jpdom_data, 'gphif', gphif ) 546 547 CALL iom_get( inum, jpdom_data, 'e1t', e1t ) 548 CALL iom_get( inum, jpdom_data, 'e1u', e1u ) 549 CALL iom_get( inum, jpdom_data, 'e1v', e1v ) 550 CALL iom_get( inum, jpdom_data, 'e1f', e1f ) 551 552 CALL iom_get( inum, jpdom_data, 'e2t', e2t ) 553 CALL iom_get( inum, jpdom_data, 'e2u', e2u ) 554 CALL iom_get( inum, jpdom_data, 'e2v', e2v ) 555 CALL iom_get( inum, jpdom_data, 'e2f', e2f ) 556 557 CALL iom_close( inum ) 558 559 END SUBROUTINE hgr_read 560 680 561 !!====================================================================== 681 562 END MODULE domhgr -
trunk/NEMO/OPA_SRC/DOM/domzgr.F90
r454 r473 93 93 IF( ln_zps ) ioptio = ioptio + 1 94 94 IF( ln_sco ) ioptio = ioptio + 1 95 IF ( ioptio /= 1 ) THEN 96 IF(lwp) WRITE(numout,cform_err) 97 IF(lwp) WRITE(numout,*) ' none or several vertical coordinate options used' 98 nstop = nstop + 1 99 ENDIF 95 IF ( ioptio /= 1 ) CALL ctl_stop( ' none or several vertical coordinate options used' ) 100 96 101 97 IF( ln_zco ) THEN 102 98 IF(lwp) WRITE(numout,*) ' z-coordinate with reduced incore memory requirement' 103 IF( ln_zps .OR. ln_sco ) THEN 104 IF(lwp) WRITE(numout,cform_err) 105 IF(lwp) WRITE(numout,*) ' reduced memory with zps or sco option is impossible' 106 nstop = nstop + 1 107 ENDIF 99 IF( ln_zps .OR. ln_sco ) CALL ctl_stop( ' reduced memory with zps or sco option is impossible' ) 108 100 ENDIF 109 101 … … 264 256 265 257 DO jk = 1, jpk 266 IF( e3w_0(jk) <= 0. .OR. e3t_0(jk) <= 0. ) THEN 267 IF(lwp) WRITE(numout,cform_err) 268 IF(lwp) WRITE(numout,*) ' e3w or e3t =< 0 ' 269 nstop = nstop + 1 270 ENDIF 271 IF( gdepw_0(jk) < 0. .OR. gdept_0(jk) < 0.) THEN 272 IF(lwp) WRITE(numout,cform_err) 273 IF(lwp) WRITE(numout,*) ' gdepw or gdept < 0 ' 274 nstop = nstop + 1 275 ENDIF 258 IF( e3w_0(jk) <= 0. .OR. e3t_0(jk) <= 0. ) CALL ctl_stop( ' e3w or e3t =< 0 ' ) 259 IF( gdepw_0(jk) < 0. .OR. gdept_0(jk) < 0. ) CALL ctl_stop( ' gdepw or gdept < 0 ' ) 276 260 END DO 277 261 … … 318 302 !!---------------------------------------------------------------------- 319 303 !! * Modules used 320 USE io ipsl304 USE iom 321 305 322 306 !! * Local declarations 323 CHARACTER (len=18) :: clname ! temporary characters324 LOGICAL :: llbon ! check the existence of bathy files325 307 INTEGER :: ji, jj, jl, jk ! dummy loop indices 326 INTEGER :: inum = 11! temporary logical unit308 INTEGER :: inum ! temporary logical unit 327 309 INTEGER :: & 328 ipi, ipj, ipk, & ! temporary integers 329 itime, ih, & ! " " 330 ii_bump, ij_bump ! bump center position 331 INTEGER, DIMENSION (1) :: istep 310 ii_bump, ij_bump, ih ! bump center position 332 311 INTEGER , DIMENSION(jpidta,jpjdta) :: & 333 312 idta ! global domain integer data 334 313 REAL(wp) :: & 335 314 r_bump, h_bump, h_oce, & ! bump characteristics 336 zi, zj, z date0, zdt, zh! temporary scalars315 zi, zj, zh ! temporary scalars 337 316 REAL(wp), DIMENSION(jpidta,jpjdta) :: & 338 zlamt, zphit, & ! 2D workspace (NetCDF read)339 317 zdta ! global domain scalar data 340 REAL(wp), DIMENSION(jpk) :: &341 zdept ! 1D workspace (NetCDF read)342 318 !!---------------------------------------------------------------------- 343 319 … … 427 403 ENDIF 428 404 405 ! ======================================= 406 ! local domain level and meter bathymetry (mbathy,bathy) 407 ! ======================================= 408 409 mbathy(:,:) = 0 ! set to zero extra halo points 410 bathy (:,:) = 0.e0 ! (require for mpp case) 411 412 DO jj = 1, nlcj ! interior values 413 DO ji = 1, nlci 414 mbathy(ji,jj) = idta( mig(ji), mjg(jj) ) 415 bathy (ji,jj) = zdta( mig(ji), mjg(jj) ) 416 END DO 417 END DO 418 429 419 ! ! =============== ! 430 420 ELSEIF( ntopo == 1 ) THEN ! read in file ! 431 421 ! ! =============== ! 432 422 433 clname = 'bathy_level.nc' ! Level bathymetry 434 #if defined key_agrif 435 IF( .NOT. Agrif_Root() ) THEN 436 clname = TRIM(Agrif_CFixed())//'_'//TRIM(clname) 437 ENDIF 438 #endif 439 INQUIRE( FILE=clname, EXIST=llbon ) 440 IF( llbon ) THEN 441 IF(lwp) WRITE(numout,*) 442 IF(lwp) WRITE(numout,*) ' read level bathymetry in ', clname 443 IF(lwp) WRITE(numout,*) 444 ipi = jpidta ; ipj = jpjdta 445 ipk = 1 ; itime = 1 ; zdt = rdt 446 CALL flinopen( clname, 1, jpidta, 1, jpjdta, .FALSE., & 447 & ipi, ipj, ipk, zlamt, zphit, zdept, itime, istep, zdate0, zdt, inum ) 448 CALL flinget( inum, 'Bathy_level', jpidta, jpjdta, 1, & 449 & itime, 1, 1, 1, jpidta, 1, jpjdta, zdta(:,:) ) 450 CALL flinclo( inum ) 451 idta(:,:) = zdta(:,:) 452 ELSE 423 CALL iom_open ( 'bathy_level.nc', inum ) ! Level bathymetry 424 IF ( inum > 0 ) THEN 425 CALL iom_get ( inum, jpdom_data, 'Bathy_level', bathy ) 426 CALL iom_close (inum) 427 mbathy(:,:) = INT( bathy(:,:) ) 428 ELSE 453 429 IF( ln_zco ) THEN 454 IF(lwp) WRITE(numout,cform_err) 455 IF(lwp) WRITE(numout,*)' zgr_bat : unable to read the file ', clname 456 nstop = nstop + 1 430 CALL ctl_stop( ' zgr_bat : unable to read the file ' ) 457 431 ELSE 458 432 IF(lwp) WRITE(numout,*)' zgr_bat : bathy_level will be computed from bathy_meter' 459 idta(:,:) = jpkm1 ! initialisation 433 nstop = nstop - 1 ! supress the error count for opening 'bathy_level.nc' 434 mbathy(:,:) = jpkm1 460 435 ENDIF 461 436 ENDIF 462 437 463 clname = 'bathy_meter.nc' ! meter bathymetry 464 #if defined key_agrif 465 IF( .NOT. Agrif_Root() ) THEN 466 clname = TRIM(Agrif_CFixed())//'_'//TRIM(clname) 467 ENDIF 468 #endif 469 INQUIRE( FILE=clname, EXIST=llbon ) 470 IF( llbon ) THEN 471 IF(lwp) WRITE(numout,*) 472 IF(lwp) WRITE(numout,*) ' read meter bathymetry in ', clname 473 IF(lwp) WRITE(numout,*) 474 ipi = jpidta ; ipj = jpjdta 475 ipk = 1 ; itime = 1 ; zdt = rdt 476 CALL flinopen( clname, 1, jpidta, 1, jpjdta, .FALSE., & 477 & ipi, ipj, ipk, zlamt, zphit, zdept, itime, istep, zdate0, zdt, inum ) 478 CALL flinget( inum, 'Bathymetry', jpidta, jpjdta, 1, & 479 & itime, 1, 1, 1, jpidta, 1, jpjdta, zdta(:,:) ) 480 CALL flinclo( inum ) 481 ELSE 438 CALL iom_open ( 'bathy_meter.nc', inum ) ! meter bathymetry 439 IF ( inum > 0 ) THEN 440 CALL iom_get ( inum, jpdom_data, 'Bathymetry', bathy ) 441 CALL iom_close (inum) 442 ELSE 482 443 IF( ln_zps .OR. ln_sco ) THEN 483 IF(lwp) WRITE(numout,cform_err) 484 IF(lwp) WRITE(numout,*)' zgr_bat : unable to read the file', clname 485 nstop = nstop + 1 444 CALL ctl_stop( ' zgr_bat : unable to read the file ' ) 486 445 ELSE 487 zdta(:,:) = 0.e0 446 bathy(:,:) = 0.e0 ! initialisation 447 nstop = nstop - 1 ! supress the error count for opening 'bathy_level.nc' 488 448 IF(lwp) WRITE(numout,*)' zgr_bat : bathy_meter not found, but not used, bathy array set to zero' 489 449 ENDIF … … 492 452 ELSE ! error ! 493 453 ! ! =============== ! 494 IF(lwp) WRITE(numout,cform_err) 495 IF(lwp) WRITE(numout,*) ' parameter , ntopo = ', ntopo 496 nstop = nstop + 1 497 ENDIF 498 499 500 ! ======================================= 501 ! local domain level and meter bathymetry (mbathy,bathy) 502 ! ======================================= 503 504 mbathy(:,:) = 0 ! set to zero extra halo points 505 bathy (:,:) = 0.e0 ! (require for mpp case) 506 507 DO jj = 1, nlcj ! interior values 508 DO ji = 1, nlci 509 mbathy(ji,jj) = idta( mig(ji), mjg(jj) ) 510 bathy (ji,jj) = zdta( mig(ji), mjg(jj) ) 511 END DO 512 END DO 513 514 write(numout,*) ' MIN val mbathy 2 ', MINVAL( mbathy(:,:) ), ' MAX ', MAXVAL( mbathy(:,:) ) 515 454 WRITE(ctmp1,*) ' parameter , ntopo = ', ntopo 455 CALL ctl_stop( ' zgr_bat : '//trim(ctmp1) ) 456 ENDIF 516 457 517 458 ! ======================= … … 531 472 ENDIF 532 473 474 #if defined key_orca_lev10 475 ! 10 time the vertical resolution 476 mbathy(:,:) = 10 * mbathy(:,:) 477 IF(lwp) WRITE(numout,*) ' ATTENTION: 300 niveaux avec bathy levels "vraie?"' 478 #endif 533 479 ! =========== 534 480 ! Zoom domain … … 1221 1167 WRITE(numout,9430) (jk,fsdept(1,1,jk),fsdepw(1,1,jk), & 1222 1168 fse3t (1,1,jk),fse3w (1,1,jk),jk=1,jpk) 1223 WRITE(numout,*) 1224 WRITE(numout,*) ' domzgr: vertical coordinates : point (20,20,k) bathy = ', bathy(20,20), hbatt(20,20) 1225 WRITE(numout,*) ' ~~~~~~ --------------------' 1226 WRITE(numout,9420) 1227 WRITE(numout,9430) (jk,fsdept(20,20,jk),fsdepw(20,20,jk), & 1228 fse3t (20,20,jk),fse3w (20,20,jk),jk=1,jpk) 1229 WRITE(numout,*) 1230 WRITE(numout,*) ' domzgr: vertical coordinates : point (100,74,k) bathy = ', bathy(100,74), hbatt(100,74) 1231 WRITE(numout,*) ' ~~~~~~ --------------------' 1232 WRITE(numout,9420) 1233 WRITE(numout,9430) (jk,fsdept(100,74,jk),fsdepw(100,74,jk), & 1234 fse3t (100,74,jk),fse3w (100,74,jk),jk=1,jpk) 1169 DO jj = mj0(20), mj1(20) 1170 DO ji = mi0(20), mi1(20) 1171 WRITE(numout,*) 1172 WRITE(numout,*) ' domzgr: vertical coordinates : point (20,20,k) bathy = ', bathy(ji,jj), hbatt(ji,jj) 1173 WRITE(numout,*) ' ~~~~~~ --------------------' 1174 WRITE(numout,9420) 1175 WRITE(numout,9430) (jk,fsdept(ji,jj,jk),fsdepw(ji,jj,jk), & 1176 & fse3t (ji,jj,jk),fse3w (ji,jj,jk),jk=1,jpk) 1177 END DO 1178 END DO 1179 DO jj = mj0(74), mj1(74) 1180 DO ji = mi0(100), mi1(100) 1181 WRITE(numout,*) 1182 WRITE(numout,*) ' domzgr: vertical coordinates : point (100,74,k) bathy = ', bathy(ji,jj), hbatt(ji,jj) 1183 WRITE(numout,*) ' ~~~~~~ --------------------' 1184 WRITE(numout,9420) 1185 WRITE(numout,9430) (jk,fsdept(ji,jj,jk),fsdepw(ji,jj,jk), & 1186 & fse3t (ji,jj,jk),fse3w (ji,jj,jk),jk=1,jpk) 1187 END DO 1188 END DO 1235 1189 ENDIF 1236 1190 -
trunk/NEMO/OPA_SRC/DTA/dtasal.F90
r459 r473 14 14 USE dom_oce ! ocean space and time domain 15 15 USE in_out_manager ! I/O manager 16 USE phycst ! physical constants 16 17 USE daymod ! calendar 18 #if defined key_orca_lev10 19 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 20 #endif 17 21 18 22 IMPLICIT NONE … … 29 33 !! * Module variables 30 34 INTEGER :: & 31 nlecsa = 0, & ! switch for the first read 32 nsal1 , & ! first record used 33 nsal2 ! second record used 35 numsdt, & !: logical unit for data salinity 36 nsal1, nsal2 ! first and second record used 34 37 REAL(wp), DIMENSION(jpi,jpj,jpk,2) :: & 35 38 saldta ! salinity data at two consecutive times … … 50 53 51 54 SUBROUTINE dta_sal( kt ) 52 !!---------------------------------------------------------------------- 53 !! *** ROUTINE dta_sal *** 54 !! 55 !! ** Purpose : Reads monthly salinity data 56 !! 57 !! ** Method : - Read on unit numsdt the monthly salinity data interpo- 58 !! lated onto the model grid. 59 !! - At each time step, a linear interpolation is applied 60 !! between two monthly values. 61 !! 62 !! History : 63 !! ! 91-03 () Original code 64 !! ! 92-07 (M. Imbard) 65 !! 9.0 ! 02-06 (G. Madec) F90: Free form and module 66 !!---------------------------------------------------------------------- 67 !! * Modules used 68 USE ioipsl 69 70 !! * Arguments 71 INTEGER, INTENT(in) :: kt ! ocean time step 72 73 !! * Local declarations 74 CHARACTER (len=32) :: clname 75 76 INTEGER, PARAMETER :: jpmois = 12, jpf = 1 77 INTEGER :: ji, jj, jl, jkk ! dummy loop indicies 78 REAL(wp), DIMENSION(jpk,2) :: & 79 zsaldta ! auxiliary array for interpolation 80 81 INTEGER :: & 82 imois, iman, ik, i15, & ! temporary integers 83 ipi, ipj, ipk, itime ! " " 84 #if defined key_tradmp 85 INTEGER :: & 86 jk, il0, il1, & ! temporary integers 87 ii0, ii1, ij0, ij1 ! " " 88 #endif 89 INTEGER, DIMENSION(jpmois) :: istep 90 REAL(wp) :: & 91 zxy, zl, zdate0 92 REAL(wp), DIMENSION(jpi,jpj) :: zlon, zlat 93 REAL(wp), DIMENSION(jpk) :: zlev 94 !!---------------------------------------------------------------------- 95 55 !!---------------------------------------------------------------------- 56 !! *** ROUTINE dta_sal *** 57 !! 58 !! ** Purpose : Reads monthly salinity data 59 !! 60 !! ** Method : - Read on unit numsdt the monthly salinity data interpo- 61 !! lated onto the model grid. 62 !! - At each time step, a linear interpolation is applied 63 !! between two monthly values. 64 !! 65 !! History : 66 !! ! 91-03 () Original code 67 !! ! 92-07 (M. Imbard) 68 !! 9.0 ! 02-06 (G. Madec) F90: Free form and module 69 !!---------------------------------------------------------------------- 70 !! * Modules used 71 USE iom 72 73 !! * Arguments 74 INTEGER, INTENT(in) :: kt ! ocean time step 75 76 !! * Local declarations 77 78 INTEGER :: ji, jj, jk, jl, jkk ! dummy loop indicies 79 INTEGER :: & 80 imois, iman, i15, ik ! temporary integers 81 # if defined key_tradmp 82 INTEGER :: & 83 il0, il1, ii0, ii1, ij0, ij1 ! temporary integers 84 # endif 85 REAL(wp) :: zxy, zl 86 #if defined key_orca_lev10 87 REAL(wp), DIMENSION(jpi,jpj,jpkdta,2) :: zsal 88 INTEGER :: ikr, ikw, ikt, jjk 89 REAL(wp) :: zfac 90 #endif 91 REAL(wp), DIMENSION(jpk,2) :: & 92 zsaldta ! auxiliary array for interpolation 93 !!---------------------------------------------------------------------- 94 96 95 ! 0. Initialization 97 96 ! ----------------- 98 99 iman = jpmois 97 98 iman = INT( raamo ) 99 !!! better but change the results i15 = INT( 2*FLOAT( nday ) / ( FLOAT( nobis(nmonth) ) + 0.5 ) ) 100 100 i15 = nday / 16 101 102 101 imois = nmonth + i15 - 1 103 102 IF( imois == 0 ) imois = iman 104 105 itime = jpmois 106 ipi=jpiglo 107 ipj=jpjglo 108 ipk = jpk 109 103 110 104 ! 1. First call kt=nit000 111 105 ! ----------------------- 112 113 IF( kt == nit000 .AND. nlecsa == 0 ) THEN 114 nsal1 = 0 115 IF(lwp) THEN 116 WRITE(numout,*) 117 WRITE(numout,*) ' dta_sal : monthly salinity data in NetCDF file' 118 WRITE(numout,*) ' ~~~~~~~' 119 WRITE(numout,*) 120 ENDIF 121 122 ! open file 123 124 clname = 'data_1m_salinity_nomask' 125 #if defined key_agrif 126 if ( .NOT. Agrif_Root() ) then 127 clname = TRIM(Agrif_CFixed())//'_'//TRIM(clname) 128 endif 129 #endif 130 CALL flinopen(TRIM(clname),mig(1),nlci,mjg(1),nlcj,.FALSE. & 131 ,ipi,ipj,ipk,zlon,zlat,zlev,itime,istep,zdate0,rdt,numsdt) 132 133 ! title, dimensions and tests 134 135 IF( itime /= jpmois ) THEN 136 IF(lwp) THEN 137 WRITE(numout,*) 138 WRITE(numout,*) 'problem with time coordinates' 139 WRITE(numout,*) ' itime ',itime,' jpmois ',jpmois 140 ENDIF 141 STOP 'dta_sal' 142 ENDIF 143 IF( ipi /= jpidta .OR. ipj /= jpjdta .OR. ipk /= jpk ) THEN 144 IF(lwp) THEN 145 WRITE(numout,*) 146 WRITE(numout,*) 'problem with dimensions' 147 WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta 148 WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta 149 WRITE(numout,*) ' ipk ',ipk,' jpk ',jpk 150 ENDIF 151 STOP 'dta_sal' 152 ENDIF 153 IF(lwp)WRITE(numout,*) itime,istep,zdate0,rdt,numsdt 154 106 107 IF( kt == nit000 ) THEN 108 109 nsal1 = 0 ! initializations 110 IF(lwp) WRITE(numout,*) ' dta_sal : monthly salinity data in NetCDF file' 111 CALL iom_open ( 'data_1m_salinity_nomask', numsdt ) 112 155 113 ENDIF 156 157 114 115 158 116 ! 2. Read monthly file 159 117 ! ------------------- 160 161 IF( ( kt == nit000 .AND. nlecsa == 0) .OR. imois /= nsal1 ) THEN 162 nlecsa = 1 163 164 ! 2.1 Calendar computation 165 166 nsal1 = imois ! first file record used 167 nsal2 = nsal1 + 1 ! last file record used 168 nsal1 = MOD( nsal1, iman ) 169 IF( nsal1 == 0 ) nsal1 = iman 170 nsal2 = MOD( nsal2, iman ) 171 IF( nsal2 == 0 ) nsal2 = iman 172 IF(lwp) WRITE(numout,*) 'first record file used nsal1 ', nsal1 173 IF(lwp) WRITE(numout,*) 'last record file used nsal2 ', nsal2 174 175 ! 2.3 Read monthly salinity data Levitus 176 177 CALL flinget(numsdt,'vosaline',jpidta,jpjdta,jpk,jpmois,nsal1, & 178 nsal1,mig(1),nlci,mjg(1),nlcj,saldta(1:nlci,1:nlcj,1:jpk,1)) 179 180 CALL flinget(numsdt,'vosaline',jpidta,jpjdta,jpk,jpmois,nsal2, & 181 nsal2,mig(1),nlci,mjg(1),nlcj,saldta(1:nlci,1:nlcj,1:jpk,2)) 182 183 184 IF(lwp) THEN 185 WRITE(numout,*) 186 WRITE(numout,*) ' read Levitus salinity ok' 187 WRITE(numout,*) 188 ENDIF 189 118 119 IF( kt == nit000 .OR. imois /= nsal1 ) THEN 120 121 ! 2.1 Calendar computation 122 123 nsal1 = imois ! first file record used 124 nsal2 = nsal1 + 1 ! last file record used 125 nsal1 = MOD( nsal1, iman ) 126 IF( nsal1 == 0 ) nsal1 = iman 127 nsal2 = MOD( nsal2, iman ) 128 IF( nsal2 == 0 ) nsal2 = iman 129 IF(lwp) WRITE(numout,*) 'first record file used nsal1 ', nsal1 130 IF(lwp) WRITE(numout,*) 'last record file used nsal2 ', nsal2 131 132 ! 2.3 Read monthly salinity data Levitus 133 134 #if defined key_orca_lev10 135 if (lk_zps) stop 136 zsal(:,:,:,:) = 0. 137 CALL iom_get (numsdt,jpdom_data,'vosaline',zsal(:,:,:,1),nsal1) 138 CALL iom_get (numsdt,jpdom_data,'vosaline',zsal(:,:,:,2),nsal2) 139 #else 140 CALL iom_get (numsdt,jpdom_data,'vosaline',saldta(:,:,:,1),nsal1) 141 CALL iom_get (numsdt,jpdom_data,'vosaline',saldta(:,:,:,2),nsal2) 142 #endif 143 144 IF(lwp) THEN 145 WRITE(numout,*) 146 WRITE(numout,*) ' read Levitus salinity ok' 147 WRITE(numout,*) 148 ENDIF 149 190 150 #if defined key_tradmp 191 IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN 192 193 ! ! ======================= 194 ! ! ORCA_R2 configuration 195 ! ! ======================= 196 ij0 = 101 ; ij1 = 109 197 ii0 = 141 ; ii1 = 155 198 DO jj = mj0(ij0), mj1(ij1) ! Reduced salinity in the Alboran Sea 199 DO ji = mi0(ii0), mi1(ii1) 200 DO jk = 13, 13 201 saldta(ji,jj,jk,:) = saldta(ji,jj,jk,:) - 0.15 202 END DO 203 DO jk = 14, 15 204 saldta(ji,jj,jk,:) = saldta(ji,jj,jk,:) - 0.25 205 END DO 206 DO jk = 16, 17 207 saldta(ji,jj,jk,:) = saldta(ji,jj,jk,:) - 0.30 208 END DO 209 DO jk = 18, 25 210 saldta(ji,jj,jk,:) = saldta(ji,jj,jk,:) - 0.35 211 END DO 212 END DO 213 END DO 214 IF( n_cla == 1 ) THEN 215 ! ! New salinity profile at Gibraltar 216 il0 = 138 ; il1 = 138 217 ij0 = 101 ; ij1 = 101 218 ii0 = 139 ; ii1 = 139 219 saldta( mi0(ii0):mi1(ii1), mj0(ij0):mj1(ij1) , : , : ) = & 220 & saldta( mi0(il0):mi1(il1) , mj0(ij0):mj1(ij1) , : , : ) 221 ij0 = 101 ; ij1 = 101 222 saldta( mi0(ii0):mi1(ii1), mj0(ij0):mj1(ij1) , : , : ) = & 223 & saldta( mi0(il0):mi1(il1) , mj0(ij0):mj1(ij1) , : , : ) 224 il0 = 138 ; il1 = 138 225 ij0 = 101 ; ij1 = 102 226 ii0 = 139 ; ii1 = 139 227 DO jl = mi0(il0), mi1(il1) ! New salinity profile at Gibraltar 228 DO jj = mj0(ij0), mj1(ij1) 229 DO ji = mi0(ii0), mi1(ii1) 230 saldta(ji,jj,:,:) = saldta(jl,jj,:,:) 231 END DO 232 END DO 233 END DO 234 235 il0 = 164 ; il1 = 164 236 ij0 = 88 ; ij1 = 88 237 ii0 = 161 ; ii1 = 163 238 DO jl = mi0(il0), mi1(il1) ! New salinity profile at Bab el Mandeb 239 DO jj = mj0(ij0), mj1(ij1) 240 DO ji = mi0(ii0), mi1(ii1) 241 saldta(ji,jj,:,:) = saldta(jl,jj,:,:) 242 END DO 243 END DO 244 ij0 = 87 ; ij1 = 87 245 DO jj = mj0(ij0), mj1(ij1) 246 DO ji = mi0(ii0), mi1(ii1) 247 saldta(ji,jj,:,:) = saldta(jl,jj,:,:) 248 END DO 249 END DO 250 END DO 251 252 ENDIF 253 254 ENDIF 151 IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN 152 153 ! ! ======================= 154 ! ! ORCA_R2 configuration 155 ! ! ======================= 156 ij0 = 101 ; ij1 = 109 157 ii0 = 141 ; ii1 = 155 158 DO jj = mj0(ij0), mj1(ij1) ! Reduced salinity in the Alboran Sea 159 DO ji = mi0(ii0), mi1(ii1) 160 #if defined key_orca_lev10 161 zsal (ji,jj,13:13,:) = zsal (ji,jj,13:13,:) - 0.15 162 zsal (ji,jj,14:15,:) = zsal (ji,jj,14:15,:) - 0.25 163 zsal (ji,jj,16:17,:) = zsal (ji,jj,16:17,:) - 0.30 164 zsal (ji,jj,18:25,:) = zsal (ji,jj,18:25,:) - 0.35 165 #else 166 saldta(ji,jj,13:13,:) = saldta(ji,jj,13:13,:) - 0.15 167 saldta(ji,jj,14:15,:) = saldta(ji,jj,14:15,:) - 0.25 168 saldta(ji,jj,16:17,:) = saldta(ji,jj,16:17,:) - 0.30 169 saldta(ji,jj,18:25,:) = saldta(ji,jj,18:25,:) - 0.35 170 #endif 171 END DO 172 END DO 173 IF( n_cla == 1 ) THEN 174 ! ! New salinity profile at Gibraltar 175 il0 = 138 ; il1 = 138 176 ij0 = 101 ; ij1 = 101 177 ii0 = 139 ; ii1 = 139 178 #if defined key_orca_lev10 179 zsal ( mi0(ii0):mi1(ii1), mj0(ij0):mj1(ij1) , : , : ) = & 180 & zsal ( mi0(il0):mi1(il1) , mj0(ij0):mj1(ij1) , : , : ) 181 #else 182 saldta( mi0(ii0):mi1(ii1), mj0(ij0):mj1(ij1) , : , : ) = & 183 & saldta( mi0(il0):mi1(il1) , mj0(ij0):mj1(ij1) , : , : ) 184 #endif 185 ij0 = 101 ; ij1 = 101 186 #if defined key_orca_lev10 187 zsal ( mi0(ii0):mi1(ii1), mj0(ij0):mj1(ij1) , : , : ) = & 188 & zsal ( mi0(il0):mi1(il1) , mj0(ij0):mj1(ij1) , : , : ) 189 #else 190 saldta( mi0(ii0):mi1(ii1), mj0(ij0):mj1(ij1) , : , : ) = & 191 & saldta( mi0(il0):mi1(il1) , mj0(ij0):mj1(ij1) , : , : ) 192 #endif 193 il0 = 138 ; il1 = 138 194 ij0 = 101 ; ij1 = 102 195 ii0 = 139 ; ii1 = 139 196 DO jl = mi0(il0), mi1(il1) ! New salinity profile at Gibraltar 197 DO jj = mj0(ij0), mj1(ij1) 198 DO ji = mi0(ii0), mi1(ii1) 199 #if defined key_orca_lev10 200 zsal (ji,jj,:,:) = zsal (jl,jj,:,:) 201 #else 202 saldta(ji,jj,:,:) = saldta(jl,jj,:,:) 203 #endif 204 END DO 205 END DO 206 END DO 207 208 il0 = 164 ; il1 = 164 209 ij0 = 88 ; ij1 = 88 210 ii0 = 161 ; ii1 = 163 211 DO jl = mi0(il0), mi1(il1) ! New salinity profile at Bab el Mandeb 212 DO jj = mj0(ij0), mj1(ij1) 213 DO ji = mi0(ii0), mi1(ii1) 214 #if defined key_orca_lev10 215 zsal (ji,jj,:,:) = zsal (jl,jj,:,:) 216 #else 217 saldta(ji,jj,:,:) = saldta(jl,jj,:,:) 218 #endif 219 END DO 220 END DO 221 ij0 = 87 ; ij1 = 87 222 DO jj = mj0(ij0), mj1(ij1) 223 DO ji = mi0(ii0), mi1(ii1) 224 #if defined key_orca_lev10 225 zsal (ji,jj,:,:) = zsal (jl,jj,:,:) 226 #else 227 saldta(ji,jj,:,:) = saldta(jl,jj,:,:) 228 #endif 229 END DO 230 END DO 231 END DO 232 233 ENDIF 234 235 ENDIF 255 236 #endif 256 257 IF( ln_sco ) THEN 258 DO jl = 1, 2 259 DO jj = 1, jpj ! interpolation of salinites 260 DO ji = 1, jpi 261 DO jk = 1, jpk 262 zl=fsdept(ji,jj,jk) 263 IF(zl < gdept_0(1)) zsaldta(jk,jl) = saldta(ji,jj,1,jl) 264 IF(zl > gdept_0(jpk)) zsaldta(jk,jl) = saldta(ji,jj,jpkm1,jl) 265 DO jkk = 1, jpkm1 266 IF((zl-gdept_0(jkk))*(zl-gdept_0(jkk+1)).le.0.0) THEN 267 zsaldta(jk,jl) = saldta(ji,jj,jkk,jl) & 268 & + (zl-gdept_0(jkk))/(gdept_0(jkk+1)-gdept_0(jkk)) & 269 & *(saldta(ji,jj,jkk+1,jl) - saldta(ji,jj,jkk,jl)) 270 ENDIF 271 END DO 272 END DO 273 DO jk = 1, jpkm1 274 saldta(ji,jj,jk,jl) = zsaldta(jk,jl) 275 END DO 276 saldta(ji,jj,jpk,jl) = 0.0 277 END DO 278 END DO 279 END DO 280 281 IF(lwp) WRITE(numout,*) 282 IF(lwp) WRITE(numout,*) ' Levitus salinity data interpolated to s-coordinate' 283 IF(lwp) WRITE(numout,*) 284 285 ELSE 286 ! ! Mask 287 DO jl = 1, 2 288 saldta(:,:,:,jl) = saldta(:,:,:,jl)*tmask(:,:,:) 289 saldta(:,:,jpk,jl) = 0. 290 IF( ln_zps ) THEN ! z-coord. partial steps 291 DO jj = 1, jpj ! interpolation of salinity at the last ocean level (i.e. the partial step) 292 DO ji = 1, jpi 293 ik = mbathy(ji,jj) - 1 294 IF( ik > 2 ) THEN 295 zl = ( gdept_0(ik) - fsdept(ji,jj,ik) ) / ( gdept_0(ik) - gdept_0(ik-1) ) 296 saldta(ji,jj,ik,jl) = (1.-zl) * saldta(ji,jj,ik,jl) +zl * saldta(ji,jj,ik-1,jl) 297 ENDIF 298 END DO 299 END DO 300 ENDIF 301 END DO 237 238 #if defined key_orca_lev10 239 ! interpolate from 31 to 301 level the zsal field result in saldta 240 DO jl = 1, 2 241 DO jjk = 1, 5 242 saldta(:,:,jjk,jl) = zsal(:,:,1,jl) 243 ENDDO 244 DO jk = 1, jpk - 20, 10 245 ikr = INT( jk / 10 ) + 1 246 ikw = (ikr-1) * 10 + 1 247 ikt = ikw + 5 248 DO jjk = ikt , ikt + 9 249 zfac = ( gdept(jjk) - gdepw(ikt) ) / ( gdepw(ikt+10) - gdepw(ikt) ) 250 saldta(:,:,jjk,jl) = zsal(:,:,ikr,jl) + ( zsal(:,:,ikr+1,jl) - zsal(:,:,ikr,jl) ) * zfac 251 END DO 252 END DO 253 DO jjk = jpk-5, jpk 254 saldta(:,:,jjk,jl) = zsal(:,:,jpkdta-1,jl) 255 END DO 256 ! fill the overlap areas 257 CALL lbc_lnk (saldta(:,:,:,jl),'Z',-999.,'no0') 258 END DO 259 260 #endif 261 262 IF( ln_sco ) THEN 263 DO jl = 1, 2 264 DO jj = 1, jpj ! interpolation of salinites 265 DO ji = 1, jpi 266 DO jk = 1, jpk 267 zl=fsdept(ji,jj,jk) 268 IF(zl < gdept_0(1)) zsaldta(jk,jl) = saldta(ji,jj,1,jl) 269 IF(zl > gdept_0(jpk)) zsaldta(jk,jl) = saldta(ji,jj,jpkm1,jl) 270 DO jkk = 1, jpkm1 271 IF((zl-gdept_0(jkk))*(zl-gdept_0(jkk+1)).le.0.0) THEN 272 zsaldta(jk,jl) = saldta(ji,jj,jkk,jl) & 273 & + (zl-gdept_0(jkk))/(gdept_0(jkk+1)-gdept_0(jkk)) & 274 & *(saldta(ji,jj,jkk+1,jl) - saldta(ji,jj,jkk,jl)) 275 ENDIF 276 END DO 277 END DO 278 DO jk = 1, jpkm1 279 saldta(ji,jj,jk,jl) = zsaldta(jk,jl) 280 END DO 281 saldta(ji,jj,jpk,jl) = 0.0 282 END DO 283 END DO 284 END DO 285 286 IF(lwp) WRITE(numout,*) 287 IF(lwp) WRITE(numout,*) ' Levitus salinity data interpolated to s-coordinate' 288 IF(lwp) WRITE(numout,*) 289 290 ELSE 291 ! ! Mask 292 DO jl = 1, 2 293 saldta(:,:,:,jl) = saldta(:,:,:,jl)*tmask(:,:,:) 294 saldta(:,:,jpk,jl) = 0. 295 IF( ln_zps ) THEN ! z-coord. partial steps 296 DO jj = 1, jpj ! interpolation of salinity at the last ocean level (i.e. the partial step) 297 DO ji = 1, jpi 298 ik = mbathy(ji,jj) - 1 299 IF( ik > 2 ) THEN 300 zl = ( gdept_0(ik) - fsdept(ji,jj,ik) ) / ( gdept_0(ik) - gdept_0(ik-1) ) 301 saldta(ji,jj,ik,jl) = (1.-zl) * saldta(ji,jj,ik,jl) +zl * saldta(ji,jj,ik-1,jl) 302 ENDIF 303 END DO 304 END DO 305 ENDIF 306 END DO 307 ENDIF 308 309 310 IF(lwp) THEN 311 WRITE(numout,*)' salinity Levitus month ',nsal1,nsal2 312 WRITE(numout,*) 313 WRITE(numout,*) ' Levitus month = ',nsal1,' level = 1' 314 CALL prihre(saldta(:,:,1,1),jpi,jpj,1,jpi,20,1,jpj,20,1.,numout) 315 WRITE(numout,*) ' Levitus month = ',nsal1,' level = ',jpk/2 316 CALL prihre(saldta(:,:,jpk/2,1),jpi,jpj,1,jpi,20,1,jpj,20,1.,numout) 317 WRITE(numout,*) ' Levitus month = ',nsal1,' level = ',jpkm1 318 CALL prihre(saldta(:,:,jpkm1,1),jpi,jpj,1,jpi,20,1,jpj,20,1.,numout) 319 ENDIF 302 320 ENDIF 303 304 305 IF(lwp) THEN 306 WRITE(numout,*)' salinity Levitus month ',nsal1,nsal2 307 WRITE(numout,*) 308 WRITE(numout,*) ' Levitus month = ',nsal1,' level = 1' 309 CALL prihre(saldta(:,:,1,1),jpi,jpj,1,jpi,20,1,jpj,20,1.,numout) 310 WRITE(numout,*) ' Levitus month = ',nsal1,' level = ',jpk/2 311 CALL prihre(saldta(:,:,jpk/2,1),jpi,jpj,1,jpi,20,1,jpj,20,1.,numout) 312 WRITE(numout,*) ' Levitus month = ',nsal1,' level = ',jpkm1 313 CALL prihre(saldta(:,:,jpkm1,1),jpi,jpj,1,jpi,20,1,jpj,20,1.,numout) 314 ENDIF 315 ENDIF 316 317 321 322 318 323 ! 3. At every time step compute salinity data 319 324 ! ------------------------------------------- 320 325 321 326 zxy = FLOAT(nday + 15 - 30*i15)/30. 322 327 s_dta(:,:,:) = ( 1.- zxy ) * saldta(:,:,:,1) + zxy * saldta(:,:,:,2) 328 329 ! Close the file 330 ! -------------- 331 332 IF( kt == nitend ) CALL iom_close (numsdt) 323 333 324 334 END SUBROUTINE dta_sal -
trunk/NEMO/OPA_SRC/DTA/dtasss.F90
r434 r473 27 27 LOGICAL , PUBLIC, PARAMETER :: lk_dtasss = .FALSE. !: sss data flag 28 28 #endif 29 INTEGER :: numsss !: logical unit for surface salinity data 29 30 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & !: 30 31 sss !: surface salinity … … 63 64 !!---------------------------------------------------------------------- 64 65 !! * Modules used 65 USE io ipsl66 USE iom 66 67 67 68 !! * Arguments 68 69 INTEGER :: kt 69 70 70 !! * Local declarations71 INTEGER :: idy72 INTEGER :: istep(1)73 INTEGER :: ipi, ipj, ipk74 75 REAL(wp) :: zdate0, zdt76 REAL(wp) :: zlon(jpi,jpj), zlat(jpi,jpj), zlev(jpk)77 CHARACTER (len=45) :: &78 clname = "sss.nc" ! filename for SSS79 71 !!---------------------------------------------------------------------- 80 72 81 73 IF( kt == nit000 ) THEN 74 82 75 IF(lwp) WRITE(numout,*) 83 IF(lwp) WRITE(numout,*) 'dta_sss : sea surface salinity data' 84 IF(lwp) WRITE(numout,*) '~~~~~~~ read in file: ', clname 85 sss(:,:) = 0.e0 ! required for extra halos in mpp 76 IF(lwp) WRITE(numout,*) 'dta_sss : yearly mean sea surface salinity data' 86 77 87 ipi = jpiglo88 ipj = jpjglo89 ipk = 078 CALL iom_open ( 'sss.nc', numsss ) 79 CALL iom_get ( numsss, jpdom_data, 'sss', sss, 1 ) 80 CALL iom_close ( numsss ) 90 81 91 zdate0 = 0.e092 zdt = 0.e093 IF(lwp) WRITE (numout,*) 'open sss file = ', clname94 95 CALL flinopen( TRIM(clname), mig(1), nlci, mjg(1), nlcj, .FALSE., ipi, ipj, &96 & ipk, zlon, zlat, zlev, idy, istep, zdate0, zdt, numsss )97 98 99 IF( ipi /= jpidta .OR. ipj /= jpjdta ) THEN100 IF(lwp) WRITE(numout,*)101 IF(lwp) WRITE(numout,*) 'problem with dimensions'102 IF(lwp) WRITE(numout,*) ' ipi ', ipi, ' jpidta ', jpidta103 IF(lwp) WRITE(numout,*) ' ipj ', ipj, ' jpjdta ', jpjdta104 nstop = nstop + 1105 ENDIF106 IF(lwp) WRITE(numout,*) idy, istep, zdate0, zdt107 108 CALL flinget( numsss, 'sss', jpidta, jpjdta, 1, idy, 1, &109 & 1, mig(1), nlci, mjg(1), nlcj, sss(1:nlci,1:nlcj) )110 111 82 sss(:,:) = sss(:,:)*tmask(:,:,1) 112 83 113 IF( kt == nit000 .AND.lwp ) THEN84 IF( lwp ) THEN 114 85 WRITE(numout,*) ' ' 115 86 WRITE(numout,*) ' read sea surface salinity ok' 116 87 WRITE(numout,*) ' ' 117 CALL prihre(sss( 1,1),jpi,jpj,1,jpi,20,1,jpj,10,1.,numout)88 CALL prihre(sss(:,:),jpi,jpj,1,jpi,20,1,jpj,10,1.,numout) 118 89 ENDIF 119 CALL flinclo(numsss)120 90 121 91 ENDIF -
trunk/NEMO/OPA_SRC/DTA/dtasst.F90
r392 r473 27 27 #if defined key_dtasst 28 28 LOGICAL , PUBLIC, PARAMETER :: lk_dtasst = .TRUE. !: sst data flag 29 INTEGER :: & 30 numsst , & !: logical unit for surface temperature data 31 ndaysst !: new day for Reynolds sst 32 CHARACTER (len=34) :: clname !: filename for daily SST 29 33 #else 30 34 LOGICAL , PUBLIC, PARAMETER :: lk_dtasst = .FALSE. !: sst data flag … … 71 75 !!---------------------------------------------------------------------- 72 76 !! * Modules used 73 USE io ipsl77 USE iom 74 78 75 79 !! * Arguments … … 77 81 78 82 !! * Local save 79 INTEGER, SAVE :: &80 ndaysst, & ! new day for Reynolds sst81 nyearsst ! new year for Reynolds sst82 83 83 84 !! * Local declarations 84 85 INTEGER :: ji, jj 85 INTEGER :: iprint 86 INTEGER :: iy, iday, idy 87 INTEGER :: istep(366) 88 INTEGER :: ipi, ipj, ipk 86 !!---------------------------------------------------------------------- 89 87 90 REAL(wp) :: zdate0, zdt, ztgel 91 REAL(wp) :: zlon(jpi,jpj), zlat(jpi,jpj), zlev(jpk) 92 CHARACTER (len=45) :: & 93 clname ! filename for daily SST 94 !!---------------------------------------------------------------------- 95 clname = 'sst_1d.nc' 96 #if defined key_agrif 97 if ( .NOT. Agrif_Root() ) then 98 clname = TRIM(Agrif_CFixed())//'_'//TRIM(clname) 99 endif 100 #endif 88 ! -------------------- ! 89 ! First call kt=nit000 ! 90 ! -------------------- ! 91 101 92 IF( kt == nit000 ) THEN 102 IF(lwp) WRITE(numout,*) 93 94 ndaysst = 0 ! initializations 103 95 IF(lwp) WRITE(numout,*) 'dta_sst : DAILY sea surface temperature data' 104 IF(lwp) WRITE(numout,*) '~~~~~~~ read in file: ', clname105 sst(:,:) = 0.e0 ! required for extra halos in mpp 96 CALL iom_open ( 'sst_1d.nc', numsst ) 97 106 98 ENDIF 107 99 108 109 ! 0. initialization 110 ! ----------------- 111 112 ipi = jpiglo 113 ipj = jpjglo 114 ipk = jpk 115 116 IF( nleapy == 0 ) THEN 117 idy=365 118 ELSEIF( nleapy == 1 ) THEN 119 IF( MOD( nyear, 4 ) == 0 ) THEN 120 idy=366 121 ELSE 122 idy=365 123 ENDIF 124 ELSEIF( nleapy == 30 ) THEN 125 IF(lwp) WRITE(numout,*) 'dtasst : nleapy = 30 is not compatible' 126 IF(lwp) WRITE(numout,*) ' with existing files' 127 IF(lwp) WRITE(numout,*) 'WE STOP' 128 STOP 1234 129 ENDIF 130 131 132 ! 2. Open files if nyearsst 133 ! ------------------------- 134 135 IF( nyearsst /= nyear ) THEN 136 nyearsst = nyear 137 iprint = 1 138 139 ! 2.1 Define file name and record 140 141 ! Close/open file if new year 142 143 IF( nyearsst /= 0 ) CALL flinclo(numsst) 144 iy = nyear 145 IF(lwp) WRITE (numout,*) iy 146 IF(lwp) WRITE (numout,*) 'open sst file = ', clname 147 CALL FLUSH(numout) 148 149 CALL flinopen( clname, mig(1), nlci, mjg(1), nlcj, .FALSE., ipi, ipj & 150 , ipk, zlon, zlat, zlev, idy, istep, zdate0, zdt, numsst ) 151 152 IF( ipi /= jpidta .OR. ipj /= jpjdta ) THEN 153 IF(lwp) WRITE(numout,*) 154 IF(lwp) WRITE(numout,*) 'problem with dimensions' 155 IF(lwp) WRITE(numout,*) ' ipi ', ipi, ' jpidta ', jpidta 156 IF(lwp) WRITE(numout,*) ' ipj ', ipj, ' jpjdta ', jpjdta 157 nstop = nstop + 1 158 ENDIF 159 IF(lwp) WRITE(numout,*) idy, istep, zdate0, zdt 160 ELSE 161 iprint = 0 162 ENDIF 163 164 165 ! 3. Read SST if new day 166 ! ------------------------- 100 ! ----------------- ! 101 ! Read daily file ! 102 ! ----------------- ! 167 103 168 104 ! Read daily SST … … 170 106 IF( ndaysst /= nday ) THEN 171 107 ndaysst = nday 172 iday = nday_year 173 174 CALL flinget( numsst, 'sst', jpidta, jpjdta, 1, idy, iday, & 175 iday, mig(1), nlci, mjg(1), nlcj, sst(1:nlci,1:nlcj) ) 176 108 109 CALL iom_get ( numsst, jpdom_data, 'sst', sst, ndaysst ) 110 177 111 IF ( kt == nit000 .AND. lwp ) THEN 178 112 WRITE(numout,*) ' ' … … 180 114 WRITE(numout,*) ' ' 181 115 WRITE(numout,*) ' Surface temp day: ', ndastp 182 CALL prihre(sst( 1,1),jpi,jpj,1,jpi,20,1,jpj,10,1.,numout)116 CALL prihre(sst(:,:),jpi,jpj,1,jpi,20,1,jpj,10,1.,numout) 183 117 ENDIF 184 118 … … 201 135 WRITE(numout,*) 202 136 WRITE(numout,*) 'Ice cover : ' 203 CALL prihre( rclice( 1,1,1), jpi, jpj, 1, jpi, 20, 1, jpj, 10, 1., numout )137 CALL prihre( rclice(:,:,1), jpi, jpj, 1, jpi, 20, 1, jpj, 10, 1., numout ) 204 138 ENDIF 205 139 … … 207 141 ! -------------- 208 142 209 IF( kt == nitend ) CALL flinclo(numsst) 210 CALL FLUSH(numout) 143 IF( kt == nitend ) CALL iom_close (numsst) 211 144 212 145 -
trunk/NEMO/OPA_SRC/DTA/dtatem.F90
r459 r473 9 9 !!---------------------------------------------------------------------- 10 10 !! dta_tem : read ocean temperature data 11 !!--- -------------------------------------------------------------------11 !!---l------------------------------------------------------------------- 12 12 !! * Modules used 13 13 USE oce ! ocean dynamics and tracers 14 14 USE dom_oce ! ocean space and time domain 15 15 USE in_out_manager ! I/O manager 16 USE phycst ! physical constants 16 17 USE daymod ! calendar 17 18 #if defined key_orca_lev10 19 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 20 #endif 18 21 IMPLICIT NONE 19 22 PRIVATE … … 28 31 29 32 !! * Module variables 30 CHARACTER (len=45) :: &31 cl_tdata32 33 INTEGER :: & 33 nlecte = 0, & ! switch for the first read 34 ntem1 , & ! first record used 35 ntem2 ! second record used 34 numtdt, & !: logical unit for data temperature 35 ntem1, ntem2 ! first and second record used 36 36 REAL(wp), DIMENSION(jpi,jpj,jpk,2) :: & 37 37 temdta ! temperature data at two consecutive times … … 75 75 !!---------------------------------------------------------------------- 76 76 !! * Modules used 77 USE io ipsl77 USE iom 78 78 79 79 !! * Arguments … … 81 81 82 82 !! * Local declarations 83 INTEGER, PARAMETER :: & 84 jpmois = 12 ! number of month 85 INTEGER :: ji, jj, jk, jl, jkk ! dummy loop indicies 86 REAL(wp), DIMENSION(jpk,2) :: & 87 ztemdta ! auxiliary array for interpolation 88 83 INTEGER :: ji, jj, jl, jk, jkk ! dummy loop indicies 89 84 INTEGER :: & 90 imois, iman, itime, ik , & ! temporary integers 91 i15, ipi, ipj, ipk ! " " 85 imois, iman, i15 , ik ! temporary integers 92 86 # if defined key_tradmp 93 87 INTEGER :: & 94 88 il0, il1, ii0, ii1, ij0, ij1 ! temporary integers 95 89 # endif 96 97 INTEGER, DIMENSION(jpmois) :: istep 98 REAL(wp) :: zxy, zl, zdate0 99 REAL(wp), DIMENSION(jpi,jpj) :: zlon,zlat 100 REAL(wp), DIMENSION(jpk) :: zlev 90 REAL(wp) :: zxy, zl 91 #if defined key_orca_lev10 92 REAL(wp), DIMENSION(jpi,jpj,jpkdta,2) :: ztem 93 INTEGER :: ikr, ikw, ikt, jjk 94 REAL(wp) :: zfac 95 #endif 96 REAL(wp), DIMENSION(jpk,2) :: & 97 ztemdta ! auxiliary array for interpolation 101 98 !!---------------------------------------------------------------------- 102 103 ! 0. Initialization 104 ! ----------------- 105 106 iman = jpmois 107 i15 = nday / 16 108 imois = nmonth + i15 - 1 109 IF( imois == 0 ) imois = iman 110 111 itime = jpmois 112 ipi = jpiglo 113 ipj = jpjglo 114 ipk = jpk 115 116 ! 1. First call kt=nit000 117 ! ----------------------- 118 119 IF( kt == nit000 .AND. nlecte == 0 ) THEN 120 ntem1 = 0 121 IF(lwp) WRITE(numout,*) 122 IF(lwp) WRITE(numout,*) ' dtatem : Levitus monthly fields' 123 IF(lwp) WRITE(numout,*) ' ~~~~~~' 124 IF(lwp) WRITE(numout,*) ' NetCDF FORMAT' 125 IF(lwp) WRITE(numout,*) 126 127 ! open file 128 129 cl_tdata = 'data_1m_potential_temperature_nomask ' 130 #if defined key_agrif 131 if ( .NOT. Agrif_Root() ) then 132 cl_tdata = TRIM(Agrif_CFixed())//'_'//TRIM(cl_tdata) 133 endif 134 #endif 135 CALL flinopen( TRIM(cl_tdata), mig(1), nlci , mjg(1), nlcj & 136 & , .false. , ipi , ipj , ipk , zlon & 137 & , zlat , zlev , itime, istep , zdate0 & 138 & , rdt , numtdt ) 139 140 ! title, dimensions and tests 141 142 IF( itime /= jpmois ) THEN 143 IF(lwp) THEN 144 WRITE(numout,*) 145 WRITE(numout,*) 'problem with time coordinates' 146 WRITE(numout,*) ' itime ',itime,' jpmois ',jpmois 147 ENDIF 148 STOP 'dtatem' 149 ENDIF 150 IF( ipi /= jpidta .OR. ipj /= jpjdta .OR. ipk /= jpk ) THEN 151 IF(lwp) THEN 152 WRITE(numout,*) 153 WRITE(numout,*) 'problem with dimensions' 154 WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta 155 WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta 156 WRITE(numout,*) ' ipk ',ipk,' jpk ',jpk 157 ENDIF 158 STOP 'dtatem' 159 ENDIF 160 IF(lwp) WRITE(numout,*) itime,istep,zdate0,rdt,numtdt 161 162 ENDIF 163 164 165 ! 2. Read monthly file 166 ! ------------------- 167 168 IF( ( kt == nit000 .AND. nlecte == 0 ) .OR. imois /= ntem1 ) THEN 169 nlecte = 1 170 171 ! Calendar computation 172 173 ntem1 = imois ! first file record used 174 ntem2 = ntem1 + 1 ! last file record used 175 ntem1 = MOD( ntem1, iman ) 176 IF( ntem1 == 0 ) ntem1 = iman 177 ntem2 = MOD( ntem2, iman ) 178 IF( ntem2 == 0 ) ntem2 = iman 179 IF(lwp) WRITE(numout,*) 'first record file used ntem1 ', ntem1 180 IF(lwp) WRITE(numout,*) 'last record file used ntem2 ', ntem2 181 182 ! Read monthly temperature data Levitus 183 184 CALL flinget( numtdt, 'votemper', jpidta, jpjdta, jpk & 185 , jpmois, ntem1 , ntem1 , mig(1), nlci & 186 , mjg(1), nlcj , temdta(1:nlci,1:nlcj,1:jpk,1) ) 187 CALL flinget( numtdt, 'votemper', jpidta, jpjdta, jpk & 188 , jpmois, ntem2 , ntem2 , mig(1), nlci & 189 , mjg(1), nlcj , temdta(1:nlci,1:nlcj,1:jpk,2) ) 190 191 IF(lwp) WRITE(numout,*) 192 IF(lwp) WRITE(numout,*) ' read Levitus temperature ok' 193 IF(lwp) WRITE(numout,*) 194 99 100 ! 0. Initialization 101 ! ----------------- 102 103 iman = INT( raamo ) 104 !!! better but change the results i15 = INT( 2*FLOAT( nday ) / ( FLOAT( nobis(nmonth) ) + 0.5 ) ) 105 i15 = nday / 16 106 imois = nmonth + i15 - 1 107 IF( imois == 0 ) imois = iman 108 109 ! 1. First call kt=nit000 110 ! ----------------------- 111 112 IF( kt == nit000 ) THEN 113 114 ntem1= 0 ! initializations 115 IF(lwp) WRITE(numout,*) ' dta_tem : Levitus monthly fields' 116 CALL iom_open ( 'data_1m_potential_temperature_nomask', numtdt ) 117 118 ENDIF 119 120 121 ! 2. Read monthly file 122 ! ------------------- 123 124 IF( kt == nit000 .OR. imois /= ntem1 ) THEN 125 126 ! Calendar computation 127 128 ntem1 = imois ! first file record used 129 ntem2 = ntem1 + 1 ! last file record used 130 ntem1 = MOD( ntem1, iman ) 131 IF( ntem1 == 0 ) ntem1 = iman 132 ntem2 = MOD( ntem2, iman ) 133 IF( ntem2 == 0 ) ntem2 = iman 134 IF(lwp) WRITE(numout,*) 'first record file used ntem1 ', ntem1 135 IF(lwp) WRITE(numout,*) 'last record file used ntem2 ', ntem2 136 137 ! Read monthly temperature data Levitus 138 139 #if defined key_orca_lev10 140 if (lk_zps) stop 141 ztem(:,:,:,:) = 0. 142 CALL iom_get (numtdt,jpdom_data,'votemper',ztem(:,:,:,1),ntem1) 143 CALL iom_get (numtdt,jpdom_data,'votemper',ztem(:,:,:,2),ntem2) 144 #else 145 CALL iom_get (numtdt,jpdom_data,'votemper',temdta(:,:,:,1),ntem1) 146 CALL iom_get (numtdt,jpdom_data,'votemper',temdta(:,:,:,2),ntem2) 147 #endif 148 149 IF(lwp) WRITE(numout,*) 150 IF(lwp) WRITE(numout,*) ' read Levitus temperature ok' 151 IF(lwp) WRITE(numout,*) 152 195 153 #if defined key_tradmp 196 IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN 197 198 ! ! ======================= 199 ! ! ORCA_R2 configuration 200 ! ! ======================= 201 202 ij0 = 101 ; ij1 = 109 203 ii0 = 141 ; ii1 = 155 204 DO jj = mj0(ij0), mj1(ij1) ! Reduced temperature in the Alboran Sea 205 DO ji = mi0(ii0), mi1(ii1) 206 temdta(ji,jj, 13:13 ,:) = temdta(ji,jj, 13:13 ,:) - 0.20 207 temdta(ji,jj, 14:15 ,:) = temdta(ji,jj, 14:15 ,:) - 0.35 208 temdta(ji,jj, 16:25 ,:) = temdta(ji,jj, 16:25 ,:) - 0.40 209 END DO 210 END DO 211 212 IF( n_cla == 0 ) THEN 213 ! ! Reduced temperature at Red Sea 214 ij0 = 87 ; ij1 = 96 215 ii0 = 148 ; ii1 = 160 216 temdta( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 4:10 , : ) = 7.0 217 temdta( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 11:13 , : ) = 6.5 218 temdta( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 14:20 , : ) = 6.0 219 ELSE 220 il0 = 138 ; il1 = 138 221 ij0 = 101 ; ij1 = 102 222 ii0 = 139 ; ii1 = 139 223 DO jl = mi0(il0), mi1(il1) ! New temperature profile at Gibraltar 224 DO jj = mj0(ij0), mj1(ij1) 225 DO ji = mi0(ii0), mi1(ii1) 226 temdta(ji,jj,:,:) = temdta(jl,jj,:,:) 227 END DO 228 END DO 229 END DO 230 il0 = 164 ; il1 = 164 231 ij0 = 88 ; ij1 = 88 232 ii0 = 161 ; ii1 = 163 233 DO jl = mi0(il0), mi1(il1) ! New temperature profile at Bab el Mandeb 234 DO jj = mj0(ij0), mj1(ij1) 235 DO ji = mi0(ii0), mi1(ii1) 236 temdta(ji,jj,:,:) = temdta(jl,jj,:,:) 237 END DO 238 END DO 239 ij0 = 87 ; ij1 = 87 240 DO jj = mj0(ij0), mj1(ij1) 241 DO ji = mi0(ii0), mi1(ii1) 242 temdta(ji,jj,:,:) = temdta(jl,jj,:,:) 243 END DO 244 END DO 245 END DO 246 ENDIF 247 248 ENDIF 249 #endif 250 251 IF( ln_sco ) THEN 252 DO jl = 1, 2 253 DO jj = 1, jpj ! interpolation of temperatures 254 DO ji = 1, jpi 255 DO jk = 1, jpk 256 zl=fsdept(ji,jj,jk) 257 IF(zl < gdept_0(1)) ztemdta(jk,jl) = temdta(ji,jj,1,jl) 258 IF(zl > gdept_0(jpk)) ztemdta(jk,jl) = temdta(ji,jj,jpkm1,jl) 259 DO jkk = 1, jpkm1 260 IF((zl-gdept_0(jkk))*(zl-gdept_0(jkk+1)).le.0.0) THEN 261 ztemdta(jk,jl) = temdta(ji,jj,jkk,jl) & 262 & + (zl-gdept_0(jkk))/(gdept_0(jkk+1)-gdept_0(jkk)) & 263 & *(temdta(ji,jj,jkk+1,jl) - temdta(ji,jj,jkk,jl)) 264 ENDIF 265 END DO 266 END DO 267 DO jk = 1, jpkm1 268 temdta(ji,jj,jk,jl) = ztemdta(jk,jl) 269 END DO 270 temdta(ji,jj,jpk,jl) = 0.0 271 END DO 272 END DO 273 END DO 274 275 IF(lwp) WRITE(numout,*) 276 IF(lwp) WRITE(numout,*) ' Levitus temperature data interpolated to s-coordinate' 277 IF(lwp) WRITE(numout,*) 278 279 ELSE 280 281 ! ! Mask 282 DO jl = 1, 2 283 temdta(:,:,:,jl) = temdta(:,:,:,jl) * tmask(:,:,:) 284 temdta(:,:,jpk,jl) = 0. 285 IF( ln_zps ) THEN ! z-coord. with partial steps 286 DO jj = 1, jpj ! interpolation of temperature at the last level 287 DO ji = 1, jpi 288 ik = mbathy(ji,jj) - 1 289 IF( ik > 2 ) THEN 290 zl = ( gdept_0(ik) - fsdept(ji,jj,ik) ) / ( gdept_0(ik) - gdept_0(ik-1) ) 291 temdta(ji,jj,ik,jl) = (1.-zl) * temdta(ji,jj,ik,jl) + zl * temdta(ji,jj,ik-1,jl) 292 ENDIF 293 END DO 294 END DO 295 ENDIF 296 END DO 297 298 ENDIF 299 300 IF(lwp) THEN 301 WRITE(numout,*) ' temperature Levitus month ', ntem1, ntem2 302 WRITE(numout,*) 303 WRITE(numout,*) ' Levitus month = ', ntem1, ' level = 1' 304 CALL prihre( temdta(:,:,1,1), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1., numout ) 305 WRITE(numout,*) ' Levitus month = ', ntem1, ' level = ', jpk/2 306 CALL prihre( temdta(:,:,jpk/2,1), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1., numout ) 307 WRITE(numout,*) ' Levitus month = ',ntem1,' level = ', jpkm1 308 CALL prihre( temdta(:,:,jpkm1,1), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1., numout ) 309 ENDIF 310 ENDIF 311 312 313 ! 2. At every time step compute temperature data 314 ! ---------------------------------------------- 315 316 zxy = FLOAT( nday + 15 - 30 * i15 ) / 30. 317 t_dta(:,:,:) = (1.-zxy) * temdta(:,:,:,1) + zxy * temdta(:,:,:,2) 318 319 END SUBROUTINE dta_tem 154 IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN 155 156 ! ! ======================= 157 ! ! ORCA_R2 configuration 158 ! ! ======================= 159 160 ij0 = 101 ; ij1 = 109 161 ii0 = 141 ; ii1 = 155 162 DO jj = mj0(ij0), mj1(ij1) ! Reduced temperature in the Alboran Sea 163 DO ji = mi0(ii0), mi1(ii1) 164 #if defined key_orca_lev10 165 ztem( ji,jj, 13:13 ,:) = ztem (ji,jj, 13:13 ,:) - 0.20 166 ztem (ji,jj, 14:15 ,:) = ztem (ji,jj, 14:15 ,:) - 0.35 167 ztem (ji,jj, 16:25 ,:) = ztem (ji,jj, 16:25 ,:) - 0.40 168 #else 169 temdta(ji,jj, 13:13 ,:) = temdta(ji,jj, 13:13 ,:) - 0.20 170 temdta(ji,jj, 14:15 ,:) = temdta(ji,jj, 14:15 ,:) - 0.35 171 temdta(ji,jj, 16:25 ,:) = temdta(ji,jj, 16:25 ,:) - 0.40 172 #endif 173 END DO 174 END DO 175 176 IF( n_cla == 0 ) THEN 177 ! ! Reduced temperature at Red Sea 178 ij0 = 87 ; ij1 = 96 179 ii0 = 148 ; ii1 = 160 180 #if defined key_orca_lev10 181 ztem ( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 4:10 , : ) = 7.0 182 ztem ( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 11:13 , : ) = 6.5 183 ztem ( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 14:20 , : ) = 6.0 184 #else 185 temdta( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 4:10 , : ) = 7.0 186 temdta( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 11:13 , : ) = 6.5 187 temdta( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 14:20 , : ) = 6.0 188 #endif 189 ELSE 190 il0 = 138 ; il1 = 138 191 ij0 = 101 ; ij1 = 102 192 ii0 = 139 ; ii1 = 139 193 DO jl = mi0(il0), mi1(il1) ! New temperature profile at Gibraltar 194 DO jj = mj0(ij0), mj1(ij1) 195 DO ji = mi0(ii0), mi1(ii1) 196 #if defined key_orca_lev10 197 ztem (ji,jj,:,:) = ztem (jl,jj,:,:) 198 #else 199 temdta(ji,jj,:,:) = temdta(jl,jj,:,:) 200 #endif 201 END DO 202 END DO 203 END DO 204 il0 = 164 ; il1 = 164 205 ij0 = 88 ; ij1 = 88 206 ii0 = 161 ; ii1 = 163 207 DO jl = mi0(il0), mi1(il1) ! New temperature profile at Bab el Mandeb 208 DO jj = mj0(ij0), mj1(ij1) 209 DO ji = mi0(ii0), mi1(ii1) 210 #if defined key_orca_lev10 211 ztem (ji,jj,:,:) = ztem (jl,jj,:,:) 212 #else 213 temdta(ji,jj,:,:) = temdta(jl,jj,:,:) 214 #endif 215 END DO 216 END DO 217 ij0 = 87 ; ij1 = 87 218 DO jj = mj0(ij0), mj1(ij1) 219 DO ji = mi0(ii0), mi1(ii1) 220 #if defined key_orca_lev10 221 ztem (ji,jj,:,:) = ztem (jl,jj,:,:) 222 #else 223 temdta(ji,jj,:,:) = temdta(jl,jj,:,:) 224 #endif 225 END DO 226 END DO 227 END DO 228 ENDIF 229 230 ENDIF 231 #endif 232 233 #if defined key_orca_lev10 234 ! interpolate from 31 to 301 level the ztem field result in temdta 235 DO jl = 1, 2 236 DO jjk = 1, 5 237 temdta(:,:,jjk,jl) = ztem(:,:,1,jl) 238 END DO 239 DO jk = 1, jpk-20,10 240 ik = jk+5 241 ikr = INT(jk/10) + 1 242 ikw = (ikr-1) *10 + 1 243 ikt = ikw + 5 244 DO jjk=ikt,ikt+9 245 zfac = ( gdept(jjk ) - gdepw(ikt) ) / ( gdepw(ikt+10) - gdepw(ikt) ) 246 temdta(:,:,jjk,jl) = ztem(:,:,ikr,jl) + ( ztem(:,:,ikr+1,jl) - ztem(:,:,ikr,jl) ) * zfac 247 END DO 248 END DO 249 DO jjk = jpk-5, jpk 250 temdta(:,:,jjk,jl) = ztem(:,:,jpkdta-1,jl) 251 END DO 252 ! fill the overlap areas 253 CALL lbc_lnk (temdta(:,:,:,jl),'Z',-999.,'no0') 254 END DO 255 #endif 256 257 IF( ln_sco ) THEN 258 DO jl = 1, 2 259 DO jj = 1, jpj ! interpolation of temperatures 260 DO ji = 1, jpi 261 DO jk = 1, jpk 262 zl=fsdept(ji,jj,jk) 263 IF(zl < gdept_0(1)) ztemdta(jk,jl) = temdta(ji,jj,1,jl) 264 IF(zl > gdept_0(jpk)) ztemdta(jk,jl) = temdta(ji,jj,jpkm1,jl) 265 DO jkk = 1, jpkm1 266 IF((zl-gdept_0(jkk))*(zl-gdept_0(jkk+1)).le.0.0) THEN 267 ztemdta(jk,jl) = temdta(ji,jj,jkk,jl) & 268 & + (zl-gdept_0(jkk))/(gdept_0(jkk+1)-gdept_0(jkk)) & 269 & *(temdta(ji,jj,jkk+1,jl) - temdta(ji,jj,jkk,jl)) 270 ENDIF 271 END DO 272 END DO 273 DO jk = 1, jpkm1 274 temdta(ji,jj,jk,jl) = ztemdta(jk,jl) 275 END DO 276 temdta(ji,jj,jpk,jl) = 0.0 277 END DO 278 END DO 279 END DO 280 281 IF(lwp) WRITE(numout,*) 282 IF(lwp) WRITE(numout,*) ' Levitus temperature data interpolated to s-coordinate' 283 IF(lwp) WRITE(numout,*) 284 285 ELSE 286 287 ! ! Mask 288 DO jl = 1, 2 289 temdta(:,:,:,jl) = temdta(:,:,:,jl) * tmask(:,:,:) 290 temdta(:,:,jpk,jl) = 0. 291 IF( ln_zps ) THEN ! z-coord. with partial steps 292 DO jj = 1, jpj ! interpolation of temperature at the last level 293 DO ji = 1, jpi 294 ik = mbathy(ji,jj) - 1 295 IF( ik > 2 ) THEN 296 zl = ( gdept_0(ik) - fsdept(ji,jj,ik) ) / ( gdept_0(ik) - gdept_0(ik-1) ) 297 temdta(ji,jj,ik,jl) = (1.-zl) * temdta(ji,jj,ik,jl) + zl * temdta(ji,jj,ik-1,jl) 298 ENDIF 299 END DO 300 END DO 301 ENDIF 302 END DO 303 304 ENDIF 305 306 IF(lwp) THEN 307 WRITE(numout,*) ' temperature Levitus month ', ntem1, ntem2 308 WRITE(numout,*) 309 WRITE(numout,*) ' Levitus month = ', ntem1, ' level = 1' 310 CALL prihre( temdta(:,:,1,1), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1., numout ) 311 WRITE(numout,*) ' Levitus month = ', ntem1, ' level = ', jpk/2 312 CALL prihre( temdta(:,:,jpk/2,1), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1., numout ) 313 WRITE(numout,*) ' Levitus month = ',ntem1,' level = ', jpkm1 314 CALL prihre( temdta(:,:,jpkm1,1), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1., numout ) 315 ENDIF 316 ENDIF 317 318 319 ! 2. At every time step compute temperature data 320 ! ---------------------------------------------- 321 322 zxy = FLOAT( nday + 15 - 30 * i15 ) / 30. 323 t_dta(:,:,:) = (1.-zxy) * temdta(:,:,:,1) + zxy * temdta(:,:,:,2) 324 325 ! Close the file 326 ! -------------- 327 328 IF( kt == nitend ) CALL iom_close (numtdt) 329 330 END SUBROUTINE dta_tem 320 331 321 332 #else -
trunk/NEMO/OPA_SRC/LDF/ldfdyn_c3d.h90
r461 r473 190 190 !! * Modules used 191 191 USE ldftra_oce, ONLY : aht0 192 192 193 193 !! * Arguments 194 194 LOGICAL, INTENT (in) :: ld_print ! If true, output arrays on numout … … 237 237 ENDIF 238 238 111 CONTINUE 239 IF( iost /= 0 ) THEN 240 IF(lwp) THEN 241 WRITE(numout,*) 242 WRITE(numout,*) ' ===>>>> : bad opening file: ahmcoef, we stop. verify the file ' 243 WRITE(numout,*) ' ======= === ' 244 ENDIF 245 nstop = nstop + 1 246 ENDIF 247 239 IF( iost /= 0 ) CALL ctl_stop( ' ', & 240 & ' ===>>>> : bad opening file: ahmcoef, verify the file ahmcoef', & 241 & ' ======= === ' ) 248 242 REWIND inum 249 243 READ(inum,9101) clexp, iim, ijm … … 375 369 ! other level: re-increase the coef in the deep ocean 376 370 377 DO jk = 1, 21 371 #if defined key_orca_lev10 372 DO jk = 1, 210 373 zcoef(jk) = 1. 374 END DO 375 DO jk= 211, 230 376 zcoef(jk) = 1. + 0.1 * FLOAT(jk-210) 377 END DO 378 DO jk= 231, 260 379 zcoef(jk) = 3. + 0.2 * FLOAT(jk-230) 380 END DO 381 DO jk= 261, 270 382 zcoef(jk) = 9. + 0.1 * FLOAT(jk-260) 383 END DO 384 DO jk= 271, jpk 385 zcoef(jk) = 10. 386 END DO 387 DO jk= 1, jpk 388 IF(lwp) WRITE(numout,*) 'k= ',jk, 'cof ', zcoef(jk) 389 END DO 390 #else 391 DO jk = 1, 21 378 392 zcoef(jk) = 1. 379 393 END DO … … 386 400 zcoef(jk) = 10. 387 401 END DO 388 402 #endif 403 389 404 DO jk = 2, jpk 390 405 ahm1(:,:,jk) = MIN( zahm0(:,:), zcoef(jk) * ahm1(:,:,1) ) -
trunk/NEMO/OPA_SRC/OBC/obcdta.F90
r465 r473 26 26 USE lib_mpp ! distributed memory computing 27 27 USE dynspg_oce ! choice/control of key cpp for surface pressure gradient 28 USE ioipsl 28 USE iom 29 # if defined key_dynspg_rl 29 30 USE obccli ! climatological obc, use only in rigid-lid case 31 # endif 30 32 31 33 IMPLICIT NONE … … 41 43 ntobc1, & ! first record used 42 44 ntobc2, & ! second record used 43 itobc ! number of time steps in OBC files44 45 REAL(wp), DIMENSION(:), ALLOCATABLE :: ztcobc ! time_counter variable of BCs45 ntobc ! number of time steps in OBC files 46 47 REAL(wp), DIMENSION(:), ALLOCATABLE :: tcobc ! time_counter variable of BCs 46 48 47 49 !! * Substitutions … … 72 74 !! attribute of variable time_counter). 73 75 !! 76 !! History : 77 !! ! 98-05 (J.M. Molines) Original code 78 !! 8.5 ! 02-10 (C. Talandier, A-M. Treguier) Free surface, F90 79 !! 9.0 ! 04-06 (F. Durand, A-M. Treguier) Netcdf BC files on input 74 80 !!-------------------------------------------------------------------- 75 81 !! * Arguments … … 83 89 !! * Ajouts FD 84 90 INTEGER :: isrel ! number of seconds since 1/1/1992 85 INTEGER, SAVE :: itobce, itobcw, & ! number of time steps in OBC files 86 itobcs, itobcn ! " " " " 87 INTEGER :: ikprint ! frequency for printouts. 88 INTEGER :: fid_e, fid_w, fid_n, fid_s ! file identifiers 89 LOGICAL :: l_exv 90 INTEGER, DIMENSION(flio_max_dims) :: f_d ! dimensions lenght 91 92 CHARACTER(LEN=25) :: v_name 91 INTEGER, DIMENSION(1) :: itobce, itobcw, & ! number of time steps in OBC files 92 itobcs, itobcn ! " " " " 93 INTEGER :: istop 94 INTEGER :: iprint ! frequency for printouts. 95 INTEGER :: id_e, id_w, id_n, id_s ! file identifiers 96 LOGICAL :: llnot_done 97 CHARACTER(LEN=25) :: cl_vname 93 98 !!-------------------------------------------------------------------- 94 99 95 100 IF( lk_dynspg_rl ) THEN 96 CALL obc_dta_psi( kt ) ! update bsf data at open boundaries 97 IF( nobc_dta == 1 .AND. kt == nit000 ) THEN 98 IF(lwp) WRITE(numout,*) ' time-variable psi boundary data not allowed yet' 99 STOP 100 ENDIF 101 CALL obc_dta_psi (kt) ! update bsf data at open boundaries 102 IF ( nobc_dta == 1 .AND. kt == nit000 ) CALL ctl_stop( 'obcdta : time-variable psi boundary data not allowed yet' ) 101 103 ENDIF 102 103 CALL ipslnlf( new_number=numout ) 104 104 105 105 ! 1. First call: check time frames available in files. 106 106 ! ------------------------------------------------------- 107 107 108 IF ( kt == nit000 )THEN108 IF ( kt == nit000 ) THEN 109 109 110 110 nlecto = 0 111 111 112 IF (lwp) WRITE(numout,*)113 IF (lwp) WRITE(numout,*) 'obc_dta : find boundary data'114 IF (lwp) WRITE(numout,*) '~~~~~~~'112 IF (lwp) WRITE(numout,*) 113 IF (lwp) WRITE(numout,*) 'obc_dta : find boundary data' 114 IF (lwp) WRITE(numout,*) '~~~~~~~' 115 115 116 IF ( nobc_dta == 0 )THEN116 IF ( nobc_dta == 0 ) THEN 117 117 IF(lwp) WRITE(numout,*) ' OBC data taken from initial conditions.' 118 118 ntobc1 = 1 119 119 ntobc2 = 1 120 120 ELSE 121 IF (lwp) WRITE(numout,*) ' OBC data taken from netcdf files.'122 IF (lwp) WRITE(numout,*) ' climatology (T/F):',ln_obc_clim121 IF (lwp) WRITE(numout,*) ' OBC data taken from netcdf files.' 122 IF (lwp) WRITE(numout,*) ' climatology (T/F):',ln_obc_clim 123 123 ! check the number of time steps in the files. 124 itobce =0 ; itobcw = 0; itobcn = 0; itobcs = 0 125 v_name = 'time_counter' 126 IF( lp_obc_east ) THEN 127 CALL flioopfd ('obceast_TS.nc',fid_e) 128 CALL flioinqv (fid_e,TRIM(v_name),l_exv,len_dims=f_d) 129 IF( l_exv ) THEN 130 itobce = f_d(1) 131 ELSE 132 WRITE(numout,*) ' Variable ',TRIM(v_name),' not found in file ','obceast_TS.nc' 124 cl_vname = 'time_counter' 125 IF ( lp_obc_east ) THEN 126 CALL iom_open ( 'obceast_TS.nc' , id_e ) 127 idvar = iom_varid( id_e, cl_vname, kdimsz = itobce ) 128 ENDIF 129 IF ( lp_obc_west ) THEN 130 CALL iom_open ( 'obcwest_TS.nc' , id_w ) 131 idvar = iom_varid( id_w, cl_vname, kdimsz = itobcw ) 132 ENDIF 133 IF ( lp_obc_north ) THEN 134 CALL iom_open ( 'obcnorth_TS.nc', id_n ) 135 idvar = iom_varid( id_n, cl_vname, kdimsz = itobcn ) 136 ENDIF 137 IF ( lp_obc_south ) THEN 138 CALL iom_open ( 'obcsouth_TS.nc', id_s ) 139 idvar = iom_varid( id_s, cl_vname, kdimsz = itobcs ) 140 ENDIF 141 142 ntobc = MAX(itobce(1),itobcw(1),itobcn(1),itobcs(1)) 143 istop = 0 144 IF ( lp_obc_east .AND. itobce(1) /= ntobc ) istop = 1 145 IF ( lp_obc_west .AND. itobcw(1) /= ntobc ) istop = 1 146 IF ( lp_obc_north .AND. itobcn(1) /= ntobc ) istop = 1 147 IF ( lp_obc_south .AND. itobcs(1) /= ntobc ) istop = 1 148 IF ( istop /= 0 ) THEN 149 WRITE(ctmp1,*) ' east, west, north, south: ', itobce(1), itobcw(1), itobcn(1), itobcs(1) 150 CALL ctl_stop( 'obcdta : all files must have the same number of time steps', ctmp1 ) 151 ENDIF 152 IF ( ntobc == 1 ) THEN 153 IF ( lwp ) WRITE(numout,*) ' obcdta found one time step only in the OBC files' 154 ELSE 155 ALLOCATE (tcobc(ntobc)) 156 llnot_done = .TRUE. 157 IF ( lp_obc_east ) THEN 158 IF ( llnot_done ) THEN 159 CALL iom_gettime ( id_e, TRIM(cl_vname), tcobc ) 160 llnot_done = .FALSE. 161 ENDIF 162 CALL iom_close (id_e) 133 163 ENDIF 134 ENDIF 135 IF( lp_obc_west ) THEN 136 CALL flioopfd ('obcwest_TS.nc',fid_w) 137 CALL flioinqv (fid_w,TRIM(v_name),l_exv,len_dims=f_d) 138 IF( l_exv ) THEN 139 itobcw = f_d(1) 140 ELSE 141 WRITE(numout,*) ' Variable ',TRIM(v_name),' not found in file ','obcwest_TS.nc' 164 IF ( lp_obc_west ) THEN 165 IF ( llnot_done ) THEN 166 CALL iom_gettime ( id_w, TRIM(cl_vname), tcobc ) 167 llnot_done = .FALSE. 168 ENDIF 169 CALL iom_close (id_w) 142 170 ENDIF 143 ENDIF 144 IF( lp_obc_north ) THEN 145 CALL flioopfd ('obcnorth_TS.nc',fid_n) 146 CALL flioinqv (fid_n,TRIM(v_name),l_exv,len_dims=f_d) 147 IF( l_exv ) THEN 148 itobcn = f_d(1) 149 ELSE 150 WRITE(numout,*) ' Variable ',TRIM(v_name),' not found in file ','obcnorth_TS.nc' 171 IF ( lp_obc_north ) THEN 172 IF ( llnot_done ) THEN 173 CALL iom_gettime ( id_n, TRIM(cl_vname), tcobc ) 174 llnot_done = .FALSE. 175 ENDIF 176 CALL iom_close (id_n) 151 177 ENDIF 152 ENDIF 153 IF( lp_obc_south ) THEN 154 CALL flioopfd ('obcsouth_TS.nc',fid_s) 155 CALL flioinqv (fid_s,TRIM(v_name),l_exv,len_dims=f_d) 156 IF( l_exv ) THEN 157 itobcs = f_d(1) 158 ELSE 159 WRITE(numout,*) ' Variable ',TRIM(v_name),' not found in file ','obcsouth_TS.nc' 178 IF ( lp_obc_south ) THEN 179 IF ( llnot_done ) THEN 180 CALL iom_gettime ( id_s, TRIM(cl_vname), tcobc ) 181 llnot_done = .FALSE. 182 ENDIF 183 CALL iom_close (id_s) 160 184 ENDIF 161 ENDIF 162 163 itobc = MAX(itobce,itobcw,itobcn,itobcs) 164 nstop = 0 165 IF( lp_obc_east .AND. itobce /= itobc ) nstop = nstop+1 166 IF( lp_obc_west .AND. itobcw /= itobc ) nstop = nstop+1 167 IF( lp_obc_north .AND. itobcn /= itobc ) nstop = nstop+1 168 IF( lp_obc_south .AND. itobcs /= itobc ) nstop = nstop+1 169 IF( nstop /= 0 ) THEN 170 IF( lwp ) THEN 171 WRITE(numout,*) ' obcdta : all files must have the same number of time steps' 172 WRITE(numout,*) ' east, west, north, south: ', itobce, itobcw, itobcn, itobcs 173 ENDIF 174 STOP 175 ENDIF 176 IF( itobc == 1 ) THEN 177 IF( lwp ) WRITE(numout,*) ' obcdta found one time step only in the OBC files' 178 ELSE 179 ALLOCATE (ztcobc(itobc)) 180 l_exv = .TRUE. 181 IF( lp_obc_east ) THEN 182 IF( l_exv ) THEN 183 CALL fliogetv (fid_e,TRIM(v_name),ztcobc) 184 l_exv = .FALSE. 185 ENDIF 186 CALL flioclo (fid_e) 187 ENDIF 188 IF( lp_obc_west ) THEN 189 IF( l_exv ) THEN 190 CALL fliogetv (fid_w,TRIM(v_name),ztcobc) 191 l_exv = .FALSE. 192 ENDIF 193 CALL flioclo (fid_w) 194 ENDIF 195 IF( lp_obc_north ) THEN 196 IF( l_exv ) THEN 197 CALL fliogetv (fid_n,TRIM(v_name),ztcobc) 198 l_exv = .FALSE. 199 ENDIF 200 CALL flioclo (fid_n) 201 ENDIF 202 IF( lp_obc_south ) THEN 203 IF( l_exv ) THEN 204 CALL fliogetv (fid_s,TRIM(v_name),ztcobc) 205 l_exv = .FALSE. 206 ENDIF 207 CALL flioclo (fid_s) 208 ENDIF 209 IF( lwp ) WRITE(numout,*) ' obcdta found', itobc,' time steps in the OBC files' 210 IF( .NOT. ln_obc_clim .AND. itobc == 12 ) THEN 185 IF ( lwp ) WRITE(numout,*) ' obcdta found', ntobc,' time steps in the OBC files' 186 IF ( .NOT. ln_obc_clim .AND. ntobc == 12 ) THEN 211 187 IF ( lwp ) WRITE(numout,*) ' WARNING: With monthly data we assume climatology' 212 188 ln_obc_clim = .true. … … 332 308 zxy = 0 333 309 ELSE 334 IF( itobc == 1 ) THEN310 IF( ntobc == 1 ) THEN 335 311 itimo = 1 336 ELSE IF( itobc == 12 ) THEN ! BC are monthly312 ELSE IF( ntobc == 12 ) THEN ! BC are monthly 337 313 ! we assume we have climatology in that case 338 314 iman = 12 … … 342 318 itimo = imois 343 319 ELSE 344 IF(lwp) WRITE(numout,*) 'data other than constant or monthly', kt345 iman = itobc346 itimo = FLOOR( kt*rdt / ( ztcobc(2)-ztcobc(1)) )320 IF(lwp) WRITE(numout,*) 'data other than constant or monthly', kt 321 iman = ntobc 322 itimo = FLOOR( kt*rdt / (tcobc(2)-tcobc(1)) ) 347 323 isrel = kt*rdt 348 324 ENDIF … … 355 331 356 332 ! Calendar computation 357 IF( itobc == 1 ) THEN ! BC are constant in time333 IF( ntobc == 1 ) THEN ! BC are constant in time 358 334 ntobc1 = 1 359 335 ntobc2 = 1 360 ELSE IF( itobc == 12 ) THEN ! BC are monthly336 ELSE IF( ntobc == 12 ) THEN ! BC are monthly 361 337 ntobc1 = itimo ! first file record used 362 338 ntobc2 = ntobc1 + 1 ! last file record used … … 386 362 ! ... Read datafile and set temperature, salinity and normal velocity 387 363 ! ... initialise the sedta, tedta, uedta arrays 388 CALL flioopfd ('obceast_TS.nc',fid_e)389 CALL obc_dta_gv (fid_e,'y','vosaline',jpjef-jpjed+1,ntobc1,pdta_3D=sedta(:,:,1))390 CALL obc_dta_gv (fid_e,'y','vosaline',jpjef-jpjed+1,ntobc2,pdta_3D=sedta(:,:,2))391 CALL obc_dta_gv (fid_e,'y','votemper',jpjef-jpjed+1,ntobc1,pdta_3D=tedta(:,:,1))392 CALL obc_dta_gv (fid_e,'y','votemper',jpjef-jpjed+1,ntobc2,pdta_3D=tedta(:,:,2))393 CALL flioclo (fid_e)394 395 CALL flioopfd ('obceast_U.nc',fid_e)396 CALL obc_dta_gv (fid_e,'y','vozocrtx',jpjef-jpjed+1,ntobc1,pdta_3D=uedta(:,:,1))397 CALL obc_dta_gv (fid_e,'y','vozocrtx',jpjef-jpjed+1,ntobc2,pdta_3D=uedta(:,:,2))398 CALL flioclo (fid_e)364 CALL iom_open ( 'obceast_TS.nc' , id_e ) 365 CALL iom_get ( id_e, jpdom_unknown, 'votemper', tedta(:,:,1), ktime=ntobc1 ) 366 CALL iom_get ( id_e, jpdom_unknown, 'votemper', tedta(:,:,2), ktime=ntobc2 ) 367 CALL iom_get ( id_e, jpdom_unknown, 'vosaline', sedta(:,:,1), ktime=ntobc1 ) 368 CALL iom_get ( id_e, jpdom_unknown, 'vosaline', sedta(:,:,2), ktime=ntobc2 ) 369 CALL iom_close (id_e) 370 ! 371 CALL iom_open ( 'obceast_U.nc' , id_e ) 372 CALL iom_get ( id_e, jpdom_unknown, 'vozocrtx', uedta(:,:,1), ktime=ntobc1 ) 373 CALL iom_get ( id_e, jpdom_unknown, 'vozocrtx', uedta(:,:,2), ktime=ntobc2 ) 374 CALL iom_close ( id_e ) 399 375 ! Usually printout is done only once at kt = nit000, 400 376 ! unless nprint (namelist) > 1 … … 402 378 WRITE(numout,*) 403 379 WRITE(numout,*) ' Read East OBC data records ', ntobc1, ntobc2 404 i kprint = (jpjef-jpjed+1)/20 +1380 iprint = (jpjef-jpjed+1)/20 +1 405 381 WRITE(numout,*) ' Temperature record 1 - printout every 3 level' 406 CALL prihre( tedta(:,:,1),jpjef-jpjed+1,jpk,1,jpjef-jpjed+1,i kprint, &382 CALL prihre( tedta(:,:,1),jpjef-jpjed+1,jpk,1,jpjef-jpjed+1,iprint, & 407 383 & jpk, 1, -3, 1., numout ) 408 384 WRITE(numout,*) 409 385 WRITE(numout,*) ' Salinity record 1 - printout every 3 level' 410 CALL prihre( sedta(:,:,1), jpjef-jpjed+1, jpk, 1, jpjef-jpjed+1, i kprint, &386 CALL prihre( sedta(:,:,1), jpjef-jpjed+1, jpk, 1, jpjef-jpjed+1, iprint, & 411 387 & jpk, 1, -3, 1., numout ) 412 388 WRITE(numout,*) 413 389 WRITE(numout,*) ' Normal velocity U record 1 - printout every 3 level' 414 CALL prihre( uedta(:,:,1), jpjef-jpjed+1, jpk, 1, jpjef-jpjed+1, i kprint, &390 CALL prihre( uedta(:,:,1), jpjef-jpjed+1, jpk, 1, jpjef-jpjed+1, iprint, & 415 391 & jpk, 1, -3, 1., numout ) 416 392 ENDIF … … 420 396 ! ... Read datafile and set temperature, salinity and normal velocity 421 397 ! ... initialise the swdta, twdta, uwdta arrays 422 CALL flioopfd ('obcwest_TS.nc',fid_w)423 CALL obc_dta_gv (fid_w,'y','vosaline',jpjwf-jpjwd+1,ntobc1,pdta_3D=swdta(:,:,1))424 CALL obc_dta_gv (fid_w,'y','vosaline',jpjwf-jpjwd+1,ntobc2,pdta_3D=swdta(:,:,2))425 CALL obc_dta_gv (fid_w,'y','votemper',jpjwf-jpjwd+1,ntobc1,pdta_3D=twdta(:,:,1))426 CALL obc_dta_gv (fid_w,'y','votemper',jpjwf-jpjwd+1,ntobc2,pdta_3D=twdta(:,:,2))427 CALL flioclo (fid_w)428 429 CALL flioopfd ('obcwest_U.nc',fid_w)430 CALL obc_dta_gv (fid_w,'y','vozocrtx',jpjwf-jpjwd+1,ntobc1,pdta_3D=uwdta(:,:,1))431 CALL obc_dta_gv (fid_w,'y','vozocrtx',jpjwf-jpjwd+1,ntobc2,pdta_3D=uwdta(:,:,2))432 CALL flioclo (fid_w)433 398 CALL iom_open ( 'obcwest_TS.nc' , id_w ) 399 CALL iom_get ( id_w, jpdom_unknown, 'votemper', twdta(:,:,1), ktime=ntobc1 ) 400 CALL iom_get ( id_w, jpdom_unknown, 'votemper', twdta(:,:,2), ktime=ntobc2 ) 401 CALL iom_get ( id_w, jpdom_unknown, 'vosaline', swdta(:,:,1), ktime=ntobc1 ) 402 CALL iom_get ( id_w, jpdom_unknown, 'vosaline', swdta(:,:,2), ktime=ntobc2 ) 403 CALL iom_close (id_w) 404 ! 405 CALL iom_open ( 'obcwest_U.nc' , id_w ) 406 CALL iom_get ( id_w, jpdom_unknown, 'vozocrtx', uwdta(:,:,1), ktime=ntobc1 ) 407 CALL iom_get ( id_w, jpdom_unknown, 'vozocrtx', uwdta(:,:,2), ktime=ntobc2 ) 408 CALL iom_close ( id_w ) 409 ! 434 410 IF( lwp .AND. ( kt == nit000 .OR. nprint /= 0 ) ) THEN 435 411 WRITE(numout,*) 436 412 WRITE(numout,*) ' Read West OBC data records ', ntobc1, ntobc2 437 i kprint = (jpjwf-jpjwd+1)/20 +1413 iprint = (jpjwf-jpjwd+1)/20 +1 438 414 WRITE(numout,*) ' Temperature record 1 - printout every 3 level' 439 CALL prihre( twdta(:,:,1), jpjwf-jpjwd+1, jpk, 1, jpjwf-jpjwd+1, i kprint, &415 CALL prihre( twdta(:,:,1), jpjwf-jpjwd+1, jpk, 1, jpjwf-jpjwd+1, iprint, & 440 416 & jpk, 1, -3, 1., numout ) 441 417 WRITE(numout,*) 442 418 WRITE(numout,*) ' Salinity record 1 - printout every 3 level' 443 CALL prihre( swdta(:,:,1), jpjwf-jpjwd+1, jpk, 1, jpjwf-jpjwd+1, i kprint, &419 CALL prihre( swdta(:,:,1), jpjwf-jpjwd+1, jpk, 1, jpjwf-jpjwd+1, iprint, & 444 420 & jpk, 1, -3, 1., numout ) 445 421 WRITE(numout,*) 446 422 WRITE(numout,*) ' Normal velocity U record 1 - printout every 3 level' 447 CALL prihre( uwdta(:,:,1), jpjwf-jpjwd+1, jpk, 1, jpjwf-jpjwd+1, i kprint, &423 CALL prihre( uwdta(:,:,1), jpjwf-jpjwd+1, jpk, 1, jpjwf-jpjwd+1, iprint, & 448 424 & jpk, 1, -3, 1., numout ) 449 425 ENDIF … … 451 427 452 428 IF( lp_obc_north ) THEN 453 CALL flioopfd ('obcnorth_TS.nc',fid_n)454 CALL obc_dta_gv (fid_n,'x','vosaline',jpinf-jpind+1,ntobc1,pdta_3D=sndta(:,:,1))455 CALL obc_dta_gv (fid_n,'x','vosaline',jpinf-jpind+1,ntobc2,pdta_3D=sndta(:,:,2))456 CALL obc_dta_gv (fid_n,'x','votemper',jpinf-jpind+1,ntobc1,pdta_3D=tndta(:,:,1))457 CALL obc_dta_gv (fid_n,'x','votemper',jpinf-jpind+1,ntobc2,pdta_3D=tndta(:,:,2))458 CALL flioclo (fid_n)459 460 CALL flioopfd ('obcnorth_V.nc',fid_n)461 CALL obc_dta_gv (fid_n,'x','vomecrty',jpinf-jpind+1,ntobc1,pdta_3D=vndta(:,:,1))462 CALL obc_dta_gv (fid_n,'x','vomecrty',jpinf-jpind+1,ntobc2,pdta_3D=vndta(:,:,2))463 CALL flioclo (fid_n)464 429 CALL iom_open ( 'obcnorth_TS.nc', id_n ) 430 CALL iom_get ( id_n, jpdom_unknown, 'votemper', tndta(:,:,1), ktime=ntobc1 ) 431 CALL iom_get ( id_n, jpdom_unknown, 'votemper', tndta(:,:,2), ktime=ntobc2 ) 432 CALL iom_get ( id_n, jpdom_unknown, 'vosaline', sndta(:,:,1), ktime=ntobc1 ) 433 CALL iom_get ( id_n, jpdom_unknown, 'vosaline', sndta(:,:,2), ktime=ntobc2 ) 434 CALL iom_close ( id_n ) 435 ! 436 CALL iom_open ( 'obcnorth_V.nc', id_n ) 437 CALL iom_get ( id_n, jpdom_unknown, 'vomecrty', vndta(:,:,1), ktime=ntobc1 ) 438 CALL iom_get ( id_n, jpdom_unknown ,'vomecrty', vndta(:,:,2), ktime=ntobc2 ) 439 CALL iom_close ( id_n ) 440 ! 465 441 IF( lwp .AND. ( kt == nit000 .OR. nprint /= 0 ) ) THEN 466 442 WRITE(numout,*) 467 443 WRITE(numout,*) ' Read North OBC data records ', ntobc1, ntobc2 468 i kprint = (jpinf-jpind+1)/20 +1444 iprint = (jpinf-jpind+1)/20 +1 469 445 WRITE(numout,*) ' Temperature record 1 - printout every 3 level' 470 CALL prihre( tndta(:,:,1), jpinf-jpind+1, jpk, 1, jpinf-jpind+1, i kprint, &446 CALL prihre( tndta(:,:,1), jpinf-jpind+1, jpk, 1, jpinf-jpind+1, iprint, & 471 447 & jpk, 1, -3, 1., numout ) 472 448 WRITE(numout,*) 473 449 WRITE(numout,*) ' Salinity record 1 - printout every 3 level' 474 CALL prihre( sndta(:,:,1), jpinf-jpind+1, jpk, 1, jpinf-jpind+1, i kprint, &450 CALL prihre( sndta(:,:,1), jpinf-jpind+1, jpk, 1, jpinf-jpind+1, iprint, & 475 451 & jpk, 1, -3, 1., numout ) 476 452 WRITE(numout,*) 477 453 WRITE(numout,*) ' Normal velocity V record 1 - printout every 3 level' 478 CALL prihre( vndta(:,:,1), jpinf-jpind+1, jpk, 1, jpinf-jpind+1, i kprint, &454 CALL prihre( vndta(:,:,1), jpinf-jpind+1, jpk, 1, jpinf-jpind+1, iprint, & 479 455 & jpk, 1, -3, 1., numout ) 480 456 ENDIF … … 482 458 483 459 IF( lp_obc_south ) THEN 484 CALL flioopfd ('obcsouth_TS.nc',fid_s)485 CALL obc_dta_gv (fid_s,'x','vosaline',jpisf-jpisd+1,ntobc1,pdta_3D=ssdta(:,:,1))486 CALL obc_dta_gv (fid_s,'x','vosaline',jpisf-jpisd+1,ntobc2,pdta_3D=ssdta(:,:,2))487 CALL obc_dta_gv (fid_s,'x','votemper',jpisf-jpisd+1,ntobc1,pdta_3D=tsdta(:,:,1))488 CALL obc_dta_gv (fid_s,'x','votemper',jpisf-jpisd+1,ntobc2,pdta_3D=tsdta(:,:,2))489 CALL flioclo (fid_s)490 491 CALL flioopfd ('obcsouth_V.nc',fid_s)492 CALL obc_dta_gv (fid_s,'x','vomecrty',jpisf-jpisd+1,ntobc1,pdta_3D=vsdta(:,:,1))493 CALL obc_dta_gv (fid_s,'x','vomecrty',jpisf-jpisd+1,ntobc2,pdta_3D=vsdta(:,:,2))494 CALL flioclo (fid_s)495 460 CALL iom_open ( 'obcsouth_TS.nc', id_s ) 461 CALL iom_get ( id_s, jpdom_unknown, 'votemper', tsdta(:,:,1), ktime=ntobc1 ) 462 CALL iom_get ( id_s, jpdom_unknown, 'votemper', tsdta(:,:,2), ktime=ntobc2 ) 463 CALL iom_get ( id_s, jpdom_unknown, 'vosaline', ssdta(:,:,1), ktime=ntobc1 ) 464 CALL iom_get ( id_s, jpdom_unknown, 'vosaline', ssdta(:,:,2), ktime=ntobc2 ) 465 CALL iom_close ( id_s ) 466 ! 467 CALL iom_open ( 'obcsouth_V.nc', id_s ) 468 CALL iom_get ( id_s, jpdom_unknown, 'vomecrty', vsdta(:,:,1), ktime=ntobc1 ) 469 CALL iom_get ( id_s, jpdom_unknown ,'vomecrty', vsdta(:,:,2), ktime=ntobc2 ) 470 CALL iom_close ( id_s ) 471 ! 496 472 IF( lwp .AND. ( kt == nit000 .OR. nprint /= 0 ) ) THEN 497 473 WRITE(numout,*) 498 474 WRITE(numout,*) ' Read South OBC data records ', ntobc1, ntobc2 499 i kprint = (jpisf-jpisd+1)/20 +1475 iprint = (jpisf-jpisd+1)/20 +1 500 476 WRITE(numout,*) ' Temperature record 1 - printout every 3 level' 501 CALL prihre( tsdta(:,:,1), jpisf-jpisd+1, jpk, 1, jpisf-jpisd+1, i kprint, &477 CALL prihre( tsdta(:,:,1), jpisf-jpisd+1, jpk, 1, jpisf-jpisd+1, iprint, & 502 478 & jpk, 1, -3, 1., numout ) 503 479 WRITE(numout,*) 504 480 WRITE(numout,*) ' Salinity record 1 - printout every 3 level' 505 CALL prihre( ssdta(:,:,1), jpisf-jpisd+1, jpk, 1, jpisf-jpisd+1, i kprint, &481 CALL prihre( ssdta(:,:,1), jpisf-jpisd+1, jpk, 1, jpisf-jpisd+1, iprint, & 506 482 & jpk, 1, -3, 1., numout ) 507 483 WRITE(numout,*) 508 484 WRITE(numout,*) ' Normal velocity V record 1 - printout every 3 level' 509 CALL prihre( vsdta(:,:,1), jpisf-jpisd+1, jpk, 1, jpisf-jpisd+1, i kprint, &485 CALL prihre( vsdta(:,:,1), jpisf-jpisd+1, jpk, 1, jpisf-jpisd+1, iprint, & 510 486 & jpk, 1, -3, 1., numout ) 511 487 ENDIF … … 522 498 ! ---------------------------------------------------- 523 499 524 IF( itobc == 1 .OR. nobc_dta == 0 ) THEN500 IF( ntobc == 1 .OR. nobc_dta == 0 ) THEN 525 501 zxy = 0. 526 ELSE IF( itobc == 12 ) THEN502 ELSE IF( ntobc == 12 ) THEN 527 503 zxy = FLOAT( nday + 15 - 30 * i15 ) / 30. 528 504 ELSE 529 zxy = ( ztcobc(ntobc1)-FLOAT(isrel))/(ztcobc(ntobc1)-ztcobc(ntobc2))505 zxy = (tcobc(ntobc1)-FLOAT(isrel))/(tcobc(ntobc1)-tcobc(ntobc2)) 530 506 ENDIF 531 507 … … 793 769 !! * Local declarations 794 770 INTEGER :: ji, jj, jk, ii, ij ! dummy loop indices 795 INTEGER :: fid_e, fid_w, fid_n, fid_s, fid ! file identifiers771 INTEGER :: id_e, id_w, id_n, id_s, fid ! file identifiers 796 772 INTEGER :: itimo, iman, imois, i15 797 INTEGER :: ntobcm, ntobcp, itimom, itimop773 INTEGER :: itobcm, itobcp, itimom, itimop 798 774 REAL(wp) :: zxy 799 775 INTEGER :: isrel, ikt ! number of seconds since 1/1/1992 800 INTEGER :: i kprint ! frequency for printouts.776 INTEGER :: iprint ! frequency for printouts. 801 777 802 778 !!--------------------------------------------------------------------------- … … 909 885 zxy = 0 910 886 ELSE 911 IF( itobc == 1) THEN887 IF(ntobc == 1) THEN 912 888 itimo = 1 913 ELSE IF ( itobc == 12) THEN ! BC are monthly889 ELSE IF (ntobc == 12) THEN ! BC are monthly 914 890 ! we assume we have climatology in that case 915 891 iman = 12 … … 920 896 ELSE 921 897 IF(lwp) WRITE(numout,*) 'data other than constant or monthly',kt 922 iman = itobc923 itimo = FLOOR( kt*rdt / ztcobc(1))898 iman = ntobc 899 itimo = FLOOR( kt*rdt / tcobc(1)) 924 900 isrel=kt*rdt 925 901 ENDIF … … 936 912 sshedta(:,0) = sshedta(:,1) 937 913 ubtedta(:,0) = ubtedta(:,1) 938 CALL flioopfd ('obceast_TS.nc',fid_e)939 CALL obc_dta_gv (fid_e,'y','vossurfh',jpjef-jpjed+1,ntobc1,pdta_2D=sshedta(:,1))940 CALL obc_dta_gv (fid_e,'y','vossurfh',jpjef-jpjed+1,ntobc2,pdta_2D=sshedta(:,2))914 CALL iom_open ( 'obceast_TS.nc', id_e ) 915 CALL iom_get ( id_e, jpdom_unknown, 'vossurfh', sshedta(:,1), ktime=ntobc1 ) 916 CALL iom_get ( id_e, jpdom_unknown, 'vossurfh', sshedta(:,2), ktime=ntobc2 ) 941 917 IF( lk_dynspg_ts ) THEN 942 CALL obc_dta_gv (fid_e,'y','vossurfh',jpjef-jpjed+1,ntobc2+1,pdta_2D=sshedta(:,3))943 ENDIF 944 CALL flioclo (fid_e)945 946 CALL flioopfd ('obceast_U.nc',fid_e)947 CALL obc_dta_gv (fid_e,'y','vozoubt',jpjef-jpjed+1,ntobc1,pdta_2D=ubtedta(:,1))948 CALL obc_dta_gv (fid_e,'y','vozoubt',jpjef-jpjed+1,ntobc2,pdta_2D=ubtedta(:,2))918 CALL iom_get (id_e, jpdom_unknown, 'vossurfh', sshedta(:,3), ktime=ntobc2+1 ) 919 ENDIF 920 CALL iom_close ( id_e ) 921 ! 922 CALL iom_open ( 'obceast_U.nc', id_e ) 923 CALL iom_get ( id_e, jpdom_unknown, 'vozoubt', ubtedta(:,1), ktime=ntobc1 ) 924 CALL iom_get ( id_e, jpdom_unknown, 'vozoubt', ubtedta(:,2), ktime=ntobc2 ) 949 925 IF( lk_dynspg_ts ) THEN 950 CALL obc_dta_gv (fid_e,'y','vozoubt',jpjef-jpjed+1,ntobc2+1,pdta_2D=ubtedta(:,3)) 951 ENDIF 952 CALL flioclo (fid_e) 953 926 CALL iom_get ( id_e, jpdom_unknown, 'vozoubt', ubtedta(:,3), ktime=ntobc2+1 ) 927 ENDIF 928 CALL iom_close ( id_e ) 954 929 ! ... Usually printout is done only once at kt = nit000, unless nprint (namelist) > 1 955 930 IF( lwp .AND. ( kt == nit000 .OR. nprint /= 0 ) ) THEN 956 931 WRITE(numout,*) 957 932 WRITE(numout,*) ' Read East OBC barotropic data records ', ntobc1, ntobc2 958 i kprint = (jpjef-jpjed+1)/20 +1933 iprint = (jpjef-jpjed+1)/20 +1 959 934 WRITE(numout,*) 960 935 WRITE(numout,*) ' Sea surface height record 1' 961 CALL prihre( sshedta(:,1), jpjef-jpjed+1, 1, 1, jpjef-jpjed+1, i kprint, 1, 1, -3, 1., numout )962 WRITE(numout,*) 963 WRITE(numout,*) ' Normal transport (m2/s) record 1',i kprint964 CALL prihre( ubtedta(:,1), jpjef-jpjed+1, 1, 1, jpjef-jpjed+1, i kprint, 1, 1, -3, 1., numout )936 CALL prihre( sshedta(:,1), jpjef-jpjed+1, 1, 1, jpjef-jpjed+1, iprint, 1, 1, -3, 1., numout ) 937 WRITE(numout,*) 938 WRITE(numout,*) ' Normal transport (m2/s) record 1',iprint 939 CALL prihre( ubtedta(:,1), jpjef-jpjed+1, 1, 1, jpjef-jpjed+1, iprint, 1, 1, -3, 1., numout ) 965 940 ENDIF 966 941 ENDIF … … 971 946 sshwdta(:,0) = sshwdta(:,1) 972 947 ubtwdta(:,0) = ubtwdta(:,1) 973 CALL flioopfd ('obcwest_TS.nc',fid_w)974 CALL obc_dta_gv (fid_w,'y','vossurfh',jpjwf-jpjwd+1,ntobc1,pdta_2D=sshwdta(:,1))975 CALL obc_dta_gv (fid_w,'y','vossurfh',jpjwf-jpjwd+1,ntobc2,pdta_2D=sshwdta(:,2))948 CALL iom_open ( 'obcwest_TS.nc', id_w ) 949 CALL iom_get ( id_w, jpdom_unknown, 'vossurfh', sshwdta(:,1), ktime=ntobc1 ) 950 CALL iom_get ( id_w, jpdom_unknown, 'vossurfh', sshwdta(:,2), ktime=ntobc2 ) 976 951 IF( lk_dynspg_ts ) THEN 977 CALL obc_dta_gv (fid_w,'y','vossurfh',jpjwf-jpjwd+1,ntobc2+1,pdta_2D=sshwdta(:,3))978 ENDIF 979 CALL flioclo (fid_w)980 981 CALL flioopfd ('obcwest_U.nc',fid_w)982 CALL obc_dta_gv (fid_w,'y','vozoubt',jpjwf-jpjwd+1,ntobc1,pdta_2D=ubtwdta(:,1))983 CALL obc_dta_gv (fid_w,'y','vozoubt',jpjwf-jpjwd+1,ntobc2,pdta_2D=ubtwdta(:,2))952 CALL ( id_w, jpdom_unknown, 'vossurfh', sshwdta(:,3), ktime=ntobc2+1 ) 953 ENDIF 954 CALL iom_close ( id_w ) 955 ! 956 CALL iom_open ( 'obcwest_U.nc', id_w ) 957 CALL iom_get ( id_w, jpdom_unknown, 'vozoubt', ubtwdta(:,1), ktime=ntobc1 ) 958 CALL iom_get ( id_w, jpdom_unknown, 'vozoubt', ubtwdta(:,2), ktime=ntobc2 ) 984 959 IF( lk_dynspg_ts ) THEN 985 CALL obc_dta_gv (fid_w,'y','vozoubt',jpjwf-jpjwd+1,ntobc2+1,pdta_2D=ubtwdta(:,3)) 986 ENDIF 987 CALL flioclo (fid_w) 988 960 CALL iom_get ( id_w, jpdom_unknown, 'vozoubt', ubtwdta(:,3), ktime=ntobc2+1 ) 961 ENDIF 962 CALL iom_close ( id_w ) 989 963 ! ... Usually printout is done only once at kt = nit000, unless nprint (namelist) > 1 990 964 IF( lwp .AND. ( kt == nit000 .OR. nprint /= 0 ) ) THEN 991 965 WRITE(numout,*) 992 966 WRITE(numout,*) ' Read West OBC barotropic data records ', ntobc1, ntobc2 993 i kprint = (jpjwf-jpjwd+1)/20 +1967 iprint = (jpjwf-jpjwd+1)/20 +1 994 968 WRITE(numout,*) 995 969 WRITE(numout,*) ' Sea surface height record 1 - printout surface level' 996 CALL prihre( sshwdta(:,1), jpjwf-jpjwd+1, 1, 1, jpjwf-jpjwd+1, i kprint, 1, 1, -3, 1., numout )970 CALL prihre( sshwdta(:,1), jpjwf-jpjwd+1, 1, 1, jpjwf-jpjwd+1, iprint, 1, 1, -3, 1., numout ) 997 971 WRITE(numout,*) 998 972 WRITE(numout,*) ' Normal transport (m2/s) record 1' 999 CALL prihre( ubtwdta(:,1), jpjwf-jpjwd+1, 1, 1, jpjwf-jpjwd+1, i kprint, 1, 1, -3, 1., numout )973 CALL prihre( ubtwdta(:,1), jpjwf-jpjwd+1, 1, 1, jpjwf-jpjwd+1, iprint, 1, 1, -3, 1., numout ) 1000 974 ENDIF 1001 975 ENDIF … … 1006 980 sshndta(:,0) = sshndta(:,1) 1007 981 vbtndta(:,0) = vbtndta(:,1) 1008 CALL flioopfd ('obcnorth_TS.nc',fid_n)1009 CALL obc_dta_gv (fid_n,'x','vossurfh',jpinf-jpind+1,ntobc1,pdta_2D=sshndta(:,1))1010 CALL obc_dta_gv (fid_n,'x','vossurfh',jpinf-jpind+1,ntobc2,pdta_2D=sshndta(:,2))982 CALL iom_open ( 'obcnorth_TS.nc', id_n ) 983 CALL iom_get (id_n, jpdom_unknown, 'vossurfh', sshndta(:,1), ktime=ntobc1 ) 984 CALL iom_get (id_n, jpdom_unknown, 'vossurfh', sshndta(:,2), ktime=ntobc2 ) 1011 985 IF( lk_dynspg_ts ) THEN 1012 CALL obc_dta_gv (fid_n,'x','vossurfh',jpinf-jpind+1,ntobc2+1,pdta_2D=sshndta(:,3))1013 ENDIF 1014 CALL flioclo (fid_n)1015 1016 CALL flioopfd ('obcnorth_V.nc',fid_n)1017 CALL obc_dta_gv (fid_n,'x','vomevbt',jpinf-jpind+1,ntobc1,pdta_2D=vbtndta(:,1))1018 CALL obc_dta_gv (fid_n,'x','vomevbt',jpinf-jpind+1,ntobc2,pdta_2D=vbtndta(:,2))986 CALL iom_get (id_n, jpdom_unknown, 'vossurfh', sshndta(:,3), ktime=ntobc2+1 ) 987 ENDIF 988 CALL iom_close ( id_n ) 989 990 CALL iom_open ( 'obcnorth_V.nc', id_n ) 991 CALL iom_get (id_n, jpdom_unknown, 'vomevbt', vbtndta(:,1), ktime=ntobc1 ) 992 CALL iom_get (id_n, jpdom_unknown, 'vomevbt', vbtndta(:,2), ktime=ntobc2 ) 1019 993 IF( lk_dynspg_ts ) THEN 1020 CALL obc_dta_gv (fid_n,'x','vomevbt',jpinf-jpind+1,ntobc2+1,pdta_2D=vbtndta(:,3))1021 ENDIF 1022 CALL flioclo (fid_n)994 CALL iom_get (id_n, jpdom_unknown, 'vomevbt', vbtndta(:,3), ktime=ntobc2+1 ) 995 ENDIF 996 CALL iom_close ( id_n ) 1023 997 1024 998 ! ... Usually printout is done only once at kt = nit000, unless nprint (namelist) > 1 … … 1026 1000 WRITE(numout,*) 1027 1001 WRITE(numout,*) ' Read North OBC barotropic data records ', ntobc1, ntobc2 1028 i kprint = (jpinf-jpind+1)/20 +11002 iprint = (jpinf-jpind+1)/20 +1 1029 1003 WRITE(numout,*) 1030 1004 WRITE(numout,*) ' Sea surface height record 1 - printout surface level' 1031 CALL prihre( sshndta(:,1), jpinf-jpind+1, 1, 1, jpinf-jpind+1, i kprint, 1, 1, -3, 1., numout )1005 CALL prihre( sshndta(:,1), jpinf-jpind+1, 1, 1, jpinf-jpind+1, iprint, 1, 1, -3, 1., numout ) 1032 1006 WRITE(numout,*) 1033 1007 WRITE(numout,*) ' Normal transport (m2/s) record 1' 1034 CALL prihre( vbtndta(:,1), jpinf-jpind+1, 1, 1, jpinf-jpind+1, i kprint, 1, 1, -3, 1., numout )1008 CALL prihre( vbtndta(:,1), jpinf-jpind+1, 1, 1, jpinf-jpind+1, iprint, 1, 1, -3, 1., numout ) 1035 1009 ENDIF 1036 1010 ENDIF … … 1041 1015 sshsdta(:,0) = sshsdta(:,1) 1042 1016 vbtsdta(:,0) = vbtsdta(:,1) 1043 CALL flioopfd ('obcsouth_TS.nc',fid_s)1044 CALL obc_dta_gv (fid_s,'x','vossurfh',jpisf-jpisd+1,ntobc1,pdta_2D=sshsdta(:,1))1045 CALL obc_dta_gv (fid_s,'x','vossurfh',jpisf-jpisd+1,ntobc2,pdta_2D=sshsdta(:,2))1017 CALL iom_open ( 'obcsouth_TS.nc', id_s ) 1018 CALL iom_get ( id_s, jpdom_unknown, 'vossurfh', sshsdta(:,1), ktime=ntobc1 ) 1019 CALL iom_get ( id_s, jpdom_unknown, 'vossurfh', sshsdta(:,2), ktime=ntobc2 ) 1046 1020 IF( lk_dynspg_ts ) THEN 1047 CALL obc_dta_gv (fid_s,'x','vossurfh',jpisf-jpisd+1,ntobc2+1,pdta_2D=sshsdta(:,3))1048 ENDIF 1049 CALL flioclo (fid_s)1050 1051 CALL flioopfd ('obcsouth_V.nc',fid_s)1052 CALL obc_dta_gv (fid_s,'x','vomevbt',jpisf-jpisd+1,ntobc1,pdta_2D=vbtsdta(:,1))1053 CALL obc_dta_gv (fid_s,'x','vomevbt',jpisf-jpisd+1,ntobc2,pdta_2D=vbtsdta(:,2))1021 CALL iom_get ( id_s, jpdom_unknown, 'vossurfh', sshsdta(:,3), ktime=ntobc2+1 ) 1022 ENDIF 1023 CALL iom_close ( id_s ) 1024 1025 CALL iom_open ( 'obcsouth_V.nc', id_s ) 1026 CALL iom_get ( id_s, jpdom_unknown, 'vomevbt', vbtsdta(:,1), ktime=ntobc1 ) 1027 CALL iom_get ( id_s, jpdom_unknown, 'vomevbt', vbtsdta(:,2), ktime=ntobc2 ) 1054 1028 IF( lk_dynspg_ts ) THEN 1055 CALL obc_dta_gv (fid_s,'x','vomevbt',jpisf-jpisd+1,ntobc2+1,pdta_2D=vbtsdta(:,3))1056 ENDIF 1057 CALL flioclo (fid_s)1029 CALL iom_get ( id_s, jpdom_unknown, 'vomevbt', vbtsdta(:,3), ktime=ntobc2+1 ) 1030 ENDIF 1031 CALL iom_close ( id_s ) 1058 1032 1059 1033 ! ... Usually printout is done only once at kt = nit000, unless nprint (namelist) > 1 … … 1061 1035 WRITE(numout,*) 1062 1036 WRITE(numout,*) ' Read South OBC barotropic data records ', ntobc1, ntobc2 1063 i kprint = (jpisf-jpisd+1)/20 +11037 iprint = (jpisf-jpisd+1)/20 +1 1064 1038 WRITE(numout,*) 1065 1039 WRITE(numout,*) ' Sea surface height record 1 - printout surface level' 1066 CALL prihre( sshsdta(:,1), jpisf-jpisd+1, 1, 1, jpisf-jpisd+1, i kprint, 1, 1, -3, 1., numout )1040 CALL prihre( sshsdta(:,1), jpisf-jpisd+1, 1, 1, jpisf-jpisd+1, iprint, 1, 1, -3, 1., numout ) 1067 1041 WRITE(numout,*) 1068 1042 WRITE(numout,*) ' Normal transport (m2/s) record 1' 1069 CALL prihre( vbtsdta(:,1), jpisf-jpisd+1, 1, 1, jpisf-jpisd+1, i kprint, 1, 1, -3, 1., numout )1043 CALL prihre( vbtsdta(:,1), jpisf-jpisd+1, 1, 1, jpisf-jpisd+1, iprint, 1, 1, -3, 1., numout ) 1070 1044 ENDIF 1071 1045 ENDIF … … 1081 1055 IF( nobc_dta == 1 ) THEN 1082 1056 isrel = (kt-1)*rdt + kbt*rdtbt 1083 itimo = FLOOR( kt*rdt / ( ztcobc(2)-ztcobc(1)) )1084 itimom = FLOOR( (kt-1)*rdt / ( ztcobc(2)-ztcobc(1)) )1085 itimop = FLOOR( (kt+1)*rdt / ( ztcobc(2)-ztcobc(1)) )1057 itimo = FLOOR( kt*rdt / (tcobc(2)-tcobc(1)) ) 1058 itimom = FLOOR( (kt-1)*rdt / (tcobc(2)-tcobc(1)) ) 1059 itimop = FLOOR( (kt+1)*rdt / (tcobc(2)-tcobc(1)) ) 1086 1060 IF( itimom == itimo .AND. itimop == itimo ) THEN 1087 ntobcm = ntobc11088 ntobcp = ntobc21061 itobcm = ntobc1 1062 itobcp = ntobc2 1089 1063 1090 1064 ELSEIF ( itimom <= itimo .AND. itimop == itimo ) THEN 1091 IF( FLOOR( isrel / ( ztcobc(2)-ztcobc(1)) ) < itimo ) THEN1092 ntobcm = ntobc1-11093 ntobcp = ntobc2-11065 IF( FLOOR( isrel / (tcobc(2)-tcobc(1)) ) < itimo ) THEN 1066 itobcm = ntobc1-1 1067 itobcp = ntobc2-1 1094 1068 ELSE 1095 ntobcm = ntobc11096 ntobcp = ntobc21069 itobcm = ntobc1 1070 itobcp = ntobc2 1097 1071 ENDIF 1098 1072 1099 1073 ELSEIF ( itimom == itimo .AND. itimop >= itimo ) THEN 1100 IF( FLOOR( isrel / ( ztcobc(2)-ztcobc(1)) ) < itimop ) THEN1101 ntobcm = ntobc11102 ntobcp = ntobc21074 IF( FLOOR( isrel / (tcobc(2)-tcobc(1)) ) < itimop ) THEN 1075 itobcm = ntobc1 1076 itobcp = ntobc2 1103 1077 ELSE 1104 ntobcm = ntobc1+11105 ntobcp = ntobc2+11078 itobcm = ntobc1+1 1079 itobcp = ntobc2+1 1106 1080 ENDIF 1107 1081 1108 1082 ELSEIF ( itimom == itimo-1 .AND. itimop == itimo+1 ) THEN 1109 IF( FLOOR( isrel / ( ztcobc(2)-ztcobc(1)) ) < itimo ) THEN1110 ntobcm = ntobc1-11111 ntobcp = ntobc2-11112 ELSEIF ( FLOOR( isrel / ( ztcobc(2)-ztcobc(1)) ) < itimop ) THEN1113 ntobcm = ntobc11114 ntobcp = ntobc21115 ELSEIF ( FLOOR( isrel / ( ztcobc(2)-ztcobc(1)) ) == itimop ) THEN1116 ntobcm = ntobc1+11117 ntobcp = ntobc2+21083 IF( FLOOR( isrel / (tcobc(2)-tcobc(1)) ) < itimo ) THEN 1084 itobcm = ntobc1-1 1085 itobcp = ntobc2-1 1086 ELSEIF ( FLOOR( isrel / (tcobc(2)-tcobc(1)) ) < itimop ) THEN 1087 itobcm = ntobc1 1088 itobcp = ntobc2 1089 ELSEIF ( FLOOR( isrel / (tcobc(2)-tcobc(1)) ) == itimop ) THEN 1090 itobcm = ntobc1+1 1091 itobcp = ntobc2+2 1118 1092 ELSE 1119 1093 IF(lwp) WRITE(numout, *) 'obc_dta_bt: You should not have seen this print! error 1?' … … 1127 1101 ELSE IF( lk_dynspg_exp ) THEN 1128 1102 isrel=kt*rdt 1129 ntobcm = ntobc11130 ntobcp = ntobc21103 itobcm = ntobc1 1104 itobcp = ntobc2 1131 1105 ENDIF 1132 1106 1133 IF( itobc == 1 .OR. nobc_dta == 0 ) THEN1107 IF( ntobc == 1 .OR. nobc_dta == 0 ) THEN 1134 1108 zxy = 0.e0 1135 ELSE IF( itobc == 12 ) THEN1109 ELSE IF( ntobc == 12 ) THEN 1136 1110 zxy = FLOAT( nday + 15 - 30 * i15 ) / 30. 1137 1111 ELSE 1138 zxy = ( ztcobc(ntobcm)-FLOAT(isrel)) / (ztcobc(ntobcm)-ztcobc(ntobcp))1112 zxy = (tcobc(itobcm)-FLOAT(isrel)) / (tcobc(itobcm)-tcobc(itobcp)) 1139 1113 ENDIF 1140 1114 … … 1177 1151 !! Default option 1178 1152 !!----------------------------------------------------------------------------- 1179 SUBROUTINE obc_dta_bt( kt, kbt ) ! Empty routine 1180 INTEGER,INTENT(in) :: kt, kbt 1181 WRITE(*,*) 'obc_dta_bt: You should not have seen this print! error?', kt, kbt 1153 SUBROUTINE obc_dta_bt ( kt, kbt ) ! Empty routine 1154 !! * Arguments 1155 INTEGER,INTENT(in) :: kt 1156 INTEGER, INTENT( in ) :: kbt ! barotropic ocean time-step index 1157 WRITE(*,*) 'obc_dta_bt: You should not have seen this print! error?', kt 1158 WRITE(*,*) 'obc_dta_bt: You should not have seen this print! error?', kbt 1182 1159 END SUBROUTINE obc_dta_bt 1183 1160 #endif 1184 1185 1186 SUBROUTINE obc_dta_gv (ifid,cldim,clobc,kobcij,ktobc,pdta_2D,pdta_3D)1187 !!-----------------------------------------------------------------------------1188 !! *** SUBROUTINE obc_dta_gv ***1189 !!1190 !! ** Purpose : Read an OBC forcing field from netcdf file1191 !! Input file are supposed to be 3D e.g.1192 !! - for a South or North OB : longitude x depth x time1193 !! - for a West or East OB : latitude x depth x time1194 !!1195 !! History :1196 !! ! 04-06 (A.-M. Treguier, F. Durand) Original code1197 !! ! 05-02 (J. Bellier, C. Talandier) use fliocom CALL1198 !!----------------------------------------------------------------------------1199 !! * Arguments1200 INTEGER, INTENT(IN) :: &1201 ifid , & ! netcdf file name identifier1202 kobcij, & ! Horizontal (i or j) dimension of the array1203 ktobc ! starting time index read1204 CHARACTER(LEN=*), INTENT(IN) :: &1205 cldim, & ! dimension along which is the open boundary ('x' or 'y')1206 clobc ! name of the netcdf variable read1207 REAL, DIMENSION(kobcij,jpk,1), INTENT(OUT), OPTIONAL :: &1208 pdta_3D ! 3D array of OBC forcing field1209 REAL, DIMENSION(kobcij,1), INTENT(OUT), OPTIONAL :: &1210 pdta_2D ! 3D array of OBC forcing field1211 1212 !! * Local declarations1213 INTEGER :: indim1214 LOGICAL :: l_exv1215 INTEGER,DIMENSION(4) :: f_d, istart, icount1216 REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: v_tmp_41217 !----------------------------------------------------------------------1218 1219 CALL flioinqv (ifid,TRIM(clobc),l_exv,nb_dims=indim,len_dims=f_d)1220 IF( l_exv ) THEN1221 ! checks the number of dimensions1222 IF( indim == 2 ) THEN1223 istart(1:2) = (/ 1 , ktobc /)1224 icount(1:2) = (/ kobcij, 1 /)1225 CALL fliogetv (ifid,TRIM(clobc),pdta_2D,start=istart(1:2),count=icount(1:2))1226 ELSE IF( indim == 3 ) THEN1227 istart(1:3) = (/ 1 , 1 , ktobc /)1228 icount(1:3) = (/ kobcij, jpk , 1 /)1229 CALL fliogetv (ifid,TRIM(clobc),pdta_3D,start=istart(1:3),count=icount(1:3))1230 ELSE IF( indim == 4 ) THEN1231 istart(1:4) = (/ 1, 1, 1, ktobc /)1232 IF( TRIM(cldim) == 'y' ) THEN1233 icount(1:4) = (/ 1 , kobcij, jpk , 1 /)1234 ELSE1235 icount(1:4) = (/ kobcij, 1 , jpk , 1 /)1236 ENDIF1237 ALLOCATE (v_tmp_4(icount(1),icount(2),icount(3),icount(4)))1238 CALL fliogetv (ifid,TRIM(clobc),v_tmp_4,start=istart(1:4),count=icount(1:4))1239 IF( TRIM(cldim) == 'y' ) THEN1240 pdta_3D(1:kobcij,1:jpk,1:1) = v_tmp_4(1,1:kobcij,1:jpk,1:1)1241 ELSE1242 pdta_3D(1:kobcij,1:jpk,1:1) = v_tmp_4(1:kobcij,1,1:jpk,1:1)1243 ENDIF1244 DEALLOCATE (v_tmp_4)1245 ELSE1246 IF( lwp ) THEN1247 WRITE(numout,*) ' Problem in OBC file for ',TRIM(clobc),' :'1248 WRITE(numout,*) ' number of dimensions (not 3 or 4) =',indim1249 ENDIF1250 STOP1251 ENDIF1252 ELSE1253 WRITE(numout,*) ' Variable ',TRIM(clobc),' not found'1254 ENDIF1255 1256 END SUBROUTINE obc_dta_gv1257 1161 1258 1162 #else -
trunk/NEMO/OPA_SRC/SBC/blk_oce.F90
r298 r473 11 11 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 12 12 !!---------------------------------------------------------------------- 13 #if defined key_flx_bulk_monthly || defined key_flx_bulk_daily 13 #if defined key_flx_bulk_monthly || defined key_flx_bulk_daily || defined key_flx_core 14 14 !!---------------------------------------------------------------------- 15 15 !! ' key_flx_bulk_monthly or defined key_flx_bulk_daily bulk -
trunk/NEMO/OPA_SRC/SBC/flx_bulk_daily.h90
r444 r473 14 14 numfl1, numfl2, & ! logical units for surface fluxes data 15 15 numfl3, numfl4, & ! 16 nflx1, nflx2, & ! first and second record used 17 nflx11, nflx12 , & ! ??? 16 nflx1 , nflx2 , & ! first and second record used 18 17 ndayflx 19 18 … … 55 54 !! ! 92-07 (M. Imbard) 56 55 !! ! 96-11 (E. Guilyardi) Daily AGCM input files 57 !! ! 99-11 (M. Imbard) NetCDF FORMAT with io ipsl56 !! ! 99-11 (M. Imbard) NetCDF FORMAT with io-ipsl 58 57 !! ! 00-05 (K. Rodgers) Daily Netcdf 59 58 !! 8.5 ! 02-09 (C. Ethe and G. Madec) F90: Free form and MODULE 60 59 !!---------------------------------------------------------------------- 61 60 !! * modules used 62 USE io ipsl ! NetCDF IPSLlibrary61 USE iom ! I/O library 63 62 USE blk_oce ! bulk variable 64 63 USE bulk ! bulk module … … 68 67 69 68 !! * Local declarations 70 INTEGER , PARAMETER :: jpday = 365, jpmois = 12 71 INTEGER :: i15,iday, idy 72 INTEGER :: ipi,ipj,ipk 73 INTEGER :: iman,imois,imois2 74 INTEGER, DIMENSION(jpday) :: istep_n 75 INTEGER, DIMENSION(jpmois):: istep_c, istep_x 76 INTEGER :: itime 77 REAL(wp) :: zdate0, zxy 78 REAL(wp), DIMENSION(jpi,jpj) :: zlon, zlat ! ??? 79 REAL(wp), DIMENSION(jpk) :: zlev ! ??? 80 CHARACTER(len=45) :: & 81 clname_n , & 82 clname_c , & 83 clname_x , & 84 clname_w 85 !!--------------------------------------------------------------------- 86 clname_n = 'tair_1d.nc' 87 clname_c = 'hum_cloud_1m.nc' 88 clname_x = 'rain_1m.nc' 89 clname_w = 'wspd_1d.nc' 69 INTEGER :: iman,imois,i15 70 REAL(wp) :: zxy 90 71 !!--------------------------------------------------------------------- 91 72 … … 95 76 96 77 i15 = INT(2*FLOAT(nday)/(FLOAT(nobis(nmonth))+0.5)) 97 itime = jpday 98 ipi = jpiglo 99 ipj = jpjglo 100 ipk = jpk 101 idy = 365 102 IF(nleapy == 1) idy = 366 103 104 iman = 12 78 iman = INT( raamo ) 105 79 imois = nmonth + i15 - 1 106 80 IF (imois == 0) imois = iman 107 imois2 = nmonth108 81 109 82 … … 112 85 113 86 IF( kt == nit000 ) THEN 114 87 ! initializations 115 88 nflx1 = 0 116 nflx11 = 0 117 89 ndayflx = 0 118 90 IF(lwp) THEN 119 91 WRITE(numout,*) ' ' 120 WRITE(numout,*) ' **** Routine flx.forced.ncep_clio_xie.h90' 121 WRITE(numout,*) ' **** global NCEP flx daily fields ' 122 WRITE(numout,*) ' **** global CLIO flx monthly fields ' 123 WRITE(numout,*) ' **** global XIE flx monthly fields ' 124 WRITE(numout,*) ' --------------------------------' 125 WRITE(numout,*) ' NetCDF FORMAT' 92 WRITE(numout,*) ' **** Routine flx_bulk_daily.h90' 126 93 WRITE(numout,*) ' ' 127 ENDIF 128 129 #if defined key_agrif 130 if ( .NOT. Agrif_Root() ) then 131 clname = TRIM(Agrif_CFixed())//'_'//TRIM(clname_n) 132 endif 133 #endif 134 135 ! open NCEP file 136 CALL flinopen(clname_n,mig(1),nlci,mjg(1),nlcj,.FALSE.,ipi,ipj & 137 ,ipk,zlon,zlat,zlev,itime,istep_n,zdate0,rdt,numfl1) 138 139 IF( itime /= jpday .AND. itime /= jpday+1 ) THEN 140 IF(lwp) THEN 141 WRITE(numout,*) ' ' 142 WRITE(numout,*) 'problem with time coordinates ' 143 WRITE(numout,*) ' itime ',itime,' jpday ',jpday 144 WRITE(numout,*) ' Check in file', clname_n 145 ENDIF 146 STOP 'flx_bulk_daily.h90' 147 ENDIF 148 IF( ipi /= jpidta .AND. ipj /= jpjdta .AND. ipk /= 1 ) THEN 149 IF(lwp) THEN 150 WRITE(numout,*) ' ' 151 WRITE(numout,*) 'problem with dimensions' 152 WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta 153 WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta 154 WRITE(numout,*) ' ipk ',ipk,' =? 1' 155 WRITE(numout,*) ' Check in file', clname_n 156 ENDIF 157 STOP 'flx_bulk_daily.h90' 158 ENDIF 159 160 #if defined key_agrif 161 if ( .NOT. Agrif_Root() ) then 162 clname = TRIM(Agrif_CFixed())//'_'//TRIM(clname_c) 163 endif 164 #endif 165 166 ! open CLIO file 167 CALL flinopen(clname_c,mig(1),nlci,mjg(1),nlcj,.FALSE.,ipi,ipj & 168 ,ipk,zlon,zlat,zlev,itime,istep_c,zdate0,rdt,numfl2) 169 170 IF( itime /= jpmois ) THEN 171 IF(lwp) THEN 172 WRITE(numout,*) ' ' 173 WRITE(numout,*) 'problem with time coordinates ' 174 WRITE(numout,*) ' itime ',itime,' jpmois ',jpmois 175 WRITE(numout,*) ' Check in file', clname_c 176 ENDIF 177 STOP 'flx_bulk_daily.h90' 178 ENDIF 179 IF( ipi /= jpidta .AND. ipj /= jpjdta .AND. ipk /= 1 ) THEN 180 IF(lwp) THEN 181 WRITE(numout,*) ' ' 182 WRITE(numout,*) 'problem with dimensions' 183 WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta 184 WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta 185 WRITE(numout,*) ' ipk ',ipk,' =? 1' 186 WRITE(numout,*) ' Check in file', clname_c 187 ENDIF 188 STOP 'flx_bulk_daily.h90' 189 ENDIF 190 191 #if defined key_agrif 192 if ( .NOT. Agrif_Root() ) then 193 clname = TRIM(Agrif_CFixed())//'_'//TRIM(clname_x) 194 endif 195 #endif 196 197 ! open CMAP FILE 198 CALL flinopen(clname_x,mig(1),nlci,mjg(1),nlcj,.FALSE.,ipi,ipj & 199 ,ipk,zlon,zlat,zlev,itime,istep_x,zdate0,rdt,numfl3) 200 201 IF( itime /= jpmois ) THEN 202 IF(lwp) THEN 203 WRITE(numout,*) ' ' 204 WRITE(numout,*) 'problem with time coordinates ' 205 WRITE(numout,*) ' itime ',itime,' jpmois ',jpmois 206 WRITE(numout,*) ' Check in file', clname_x 207 ENDIF 208 STOP 'flx_bulk_daily.h90' 209 ENDIF 210 IF( ipi /= jpidta .AND. ipj /= jpjdta .AND. ipk /= 1 ) THEN 211 IF(lwp) THEN 212 WRITE(numout,*) ' ' 213 WRITE(numout,*) 'problem with dimensions' 214 WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta 215 WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta 216 WRITE(numout,*) ' ipk ',ipk,' =? 1' 217 WRITE(numout,*) ' Check in file', clname_x 218 ENDIF 219 STOP 'flx_bulk_daily.h90' 220 ENDIF 221 222 #if defined key_agrif 223 if ( .NOT. Agrif_Root() ) then 224 clname = TRIM(Agrif_CFixed())//'_'//TRIM(clname_w) 225 endif 226 #endif 227 228 ! open ERS-NCEP file 229 CALL flinopen(clname_w,mig(1),nlci,mjg(1),nlcj,.FALSE.,ipi,ipj & 230 ,ipk,zlon,zlat,zlev,itime,istep_n,zdate0,rdt,numfl4) 231 232 IF( itime /= jpday .AND. itime /= jpday+1 ) THEN 233 IF(lwp) THEN 234 WRITE(numout,*) ' ' 235 WRITE(numout,*) 'problem with time coordinates ' 236 WRITE(numout,*) ' itime ',itime,' jpday ',jpday 237 WRITE(numout,*) ' Check in file', clname_w 238 ENDIF 239 STOP 'flx_bulk_daily.h90' 240 ENDIF 241 IF( ipi /= jpidta .AND. ipj /= jpjdta .AND. ipk /= 1 ) THEN 242 IF(lwp) THEN 243 WRITE(numout,*) ' ' 244 WRITE(numout,*) 'problem with dimensions' 245 WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta 246 WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta 247 WRITE(numout,*) ' ipk ',ipk,' =? 1' 248 WRITE(numout,*) ' Check in file', clname_w 249 ENDIF 250 STOP 'flx_bulk_daily.h90' 251 ENDIF 252 253 ENDIF 94 ENDIF 95 ! open files 96 IF(lwp) WRITE(numout,*) ' **** global NCEP flx daily fields ' 97 CALL iom_open ( 'tair_1d.nc', numfl1 ) 98 IF(lwp) WRITE(numout,*) ' **** global CLIO flx monthly fields ' 99 CALL iom_open ( 'hum_cloud_1m.nc', numfl2 ) 100 IF(lwp) WRITE(numout,*) ' **** global XIE flx monthly fields ' 101 CALL iom_open ( 'rain_1m.nc', numfl3 ) 102 IF(lwp) WRITE(numout,*) ' **** global ERS-NCEP wind daily fields ' 103 CALL iom_open ( 'wspd_1d.nc', numfl4 ) 104 ENDIF 254 105 255 106 256 ! 2. Read daily DATA Temperature from NCEP 257 ! --------------------------------------- 107 ! 2. Read daily DATA Temperature from NCEP 108 ! --------------------------------------- 109 110 IF( ndayflx /= nday ) THEN 111 112 ndayflx = nday 113 114 ! read T 2m (Caution in K) 115 CALL iom_get ( numfl1, jpdom_data, 'air', tatm, nday_year ) 116 117 IF(lwp) WRITE (numout,*)' Lecture daily flx record OK :',nday_year 118 IF(lwp) WRITE (numout,*)' ' 119 120 ! conversion of temperature Kelvin --> Celsius [rt0=273.15] 121 tatm(:,:) = ( tatm(:,:) - rt0 ) 122 123 ! read wind speed 124 CALL iom_get ( numfl4, jpdom_data, 'wspd', vatm, nday_year ) 125 126 IF(lwp) WRITE (numout,*)' Lecture daily wind speed flx :',nday_year 127 IF(lwp) WRITE (numout,*)' ' 128 129 ENDIF 258 130 259 IF( ndayflx /= nday ) THEN 260 261 ndayflx = nday 262 iday = nday_year 263 264 ! read T 2m (Caution in K) 265 CALL flinget(numfl1,'air',jpidta,jpjdta,1,jpday,iday, & 266 iday,mig(1),nlci,mjg(1),nlcj,tatm(1:nlci,1:nlcj)) 267 268 IF(lwp) WRITE (numout,*)' Lecture daily flx record OK :',iday 269 IF(lwp) WRITE (numout,*)' ' 270 271 ! conversion of temperature Kelvin --> Celsius [rt0=273.15] 272 tatm(:,:) = ( tatm(:,:) - rt0 ) 273 274 ! read wind speed 275 CALL flinget(numfl4,'wspd',jpidta,jpjdta,1,jpday,iday, & 276 iday,mig(1),nlci,mjg(1),nlcj,vatm(1:nlci,1:nlcj)) 277 278 IF(lwp) WRITE (numout,*)' Lecture daily wind speed flx :',iday 279 IF(lwp) WRITE (numout,*)' ' 280 281 ! Extra-halo initialization in MPP 282 IF( lk_mpp ) THEN 283 DO ji = nlci+1, jpi 284 tatm(ji,:) = tatm(1,:) 285 vatm(ji,:) = vatm(1,:) 286 ENDDO 287 DO jj = nlcj+1, jpj 288 tatm(:,jj) = tatm(:,1) 289 vatm(:,jj) = vatm(:,1) 290 ENDDO 291 ENDIF 131 132 ! 3. Read monthly data from CLIO and From Xie 133 ! ------------------------------------------- 134 135 IF( kt == nit000 .OR. imois /= nflx1 ) THEN 292 136 293 ENDIF294 295 296 ! 3. Read monthly data from CLIO and From Xie297 ! -------------------------------------------298 299 IF( kt == nit000 .OR. imois /= nflx1 ) THEN300 301 137 ! calendar computation 302 138 303 139 ! nflx1 number of the first file record used in the simulation 304 140 ! flx2 number of the last file record 305 141 306 142 nflx1 = imois 307 143 nflx2 = nflx1+1 … … 316 152 317 153 ! humidity 318 CALL flinget(numfl2,'socliohu',jpidta,jpjdta,jpk,jpmois,nflx1, & 319 nflx1,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,1,1)) 320 CALL flinget(numfl2,'socliohu',jpidta,jpjdta,jpk,jpmois,nflx2, & 321 nflx2,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,2,1)) 154 CALL iom_get ( numfl2, jpdom_data, 'socliohu', flxdta(:,:,1,1), nflx1 ) 155 CALL iom_get ( numfl2, jpdom_data, 'socliohu', flxdta(:,:,2,1), nflx2 ) 322 156 323 157 ! clouds 324 CALL flinget(numfl2,'socliocl',jpidta,jpjdta,jpk,jpmois,nflx1, & 325 nflx1,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,1,2)) 326 CALL flinget(numfl2,'socliocl',jpidta,jpjdta,jpk,jpmois,nflx2, & 327 nflx2,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,2,2)) 158 CALL iom_get ( numfl2, jpdom_data, 'socliocl', flxdta(:,:,1,2), nflx1 ) 159 CALL iom_get ( numfl2, jpdom_data, 'socliocl', flxdta(:,:,2,2), nflx2 ) 328 160 329 161 ! Read monthly precipitations ds flxdta(:,:,1 ou 2,4) 330 162 331 CALL flinget(numfl3,'rain',jpidta,jpjdta,jpk,jpmois,nflx1, & 332 nflx1,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,1,3)) 333 CALL flinget(numfl3,'rain',jpidta,jpjdta,jpk,jpmois,nflx2, & 334 nflx2,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,2,3)) 335 336 ! Extra-halo initialization in MPP 337 IF( lk_mpp ) THEN 338 DO ji = nlci+1, jpi 339 flxdta(ji,:,1,1) = flxdta(1,:,1,1) ; flxdta(ji,:,2,1) = flxdta(1,:,2,1) 340 flxdta(ji,:,1,2) = flxdta(1,:,1,2) ; flxdta(ji,:,2,2) = flxdta(1,:,2,2) 341 flxdta(ji,:,1,3) = flxdta(1,:,1,3) ; flxdta(ji,:,2,3) = flxdta(1,:,2,3) 342 ENDDO 343 DO jj = nlcj+1, jpj 344 flxdta(:,jj,1,1) = flxdta(:,1,1,1) ; flxdta(:,jj,2,1) = flxdta(:,1,2,1) 345 flxdta(:,jj,1,2) = flxdta(:,1,1,2) ; flxdta(:,jj,2,2) = flxdta(:,1,2,2) 346 flxdta(:,jj,1,3) = flxdta(:,1,1,3) ; flxdta(:,jj,2,3) = flxdta(:,1,2,3) 347 ENDDO 348 ENDIF 163 CALL iom_get ( numfl3, jpdom_data, 'rain', flxdta(:,:,1,3), nflx1 ) 164 CALL iom_get ( numfl3, jpdom_data, 'rain', flxdta(:,:,2,3), nflx2 ) 349 165 350 166 ENDIF … … 364 180 365 181 IF( kt == nitend ) THEN 366 CALL flinclo(numfl1) 367 CALL flinclo(numfl2) 368 CALL flinclo(numfl3) 182 CALL iom_close (numfl1) 183 CALL iom_close (numfl2) 184 CALL iom_close (numfl3) 185 CALL iom_close (numfl4) 369 186 ENDIF 370 187 -
trunk/NEMO/OPA_SRC/SBC/flx_bulk_monthly.h90
r392 r473 12 12 ji, jj, & ! loop indices 13 13 numflx, & ! logical unit for surface fluxes data 14 nflx1 , nflx2,& ! first and second record used14 nflx1 , nflx2, & ! first and second record used 15 15 nflx11, nflx12 ! ??? 16 16 17 REAL(wp), DIMENSION(jpi,jpj,2,7) :: & 17 INTEGER, PARAMETER :: jpf = 7 18 REAL(wp), DIMENSION(jpi,jpj,2,jpf) :: & 18 19 flxdta ! 2 consecutive set of CLIO monthly fluxes 19 20 !!---------------------------------------------------------------------- … … 60 61 !! ! 92-07 (M. Imbard) 61 62 !! ! 96-11 (E. Guilyardi) Daily AGCM input files 62 !! ! 99-11 (M. Imbard) NetCDF FORMAT with io ipsl63 !! ! 99-11 (M. Imbard) NetCDF FORMAT with io-ipsl 63 64 !! ! 00-10 (J.-P. Boulanger) adjusted for reading any 64 65 !! daily wind stress data including a climatology … … 67 68 !!---------------------------------------------------------------------- 68 69 !! * modules used 69 USE io ipsl70 USE iom 70 71 USE blk_oce ! bulk variable 71 72 USE bulk ! bulk module … … 75 76 76 77 !! * Local declarations 77 INTEGER, PARAMETER :: &78 jpmois = 12, & ! number of months79 jpf = 7 ! ??? !bug ?80 78 INTEGER :: jm, jt ! dummy loop indices 81 79 INTEGER :: & 82 imois, imois2, itime, & ! temporary integers 83 i15 , iman , & ! " " 84 ipi , ipj , ipk ! " " 85 INTEGER, DIMENSION(jpmois) :: & 86 istep ! ??? 80 imois, imois2, & ! temporary integers 81 i15 , iman ! " " 87 82 REAL(wp) :: & 88 zsecond, zdate0, & ! temporary scalars 89 zxy , zdtt , & ! " " 90 zdatet , zttbt , & ! " " 91 zttat , zdtts6 ! " " 92 REAL(wp), DIMENSION(jpk) :: & 93 zlev ! ??? 94 REAL(wp), DIMENSION(jpi,jpj) :: & 95 zlon , zlat ! ??? 96 CHARACTER (len=32) :: & 97 clname ! flux filename 83 zxy , zdtt , & ! " " 84 zdatet , zttbt , & ! " " 85 zttat , zdtts6 ! " " 98 86 !!--------------------------------------------------------------------- 99 clname = 'flx.nc'100 101 87 102 88 ! Initialization … … 104 90 105 91 i15 = INT( 2 * FLOAT( nday ) / ( FLOAT( nobis(nmonth) ) + 0.5 ) ) 106 iman = 1292 iman = INT( raamo ) 107 93 imois = nmonth + i15 - 1 108 94 IF( imois == 0 ) imois = iman 109 95 imois2 = nmonth 110 96 111 itime = jpmois112 113 ipi = jpiglo114 ipj = jpjglo115 ipk = jpk116 117 118 97 ! 1. first call kt=nit000 119 98 ! ----------------------- 120 99 121 100 IF( kt == nit000 ) THEN 101 ! initializations 122 102 nflx1 = 0 123 103 nflx11 = 0 104 ! open the file 124 105 IF(lwp) THEN 125 WRITE(numout,*) 126 WRITE(numout,*) ' global CLIO flx monthly fields in NetCDF format'127 WRITE(numout,*) ' ------------------------------'128 WRITE(numout,*) 106 WRITE(numout,*) ' ' 107 WRITE(numout,*) ' **** Routine flx_bulk_monthly.h90' 108 WRITE(numout,*) ' ' 109 WRITE(numout,*) ' global CLIO flx monthly fields' 129 110 ENDIF 130 131 ! Read first records 132 133 ! title, dimensions and tests 134 #if defined key_agrif 135 if ( .NOT. Agrif_Root() ) then 136 clname = TRIM(Agrif_CFixed())//'_'//TRIM(clname) 137 endif 138 #endif 139 CALL flinopen( clname, mig(1), nlci, mjg(1), nlcj, & 140 & .FALSE., ipi, ipj, ipk, zlon, zlat, zlev, & 141 & itime, istep, zdate0, zsecond, numflx ) 142 143 ! temperature 144 ! Utilisation d'un spline, on lit le champ a mois=1 145 CALL flinget( numflx, 'socliot1', jpidta, jpjdta, jpk, & 146 & jpmois, 1, 1, mig(1), nlci, & 147 & mjg(1), nlcj, flxdta(1:nlci,1:nlcj,1,5) ) 148 149 ! Extra-halo initialization in MPP 150 IF( lk_mpp ) THEN 151 DO ji = nlci+1, jpi 152 flxdta(ji,:,1,5) = flxdta(1,:,1,5) ; flxdta(ji,:,2,5) = flxdta(1,:,2,5) 153 ENDDO 154 DO jj = nlcj+1, jpj 155 flxdta(:,jj,1,5) = flxdta(:,1,1,5) ; flxdta(:,jj,2,5) = flxdta(:,1,2,5) 156 ENDDO 157 ENDIF 111 CALL iom_open ( 'flx.nc', numflx ) 112 113 ! temperature, spline initialization, we read the first record 114 CALL iom_get ( numflx, jpdom_data, 'socliot1', flxdta(:,:,1,5), 1 ) 115 158 116 ENDIF 159 117 … … 181 139 182 140 ! humidity 183 CALL flinget(numflx,'socliohu',jpidta,jpjdta,jpk,jpmois,nflx1, & 184 nflx1,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,1,1)) 185 CALL flinget(numflx,'socliohu',jpidta,jpjdta,jpk,jpmois,nflx2, & 186 nflx2,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,2,1)) 141 CALL iom_get ( numflx, jpdom_data, 'socliohu', flxdta(:,:,1,1), nflx1 ) 142 CALL iom_get ( numflx, jpdom_data, 'socliohu', flxdta(:,:,2,1), nflx2 ) 187 143 ! 10m wind module 188 CALL flinget(numflx,'socliowi',jpidta,jpjdta,jpk,jpmois,nflx1, & 189 nflx1,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,1,2)) 190 CALL flinget(numflx,'socliowi',jpidta,jpjdta,jpk,jpmois,nflx2, & 191 nflx2,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,2,2)) 144 CALL iom_get ( numflx, jpdom_data, 'socliowi', flxdta(:,:,1,2), nflx1 ) 145 CALL iom_get ( numflx, jpdom_data, 'socliowi', flxdta(:,:,2,2), nflx2 ) 192 146 ! cloud cover 193 CALL flinget(numflx,'socliocl',jpidta,jpjdta,jpk,jpmois,nflx1, & 194 nflx1,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,1,3)) 195 CALL flinget(numflx,'socliocl',jpidta,jpjdta,jpk,jpmois,nflx2, & 196 nflx2,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,2,3)) 147 CALL iom_get ( numflx, jpdom_data, 'socliocl', flxdta(:,:,1,3), nflx1 ) 148 CALL iom_get ( numflx, jpdom_data, 'socliocl', flxdta(:,:,2,3), nflx2 ) 197 149 ! precipitations 198 CALL flinget(numflx,'socliopl',jpidta,jpjdta,jpk,jpmois,nflx1, & 199 nflx1,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,1,4)) 200 CALL flinget(numflx,'socliopl',jpidta,jpjdta,jpk,jpmois,nflx2, & 201 nflx2,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,2,4)) 150 CALL iom_get ( numflx, jpdom_data, 'socliopl', flxdta(:,:,1,4), nflx1 ) 151 CALL iom_get ( numflx, jpdom_data, 'socliopl', flxdta(:,:,2,4), nflx2 ) 202 152 203 153 IF(lwp .AND. nitend-nit000 <= 100 ) THEN … … 208 158 WRITE(numout,*) 209 159 WRITE(numout,*) 'Clio mounth: ',nflx1,' field: ',jm,' multiply by ',0.1 210 CALL prihre( flxdta(:,:,1,jm),jpi,jpj,1,jpi,20,1,jpj,10,.1,numout)160 CALL prihre( flxdta(:,:,1,jm),jpi,jpj,1,jpi,20,1,jpj,10,.1,numout ) 211 161 END DO 212 162 ENDIF 213 163 214 ! Extra-halo initialization in MPP215 IF( lk_mpp ) THEN216 DO ji = nlci+1, jpi217 flxdta(ji,:,1,1) = flxdta(1,:,1,1) ; flxdta(ji,:,2,1) = flxdta(1,:,2,1)218 flxdta(ji,:,1,2) = flxdta(1,:,1,2) ; flxdta(ji,:,2,2) = flxdta(1,:,2,2)219 flxdta(ji,:,1,3) = flxdta(1,:,1,3) ; flxdta(ji,:,2,3) = flxdta(1,:,2,3)220 flxdta(ji,:,1,4) = flxdta(1,:,1,4) ; flxdta(ji,:,2,4) = flxdta(1,:,2,4)221 ENDDO222 DO jj = nlcj+1, jpj223 flxdta(:,jj,1,1) = flxdta(:,1,1,1) ; flxdta(:,jj,2,1) = flxdta(:,1,2,1)224 flxdta(:,jj,1,2) = flxdta(:,1,1,2) ; flxdta(:,jj,2,2) = flxdta(:,1,2,2)225 flxdta(:,jj,1,3) = flxdta(:,1,1,3) ; flxdta(:,jj,2,3) = flxdta(:,1,2,3)226 flxdta(:,jj,1,4) = flxdta(:,1,1,4) ; flxdta(:,jj,2,4) = flxdta(:,1,2,4)227 ENDDO228 ENDIF229 230 164 ENDIF 231 232 ! ------------------- !233 ! Last call kt=nitend !234 ! ------------------- !235 236 ! Closing of the numflx file (required in mpp)237 IF( kt == nitend ) CALL flinclo(numflx)238 239 165 240 166 IF( kt == nit000 .OR. imois2 /= nflx11 ) THEN … … 258 184 ! air temperature 259 185 ! Utilisation d'un spline, on lit le champ a mois=nflx1 et nflx2 260 CALL flinget(numflx,'socliot1',jpidta,jpjdta,jpk,jpmois,nflx11, & 261 nflx11,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,1,6)) 262 CALL flinget(numflx,'socliot1',jpidta,jpjdta,jpk,jpmois,nflx12, & 263 nflx12,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,2,6)) 186 CALL iom_get (numflx,jpdom_data,'socliot1',flxdta(:,:,1,6),nflx11) 187 CALL iom_get (numflx,jpdom_data,'socliot1',flxdta(:,:,2,6),nflx12) 264 188 ! air temperature derivative (to reconstruct a daily field) 265 CALL flinget(numflx,'socliot2',jpidta,jpjdta,jpk,jpmois,nflx11, & 266 nflx11,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,1,7)) 267 CALL flinget(numflx,'socliot2',jpidta,jpjdta,jpk,jpmois,nflx12, & 268 nflx12,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,2,7)) 269 189 CALL iom_get (numflx,jpdom_data,'socliot2',flxdta(:,:,1,7),nflx11) 190 CALL iom_get (numflx,jpdom_data,'socliot2',flxdta(:,:,2,7),nflx12) 191 270 192 IF(lwp) THEN 271 193 WRITE(numout,*) … … 280 202 ENDIF 281 203 282 ! Extra-halo initialization in MPP283 IF( lk_mpp ) THEN284 DO ji = nlci+1, jpi285 flxdta(ji,:,1,6) = flxdta(1,:,1,6) ; flxdta(ji,:,2,6) = flxdta(1,:,2,6)286 flxdta(ji,:,1,7) = flxdta(1,:,1,7) ; flxdta(ji,:,2,7) = flxdta(1,:,2,7)287 ENDDO288 DO jj = nlcj+1, jpj289 flxdta(:,jj,1,6) = flxdta(:,1,1,6) ; flxdta(:,jj,2,6) = flxdta(:,1,2,6)290 flxdta(:,jj,1,7) = flxdta(:,1,1,7) ; flxdta(:,jj,2,7) = flxdta(:,1,2,7)291 ENDDO292 ENDIF293 294 204 ENDIF 295 205 … … 321 231 CALL blk( kt ) ! bulk formulea fluxes 322 232 233 ! ------------------- ! 234 ! Last call kt=nitend ! 235 ! ------------------- ! 236 237 ! Closing of the numflx file (required in mpp) 238 IF( kt == nitend ) CALL iom_close (numflx) 239 323 240 END SUBROUTINE flx -
trunk/NEMO/OPA_SRC/SBC/flx_forced_daily.h90
r392 r473 13 13 INTEGER :: & 14 14 numflx, & ! logical unit for surface fluxes data 15 nflx1, nflx2, & ! first and second record used 16 nflx11, nflx12, & ! ??? 17 ndayflx, & ! new day for ecmwf flx forcing 18 nyearflx ! new year for ecmwf flx forcing 15 ndayflx ! new day for ecmwf flx forcing 19 16 REAL(wp), DIMENSION(jpi,jpj,3) :: & 20 17 flxdta ! 3 consecutive daily fluxes … … 44 41 !! ! 92-07 (M. Imbard) 45 42 !! ! 96-11 (E. Guilyardi) Daily AGCM input files 46 !! ! 99-11 (M. Imbard) NetCDF FORMAT with io ipsl43 !! ! 99-11 (M. Imbard) NetCDF FORMAT with io-ipsl 47 44 !! ! 00-10 (J.-P. Boulanger) adjusted for reading any 48 45 !! daily wind stress data including a climatology … … 51 48 !!---------------------------------------------------------------------- 52 49 !! * Modules used 53 USE io ipsl50 USE iom 54 51 USE flx_oce 55 52 … … 57 54 INTEGER, INTENT( in ) :: kt ! ocean time step 58 55 59 !! * local declarations60 INTEGER :: ji, jj, jk ! dummy loop arguments61 INTEGER :: iprint62 INTEGER :: i15, iy, iday, idy, ipi, ipj, ipk63 INTEGER ,DIMENSION(366) :: istep64 65 REAL(wp), DIMENSION(jpi,jpj) :: zlon, zlat66 REAL(wp), DIMENSION(jpi,jpj) :: zeri, zerps, ziclim67 REAL(wp), DIMENSION(jpk) :: zlev68 REAL(wp) :: zdate0, zdt69 70 CHARACTER (len=40) :: clname71 56 !!--------------------------------------------------------------------- 72 73 ! Initialization74 ! -----------------75 76 ! year month day77 i15 = INT( 2.* FLOAT(nday) / (FLOAT( nobis(nmonth) ) + 0.5) )78 ipi = jpiglo79 ipj = jpjglo80 ipk = jpk81 IF( nleapy == 0 ) THEN82 idy = 36583 ELSE IF( nleapy == 1 ) THEN84 IF( MOD( nyear ,4 ) == 0 ) THEN85 idy = 36686 ELSE87 idy = 36588 ENDIF89 ELSE IF( nleapy == 30 ) THEN90 IF(lwp) WRITE(numout,cform_err)91 IF(lwp) WRITE(numout,*)'flx.forced.h : nleapy = 30 is non compatible'92 IF(lwp) WRITE(numout,*)' with existing files'93 nstop = nstop + 194 ENDIF95 57 96 58 … … 99 61 100 62 IF( kt == nit000 ) THEN 101 IF(lwp) WRITE(numout,*) 102 IF(lwp) WRITE(numout,*) 'flx : daily fluxes Q, Qsr, EmP' 103 IF(lwp) WRITE(numout,*) '~~ ' 104 ndayflx = 0 105 nyearflx = 0 106 ENDIF 63 64 ndayflx = 0 ! Initialization 65 ! open the file 66 IF(lwp) THEN 67 WRITE(numout,*) ' ' 68 WRITE(numout,*) ' **** Routine flx_forced_daily.h90' 69 WRITE(numout,*) ' ' 70 WRITE(numout,*) ' daily fluxes Q, Qsr, EmP' 71 ENDIF 72 CALL iom_open ( 'flx_1d.nc', numflx ) 107 73 108 109 ! Open files if nyearflx110 ! ----------------------111 112 IF( nyearflx /= nyear ) THEN113 nyearflx = nyear114 iprint = 1115 116 ! Define file name and record117 118 ! Close/open file if new year119 120 IF( nyearflx /= 0 .AND. kt /= nit000 ) CALL flinclo(numflx)121 122 iy = nyear123 IF(lwp) WRITE (numout,*) iy124 WRITE(clname,'("flx_1d.nc")')125 #if defined key_agrif126 if ( .NOT. Agrif_Root() ) then127 clname = TRIM(Agrif_CFixed())//'_'//TRIM(clname)128 endif129 #endif130 IF(lwp) WRITE (numout,*)' open flx file = ',clname131 CALL FLUSH(numout)132 133 CALL flinopen(clname,mig(1),nlci,mjg(1),nlcj,.FALSE.,ipi,ipj &134 ,ipk,zlon,zlat,zlev,idy,istep,zdate0,zdt,numflx)135 136 IF( ipi /= jpidta .AND. ipj /= jpjdta .AND. ipk /= 1 ) THEN137 IF(lwp) WRITE(numout,cform_err)138 IF(lwp) WRITE(numout,*)139 IF(lwp) WRITE(numout,*) 'problem with dimensions'140 IF(lwp) WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta141 IF(lwp) WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta142 IF(lwp) WRITE(numout,*) ' ipk ',ipk,' =? 1'143 nstop = nstop + 1144 ENDIF145 IF(lwp) WRITE(numout,*) idy,istep,zdate0,zdt,numflx146 ELSE147 iprint = 0148 74 ENDIF 149 75 … … 154 80 155 81 IF( ndayflx /= nday ) THEN 82 156 83 ndayflx = nday 157 158 iday = nday_year 159 84 160 85 ! read Qtot 161 CALL flinget(numflx,'sohefldo',jpidta,jpjdta,1,idy,iday, & 162 iday,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,1)) 86 CALL iom_get ( numflx, jpdom_data, 'sohefldo', flxdta(:,:,1), nday_year ) 163 87 ! read qsr 164 CALL flinget(numflx,'soshfldo',jpidta,jpjdta,1,idy,iday, & 165 iday,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,2)) 88 CALL iom_get ( numflx, jpdom_data, 'soshfldo', flxdta(:,:,2), nday_year ) 166 89 ! read emp 167 CALL flinget(numflx,'sowaflup',jpidta,jpjdta,1,idy,iday, & 168 iday,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,3)) 90 CALL iom_get ( numflx, jpdom_data, 'sowaflup', flxdta(:,:,3), nday_year ) 169 91 170 92 IF(lwp) WRITE (numout,*)'Lecture flx record :',iday … … 177 99 WRITE(numout,*) 178 100 WRITE(numout,*) ' Q * .1, day: ',ndastp 179 CALL prihre( flxdta(:,:,1),jpi,jpj,1,jpi,20,1,jpj,10,.1,numout)101 CALL prihre( flxdta(:,:,1),jpi,jpj,1,jpi,20,1,jpj,10,.1,numout ) 180 102 WRITE(numout,*) 181 103 WRITE(numout,*) ' QSR * .1, day: ',ndastp 182 CALL prihre( flxdta(:,:,2),jpi,jpj,1,jpi,20,1,jpj,10,.1,numout)104 CALL prihre( flxdta(:,:,2),jpi,jpj,1,jpi,20,1,jpj,10,.1,numout ) 183 105 WRITE(numout,*) 184 106 WRITE(numout,*) ' E-P *86400, day: ',ndastp 185 CALL prihre( flxdta(:,:,3),jpi,jpj,1,jpi,20,1,jpj,10,86400.,numout)107 CALL prihre( flxdta(:,:,3),jpi,jpj,1,jpi,20,1,jpj,10,86400.,numout ) 186 108 WRITE(numout,*) ' ' 187 109 ENDIF … … 193 115 p_qsr(:,:) = flxdta(:,:,2) 194 116 p_emp(:,:) = flxdta(:,:,3) 195 196 ! Boundary condition on emp for free surface option 197 ! ------------------------------------------------- 198 CALL lbc_lnk( p_emp, 'T', 1. ) 199 200 117 201 118 ! Closing all files 202 119 ! ----------------- 203 120 204 IF( kt == nitend ) CALL flinclo( numflx )121 IF( kt == nitend ) CALL iom_close ( numflx ) 205 122 206 123 END SUBROUTINE flx -
trunk/NEMO/OPA_SRC/SBC/flxmod.F90
r440 r473 50 50 !!---------------------------------------------------------------------- 51 51 # include "flx_bulk_daily.h90" 52 53 #elif defined key_flx_core 54 !!---------------------------------------------------------------------- 55 !! 'key_flx_core' and NCAR data (Large & Yeager) 56 !! Net CDF file 57 !!---------------------------------------------------------------------- 58 # include "flx_core.h90" 52 59 53 60 #elif defined key_flx_forced_daily -
trunk/NEMO/OPA_SRC/SBC/flxrnf.F90
r389 r473 22 22 USE in_out_manager ! I/O manager 23 23 USE daymod ! calendar 24 USE io ipsl ! NetCDF IPSL library24 USE iom ! I/O module 25 25 26 26 IMPLICIT NONE … … 38 38 upsrnfz !: mixed adv scheme in runoffs vicinity (vert.) 39 39 INTEGER, PUBLIC :: & !: 40 nrunoff = 0 , & !: runoff option (namelist) 41 nrnf1, nrnf2 !: first and second record used 40 nrunoff = 0 !: runoff option (namelist) 42 41 43 42 !! * Module variable 44 43 REAL(wp), DIMENSION(jpi,jpj,2) :: & !: 45 44 rnfdta !: monthly runoff data array (kg/m2/s) 45 INTEGER :: & !: 46 numrnf, & !: logical unit for runoff data 47 nrnf1, nrnf2 !: first and second record used 46 48 !!---------------------------------------------------------------------- 47 49 !! OPA 9.0 , LOCEAN-IPSL (2005) … … 103 105 REAL(wp) :: zxy 104 106 # endif 105 CHARACTER (len=32) :: &106 clname ! monthly runoff filename107 INTEGER, PARAMETER :: jpmois = 12108 INTEGER :: ipi, ipj, ipk ! temporary integers109 107 INTEGER :: ii0, ii1, ij0, ij1 ! " " 110 INTEGER, DIMENSION(jpmois) :: &111 istep ! temporary workspace112 REAL(wp) :: zdate0, zdt ! temporary scalars113 REAL(wp), DIMENSION(jpk) :: &114 zlev ! temporary workspace115 REAL(wp), DIMENSION(jpi,jpj) :: &116 zlon, zlat, & ! temporary workspace117 zcoefr ! coeff of advection link to runoff118 108 !!---------------------------------------------------------------------- 119 clname = 'runoff_1m_nomask' ! monthly runoff filename120 109 121 110 IF( kt == nit000 ) THEN … … 139 128 140 129 CASE DEFAULT 141 IF(lwp) WRITE(numout,cform_err) 142 IF(lwp) WRITE(numout,*) ' Error nrunoff = ', nrunoff, ' /= 0, 1 or 2' 143 nstop = nstop + 1 130 WRITE(ctmp1,*) ' Error nrunoff = ', nrunoff, ' /= 0, 1 or 2' 131 CALL ctl_stop( ctmp1 ) 144 132 145 133 END SELECT 146 134 147 135 ! Set runoffs and upstream coeff to zero 148 runoff (:,:) = 0.e0149 upsrnfh(:,:) = 0.e0150 upsrnfz(:) = 0.e0151 136 upsadv (:,:) = 0.e0 152 137 … … 161 146 162 147 ! year, month, day 148 iman = INT( raamo ) 149 !!! better but change the results i15 = INT( 2*FLOAT( nday ) / ( FLOAT( nobis(nmonth) ) + 0.5 ) ) 163 150 i15 = nday / 16 164 151 imois = nmonth + i15 - 1 165 IF( imois == 0 ) imois = jpmois152 IF( imois == 0 ) imois = iman 166 153 ! Number of days in the month 167 154 IF( nleapy == 1 .AND. MOD( nyear, 4 ) == 0 ) THEN … … 175 162 idmeom = idbd - 15 176 163 # endif 177 ipi = jpiglo178 ipj = jpjglo179 ipk = jpk180 zdt = rdt181 164 182 165 ! Open file 183 166 184 167 IF( kt == nit000 ) THEN 185 iman = jpmois 186 CALL flinopen( clname, mig(1), nlci, mjg(1), nlcj, & 187 & .false., ipi, ipj, ipk, zlon, & 188 & zlat, zlev, iman, istep, zdate0, & 189 & zdt, numrnf ) 190 ! Title, dimensions and tests 191 # if ! defined key_coupled 192 IF( iman /= jpmois ) THEN 193 IF(lwp) WRITE(numout,*) 194 IF(lwp) WRITE(numout,*) 'problem with time coordinates' 195 IF(lwp) WRITE(numout,*) ' iman ', iman, ' jpmois ', jpmois 196 nstop = nstop + 1 197 ENDIF 198 IF(lwp) WRITE(numout,*) iman, istep, zdate0, rdt, numrnf 199 IF(lwp) WRITE(numout,*) 'numrnf=', numrnf 200 IF(lwp) WRITE(numout,*) 'jpmois=', jpmois 201 IF(lwp) WRITE(numout,*) 'zdt=', zdt 202 # endif 203 IF(ipi /= jpidta .AND. ipj /= jpjdta .AND. ipk /= 1) THEN 204 IF(lwp)WRITE(numout,*) ' ' 205 IF(lwp)WRITE(numout,*) 'problem with dimensions' 206 IF(lwp)WRITE(numout,*) ' ipi ', ipi, ' jpidta ', jpidta 207 IF(lwp)WRITE(numout,*) ' ipj ', ipj, ' jpjdta ', jpjdta 208 IF(lwp)WRITE(numout,*) ' ipk ', ipk, ' =? 1' 209 nstop = nstop + 1 210 ENDIF 211 IF(lwp)WRITE(numout,*) 'ipi=', ipi, ' ipj=', ipj, ' ipk=', ipk 168 169 nrnf1 = 0 ! initialization 170 IF (lwp) WRITE(numout,*) 'flx_rnf : Monthly runoff' 171 CALL iom_open ( 'runoff_1m_nomask.nc', numrnf ) 172 212 173 ENDIF 213 174 … … 223 184 ! nrnf2 number of the last array record 224 185 225 iman = jpmois226 186 nrnf1 = imois 227 187 nrnf2 = nrnf1 + 1 … … 237 197 WRITE(numout,*) ' NetCDF format' 238 198 WRITE(numout,*) 239 WRITE(numout,*) 'first array record used nrnf1 ', nrnf1240 WRITE(numout,*) 'last array record used nrnf2 ', nrnf2199 WRITE(numout,*) 'first array record used nrnf1 ', nrnf1 200 WRITE(numout,*) 'last array record used nrnf2 ', nrnf2 241 201 WRITE(numout,*) 242 202 ENDIF 243 203 244 204 ! Read monthly runoff data in kg/m2/s 245 !ibug 246 IF( kt == nit000 ) rnfdta(:,:,:) = 0.e0 247 !ibug 248 CALL flinget( numrnf, 'sorunoff', jpidta, jpjdta, 1, jpmois & 249 & , nrnf1, nrnf1, mig(1), nlci, mjg(1), nlcj, rnfdta(1:nlci,1:nlcj,1) ) 250 CALL flinget( numrnf, 'sorunoff', jpidta, jpjdta, 1, jpmois & 251 & , nrnf2, nrnf2, mig(1), nlci, mjg(1), nlcj, rnfdta(1:nlci,1:nlcj,2) ) 252 253 IF(lwp) WRITE(numout,*) 254 IF(lwp) WRITE(numout,*) ' read runoff field ok' 255 IF(lwp) WRITE(numout,*) 205 206 CALL iom_get ( numrnf, jpdom_data, 'sorunoff', rnfdta(:,:,1), nrnf1 ) 207 CALL iom_get ( numrnf, jpdom_data, 'sorunoff', rnfdta(:,:,2), nrnf2 ) 256 208 257 209 ENDIF … … 267 219 ! when reading the NetCDF file runoff_1m_nomask.nc 268 220 IF( cp_cfg == 'orca' .AND. jp_cfg == 2 ) THEN 269 DO jj = 1, jpj 270 DO ji = 1, jpi 271 IF( gphit(ji,jj) > 40 .AND. gphit(ji,jj) < 65 ) runoff(ji,jj) = 0.85 * runoff(ji,jj) 221 DO jj = 1, jpj 222 DO ji = 1, jpi 223 IF( gphit(ji,jj) > 40 .AND. gphit(ji,jj) < 65 ) runoff(ji,jj) = 0.85 * runoff(ji,jj) 224 END DO 272 225 END DO 273 END DO274 226 ENDIF 275 227 … … 290 242 ! coefr * upstream + (1- coefr) centered 291 243 ! coefr must be between 0 and 1. 292 !ibug 293 zcoefr(:,:) = 0.e0 294 !ibug 295 296 CALL flinget( numrnf, 'socoefr', jpidta, jpjdta, 1, jpmois, nrnf1, & 297 & nrnf1, mig(1), nlci, mjg(1), nlcj, zcoefr(1:nlci,1:nlcj) ) 298 299 IF(lwp) WRITE(numout,*) 300 IF(lwp) WRITE(numout,*) ' read coefr for advection ok' 301 IF(lwp) WRITE(numout,*) 302 303 upsrnfh(:,:) = zcoefr(:,:) 244 245 CALL iom_get ( numrnf, jpdom_data, 'socoefr', upsrnfh ) 246 304 247 upsrnfz(:) = 0.e0 305 248 upsrnfz(1) = 1.0 … … 371 314 ! -------------------- 372 315 373 IF( kt == nitend .AND. nrunoff >= 1 ) CALL flinclo( numrnf )316 IF( kt == nitend .AND. nrunoff >= 1 ) CALL iom_close( numrnf ) 374 317 375 318 END SUBROUTINE flx_rnf -
trunk/NEMO/OPA_SRC/SBC/flxrnf_ORCA_R05.h90
r247 r473 24 24 upsrnfz !: mixed adv scheme in runoffs vicinity (vert.) 25 25 INTEGER , PUBLIC :: & !: 26 numrof = 48 , & !: logical unit for runoff data 27 nrunoff = 0 , & !: runoff option (namelist) 28 nrnf1, nrnf2 !: first and second record used 26 nrunoff = 0 !: runoff option (namelist) 29 27 30 28 !! * Module variable 31 29 REAL(wp), DIMENSION(jpi,jpj,2) :: & !: 32 30 rnfdta !: monthly runoff data array (kg/m2/s) 31 INTEGER :: & !: 32 nrnf1, nrnf2 !: first and second record used 33 33 !!---------------------------------------------------------------------- 34 34 !! OPA 9.0 , LOCEAN-IPSL (2005) … … 80 80 !!---------------------------------------------------------------------- 81 81 !! * Modules used 82 USE ioipsl83 82 84 83 !! * arguments … … 94 93 INTEGER, PARAMETER :: & 95 94 jpmois=12, & ! number of month in the year ! 96 jpriv= 120, & ! maximum number of rivers95 jpriv=200, & ! maximum number of rivers 97 96 jpcoef=20 ! maximum number of gridpoints for mouth rivers 98 97 … … 215 214 ! --> 1111.99988m3/s 216 215 DATA inb(12)/2/ 217 DATA (iirnf(jc,12),jc=1,jpcoef)/ 244, 24 5, 18*0 /216 DATA (iirnf(jc,12),jc=1,jpcoef)/ 244, 244, 18*0 / 218 217 DATA (ijrnf(jc,12),jc=1,jpcoef)/ 413, 414, 18*0 / 219 218 DATA (zrnfm(jm,12),jm=1,jpmois)/ & … … 372 371 DATA (iirnf(jc,32),jc=1,jpcoef)/ 635, 635, 636, 636, 636,637, 637,637,12*0 / 373 372 DATA (ijrnf(jc,32),jc=1,jpcoef)/ 508, 509, 509, 508, 507,509, 508,507,12*0 / 374 DATA (zrnfm(jm,32),jm=1,jpmois)/ & 375 4977., 4150., 3611., 3590., 14723., 33366., & 376 30773., 22785., 14701., 9705., 6078., 5879./ 373 DATA (zrnfm(jm,32),jm=1,jpmois)/12*0./ 374 !CT bug DATA (zrnfm(jm,32),jm=1,jpmois)/ & 375 !CT bug 4977., 4150., 3611., 3590., 14723., 33366., & 376 !CT bug 30773., 22785., 14701., 9705., 6078., 5879./ 377 377 ! 33-Yenesei (Russia) 71N50 82E40 R1 378 378 ! Old=560 km3/year=17745m3/s; UNESCO(65-84, p472)=17462m3/s … … 498 498 DATA (ijrnf(jc,49),jc=1,jpcoef)/ 269, 270, 270, 17*0 / 499 499 DATA (zrnfm(jm,49),jm=1,jpmois)/12*14893./ 500 ! 50-Irrawady (Burma) 15N50 95E06 R5 501 ! Old=428 km3/year=13563m3/s; not in UNESCO data base 502 ! --> 13563.m3/s 503 DATA inb(50)/2/ 504 DATA (iirnf(jc,50),jc=1,jpcoef)/ 44, 45, 18*0 / 505 DATA (ijrnf(jc,50),jc=1,jpcoef)/ 283, 282, 18*0 / 506 DATA (zrnfm(jm,50),jm=1,jpmois)/12*13563./ 507 ! 51-Ganges+Brahmaputra (Beng.) 22N00 91E00 R1 508 ! Old=971 km3/year=30769m3/s; UNESCO(69-70+73-75, p367)=31760m3/s 509 ! --> 32147.498m3/s 510 DATA inb(51)/4/ 511 DATA (iirnf(jc,51),jc=1,jpcoef)/ 36, 37, 38, 39, 16*0 / 512 DATA (ijrnf(jc,51),jc=1,jpcoef)/ 295, 295, 295, 295, 16*0 / 513 DATA (zrnfm(jm,51),jm=1,jpmois)/ & 514 6623., 6315., 6432., 9410., 17263., 38302., & 515 64688., 80338., 84802., 43387., 17888., 10322./ 516 ! 52-Mehandi (India) R5 517 ! Old=67 km3/year=2123m3/s; not in UNESCO data base 518 ! --> 0m3/s 500 501 DATA inb(50)/0/ 502 DATA inb(51)/0/ 519 503 DATA inb(52)/0/ 520 DATA (iirnf(jc,52),jc=1,jpcoef)/ 20*0 / 521 DATA (ijrnf(jc,52),jc=1,jpcoef)/ 20*0 / 522 DATA (zrnfm(jm,52),jm=1,jpmois)/12*2123./ 504 523 505 ! 53-Damodar (India) R2 524 506 ! Old=10 km3/year=320m3/s; UNESCO(p386)=173m3/s; ratio=1.85 … … 530 512 51., 37., 42., 49., 85., 296., & 531 513 896., 1390., 1591., 542., 172., 44./ 532 ! 54-Godavari (India) 17N00 81E45 R2 533 ! Old=84 km3/year=2662m3/s; UNESCO(p379)=1916m3/s; ratio=1.39 534 ! --> 3670.5m3/s 535 DATA inb(54)/1/ 536 DATA (iirnf(jc,54),jc=1,jpcoef)/ 19, 19*0 / 537 DATA (ijrnf(jc,54),jc=1,jpcoef)/ 283, 19*0 / 538 DATA (zrnfm(jm,54),jm=1,jpmois)/ & 539 988., 737., 280., 219., 196., 1691., & 540 8063., 14571., 11428., 3953., 1221., 699./ 541 ! 55-Indus (Pakistan) 24N20 67E47 R2 542 ! Old=238 km3/year=7542m3/s; UNESCO (76-79, p428)=2396m3/s; ratio=3.15 543 ! --> 7562.m3/s 544 DATA inb(55)/4/ 545 DATA (iirnf(jc,55),jc=1,jpcoef)/ 711, 711, 712, 713, 16*0 / 546 DATA (ijrnf(jc,55),jc=1,jpcoef)/ 297, 298, 297, 297, 16*0 / 547 DATA (zrnfm(jm,55),jm=1,jpmois)/ & 548 988., 737., 1904., 1968., 3625., 6143., & 549 15969., 36656., 17173., 3215., 1251., 1115./ 550 ! 56-Tigris and Euphrates (Iraq) 31N00 47E25 R1 551 ! Old=46 km3/year=1458m3/s; UNESCO(76-79, p428)=2396m3/s 552 ! --> 2248.8335m3/s 553 DATA inb(56)/3/ 554 DATA (iirnf(jc,56),jc=1,jpcoef)/ 673, 673, 674, 17*0 / 555 DATA (ijrnf(jc,56),jc=1,jpcoef)/ 312, 313, 313, 17*0 / 556 DATA (zrnfm(jm,56),jm=1,jpmois)/ & 557 1872., 2127., 2962., 4944., 5036., 3078., & 558 1362., 900., 786., 993., 1184., 1742./ 559 514 515 DATA inb(54)/0/ 516 DATA inb(55)/0/ 517 DATA inb(56)/0/ 560 518 DATA inb(57)/0/ 561 519 DATA inb(58)/0/ … … 632 590 DATA inb(68)/1/ 633 591 DATA (iirnf(jc,68),jc=1,jpcoef)/ 599, 19*0 / 634 DATA (ijrnf(jc,68),jc=1,jpcoef)/ 24 1, 19*0 /592 DATA (ijrnf(jc,68),jc=1,jpcoef)/ 240, 19*0 / 635 593 DATA (zrnfm(jm,68),jm=1,jpmois)/ & 636 594 1115., 1166., 1285., 1462., 1454., 725., & … … 686 644 DATA inb(74)/1/ 687 645 DATA (iirnf(jc,74),jc=1,jpcoef)/ 594, 19*0 / 688 DATA (ijrnf(jc,74),jc=1,jpcoef)/ 25 8, 19*0 /646 DATA (ijrnf(jc,74),jc=1,jpcoef)/ 257, 19*0 / 689 647 DATA (zrnfm(jm,74),jm=1,jpmois)/ & 690 648 88., 63., 68., 95., 139., 222., & … … 729 687 DATA inb(79)/0/ 730 688 DATA inb(80)/0/ 689 DATA inb(81)/0/ 731 690 DATA inb(82)/0/ 732 691 DATA inb(83)/0/ … … 809 768 DATA inb(99)/1/ 810 769 DATA (iirnf(jc,99),jc=1,jpcoef)/ 98, 19*0 / 811 DATA (ijrnf(jc,99),jc=1,jpcoef)/ 28 7, 19*0 /770 DATA (ijrnf(jc,99),jc=1,jpcoef)/ 288, 19*0 / 812 771 DATA (zrnfm(jm,99),jm=1,jpmois)/12*127./ 813 772 ! 100-Hsiukuluan (Taiwan) R5 … … 819 778 DATA (zrnfm(jm,100),jm=1,jpmois)/12*127./ 820 779 821 DATA inb(101)/0/ 822 DATA inb(102)/0/ 780 781 782 783 784 785 786 ! I ASIA 787 ! ------ 788 789 ! 1-Indus (Pakistan) 790 ! --> 3949m3/s 791 DATA inb(101)/4/ 792 DATA (iirnf(jc,101),jc=1,jpcoef)/ 711, 711, 712, 713, 16*0 / 793 DATA (ijrnf(jc,101),jc=1,jpcoef)/ 297, 298, 297, 297, 16*0 / 794 DATA (zrnfm(jm,101),jm=1,jpmois)/ & 795 & 1691., 2121., 2083., 2940., 3738., 4198., & 796 & 5334., 8247., 7833., 4908., 2681., 1614./ 797 ! 2-Sabarmati+Mahi+Narmada (India) 798 ! --> 3383m3/s 799 DATA inb(102)/1/ 800 !CT bug point terre DATA (iirnf(jc,102),jc=1,jpcoef)/ 720, 19*0 / 801 !CT bug point terre DATA (ijrnf(jc,102),jc=1,jpcoef)/ 292, 19*0 / 802 DATA (iirnf(jc,102),jc=1,jpcoef)/ 719, 19*0 / 803 DATA (ijrnf(jc,102),jc=1,jpcoef)/ 291, 19*0 / 804 DATA (zrnfm(jm,102),jm=1,jpmois)/ & 805 & 1343., 110., 0., 0., 13., 3051., & 806 & 9453., 11655., 7619., 3547., 2081., 1727./ 807 ! 3- 808 ! --> 182m3/s 809 DATA inb(103)/1/ 810 !CT bug point terre DATA (iirnf(jc,103),jc=1,jpcoef)/ 721, 19*0 / 811 !CT bug point terre DATA (ijrnf(jc,103),jc=1,jpcoef)/ 286, 19*0 / 812 DATA (iirnf(jc,103),jc=1,jpcoef)/ 720, 19*0 / 813 DATA (ijrnf(jc,103),jc=1,jpcoef)/ 286, 19*0 / 814 DATA (zrnfm(jm,103),jm=1,jpmois)/ & 815 & 0., 0., 0., 0., 225., 669., & 816 & 526., 327., 187., 100., 62., 92./ 817 ! 4-Mandovi + Zuari + Kalinadi 818 ! --> 347m3/s 819 DATA inb(104)/1/ 820 DATA (iirnf(jc,104),jc=1,jpcoef)/ 2, 19*0 / 821 DATA (ijrnf(jc,104),jc=1,jpcoef)/ 282, 19*0 / 822 DATA (zrnfm(jm,104),jm=1,jpmois)/ & 823 & 7., 0., 0., 0., 428., 1339., & 824 & 966., 601., 350., 190., 117., 166./ 825 ! 5- R2 826 ! --> 190m3/s 827 DATA inb(105)/1/ 828 DATA (iirnf(jc,105),jc=1,jpcoef)/ 4, 19*0 / 829 DATA (ijrnf(jc,105),jc=1,jpcoef)/ 279, 19*0 / 830 DATA (zrnfm(jm,105),jm=1,jpmois)/ & 831 & 0., 0., 0., 0., 363., 710., & 832 & 484., 315., 172., 95., 59., 87./ 833 ! 6- 834 ! --> 1101m3/s 835 DATA inb(106)/1/ 836 DATA (iirnf(jc,106),jc=1,jpcoef)/ 4, 19*0 / 837 DATA (ijrnf(jc,106),jc=1,jpcoef)/ 277, 19*0 / 838 DATA (zrnfm(jm,106),jm=1,jpmois)/ & 839 & 79., 0., 0., 0., 1457., 3639., & 840 & 3084., 2031., 1282., 696., 414., 535. / 841 ! 7- 842 ! --> 948m3/s 843 DATA inb(107)/1/ 844 DATA (iirnf(jc,107),jc=1,jpcoef)/ 5, 19*0 / 845 DATA (ijrnf(jc,107),jc=1,jpcoef)/ 275, 19*0 / 846 DATA (zrnfm(jm,107),jm=1,jpmois)/ & 847 & 72., 0., 0., 0., 1151., 3038., & 848 & 2583., 1603., 1216., 749., 426., 539./ 849 850 ! 8- 851 ! --> 551m3/s 852 DATA inb(108)/1/ 853 DATA (iirnf(jc,108),jc=1,jpcoef)/ 7, 19*0 / 854 DATA (ijrnf(jc,108),jc=1,jpcoef)/ 271, 19*0 / 855 DATA (zrnfm(jm,108),jm=1,jpmois)/ & 856 & 45., 0., 2., 7., 680., 1621., & 857 & 1234., 744., 784., 696., 359., 442. / 858 ! 9- 859 ! --> 103m3/s 860 DATA inb(109)/1/ 861 DATA (iirnf(jc,109),jc=1,jpcoef)/ 8, 19*0 / 862 DATA (ijrnf(jc,109),jc=1,jpcoef)/ 269, 19*0 / 863 DATA (zrnfm(jm,109),jm=1,jpmois)/ & 864 & 11., 0., 0., 0., 160., 250., & 865 & 200., 145., 168., 146., 74., 89. / 866 ! 10- 867 ! --> 99m3/s 868 DATA inb(110)/1/ 869 DATA (iirnf(jc,110),jc=1,jpcoef)/12, 19*0 / 870 DATA (ijrnf(jc,110),jc=1,jpcoef)/267, 19*0 / 871 DATA (zrnfm(jm,110),jm=1,jpmois)/ & 872 & 50., 1., 1., 0., 25., 69., & 873 & 51., 32., 176., 329., 233., 222./ 874 ! 11- Kaveri (India) 875 ! --> 173m3/s 876 DATA inb(111)/1/ 877 DATA (iirnf(jc,111),jc=1,jpcoef)/16, 19*0 / 878 DATA (ijrnf(jc,111),jc=1,jpcoef)/271, 19*0 / 879 DATA (zrnfm(jm,111),jm=1,jpmois)/ & 880 & 97., 2., 1., 2., 19., 67., & 881 & 108., 134., 218., 515., 498., 416. / 882 ! 12- 883 ! --> 116m3/s 884 DATA inb(112)/1/ 885 DATA (iirnf(jc,112),jc=1,jpcoef)/16, 19*0 / 886 DATA (ijrnf(jc,112),jc=1,jpcoef)/279, 19*0 / 887 DATA (zrnfm(jm,112),jm=1,jpmois)/ & 888 & 43., 0., 0., 0., 0., 0., & 889 & 0., 0., 99., 568., 343., 342. / 890 ! 13- Krishna 891 ! --> 2864m3/s 892 DATA inb(113)/1/ 893 DATA (iirnf(jc,113),jc=1,jpcoef)/ 16, 19*0 / 894 DATA (ijrnf(jc,113),jc=1,jpcoef)/ 281, 19*0 / 895 DATA (zrnfm(jm,113),jm=1,jpmois)/ & 896 & 1368., 174., 0., 0., 166., 2362., & 897 & 9501., 8639., 6053., 3173., 1763., 1175. / 898 ! 14- (SriLanka) 899 ! --> 371m3/s 900 DATA inb(114)/1/ 901 DATA (iirnf(jc,114),jc=1,jpcoef)/ 16, 19*0 / 902 DATA (ijrnf(jc,114),jc=1,jpcoef)/ 261, 19*0 / 903 DATA (zrnfm(jm,114),jm=1,jpmois)/ & 904 & 171., 144., 292., 469., 414., 309., & 905 & 269., 244., 526., 560., 476., 588. / 906 ! 15- (SriLanka) 907 ! --> 305m3/s 908 DATA inb(115)/1/ 909 DATA (iirnf(jc,115),jc=1,jpcoef)/18, 19*0 / 910 DATA (ijrnf(jc,115),jc=1,jpcoef)/262, 19*0 / 911 DATA (zrnfm(jm,115),jm=1,jpmois)/ & 912 & 116., 111., 225., 379., 366., 300., & 913 & 256., 239., 385., 437., 388., 467. / 914 ! 16- (SriLanka) 915 ! --> 722m3/s 916 DATA inb(116)/1/ 917 DATA (iirnf(jc,116),jc=1,jpcoef)/20, 19*0 / 918 DATA (ijrnf(jc,116),jc=1,jpcoef)/265, 19*0 / 919 DATA (zrnfm(jm,116),jm=1,jpmois)/ & 920 & 711., 347., 477., 556., 430., 302., & 921 & 228., 200., 629., 1156., 1579., 2055. / 922 ! 17- (SriLanka) 923 ! --> 188m3/s 924 DATA inb(117)/1/ 925 DATA (iirnf(jc,117),jc=1,jpcoef)/19, 19*0 / 926 DATA (ijrnf(jc,117),jc=1,jpcoef)/267, 19*0 / 927 DATA (zrnfm(jm,117),jm=1,jpmois)/ & 928 & 189., 50., 27., 17., 10., 6., & 929 & 4., 2., 1., 236., 829., 894. / 930 ! 18- Godavari (India) 17N00 81E45 931 ! --> 2709m3/s 932 DATA inb(118)/1/ 933 DATA (iirnf(jc,118),jc=1,jpcoef)/ 19, 19*0 / 934 DATA (ijrnf(jc,118),jc=1,jpcoef)/283, 19*0 / 935 DATA (zrnfm(jm,118),jm=1,jpmois)/ & 936 & 1151., 57., 0., 0., 38., 1490., & 937 & 6714., 9065., 7208., 3294., 1874., 1629. / 938 ! 19- 939 ! --> 116m3/s 940 DATA inb(119)/1/ 941 DATA (iirnf(jc,119),jc=1,jpcoef)/23, 19*0 / 942 DATA (ijrnf(jc,119),jc=1,jpcoef)/286, 19*0 / 943 DATA (zrnfm(jm,119),jm=1,jpmois)/ & 944 & 17., 0., 0., 0., 0., 103., & 945 & 259., 341., 330., 155., 87., 110. / 946 ! 20- Mahanadi (India) 947 ! --> 2390m3/s 948 DATA inb(120)/1/ 949 DATA (iirnf(jc,120),jc=1,jpcoef)/28, 19*0 / 950 DATA (ijrnf(jc,120),jc=1,jpcoef)/290, 19*0 / 951 DATA (zrnfm(jm,120),jm=1,jpmois)/ & 952 & 809., 5., 0., 0., 60., 1401., & 953 & 6652., 8828., 5410., 2561., 1503., 1452. / 954 ! 21- 955 ! --> 247m3/s 956 DATA inb(121)/1/ 957 DATA (iirnf(jc,121),jc=1,jpcoef)/30, 19*0 / 958 DATA (ijrnf(jc,121),jc=1,jpcoef)/294, 19*0 / 959 DATA (zrnfm(jm,121),jm=1,jpmois)/ & 960 & 15., 0., 0., 0., 73., 367., & 961 & 744., 722., 491., 227., 137., 188. / 962 ! 22- 963 ! --> 167m3/s 964 DATA inb(122)/1/ 965 DATA (iirnf(jc,122),jc=1,jpcoef)/31, 19*0 / 966 DATA (ijrnf(jc,122),jc=1,jpcoef)/294, 19*0 / 967 DATA (zrnfm(jm,122),jm=1,jpmois)/ & 968 & 16., 0., 0., 0., 95., 337., & 969 & 488., 453., 285., 143., 84., 109. / 970 ! 23- 971 ! --> 206m3/s 972 DATA inb(123)/1/ 973 DATA (iirnf(jc,123),jc=1,jpcoef)/32, 19*0 / 974 DATA (ijrnf(jc,123),jc=1,jpcoef)/294, 19*0 / 975 DATA (zrnfm(jm,123),jm=1,jpmois)/ & 976 & 12., 0., 0., 0., 35., 400., & 977 & 652., 616., 347., 172., 105., 144. / 978 ! 24- Ganga + Brahmaputra (Bangladesh) 22N00 91E00 979 ! --> 42436m3/s 980 DATA inb(124)/9/ 981 DATA (iirnf(jc,124),jc=1,jpcoef)/ 37, 38, 39, 32, 33, 34, 35 & 982 & , 36, 37, 11*0 / 983 DATA (ijrnf(jc,124),jc=1,jpcoef)/ 295,295,295,294,294,294,294 & 984 & , 294, 294, 11*0 / 985 DATA (zrnfm(jm,124),jm=1,jpmois)/ & 986 & 14293., 4223., 3004., 11743., 32210., 56899., & 987 & 82263., 95069., 77997., 44194., 23724., 17272. / 988 989 DATA inb(125)/0/ 990 DATA inb(126)/0/ 991 992 ! 27- Kuladan 993 ! --> 1541m3/s 994 DATA inb(127)/1/ 995 DATA (iirnf(jc,127),jc=1,jpcoef)/42, 19*0 / 996 DATA (ijrnf(jc,127),jc=1,jpcoef)/290, 19*0 / 997 DATA (zrnfm(jm,127),jm=1,jpmois)/ & 998 & 140., 0., 0., 27., 2280., 4133., & 999 & 4306., 3049., 1993., 1115., 646., 812. / 1000 ! 28- 1001 ! --> 618m3/s 1002 DATA inb(128)/1/ 1003 DATA (iirnf(jc,128),jc=1,jpcoef)/44, 19*0 / 1004 DATA (ijrnf(jc,128),jc=1,jpcoef)/287, 19*0 / 1005 DATA (zrnfm(jm,128),jm=1,jpmois)/ & 1006 & 0., 0., 0., 73., 1139., 1755., & 1007 & 1725., 1139., 677., 362., 221., 326. / 1008 ! 29- 1009 ! --> 158m3/s 1010 DATA inb(129)/1/ 1011 DATA (iirnf(jc,129),jc=1,jpcoef)/44, 19*0 / 1012 DATA (ijrnf(jc,129),jc=1,jpcoef)/284, 19*0 / 1013 DATA (zrnfm(jm,129),jm=1,jpmois)/ & 1014 & 0., 0., 0., 0., 248., 419., & 1015 & 445., 334., 201., 103., 63., 93. / 1016 ! 30- 1017 ! --> 136m3/s 1018 DATA inb(130)/1/ 1019 DATA (iirnf(jc,130),jc=1,jpcoef)/32, 19*0 / 1020 DATA (ijrnf(jc,130),jc=1,jpcoef)/277, 19*0 / 1021 DATA (zrnfm(jm,130),jm=1,jpmois)/ & 1022 & 0., 0., 0., 0., 223., 261., & 1023 & 269., 315., 223., 147., 86., 116. / 1024 ! 31- 1025 ! --> 142m3/s 1026 DATA inb(131)/1/ 1027 DATA (iirnf(jc,131),jc=1,jpcoef)/42, 19*0 / 1028 DATA (ijrnf(jc,131),jc=1,jpcoef)/275, 19*0 / 1029 DATA (zrnfm(jm,131),jm=1,jpmois)/ & 1030 & 0., 0., 0., 0., 241., 260., & 1031 & 270., 325., 231., 158., 96., 126. / 1032 ! 32- Irrawady (Myanmar) 15N50 95E06 1033 ! --> 16751m3/s 1034 DATA inb(132)/3/ 1035 DATA (iirnf(jc,132),jc=1,jpcoef)/ 45, 46, 47, 17*0 / 1036 DATA (ijrnf(jc,132),jc=1,jpcoef)/ 282, 281, 282, 17*0 / 1037 DATA (zrnfm(jm,132),jm=1,jpmois)/ & 1038 & 7174., 2281., 80., 687., 8133., 23980., & 1039 & 38452., 41442., 34497., 23150., 12529., 8629. / 1040 1041 DATA inb(133)/0/ 1042 DATA inb(134)/0/ 1043 DATA inb(135)/0/ 1044 DATA inb(136)/0/ 1045 1046 ! 37- Tenasserim (Myanmar) 1047 ! --> 1369m3/s 1048 DATA inb(137)/1/ 1049 DATA (iirnf(jc,137),jc=1,jpcoef)/51, 19*0 / 1050 DATA (ijrnf(jc,137),jc=1,jpcoef)/279, 19*0 / 1051 DATA (zrnfm(jm,137),jm=1,jpmois)/ & 1052 & 65., 0., 0., 540., 2127., 3260., & 1053 & 3540., 2966., 1747., 900., 544., 741. / 1054 ! 38- 1055 ! --> 413m3/s 1056 DATA inb(138)/1/ 1057 DATA (iirnf(jc,138),jc=1,jpcoef)/52, 19*0 / 1058 DATA (ijrnf(jc,138),jc=1,jpcoef)/277, 19*0 / 1059 DATA (zrnfm(jm,138),jm=1,jpmois)/ & 1060 & 0., 0., 0., 202., 773., 1000., & 1061 & 1032., 831., 492., 248., 153., 226. / 1062 ! 39- 1063 ! --> 810m3/s 1064 DATA inb(139)/1/ 1065 DATA (iirnf(jc,139),jc=1,jpcoef)/52, 19*0 / 1066 DATA (ijrnf(jc,139),jc=1,jpcoef)/275, 19*0 / 1067 DATA (zrnfm(jm,139),jm=1,jpmois)/ & 1068 & 59., 0., 0., 22., 1104., 1857., & 1069 & 2069., 1858., 1252., 637., 373., 493. / 1070 ! 40- 1071 ! --> 896m3/s 1072 DATA inb(140)/1/ 1073 DATA (iirnf(jc,140),jc=1,jpcoef)/52, 19*0 / 1074 DATA (ijrnf(jc,140),jc=1,jpcoef)/273, 19*0 / 1075 DATA (zrnfm(jm,140),jm=1,jpmois)/ & 1076 & 94., 0., 0., 196., 1145., 1716., & 1077 & 1936., 1899., 1519., 1000., 562., 688. / 1078 ! 41- 1079 ! --> 559m3/s 1080 DATA inb(141)/1/ 1081 DATA (iirnf(jc,141),jc=1,jpcoef)/52, 19*0 / 1082 DATA (ijrnf(jc,141),jc=1,jpcoef)/271, 19*0 / 1083 DATA (zrnfm(jm,141),jm=1,jpmois)/ & 1084 & 38., 0., 0., 227., 805., 1051., & 1085 & 1105., 1236., 941., 575., 321., 416. / 1086 ! 42- 1087 ! --> 1070m3/s 1088 DATA inb(142)/1/ 1089 DATA (iirnf(jc,142),jc=1,jpcoef)/53, 19*0 / 1090 DATA (ijrnf(jc,142),jc=1,jpcoef)/265, 19*0 / 1091 DATA (zrnfm(jm,142),jm=1,jpmois)/ & 1092 & 356., 18., 14., 160., 745., 1123., & 1093 & 1347., 1732., 2076., 2057., 1574., 1639. / 1094 ! 43- 1095 ! --> 513m3/s 1096 DATA inb(143)/1/ 1097 DATA (iirnf(jc,143),jc=1,jpcoef)/54, 19*0 / 1098 DATA (ijrnf(jc,143),jc=1,jpcoef)/263, 19*0 / 1099 DATA (zrnfm(jm,143),jm=1,jpmois)/ & 1100 & 231., 12., 121., 236., 216., 239., & 1101 & 351., 517., 1008., 1324., 975., 929. / 1102 ! 44- 1103 ! --> 881m3/s 1104 DATA inb(144)/1/ 1105 DATA (iirnf(jc,144),jc=1,jpcoef)/56, 19*0 / 1106 DATA (ijrnf(jc,144),jc=1,jpcoef)/259, 19*0 / 1107 DATA (zrnfm(jm,144),jm=1,jpmois)/ & 1108 & 558., 632., 980., 902., 575., 421., & 1109 & 432., 731., 1276., 1405., 1188., 1480. / 1110 ! 45- 1111 ! --> 905m3/s 1112 DATA inb(145)/1/ 1113 DATA (iirnf(jc,145),jc=1,jpcoef)/52, 19*0 / 1114 DATA (ijrnf(jc,145),jc=1,jpcoef)/259, 19*0 / 1115 DATA (zrnfm(jm,145),jm=1,jpmois)/ & 1116 & 604., 552., 781., 853., 627., 488., & 1117 & 503., 781., 1245., 1356., 1331., 1747. / 1118 ! 46- 1119 ! --> 136m3/s 1120 DATA inb(146)/1/ 1121 DATA (iirnf(jc,146),jc=1,jpcoef)/50, 19*0 / 1122 DATA (ijrnf(jc,146),jc=1,jpcoef)/261, 19*0 / 1123 DATA (zrnfm(jm,146),jm=1,jpmois)/ & 1124 & 103., 111., 126., 112., 66., 40., & 1125 & 35., 51., 126., 227., 279., 362. / 1126 ! 47- 1127 ! --> 222m3/s 1128 DATA inb(147)/1/ 1129 DATA (iirnf(jc,147),jc=1,jpcoef)/47, 19*0 / 1130 DATA (ijrnf(jc,147),jc=1,jpcoef)/258, 19*0 / 1131 DATA (zrnfm(jm,147),jm=1,jpmois)/ & 1132 & 176., 160., 209., 197., 130., 99., & 1133 & 90., 151., 240., 342., 373., 502./ 1134 ! 48- 1135 ! --> 326m3/s 1136 DATA inb(148)/1/ 1137 DATA (iirnf(jc,148),jc=1,jpcoef)/49, 19*0 / 1138 DATA (ijrnf(jc,148),jc=1,jpcoef)/257, 19*0 / 1139 DATA (zrnfm(jm,148),jm=1,jpmois)/ & 1140 & 226., 278., 363., 301., 181., 130., & 1141 & 131., 194., 407., 505., 519., 689. / 1142 ! 49- 1143 ! --> 203m3/s 1144 DATA inb(149)/1/ 1145 DATA (iirnf(jc,149),jc=1,jpcoef)/50, 19*0 / 1146 DATA (ijrnf(jc,149),jc=1,jpcoef)/256, 19*0 / 1147 DATA (zrnfm(jm,149),jm=1,jpmois)/ & 1148 & 120., 218., 233., 189., 134., 128., & 1149 & 115., 178., 244., 272., 247., 360. / 1150 ! 50- 1151 ! --> 153m3/s 1152 DATA inb(150)/1/ 1153 DATA (iirnf(jc,150),jc=1,jpcoef)/50, 19*0 / 1154 DATA (ijrnf(jc,150),jc=1,jpcoef)/255, 19*0 / 1155 DATA (zrnfm(jm,150),jm=1,jpmois)/ & 1156 & 97., 108., 191., 141., 97., 82., & 1157 & 107., 118., 188., 230., 208., 278. / 1158 ! 51- 1159 ! --> 196m3/s 1160 DATA inb(151)/1/ 1161 DATA (iirnf(jc,151),jc=1,jpcoef)/53, 19*0 / 1162 DATA (ijrnf(jc,151),jc=1,jpcoef)/253, 19*0 / 1163 DATA (zrnfm(jm,151),jm=1,jpmois)/ & 1164 & 74., 125., 165., 123., 117., 121., & 1165 & 160., 196., 272., 322., 296., 389. / 1166 ! 52- 1167 ! --> 166m3/s 1168 DATA inb(152)/1/ 1169 DATA (iirnf(jc,152),jc=1,jpcoef)/53, 19*0 / 1170 DATA (ijrnf(jc,152),jc=1,jpcoef)/252, 19*0 / 1171 DATA (zrnfm(jm,152),jm=1,jpmois)/ & 1172 & 136., 140., 192., 169., 108., 80., & 1173 & 75., 145., 200., 219., 221., 307. / 1174 ! 53-Tigris+Euphrates (Irak) 31N00 47E25 1175 ! --> 4762m3/s 1176 DATA inb(153)/3/ 1177 DATA (iirnf(jc,153),jc=1,jpcoef)/ 673, 673, 674, 17*0 / 1178 DATA (ijrnf(jc,153),jc=1,jpcoef)/ 312, 313, 313, 17*0 / 1179 DATA (zrnfm(jm,153),jm=1,jpmois)/ & 1180 & 6056., 7229., 8377., 8505., 7966., 6217., & 1181 & 3396., 1898., 1147., 869., 1714., 3779. / 1182 1183 DATA (inb(jr),jr=154,200)/47*0/ 1184 823 1185 824 1186 ! Total run-offs(VII)=6181.33301m3/s … … 828 1190 ! = 0.567083955 Sverdrup 829 1191 830 DATA (inb(jr),jr=103,jpriv)/18*0/831 832 1192 !!---------------------------------------------------------------------- 833 1193 !! OPA 8.5, LODYC-IPSL (2002) … … 871 1231 872 1232 iman = jpmois 873 1233 !!! better but change the results i15 = INT( 2*FLOAT( nday ) / ( FLOAT( nobis(nmonth) ) + 0.5 ) ) 874 1234 i15 = nday / 16 875 876 1235 imois = nmonth + i15 - 1 877 1236 IF( imois == 0) imois = iman … … 1091 1450 ! ji+2,jj+2 1092 1451 DO jj = mj0(ijrnf(jl,jr) + 2), mj1(ijrnf(jl,jr) + 2) 1093 DO ji = mi0(iirnf(jl,jr) + 1), mi1(iirnf(jl,jr) + 1)1452 DO ji = mi0(iirnf(jl,jr) + 2), mi1(iirnf(jl,jr) + 2) 1094 1453 DO jn = 1, 3 1095 1454 zcoefr(ji,jj,jn) = MAX( zrup3, zcoefr(ji,jj,jn) ) -
trunk/NEMO/OPA_SRC/SBC/ocesbc.F90
r440 r473 174 174 END SUBROUTINE oce_sbc 175 175 176 # elif defined key_flx_bulk_monthly || defined key_flx_bulk_daily 176 # elif defined key_flx_bulk_monthly || defined key_flx_bulk_daily || defined key_flx_core 177 177 !!---------------------------------------------------------------------- 178 178 !! 'key_ice_lim' with LIM sea-ice model … … 373 373 374 374 END SUBROUTINE oce_sbc 375 376 # elif defined key_flx_bulk_monthly || defined key_flx_bulk_daily || defined key_flx_forced_daily 375 # elif defined key_flx_bulk_monthly || defined key_flx_bulk_daily || defined key_flx_forced_daily || defined key_flx_core 377 376 !!------------------------------------------------------------------------- 378 377 !! 'key_flx_bulk_monthly' or 'key_flx_bulk_daily' or bulk formulea … … 418 417 !!---------------------------------------------------------------------- 419 418 419 420 #if defined key_flx_core 421 CALL ctl_stop( 'flxcore and no ice model not tested yet' ) 422 #endif 423 420 424 ! 1. initialization to zero at kt = nit000 421 425 ! --------------------------------------- -
trunk/NEMO/OPA_SRC/SBC/tau_forced_daily.h90
r392 r473 10 10 numtau, & ! logical unit for the i-component of the wind data 11 11 numtav, & ! logical unit for the j-component of the wind data 12 ntau1, ntau2 , & ! index of the first and second record used13 12 ndaytau ! new day for ers/ncep tau forcing 14 13 15 CHARACTER (len=34) :: & !!! * monthly climatology/interanual fields16 cl_taux , & ! generic name of the i-component monthly NetCDF file17 cl_tauy ! generic name of the j-component monthly NetCDF file18 14 !!---------------------------------------------------------------------- 19 15 !! OPA 9.0 , LOCEAN-IPSL (2005) … … 47 43 !! ! 03-07 (C. Ethe, G. Madec) daily generic forcing 48 44 !!---------------------------------------------------------------------- 49 !! * Modules used 50 USE ioipsl ! NetCDF library 45 USE iom ! NetCDF library 51 46 52 !! * Arguments53 47 INTEGER, INTENT( in ) :: kt ! ocean time step 54 55 !! * Local declarations 56 INTEGER, PARAMETER :: jpday = 365 57 INTEGER :: & 58 itime, & 59 iday, idy, & 60 ipi, ipj, ipk 61 INTEGER , DIMENSION(jpday) :: istep 62 REAL(wp) , DIMENSION(jpi,jpj):: & 63 zlon , & 64 zlat 65 REAL(wp) , DIMENSION(jpk):: & 66 zlev 67 REAL(wp) :: zsecond, zdate0 48 68 49 !!--------------------------------------------------------------------- 69 cl_taux = 'taux.nc'70 cl_tauy = 'tauy.nc'71 72 ! -------------- !73 ! Initialization !74 ! -------------- !75 76 itime = jpday77 ipi = jpiglo78 ipj = jpjglo79 ipk = jpk80 idy = 36581 IF ( nleapy == 1 ) idy = 36682 83 50 84 51 ! -------------------- ! … … 87 54 88 55 IF( kt == nit000 ) THEN 56 57 ndaytau = 0 ! initialization 89 58 IF(lwp) THEN 90 59 WRITE(numout,*) ' ' 91 60 WRITE(numout,*) ' tau : DAILY wind stress in NetCDF files' 92 WRITE(numout,*) ' ~~~~~~~'93 61 ENDIF 94 ! title, dimensions and tests 95 #if defined key_agrif 96 if ( .NOT. Agrif_Root() ) then 97 cl_taux = TRIM(Agrif_CFixed())//'_'//TRIM(cl_taux) 98 endif 99 #endif 62 ! open the files 63 CALL iom_open ( 'taux_1d.nc', numtau ) 64 CALL iom_open ( 'tauy_1d.nc', numtav ) 100 65 101 CALL flinopen( cl_taux, mig(1), nlci, mjg(1), nlcj, & ! taux on U-grid102 .FALSE., ipi , ipj, ipk , &103 zlon , zlat , zlev , itime, &104 istep, zdate0, zsecond, numtau )105 106 IF( itime /= jpday .AND. itime /= jpday+1 ) THEN107 IF(lwp) WRITE(numout,cform_err)108 IF(lwp) WRITE(numout,*) ' problem with time coordinates in file ', cl_taux109 IF(lwp) WRITE(numout,*) ' itime = ', itime,' jpday = ',jpday110 nstop = nstop + 1111 ENDIF112 IF( ipi /= jpidta .OR. ipj /= jpjdta ) THEN113 IF(lwp) WRITE(numout,cform_err)114 IF(lwp) WRITE(numout,*) ' problem with size read in file ', cl_taux115 IF(lwp) WRITE(numout,*) ' ipi = ',ipi,' jpidta = ',jpidta116 IF(lwp) WRITE(numout,*) ' ipj = ',ipj,' jpjdta = ',jpjdta117 nstop = nstop + 1118 ENDIF119 #if defined key_agrif120 if ( .NOT. Agrif_Root() ) then121 cl_tauy = TRIM(Agrif_CFixed())//'_'//TRIM(cl_tauy)122 endif123 #endif124 125 CALL flinopen( cl_tauy, mig(1), nlci, mjg(1), nlcj, & ! tauy on V-grid126 .FALSE., ipi , ipj, ipk , &127 zlon , zlat , zlev , itime, &128 istep, zdate0, zsecond, numtav )129 130 IF( itime /= jpday .AND. itime /= jpday+1 ) THEN131 IF(lwp) WRITE(numout,cform_err)132 IF(lwp) WRITE(numout,*) ' problem with time coordinates in file ', cl_tauy133 IF(lwp) WRITE(numout,*) ' itime = ', itime,' jpday = ',jpday134 nstop = nstop + 1135 ENDIF136 IF( ipi /= jpidta .OR. ipj /= jpjdta ) THEN137 IF(lwp) WRITE(numout,cform_err)138 IF(lwp) WRITE(numout,*) ' problem with size read in file ', cl_tauy139 IF(lwp) WRITE(numout,*) ' ipi = ',ipi,' jpidta = ',jpidta140 IF(lwp) WRITE(numout,*) ' ipj = ',ipj,' jpjdta = ',jpjdta141 nstop = nstop + 1142 ENDIF143 66 ENDIF 144 67 … … 150 73 151 74 ndaytau = nday 152 iday = nday_year153 75 154 76 ! Read daily wind stress data 155 CALL flinget( numtau,'taux', & ! taux: i-component at U-pt 156 jpidta,jpjdta,1,jpday,iday, & 157 iday,mig(1),nlci,mjg(1),nlcj,taux(1:nlci,1:nlcj) ) 158 CALL flinget( numtav,'tauy', & ! tauy: j-component at V-pt 159 jpidta,jpjdta,1,jpday,iday, & 160 iday,mig(1),nlci,mjg(1),nlcj,tauy(1:nlci,1:nlcj) ) 77 78 CALL iom_get ( numtau, jpdom_data, 'taux', taux, nday_year ) 79 CALL iom_get ( numtav, jpdom_data, 'tauy', tauy, nday_year ) 161 80 162 81 IF (lwp .AND. nitend-nit000 <= 100 ) THEN … … 185 104 ! Closing of the 2 files 186 105 IF( kt == nitend ) THEN 187 CALL flinclo( numtau )188 CALL flinclo( numtav )106 CALL iom_close( numtau ) 107 CALL iom_close( numtav ) 189 108 ENDIF 190 109 -
trunk/NEMO/OPA_SRC/SBC/tau_forced_monthly.h90
r392 r473 9 9 !! * local modules variables 10 10 INTEGER :: & 11 numtau, & ! logical unit for the i-component of the wind data12 numtav, & ! logical unit for the j-component of the wind data11 numtau, & ! logical unit for the i-component of the wind data 12 numtav, & ! logical unit for the j-component of the wind data 13 13 ntau1, ntau2 ! index of the first and second record used 14 15 CHARACTER (len=34) :: & !!! * monthly climatology/interanual fields16 cl_taux, & ! generic name of the i-component monthly NetCDF file17 cl_tauy ! generic name of the j-component monthly NetCDF file18 19 14 REAL(wp), DIMENSION(jpi,jpj,2) :: & 20 15 taux_dta, & ! i- and j-components of the surface stress (Pascal) … … 56 51 !!---------------------------------------------------------------------- 57 52 !! * Modules used 58 USE io ipsl ! NetCDF library53 USE iom 59 54 !! * Arguments 60 55 INTEGER, INTENT( in ) :: kt ! ocean time step 61 56 62 57 !! * Local declarations 63 INTEGER, PARAMETER :: jpmonth = 12 64 INTEGER :: & 65 imois, iman, itime, & 66 i15, & 67 ipi, ipj, ipk 68 INTEGER, DIMENSION(jpmonth) :: istep 69 REAL(wp) , DIMENSION(jpi,jpj):: & 70 zlon , & 71 zlat 72 REAL(wp) , DIMENSION(jpk):: & 73 zlev 74 REAL(wp) :: & 75 zsecond, & ! ??? 76 zdate0, & ! ??? 77 zxy ! coefficient of the linear time interpolation 58 INTEGER :: imois, iman, i15 59 REAL(wp) :: zxy ! coefficient of the linear time interpolation 78 60 !!--------------------------------------------------------------------- 79 cl_taux = 'taux_1m.nc'80 cl_tauy = 'tauy_1m.nc'81 61 82 62 ! -------------- ! … … 86 66 ! iman=number of dates in data file (12 for a year of monthly values) 87 67 iman = INT( raamo ) 88 itime = jpmonth89 ipi = jpiglo90 ipj = jpjglo91 ipk = jpk92 93 68 i15 = INT( 2*FLOAT( nday ) / ( FLOAT( nobis(nmonth) ) + 0.5 ) ) 94 95 69 imois = nmonth + i15 - 1 96 70 IF( imois == 0 ) imois = iman 97 98 71 99 72 ! -------------------- ! … … 102 75 103 76 IF( kt == nit000 ) THEN 104 ntau1 = 0105 IF(lwp) WRITE(numout,*)106 IF(lwp) WRITE(numout,*) ' tau : MONTHLY climatological wind stress (NetCDF files)'107 IF(lwp) WRITE(numout,*) ' ~~~ '108 77 109 ! title, dimensions and tests110 111 #if defined key_agrif 112 if ( .NOT. Agrif_Root() ) then113 cl_taux = TRIM(Agrif_CFixed())//'_'//TRIM(cl_taux)114 endif115 #endif 78 ntau1 = 0 ! initialization 79 IF(lwp) THEN 80 WRITE(numout,*) 81 WRITE(numout,*) ' tau : MONTHLY climatological wind stress (NetCDF files)' 82 ENDIF 83 CALL iom_open ( 'taux_1m.nc', numtau ) 84 CALL iom_open ( 'tauy_1m.nc', numtav ) 116 85 117 CALL flinopen( cl_taux, mig(1), nlci, mjg(1), nlcj, & ! taux on U-grid118 .FALSE., ipi , ipj, ipk , &119 zlon , zlat , zlev , itime, &120 istep, zdate0, zsecond, numtau )121 122 IF( itime /= jpmonth ) THEN123 IF(lwp) WRITE(numout,cform_err)124 IF(lwp) WRITE(numout,*) ' problem with time coordinates in file ', cl_taux125 IF(lwp) WRITE(numout,*) ' itime = ', itime,' jpmonth = ',jpmonth126 nstop = nstop + 1127 ENDIF128 IF( ipi /= jpidta .AND. ipj /= jpjdta .AND. ipk /= 1 ) THEN129 IF(lwp) WRITE(numout,cform_err)130 IF(lwp) WRITE(numout,*) ' problem with size read in file ', cl_taux131 IF(lwp) WRITE(numout,*) ' ipi = ',ipi,' jpidta = ',jpidta132 IF(lwp) WRITE(numout,*) ' ipj = ',ipj,' jpjdta = ',jpjdta133 IF(lwp) WRITE(numout,*) ' ipk = ',ipk,' must be 1'134 nstop = nstop + 1135 ENDIF136 #if defined key_agrif137 if ( .NOT. Agrif_Root() ) then138 cl_tauy = TRIM(Agrif_CFixed())//'_'//TRIM(cl_tauy)139 endif140 #endif141 CALL flinopen( cl_tauy, mig(1), nlci, mjg(1), nlcj, & ! tauy on V-grid142 .FALSE., ipi , ipj, ipk , &143 zlon , zlat , zlev , itime, &144 istep, zdate0, zsecond, numtav )145 146 IF( itime /= jpmonth ) THEN147 IF(lwp) WRITE(numout,cform_err)148 IF(lwp) WRITE(numout,*) ' problem with time coordinates in file ', cl_tauy149 IF(lwp) WRITE(numout,*) ' itime = ', itime,' jpmonth = ',jpmonth150 nstop = nstop + 1151 ENDIF152 IF( ipi /= jpidta .AND. ipj /= jpjdta .AND. ipk /= 1) THEN153 IF(lwp) WRITE(numout,cform_err)154 IF(lwp) WRITE(numout,*) ' problem with size read in file ', cl_tauy155 IF(lwp) WRITE(numout,*) ' ipi = ',ipi,' jpidta = ',jpidta156 IF(lwp) WRITE(numout,*) ' ipj = ',ipj,' jpjdta = ',jpjdta157 IF(lwp) WRITE(numout,*) ' ipk = ',ipk,' must be 1'158 nstop = nstop + 1159 ENDIF160 86 ENDIF 161 87 … … 178 104 ! Read the corresponding 2 monthly stress data 179 105 ! ntau1 180 CALL flinget( numtau,'sozotaux', & ! i-component at U-pt 181 jpidta,jpjdta,1,jpmonth,ntau1, & 182 ntau1,mig(1),nlci,mjg(1),nlcj,taux_dta(1:nlci,1:nlcj,1) ) 183 CALL flinget( numtav,'sometauy', & ! j-component at V-pt 184 jpidta,jpjdta,1,jpmonth,ntau1, & 185 ntau1,mig(1),nlci,mjg(1),nlcj,tauy_dta(1:nlci,1:nlcj,1) ) 186 ! ntau2 187 CALL flinget( numtau,'sozotaux', & ! i-component at U-pt 188 jpidta,jpjdta,1,jpmonth,ntau2, & 189 ntau2,mig(1),nlci,mjg(1),nlcj,taux_dta(1:nlci,1:nlcj,2) ) 190 CALL flinget( numtav,'sometauy', & ! j-component at V-pt 191 jpidta,jpjdta,1,jpmonth,ntau2, & 192 ntau2,mig(1),nlci,mjg(1),nlcj,tauy_dta(1:nlci,1:nlcj,2) ) 106 CALL iom_get ( numtau, jpdom_data, 'sozotaux', taux_dta(:,:,1), ntau1 ) 107 CALL iom_get ( numtav, jpdom_data, 'sometauy', tauy_dta(:,:,1), ntau1 ) 108 109 CALL iom_get ( numtau, jpdom_data, 'sozotaux', taux_dta(:,:,2), ntau2 ) 110 CALL iom_get ( numtav, jpdom_data, 'sometauy', tauy_dta(:,:,2), ntau2 ) 193 111 194 112 IF(lwp .AND. nitend-nit000 <= 100 ) THEN … … 230 148 ! Closing of the 2 files (required in mpp) 231 149 IF( kt == nitend ) THEN 232 CALL flinclo(numtau)233 CALL flinclo(numtav)150 CALL iom_close(numtau) 151 CALL iom_close(numtav) 234 152 ENDIF 235 153 -
trunk/NEMO/OPA_SRC/SOL/solisl.F90
r352 r473 39 39 40 40 !! * module variable 41 INTEGER :: numisl = 11! logical unit for island file only used41 INTEGER :: numisl ! logical unit for island file only used 42 42 ! ! here during the initialization phase 43 43 INTEGER :: & … … 248 248 249 249 IF( inilt == 0 ) THEN 250 IF(lwp) THEN 251 WRITE(numout,*) ' isldom: there is not island number: ', jnil,' while jpisl= ', jpisl 252 WRITE(numout,*) ' change parameter.h' 253 ENDIF 254 STOP 'isldom' !cr replace by nstop 250 WRITE(ctmp1,*) ' isldom: there is not island number: ', jnil,' while jpisl= ', jpisl 251 CALL ctl_stop( ctmp1, ' change par_oce' ) 252 255 253 ENDIF 256 254 … … 381 379 382 380 IF( ip > jpnisl ) THEN 383 IF(lwp) THEN 384 WRITE(numout,*) ' isldom: the island ',jnil,' has ', & 385 mnisl(0,jnil),' grid-points, while jpnisl= ', jpnisl,ip 386 WRITE(numout,*) ' change parameter.h' 387 ENDIF 388 STOP 'isldom' !cr => nstop 381 WRITE(ctmp1,*) ' isldom: the island ',jnil,' has ', & 382 mnisl(0,jnil),' grid-points, while jpnisl= ', jpnisl,ip 383 CALL ctl_stop( ctmp1, ' change par_oce.h' ) 389 384 ENDIF 390 385 … … 407 402 408 403 IF( inilt /= jpij+1 ) THEN 409 IF(lwp) THEN 410 WRITE(numout,*) ' isldom: there is at least one more ', & 404 WRITE(ctmp1,*) ' isldom: there is at least one more ', & 411 405 'island in the domain and jpisl=', jpisl 412 WRITE(numout,*) ' change parameter.h' 413 ENDIF 414 STOP 'isldom' 406 CALL ctl_stop( ctmp1, ' change par_oce.h' ) 415 407 ENDIF 416 408 … … 562 554 !! * Modules used 563 555 USE ioipsl 556 USE iom 564 557 565 558 !! * Local declarations 566 INTEGER :: ji, jj, jni, jnj, jn, jl ! dummy loop indices 567 INTEGER :: itime, ibvar, ios ! temporary integers 568 LOGICAL :: llog 569 CHARACTER (len=32) :: clname 570 CHARACTER (len=8 ) :: clvnames(100) 571 REAL(wp), DIMENSION(1) :: zdept 572 REAL(wp), DIMENSION(jpi,jpj) :: zlamt, zphit 559 INTEGER :: ji, jj, jni, jnj, jl ! dummy loop indices 560 INTEGER :: ios ! temporary integers 561 INTEGER :: & 562 inum ! temporary logical unit 573 563 REAL(wp), DIMENSION(jpi,jpj,2) :: zwx 574 564 REAL(wp), DIMENSION(jpisl*jpisl) :: ztab … … 580 570 581 571 ! Lecture 582 zlamt(:,:) = 0. 583 zphit(:,:) = 0. 584 zdept(1) = 0. 585 itime = 0 586 clvnames=" " 587 clname = 'islands' 588 CALL ioget_vname(numisl, ibvar, clvnames) 589 IF(lwp) WRITE(numout,*) clvnames 590 ios=0 591 DO jn=1,100 592 IF(clvnames(jn) == 'aisl') ios=1 593 END DO 594 IF( ios == 0 ) go to 110 595 596 CALL restget( numisl, 'aisl' , jpisl, jpisl, 1, 0, llog, aisl ) 597 CALL restget( numisl, 'aislm1', jpisl, jpisl, 1, 0, llog, aislm1 ) 598 CALL restclo( numisl ) 599 ! Control print 600 IF(lwp) THEN 601 WRITE(numout,*) 602 WRITE(numout,*)' islmat: lecture aisl/aislm1 in numisl done' 603 WRITE(numout,*)' ~~~~~~' 604 WRITE(numout,*) 605 WRITE(numout,*) ' island matrix : ' 606 WRITE(numout,*) 607 608 DO jnj = 1, jpisl 609 WRITE(numout,'(8e12.4)') ( aisl(jni,jnj), jni = 1, jpisl ) 610 END DO 611 612 WRITE(numout,*) 613 WRITE(numout,*) ' inverse of the island matrix' 614 WRITE(numout,*) 615 616 DO jnj = 1, jpisl 617 WRITE(numout,'(12e11.3)') ( aislm1(jni,jnj), jni=1,jpisl ) 618 END DO 619 ENDIF 620 621 RETURN 622 623 110 CONTINUE 624 572 CALL iom_open ( 'islands', inum ) 573 ios = iom_varid( inum, 'aisl' ) 574 IF( ios > 0 ) THEN 575 576 CALL iom_get( inum, jpdom_unknown, 'aisl' , aisl ) 577 CALL iom_get( inum, jpdom_unknown, 'aislm1', aislm1 ) 578 CALL iom_close( inum ) 579 ! Control print 580 IF(lwp) THEN 581 WRITE(numout,*) 582 WRITE(numout,*)' islmat: lecture aisl/aislm1 in numisl done' 583 WRITE(numout,*)' ~~~~~~' 584 WRITE(numout,*) 585 WRITE(numout,*) ' island matrix : ' 586 WRITE(numout,*) 587 588 DO jnj = 1, jpisl 589 WRITE(numout,'(8e12.4)') ( aisl(jni,jnj), jni = 1, jpisl ) 590 END DO 591 592 WRITE(numout,*) 593 WRITE(numout,*) ' inverse of the island matrix' 594 WRITE(numout,*) 595 596 DO jnj = 1, jpisl 597 WRITE(numout,'(12e11.3)') ( aislm1(jni,jnj), jni=1,jpisl ) 598 END DO 599 ENDIF 600 601 CALL restclo(numisl) 602 603 ELSE 604 605 CALL iom_close( inum ) 625 606 626 607 ! II. Island matrix computation … … 707 688 CALL restput( numisl, 'aislm1', jpisl, jpisl, 1, 0, aislm1 ) 708 689 CALL restclo( numisl ) 690 691 ENDIF 709 692 710 693 END SUBROUTINE isl_mat … … 744 727 !! * Modules used 745 728 USE ioipsl 729 USE iom 746 730 USE solpcg 747 731 USE solfet … … 751 735 LOGICAL :: llog, llbon 752 736 CHARACTER (len=10) :: clisl 753 CHARACTER (len=32) :: clname, clname2 754 INTEGER :: ji, jj, jni, jii, jnp, je ! dummy loop indices 737 CHARACTER (len=32) :: clname = 'islands' 738 INTEGER :: & 739 inum ! temporary logical unit 740 INTEGER :: ji, jj, jni, jii, jnp ! dummy loop indices 755 741 INTEGER :: iimlu, ijmlu, inmlu, iju 756 742 INTEGER :: ii, ij, icile, icut, inmax, indic 757 INTEGER :: itime , ie743 INTEGER :: itime 758 744 REAL(wp) :: zepsr, zeplu, zgwgt 759 REAL(wp) :: zep(jpisl), z lamt(jpi,jpj), zphit(jpi,jpj), zdept(1), zprec(4)745 REAL(wp) :: zep(jpisl), zdept(1), zprec(4) 760 746 REAL(wp) :: zdate0, zdt 761 747 REAL(wp) :: t2p1(jpi,1,1) … … 779 765 inmlu = 0 780 766 zeplu = 0. 781 zlamt(:,:) = 0. 782 zphit(:,:) = 0. 783 zdept(1) = 0. 784 itime = 0 767 785 768 clname = 'islands' 786 ie=1 787 DO je = 1, 32 788 IF( clname(je:je) /= ' ' ) ie = je 789 END DO 790 clname2 = clname(1:ie)//".nc" 791 INQUIRE( FILE=clname2, EXIST=llbon ) 769 770 INQUIRE( FILE=clname, EXIST=llbon ) 792 771 ! islands FILE does not EXIST : icut=999 793 772 IF( llbon ) THEN 773 794 774 ! island FILE is present 795 CALL restini(clname,jpi,jpj,zlamt,zphit,1,zdept, & 796 & 'NONE',itime,zdate0,zdt,numisl,domain_id=nidom) 797 CALL restget(numisl,'PRECISION',1,1,4,0,llog,zprec) 775 776 CALL iom_open (clname, inum ) 777 CALL iom_get( inum, jpdom_unknown, 'PRECISION', zprec ) 778 798 779 iimlu = NINT( zprec(1) ) 799 780 ijmlu = NINT( zprec(2) ) … … 803 784 IF( iimlu /= jpi .OR. ijmlu /= jpj .OR. inmlu /= jpisl ) THEN 804 785 icut = 999 805 CALL restclo(numisl)806 786 ELSE 807 787 DO jni = 1, jpisl … … 813 793 WRITE(clisl,'("island",I3)') jni 814 794 ENDIF 815 CALL restget(numisl,clisl,jpi,jpj,1,0,llog, bsfisl(:,:,jni))795 CALL iom_get( inum, jpdom_local, clisl, bsfisl(:,:,jni)) 816 796 END DO 817 797 ENDIF … … 819 799 ! islands FILE does not EXIST : icut=999 820 800 icut = 999 821 CALL restclo(numisl) 822 ENDIF 823 801 ENDIF 802 803 CALL iom_close( inum ) 804 824 805 ! the read precision is not the required one : icut=888 825 806 IF( zeplu > epsisl ) THEN 826 807 icut = 888 827 CALL restclo(numisl)828 808 ENDIF 829 809 … … 1096 1076 zprec(3) = FLOAT(jpisl) 1097 1077 IF(lwp) WRITE(numout,*) clname 1078 zdept(1) = 0. 1079 itime = 0 1098 1080 CALL restini( 'NONE', jpi, jpj, glamt, gphit, 1, zdept, & 1099 1081 & clname, itime, zdate0, rdt, numisl, domain_id=nidom ) … … 1150 1132 END DO 1151 1133 CALL restclo(numisl) 1152 nstop = nstop + 11134 CALL ctl_stop( ' ' ) 1153 1135 ENDIF 1154 1136 -
trunk/NEMO/OPA_SRC/TRA/trabbc.F90
r457 r473 137 137 !!---------------------------------------------------------------------- 138 138 !! * Modules used 139 USE io ipsl139 USE iom 140 140 141 141 !! * local declarations 142 CHARACTER (len=32) :: clname143 142 INTEGER :: ji, jj ! dummy loop indices 144 INTEGER :: inum = 11 ! temporary logical unit 145 INTEGER :: itime ! temporary integers 146 REAL(wp) :: zdate0, zdt ! temporary scalars 147 REAL(wp), DIMENSION(1) :: zdept ! temporary workspace 148 REAL(wp), DIMENSION(jpidta,jpjdta) :: & 149 zlamt, zphit, zdta ! temporary workspace 143 INTEGER :: inum ! temporary logical unit 150 144 151 145 NAMELIST/nambbc/ngeo_flux, ngeo_flux_const … … 188 182 CASE ( 2 ) ! variable geothermal heat flux 189 183 ! read the geothermal fluxes in mW/m2 190 clname = 'geothermal_heating' 191 #if defined key_agrif 192 if ( .NOT. Agrif_Root() ) then 193 clname = TRIM(Agrif_CFixed())//'_'//TRIM(clname) 194 endif 195 #endif 196 itime = 1 197 zlamt(:,:) = 0. 198 zphit(:,:) = 0. 199 IF(lwp) WRITE(numout,*) ' *** variable geothermal heat flux read in ', clname, ' file' 200 CALL restini( clname, jpidta, jpjdta, zlamt, zphit, 1, zdept , 'NONE', & 201 & itime, zdate0, zdt, inum, domain_id=nidom ) 202 CALL restget( inum, 'heatflow', jpidta, jpjdta, 1, itime, .FALSE., zdta ) 203 DO jj = 1, nlcj 204 DO ji = 1, nlci 205 qgh_trd(ji,jj) = zdta(mig(ji),mjg(jj)) 206 END DO 207 END DO 208 209 CALL restclo( inum ) 184 185 IF(lwp) WRITE(numout,*) ' *** variable geothermal heat flux' 186 CALL iom_open ( 'geothermal_heating.nc', inum ) 187 CALL iom_get ( inum, jpdom_data, 'heatflow', qgh_trd ) 188 CALL iom_close (inum) 189 210 190 qgh_trd(:,:) = qgh_trd(:,:) * 1.e-3 ! conversion in W/m2 211 191 212 192 CASE DEFAULT 213 IF(lwp) WRITE(numout,cform_err) 214 IF(lwp) WRITE(numout,*) ' bad flag value for ngeo_flux = ', ngeo_flux 215 nstop = nstop + 1 216 193 WRITE(ctmp1,*) ' bad flag value for ngeo_flux = ', ngeo_flux 194 CALL ctl_stop( ctmp1 ) 217 195 END SELECT 218 196 -
trunk/NEMO/OPA_SRC/TRA/tradmp.F90
r457 r473 244 244 245 245 CASE DEFAULT 246 IF(lwp) WRITE(numout,cform_err) 247 IF(lwp) WRITE(numout,*) ' bad flag value for ndmp = ', ndmp 248 nstop = nstop + 1 246 WRITE(ctmp1,*) ' bad flag value for ndmp = ', ndmp 247 CALL ctl_stop(ctmp1) 249 248 250 249 END SELECT … … 263 262 264 263 CASE DEFAULT 265 IF(lwp) WRITE(numout,cform_err) 266 IF(lwp) WRITE(numout,*) ' bad flag value for nmldmp = ', nmldmp 267 nstop = nstop + 1 264 WRITE(ctmp1,*) ' bad flag value for nmldmp = ', nmldmp 265 CALL ctl_stop(ctmp1) 268 266 269 267 END SELECT 270 268 271 IF( .NOT.lk_dtasal .OR. .NOT.lk_dtatem ) THEN 272 IF(lwp) WRITE(numout,cform_err) 273 IF(lwp) WRITE(numout,*) ' no temperature and/or salinity data ' 274 IF(lwp) WRITE(numout,*) ' define key_dtatem and key_dtasal' 275 nstop = nstop + 1 276 ENDIF 277 269 IF( .NOT.lk_dtasal .OR. .NOT.lk_dtatem ) & 270 & CALL ctl_stop( ' no temperature and/or salinity data ', & 271 & ' define key_dtatem and key_dtasal' ) 278 272 279 273 strdmp(:,:,:) = 0.e0 ! internal damping salinity trend (used in ocesbc) … … 398 392 !!---------------------------------------------------------------------- 399 393 !! * Modules used 394 USE iom 400 395 USE ioipsl 401 396 402 397 !! * Local declarations 403 INTEGER :: ji, jj, jk, je ! dummy loop indices 404 INTEGER, PARAMETER :: jpmois=1 405 INTEGER :: ipi, ipj, ipk ! temporary integers 398 INTEGER :: ji, jj, jk ! dummy loop indices 399 INTEGER :: itime 406 400 INTEGER :: ii0, ii1, ij0, ij1 ! " " 407 401 INTEGER :: & 408 402 idmp, & ! logical unit for file restoring damping term 409 403 icot ! logical unit for file distance to the coast 410 INTEGER :: itime, istep(jpmois), ie 411 LOGICAL :: llbon 412 CHARACTER (len=32) :: clname, clname2, clname3 404 CHARACTER (len=32) :: clname3 413 405 REAL(wp) :: & 414 406 zdate0, zinfl, zlon, & ! temporary scalars … … 416 408 zsdmp, zbdmp ! " " 417 409 REAL(wp), DIMENSION(jpk) :: & 418 z dept, zhfac410 zhfac 419 411 REAL(wp), DIMENSION(jpi,jpj) :: & 420 zmrs , zlamt, zphit412 zmrs 421 413 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 422 414 zdct … … 435 427 ! resto() : array of restoring coeff. on T and S 436 428 437 zdct (:,:,:) = 0.e0438 429 resto(:,:,:) = 0.e0 439 430 … … 450 441 ! ... Distance to coast (zdct) 451 442 452 ! ... Test the existance of distance-to-coast file 453 itime = jpmois 454 ipi = jpiglo 455 ipj = jpjglo 456 ipk = jpk 457 clname = 'dist.coast' 458 DO je = 1,32 459 IF( clname(je:je) == ' ' ) go to 140 460 END DO 461 140 CONTINUE 462 ie = je 463 clname2 = clname(1:ie-1)//".nc" 464 inquire( FILE = clname2, EXIST = llbon ) 465 466 IF ( llbon ) THEN 467 468 ! ... Read file distance to coast if possible 469 CALL flinopen( clname, mig(1), nlci, mjg(1), nlcj, .false., & 470 ipi, ipj, ipk, zlamt, zphit, zdept, jpmois, & 471 istep, zdate0, rdt, icot ) 472 CALL flinget( icot, 'Tcoast', jpidta, jpjdta, jpk, & 473 jpmois, 1, 1, mig(1), nlci, mjg(1), nlcj, zdct(1:nlci,1:nlcj,1:jpk) ) 474 CALL flinclo( icot ) 475 IF(lwp)WRITE(numout,*) ' ** : File dist.coast.nc read' 476 443 IF(lwp) WRITE(numout,*) 444 IF(lwp) WRITE(numout,*) ' dtacof : distance to coast file' 445 CALL iom_open ( 'dist.coast.nc', icot ) 446 IF( icot > 0 ) THEN 447 CALL iom_get ( icot, jpdom_data, 'Tcoast', zdct ) 448 CALL iom_close (icot) 477 449 ELSE 478 479 450 ! ... Compute and save the distance-to-coast array (output in zdct) 480 CALL cofdis ( zdct ) 481 451 CALL cofdis( zdct ) 482 452 ENDIF 483 453 … … 642 612 CASE ( 025 ) ! ORCA_R025 configuration 643 613 ! ! ======================== 644 IF(lwp) WRITE(numout,cform_err) 645 IF(lwp) WRITE(numout,*)' Not yet implemented in ORCA_R025' 646 nstop = nstop + 1 614 CALL ctl_stop( ' Not yet implemented in ORCA_R025' ) 647 615 648 616 END SELECT … … 661 629 ! No damping 662 630 ! ------------ 663 IF(lwp) WRITE(numout,cform_err) 664 IF(lwp) WRITE(numout,*) 'Choose a correct value of ndmp or DO NOT defined key_tradmp' 665 nstop = nstop + 1 631 CALL ctl_stop( 'Choose a correct value of ndmp or DO NOT defined key_tradmp' ) 666 632 ENDIF 667 633 … … 676 642 itime = 0 677 643 clname3 = 'damping.coeff' 678 CALL ymds2ju( 0 , 1 , 1 , 0.e0 , zdate0 )679 CALL restini( 'NONE', jpi , jpj , glamt, gphit, &680 jpk , gdept_0 644 CALL ymds2ju( 0 , 1 , 1 , 0.e0 , zdate0 ) 645 CALL restini( 'NONE', jpi , jpj , glamt, gphit, & 646 jpk , gdept_0, clname3, itime, zdate0, & 681 647 rdt , idmp, domain_id=nidom ) 682 648 CALL restput( idmp, 'Resto', jpi, jpj, jpk, & … … 688 654 689 655 690 SUBROUTINE cofdis 656 SUBROUTINE cofdis( pdct ) 691 657 !!---------------------------------------------------------------------- 692 658 !! *** ROUTINE cofdis *** … … 743 709 IF(lwp) WRITE(numout,*) '~~~~~~' 744 710 IF(lwp) WRITE(numout,*) 745 IF( lk_mpp ) THEN 746 IF(lwp) WRITE(numout,cform_err) 747 IF(lwp) WRITE(numout,*) ' Computation not yet implemented with key_mpp_...' 748 IF(lwp) WRITE(numout,*) ' Rerun the code on another computer or ' 749 IF(lwp) WRITE(numout,*) ' create the "dist.coast.nc" file using IDL' 750 nstop = nstop + 1 751 ENDIF 711 IF( lk_mpp ) & 712 & CALL ctl_stop(' Computation not yet implemented with key_mpp_...', & 713 & ' Rerun the code on another computer or ', & 714 & ' create the "dist.coast.nc" file using IDL' ) 752 715 753 716 pdct(:,:,:) = 0.e0 … … 800 763 iju = jpi - ji + 1 801 764 llcotu(ji,jpj ) = llcotu(iju,jpj-2) 802 llcotf(ji,jpj -1) = llcotf(iju,jpj-2)765 llcotf(ji,jpjm1) = llcotf(iju,jpj-2) 803 766 llcotf(ji,jpj ) = llcotf(iju,jpj-3) 804 767 END DO 805 DO ji = jpi/2, jpi -1768 DO ji = jpi/2, jpim1 806 769 iju = jpi - ji + 1 807 770 llcotu(ji,jpjm1) = llcotu(iju,jpjm1) … … 809 772 DO ji = 2, jpi 810 773 ijt = jpi - ji + 2 811 llcotv(ji,jpj -1) = llcotv(ijt,jpj-2)774 llcotv(ji,jpjm1) = llcotv(ijt,jpj-2) 812 775 llcotv(ji,jpj ) = llcotv(ijt,jpj-3) 813 776 END DO … … 816 779 DO ji = 1, jpim1 817 780 iju = jpi - ji 818 llcotu(ji,jpj ) = llcotu(iju,jpj -1)781 llcotu(ji,jpj ) = llcotu(iju,jpjm1) 819 782 llcotf(ji,jpj ) = llcotf(iju,jpj-2) 820 783 END DO 821 DO ji = jpi/2, jpi -1784 DO ji = jpi/2, jpim1 822 785 iju = jpi - ji 823 786 llcotf(ji,jpjm1) = llcotf(iju,jpjm1) … … 825 788 DO ji = 1, jpi 826 789 ijt = jpi - ji + 1 827 llcotv(ji,jpj ) = llcotv(ijt,jpj -1)790 llcotv(ji,jpj ) = llcotv(ijt,jpjm1) 828 791 END DO 829 792 DO ji = jpi/2+1, jpi … … 885 848 clname = 'dist.coast' 886 849 itime = 0 887 CALL ymds2ju( 0 , 1 , 1 , 0.e0 , zdate0 )888 CALL restini( 'NONE', jpi , jpj , glamt, gphit , &889 jpk , gdept_0 850 CALL ymds2ju( 0 , 1 , 1 , 0.e0 , zdate0 ) 851 CALL restini( 'NONE', jpi , jpj , glamt, gphit , & 852 jpk , gdept_0, clname, itime, zdate0, & 890 853 rdt , icot ) 891 854 CALL restput( icot, 'Tcoast', jpi, jpj, jpk, 0, pdct ) -
trunk/NEMO/OPA_SRC/istate.F90
r467 r473 57 57 !! 9.0 ! 03-09 (G. Madec) F90: Free form, modules, orthogonality 58 58 !!---------------------------------------------------------------------- 59 USE iom 59 60 !! * Local declarations 61 !CT INTEGER :: inum 60 62 !!---------------------------------------------------------------------- 61 63 … … 106 108 ELSE 107 109 ! ! Other configurations: Initial temperature and salinity fields 110 111 !CT CALL iom_open ('ssh', inum) 112 !CT CALL iom_get( inum, jpdom_local, 'sshb', sshb ) ! free surface formulation (ssh) 113 !CT sshn(:,:) = sshb(:,:) 114 !CT CALL iom_close (inum) 115 108 116 #if defined key_dtatem 109 117 CALL dta_tem( nit000 ) ! read 3D temperature data … … 225 233 USE eosbn2 ! eq. of state, Brunt Vaisala frequency (eos routine) 226 234 USE divcur ! hor. divergence & rel. vorticity (div_cur routine) 227 USE io ipsl235 USE iom 228 236 229 237 !! * Local declarations 230 LOGICAL :: llog231 CHARACTER (len=21) :: &232 clname = 'eel.initemp', & ! filename (for EEL R2 or R6)233 clvar = 'initemp' ! variable name234 238 INTEGER :: inum ! temporary logical unit 235 239 INTEGER :: ji, jj, jk ! dummy loop indices 236 INTEGER :: ilev, itime ! temporary integers237 240 REAL(wp) :: & 238 241 zh1, zh2, zslope, zcst ! temporary scalars … … 241 244 zt2 = 2._wp, & ! bottom temperature value (EEL R5) 242 245 zsal = 35.5_wp ! constant salinity (EEL R2, R5 and R6) 243 REAL(wp) :: &244 zdt, zdate0 ! temporary scalars245 REAL(wp), DIMENSION(jpk) :: &246 zdept ! temporary workspace247 REAL(wp), DIMENSION(jpiglo,jpjglo) :: &248 zlamt, zphit ! temporary workspace249 246 # if ! defined key_dynspg_rl 250 247 REAL(wp), DIMENSION(jpiglo,jpjglo) :: & … … 328 325 IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 329 326 330 itime = 0 331 clname = 'eel.initemp' 332 #if defined key_agrif 333 if ( .NOT. Agrif_Root() ) then 334 clname = TRIM(Agrif_CFixed())//'_'//TRIM(clname) 335 endif 336 #endif 337 llog = .FALSE. 338 ilev = jpk 339 zlamt(:,:) = 0.e0 340 zphit(:,:) = 0.e0 341 CALL restini( clname, jpidta, jpjdta, zlamt , zphit , & 342 & ilev , zdept , clname, itime , zdate0, & 343 & zdt , inum , domain_id=nidom ) 344 CALL restget( inum , 'initemp', jpi, jpj, jpk, & 345 & 0 , llog , tb ) ! read before temprature (tb) 346 CALL restclo( inum ) 347 348 tn(:,:,:) = tb(:,:,:) ! set nox temperature to tb 349 350 IF(lwp) WRITE(numout,*) ' file name : ', clname 327 CALL iom_open ( 'eel.initemp', inum ) 328 CALL iom_get ( inum, jpdom_data, 'initemp', tb ) ! read before temprature (tb) 329 CALL iom_close( inum ) 330 331 tn(:,:,:) = tb(:,:,:) ! set nox temperature to tb 332 351 333 IF(lwp) CALL prizre( tn , jpi , jpj , jpk , jpj/2 , & 352 334 & 1 , jpi , 5 , 1 , jpk , & … … 375 357 CASE DEFAULT ! NONE existing configuration 376 358 ! ! =========================== 377 IF(lwp) WRITE(numout,cform_err)378 IF(lwp) WRITE(numout,*) 'EEL with a ', jp_cfg,' km resolution is not coded'379 nstop = nstop +1 359 WRITE(ctmp1,*) 'EEL with a ', jp_cfg,' km resolution is not coded' 360 CALL ctl_stop( ctmp1 ) 361 380 362 END SELECT 381 363 … … 397 379 !!---------------------------------------------------------------------- 398 380 !! * Modules used 399 USE io ipsl381 USE iom 400 382 401 383 !! * Local variables 402 INTEGER , PARAMETER :: jpmois = 12384 INTEGER :: inum ! temporary logical unit 403 385 INTEGER, PARAMETER :: & 404 386 ntsinit = 0 ! (0/1) (analytical/input data files) T&S initialization 405 387 406 CHARACTER (len=32) :: clname 407 INTEGER :: ji, jj, jk ! dummy loop indices 408 INTEGER :: ipi, ipj, ipk, itime ! temporary integers 409 INTEGER, DIMENSION(jpmois) :: istep 410 411 REAL(wp) :: zdate0, zdt 412 REAL(wp), DIMENSION(jpk) :: zlev 413 REAL(wp), DIMENSION(jpi,jpj) :: zlon, zlat 414 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zt_dta, zs_dta 388 INTEGER :: ji, jj, jk ! dummy loop indices 415 389 !!---------------------------------------------------------------------- 416 390 … … 455 429 ! Read temperature field 456 430 ! ---------------------- 457 ! open file 458 zdt = rdt 459 clname = 'data_tem' 460 CALL flinopen(TRIM(clname), mig(1), nlci , mjg(1), nlcj & 461 & , .false. , ipi , ipj , ipk , zlon & 462 & , zlat , zlev , itime, istep , zdate0 & 463 & , zdt , numtdt ) 464 465 ! title, dimensions and tests 466 IF( ipi /= jpidta .OR. ipj /= jpjdta .OR. ipk /= jpk ) THEN 467 IF(lwp) THEN 468 WRITE(numout,*) 469 WRITE(numout,*) 'problem with dimensions' 470 WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta 471 WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta 472 WRITE(numout,*) ' ipk ',ipk,' jpk ',jpk 473 ENDIF 474 STOP 'istate_gyre' 475 ENDIF 476 IF(lwp) WRITE(numout,*) itime,istep(1),zdate0,zdt,numtdt 477 478 479 ! Read data 480 zt_dta(:,:,:) = 0.e0 481 CALL flinget( numtdt,'votemper',jpidta,jpjdta,jpk,1,1, & 482 & 1,mig(1),nlci,mjg(1),nlcj,zt_dta(1:nlci,1:nlcj,1:jpk)) 483 484 tn(:,:,:) = zt_dta(:,:,:)*tmask(:,:,:) 485 tb(:,:,:) = zt_dta(:,:,:)*tmask(:,:,:) 486 487 CALL flinclo( numtdt ) 488 489 IF(lwp) WRITE(numout,*) 490 IF(lwp) WRITE(numout,*) ' read temperature data ok' 491 IF(lwp) WRITE(numout,*) 431 CALL iom_open ( 'data_tem', inum ) 432 CALL iom_get ( inum, jpdom_data, 'votemper', tn ) 433 CALL iom_close( inum ) 434 435 tn(:,:,:) = tn(:,:,:) * tmask(:,:,:) 436 tb(:,:,:) = tn(:,:,:) 492 437 493 438 ! Read salinity field 494 439 ! ------------------- 495 ! open file 496 zdt = rdt 497 clname = 'data_sal' 498 CALL flinopen(TRIM(clname), mig(1), nlci , mjg(1), nlcj & 499 & , .false. , ipi , ipj , ipk , zlon & 500 & , zlat , zlev , itime, istep , zdate0 & 501 & , zdt , numsdt ) 502 503 ! title, dimensions and tests 504 505 IF( ipi /= jpidta .OR. ipj /= jpjdta .OR. ipk /= jpk ) THEN 506 IF(lwp) THEN 507 WRITE(numout,*) 508 WRITE(numout,*) 'problem with dimensions' 509 WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta 510 WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta 511 WRITE(numout,*) ' ipk ',ipk,' jpk ',jpk 512 ENDIF 513 STOP 'istate_gyre' 514 ENDIF 515 IF(lwp) WRITE(numout,*) itime,istep(1),zdate0,zdt,numsdt 516 517 ! Read data 518 zs_dta(:,:,:) = 0.e0 519 CALL flinget(numsdt,'vosaline',jpidta,jpjdta,jpk,1,1, & 520 & 1,mig(1),nlci,mjg(1),nlcj,zs_dta(1:nlci,1:nlcj,1:jpk)) 521 522 sn(:,:,:) = zs_dta(:,:,:)*tmask(:,:,:) 523 sb(:,:,:) = zs_dta(:,:,:)*tmask(:,:,:) 524 525 CALL flinclo( numsdt ) 526 527 IF(lwp) WRITE(numout,*) 528 IF(lwp) WRITE(numout,*) ' read salinity data ok' 529 IF(lwp) WRITE(numout,*) 440 CALL iom_open ( 'data_sal', inum ) 441 CALL iom_get ( inum, jpdom_data, 'vosaline', sn ) 442 CALL iom_close( inum ) 443 444 sn(:,:,:) = sn(:,:,:) * tmask(:,:,:) 445 sb(:,:,:) = sn(:,:,:) 530 446 531 447 END SELECT -
trunk/NEMO/OPA_SRC/lbclnk.F90
r311 r473 19 19 20 20 INTERFACE lbc_lnk 21 MODULE PROCEDURE mpp_lnk_3d , mpp_lnk_2d21 MODULE PROCEDURE mpp_lnk_3d_gather, mpp_lnk_3d, mpp_lnk_2d 22 22 END INTERFACE 23 23 … … 49 49 50 50 INTERFACE lbc_lnk 51 MODULE PROCEDURE lbc_lnk_3d , lbc_lnk_2d51 MODULE PROCEDURE lbc_lnk_3d_gather, lbc_lnk_3d, lbc_lnk_2d 52 52 END INTERFACE 53 53 … … 62 62 CONTAINS 63 63 64 SUBROUTINE lbc_lnk_3d( pt3d, cd_type, psgn ) 64 SUBROUTINE lbc_lnk_3d_gather( pt3d1, cd_type1, pt3d2, cd_type2, psgn ) 65 !!--------------------------------------------------------------------- 66 !! *** ROUTINE lbc_lnk_3d_gather *** 67 !! 68 !! ** Purpose : set lateral boundary conditions (non mpp case) 69 !! 70 !! ** Method : 71 !! 72 !! History : 73 !! ! 97-06 (G. Madec) Original code 74 !! 8.5 ! 02-09 (G. Madec) F90: Free form and module 75 !!---------------------------------------------------------------------- 76 !! * Arguments 77 CHARACTER(len=1), INTENT( in ) :: & 78 cd_type1, cd_type2 ! nature of pt3d grid-points 79 ! ! = T , U , V , F or W gridpoints 80 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout ) :: & 81 pt3d1, pt3d2 ! 3D array on which the boundary condition is applied 82 REAL(wp), INTENT( in ) :: & 83 psgn ! control of the sign change 84 ! ! =-1 , the sign is changed if north fold boundary 85 ! ! = 1 , no sign change 86 ! ! = 0 , no sign change and > 0 required (use the inner 87 ! ! row/column if closed boundary) 88 89 90 !! * Local declarations 91 INTEGER :: ji, jk 92 INTEGER :: ijt, iju 93 !!---------------------------------------------------------------------- 94 !! OPA 9.0 , LOCEAN-IPSL (2005) 95 !! $Header$ 96 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 97 !!---------------------------------------------------------------------- 98 99 ! ! =============== 100 DO jk = 1, jpk ! Horizontal slab 101 ! ! =============== 102 103 ! ! East-West boundaries 104 ! ! ==================== 105 SELECT CASE ( nperio ) 106 107 CASE ( 1 , 4 , 6 ) ! * cyclic east-west 108 pt3d1( 1 ,:,jk) = pt3d1(jpim1,:,jk) ! all points 109 pt3d1(jpi,:,jk) = pt3d1( 2 ,:,jk) 110 pt3d2( 1 ,:,jk) = pt3d2(jpim1,:,jk) 111 pt3d2(jpi,:,jk) = pt3d2( 2 ,:,jk) 112 113 CASE DEFAULT ! * closed 114 SELECT CASE ( cd_type1 ) 115 CASE ( 'T' , 'U' , 'V' , 'W' ) ! T-, U-, V-, W-points 116 pt3d1( 1 ,:,jk) = 0.e0 117 pt3d1(jpi,:,jk) = 0.e0 118 CASE ( 'F' ) ! F-point 119 pt3d1(jpi,:,jk) = 0.e0 120 END SELECT 121 SELECT CASE ( cd_type2 ) 122 CASE ( 'T' , 'U' , 'V' , 'W' ) ! T-, U-, V-, W-points 123 pt3d2( 1 ,:,jk) = 0.e0 124 pt3d2(jpi,:,jk) = 0.e0 125 CASE ( 'F' ) ! F-point 126 pt3d2(jpi,:,jk) = 0.e0 127 END SELECT 128 129 END SELECT 130 131 ! ! North-South boundaries 132 ! ! ====================== 133 SELECT CASE ( nperio ) 134 135 CASE ( 2 ) ! * south symmetric 136 137 SELECT CASE ( cd_type1 ) 138 CASE ( 'T' , 'U' , 'W' ) ! T-, U-, W-points 139 pt3d1(:, 1 ,jk) = pt3d1(:,3,jk) 140 pt3d1(:,jpj,jk) = 0.e0 141 CASE ( 'V' , 'F' ) ! V-, F-points 142 pt3d1(:, 1 ,jk) = psgn * pt3d1(:,2,jk) 143 pt3d1(:,jpj,jk) = 0.e0 144 END SELECT 145 SELECT CASE ( cd_type2 ) 146 CASE ( 'T' , 'U' , 'W' ) ! T-, U-, W-points 147 pt3d2(:, 1 ,jk) = pt3d2(:,3,jk) 148 pt3d2(:,jpj,jk) = 0.e0 149 CASE ( 'V' , 'F' ) ! V-, F-points 150 pt3d2(:, 1 ,jk) = psgn * pt3d2(:,2,jk) 151 pt3d2(:,jpj,jk) = 0.e0 152 END SELECT 153 154 CASE ( 3 , 4 ) ! * North fold T-point pivot 155 156 pt3d1( 1 ,jpj,jk) = 0.e0 157 pt3d1(jpi,jpj,jk) = 0.e0 158 pt3d2( 1 ,jpj,jk) = 0.e0 159 pt3d2(jpi,jpj,jk) = 0.e0 160 161 SELECT CASE ( cd_type1 ) 162 CASE ( 'T' , 'W' ) ! T-, W-point 163 DO ji = 2, jpi 164 ijt = jpi-ji+2 165 pt3d1(ji, 1 ,jk) = 0.e0 166 pt3d1(ji,jpj,jk) = psgn * pt3d1(ijt,jpj-2,jk) 167 END DO 168 DO ji = jpi/2+1, jpi 169 ijt = jpi-ji+2 170 pt3d1(ji,jpjm1,jk) = psgn * pt3d1(ijt,jpjm1,jk) 171 END DO 172 CASE ( 'U' ) ! U-point 173 DO ji = 1, jpi-1 174 iju = jpi-ji+1 175 pt3d1(ji, 1 ,jk) = 0.e0 176 pt3d1(ji,jpj,jk) = psgn * pt3d1(iju,jpj-2,jk) 177 END DO 178 DO ji = jpi/2, jpi-1 179 iju = jpi-ji+1 180 pt3d1(ji,jpjm1,jk) = psgn * pt3d1(iju,jpjm1,jk) 181 END DO 182 CASE ( 'V' ) ! V-point 183 DO ji = 2, jpi 184 ijt = jpi-ji+2 185 pt3d1(ji, 1 ,jk) = 0.e0 186 pt3d1(ji,jpj-1,jk) = psgn * pt3d1(ijt,jpj-2,jk) 187 pt3d1(ji,jpj ,jk) = psgn * pt3d1(ijt,jpj-3,jk) 188 END DO 189 CASE ( 'F' ) ! F-point 190 DO ji = 1, jpi-1 191 iju = jpi-ji+1 192 pt3d1(ji,jpj-1,jk) = psgn * pt3d1(iju,jpj-2,jk) 193 pt3d1(ji,jpj ,jk) = psgn * pt3d1(iju,jpj-3,jk) 194 END DO 195 END SELECT 196 SELECT CASE ( cd_type2 ) 197 CASE ( 'T' , 'W' ) ! T-, W-point 198 DO ji = 2, jpi 199 ijt = jpi-ji+2 200 pt3d2(ji, 1 ,jk) = 0.e0 201 pt3d2(ji,jpj,jk) = psgn * pt3d2(ijt,jpj-2,jk) 202 END DO 203 DO ji = jpi/2+1, jpi 204 ijt = jpi-ji+2 205 pt3d2(ji,jpjm1,jk) = psgn * pt3d2(ijt,jpjm1,jk) 206 END DO 207 CASE ( 'U' ) ! U-point 208 DO ji = 1, jpi-1 209 iju = jpi-ji+1 210 pt3d2(ji, 1 ,jk) = 0.e0 211 pt3d2(ji,jpj,jk) = psgn * pt3d2(iju,jpj-2,jk) 212 END DO 213 DO ji = jpi/2, jpi-1 214 iju = jpi-ji+1 215 pt3d2(ji,jpjm1,jk) = psgn * pt3d2(iju,jpjm1,jk) 216 END DO 217 CASE ( 'V' ) ! V-point 218 DO ji = 2, jpi 219 ijt = jpi-ji+2 220 pt3d2(ji, 1 ,jk) = 0.e0 221 pt3d2(ji,jpj-1,jk) = psgn * pt3d2(ijt,jpj-2,jk) 222 pt3d2(ji,jpj ,jk) = psgn * pt3d2(ijt,jpj-3,jk) 223 END DO 224 CASE ( 'F' ) ! F-point 225 DO ji = 1, jpi-1 226 iju = jpi-ji+1 227 pt3d2(ji,jpj-1,jk) = psgn * pt3d2(iju,jpj-2,jk) 228 pt3d2(ji,jpj ,jk) = psgn * pt3d2(iju,jpj-3,jk) 229 END DO 230 END SELECT 231 232 CASE ( 5 , 6 ) ! * North fold F-point pivot 233 234 pt3d1( 1 ,jpj,jk) = 0.e0 235 pt3d1(jpi,jpj,jk) = 0.e0 236 pt3d2( 1 ,jpj,jk) = 0.e0 237 pt3d2(jpi,jpj,jk) = 0.e0 238 239 SELECT CASE ( cd_type1 ) 240 CASE ( 'T' , 'W' ) ! T-, W-point 241 DO ji = 1, jpi 242 ijt = jpi-ji+1 243 pt3d1(ji, 1 ,jk) = 0.e0 244 pt3d1(ji,jpj,jk) = psgn * pt3d1(ijt,jpj-1,jk) 245 END DO 246 CASE ( 'U' ) ! U-point 247 DO ji = 1, jpi-1 248 iju = jpi-ji 249 pt3d1(ji, 1 ,jk) = 0.e0 250 pt3d1(ji,jpj,jk) = psgn * pt3d1(iju,jpj-1,jk) 251 END DO 252 CASE ( 'V' ) ! V-point 253 DO ji = 1, jpi 254 ijt = jpi-ji+1 255 pt3d1(ji, 1 ,jk) = 0.e0 256 pt3d1(ji,jpj,jk) = psgn * pt3d1(ijt,jpj-2,jk) 257 END DO 258 DO ji = jpi/2+1, jpi 259 ijt = jpi-ji+1 260 pt3d1(ji,jpjm1,jk) = psgn * pt3d1(ijt,jpjm1,jk) 261 END DO 262 CASE ( 'F' ) ! F-point 263 DO ji = 1, jpi-1 264 iju = jpi-ji 265 pt3d1(ji,jpj ,jk) = psgn * pt3d1(iju,jpj-2,jk) 266 END DO 267 DO ji = jpi/2+1, jpi-1 268 iju = jpi-ji 269 pt3d1(ji,jpjm1,jk) = psgn * pt3d1(iju,jpjm1,jk) 270 END DO 271 END SELECT 272 SELECT CASE ( cd_type2 ) 273 CASE ( 'T' , 'W' ) ! T-, W-point 274 DO ji = 1, jpi 275 ijt = jpi-ji+1 276 pt3d2(ji, 1 ,jk) = 0.e0 277 pt3d2(ji,jpj,jk) = psgn * pt3d2(ijt,jpj-1,jk) 278 END DO 279 CASE ( 'U' ) ! U-point 280 DO ji = 1, jpi-1 281 iju = jpi-ji 282 pt3d2(ji, 1 ,jk) = 0.e0 283 pt3d2(ji,jpj,jk) = psgn * pt3d2(iju,jpj-1,jk) 284 END DO 285 CASE ( 'V' ) ! V-point 286 DO ji = 1, jpi 287 ijt = jpi-ji+1 288 pt3d2(ji, 1 ,jk) = 0.e0 289 pt3d2(ji,jpj,jk) = psgn * pt3d2(ijt,jpj-2,jk) 290 END DO 291 DO ji = jpi/2+1, jpi 292 ijt = jpi-ji+1 293 pt3d2(ji,jpjm1,jk) = psgn * pt3d2(ijt,jpjm1,jk) 294 END DO 295 CASE ( 'F' ) ! F-point 296 DO ji = 1, jpi-1 297 iju = jpi-ji 298 pt3d2(ji,jpj ,jk) = psgn * pt3d2(iju,jpj-2,jk) 299 END DO 300 DO ji = jpi/2+1, jpi-1 301 iju = jpi-ji 302 pt3d2(ji,jpjm1,jk) = psgn * pt3d2(iju,jpjm1,jk) 303 END DO 304 END SELECT 305 306 CASE DEFAULT ! * closed 307 308 SELECT CASE ( cd_type1 ) 309 CASE ( 'T' , 'U' , 'V' , 'W' ) ! T-, U-, V-, W-points 310 pt3d1(:, 1 ,jk) = 0.e0 311 pt3d1(:,jpj,jk) = 0.e0 312 CASE ( 'F' ) ! F-point 313 pt3d1(:,jpj,jk) = 0.e0 314 END SELECT 315 SELECT CASE ( cd_type2 ) 316 CASE ( 'T' , 'U' , 'V' , 'W' ) ! T-, U-, V-, W-points 317 pt3d2(:, 1 ,jk) = 0.e0 318 pt3d2(:,jpj,jk) = 0.e0 319 CASE ( 'F' ) ! F-point 320 pt3d2(:,jpj,jk) = 0.e0 321 END SELECT 322 323 END SELECT 324 ! ! =============== 325 END DO ! End of slab 326 ! ! =============== 327 328 END SUBROUTINE lbc_lnk_3d_gather 329 330 331 SUBROUTINE lbc_lnk_3d( pt3d, cd_type, psgn, cd_mpp ) 65 332 !!--------------------------------------------------------------------- 66 333 !! *** ROUTINE lbc_lnk_3d *** … … 86 353 ! ! = 0 , no sign change and > 0 required (use the inner 87 354 ! ! row/column if closed boundary) 355 CHARACTER(len=3), INTENT( in ), OPTIONAL :: & 356 cd_mpp ! fill the overlap area only (here do nothing) 88 357 89 358 !! * Local declarations … … 95 364 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 96 365 !!---------------------------------------------------------------------- 366 367 IF (PRESENT(cd_mpp)) THEN 368 ! only fill the overlap area and extra allows 369 ! this is in mpp case. In this module, just do nothing 370 ELSE 97 371 98 372 ! ! =============== … … 228 502 END DO ! End of slab 229 503 ! ! =============== 504 ENDIF 230 505 END SUBROUTINE lbc_lnk_3d 231 506 232 507 233 SUBROUTINE lbc_lnk_2d( pt2d, cd_type, psgn )508 SUBROUTINE lbc_lnk_2d( pt2d, cd_type, psgn, cd_mpp ) 234 509 !!--------------------------------------------------------------------- 235 510 !! *** ROUTINE lbc_lnk_2d *** … … 255 530 REAL(wp), DIMENSION(jpi,jpj), INTENT( inout ) :: & 256 531 pt2d ! 2D array on which the boundary condition is applied 532 CHARACTER(len=3), INTENT( in ), OPTIONAL :: & 533 cd_mpp ! fill the overlap area only (here do nothing) 257 534 258 535 !! * Local declarations … … 262 539 !! OPA 8.5, LODYC-IPSL (2002) 263 540 !!---------------------------------------------------------------------- 264 541 542 IF (PRESENT(cd_mpp)) THEN 543 ! only fill the overlap area and extra allows 544 ! this is in mpp case. In this module, just do nothing 545 ELSE 265 546 266 547 ! ! East-West boundaries … … 424 705 END SELECT 425 706 707 ENDIF 708 426 709 END SUBROUTINE lbc_lnk_2d 427 710 -
trunk/NEMO/OPA_SRC/lib_mpp.F90
r415 r473 14 14 !! mpp_lnk : generic interface (defined in lbclnk) for : 15 15 !! mpp_lnk_2d, mpp_lnk_3d 16 !! mpp_lnk_3d_gather : Message passing manadgement for two 3D arrays 16 17 !! mpp_lnk_e : interface defined in lbclnk 17 18 !! mpplnks … … 28 29 !! mpp_sum : generic interface for : 29 30 !! mppsum_int , mppsum_a_int , mppsum_real, mppsum_a_real 31 !! mpp_minloc 32 !! mpp_maxloc 30 33 !! mppsync 31 34 !! mppstop … … 48 51 !!--------------------------------------------------------------------- 49 52 !! * Modules used 50 USE dom_oce ! ocean space and time domain51 USE in_out_manager ! I/O manager53 USE dom_oce ! ocean space and time domain 54 USE in_out_manager ! I/O manager 52 55 53 56 IMPLICIT NONE … … 55 58 PRIVATE 56 59 PUBLIC mynode, mpparent, mpp_isl, mpp_min, mpp_max, mpp_sum, mpp_lbc_north 57 PUBLIC mpp_lbc_north_e, mpp_minloc, mpp_maxloc, mpp_lnk_3d, mpp_lnk_2d, mpp_lnk_ 2d_e, mpplnks60 PUBLIC mpp_lbc_north_e, mpp_minloc, mpp_maxloc, mpp_lnk_3d, mpp_lnk_2d, mpp_lnk_3d_gather, mpp_lnk_2d_e, mpplnks 58 61 PUBLIC mpprecv, mppsend, mppscatter, mppgather, mppobc, mpp_ini_north, mppstop, mppsync 59 62 … … 89 92 LOGICAL, PUBLIC, PARAMETER :: lk_mpp = .TRUE. !: mpp flag 90 93 91 92 !! * Module variables93 94 !! The processor number is a required power of two : 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024,... 94 95 INTEGER, PARAMETER :: & … … 241 242 #endif 242 243 244 REAL(wp), DIMENSION(jpi,jprecj,jpk,2,2) :: & 245 t4ns, t4sn ! 3d message passing arrays north-south & south-north 246 REAL(wp), DIMENSION(jpj,jpreci,jpk,2,2) :: & 247 t4ew, t4we ! 3d message passing arrays east-west & west-east 248 REAL(wp), DIMENSION(jpi,jprecj,jpk,2,2) :: & 249 t4p1, t4p2 ! 3d message passing arrays north fold 243 250 REAL(wp), DIMENSION(jpi,jprecj,jpk,2) :: & 244 251 t3ns, t3sn ! 3d message passing arrays north-south & south-north … … 305 312 CALL mpi_init( ierr ) 306 313 CASE DEFAULT 307 WRITE(numout,cform_err) 308 WRITE(numout,*) ' bad value for c_mpi_send = ', c_mpi_send 309 nstop = nstop + 1 314 WRITE(ctmp1,*) ' bad value for c_mpi_send = ', c_mpi_send 315 CALL ctl_stop( ctmp1 ) 310 316 END SELECT 311 317 … … 351 357 npvm_me = 0 352 358 IF( ndim_mpp > nprocmax ) THEN 353 WRITE(numout,*) 'npvm_mytid=', npvm_mytid, ' too great' 354 STOP ' mynode ' 359 WRITE(ctmp1,*) 'npvm_mytid=', npvm_mytid, ' too great' 360 CALL ctl_stop( ctmp1 ) 361 355 362 ELSE 356 363 npvm_nproc = ndim_mpp … … 470 477 ! --- END receive dimension --- 471 478 IF( ndim_mpp > nprocmax ) THEN 472 WRITE( numout,*) 'mytid=',nt3d_mytid,' too great'473 STOP ' mpparent '479 WRITE(ctmp1,*) 'mytid=',nt3d_mytid,' too great' 480 CALL ctl_stop( ctmp1 ) 474 481 ELSE 475 482 nt3d_nproc = ndim_mpp … … 531 538 #endif 532 539 533 SUBROUTINE mpp_lnk_3d( ptab, cd_type, psgn )540 SUBROUTINE mpp_lnk_3d( ptab, cd_type, psgn, cd_mpp ) 534 541 !!---------------------------------------------------------------------- 535 542 !! *** routine mpp_lnk_3d *** … … 564 571 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout ) :: & 565 572 ptab ! 3D array on which the boundary condition is applied 573 CHARACTER(len=3), INTENT( in ), OPTIONAL :: & 574 cd_mpp ! fill the overlap area only 566 575 567 576 !! * Local variables … … 574 583 ! 1. standard boundary treatment 575 584 ! ------------------------------ 576 ! ! East-West boundaries 577 ! ! ==================== 578 IF( nbondi == 2 .AND. & ! Cyclic east-west 579 & (nperio == 1 .OR. nperio == 4 .OR. nperio == 6) ) THEN 580 ptab( 1 ,:,:) = ptab(jpim1,:,:) 581 ptab(jpi,:,:) = ptab( 2 ,:,:) 582 583 ELSE ! closed 585 586 IF( PRESENT( cd_mpp ) ) THEN 587 ! only fill extra allows with 1. 588 ptab( 1:nlci, nlcj+1:jpj, :) = 1.e0 589 ptab(nlci+1:jpi , : , :) = 1.e0 590 ELSE 591 592 ! ! East-West boundaries 593 ! ! ==================== 594 IF( nbondi == 2 .AND. & ! Cyclic east-west 595 & (nperio == 1 .OR. nperio == 4 .OR. nperio == 6) ) THEN 596 ptab( 1 ,:,:) = ptab(jpim1,:,:) 597 ptab(jpi,:,:) = ptab( 2 ,:,:) 598 599 ELSE ! closed 600 SELECT CASE ( cd_type ) 601 CASE ( 'T', 'U', 'V', 'W' ) 602 ptab( 1 :jpreci,:,:) = 0.e0 603 ptab(nlci-jpreci+1:jpi ,:,:) = 0.e0 604 CASE ( 'F' ) 605 ptab(nlci-jpreci+1:jpi ,:,:) = 0.e0 606 END SELECT 607 ENDIF 608 609 ! ! North-South boundaries 610 ! ! ====================== 584 611 SELECT CASE ( cd_type ) 585 612 CASE ( 'T', 'U', 'V', 'W' ) 586 ptab( 1 :jpreci,:,:) = 0.e0587 ptab( nlci-jpreci+1:jpi ,:,:) = 0.e0613 ptab(:, 1 :jprecj,:) = 0.e0 614 ptab(:,nlcj-jprecj+1:jpj ,:) = 0.e0 588 615 CASE ( 'F' ) 589 ptab(nlci-jpreci+1:jpi ,:,:) = 0.e0 590 END SELECT 616 ptab(:,nlcj-jprecj+1:jpj ,:) = 0.e0 617 END SELECT 618 591 619 ENDIF 592 593 ! ! North-South boundaries594 ! ! ======================595 SELECT CASE ( cd_type )596 CASE ( 'T', 'U', 'V', 'W' )597 ptab(:, 1 :jprecj,:) = 0.e0598 ptab(:,nlcj-jprecj+1:jpj ,:) = 0.e0599 CASE ( 'F' )600 ptab(:,nlcj-jprecj+1:jpj ,:) = 0.e0601 END SELECT602 603 620 604 621 ! 2. East and west directions exchange … … 763 780 ! ----------------------- 764 781 782 IF (PRESENT(cd_mpp)) THEN 783 ! No north fold treatment (it is assumed to be already OK) 784 785 ELSE 786 765 787 ! 4.1 treatment without exchange (jpni odd) 766 788 ! T-point pivot … … 874 896 END SELECT ! jpni 875 897 898 ENDIF 899 876 900 877 901 ! 5. East and west directions exchange … … 964 988 965 989 966 SUBROUTINE mpp_lnk_2d( pt2d, cd_type, psgn )990 SUBROUTINE mpp_lnk_2d( pt2d, cd_type, psgn, cd_mpp ) 967 991 !!---------------------------------------------------------------------- 968 992 !! *** routine mpp_lnk_2d *** … … 996 1020 REAL(wp), DIMENSION(jpi,jpj), INTENT( inout ) :: & 997 1021 pt2d ! 2D array on which the boundary condition is applied 1022 CHARACTER(len=3), INTENT( in ), OPTIONAL :: & 1023 cd_mpp ! fill the overlap area only 998 1024 999 1025 !! * Local variables … … 1008 1034 ! 1. standard boundary treatment 1009 1035 ! ------------------------------ 1010 1011 ! ! East-West boundaries 1012 ! ! ==================== 1013 IF( nbondi == 2 .AND. & ! Cyclic east-west 1014 & (nperio == 1 .OR. nperio == 4 .OR. nperio == 6) ) THEN 1015 pt2d( 1 ,:) = pt2d(jpim1,:) 1016 pt2d(jpi,:) = pt2d( 2 ,:) 1017 1018 ELSE ! ... closed 1036 IF (PRESENT(cd_mpp)) THEN 1037 ! only fill extra allows with 1. 1038 pt2d( 1:nlci, nlcj+1:jpj) = 1.e0 1039 pt2d(nlci+1:jpi , : ) = 1.e0 1040 1041 ELSE 1042 1043 ! ! East-West boundaries 1044 ! ! ==================== 1045 IF( nbondi == 2 .AND. & ! Cyclic east-west 1046 & (nperio == 1 .OR. nperio == 4 .OR. nperio == 6) ) THEN 1047 pt2d( 1 ,:) = pt2d(jpim1,:) 1048 pt2d(jpi,:) = pt2d( 2 ,:) 1049 1050 ELSE ! ... closed 1051 SELECT CASE ( cd_type ) 1052 CASE ( 'T', 'U', 'V', 'W' , 'I' ) 1053 pt2d( 1 :jpreci,:) = 0.e0 1054 pt2d(nlci-jpreci+1:jpi ,:) = 0.e0 1055 CASE ( 'F' ) 1056 pt2d(nlci-jpreci+1:jpi ,:) = 0.e0 1057 END SELECT 1058 ENDIF 1059 1060 ! ! North-South boundaries 1061 ! ! ====================== 1019 1062 SELECT CASE ( cd_type ) 1020 1063 CASE ( 'T', 'U', 'V', 'W' , 'I' ) 1021 pt2d( 1 :jpreci,:) = 0.e01022 pt2d( nlci-jpreci+1:jpi ,:) = 0.e01064 pt2d(:, 1 :jprecj) = 0.e0 1065 pt2d(:,nlcj-jprecj+1:jpj ) = 0.e0 1023 1066 CASE ( 'F' ) 1024 pt2d( nlci-jpreci+1:jpi ,:) = 0.e01067 pt2d(:,nlcj-jprecj+1:jpj ) = 0.e0 1025 1068 END SELECT 1069 1026 1070 ENDIF 1027 1028 ! ! North-South boundaries1029 ! ! ======================1030 SELECT CASE ( cd_type )1031 CASE ( 'T', 'U', 'V', 'W' , 'I' )1032 pt2d(:, 1 :jprecj) = 0.e01033 pt2d(:,nlcj-jprecj+1:jpj ) = 0.e01034 CASE ( 'F' )1035 pt2d(:,nlcj-jprecj+1:jpj ) = 0.e01036 END SELECT1037 1071 1038 1072 … … 1197 1231 ! ----------------------- 1198 1232 1233 IF (PRESENT(cd_mpp)) THEN 1234 ! No north fold treatment (it is assumed to be already OK) 1235 1236 ELSE 1237 1199 1238 ! 4.1 treatment without exchange (jpni odd) 1200 1239 … … 1306 1345 END SELECT ! jpni 1307 1346 1347 ENDIF 1308 1348 1309 1349 ! 5. East and west directions … … 1394 1434 1395 1435 END SUBROUTINE mpp_lnk_2d 1436 1437 1438 SUBROUTINE mpp_lnk_3d_gather( ptab1, cd_type1, ptab2, cd_type2, psgn ) 1439 !!---------------------------------------------------------------------- 1440 !! *** routine mpp_lnk_3d_gather *** 1441 !! 1442 !! ** Purpose : Message passing manadgement for two 3D arrays 1443 !! 1444 !! ** Method : Use mppsend and mpprecv function for passing mask 1445 !! between processors following neighboring subdomains. 1446 !! domain parameters 1447 !! nlci : first dimension of the local subdomain 1448 !! nlcj : second dimension of the local subdomain 1449 !! nbondi : mark for "east-west local boundary" 1450 !! nbondj : mark for "north-south local boundary" 1451 !! noea : number for local neighboring processors 1452 !! nowe : number for local neighboring processors 1453 !! noso : number for local neighboring processors 1454 !! nono : number for local neighboring processors 1455 !! 1456 !! ** Action : ptab1 and ptab2 with update value at its periphery 1457 !! 1458 !!---------------------------------------------------------------------- 1459 !! * Arguments 1460 CHARACTER(len=1) , INTENT( in ) :: & 1461 cd_type1, cd_type2 ! define the nature of ptab array grid-points 1462 ! ! = T , U , V , F , W points 1463 ! ! = S : T-point, north fold treatment ??? 1464 ! ! = G : F-point, north fold treatment ??? 1465 REAL(wp), INTENT( in ) :: & 1466 psgn ! control of the sign change 1467 ! ! = -1. , the sign is changed if north fold boundary 1468 ! ! = 1. , the sign is kept if north fold boundary 1469 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout ) :: & 1470 ptab1, ptab2 ! 3D array on which the boundary condition is applied 1471 1472 !! * Local variables 1473 INTEGER :: ji, jk, jl ! dummy loop indices 1474 INTEGER :: imigr, iihom, ijhom, iloc, ijt, iju ! temporary integers 1475 INTEGER :: ml_req1, ml_req2, ml_err ! for key_mpi_isend 1476 INTEGER :: ml_stat(MPI_STATUS_SIZE) ! for key_mpi_isend 1477 !!---------------------------------------------------------------------- 1478 1479 ! 1. standard boundary treatment 1480 ! ------------------------------ 1481 ! ! East-West boundaries 1482 ! ! ==================== 1483 IF( nbondi == 2 .AND. & ! Cyclic east-west 1484 & (nperio == 1 .OR. nperio == 4 .OR. nperio == 6) ) THEN 1485 ptab1( 1 ,:,:) = ptab1(jpim1,:,:) 1486 ptab1(jpi,:,:) = ptab1( 2 ,:,:) 1487 ptab2( 1 ,:,:) = ptab2(jpim1,:,:) 1488 ptab2(jpi,:,:) = ptab2( 2 ,:,:) 1489 1490 ELSE ! closed 1491 SELECT CASE ( cd_type1 ) 1492 CASE ( 'T', 'U', 'V', 'W' ) 1493 ptab1( 1 :jpreci,:,:) = 0.e0 1494 ptab1(nlci-jpreci+1:jpi ,:,:) = 0.e0 1495 CASE ( 'F' ) 1496 ptab1(nlci-jpreci+1:jpi ,:,:) = 0.e0 1497 END SELECT 1498 SELECT CASE ( cd_type2 ) 1499 CASE ( 'T', 'U', 'V', 'W' ) 1500 ptab2( 1 :jpreci,:,:) = 0.e0 1501 ptab2(nlci-jpreci+1:jpi ,:,:) = 0.e0 1502 CASE ( 'F' ) 1503 ptab2(nlci-jpreci+1:jpi ,:,:) = 0.e0 1504 END SELECT 1505 ENDIF 1506 1507 ! ! North-South boundaries 1508 ! ! ====================== 1509 SELECT CASE ( cd_type1 ) 1510 CASE ( 'T', 'U', 'V', 'W' ) 1511 ptab1(:, 1 :jprecj,:) = 0.e0 1512 ptab1(:,nlcj-jprecj+1:jpj ,:) = 0.e0 1513 CASE ( 'F' ) 1514 ptab1(:,nlcj-jprecj+1:jpj ,:) = 0.e0 1515 END SELECT 1516 1517 SELECT CASE ( cd_type2 ) 1518 CASE ( 'T', 'U', 'V', 'W' ) 1519 ptab2(:, 1 :jprecj,:) = 0.e0 1520 ptab2(:,nlcj-jprecj+1:jpj ,:) = 0.e0 1521 CASE ( 'F' ) 1522 ptab2(:,nlcj-jprecj+1:jpj ,:) = 0.e0 1523 END SELECT 1524 1525 1526 ! 2. East and west directions exchange 1527 ! ------------------------------------ 1528 1529 ! 2.1 Read Dirichlet lateral conditions 1530 1531 SELECT CASE ( nbondi ) 1532 CASE ( -1, 0, 1 ) ! all exept 2 1533 iihom = nlci-nreci 1534 DO jl = 1, jpreci 1535 t4ew(:,jl,:,1,1) = ptab1(jpreci+jl,:,:) 1536 t4we(:,jl,:,1,1) = ptab1(iihom +jl,:,:) 1537 t4ew(:,jl,:,2,1) = ptab2(jpreci+jl,:,:) 1538 t4we(:,jl,:,2,1) = ptab2(iihom +jl,:,:) 1539 END DO 1540 END SELECT 1541 1542 ! 2.2 Migrations 1543 1544 #if defined key_mpp_shmem 1545 !! * SHMEM version 1546 1547 imigr = jpreci * jpj * jpk *2 1548 1549 SELECT CASE ( nbondi ) 1550 CASE ( -1 ) 1551 CALL shmem_put( t4we(1,1,1,1,2), t4we(1,1,1,1,1), imigr, noea ) 1552 CASE ( 0 ) 1553 CALL shmem_put( t4ew(1,1,1,1,2), t4ew(1,1,1,1,1), imigr, nowe ) 1554 CALL shmem_put( t4we(1,1,1,1,2), t4we(1,1,1,1,1), imigr, noea ) 1555 CASE ( 1 ) 1556 CALL shmem_put( t4ew(1,1,1,1,2), t4ew(1,1,1,1,1), imigr, nowe ) 1557 END SELECT 1558 1559 CALL barrier() 1560 CALL shmem_udcflush() 1561 1562 #elif defined key_mpp_mpi 1563 !! * Local variables (MPI version) 1564 1565 imigr = jpreci * jpj * jpk *2 1566 1567 SELECT CASE ( nbondi ) 1568 CASE ( -1 ) 1569 CALL mppsend( 2, t4we(1,1,1,1,1), imigr, noea, ml_req1 ) 1570 CALL mpprecv( 1, t4ew(1,1,1,1,2), imigr ) 1571 IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 1572 CASE ( 0 ) 1573 CALL mppsend( 1, t4ew(1,1,1,1,1), imigr, nowe, ml_req1 ) 1574 CALL mppsend( 2, t4we(1,1,1,1,1), imigr, noea, ml_req2 ) 1575 CALL mpprecv( 1, t4ew(1,1,1,1,2), imigr ) 1576 CALL mpprecv( 2, t4we(1,1,1,1,2), imigr ) 1577 IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 1578 IF(l_isend) CALL mpi_wait(ml_req2, ml_stat, ml_err) 1579 CASE ( 1 ) 1580 CALL mppsend( 1, t4ew(1,1,1,1,1), imigr, nowe, ml_req1 ) 1581 CALL mpprecv( 2, t4we(1,1,1,1,2), imigr ) 1582 IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 1583 END SELECT 1584 #endif 1585 1586 ! 2.3 Write Dirichlet lateral conditions 1587 1588 iihom = nlci-jpreci 1589 1590 SELECT CASE ( nbondi ) 1591 CASE ( -1 ) 1592 DO jl = 1, jpreci 1593 ptab1(iihom+jl,:,:) = t4ew(:,jl,:,1,2) 1594 ptab2(iihom+jl,:,:) = t4ew(:,jl,:,2,2) 1595 END DO 1596 CASE ( 0 ) 1597 DO jl = 1, jpreci 1598 ptab1(jl ,:,:) = t4we(:,jl,:,1,2) 1599 ptab1(iihom+jl,:,:) = t4ew(:,jl,:,1,2) 1600 ptab2(jl ,:,:) = t4we(:,jl,:,2,2) 1601 ptab2(iihom+jl,:,:) = t4ew(:,jl,:,2,2) 1602 END DO 1603 CASE ( 1 ) 1604 DO jl = 1, jpreci 1605 ptab1(jl ,:,:) = t4we(:,jl,:,1,2) 1606 ptab2(jl ,:,:) = t4we(:,jl,:,2,2) 1607 END DO 1608 END SELECT 1609 1610 1611 ! 3. North and south directions 1612 ! ----------------------------- 1613 1614 ! 3.1 Read Dirichlet lateral conditions 1615 1616 IF( nbondj /= 2 ) THEN 1617 ijhom = nlcj-nrecj 1618 DO jl = 1, jprecj 1619 t4sn(:,jl,:,1,1) = ptab1(:,ijhom +jl,:) 1620 t4ns(:,jl,:,1,1) = ptab1(:,jprecj+jl,:) 1621 t4sn(:,jl,:,2,1) = ptab2(:,ijhom +jl,:) 1622 t4ns(:,jl,:,2,1) = ptab2(:,jprecj+jl,:) 1623 END DO 1624 ENDIF 1625 1626 ! 3.2 Migrations 1627 1628 #if defined key_mpp_shmem 1629 !! * SHMEM version 1630 1631 imigr = jprecj * jpi * jpk * 2 1632 1633 SELECT CASE ( nbondj ) 1634 CASE ( -1 ) 1635 CALL shmem_put( t4sn(1,1,1,1,2), t4sn(1,1,1,1,1), imigr, nono ) 1636 CASE ( 0 ) 1637 CALL shmem_put( t4ns(1,1,1,1,2), t4ns(1,1,1,1,1), imigr, noso ) 1638 CALL shmem_put( t4sn(1,1,1,1,2), t4sn(1,1,1,1,1), imigr, nono ) 1639 CASE ( 1 ) 1640 CALL shmem_put( t4ns(1,1,1,1,2), t4ns(1,1,1,1;,1), imigr, noso ) 1641 END SELECT 1642 1643 CALL barrier() 1644 CALL shmem_udcflush() 1645 1646 #elif defined key_mpp_mpi 1647 !! * Local variables (MPI version) 1648 1649 imigr=jprecj * jpi * jpk * 2 1650 1651 SELECT CASE ( nbondj ) 1652 CASE ( -1 ) 1653 CALL mppsend( 4, t4sn(1,1,1,1,1), imigr, nono, ml_req1 ) 1654 CALL mpprecv( 3, t4ns(1,1,1,1,2), imigr ) 1655 IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 1656 CASE ( 0 ) 1657 CALL mppsend( 3, t4ns(1,1,1,1,1), imigr, noso, ml_req1 ) 1658 CALL mppsend( 4, t4sn(1,1,1,1,1), imigr, nono, ml_req2 ) 1659 CALL mpprecv( 3, t4ns(1,1,1,1,2), imigr ) 1660 CALL mpprecv( 4, t4sn(1,1,1,1,2), imigr ) 1661 IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 1662 IF(l_isend) CALL mpi_wait(ml_req2, ml_stat, ml_err) 1663 CASE ( 1 ) 1664 CALL mppsend( 3, t4ns(1,1,1,1,1), imigr, noso, ml_req1 ) 1665 CALL mpprecv( 4, t4sn(1,1,1,1,2), imigr ) 1666 IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 1667 END SELECT 1668 1669 #endif 1670 1671 ! 3.3 Write Dirichlet lateral conditions 1672 1673 ijhom = nlcj-jprecj 1674 1675 SELECT CASE ( nbondj ) 1676 CASE ( -1 ) 1677 DO jl = 1, jprecj 1678 ptab1(:,ijhom+jl,:) = t4ns(:,jl,:,1,2) 1679 ptab2(:,ijhom+jl,:) = t4ns(:,jl,:,2,2) 1680 END DO 1681 CASE ( 0 ) 1682 DO jl = 1, jprecj 1683 ptab1(:,jl ,:) = t4sn(:,jl,:,1,2) 1684 ptab1(:,ijhom+jl,:) = t4ns(:,jl,:,1,2) 1685 ptab2(:,jl ,:) = t4sn(:,jl,:,2,2) 1686 ptab2(:,ijhom+jl,:) = t4ns(:,jl,:,2,2) 1687 END DO 1688 CASE ( 1 ) 1689 DO jl = 1, jprecj 1690 ptab1(:,jl,:) = t4sn(:,jl,:,1,2) 1691 ptab2(:,jl,:) = t4sn(:,jl,:,2,2) 1692 END DO 1693 END SELECT 1694 1695 1696 ! 4. north fold treatment 1697 ! ----------------------- 1698 1699 ! 4.1 treatment without exchange (jpni odd) 1700 ! T-point pivot 1701 1702 SELECT CASE ( jpni ) 1703 1704 CASE ( 1 ) ! only one proc along I, no mpp exchange 1705 1706 SELECT CASE ( npolj ) 1707 1708 CASE ( 3 , 4 ) ! T pivot 1709 iloc = jpiglo - 2 * ( nimpp - 1 ) 1710 1711 SELECT CASE ( cd_type1 ) 1712 1713 CASE ( 'T' , 'S', 'W' ) 1714 DO jk = 1, jpk 1715 DO ji = 2, nlci 1716 ijt=iloc-ji+2 1717 ptab1(ji,nlcj,jk) = psgn * ptab1(ijt,nlcj-2,jk) 1718 END DO 1719 DO ji = nlci/2+1, nlci 1720 ijt=iloc-ji+2 1721 ptab1(ji,nlcj-1,jk) = psgn * ptab1(ijt,nlcj-1,jk) 1722 END DO 1723 END DO 1724 1725 CASE ( 'U' ) 1726 DO jk = 1, jpk 1727 DO ji = 1, nlci-1 1728 iju=iloc-ji+1 1729 ptab1(ji,nlcj,jk) = psgn * ptab1(iju,nlcj-2,jk) 1730 END DO 1731 DO ji = nlci/2, nlci-1 1732 iju=iloc-ji+1 1733 ptab1(ji,nlcj-1,jk) = psgn * ptab1(iju,nlcj-1,jk) 1734 END DO 1735 END DO 1736 1737 CASE ( 'V' ) 1738 DO jk = 1, jpk 1739 DO ji = 2, nlci 1740 ijt=iloc-ji+2 1741 ptab1(ji,nlcj-1,jk) = psgn * ptab1(ijt,nlcj-2,jk) 1742 ptab1(ji,nlcj ,jk) = psgn * ptab1(ijt,nlcj-3,jk) 1743 END DO 1744 END DO 1745 1746 CASE ( 'F', 'G' ) 1747 DO jk = 1, jpk 1748 DO ji = 1, nlci-1 1749 iju=iloc-ji+1 1750 ptab1(ji,nlcj-1,jk) = psgn * ptab1(iju,nlcj-2,jk) 1751 ptab1(ji,nlcj ,jk) = psgn * ptab1(iju,nlcj-3,jk) 1752 END DO 1753 END DO 1754 1755 END SELECT 1756 1757 SELECT CASE ( cd_type2 ) 1758 1759 CASE ( 'T' , 'S', 'W' ) 1760 DO jk = 1, jpk 1761 DO ji = 2, nlci 1762 ijt=iloc-ji+2 1763 ptab2(ji,nlcj,jk) = psgn * ptab2(ijt,nlcj-2,jk) 1764 END DO 1765 DO ji = nlci/2+1, nlci 1766 ijt=iloc-ji+2 1767 ptab2(ji,nlcj-1,jk) = psgn * ptab2(ijt,nlcj-1,jk) 1768 END DO 1769 END DO 1770 1771 CASE ( 'U' ) 1772 DO jk = 1, jpk 1773 DO ji = 1, nlci-1 1774 iju=iloc-ji+1 1775 ptab2(ji,nlcj,jk) = psgn * ptab2(iju,nlcj-2,jk) 1776 END DO 1777 DO ji = nlci/2, nlci-1 1778 iju=iloc-ji+1 1779 ptab2(ji,nlcj-1,jk) = psgn * ptab2(iju,nlcj-1,jk) 1780 END DO 1781 END DO 1782 1783 CASE ( 'V' ) 1784 DO jk = 1, jpk 1785 DO ji = 2, nlci 1786 ijt=iloc-ji+2 1787 ptab2(ji,nlcj-1,jk) = psgn * ptab2(ijt,nlcj-2,jk) 1788 ptab2(ji,nlcj ,jk) = psgn * ptab2(ijt,nlcj-3,jk) 1789 END DO 1790 END DO 1791 1792 CASE ( 'F', 'G' ) 1793 DO jk = 1, jpk 1794 DO ji = 1, nlci-1 1795 iju=iloc-ji+1 1796 ptab2(ji,nlcj-1,jk) = psgn * ptab2(iju,nlcj-2,jk) 1797 ptab2(ji,nlcj ,jk) = psgn * ptab2(iju,nlcj-3,jk) 1798 END DO 1799 END DO 1800 1801 END SELECT 1802 1803 CASE ( 5 , 6 ) ! F pivot 1804 iloc=jpiglo-2*(nimpp-1) 1805 1806 SELECT CASE ( cd_type1 ) 1807 1808 CASE ( 'T' , 'S', 'W' ) 1809 DO jk = 1, jpk 1810 DO ji = 1, nlci 1811 ijt=iloc-ji+1 1812 ptab1(ji,nlcj,jk) = psgn * ptab1(ijt,nlcj-1,jk) 1813 END DO 1814 END DO 1815 1816 CASE ( 'U' ) 1817 DO jk = 1, jpk 1818 DO ji = 1, nlci-1 1819 iju=iloc-ji 1820 ptab1(ji,nlcj,jk) = psgn * ptab1(iju,nlcj-1,jk) 1821 END DO 1822 END DO 1823 1824 CASE ( 'V' ) 1825 DO jk = 1, jpk 1826 DO ji = 1, nlci 1827 ijt=iloc-ji+1 1828 ptab1(ji,nlcj ,jk) = psgn * ptab1(ijt,nlcj-2,jk) 1829 END DO 1830 DO ji = nlci/2+1, nlci 1831 ijt=iloc-ji+1 1832 ptab1(ji,nlcj-1,jk) = psgn * ptab1(ijt,nlcj-1,jk) 1833 END DO 1834 END DO 1835 1836 CASE ( 'F', 'G' ) 1837 DO jk = 1, jpk 1838 DO ji = 1, nlci-1 1839 iju=iloc-ji 1840 ptab1(ji,nlcj,jk) = psgn * ptab1(iju,nlcj-2,jk) 1841 END DO 1842 DO ji = nlci/2+1, nlci-1 1843 iju=iloc-ji 1844 ptab1(ji,nlcj-1,jk) = psgn * ptab1(iju,nlcj-1,jk) 1845 END DO 1846 END DO 1847 END SELECT ! cd_type1 1848 1849 SELECT CASE ( cd_type2 ) 1850 1851 CASE ( 'T' , 'S', 'W' ) 1852 DO jk = 1, jpk 1853 DO ji = 1, nlci 1854 ijt=iloc-ji+1 1855 ptab2(ji,nlcj,jk) = psgn * ptab2(ijt,nlcj-1,jk) 1856 END DO 1857 END DO 1858 1859 CASE ( 'U' ) 1860 DO jk = 1, jpk 1861 DO ji = 1, nlci-1 1862 iju=iloc-ji 1863 ptab2(ji,nlcj,jk) = psgn * ptab2(iju,nlcj-1,jk) 1864 END DO 1865 END DO 1866 1867 CASE ( 'V' ) 1868 DO jk = 1, jpk 1869 DO ji = 1, nlci 1870 ijt=iloc-ji+1 1871 ptab2(ji,nlcj ,jk) = psgn * ptab2(ijt,nlcj-2,jk) 1872 END DO 1873 DO ji = nlci/2+1, nlci 1874 ijt=iloc-ji+1 1875 ptab2(ji,nlcj-1,jk) = psgn * ptab2(ijt,nlcj-1,jk) 1876 END DO 1877 END DO 1878 1879 CASE ( 'F', 'G' ) 1880 DO jk = 1, jpk 1881 DO ji = 1, nlci-1 1882 iju=iloc-ji 1883 ptab2(ji,nlcj,jk) = psgn * ptab2(iju,nlcj-2,jk) 1884 END DO 1885 DO ji = nlci/2+1, nlci-1 1886 iju=iloc-ji 1887 ptab2(ji,nlcj-1,jk) = psgn * ptab2(iju,nlcj-1,jk) 1888 END DO 1889 END DO 1890 1891 END SELECT ! cd_type2 1892 1893 END SELECT ! npolj 1894 1895 CASE DEFAULT ! more than 1 proc along I 1896 IF ( npolj /= 0 ) THEN 1897 CALL mpp_lbc_north (ptab1, cd_type1, psgn) ! only for northern procs. 1898 CALL mpp_lbc_north (ptab2, cd_type2, psgn) ! only for northern procs. 1899 ENDIF 1900 1901 END SELECT ! jpni 1902 1903 1904 ! 5. East and west directions exchange 1905 ! ------------------------------------ 1906 1907 SELECT CASE ( npolj ) 1908 1909 CASE ( 3, 4, 5, 6 ) 1910 1911 ! 5.1 Read Dirichlet lateral conditions 1912 1913 SELECT CASE ( nbondi ) 1914 1915 CASE ( -1, 0, 1 ) 1916 iihom = nlci-nreci 1917 DO jl = 1, jpreci 1918 t4ew(:,jl,:,1,1) = ptab1(jpreci+jl,:,:) 1919 t4we(:,jl,:,1,1) = ptab1(iihom +jl,:,:) 1920 t4ew(:,jl,:,2,1) = ptab2(jpreci+jl,:,:) 1921 t4we(:,jl,:,2,1) = ptab2(iihom +jl,:,:) 1922 END DO 1923 1924 END SELECT 1925 1926 ! 5.2 Migrations 1927 1928 #if defined key_mpp_shmem 1929 !! SHMEM version 1930 1931 imigr = jpreci * jpj * jpk * 2 1932 1933 SELECT CASE ( nbondi ) 1934 CASE ( -1 ) 1935 CALL shmem_put( t4we(1,1,1,1,2), t4we(1,1,1,1,1), imigr, noea ) 1936 CASE ( 0 ) 1937 CALL shmem_put( t4ew(1,1,1,1,2), t4ew(1,1,1,1,1), imigr, nowe ) 1938 CALL shmem_put( t4we(1,1,1,1,2), t4we(1,1,1,1,1), imigr, noea ) 1939 CASE ( 1 ) 1940 CALL shmem_put( t4ew(1,1,1,1,2), t4ew(1,1,1,1,1), imigr, nowe ) 1941 END SELECT 1942 1943 CALL barrier() 1944 CALL shmem_udcflush() 1945 1946 #elif defined key_mpp_mpi 1947 !! MPI version 1948 1949 imigr = jpreci * jpj * jpk * 2 1950 1951 SELECT CASE ( nbondi ) 1952 CASE ( -1 ) 1953 CALL mppsend( 2, t4we(1,1,1,1,1), imigr, noea, ml_req1 ) 1954 CALL mpprecv( 1, t4ew(1,1,1,1,2), imigr ) 1955 IF(l_isend) CALL mpi_wait(ml_req1,ml_stat,ml_err) 1956 CASE ( 0 ) 1957 CALL mppsend( 1, t4ew(1,1,1,1,1), imigr, nowe, ml_req1 ) 1958 CALL mppsend( 2, t4we(1,1,1,1,1), imigr, noea, ml_req2 ) 1959 CALL mpprecv( 1, t4ew(1,1,1,1,2), imigr ) 1960 CALL mpprecv( 2, t4we(1,1,1,1,2), imigr ) 1961 IF(l_isend) CALL mpi_wait(ml_req1,ml_stat,ml_err) 1962 IF(l_isend) CALL mpi_wait(ml_req2,ml_stat,ml_err) 1963 CASE ( 1 ) 1964 CALL mppsend( 1, t4ew(1,1,1,1,1), imigr, nowe, ml_req1 ) 1965 CALL mpprecv( 2, t4we(1,1,1,1,2), imigr ) 1966 IF(l_isend) CALL mpi_wait(ml_req1,ml_stat,ml_err) 1967 END SELECT 1968 #endif 1969 1970 ! 5.3 Write Dirichlet lateral conditions 1971 1972 iihom = nlci-jpreci 1973 1974 SELECT CASE ( nbondi) 1975 CASE ( -1 ) 1976 DO jl = 1, jpreci 1977 ptab1(iihom+jl,:,:) = t4ew(:,jl,:,1,2) 1978 ptab2(iihom+jl,:,:) = t4ew(:,jl,:,2,2) 1979 END DO 1980 CASE ( 0 ) 1981 DO jl = 1, jpreci 1982 ptab1(jl ,:,:) = t4we(:,jl,:,1,2) 1983 ptab1(iihom+jl,:,:) = t4ew(:,jl,:,1,2) 1984 ptab2(jl ,:,:) = t4we(:,jl,:,2,2) 1985 ptab2(iihom+jl,:,:) = t4ew(:,jl,:,2,2) 1986 END DO 1987 CASE ( 1 ) 1988 DO jl = 1, jpreci 1989 ptab1(jl ,:,:) = t4we(:,jl,:,1,2) 1990 ptab2(jl ,:,:) = t4we(:,jl,:,2,2) 1991 END DO 1992 END SELECT 1993 1994 END SELECT ! npolj 1995 1996 END SUBROUTINE mpp_lnk_3d_gather 1396 1997 1397 1998 … … 2305 2906 INTEGER, SAVE :: ibool=0 2306 2907 2307 IF( kdim > jpmppsum ) THEN 2308 WRITE(numout,*) 'mppisl_a_int routine : kdim is too big' 2309 WRITE(numout,*) 'change jpmppsum dimension in mpp.h' 2310 STOP 'mppisl_a_int' 2311 ENDIF 2908 IF( kdim > jpmppsum ) CALL ctl_stop( 'mppisl_a_int routine : kdim is too big', & 2909 & 'change jpmppsum dimension in mpp.h' ) 2312 2910 2313 2911 DO ji = 1, kdim … … 2423 3021 INTEGER, SAVE :: ibool=0 2424 3022 2425 IF( kdim > jpmppsum ) THEN 2426 WRITE(numout,*) 'mppmin_a_int routine : kdim is too big' 2427 WRITE(numout,*) 'change jpmppsum dimension in mpp.h' 2428 STOP 'min_a_int' 2429 ENDIF 3023 IF( kdim > jpmppsum ) CALL ctl_stop( 'mppmin_a_int routine : kdim is too big', & 3024 & 'change jpmppsum dimension in mpp.h' ) 2430 3025 2431 3026 DO ji = 1, kdim … … 2528 3123 INTEGER, SAVE :: ibool=0 2529 3124 2530 IF( kdim > jpmppsum ) THEN 2531 WRITE(numout,*) 'mppsum_a_int routine : kdim is too big' 2532 WRITE(numout,*) 'change jpmppsum dimension in mpp.h' 2533 STOP 'mppsum_a_int' 2534 ENDIF 3125 IF( kdim > jpmppsum ) CALL ctl_stop( 'mppsum_a_int routine : kdim is too big', & 3126 & 'change jpmppsum dimension in mpp.h' ) 2535 3127 2536 3128 DO ji = 1, kdim … … 2632 3224 INTEGER, SAVE :: ibool=0 2633 3225 2634 IF( kdim > jpmppsum ) THEN 2635 WRITE(numout,*) 'mppisl_a_real routine : kdim is too big' 2636 WRITE(numout,*) 'change jpmppsum dimension in mpp.h' 2637 STOP 'mppisl_a_real' 2638 ENDIF 3226 IF( kdim > jpmppsum ) CALL ctl_stop( 'mppisl_a_real routine : kdim is too big', & 3227 & 'change jpmppsum dimension in mpp.h' ) 2639 3228 2640 3229 DO ji = 1, kdim … … 2769 3358 INTEGER, SAVE :: ibool=0 2770 3359 2771 IF( kdim > jpmppsum ) THEN 2772 WRITE(numout,*) 'mppmax_a_real routine : kdim is too big' 2773 WRITE(numout,*) 'change jpmppsum dimension in mpp.h' 2774 STOP 'mppmax_a_real' 2775 ENDIF 3360 IF( kdim > jpmppsum ) CALL ctl_stop( 'mppmax_a_real routine : kdim is too big', & 3361 & 'change jpmppsum dimension in mpp.h' ) 2776 3362 2777 3363 DO ji = 1, kdim … … 2869 3455 INTEGER, SAVE :: ibool=0 2870 3456 2871 IF( kdim > jpmppsum ) THEN 2872 WRITE(numout,*) 'mpprmin routine : kdim is too big' 2873 WRITE(numout,*) 'change jpmppsum dimension in mpp.h' 2874 STOP 'mpprmin' 2875 ENDIF 3457 IF( kdim > jpmppsum ) CALL ctl_stop( 'mpprmin routine : kdim is too big', & 3458 & 'change jpmppsum dimension in mpp.h' ) 2876 3459 2877 3460 DO ji = 1, kdim … … 2970 3553 INTEGER, SAVE :: ibool=0 2971 3554 2972 IF( kdim > jpmppsum ) THEN 2973 WRITE(numout,*) 'mppsum_a_real routine : kdim is too big' 2974 WRITE(numout,*) 'change jpmppsum dimension in mpp.h' 2975 STOP 'mppsum_a_real' 2976 ENDIF 3555 IF( kdim > jpmppsum ) CALL ctl_stop( 'mppsum_a_real routine : kdim is too big', & 3556 & 'change jpmppsum dimension in mpp.h' ) 2977 3557 2978 3558 DO ji = 1, kdim … … 3068 3648 !!-------------------------------------------------------------------------- 3069 3649 #ifdef key_mpp_shmem 3070 IF (lwp) THEN 3071 WRITE(numout,*) ' mpp_minloc not yet available in SHMEM' 3072 STOP 3073 ENDIF 3650 CALL ctl_stop( ' mpp_minloc not yet available in SHMEM' ) 3074 3651 # elif key_mpp_mpi 3075 3652 !! * Arguments … … 3121 3698 !!-------------------------------------------------------------------------- 3122 3699 #ifdef key_mpp_shmem 3123 IF (lwp) THEN 3124 WRITE(numout,*) ' mpp_minloc not yet available in SHMEM' 3125 STOP 3126 ENDIF 3700 CALL ctl_stop( ' mpp_minloc not yet available in SHMEM' ) 3127 3701 # elif key_mpp_mpi 3128 3702 !! * Arguments … … 3176 3750 !!-------------------------------------------------------------------------- 3177 3751 #ifdef key_mpp_shmem 3178 IF (lwp) THEN 3179 WRITE(numout,*) ' mpp_maxloc not yet available in SHMEM' 3180 STOP 3181 ENDIF 3752 CALL ctl_stop( ' mpp_maxloc not yet available in SHMEM' ) 3182 3753 # elif key_mpp_mpi 3183 3754 !! * Arguments … … 3228 3799 !!-------------------------------------------------------------------------- 3229 3800 #ifdef key_mpp_shmem 3230 IF (lwp) THEN 3231 WRITE(numout,*) ' mpp_maxloc not yet available in SHMEM' 3232 STOP 3233 ENDIF 3801 CALL ctl_stop( ' mpp_maxloc not yet available in SHMEM' ) 3234 3802 # elif key_mpp_mpi 3235 3803 !! * Arguments … … 3377 3945 ilpt1 = MAX( 1, MIN(kd2 - njmpp+1, nlcj ) ) 3378 3946 ELSE 3379 IF(lwp)WRITE(numout,*) 'mppobc: bad ktype' 3380 STOP 'mppobc' 3947 CALL ctl_stop( 'mppobc: bad ktype' ) 3381 3948 ENDIF 3382 3949 … … 3584 4151 !!---------------------------------------------------------------------- 3585 4152 #ifdef key_mpp_shmem 3586 IF (lwp) THEN 3587 WRITE(numout,*) ' mpp_ini_north not available in SHMEM' 3588 STOP 3589 ENDIF 4153 CALL ctl_stop( ' mpp_ini_north not available in SHMEM' ) 3590 4154 # elif key_mpp_mpi 3591 4155 INTEGER :: ierr … … 4468 5032 END SUBROUTINE mpi_init_opa 4469 5033 4470 4471 5034 #else 4472 5035 !!---------------------------------------------------------------------- -
trunk/NEMO/OPA_SRC/mppini_2.h90
r467 r473 40 40 !!---------------------------------------------------------------------- 41 41 !! * Modules used 42 USE io ipsl43 42 USE iom 43 44 44 !! Local variables 45 CHARACTER (len=25) :: & ! temporary name46 clname , clvar ! filename and cdf variable name for bathy47 LOGICAL :: llbon ! check the existence of bathy files48 45 INTEGER :: ji, jj, jn, jproc, jarea ! dummy loop indices 49 INTEGER :: inum = 11! temporary logical unit46 INTEGER :: inum ! temporary logical unit 50 47 INTEGER :: & 51 48 ii, ij, ifreq, il1, il2, & ! temporary integers … … 66 63 ione , ionw , iose , iosw , & ! " " 67 64 ibne , ibnw , ibse , ibsw ! " " 68 INTEGER :: & 69 ipi, ipj, ipk, & ! temporary integers 70 itime ! " " 71 INTEGER, DIMENSION (1) :: istep 72 73 INTEGER, DIMENSION(jpiglo,jpjglo) :: & 65 INTEGER, DIMENSION(jpi,jpj) :: & 74 66 imask ! temporary global workspace 75 76 REAL(wp), DIMENSION(jpidta,jpjdta) :: & 77 zlamt, zphit, zdta ! temporary data workspace 78 REAL(wp), DIMENSION(jpk) :: & 79 zdept ! temporary workspace (NetCDF read) 80 REAL(wp) :: zidom , zjdom, & ! temporary scalars 81 zdt, zdate0 67 REAL(wp), DIMENSION(jpi,jpj) :: & 68 zdta ! temporary data workspace 69 REAL(wp) :: zidom , zjdom ! temporary scalars 82 70 83 71 !!---------------------------------------------------------------------- … … 103 91 #endif 104 92 105 106 IF( jpni*jpnj < jpnij ) THEN 107 IF(lwp) WRITE(numout,cform_err) 108 IF(lwp) WRITE(numout,*) ' jpnij > jpni x jpnj impossible' 109 nstop = nstop + 1 110 ENDIF 111 93 IF( jpni*jpnj < jpnij ) CALL ctl_stop( ' jpnij > jpni x jpnj impossible' ) 112 94 113 95 ! 0. initialisation … … 115 97 116 98 ! open the file 117 IF ( ln_zco ) THEN 118 clname = 'bathy_level.nc' ! Level bathymetry 119 clvar = 'Bathy_level' 120 ELSE 121 clname = 'bathy_meter.nc' ! Meter bathy in case of partial steps 122 clvar = 'Bathymetry' 123 ENDIF 124 #if defined key_agrif 125 if ( .NOT. Agrif_Root() ) then 126 clname = TRIM(Agrif_CFixed())//'_'//TRIM(clname) 127 endif 128 #endif 129 130 INQUIRE( FILE=clname, EXIST=llbon ) 131 IF( llbon ) THEN 132 IF(lwp) WRITE(numout,*) 133 IF(lwp) WRITE(numout,*) ' read bathymetry in ', clname 134 IF(lwp) WRITE(numout,*) 135 itime = 1 136 ipi = jpidta 137 ipj = jpjdta 138 ipk = 1 139 zdt = rdt 140 141 CALL flinopen( clname, 1, jpidta, 1, jpjdta, .FALSE., & 142 ipi, ipj, ipk, zlamt, zphit, zdept, itime, istep, zdate0, zdt, inum ) 143 CALL flinget( inum, clvar, jpidta, jpjdta, 1, & 144 itime, 1, 1, 1, jpidta, 1, jpjdta, zdta(:,:) ) 145 CALL flinclo( inum ) 99 IF ( ln_zco ) THEN 100 CALL iom_open ( 'bathy_level.nc', inum ) ! Level bathymetry 101 CALL iom_get ( inum, jpdom_data, 'Bathy_level', zdta ) 146 102 ELSE 147 IF(lwp) WRITE(numout,cform_err)148 IF(lwp) WRITE(numout,*)' mppini_2 : unable to read the file ', clname149 nstop = nstop + 1150 ENDIF103 CALL iom_open ( 'bathy_meter.nc', inum ) ! Meter bathy in case of partial steps 104 CALL iom_get ( inum, jpdom_data, 'Bathymetry' , zdta ) 105 ENDIF 106 CALL iom_close (inum) 151 107 152 108 ! land/sea mask over the global/zoom domain 153 109 154 imask(:,:) =1155 WHERE ( zdta( jpizoom:(jpizoom+jpiglo-1),jpjzoom:(jpjglo+jpjzoom-1)) <= 0. ) imask = 0110 imask(:,:)=1 111 WHERE ( zdta(:,:) <= 0. ) imask = 0 156 112 157 113 ! 1. Dimension arrays for subdomains … … 328 284 DO jj = 1+jprecj, ilj-jprecj 329 285 DO ji = 1+jpreci, ili-jpreci 330 IF( imask(ji +iimppt(ii,ij)-1, jj+ijmppt(ii,ij)-1) == 1) isurf = isurf+1286 IF( imask(ji, jj) == 1) isurf = isurf+1 331 287 END DO 332 288 END DO … … 341 297 ! Control 342 298 IF(icont+1 /= jpnij) THEN 343 IF(lwp) THEN 344 WRITE(numout,*) ' Eliminate land processors algorithm' 345 WRITE(numout,*) 346 WRITE(numout,*) ' jpni =',jpni,' jpnj =',jpnj 347 WRITE(numout,*) ' jpnij =',jpnij, '< jpni x jpnj' 348 WRITE(numout,*) 349 WRITE(numout,*) ' E R R O R ' 350 WRITE(numout,*) ' ***********, mpp_init2 finds jpnij=',icont+1 351 WRITE(numout,*) ' we stop' 352 ENDIF 353 STOP 'mpp_init2' 354 ENDIF 355 299 WRITE(ctmp1,*) ' jpni =',jpni,' jpnj =',jpnj 300 WRITE(ctmp2,*) ' jpnij =',jpnij, '< jpni x jpnj' 301 WRITE(ctmp3,*) ' ***********, mpp_init2 finds jpnij=',icont+1 302 CALL ctl_stop( ' Eliminate land processors algorithm', '', ctmp1, ctmp2, '', ctmp3 ) 303 ENDIF 356 304 357 305 ! 4. Subdomain print … … 518 466 ! Save processor layout in ascii file 519 467 IF (lwp) THEN 520 OPEN(inum,FILE='layout.dat') 521 WRITE(inum,'(6i8)') jpnij,jpi,jpj,jpk,jpiglo,jpjglo 522 WRITE(inum,'(a)') 'NAREA nlci nlcj nldi nldj nlei nlej nimpp njmpp' 468 inum = 11 ! how do we know that 11 is ok??? 469 OPEN(inum,FILE='layout.dat') 470 WRITE(inum,'(6i8)') jpnij,jpi,jpj,jpk,jpiglo,jpjglo 471 WRITE(inum,'(a)') 'NAREA nlci nlcj nldi nldj nlei nlej nimpp njmpp' 523 472 524 473 DO jproc = 1, jpnij … … 565 514 ENDIF 566 515 567 IF( nperio == 1 .AND.jpni /= 1 ) THEN 568 IF(lwp) WRITE(numout,cform_err) 569 IF(lwp) WRITE(numout,*) ' mpp_init2: error on cyclicity' 570 nstop = nstop + 1 571 ENDIF 516 IF( nperio == 1 .AND.jpni /= 1 ) CALL ctl_stop( ' mpp_init2: error on cyclicity' ) 572 517 573 518 ! Prepare mpp north fold -
trunk/NEMO/OPA_SRC/opa.F90
r467 r473 200 200 lwp = narea == 1 201 201 202 IF( lk_mpp ) THEN 203 CLOSE( numout ) ! standard model output file 204 WRITE(file_out,FMT="('ocean.output_',I4.4)") narea-1 205 IF ( numout /= 0 .AND. numout /= 6 ) THEN 206 CALL ctlopn( numout, file_out, 'UNKNOWN', 'FORMATTED', & 207 & 'SEQUENTIAL', 1, numout, .FALSE., 1 ) 208 ENDIF 209 ! 210 WRITE(numout,*) 211 WRITE(numout,*) ' L O D Y C - I P S L' 212 WRITE(numout,*) ' O P A model' 213 WRITE(numout,*) ' Ocean General Circulation Model' 214 WRITE(numout,*) ' version OPA 9.0 (2005) ' 215 WRITE(numout,*) ' MPI Ocean output ' 216 WRITE(numout,*) 217 WRITE(numout,*) 218 ENDIF 219 202 220 ! ! ============================== ! 203 221 ! ! Model general initialization ! … … 366 384 CLOSE( numout ) ! standard model output file 367 385 CLOSE( numstp ) ! time-step file 368 CLOSE( numwrs ) ! ocean restart file369 370 IF( lk_dtatem ) CLOSE( numtdt )371 IF( lk_dtasal ) CLOSE( numsdt )372 IF( lk_dtasst ) CLOSE( numsst )373 386 374 387 IF(lwp) CLOSE( numsol ) 375 376 IF( lk_cpl ) THEN377 CLOSE( numlhf )378 CLOSE( numlts )379 ENDIF380 381 CLOSE( numwri )382 388 383 389 END SUBROUTINE opa_closefile -
trunk/NEMO/OPA_SRC/prtctl.F90
r426 r473 135 135 DO jn = sind, eind 136 136 137 numid = 80 + jn137 numid = 90 138 138 139 139 ! Set indices for the SUM control … … 244 244 DO jn = sind, eind 245 245 246 numid = 80 + jn246 numid = 90 247 247 248 248 IF( PRESENT(ivar1) .AND. PRESENT(clinfo2) .AND. PRESENT(ivar2) ) THEN … … 330 330 331 331 DO jn = sind, eind 332 numid = 80 + jn332 numid = 90 333 333 WRITE(clfile_out,FMT=clb_name) jn-1 334 334 OPEN ( UNIT=numid, FILE=TRIM(clfile_out),FORM='FORMATTED' ) -
trunk/NEMO/OPA_SRC/restart.F90
r467 r473 84 84 CHARACTER (len=50) :: clname, cln 85 85 INTEGER :: ic, jc, itime 86 INTEGER :: inumwrs 86 87 REAL(wp) :: zdate0 87 88 REAL(wp), DIMENSION( 1) :: zfice, zfblk ! used only in case of ice & bulk … … 111 112 IF(lwp) WRITE(numout,*) '~~~~~~~~~' 112 113 113 ! Job informations 114 ! Job informations 115 zinfo(:) = 0.e0 114 116 zinfo(1) = FLOAT( no ) ! job number 115 117 zinfo(2) = FLOAT( kt ) ! time-step … … 132 134 CLOSE( knum, STATUS='delete' ) 133 135 #else 134 OPEN( UNIT= numwrs, FILE=crestart, STATUS='old' )135 CLOSE( numwrs, STATUS='delete' )136 OPEN( UNIT=inumwrs, FILE=crestart, STATUS='old' ) 137 CLOSE( inumwrs, STATUS='delete' ) 136 138 #endif 137 139 ENDIF … … 152 154 CALL ymds2ju( nyear, nmonth, nday, 0.e0, zdate0 ) 153 155 CALL restini( 'NONE', jpi, jpj, glamt, gphit, jpk, gdept_0, clname, & 154 itime, zdate0, rdt*nstock , numwrs, domain_id=nidom )155 156 CALL restput( numwrs, 'info' , 1 , 1 , 10 , 0, zinfo ) ! restart informations156 itime, zdate0, rdt*nstock ,inumwrs, domain_id=nidom ) 157 158 CALL restput( inumwrs, 'info' , 1 , 1 , 10 , 0, zinfo ) ! restart informations 157 159 158 CALL restput( numwrs, 'ub' , jpi, jpj, jpk, 0, ub ) ! prognostic variables159 CALL restput( numwrs, 'vb' , jpi, jpj, jpk, 0, vb )160 CALL restput( numwrs, 'tb' , jpi, jpj, jpk, 0, tb )161 CALL restput( numwrs, 'sb' , jpi, jpj, jpk, 0, sb )162 CALL restput( numwrs, 'rotb' , jpi, jpj, jpk, 0, rotb )163 CALL restput( numwrs, 'hdivb' , jpi, jpj, jpk, 0, hdivb )164 CALL restput( numwrs, 'un' , jpi, jpj, jpk, 0, un )165 CALL restput( numwrs, 'vn' , jpi, jpj, jpk, 0, vn )166 CALL restput( numwrs, 'tn' , jpi, jpj, jpk, 0, tn )167 CALL restput( numwrs, 'sn' , jpi, jpj, jpk, 0, sn )168 CALL restput( numwrs, 'rotn' , jpi, jpj, jpk, 0, rotn )169 CALL restput( numwrs, 'hdivn' , jpi, jpj, jpk, 0, hdivn )160 CALL restput( inumwrs, 'ub' , jpi, jpj, jpk, 0, ub ) ! prognostic variables 161 CALL restput( inumwrs, 'vb' , jpi, jpj, jpk, 0, vb ) 162 CALL restput( inumwrs, 'tb' , jpi, jpj, jpk, 0, tb ) 163 CALL restput( inumwrs, 'sb' , jpi, jpj, jpk, 0, sb ) 164 CALL restput( inumwrs, 'rotb' , jpi, jpj, jpk, 0, rotb ) 165 CALL restput( inumwrs, 'hdivb' , jpi, jpj, jpk, 0, hdivb ) 166 CALL restput( inumwrs, 'un' , jpi, jpj, jpk, 0, un ) 167 CALL restput( inumwrs, 'vn' , jpi, jpj, jpk, 0, vn ) 168 CALL restput( inumwrs, 'tn' , jpi, jpj, jpk, 0, tn ) 169 CALL restput( inumwrs, 'sn' , jpi, jpj, jpk, 0, sn ) 170 CALL restput( inumwrs, 'rotn' , jpi, jpj, jpk, 0, rotn ) 171 CALL restput( inumwrs, 'hdivn' , jpi, jpj, jpk, 0, hdivn ) 170 172 171 173 ztab(:,:) = gcx(1:jpi,1:jpj) 172 CALL restput( numwrs, 'gcx' , jpi, jpj, 1 , 0, ztab ) ! Read elliptic solver arrays174 CALL restput( inumwrs, 'gcx' , jpi, jpj, 1 , 0, ztab ) ! Read elliptic solver arrays 173 175 ztab(:,:) = gcxb(1:jpi,1:jpj) 174 CALL restput( numwrs, 'gcxb' , jpi, jpj, 1 , 0, ztab )176 CALL restput( inumwrs, 'gcxb' , jpi, jpj, 1 , 0, ztab ) 175 177 # if defined key_dynspg_rl 176 CALL restput( numwrs, 'bsfb' , jpi, jpj, 1 , 0, bsfb ) ! Rigid-lid formulation (bsf)177 CALL restput( numwrs, 'bsfn' , jpi, jpj, 1 , 0, bsfn )178 CALL restput( numwrs, 'bsfd' , jpi, jpj, 1 , 0, bsfd )178 CALL restput( inumwrs, 'bsfb' , jpi, jpj, 1 , 0, bsfb ) ! Rigid-lid formulation (bsf) 179 CALL restput( inumwrs, 'bsfn' , jpi, jpj, 1 , 0, bsfn ) 180 CALL restput( inumwrs, 'bsfd' , jpi, jpj, 1 , 0, bsfd ) 179 181 # else 180 CALL restput( numwrs, 'sshb' , jpi, jpj, 1 , 0, sshb ) ! free surface formulation (ssh)181 CALL restput( numwrs, 'sshn' , jpi, jpj, 1 , 0, sshn )182 CALL restput( inumwrs, 'sshb' , jpi, jpj, 1 , 0, sshb ) ! free surface formulation (ssh) 183 CALL restput( inumwrs, 'sshn' , jpi, jpj, 1 , 0, sshn ) 182 184 # if defined key_dynspg_ts 183 CALL restput( numwrs, 'sshb_b' , jpi, jpj, 1 , 0, sshb_b ) ! free surface formulation (ssh)184 CALL restput( numwrs, 'sshn_b' , jpi, jpj, 1 , 0, sshn_b ) ! issued from barotropic loop185 CALL restput( numwrs, 'un_b' , jpi, jpj, 1 , 0, un_b ) ! horizontal transports186 CALL restput( numwrs, 'vn_b' , jpi, jpj, 1 , 0, vn_b ) ! issued from barotropic loop185 CALL restput( inumwrs, 'sshb_b' , jpi, jpj, 1 , 0, sshb_b ) ! free surface formulation (ssh) 186 CALL restput( inumwrs, 'sshn_b' , jpi, jpj, 1 , 0, sshn_b ) ! issued from barotropic loop 187 CALL restput( inumwrs, 'un_b' , jpi, jpj, 1 , 0, un_b ) ! horizontal transports 188 CALL restput( inumwrs, 'vn_b' , jpi, jpj, 1 , 0, vn_b ) ! issued from barotropic loop 187 189 # endif 188 190 # endif 189 191 # if defined key_zdftke || defined key_esopa 190 192 IF( lk_zdftke ) THEN 191 CALL restput( numwrs, 'en' , jpi, jpj, jpk, 0, en ) ! TKE arrays193 CALL restput( inumwrs, 'en' , jpi, jpj, jpk, 0, en ) ! TKE arrays 192 194 ENDIF 193 195 # endif 194 196 # if defined key_ice_lim 195 197 zfice(1) = FLOAT( nfice ) ! Louvain La Neuve Sea Ice Model 196 CALL restput( numwrs, 'nfice' , 1, 1, 1 , 0, zfice )197 CALL restput( numwrs, 'sst_io' , jpi, jpj, 1 , 0, sst_io )198 CALL restput( numwrs, 'sss_io' , jpi, jpj, 1 , 0, sss_io )199 CALL restput( numwrs, 'u_io' , jpi, jpj, 1 , 0, u_io )200 CALL restput( numwrs, 'v_io' , jpi, jpj, 1 , 0, v_io )198 CALL restput( inumwrs, 'nfice' , 1, 1, 1 , 0, zfice ) 199 CALL restput( inumwrs, 'sst_io' , jpi, jpj, 1 , 0, sst_io ) 200 CALL restput( inumwrs, 'sss_io' , jpi, jpj, 1 , 0, sss_io ) 201 CALL restput( inumwrs, 'u_io' , jpi, jpj, 1 , 0, u_io ) 202 CALL restput( inumwrs, 'v_io' , jpi, jpj, 1 , 0, v_io ) 201 203 # if defined key_coupled 202 CALL restput( numwrs, 'alb_ice', jpi, jpj, 1 , 0, alb_ice )204 CALL restput( inumwrs, 'alb_ice', jpi, jpj, 1 , 0, alb_ice ) 203 205 # endif 204 206 # endif 205 207 # if defined key_flx_bulk_monthly || defined key_flx_bulk_daily 206 208 zfblk(1) = FLOAT( nfbulk ) ! Bulk 207 CALL restput( numwrs, 'nfbulk' , 1, 1, 1 , 0, zfblk )208 CALL restput( numwrs, 'gsst' , jpi, jpj, 1 , 0, gsst )209 # endif 210 211 CALL restclo( numwrs ) ! close the restart file209 CALL restput( inumwrs, 'nfbulk' , 1, 1, 1 , 0, zfblk ) 210 CALL restput( inumwrs, 'gsst' , jpi, jpj, 1 , 0, gsst ) 211 # endif 212 213 CALL restclo( inumwrs ) ! close the restart file 212 214 213 215 ENDIF … … 251 253 !!---------------------------------------------------------------------- 252 254 !! * Modules used 253 USE io ipsl255 USE iom 254 256 255 257 !! * Local declarations 256 LOGICAL :: llog257 CHARACTER (len=8 ) :: clvnames(50)258 CHARACTER (len=32) :: clname259 258 INTEGER :: & 260 itime, ibvar, & !261 259 inum ! temporary logical unit 262 REAL(wp) :: zdate0, zdt, zinfo(10)263 REAL(wp) :: zdept(jpk), zlamt(jpi,jpj), zphit(jpi,jpj)264 REAL(wp), DIMENSION(jpi,jpj) :: ztab260 REAL(wp), DIMENSION(1, 1, 10) :: zinfo 261 REAL(wp), DIMENSION(1, 1, 1) :: zzz 262 INTEGER :: ios 265 263 # if defined key_ice_lim 266 INTEGER :: ios1, ji, jj, jn 267 REAL(wp) :: zfice(1) 268 # endif 269 # if defined key_flx_bulk_monthly || defined key_flx_bulk_daily 270 INTEGER :: ios2, jk 271 REAL(wp) :: zfblk(1) 264 INTEGER :: ji, jj 272 265 # endif 273 266 !!---------------------------------------------------------------------- 274 !! OPA 8.5, LODYC-IPSL (2002)275 !!----------------------------------------------------------------------276 clname = 'restart'277 #if defined key_agrif278 inum = Agrif_Get_Unit()279 If(.NOT. Agrif_root() ) clname = TRIM(Agrif_CFixed())//'_'//TRIM(clname)280 #endif281 267 282 268 IF(lwp) WRITE(numout,*) … … 314 300 END SELECT 315 301 316 itime = 0 317 llog = .FALSE. 318 zlamt(:,:) = 0.e0 319 zphit(:,:) = 0.e0 320 zdept(:) = 0.e0 321 CALL restini( clname, jpi, jpj, zlamt, zphit, jpk, zdept, 'NONE', & 322 & itime, zdate0, zdt, inum, domain_id=nidom ) 323 324 CALL ioget_vname( inum, ibvar, clvnames) 325 CALL restget( inum, 'info', 1, 1, 10, 0, llog, zinfo ) 326 302 CALL iom_open ( 'restart', inum ) 303 304 CALL iom_get ( inum, jpdom_unknown, 'info', zinfo ) 305 327 306 IF(lwp) WRITE(numout,*) 328 307 IF(lwp) WRITE(numout,*) ' Info on the restart file read : ' 329 IF(lwp) WRITE(numout,*) ' FILE name : ', clname 330 IF(lwp) WRITE(numout,*) ' job number : ', NINT( zinfo(1) ) 331 IF(lwp) WRITE(numout,*) ' time-step : ', NINT( zinfo(2) ) 332 IF(lwp) WRITE(numout,*) ' solver type : ', NINT( zinfo(4) ) + 1 333 IF(lwp) WRITE(numout,*) ' tke option : ', NINT( zinfo(5) ) 334 IF(lwp) WRITE(numout,*) ' date ndastp : ', NINT( zinfo(6) ) 335 IF(lwp) WRITE(numout,*) ' number of variables : ', ibvar 336 IF(lwp) WRITE(numout,*) ' NetCDF variables : ', clvnames(1:ibvar) 308 IF(lwp) WRITE(numout,*) ' job number : ', NINT( zinfo(1, 1, 1) ) 309 IF(lwp) WRITE(numout,*) ' time-step : ', NINT( zinfo(1, 1, 2) ) 310 IF(lwp) WRITE(numout,*) ' solver type : ', NINT( zinfo(1, 1, 4) ) + 1 311 IF(lwp) WRITE(numout,*) ' tke option : ', NINT( zinfo(1, 1, 5) ) 312 IF(lwp) WRITE(numout,*) ' date ndastp : ', NINT( zinfo(1, 1, 6) ) 337 313 IF(lwp) WRITE(numout,*) 338 314 339 315 ! Control of date 340 IF( nit000 - NINT( zinfo(2) ) /= 1 .AND. nrstdt /= 0 ) THEN 341 IF(lwp) WRITE(numout,cform_err) 342 IF(lwp) WRITE(numout,*) ' ===>>>> : problem with nit000 for the restart' 343 IF(lwp) WRITE(numout,*) ' verify the restart file or rerun with nrstdt = 0 (namelist)' 344 nstop = nstop + 1 345 ENDIF 316 IF( nit000 - NINT( zinfo(1, 1, 2) ) /= 1 .AND. nrstdt /= 0 ) & 317 & CALL ctl_stop( ' ===>>>> : problem with nit000 for the restart', & 318 & ' verify the restart file or rerun with nrstdt = 0 (namelist)' ) 346 319 347 320 ! re-initialisation of adatrj0 … … 352 325 ! ndate0 has been read in the namelist (standard OPA 8) 353 326 ! here when nrstdt=2 we keep the final date of previous run 354 ndastp = NINT( zinfo(6) ) 355 adatrj0 = zinfo(7) 356 ENDIF 357 358 359 360 CALL restget( inum, 'ub' , jpi, jpj, jpk, 0, llog, ub ) ! Read prognostic variables 361 CALL restget( inum, 'vb' , jpi, jpj, jpk, 0, llog, vb ) 362 CALL restget( inum, 'tb' , jpi, jpj, jpk, 0, llog, tb ) 363 CALL restget( inum, 'sb' , jpi, jpj, jpk, 0, llog, sb ) 364 CALL restget( inum, 'rotb' , jpi, jpj, jpk, 0, llog, rotb ) 365 CALL restget( inum, 'hdivb' , jpi, jpj, jpk, 0, llog, hdivb ) 366 CALL restget( inum, 'un' , jpi, jpj, jpk, 0, llog, un ) 367 CALL restget( inum, 'vn' , jpi, jpj, jpk, 0, llog, vn ) 368 CALL restget( inum, 'tn' , jpi, jpj, jpk, 0, llog, tn ) 369 CALL restget( inum, 'sn' , jpi, jpj, jpk, 0, llog, sn ) 370 CALL restget( inum, 'rotn' , jpi, jpj, jpk, 0, llog, rotn ) 371 CALL restget( inum, 'hdivn' , jpi, jpj, jpk, 0, llog, hdivn ) 372 373 CALL restget( inum, 'gcxb' , jpi, jpj, 1 , 0, llog, ztab ) ! Read elliptic solver arrays 374 gcxb(1:jpi,1:jpj) = ztab(:,:) 375 CALL restget( inum, 'gcx' , jpi, jpj, 1 , 0, llog, ztab ) 376 gcx(1:jpi,1:jpj) = ztab(:,:) 327 ndastp = NINT( zinfo(1, 1, 6) ) 328 adatrj0 = zinfo(1, 1, 7) 329 ENDIF 330 331 CALL iom_get( inum, jpdom_local, 'ub' , ub ) ! Read prognostic variables 332 CALL iom_get( inum, jpdom_local, 'vb' , vb ) 333 CALL iom_get( inum, jpdom_local, 'tb' , tb ) 334 CALL iom_get( inum, jpdom_local, 'sb' , sb ) 335 CALL iom_get( inum, jpdom_local, 'rotb' , rotb ) 336 CALL iom_get( inum, jpdom_local, 'hdivb', hdivb ) 337 CALL iom_get( inum, jpdom_local, 'un' , un ) 338 CALL iom_get( inum, jpdom_local, 'vn' , vn ) 339 CALL iom_get( inum, jpdom_local, 'tn' , tn ) 340 CALL iom_get( inum, jpdom_local, 'sn' , sn ) 341 CALL iom_get( inum, jpdom_local, 'rotn' , rotn ) 342 CALL iom_get( inum, jpdom_local, 'hdivn', hdivn ) 343 ! Caution : extrahallow 344 ! gcx and gcxb are defined as: DIMENSION(1-jpr2di:jpi+jpr2di,1-jpr2dj:jpj+jpr2dj) 345 CALL iom_get( inum, jpdom_local, 'gcx' , gcx (1:jpi,1:jpj) ) 346 CALL iom_get( inum, jpdom_local, 'gcxb', gcxb(1:jpi,1:jpj) ) ! Read elliptic solver arrays 377 347 # if defined key_dynspg_rl 378 CALL restget( inum, 'bsfb' , jpi, jpj, 1 , 0, llog, bsfb )! Rigid-lid formulation (bsf)379 CALL restget( inum, 'bsfn' , jpi, jpj, 1 , 0, llog, bsfn)380 CALL restget( inum, 'bsfd' , jpi, jpj, 1 , 0, llog, bsfd)348 CALL iom_get( inum, jpdom_local, 'bsfb', bsfb ) ! Rigid-lid formulation (bsf) 349 CALL iom_get( inum, jpdom_local, 'bsfn', bsfn ) 350 CALL iom_get( inum, jpdom_local, 'bsfd', bsfd ) 381 351 # else 382 CALL restget( inum, 'sshb' , jpi, jpj, 1 , 0, llog, sshb )! free surface formulation (ssh)383 CALL restget( inum, 'sshn' , jpi, jpj, 1 , 0, llog, sshn)352 CALL iom_get( inum, jpdom_local, 'sshb', sshb ) ! free surface formulation (ssh) 353 CALL iom_get( inum, jpdom_local, 'sshn', sshn ) 384 354 # if defined key_dynspg_ts 385 CALL restget( inum, 'sshb_b' , jpi, jpj, 1 , 0, llog, sshb_b )! free surface formulation (ssh)386 CALL restget( inum, 'sshn_b' , jpi, jpj, 1 , 0, llog, sshn_b )! issued from barotropic loop387 CALL restget( inum, 'un_b' , jpi, jpj, 1 , 0, llog, un_b) ! horizontal transports388 CALL restget( inum, 'vn_b' , jpi, jpj, 1 , 0, llog, vn_b) ! issued from barotropic loop355 CALL iom_get( inum, jpdom_local, 'sshb_b', sshb_b ) ! free surface formulation (ssh) 356 CALL iom_get( inum, jpdom_local, 'sshn_b', sshn_b ) ! issued from barotropic loop 357 CALL iom_get( inum, jpdom_local, 'un_b' , un_b ) ! horizontal transports 358 CALL iom_get( inum, jpdom_local, 'vn_b' , vn_b ) ! issued from barotropic loop 389 359 # endif 390 360 # endif 391 361 # if defined key_zdftke || defined key_esopa 392 362 IF( lk_zdftke ) THEN 393 IF( NINT( zinfo( 5) ) == 1 ) THEN ! Read tke arrays394 CALL restget( inum, 'en',jpi,jpj, jpk,0 , llog, en )363 IF( NINT( zinfo(1, 1, 5) ) == 1 ) THEN ! Read tke arrays 364 CALL iom_get( inum, jpdom_local, 'en', en ) 395 365 ln_rstke = .FALSE. 396 366 ELSE 397 IF(lwp) WRITE(numout,*) ' ===>>>> : the previous restart file did not used tke scheme'367 IF(lwp) WRITE(numout,*) ' ===>>>> : the previous restart file did not used tke scheme' 398 368 IF(lwp) WRITE(numout,*) ' ======= =======' 399 369 nrstdt = 2 … … 404 374 # if defined key_ice_lim 405 375 ! Louvain La Neuve Sea Ice Model 406 ios1 = 0 407 DO jn = 1, 30 408 IF( clvnames(jn) == 'nfice' ) ios1 = 1 409 END DO 410 IF( ios1 == 1 ) THEN 411 CALL restget( inum, 'nfice' , 1, 1, 1 , 0, llog, zfice ) 412 CALL restget( inum, 'sst_io', jpi, jpj, 1 , 0, llog, sst_io ) 413 CALL restget( inum, 'sss_io', jpi, jpj, 1 , 0, llog, sss_io ) 414 CALL restget( inum, 'u_io' , jpi, jpj, 1 , 0, llog, u_io ) 415 CALL restget( inum, 'v_io' , jpi, jpj, 1 , 0, llog, v_io ) 376 ios = iom_varid( inum, 'nfice' ) 377 IF( ios > 0 ) then 378 CALL iom_get( inum, jpdom_unknown, 'nfice' , zzz ) 379 zinfo(1, 1, 8) = zzz(1, 1, 1) 380 CALL iom_get( inum, jpdom_local, 'sst_io', sst_io ) 381 CALL iom_get( inum, jpdom_local, 'sss_io', sss_io ) 382 CALL iom_get( inum, jpdom_local, 'u_io' , u_io ) 383 CALL iom_get( inum, jpdom_local, 'v_io' , v_io ) 416 384 #if defined key_coupled 417 CALL restget( inum, 'alb_ice', jpi, jpj, 1 , 0, llog, alb_ice )385 CALL iom_get( inum, jpdom_local, 'alb_ice', alb_ice ) 418 386 #endif 419 387 ENDIF 420 IF( z fice(1) /= FLOAT(nfice) .OR. ios1== 0 ) THEN388 IF( zinfo(1, 1, 8) /= FLOAT(nfice) .OR. ios == 0 ) THEN 421 389 IF(lwp) WRITE(numout,*) 422 390 IF(lwp) WRITE(numout,*) 'rst_read : LLN sea Ice Model => Ice initialization' … … 437 405 # if defined key_flx_bulk_monthly || defined key_flx_bulk_daily 438 406 ! Louvain La Neuve Sea Ice Model 439 ios2 = 0 440 DO jk = 1, 30 441 IF( clvnames(jk) == 'nfbulk' ) ios2 = 1 442 END DO 443 IF( ios2 == 1 ) THEN 444 CALL restget( inum, 'nfbulk', 1, 1, 1 , 0, llog, zfblk ) 445 CALL restget( inum, 'gsst' , jpi, jpj, 1 , 0, llog, gsst ) 446 ENDIF 447 IF( zfblk(1) /= FLOAT(nfbulk) .OR. ios2 == 0 ) THEN 407 ios = iom_varid( inum, 'nfbulk' ) 408 IF( ios > 0 ) then 409 CALL iom_get( inum, jpdom_unknown, 'nfbulk' , zzz ) 410 CALL iom_get( inum, jpdom_local, 'gsst' , gsst ) 411 zinfo(1, 1, 9) = zzz(1, 1, 1) 412 ENDIF 413 IF( zinfo(1, 1, 9) /= FLOAT(nfbulk) .OR. ios == 0 ) THEN 448 414 IF(lwp) WRITE(numout,*) 449 415 IF(lwp) WRITE(numout,*) 'rst_read : LLN sea Ice Model => Ice initialization' … … 454 420 # endif 455 421 456 CALL restclo( inum ) 422 CALL iom_close( inum ) 423 457 424 ! In case of restart with neuler = 0 then put all before fields = to now fields 458 425 IF ( neuler == 0 ) THEN
Note: See TracChangeset
for help on using the changeset viewer.