Changeset 6772 for branches/2015
- Timestamp:
- 2016-07-01T18:02:45+02:00 (8 years ago)
- Location:
- branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO
- Files:
-
- 1 added
- 1 deleted
- 37 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90
r5602 r6772 28 28 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 29 29 USE wrk_nemo ! work arrays 30 USE fldread ! read input fields 31 USE iom 30 32 31 33 IMPLICIT NONE … … 47 49 REAL(wp) :: rn_tmi_ini_s ! initial temperature 48 50 51 INTEGER , PARAMETER :: jpfldi = 7 ! maximum number of files to read 52 INTEGER , PARAMETER :: jp_hicif = 1 ! index of thick (m) at T-point 53 INTEGER , PARAMETER :: jp_hsnif = 2 ! index of thick (m) at T-point 54 INTEGER , PARAMETER :: jp_frld = 3 ! index of ice fraction (%) at T-point 55 INTEGER , PARAMETER :: jp_sist = 4 ! index of ice surface temp (K) at T-point 56 INTEGER , PARAMETER :: jp_tbif1 = 5 ! index of ice temp lev1 (K) at T-point 57 INTEGER , PARAMETER :: jp_tbif2 = 6 ! index of ice temp lev2 (K) at T-point 58 INTEGER , PARAMETER :: jp_tbif3 = 7 ! index of ice temp lev3 (K) at T-point 59 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: si ! structure of input fields (file informations, fields read) 60 61 REAL(wp),DIMENSION(:,:) ,ALLOCATABLE :: hicif_ini,hsnif_ini,frld_ini,sist_ini, zswitch 62 REAL(wp),DIMENSION(:,:,:),ALLOCATABLE :: tbif_ini 63 49 64 LOGICAL :: ln_iceini ! initialization or not 65 LOGICAL :: ln_limini_file ! Ice initialization state from 2D netcdf file 50 66 !!---------------------------------------------------------------------- 51 67 !! LIM 3.0, UCL-LOCEAN-IPSL (2008) … … 91 107 REAL(wp), POINTER, DIMENSION(:) :: zht_i_ini, zat_i_ini, zvt_i_ini, zht_s_ini, zsm_i_ini, ztm_i_ini 92 108 REAL(wp), POINTER, DIMENSION(:,:) :: zh_i_ini, za_i_ini, zv_i_ini 93 REAL(wp), POINTER, DIMENSION(:,:) :: zswitch ! ice indicator94 109 INTEGER, POINTER, DIMENSION(:,:) :: zhemis ! hemispheric index 95 110 !-------------------------------------------------------------------- 96 111 97 CALL wrk_alloc( jpi, jpj, zswitch )98 112 CALL wrk_alloc( jpi, jpj, zhemis ) 99 113 CALL wrk_alloc( jpl, 2, zh_i_ini, za_i_ini, zv_i_ini ) … … 150 164 ! 3) Initialization of sea ice state variables 151 165 !-------------------------------------------------------------------- 166 IF( ln_limini_file )THEN 167 168 CALL limini_file 169 170 ELSE 152 171 153 172 !----------------------------- … … 376 395 tn_ice (:,:,:) = t_su (:,:,:) 377 396 397 ENDIF !ln_limini_file 398 378 399 ELSE 379 400 ! if ln_iceini=false … … 399 420 END DO 400 421 END DO 401 422 402 423 ENDIF ! ln_iceini 403 424 … … 451 472 452 473 453 CALL wrk_dealloc( jpi, jpj, zswitch )454 474 CALL wrk_dealloc( jpi, jpj, zhemis ) 455 475 CALL wrk_dealloc( jpl, 2, zh_i_ini, za_i_ini, zv_i_ini ) … … 474 494 !! 8.5 ! 07-11 (M. Vancoppenolle) rewritten initialization 475 495 !!----------------------------------------------------------------------------- 476 NAMELIST/namiceini/ ln_iceini, rn_thres_sst, rn_hts_ini_n, rn_hts_ini_s, rn_hti_ini_n, rn_hti_ini_s, & 477 & rn_ati_ini_n, rn_ati_ini_s, rn_smi_ini_n, rn_smi_ini_s, rn_tmi_ini_n, rn_tmi_ini_s 478 INTEGER :: ios ! Local integer output status for namelist read 496 ! 497 INTEGER :: ios,ierr,inum_ice ! Local integer output status for namelist read 498 INTEGER :: ji,jj 499 INTEGER :: ifpr, ierror 500 ! 501 CHARACTER(len=100) :: cn_dir ! Root directory for location of ice files 502 TYPE(FLD_N) :: sn_hicif, sn_hsnif, sn_frld, sn_sist 503 TYPE(FLD_N) :: sn_tbif1, sn_tbif2, sn_tbif3 504 TYPE(FLD_N), DIMENSION(jpfldi) :: slf_i ! array of namelist informations on the fields to read 505 ! 506 NAMELIST/namiceini/ ln_iceini, ln_limini_file, rn_thres_sst, rn_hts_ini_n, rn_hts_ini_s, & 507 & rn_hti_ini_n, rn_hti_ini_s, rn_ati_ini_n, rn_ati_ini_s, rn_smi_ini_n, & 508 & rn_smi_ini_s, rn_tmi_ini_n, rn_tmi_ini_s, & 509 & sn_hicif, sn_hsnif, sn_frld, sn_sist, & 510 & sn_tbif1, sn_tbif2, sn_tbif3, cn_dir 479 511 !!----------------------------------------------------------------------------- 480 512 ! … … 488 520 IF(lwm) WRITE ( numoni, namiceini ) 489 521 522 slf_i(jp_hicif) = sn_hicif ; slf_i(jp_hsnif) = sn_hsnif 523 slf_i(jp_frld) = sn_frld ; slf_i(jp_sist) = sn_sist 524 slf_i(jp_tbif1) = sn_tbif1 ; slf_i(jp_tbif2) = sn_tbif2 ; slf_i(jp_tbif3) = sn_tbif3 525 490 526 ! Define the initial parameters 491 527 ! ------------------------- … … 496 532 WRITE(numout,*) '~~~~~~~~~~~~~~~' 497 533 WRITE(numout,*) ' initialization with ice (T) or not (F) ln_iceini = ', ln_iceini 534 WRITE(numout,*) ' initialization with ice (T) or not (F) ln_limini_file = ', ln_limini_file 498 535 WRITE(numout,*) ' threshold water temp. for initial sea-ice rn_thres_sst = ', rn_thres_sst 499 536 WRITE(numout,*) ' initial snow thickness in the north rn_hts_ini_n = ', rn_hts_ini_n … … 509 546 ENDIF 510 547 548 IF( ln_limini_file ) THEN ! Ice initialization using input file 549 ! 550 ierr = alloc_lim_istate_init() 551 ! 552 ! CALL iom_open( 'Ice_initialization.nc', inum_ice ) 553 ! ! 554 ! IF( inum_ice > 0 ) THEN 555 ! IF(lwp) WRITE(numout,*) 556 ! IF(lwp) WRITE(numout,*) ' ice state initialization with : Ice_initialization.nc' 557 ! 558 ! CALL iom_get( inum_ice, jpdom_data, 'hicif', hicif_ini ) 559 ! CALL iom_get( inum_ice, jpdom_data, 'hsnif', hsnif_ini ) 560 ! CALL iom_get( inum_ice, jpdom_data, 'frld' , frld_ini ) 561 ! CALL iom_get( inum_ice, jpdom_data, 'ts' , sist_ini ) 562 ! CALL iom_get( inum_ice, jpdom_unknown, 'tbif', tbif_ini(1:nlci,1:nlcj,:), & 563 ! & kstart = (/ mig(1),mjg(1),1 /), kcount = (/ nlci,nlcj,3 /) ) 564 ! ! put some values in the extra-halo... 565 566 ! set si structure 567 ALLOCATE( si(jpfldi), STAT=ierror ) 568 IF( ierror > 0 ) THEN 569 CALL ctl_stop( 'Ice_ini in limistate: unable to allocate si structure' ) ; RETURN 570 ENDIF 571 572 DO ifpr= 1, jpfldi 573 ALLOCATE( si(ifpr)%fnow(jpi,jpj,1) ) 574 ALLOCATE( si(ifpr)%fdta(jpi,jpj,1,2) ) 575 END DO 576 577 ! fill si with slf_i and control print 578 CALL fld_fill( si, slf_i, cn_dir, 'lim_istate', 'lim istate ini', 'numnam_ice' ) 579 580 CALL fld_read( nit000, 1, si ) ! input fields provided at the current time-step 581 582 hicif_ini(:,:) = si(jp_hicif)%fnow(:,:,1) 583 hsnif_ini(:,:) = si(jp_hsnif)%fnow(:,:,1) 584 frld_ini(:,:) = si(jp_frld)%fnow(:,:,1) 585 sist_ini(:,:) = si(jp_sist)%fnow(:,:,1) 586 tbif_ini(:,:,1) = si(jp_tbif1)%fnow(:,:,1) 587 tbif_ini(:,:,2) = si(jp_tbif2)%fnow(:,:,1) 588 tbif_ini(:,:,3) = si(jp_tbif3)%fnow(:,:,1) 589 590 DO jj = nlcj+1, jpj ; tbif_ini(1:nlci,jj,:) = tbif_ini(1:nlci,nlej,:) ; END DO 591 DO ji = nlci+1, jpi ; tbif_ini(ji ,: ,:) = tbif_ini(nlei ,: ,:) ; END DO 592 593 ! CALL iom_close( inum_ice) 594 ! ! 595 ! ENDIF 596 ENDIF 597 511 598 END SUBROUTINE lim_istate_init 512 599 600 SUBROUTINE limini_file 601 !!----------------------------------------------------------------------------- 602 !! 603 !! 604 !! 605 !! 606 !!----------------------------------------------------------------------------- 607 INTEGER :: jl,ji,jj,jk 608 INTEGER :: jl0 609 INTEGER :: i_fill,jit,jjt 610 REAL(wp) :: ztest_1, ztest_2, ztest_3, ztest_4, ztests, zsigma, zarg, zA, zV, zA_cons, zV_cons, zconv,zH 611 REAL(wp) :: eps=1.e-6 612 REAL(wp) :: zmin,zmax 613 !rbb REAL(wp) :: epsi20,ztmelts,zdh 614 REAL(wp) ::ztmelts,zdh 615 616 REAL(wp), POINTER, DIMENSION(:,:) :: zhm_i_ini, zat_i_ini, zvt_i_ini, zhm_s_ini, zsm_i_ini 617 REAL(wp), POINTER, DIMENSION(:,:,:) :: zv_i_ini 618 REAL(wp), POINTER, DIMENSION(:,:,:) :: zht_i_ini,za_i_ini 619 REAL(wp), POINTER, DIMENSION(:,:) :: zidto ! ice indicator 620 !----------------------------------------------------------------------------- 621 IF(lwp)WRITE(numout,*)"limistate: read file : " 622 623 CALL wrk_alloc(jpl,jpi,jpj, zv_i_ini) 624 CALL wrk_alloc( jpi,jpj, zhm_i_ini, zat_i_ini, zvt_i_ini, zhm_s_ini, zsm_i_ini ) 625 CALL wrk_alloc( jpl,jpi,jpj,zht_i_ini,za_i_ini) 626 CALL wrk_alloc( jpi,jpj,zidto ) 627 628 zhm_i_ini(:,:) = hicif_ini(:,:) ! ice thickness 629 zat_i_ini(:,:) = 1._wp - frld_ini(:,:) ! ice concentration 630 zvt_i_ini(:,:) = zhm_i_ini(:,:) * zat_i_ini(:,:) ! ice volume 631 zhm_s_ini(:,:) = hsnif_ini(:,:) ! snow depth 632 633 zht_i_ini(:,:,:) = 0._wp 634 za_i_ini(:,:,:) = 0._wp 635 zv_i_ini(:,:,:) = 0._wp 636 637 zat_i_ini(:,:) = MIN( zat_i_ini(:,:) , 1.0_wp ) 638 639 640 DO ji = 1, jpi 641 DO jj = 1, jpj 642 643 IF( zat_i_ini(ji,jj) .GT. 0._wp .AND. zhm_i_ini(ji,jj) .GT. 0._wp )THEN 644 645 646 IF( gphit(ji,jj) .GE. 0._wp )THEN ; zsm_i_ini(ji,jj) = rn_smi_ini_n 647 ELSE ; zsm_i_ini(ji,jj) = rn_smi_ini_s 648 ENDIF 649 650 jl0 = 1 651 DO jl = 2, jpl 652 IF ( ( zhm_i_ini(ji,jj) .GT. hi_max(jl-1) ) .AND. & 653 ( zhm_i_ini(ji,jj) .LE. hi_max(jl) ) ) THEN 654 jl0 = jl 655 ENDIF 656 END DO 657 658 IF( jl0==1 )THEN 659 660 zht_i_ini(1,ji,jj) = zhm_i_ini(ji,jj) 661 za_i_ini(1,ji,jj) = zat_i_ini(ji,jj) 662 zht_i_ini(2:jpl,ji,jj) = 0._wp 663 za_i_ini(2:jpl,ji,jj) = 0._wp 664 665 ELSE ! jl0 ne 1 666 ztest_1 = 0 ; ztest_2 = 0 ; ztest_3 = 0 ; ztest_4 = 0 667 668 DO i_fill = jpl, 1, -1 669 IF( ( ztest_1 + ztest_2 + ztest_3 + ztest_4 ) .NE. 4 ) THEN 670 671 !---------------------------- 672 ! fill the i_fill categories 673 !---------------------------- 674 ! *** 1 category to fill 675 IF( i_fill .EQ. 1 ) THEN 676 zht_i_ini(1,ji,jj) = zhm_i_ini(ji,jj) 677 za_i_ini(1,ji,jj) = zat_i_ini(ji,jj) 678 zht_i_ini(2:jpl,ji,jj) = 0._wp 679 za_i_ini(2:jpl,ji,jj) = 0._wp 680 ELSE 681 682 ! *** >1 categores to fill 683 !--- Ice thicknesses in the i_fill - 1 first categories 684 DO jl = 1, i_fill - 1 685 zht_i_ini(jl,ji,jj) = 0.5 * ( hi_max(jl) + hi_max(jl-1) ) 686 END DO 687 688 !--- jl0: most likely index where cc will be maximum 689 DO jl = 1, jpl 690 IF ( ( zhm_i_ini(ji,jj) .GT. hi_max(jl-1) ) .AND. & 691 ( zhm_i_ini(ji,jj) .LE. hi_max(jl) ) ) THEN 692 jl0 = jl 693 ENDIF 694 END DO 695 jl0 = MIN(jl0, i_fill) 696 697 !--- Concentrations 698 za_i_ini(jl0,ji,jj) = zat_i_ini(ji,jj) / SQRT(REAL(jpl)) 699 DO jl = 1, i_fill - 1 700 IF ( jl .NE. jl0 ) THEN 701 zsigma = 0.5 * zhm_i_ini(ji,jj) 702 zarg = ( zht_i_ini(jl,ji,jj) - zhm_i_ini(ji,jj) ) / zsigma 703 za_i_ini(jl,ji,jj) = za_i_ini(jl0,ji,jj) * EXP(-zarg**2) 704 ENDIF 705 END DO 706 707 zA = 0. ! sum of the areas in the jpl categories 708 DO jl = 1, i_fill - 1 709 zA = zA + za_i_ini(jl,ji,jj) 710 END DO 711 za_i_ini(i_fill,ji,jj) = zat_i_ini(ji,jj) - zA ! ice conc in the last category 712 IF ( i_fill .LT. jpl ) za_i_ini(i_fill+1:jpl, ji,jj) = 0._wp 713 714 !--- Ice thickness in the last category 715 zV = 0. ! sum of the volumes of the N-1 categories 716 DO jl = 1, i_fill - 1 717 zV = zV + za_i_ini(jl,ji,jj)*zht_i_ini(jl,ji,jj) 718 END DO 719 zht_i_ini(i_fill,ji,jj) = ( zvt_i_ini(ji,jj) - zV ) /za_i_ini(i_fill,ji,jj) 720 IF ( i_fill .LT. jpl ) zht_i_ini(i_fill+1:jpl, ji,jj) = 0._wp 721 722 !--- volumes 723 zv_i_ini(:,ji,jj) = za_i_ini(:,ji,jj) * zht_i_ini(:,ji,jj) 724 IF ( i_fill .LT. jpl ) zv_i_ini(i_fill+1:jpl, ji,jj) = 0._wp 725 726 ENDIF ! i_fill 727 728 !--------------------- 729 ! Compatibility tests 730 !--------------------- 731 ! Test 1: area conservation 732 zA_cons = SUM(za_i_ini(:,ji,jj)) ; zconv = ABS(zat_i_ini(ji,jj) - zA_cons ) 733 IF ( zconv .LT. 1.0e-6 ) THEN 734 ztest_1 = 1 735 ELSE 736 ! this write is useful 737 !WRITE(numout,*) ' * TEST1 AREA NOT CONSERVED *** zA_cons = ', zA_cons,' zat_i_ini = ',zat_i_ini(ji,jj) 738 !WRITE(numout,*) 'ji,jj,narea ',ji,jj,narea 739 !WRITE(numout,*) ' zat_i_ini : ', zat_i_ini(ji,jj) 740 !WRITE(numout,*) ' zhm_i_ini : ', zhm_i_ini(ji,jj) 741 !WRITE(numout,*) ' zht_i_ini(:,jij,jj) ',zht_i_ini(:,ji,jj) 742 !WRITE(numout,*) ' za_i_ini(:,jij,jj) ',za_i_ini(:,ji,jj) 743 !WRITE(numout,*) ' hi_max ',hi_max 744 !WRITE(numout,*) ' jl0 = ',jl0 745 !WRITE(numout,*) ' vol = ',zvt_i_ini(ji,jj),SUM(zv_i_ini(:,ji,jj)) 746 ztest_1 = 0 747 ENDIF 748 749 ! Test 2: volume conservation 750 zV_cons = SUM(zv_i_ini(:,ji,jj)) 751 zconv = ABS(zvt_i_ini(ji,jj) - zV_cons) 752 753 IF ( zconv .LT. 1.0e-6 ) THEN 754 ztest_2 = 1 755 ELSE 756 ! this write is useful 757 !WRITE(numout,*) ' * TEST2 VOLUME NOT CONSERVED *** zV_cons = ', zV_cons, & 758 ! ' zvt_i_ini = ', zvt_i_ini(ji,jj) 759 !WRITE(numout,*) 'ji,jj,narea ',ji,jj,narea 760 !WRITE(numout,*) ' zat_i_ini : ', zat_i_ini(ji,jj) 761 !WRITE(numout,*) ' zhm_i_ini : ', zhm_i_ini(ji,jj) 762 !WRITE(numout,*) ' zht_i_ini(:,jij,jj) ',zht_i_ini(:,ji,jj) 763 !WRITE(numout,*) ' za_i_ini(:,jij,jj) ',za_i_ini(:,ji,jj) 764 !WRITE(numout,*) ' hi_max ',hi_max 765 !WRITE(numout,*) ' jl0 = ',jl0 766 ztest_2 = 0 767 ENDIF 768 769 ! Test 3: thickness of the last category is in-bounds ? 770 IF ( zht_i_ini(i_fill, ji,jj) .GT. hi_max(i_fill-1) ) THEN 771 ztest_3 = 1 772 ELSE 773 ! this write is useful 774 !WRITE(numout,*) ' * TEST 3 THICKNESS OF THE LAST CATEGORY OUT OF BOUNDS *** zht_i_ini(i_fill,ji,jj) = ', & 775 !zht_i_ini(i_fill,ji,jj), ' hi_max(jpl-1) = ', hi_max(i_fill-1) 776 !WRITE(numout,*) 'ji,jj,narea ',ji,jj,narea 777 !WRITE(numout,*) ' zat_i_ini : ', zat_i_ini(ji,jj) 778 !WRITE(numout,*) ' zhm_i_ini : ', zhm_i_ini(ji,jj) 779 !WRITE(numout,*) ' zht_i_ini(:,jij,jj) ',zht_i_ini(:,ji,jj) 780 !WRITE(numout,*) ' za_i_ini(:,jij,jj) ',za_i_ini(:,ji,jj) 781 !WRITE(numout,*) ' hi_max ',hi_max 782 !WRITE(numout,*) ' jl0 = ',jl0 783 ztest_3 = 0 784 ENDIF 785 786 ! Test 4: positivity of ice concentrations 787 ztest_4 = 1 788 DO jl = 1, jpl 789 IF ( za_i_ini(jl,ji,jj) .LT. 0._wp ) THEN 790 ! this write is useful 791 !WRITE(numout,*) ' * TEST 4 POSITIVITY NOT OK FOR CAT ', jl, 'WITH A = ', za_i_ini(jl,ji,jj) 792 !WRITE(numout,*) 'ji,jj,narea ',ji,jj,narea 793 !WRITE(numout,*) ' zat_i_ini : ', zat_i_ini(ji,jj) 794 !WRITE(numout,*) ' zhm_i_ini : ', zhm_i_ini(ji,jj) 795 !WRITE(numout,*) ' zht_i_ini(:,jij,jj) ',zht_i_ini(:,ji,jj) 796 !WRITE(numout,*) ' za_i_ini(:,jij,jj) ',za_i_ini(:,ji,jj) 797 !WRITE(numout,*) ' hi_max ',hi_max 798 !WRITE(numout,*) ' jl0 = ',jl0 799 !WRITE(numout,*) 800 ztest_4 = 0 801 ENDIF 802 END DO 803 804 ENDIF ! ztest_1 + ztest_2 + ztest_3 + ztest_4 805 806 ztests = ztest_1 + ztest_2 + ztest_3 + ztest_4 807 808 END DO ! i_fill 809 810 !WRITE(numout,*) ' ztests : ', ztests 811 !IF ( ztests .NE. 4 ) THEN 812 !WRITE(numout,*) 813 !WRITE(numout,*) ' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ' 814 !WRITE(numout,*) ' !!!! RED ALERT !!! ' 815 !WRITE(numout,*) ' !!!! BIIIIP BIIIP BIIIIP BIIIIP !!!' 816 !WRITE(numout,*) ' !!!! Something is wrong in the LIM3 initialization procedure ' 817 !WRITE(numout,*) ' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ' 818 !WRITE(numout,*) 'ji,jj,narea ',ji,jj,narea 819 !WRITE(numout,*) ' *** ztests is not equal to 4 ' 820 !WRITE(numout,*) ' *** ztest_i (i=1,4) = ', ztest_1, ztest_2,ztest_3,ztest_4 821 !WRITE(numout,*) ' zat_i_ini : ', zat_i_ini(ji,jj) 822 !WRITE(numout,*) ' zhm_i_ini : ', zhm_i_ini(ji,jj) 823 !WRITE(numout,*) ' zht_i_ini(:,jij,jj) ',zht_i_ini(:,ji,jj) 824 !WRITE(numout,*) ' za_i_ini(:,jij,jj) ',za_i_ini(:,ji,jj) 825 !WRITE(numout,*) ' hi_max ',hi_max 826 !ENDIF ! ztests .NE. 4 827 828 ENDIF ! jl0 ne 1 829 830 ENDIF ! zat_i_ini ne 0 831 END DO ! jj 832 END DO ! ji 833 834 835 !--------------------------------------------------------------------- 836 ! 3.3) Space-dependent arrays for ice state variables 837 !--------------------------------------------------------------------- 838 839 ! Ice concentration, thickness and volume, ice salinity, ice age, surface 840 ! temperature 841 DO jl = 1, jpl ! loop over categories 842 DO jj = 1, jpj 843 DO ji = 1, jpi 844 a_i(ji,jj,jl) = zswitch(ji,jj) * za_i_ini (jl,ji,jj) ! concentration 845 ht_i(ji,jj,jl) = zswitch(ji,jj) * zht_i_ini(jl,ji,jj) !ice thickness 846 847 IF( zhm_i_ini( ji,jj ) .GT. 0_wp )THEN ; ht_s(ji,jj,jl) = ht_i(ji,jj,jl) * ( zhm_s_ini( ji,jj ) / zhm_i_ini( ji,jj ) ) 848 ELSE ; ht_s(ji,jj,jl) = 0._wp 849 ENDIF 850 sm_i(ji,jj,jl) = zswitch(ji,jj) * zsm_i_ini(ji,jj) !+ (1._wp - zswitch(ji,jj) ) * rn_simin ! salinity 851 o_i(ji,jj,jl) = zswitch(ji,jj) * 1._wp + ( 1._wp -zswitch(ji,jj) ) ! age 852 t_su(ji,jj,jl) = sist_ini(ji,jj) 853 854 ! This case below should not be used if (ht_s/ht_i) is ok in 855 ! namelist 856 ! In case snow load is in excess that would lead to 857 ! transformation from snow to ice 858 ! Then, transfer the snow excess into the ice (different from 859 ! limthd_dh) 860 zdh = MAX( 0._wp, ( rhosn * ht_s(ji,jj,jl) + ( rhoic - rau0 ) *ht_i(ji,jj,jl) ) * r1_rau0 ) 861 ! recompute ht_i, ht_s avoiding out of bounds values 862 ht_i(ji,jj,jl) = MIN( hi_max(jl), ht_i(ji,jj,jl) + zdh ) 863 ht_s(ji,jj,jl) = MAX( 0._wp, ht_s(ji,jj,jl) - zdh * rhoic *r1_rhosn ) 864 865 ! ice volume, salt content, age content 866 v_i(ji,jj,jl) = ht_i(ji,jj,jl) * a_i(ji,jj,jl) !ice volume 867 v_s(ji,jj,jl) = ht_s(ji,jj,jl) * a_i(ji,jj,jl) !snow volume 868 smv_i(ji,jj,jl) = MIN( sm_i(ji,jj,jl) , sss_m(ji,jj) ) *v_i(ji,jj,jl) ! salt content 869 oa_i(ji,jj,jl) = o_i(ji,jj,jl) * a_i(ji,jj,jl) !age content 870 END DO ! ji 871 END DO ! jj 872 END DO ! jl 873 874 !cbr 875 DO jk = 1, nlay_s 876 DO jl = 1, jpl ! loop over categories 877 !rbb t_s(:,:,1,jl) = tbif_ini(:,:,1) 878 t_s(:,:,1,jl) = tbif_ini(:,:,1)*zswitch(:,:)+ ( 1._wp - zswitch(:,:) ) * rt0 879 END DO ! jl 880 END DO ! jk 881 882 ! Snow temperature and heat content 883 DO jk = 1, nlay_s 884 DO jl = 1, jpl ! loop over categories 885 DO jj = 1, jpj 886 DO ji = 1, jpi 887 !cbr??? t_s(ji,jj,jk,jl) = zswitch(ji,jj) * ztm_i_ini(ji,jj) + ( 1._wp - zswitch(ji,jj) ) * rt0 888 ! Snow energy of melting 889 e_s(ji,jj,jk,jl) = zswitch(ji,jj) * rhosn * ( cpic * ( rt0 - t_s(ji,jj,jk,jl) ) + lfus ) 890 891 ! Mutliply by volume, and divide by number of layers to get 892 ! heat content in J/m2 893 e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) * v_s(ji,jj,jl) *r1_nlay_s 894 END DO ! ji 895 END DO ! jj 896 END DO ! jl 897 END DO ! jk 898 899 ! Ice salinity, temperature and heat content 900 DO jk = 1, nlay_i 901 DO jl = 1, jpl ! loop over categories 902 DO jj = 1, jpj 903 DO ji = 1, jpi 904 !cbr??? t_i(ji,jj,jk,jl) = zswitch(ji,jj) * ztm_i_ini(ji,jj) + ( 1._wp - zswitch(ji,jj) ) * rt0 905 t_i(ji,jj,jk,jl) = tbif_ini(ji,jj,2)*zswitch(ji,jj)+ ( 1._wp - zswitch(ji,jj) ) * rt0 906 s_i(ji,jj,jk,jl) = zswitch(ji,jj) * zsm_i_ini(ji,jj) !+ ( 1._wp - zswitch(ji,jj) ) * rn_simin 907 ztmelts = - tmut * s_i(ji,jj,jk,jl) + rt0 !Melting temperature in K 908 909 ! heat content per unit volume 910 e_i(ji,jj,jk,jl) = zswitch(ji,jj) * rhoic * ( cpic * ( ztmelts - t_i(ji,jj,jk,jl) ) & 911 + lfus * ( 1._wp - (ztmelts-rt0) /MIN((t_i(ji,jj,jk,jl)-rt0),-epsi20) ) & 912 - rcp * ( ztmelts - rt0 ) ) 913 914 ! Mutliply by ice volume, and divide by number of layers to 915 ! get heat content in J/m2 916 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * v_i(ji,jj,jl) * r1_nlay_i 917 END DO ! ji 918 END DO ! jj 919 END DO ! jl 920 END DO ! jk 921 922 !cbr tmp CALL wrk_dealloc(jpl,jpi,jpj, zht_i_ini, za_i_ini, zv_i_ini) 923 CALL wrk_dealloc(jpl,jpi,jpj, zv_i_ini) 924 CALL wrk_dealloc( jpl,jpi,jpj,zht_i_ini,za_i_ini) 925 CALL wrk_dealloc( jpi,jpj, zhm_i_ini, zat_i_ini, zvt_i_ini, zhm_s_ini,zsm_i_ini ) 926 CALL wrk_dealloc( jpi,jpj,zidto ) 927 928 END SUBROUTINE limini_file 929 930 931 INTEGER FUNCTION alloc_lim_istate_init() 932 !!----------------------------------------------------------------------------- 933 !! 934 !! 935 !! 936 !! 937 !!----------------------------------------------------------------------------- 938 INTEGER :: ierr(1) 939 !!----------------------------------------------------------------------------- 940 ALLOCATE( hicif_ini(jpi,jpj) , hsnif_ini(jpi,jpj) , frld_ini(jpi,jpj) , sist_ini(jpi,jpj) , zswitch(jpi,jpj) , tbif_ini(jpi,jpj,3) , Stat=ierr(1) ) 941 alloc_lim_istate_init = MAXVAL(ierr) 942 IF( alloc_lim_istate_init /= 0 ) CALL ctl_warn( 'lim_istate_init: failed to allocate arrays') 943 944 END FUNCTION alloc_lim_istate_init 513 945 #else 514 946 !!---------------------------------------------------------------------- -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/LIM_SRC_3/thd_ice.F90
r5602 r6772 1 1 MODULE thd_ice 2 #if defined key_lim3 3 2 4 !!====================================================================== 3 5 !! *** MODULE thd_ice *** … … 172 174 ! 173 175 END FUNCTION thd_ice_alloc 174 176 177 #endif 175 178 !!====================================================================== 176 179 END MODULE thd_ice -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/CRS/crs.F90
r6101 r6772 17 17 18 18 PUBLIC crs_dom_alloc ! Called from crsini.F90 19 PUBLIC crs_dom_alloc1 ! Called from crsini.F9020 PUBLIC crs_dom_alloc2 ! Called from crsini.F9021 19 PUBLIC dom_grid_glo 22 20 PUBLIC dom_grid_crs … … 104 102 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: e1v_crs, e2v_crs ! horizontal scale factors grid type V 105 103 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: e1f_crs, e2f_crs ! horizontal scale factors grid type F 106 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: e3t_crs, e3u_crs, e3v_crs, e3f_crs, e3w_crs 107 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: e3t_max_crs, e3u_max_crs, e3v_max_crs, e3f_max_crs, e3w_max_crs 104 105 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: ht_0_crs 106 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: e3t_0_crs, e3u_0_crs, e3v_0_crs, e3f_0_crs, e3w_0_crs 107 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: e3t_max_0_crs, e3u_max_0_crs, e3v_max_0_crs, e3f_max_0_crs, e3w_max_0_crs 108 109 #if defined key_vvl 110 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: e3t_b_crs, e3u_b_crs, e3v_b_crs, e3f_b_crs, e3w_b_crs 111 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: e3t_n_crs, e3u_n_crs, e3v_n_crs, e3f_n_crs, e3w_n_crs 112 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: e3t_a_crs, e3u_a_crs, e3v_a_crs, e3f_a_crs, e3w_a_crs 113 114 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: e3t_max_n_crs, e3u_max_n_crs, e3v_max_n_crs, e3f_max_n_crs, e3w_max_n_crs 115 #endif 116 108 117 109 118 ! Surface … … 116 125 REAL(wp), DIMENSION(:,:), ALLOCATABLE,SAVE :: ff_crs 117 126 INTEGER, DIMENSION(:,:), ALLOCATABLE,SAVE :: mbathy_crs, mbkt_crs, mbku_crs, mbkv_crs 118 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE,SAVE :: gdept_crs, gdepu_crs, gdepv_crs, gdepw_crs 127 128 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE,SAVE :: gdept_0_crs, gdepu_0_crs, gdepv_0_crs, gdepw_0_crs 129 #if defined key_vvl 130 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE,SAVE :: gdept_n_crs, gdepu_n_crs, gdepv_n_crs, gdepw_n_crs 131 #endif 119 132 120 133 ! Weights … … 146 159 REAL(wp) :: rfactxy 147 160 161 INTEGER, DIMENSION(:) , ALLOCATABLE :: nfactx,nfacty 162 163 148 164 ! Physical and dynamical ocean fields for output or passing to TOP, time-mean fields 149 REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: tsb_crs,tsn_crs, rab_crs_n165 REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: tsb_crs,tsn_crs,tsa_crs,rab_crs_n 150 166 REAL(wp), DIMENSION(:,:,:) , ALLOCATABLE :: un_crs, vn_crs, wn_crs, rke_crs 151 167 REAL(wp), DIMENSION(:,:,:) , ALLOCATABLE :: ub_crs, vb_crs … … 161 177 REAL(wp), PUBLIC, DIMENSION(:,:) , ALLOCATABLE :: fmmflx_crs 162 178 REAL(wp), PUBLIC, DIMENSION(:,:) , ALLOCATABLE :: utau_crs, vtau_crs, taum_crs 163 REAL(wp), PUBLIC, DIMENSION(:,:) , ALLOCATABLE :: rnf_crs 179 REAL(wp), PUBLIC, DIMENSION(:,:) , ALLOCATABLE :: rnf_crs,rnf_b_crs 180 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: trc_i_crs,trc_o_crs 181 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: sbc_trc_crs, sbc_trc_b_crs 164 182 165 183 REAL(wp), PUBLIC, DIMENSION(:,:,:) , ALLOCATABLE :: uslp_crs, wslpi_crs !: i_slope at U- and W-points … … 195 213 CONTAINS 196 214 197 INTEGER FUNCTION crs_dom_alloc 1()215 INTEGER FUNCTION crs_dom_alloc() 198 216 !!------------------------------------------------------------------- 199 217 !! *** FUNCTION crs_dom_alloc *** … … 210 228 & mi0_crs (jpiglo_crs), mi1_crs (jpiglo_crs), & 211 229 & mj0_crs (jpjglo_crs), mj1_crs (jpjglo_crs), & 212 & mig_crs (jpi_crs) , mjg_crs (jpj_crs) , STAT=ierr(1) ) 213 230 & mig_crs (jpi_crs) , mjg_crs (jpj_crs) , & 231 & mis_crs (jpi_crs) , mie_crs (jpi_crs) , & 232 & mjs_crs (jpj_crs) , mje_crs (jpj_crs) , & 233 & nfactx (jpi_crs) , nfacty (jpj_crs) , & 234 & nimppt_crs(jpnij) , nlcit_crs(jpnij) , nldit_crs(jpnij) , nleit_crs(jpnij) , & 235 & nimppt_full(jpnij), nlcit_full(jpnij), nldit_full(jpnij), nleit_full(jpnij), & 236 & njmppt_crs(jpnij) , nlcjt_crs(jpnij) , nldjt_crs(jpnij) , nlejt_crs(jpnij) , & 237 & njmppt_full(jpnij), nlcjt_full(jpnij), nldjt_full(jpnij), nlejt_full(jpnij), & 238 & nfiimpp_full(jpni,jpnj) , nfiimpp_crs(jpni,jpnj) , STAT=ierr(1) ) 214 239 215 240 ! Set up Mask and Mesh … … 232 257 & e1e2t_crs(jpi_crs,jpj_crs), STAT=ierr(5)) 233 258 234 ALLOCATE( e3t_crs(jpi_crs,jpj_crs,jpk) , e3w_crs(jpi_crs,jpj_crs,jpk) , & 235 & e3u_crs(jpi_crs,jpj_crs,jpk) , e3v_crs(jpi_crs,jpj_crs,jpk) , & 236 & e3f_crs(jpi_crs,jpj_crs,jpk) , e1e2w_msk(jpi_crs,jpj_crs,jpk) , & 259 ALLOCATE( e3t_0_crs(jpi_crs,jpj_crs,jpk) , e3w_0_crs(jpi_crs,jpj_crs,jpk) , & 260 & e3u_0_crs(jpi_crs,jpj_crs,jpk) , e3v_0_crs(jpi_crs,jpj_crs,jpk) , & 261 & ht_0_crs(jpi_crs,jpj_crs), & 262 #if defined key_vvl 263 & e3t_b_crs(jpi_crs,jpj_crs,jpk) , e3w_b_crs(jpi_crs,jpj_crs,jpk) , & 264 & e3u_b_crs(jpi_crs,jpj_crs,jpk) , e3v_b_crs(jpi_crs,jpj_crs,jpk) , & 265 & e3t_n_crs(jpi_crs,jpj_crs,jpk) , e3w_n_crs(jpi_crs,jpj_crs,jpk) , & 266 & e3u_n_crs(jpi_crs,jpj_crs,jpk) , e3v_n_crs(jpi_crs,jpj_crs,jpk) , & 267 & e3t_a_crs(jpi_crs,jpj_crs,jpk) , e3w_a_crs(jpi_crs,jpj_crs,jpk) , & 268 & e3u_a_crs(jpi_crs,jpj_crs,jpk) , e3v_a_crs(jpi_crs,jpj_crs,jpk) , & 269 #endif 270 & e1e2w_msk(jpi_crs,jpj_crs,jpk) , & 237 271 & e2e3u_msk(jpi_crs,jpj_crs,jpk) , e1e3v_msk(jpi_crs,jpj_crs,jpk) , & 238 272 & e1e2w_crs(jpi_crs,jpj_crs,jpk) , e2e3u_crs(jpi_crs,jpj_crs,jpk) , & 239 & e1e3v_crs(jpi_crs,jpj_crs,jpk) , e3t_max_crs(jpi_crs,jpj_crs,jpk), & 240 & e3w_max_crs(jpi_crs,jpj_crs,jpk), e3u_max_crs(jpi_crs,jpj_crs,jpk), & 241 & e3v_max_crs(jpi_crs,jpj_crs,jpk), STAT=ierr(6)) 273 & e1e3v_crs(jpi_crs,jpj_crs,jpk) , & 274 & e3t_max_0_crs(jpi_crs,jpj_crs,jpk), e3w_max_0_crs(jpi_crs,jpj_crs,jpk) , & 275 & e3u_max_0_crs(jpi_crs,jpj_crs,jpk), e3v_max_0_crs(jpi_crs,jpj_crs,jpk) , & 276 #if defined key_vvl 277 & e3t_max_n_crs(jpi_crs,jpj_crs,jpk), e3w_max_n_crs(jpi_crs,jpj_crs,jpk) , & 278 & e3u_max_n_crs(jpi_crs,jpj_crs,jpk), e3v_max_n_crs(jpi_crs,jpj_crs,jpk) , & 279 #endif 280 & STAT=ierr(6)) 242 281 243 282 … … 255 294 & mbku_crs(jpi_crs,jpj_crs) , mbkv_crs(jpi_crs,jpj_crs) , STAT=ierr(9)) 256 295 257 ALLOCATE( gdept_crs(jpi_crs,jpj_crs,jpk), gdepu_crs(jpi_crs,jpj_crs,jpk) , & 258 & gdepv_crs(jpi_crs,jpj_crs,jpk), gdepw_crs(jpi_crs,jpj_crs,jpk) , STAT=ierr(10) ) 296 ALLOCATE( gdept_0_crs(jpi_crs,jpj_crs,jpk), gdepu_0_crs(jpi_crs,jpj_crs,jpk) , & 297 & gdepv_0_crs(jpi_crs,jpj_crs,jpk), gdepw_0_crs(jpi_crs,jpj_crs,jpk) , & 298 #if defined key_vvl 299 & gdept_n_crs(jpi_crs,jpj_crs,jpk), gdepu_n_crs(jpi_crs,jpj_crs,jpk) , & 300 & gdepv_n_crs(jpi_crs,jpj_crs,jpk), gdepw_n_crs(jpi_crs,jpj_crs,jpk) , & 301 #endif 302 & STAT=ierr(10)) 259 303 260 304 … … 270 314 271 315 ALLOCATE( sshb_crs(jpi_crs,jpj_crs), sshn_crs(jpi_crs,jpj_crs), ssha_crs(jpi_crs,jpj_crs), & 316 & qsr_crs(jpi_crs ,jpj_crs), wndm_crs(jpi_crs,jpj_crs), utau_crs(jpi_crs,jpj_crs) , & 317 & vtau_crs(jpi_crs,jpj_crs), taum_crs(jpi_crs,jpj_crs), & 318 & rnf_crs (jpi_crs,jpj_crs), rnf_b_crs(jpi_crs ,jpj_crs), & 272 319 & emp_crs (jpi_crs,jpj_crs), emp_b_crs(jpi_crs,jpj_crs), & 273 & qsr_crs(jpi_crs ,jpj_crs), wndm_crs(jpi_crs,jpj_crs), utau_crs(jpi_crs,jpj_crs), &274 & vtau_crs(jpi_crs,jpj_crs), taum_crs(jpi_crs,jpj_crs), rnf_crs(jpi_crs ,jpj_crs), &320 & sbc_trc_crs (jpi_crs,jpj_crs,jpts), sbc_trc_b_crs(jpi_crs,jpj_crs,jpts), & 321 & trc_i_crs (jpi_crs,jpj_crs,jpts), trc_o_crs(jpi_crs,jpj_crs,jpts), & 275 322 & fr_i_crs(jpi_crs,jpj_crs), sfx_crs(jpi_crs ,jpj_crs), fmmflx_crs(jpi_crs ,jpj_crs), STAT=ierr(12) ) 276 323 … … 285 332 #endif 286 333 287 ALLOCATE( ts n_crs(jpi_crs,jpj_crs,jpk,jpts), tsb_crs(jpi_crs,jpj_crs,jpk,jpts), &334 ALLOCATE( tsb_crs(jpi_crs,jpj_crs,jpk,jpts), tsn_crs(jpi_crs,jpj_crs,jpk,jpts), tsa_crs(jpi_crs,jpj_crs,jpk,jpts), & 288 335 en_crs(jpi_crs,jpj_crs,jpk), avt_crs(jpi_crs,jpj_crs,jpk), & 289 336 # if defined key_zdfddm … … 295 342 & hmlp_crs(jpi_crs,jpj_crs) , hmlpt_crs(jpi_crs,jpj_crs) , STAT=ierr(15) ) 296 343 297 crs_dom_alloc1 = MAXVAL(ierr)298 299 END FUNCTION crs_dom_alloc1300 301 INTEGER FUNCTION crs_dom_alloc()302 !!-------------------------------------------------------------------303 !! *** FUNCTION crs_dom_alloc ***304 !! ** Purpose : Allocate public crs arrays305 !!-------------------------------------------------------------------306 !! Local variables307 INTEGER, DIMENSION(2) :: ierr308 309 ierr(:) = 0310 311 ALLOCATE( nimppt_crs(jpnij) , nlcit_crs(jpnij) , nldit_crs(jpnij) , nleit_crs(jpnij), &312 & nimppt_full(jpnij) , nlcit_full(jpnij) , nldit_full(jpnij) , nleit_full(jpnij), &313 njmppt_crs(jpnij) , nlcjt_crs(jpnij) , nldjt_crs(jpnij) , nlejt_crs(jpnij), &314 & njmppt_full(jpnij) , nlcjt_full(jpnij) , nldjt_full(jpnij) , nlejt_full(jpnij) , STAT=ierr(1) )315 316 ALLOCATE( nfiimpp_full(jpni,jpnj) , nfiimpp_crs(jpni,jpnj) ,STAT=ierr(2) )317 318 344 crs_dom_alloc = MAXVAL(ierr) 319 345 320 346 END FUNCTION crs_dom_alloc 321 322 INTEGER FUNCTION crs_dom_alloc2()323 !!-------------------------------------------------------------------324 !! *** FUNCTION crs_dom_alloc ***325 !! ** Purpose : Allocate public crs arrays326 !!-------------------------------------------------------------------327 !! Local variables328 INTEGER, DIMENSION(1) :: ierr329 330 ierr(:) = 0331 332 !cbr ALLOCATE( mjs_crs(nlej_crs) , mje_crs(nlej_crs), mis_crs(nlei_crs) , mie_crs(nlei_crs), STAT=ierr(1) )333 !cbr pk on alloue ac nlej_crs ??????334 !cbrALLOCATE( mjs_crs(nlcj_crs) , mje_crs(nlcj_crs), mis_crs(nlci_crs) , mie_crs(nlci_crs), STAT=ierr(1) )335 ALLOCATE( mjs_crs(jpj_crs) , mje_crs(jpj_crs), mis_crs(jpi_crs) , mie_crs(jpi_crs), STAT=ierr(1) )336 crs_dom_alloc2 = MAXVAL(ierr)337 338 END FUNCTION crs_dom_alloc2339 347 340 348 SUBROUTINE dom_grid_glo -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsdom.F90
r6101 r6772 38 38 USE crslbclnk 39 39 USE lib_mpp 40 !cbrUSE ieee_arithmetic40 USE ieee_arithmetic 41 41 42 42 IMPLICIT NONE … … 61 61 62 62 SUBROUTINE crs_dom_msk 63 !!=================================================================== 64 ! 65 ! 66 ! 67 !!=================================================================== 68 INTEGER :: ji, jj, jk ! dummy loop indices 69 INTEGER :: ijis,ijie,ijjs,ijje 70 REAL(wp) :: zmask 71 !!------------------------------------------------------------------- 63 72 64 INTEGER :: ji, jj, jk ! dummy loop indices 65 INTEGER :: ijie,ijis,ijje,ijjs,ij,je_2 66 INTEGER :: iji, ijj 67 REAL(wp) :: zmask 68 INTEGER :: ir,jr 69 70 ! Initialize 71 tmask_crs(:,:,:) = 0.0 72 vmask_crs(:,:,:) = 0.0 73 umask_crs(:,:,:) = 0.0 74 fmask_crs(:,:,:) = 0.0 75 ! 76 DO jk = 1, jpkm1 77 DO ji = 2, nlei_crs 78 ijie = mie_crs(ji) 79 ijis = mis_crs(ji) 80 81 IF( nldj_crs == 1 .AND. (( mje_crs(2) - mjs_crs(2) ) < 2) )THEN !!cc bande du sud style ORCA2 82 83 IF( mje_crs(2) - mjs_crs(2) == 1 )THEN 84 85 jj = mje_crs(2) 86 87 zmask = 0.0 88 zmask = SUM( tmask(ijis:ijie,jj,jk) ) 89 IF ( zmask > 0.0 ) tmask_crs(ji,2,jk) = 1.0 90 91 zmask = 0.0 92 zmask = SUM( vmask(ijis:ijie,jj ,jk) ) 93 IF ( zmask > 0.0 ) vmask_crs(ji,2,jk) = 1.0 94 95 zmask = 0.0 96 zmask = umask(ijie ,jj,jk) 97 IF( zmask > 0.0 )umask_crs(ji,2,jk) = 1.0 98 99 fmask_crs(ji,jj,jk) = fmask(ijie,2,jk) 100 ENDIF 101 ELSE 102 103 jj = mje_crs(2) 104 ij = mjs_crs(2) 105 106 zmask = 0.0 107 zmask = SUM( tmask(ijis:ijie,ij:jj,jk) ) 108 IF ( zmask > 0.0 ) tmask_crs(ji,2,jk) = 1.0 109 110 zmask = 0.0 111 zmask = SUM( vmask(ijis:ijie,jj ,jk) ) 112 IF ( zmask > 0.0 ) vmask_crs(ji,2,jk) = 1.0 113 114 zmask = 0.0 115 zmask = SUM(umask(ijie,ij:jj,jk)) 116 IF ( zmask > 0.0 ) umask_crs(ji,2,jk) = 1.0 117 118 fmask_crs(ji,jj,jk) = fmask(ijie,2,jk) 119 120 ENDIF 121 122 DO jj = 3, nlej_crs 123 ijje = mje_crs(jj) 124 ijjs = mjs_crs(jj) 125 126 !iji=117 ; ijj=211 127 !iji=iji-nimpp_crs+1 ; ijj=ijj-njmpp_crs+1 128 !IF( ji ==iji .AND. jj==ijj .AND. jk==74 )THEN 129 !write(narea+5000,*)"mask ",ji,jj 130 !write(narea+5000,*)"mask ",ijie,ijis,ijjs,ijje 131 !ENDIF 132 133 ir=303-nimpp_crs+1 ; jr=302-njmpp_crs+1 134 IF( ji==ir .AND. jj==jr )THEN 135 WRITE(narea+2000,*)"mask",ir,jr,ijis+nimpp-1,ijjs+njmpp-1 136 ENDIF 137 138 !IF( ijje .GT. jpj )WRITE(narea+200,*)"BUG",jj,ijjs,ijje,SHAPE(tmask) ; call flush(narea+200) 139 zmask = 0.0 140 zmask = SUM( tmask(ijis:ijie,ijjs:ijje,jk) ) 141 IF ( zmask > 0.0 ) tmask_crs(ji,jj,jk) = 1.0 142 143 zmask = 0.0 144 zmask = SUM( vmask(ijis:ijie,ijje ,jk) ) 145 IF ( zmask > 0.0 ) vmask_crs(ji,jj,jk) = 1.0 146 147 zmask = 0.0 148 zmask = SUM( umask(ijie ,ijjs:ijje,jk) ) 149 IF ( zmask > 0.0 ) umask_crs(ji,jj,jk) = 1.0 150 151 fmask_crs(ji,jj,jk) = fmask(ijie,ijje,jk) 152 153 ENDDO 73 ! Initialize 74 tmask_crs(:,:,:) = 0.0 75 vmask_crs(:,:,:) = 0.0 76 umask_crs(:,:,:) = 0.0 77 fmask_crs(:,:,:) = 0.0 78 ! 79 DO jk = 1, jpkm1 80 DO ji = nldi_crs, nlei_crs 81 82 ijis = mis_crs(ji) 83 ijie = mie_crs(ji) 84 85 DO jj = nldj_crs, nlej_crs 86 87 ijjs = mjs_crs(jj) 88 ijje = mje_crs(jj) 89 90 zmask = 0.0 91 zmask = SUM( tmask(ijis:ijie,ijjs:ijje,jk) ) 92 IF ( zmask > 0.0 ) tmask_crs(ji,jj,jk) = 1.0 93 94 zmask = 0.0 95 zmask = SUM( vmask(ijis:ijie,ijje ,jk) ) 96 IF ( zmask > 0.0 ) vmask_crs(ji,jj,jk) = 1.0 97 98 zmask = 0.0 99 zmask = SUM( umask(ijie ,ijjs:ijje,jk) ) 100 IF ( zmask > 0.0 ) umask_crs(ji,jj,jk) = 1.0 101 102 fmask_crs(ji,jj,jk) = fmask(ijie,ijje,jk) 103 104 154 105 ENDDO 155 106 ENDDO 156 CALL crs_lbc_lnk( tmask_crs, 'T', 1.0 ) 157 !cbr 158 !DO ji=1,jpi_crs-1 159 !DO jj=1,jpj_crs-1 160 !DO jk=1,jpk 161 ! umask_crs(ji,jj,jk) = tmask_crs(ji ,jj ,jk) * tmask_crs(ji+1,jj ,jk) 162 ! vmask_crs(ji,jj,jk) = tmask_crs(ji ,jj ,jk) * tmask_crs(ji ,jj+1,jk) 163 ! fmask_crs(ji,jj,jk) = tmask_crs(ji ,jj ,jk) * tmask_crs(ji ,jj+1,jk) * tmask_crs(ji+1,jj ,jk) * tmask_crs(ji+1,jj+1,jk) 164 !ENDDO 165 !ENDDO 166 !ENDDO 167 ! 168 CALL crs_lbc_lnk( vmask_crs, 'V', 1.0 ) 169 CALL crs_lbc_lnk( umask_crs, 'U', 1.0 ) 170 CALL crs_lbc_lnk( fmask_crs, 'F', 1.0 ) 171 ! 172 !cbr 173 !DO ji=2,jpi_crs-1 174 !DO jj=2,jpj_crs-1 175 !DO jk=1,jpk 176 ! IF( tmask(ji-1,jj ,jk)==1. .AND. tmask(ji ,jj ,jk)==1. .AND. umask(ji-1,jj ,jk)==0. )WRITE(narea+5000,*)"MASK1",ji,jj,jk 177 ! IF( tmask(ji ,jj ,jk)==1. .AND. tmask(ji+1,jj ,jk)==1. .AND. umask(ji ,jj ,jk)==0. )WRITE(narea+5000,*)"MASK2",ji,jj,jk 178 ! IF( tmask(ji ,jj-1,jk)==1. .AND. tmask(ji ,jj ,jk)==1. .AND. vmask(ji ,jj-1,jk)==0. )WRITE(narea+5000,*)"MASK3",ji,jj,jk 179 ! IF( tmask(ji ,jj ,jk)==1. .AND. tmask(ji ,jj+1,jk)==1. .AND. vmask(ji ,jj ,jk)==0. )WRITE(narea+5000,*)"MASK4",ji,jj,jk 180 ! IF( umask(ji-1,jj ,jk)==1. .AND. ( tmask(ji-1,jj ,jk)==0. .OR. tmask(ji ,jj ,jk)==0. ) )WRITE(narea+5000,*)"MASK5",ji,jj,jk 181 ! IF( umask(ji ,jj ,jk)==1. .AND. ( tmask(ji ,jj ,jk)==0. .OR. tmask(ji+1,jj ,jk)==0. ) )WRITE(narea+5000,*)"MASK6",ji,jj,jk 182 ! IF( vmask(ji ,jj-1,jk)==1. .AND. ( tmask(ji ,jj-1,jk)==0. .OR. tmask(ji ,jj ,jk)==0. ) )WRITE(narea+5000,*)"MASK7",ji,jj,jk 183 ! IF( vmask(ji ,jj ,jk)==1. .AND. ( tmask(ji ,jj ,jk)==0. .OR. tmask(ji ,jj+1,jk)==0. ) )WRITE(narea+5000,*)"MASK8",ji,jj,jk 184 !ENDDO 185 !ENDDO 186 !ENDDO 187 ! 107 ENDDO 108 109 CALL crs_lbc_lnk( tmask_crs, 'T', 1.0 ) 110 CALL crs_lbc_lnk( vmask_crs, 'V', 1.0 ) 111 CALL crs_lbc_lnk( umask_crs, 'U', 1.0 ) 112 CALL crs_lbc_lnk( fmask_crs, 'F', 1.0 ) 113 ! 188 114 END SUBROUTINE crs_dom_msk 189 115 … … 219 145 !! Local variables 220 146 INTEGER :: ji, jj, jk ! dummy loop indices 221 INTEGER :: iji s, ijjs147 INTEGER :: iji, ijj 222 148 INTEGER :: ir,jr 149 !!---------------------------------------------------------------- 150 p_gphi_crs(:,:)=0._wp 151 p_glam_crs(:,:)=0._wp 223 152 224 153 … … 226 155 CASE ( 'T' ) 227 156 DO jj = nldj_crs, nlej_crs 228 ijjs = mjs_crs(jj) + mybinctr 229 DO ji = 2, nlei_crs 230 ijis = mis_crs(ji) + mxbinctr 231 p_gphi_crs(ji,jj) = p_gphi(ijis,ijjs) 232 p_glam_crs(ji,jj) = p_glam(ijis,ijjs) 233 ir=303-nimpp_crs+1 ; jr=302-njmpp_crs+1 234 WRITE(narea+2000,*)"coordT1",ir,jr 235 IF( ji==ir .AND. jj==jr )THEN 236 WRITE(narea+2000,*)"coordT",ir,jr,ijis+nimpp-1,ijjs+njmpp-1 237 ENDIF 157 ijj = mjs_crs(jj) + 1 158 DO ji = nldi_crs, nlei_crs 159 iji = mis_crs(ji) + 1 160 p_gphi_crs(ji,jj) = p_gphi(iji,ijj) 161 p_glam_crs(ji,jj) = p_glam(iji,ijj) 238 162 ENDDO 239 163 ENDDO 240 164 CASE ( 'U' ) 241 165 DO jj = nldj_crs, nlej_crs 242 ijjs = mjs_crs(jj) + mybinctr 243 DO ji = 2, nlei_crs 244 ijis = mis_crs(ji) 245 p_gphi_crs(ji,jj) = p_gphi(ijis,ijjs) 246 p_glam_crs(ji,jj) = p_glam(ijis,ijjs) 166 ijj = mjs_crs(jj) + 1 167 DO ji = nldi_crs, nlei_crs 168 iji = mie_crs(ji) 169 p_gphi_crs(ji,jj) = p_gphi(iji,ijj) 170 p_glam_crs(ji,jj) = p_glam(iji,ijj) 171 247 172 ENDDO 248 173 ENDDO 249 174 CASE ( 'V' ) 250 175 DO jj = nldj_crs, nlej_crs 251 ijj s = mjs_crs(jj)252 DO ji = 2, nlei_crs253 iji s = mis_crs(ji) + mxbinctr254 p_gphi_crs(ji,jj) = p_gphi(iji s,ijjs)255 p_glam_crs(ji,jj) = p_glam(iji s,ijjs)176 ijj = mje_crs(jj) 177 DO ji = nldi_crs, nlei_crs 178 iji = mis_crs(ji) + 1 179 p_gphi_crs(ji,jj) = p_gphi(iji,ijj) 180 p_glam_crs(ji,jj) = p_glam(iji,ijj) 256 181 ENDDO 257 182 ENDDO 258 183 CASE ( 'F' ) 259 184 DO jj = nldj_crs, nlej_crs 260 ijj s = mjs_crs(jj)261 DO ji = 2, nlei_crs262 iji s = mis_crs(ji)263 p_gphi_crs(ji,jj) = p_gphi(iji s,ijjs)264 p_glam_crs(ji,jj) = p_glam(iji s,ijjs)185 ijj = mje_crs(jj) 186 DO ji = nldi_crs, nlei_crs 187 iji = mie_crs(ji) 188 p_gphi_crs(ji,jj) = p_gphi(iji,ijj) 189 p_glam_crs(ji,jj) = p_glam(iji,ijj) 265 190 ENDDO 266 191 ENDDO … … 271 196 CALL crs_lbc_lnk( p_glam_crs, cd_type, 1.0 ) 272 197 273 ! Fill up jrow=1 which is zeroed out or not handled by lbc_lnk and lbc_nfd274 SELECT CASE ( cd_type )275 CASE ( 'T', 'V' )276 DO ji = 2, nlei_crs277 ijis = mis_crs(ji) + mxbinctr278 p_gphi_crs(ji,1) = p_gphi(ijis,1)279 p_glam_crs(ji,1) = p_glam(ijis,1)280 ENDDO281 CASE ( 'U', 'F' )282 DO ji = 2, nlei_crs283 ijis = mis_crs(ji)284 p_gphi_crs(ji,1) = p_gphi(ijis,1)285 p_glam_crs(ji,1) = p_glam(ijis,1)286 ENDDO287 END SELECT198 !cbr??? ! Fill up jrow=1 which is zeroed out or not handled by lbc_lnk and lbc_nfd 199 ! SELECT CASE ( cd_type ) 200 ! CASE ( 'T', 'V' ) 201 ! DO ji = 2, nlei_crs 202 ! ijis = mis_crs(ji) + mxbinctr 203 ! p_gphi_crs(ji,1) = p_gphi(ijis,1) 204 ! p_glam_crs(ji,1) = p_glam(ijis,1) 205 ! ENDDO 206 ! CASE ( 'U', 'F' ) 207 ! DO ji = 2, nlei_crs 208 ! ijis = mis_crs(ji) 209 ! p_gphi_crs(ji,1) = p_gphi(ijis,1) 210 ! p_glam_crs(ji,1) = p_glam(ijis,1) 211 ! ENDDO 212 ! END SELECT 288 213 ! 289 214 END SUBROUTINE crs_dom_coordinates … … 317 242 !! Local variables 318 243 INTEGER :: ji, jj, jk ! dummy loop indices 319 INTEGER :: ijie,ijje,ijrs 244 INTEGER :: ijis,ijie,ijjs,ijje 245 INTEGER :: ji1, jj1 320 246 321 247 !!---------------------------------------------------------------- 322 248 ! Initialize 323 249 324 DO jk = 1, jpk 325 DO ji = 2, nlei_crs 250 DO ji = nldi_crs, nlei_crs 251 252 ijis = mis_crs(ji) 326 253 ijie = mie_crs(ji) 254 327 255 DO jj = nldj_crs, nlej_crs 328 ijje = mje_crs(jj) ; ijrs = mje_crs(jj) - mjs_crs(jj) 256 257 ijjs = mjs_crs(jj) 258 ijje = mje_crs(jj) 259 329 260 ! Only for a factro 3 coarsening 330 261 SELECT CASE ( cd_type ) 331 262 CASE ( 'T' ) 332 IF( ijrs == 0 .OR. ijrs == 1 ) THEN 333 ! Si à la frontière sud on a pas assez de maille de la grille mère 334 p_e1_crs(ji,jj) = p_e1(ijie-1,ijje) * nn_factx 335 p_e2_crs(ji,jj) = p_e2(ijie-1,ijje) * nn_facty 336 ELSE 337 p_e1_crs(ji,jj) = p_e1(ijie-1,ijje-1) * nn_factx 338 p_e2_crs(ji,jj) = p_e2(ijie-1,ijje-1) * nn_facty 339 ENDIF 263 !p_e1_crs(ji,jj) = SUM( p_e1(ijis:ijie ,ijjs+1 ) ) 264 !p_e2_crs(ji,jj) = SUM( p_e2(ijis+1 ,ijjs:ijje ) ) 265 p_e1_crs(ji,jj) = REAL(nn_factx,wp)*p_e1(ijis+1,ijjs+1) 266 p_e2_crs(ji,jj) = REAL(nn_facty,wp)*p_e2(ijis+1,ijjs+1) 340 267 CASE ( 'U' ) 341 IF( ijrs == 0 .OR. ijrs == 1 ) THEN 342 ! Si à la frontière sud on a pas assez de maille de la grille mère 343 p_e1_crs(ji,jj) = p_e1(ijie,ijje) * nn_factx 344 p_e2_crs(ji,jj) = p_e2(ijie,ijje) * nn_facty 345 ELSE 346 p_e1_crs(ji,jj) = p_e1(ijie,ijje-1) * nn_factx 347 p_e2_crs(ji,jj) = p_e2(ijie,ijje-1) * nn_facty 348 ENDIF 268 !p_e1_crs(ji,jj) = SUM( p_e1(ijis+1:ijie+1 ,ijjs+1 ) ) 269 !p_e2_crs(ji,jj) = SUM( p_e2(ijie ,ijjs:ijje ) ) 270 p_e1_crs(ji,jj) = REAL(nn_factx,wp)*p_e1(ijis+1,ijjs+1 ) 271 p_e2_crs(ji,jj) = REAL(nn_facty,wp)*p_e2(ijie ,ijjs+1 ) 272 349 273 CASE ( 'V' ) 350 p_e1_crs(ji,jj) = p_e1(ijie-1,ijje) * nn_factx 351 p_e2_crs(ji,jj) = p_e2(ijie-1,ijje) * nn_facty 274 !p_e1_crs(ji,jj) = SUM( p_e1(ijis:ijie ,ijje ) ) 275 !p_e2_crs(ji,jj) = SUM( p_e2(ijis+1 ,ijjs+1:ijje+1) ) 276 p_e1_crs(ji,jj) = REAL(nn_factx,wp)*p_e1(ijis+1,ijje ) 277 p_e2_crs(ji,jj) = REAL(nn_facty,wp)*p_e2(ijis+1,ijjs+1 ) 352 278 CASE ( 'F' ) 353 p_e1_crs(ji,jj) = p_e1(ijie,ijje) * nn_factx 354 p_e2_crs(ji,jj) = p_e2(ijie,ijje) * nn_facty 279 !p_e1_crs(ji,jj) = SUM( p_e1(ijis+1:ijie+1 ,ijje ) ) 280 !p_e2_crs(ji,jj) = SUM( p_e2(ijie ,ijjs+1:ijje+1) ) 281 p_e1_crs(ji,jj) = REAL(nn_factx,wp)*p_e1(ijis+1,ijje ) 282 p_e2_crs(ji,jj) = REAL(nn_facty,wp)*p_e2(ijie ,ijjs+1 ) 355 283 END SELECT 356 284 ENDDO 357 285 ENDDO 358 ENDDO 359 360 CALL crs_lbc_lnk( p_e1_crs, cd_type, 1.0 , pval=1.0 )361 CALL crs_lbc_lnk( p_e2_crs, cd_type, 1.0 , pval=1.0 )286 287 288 CALL crs_lbc_lnk( p_e1_crs, cd_type, 1.0 ) !cbr , pval=1.0 ) 289 CALL crs_lbc_lnk( p_e2_crs, cd_type, 1.0 ) !cbr , pval=1.0 ) 362 290 363 291 END SUBROUTINE crs_dom_hgr … … 416 344 !! Local variables 417 345 REAL(wp) :: zdAm 418 INTEGER :: ji, jj, jk , ii, ij, je_2 346 INTEGER :: ji, jj, jk 347 INTEGER :: ijis,ijie,ijjs,ijje 419 348 420 349 REAL(wp), DIMENSION(:,:,:), POINTER :: zvol, zmask … … 427 356 428 357 DO jk = 1, jpk 429 zvol(:,:,jk) = p_e1(:,:) * p_e2(:,:) * p_e3(:,:,jk) 358 zvol (:,:,jk) = p_e1(:,:) * p_e2(:,:) * p_e3(:,:,jk) 359 zmask(:,:,jk) = p_mask(:,:,jk) 430 360 ENDDO 431 361 432 zmask(:,:,:) = 0.0 433 !IF( cd_type == 'W' ) THEN 434 ! zmask(:,:,1) = p_mask(:,:,1) 435 ! DO jk = 2, jpk 436 ! zmask(:,:,jk) = p_mask(:,:,jk-1) 437 ! ENDDO 438 !ELSE 439 DO jk = 1, jpk 440 zmask(:,:,jk) = p_mask(:,:,jk) 441 ENDDO 442 !ENDIF 443 444 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA2 445 IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 446 je_2 = mje_crs(2) 447 DO jk = 1, jpk 448 DO ji = nistr, niend, nn_factx 449 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 ! cordinate in parent grid 450 p_fld1_crs(ii,2,jk) = zvol(ji,je_2 ,jk) + zvol(ji+1,je_2 ,jk) + zvol(ji+2,je_2 ,jk) & 451 & + zvol(ji,je_2-1,jk) + zvol(ji+1,je_2-1,jk) + zvol(ji+2,je_2-1,jk) 452 ! 453 zdAm = zvol(ji ,je_2,jk) * zmask(ji ,je_2,jk) & 454 & + zvol(ji+1,je_2,jk) * zmask(ji+1,je_2,jk) & 455 & + zvol(ji+2,je_2,jk) * zmask(ji+2,je_2,jk) 456 ! 457 p_fld2_crs(ii,2,jk) = zdAm / p_fld1_crs(ii,2,jk) 458 ENDDO 459 ENDDO 460 ENDIF 461 ELSE 462 je_2 = mjs_crs(2) 463 DO jk = 1, jpk 464 DO ji = nistr, niend, nn_factx 465 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 466 p_fld1_crs(ii,2,jk) = zvol(ji,je_2 ,jk) + zvol(ji+1,je_2 ,jk) + zvol(ji+2,je_2 ,jk) & 467 & + zvol(ji,je_2+1,jk) + zvol(ji+1,je_2+1,jk) + zvol(ji+2,je_2+1,jk) & 468 & + zvol(ji,je_2+2,jk) + zvol(ji+1,je_2+2,jk) + zvol(ji+2,je_2+2,jk) 469 ! 470 zdAm = zvol(ji ,je_2 ,jk) * zmask(ji ,je_2 ,jk) & 471 & + zvol(ji+1,je_2 ,jk) * zmask(ji+1,je_2 ,jk) & 472 & + zvol(ji+2,je_2 ,jk) * zmask(ji+2,je_2 ,jk) & 473 & + zvol(ji ,je_2+1,jk) * zmask(ji ,je_2+1,jk) & 474 & + zvol(ji+1,je_2+1,jk) * zmask(ji+1,je_2+1,jk) & 475 & + zvol(ji+2,je_2+1,jk) * zmask(ji+2,je_2+1,jk) & 476 & + zvol(ji ,je_2+2,jk) * zmask(ji ,je_2+2,jk) & 477 & + zvol(ji+1,je_2+2,jk) * zmask(ji+1,je_2+2,jk) & 478 & + zvol(ji+2,je_2+2,jk) * zmask(ji+2,je_2+2,jk) 479 ! 480 p_fld2_crs(ii,2,jk) = zdAm / p_fld1_crs(ii,2,jk) 481 ENDDO 482 ENDDO 483 ENDIF 484 485 DO jk = 1, jpk 486 DO jj = njstr, njend, nn_facty 487 DO ji = nistr, niend, nn_factx 488 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 ! cordinate in parent grid 489 ij = ( jj - njstr ) * rfacty_r + 3 490 ! 491 p_fld1_crs(ii,ij,jk) = zvol(ji,jj ,jk) + zvol(ji+1,jj ,jk) + zvol(ji+2,jj ,jk) & 492 & + zvol(ji,jj+1,jk) + zvol(ji+1,jj+1,jk) + zvol(ji+2,jj+1,jk) & 493 & + zvol(ji,jj+2,jk) + zvol(ji+1,jj+2,jk) + zvol(ji+2,jj+2,jk) 494 ! 495 zdAm = zvol(ji ,jj ,jk) * zmask(ji ,jj ,jk) & 496 & + zvol(ji+1,jj ,jk) * zmask(ji+1,jj ,jk) & 497 & + zvol(ji+2,jj ,jk) * zmask(ji+2,jj ,jk) & 498 & + zvol(ji ,jj+1,jk) * zmask(ji ,jj+1,jk) & 499 & + zvol(ji+1,jj+1,jk) * zmask(ji+1,jj+1,jk) & 500 & + zvol(ji+2,jj+1,jk) * zmask(ji+2,jj+1,jk) & 501 & + zvol(ji ,jj+2,jk) * zmask(ji ,jj+2,jk) & 502 & + zvol(ji+1,jj+2,jk) * zmask(ji+1,jj+2,jk) & 503 & + zvol(ji+2,jj+2,jk) * zmask(ji+2,jj+2,jk) 504 ! 505 p_fld2_crs(ii,ij,jk) = zdAm / p_fld1_crs(ii,ij,jk) 362 DO jk = 1, jpk 363 DO ji = nldi_crs, nlei_crs 364 365 ijis = mis_crs(ji) 366 ijie = mie_crs(ji) 367 368 DO jj = nldj_crs, nlej_crs 369 370 ijjs = mjs_crs(jj) 371 ijje = mje_crs(jj) 372 373 p_fld1_crs(ji,jj,jk) = SUM( zvol(ijis:ijie,ijjs:ijje,jk) ) 374 zdAm = SUM( zvol(ijis:ijie,ijjs:ijje,jk) * zmask(ijis:ijie,ijjs:ijje,jk) ) 375 p_fld2_crs(ji,jj,jk) = zdAm / p_fld1_crs(ji,jj,jk) 506 376 ENDDO 507 377 ENDDO … … 551 421 REAL(wp), INTENT(in) :: psgn ! sign 552 422 553 554 423 REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(out) :: p_fld_crs ! Coarse grid box 3D quantity 555 424 556 425 !! Local variables 557 426 INTEGER :: ji, jj, jk 558 INTEGER :: i i, ij, ijie, ijje, je_2427 INTEGER :: ijis, ijie, ijjs, ijje 559 428 REAL(wp) :: zflcrs, zsfcrs 560 429 REAL(wp), DIMENSION(:,:,:), POINTER :: zsurf, zsurfmsk, zmask,ztabtmp 561 INTEGER :: iji, ijj562 430 INTEGER :: ir,jr 563 431 REAL(wp), DIMENSION(nn_factx,nn_facty):: ztmp … … 579 447 580 448 CASE( 'T', 'W' ) 581 !IF( cd_type == 'T' ) THEN 582 DO jk = 1, jpk 583 zsurf (:,:,jk) = p_e12(:,:) * p_e3(:,:,jk) * p_mask(:,:,jk) 584 zsurfmsk(:,:,jk) = zsurf(:,:,jk) 585 ENDDO 586 !ELSE 587 ! !cbr ???????????????????????????????? 588 ! zsurf (:,:,1) = p_e12(:,:) * p_e3(:,:,1) 589 ! zsurfmsk(:,:,1) = zsurf(:,:,1) * p_mask(:,:,1) 590 ! DO jk = 2, jpk 591 ! zsurf (:,:,jk) = p_e12(:,:) * p_e3(:,:,jk) 592 ! zsurfmsk(:,:,jk) = zsurf(:,:,jk) * p_mask(:,:,jk-1) 593 ! ENDDO 594 !ENDIF 595 596 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA2 597 IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 598 je_2 = mje_crs(2) 599 DO jk = 1, jpk 600 DO ji = nistr, niend, nn_factx 601 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 602 zflcrs = p_fld(ji ,je_2,jk) * zsurfmsk(ji ,je_2,jk) & 603 & + p_fld(ji+1,je_2,jk) * zsurfmsk(ji+1,je_2,jk) & 604 & + p_fld(ji+2,je_2,jk) * zsurfmsk(ji+2,je_2,jk) 605 606 zsfcrs = zsurf(ji,je_2,jk) + zsurf(ji+1,je_2,jk) + zsurf(ji+2,je_2,jk) 607 ! 608 p_fld_crs(ii,2,jk) = zflcrs 609 IF( zsfcrs /= 0.0 ) p_fld_crs(ii,2,jk) = zflcrs / zsfcrs 610 ENDDO 611 ENDDO 612 ENDIF 613 ELSE 614 je_2 = mjs_crs(2) 615 DO jk = 1, jpk 616 DO ji = nistr, niend, nn_factx 617 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 618 zflcrs = p_fld(ji ,je_2 ,jk) * zsurfmsk(ji ,je_2 ,jk) & 619 & + p_fld(ji+1,je_2 ,jk) * zsurfmsk(ji+1,je_2 ,jk) & 620 & + p_fld(ji+2,je_2 ,jk) * zsurfmsk(ji+2,je_2 ,jk) & 621 & + p_fld(ji ,je_2+1,jk) * zsurfmsk(ji ,je_2+1,jk) & 622 & + p_fld(ji+1,je_2+1,jk) * zsurfmsk(ji+1,je_2+1,jk) & 623 & + p_fld(ji+2,je_2+1,jk) * zsurfmsk(ji+2,je_2+1,jk) & 624 & + p_fld(ji ,je_2+2,jk) * zsurfmsk(ji ,je_2+2,jk) & 625 & + p_fld(ji+1,je_2+2,jk) * zsurfmsk(ji+1,je_2+2,jk) & 626 & + p_fld(ji+2,je_2+2,jk) * zsurfmsk(ji+2,je_2+2,jk) 627 628 zsfcrs = zsurf(ji,je_2 ,jk) + zsurf(ji+1,je_2 ,jk) + zsurf(ji+2,je_2 ,jk) & 629 & + zsurf(ji,je_2+1,jk) + zsurf(ji+1,je_2+1,jk) + zsurf(ji+2,je_2+1,jk) & 630 & + zsurf(ji,je_2+2,jk) + zsurf(ji+1,je_2+2,jk) + zsurf(ji+2,je_2+2,jk) 631 ! 632 p_fld_crs(ii,2,jk) = zflcrs 633 IF( zsfcrs /= 0.0 ) p_fld_crs(ii,2,jk) = zflcrs / zsfcrs 634 ENDDO 635 ENDDO 636 ENDIF 449 DO jk = 1, jpk 450 zsurf (:,:,jk) = p_e12(:,:) * p_e3(:,:,jk) * p_mask(:,:,jk) 451 zsurfmsk(:,:,jk) = zsurf(:,:,jk) 452 ENDDO 637 453 ! 638 DO jk = 1, jpk 639 DO jj = njstr, njend, nn_facty 640 DO ji = nistr, niend, nn_factx 641 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 ! cordinate in parent grid 642 ij = ( jj - njstr ) * rfacty_r + 3 643 zflcrs = p_fld(ji ,jj ,jk) * zsurfmsk(ji ,jj ,jk) & 644 & + p_fld(ji+1,jj ,jk) * zsurfmsk(ji+1,jj ,jk) & 645 & + p_fld(ji+2,jj ,jk) * zsurfmsk(ji+2,jj ,jk) & 646 & + p_fld(ji ,jj+1,jk) * zsurfmsk(ji ,jj+1,jk) & 647 & + p_fld(ji+1,jj+1,jk) * zsurfmsk(ji+1,jj+1,jk) & 648 & + p_fld(ji+2,jj+1,jk) * zsurfmsk(ji+2,jj+1,jk) & 649 & + p_fld(ji ,jj+2,jk) * zsurfmsk(ji ,jj+2,jk) & 650 & + p_fld(ji+1,jj+2,jk) * zsurfmsk(ji+1,jj+2,jk) & 651 & + p_fld(ji+2,jj+2,jk) * zsurfmsk(ji+2,jj+2,jk) 652 zsfcrs = zsurf(ji,jj ,jk) + zsurf(ji+1,jj ,jk) + zsurf(ji+2,jj ,jk) & 653 & + zsurf(ji,jj+1,jk) + zsurf(ji+1,jj+1,jk) + zsurf(ji+2,jj+1,jk) & 654 & + zsurf(ji,jj+2,jk) + zsurf(ji+1,jj+2,jk) + zsurf(ji+2,jj+2,jk) 655 ! 656 !cbr IF( ieee_is_nan(p_fld_crs(ii,ij,jk))) THEN 657 658 p_fld_crs(ii,ij,jk) = zflcrs 659 IF( zsfcrs /= 0.0 ) p_fld_crs(ii,ij,jk) = zflcrs / zsfcrs 454 DO jk = 1, jpk 455 DO jj = nldj_crs,nlej_crs 456 ijjs = mjs_crs(jj) 457 ijje = mje_crs(jj) 458 DO ji = nldi_crs, nlei_crs 459 460 ijis = mis_crs(ji) 461 ijie = mie_crs(ji) 462 463 zflcrs = SUM( p_fld(ijis:ijie,ijjs:ijje,jk) * zsurfmsk(ijis:ijie,ijjs:ijje,jk) ) 464 zsfcrs = SUM( zsurfmsk(ijis:ijie,ijjs:ijje,jk) ) 465 466 p_fld_crs(ji,jj,jk) = zflcrs 467 IF( zsfcrs /= 0.0 ) p_fld_crs(ji,jj,jk) = zflcrs / zsfcrs 660 468 ENDDO 661 469 ENDDO 662 470 ENDDO 471 ! 663 472 CASE DEFAULT 664 473 STOP 665 END SELECT 666 667 CALL wrk_dealloc( jpi, jpj, jpk, zsurf, zsurfmsk ) 474 END SELECT 475 476 CALL wrk_dealloc( jpi, jpj, jpk, zsurf, zsurfmsk ) 477 668 478 CASE ( 'LOGVOL' ) 669 479 670 480 CALL wrk_alloc( jpi, jpj, jpk, zsurf, zsurfmsk, ztabtmp ) 671 672 zmin=MINVAL(p_fld) ; zmax=MAXVAL(p_fld);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"p_fld",zmin,zmax; CALL flush(numout)673 481 674 482 ztabtmp(:,:,:)=0._wp 675 483 WHERE(p_fld* p_mask .NE. 0._wp ) ztabtmp = LOG10(p_fld * p_mask)*p_mask 676 zmin=MINVAL(ztabtmp) ; zmax=MAXVAL(ztabtmp);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"LOG()",zmin,zmax; CALL flush(numout)677 484 ztabtmp = ztabtmp * p_mask 678 zmin=MINVAL(ztabtmp) ; zmax=MAXVAL(ztabtmp);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"LOG()*tmask",zmin,zmax; CALL flush(numout)679 485 680 486 SELECT CASE ( cd_type ) 681 487 682 488 CASE( 'T', 'W' ) 683 DO jk = 1, jpk 684 zsurf (:,:,jk) = p_e12(:,:) * p_e3(:,:,jk) * p_mask(:,:,jk) 685 zsurfmsk(:,:,jk) = zsurf(:,:,jk) 686 ENDDO 687 688 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA2 689 IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 690 je_2 = mje_crs(2) 691 DO jk = 1, jpk 692 DO ji = nistr, niend, nn_factx 693 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 694 zflcrs = ztabtmp(ji ,je_2,jk) * zsurfmsk(ji ,je_2,jk) & 695 & + ztabtmp(ji+1,je_2,jk) * zsurfmsk(ji+1,je_2,jk) & 696 & + ztabtmp(ji+2,je_2,jk) * zsurfmsk(ji+2,je_2,jk) 697 698 zsfcrs = zsurf(ji,je_2,jk) + zsurf(ji+1,je_2,jk) + zsurf(ji+2,je_2,jk) 699 ! 700 p_fld_crs(ii,2,jk) = 0._wp 701 IF( zsfcrs /= 0.0 ) p_fld_crs(ii,2,jk) = zflcrs / zsfcrs 702 p_fld_crs(ii,2,jk) = 10 ** ( p_fld_crs(ii,2,jk) * p_mask_crs(ii,2,jk) ) * p_mask_crs(ii,2,jk) 703 ENDDO 704 ENDDO 705 ENDIF 706 ELSE 707 je_2 = mjs_crs(2) 708 DO jk = 1, jpk 709 DO ji = nistr, niend, nn_factx 710 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 711 zflcrs = ztabtmp(ji ,je_2 ,jk) * zsurfmsk(ji ,je_2 ,jk) & 712 & + ztabtmp(ji+1,je_2 ,jk) * zsurfmsk(ji+1,je_2 ,jk) & 713 & + ztabtmp(ji+2,je_2 ,jk) * zsurfmsk(ji+2,je_2 ,jk) & 714 & + ztabtmp(ji ,je_2+1,jk) * zsurfmsk(ji ,je_2+1,jk) & 715 & + ztabtmp(ji+1,je_2+1,jk) * zsurfmsk(ji+1,je_2+1,jk) & 716 & + ztabtmp(ji+2,je_2+1,jk) * zsurfmsk(ji+2,je_2+1,jk) & 717 & + ztabtmp(ji ,je_2+2,jk) * zsurfmsk(ji ,je_2+2,jk) & 718 & + ztabtmp(ji+1,je_2+2,jk) * zsurfmsk(ji+1,je_2+2,jk) & 719 & + ztabtmp(ji+2,je_2+2,jk) * zsurfmsk(ji+2,je_2+2,jk) 720 721 zsfcrs = zsurf(ji,je_2 ,jk) + zsurf(ji+1,je_2 ,jk) + zsurf(ji+2,je_2 ,jk) & 722 & + zsurf(ji,je_2+1,jk) + zsurf(ji+1,je_2+1,jk) + zsurf(ji+2,je_2+1,jk) & 723 & + zsurf(ji,je_2+2,jk) + zsurf(ji+1,je_2+2,jk) + zsurf(ji+2,je_2+2,jk) 724 ! 725 p_fld_crs(ii,2,jk) = 0._wp 726 IF( zsfcrs /= 0.0 ) p_fld_crs(ii,2,jk) = zflcrs / zsfcrs 727 p_fld_crs(ii,2,jk) = 10 ** ( p_fld_crs(ii,2,jk) * p_mask_crs(ii,2,jk) ) * p_mask_crs(ii,2,jk) 489 490 DO jk = 1, jpk 491 zsurf (:,:,jk) = p_e12(:,:) * p_e3(:,:,jk) * p_mask(:,:,jk) 492 zsurfmsk(:,:,jk) = zsurf(:,:,jk) 493 ENDDO 494 ! 495 DO jk = 1, jpk 496 DO jj = nldj_crs,nlej_crs 497 ijjs = mjs_crs(jj) 498 ijje = mje_crs(jj) 499 DO ji = nldi_crs, nlei_crs 500 ijis = mis_crs(ji) 501 ijie = mie_crs(ji) 502 zflcrs = SUM( p_fld(ijis:ijie,ijjs:ijje,jk) * zsurfmsk(ijis:ijie,ijjs:ijje,jk) ) 503 zsfcrs = SUM( zsurfmsk(ijis:ijie,ijjs:ijje,jk) ) 504 p_fld_crs(ji,jj,jk) = zflcrs 505 IF( zsfcrs /= 0.0 ) p_fld_crs(ji,jj,jk) = zflcrs / zsfcrs 506 p_fld_crs(ji,jj,jk) = 10 ** ( p_fld_crs(ji,jj,jk) * p_mask_crs(ji,jj,jk) ) * p_mask_crs(ji,jj,jk) 728 507 ENDDO 729 508 ENDDO 730 ENDIF 509 ENDDO 510 CASE DEFAULT 511 STOP 512 END SELECT 513 514 CALL wrk_dealloc( jpi, jpj, jpk, zsurf, zsurfmsk ,ztabtmp ) 515 516 CASE ( 'MED' ) 517 518 CALL wrk_alloc( jpi, jpj, jpk, zsurf, zsurfmsk ) 519 520 SELECT CASE ( cd_type ) 521 522 CASE( 'T', 'W' ) 523 DO jk = 1, jpk 524 zsurf (:,:,jk) = p_e12(:,:) * p_e3(:,:,jk) * p_mask(:,:,jk) 525 zsurfmsk(:,:,jk) = zsurf(:,:,jk) 526 ENDDO 731 527 ! 732 528 DO jk = 1, jpk 733 DO jj = njstr, njend, nn_facty 734 DO ji = nistr, niend, nn_factx 735 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 ! cordinate in parent grid 736 ij = ( jj - njstr ) * rfacty_r + 3 737 zflcrs = ztabtmp(ji ,jj ,jk) * zsurfmsk(ji ,jj ,jk) & 738 & + ztabtmp(ji+1,jj ,jk) * zsurfmsk(ji+1,jj ,jk) & 739 & + ztabtmp(ji+2,jj ,jk) * zsurfmsk(ji+2,jj ,jk) & 740 & + ztabtmp(ji ,jj+1,jk) * zsurfmsk(ji ,jj+1,jk) & 741 & + ztabtmp(ji+1,jj+1,jk) * zsurfmsk(ji+1,jj+1,jk) & 742 & + ztabtmp(ji+2,jj+1,jk) * zsurfmsk(ji+2,jj+1,jk) & 743 & + ztabtmp(ji ,jj+2,jk) * zsurfmsk(ji ,jj+2,jk) & 744 & + ztabtmp(ji+1,jj+2,jk) * zsurfmsk(ji+1,jj+2,jk) & 745 & + ztabtmp(ji+2,jj+2,jk) * zsurfmsk(ji+2,jj+2,jk) 746 zsfcrs = zsurf(ji,jj ,jk) + zsurf(ji+1,jj ,jk) + zsurf(ji+2,jj ,jk) & 747 & + zsurf(ji,jj+1,jk) + zsurf(ji+1,jj+1,jk) + zsurf(ji+2,jj+1,jk) & 748 & + zsurf(ji,jj+2,jk) + zsurf(ji+1,jj+2,jk) + zsurf(ji+2,jj+2,jk) 749 ! 750 p_fld_crs(ii,ij,jk) = 0._wp 751 IF( zsfcrs /= 0.0 ) p_fld_crs(ii,ij,jk) = zflcrs / zsfcrs 752 p_fld_crs(ii,ij,jk) = 10 ** ( p_fld_crs(ii,ij,jk) * p_mask_crs(ii,ij,jk) ) * p_mask_crs(ii,ij,jk) 753 ENDDO 754 ENDDO 755 ENDDO 756 CASE DEFAULT 757 STOP 758 END SELECT 759 760 761 !WHERE( p_fld .NE. 0._wp ) p_fld=10**(p_fld) 762 !zmin=MINVAL(p_fld) ; zmax=MAXVAL(p_fld);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"10**(p_fld)",zmin,zmax ; CALL flush(numout) 763 !p_fld = p_fld * p_mask 764 !zmin=MINVAL(p_fld) ; zmax=MAXVAL(p_fld);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"10**(p_fld)*tmask",zmin,zmax ; CALL flush(numout) 765 766 zmin=MINVAL(p_fld_crs) ; zmax=MAXVAL(p_fld_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"p_fld_crs",zmin,zmax; CALL flush(numout) 767 !p_fld_crs=10**(p_fld_crs*p_mask_crs) 768 !zmin=MINVAL(p_fld_crs) ; zmax=MAXVAL(p_fld_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"10**(p_fld_crs)",zmin,zmax; CALL flush(numout) 769 !p_fld_crs=p_fld_crs*p_mask_crs 770 !zmin=MINVAL(p_fld_crs) ; zmax=MAXVAL(p_fld_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"10**(p_fld_crs)*tmask",zmin,zmax; CALL flush(numout) 771 772 CALL wrk_dealloc( jpi, jpj, jpk, zsurf, zsurfmsk ,ztabtmp ) 773 CASE ( 'MED' ) 774 775 CALL wrk_alloc( jpi, jpj, jpk, zsurf, zsurfmsk ) 776 777 SELECT CASE ( cd_type ) 778 779 CASE( 'T', 'W' ) 780 DO jk = 1, jpk 781 zsurf (:,:,jk) = p_e12(:,:) * p_e3(:,:,jk) * p_mask(:,:,jk) 782 zsurfmsk(:,:,jk) = zsurf(:,:,jk) 783 ENDDO 784 785 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA2 786 IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 787 je_2 = mje_crs(2) 788 DO jk = 1, jpk 789 DO ji = nistr, niend, nn_factx 790 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 791 792 ztmp1(:) = 0._wp 793 ztmp1(1:3) = p_fld(ji:ji+2,je_2,jk) 794 CALL PIKSRT(nn_factx*nn_facty,ztmp1) 795 ir=0 796 jr=1 797 DO WHILE( jr .LE. nn_factx*nn_facty ) 798 IF( ztmp1(jr) == 0. )THEN 799 ir=jr 800 jr=jr+1 801 ELSE 802 EXIT 803 ENDIF 804 ENDDO 805 IF( ir .LE. nn_factx*nn_facty-1 )THEN 806 ALLOCATE( ztmp2(nn_factx*nn_facty-ir) ) 807 ztmp2(1:nn_factx*nn_facty-ir) = ztmp1(1+ir:nn_factx*nn_facty) 808 jr=INT( 0.5 * REAL(nn_factx*nn_facty-ir,wp) )+1 809 p_fld_crs(ii,2,jk) = ztmp2(jr) 810 DEALLOCATE( ztmp2 ) 811 ELSE 812 p_fld_crs(ii,ij,jk) = 0._wp 813 ENDIF 814 815 ENDDO 816 ENDDO 817 ENDIF 818 ELSE 819 je_2 = mjs_crs(2) 820 DO jk = 1, jpk 821 DO ji = nistr, niend, nn_factx 822 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 823 824 ztmp(:,:)= p_fld(ji:ji+2,je_2:je_2+2,jk) 825 zdim1(1)=nn_factx*nn_facty 529 DO jj = nldj_crs,nlej_crs 530 ijjs = mjs_crs(jj) 531 ijje = mje_crs(jj) 532 DO ji = nldi_crs, nlei_crs 533 ijis = mis_crs(ji) 534 ijie = mie_crs(ji) 535 536 ztmp(:,:)= p_fld(ijis:ijie,ijjs:ijje,jk) 537 zdim1(1) = nn_factx*nn_facty 826 538 ztmp1(:) = RESHAPE( ztmp(:,:) , zdim1 ) 827 539 CALL PIKSRT(nn_factx*nn_facty,ztmp1) 540 828 541 ir=0 829 542 jr=1 … … 840 553 ztmp2(1:nn_factx*nn_facty-ir) = ztmp1(1+ir:nn_factx*nn_facty) 841 554 jr=INT( 0.5 * REAL(nn_factx*nn_facty-ir,wp) )+1 842 p_fld_crs( ii,2,jk) = ztmp2(jr)555 p_fld_crs(ji,jj,jk) = ztmp2(jr) 843 556 DEALLOCATE( ztmp2 ) 844 557 ELSE 845 p_fld_crs(ii,ij,jk) = 0._wp558 p_fld_crs(ji,jj,jk) = 0._wp 846 559 ENDIF 847 560 848 561 ENDDO 849 562 ENDDO 850 ENDIF851 !852 DO jk = 1, jpk853 DO jj = njstr, njend, nn_facty854 DO ji = nistr, niend, nn_factx855 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 ! cordinate in parent grid856 ij = ( jj - njstr ) * rfacty_r + 3857 858 ztmp(:,:)= p_fld(ji:ji+2,jj:jj+2,jk)859 zdim1(1)=nn_factx*nn_facty860 ztmp1(:) = RESHAPE( ztmp(:,:) , zdim1 )861 CALL PIKSRT(nn_factx*nn_facty,ztmp1)862 ir=0863 jr=1864 DO WHILE( jr .LE. nn_factx*nn_facty )865 IF( ztmp1(jr) == 0. ) THEN866 ir=jr867 jr=jr+1868 ELSE869 EXIT870 ENDIF871 ENDDO872 IF( ir .LE. nn_factx*nn_facty-1 )THEN873 ALLOCATE( ztmp2(nn_factx*nn_facty-ir) )874 ztmp2(1:nn_factx*nn_facty-ir) = ztmp1(1+ir:nn_factx*nn_facty)875 jr=INT( 0.5 * REAL(nn_factx*nn_facty-ir,wp) )+1876 p_fld_crs(ii,ij,jk) = ztmp2(jr)877 DEALLOCATE( ztmp2 )878 ELSE879 p_fld_crs(ii,ij,jk) = 0._wp880 ENDIF881 882 ENDDO883 ENDDO884 563 ENDDO 885 564 CASE DEFAULT 886 565 STOP 887 888 889 566 END SELECT 567 568 CALL wrk_dealloc( jpi, jpj, jpk, zsurf, zsurfmsk ) 890 569 891 570 CASE ( 'SUM' ) … … 893 572 CALL wrk_alloc( jpi, jpj, jpk, zsurfmsk ) 894 573 895 SELECT CASE ( cd_type ) 896 CASE( 'W' ) 897 IF( PRESENT( p_e3 ) ) THEN 898 !cbr ????????????? 899 !zsurfmsk(:,:,1) = p_e12(:,:) * p_e3(:,:,1) * p_mask(:,:,1) 900 !DO jk = 2, jpk 901 ! zsurfmsk(:,:,jk) = p_e12(:,:) * p_e3(:,:,jk) * p_mask(:,:,jk-1) 902 !ENDDO 903 DO jk = 1, jpk 904 zsurfmsk(:,:,jk) = p_e12(:,:) * p_e3(:,:,jk) * p_mask(:,:,jk) 905 ENDDO 906 ELSE 907 !zsurfmsk(:,:,1) = p_e12(:,:) * p_mask(:,:,1) 908 !DO jk = 2, jpk 909 ! zsurfmsk(:,:,jk) = p_e12(:,:) * p_mask(:,:,jk-1) 910 !ENDDO 911 DO jk = 1, jpk 912 zsurfmsk(:,:,jk) = p_e12(:,:) * p_mask(:,:,jk) 913 ENDDO 914 ENDIF 915 CASE DEFAULT 916 IF( PRESENT( p_e3 ) ) THEN 917 DO jk = 1, jpk 918 zsurfmsk(:,:,jk) = p_e12(:,:) * p_e3(:,:,jk) * p_mask(:,:,jk) 919 ENDDO 920 ELSE 921 DO jk = 1, jpk 922 zsurfmsk(:,:,jk) = p_e12(:,:) * p_mask(:,:,jk) 923 ENDDO 924 ENDIF 925 END SELECT 574 IF( PRESENT( p_e3 ) ) THEN 575 DO jk = 1, jpk 576 zsurfmsk(:,:,jk) = p_e12(:,:) * p_e3(:,:,jk) * p_mask(:,:,jk) 577 ENDDO 578 ELSE 579 DO jk = 1, jpk 580 zsurfmsk(:,:,jk) = p_e12(:,:) * p_mask(:,:,jk) 581 ENDDO 582 ENDIF 926 583 927 584 SELECT CASE ( cd_type ) 928 585 929 586 CASE( 'T', 'W' ) 930 931 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA2 932 IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 933 je_2 = mje_crs(2) 934 DO jk = 1, jpk 935 DO ji = nistr, niend, nn_factx 936 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 937 zflcrs = p_fld(ji ,je_2,jk) * zsurfmsk(ji ,je_2,jk) & 938 & + p_fld(ji+1,je_2,jk) * zsurfmsk(ji+1,je_2,jk) & 939 & + p_fld(ji+2,je_2,jk) * zsurfmsk(ji+2,je_2,jk) 940 ! 941 p_fld_crs(ii,2,jk) = zflcrs 942 ENDDO 943 ENDDO 944 ENDIF 945 ELSE 946 je_2 = mjs_crs(2) 947 DO jk = 1, jpk 948 DO ji = nistr, niend, nn_factx 949 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 950 zflcrs = p_fld(ji ,je_2 ,jk) * zsurfmsk(ji ,je_2 ,jk) & 951 & + p_fld(ji+1,je_2 ,jk) * zsurfmsk(ji+1,je_2 ,jk) & 952 & + p_fld(ji+2,je_2 ,jk) * zsurfmsk(ji+2,je_2 ,jk) & 953 & + p_fld(ji ,je_2+1,jk) * zsurfmsk(ji ,je_2+1,jk) & 954 & + p_fld(ji+1,je_2+1,jk) * zsurfmsk(ji+1,je_2+1,jk) & 955 & + p_fld(ji+2,je_2+1,jk) * zsurfmsk(ji+2,je_2+1,jk) & 956 & + p_fld(ji ,je_2+2,jk) * zsurfmsk(ji ,je_2+2,jk) & 957 & + p_fld(ji+1,je_2+2,jk) * zsurfmsk(ji+1,je_2+2,jk) & 958 & + p_fld(ji+2,je_2+2,jk) * zsurfmsk(ji+2,je_2+2,jk) 959 ! 960 p_fld_crs(ii,2,jk) = zflcrs 587 588 DO jk = 1, jpk 589 DO jj = nldj_crs,nlej_crs 590 ijjs = mjs_crs(jj) 591 ijje = mje_crs(jj) 592 DO ji = nldi_crs, nlei_crs 593 ijis = mis_crs(ji) 594 ijie = mie_crs(ji) 595 596 p_fld_crs(ji,jj,jk) = SUM( p_fld(ijis:ijie,ijjs:ijje,jk) * zsurfmsk(ijis:ijie,ijjs:ijje,jk) ) 961 597 ENDDO 962 598 ENDDO 963 ENDIF 964 ! 965 DO jk = 1, jpk 966 DO jj = njstr, njend, nn_facty 967 DO ji = nistr, niend, nn_factx 968 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 ! cordinate in parent grid 969 ij = ( jj - njstr ) * rfacty_r + 3 970 zflcrs = p_fld(ji ,jj ,jk) * zsurfmsk(ji ,jj ,jk) & 971 & + p_fld(ji+1,jj ,jk) * zsurfmsk(ji+1,jj ,jk) & 972 & + p_fld(ji+2,jj ,jk) * zsurfmsk(ji+2,jj ,jk) & 973 & + p_fld(ji ,jj+1,jk) * zsurfmsk(ji ,jj+1,jk) & 974 & + p_fld(ji+1,jj+1,jk) * zsurfmsk(ji+1,jj+1,jk) & 975 & + p_fld(ji+2,jj+1,jk) * zsurfmsk(ji+2,jj+1,jk) & 976 & + p_fld(ji ,jj+2,jk) * zsurfmsk(ji ,jj+2,jk) & 977 & + p_fld(ji+1,jj+2,jk) * zsurfmsk(ji+1,jj+2,jk) & 978 & + p_fld(ji+2,jj+2,jk) * zsurfmsk(ji+2,jj+2,jk) 979 ! 980 p_fld_crs(ii,ij,jk) = zflcrs 981 ! 982 ENDDO 983 ENDDO 984 ENDDO 985 599 ENDDO 600 986 601 CASE( 'V' ) 987 602 603 988 604 DO jk = 1, jpk 989 DO ji = nistr, niend, nn_factx 990 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 991 IF( nldj_crs == 1 .AND. (( mje_crs(2) - mjs_crs(2) ) < 2) )THEN !!cc bande du sud style ORCA2 992 IF( mje_crs(2) - mjs_crs(2) == 1 )THEN 993 jj = mje_crs(2) 994 zflcrs = p_fld(ji ,jj ,jk) * zsurfmsk(ji ,jj ,jk) & 995 & + p_fld(ji+1,jj ,jk) * zsurfmsk(ji+1,jj ,jk) & 996 & + p_fld(ji+2,jj ,jk) * zsurfmsk(ji+2,jj ,jk) 997 998 !zsfcrs = zsurfmsk(ji ,jj ,jk) & 999 ! & + zsurfmsk(ji+1,jj ,jk) & 1000 ! & + zsurfmsk(ji+2,jj ,jk) 1001 1002 !IF( zsfcrs == 0 ) THEN ; p_fld_crs(ii,2,jk) = zflcrs 1003 !ELSE ; p_fld_crs(ii,2,jk) = zflcrs / zsfcrs 1004 !ENDIF 1005 ENDIF 1006 ELSE 1007 ijje = mje_crs(2) 1008 zflcrs = p_fld(ji ,ijje,jk) * zsurfmsk(ji ,ijje,jk) & 1009 & + p_fld(ji+1,ijje,jk) * zsurfmsk(ji+1,ijje,jk) & 1010 & + p_fld(ji+2,ijje,jk) * zsurfmsk(ji+2,ijje,jk) 1011 ! 1012 !zsfcrs = zsurfmsk(ji ,ijje,jk) & 1013 ! & + zsurfmsk(ji+1,ijje,jk) & 1014 ! & + zsurfmsk(ji+2,ijje,jk) 1015 1016 p_fld_crs(ii,2,jk) = zflcrs 1017 !IF( zsfcrs == 0 ) THEN ; p_fld_crs(ii,2,jk) = zflcrs 1018 !ELSE ; p_fld_crs(ii,2,jk) = zflcrs / zsfcrs 1019 !ENDIF 1020 1021 ENDIF 1022 1023 DO jj = njstr, njend, nn_facty 1024 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1025 ij = ( jj - njstr ) * rfacty_r + 3 1026 ijje = mje_crs(ij) 1027 ijie = mie_crs(ii) 1028 ! 1029 zflcrs = p_fld(ji ,ijje,jk) * zsurfmsk(ji ,ijje,jk) & 1030 & + p_fld(ji+1,ijje,jk) * zsurfmsk(ji+1,ijje,jk) & 1031 & + p_fld(ji+2,ijje,jk) * zsurfmsk(ji+2,ijje,jk) 1032 ! 1033 !zsfcrs = zsurfmsk(ji ,ijje,jk) & 1034 ! & + zsurfmsk(ji+1,ijje,jk) & 1035 ! & + zsurfmsk(ji+2,ijje,jk) 1036 1037 p_fld_crs(ii,ij,jk) = zflcrs 1038 !cbr1 1039 !iji=117 ; ijj=210 1040 !iji=iji-nimpp_crs+1 ; ijj=ijj-njmpp_crs+1 1041 !IF( ii==iji .AND. ij==ijj .AND. jk==74 )THEN 1042 !WRITE(narea+5000,*)"OPE V =======> " 1043 !WRITE(narea+5000,*)ii,ij,jk 1044 !WRITE(narea+5000,*)ji,jj,ijje 1045 !WRITE(narea+5000,*)p_fld(ji ,ijje,jk) 1046 !WRITE(narea+5000,*)p_fld(ji+1,ijje,jk) 1047 !WRITE(narea+5000,*)p_fld(ji+2,ijje,jk) 1048 !WRITE(narea+5000,*)zflcrs 1049 !ENDIF 1050 1051 !IF( zsfcrs == 0 ) THEN ; p_fld_crs(ii,ij,jk) = zflcrs 1052 !ELSE ; p_fld_crs(ii,ij,jk) = zflcrs / zsfcrs 1053 !ENDIF 1054 ! 1055 !IF( ii==iji .AND. ij==ijj .AND. jk==74 )WRITE(narea+5000,*)" p_fld_crs(ii,ij,jk) = ", p_fld_crs(ii,ij,jk) 605 DO jj = nldj_crs,nlej_crs 606 ijjs = mjs_crs(jj) 607 ijje = mje_crs(jj) 608 DO ji = nldi_crs, nlei_crs 609 ijis = mis_crs(ji) 610 ijie = mie_crs(ji) 611 612 p_fld_crs(ji,jj,jk) = SUM( p_fld(ijis:ijie,ijje,jk) * zsurfmsk(ijis:ijie,ijje,jk) ) 1056 613 ENDDO 1057 614 ENDDO 1058 615 ENDDO 1059 616 1060 617 CASE( 'U' ) 1061 618 1062 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA2 1063 IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 1064 je_2 = mje_crs(2) 1065 DO jk = 1, jpk 1066 DO ji = nistr, niend, nn_factx 1067 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1068 ijie = mie_crs(ii) 1069 zflcrs = p_fld(ijie,je_2,jk) * zsurfmsk(ijie,je_2,jk) 1070 p_fld_crs(ii,2,jk) = zflcrs 1071 ENDDO 1072 ENDDO 1073 ENDIF 1074 ELSE 1075 je_2 = mjs_crs(2) 1076 DO jk = 1, jpk 1077 DO ji = nistr, niend, nn_factx 1078 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1079 ijie = mie_crs(ii) 1080 zflcrs = p_fld(ijie,je_2 ,jk) * zsurfmsk(ijie,je_2 ,jk) & 1081 & + p_fld(ijie,je_2+1,jk) * zsurfmsk(ijie,je_2+1,jk) & 1082 & + p_fld(ijie,je_2+2,jk) * zsurfmsk(ijie,je_2+2,jk) 1083 1084 p_fld_crs(ii,2,jk) = zflcrs 619 DO jk = 1, jpk 620 DO jj = nldj_crs,nlej_crs 621 ijjs = mjs_crs(jj) 622 ijje = mje_crs(jj) 623 DO ji = nldi_crs, nlei_crs 624 ijis = mis_crs(ji) 625 ijie = mie_crs(ji) 626 627 p_fld_crs(ji,jj,jk) = SUM( p_fld(ijie,ijjs:ijje,jk) * zsurfmsk(ijie,ijjs:ijje,jk) ) 1085 628 ENDDO 1086 629 ENDDO 1087 ENDIF 1088 ! 1089 DO jk = 1, jpk 1090 DO jj = njstr, njend, nn_facty 1091 DO ji = nistr, niend, nn_factx 1092 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1093 ij = ( jj - njstr ) * rfacty_r + 3 1094 ijie = mie_crs(ii) 1095 zflcrs = p_fld(ijie,jj ,jk) * zsurfmsk(ijie,jj ,jk) & 1096 & + p_fld(ijie,jj+1,jk) * zsurfmsk(ijie,jj+1,jk) & 1097 & + p_fld(ijie,jj+2,jk) * zsurfmsk(ijie,jj+2,jk) 1098 ! 1099 p_fld_crs(ii,ij,jk) = zflcrs 1100 ! 1101 ENDDO 1102 ENDDO 1103 ENDDO 630 ENDDO 1104 631 1105 632 END SELECT … … 1109 636 ENDIF 1110 637 1111 !IF(narea==267)WRITE(5000+narea,*)"vn_crs(17,5,74) end SUM = ",p_fld(17,5,74)1112 638 CALL wrk_dealloc( jpi, jpj, jpk, zsurfmsk ) 1113 639 … … 1116 642 CALL wrk_alloc( jpi, jpj, jpk, zmask ) 1117 643 1118 SELECT CASE ( cd_type ) 1119 CASE( 'W' ) 1120 zmask(:,:,1) = p_mask(:,:,1) 1121 DO jk = 2, jpk 1122 zmask(:,:,jk) = p_mask(:,:,jk-1) 1123 ENDDO 1124 CASE ( 'T' ) 1125 DO jk = 1, jpk 1126 zmask(:,:,jk) = p_mask(:,:,jk) 1127 ENDDO 1128 END SELECT 644 DO jk = 1, jpk 645 zmask(:,:,jk) = p_mask(:,:,jk) 646 ENDDO 1129 647 1130 648 SELECT CASE ( cd_type ) 1131 649 1132 650 CASE( 'T', 'W' ) 1133 1134 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA2 1135 IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 1136 je_2 = mje_crs(2) 1137 DO jk = 1, jpk 1138 DO ji = nistr, niend, nn_factx 1139 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1140 zflcrs = & 1141 & MAX( p_fld(ji ,je_2,jk) * zmask(ji ,je_2,jk) - ( 1.- zmask(ji ,je_2,jk) ) * r_inf , & 1142 & p_fld(ji+1,je_2,jk) * zmask(ji+1,je_2,jk) - ( 1.- zmask(ji+1,je_2,jk) ) * r_inf , & 1143 & p_fld(ji+2,je_2,jk) * zmask(ji+2,je_2,jk) - ( 1.- zmask(ji+2,je_2,jk) ) * r_inf ) 1144 ! 1145 p_fld_crs(ii,2,jk) = zflcrs 1146 ENDDO 1147 ENDDO 1148 ENDIF 1149 ELSE 1150 je_2 = mjs_crs(2) 1151 DO jk = 1, jpk 1152 DO ji = nistr, niend, nn_factx 1153 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1154 zflcrs = & 1155 & MAX( p_fld(ji ,je_2 ,jk) * zmask(ji ,je_2 ,jk) - ( 1.- zmask(ji ,je_2 ,jk) ) * r_inf , & 1156 & p_fld(ji+1,je_2 ,jk) * zmask(ji+1,je_2 ,jk) - ( 1.- zmask(ji+1,je_2 ,jk) ) * r_inf , & 1157 & p_fld(ji+2,je_2 ,jk) * zmask(ji+2,je_2 ,jk) - ( 1.- zmask(ji+2,je_2 ,jk) ) * r_inf , & 1158 & p_fld(ji ,je_2+1,jk) * zmask(ji ,je_2+1,jk) - ( 1.- zmask(ji ,je_2+1,jk) ) * r_inf , & 1159 & p_fld(ji+1,je_2+1,jk) * zmask(ji+1,je_2+1,jk) - ( 1.- zmask(ji+1,je_2+1,jk) ) * r_inf , & 1160 & p_fld(ji+2,je_2+1,jk) * zmask(ji+2,je_2+1,jk) - ( 1.- zmask(ji+2,je_2+1,jk) ) * r_inf , & 1161 & p_fld(ji ,je_2+2,jk) * zmask(ji ,je_2+2,jk) - ( 1.- zmask(ji ,je_2+2,jk) ) * r_inf , & 1162 & p_fld(ji+1,je_2+2,jk) * zmask(ji+1,je_2+2,jk) - ( 1.- zmask(ji+1,je_2+2,jk) ) * r_inf , & 1163 & p_fld(ji+2,je_2+2,jk) * zmask(ji+2,je_2+2,jk) - ( 1.- zmask(ji+2,je_2+2,jk) ) * r_inf ) 1164 ! 1165 p_fld_crs(ii,2,jk) = zflcrs 651 652 DO jk = 1, jpk 653 DO jj = nldj_crs,nlej_crs 654 ijjs = mjs_crs(jj) 655 ijje = mje_crs(jj) 656 DO ji = nldi_crs, nlei_crs 657 ijis = mis_crs(ji) 658 ijie = mie_crs(ji) 659 p_fld_crs(ji,jj,jk) = MAXVAL( p_fld(ijis:ijie,ijjs:ijje,jk) * zmask(ijis:ijie,ijjs:ijje,jk) - & 660 & ( ( 1._wp - zmask(ijis:ijie,ijjs:ijje,jk))* r_inf ) ) 1166 661 ENDDO 1167 662 ENDDO 1168 ENDIF 1169 ! 1170 DO jk = 1, jpk 1171 DO jj = njstr, njend, nn_facty 1172 DO ji = nistr, niend, nn_factx 1173 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 ! cordinate in parent grid 1174 ij = ( jj - njstr ) * rfacty_r + 3 1175 zflcrs = & 1176 & MAX( p_fld(ji ,jj ,jk) * zmask(ji ,jj ,jk) - ( 1.- zmask(ji ,jj ,jk) ) * r_inf , & 1177 & p_fld(ji+1,jj ,jk) * zmask(ji+1,jj ,jk) - ( 1.- zmask(ji+1,jj ,jk) ) * r_inf , & 1178 & p_fld(ji+2,jj ,jk) * zmask(ji+2,jj ,jk) - ( 1.- zmask(ji+2,jj ,jk) ) * r_inf , & 1179 & p_fld(ji ,jj+1,jk) * zmask(ji ,jj+1,jk) - ( 1.- zmask(ji ,jj+1,jk) ) * r_inf , & 1180 & p_fld(ji+1,jj+1,jk) * zmask(ji+1,jj+1,jk) - ( 1.- zmask(ji+1,jj+1,jk) ) * r_inf , & 1181 & p_fld(ji+2,jj+1,jk) * zmask(ji+2,jj+1,jk) - ( 1.- zmask(ji+2,jj+1,jk) ) * r_inf , & 1182 & p_fld(ji ,jj+2,jk) * zmask(ji ,jj+2,jk) - ( 1.- zmask(ji ,jj+2,jk) ) * r_inf , & 1183 & p_fld(ji+1,jj+2,jk) * zmask(ji+1,jj+2,jk) - ( 1.- zmask(ji+1,jj+2,jk) ) * r_inf , & 1184 & p_fld(ji+2,jj+2,jk) * zmask(ji+2,jj+2,jk) - ( 1.- zmask(ji+2,jj+2,jk) ) * r_inf ) 1185 ! 1186 p_fld_crs(ii,ij,jk) = zflcrs 1187 ! 1188 ENDDO 1189 ENDDO 1190 ENDDO 1191 663 ENDDO 664 1192 665 CASE( 'V' ) 1193 1194 ! IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA21195 ! IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN1196 ! ijje = mje_crs(2)1197 ! ENDIF1198 ! ELSE1199 ! ijje = mjs_crs(2)1200 ! ENDIF1201 !1202 ! DO jk = 1, jpk1203 ! DO ji = nistr, niend, nn_factx1204 ! ii = ( ji - mis_crs(2) ) * rfactx_r + 21205 ! zflcrs = &1206 ! & MAX( p_fld(ji ,ijje,jk) * p_mask(ji ,ijje,jk) - ( 1.- p_mask(ji,ijje,jk) ) * r_inf , &1207 ! & p_fld(ji+1,ijje,jk) * p_mask(ji+1,ijje,jk) - ( 1.- p_mask(ji,ijje,jk) ) * r_inf , &1208 ! & p_fld(ji+2,ijje,jk) * p_mask(ji+2,ijje,jk) - ( 1.- p_mask(ji,ijje,jk) ) * r_inf )1209 ! !1210 ! p_fld_crs(ii,2,jk) = zflcrs1211 ! ENDDO1212 ! ENDDO1213 ! !1214 ! DO jk = 1, jpk1215 ! DO jj = njstr, njend, nn_facty1216 ! DO ji = nistr, niend, nn_factx1217 ! ii = ( ji - mis_crs(2) ) * rfactx_r + 2 ! cordinate in parent grid1218 ! ij = ( jj - njstr ) * rfacty_r + 31219 ! ijje = mje_crs(ij)1220 ! !1221 ! zflcrs = &1222 ! & MAX( p_fld(ji ,ijje,jk) * p_mask(ji ,ijje,jk) - ( 1.- p_mask(ji,ijje,jk) ) * r_inf , &1223 ! & p_fld(ji+1,ijje,jk) * p_mask(ji+1,ijje,jk) - ( 1.- p_mask(ji,ijje,jk) ) * r_inf , &1224 ! & p_fld(ji+2,ijje,jk) * p_mask(ji+2,ijje,jk) - ( 1.- p_mask(ji,ijje,jk) ) * r_inf )1225 ! !1226 ! p_fld_crs(ii,ij,jk) = zflcrs1227 ! !1228 ! ENDDO1229 ! ENDDO1230 ! ENDDO1231 666 CALL ctl_stop('MAX operator and V case not available') 1232 667 1233 668 CASE( 'U' ) 1234 1235 ! IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA21236 ! IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN1237 ! je_2 = mje_crs(2)1238 ! DO jk = 1, jpk1239 ! DO ji = nistr, niend, nn_factx1240 ! ii = ( ji - mis_crs(2) ) * rfactx_r + 21241 ! ijie = mie_crs(ii)1242 ! zflcrs = p_fld(ijie,je_2,jk) * p_mask(ijie,je_2,jk) - ( 1.- p_mask(ijie,je_2,jk) ) * r_inf1243 ! !1244 ! p_fld_crs(ii,2,jk) = zflcrs1245 ! ENDDO1246 ! ENDDO1247 ! ENDIF1248 ! ELSE1249 ! je_2 = mjs_crs(2)1250 ! DO jk = 1, jpk1251 ! DO ji = nistr, niend, nn_factx1252 ! ii = ( ji - mis_crs(2) ) * rfactx_r + 21253 ! ijie = mie_crs(ii)1254 ! zflcrs = &1255 ! & MAX( p_fld(ijie,je_2 ,jk) * p_mask(ijie,je_2 ,jk) - ( 1.- p_mask(ijie,je_2,jk) ) * r_inf , &1256 ! & p_fld(ijie,je_2+1,jk) * p_mask(ijie,je_2+1,jk) - ( 1.- p_mask(ijie,je_2,jk) ) * r_inf , &1257 ! & p_fld(ijie,je_2+2,jk) * p_mask(ijie,je_2+2,jk) - ( 1.- p_mask(ijie,je_2,jk) ) * r_inf )1258 ! !1259 ! p_fld_crs(ii,2,jk) = zflcrs1260 ! ENDDO1261 ! ENDDO1262 ! ENDIF1263 ! !1264 ! DO jk = 1, jpk1265 ! DO jj = njstr, njend, nn_facty1266 ! DO ji = nistr, niend, nn_factx1267 ! ii = ( ji - mis_crs(2) ) * rfactx_r + 21268 ! ij = ( jj - njstr ) * rfacty_r + 31269 ! ijie = mie_crs(ii)1270 ! zflcrs = &1271 ! & MAX( p_fld(ijie,jj ,jk) * p_mask(ijie,jj ,jk) - ( 1.- p_mask(ijie,jj,jk) ) * r_inf , &1272 ! & p_fld(ijie,jj+1,jk) * p_mask(ijie,jj+1,jk) - ( 1.- p_mask(ijie,jj,jk) ) * r_inf , &1273 ! & p_fld(ijie,jj+2,jk) * p_mask(ijie,jj+2,jk) - ( 1.- p_mask(ijie,jj,jk) ) * r_inf )1274 ! !1275 ! p_fld_crs(ii,ij,jk) = zflcrs1276 ! !1277 ! ENDDO1278 ! ENDDO1279 ! ENDDO1280 669 CALL ctl_stop('MAX operator and U case not available') 1281 670 1282 1283 1284 671 END SELECT 672 673 CALL wrk_dealloc( jpi, jpj, jpk, zmask ) 1285 674 1286 675 CASE ( 'MIN' ) ! Search the min of unmasked grid cells 1287 676 1288 677 CALL wrk_alloc( jpi, jpj, jpk, zmask ) 1289 1290 !SELECT CASE ( cd_type ) 1291 ! CASE( 'W' ) 1292 ! !cbr ????????????????????????????? 1293 ! zmask(:,:,1) = p_mask(:,:,1) 1294 ! DO jk = 2, jpk 1295 ! zmask(:,:,jk) = p_mask(:,:,jk-1) 1296 ! ENDDO 1297 ! CASE ( 'T' ) 678 DO jk = 1, jpk 679 zmask(:,:,jk) = p_mask(:,:,jk) 680 ENDDO 681 682 SELECT CASE ( cd_type ) 683 684 CASE( 'T', 'W' ) 685 1298 686 DO jk = 1, jpk 1299 zmask(:,:,jk) = p_mask(:,:,jk) 1300 ENDDO 1301 !END SELECT 1302 1303 SELECT CASE ( cd_type ) 1304 1305 CASE( 'T', 'W' ) 1306 1307 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA2 1308 IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 1309 je_2 = mje_crs(2) 1310 DO jk = 1, jpk 1311 DO ji = nistr, niend, nn_factx 1312 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1313 zflcrs = & 1314 & MIN( p_fld(ji ,je_2,jk) * zmask(ji ,je_2,jk) + ( 1.- zmask(ji ,je_2,jk) ) * r_inf , & 1315 & p_fld(ji+1,je_2,jk) * zmask(ji+1,je_2,jk) + ( 1.- zmask(ji+1,je_2,jk) ) * r_inf , & 1316 & p_fld(ji+2,je_2,jk) * zmask(ji+2,je_2,jk) + ( 1.- zmask(ji+2,je_2,jk) ) * r_inf ) 1317 ! 1318 p_fld_crs(ii,2,jk) = zflcrs 1319 ENDDO 1320 ENDDO 1321 ENDIF 1322 ELSE 1323 je_2 = mjs_crs(2) 1324 DO jk = 1, jpk 1325 DO ji = nistr, niend, nn_factx 1326 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1327 zflcrs = & 1328 & MIN( p_fld(ji ,je_2 ,jk) * zmask(ji ,je_2 ,jk) + ( 1.- zmask(ji ,je_2 ,jk) ) * r_inf , & 1329 & p_fld(ji+1,je_2 ,jk) * zmask(ji+1,je_2 ,jk) + ( 1.- zmask(ji+1,je_2 ,jk) ) * r_inf , & 1330 & p_fld(ji+2,je_2 ,jk) * zmask(ji+2,je_2 ,jk) + ( 1.- zmask(ji+2,je_2 ,jk) ) * r_inf , & 1331 & p_fld(ji ,je_2+1,jk) * zmask(ji ,je_2+1,jk) + ( 1.- zmask(ji ,je_2+1,jk) ) * r_inf , & 1332 & p_fld(ji+1,je_2+1,jk) * zmask(ji+1,je_2+1,jk) + ( 1.- zmask(ji+1,je_2+1,jk) ) * r_inf , & 1333 & p_fld(ji+2,je_2+1,jk) * zmask(ji+2,je_2+1,jk) + ( 1.- zmask(ji+2,je_2+1,jk) ) * r_inf , & 1334 & p_fld(ji ,je_2+2,jk) * zmask(ji ,je_2+2,jk) + ( 1.- zmask(ji ,je_2+2,jk) ) * r_inf , & 1335 & p_fld(ji+1,je_2+2,jk) * zmask(ji+1,je_2+2,jk) + ( 1.- zmask(ji+1,je_2+2,jk) ) * r_inf , & 1336 & p_fld(ji+2,je_2+2,jk) * zmask(ji+2,je_2+2,jk) + ( 1.- zmask(ji+2,je_2+2,jk) ) * r_inf ) 1337 ! 1338 p_fld_crs(ii,2,jk) = zflcrs 687 DO jj = nldj_crs,nlej_crs 688 ijjs = mjs_crs(jj) 689 ijje = mje_crs(jj) 690 DO ji = nldi_crs, nlei_crs 691 ijis = mis_crs(ji) 692 ijie = mie_crs(ji) 693 694 p_fld_crs(ji,jj,jk) = MINVAL( p_fld(ijis:ijie,ijjs:ijje,jk) * zmask(ijis:ijie,ijjs:ijje,jk) + & 695 & ( 1._wp - zmask(ijis:ijie,ijjs:ijje,jk)* r_inf ) ) 1339 696 ENDDO 1340 697 ENDDO 1341 ENDIF 1342 ! 1343 DO jk = 1, jpk 1344 DO jj = njstr, njend, nn_facty 1345 DO ji = nistr, niend, nn_factx 1346 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 ! cordinate in parent grid 1347 ij = ( jj - njstr ) * rfacty_r + 3 1348 zflcrs = & 1349 & MIN( p_fld(ji ,jj ,jk) * zmask(ji ,jj ,jk) + ( 1.- zmask(ji ,jj ,jk) ) * r_inf , & 1350 & p_fld(ji+1,jj ,jk) * zmask(ji+1,jj ,jk) + ( 1.- zmask(ji+1,jj ,jk) ) * r_inf , & 1351 & p_fld(ji+2,jj ,jk) * zmask(ji+2,jj ,jk) + ( 1.- zmask(ji+2,jj ,jk) ) * r_inf , & 1352 & p_fld(ji ,jj+1,jk) * zmask(ji ,jj+1,jk) + ( 1.- zmask(ji ,jj+1,jk) ) * r_inf , & 1353 & p_fld(ji+1,jj+1,jk) * zmask(ji+1,jj+1,jk) + ( 1.- zmask(ji+1,jj+1,jk) ) * r_inf , & 1354 & p_fld(ji+2,jj+1,jk) * zmask(ji+2,jj+1,jk) + ( 1.- zmask(ji+2,jj+1,jk) ) * r_inf , & 1355 & p_fld(ji ,jj+2,jk) * zmask(ji ,jj+2,jk) + ( 1.- zmask(ji ,jj+2,jk) ) * r_inf , & 1356 & p_fld(ji+1,jj+2,jk) * zmask(ji+1,jj+2,jk) + ( 1.- zmask(ji+1,jj+2,jk) ) * r_inf , & 1357 & p_fld(ji+2,jj+2,jk) * zmask(ji+2,jj+2,jk) + ( 1.- zmask(ji+2,jj+2,jk) ) * r_inf ) 1358 ! 1359 p_fld_crs(ii,ij,jk) = zflcrs 1360 ! 1361 ENDDO 1362 ENDDO 1363 ENDDO 698 ENDDO 699 1364 700 1365 701 CASE( 'V' ) 1366 1367 ! IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA21368 ! IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN1369 ! ijje = mje_crs(2)1370 ! ENDIF1371 ! ELSE1372 ! ijje = mjs_crs(2)1373 ! ENDIF1374 !1375 ! DO jk = 1, jpk1376 ! DO ji = nistr, niend, nn_factx1377 ! ii = ( ji - mis_crs(2) ) * rfactx_r + 21378 ! zflcrs = &1379 ! & MIN( p_fld(ji ,ijje,jk) * p_mask(ji ,ijje,jk) + ( 1.- p_mask(ji,ijje,jk) ) * r_inf , &1380 ! & p_fld(ji+1,ijje,jk) * p_mask(ji+1,ijje,jk) + ( 1.- p_mask(ji,ijje,jk) ) * r_inf , &1381 ! & p_fld(ji+2,ijje,jk) * p_mask(ji+2,ijje,jk) + ( 1.- p_mask(ji,ijje,jk) ) * r_inf )1382 ! !1383 ! p_fld_crs(ii,2,jk) = zflcrs1384 ! ENDDO1385 ! ENDDO1386 ! !1387 ! DO jk = 1, jpk1388 ! DO jj = njstr, njend, nn_facty1389 ! DO ji = nistr, niend, nn_factx1390 ! ii = ( ji - mis_crs(2) ) * rfactx_r + 2 ! cordinate in parent grid1391 ! ij = ( jj - njstr ) * rfacty_r + 31392 ! ijje = mje_crs(ij)1393 ! zflcrs = &1394 ! & MIN( p_fld(ji ,ijje,jk) * p_mask(ji ,ijje,jk) + ( 1.- p_mask(ji,ijje,jk) ) * r_inf , &1395 ! & p_fld(ji+1,ijje,jk) * p_mask(ji+1,ijje,jk) + ( 1.- p_mask(ji,ijje,jk) ) * r_inf , &1396 ! & p_fld(ji+2,ijje,jk) * p_mask(ji+2,ijje,jk) + ( 1.- p_mask(ji,ijje,jk) ) * r_inf )1397 ! !1398 ! p_fld_crs(ii,ij,jk) = zflcrs1399 ! !1400 ! ENDDO1401 ! ENDDO1402 ! ENDDO1403 702 CALL ctl_stop('MIN operator and V case not available') 1404 1405 703 1406 704 CASE( 'U' ) 1407 1408 ! IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA21409 ! IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN1410 ! je_2 = mje_crs(2)1411 ! DO jk = 1, jpk1412 ! DO ji = nistr, niend, nn_factx1413 ! ii = ( ji - mis_crs(2) ) * rfactx_r + 21414 ! ijie = mie_crs(ii)1415 ! zflcrs = p_fld(ijie,je_2,jk) * p_mask(ijie,je_2,jk) + ( 1.- p_mask(ijie,je_2,jk) ) * r_inf1416 ! !1417 ! p_fld_crs(ii,2,jk) = zflcrs1418 ! ENDDO1419 ! ENDDO1420 ! ENDIF1421 ! ELSE1422 ! je_2 = mjs_crs(2)1423 ! DO jk = 1, jpk1424 ! DO ji = nistr, niend, nn_factx1425 ! ii = ( ji - mis_crs(2) ) * rfactx_r + 21426 ! ijie = mie_crs(ii)1427 ! zflcrs = &1428 ! & MIN( p_fld(ijie,je_2 ,jk) * p_mask(ijie,je_2 ,jk) + ( 1.- p_mask(ijie,je_2,jk) ) * r_inf , &1429 ! & p_fld(ijie,je_2+1,jk) * p_mask(ijie,je_2+1,jk) + ( 1.- p_mask(ijie,je_2,jk) ) * r_inf , &1430 ! & p_fld(ijie,je_2+2,jk) * p_mask(ijie,je_2+2,jk) + ( 1.- p_mask(ijie,je_2,jk) ) * r_inf )1431 ! !1432 ! p_fld_crs(ii,2,jk) = zflcrs1433 ! ENDDO1434 ! ENDDO1435 ! ENDIF1436 ! !1437 ! DO jk = 1, jpk1438 ! DO jj = njstr, njend, nn_facty1439 ! DO ji = nistr, niend, nn_factx1440 ! ii = ( ji - mis_crs(2) ) * rfactx_r + 21441 ! ij = ( jj - njstr ) * rfacty_r + 31442 ! ijie = mie_crs(ii)1443 ! zflcrs = &1444 ! & MIN( p_fld(ijie,jj ,jk) * p_mask(ijie,jj ,jk) + ( 1.- p_mask(ijie,jj,jk) ) * r_inf , &1445 ! & p_fld(ijie,jj+1,jk) * p_mask(ijie,jj+1,jk) + ( 1.- p_mask(ijie,jj,jk) ) * r_inf , &1446 ! & p_fld(ijie,jj+2,jk) * p_mask(ijie,jj+2,jk) + ( 1.- p_mask(ijie,jj,jk) ) * r_inf )1447 ! !1448 ! p_fld_crs(ii,ij,jk) = zflcrs1449 ! !1450 ! ENDDO1451 ! ENDDO1452 ! ENDDO1453 705 CALL ctl_stop('MIN operator and U case not available') 1454 706 … … 1459 711 END SELECT 1460 712 ! 1461 !IF(narea==267)WRITE(5000+narea,*)"vn_crs(17,5,74) avt lbc = ",p_fld(17,5,74)1462 713 CALL crs_lbc_lnk( p_fld_crs, cd_type, psgn ) 1463 !IF(narea==267)WRITE(5000+narea,*)"vn_crs(17,5,74) apr lbc = ",p_fld(17,5,74)1464 714 ! 1465 715 END SUBROUTINE crs_dom_ope_3d … … 1504 754 !! Local variables 1505 755 INTEGER :: ji, jj, jk ! dummy loop indices 1506 INTEGER :: ijie, ijje, ii, ij, je_2756 INTEGER :: ijis, ijie, ijjs, ijje 1507 757 REAL(wp) :: zflcrs, zsfcrs 1508 758 REAL(wp), DIMENSION(:,:), POINTER :: zsurfmsk … … 1515 765 1516 766 CASE ( 'VOL' ) 1517 767 1518 768 CALL wrk_alloc( jpi, jpj, zsurfmsk ) 1519 769 zsurfmsk(:,:) = p_e12(:,:) * p_e3(:,:,1) * p_mask(:,:,1) 1520 770 1521 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA2 1522 IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 1523 je_2 = mje_crs(2) 1524 DO ji = nistr, niend, nn_factx 1525 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1526 zflcrs = p_fld(ji ,je_2) * zsurfmsk(ji ,je_2) & 1527 & + p_fld(ji+1,je_2) * zsurfmsk(ji+1,je_2) & 1528 & + p_fld(ji+2,je_2) * zsurfmsk(ji+2,je_2) 1529 1530 zsfcrs = zsurfmsk(ji,je_2) + zsurfmsk(ji+1,je_2) + zsurfmsk(ji+2,je_2) 1531 ! 1532 p_fld_crs(ii,2) = zflcrs 1533 IF( zsfcrs /= 0.0 ) p_fld_crs(ii,2) = zflcrs / zsfcrs 1534 ENDDO 1535 ENDIF 1536 ELSE 1537 je_2 = mjs_crs(2) 1538 DO ji = nistr, niend, nn_factx 1539 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1540 zflcrs = p_fld(ji ,je_2 ) * zsurfmsk(ji ,je_2 ) & 1541 & + p_fld(ji+1,je_2 ) * zsurfmsk(ji+1,je_2 ) & 1542 & + p_fld(ji+2,je_2 ) * zsurfmsk(ji+2,je_2 ) & 1543 & + p_fld(ji ,je_2+1) * zsurfmsk(ji ,je_2+1) & 1544 & + p_fld(ji+1,je_2+1) * zsurfmsk(ji+1,je_2+1) & 1545 & + p_fld(ji+2,je_2+1) * zsurfmsk(ji+2,je_2+1) & 1546 & + p_fld(ji ,je_2+2) * zsurfmsk(ji ,je_2+2) & 1547 & + p_fld(ji+1,je_2+2) * zsurfmsk(ji+1,je_2+2) & 1548 & + p_fld(ji+2,je_2+2) * zsurfmsk(ji+2,je_2+2) 1549 1550 zsfcrs = zsurfmsk(ji,je_2 ) + zsurfmsk(ji+1,je_2 ) + zsurfmsk(ji+2,je_2 ) & 1551 & + zsurfmsk(ji,je_2+1) + zsurfmsk(ji+1,je_2+1) + zsurfmsk(ji+2,je_2+1) & 1552 & + zsurfmsk(ji,je_2+2) + zsurfmsk(ji+1,je_2+2) + zsurfmsk(ji+2,je_2+2) 1553 ! 1554 p_fld_crs(ii,2) = zflcrs 1555 IF( zsfcrs /= 0.0 ) p_fld_crs(ii,2) = zflcrs / zsfcrs 1556 ENDDO 1557 ENDIF 1558 ! 1559 DO jj = njstr, njend, nn_facty 1560 DO ji = nistr, niend, nn_factx 1561 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 ! cordinate in parent grid 1562 ij = ( jj - njstr ) * rfacty_r + 3 1563 zflcrs = p_fld(ji ,jj ) * zsurfmsk(ji ,jj ) & 1564 & + p_fld(ji+1,jj ) * zsurfmsk(ji+1,jj ) & 1565 & + p_fld(ji+2,jj ) * zsurfmsk(ji+2,jj ) & 1566 & + p_fld(ji ,jj+1) * zsurfmsk(ji ,jj+1) & 1567 & + p_fld(ji+1,jj+1) * zsurfmsk(ji+1,jj+1) & 1568 & + p_fld(ji+2,jj+1) * zsurfmsk(ji+2,jj+1) & 1569 & + p_fld(ji ,jj+2) * zsurfmsk(ji ,jj+2) & 1570 & + p_fld(ji+1,jj+2) * zsurfmsk(ji+1,jj+2) & 1571 & + p_fld(ji+2,jj+2) * zsurfmsk(ji+2,jj+2) 1572 1573 zsfcrs = zsurfmsk(ji,jj ) + zsurfmsk(ji+1,jj ) + zsurfmsk(ji+2,jj ) & 1574 & + zsurfmsk(ji,jj+1) + zsurfmsk(ji+1,jj+1) + zsurfmsk(ji+2,jj+1) & 1575 & + zsurfmsk(ji,jj+2) + zsurfmsk(ji+1,jj+2) + zsurfmsk(ji+2,jj+2) 1576 ! 1577 p_fld_crs(ii,ij) = zflcrs 1578 IF( zsfcrs /= 0.0 ) p_fld_crs(ii,ij) = zflcrs / zsfcrs 1579 ENDDO 1580 ENDDO 1581 771 DO jj = nldj_crs,nlej_crs 772 ijjs = mjs_crs(jj) 773 ijje = mje_crs(jj) 774 DO ji = nldi_crs, nlei_crs 775 ijis = mis_crs(ji) 776 ijie = mie_crs(ji) 777 778 zflcrs = SUM( p_fld(ijis:ijie,ijjs:ijje) * zsurfmsk(ijis:ijie,ijjs:ijje) ) 779 zsfcrs = SUM( zsurfmsk(ijis:ijie,ijjs:ijje) ) 780 781 p_fld_crs(ji,jj) = zflcrs 782 IF( zsfcrs /= 0.0 ) p_fld_crs(ji,jj) = zflcrs / zsfcrs 783 ENDDO 784 ENDDO 1582 785 CALL wrk_dealloc( jpi, jpj, zsurfmsk ) 786 ! 1583 787 1584 788 CASE ( 'SUM' ) … … 1595 799 CASE( 'T', 'W' ) 1596 800 1597 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA2 1598 IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 1599 je_2 = mje_crs(2) 1600 DO ji = nistr, niend, nn_factx 1601 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1602 zflcrs = p_fld(ji ,je_2) * zsurfmsk(ji ,je_2) & 1603 & + p_fld(ji+1,je_2) * zsurfmsk(ji+1,je_2) & 1604 & + p_fld(ji+2,je_2) * zsurfmsk(ji+2,je_2) 1605 ! 1606 p_fld_crs(ii,2) = zflcrs 1607 ENDDO 1608 ENDIF 1609 ELSE 1610 je_2 = mjs_crs(2) 1611 DO ji = nistr, niend, nn_factx 1612 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1613 zflcrs = p_fld(ji ,je_2 ) * zsurfmsk(ji ,je_2 ) & 1614 & + p_fld(ji+1,je_2 ) * zsurfmsk(ji+1,je_2 ) & 1615 & + p_fld(ji+2,je_2 ) * zsurfmsk(ji+2,je_2 ) & 1616 & + p_fld(ji ,je_2+1) * zsurfmsk(ji ,je_2+1) & 1617 & + p_fld(ji+1,je_2+1) * zsurfmsk(ji+1,je_2+1) & 1618 & + p_fld(ji+2,je_2+1) * zsurfmsk(ji+2,je_2+1) & 1619 & + p_fld(ji ,je_2+2) * zsurfmsk(ji ,je_2+2) & 1620 & + p_fld(ji+1,je_2+2) * zsurfmsk(ji+1,je_2+2) & 1621 & + p_fld(ji+2,je_2+2) * zsurfmsk(ji+2,je_2+2) 1622 ! 1623 p_fld_crs(ii,2) = zflcrs 1624 ENDDO 1625 ENDIF 1626 ! 1627 DO jj = njstr, njend, nn_facty 1628 DO ji = nistr, niend, nn_factx 1629 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1630 ij = ( jj - njstr ) * rfacty_r + 3 1631 zflcrs = p_fld(ji ,jj ) * zsurfmsk(ji ,jj ) & 1632 & + p_fld(ji+1,jj ) * zsurfmsk(ji+1,jj ) & 1633 & + p_fld(ji+2,jj ) * zsurfmsk(ji+2,jj ) & 1634 & + p_fld(ji ,jj+1) * zsurfmsk(ji ,jj+1) & 1635 & + p_fld(ji+1,jj+1) * zsurfmsk(ji+1,jj+1) & 1636 & + p_fld(ji+2,jj+1) * zsurfmsk(ji+2,jj+1) & 1637 & + p_fld(ji ,jj+2) * zsurfmsk(ji ,jj+2) & 1638 & + p_fld(ji+1,jj+2) * zsurfmsk(ji+1,jj+2) & 1639 & + p_fld(ji+2,jj+2) * zsurfmsk(ji+2,jj+2) 1640 ! 1641 p_fld_crs(ii,ij) = zflcrs 1642 ! 1643 ENDDO 1644 ENDDO 801 DO jj = nldj_crs,nlej_crs 802 ijjs = mjs_crs(jj) 803 ijje = mje_crs(jj) 804 DO ji = nldi_crs, nlei_crs 805 ijis = mis_crs(ji) 806 ijie = mie_crs(ji) 807 p_fld_crs(ji,jj) = SUM( p_fld(ijis:ijie,ijjs:ijje) * zsurfmsk(ijis:ijie,ijjs:ijje) ) 808 ENDDO 809 ENDDO 1645 810 1646 811 CASE( 'V' ) 1647 DO ji = nistr, niend, nn_factx 1648 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1649 IF( nldj_crs == 1 .AND. (( mje_crs(2) - mjs_crs(2) ) < 2) )THEN !!cc bande du sud style ORCA2 1650 IF( mje_crs(2) - mjs_crs(2) == 1 )THEN 1651 jj = mje_crs(2) 1652 zflcrs = p_fld(ji ,jj ) * zsurfmsk(ji ,jj ) & 1653 & + p_fld(ji+1,jj ) * zsurfmsk(ji+1,jj ) & 1654 & + p_fld(ji+2,jj ) * zsurfmsk(ji+2,jj ) 1655 p_fld_crs(ii,2) = zflcrs 1656 ENDIF 1657 ELSE 1658 ijje = mje_crs(2) 1659 zflcrs = p_fld(ji ,ijje) * zsurfmsk(ji ,ijje) & 1660 & + p_fld(ji+1,ijje) * zsurfmsk(ji+1,ijje) & 1661 & + p_fld(ji+2,ijje) * zsurfmsk(ji+2,ijje) 1662 ! 1663 p_fld_crs(ii,2) = zflcrs 1664 ENDIF 1665 1666 DO jj = njstr, njend, nn_facty 1667 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1668 ij = ( jj - njstr ) * rfacty_r + 3 1669 ijje = mje_crs(ij) 1670 ijie = mie_crs(ii) 1671 ! 1672 zflcrs = p_fld(ji ,ijje) * zsurfmsk(ji ,ijje) & 1673 & + p_fld(ji+1,ijje) * zsurfmsk(ji+1,ijje) & 1674 & + p_fld(ji+2,ijje) * zsurfmsk(ji+2,ijje) 1675 ! 1676 p_fld_crs(ii,ij) = zflcrs 1677 ! 1678 ENDDO 1679 ENDDO 1680 812 813 DO jj = nldj_crs,nlej_crs 814 ijjs = mjs_crs(jj) 815 ijje = mje_crs(jj) 816 DO ji = nldi_crs, nlei_crs 817 ijis = mis_crs(ji) 818 ijie = mie_crs(ji) 819 p_fld_crs(ji,jj) = SUM( p_fld(ijis:ijie,ijje) * zsurfmsk(ijis:ijie,ijje) ) 820 ENDDO 821 ENDDO 822 1681 823 CASE( 'U' ) 1682 824 1683 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA2 1684 IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 1685 je_2 = mje_crs(2) 1686 DO ji = nistr, niend, nn_factx 1687 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1688 ijie = mie_crs(ii) 1689 zflcrs = p_fld(ijie,je_2) * zsurfmsk(ijie,je_2) 1690 p_fld_crs(ii,2) = zflcrs 1691 ENDDO 1692 ENDIF 1693 ELSE 1694 je_2 = mjs_crs(2) 1695 DO ji = nistr, niend, nn_factx 1696 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1697 ijie = mie_crs(ii) 1698 zflcrs = p_fld(ijie,je_2 ) * zsurfmsk(ijie,je_2 ) & 1699 & + p_fld(ijie,je_2+1) * zsurfmsk(ijie,je_2+1) & 1700 & + p_fld(ijie,je_2+2) * zsurfmsk(ijie,je_2+2) 1701 1702 p_fld_crs(ii,2) = zflcrs 825 DO jj = nldj_crs,nlej_crs 826 ijjs = mjs_crs(jj) 827 ijje = mje_crs(jj) 828 DO ji = nldi_crs, nlei_crs 829 ijis = mis_crs(ji) 830 ijie = mie_crs(ji) 831 p_fld_crs(ji,jj) = SUM( p_fld(ijie,ijjs:ijje) * zsurfmsk(ijie,ijjs:ijje) ) 1703 832 ENDDO 1704 ENDIF 1705 1706 DO jj = njstr, njend, nn_facty 1707 DO ji = nistr, niend, nn_factx 1708 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1709 ij = ( jj - njstr ) * rfacty_r + 3 1710 ijie = mie_crs(ii) 1711 zflcrs = p_fld(ijie,jj ) * zsurfmsk(ijie,jj ) & 1712 & + p_fld(ijie,jj+1) * zsurfmsk(ijie,jj+1) & 1713 & + p_fld(ijie,jj+2) * zsurfmsk(ijie,jj+2) 1714 ! 1715 p_fld_crs(ii,ij) = zflcrs 1716 ! 1717 ENDDO 1718 ENDDO 833 ENDDO 1719 834 1720 835 END SELECT … … 1731 846 1732 847 CASE( 'T', 'W' ) 1733 1734 DO ji = nistr, niend, nn_factx 1735 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1736 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA2 1737 IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 1738 je_2 = mje_crs(2) 1739 zflcrs = & 1740 & MAX( p_fld(ji ,je_2) * p_mask(ji ,je_2,1) - ( 1.- p_mask(ji ,je_2,1) ) * r_inf , & 1741 & p_fld(ji+1,je_2) * p_mask(ji+1,je_2,1) - ( 1.- p_mask(ji+1,je_2,1) ) * r_inf , & 1742 & p_fld(ji+2,je_2) * p_mask(ji+2,je_2,1) - ( 1.- p_mask(ji+2,je_2,1) ) * r_inf ) 1743 ! 1744 p_fld_crs(ii,2) = zflcrs 1745 ENDIF 1746 ELSE 1747 je_2 = mjs_crs(2) 1748 zflcrs = & 1749 & MAX( p_fld(ji ,je_2 ) * p_mask(ji ,je_2 ,1) - ( 1.- p_mask(ji ,je_2 ,1) ) * r_inf , & 1750 & p_fld(ji+1,je_2 ) * p_mask(ji+1,je_2 ,1) - ( 1.- p_mask(ji+1,je_2 ,1) ) * r_inf , & 1751 & p_fld(ji+2,je_2 ) * p_mask(ji+2,je_2 ,1) - ( 1.- p_mask(ji+2,je_2 ,1) ) * r_inf , & 1752 & p_fld(ji ,je_2+1) * p_mask(ji ,je_2+1,1) - ( 1.- p_mask(ji ,je_2+1,1) ) * r_inf , & 1753 & p_fld(ji+1,je_2+1) * p_mask(ji+1,je_2+1,1) - ( 1.- p_mask(ji+1,je_2+1,1) ) * r_inf , & 1754 & p_fld(ji+2,je_2+1) * p_mask(ji+2,je_2+1,1) - ( 1.- p_mask(ji+2,je_2+1,1) ) * r_inf , & 1755 & p_fld(ji ,je_2+2) * p_mask(ji ,je_2+2,1) - ( 1.- p_mask(ji ,je_2+2,1) ) * r_inf , & 1756 & p_fld(ji+1,je_2+2) * p_mask(ji+1,je_2+2,1) - ( 1.- p_mask(ji+1,je_2+2,1) ) * r_inf , & 1757 & p_fld(ji+2,je_2+2) * p_mask(ji+2,je_2+2,1) - ( 1.- p_mask(ji+2,je_2+2,1) ) * r_inf ) 1758 ! 1759 p_fld_crs(ii,2) = zflcrs 1760 ENDIF 1761 1762 DO jj = njstr, njend, nn_facty 1763 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1764 ij = ( jj - njstr ) * rfacty_r + 3 1765 zflcrs = & 1766 & MAX( p_fld(ji ,jj ) * p_mask(ji ,jj ,1) - ( 1.- p_mask(ji ,jj ,1) ) * r_inf , & 1767 & p_fld(ji+1,jj ) * p_mask(ji+1,jj ,1) - ( 1.- p_mask(ji+1,jj ,1) ) * r_inf , & 1768 & p_fld(ji+2,jj ) * p_mask(ji+2,jj ,1) - ( 1.- p_mask(ji+2,jj ,1) ) * r_inf , & 1769 & p_fld(ji ,jj+1) * p_mask(ji ,jj+1,1) - ( 1.- p_mask(ji ,jj+1,1) ) * r_inf , & 1770 & p_fld(ji+1,jj+1) * p_mask(ji+1,jj+1,1) - ( 1.- p_mask(ji+1,jj+1,1) ) * r_inf , & 1771 & p_fld(ji+2,jj+1) * p_mask(ji+2,jj+1,1) - ( 1.- p_mask(ji+2,jj+1,1) ) * r_inf , & 1772 & p_fld(ji ,jj+2) * p_mask(ji ,jj+2,1) - ( 1.- p_mask(ji ,jj+2,1) ) * r_inf , & 1773 & p_fld(ji+1,jj+2) * p_mask(ji+1,jj+2,1) - ( 1.- p_mask(ji+1,jj+2,1) ) * r_inf , & 1774 & p_fld(ji+2,jj+2) * p_mask(ji+2,jj+2,1) - ( 1.- p_mask(ji+2,jj+2,1) ) * r_inf ) 1775 ! 1776 p_fld_crs(ii,ij) = zflcrs 1777 ! 1778 ENDDO 1779 ENDDO 848 849 DO jj = nldj_crs,nlej_crs 850 ijjs = mjs_crs(jj) 851 ijje = mje_crs(jj) 852 DO ji = nldi_crs, nlei_crs 853 ijis = mis_crs(ji) 854 ijie = mie_crs(ji) 855 p_fld_crs(ji,jj) = MAXVAL( p_fld(ijis:ijie,ijjs:ijje) * p_mask(ijis:ijie,ijjs:ijje,1) - & 856 & ( 1._wp - p_mask(ijis:ijie,ijjs:ijje,1) ) ) 857 ENDDO 858 ENDDO 1780 859 1781 860 CASE( 'V' ) 1782 1783 ! IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA21784 ! IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN1785 ! ijje = mje_crs(2)1786 ! ENDIF1787 ! ELSE1788 ! ijje = mjs_crs(2)1789 ! ENDIF1790 !1791 ! DO ji = nistr, niend, nn_factx1792 ! ii = ( ji - mis_crs(2) ) * rfactx_r + 21793 ! zflcrs = MAX( p_fld(ji ,ijje) * p_mask(ji ,ijje,1) - ( 1.- p_mask(ji,ijje,1) ) * r_inf , &1794 ! & p_fld(ji+1,ijje) * p_mask(ji+1,ijje,1) - ( 1.- p_mask(ji,ijje,1) ) * r_inf , &1795 ! & p_fld(ji+2,ijje) * p_mask(ji+2,ijje,1) - ( 1.- p_mask(ji,ijje,1) ) * r_inf )1796 ! !1797 ! p_fld_crs(ii,2) = zflcrs1798 ! ENDDO1799 ! DO jj = njstr, njend, nn_facty1800 ! DO ji = nistr, niend, nn_factx1801 ! ii = ( ji - mis_crs(2) ) * rfactx_r + 21802 ! ij = ( jj - njstr ) * rfacty_r + 31803 ! ijje = mje_crs(ij)1804 ! !1805 ! zflcrs = MAX( p_fld(ji ,ijje) * p_mask(ji ,ijje,1) - ( 1.- p_mask(ji,ijje,1) ) * r_inf , &1806 ! & p_fld(ji+1,ijje) * p_mask(ji+1,ijje,1) - ( 1.- p_mask(ji,ijje,1) ) * r_inf , &1807 ! & p_fld(ji+2,ijje) * p_mask(ji+2,ijje,1) - ( 1.- p_mask(ji,ijje,1) ) * r_inf )1808 ! !1809 ! p_fld_crs(ii,ij) = zflcrs1810 ! !1811 ! ENDDO1812 ! ENDDO1813 861 CALL ctl_stop('MAX operator and V case not available') 1814 862 1815 863 CASE( 'U' ) 1816 1817 ! IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA21818 ! IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN1819 ! je_2 = mje_crs(2)1820 ! DO ji = nistr, niend, nn_factx1821 ! ii = ( ji - mis_crs(2) ) * rfactx_r + 21822 ! ijie = mie_crs(ii)1823 ! zflcrs = p_fld(ijie,je_2) * p_mask(ijie,je_2,1) - ( 1.- p_mask(ijie,je_2,1) ) * r_inf1824 ! p_fld_crs(ii,2) = zflcrs1825 ! ENDDO1826 ! ENDIF1827 ! ELSE1828 ! je_2 = mjs_crs(2)1829 ! DO ji = nistr, niend, nn_factx1830 ! ii = ( ji - mis_crs(2) ) * rfactx_r + 21831 ! ijie = mie_crs(ii)1832 ! zflcrs = &1833 ! & MAX( p_fld(ijie,je_2 ) * p_mask(ijie,je_2 ,1) - ( 1.- p_mask(ijie,je_2,1) ) * r_inf , &1834 ! & p_fld(ijie,je_2+1) * p_mask(ijie,je_2+1,1) - ( 1.- p_mask(ijie,je_2,1) ) * r_inf , &1835 ! & p_fld(ijie,je_2+2) * p_mask(ijie,je_2+2,1) - ( 1.- p_mask(ijie,je_2,1) ) * r_inf )1836 ! p_fld_crs(ii,2) = zflcrs1837 ! ENDDO1838 ! ENDIF1839 ! DO jj = njstr, njend, nn_facty1840 ! DO ji = nistr, niend, nn_factx1841 ! ii = ( ji - mis_crs(2) ) * rfactx_r + 21842 ! ij = ( jj - njstr ) * rfacty_r + 31843 ! ijie = mie_crs(ii)1844 ! zflcrs = &1845 ! & MAX( p_fld(ijie,jj ) * p_mask(ijie,jj ,1) - ( 1.- p_mask(ijie,jj,1) ) * r_inf , &1846 ! & p_fld(ijie,jj+1) * p_mask(ijie,jj+1,1) - ( 1.- p_mask(ijie,jj,1) ) * r_inf , &1847 ! & p_fld(ijie,jj+2) * p_mask(ijie,jj+2,1) - ( 1.- p_mask(ijie,jj,1) ) * r_inf )1848 ! p_fld_crs(ii,ij) = zflcrs1849 ! !1850 ! ENDDO1851 ! ENDDO1852 864 CALL ctl_stop('MAX operator and U case not available') 1853 865 … … 1859 871 1860 872 CASE( 'T', 'W' ) 1861 1862 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA2 1863 IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 1864 je_2 = mje_crs(2) 1865 DO ji = nistr, niend, nn_factx 1866 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1867 zflcrs = & 1868 & MIN( p_fld(ji ,je_2) * p_mask(ji ,je_2,1) + ( 1.- p_mask(ji ,je_2,1) ) * r_inf , & 1869 & p_fld(ji+1,je_2) * p_mask(ji+1,je_2,1) + ( 1.- p_mask(ji+1,je_2,1) ) * r_inf , & 1870 & p_fld(ji+2,je_2) * p_mask(ji+2,je_2,1) + ( 1.- p_mask(ji+2,je_2,1) ) * r_inf ) 1871 ! 1872 p_fld_crs(ii,2) = zflcrs 1873 ENDDO 1874 ENDIF 1875 ELSE 1876 DO ji = nistr, niend, nn_factx 1877 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1878 je_2 = mjs_crs(2) 1879 zflcrs = & 1880 & MIN( p_fld(ji ,je_2 ) * p_mask(ji ,je_2 ,1) + ( 1.- p_mask(ji ,je_2 ,1) ) * r_inf , & 1881 & p_fld(ji+1,je_2 ) * p_mask(ji+1,je_2 ,1) + ( 1.- p_mask(ji+1,je_2 ,1) ) * r_inf , & 1882 & p_fld(ji+2,je_2 ) * p_mask(ji+2,je_2 ,1) + ( 1.- p_mask(ji+2,je_2 ,1) ) * r_inf , & 1883 & p_fld(ji ,je_2+1) * p_mask(ji ,je_2+1,1) + ( 1.- p_mask(ji ,je_2+1,1) ) * r_inf , & 1884 & p_fld(ji+1,je_2+1) * p_mask(ji+1,je_2+1,1) + ( 1.- p_mask(ji+1,je_2+1,1) ) * r_inf , & 1885 & p_fld(ji+2,je_2+1) * p_mask(ji+2,je_2+1,1) + ( 1.- p_mask(ji+2,je_2+1,1) ) * r_inf , & 1886 & p_fld(ji ,je_2+2) * p_mask(ji ,je_2+2,1) + ( 1.- p_mask(ji ,je_2+2,1) ) * r_inf , & 1887 & p_fld(ji+1,je_2+2) * p_mask(ji+1,je_2+2,1) + ( 1.- p_mask(ji+1,je_2+2,1) ) * r_inf , & 1888 & p_fld(ji+2,je_2+2) * p_mask(ji+2,je_2+2,1) + ( 1.- p_mask(ji+2,je_2+2,1) ) * r_inf ) 1889 ! 1890 p_fld_crs(ii,2) = zflcrs 1891 ENDDO 1892 ENDIF 1893 1894 DO jj = njstr, njend, nn_facty 1895 DO ji = nistr, niend, nn_factx 1896 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 1897 ij = ( jj - njstr ) * rfacty_r + 3 1898 zflcrs = & 1899 & MIN( p_fld(ji ,jj ) * p_mask(ji ,jj ,1) + ( 1.- p_mask(ji ,jj ,1) ) * r_inf , & 1900 & p_fld(ji+1,jj ) * p_mask(ji+1,jj ,1) + ( 1.- p_mask(ji+1,jj ,1) ) * r_inf , & 1901 & p_fld(ji+2,jj ) * p_mask(ji+2,jj ,1) + ( 1.- p_mask(ji+2,jj ,1) ) * r_inf , & 1902 & p_fld(ji ,jj+1) * p_mask(ji ,jj+1,1) + ( 1.- p_mask(ji ,jj+1,1) ) * r_inf , & 1903 & p_fld(ji+1,jj+1) * p_mask(ji+1,jj+1,1) + ( 1.- p_mask(ji+1,jj+1,1) ) * r_inf , & 1904 & p_fld(ji+2,jj+1) * p_mask(ji+2,jj+1,1) + ( 1.- p_mask(ji+2,jj+1,1) ) * r_inf , & 1905 & p_fld(ji ,jj+2) * p_mask(ji ,jj+2,1) + ( 1.- p_mask(ji ,jj+2,1) ) * r_inf , & 1906 & p_fld(ji+1,jj+2) * p_mask(ji+1,jj+2,1) + ( 1.- p_mask(ji+1,jj+2,1) ) * r_inf , & 1907 & p_fld(ji+2,jj+2) * p_mask(ji+2,jj+2,1) + ( 1.- p_mask(ji+2,jj+2,1) ) * r_inf ) 1908 ! 1909 p_fld_crs(ii,ij) = zflcrs 1910 ! 1911 ENDDO 1912 ENDDO 873 874 DO jj = nldj_crs,nlej_crs 875 ijjs = mjs_crs(jj) 876 ijje = mje_crs(jj) 877 DO ji = nldi_crs, nlei_crs 878 ijis = mis_crs(ji) 879 ijie = mie_crs(ji) 880 p_fld_crs(ji,jj) = MINVAL( p_fld(ijis:ijie,ijjs:ijje) * p_mask(ijis:ijie,ijjs:ijje,1) + & 881 & ( 1._wp - p_mask(ijis:ijie,ijjs:ijje,1) ) ) 882 ENDDO 883 ENDDO 1913 884 1914 885 CASE( 'V' ) 1915 1916 ! IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA21917 ! IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN1918 ! ijje = mje_crs(2)1919 ! ENDIF1920 ! ELSE1921 ! ijje = mjs_crs(2)1922 ! ENDIF1923 !1924 ! DO ji = nistr, niend, nn_factx1925 ! ii = ( ji - mis_crs(2) ) * rfactx_r + 21926 ! zflcrs = MIN( p_fld(ji ,ijje) * p_mask(ji ,ijje,1) + ( 1.- p_mask(ji,ijje,1) ) * r_inf , &1927 ! & p_fld(ji+1,ijje) * p_mask(ji+1,ijje,1) + ( 1.- p_mask(ji,ijje,1) ) * r_inf , &1928 ! & p_fld(ji+2,ijje) * p_mask(ji+2,ijje,1) + ( 1.- p_mask(ji,ijje,1) ) * r_inf )1929 ! !1930 ! p_fld_crs(ii,2) = zflcrs1931 ! ENDDO1932 ! DO jj = njstr, njend, nn_facty1933 ! DO ji = nistr, niend, nn_factx1934 ! ii = ( ji - mis_crs(2) ) * rfactx_r + 21935 ! ij = ( jj - njstr ) * rfacty_r + 31936 ! ijje = mje_crs(ij)1937 ! !1938 ! zflcrs = MIN( p_fld(ji ,ijje) * p_mask(ji ,ijje,1) + ( 1.- p_mask(ji,ijje,1) ) * r_inf , &1939 ! & p_fld(ji+1,ijje) * p_mask(ji+1,ijje,1) + ( 1.- p_mask(ji,ijje,1) ) * r_inf , &1940 ! & p_fld(ji+2,ijje) * p_mask(ji+2,ijje,1) + ( 1.- p_mask(ji,ijje,1) ) * r_inf )1941 ! !1942 ! p_fld_crs(ii,ij) = zflcrs1943 ! !1944 ! ENDDO1945 ! ENDDO1946 886 CALL ctl_stop('MIN operator and V case not available') 1947 887 1948 888 CASE( 'U' ) 1949 1950 ! IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA21951 ! IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN1952 ! je_2 = mje_crs(2)1953 ! DO ji = nistr, niend, nn_factx1954 ! ii = ( ji - mis_crs(2) ) * rfactx_r + 21955 ! ijie = mie_crs(ii)1956 ! zflcrs = p_fld(ijie,je_2) * p_mask(ijie,je_2,1) + ( 1.- p_mask(ijie,je_2,1) ) * r_inf1957 !1958 ! p_fld_crs(ii,2) = zflcrs1959 ! ENDDO1960 ! ENDIF1961 ! ELSE1962 ! je_2 = mjs_crs(2)1963 ! DO ji = nistr, niend, nn_factx1964 ! ii = ( ji - mis_crs(2) ) * rfactx_r + 21965 ! ijie = mie_crs(ii)1966 ! zflcrs = &1967 ! & MIN( p_fld(ijie,je_2 ) * p_mask(ijie,je_2 ,1) + ( 1.- p_mask(ijie,je_2,1) ) * r_inf , &1968 ! & p_fld(ijie,je_2+1) * p_mask(ijie,je_2+1,1) + ( 1.- p_mask(ijie,je_2,1) ) * r_inf , &1969 ! & p_fld(ijie,je_2+2) * p_mask(ijie,je_2+2,1) + ( 1.- p_mask(ijie,je_2,1) ) * r_inf )1970 ! p_fld_crs(ii,2) = zflcrs1971 ! ENDDO1972 ! ENDIF1973 ! DO jj = njstr, njend, nn_facty1974 ! DO ji = nistr, niend, nn_factx1975 ! ii = ( ji - mis_crs(2) ) * rfactx_r + 21976 ! ij = ( jj - njstr ) * rfacty_r + 31977 ! ijie = mie_crs(ii)1978 ! zflcrs = &1979 ! & MIN( p_fld(ijie,jj ) * p_mask(ijie,jj ,1) + ( 1.- p_mask(ijie,jj,1) ) * r_inf , &1980 ! & p_fld(ijie,jj+1) * p_mask(ijie,jj+1,1) + ( 1.- p_mask(ijie,jj,1) ) * r_inf , &1981 ! & p_fld(ijie,jj+2) * p_mask(ijie,jj+2,1) + ( 1.- p_mask(ijie,jj,1) ) * r_inf )1982 ! p_fld_crs(ii,ij) = zflcrs1983 ! !1984 ! ENDDO1985 ! ENDDO1986 889 CALL ctl_stop('MIN operator and U case not available') 1987 890 … … 1994 897 END SUBROUTINE crs_dom_ope_2d 1995 898 1996 SUBROUTINE crs_dom_e3( p_e1, p_e2, p_e3, p_sfc_ crs, cd_type, p_mask, p_e3_crs, p_e3_max_crs)899 SUBROUTINE crs_dom_e3( p_e1, p_e2, p_e3, p_sfc_2d_crs, p_sfc_3d_crs, cd_type, p_mask, p_e3_crs, p_e3_max_crs) 1997 900 !!---------------------------------------------------------------- 901 !! 902 !! 903 !! 904 !! 905 !!---------------------------------------------------------------- 1998 906 !! Arguments 1999 CHARACTER(len=1), INTENT(in) :: cd_type ! grid type T, W ( U, V, F) 2000 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: p_mask ! Parent grid T mask 2001 REAL(wp), DIMENSION(jpi,jpj) , INTENT(in) :: p_e1, p_e2 ! 2D tracer T or W on parent grid 2002 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: p_e3 ! 3D tracer T or W on parent grid 2003 REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(in) :: p_sfc_crs ! Coarse grid box east or north face quantity 2004 REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(inout) :: p_e3_crs ! Coarse grid box east or north face quantity 2005 REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(inout) :: p_e3_max_crs ! Coarse grid box east or north face quantity 907 CHARACTER(len=1), INTENT(in) :: cd_type ! grid type T, W ( U, V, F) 908 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: p_mask ! Parent grid T mask 909 REAL(wp), DIMENSION(jpi,jpj) , INTENT(in) :: p_e1, p_e2 ! 2D tracer T or W on parent grid 910 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: p_e3 ! 3D tracer T or W on parent grid 911 REAL(wp), DIMENSION(jpi_crs,jpj_crs) , INTENT(in),OPTIONAL :: p_sfc_2d_crs ! Coarse grid box east or north face quantity 912 REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(in),OPTIONAL :: p_sfc_3d_crs ! Coarse grid box east or north face quantity 913 REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(inout) :: p_e3_crs ! Coarse grid box east or north face quantity 914 REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(inout) :: p_e3_max_crs ! Coarse grid box east or north face quantity 2006 915 2007 916 !! Local variables 2008 917 INTEGER :: ji, jj, jk ! dummy loop indices 2009 INTEGER :: iji e, ijje, ii, ij, je_2918 INTEGER :: ijis, ijie, ijjs, ijje 2010 919 REAL(wp) :: ze3crs 2011 !REAL(wp), DIMENSION(:,:,:), POINTER :: zmask, zsurf2012 920 2013 921 !!---------------------------------------------------------------- 2014 2015 p_e3_crs (:,:,:) = 0. 2016 p_e3_max_crs(:,:,:) = 1. 922 p_e3_crs (:,:,:) = 0._wp 923 p_e3_max_crs(:,:,:) = 0._wp 2017 924 2018 925 2019 !CALL wrk_alloc( jpi, jpj, jpk, zmask, zsurf ) 2020 2021 SELECT CASE ( cd_type ) 926 SELECT CASE ( cd_type ) 2022 927 2023 928 CASE ('T') 2024 929 2025 DO jk = 1 , jpk 2026 DO ji = nistr, niend, nn_factx 2027 2028 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 2029 IF (nldj_crs == 1 .AND. (( mje_crs(2) - mjs_crs(2) ) < 2)) THEN !!cc bande du sud style ORCA2 2030 2031 IF ( mje_crs(2) - mjs_crs(2) == 1 ) THEN 2032 2033 jj = mje_crs(2) 2034 2035 2036 ze3crs = MAX( p_e3(ji ,jj ,jk) * p_mask(ji ,jj ,jk), & 2037 & p_e3(ji+1,jj ,jk) * p_mask(ji+1,jj ,jk), & 2038 & p_e3(ji+2,jj ,jk) * p_mask(ji+2,jj ,jk)) 2039 2040 p_e3_max_crs(ii,2,jk) = ze3crs 2041 2042 ze3crs = p_e3(ji ,jj ,jk) * p_e1(ji ,jj ) * p_e2(ji ,jj ) * p_mask(ji ,jj ,jk) + & 2043 & p_e3(ji+1,jj ,jk) * p_e1(ji+1,jj ) * p_e2(ji+1,jj ) * p_mask(ji+1,jj ,jk) + & 2044 & p_e3(ji+2,jj ,jk) * p_e1(ji+2,jj ) * p_e2(ji+2,jj ) * p_mask(ji+2,jj ,jk) 2045 2046 2047 p_e3_crs(ii,2,jk) = ze3crs / p_sfc_crs(ii,2,jk) 2048 ENDIF 2049 ELSE 2050 jj = mjs_crs(2) 2051 2052 ze3crs = MAX( p_e3(ji ,jj ,jk) * p_mask(ji ,jj ,jk), & 2053 & p_e3(ji+1,jj ,jk) * p_mask(ji+1,jj ,jk), & 2054 & p_e3(ji+2,jj ,jk) * p_mask(ji+2,jj ,jk), & 2055 & p_e3(ji ,jj+1,jk) * p_mask(ji ,jj+1,jk), & 2056 & p_e3(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk), & 2057 & p_e3(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk), & 2058 & p_e3(ji ,jj+2,jk) * p_mask(ji ,jj+2,jk), & 2059 & p_e3(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk), & 2060 & p_e3(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk) ) 2061 2062 p_e3_max_crs(ii,2,jk) = ze3crs 2063 2064 ze3crs = p_e3(ji ,jj ,jk) * p_e1(ji ,jj ) * p_e2(ji ,jj ) * p_mask(ji ,jj ,jk) + & 2065 & p_e3(ji+1,jj ,jk) * p_e1(ji+1,jj ) * p_e2(ji+1,jj ) * p_mask(ji+1,jj ,jk) + & 2066 & p_e3(ji+2,jj ,jk) * p_e1(ji+2,jj ) * p_e2(ji+2,jj ) * p_mask(ji+2,jj ,jk) + & 2067 & p_e3(ji ,jj+1,jk) * p_e1(ji ,jj+1) * p_e2(ji ,jj+1) * p_mask(ji ,jj+1,jk) + & 2068 & p_e3(ji+1,jj+1,jk) * p_e1(ji+1,jj+1) * p_e2(ji+1,jj+1) * p_mask(ji+1,jj+1,jk) + & 2069 & p_e3(ji+2,jj+1,jk) * p_e1(ji+2,jj+1) * p_e2(ji+2,jj+1) * p_mask(ji+2,jj+1,jk) + & 2070 & p_e3(ji ,jj+2,jk) * p_e1(ji ,jj+2) * p_e2(ji ,jj+2) * p_mask(ji ,jj+2,jk) + & 2071 & p_e3(ji+1,jj+2,jk) * p_e1(ji+1,jj+2) * p_e2(ji+1,jj+2) * p_mask(ji+1,jj+2,jk) + & 2072 & p_e3(ji+2,jj+2,jk) * p_e1(ji+2,jj+2) * p_e2(ji+2,jj+2) * p_mask(ji+2,jj+2,jk) 2073 2074 p_e3_crs(ii,2,jk) = ze3crs / p_sfc_crs(ii,2,jk) 2075 ENDIF 2076 2077 DO jj = njstr, njend, nn_facty 2078 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 ! cordinate in parent grid 2079 ij = ( jj - njstr ) * rfacty_r + 3 2080 ijje = mje_crs(ij) 2081 ijie = mie_crs(ii) 2082 ! 2083 ze3crs = MAX( p_e3(ji ,jj ,jk) * p_mask(ji ,jj ,jk), & 2084 & p_e3(ji+1,jj ,jk) * p_mask(ji+1,jj ,jk), & 2085 & p_e3(ji+2,jj ,jk) * p_mask(ji+2,jj ,jk), & 2086 & p_e3(ji ,jj+1,jk) * p_mask(ji ,jj+1,jk), & 2087 & p_e3(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk), & 2088 & p_e3(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk), & 2089 & p_e3(ji ,jj+2,jk) * p_mask(ji ,jj+2,jk), & 2090 & p_e3(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk), & 2091 & p_e3(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk) ) 2092 2093 p_e3_max_crs(ii,ij,jk) = ze3crs 2094 ze3crs = p_e3(ji ,jj ,jk) * p_e1(ji ,jj ) * p_e2(ji ,jj ) * p_mask(ji ,jj ,jk) + & 2095 & p_e3(ji+1,jj ,jk) * p_e1(ji+1,jj ) * p_e2(ji+1,jj ) * p_mask(ji+1,jj ,jk) + & 2096 & p_e3(ji+2,jj ,jk) * p_e1(ji+2,jj ) * p_e2(ji+2,jj ) * p_mask(ji+2,jj ,jk) + & 2097 & p_e3(ji ,jj+1,jk) * p_e1(ji ,jj+1) * p_e2(ji ,jj+1) * p_mask(ji ,jj+1,jk) + & 2098 & p_e3(ji+1,jj+1,jk) * p_e1(ji+1,jj+1) * p_e2(ji+1,jj+1) * p_mask(ji+1,jj+1,jk) + & 2099 & p_e3(ji+2,jj+1,jk) * p_e1(ji+2,jj+1) * p_e2(ji+2,jj+1) * p_mask(ji+2,jj+1,jk) + & 2100 & p_e3(ji ,jj+2,jk) * p_e1(ji ,jj+2) * p_e2(ji ,jj+2) * p_mask(ji ,jj+2,jk) + & 2101 & p_e3(ji+1,jj+2,jk) * p_e1(ji+1,jj+2) * p_e2(ji+1,jj+2) * p_mask(ji+1,jj+2,jk) + & 2102 & p_e3(ji+2,jj+2,jk) * p_e1(ji+2,jj+2) * p_e2(ji+2,jj+2) * p_mask(ji+2,jj+2,jk) 2103 2104 p_e3_crs(ii,ij,jk) = ze3crs / p_sfc_crs(ii,ij,jk) 930 DO jk = 1, jpk 931 DO ji = nldi_crs, nlei_crs 932 933 ijis = mis_crs(ji) 934 ijie = mie_crs(ji) 935 936 DO jj = nldj_crs, nlej_crs 937 938 ijjs = mjs_crs(jj) 939 ijje = mje_crs(jj) 940 941 p_e3_max_crs(ji,jj,jk) = MAXVAL( p_e3(ijis:ijie,ijjs:ijje,jk) * p_mask(ijis:ijie,ijjs:ijje,jk) ) 942 943 ze3crs = SUM( p_e1(ijis:ijie,ijjs:ijje) * p_e2(ijis:ijie,ijjs:ijje) * p_e3(ijis:ijie,ijjs:ijje,jk) * p_mask(ijis:ijie,ijjs:ijje,jk) ) 944 IF( p_sfc_3d_crs(ji,jj,jk) .NE. 0._wp )p_e3_crs(ji,jj,jk) = ze3crs / p_sfc_3d_crs(ji,jj,jk) 2105 945 2106 946 ENDDO … … 2110 950 CASE ('U') 2111 951 2112 DO jk = 1 , jpk 2113 DO ji = nistr, niend, nn_factx 2114 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 2115 IF (nldj_crs == 1 .AND. (( mje_crs(2) - mjs_crs(2) ) < 2)) THEN !!cc bande du sud style ORCA2 2116 2117 IF ( mje_crs(2) - mjs_crs(2) == 1 ) THEN 2118 2119 jj = mje_crs(2) 2120 2121 2122 ze3crs = p_e3(ji+2,jj ,jk) * p_mask(ji+2,jj ,jk) 2123 2124 p_e3_max_crs(ii,2,jk) = ze3crs 2125 2126 ze3crs = p_e3(ji+2,jj ,jk) * p_e1(ji+2,jj ) * p_e2(ji+2,jj ) * p_mask(ji+2,jj ,jk) 2127 2128 2129 p_e3_crs(ii,2,jk) = ze3crs / p_sfc_crs(ii,2,jk) 2130 ENDIF 2131 ELSE 2132 jj = mjs_crs(2) 2133 2134 ze3crs = MAX( p_e3(ji+2,jj ,jk) * p_mask(ji+2,jj ,jk), & 2135 p_e3(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk), & 2136 p_e3(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk) ) 2137 2138 p_e3_max_crs(ii,2,jk) = ze3crs 2139 2140 ze3crs = p_e3(ji+2,jj ,jk) * p_e1(ji+2,jj ) * p_e2(ji+2,jj ) * p_mask(ji+2,jj ,jk) + & 2141 & p_e3(ji+2,jj+1,jk) * p_e1(ji+2,jj+1) * p_e2(ji+2,jj+1) * p_mask(ji+2,jj+1,jk) + & 2142 & p_e3(ji+2,jj+2,jk) * p_e1(ji+2,jj+2) * p_e2(ji+2,jj+2) * p_mask(ji+2,jj+2,jk) 2143 2144 p_e3_crs(ii,2,jk) = ze3crs / p_sfc_crs(ii,2,jk) 2145 ENDIF 2146 DO jj = njstr, njend, nn_facty 2147 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 ! cordinate in parent grid 2148 ij = ( jj - njstr ) * rfacty_r + 3 2149 ijje = mje_crs(ij) 2150 ijie = mie_crs(ii) 2151 ! 2152 ze3crs = MAX( p_e3(ji+2,jj ,jk) * p_mask(ji+2,jj ,jk), & 2153 & p_e3(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk), & 2154 & p_e3(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk) ) 2155 2156 p_e3_max_crs(ii,ij,jk) = ze3crs 2157 2158 ze3crs = p_e3(ji+2,jj ,jk) * p_e1(ji+2,jj ) * p_e2(ji+2,jj ) * p_mask(ji+2,jj ,jk) + & 2159 & p_e3(ji+2,jj+1,jk) * p_e1(ji+2,jj+1) * p_e2(ji+2,jj+1) * p_mask(ji+2,jj+1,jk) + & 2160 & p_e3(ji+2,jj+2,jk) * p_e1(ji+2,jj+2) * p_e2(ji+2,jj+2) * p_mask(ji+2,jj+2,jk) 2161 2162 p_e3_crs(ii,ij,jk) = ze3crs / p_sfc_crs(ii,ij,jk) 2163 952 DO jk = 1, jpk 953 DO ji = nldi_crs, nlei_crs 954 955 ijis = mis_crs(ji) 956 ijie = mie_crs(ji) 957 958 DO jj = nldj_crs, nlej_crs 959 960 ijjs = mjs_crs(jj) 961 ijje = mje_crs(jj) 962 963 p_e3_max_crs(ji,jj,jk) = MAXVAL( p_e3(ijie,ijjs:ijje,jk) * p_mask(ijie,ijjs:ijje,jk) ) 964 965 ze3crs = SUM( p_e2(ijie,ijjs:ijje) * p_e3(ijie,ijjs:ijje,jk) * p_mask(ijie,ijjs:ijje,jk) ) 966 IF( p_sfc_2d_crs(ji,jj) .NE. 0._wp )p_e3_crs(ji,jj,jk) = ze3crs / p_sfc_2d_crs(ji,jj) 2164 967 ENDDO 2165 968 ENDDO … … 2167 970 2168 971 CASE ('V') 2169 DO jk = 1 , jpk 2170 DO ji = nistr, niend, nn_factx 2171 2172 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 2173 IF (nldj_crs == 1 .AND. (( mje_crs(2) - mjs_crs(2) ) < 2)) THEN !!cc bande du sud style ORCA2 2174 2175 IF ( mje_crs(2) - mjs_crs(2) == 1 ) THEN 2176 2177 jj = mje_crs(2) 2178 2179 2180 ze3crs = MAX( p_e3(ji ,jj ,jk) * p_mask(ji ,jj ,jk), & 2181 & p_e3(ji+1,jj ,jk) * p_mask(ji+1,jj ,jk), & 2182 & p_e3(ji+2,jj ,jk) * p_mask(ji+2,jj ,jk)) 2183 2184 p_e3_max_crs(ii,2,jk) = ze3crs 2185 2186 ze3crs = p_e3(ji ,jj ,jk) * p_e1(ji ,jj ) * p_e2(ji ,jj ) * p_mask(ji ,jj ,jk) + & 2187 & p_e3(ji+1,jj ,jk) * p_e1(ji+1,jj ) * p_e2(ji+1,jj ) * p_mask(ji+1,jj ,jk) + & 2188 & p_e3(ji+2,jj ,jk) * p_e1(ji+2,jj ) * p_e2(ji+2,jj ) * p_mask(ji+2,jj ,jk) 2189 2190 2191 p_e3_crs(ii,2,jk) = ze3crs / p_sfc_crs(ii,2,jk) 2192 ENDIF 2193 ELSE 2194 jj = mjs_crs(2) 2195 2196 ze3crs = MAX( p_e3(ji ,jj+2,jk) * p_mask(ji ,jj+2,jk), & 2197 & p_e3(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk), & 2198 & p_e3(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk) ) 2199 2200 p_e3_max_crs(ii,2,jk) = ze3crs 2201 2202 ze3crs = p_e3(ji ,jj+2,jk) * p_e1(ji ,jj+2) * p_e2(ji ,jj+2) * p_mask(ji ,jj+2,jk) + & 2203 & p_e3(ji+1,jj+2,jk) * p_e1(ji+1,jj+2) * p_e2(ji+1,jj+2) * p_mask(ji+1,jj+2,jk) + & 2204 & p_e3(ji+2,jj+2,jk) * p_e1(ji+2,jj+2) * p_e2(ji+2,jj+2) * p_mask(ji+2,jj+2,jk) 2205 2206 p_e3_crs(ii,2,jk) = ze3crs / p_sfc_crs(ii,2,jk) 2207 ENDIF 2208 2209 DO jj = njstr, njend, nn_facty 2210 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 ! cordinate in parent grid 2211 ij = ( jj - njstr ) * rfacty_r + 3 2212 ijje = mje_crs(ij) 2213 ijie = mie_crs(ii) 2214 ! 2215 ze3crs = MAX( p_e3(ji ,jj+2,jk) * p_mask(ji ,jj+2,jk), & 2216 & p_e3(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk), & 2217 & p_e3(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk) ) 2218 2219 p_e3_max_crs(ii,ij,jk) = ze3crs 2220 2221 ze3crs = p_e3(ji ,jj+2,jk) * p_e1(ji ,jj+2) * p_e2(ji ,jj+2) * p_mask(ji ,jj+2,jk) + & 2222 & p_e3(ji+1,jj+2,jk) * p_e1(ji+1,jj+2) * p_e2(ji+1,jj+2) * p_mask(ji+1,jj+2,jk) + & 2223 & p_e3(ji+2,jj+2,jk) * p_e1(ji+2,jj+2) * p_e2(ji+2,jj+2) * p_mask(ji+2,jj+2,jk) 2224 2225 p_e3_crs(ii,ij,jk) = ze3crs / p_sfc_crs(ii,ij,jk) 972 973 DO jk = 1, jpk 974 DO ji = nldi_crs, nlei_crs 975 976 ijis = mis_crs(ji) 977 ijie = mie_crs(ji) 978 979 DO jj = nldj_crs, nlej_crs 980 981 ijjs = mjs_crs(jj) 982 ijje = mje_crs(jj) 983 984 p_e3_max_crs(ji,jj,jk) = MAXVAL( p_e3(ijis:ijie,ijje,jk) * p_mask(ijis:ijie,ijje,jk) ) 985 986 ze3crs = SUM( p_e1(ijis:ijie,ijje) * p_e3(ijis:ijie,ijje,jk) * p_mask(ijis:ijie,ijje,jk) ) 987 IF( p_sfc_2d_crs(ji,jj) .NE. 0._wp )p_e3_crs(ji,jj,jk) = ze3crs / p_sfc_2d_crs(ji,jj) 2226 988 2227 989 ENDDO 2228 990 ENDDO 2229 991 ENDDO 992 2230 993 CASE ('W') 2231 994 2232 DO jk = 2 , jpk 2233 DO ji = nistr, niend, nn_factx 2234 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 2235 IF (nldj_crs == 1 .AND. (( mje_crs(2) - mjs_crs(2) ) < 2)) THEN !!cc bande du sud style ORCA2 2236 2237 IF ( mje_crs(2) - mjs_crs(2) == 1 ) THEN 2238 2239 jj = mje_crs(2) 2240 2241 2242 ze3crs = MAX( p_e3(ji ,jj ,jk) * p_mask(ji ,jj ,jk-1), & 2243 & p_e3(ji+1,jj ,jk) * p_mask(ji+1,jj ,jk-1), & 2244 & p_e3(ji+2,jj ,jk) * p_mask(ji+2,jj ,jk-1)) 2245 2246 p_e3_max_crs(ii,2,jk) = ze3crs 2247 2248 ze3crs = p_e3(ji ,jj ,jk) * p_e1(ji ,jj ) * p_e2(ji ,jj ) * p_mask(ji ,jj ,jk-1) + & 2249 & p_e3(ji+1,jj ,jk) * p_e1(ji+1,jj ) * p_e2(ji+1,jj ) * p_mask(ji+1,jj ,jk-1) + & 2250 & p_e3(ji+2,jj ,jk) * p_e1(ji+2,jj ) * p_e2(ji+2,jj ) * p_mask(ji+2,jj ,jk-1) 2251 2252 2253 p_e3_crs(ii,2,jk) = ze3crs / p_sfc_crs(ii,2,jk) 2254 ENDIF 2255 ELSE 2256 jj = mjs_crs(2) 2257 2258 ze3crs = MAX( p_e3(ji ,jj ,jk) * p_mask(ji ,jj ,jk-1), & 2259 & p_e3(ji+1,jj ,jk) * p_mask(ji+1,jj ,jk-1), & 2260 & p_e3(ji+2,jj ,jk) * p_mask(ji+2,jj ,jk-1), & 2261 & p_e3(ji ,jj+1,jk) * p_mask(ji ,jj+1,jk-1), & 2262 & p_e3(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk-1), & 2263 & p_e3(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk-1), & 2264 & p_e3(ji ,jj+2,jk) * p_mask(ji ,jj+2,jk-1), & 2265 & p_e3(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk-1), & 2266 & p_e3(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk-1) ) 2267 2268 p_e3_max_crs(ii,2,jk) = ze3crs 2269 ze3crs = p_e3(ji ,jj ,jk) * p_e1(ji ,jj ) * p_e2(ji ,jj ) * p_mask(ji ,jj ,jk-1) + & 2270 & p_e3(ji+1,jj ,jk) * p_e1(ji+1,jj ) * p_e2(ji+1,jj ) * p_mask(ji+1,jj ,jk-1) + & 2271 & p_e3(ji+2,jj ,jk) * p_e1(ji+2,jj ) * p_e2(ji+2,jj ) * p_mask(ji+2,jj ,jk-1) + & 2272 & p_e3(ji ,jj+1,jk) * p_e1(ji ,jj+1) * p_e2(ji ,jj+1) * p_mask(ji ,jj+1,jk-1) + & 2273 & p_e3(ji+1,jj+1,jk) * p_e1(ji+1,jj+1) * p_e2(ji+1,jj+1) * p_mask(ji+1,jj+1,jk-1) + & 2274 & p_e3(ji+2,jj+1,jk) * p_e1(ji+2,jj+1) * p_e2(ji+2,jj+1) * p_mask(ji+2,jj+1,jk-1) + & 2275 & p_e3(ji ,jj+2,jk) * p_e1(ji ,jj+2) * p_e2(ji ,jj+2) * p_mask(ji ,jj+2,jk-1) + & 2276 & p_e3(ji+1,jj+2,jk) * p_e1(ji+1,jj+2) * p_e2(ji+1,jj+2) * p_mask(ji+1,jj+2,jk-1) + & 2277 & p_e3(ji+2,jj+2,jk) * p_e1(ji+2,jj+2) * p_e2(ji+2,jj+2) * p_mask(ji+2,jj+2,jk-1) 2278 2279 p_e3_crs(ii,2,jk) = ze3crs / p_sfc_crs(ii,2,jk) 2280 ENDIF 2281 2282 2283 DO jj = njstr, njend, nn_facty 2284 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 ! cordinate in parent grid 2285 ij = ( jj - njstr ) * rfacty_r + 3 2286 ijje = mje_crs(ij) 2287 ijie = mie_crs(ii) 2288 ! 2289 ze3crs = MAX( p_e3(ji ,jj ,jk) * p_mask(ji ,jj ,jk-1), & 2290 & p_e3(ji+1,jj ,jk) * p_mask(ji+1,jj ,jk-1), & 2291 & p_e3(ji+2,jj ,jk) * p_mask(ji+2,jj ,jk-1), & 2292 & p_e3(ji ,jj+1,jk) * p_mask(ji ,jj+1,jk-1), & 2293 & p_e3(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk-1), & 2294 & p_e3(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk-1), & 2295 & p_e3(ji ,jj+2,jk) * p_mask(ji ,jj+2,jk-1), & 2296 & p_e3(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk-1), & 2297 & p_e3(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk-1) ) 2298 2299 p_e3_max_crs(ii,ij,jk) = ze3crs 2300 2301 ze3crs = p_e3(ji ,jj ,jk) * p_e1(ji ,jj ) * p_e2(ji ,jj ) * p_mask(ji ,jj ,jk-1) + & 2302 & p_e3(ji+1,jj ,jk) * p_e1(ji+1,jj ) * p_e2(ji+1,jj ) * p_mask(ji+1,jj ,jk-1) + & 2303 & p_e3(ji+2,jj ,jk) * p_e1(ji+2,jj ) * p_e2(ji+2,jj ) * p_mask(ji+2,jj ,jk-1) + & 2304 & p_e3(ji ,jj+1,jk) * p_e1(ji ,jj+1) * p_e2(ji ,jj+1) * p_mask(ji ,jj+1,jk-1) + & 2305 & p_e3(ji+1,jj+1,jk) * p_e1(ji+1,jj+1) * p_e2(ji+1,jj+1) * p_mask(ji+1,jj+1,jk-1) + & 2306 & p_e3(ji+2,jj+1,jk) * p_e1(ji+2,jj+1) * p_e2(ji+2,jj+1) * p_mask(ji+2,jj+1,jk-1) + & 2307 & p_e3(ji ,jj+2,jk) * p_e1(ji ,jj+2) * p_e2(ji ,jj+2) * p_mask(ji ,jj+2,jk-1) + & 2308 & p_e3(ji+1,jj+2,jk) * p_e1(ji+1,jj+2) * p_e2(ji+1,jj+2) * p_mask(ji+1,jj+2,jk-1) + & 2309 & p_e3(ji+2,jj+2,jk) * p_e1(ji+2,jj+2) * p_e2(ji+2,jj+2) * p_mask(ji+2,jj+2,jk-1) 2310 2311 p_e3_crs(ii,ij,jk) = ze3crs / p_sfc_crs(ii,ij,jk) 995 DO jk = 1, jpk 996 DO ji = nldi_crs, nlei_crs 997 998 ijis = mis_crs(ji) 999 ijie = mie_crs(ji) 1000 1001 DO jj = nldj_crs, nlej_crs 1002 1003 ijjs = mjs_crs(jj) 1004 ijje = mje_crs(jj) 1005 1006 p_e3_max_crs(ji,jj,jk) = MAXVAL( p_e3(ijis:ijie,ijjs:ijje,jk) * p_mask(ijis:ijie,ijjs:ijje,jk) ) 1007 1008 ze3crs = SUM( p_e1(ijis:ijie,ijjs:ijje) * p_e2(ijis:ijie,ijjs:ijje) * p_e3(ijis:ijie,ijjs:ijje,jk) * p_mask(ijis:ijie,ijjs:ijje,jk) ) 1009 IF( p_sfc_3d_crs(ji,jj,jk) .NE. 0._wp )p_e3_crs(ji,jj,jk) = ze3crs / p_sfc_3d_crs(ji,jj,jk) 2312 1010 2313 1011 ENDDO … … 2315 1013 ENDDO 2316 1014 2317 2318 !first level 2319 DO ji = nistr, niend, nn_factx 2320 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 2321 IF (nldj_crs == 1 .AND. (( mje_crs(2) - mjs_crs(2) ) < 2)) THEN !!cc bande du sud style ORCA2 2322 2323 IF ( mje_crs(2) - mjs_crs(2) == 1 ) THEN 2324 2325 jj = mje_crs(2) 2326 2327 ze3crs = MAX( p_e3(ji ,jj ,1) * p_mask(ji ,jj ,1), & 2328 & p_e3(ji+1,jj ,1) * p_mask(ji+1,jj ,1), & 2329 & p_e3(ji+2,jj ,1) * p_mask(ji+2,jj ,1)) 2330 2331 p_e3_max_crs(ii,2,1) = ze3crs 2332 2333 ze3crs = p_e3(ji ,jj ,1) * p_e1(ji ,jj ) * p_e2(ji ,jj ) * p_mask(ji ,jj ,1) + & 2334 & p_e3(ji+1,jj ,1) * p_e1(ji+1,jj ) * p_e2(ji+1,jj ) * p_mask(ji+1,jj ,1) + & 2335 & p_e3(ji+2,jj ,1) * p_e1(ji+2,jj ) * p_e2(ji+2,jj ) * p_mask(ji+2,jj ,1) 2336 2337 p_e3_crs(ii,2,1) = ze3crs / p_sfc_crs(ii,2,1) 2338 ENDIF 2339 ELSE 2340 jj = mjs_crs(2) 2341 2342 ze3crs = MAX( p_e3(ji ,jj ,1) * p_mask(ji ,jj ,1), & 2343 & p_e3(ji+1,jj ,1) * p_mask(ji+1,jj ,1), & 2344 & p_e3(ji+2,jj ,1) * p_mask(ji+2,jj ,1), & 2345 & p_e3(ji ,jj+1,1) * p_mask(ji ,jj+1,1), & 2346 & p_e3(ji+1,jj+1,1) * p_mask(ji+1,jj+1,1), & 2347 & p_e3(ji+2,jj+1,1) * p_mask(ji+2,jj+1,1), & 2348 & p_e3(ji ,jj+2,1) * p_mask(ji ,jj+2,1), & 2349 & p_e3(ji+1,jj+2,1) * p_mask(ji+1,jj+2,1), & 2350 & p_e3(ji+2,jj+2,1) * p_mask(ji+2,jj+2,1) ) 2351 2352 p_e3_max_crs(ii,2,1) = ze3crs 2353 ze3crs = p_e3(ji ,jj ,1) * p_e1(ji ,jj ) * p_e2(ji ,jj ) * p_mask(ji ,jj ,1) + & 2354 & p_e3(ji+1,jj ,1) * p_e1(ji+1,jj ) * p_e2(ji+1,jj ) * p_mask(ji+1,jj ,1) + & 2355 & p_e3(ji+2,jj ,1) * p_e1(ji+2,jj ) * p_e2(ji+2,jj ) * p_mask(ji+2,jj ,1) + & 2356 & p_e3(ji ,jj+1,1) * p_e1(ji ,jj+1) * p_e2(ji ,jj+1) * p_mask(ji ,jj+1,1) + & 2357 & p_e3(ji+1,jj+1,1) * p_e1(ji+1,jj+1) * p_e2(ji+1,jj+1) * p_mask(ji+1,jj+1,1) + & 2358 & p_e3(ji+2,jj+1,1) * p_e1(ji+2,jj+1) * p_e2(ji+2,jj+1) * p_mask(ji+2,jj+1,1) + & 2359 & p_e3(ji ,jj+2,1) * p_e1(ji ,jj+2) * p_e2(ji ,jj+2) * p_mask(ji ,jj+2,1) + & 2360 & p_e3(ji+1,jj+2,1) * p_e1(ji+1,jj+2) * p_e2(ji+1,jj+2) * p_mask(ji+1,jj+2,1) + & 2361 & p_e3(ji+2,jj+2,1) * p_e1(ji+2,jj+2) * p_e2(ji+2,jj+2) * p_mask(ji+2,jj+2,1) 2362 2363 p_e3_crs(ii,2,1) = ze3crs / p_sfc_crs(ii,2,1) 2364 2365 ENDIF 2366 DO jj = njstr, njend, nn_facty 2367 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 ! cordinate in parent grid 2368 ij = ( jj - njstr ) * rfacty_r + 3 2369 ijje = mje_crs(ij) 2370 ijie = mie_crs(ii) 2371 ! 2372 ze3crs = MAX( p_e3(ji ,jj ,1) * p_mask(ji ,jj ,1), & 2373 & p_e3(ji+1,jj ,1) * p_mask(ji+1,jj ,1), & 2374 & p_e3(ji+2,jj ,1) * p_mask(ji+2,jj ,1), & 2375 & p_e3(ji ,jj+1,1) * p_mask(ji ,jj+1,1), & 2376 & p_e3(ji+1,jj+1,1) * p_mask(ji+1,jj+1,1), & 2377 & p_e3(ji+2,jj+1,1) * p_mask(ji+2,jj+1,1), & 2378 & p_e3(ji ,jj+2,1) * p_mask(ji ,jj+2,1), & 2379 & p_e3(ji+1,jj+2,1) * p_mask(ji+1,jj+2,1), & 2380 & p_e3(ji+2,jj+2,1) * p_mask(ji+2,jj+2,1) ) 2381 2382 p_e3_max_crs(ii,ij,1) = ze3crs 2383 2384 ze3crs = p_e3(ji ,jj ,1) * p_e1(ji ,jj ) * p_e2(ji ,jj ) * p_mask(ji ,jj ,1) + & 2385 & p_e3(ji+1,jj ,1) * p_e1(ji+1,jj ) * p_e2(ji+1,jj ) * p_mask(ji+1,jj ,1) + & 2386 & p_e3(ji+2,jj ,1) * p_e1(ji+2,jj ) * p_e2(ji+2,jj ) * p_mask(ji+2,jj ,1) + & 2387 & p_e3(ji ,jj+1,1) * p_e1(ji ,jj+1) * p_e2(ji ,jj+1) * p_mask(ji ,jj+1,1) + & 2388 & p_e3(ji+1,jj+1,1) * p_e1(ji+1,jj+1) * p_e2(ji+1,jj+1) * p_mask(ji+1,jj+1,1) + & 2389 & p_e3(ji+2,jj+1,1) * p_e1(ji+2,jj+1) * p_e2(ji+2,jj+1) * p_mask(ji+2,jj+1,1) + & 2390 & p_e3(ji ,jj+2,1) * p_e1(ji ,jj+2) * p_e2(ji ,jj+2) * p_mask(ji ,jj+2,1) + & 2391 & p_e3(ji+1,jj+2,1) * p_e1(ji+1,jj+2) * p_e2(ji+1,jj+2) * p_mask(ji+1,jj+2,1) + & 2392 & p_e3(ji+2,jj+2,1) * p_e1(ji+2,jj+2) * p_e2(ji+2,jj+2) * p_mask(ji+2,jj+2,1) 2393 2394 p_e3_crs(ii,ij,1) = ze3crs / p_sfc_crs(ii,ij,1) 2395 2396 ENDDO 2397 ENDDO 2398 ! 2399 END SELECT 2400 2401 CALL crs_lbc_lnk( p_e3_max_crs, cd_type, 1.0, pval=1.0 ) 2402 CALL crs_lbc_lnk( p_e3_crs , cd_type, 1.0, pval=1.0 ) 2403 ! 2404 !CALL wrk_dealloc( jpi, jpj, jpk, zsurf, zmask ) 2405 ! 1015 END SELECT 1016 1017 CALL crs_lbc_lnk( p_e3_max_crs, cd_type, 1.0, pval=1.0 ) 1018 CALL crs_lbc_lnk( p_e3_crs , cd_type, 1.0, pval=1.0 ) 1019 2406 1020 END SUBROUTINE crs_dom_e3 2407 1021 2408 SUBROUTINE crs_dom_sfc( p_mask, cd_type, p_surf_crs, p_surf_crs_msk, p_e1, p_e2, p_e3 ) 2409 1022 SUBROUTINE crs_dom_sfc(p_mask, cd_type, p_surf_crs, p_surf_crs_msk, p_e1, p_e2, p_e3 ) 1023 !!========================================================================================= 1024 !! 1025 !! 1026 !!========================================================================================= 2410 1027 !! Arguments 2411 1028 CHARACTER(len=1), INTENT(in) :: cd_type ! grid type T, W ( U, V, F) … … 2418 1035 !! Local variables 2419 1036 INTEGER :: ji, jj, jk ! dummy loop indices 2420 INTEGER :: ii, ij, je_2 2421 INTEGER :: iji,ijj 1037 INTEGER :: ijis,ijie,ijjs,ijje 2422 1038 REAL(wp), DIMENSION(:,:,:), POINTER :: zsurf, zsurfmsk 2423 1039 !!---------------------------------------------------------------- … … 2434 1050 zsurf(:,:,jk) = p_e1(:,:) * p_e2(:,:) 2435 1051 ENDDO 2436 !zsurfmsk(:,:,1) = zsurf(:,:,1) * p_mask(:,:,1)2437 !cbr DO jk = 2, jpk2438 DO jk = 1, jpk2439 !cbr zsurfmsk(:,:,jk) = zsurf(:,:,jk) * p_mask(:,:,jk-1)2440 zsurfmsk(:,:,jk) = zsurf(:,:,jk) * p_mask(:,:,jk)2441 ENDDO2442 1052 2443 1053 CASE ('V') … … 2445 1055 zsurf(:,:,jk) = p_e1(:,:) * p_e3(:,:,jk) 2446 1056 ENDDO 2447 DO jk = 1, jpk 2448 zsurfmsk(:,:,jk) = zsurf(:,:,jk) * p_mask(:,:,jk) 2449 ENDDO 2450 1057 2451 1058 CASE ('U') 2452 1059 DO jk = 1, jpk 2453 1060 zsurf(:,:,jk) = p_e2(:,:) * p_e3(:,:,jk) 2454 1061 ENDDO 2455 DO jk = 1, jpk2456 zsurfmsk(:,:,jk) = zsurf(:,:,jk) * p_mask(:,:,jk)2457 ENDDO2458 1062 2459 1063 CASE DEFAULT … … 2461 1065 zsurf(:,:,jk) = p_e1(:,:) * p_e2(:,:) 2462 1066 ENDDO 1067 END SELECT 1068 1069 DO jk = 1, jpk 1070 zsurfmsk(:,:,jk) = zsurf(:,:,jk) * p_mask(:,:,jk) 1071 ENDDO 1072 1073 SELECT CASE ( cd_type ) 1074 1075 CASE ('W') 1076 2463 1077 DO jk = 1, jpk 2464 zsurfmsk(:,:,jk) = zsurf(:,:,jk) * p_mask(:,:,jk) 2465 ENDDO 1078 DO jj = nldj_crs,nlej_crs 1079 ijjs=mjs_crs(jj) 1080 ijje=mje_crs(jj) 1081 DO ji = nldi_crs,nlei_crs 1082 ijis=mis_crs(ji) 1083 ijie=mie_crs(ji) 1084 p_surf_crs (ji,jj,jk) = SUM(zsurf (ijis:ijie,ijjs:ijje,jk) ) 1085 p_surf_crs_msk(ji,jj,jk) = SUM(zsurfmsk(ijis:ijie,ijjs:ijje,jk) ) 1086 ENDDO 1087 ENDDO 1088 ENDDO 1089 1090 CASE ('U') 1091 1092 DO jk = 1, jpk 1093 DO jj = nldj_crs,nlej_crs 1094 ijjs=mjs_crs(jj) 1095 ijje=mje_crs(jj) 1096 DO ji = nldi_crs,nlei_crs 1097 ijis=mis_crs(ji) 1098 ijie=mie_crs(ji) 1099 p_surf_crs (ji,jj,jk) = SUM(zsurf (ijie,ijjs:ijje,jk) ) 1100 p_surf_crs_msk(ji,jj,jk) = SUM(zsurfmsk(ijie,ijjs:ijje,jk) ) 1101 ENDDO 1102 ENDDO 1103 ENDDO 1104 1105 CASE ('V') 1106 1107 DO jk = 1, jpk 1108 DO jj = nldj_crs,nlej_crs 1109 ijjs=mjs_crs(jj) 1110 ijje=mje_crs(jj) 1111 DO ji = nldi_crs,nlei_crs 1112 ijis=mis_crs(ji) 1113 ijie=mie_crs(ji) 1114 p_surf_crs (ji,jj,jk) = SUM(zsurf (ijis:ijie,ijje,jk) ) 1115 p_surf_crs_msk(ji,jj,jk) = SUM(zsurfmsk(ijis:ijie,ijje,jk) ) 1116 ENDDO 1117 ENDDO 1118 ENDDO 1119 2466 1120 END SELECT 2467 1121 2468 !WRITE(narea+200,*)"TOTO",nldj_crs,mjs_crs(1), mje_crs(1),mjs_crs(2), mje_crs(2),mjs_crs(3), mje_crs(3),mjs_crs(4), mje_crs(4) ; CALL FLUSH(narea+200) 2469 2470 SELECT CASE ( cd_type ) 2471 2472 CASE ('W') 2473 2474 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA2 2475 IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 2476 je_2 = mje_crs(2) 2477 DO jk = 1, jpk 2478 DO ji = nistr, niend, nn_factx 2479 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 2480 ! 2481 p_surf_crs (ii,2,jk) = zsurf(ji,je_2 ,jk) + zsurf(ji+1,je_2 ,jk) + zsurf(ji+2,je_2 ,jk) & 2482 & + zsurf(ji,je_2-1,jk) + zsurf(ji+1,je_2-1,jk) + zsurf(ji+2,je_2-1,jk) ! Why ????? 2483 ! 2484 p_surf_crs_msk(ii,2,jk) = zsurfmsk(ji,je_2,jk) + zsurfmsk(ji+1,je_2,jk) + zsurfmsk(ji+2,je_2,jk) 2485 ! 2486 ENDDO 2487 ENDDO 2488 ENDIF 2489 ELSE 2490 je_2 = mjs_crs(2) 2491 DO jk = 1, jpk 2492 DO ji = nistr, niend, nn_factx 2493 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 2494 ! 2495 p_surf_crs (ii,2,jk) = zsurf(ji,je_2 ,jk) + zsurf(ji+1,je_2 ,jk) + zsurf(ji+2,je_2 ,jk) & 2496 & + zsurf(ji,je_2+1,jk) + zsurf(ji+1,je_2+1,jk) + zsurf(ji+2,je_2+1,jk) & 2497 & + zsurf(ji,je_2+2,jk) + zsurf(ji+1,je_2+2,jk) + zsurf(ji+2,je_2+2,jk) 2498 2499 p_surf_crs_msk(ii,2,jk) = zsurfmsk(ji,je_2 ,jk) + zsurfmsk(ji+1,je_2 ,jk) + zsurfmsk(ji+2,je_2 ,jk) & 2500 & + zsurfmsk(ji,je_2+1,jk) + zsurfmsk(ji+1,je_2+1,jk) + zsurfmsk(ji+2,je_2+1,jk) & 2501 & + zsurfmsk(ji,je_2+2,jk) + zsurfmsk(ji+1,je_2+2,jk) + zsurfmsk(ji+2,je_2+2,jk) 2502 ENDDO 2503 ENDDO 2504 ENDIF 2505 2506 DO jk = 1, jpk 2507 DO jj = njstr, njend, nn_facty 2508 DO ji = nistr, niend, nn_factx 2509 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 2510 ij = ( jj - njstr ) * rfacty_r + 3 2511 ! 2512 p_surf_crs (ii,ij,jk) = zsurf(ji,jj ,jk) + zsurf(ji+1,jj ,jk) + zsurf(ji+2,jj ,jk) & 2513 & + zsurf(ji,jj+1,jk) + zsurf(ji+1,jj+1,jk) + zsurf(ji+2,jj+1,jk) & 2514 & + zsurf(ji,jj+2,jk) + zsurf(ji+1,jj+2,jk) + zsurf(ji+2,jj+2,jk) 2515 p_surf_crs_msk(ii,ij,jk) = zsurfmsk(ji,jj ,jk) + zsurfmsk(ji+1,jj ,jk) + zsurfmsk(ji+2,jj ,jk) & 2516 & + zsurfmsk(ji,jj+1,jk) + zsurfmsk(ji+1,jj+1,jk) + zsurfmsk(ji+2,jj+1,jk) & 2517 & + zsurfmsk(ji,jj+2,jk) + zsurfmsk(ji+1,jj+2,jk) + zsurfmsk(ji+2,jj+2,jk) 2518 2519 ENDDO 2520 ENDDO 2521 ENDDO 2522 2523 CASE ('U') 2524 2525 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA2 2526 IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 2527 je_2 = mje_crs(2) 2528 DO jk = 1, jpk 2529 DO ji = nistr, niend, nn_factx 2530 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 2531 ! 2532 p_surf_crs (ii,2,jk) = zsurf(ji+2,je_2 ,jk) 2533 ! 2534 p_surf_crs_msk(ii,2,jk) = zsurfmsk(ji+2,je_2,jk) 2535 ! 2536 ENDDO 2537 ENDDO 2538 ENDIF 2539 ELSE 2540 je_2 = mjs_crs(2) 2541 DO jk = 1, jpk 2542 DO ji = nistr, niend, nn_factx 2543 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 2544 ! 2545 p_surf_crs (ii,2,jk) = zsurf(ji+2,je_2 ,jk) & 2546 & + zsurf(ji+2,je_2+1,jk) & 2547 & + zsurf(ji+2,je_2+2,jk) 2548 2549 p_surf_crs_msk(ii,2,jk) = zsurfmsk(ji+2,je_2 ,jk) & 2550 & + zsurfmsk(ji+2,je_2+1,jk) & 2551 & + zsurfmsk(ji+2,je_2+2,jk) 2552 ENDDO 2553 ENDDO 2554 ENDIF 2555 2556 DO jk = 1, jpk 2557 DO jj = njstr, njend, nn_facty 2558 DO ji = nistr, niend, nn_factx 2559 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 2560 ij = ( jj - njstr ) * rfacty_r + 3 2561 ! 2562 p_surf_crs (ii,ij,jk) = zsurf(ji+2,jj ,jk) & 2563 & + zsurf(ji+2,jj+1,jk) & 2564 & + zsurf(ji+2,jj+2,jk) 2565 p_surf_crs_msk(ii,ij,jk) = zsurfmsk(ji+2,jj ,jk) & 2566 & + zsurfmsk(ji+2,jj+1,jk) & 2567 & + zsurfmsk(ji+2,jj+2,jk) 2568 ENDDO 2569 ENDDO 2570 ENDDO 2571 2572 CASE ('V') 2573 2574 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN !!cc bande du sud style ORCA2 2575 IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 2576 je_2 = mje_crs(2) 2577 DO jk = 1, jpk 2578 DO ji = nistr, niend, nn_factx 2579 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 2580 ! 2581 p_surf_crs (ii,2,jk) = zsurf(ji,je_2 ,jk) + zsurf(ji+1,je_2 ,jk) + zsurf(ji+2,je_2 ,jk) 2582 ! 2583 p_surf_crs_msk(ii,2,jk) = zsurfmsk(ji,je_2,jk) + zsurfmsk(ji+1,je_2,jk) + zsurfmsk(ji+2,je_2,jk) 2584 ! 2585 ENDDO 2586 ENDDO 2587 ENDIF 2588 ELSE 2589 je_2 = mjs_crs(2) 2590 DO jk = 1, jpk 2591 DO ji = nistr, niend, nn_factx 2592 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 2593 ! 2594 p_surf_crs (ii,2,jk) = zsurf(ji,je_2+2,jk) + zsurf(ji+1,je_2+2,jk) + zsurf(ji+2,je_2+2,jk) 2595 p_surf_crs_msk(ii,2,jk) = zsurfmsk(ji,je_2+2,jk) + zsurfmsk(ji+1,je_2+2,jk) + zsurfmsk(ji+2,je_2+2,jk) 2596 ENDDO 2597 ENDDO 2598 ENDIF 2599 2600 DO jk = 1, jpk 2601 DO jj = njstr, njend, nn_facty 2602 DO ji = nistr, niend, nn_factx 2603 ii = ( ji - mis_crs(2) ) * rfactx_r + 2 2604 ij = ( jj - njstr ) * rfacty_r + 3 2605 ! 2606 p_surf_crs (ii,ij,jk) = zsurf(ji,jj+2,jk) + zsurf(ji+1,jj+2,jk) + zsurf(ji+2,jj+2,jk) 2607 p_surf_crs_msk(ii,ij,jk) = zsurfmsk(ji,jj+2,jk) + zsurfmsk(ji+1,jj+2,jk) + zsurfmsk(ji+2,jj+2,jk) 2608 !iji=117 ; ijj=210 2609 !iji=iji-nimpp_crs+1 ; ijj=ijj-njmpp_crs+1 2610 !IF( ii==iji .AND. ij==ijj .AND. jk==74 )THEN 2611 !WRITE(narea+5000,*)"SFC V =======> " 2612 !WRITE(narea+5000,*)ii,ij,jk 2613 !WRITE(narea+5000,*)ji,jj 2614 !WRITE(narea+5000,*)zsurfmsk(ji,jj+2,jk),zsurfmsk(ji+1,jj+2,jk),zsurfmsk(ji+2,jj+2,jk) 2615 !WRITE(narea+5000,*)p_surf_crs (ii,ij,jk),p_surf_crs_msk(ii,ij,jk) 2616 !ENDIF 2617 ENDDO 2618 ENDDO 2619 ENDDO 2620 2621 END SELECT 2622 !DO jk=1,jpk 2623 !DO ji=1,jpi_crs 2624 !DO jj=1,jpj_crs 2625 ! IF( p_surf_crs_msk(ji,jj,jk) .NE. p_surf_crs_msk(ji,jj,jk) )WRITE(narea+200,*)"SFC 4 ",ji,jj,jk,p_surf_crs_msk(ji,jj,jk) ; call flush(narea+200) 2626 !ENDDO 2627 !ENDDO 2628 !ENDDO 2629 CALL crs_lbc_lnk( p_surf_crs , cd_type, 1.0, pval=1.0 ) 2630 CALL crs_lbc_lnk( p_surf_crs_msk, cd_type, 1.0, pval=1.0 ) 1122 CALL crs_lbc_lnk( p_surf_crs , cd_type, 1.0 ) !cbr , pval=1.0 ) 1123 CALL crs_lbc_lnk( p_surf_crs_msk, cd_type, 1.0 ) !cbr , pval=1.0 ) 2631 1124 2632 1125 CALL wrk_dealloc( jpi, jpj, jpk, zsurf, zsurfmsk ) … … 2647 1140 INTEGER :: ji,jj,jk,ijjgloT,ijis,ijie,ijjs,ijje,jn ! dummy indices 2648 1141 INTEGER :: ierr ! allocation error status 2649 INTEGER :: ii,ij,iproc,iprocno,iprocso,iimppt_crs 1142 INTEGER :: iproci,iprocj,iproc,iprocno,iprocso,iimppt_crs 1143 INTEGER :: ii_start,ii_end,ij_start,ij_end 2650 1144 2651 1145 … … 2654 1148 ! jpjglo_crs = INT( (jpjglo - 2) / nn_facty ) + 2 ! the -2 removes j=1, j=jpj 2655 1149 ! jpjglo_crs = INT( (jpjglo - 2) / nn_facty ) + 3 2656 jpjglo_crs = INT( (jpjglo - MOD(jpjglo, nn_facty)) / nn_facty ) + 31150 jpjglo_crs = INT( (jpjglo - MOD(jpjglo, nn_facty)) / nn_facty ) + 2 2657 1151 jpiglo_crsm1 = jpiglo_crs - 1 2658 1152 jpjglo_crsm1 = jpjglo_crs - 1 2659 1153 2660 1154 jpi_crs = ( jpiglo_crs - 2 * jpreci + (jpni-1) ) / jpni + 2 * jpreci 2661 jpj_crs = ( jpjglo_crsm1 - 2 * jprecj + (jpnj-1) ) / jpnj + 2 * jprecj 2662 !WRITE(narea+200,*)"jpj_crs noso = ", jpj_crs , noso 2663 IF( noso < 0 ) jpj_crs = jpj_crs + 1 ! add a local band on southern processors ! celle qui est faite de zeros 2664 !WRITE(narea+200,*)"jpj_crs = ", jpj_crs 1155 jpj_crs = ( jpjglo_crsm1 - 2 * jprecj + (jpnj-1) ) / jpnj + 2 * jprecj 1156 !cbr? IF( njmpp==1 )THEN 1157 ! jpj_crs=jpj_crs+1 1158 ! ENDIF 1159 2665 1160 2666 1161 jpi_crsm1 = jpi_crs - 1 … … 2695 1190 ! mpp_ini2 2696 1191 !============================================================================================== 2697 2698 !cbr 2699 DO jn = 1, jpnij 2700 !WRITE(narea+200,*)"=====> jn",jn ; call flush(narea+200) 2701 2702 !proc jn 2703 DO ji = 1 , jpni 2704 DO jj = 1 ,jpnj 2705 IF( nfipproc(ji,jj) == jn-1 )THEN 2706 ii=ji 2707 ij=jj 2708 ENDIF 2709 ENDDO 2710 ENDDO 2711 iproc = ii + jpni * ( ij-1 ) - 1 2712 ! mppini : 2713 !iprocso = ii + jpni * ( ij-2 ) - 1 2714 ! mppini2: 2715 IF( ij .GT. 1 )THEN ; iprocso = nfipproc(ii,ij-1) 2716 ELSE ; iprocso = -1 1192 DO ji = 1 , jpni 1193 DO jj = 1 ,jpnj 1194 IF( nfipproc(ji,jj) == narea-1 )THEN 1195 iproci=ji 1196 iprocj=jj 1197 ENDIF 1198 ENDDO 1199 ENDDO 1200 1201 !WRITE(narea+8000-1,*)"nfipproc(ji,jj),narea :",nfipproc(iproci,iprocj),narea 1202 !WRITE(narea+8000-1,*)"proc i,j ",iproci,iprocj 1203 !WRITE(narea+8000-1,*)"nowe noea",nowe,noea 1204 !WRITE(narea+8000-1,*)"noso nono",noso,nono 1205 !WRITE(narea+8000-1,*)"nbondi nbondj ",nbondi,nbondj 1206 !WRITE(narea+8000-1,*)"jpiglo jpjglo ",jpiglo,jpjglo 1207 !WRITE(narea+8000-1,*)"jpi jpj ",jpi,jpj 1208 !WRITE(narea+8000-1,*)"nbondi nbondj",nbondi,nbondj 1209 !WRITE(narea+8000-1,*)"nimpp njmpp ",nimpp,njmpp 1210 !WRITE(narea+8000-1,*)"loc jpi nldi,nlei,nlci ",jpi, nldi ,nlei ,nlci 1211 !WRITE(narea+8000-1,*)"glo jpi nldi,nlei ",jpi, nldi+nimpp-1,nlei+nimpp-1 1212 !WRITE(narea+8000-1,*)"loc jpj nldj,nlej,nlcj ",jpj, nldj ,nlej ,nlcj 1213 !WRITE(narea+8000-1,*)"glo jpj nldj,nlej ",jpj, nldj+njmpp-1,nlej+njmpp-1 1214 !WRITE(narea+8000-1,*)"jpiglo_crs jpjglo_crs ",jpiglo_crs,jpjglo_crs 1215 !WRITE(narea+8000-1,*)"jpi_crs jpj_crs ",jpi_crs,jpj_crs 1216 !WRITE(narea+8000-1,*)"jpni jpnj jpnij ",jpni,jpnj,jpnij 1217 !WRITE(narea+8000-1,*)"glamt gphit ",glamt(1,1),gphit(jpi,jpj),glamt(jpi,jpj),gphit(jpi,jpj) 1218 !========================================================================== 1219 ! dim along I 1220 !========================================================================== 1221 SELECT CASE ( nperio ) 1222 CASE ( 0, 1, 3, 4 ) ! 3, 4 : T-Pivot at North Fold 1223 1224 DO ji=1,jpiglo_crs 1225 ijis=nn_factx*(ji-1)-2 1226 ijie=nn_factx*(ji-1) 1227 mis2_crs(ji)=ijis 1228 mie2_crs(ji)=ijie 1229 ENDDO 1230 1231 ji=1 1232 DO WHILE( mis2_crs(ji) - nimpp + 1 .LT. 1 ) 1233 ji=ji+1 1234 IF( ji==jpiglo_crs )EXIT 1235 END DO 1236 ijis=ji 1237 1238 !mjs2_crs(ijis)=indice global ds la grille no crs de la premiere maille du premier pavé contenu ds le domaine intérieur 1239 !ijis =indice global ds la grille crs de la premire maille qui est ds le domaine intérieur 1240 !ii_start =indice local de mjs2_crs(jj) 1241 ii_start = mis2_crs(ijis)-nimpp+1 1242 nimpp_crs = ijis-1 1243 1244 nldi_crs = 2 1245 IF( nowe == -1 )THEN 1246 1247 mie2_crs(ijis-1) = mis2_crs(ijis)-1 1248 1249 SELECT CASE(ii_start) 1250 CASE(1) 1251 nldi_crs=2 1252 mie2_crs(ijis-1) = -1 1253 mis2_crs(ijis-1) = -1 1254 CASE(2) 1255 !CBR? nldi_crs=1 1256 nldi_crs=2 1257 mis2_crs(ijis-1) = mie2_crs(ijis-1) 1258 CASE(3) 1259 !CBR? nldi_crs=1 1260 nldi_crs=2 1261 mis2_crs(ijis-1) = mie2_crs(ijis-1) -1 1262 CASE DEFAULT 1263 WRITE(narea+8000-1,*)"WRONG VALUE FOR iistart ",ii_start 1264 END SELECT 1265 1266 ENDIF 1267 1268 IF( nimpp==1 )nimpp_crs=1 1269 1270 !---------------------------------------- 1271 ji=jpiglo_crs 1272 DO WHILE( mie2_crs(ji) - nimpp + 1 .GT. jpi ) 1273 ji=ji-1 1274 IF( ji==1 )EXIT 1275 END DO 1276 ijie=ji 1277 nlei_crs=ijie-nimpp_crs+1 1278 nlci_crs=nlei_crs+jpreci 1279 1280 !---------------------------------------- 1281 DO ji = 1, jpi_crs 1282 mig_crs(ji) = ji + nimpp_crs - 1 1283 ENDDO 1284 DO ji = 1, jpiglo_crs 1285 mi0_crs(ji) = MAX( 1, MIN( ji - nimpp_crs + 1 , jpi_crs + 1 ) ) 1286 mi1_crs(ji) = MAX( 0, MIN( ji - nimpp_crs + 1 , jpi_crs ) ) 1287 ENDDO 1288 1289 !---------------------------------------- 1290 DO ji = 1, nlei_crs 1291 mis_crs(ji) = mis2_crs(mig_crs(ji)) - nimpp + 1 1292 mie_crs(ji) = mie2_crs(mig_crs(ji)) - nimpp + 1 1293 nfactx(ji) = mie_crs(ji)-mie_crs(ji)+1 1294 ENDDO 1295 1296 IF( iproci == jpni )THEN 1297 nlei_crs=nlci_crs 1298 mis_crs(nlei_crs)=mis_crs(nlei_crs-1) 1299 mie_crs(nlei_crs)=mie_crs(nlei_crs-1) 1300 ENDIF 1301 1302 !---------------------------------------- 1303 1304 CASE DEFAULT 1305 WRITE(numout,*) 'crs_init. Only jperio = 0, 1, 3, 4 supported' 1306 END SELECT 1307 1308 !========================================================================== 1309 ! dim along J 1310 !========================================================================== 1311 SELECT CASE ( nperio ) 1312 CASE ( 0, 1, 3, 4 ) ! 3, 4 : T-Pivot at North Fold 1313 1314 DO jj=1,jpjglo_crs 1315 ijjs=nn_facty*(jj)-5 1316 ijje=nn_facty*(jj)-3 1317 mjs2_crs(jj)=ijjs 1318 mje2_crs(jj)=ijje 1319 ENDDO 1320 1321 jj=1 1322 DO WHILE( mjs2_crs(jj) - njmpp + 1 .LT. 1 ) 1323 jj=jj+1 1324 IF( jj==jpjglo_crs )EXIT 1325 END DO 1326 ijjs=jj 1327 1328 !mjs2_crs(jj)=indice global ds la grille no crs de la premiere maille du premier pavé contenu ds le domaine intérieur 1329 !ijjs =indice global ds la grille crs de la premire maille qui est ds le domaine intérieur 1330 !ij_start =indice local de mjs2_crs(jj) 1331 ij_start = mjs2_crs(ijjs)-njmpp+1 1332 njmpp_crs = ijjs-1 1333 1334 nldj_crs = 2 1335 IF( noso == -1 )THEN 1336 1337 mje2_crs(ijjs-1) = mjs2_crs(ijjs)-1 1338 1339 SELECT CASE(ij_start) 1340 CASE(1) 1341 nldj_crs=2 1342 mje2_crs(ijjs-1) = -1 1343 mjs2_crs(ijjs-1) = -1 1344 CASE(2) 1345 !CBR? nldj_crs=1 1346 nldj_crs=2 1347 mjs2_crs(ijjs-1) = mje2_crs(ijjs-1) 1348 CASE(3) 1349 !CBR? nldj_crs=1 1350 nldj_crs=2 1351 mjs2_crs(ijjs-1) = mje2_crs(ijjs-1) -1 1352 CASE DEFAULT 1353 WRITE(narea+8000-1,*)"WRONG VALUE FOR iistart ",ii_start 1354 END SELECT 1355 1356 ENDIF 1357 IF( njmpp==1 )njmpp_crs=1 1358 1359 1360 !---------------------------------------- 1361 jj=jpjglo_crs 1362 DO WHILE( mje2_crs(jj) - njmpp + 1 .GT. nlcj ) 1363 jj=jj-1 1364 IF( jj==1 )EXIT 1365 END DO 1366 ijje=jj 1367 1368 nlej_crs=ijje-njmpp_crs+1 1369 1370 !---------------------------------------- 1371 nlcj_crs=nlej_crs+jprecj 1372 IF( iprocj == jpnj )THEN 1373 nlej_crs=jpj_crs ! cbr -1 ???????????????????? 1374 nlcj_crs=nlej_crs 2717 1375 ENDIF 2718 1376 2719 !WRITE(narea+200,*)ii,ij ; call flush(narea+200) 2720 !WRITE(narea+200,*)"iproc iprocso ",iproc,iprocso 2721 !WRITE(narea+200,*)"jpiglo jpjglo ",jpiglo,jpjglo 2722 !WRITE(narea+200,*)"ibonit(jn) ibonjt(jn) ",ibonit(jn),ibonjt(jn) ; call flush(narea+200) 2723 !WRITE(narea+200,*)"nimppt(jn) njmppt(jn) ",nimppt(jn),njmppt(jn) ; call flush(narea+200) 2724 !WRITE(narea+200,*)"loc jpj nldjt(jn),nlejt(jn),nlcjt(jn) ",jpj, nldjt(jn),nlejt(jn),nlcjt(jn) ; call flush(narea+200) 2725 !WRITE(narea+200,*)"glo jpj nldjt(jn),nlejt(jn),nlcjt(jn) ",jpj, nldjt(jn)+njmppt(jn)-1,nlejt(jn)+njmppt(jn)-1,nlcjt(jn) ; call flush(narea+200) 2726 2727 !dimension selon j 2728 !------------------- 2729 IF( ibonjt(jn) .NE. 1 )THEN !on a besoin de savoir si jn est au nord 2730 !iprocno=nfipproc(ii,ij+1) 2731 !iprocno=iprocno+1 2732 !WRITE(narea+200,*)"ii,ij+1 ",ii,ij+1; call flush(narea+200) 2733 !WRITE(narea+200,*)"njmppt jn njmpptno(jn) ",njmppt(jn),njmpptno(jn); call flush(narea+200) 2734 !WRITE(narea+200,*)"jpjglo",jpjglo ; call flush(narea+200) 2735 2736 !WRITE(narea+200,*)REAL( ( jpjglo - (njmppt (jn) - 1) ) / nn_facty, wp ),REAL( ( jpjglo - (njmpptno(jn) - 1) ) / nn_facty, wp ); call flush(narea+200) 2737 !WRITE(narea+200,*)AINT( REAL( ( jpjglo - (njmppt (jn) - 1) ) / nn_facty, wp ) ),AINT( REAL( ( jpjglo - (njmpptno(jn) - 1) ) / nn_facty, wp ) ); call flush(narea+200) 2738 2739 nlejt_crs(jn) = AINT( REAL( ( jpjglo - (njmppt (jn) - 1) ) / nn_facty, wp ) ) & 2740 & - AINT( REAL( ( jpjglo - (njmpptno(jn) - 1) ) / nn_facty, wp ) ) 2741 ELSE ! ibonjt=1 : au nord 2742 nlejt_crs(jn) = AINT( REAL( nlejt(jn) / nn_facty, wp ) ) + 1 1377 !---------------------------------------- 1378 DO jj = 1, jpj_crs 1379 mjg_crs(jj) = jj + njmpp_crs - 1 1380 ENDDO 1381 DO jj = 1, jpjglo_crs 1382 mj0_crs(jj) = MAX( 1, MIN( jj - njmpp_crs + 1 , jpj_crs + 1 ) ) 1383 mj1_crs(jj) = MAX( 0, MIN( jj - njmpp_crs + 1 , jpj_crs ) ) 1384 ENDDO 1385 1386 !---------------------------------------- 1387 DO jj = 1, nlej_crs 1388 mjs_crs(jj) = mjs2_crs(mjg_crs(jj)) - njmpp + 1 1389 mje_crs(jj) = mje2_crs(mjg_crs(jj)) - njmpp + 1 1390 nfacty(jj) = mje_crs(jj)-mje_crs(jj)+1 1391 ENDDO 1392 1393 IF( iprocj == jpnj )THEN 1394 mjs_crs(nlej_crs)=mjs_crs(nlej_crs-1) 1395 mje_crs(nlej_crs)=mje_crs(nlej_crs-1) 2743 1396 ENDIF 2744 !==> nbondj = -1 au sud, 0 au milieu, 1 au nord, 2 si jpnj=1 2745 !WRITE(narea+200,*)"nlejt_crs(jn) ",nlejt_crs(jn) ; call flush(narea+200) 2746 !!!noso== nbre de proc sud du proc sur lequel on tourne !!!! ; dangeureux car on est ds une boucle sur jn 2747 IF( iprocso < 0 .AND. ibonjt(jn) == -1 ) nlejt_crs(jn) = nlejt_crs(jn) + 1 2748 SELECT CASE( ibonjt(jn) ) 2749 CASE ( -1 ) 2750 !WRITE(narea+200,*)"MOD( jpjglo - njmppt(jn), nn_facty)",MOD( jpjglo - njmppt(jn), nn_facty) ; call flush(narea+200) 2751 IF( MOD( jpjglo - njmppt(jn), nn_facty) > 0 ) nlejt_crs(jn) = nlejt_crs(jn) + 1 ! au cas où il reste des lignes en bas 2752 IF( nldjt(jn) == 1 ) nlejt_crs(jn) = nlejt_crs(jn) + 1 2753 nlcjt_crs(jn) = nlejt_crs(jn) + jprecj 2754 nldjt_crs(jn) = nldjt(jn) 2755 !???nlejt_crs(jn) = nlejt_crs(jn) + 1 ! 2 !cbr 2756 CASE ( 0 ) 2757 2758 nldjt_crs(jn) = nldjt(jn) 2759 IF( nldjt(jn) == 1 ) nlejt_crs(jn) = nlejt_crs(jn) + 1 2760 nlejt_crs(jn) = nlejt_crs(jn) + jprecj 2761 nlcjt_crs(jn) = nlejt_crs(jn) + jprecj 2762 2763 CASE ( 1, 2 ) 2764 2765 nlejt_crs(jn) = nlejt_crs(jn) + jprecj 2766 nlcjt_crs(jn) = nlejt_crs(jn) 2767 nldjt_crs(jn) = nldjt(jn) 2768 CASE DEFAULT 2769 STOP 2770 END SELECT 2771 !WRITE(narea+200,*)"jpj_crs, nldjt_crs(jn),nlejt_crs(jn),nlcjt_crs(jn) " ; call flush(narea+200) 2772 !WRITE(narea+200,*) jpj_crs, nldjt_crs(jn),nlejt_crs(jn),nlcjt_crs(jn) ; call flush(narea+200) 2773 IF( nlcjt_crs(jn) > jpj_crs )THEN 2774 jpj_crs = jpj_crs + 1 2775 nlejt_crs(jn) = nlejt_crs(jn) + 1 2776 ENDIF 2777 !cbr pas bon !!!! 2778 !on augmente la taille des domaines alors que les tblx st deja alloués 2779 !du coup on alloue les tblx apres: 2780 IF(nldjt_crs(jn) == 1 ) THEN 2781 njmppt_crs(jn) = 1 2782 ELSE 2783 njmppt_crs(jn) = 2 + ANINT(REAL((njmppt(jn) + 1 - MOD( jpjglo , nn_facty )) / nn_facty, wp ) ) 2784 ENDIF 2785 !WRITE(narea+200,*)"tutu loc ",jn,jpj_crs, nldjt_crs(jn),nlejt_crs(jn),nlcjt_crs(jn) ; call flush(narea+200) 2786 !WRITE(narea+200,*)"tutu glo ",jn,jpj_crs, nldjt_crs(jn)+njmppt_crs(jn)-1,nlejt_crs(jn)+njmppt_crs(jn)-1,nlcjt_crs(jn)+njmppt_crs(jn)-1 ; call flush(narea+200) 2787 2788 2789 !dimensions selon i 2790 !------------------- 2791 !IF( jn == 1 ) THEN 2792 !IF( ibonit(jn)==-1 )THEN !on a besoin de savoir si jn est un proc west 2793 IF( ii==1 )THEN !on a besoin de savoir si jn est un proc west 2794 nleit_crs(jn) = AINT( REAL( ( nimppt(jn ) - 1 + nlcit(jn ) ) / nn_factx, wp) ) 2795 ELSE 2796 !WRITE(narea+200,*)"njmppt jn njmpptea(jn) ",nimppt(jn),nimpptea(jn); call flush(narea+200) 2797 !WRITE(narea+200,*)"nlcit (jn) nlcitea(jn) ) ",nlcit (jn),nlcitea(jn); call flush(narea+200) 2798 nleit_crs(jn) = AINT( REAL( ( nimppt (jn) - 1 + nlcit (jn) ) / nn_factx, wp) ) & 2799 & - AINT( REAL( ( nimpptea(jn) - 1 + nlcitea(jn) ) / nn_factx, wp) ) 2800 ENDIF 2801 !WRITE(narea+200,*)"nleji_crs(jn),noso ",nleit_crs(jn); call flush(narea+200) 2802 2803 2804 SELECT CASE( ibonit(jn) ) 2805 CASE ( -1 ) 2806 nleit_crs(jn) = nleit_crs(jn) + jpreci 2807 nlcit_crs(jn) = nleit_crs(jn) + jpreci 2808 nldit_crs(jn) = nldit(jn) 2809 2810 CASE ( 0 ) 2811 nleit_crs(jn) = nleit_crs(jn) + jpreci 2812 nlcit_crs(jn) = nleit_crs(jn) + jpreci 2813 nldit_crs(jn) = nldit(jn) 2814 2815 CASE ( 1, 2 ) 2816 IF( MOD( jpiglo - nimppt(jn), nn_factx) > 0 ) nleit_crs(jn) = nleit_crs(jn) + 1 2817 nleit_crs(jn) = nleit_crs(jn) + jpreci 2818 nlcit_crs(jn) = nleit_crs(jn) 2819 nldit_crs(jn) = nldit(jn) 2820 2821 CASE DEFAULT 2822 STOP 2823 END SELECT 2824 !WRITE(narea+200,*)"jpi_crs, nldit_crs(jn),nleit_crs(jn),nlcit_crs(jn) ",jpi_crs, nldit_crs(jn),nleit_crs(jn),nlcit_crs(jn) ; call flush(narea+200) 2825 nimppt_crs(jn) = ANINT( REAL( (nimppt(jn) + 1 ) / nn_factx, wp ) ) + 1 2826 2827 !WRITE(narea+200,*)"tutu loc ",jn,jpi_crs, nldit_crs(jn),nleit_crs(jn),nlcit_crs(jn) ; call flush(narea+200) 2828 !WRITE(narea+200,*)"tutu glo ",jn,jpi_crs, nldit_crs(jn)+nimppt_crs(jn)-1,nleit_crs(jn)+nimppt_crs(jn)-1,nlcit_crs(jn)+nimppt_crs(jn)-1 ; call flush(narea+200) 2829 2830 nfiimpp_crs(ii,ij) = nimppt_crs(jn) 2831 !WRITE(narea+200,*)"tutu nimppt_crs(jn) ",ii,ij,nimppt_crs(jn) ; call flush(narea+200) 2832 2833 ENDDO 2834 2835 DO ji = 1 , jpni 2836 DO jj = 1 ,jpnj 1397 1398 !---------------------------------------- 1399 1400 CASE DEFAULT 1401 WRITE(numout,*) 'crs_init. Only jperio = 0, 1, 3, 4 supported' 1402 END SELECT 1403 1404 !========================================================================== 1405 IF( nlci_crs .GT. jpi_crs .OR. nlei_crs .GT. jpi_crs )WRITE(narea+8000-1,*)"BUGDIM ",nlei_crs,nlci_crs,jpi_crs; CALL FLUSH(narea+8000-1) 1406 IF( nlcj_crs .GT. jpj_crs .OR. nlej_crs .GT. jpj_crs )WRITE(narea+8000-1,*)"BUGDIM ",nlej_crs,nlcj_crs,jpj_crs; CALL FLUSH(narea+8000-1) 1407 !========================================================================== 1408 1409 nldit_crs(:)=0 ; nleit_crs(:)=0 ; nlcit_crs(:)=0 ; nimppt_crs(:)=0 1410 nldjt_crs(:)=0 ; nlejt_crs(:)=0 ; nlcjt_crs(:)=0 ; njmppt_crs(:)=0 1411 1412 CALL mppgatheri((/nlci_crs/),0,nlcit_crs) ; CALL mppgatheri((/nlcj_crs/),0,nlcjt_crs) 1413 CALL mppgatheri((/nldi_crs/),0,nldit_crs) ; CALL mppgatheri((/nldj_crs/),0,nldjt_crs) 1414 CALL mppgatheri((/nlei_crs/),0,nleit_crs) ; CALL mppgatheri((/nlej_crs/),0,nlejt_crs) 1415 CALL mppgatheri((/nimpp_crs/),0,nimppt_crs) ; CALL mppgatheri((/njmpp_crs/),0,njmppt_crs) 1416 1417 DO jj = 1 ,jpnj 1418 DO ji = 1 , jpni 2837 1419 jn=nfipproc(ji,jj)+1 2838 iimppt_crs = ANINT( REAL( (nfiimpp(ji,jj) + 1 ) / nn_factx, wp ) ) + 1 2839 nfiimpp_crs(ji,jj) = iimppt_crs 2840 IF( jn .GE. 1 )nimppt_crs(jn) = iimppt_crs 2841 !PRINT*," nfiimpp_crs(ji,jj) ",ji,jj,jn,nfiimpp(ji,jj),nfiimpp_crs(ji,jj) 1420 IF( jn .GE. 1 )THEN 1421 nfiimpp_crs(ji,jj)=nimppt_crs(jn) 1422 ELSE 1423 nfiimpp_crs(ji,jj) = ANINT( REAL( (nfiimpp(ji,jj) + 1 ) / nn_factx, wp ) ) + 1 1424 ENDIF 2842 1425 ENDDO 2843 1426 ENDDO 2844 2845 nlej_crs = nlejt_crs(nproc + 1) 2846 nlcj_crs = nlcjt_crs(nproc + 1) 2847 nldj_crs = nldjt_crs(nproc + 1) 2848 njmpp_crs = njmppt_crs(nproc + 1) 2849 2850 nlei_crs = nleit_crs(nproc + 1) 2851 nlci_crs = nlcit_crs(nproc + 1) 2852 nldi_crs = nldit_crs(nproc + 1) 2853 nimpp_crs = nimppt_crs(nproc + 1) 2854 1427 2855 1428 !nogather=T 2856 1429 nfsloop_crs = 1 … … 2867 1440 END DO 2868 1441 1442 !WRITE(narea+8000-1,*)"loc crs jpi nldi,nlei,nlci ",jpi_crs, nldi_crs ,nlei_crs ,nlci_crs 1443 !WRITE(narea+8000-1,*)"glo crs jpi nldi,nlei ",jpi_crs, nldi_crs+nimpp_crs-1,nlei_crs+nimpp_crs-1 1444 !WRITE(narea+8000-1,*)"loc crs jpj nldj,nlej,nlcj ",jpj_crs, nldj_crs ,nlej_crs ,nlcj_crs 1445 !WRITE(narea+8000-1,*)"glo crs jpj nldj,nlej ",jpj_crs, nldj_crs+njmpp_crs-1,nlej_crs+njmpp_crs-1 2869 1446 !============================================================================================== 2870 !write(narea+200,*)"jpi_crs,nldi_crs,nlei_crs,nlci_crs,nimpp_crs,nldi_crs+nimpp_crs-1,nlei_crs+nimpp_crs-1" ; call flush(narea+200)2871 !write(narea+200,*)jpi_crs,nldi_crs,nlei_crs,nlci_crs,nimpp_crs,nldi_crs+nimpp_crs-1,nlei_crs+nimpp_crs-1 ; call flush(narea+200)2872 !write(narea+200,*)"jpj_crs,nldj_crs,nlej_crs,nlcj_crs,njmpp_crs,nldj_crs+njmpp_crs-1,nlej_crs+njmpp_crs-1" ; call flush(narea+200)2873 !write(narea+200,*)jpj_crs,nldj_crs,nlej_crs,nlcj_crs,njmpp_crs,nldj_crs+njmpp_crs-1,nlej_crs+njmpp_crs-1 ; call flush(narea+200)2874 !write(narea+200,*)"nfsloop_crs nfeloop_crs ",nfsloop_crs,nfeloop_crs ; call flush(narea+200)2875 2876 ! No coarsening with zoom2877 1447 IF( jpizoom /= 1 .OR. jpjzoom /= 1) STOP 2878 1448 2879 !cbr2880 ierr = crs_dom_alloc1()2881 2882 DO ji = 1, jpi_crs2883 mig_crs(ji) = ji + nimpp_crs - 12884 !WRITE(narea+200,*)"fifi ",ji,mig_crs(ji) ; call flush(narea+200)2885 ENDDO2886 DO jj = 1, jpj_crs2887 mjg_crs(jj) = jj + njmpp_crs - 1!2888 !WRITE(narea+200,*)"fufu ",jj,mjg_crs(jj) ; call flush(narea+200)2889 ENDDO2890 2891 DO ji = 1, jpiglo_crs2892 mi0_crs(ji) = MAX( 1, MIN( ji - nimpp_crs + 1 , jpi_crs + 1 ) )2893 mi1_crs(ji) = MAX( 0, MIN( ji - nimpp_crs + 1 , jpi_crs ) )2894 !WRITE(narea+200,*)"mi ",ji,mi0_crs(ji),mi1_crs(ji) ; call flush(narea+200)2895 ENDDO2896 2897 DO jj = 1, jpjglo_crs2898 mj0_crs(jj) = MAX( 1, MIN( jj - njmpp_crs + 1 , jpj_crs + 1 ) )2899 mj1_crs(jj) = MAX( 0, MIN( jj - njmpp_crs + 1 , jpj_crs ) )2900 !WRITE(narea+200,*)"mj ",jj, mj0_crs(jj),mj1_crs(jj) ; call flush(narea+200)2901 ENDDO2902 2903 ENDIF2904 2905 1449 ! Save the parent grid information 2906 1450 jpi_full = jpi … … 2987 1531 rfactxy = nn_factx * nn_facty 2988 1532 2989 ! 2.b. Set up bins for coarse grid, horizontal only.2990 ierr = crs_dom_alloc2()2991 2992 mis2_crs(:) = 0 ; mie2_crs(:) = 02993 mjs2_crs(:) = 0 ; mje2_crs(:) = 02994 2995 2996 SELECT CASE ( nn_binref )2997 2998 CASE ( 0 )2999 3000 SELECT CASE ( nperio )3001 3002 3003 CASE ( 0, 1, 3, 4 ) ! 3, 4 : T-Pivot at North Fold3004 3005 DO ji = 2, jpiglo_crsm13006 ijie = ( ji * nn_factx ) - nn_factx !cc3007 ijis = ijie - nn_factx + 13008 mis2_crs(ji) = ijis3009 mie2_crs(ji) = ijie3010 ENDDO3011 IF ( jpiglo - 1 - mie2_crs(jpiglo_crsm1) <= nn_factx ) mie2_crs(jpiglo_crsm1) = jpiglo - 23012 3013 ! Handle first the northernmost bin3014 IF ( nn_facty == 2 ) THEN ; ijjgloT = jpjglo - 13015 ELSE ; ijjgloT = jpjglo3016 ENDIF3017 3018 DO jj = 2, jpjglo_crs3019 ijje = ijjgloT - nn_facty * ( jj - 3 )3020 ijjs = ijje - nn_facty + 13021 mjs2_crs(jpjglo_crs-jj+2) = ijjs3022 mje2_crs(jpjglo_crs-jj+2) = ijje3023 !WRITE(narea+200,*)"jpjglo_crs-jj+2,ijje,ijjs ",jpjglo_crs-jj+2,ijjs,ijje ; call flush(narea+200)3024 ENDDO3025 3026 CASE ( 2 )3027 WRITE(numout,*) 'crs_init, jperio=2 not supported'3028 3029 CASE ( 5, 6 ) ! F-pivot at North Fold3030 3031 DO ji = 2, jpiglo_crsm13032 ijie = ( ji * nn_factx ) - nn_factx3033 ijis = ijie - nn_factx + 13034 mis2_crs(ji) = ijis3035 mie2_crs(ji) = ijie3036 ENDDO3037 IF ( jpiglo - 1 - mie2_crs(jpiglo_crsm1) <= nn_factx ) mie_crs(jpiglo_crsm1) = jpiglo - 23038 3039 ! Treat the northernmost bin separately.3040 jj = 23041 ijje = jpj - nn_facty * ( jj - 2 )3042 IF ( nn_facty == 3 ) THEN ; ijjs = ijje - 13043 ELSE ; ijjs = ijje - nn_facty + 13044 ENDIF3045 mjs2_crs(jpj_crs-jj+1) = ijjs3046 mje2_crs(jpj_crs-jj+1) = ijje3047 3048 ! Now bin the rest, any remainder at the south is lumped in the southern bin3049 DO jj = 3, jpjglo_crsm13050 ijje = jpjglo - nn_facty * ( jj - 2 )3051 ijjs = ijje - nn_facty + 13052 IF ( ijjs <= nn_facty ) ijjs = 23053 WRITE(narea+200,*)"fufu",jj,ijjs,ijje ; call flush(narea+200)3054 mjs2_crs(jpj_crs-jj+1) = ijjs3055 mje2_crs(jpj_crs-jj+1) = ijje3056 ENDDO3057 3058 CASE DEFAULT3059 WRITE(numout,*) 'crs_init. Only jperio = 0, 1, 3, 4, 5, 6 supported'3060 3061 END SELECT3062 3063 CASE (1 )3064 WRITE(numout,*) 'crs_init. Equator-centered bins option not yet available'3065 3066 END SELECT3067 3068 ! Pad the boundaries, do not know if it is necessary3069 mis2_crs(2) = 1 ; mis2_crs(jpiglo_crs) = mie2_crs(jpiglo_crs - 1) + 13070 mie2_crs(2) = nn_factx ; mie2_crs(jpiglo_crs) = jpiglo3071 !3072 mjs2_crs(1) = 13073 mje2_crs(1) = 13074 !3075 mje2_crs(2) = mjs2_crs(3)-1 ; mje2_crs(jpjglo_crs) = jpjglo3076 mjs2_crs(2) = 1 ; mjs2_crs(jpjglo_crs) = mje2_crs(jpjglo_crs) - nn_facty + 13077 3078 IF( .NOT. lk_mpp ) THEN3079 mis_crs(:) = mis2_crs(:)3080 mie_crs(:) = mie2_crs(:)3081 mjs_crs(:) = mjs2_crs(:)3082 mje_crs(:) = mje2_crs(:)3083 ELSE3084 !write(narea+200,*)"njmpp ",njmpp3085 DO jj = 1, nlej_crs3086 !write(narea+200,*)jj,"mjs2_crs mje2_crs ",mjg_crs(jj),mjs2_crs(mjg_crs(jj)),mje2_crs(mjg_crs(jj)) ; call flush(narea+200)3087 mjs_crs(jj) = mjs2_crs(mjg_crs(jj)) - njmpp + 13088 mje_crs(jj) = mje2_crs(mjg_crs(jj)) - njmpp + 13089 !write(narea+200,*)"mjs_crs mje_crs ",mjs_crs(jj),mje_crs(jj) ; call flush(narea+200)3090 ENDDO3091 !write(narea+200,*)"nimpp ",nimpp3092 DO ji = 1, nlei_crs3093 !write(narea+200,*)ji,"mis2_crs mie2_crs ",mig_crs(ji),mis2_crs(mig_crs(ji)),mie2_crs(mig_crs(ji)) ; call flush(narea+200)3094 mis_crs(ji) = mis2_crs(mig_crs(ji)) - nimpp + 13095 mie_crs(ji) = mie2_crs(mig_crs(ji)) - nimpp + 13096 !write(narea+200,*)"mis_crs mie_crs ",mis_crs(jj),mie_crs(jj) ; call flush(narea+200)3097 ENDDO3098 1533 ENDIF 3099 1534 ! 3100 !IF( nlcj_crs -1 .GT. nlej_crs )WRITE(narea+200,*)"tutututu",nlcj_crs,nlej_crs ; call flush(narea+200)3101 1535 nistr = mis_crs(2) ; niend = mis_crs(nlci_crs - 1) 3102 1536 njstr = mjs_crs(3) ; njend = mjs_crs(nlcj_crs - 1) 1537 ! 3103 1538 ! 3104 1539 END SUBROUTINE crs_dom_def -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsdomwri.F90
r5602 r6772 33 33 PUBLIC crs_dom_wri ! routine called by crsini.F90 34 34 35 !! $Id$36 35 CONTAINS 37 36 … … 65 64 CHARACTER(len=21) :: clnam4 ! filename (vertical mesh informations) 66 65 INTEGER :: ji, jj, jk ! dummy loop indices 66 INTEGER :: iji,ijj 67 67 ! ! workspaces 68 68 REAL(wp), POINTER, DIMENSION(:,: ) :: zprt, zprw … … 122 122 !======================================================== 123 123 ! ! masks (inum2) 124 124 125 CALL iom_rstput( 0, 0, inum2, 'tmask', tmask_crs, ktype = jp_i1 ) ! ! land-sea mask 125 126 CALL iom_rstput( 0, 0, inum2, 'umask', umask_crs, ktype = jp_i1 ) … … 202 203 203 204 IF ( nn_msh_crs <= 6 ) THEN 204 CALL iom_rstput( 0, 0, inum4, 'e3t', e3t_ crs )205 CALL iom_rstput( 0, 0, inum4, 'e3w', e3w_ crs )206 CALL iom_rstput( 0, 0, inum4, 'e3u', e3u_ crs )207 CALL iom_rstput( 0, 0, inum4, 'e3v', e3v_ crs )208 CALL iom_rstput( 0, 0, inum4, 'e3t_max_crs', e3t_max_ crs )209 CALL iom_rstput( 0, 0, inum4, 'e3w_max_crs', e3w_max_ crs )205 CALL iom_rstput( 0, 0, inum4, 'e3t', e3t_0_crs ) 206 CALL iom_rstput( 0, 0, inum4, 'e3w', e3w_0_crs ) 207 CALL iom_rstput( 0, 0, inum4, 'e3u', e3u_0_crs ) 208 CALL iom_rstput( 0, 0, inum4, 'e3v', e3v_0_crs ) 209 CALL iom_rstput( 0, 0, inum4, 'e3t_max_crs', e3t_max_0_crs ) 210 CALL iom_rstput( 0, 0, inum4, 'e3w_max_crs', e3w_max_0_crs ) 210 211 ELSE 211 212 DO jj = 1,jpj_crs 212 213 DO ji = 1,jpi_crs 213 ze3tp(ji,jj) = e3t_ crs(ji,jj,mbkt_crs(ji,jj)) * tmask_crs(ji,jj,1)214 ze3wp(ji,jj) = e3w_ crs(ji,jj,mbkt_crs(ji,jj)) * tmask_crs(ji,jj,1)214 ze3tp(ji,jj) = e3t_0_crs(ji,jj,mbkt_crs(ji,jj)) * tmask_crs(ji,jj,1) 215 ze3wp(ji,jj) = e3w_0_crs(ji,jj,mbkt_crs(ji,jj)) * tmask_crs(ji,jj,1) 215 216 END DO 216 217 END DO … … 224 225 225 226 IF ( nn_msh_crs <= 3 ) THEN 226 CALL iom_rstput( 0, 0, inum4, 'gdept', gdept_ crs, ktype = jp_r4 )227 CALL iom_rstput( 0, 0, inum4, 'gdept', gdept_0_crs, ktype = jp_r4 ) 227 228 DO jk = 1,jpk 228 229 DO jj = 1, jpj_crsm1 229 230 DO ji = 1, jpi_crsm1 ! jes what to do for fs_jpim1??vector opt. 230 zdepu(ji,jj,jk) = MIN( gdept_ crs(ji,jj,jk) , gdept_crs(ji+1,jj ,jk) ) * umask_crs(ji,jj,jk)231 zdepv(ji,jj,jk) = MIN( gdept_ crs(ji,jj,jk) , gdept_crs(ji ,jj+1,jk) ) * vmask_crs(ji,jj,jk)231 zdepu(ji,jj,jk) = MIN( gdept_0_crs(ji,jj,jk) , gdept_0_crs(ji+1,jj ,jk) ) * umask_crs(ji,jj,jk) 232 zdepv(ji,jj,jk) = MIN( gdept_0_crs(ji,jj,jk) , gdept_0_crs(ji ,jj+1,jk) ) * vmask_crs(ji,jj,jk) 232 233 END DO 233 234 END DO … … 237 238 CALL iom_rstput( 0, 0, inum4, 'gdepu', zdepu, ktype = jp_r4 ) 238 239 CALL iom_rstput( 0, 0, inum4, 'gdepv', zdepv, ktype = jp_r4 ) 239 CALL iom_rstput( 0, 0, inum4, 'gdepw', gdepw_ crs, ktype = jp_r4 )240 CALL iom_rstput( 0, 0, inum4, 'gdepw', gdepw_0_crs, ktype = jp_r4 ) 240 241 ELSE 241 242 DO jj = 1,jpj_crs -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsfld.F90
r6101 r6772 24 24 USE crs 25 25 USE crsdom 26 USE domvvl 27 USE domvvl_crs 26 28 USE crslbclnk 27 29 USE iom … … 32 34 USE zdftke_crs 33 35 34 !USE ieee_arithmetic36 USE ieee_arithmetic 35 37 36 38 IMPLICIT NONE … … 77 79 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: avte_crs 78 80 REAL(wp) :: z2dcrsu, z2dcrsv 79 REAL(wp) :: zmin,zmax,icnt1,icnt2 81 REAL(wp) :: z1_2dt 82 REAL(wp) :: icnt1,icnt2 80 83 INTEGER :: i,j,ijis,ijie,ijjs,ijje 81 84 REAL(wp) :: zw,zwp1,zum1,zu,zvm1,zv,zsnm,zsm,z … … 85 88 INTEGER :: iji,ijj 86 89 INTEGER :: jl,jm,jn 90 REAL(wp) :: zmin,zmax,zsuma0,zsuma1,zsuma2,zsuma3,zsumb0,zsumb1,zsumb2,zsumb3,zsumb4 87 91 !! 88 92 !!---------------------------------------------------------------------- … … 101 105 CALL wrk_alloc( jpi_crs, jpj_crs, z2d_crs ) 102 106 103 ! Depth work arrrays104 zfse3t(:,:,:) = fse3t(:,:,:)105 zfse3u(:,:,:) = fse3u(:,:,:)106 zfse3v(:,:,:) = fse3v(:,:,:)107 zfse3w(:,:,:) = fse3w(:,:,:)108 107 109 108 IF( kt == nit000 ) THEN … … 124 123 emp_b_crs(:,: ) = 0._wp ! emp 125 124 rnf_crs (:,: ) = 0._wp ! runoff 125 rnf_b_crs(:,: ) = 0._wp ! runoff 126 126 fr_i_crs (:,: ) = 0._wp ! ice cover 127 127 ENDIF … … 129 129 CALL iom_swap( "nemo_crs" ) ! swap on the coarse grid 130 130 131 ! 2. Coarsen fields at each time step 132 ! -------------------------------------------------------- 131 !--------------------------------------------------------------------------------------------------- 132 !variables domaine au temps before : swap 133 !--------------------------------------------------------------------------------------------------- 134 #if defined key_vvl 135 e3t_b_crs(:,:,:) = e3t_n_crs(:,:,:) 136 e3u_b_crs(:,:,:) = e3u_n_crs(:,:,:) 137 e3v_b_crs(:,:,:) = e3v_n_crs(:,:,:) 138 e3w_b_crs(:,:,:) = e3w_n_crs(:,:,:) 139 e3t_n_crs(:,:,:) = e3t_a_crs(:,:,:) 140 e3u_n_crs(:,:,:) = e3u_a_crs(:,:,:) 141 e3v_n_crs(:,:,:) = e3v_a_crs(:,:,:) 142 e3w_n_crs(:,:,:) = e3w_a_crs(:,:,:) 143 #endif 144 145 IF( kt /= nit000 )THEN 146 tsb_crs(:,:,:,jp_tem) = tsn_crs(:,:,:,jp_tem) 147 tsb_crs(:,:,:,jp_sal) = tsn_crs(:,:,:,jp_sal) 148 ub_crs(:,:,:) = un_crs(:,:,:) 149 vb_crs(:,:,:) = vn_crs(:,:,:) 150 sshb_crs(:,:) = sshb_crs(:,:) 151 emp_b_crs(:,:) = emp_crs(:,:) 152 rnf_b_crs(:,:) = rnf_crs(:,:) 153 rb2_crs(:,:,:) = rn2_crs(:,:,:) 154 ENDIF 155 156 !--------------------------------------------------------------------------------------------------- 157 !variables domaine au temps now : 158 !--------------------------------------------------------------------------------------------------- 159 #if defined key_vvl 160 zfse3t(:,:,:) = e3t_n(:,:,:) 161 zfse3u(:,:,:) = e3u_n(:,:,:) 162 zfse3v(:,:,:) = e3v_n(:,:,:) 163 zfse3w(:,:,:) = e3w_n(:,:,:) 164 165 CALL crs_dom_sfc( umask, 'U', e2e3u_crs, e2e3u_msk, p_e2=e2u, p_e3=zfse3u ) 166 CALL crs_dom_sfc( vmask, 'V', e1e3v_crs, e1e3v_msk, p_e1=e1v, p_e3=zfse3v ) 167 ! 168 CALL crs_dom_e3( e1t, e2t, zfse3t, p_sfc_3d_crs=e1e2w_crs, cd_type='T', p_mask=tmask, p_e3_crs=zs_crs, p_e3_max_crs=e3t_max_0_crs) 169 CALL crs_dom_e3( e1t, e2t, zfse3w, p_sfc_3d_crs=e1e2w_crs, cd_type='W', p_mask=tmask, p_e3_crs=zs_crs, p_e3_max_crs=e3w_max_0_crs) 170 CALL crs_dom_e3( e1u, e2u, zfse3u, p_sfc_2d_crs=e2u_crs , cd_type='U', p_mask=umask, p_e3_crs=zs_crs, p_e3_max_crs=e3u_max_0_crs) 171 CALL crs_dom_e3( e1v, e2v, zfse3v, p_sfc_2d_crs=e1v_crs , cd_type='V', p_mask=vmask, p_e3_crs=zs_crs, p_e3_max_crs=e3v_max_0_crs) 172 173 CALL crs_dom_ope( gdepw_n, 'MAX', 'T', tmask, gdept_n_crs, p_e3=zfse3t, psgn=1.0 ) 174 CALL crs_dom_ope( gdepw_n, 'MAX', 'W', tmask, gdepw_n_crs, p_e3=zfse3w, psgn=1.0 ) 175 176 CALL crs_dom_facvol( tmask, 'T', e1t, e2t, zfse3t, ocean_volume_crs_t, facvol_t ) 177 CALL iom_put("ocean_volume_crs_t",ocean_volume_crs_t) 178 ! 179 bt_crs(:,:,:) = ocean_volume_crs_t(:,:,:) * facvol_t(:,:,:)*tmask_crs(:,:,:) 180 ! 181 r1_bt_crs(:,:,:) = 0._wp 182 WHERE( bt_crs /= 0._wp ) r1_bt_crs(:,:,:) = 1._wp / bt_crs(:,:,:) 183 184 CALL crs_dom_facvol( tmask, 'W', e1t, e2t, zfse3w, ocean_volume_crs_w, facvol_w ) 185 186 #endif 187 188 #if defined key_vvl 189 zfse3t(:,:,:) = e3t_n(:,:,:) 190 zfse3u(:,:,:) = e3u_n(:,:,:) 191 zfse3v(:,:,:) = e3v_n(:,:,:) 192 zfse3w(:,:,:) = e3w_n(:,:,:) 193 CALL iom_put("e3t",e3t_n_crs) 194 CALL iom_put("e3u",e3u_n_crs) 195 CALL iom_put("e3v",e3v_n_crs) 196 CALL iom_put("e3w",e3w_n_crs) 197 #else 198 zfse3t(:,:,:) = e3t_0(:,:,:) 199 zfse3u(:,:,:) = e3u_0(:,:,:) 200 zfse3v(:,:,:) = e3v_0(:,:,:) 201 zfse3w(:,:,:) = e3w_0(:,:,:) 202 #endif 133 203 134 204 ! Temperature 135 zt(:,:,:) = tsb(:,:,:,jp_tem) ; zt_crs(:,:,:) = 0._wp136 CALL crs_dom_ope( zt, 'VOL', 'T', tmask, zt_crs, p_e12=e1e2t, p_e3=zfse3t, psgn=1.0 )137 tsb_crs(:,:,:,jp_tem) = zt_crs(:,:,:)138 205 zt(:,:,:) = tsn(:,:,:,jp_tem) ; zt_crs(:,:,:) = 0._wp 139 206 CALL crs_dom_ope( zt, 'VOL', 'T', tmask, zt_crs, p_e12=e1e2t, p_e3=zfse3t, psgn=1.0 ) … … 143 210 CALL iom_put( "sst" , tsn_crs(:,:,1,jp_tem) ) ! sst 144 211 145 !n2 before146 zt(:,:,:) = rn2b(:,:,:) ; zt_crs(:,:,:) = 0._wp147 CALL crs_dom_ope( zt, 'VOL', 'W', tmask, zt_crs, p_e12=e1e2t, p_e3=zfse3t, psgn=1.0 )148 rb2_crs(:,:,:) = zt_crs(:,:,:)149 CALL iom_put("rb2_crs",rb2_crs)150 151 212 ! Salinity 152 zs(:,:,:) = tsb(:,:,:,jp_sal) ; zs_crs(:,:,:) = 0._wp153 CALL crs_dom_ope( zs, 'VOL', 'T', tmask, zs_crs, p_e12=e1e2t, p_e3=zfse3t, psgn=1.0 )154 tsb_crs(:,:,:,jp_sal) = zs_crs(:,:,:)155 213 zs(:,:,:) = tsn(:,:,:,jp_sal) ; zs_crs(:,:,:) = 0._wp 156 214 CALL crs_dom_ope( zs, 'VOL', 'T', tmask, zs_crs, p_e12=e1e2t, p_e3=zfse3t, psgn=1.0 ) … … 161 219 162 220 ! U-velocity 163 CALL crs_dom_ope( ub, 'SUM', 'U', umask, ub_crs, p_e12=e2u, p_e3=zfse3u, p_surf_crs=e2e3u_msk, psgn=-1.0 )164 221 CALL crs_dom_ope( un, 'SUM', 'U', umask, un_crs, p_e12=e2u, p_e3=zfse3u, p_surf_crs=e2e3u_msk, psgn=-1.0 ) 165 !cbr166 ub_crs(:,:,:) = ub_crs(:,:,:)*umask_crs(:,:,:)167 222 un_crs(:,:,:) = un_crs(:,:,:)*umask_crs(:,:,:) 168 ! 169 zt(:,:,:) = 0._wp ; zs(:,:,:) = 0._wp ; zt_crs(:,:,:) = 0._wp ; zs_crs(:,:,:) = 0._wp 223 CALL iom_put( "uoce" , un_crs ) ! i-current 224 225 ! V-velocity 226 CALL crs_dom_ope( vn, 'SUM', 'V', vmask, vn_crs, p_e12=e1v, p_e3=zfse3v, p_surf_crs=e1e3v_msk, psgn=-1.0 ) 227 vn_crs(:,:,:) = vn_crs(:,:,:)*vmask_crs(:,:,:) 228 CALL iom_put( "voce" , vn_crs ) ! i-current 229 230 ! Horizontal divergence ( following OPA_SRC/DYN/divcur.F90 ) 231 hdivn_crs(:,:,:)=0._wp 232 170 233 DO jk = 1, jpkm1 171 DO jj = 2, jpjm1 172 DO ji = 2, jpim1 173 zt(ji,jj,jk) = un(ji,jj,jk) * 0.5 * ( tsn(ji,jj,jk,jp_tem) + tsn(ji+1,jj,jk,jp_tem) ) 174 zs(ji,jj,jk) = un(ji,jj,jk) * 0.5 * ( tsn(ji,jj,jk,jp_sal) + tsn(ji+1,jj,jk,jp_sal) ) 175 END DO 176 END DO 177 END DO 178 CALL crs_dom_ope( zt, 'SUM', 'U', umask, zt_crs, p_e12=e2u, p_e3=zfse3u, p_surf_crs=e2e3u_msk, psgn=-1.0 ) 179 CALL crs_dom_ope( zs, 'SUM', 'U', umask, zs_crs, p_e12=e2u, p_e3=zfse3u, p_surf_crs=e2e3u_msk, psgn=-1.0 ) 180 181 CALL iom_put( "uoce" , un_crs ) ! i-current 182 CALL iom_put( "uocet" , zt_crs ) ! uT 183 CALL iom_put( "uoces" , zs_crs ) ! uS 184 185 ! V-velocity 186 CALL crs_dom_ope( vb, 'SUM', 'V', vmask, vb_crs, p_e12=e1v, p_e3=zfse3v, p_surf_crs=e1e3v_msk, psgn=-1.0 ) 187 CALL crs_dom_ope( vn, 'SUM', 'V', vmask, vn_crs, p_e12=e1v, p_e3=zfse3v, p_surf_crs=e1e3v_msk, psgn=-1.0 ) 188 vb_crs(:,:,:) = vb_crs(:,:,:)*vmask_crs(:,:,:) 189 vn_crs(:,:,:) = vn_crs(:,:,:)*vmask_crs(:,:,:) 190 ! 191 zt(:,:,:) = 0._wp ; zs(:,:,:) = 0._wp ; zt_crs(:,:,:) = 0._wp ; zs_crs(:,:,:) = 0._wp 192 DO jk = 1, jpkm1 193 DO jj = 2, jpjm1 194 DO ji = 2, jpim1 195 zt(ji,jj,jk) = vn(ji,jj,jk) * 0.5 * ( tsn(ji,jj,jk,jp_tem) + tsn(ji,jj+1,jk,jp_tem) ) 196 zs(ji,jj,jk) = vn(ji,jj,jk) * 0.5 * ( tsn(ji,jj,jk,jp_sal) + tsn(ji,jj+1,jk,jp_sal) ) 197 END DO 198 END DO 199 END DO 200 CALL crs_dom_ope( zt, 'SUM', 'V', vmask, zt_crs, p_e12=e1v, p_e3=zfse3v, p_surf_crs=e1e3v_msk, psgn=-1.0 ) 201 CALL crs_dom_ope( zs, 'SUM', 'V', vmask, zs_crs, p_e12=e1v, p_e3=zfse3v, p_surf_crs=e1e3v_msk, psgn=-1.0 ) 202 203 CALL iom_put( "voce" , vn_crs ) ! i-current 204 CALL iom_put( "vocet" , zt_crs ) ! vT 205 CALL iom_put( "voces" , zs_crs ) ! vS 206 207 208 ! Kinetic energy 209 CALL crs_dom_ope( rke, 'VOL', 'T', tmask, rke_crs, p_e12=e1e2t, p_e3=zfse3t, psgn=1.0 ) 210 CALL iom_put( "eken", rke_crs ) 211 212 ! Horizontal divergence ( following OPA_SRC/DYN/divcur.F90 ) 213 DO jk = 1, jpkm1 214 DO ji = 2, jpi_crsm1 215 DO jj = 2, jpj_crsm1 216 IF( tmask_crs(ji,jj,jk ) > 0 ) THEN 217 !z2dcrsu = ( un_crs(ji ,jj ,jk) * crs_surfu_wgt(ji ,jj ,jk) ) & 218 ! & - ( un_crs(ji-1,jj ,jk) * crs_surfu_wgt(ji-1,jj ,jk) ) 219 !z2dcrsv = ( vn_crs(ji ,jj ,jk) * crs_surfv_wgt(ji ,jj ,jk) ) & 220 ! & - ( vn_crs(ji ,jj-1,jk) * crs_surfv_wgt(ji ,jj-1,jk) ) 221 ! 222 !IF( crs_volt_wgt(ji,jj,jk) .NE. 0._wp ) hdivn_crs(ji,jj,jk) = ( z2dcrsu + z2dcrsv ) / crs_volt_wgt(ji,jj,jk) 223 z2dcrsu = ( un_crs(ji ,jj ,jk) * e2e3u_msk(ji ,jj ,jk) ) & 224 & - ( un_crs(ji-1,jj ,jk) * e2e3u_msk(ji-1,jj ,jk) ) 225 z2dcrsv = ( vn_crs(ji ,jj ,jk) * e1e3v_msk(ji ,jj ,jk) ) & 226 & - ( vn_crs(ji ,jj-1,jk) * e1e3v_msk(ji ,jj-1,jk) ) 227 ! 228 !cbr 229 !bug1: il manquait le facvol_t(ji,jj,jk) ds la division ; ca creait des grosses erreurs de Wcrs ( vu en recalculant la divergence 3D ) 230 !bug2: mm test que bug1: on n'obtient tjs pas zero 231 !on a la div calculée via ocean_volume_crs_t puis w via e3t_crs ; or ,e1t_crs(ji,jj)*e2t_crs(ji,jj)*e3t_crs(ji,jj,jk) NE ocean_volume_crs_t*crs_volt_wgt(ji,jj,jk) 232 !exp (117,211,74) : e1*e2*e3=235206030060.005 / ocean_volume_crs_t * facvol = 235205585307.810 233 ! e1*e2*e3-cean_volume_crs_t * facvol/(cean_volume_crs_t * facvol) ~1.e-6) 234 IF( ocean_volume_crs_t(ji,jj,jk) .NE. 0._wp ) hdivn_crs(ji,jj,jk) = ( z2dcrsu + z2dcrsv ) 235 236 z2dcrsu = ( ub_crs(ji ,jj ,jk) * e2e3u_msk(ji ,jj ,jk) ) & 237 & - ( ub_crs(ji-1,jj ,jk) * e2e3u_msk(ji-1,jj ,jk) ) 238 z2dcrsv = ( vb_crs(ji ,jj ,jk) * e1e3v_msk(ji ,jj ,jk) ) & 239 & - ( vb_crs(ji ,jj-1,jk) * e1e3v_msk(ji ,jj-1,jk) ) 240 ! 241 IF( ocean_volume_crs_t(ji,jj,jk) .NE. 0._wp ) hdivb_crs(ji,jj,jk) = ( z2dcrsu + z2dcrsv ) / (facvol_t(ji,jj,jk)*ocean_volume_crs_t(ji,jj,jk) ) 242 ENDIF 234 DO jj = 2,jpj_crs 235 DO ji = 2,jpi_crs 236 z2dcrsu = ( un_crs(ji ,jj ,jk) * e2e3u_msk(ji ,jj ,jk) ) & 237 & - ( un_crs(ji-1,jj ,jk) * e2e3u_msk(ji-1,jj ,jk) ) 238 z2dcrsv = ( vn_crs(ji ,jj ,jk) * e1e3v_msk(ji ,jj ,jk) ) & 239 & - ( vn_crs(ji ,jj-1,jk) * e1e3v_msk(ji ,jj-1,jk) ) 240 241 hdivn_crs(ji,jj,jk) = ( z2dcrsu + z2dcrsv ) 243 242 ENDDO 244 243 ENDDO … … 248 247 CALL iom_put( "hdiv", hdivn_crs ) 249 248 250 251 ! W-velocity252 IF( ln_crs_wn ) THEN253 CALL crs_dom_ope( wn, 'SUM', 'W', tmask, wn_crs, p_e12=e1e2t, p_surf_crs=e1e2w_msk, psgn=1.0 )254 ELSE255 wn_crs(:,:,jpk) = 0._wp256 DO jk = jpkm1, 1, -1257 wn_crs(:,:,jk) = e1e2w_msk(:,:,jk+1)*wn_crs(:,:,jk+1) - hdivn_crs(:,:,jk)258 WHERE( e1e2w_msk(:,:,jk) .NE. 0._wp ) wn_crs(:,:,jk) = wn_crs(:,:,jk) /e1e2w_msk(:,:,jk)259 ENDDO260 ENDIF261 262 CALL iom_put( "woce", wn_crs ) ! vertical velocity263 ! free memory264 249 265 250 ! avt, avs … … 276 261 CALL crs_dom_ope( avt, 'MED', 'W', tmask, avt_crs, p_e12=e1e2t, p_e3=zfse3w, psgn=1.0 ) 277 262 CASE ( 5 ) 263 #if defined key_zdftke 278 264 CALL crs_dom_ope( en , 'VOL', 'W', tmask, en_crs, p_e12=e1e2t, p_e3=zfse3w, psgn=1.0 ) 279 265 CALL crs_dom_ope( taum , 'SUM', 'T', tmask, taum_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) … … 282 268 CALL tke_avn_crs 283 269 CALL zdf_evd_crs(kt) 270 #endif 284 271 CASE ( 6 ) 285 272 … … 295 282 CALL crs_dom_ope( zt, 'VOL', 'W', tmask, zt_crs, p_e12=e1e2t, p_e3=ztmp, psgn=1.0 ) 296 283 CALL crs_dom_ope( zs, 'VOL', 'W', tmask, zs_crs, p_e12=e1e2t, p_e3=ztmp, psgn=1.0 ) 297 zmin=MINVAL(zt_crs);zmax=MAXVAL(zt_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"avte1_crs",zmin,zmax298 zmin=MINVAL(zs_crs);zmax=MAXVAL(zs_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"avte1_crs",zmin,zmax299 284 zt_crs=tmask_crs*zt_crs 300 zmin=MINVAL(zt_crs);zmax=MAXVAL(zt_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"avte1_crs",zmin,zmax301 285 WHERE( zs_crs .NE. 0._wp ) avte_crs(:,:,:,1) = zt_crs / zs_crs 302 zmin=MINVAL(avte_crs(:,:,:,1));zmax=MAXVAL(avte_crs(:,:,:,1));CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"avte1_crs",zmin,zmax303 286 304 287 zt(:,:,:) = 0._wp … … 310 293 CALL crs_dom_ope( zt, 'VOL', 'W', tmask, zt_crs, p_e12=e1e2t, p_e3=ztmp, psgn=1.0 ) 311 294 CALL crs_dom_ope( zs, 'VOL', 'W', tmask, zs_crs, p_e12=e1e2t, p_e3=ztmp, psgn=1.0 ) 312 zmin=MINVAL(zt_crs);zmax=MAXVAL(zt_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"avte2_crs",zmin,zmax313 zmin=MINVAL(zs_crs);zmax=MAXVAL(zs_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"avte2_crs",zmin,zmax314 295 zt_crs=tmask_crs*zt_crs 315 zmin=MINVAL(zt_crs);zmax=MAXVAL(zt_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"avte1_crs",zmin,zmax316 296 WHERE( zs_crs .NE. 0._wp ) avte_crs(:,:,:,2) = zt_crs / zs_crs 317 zmin=MINVAL(avte_crs(:,:,:,2));zmax=MAXVAL(avte_crs(:,:,:,2));CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"avte2_crs",zmin,zmax318 297 319 298 zt(:,:,:) = 0._wp … … 326 305 CALL crs_dom_ope( zt, 'VOL', 'W', tmask, zt_crs, p_e12=e1e2t, p_e3=ztmp, psgn=1.0 ) 327 306 CALL crs_dom_ope( zs, 'VOL', 'W', tmask, zs_crs, p_e12=e1e2t, p_e3=ztmp, psgn=1.0 ) 328 zmin=MINVAL(zt_crs);zmax=MAXVAL(zt_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"avte3_crs",zmin,zmax329 zmin=MINVAL(zs_crs);zmax=MAXVAL(zs_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"avte3_crs",zmin,zmax330 307 zt_crs=tmask_crs*zt_crs 331 zmin=MINVAL(zt_crs);zmax=MAXVAL(zt_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"avte3_crs",zmin,zmax332 308 WHERE( zs_crs .NE. 0._wp ) avte_crs(:,:,:,3) = zt_crs / zs_crs 333 zmin=MINVAL(avte_crs(:,:,:,3));zmax=MAXVAL(avte_crs(:,:,:,3));CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"avte3_crs",zmin,zmax334 309 335 310 zt(:,:,:) = 0._wp … … 342 317 CALL crs_dom_ope( zt, 'VOL', 'W', tmask, zt_crs, p_e12=e1e2t, p_e3=ztmp, psgn=1.0 ) 343 318 CALL crs_dom_ope( zs, 'VOL', 'W', tmask, zs_crs, p_e12=e1e2t, p_e3=ztmp, psgn=1.0 ) 344 zmin=MINVAL(zt_crs);zmax=MAXVAL(zt_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"avte4_crs",zmin,zmax345 zmin=MINVAL(zs_crs);zmax=MAXVAL(zs_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"avte4_crs",zmin,zmax346 319 zt_crs=tmask_crs*zt_crs 347 zmin=MINVAL(zt_crs);zmax=MAXVAL(zt_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"avte4_crs",zmin,zmax348 320 WHERE( zs_crs .NE. 0._wp ) avte_crs(:,:,:,4) = zt_crs / zs_crs 349 zmin=MINVAL(avte_crs(:,:,:,4));zmax=MAXVAL(avte_crs(:,:,:,4));CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"avte4_crs",zmin,zmax350 321 351 322 CALL iom_put( "avte_crs1", avte_crs(:,:,:,1) ) ! Kz … … 353 324 CALL iom_put( "avte_crs3", avte_crs(:,:,:,3) ) ! Kz 354 325 CALL iom_put( "avte_crs4", avte_crs(:,:,:,4) ) ! Kz 355 !--------------------- 326 356 327 CALL crs_dom_ope( avt, 'MED', 'W', tmask, zs_crs, p_e12=e1e2t, p_e3=zfse3w, p_mask_crs=tmask_crs, psgn=1.0 ) 357 !? zmin=MINVAL(zs_crs*tmask_crs);zmax=MAXVAL(zs_crs*tmask_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"logvol zs_crs*tmask ",zmin,zmax ; call flush(numout)358 328 CALL iom_put( "zs_crs", zs_crs ) ! Kzlogvol 359 !--------------------- ok360 329 361 330 CALL crs_dom_ope( avt, 'VOL', 'W', tmask, zmax_crs, p_e12=e1e2t, p_e3=zfse3w, psgn=1.0 ) 362 WRITE(narea+200,*)"zmax_crs ",SHAPE(zmax_crs) ; call flush(narea+200)363 331 CALL iom_put( "zmax_crs", zmax_crs ) ! Kzlogvol 364 zmin=MINVAL(zmax_crs*tmask_crs);zmax=MAXVAL(zmax_crs*tmask_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"vol zmax_crs*tmask ",zmin,zmax ; call flush(numout)365 !-------------------------nok366 332 avt_crs=zs_crs 367 333 … … 379 345 380 346 381 !--------------382 347 zwgt(1:4)=0._wp 383 348 DO jm=1,4 ; IF( avte_crs(ji,jj,jk,jm) .GE. 0._wp .AND. avte_crs(ji,jj,jk,jm) .LE. zmax_crs(ji,jj,jk) ) zwgt(jm) = 1._wp ; ENDDO 384 !--------------385 349 IF( SUM(zwgt(1:4)) .NE. 0._wp ) THEN 386 350 zmean = SUM( zwgt(1:4)*avte_crs(ji,jj,jk,1:4)) / SUM(zwgt(1:4) ) … … 390 354 zerr=1.e10 391 355 ENDIF 392 !--------------393 356 394 357 zerr_crs(ji,jj,jk)=zerr … … 400 363 IF( tmask_crs(ji,jj,jk) == 1 .AND. zerr .LE. zerr0 .AND. zmean .GT. 0._wp ) icnt2=icnt2+1 401 364 402 !IF( ieee_is_nan( zt_crs(ji,jj,jk)) )WRITE(narea+200,*)"NANMEANEFF ",ji,jj,jk,tmask_crs(ji,jj,jk) ; call flush(narea+200) 403 !IF( ieee_is_nan( zs_crs(ji,jj,jk)) )WRITE(narea+200,*)"NANLOG ",ji,jj,jk,tmask_crs(ji,jj,jk) ; call flush(narea+200) 404 !IF( ieee_is_nan( avt_crs(ji,jj,jk)) )WRITE(narea+200,*)"NANAVT ",ji,jj,jk,tmask_crs(ji,jj,jk) ; call flush(narea+200) 405 ENDDO 406 ENDDO 407 ENDDO 408 zmin=MINVAL(avt_crs);zmax=MAXVAL(avt_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"avt_crs ",zmin,zmax ; call flush(numout) 409 zmin=MINVAL(avt_crs*tmask_crs);zmax=MAXVAL(avt_crs*tmask_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"avt_crs*tmask ",zmin,zmax ; call flush(numout) 410 411 CALL mpp_sum(icnt1) 412 CALL mpp_sum(icnt2) 413 IF(lwp)WRITE(numout,*)"TOTO",kt,icnt1,icnt2 365 ENDDO 366 ENDDO 367 ENDDO 368 414 369 CALL iom_put( "zt_crs", zt_crs ) ! Kz 415 370 CALL iom_put( "zerr_crs", zerr_crs ) ! Kz … … 419 374 CALL iom_put( "avt", avt_crs ) ! Kz 420 375 421 !deja dasn step CALL zdf_mxl_crs(kt)422 423 424 ! sbc fields425 426 CALL crs_dom_ope( sshb , 'VOL', 'T', tmask, sshb_crs , p_e12=e1e2t, p_e3=zfse3t , psgn=1.0 )427 376 CALL crs_dom_ope( sshn , 'VOL', 'T', tmask, sshn_crs , p_e12=e1e2t, p_e3=zfse3t , psgn=1.0 ) 428 CALL crs_dom_ope( ssha , 'VOL', 'T', tmask, ssha_crs , p_e12=e1e2t, p_e3=zfse3t , psgn=1.0 )429 377 CALL crs_dom_ope( utau , 'SUM', 'U', umask, utau_crs , p_e12=e2u , p_surf_crs=e2u_crs , psgn=1.0 ) 430 378 CALL crs_dom_ope( vtau , 'SUM', 'V', vmask, vtau_crs , p_e12=e1v , p_surf_crs=e1v_crs , psgn=1.0 ) … … 432 380 CALL crs_dom_ope( rnf , 'MAX', 'T', tmask, rnf_crs , psgn=1.0 ) 433 381 CALL crs_dom_ope( qsr , 'SUM', 'T', tmask, qsr_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 434 CALL crs_dom_ope( emp_b, 'SUM', 'T', tmask, emp_b_crs, p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 382 #if defined key_vvl 383 CALL crs_dom_ope( gdepw_n, 'MAX', 'W', tmask, gdepw_n_crs, p_e3=zfse3w, psgn=1.0 ) 384 #else 385 CALL crs_dom_ope( gdepw_0, 'MAX', 'W', tmask, gdepw_0_crs, p_e3=zfse3w, psgn=1.0 ) 386 #endif 387 435 388 CALL crs_dom_ope( emp , 'SUM', 'T', tmask, emp_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 389 436 390 CALL crs_dom_ope( fmmflx,'SUM', 'T', tmask, fmmflx_crs, p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 437 391 CALL crs_dom_ope( sfx , 'SUM', 'T', tmask, sfx_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) … … 453 407 CALL iom_put( "ice_cover", fr_i_crs ) ! ice cover output 454 408 409 #if defined key_vvl 410 !--------------------------------------------------------------------------------------------------- 411 !variables au temps after 412 !--------------------------------------------------------------------------------------------------- 413 414 zfse3t(:,:,:) = 1._wp 415 zt(:,:,:) = tmask(:,:,:) 416 ssha(:,:) = ssha(:,:) * tmask(:,:,1) 417 CALL crs_dom_ope( ssha , 'VOL', 'T', zt, ssha_crs , p_e12=e1e2t, p_e3=zfse3t , psgn=1.0 ) 418 CALL crs_lbc_lnk( ssha_crs, 'T', 1.0 ) !!!!!!!!!!!!!!!!!!! pas utile !!!!!!!!!!!!!!!!!!!!!!!!! 419 420 zfse3t(:,:,:) = e3t_a(:,:,:) 421 zfse3u(:,:,:) = e3u_a(:,:,:) 422 zfse3v(:,:,:) = e3v_a(:,:,:) 423 CALL dom_vvl_interpol( zfse3t(:,:,:), zfse3w(:,:,:), 'W' ) 424 425 CALL crs_dom_sfc( umask, 'U', zt_crs, zs_crs, p_e2=e2u, p_e3=zfse3u ) ! zt_crs=e2e3u_crs,zs_crs=e2e3u_msk 426 CALL crs_dom_sfc( vmask, 'V', zt_crs, zs_crs, p_e1=e2v, p_e3=zfse3v ) ! zt_crs=e1e3v_crs,zs_crs=e1e3v_msk 427 CALL crs_dom_e3( e1t, e2t, zfse3t, p_sfc_3d_crs=e1e2w_crs, cd_type='T', p_mask=tmask, p_e3_crs=e3t_a_crs, p_e3_max_crs=zs_crs) 428 CALL crs_dom_e3( e1t, e2t, zfse3w, p_sfc_3d_crs=e1e2w_crs, cd_type='W', p_mask=tmask, p_e3_crs=e3w_a_crs, p_e3_max_crs=zs_crs) 429 CALL crs_dom_e3( e1u, e2u, zfse3u, p_sfc_2d_crs=e2u_crs , cd_type='U', p_mask=umask, p_e3_crs=e3u_a_crs, p_e3_max_crs=zs_crs) 430 CALL crs_dom_e3( e1v, e2v, zfse3v, p_sfc_2d_crs=e1v_crs , cd_type='V', p_mask=vmask, p_e3_crs=e3v_a_crs, p_e3_max_crs=zs_crs) 431 432 433 DO jk = 1, jpk 434 DO ji = 1, jpi_crs 435 DO jj = 1, jpj_crs 436 IF( e3t_a_crs(ji,jj,jk) == 0._wp ) e3t_a_crs(ji,jj,jk) = e3t_1d(jk) 437 IF( e3w_a_crs(ji,jj,jk) == 0._wp ) e3w_a_crs(ji,jj,jk) = e3w_1d(jk) 438 IF( e3u_a_crs(ji,jj,jk) == 0._wp ) e3u_a_crs(ji,jj,jk) = e3t_1d(jk) 439 IF( e3v_a_crs(ji,jj,jk) == 0._wp ) e3v_a_crs(ji,jj,jk) = e3t_1d(jk) 440 ENDDO 441 ENDDO 442 ENDDO 443 444 !zt_crs=ocean_volume_crs_t ; zs_crs=facvol_t after time !!! 445 CALL crs_dom_facvol( tmask, 'T', e1t, e2t, zfse3t, zt_crs, zs_crs ) 446 447 #endif 448 449 #if defined key_vvl 450 z1_2dt = 1._wp / ( 2. * rdt ) ! set time step size (Euler/Leapfrog) 451 IF( neuler == 0 .AND. kt == nit000 ) z1_2dt = 1._wp / rdt 452 wn_crs(:,:,jpk) = 0._wp 453 DO jk = jpkm1, 1, -1 454 wn_crs(:,:,jk) = wn_crs(:,:,jk+1)*e1e2w_msk(:,:,jk+1) - ( hdivn_crs(:,:,jk) & 455 & + z1_2dt * e1e2w_crs(:,:,jk) * ( e3t_a_crs(:,:,jk) - e3t_b_crs(:,:,jk) ) ) * tmask_crs(:,:,jk) 456 WHERE( e1e2w_msk(:,:,jk) .NE. 0._wp ) wn_crs(:,:,jk) = wn_crs(:,:,jk) /e1e2w_msk(:,:,jk) 457 ENDDO 458 #else 459 IF( ln_crs_wn ) THEN 460 CALL crs_dom_ope( wn, 'SUM', 'W', tmask, wn_crs, p_e12=e1e2t, p_surf_crs=e1e2w_msk, psgn=1.0 ) 461 ELSE 462 wn_crs(:,:,jpk) = 0._wp 463 DO jk = jpkm1, 1, -1 464 wn_crs(:,:,jk) = e1e2w_msk(:,:,jk+1)*wn_crs(:,:,jk+1) - hdivn_crs(:,:,jk) 465 WHERE( e1e2w_msk(:,:,jk) .NE. 0._wp ) wn_crs(:,:,jk) = wn_crs(:,:,jk) /e1e2w_msk(:,:,jk) 466 ENDDO 467 ENDIF 468 469 #endif 470 CALL crs_lbc_lnk( wn_crs, 'W', 1.0 ) !!!!!!!pas utile, nan ?????????????????????? 471 wn_crs(:,:,:) = wn_crs(:,:,:) * tmask_crs(:,:,:) 472 CALL iom_put( "woce", wn_crs ) ! vertical velocity 473 455 474 ! free memory 456 475 CALL wrk_dealloc( jpi, jpj, jpk, zfse3t, zfse3w ) -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsini.F90
r6101 r6772 21 21 USE lib_mpp 22 22 USE ldftra_crs 23 USE ieee_arithmetic 23 24 24 25 IMPLICIT NONE … … 30 31 # include "domzgr_substitute.h90" 31 32 32 !! $Id$33 33 CONTAINS 34 34 … … 111 111 rfacty_r = 1. / nn_facty 112 112 113 write(narea+200,*)"crsini0",nstop; call flush(narea+200) 114 113 115 !--------------------------------------------------------- 114 116 ! 2. Define Global Dimensions of the coarsened grid 115 117 !--------------------------------------------------------- 116 118 CALL crs_dom_def 119 write(narea+200,*)"crsini1",nstop; call flush(narea+200) 117 120 118 121 !--------------------------------------------------------- … … 125 128 126 129 CALL crs_dom_msk 127 130 write(narea+200,*)"crsini2",nstop; call flush(narea+200) 131 CALL mppsync() 132 133 !IF( narea==279 )THEN 134 !WRITE(narea+200,*)"tutu1 ",jpi,jpj,nldi,nlei,nldj,nlej 135 !DO jj=1,jpj 136 ! WRITE(narea+200,*)"tutu2 ",jj,MINVAL(tmask(:,jj,:)),MAXVAL(tmask(:,jj,:)) 137 !ENDDO 138 !ENDIF 128 139 129 140 ! 3.b. Get the coordinates … … 131 142 ! Even-numbered reduction factor, center coordinate on U-,V- faces or f-corner. 132 143 ! 133 IF ( nresty /= 0 .AND. nrestx /= 0 ) THEN144 !IF ( nresty /= 0 .AND. nrestx /= 0 ) THEN 134 145 CALL crs_dom_coordinates( gphit, glamt, 'T', gphit_crs, glamt_crs ) 135 146 CALL crs_dom_coordinates( gphiu, glamu, 'U', gphiu_crs, glamu_crs ) 136 147 CALL crs_dom_coordinates( gphiv, glamv, 'V', gphiv_crs, glamv_crs ) 137 148 CALL crs_dom_coordinates( gphif, glamf, 'F', gphif_crs, glamf_crs ) 138 ELSEIF ( nresty /= 0 .AND. nrestx == 0 ) THEN 139 CALL crs_dom_coordinates( gphiu, glamu, 'T', gphit_crs, glamt_crs ) 140 CALL crs_dom_coordinates( gphiu, glamu, 'U', gphiu_crs, glamu_crs ) 141 CALL crs_dom_coordinates( gphif, glamf, 'V', gphiv_crs, glamv_crs ) 142 CALL crs_dom_coordinates( gphif, glamf, 'F', gphif_crs, glamf_crs ) 143 ELSEIF ( nresty == 0 .AND. nrestx /= 0 ) THEN 144 CALL crs_dom_coordinates( gphiv, glamv, 'T', gphit_crs, glamt_crs ) 145 CALL crs_dom_coordinates( gphif, glamf, 'U', gphiu_crs, glamu_crs ) 146 CALL crs_dom_coordinates( gphiv, glamv, 'V', gphiv_crs, glamv_crs ) 147 CALL crs_dom_coordinates( gphif, glamf, 'F', gphif_crs, glamf_crs ) 148 ELSE 149 CALL crs_dom_coordinates( gphif, glamf, 'T', gphit_crs, glamt_crs ) 150 CALL crs_dom_coordinates( gphif, glamf, 'U', gphiu_crs, glamu_crs ) 151 CALL crs_dom_coordinates( gphif, glamf, 'V', gphiv_crs, glamv_crs ) 152 CALL crs_dom_coordinates( gphif, glamf, 'F', gphif_crs, glamf_crs ) 153 ENDIF 154 149 !ELSEIF ( nresty /= 0 .AND. nrestx == 0 ) THEN 150 ! CALL crs_dom_coordinates( gphiu, glamu, 'T', gphit_crs, glamt_crs ) 151 ! CALL crs_dom_coordinates( gphiu, glamu, 'U', gphiu_crs, glamu_crs ) 152 ! CALL crs_dom_coordinates( gphif, glamf, 'V', gphiv_crs, glamv_crs ) 153 ! CALL crs_dom_coordinates( gphif, glamf, 'F', gphif_crs, glamf_crs ) 154 !ELSEIF ( nresty == 0 .AND. nrestx /= 0 ) THEN 155 ! CALL crs_dom_coordinates( gphiv, glamv, 'T', gphit_crs, glamt_crs ) 156 ! CALL crs_dom_coordinates( gphif, glamf, 'U', gphiu_crs, glamu_crs ) 157 ! CALL crs_dom_coordinates( gphiv, glamv, 'V', gphiv_crs, glamv_crs ) 158 ! CALL crs_dom_coordinates( gphif, glamf, 'F', gphif_crs, glamf_crs ) 159 !ELSE 160 ! CALL crs_dom_coordinates( gphif, glamf, 'T', gphit_crs, glamt_crs ) 161 ! CALL crs_dom_coordinates( gphif, glamf, 'U', gphiu_crs, glamu_crs ) 162 ! CALL crs_dom_coordinates( gphif, glamf, 'V', gphiv_crs, glamv_crs ) 163 ! CALL crs_dom_coordinates( gphif, glamf, 'F', gphif_crs, glamf_crs ) 164 !ENDIF 165 CALL mppsync() 166 167 write(narea+200,*)"crsini3",nstop; call flush(narea+200) 155 168 156 169 ! 3.c. Get the horizontal mesh … … 162 175 CALL crs_dom_hgr( e1v, e2v, 'V', e1v_crs, e2v_crs ) 163 176 CALL crs_dom_hgr( e1f, e2f, 'F', e1f_crs, e2f_crs ) 177 178 DO ji=nldi_crs,nlei_crs 179 DO jj=nldj_crs,nlej_crs 180 IF( e1t_crs(ji,jj)==0._wp .AND. tmask_crs(ji,jj,1) .NE. 0._wp )WRITE(narea+8000-1,*)"e1t_crs=0",ji,jj;CALL FLUSH(narea+8000-1) 181 IF( e1u_crs(ji,jj)==0._wp .AND. umask_crs(ji,jj,1) .NE. 0._wp )WRITE(narea+8000-1,*)"e1u_crs=0",ji,jj;CALL FLUSH(narea+8000-1) 182 IF( e1v_crs(ji,jj)==0._wp .AND. vmask_crs(ji,jj,1) .NE. 0._wp )WRITE(narea+8000-1,*)"e1v_crs=0",ji,jj;CALL FLUSH(narea+8000-1) 183 IF( e1f_crs(ji,jj)==0._wp .AND. fmask_crs(ji,jj,1) .NE. 0._wp )WRITE(narea+8000-1,*)"e1f_crs=0",ji,jj;CALL FLUSH(narea+8000-1) 184 IF( e2t_crs(ji,jj)==0._wp .AND. tmask_crs(ji,jj,1) .NE. 0._wp )WRITE(narea+8000-1,*)"e2t_crs=0",ji,jj;CALL FLUSH(narea+8000-1) 185 IF( e2u_crs(ji,jj)==0._wp .AND. umask_crs(ji,jj,1) .NE. 0._wp )WRITE(narea+8000-1,*)"e2u_crs=0",ji,jj;CALL FLUSH(narea+8000-1) 186 IF( e2v_crs(ji,jj)==0._wp .AND. vmask_crs(ji,jj,1) .NE. 0._wp )WRITE(narea+8000-1,*)"e2v_crs=0",ji,jj;CALL FLUSH(narea+8000-1) 187 IF( e2f_crs(ji,jj)==0._wp .AND. fmask_crs(ji,jj,1) .NE. 0._wp )WRITE(narea+8000-1,*)"e2f_crs=0",ji,jj;CALL FLUSH(narea+8000-1) 188 ENDDO 189 ENDDO 190 164 191 165 192 WHERE(e1t_crs == 0._wp) e1t_crs=r_inf … … 172 199 WHERE(e2f_crs == 0._wp) e2f_crs=r_inf 173 200 201 zmin=MINVAL(e1t_crs,mask=(tmask_crs(:,:,1)==1));CALL mpp_min(zmin);zmax=MAXVAL(e1t_crs,mask=(tmask_crs(:,:,1)==1));CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"crs e1t_crs ",zmin,zmax 202 zmin=MINVAL(e1u_crs,mask=(umask_crs(:,:,1)==1));CALL mpp_min(zmin);zmax=MAXVAL(e1u_crs,mask=(umask_crs(:,:,1)==1));CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"crs e1u_crs ",zmin,zmax 203 zmin=MINVAL(e1v_crs,mask=(vmask_crs(:,:,1)==1));CALL mpp_min(zmin);zmax=MAXVAL(e1v_crs,mask=(vmask_crs(:,:,1)==1));CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"crs e1v_crs ",zmin,zmax 204 zmin=MINVAL(e1f_crs,mask=(fmask_crs(:,:,1)==1));CALL mpp_min(zmin);zmax=MAXVAL(e1f_crs,mask=(fmask_crs(:,:,1)==1));CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"crs e1f_crs ",zmin,zmax 205 zmin=MINVAL(e2t_crs,mask=(tmask_crs(:,:,1)==1));CALL mpp_min(zmin);zmax=MAXVAL(e2t_crs,mask=(tmask_crs(:,:,1)==1));CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"crs e2t_crs ",zmin,zmax 206 zmin=MINVAL(e2u_crs,mask=(umask_crs(:,:,1)==1));CALL mpp_min(zmin);zmax=MAXVAL(e2u_crs,mask=(umask_crs(:,:,1)==1));CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"crs e2u_crs ",zmin,zmax 207 zmin=MINVAL(e2v_crs,mask=(vmask_crs(:,:,1)==1));CALL mpp_min(zmin);zmax=MAXVAL(e2v_crs,mask=(vmask_crs(:,:,1)==1));CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"crs e2v_crs ",zmin,zmax 208 zmin=MINVAL(e2f_crs,mask=(fmask_crs(:,:,1)==1));CALL mpp_min(zmin);zmax=MAXVAL(e2f_crs,mask=(fmask_crs(:,:,1)==1));CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"crs e2f_crs ",zmin,zmax 209 210 174 211 e1e2t_crs(:,:) = e1t_crs(:,:) * e2t_crs(:,:) 175 212 213 write(narea+200,*)"crsini4",nstop; call flush(narea+200) 176 214 177 215 ! 3.c.2 Coriolis factor … … 196 234 CALL wrk_alloc(jpi, jpj, jpk, zfse3t, zfse3u, zfse3v, zfse3w ) 197 235 ! 198 zfse3t(:,:,:) = fse3t(:,:,:)199 zfse3u(:,:,:) = fse3u(:,:,:)200 zfse3v(:,:,:) = fse3v(:,:,:)201 zfse3w(:,:,:) = fse3w(:,:,:)236 zfse3t(:,:,:) = e3t_0(:,:,:) !fse3t(:,:,:) 237 zfse3u(:,:,:) = e3u_0(:,:,:) !fse3u(:,:,:) 238 zfse3v(:,:,:) = e3v_0(:,:,:) !fse3v(:,:,:) 239 zfse3w(:,:,:) = e3w_0(:,:,:) !fse3w(:,:,:) 202 240 203 241 ! 3.d.2 Surfaces … … 209 247 CALL crs_dom_sfc( umask, 'U', e2e3u_crs, e2e3u_msk, p_e2=e2u, p_e3=zfse3u ) 210 248 CALL crs_dom_sfc( vmask, 'V', e1e3v_crs, e1e3v_msk, p_e1=e1v, p_e3=zfse3v ) 249 250 DO ji=nldi_crs,nlei_crs 251 DO jj=nldj_crs,nlej_crs 252 DO jk=1,jpk 253 IF( e1e2w_crs(ji,jj,jk)==0._wp .AND. tmask_crs(ji,jj,jk)==1._wp )WRITE(narea+8000-1,*)"e1e2w_crs=0",ji,jj,jk;CALL FLUSH(narea+8000-1) 254 IF( e1e2w_msk(ji,jj,jk)==0._wp .AND. tmask_crs(ji,jj,jk)==1._wp )WRITE(narea+8000-1,*)"e1e2w_msk=0",ji,jj,jk;CALL FLUSH(narea+8000-1) 255 IF( e2e3u_crs(ji,jj,jk)==0._wp .AND. umask_crs(ji,jj,jk)==1._wp )WRITE(narea+8000-1,*)"e2e3u_crs=0",ji,jj,jk;CALL FLUSH(narea+8000-1) 256 IF( e2e3u_msk(ji,jj,jk)==0._wp .AND. umask_crs(ji,jj,jk)==1._wp )WRITE(narea+8000-1,*)"e2e3u_msk=0",ji,jj,jk;CALL FLUSH(narea+8000-1) 257 IF( e1e3v_crs(ji,jj,jk)==0._wp .AND. vmask_crs(ji,jj,jk)==1._wp )WRITE(narea+8000-1,*)"e1e3v_crs=0",ji,jj,jk;CALL FLUSH(narea+8000-1) 258 IF( e1e3v_msk(ji,jj,jk)==0._wp .AND. vmask_crs(ji,jj,jk)==1._wp )WRITE(narea+8000-1,*)"e1e3v_msk=0",ji,jj,jk;CALL FLUSH(narea+8000-1) 259 ENDDO 260 ENDDO 261 ENDDO 262 write(narea+200,*)"crsini5",nstop; call flush(narea+200) 263 264 ! WHERE(e1e2w_crs == 0._wp) e1e2w_crs=r_inf 265 ! WHERE(e2e3u_crs == 0._wp) e2e3u_crs=r_inf 266 ! WHERE(e1e3v_crs == 0._wp) e1e3v_crs=r_inf 267 ! WHERE(e1e2w_msk == 0._wp) e1e2w_msk=r_inf 268 ! WHERE(e2e3u_msk == 0._wp) e2e3u_msk=r_inf 269 ! WHERE(e1e3v_msk == 0._wp) e1e3v_msk=r_inf 270 zmin=MINVAL(e1e2w_crs,mask=(tmask_crs(:,:,:)==1));CALL mpp_min(zmin);zmax=MAXVAL(e1e2w_crs,mask=(tmask_crs(:,:,:)==1));CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"crs e1e2w_crs ",zmin,zmax 271 zmin=MINVAL(e2e3u_crs,mask=(umask_crs(:,:,:)==1));CALL mpp_min(zmin);zmax=MAXVAL(e2e3u_crs,mask=(umask_crs(:,:,:)==1));CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"crs e2e3u_crs ",zmin,zmax 272 zmin=MINVAL(e1e3v_crs,mask=(vmask_crs(:,:,:)==1));CALL mpp_min(zmin);zmax=MAXVAL(e1e3v_crs,mask=(vmask_crs(:,:,:)==1));CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"crs e1e3v_crs ",zmin,zmax 273 zmin=MINVAL(e1e2w_msk,mask=(tmask_crs(:,:,:)==1));CALL mpp_min(zmin);zmax=MAXVAL(e1e2w_msk,mask=(tmask_crs(:,:,:)==1));CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"crs e1e2w_msk ",zmin,zmax 274 zmin=MINVAL(e2e3u_msk,mask=(umask_crs(:,:,:)==1));CALL mpp_min(zmin);zmax=MAXVAL(e2e3u_msk,mask=(umask_crs(:,:,:)==1));CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"crs e2e3u_msk ",zmin,zmax 275 zmin=MINVAL(e1e3v_msk,mask=(vmask_crs(:,:,:)==1));CALL mpp_min(zmin);zmax=MAXVAL(e1e3v_msk,mask=(vmask_crs(:,:,:)==1));CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"crs e1e3v_msk ",zmin,zmax 211 276 212 277 !cbr facsurfu(:,:,:) = umask_crs(:,:,:) * e2e3u_msk(:,:,:) / e2e3u_crs(:,:,:) … … 226 291 ENDDO 227 292 293 DO ji=nldi_crs,nlei_crs 294 DO jj=nldj_crs,nlej_crs 295 IF( ABS(e2u_crs(ji,jj)) .LE. 1.e-5 )WRITE(narea+8000-1,*)"UNDERFLOW e2u_crs",ji,jj,e2u_crs(ji,jj),umask_crs(ji,jj,1) ; CALL FLUSH(narea+8000-1) 296 IF( ABS(e1v_crs(ji,jj)) .LE. 1.e-5 )WRITE(narea+8000-1,*)"UNDERFLOW e1v_crs",ji,jj,e1v_crs(ji,jj),vmask_crs(ji,jj,1) ; CALL FLUSH(narea+8000-1) 297 ENDDO 298 ENDDO 299 300 228 301 ! 3.d.3 Vertical scale factors 229 302 ! 230 231 232 CALL crs_dom_e3( e1t, e2t, zfse3t, e1e2w_crs, 'T', tmask, e3t_crs, e3t_max_crs) 233 CALL crs_dom_e3( e1u, e2u, zfse3u, e2e3u_crs, 'U', umask, e3u_crs, e3u_max_crs) 234 CALL crs_dom_e3( e1v, e2v, zfse3v, e1e3v_crs, 'V', vmask, e3v_crs, e3v_max_crs) 235 CALL crs_dom_e3( e1t, e2t, zfse3w, e1e2w_crs, 'W', tmask, e3w_crs, e3w_max_crs) 236 WHERE(e3t_max_crs == 0._wp) e3t_max_crs=r_inf 237 WHERE(e3u_max_crs == 0._wp) e3u_max_crs=r_inf 238 WHERE(e3v_max_crs == 0._wp) e3v_max_crs=r_inf 239 WHERE(e3w_max_crs == 0._wp) e3w_max_crs=r_inf 240 303 zmin=MINVAL(e2u_crs(nldi_crs:nlei_crs,nldj_crs:nlej_crs));zmax=MAXVAL(e2u_crs(nldi_crs:nlei_crs,nldj_crs:nlej_crs));CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"e2u_crs",zmin,zmax;CALL FLUSH(numout) 304 zmin=MINVAL(e1v_crs(nldi_crs:nlei_crs,nldj_crs:nlej_crs));zmax=MAXVAL(e1v_crs(nldi_crs:nlei_crs,nldj_crs:nlej_crs));CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"e1v_crs",zmin,zmax;CALL FLUSH(numout) 305 zmin=MINVAL(e1e2w_crs(nldi_crs:nlei_crs,nldj_crs:nlej_crs,:));zmax=MAXVAL(e1e2w_crs(nldi_crs:nlei_crs,nldj_crs:nlej_crs,:));CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"e1e2w_crs",zmin,zmax;CALL FLUSH(numout) 306 zmin=MINVAL(zfse3u);zmax=MAXVAL(zfse3u);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"zfse3u",zmin,zmax;CALL FLUSH(numout) 307 zmin=MINVAL(zfse3v);zmax=MAXVAL(zfse3v);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"zfse3v",zmin,zmax;CALL FLUSH(numout) 308 309 CALL crs_dom_e3( e1t, e2t, zfse3t, p_sfc_3d_crs=e1e2w_crs, cd_type='T', p_mask=tmask, p_e3_crs=e3t_0_crs, p_e3_max_crs=e3t_max_0_crs) 310 CALL crs_dom_e3( e1t, e2t, zfse3w, p_sfc_3d_crs=e1e2w_crs, cd_type='W', p_mask=tmask, p_e3_crs=e3w_0_crs, p_e3_max_crs=e3w_max_0_crs) 311 CALL crs_dom_e3( e1u, e2u, zfse3u, p_sfc_2d_crs=e2u_crs , cd_type='U', p_mask=umask, p_e3_crs=e3u_0_crs, p_e3_max_crs=e3u_max_0_crs) 312 CALL crs_dom_e3( e1v, e2v, zfse3v, p_sfc_2d_crs=e1v_crs , cd_type='V', p_mask=vmask, p_e3_crs=e3v_0_crs, p_e3_max_crs=e3v_max_0_crs) 313 WHERE(e3t_max_0_crs == 0._wp) e3t_max_0_crs=r_inf 314 WHERE(e3u_max_0_crs == 0._wp) e3u_max_0_crs=r_inf 315 WHERE(e3v_max_0_crs == 0._wp) e3v_max_0_crs=r_inf 316 WHERE(e3w_max_0_crs == 0._wp) e3w_max_0_crs=r_inf 317 318 write(narea+200,*)"crsini6",nstop; call flush(narea+200) 319 #if defined key_vvl 320 e3t_max_n_crs=e3t_max_0_crs 321 e3u_max_n_crs=e3u_max_0_crs 322 e3v_max_n_crs=e3v_max_0_crs 323 e3w_max_n_crs=e3w_max_0_crs 324 #endif 325 326 ht_0_crs(:,:)=0._wp 327 DO jk = 1, jpk 328 ht_0_crs(:,:)=ht_0_crs(:,:)+e3t_0_crs(:,:,jk)*tmask_crs(:,:,jk) 329 ENDDO 330 331 #if defined key_vvl 332 e3t_0_crs(:,:,:) = e3t_0_crs(:,:,:) * tmask_crs(:,:,:) 333 e3u_0_crs(:,:,:) = e3u_0_crs(:,:,:) * umask_crs(:,:,:) 334 e3v_0_crs(:,:,:) = e3v_0_crs(:,:,:) * vmask_crs(:,:,:) 335 e3w_0_crs(:,:,:) = e3w_0_crs(:,:,:) * tmask_crs(:,:,:) 336 #endif 337 338 write(narea+200,*)"crsini7",nstop; call flush(narea+200) 241 339 ! Reset 0 to e3t_0 or e3w_0 242 340 DO jk = 1, jpk 243 341 DO ji = 1, jpi_crs 244 342 DO jj = 1, jpj_crs 245 IF( e3t_ crs(ji,jj,jk) == 0._wp ) e3t_crs(ji,jj,jk) = e3t_1d(jk)246 IF( e3w_ crs(ji,jj,jk) == 0._wp ) e3w_crs(ji,jj,jk) = e3w_1d(jk)247 IF( e3u_ crs(ji,jj,jk) == 0._wp ) e3u_crs(ji,jj,jk) = e3t_1d(jk)248 IF( e3v_ crs(ji,jj,jk) == 0._wp ) e3v_crs(ji,jj,jk) = e3t_1d(jk)343 IF( e3t_0_crs(ji,jj,jk) == 0._wp ) e3t_0_crs(ji,jj,jk) = e3t_1d(jk) 344 IF( e3w_0_crs(ji,jj,jk) == 0._wp ) e3w_0_crs(ji,jj,jk) = e3w_1d(jk) 345 IF( e3u_0_crs(ji,jj,jk) == 0._wp ) e3u_0_crs(ji,jj,jk) = e3t_1d(jk) 346 IF( e3v_0_crs(ji,jj,jk) == 0._wp ) e3v_0_crs(ji,jj,jk) = e3t_1d(jk) 249 347 ENDDO 250 348 ENDDO 251 349 ENDDO 252 350 351 #if defined key_vvl 352 e3t_b_crs(:,:,:) = e3t_0_crs(:,:,:) 353 e3u_b_crs(:,:,:) = e3u_0_crs(:,:,:) 354 e3v_b_crs(:,:,:) = e3v_0_crs(:,:,:) 355 e3w_b_crs(:,:,:) = e3w_0_crs(:,:,:) 356 357 e3t_n_crs(:,:,:) = e3t_0_crs(:,:,:) 358 e3u_n_crs(:,:,:) = e3u_0_crs(:,:,:) 359 e3v_n_crs(:,:,:) = e3v_0_crs(:,:,:) 360 e3w_n_crs(:,:,:) = e3w_0_crs(:,:,:) 361 362 e3t_a_crs(:,:,:) = e3t_0_crs(:,:,:) 363 e3u_a_crs(:,:,:) = e3u_0_crs(:,:,:) 364 e3v_a_crs(:,:,:) = e3v_0_crs(:,:,:) 365 e3w_a_crs(:,:,:) = e3w_0_crs(:,:,:) 366 #endif 367 253 368 ! 3.d.3 Vertical depth (meters) 254 369 !cbr: il semblerait que p_e3=... ne soit pas utile ici !!!!!!!!! 255 CALL crs_dom_ope( gdept_0, 'MAX', 'T', tmask, gdept_crs, p_e3=zfse3t, psgn=1.0 ) 256 CALL crs_dom_ope( gdepw_0, 'MAX', 'W', tmask, gdepw_crs, p_e3=zfse3w, psgn=1.0 ) 370 CALL crs_dom_ope( gdept_0, 'MAX', 'T', tmask, gdept_0_crs, p_e3=zfse3t, psgn=1.0 ) 371 CALL crs_dom_ope( gdepw_0, 'MAX', 'W', tmask, gdepw_0_crs, p_e3=zfse3w, psgn=1.0 ) 372 #if defined key_vvl 373 gdept_n_crs(:,:,:) = gdept_0_crs(:,:,:) 374 gdepw_n_crs(:,:,:) = gdepw_0_crs(:,:,:) 375 #endif 376 377 write(narea+200,*)"crsini8",nstop; call flush(narea+200) 257 378 258 379 !--------------------------------------------------------- … … 276 397 !CALL dom_grid_glo ! Return to parent grid domain 277 398 399 write(narea+200,*)"crsini9",nstop; call flush(narea+200) 278 400 279 401 ! … … 291 413 rhop_crs(:,:,:)=0._wp ; rhd_crs(:,:,:)=0._wp ; rb2_crs(:,:,:)=0._wp 292 414 415 write(narea+200,*)"crsini10",nstop; call flush(narea+200) 293 416 294 417 !--------------------------------------------------------- -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr_substitute.h90
r4488 r6772 8 8 !! 3.1 ! 2009-02 (G. Madec, M. Leclair) pure z* coordinate 9 9 !!---------------------------------------------------------------------- 10 10 11 11 12 #if defined key_vvl … … 116 117 117 118 #endif 119 120 121 #if defined key_vvl 122 ! s* or z*-coordinate (3D + time dependency) + use of additional now arrays (..._n) 123 124 # define fse3t_crs(i,j,k) e3t_n_crs(i,j,k) 125 # define fse3u_crs(i,j,k) e3u_n_crs(i,j,k) 126 # define fse3v_crs(i,j,k) e3v_n_crs(i,j,k) 127 # define fse3w_crs(i,j,k) e3w_n_crs(i,j,k) 128 129 # define fse3t_b_crs(i,j,k) e3t_b_crs(i,j,k) 130 # define fse3u_b_crs(i,j,k) e3u_b_crs(i,j,k) 131 # define fse3v_b_crs(i,j,k) e3v_b_crs(i,j,k) 132 # define fse3w_b_crs(i,j,k) e3w_b_crs(i,j,k) 133 # define fse3t_n_crs(i,j,k) e3t_n_crs(i,j,k) 134 # define fse3u_n_crs(i,j,k) e3u_n_crs(i,j,k) 135 # define fse3v_n_crs(i,j,k) e3v_n_crs(i,j,k) 136 # define fse3w_n_crs(i,j,k) e3w_n_crs(i,j,k) 137 # define fse3t_a_crs(i,j,k) e3t_a_crs(i,j,k) 138 # define fse3u_a_crs(i,j,k) e3u_a_crs(i,j,k) 139 # define fse3v_a_crs(i,j,k) e3v_a_crs(i,j,k) 140 # define fse3w_a_crs(i,j,k) e3w_a_crs(i,j,k) 141 142 # define fse3t_max_crs(i,j,k) e3t_max_n_crs(i,j,k) 143 # define fse3u_max_crs(i,j,k) e3u_max_n_crs(i,j,k) 144 # define fse3v_max_crs(i,j,k) e3v_max_n_crs(i,j,k) 145 # define fse3w_max_crs(i,j,k) e3w_max_n_crs(i,j,k) 146 147 # define fsdept_crs(i,j,k) gdept_n_crs(i,j,k) 148 # define fsdepw_crs(i,j,k) gdepw_n_crs(i,j,k) 149 150 #else 151 ! z- or s-coordinate (1D or 3D + no time dependency) use reference in all cases 152 153 # define fse3t_crs(i,j,k) e3t_0_crs(i,j,k) 154 # define fse3u_crs(i,j,k) e3u_0_crs(i,j,k) 155 # define fse3v_crs(i,j,k) e3v_0_crs(i,j,k) 156 # define fse3w_crs(i,j,k) e3w_0_crs(i,j,k) 157 158 # define fse3t_b_crs(i,j,k) e3t_0_crs(i,j,k) 159 # define fse3u_b_crs(i,j,k) e3u_0_crs(i,j,k) 160 # define fse3v_b_crs(i,j,k) e3v_0_crs(i,j,k) 161 # define fse3w_b_crs(i,j,k) e3w_0_crs(i,j,k) 162 # define fse3t_n_crs(i,j,k) e3t_0_crs(i,j,k) 163 # define fse3u_n_crs(i,j,k) e3u_0_crs(i,j,k) 164 # define fse3v_n_crs(i,j,k) e3v_0_crs(i,j,k) 165 # define fse3w_n_crs(i,j,k) e3w_0_crs(i,j,k) 166 # define fse3t_a_crs(i,j,k) e3t_0_crs(i,j,k) 167 # define fse3u_a_crs(i,j,k) e3u_0_crs(i,j,k) 168 # define fse3v_a_crs(i,j,k) e3v_0_crs(i,j,k) 169 # define fse3w_a_crs(i,j,k) e3w_0_crs(i,j,k) 170 171 # define fse3t_max_crs(i,j,k) e3t_max_0_crs(i,j,k) 172 # define fse3u_max_crs(i,j,k) e3u_max_0_crs(i,j,k) 173 # define fse3v_max_crs(i,j,k) e3v_max_0_crs(i,j,k) 174 # define fse3w_max_crs(i,j,k) e3w_max_0_crs(i,j,k) 175 176 # define fsdept_crs(i,j,k) gdept_0_crs(i,j,k) 177 # define fsdepw_crs(i,j,k) gdepw_0_crs(i,j,k) 178 179 #endif 180 181 182 118 183 !!---------------------------------------------------------------------- 119 184 !! NEMO/OPA 3.3 , NEMO Consortium (2010) -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90
r5602 r6772 72 72 PUBLIC mpp_lnk_3d, mpp_lnk_3d_gather, mpp_lnk_2d, mpp_lnk_2d_e 73 73 PUBLIC mpp_lnk_2d_9 74 PUBLIC mppscatter, mppgather 74 PUBLIC mppscatter, mppgather, mppgatheri 75 75 PUBLIC mpp_ini_ice, mpp_ini_znl 76 76 PUBLIC mppsize … … 1475 1475 END SUBROUTINE mppgather 1476 1476 1477 SUBROUTINE mppgatheri( ptab, kp, pio ) 1478 !!---------------------------------------------------------------------- 1479 !! *** routine mppgather *** 1480 !! 1481 !! ** Purpose : Transfert between a local subdomain array and a work 1482 !! array which is distributed following the vertical level. 1483 !! 1484 !!---------------------------------------------------------------------- 1485 INTEGER, DIMENSION(1,1), INTENT(in ) :: ptab ! subdomain input array 1486 INTEGER, INTENT(in ) :: kp ! record length 1487 INTEGER, DIMENSION(jpnij), INTENT( out) :: pio ! subdomain input array 1488 !! 1489 INTEGER :: itaille, ierror ! temporary integer 1490 !!--------------------------------------------------------------------- 1491 ! 1492 itaille = 1 1493 CALL mpi_allgather( ptab, itaille, mpi_integer, pio, itaille , & 1494 & mpi_integer, mpi_comm_opa, ierror ) 1495 ! CALL MPI_ALLGATHER ( njmpp, 1, mpi_integer, kwork, 1, mpi_integer, mpi_comm_opa, ierr ) 1496 ! 1497 END SUBROUTINE mppgatheri 1498 1477 1499 1478 1500 SUBROUTINE mppscatter( pio, kp, ptab ) -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/LBC/mppini_2.h90
r5602 r6772 72 72 73 73 ! read namelist for ln_zco 74 NAMELIST/namzgr/ ln_zco, ln_zps, ln_sco 74 NAMELIST/namzgr/ ln_zco, ln_zps, ln_sco, ln_isfcav 75 75 76 76 !!---------------------------------------------------------------------- … … 310 310 311 311 isurf = 0 312 DO jj = 1 +jprecj, ilj-jprecj313 DO ji = 1 +jpreci, ili-jpreci312 DO jj = 1, ilj 313 DO ji = 1, ili 314 314 IF( imask(ji+iimppt(ii,ij)-1, jj+ijmppt(ii,ij)-1) == 1) isurf = isurf+1 315 315 END DO -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/LDF/ldfslp.F90
r5602 r6772 464 464 ENDIF 465 465 466 CALL iom_put("zgru",zgru)467 CALL iom_put("zgrv",zgrv)468 CALL iom_put("zdzr",zdzr)469 CALL iom_put("zwz",zwz)470 CALL iom_put("zww",zww)471 CALL iom_put("uslp",uslp)472 CALL iom_put("vslp",vslp)473 474 466 CALL wrk_dealloc( jpi,jpj,jpk, zwz, zww, zdzr, zgru, zgrv ) 475 467 CALL wrk_dealloc( jpi,jpj, zhmlpu, zhmlpv) -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/LDF/ldfslp_crs.F90
r6101 r6772 35 35 USE crs 36 36 USE iom 37 USE ieee_arithmetic 37 38 38 39 IMPLICIT NONE … … 168 169 ! ! bound the slopes: abs(zw.)<= 1/100 and zb..<0 169 170 ! ! + kxz max= ah slope max =< e1 e3 /(pi**2 2 dt) 170 zbu = MIN( zbu, -100._wp* ABS( zau ) , -7.e+3_wp/e3u_max_crs(ji,jj,jk)* ABS( zau ) ) 171 zbv = MIN( zbv, -100._wp* ABS( zav ) , -7.e+3_wp/e3v_max_crs(ji,jj,jk)* ABS( zav ) ) 172 !cc zbu = MIN( zbu, -100._wp* ABS( zau ) , -7.e+3_wp/e3u_crs(ji,jj,jk)* ABS( zau ) ) 173 !cc zbv = MIN( zbv, -100._wp* ABS( zav ) , -7.e+3_wp/e3v_crs(ji,jj,jk)* ABS( zav ) ) 171 zbu = MIN( zbu, -100._wp* ABS( zau ) , -7.e+3_wp/fse3u_max_crs(ji,jj,jk)* ABS( zau ) ) 172 zbv = MIN( zbv, -100._wp* ABS( zav ) , -7.e+3_wp/fse3v_max_crs(ji,jj,jk)* ABS( zav ) ) 174 173 ! ! uslp and vslp output in zwz and zww, resp. 175 174 zfi = MAX( omlmask(ji,jj,jk), omlmask(ji+1,jj,jk) ) … … 177 176 zwz(ji,jj,jk) = ( ( 1. - zfi) * zau / ( zbu - zeps ) & 178 177 & + zfi * uslpml(ji,jj) & 179 & * 0.5_wp * ( gdept_crs(ji+1,jj,jk)+gdept_crs(ji,jj,jk) -e3u_max_crs(ji,jj,1) ) &178 & * 0.5_wp * ( fsdept_crs(ji+1,jj,jk)+fsdept_crs(ji,jj,jk) - fse3u_max_crs(ji,jj,1) ) & 180 179 & / MAX( hmlpt_crs(ji,jj), hmlpt_crs(ji+1,jj), 5._wp ) ) * umask_crs(ji,jj,jk) 181 180 zww(ji,jj,jk) = ( ( 1. - zfj) * zav / ( zbv - zeps ) & 182 181 & + zfj * vslpml(ji,jj) & 183 & * 0.5_wp * ( gdept_crs(ji,jj+1,jk)+ gdept_crs(ji,jj,jk)-e3v_max_crs(ji,jj,1) ) &182 & * 0.5_wp * ( fsdept_crs(ji,jj+1,jk)+ fsdept_crs(ji,jj,jk)-fse3v_max_crs(ji,jj,1) ) & 184 183 & / MAX( hmlpt_crs(ji,jj), hmlpt_crs(ji,jj+1), 5. ) ) * vmask_crs(ji,jj,jk) 185 184 !!gm modif to suppress omlmask.... (as in Griffies case) … … 196 195 END DO 197 196 CALL crs_lbc_lnk( zwz, 'U', -1. ) ; CALL crs_lbc_lnk( zww, 'V', -1. ) ! lateral boundary conditions 198 CALL iom_put("zwz_crs",zwz)199 CALL iom_put("zww_crs",zww)200 197 ! 201 198 ! !* horizontal Shapiro filter … … 262 259 ! ! bound the slopes: abs(zw.)<= 1/100 and zb..<0. 263 260 ! ! + kxz max= ah slope max =< e1 e3 /(pi**2 2 dt) 264 zbi = MIN( zbw ,- 100._wp* ABS( zai ) , -7.e+3_wp/ e3w_max_crs(ji,jj,jk)* ABS( zai ) )265 zbj = MIN( zbw , -100._wp* ABS( zaj ) , -7.e+3_wp/ e3w_max_crs(ji,jj,jk)* ABS( zaj ) )261 zbi = MIN( zbw ,- 100._wp* ABS( zai ) , -7.e+3_wp/fse3w_max_crs(ji,jj,jk)* ABS( zai ) ) 262 zbj = MIN( zbw , -100._wp* ABS( zaj ) , -7.e+3_wp/fse3w_max_crs(ji,jj,jk)* ABS( zaj ) ) 266 263 ! ! wslpi and wslpj with ML flattening (output in zwz and zww, resp.) 267 264 zfk = MAX( omlmask(ji,jj,jk), omlmask(ji,jj,jk-1) ) ! zfk=1 in the ML otherwise zfk=0 268 zck = gdepw_crs(ji,jj,jk) / MAX( hmlp_crs(ji,jj), 10._wp )265 zck = fsdepw_crs(ji,jj,jk) / MAX( hmlp_crs(ji,jj), 10._wp ) 269 266 zwz(ji,jj,jk) = ( zai / ( zbi - zeps ) * ( 1._wp - zfk ) + zck * wslpiml(ji,jj) * zfk ) * tmask_crs(ji,jj,jk) 270 267 zww(ji,jj,jk) = ( zaj / ( zbj - zeps ) * ( 1._wp - zfk ) + zck * wslpjml(ji,jj) * zfk ) * tmask_crs(ji,jj,jk) … … 333 330 ! 334 331 CALL iom_swap( "nemo_crs" ) ! swap on the coarse grid 335 CALL iom_put("zgru_crs",zgru)336 CALL iom_put("zgrv_crs",zgrv)337 CALL iom_put("zdzr_crs",zdzr)338 CALL iom_put("zwz_crs",zwz)339 CALL iom_put("zww_crs",zww)340 332 CALL iom_put("uslp_crs",uslp_crs) 341 333 CALL iom_put("vslp_crs",vslp_crs) … … 411 403 !----------------------------------------------------------------------- 412 404 ! 413 DO jj = 2, jpj_crsm1414 DO ji = 2, jpi_crsm1405 DO jj = 2, nldi_crs 406 DO ji = 2, nldj_crs 415 407 ! !== Slope at u- & v-points just below the Mixed Layer ==! 416 408 ! … … 425 417 ! !- bound the slopes: abs(zw.)<= 1/100 and zb..<0 426 418 ! kxz max= ah slope max =< e1 e3 /(pi**2 2 dt) 427 zbu = MIN( zbu , -100._wp* ABS( zau ) , -7.e+3_wp/ e3u_max_crs(ji,jj,iku)* ABS( zau ) )428 zbv = MIN( zbv , -100._wp* ABS( zav ) , -7.e+3_wp/ e3v_max_crs(ji,jj,ikv)* ABS( zav ) )419 zbu = MIN( zbu , -100._wp* ABS( zau ) , -7.e+3_wp/fse3u_max_crs(ji,jj,iku)* ABS( zau ) ) 420 zbv = MIN( zbv , -100._wp* ABS( zav ) , -7.e+3_wp/fse3v_max_crs(ji,jj,ikv)* ABS( zav ) ) 429 421 ! !- Slope at u- & v-points (uslpml, vslpml) 430 422 uslpml(ji,jj) = zau / ( zbu - zeps ) * umask_crs(ji,jj,iku) … … 448 440 ! !- bound the slopes: abs(zw.)<= 1/100 and zb..<0. 449 441 ! kxz max= ah slope max =< e1 e3 /(pi**2 2 dt) 450 zbi = MIN( zbw , -100._wp* ABS( zai ) , -7.e+3_wp/ e3w_max_crs(ji,jj,ik)* ABS( zai ) )451 zbj = MIN( zbw , -100._wp* ABS( zaj ) , -7.e+3_wp/ e3w_max_crs(ji,jj,ik)* ABS( zaj ) )442 zbi = MIN( zbw , -100._wp* ABS( zai ) , -7.e+3_wp/fse3w_max_crs(ji,jj,ik)* ABS( zai ) ) 443 zbj = MIN( zbw , -100._wp* ABS( zaj ) , -7.e+3_wp/fse3w_max_crs(ji,jj,ik)* ABS( zaj ) ) 452 444 ! !- i- & j-slope at w-points (wslpiml, wslpjml) 453 445 wslpiml(ji,jj) = zai / ( zbi - zeps ) * tmask_crs (ji,jj,ik) … … 493 485 ! 494 486 ELSE ! Madec operator : slopes at u-, v-, and w-points 495 ALLOCATE( uslp_crs(jpi_crs,jpj_crs,jpk) , vslp_crs(jpi_crs,jpj_crs,jpk) , & 496 & wslpi_crs(jpi_crs,jpj_crs,jpk) , wslpj_crs(jpi_crs,jpj_crs,jpk) , & 497 & omlmask(jpi_crs,jpj_crs,jpk) , & 498 & uslpml(jpi_crs,jpj_crs) , vslpml(jpi_crs,jpj_crs) , & 499 & wslpiml(jpi_crs,jpj_crs) , wslpjml(jpi_crs,jpj_crs) , STAT=ierr ) 487 ALLOCATE( uslp_crs(jpi_crs,jpj_crs,jpk) , vslp_crs(jpi_crs,jpj_crs,jpk) , wslpi_crs(jpi_crs,jpj_crs,jpk) , wslpj_crs(jpi_crs,jpj_crs,jpk) , & 488 & omlmask(jpi_crs,jpj_crs,jpk) , uslpml(jpi_crs,jpj_crs) , vslpml(jpi_crs,jpj_crs) , wslpiml(jpi_crs,jpj_crs) , wslpjml(jpi_crs,jpj_crs) , STAT=ierr ) 500 489 IF( ierr > 0 ) CALL ctl_stop( 'STOP', 'ldf_slp_init : unable to allocate Madec operator slope ' ) 501 490 … … 520 509 DO jj = 2, jpj_crsm1 521 510 DO ji = 2, jpi_crsm1 ! vector opt. 522 !cbr uslp_crs (ji,jj,jk) = -1./e1u_crs(ji,jj) * ( gdept_crs(ji+1,jj,jk) - gdept_crs(ji ,jj ,jk) ) * umask_crs(ji,jj,jk) 523 !vslp_crs (ji,jj,jk) = -1./e2v_crs(ji,jj) * ( gdept_crs(ji,jj+1,jk) - gdept_crs(ji ,jj ,jk) ) * vmask_crs(ji,jj,jk) 524 !wslpi_crs(ji,jj,jk) = -1./e1t_crs(ji,jj) * ( gdepw_crs(ji+1,jj,jk) - gdepw_crs(ji-1,jj,jk) ) * tmask_crs(ji,jj,jk) * 0.5 525 !wslpj_crs(ji,jj,jk) = -1./e2t_crs(ji,jj) * ( gdepw_crs(ji,jj+1,jk) - gdepw_crs(ji,jj-1,jk) ) * tmask_crs(ji,jj,jk) * 0.5 526 uslp_crs (ji,jj,jk) = -1. * ( gdept_crs(ji+1,jj,jk) - gdept_crs(ji ,jj ,jk) ) * umask_crs(ji,jj,jk) 511 uslp_crs (ji,jj,jk) = -1. * ( fsdept_crs(ji+1,jj,jk) - fsdept_crs(ji ,jj ,jk) ) * umask_crs(ji,jj,jk) 527 512 IF( e1u_crs(ji,jj) .NE. 0._wp ) uslp_crs (ji,jj,jk) = uslp_crs (ji,jj,jk) / e1u_crs(ji,jj) 528 vslp_crs (ji,jj,jk) = -1. * ( gdept_crs(ji,jj+1,jk) - gdept_crs(ji ,jj ,jk) ) * vmask_crs(ji,jj,jk)513 vslp_crs (ji,jj,jk) = -1. * ( fsdept_crs(ji,jj+1,jk) - fsdept_crs(ji ,jj ,jk) ) * vmask_crs(ji,jj,jk) 529 514 IF( e2v_crs(ji,jj) .NE. 0._wp ) vslp_crs (ji,jj,jk) = vslp_crs (ji,jj,jk) / e2v_crs(ji,jj) 530 wslpi_crs(ji,jj,jk) = -1. * ( gdepw_crs(ji+1,jj,jk) - gdepw_crs(ji-1,jj,jk) ) * tmask_crs(ji,jj,jk) * 0.5515 wslpi_crs(ji,jj,jk) = -1. * ( fsdepw_crs(ji+1,jj,jk) - fsdepw_crs(ji-1,jj,jk) ) * tmask_crs(ji,jj,jk) * 0.5 531 516 IF( e1t_crs(ji,jj) .NE. 0._wp ) wslpi_crs(ji,jj,jk) = wslpi_crs(ji,jj,jk) / e1t_crs(ji,jj) 532 wslpj_crs(ji,jj,jk) = -1. * ( gdepw_crs(ji,jj+1,jk) - gdepw_crs(ji,jj-1,jk) ) * tmask_crs(ji,jj,jk) * 0.5517 wslpj_crs(ji,jj,jk) = -1. * ( fsdepw_crs(ji,jj+1,jk) - fsdepw_crs(ji,jj-1,jk) ) * tmask_crs(ji,jj,jk) * 0.5 533 518 IF( e2t_crs(ji,jj) .NE. 0._wp ) wslpj_crs(ji,jj,jk) = wslpj_crs(ji,jj,jk) / e2t_crs(ji,jj) 534 519 END DO -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/LDF/ldftra_crs.F90
r6101 r6772 8 8 !! 2.0 ! 2005-11 (G. Madec) 9 9 !!---------------------------------------------------------------------- 10 10 #if defined key_top && defined key_crs 11 11 !!---------------------------------------------------------------------- 12 12 !! ldf_tra_init : initialization, namelist read, and parameters control … … 88 88 89 89 !!====================================================================== 90 #else 91 PUBLIC ldf_tra_crs_init 92 CONTAINS 93 SUBROUTINE ldf_tra_crs_init 94 END SUBROUTINE ldf_tra_crs_init 95 96 #endif 90 97 END MODULE ldftra_crs -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_core.F90
r5602 r6772 44 44 USE sbc_ice ! Surface boundary condition: ice fields 45 45 USE lib_fortran ! to use key_nosignedzero 46 USE sbcapr 46 47 #if defined key_lim3 47 48 USE ice, ONLY : u_ice, v_ice, jpl, pfrld, a_i_b 48 49 USE limthd_dh ! for CALL lim_thd_snwblow 49 50 #elif defined key_lim2 50 USE ice_2, ONLY : u_ice, v_ice 51 USE ice_2, ONLY : u_ice, v_ice, pfrld 51 52 USE par_ice_2 52 53 #endif … … 83 84 REAL(wp), PARAMETER :: Cice = 1.4e-3 ! iovi 1.63e-3 ! transfer coefficient over ice 84 85 REAL(wp), PARAMETER :: albo = 0.066 ! ocean albedo assumed to be constant 86 REAL(wp), PARAMETER :: rgas = 287.1 ! gas const. dry air (J/kg/K) 87 REAL(wp), PARAMETER :: rvap = 461.51 ! gas const. vapour (J/kg/K) 85 88 86 89 ! !!* Namelist namsbc_core : CORE bulk parameters … … 91 94 REAL(wp) :: rn_zqt ! z(q,t) : height of humidity and temperature measurements 92 95 REAL(wp) :: rn_zu ! z(u) : height of wind measurements 96 ! 97 LOGICAL :: ln_tair_celsius !: logical flag for Read Tair: Tair in NEMO is Kelvin 98 LOGICAL :: ln_humi_rel !: logical flag for Read relative humidity (T) or specific humidity (F) 99 LOGICAL :: ln_cohum_arc !: logical flag for Correction of Humidity in the Arctic Ocean 100 LOGICAL :: ln_cotair_arc !: logical flag for Correction of Air Temperature in the Arctic Ocean 101 LOGICAL :: ln_corad_antar !: logical flag for Correction of radiatives fluxes in the Southern Ocean 102 93 103 94 104 !! * Substitutions … … 143 153 INTEGER :: ios ! Local integer output status for namelist read 144 154 ! 155 INTEGER :: ji,jj 156 REAL(wp) :: zzlat, zzlat1, zzlat2, zfm, zfrld 157 REAL(wp) :: zmin,zmax 158 REAL(wp), DIMENSION(:,:), POINTER :: xyt,z_qsr,z_qlw,z_qsr1,z_qlw1, z_hum, z_tair 159 REAL(wp), DIMENSION(:,:), POINTER :: zqsr_lr, zqsr_hr, zqlw_lr, zqlw_hr 160 145 161 CHARACTER(len=100) :: cn_dir ! Root directory for location of core files 146 162 TYPE(FLD_N), DIMENSION(jpfld) :: slf_i ! array of namelist informations on the fields to read … … 151 167 & sn_wndi, sn_wndj, sn_humi , sn_qsr , & 152 168 & sn_qlw , sn_tair, sn_prec , sn_snow, & 153 & sn_tdif, rn_zqt, rn_zu 169 & sn_tdif, rn_zqt, rn_zu , ln_tair_celsius, & 170 & ln_humi_rel , ln_cohum_arc, & 171 & ln_cotair_arc, ln_corad_antar 172 154 173 !!--------------------------------------------------------------------- 155 174 ! 175 CALL wrk_alloc( jpi,jpj, xyt,z_qsr,z_qlw,z_qsr1,z_qlw1, z_hum, z_tair ) 176 CALL wrk_alloc( jpi,jpj, zqsr_lr, zqsr_hr, zqlw_lr, zqlw_hr ) 156 177 ! ! ====================== ! 157 178 IF( kt == nit000 ) THEN ! First call kt=nit000 ! … … 194 215 CALL fld_fill( sf, slf_i, cn_dir, 'sbc_blk_core', 'flux formulation for ocean surface boundary condition', 'namsbc_core' ) 195 216 ! 217 ! 218 IF(lwp) WRITE(numout,*) 'sbc_blk_core: jfld = ',jfld 219 IF( ln_cohum_arc ) CALL ctl_warn( 'sbc_blk_core: correction of humidity in arctic' ) 220 IF( ln_cotair_arc ) CALL ctl_warn( 'sbc_blk_core: correction of air temperature in arctic' ) 221 IF( ln_corad_antar ) CALL ctl_warn( 'sbc_blk_core: correction of short radiation in antartic' ) 222 IF( ln_humi_rel ) CALL ctl_warn( 'sbc_blk_core: use relative humidity instead of specific humidity') 223 IF( ln_tair_celsius) CALL ctl_warn( 'sbc_blk_core: Tair is read in Celsius') 224 IF(lwp) WRITE(numout,*) 'sbc_blk_core: rn_pfac = ',rn_pfac 225 ! 196 226 sfx(:,:) = 0._wp ! salt flux; zero unless ice is present (computed in limsbc(_2).F90) 197 227 ! … … 199 229 200 230 CALL fld_read( kt, nn_fsbc, sf ) ! input fields provided at the current time-step 231 232 !========================================= 233 ! ONLINE CORRECTIONS 234 !========================================= 235 ! 236 ! Correction of Tair 237 ! 238 IF( ln_tair_celsius .AND. MOD( kt-1, nn_fsbc ) == 0 ) THEN 239 sf(jp_tair)%fnow = sf(jp_tair)%fnow + 273.15_wp ! Conversion of the Temperature °C --> Kelvin 240 ENDIF 241 ! 242 ! Correction of SW and LW in the Southern Ocean 243 ! 244 IF( ln_corad_antar .AND. .NOT. sf(jp_qsr)%ln_tint .AND. MOD( kt-1, 86400/INT(rdt) ) == 0 ) THEN 245 z_qsr(:,:) = 0.8 * sf(jp_qsr)%fnow(:,:,1) 246 xyt(:,:) = 0.e0 ; zzlat1 = -65. ; zzlat2 = -60. 247 DO jj = 1, jpj 248 DO ji = 1, jpi 249 zzlat = gphit(ji,jj) 250 IF( zzlat >= zzlat1 .AND. zzlat <= zzlat2 ) THEN 251 xyt(ji,jj) = (zzlat2-zzlat)/(zzlat2-zzlat1) 252 ELSE IF ( zzlat < zzlat1 ) THEN 253 xyt(ji,jj) = 1 254 ENDIF 255 END DO 256 END DO 257 IF(lwp) WRITE(numout,*) 'Correc ln_corad_antar' 258 z_qsr1(:,:) = z_qsr(:,:) * xyt(:,:) + ( 1.0 - xyt(:,:) ) * sf(jp_qsr)%fnow(:,:,1) 259 sf(jp_qsr)%fnow(:,:,1) = z_qsr1(:,:) 260 ENDIF 261 262 IF( MOD( kt-1, nn_fsbc ) == 0 )THEN 263 ! 264 IF ( nmonth >= 5 .AND. nmonth <= 9 ) THEN 265 ! 266 ! Correction of Humidity in the Arctic Ocean 267 ! 268 IF( ln_cohum_arc ) THEN 269 z_hum(:,:) = 0.85 * sf(jp_humi)%fnow(:,:,1) 270 xyt(:,:) = 0.e0 ; zzlat1 = 78. ; zzlat2 = 82. 271 DO jj = 1, jpj 272 DO ji = 1, jpi 273 zzlat = gphit(ji,jj) 274 #if defined key_lim2 || defined key_lim3 275 IF ( ALLOCATED(pfrld) ) THEN ; zfrld = pfrld(ji,jj) ; ELSE ; zfrld = 0 ; ENDIF 276 #endif 277 IF( zzlat >= zzlat1 .AND. zzlat <= zzlat2 .AND. zfrld < 0.85 ) THEN 278 xyt(ji,jj) = ( zzlat - zzlat1 ) / ( zzlat2 - zzlat1 ) 279 ELSE IF ( zzlat > zzlat2 .AND. zfrld < 0.85 ) THEN 280 xyt(ji,jj) = 1._wp 281 ENDIF 282 ENDDO 283 ENDDO 284 IF(lwp) WRITE(numout,*) 'Correc ln_cohum_arc' 285 sf(jp_humi)%fnow(:,:,1) = z_hum(:,:) * xyt(:,:) + ( 1.0 - xyt(:,:) ) * sf(jp_humi)%fnow(:,:,1) 286 ENDIF 287 ! 288 ! Correction of Air Temperature in the Arctic Ocean 289 ! 290 IF( ln_cotair_arc ) THEN 291 z_tair(:,:) = sf(jp_tair)%fnow(:,:,1) - 2.0 292 xyt(:,:) = 0.e0 ; zzlat1 = 78. ; zzlat2 = 82. 293 DO jj = 1, jpj 294 DO ji = 1, jpi 295 zzlat = gphit(ji,jj) 296 #if defined key_lim2 || defined key_lim3 297 IF( ALLOCATED(pfrld) ) THEN ; zfrld = pfrld(ji,jj) ; ELSE ; zfrld=0 ; ENDIF 298 #endif 299 IF( zzlat >= zzlat1 .AND. zzlat <= zzlat2 .AND. zfrld < 0.85 ) THEN 300 xyt(ji,jj) = ( zzlat - zzlat1 ) / ( zzlat2 - zzlat1 ) 301 ELSE IF( zzlat > zzlat2 .AND. zfrld < 0.85 ) THEN 302 xyt(ji,jj) = 1._wp 303 ENDIF 304 END DO 305 ENDDO 306 IF(lwp) WRITE(numout,*) 'Correc ln_cotair_arc' 307 sf(jp_tair)%fnow(:,:,1) = z_tair(:,:) * xyt(:,:) + ( 1.0 - xyt(:,:) ) * sf(jp_tair)%fnow(:,:,1) 308 ENDIF 309 ! 310 ENDIF ! 5 <= nmonth <= 9 311 312 ! 313 ENDIF ! IF MOD( kt-1, nn_fsbc ) 314 315 DO jj=1,jpj 316 DO ji=1,jpi 317 sf(jp_humi)%fnow(ji,jj,1) = MAX( MIN( sf(jp_humi)%fnow(ji,jj,1) ,1.0 ) , 0.0 ) 318 sf(jp_prec)%fnow(ji,jj,1) = MAX( sf(jp_prec)%fnow(ji,jj,1) ,0.0 ) 319 sf(jp_qsr )%fnow(ji,jj,1) = MAX( sf(jp_qsr )%fnow(ji,jj,1) ,0.0 ) 320 sf(jp_qlw )%fnow(ji,jj,1) = MAX( sf(jp_qlw )%fnow(ji,jj,1) ,0.0 ) 321 ENDDO 322 END DO 323 324 ! 325 !========================================= 326 ! END OF ONLINE CORRECTIONS 327 !========================================= 328 ! 201 329 202 330 ! ! compute the surface ocean fluxes using CORE bulk formulea … … 215 343 ENDIF 216 344 #endif 345 ! 346 CALL wrk_dealloc( jpi,jpj, xyt,z_qsr,z_qlw,z_qsr1,z_qlw1, z_hum, z_tair ) 347 CALL wrk_dealloc( jpi,jpj, zqsr_lr, zqsr_hr, zqlw_lr, zqlw_hr ) 217 348 ! 218 349 END SUBROUTINE sbc_blk_core … … 257 388 REAL(wp), DIMENSION(:,:), POINTER :: zt_zu ! air temperature at wind speed height 258 389 REAL(wp), DIMENSION(:,:), POINTER :: zq_zu ! air spec. hum. at wind speed height 390 REAL(wp), DIMENSION(:,:), POINTER :: zqatm , zpatm ! specific humidity and mean sea level pressure (Pa) 391 REAL(wp) :: vt, vp, vq, zqa, zq0, zq1, zq2, zee 259 392 !!--------------------------------------------------------------------- 260 393 ! … … 262 395 ! 263 396 CALL wrk_alloc( jpi,jpj, zwnd_i, zwnd_j, zqsatw, zqlw, zqsb, zqla, zevap ) 264 CALL wrk_alloc( jpi,jpj, Cd, Ch, Ce, zst, zt_zu, zq_zu )397 CALL wrk_alloc( jpi,jpj, Cd, Ch, Ce, zst, zt_zu, zq_zu ,zqatm, zpatm ) 265 398 ! 266 399 ! local scalars ( place there for vector optimisation purposes) … … 314 447 ! ... specific humidity at SST and IST 315 448 zqsatw(:,:) = zcoef_qsatw * EXP( -5107.4 / zst(:,:) ) 316 449 ! 450 IF ( ln_humi_rel ) THEN 451 zq0 = rvap / rgas - 1.0 452 zq1 = rgas / rvap 453 zq2 = 1.0 - zq1 454 zpatm(:,:) = 100800. ! atmospheric pressure (assumed constant here) 455 IF ( ln_apr_dyn ) zpatm(:,:) = apr(:,:) 456 DO jj = 1 , jpj 457 DO ji = 1 , jpi 458 vt = sf(jp_tair)%fnow(ji,jj,1) - rt0 ! air temperature (Celsius) 459 vp = zpatm(ji,jj) / 100. ! mean sea level pressure (mb or hPa) 460 vq = sf(jp_humi)%fnow(ji,jj,1) ! relative humidity (fraction of 1) 461 ! Convert RH at the air/sea interface in specific humidity (kg/kg) 462 ! Teten's formula for qsat (mb) 463 zqa = ( 1.0007 + 3.46e-6 * vp) * 6.1121 * EXP( 17.502 * vt / ( 240.97+vt ) ) 464 zee = zqa * vq ! vapour partial pressure (mb) 465 vq = zq1 * zee / ( vp - zq2 * zee ) ! specific humidity (kg/kg) 466 zqatm(ji,jj) = vq 467 ENDDO 468 ENDDO 469 ELSE 470 zqatm(:,:)=sf(jp_humi)%fnow(:,:,1) 471 ENDIF 472 ! 317 473 ! ... NCAR Bulk formulae, computation of Cd, Ch, Ce at T-point : 318 CALL turb_core_2z( rn_zqt, rn_zu, zst, sf(jp_tair)%fnow, zqsatw, sf(jp_humi)%fnow, wndm, &474 CALL turb_core_2z( rn_zqt, rn_zu, zst, sf(jp_tair)%fnow, zqsatw, zqatm, wndm, & 319 475 & Cd, Ch, Ce, zt_zu, zq_zu ) 320 476 … … 354 510 IF( ABS( rn_zu - rn_zqt) < 0.01_wp ) THEN 355 511 !! q_air and t_air are (or "are almost") given at 10m (wind reference height) 356 zevap(:,:) = rn_efac*MAX( 0._wp, rhoa*Ce(:,:)*( zqsatw(:,:) - sf(jp_humi)%fnow(:,:,1) )*wndm(:,:) ) ! Evaporation 512 !zevap(:,:) = rn_efac*MAX( 0._wp, rhoa*Ce(:,:)*( zqsatw(:,:) - sf(jp_humi)%fnow(:,:,1) )*wndm(:,:) ) ! Evaporation 513 zevap(:,:) = rn_efac*MAX( 0._wp, rhoa*Ce(:,:)*( zqsatw(:,:) - zqatm(:,:) )*wndm(:,:) ) ! Evaporation 357 514 zqsb (:,:) = cpa*rhoa*Ch(:,:)*( zst (:,:) - sf(jp_tair)%fnow(:,:,1) )*wndm(:,:) ! Sensible Heat 358 515 ELSE … … 414 571 ! 415 572 CALL wrk_dealloc( jpi,jpj, zwnd_i, zwnd_j, zqsatw, zqlw, zqsb, zqla, zevap ) 416 CALL wrk_dealloc( jpi,jpj, Cd, Ch, Ce, zst, zt_zu, zq_zu )573 CALL wrk_dealloc( jpi,jpj, Cd, Ch, Ce, zst, zt_zu, zq_zu, zqatm, zpatm ) 417 574 ! 418 575 IF( nn_timing == 1 ) CALL timing_stop('blk_oce_core') … … 437 594 REAL(wp) :: zwndi_t , zwndj_t ! relative wind components at T-point 438 595 !!--------------------------------------------------------------------- 439 ! 596 440 597 IF( nn_timing == 1 ) CALL timing_start('blk_ice_core_tau') 441 598 ! … … 530 687 REAL(wp) :: zcoef_dqlw, zcoef_dqla, zcoef_dqsb 531 688 REAL(wp) :: zztmp, z1_lsub ! temporary variable 689 REAL(wp) :: ztamr,zmt1,zmt2,zmt3,zev,zes 532 690 !! 533 691 REAL(wp), DIMENSION(:,:,:), POINTER :: z_qlw ! long wave heat flux over ice … … 536 694 REAL(wp), DIMENSION(:,:,:), POINTER :: z_dqsb ! sensible heat sensitivity over ice 537 695 REAL(wp), DIMENSION(:,:) , POINTER :: zevap, zsnw ! evaporation and snw distribution after wind blowing (LIM3) 696 REAL(wp), DIMENSION(:,:) , POINTER :: zqatm, zpatm , ztatm ! specific humidity 538 697 !!--------------------------------------------------------------------- 539 698 ! … … 541 700 ! 542 701 CALL wrk_alloc( jpi,jpj,jpl, z_qlw, z_qsb, z_dqlw, z_dqsb ) 702 CALL wrk_alloc( jpi,jpj, zqatm, zpatm, ztatm ) 703 704 IF ( ln_humi_rel ) THEN 705 zpatm(:,:) = 100800. ! atmospheric pressure (assumed constant here) 706 IF (ln_apr_dyn) zpatm(:,:) = apr(:,:) 707 DO jj=1,jpj 708 DO ji=1,jpi 709 ztatm (ji,jj) = sf(jp_tair)%fnow(ji,jj,1) ! air temperature in Kelvins 710 ztamr = ztatm(ji,jj) - rtt ! Saturation water vapour 711 zmt1 = SIGN( 17.269, ztamr ) 712 zmt2 = SIGN( 21.875, ztamr ) 713 zmt3 = SIGN( 28.200, -ztamr ) 714 zes = 611.0 * EXP( ABS( ztamr ) * MIN ( zmt1, zmt2 ) & 715 & / ( ztatm(ji,jj) - 35.86 + MAX( 0.e0, zmt3 ) ) ) 716 zev = sf(jp_humi)%fnow(ji,jj,1) * zes ! vapour pressure 717 zqatm(ji,jj) = 0.622 * zev / ( zpatm(ji,jj) - 0.378 * zev ) ! specific humidity 718 ENDDO 719 ENDDO 720 ELSE 721 zqatm(:,:) = sf(jp_humi)%fnow(:,:,1) 722 ENDIF 543 723 544 724 ! local scalars ( place there for vector optimisation purposes) … … 574 754 ! Latent Heat 575 755 qla_ice(ji,jj,jl) = rn_efac * MAX( 0.e0, rhoa * Ls * Cice * wndm_ice(ji,jj) & 576 & * ( 11637800. * EXP( -5897.8 / ptsu(ji,jj,jl) ) / rhoa - sf(jp_humi)%fnow(ji,jj,1) ) )756 & * ( 11637800. * EXP( -5897.8 / ptsu(ji,jj,jl) ) / rhoa - zqatm(ji,jj) ) ) 577 757 ! Latent heat sensitivity for ice (Dqla/Dt) 578 758 IF( qla_ice(ji,jj,jl) > 0._wp ) THEN … … 659 839 IF( nn_timing == 1 ) CALL timing_stop('blk_ice_core_flx') 660 840 841 CALL wrk_dealloc( jpi,jpj, zqatm, zpatm, ztatm ) 661 842 END SUBROUTINE blk_ice_core_flx 662 843 #endif -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/TRA/eosbn2_crs.F90
r5601 r6772 61 61 ! 62 62 PUBLIC eos_crs ! called by step, istate, tranpc and zpsgrd modules 63 PUBLIC bn2_crs ! called by step module64 63 PUBLIC eos_rab_crs ! called by ldfslp, zdfddm, trabbl 65 64 PUBLIC eos_init_crs ! called by istate module … … 392 391 DO ji = 1, jpi_crs 393 392 ! 394 zh = gdept_crs(ji,jj,jk) * r1_Z0 ! depth393 zh = fsdept_crs(ji,jj,jk) * r1_Z0 ! depth 395 394 zt = pts (ji,jj,jk,jp_tem) * r1_T0 ! temperature 396 395 zs = SQRT( ABS( pts(ji,jj,jk,jp_sal) + rdeltaS ) * r1_S0 ) ! square root salinity … … 450 449 zt = pts (ji,jj,jk,jp_tem) - 10._wp ! pot. temperature anomaly (t-T0) 451 450 zs = pts (ji,jj,jk,jp_sal) - 35._wp ! abs. salinity anomaly (s-S0) 452 zh = gdept_crs(ji,jj,jk) ! depth in meters at t-point451 zh = fsdept_crs(ji,jj,jk) ! depth in meters at t-point 453 452 ztm = tmask_crs(ji,jj,jk) ! land/sea bottom mask = surf. mask 454 453 ! … … 689 688 ! 690 689 END SUBROUTINE rab_crs_0d 691 692 693 SUBROUTINE bn2_crs( pts, pab, pn2 )694 !!----------------------------------------------------------------------695 !! *** ROUTINE bn2 ***696 !!697 !! ** Purpose : Compute the local Brunt-Vaisala frequency at the698 !! time-step of the input arguments699 !!700 !! ** Method : pn2 = grav * (alpha dk[T] + beta dk[S] ) / e3w701 !! where alpha and beta are given in pab, and computed on T-points.702 !! N.B. N^2 is set one for all to zero at jk=1 in istate module.703 !!704 !! ** Action : pn2 : square of the brunt-vaisala frequency at w-point705 !!706 !!----------------------------------------------------------------------707 REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk,jpts), INTENT(in ) :: pts ! pot. temperature and salinity [Celcius,psu]708 REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk,jpts), INTENT(in ) :: pab ! thermal/haline expansion coef. [Celcius-1,psu-1]709 REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk ), INTENT( out) :: pn2 ! Brunt-Vaisala frequency squared [1/s^2]710 !711 INTEGER :: ji, jj, jk ! dummy loop indices712 REAL(wp) :: zaw, zbw, zrw ! local scalars713 !!----------------------------------------------------------------------714 !715 pn2(:,:,:)=0._wp716 717 IF( nn_timing == 1 ) CALL timing_start('bn2')718 !719 DO jk = 2, jpkm1 ! interior points only (2=< jk =< jpkm1 )720 DO jj = 1, jpj_crs ! surface and bottom value set to zero one for all in istate.F90721 DO ji = 1, jpi_crs722 !zrw = ( gdepw_crs(ji,jj,jk ) - gdept_crs(ji,jj,jk) ) &723 ! & / ( gdept_crs(ji,jj,jk-1) - gdept_crs(ji,jj,jk) )724 zrw = gdepw_crs(ji,jj,jk ) - gdept_crs(ji,jj,jk)725 !?IF( gdept_crs(ji,jj,jk-1) - gdept_crs(ji,jj,jk) .NE. 0._wp )THEN726 IF( gdept_crs(ji,jj,jk-1) - gdept_crs(ji,jj,jk) .LT. 0._wp )THEN727 zrw = zrw / ( gdept_crs(ji,jj,jk-1) - gdept_crs(ji,jj,jk) )728 ELSE729 zrw = 0._wp730 ENDIF731 !732 zaw = pab(ji,jj,jk,jp_tem) * (1._wp - zrw) + pab(ji,jj,jk-1,jp_tem) * zrw733 zbw = pab(ji,jj,jk,jp_sal) * (1._wp - zrw) + pab(ji,jj,jk-1,jp_sal) * zrw734 !735 IF( e3w_max_crs(ji,jj,jk) .NE. 0._wp ) THEN736 pn2(ji,jj,jk) = grav * ( zaw * ( pts(ji,jj,jk-1,jp_tem) - pts(ji,jj,jk,jp_tem) ) &737 & - zbw * ( pts(ji,jj,jk-1,jp_sal) - pts(ji,jj,jk,jp_sal) ) ) &738 & * tmask_crs(ji,jj,jk) / e3w_max_crs(ji,jj,jk)739 ENDIF740 END DO741 END DO742 END DO743 !744 IF( nn_timing == 1 ) CALL timing_stop('bn2')745 !746 END SUBROUTINE bn2_crs747 690 748 691 SUBROUTINE eos_init_crs -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_tvd_crs.F90
r6101 r6772 91 91 !!---------------------------------------------------------------------- 92 92 ! 93 93 94 IF( nn_timing == 1 ) CALL timing_start('tra_adv_tvd') 94 95 ! … … 126 127 ! upstream tracer flux in the i and j direction 127 128 DO jk = 1, jpkm1 128 DO jj = 1, jpjm1129 DO ji = 1, fs_jpim1 ! vector opt.129 DO jj = 2, jpj_crs-1 130 DO ji = 2, jpi_crs-1 130 131 ! upstream scheme 131 132 zfp_ui = pun(ji,jj,jk) + ABS( pun(ji,jj,jk) ) … … 138 139 END DO 139 140 END DO 141 CALL crs_lbc_lnk( zwx, 'U', -1._wp ) 142 CALL crs_lbc_lnk( zwy, 'V', -1._wp ) 140 143 ! upstream tracer flux in the k direction 141 144 ! Surface value 142 145 IF( lk_vvl ) THEN ; zwz(:,:, 1 ) = 0.e0 ! volume variable 143 ELSE ; zwz(:,:, 1 ) = pwn(:,:,1) * ptb(:,:,1,jn) ! linear free surface146 ELSE ; zwz(:,:, 1 ) = pwn(:,:,1) !cbr * ptb(:,:,1,jn) ! linear free surface 144 147 ENDIF 145 148 ! Interior value 146 149 DO jk = 2, jpkm1 147 DO jj = 1, jpj148 DO ji = 1, jpi150 DO jj = 2, jpj_crs-1 151 DO ji = nldi_crs, nlei_crs 149 152 zfp_wk = pwn(ji,jj,jk) + ABS( pwn(ji,jj,jk) ) 150 153 zfm_wk = pwn(ji,jj,jk) - ABS( pwn(ji,jj,jk) ) … … 153 156 END DO 154 157 END DO 158 CALL crs_lbc_lnk( zwz, 'T', 1. ) 159 155 160 ! total advective trend 156 161 DO jk = 1, jpkm1 157 162 z2dtt = p2dt(jk) 158 DO jj = 2, jpj m1159 DO ji = fs_2, fs_jpim1 ! vector opt.163 DO jj = 2, jpj_crs-1 164 DO ji = 2, jpi_crs-1 160 165 zbtr = r1_bt_crs(ji,jj,jk) 161 166 ! total intermediate advective trends … … 163 168 & + zwy(ji,jj,jk) - zwy(ji ,jj-1,jk ) & 164 169 & + zwz(ji,jj,jk) - zwz(ji ,jj ,jk+1) ) 165 ! update and guess with monotonic sheme 170 166 171 pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztra 167 172 zwi(ji,jj,jk) = ( ptb(ji,jj,jk,jn) + z2dtt * ztra ) * tmask_crs(ji,jj,jk) … … 169 174 END DO 170 175 END DO 176 171 177 ! ! Lateral boundary conditions on zwi (unchanged sign) 172 178 CALL crs_lbc_lnk( zwi, 'T', 1. ) … … 187 193 ! antidiffusive flux on i and j 188 194 DO jk = 1, jpkm1 189 DO jj = 1, jpjm1190 DO ji = 1, fs_jpim1 ! vector opt.195 DO jj = 2, jpj_crs-1 196 DO ji = 2, jpi_crs-1 191 197 zwx(ji,jj,jk) = 0.5 * pun(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji+1,jj,jk,jn) ) - zwx(ji,jj,jk) 192 198 zwy(ji,jj,jk) = 0.5 * pvn(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji,jj+1,jk,jn) ) - zwy(ji,jj,jk) … … 198 204 ! 199 205 DO jk = 2, jpkm1 ! Interior value 200 DO jj = 1, jpj201 DO ji = 1, jpi206 DO jj = 2, jpj_crs-1 207 DO ji = 2, jpi_crs-1 202 208 zwz(ji,jj,jk) = 0.5 * pwn(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji,jj,jk-1,jn) ) - zwz(ji,jj,jk) 203 209 END DO 204 210 END DO 205 211 END DO 206 212 CALL crs_lbc_lnk( zwx, 'U', -1. ) ; CALL crs_lbc_lnk( zwy, 'V', -1. ) ! Lateral bondary conditions 207 213 CALL crs_lbc_lnk( zwz, 'W', 1. ) … … 214 220 ! ------------------------------------ 215 221 DO jk = 1, jpkm1 216 DO jj = 2, jpj m1217 DO ji = fs_2, fs_jpim1 ! vector opt.222 DO jj = 2, jpj_crs-1 223 DO ji = 2, jpi_crs-1 218 224 zbtr = r1_bt_crs(ji,jj,jk) 219 225 ! total advective trends … … 247 253 END DO 248 254 ! 255 249 256 CALL wrk_dealloc( jpi, jpj, jpk, zwi, zwz , zwx, zwy ) 250 257 IF( l_trd ) CALL wrk_dealloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz ) … … 302 309 ikm1 = MAX(jk-1,1) 303 310 z2dtt = p2dt(jk) 304 DO jj = 2, jpj m1305 DO ji = fs_2, fs_jpim1 ! vector opt.311 DO jj = 2, jpj_crs-1 312 DO ji = 2, jpi_crs-1 306 313 307 314 ! search maximum in neighbourhood … … 339 346 ! ---------------------------------------- 340 347 DO jk = 1, jpkm1 341 DO jj = 2, jpj m1342 DO ji = fs_2, fs_jpim1 ! vector opt.348 DO jj = 2, jpj_crs-1 349 DO ji = 2, jpi_crs-1 343 350 zau = MIN( 1.e0, zbetdo(ji,jj,jk), zbetup(ji+1,jj,jk) ) 344 351 zbu = MIN( 1.e0, zbetup(ji,jj,jk), zbetdo(ji+1,jj,jk) ) -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso_crs.F90
r6101 r6772 10 10 !! 3.3 ! 2010-09 (C. Ethe, G. Madec) Merge TRA-TRC 11 11 !!---------------------------------------------------------------------- 12 #if defined key_ldfslp || defined key_esopa12 #if ( defined key_ldfslp || defined key_esopa ) && defined key_crs 13 13 !!---------------------------------------------------------------------- 14 14 !! 'key_ldfslp' slope of the lateral diffusive direction … … 19 19 !! the isopycnal or geopotential s-coord. operator 20 20 !!---------------------------------------------------------------------- 21 ! USE oce ! ocean dynamics and active tracers22 ! USE dom_oce ! ocean space and time domain23 ! USE trc_oce ! share passive tracers/Ocean variables24 ! USE zdf_oce ! ocean vertical physics25 ! USE ldftra_oce ! ocean active tracers: lateral physics26 ! USE ldfslp ! iso-neutral slopes27 21 USE ldfslp_crs ! iso-neutral slopes 28 22 USE diaptr ! poleward transport diagnostics … … 35 29 USE wrk_nemo ! Memory Allocation 36 30 USE timing ! Timing 37 ! USE crs38 31 USE oce_trc 39 32 USE iom, ONLY : iom_put,iom_swap … … 113 106 REAL(wp) :: zztmp ! local scalar 114 107 #endif 108 REAL(wp) :: zmin,zmax 115 109 REAL(wp), POINTER, DIMENSION(:,: ) :: zdkt, zdk1t, z2d 116 110 REAL(wp), POINTER, DIMENSION(:,:,:) :: zdit, zdjt, ztfw , zftu, zftv … … 188 182 & + tmask_crs(ji,jj+1,jk+1) + tmask_crs(ji,jj,jk ), 1. ) 189 183 ! 190 zcof1 = - fsahtu(ji,jj,jk) * e2e3u_msk(ji,jj,jk) * uslp_crs(ji,jj,jk) * zmsku / MAX( 1._wp , e3u_max_crs(ji,jj,jk))191 zcof2 = - fsahtv(ji,jj,jk) * e1e3v_msk(ji,jj,jk) * vslp_crs(ji,jj,jk) * zmskv / MAX( 1._wp , e3v_max_crs(ji,jj,jk))184 zcof1 = - fsahtu(ji,jj,jk) * e2e3u_msk(ji,jj,jk) * uslp_crs(ji,jj,jk) * zmsku / MAX( 1._wp , fse3u_max_crs(ji,jj,jk)) 185 zcof2 = - fsahtv(ji,jj,jk) * e1e3v_msk(ji,jj,jk) * vslp_crs(ji,jj,jk) * zmskv / MAX( 1._wp , fse3v_max_crs(ji,jj,jk)) 192 186 ! 193 187 zftu(ji,jj,jk ) = ( zabe1 * zdit(ji,jj,jk) & … … 199 193 END DO 200 194 END DO 201 CALL iom_swap( "nemo_crs" )202 CALL iom_put( "zftu" , zftu )203 CALL iom_put( "zftv" , zftv )204 CALL iom_swap( "nemo" )205 195 206 196 ! II.4 Second derivative (divergence) and add to the general trend -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_lap_crs.F90
r6101 r6772 124 124 ikv = mbkv_crs(ji,jj) 125 125 IF( iku == jk ) THEN 126 zabe1 = fsahtu(ji,jj,iku) * umask_crs(ji,jj,iku) * e1ur(ji,jj) * e3u_crs(ji,jj,iku)126 zabe1 = fsahtu(ji,jj,iku) * umask_crs(ji,jj,iku) * e1ur(ji,jj) * fse3u_crs(ji,jj,iku) 127 127 ztu(ji,jj,jk) = zabe1 * pgu(ji,jj,jn) 128 128 ENDIF 129 129 IF( ikv == jk ) THEN 130 zabe2 = fsahtv(ji,jj,ikv) * vmask_crs(ji,jj,ikv) * e2vr(ji,jj) * e3v_crs(ji,jj,ikv)130 zabe2 = fsahtv(ji,jj,ikv) * vmask_crs(ji,jj,ikv) * e2vr(ji,jj) * fse3v_crs(ji,jj,ikv) 131 131 ztv(ji,jj,jk) = zabe2 * pgv(ji,jj,jn) 132 132 ENDIF -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90
r5602 r6772 49 49 USE agrif_opa_interp 50 50 #endif 51 USE crs 51 52 52 53 IMPLICIT NONE … … 56 57 PUBLIC tra_nxt_fix ! to be used in trcnxt 57 58 PUBLIC tra_nxt_vvl ! to be used in trcnxt 59 PUBLIC tra_nxt_vvl_crs ! to be used in trcnxt 58 60 59 61 REAL(wp) :: rbcp ! Brown & Campana parameters for semi-implicit hpg … … 349 351 END SUBROUTINE tra_nxt_vvl 350 352 353 SUBROUTINE tra_nxt_vvl_crs( kt, kit000, p2dt, cdtype, ptb, ptn, pta, psbc_tc, psbc_tc_b, kjpt ) 354 !!---------------------------------------------------------------------- 355 !! *** ROUTINE tra_nxt_vvl *** 356 !! 357 !! ** Purpose : Time varying volume: apply the Asselin time filter 358 !! and swap the tracer fields. 359 !! 360 !! ** Method : - Apply a thickness weighted Asselin time filter on now fields. 361 !! - save in (ta,sa) a thickness weighted average over the three 362 !! time levels which will be used to compute rdn and thus the semi- 363 !! implicit hydrostatic pressure gradient (ln_dynhpg_imp = T) 364 !! - swap tracer fields to prepare the next time_step. 365 !! This can be summurized for tempearture as: 366 !! ztm = ( e3t_n*tn + rbcp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] ) ln_dynhpg_imp = T 367 !! /( e3t_n + rbcp*[ e3t_b - 2 e3t_n + e3t_a ] ) 368 !! ztm = 0 otherwise 369 !! tb = ( e3t_n*tn + atfp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] ) 370 !! /( e3t_n + atfp*[ e3t_b - 2 e3t_n + e3t_a ] ) 371 !! tn = ta 372 !! ta = zt (NB: reset to 0 after eos_bn2 call) 373 !! 374 !! ** Action : - (tb,sb) and (tn,sn) ready for the next time step 375 !! - (ta,sa) time averaged (t,s) (ln_dynhpg_imp = T) 376 !!---------------------------------------------------------------------- 377 INTEGER , INTENT(in ) :: kt ! ocean time-step index 378 INTEGER , INTENT(in ) :: kit000 ! first time step index 379 REAL(wp) , INTENT(in ), DIMENSION(jpk) :: p2dt ! time-step 380 CHARACTER(len=3), INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 381 INTEGER , INTENT(in ) :: kjpt ! number of tracers 382 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptb ! before tracer fields 383 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptn ! now tracer fields 384 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pta ! tracer trend 385 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,kjpt) :: psbc_tc ! surface tracer content 386 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,kjpt) :: psbc_tc_b ! before surface tracer content 387 388 !! 389 LOGICAL :: ll_tra_hpg, ll_traqsr, ll_rnf ! local logical 390 INTEGER :: ji, jj, jk, jn ! dummy loop indices 391 REAL(wp) :: zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d ! local scalar 392 REAL(wp) :: zfact2, ze3t_b, ze3t_n, ze3t_a, ze3t_f, ze3t_d ! - - 393 !!---------------------------------------------------------------------- 394 !!---------------------------------------------------------------------- 395 ! 396 IF( kt == kit000 ) THEN 397 IF(lwp) WRITE(numout,*) 398 IF(lwp) WRITE(numout,*) 'tra_nxt_vvl : time stepping', cdtype 399 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 400 ENDIF 401 ! 402 IF( cdtype == 'TRA' ) THEN 403 ll_tra_hpg = ln_dynhpg_imp ! active tracers case and semi-implicit hpg 404 ll_traqsr = ln_traqsr ! active tracers case and solar penetration 405 ll_rnf = ln_rnf ! active tracers case and river runoffs 406 ELSE 407 ll_tra_hpg = .FALSE. ! passive tracers case or NO semi-implicit hpg 408 ll_traqsr = .FALSE. ! active tracers case and NO solar penetration 409 ll_rnf = .FALSE. ! passive tracers or NO river runoffs 410 ENDIF 411 ! 412 DO jn = 1, kjpt 413 DO jk = 1, jpkm1 414 zfact1 = atfp * p2dt(jk) 415 zfact2 = zfact1 / rau0 416 DO jj = 1, jpj 417 DO ji = 1, jpi 418 ze3t_b = fse3t_b_crs(ji,jj,jk) 419 ze3t_n = fse3t_n_crs(ji,jj,jk) 420 ze3t_a = fse3t_a_crs(ji,jj,jk) 421 ! ! tracer content at Before, now and after 422 ztc_b = ptb(ji,jj,jk,jn) * ze3t_b 423 ztc_n = ptn(ji,jj,jk,jn) * ze3t_n 424 ztc_a = pta(ji,jj,jk,jn) * ze3t_a 425 ! 426 ze3t_d = ze3t_a - 2. * ze3t_n + ze3t_b 427 ztc_d = ztc_a - 2. * ztc_n + ztc_b 428 ! 429 ze3t_f = ze3t_n + atfp * ze3t_d 430 ztc_f = ztc_n + atfp * ztc_d 431 ! 432 IF( jk == 1 ) THEN ! first level 433 ze3t_f = ze3t_f - zfact2 * ( emp_b_crs(ji,jj) - emp_crs(ji,jj) + rnf_crs(ji,jj) - rnf_b_crs(ji,jj) ) 434 ztc_f = ztc_f - zfact1 * ( psbc_tc(ji,jj,jn) - psbc_tc_b(ji,jj,jn) ) 435 ENDIF 436 !cbr as it is a subroutine dedicated to crs, TRA options are not necessary 437 !cbr IF( ll_traqsr .AND. jn == jp_tem .AND. jk <= nksr ) & ! solar penetration (temperature only) 438 !cbr & ztc_f = ztc_f - zfact1 * ( qsr_hc(ji,jj,jk) - qsr_hc_b(ji,jj,jk) ) 439 !cbr 440 !cbr IF( ll_rnf .AND. jk <= nk_rnf(ji,jj) ) & ! river runoffs 441 !cbr & ztc_f = ztc_f - zfact1 * ( rnf_tsc(ji,jj,jn) - rnf_tsc_b(ji,jj,jn) ) & 442 !cbr & * fse3t_n(ji,jj,jk) / h_rnf(ji,jj) 443 444 ze3t_f = 1.e0 / ze3t_f 445 ptb(ji,jj,jk,jn) = ztc_f * ze3t_f ! ptb <-- ptn filtered 446 ptn(ji,jj,jk,jn) = pta(ji,jj,jk,jn) ! ptn <-- pta 447 ! 448 IF( ll_tra_hpg ) THEN ! semi-implicit hpg (T & S only) 449 ze3t_d = 1.e0 / ( ze3t_n + rbcp * ze3t_d ) 450 pta(ji,jj,jk,jn) = ze3t_d * ( ztc_n + rbcp * ztc_d ) ! ta <-- Brown & Campana average 451 ENDIF 452 END DO 453 END DO 454 END DO 455 ! 456 END DO 457 ! 458 END SUBROUTINE tra_nxt_vvl_crs 459 460 351 461 !!====================================================================== 352 462 END MODULE tranxt -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_imp_crs.F90
r5601 r6772 78 78 !! ** Action : - pta becomes the after tracer 79 79 !!--------------------------------------------------------------------- 80 USE ieee_arithmetic 80 81 ! 81 82 INTEGER , INTENT(in ) :: kt ! ocean time-step index … … 90 91 REAL(wp) :: zrhs, ze3tb, ze3tn, ze3ta ! local scalars 91 92 REAL(wp), POINTER, DIMENSION(:,:,:) :: zwi, zwt,zwd,zws 93 REAL(wp) :: zmin,zmax 92 94 !!--------------------------------------------------------------------- 93 95 ! … … 135 137 END DO 136 138 ELSE IF( l_traldf_rot ) THEN ! standard isoneutral diff 137 138 DO jj = 2, jpj m1139 DO ji = fs_2, fs_jpim1 ! vector opt.139 DO jk = 2, jpkm1 140 DO jj = 2, jpj_crs-1 141 DO ji = 2, jpi_crs-1 140 142 zwt(ji,jj,jk) = zwt(ji,jj,jk) + fsahtw(ji,jj,jk) & 141 143 & * ( wslpi_crs(ji,jj,jk) * wslpi_crs(ji,jj,jk) & … … 148 150 #endif 149 151 DO jk = 1, jpkm1 150 DO jj = 2, jpjm1 151 DO ji = fs_2, fs_jpim1 ! vector opt. 152 ze3ta = ( 1. - r_vvl ) + r_vvl * e3t_crs(ji,jj,jk) ! after scale factor at T-point 153 ze3tn = r_vvl + ( 1. - r_vvl ) * e3t_crs(ji,jj,jk) ! now scale factor at T-point 152 DO jj = 2, jpj_crs-1 153 DO ji = 2, jpi_crs-1 154 155 #if defined key_vvl 156 ze3ta = ( 1. - r_vvl ) + r_vvl * fse3t_a_crs(ji,jj,jk) ! after scale factor at T-point 157 ze3tn = r_vvl + ( 1. - r_vvl ) * fse3t_n_crs(ji,jj,jk) ! now scale factor at T-point 158 #else 159 ze3ta = ( 1. - r_vvl ) + r_vvl * e3t_0_crs(ji,jj,jk) ! after scale factor at T-point 160 ze3tn = r_vvl + ( 1. - r_vvl ) * e3t_0_crs(ji,jj,jk) ! now scale factor at T-point 161 #endif 154 162 !cbr zwi(ji,jj,jk) = - p2dt(jk) * zwt(ji,jj,jk ) / ( ze3tn * e3w_1d(jk ) ) !cc 155 163 !cbr zws(ji,jj,jk) = - p2dt(jk) * zwt(ji,jj,jk+1) / ( ze3tn * e3w_1d(jk+1) ) !cc 156 zwi(ji,jj,jk) = - p2dt(jk) * zwt(ji,jj,jk ) / ( ze3tn * e3w_max_crs(ji,jj,jk) )157 zws(ji,jj,jk) = - p2dt(jk) * zwt(ji,jj,jk+1) / ( ze3tn * e3w_max_crs(ji,jj,jk+1) )164 zwi(ji,jj,jk) = - p2dt(jk) * zwt(ji,jj,jk ) / ( ze3tn * fse3w_max_crs(ji,jj,jk) ) 165 zws(ji,jj,jk) = - p2dt(jk) * zwt(ji,jj,jk+1) / ( ze3tn * fse3w_max_crs(ji,jj,jk+1) ) 158 166 zwd(ji,jj,jk) = ze3ta - zwi(ji,jj,jk) - zws(ji,jj,jk) 159 167 END DO … … 182 190 ! first recurrence: Tk = Dk - Ik Sk-1 / Tk-1 (increasing k) 183 191 ! done once for all passive tracers (so included in the IF instruction) 184 DO jj = 2, jpj m1185 DO ji = fs_2, fs_jpim1192 DO jj = 2, jpj_crs-1 193 DO ji = 2, jpi_crs-1 186 194 zwt(ji,jj,1) = zwd(ji,jj,1) 187 195 END DO 188 196 END DO 189 197 DO jk = 2, jpkm1 190 DO jj = 2, jpj m1191 DO ji = fs_2, fs_jpim1198 DO jj = 2, jpj_crs-1 199 DO ji = 2, jpi_crs-1 192 200 zwt(ji,jj,jk) = zwd(ji,jj,jk) - zwi(ji,jj,jk) * zws(ji,jj,jk-1) / zwt(ji,jj,jk-1) 193 201 END DO … … 198 206 ! 199 207 ! second recurrence: Zk = Yk - Ik / Tk-1 Zk-1 200 DO jj = 2, jpjm1 201 DO ji = fs_2, fs_jpim1 202 ze3tb = ( 1. - r_vvl ) + r_vvl * e3t_crs(ji,jj,1) 203 ze3tn = ( 1. - r_vvl ) + r_vvl * e3t_crs(ji,jj,1) 208 DO jj = 2, jpj_crs-1 209 DO ji = 2, jpi_crs-1 210 #if defined key_vvl 211 ze3tb = ( 1. - r_vvl ) + r_vvl * fse3t_b_crs(ji,jj,1) 212 ze3tn = ( 1. - r_vvl ) + r_vvl * fse3t_n_crs(ji,jj,1) 213 #else 214 ze3tb = ( 1. - r_vvl ) + r_vvl * e3t_0_crs(ji,jj,1) 215 ze3tn = ( 1. - r_vvl ) + r_vvl * e3t_0_crs(ji,jj,1) 216 #endif 204 217 pta(ji,jj,1,jn) = ze3tb * ptb(ji,jj,1,jn) + p2dt(1) * ze3tn * pta(ji,jj,1,jn) 205 218 END DO … … 207 220 208 221 DO jk = 2, jpkm1 209 DO jj = 2, jpjm1 210 DO ji = fs_2, fs_jpim1 211 ze3tb = ( 1. - r_vvl ) + r_vvl * e3t_crs(ji,jj,jk) 212 ze3tn = ( 1. - r_vvl ) + r_vvl * e3t_crs(ji,jj,jk) 222 DO jj = 2, jpj_crs-1 223 DO ji = 2, jpi_crs-1 224 #if defined key_vvl 225 ze3tb = ( 1. - r_vvl ) + r_vvl * fse3t_b_crs(ji,jj,jk) 226 ze3tn = ( 1. - r_vvl ) + r_vvl * fse3t_n_crs(ji,jj,jk) 227 #else 228 ze3tb = ( 1. - r_vvl ) + r_vvl * e3t_0_crs(ji,jj,jk) 229 ze3tn = ( 1. - r_vvl ) + r_vvl * e3t_0_crs(ji,jj,jk) 230 #endif 213 231 zrhs = ze3tb * ptb(ji,jj,jk,jn) + p2dt(jk) * ze3tn * pta(ji,jj,jk,jn) ! zrhs=right hand side 214 pta(ji,jj,jk,jn) = zrhs - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) * pta(ji,jj,jk-1,jn) 215 232 pta(ji,jj,jk,jn) = zrhs - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) * pta(ji,jj,jk-1,jn) 216 233 END DO 217 234 END DO … … 219 236 220 237 ! third recurrence: Xk = (Zk - Sk Xk+1 ) / Tk (result is the after tracer) 221 DO jj = 2, jpj m1222 DO ji = fs_2, fs_jpim1238 DO jj = 2, jpj_crs-1 239 DO ji = 2, jpi_crs-1 223 240 pta(ji,jj,jpkm1,jn) = pta(ji,jj,jpkm1,jn) / zwt(ji,jj,jpkm1) * tmask_crs(ji,jj,jpkm1) 224 241 END DO 225 242 END DO 226 243 DO jk = jpk-2, 1, -1 227 DO jj = 2, jpj m1228 DO ji = fs_2, fs_jpim1244 DO jj = 2, jpj_crs-1 245 DO ji = 2, jpi_crs-1 229 246 pta(ji,jj,jk,jn) = ( pta(ji,jj,jk,jn) - zws(ji,jj,jk) * pta(ji,jj,jk+1,jn) ) & 230 & / zwt(ji,jj,jk) * tmask_crs(ji,jj,jk) 231 232 END DO 233 END DO 234 END DO 235 247 & / zwt(ji,jj,jk) * tmask_crs(ji,jj,jk) 248 END DO 249 END DO 250 END DO 236 251 ! ! ================= ! 237 252 END DO ! end tracer loop ! -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/TRA/zpshde_crs.F90
r5601 r6772 96 96 INTEGER :: iku, ikv, ikum1, ikvm1 ! partial step level (ocean bottom level) at u- and v-points 97 97 REAL(wp) :: ze3wu, ze3wv, zmaxu, zmaxv ! temporary scalars 98 !cc REAL(wp), POINTER, DIMENSION(:,: ) :: zri, zrj, zhi, zhj99 !cc REAL(wp), POINTER, DIMENSION(:,:,:) :: zti, zte ! interpolated value of tracer100 98 REAL(wp), ALLOCATABLE, DIMENSION(:,: ) :: zri, zrj, zhi, zhj 101 99 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zti, zte ! interpolated value of tracer … … 105 103 IF( nn_timing == 1 ) CALL timing_start( 'zps_hde_crs') 106 104 ! 107 !! CALL wrk_alloc( jpi, jpj, zri, zrj, zhi, zhj )108 !! CALL wrk_alloc( jpi, jpj, kjpt, zti, zte )109 105 ALLOCATE( zri(jpi_crs,jpj_crs) , zrj(jpi_crs,jpj_crs), zte(jpi_crs ,jpj_crs ,kjpt), & 110 106 & zhi(jpi_crs,jpj_crs) , zhj(jpi_crs,jpj_crs), zti(jpi_crs ,jpj_crs ,kjpt)) … … 112 108 DO jn = 1, kjpt !== Interpolation of tracers at the last ocean level ==! 113 109 ! 114 # if defined key_vectopt_loop115 jj = 1116 DO ji = 1, jpij-jpi ! vector opt. (forced unrolled)117 # else118 110 DO jj = 1, jpjm1 119 111 DO ji = 1, jpim1 120 # endif 112 121 113 iku = mbku_crs(ji,jj) ; ikum1 = MAX( iku - 1 , 1 ) ! last and before last ocean level at u- & v-points 122 114 ikv = mbkv_crs(ji,jj) ; ikvm1 = MAX( ikv - 1 , 1 ) ! if level first is a p-step, ik.m1=1 123 ! ze3wu = e3w_crs(ji+1,jj ,iku) - e3w_crs(ji,jj,iku) 124 ! ze3wv = e3w_crs(ji ,jj+1,ikv) - e3w_crs(ji,jj,ikv) 125 ze3wu = e3w_max_crs(ji+1,jj ,iku) - e3w_max_crs(ji,jj,iku) 126 ze3wv = e3w_max_crs(ji ,jj+1,ikv) - e3w_max_crs(ji,jj,ikv) 115 ze3wu = e3w_max_0_crs(ji+1,jj ,iku) - e3w_max_0_crs(ji,jj,iku) 116 ze3wv = e3w_max_0_crs(ji ,jj+1,ikv) - e3w_max_0_crs(ji,jj,ikv) 127 117 ! 128 118 ! i- direction 129 119 IF( ze3wu >= 0._wp ) THEN ! case 1 130 zmaxu = ze3wu / e3w_max_crs(ji+1,jj,iku) 131 ! zmaxu = ze3wu / e3w_crs(ji+1,jj,iku) 120 #if defined key_vvl 121 zmaxu = ze3wu / e3w_max_n_crs(ji+1,jj,iku) 122 #else 123 zmaxu = ze3wu / e3w_max_0_crs(ji+1,jj,iku) 124 #endif 132 125 ! interpolated values of tracers 133 126 zti(ji,jj,jn) = pta(ji+1,jj,iku,jn) + zmaxu * ( pta(ji+1,jj,ikum1,jn) - pta(ji+1,jj,iku,jn) ) … … 135 128 pgtu(ji,jj,jn) = umask_crs(ji,jj,1) * ( zti(ji,jj,jn) - pta(ji,jj,iku,jn) ) 136 129 ELSE ! case 2 137 zmaxu = -ze3wu / e3w_max_crs(ji,jj,iku) 138 ! zmaxu = -ze3wu / e3w_crs(ji,jj,iku) 130 #if defined key_vvl 131 zmaxu = -ze3wu / e3w_max_n_crs(ji,jj,iku) 132 #else 133 zmaxu = -ze3wu / e3w_max_0_crs(ji,jj,iku) 134 #endif 139 135 ! interpolated values of tracers 140 136 zti(ji,jj,jn) = pta(ji,jj,iku,jn) + zmaxu * ( pta(ji,jj,ikum1,jn) - pta(ji,jj,iku,jn) ) … … 145 141 ! j- direction 146 142 IF( ze3wv >= 0._wp ) THEN ! case 1 147 zmaxv = ze3wv / e3w_max_crs(ji,jj+1,ikv) 148 ! zmaxv = ze3wv / e3w_crs(ji,jj+1,ikv) 143 #if defined key_vvl 144 zmaxv = ze3wv / e3w_max_n_crs(ji,jj+1,ikv) 145 #else 146 zmaxv = ze3wv / e3w_max_0_crs(ji,jj+1,ikv) 147 #endif 149 148 ! interpolated values of tracers 150 149 zte(ji,jj,jn) = pta(ji,jj+1,ikv,jn) + zmaxv * ( pta(ji,jj+1,ikvm1,jn) - pta(ji,jj+1,ikv,jn) ) … … 152 151 pgtv(ji,jj,jn) = vmask_crs(ji,jj,1) * ( zte(ji,jj,jn) - pta(ji,jj,ikv,jn) ) 153 152 ELSE ! case 2 154 zmaxv = -ze3wv / e3w_max_crs(ji,jj,ikv) 155 ! zmaxv = -ze3wv / e3w_crs(ji,jj,ikv) 153 #if defined key_vvl 154 zmaxv = -ze3wv / e3w_max_n_crs(ji,jj,ikv) 155 #else 156 zmaxv = -ze3wv / e3w_max_0_crs(ji,jj,ikv) 157 #endif 156 158 ! interpolated values of tracers 157 159 zte(ji,jj,jn) = pta(ji,jj,ikv,jn) + zmaxv * ( pta(ji,jj,ikvm1,jn) - pta(ji,jj,ikv,jn) ) … … 160 162 ENDIF 161 163 162 # if ! defined key_vectopt_loop163 164 END DO 164 # endif165 165 END DO 166 166 CALL crs_lbc_lnk( pgtu(:,:,jn), 'U', -1. ) ; CALL crs_lbc_lnk( pgtv(:,:,jn), 'V', -1. ) ! Lateral boundary cond. 167 167 ! 168 168 END DO 169 !WRITE(numout,*) ' test24 ', e3w_max_crs 169 170 170 ! horizontal derivative of density anomalies (rd) 171 171 IF( PRESENT( prd ) ) THEN ! depth of the partial step level 172 # if defined key_vectopt_loop173 jj = 1174 DO ji = 1, jpij-jpi ! vector opt. (forced unrolled)175 # else176 172 DO jj = 1, jpjm1 177 173 DO ji = 1, jpim1 178 # endif 174 179 175 iku = mbku_crs(ji,jj) 180 176 ikv = mbkv_crs(ji,jj) 181 !cc ze3wu = e3w_max_crs(ji+1,jj ,iku) - e3w_max_crs(ji,jj,iku) !gradiant horizontal pas de max 182 ze3wu = e3w_crs(ji+1,jj ,iku) - e3w_crs(ji,jj,iku) 183 !cc ze3wv = e3w_max_crs(ji ,jj+1,ikv) - e3w_max_crs(ji,jj,ikv) 184 ze3wv = e3w_crs(ji ,jj+1,ikv) - e3w_crs(ji,jj,ikv) 185 IF( ze3wu >= 0._wp ) THEN ; zhi(ji,jj) = gdept_crs(ji ,jj,iku) ! i-direction: case 1 186 ELSE ; zhi(ji,jj) = gdept_crs(ji+1,jj,iku) ! - - case 2 187 ENDIF 188 IF( ze3wv >= 0._wp ) THEN ; zhj(ji,jj) = gdept_crs(ji,jj ,ikv) ! j-direction: case 1 189 ELSE ; zhj(ji,jj) = gdept_crs(ji,jj+1,ikv) ! - - case 2 190 ENDIF 191 # if ! defined key_vectopt_loop 177 ze3wu = e3w_0_crs(ji+1,jj ,iku) - e3w_0_crs(ji,jj,iku) 178 ze3wv = e3w_0_crs(ji ,jj+1,ikv) - e3w_0_crs(ji,jj,ikv) 179 IF( ze3wu >= 0._wp ) THEN ; zhi(ji,jj) = fsdept_crs(ji ,jj,iku) ! i-direction: case 1 180 ELSE ; zhi(ji,jj) = fsdept_crs(ji+1,jj,iku) ! - - case 2 181 ENDIF 182 IF( ze3wv >= 0._wp ) THEN ; zhj(ji,jj) = fsdept_crs(ji,jj ,ikv) ! j-direction: case 1 183 ELSE ; zhj(ji,jj) = fsdept_crs(ji,jj+1,ikv) ! - - case 2 184 ENDIF 185 192 186 END DO 193 # endif194 187 END DO 195 188 CALL eos_crs( zti, zhi, zri ) 196 189 CALL eos_crs( zte, zhj, zrj ) 190 197 191 ! Gradient of density at the last level 198 # if defined key_vectopt_loop199 jj = 1200 DO ji = 1, jpij-jpi ! vector opt. (forced unrolled)201 # else202 192 DO jj = 1, jpjm1 203 193 DO ji = 1, jpim1 204 # endif205 194 iku = mbku_crs(ji,jj) 206 195 ikv = mbkv_crs(ji,jj) 207 ! ze3wu = e3w_max_crs(ji+1,jj ,iku) - e3w_max_crs(ji,jj,iku) gradient horizontal 208 ze3wu = e3w_crs(ji+1,jj ,iku) - e3w_crs(ji,jj,iku) 209 ! ze3wv = e3w_max_crs(ji ,jj+1,ikv) - e3w_max_crs(ji,jj,ikv) gradient horizontal 210 ze3wv = e3w_crs(ji ,jj+1,ikv) - e3w_crs(ji,jj,ikv) 196 ze3wu = e3w_0_crs(ji+1,jj ,iku) - e3w_0_crs(ji,jj,iku) 197 ze3wv = e3w_0_crs(ji ,jj+1,ikv) - e3w_0_crs(ji,jj,ikv) 211 198 IF( ze3wu >= 0._wp ) THEN ; pgru(ji,jj) = umask_crs(ji,jj,1) * ( zri(ji ,jj) - prd(ji,jj,iku) ) ! i: 1 212 199 ELSE ; pgru(ji,jj) = umask_crs(ji,jj,1) * ( prd(ji+1,jj,iku) - zri(ji,jj) ) ! i: 2 … … 215 202 ELSE ; pgrv(ji,jj) = vmask_crs(ji,jj,1) * ( prd(ji,jj+1,ikv) - zrj(ji,jj) ) ! j: 2 216 203 ENDIF 217 # if ! defined key_vectopt_loop 204 218 205 END DO 219 # endif220 206 END DO 221 222 207 223 208 CALL crs_lbc_lnk( pgru , 'U', -1. ) ; CALL crs_lbc_lnk( pgrv , 'V', -1. ) ! Lateral boundary conditions … … 225 210 END IF 226 211 ! 227 !!ccCALL wrk_dealloc( jpi, jpj, zri, zrj, zhi, zhj )228 !!ccCALL wrk_dealloc( jpi, jpj, kjpt, zti, zte )229 212 DEALLOCATE( zri , zrj, zte, zhi, zhj, zti) 230 213 ! -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfmxl_crs.F90
r6101 r6772 24 24 USE trc_oce, ONLY : lk_offline ! offline flag 25 25 USE crs 26 USE ieee_arithmetic 26 27 27 28 IMPLICIT NONE … … 64 65 REAL(wp) :: zN2_c ! local scalar 65 66 INTEGER, POINTER, DIMENSION(:,:) :: imld ! 2D workspace 66 REAL(wp), POINTER, DIMENSION(:,:) :: z2d ! 2D workspace67 67 !!---------------------------------------------------------------------- 68 68 ! … … 70 70 ! 71 71 CALL wrk_alloc( jpi_crs,jpj_crs, imld ) 72 CALL wrk_alloc( jpi_crs,jpj_crs, z2d )73 72 74 73 IF( kt == nit000 ) THEN … … 95 94 iiki = imld(ji,jj) 96 95 iikn = nmln_crs(ji,jj) 97 IF( iiki .NE. 0 ) hmld_crs (ji,jj) = ( gdepw_crs(ji,jj,iiki ) - gdepw_crs(ji,jj,1 ) ) * tmask_crs(ji,jj,1) ! Turbocline depth 98 IF( iiki .NE. 0 ) hmlpt_crs(ji,jj) = ( gdept_crs(ji,jj,iikn-1) - gdepw_crs(ji,jj,1 ) ) * tmask_crs(ji,jj,1) ! depth of the last T-point inside the mixed layer 96 hmld_crs (ji,jj) = ( fsdepw_crs(ji,jj,iiki ) - fsdepw_crs(ji,jj,1 ) ) * tmask_crs(ji,jj,1) ! Turbocline depth 97 hmlp_crs (ji,jj) = ( fsdepw_crs(ji,jj,iikn ) - fsdepw_crs(ji,jj,nla10) ) * tmask_crs(ji,jj,1) ! Mixed layer depth 98 hmlpt_crs(ji,jj) = ( fsdept_crs(ji,jj,iikn-1) - fsdepw_crs(ji,jj,1 ) ) * tmask_crs(ji,jj,1) ! depth of the last T-point inside the mixed layer 99 99 END DO 100 100 END DO 101 101 ! 102 z2d=REAL(nmln_crs,wp)103 CALL iom_put("nmln_crs",z2d)104 CALL iom_put("hmlpt_crs",hmlpt_crs)105 !106 102 CALL wrk_dealloc( jpi_crs,jpj_crs, imld ) 107 CALL wrk_dealloc( jpi_crs,jpj_crs, z2d )108 103 ! 109 104 IF( nn_timing == 1 ) CALL timing_stop('zdf_mxl_crs') -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke_crs.F90
r6101 r6772 260 260 DO ji = 2, jpi_crs-1 ! vector opt. 261 261 DO jk = 2, jpkm1 ! from the surface to the bottom : lup 262 zmxld_crs(ji,jj,jk) = MIN( zmxld_crs(ji,jj,jk-1) + e3t_crs(ji,jj,jk-1), zmxlm_crs(ji,jj,jk) )262 zmxld_crs(ji,jj,jk) = MIN( zmxld_crs(ji,jj,jk-1) + fse3t_crs(ji,jj,jk-1), zmxlm_crs(ji,jj,jk) ) 263 263 END DO 264 264 DO jk = jpkm1, 2 , -1 ! from the bottom to the surface : ldown 265 zmxlm_crs(ji,jj,jk) = MIN( zmxlm_crs(ji,jj,jk+1) + e3t_crs(ji,jj,jk+1), zmxlm_crs(ji,jj,jk) )265 zmxlm_crs(ji,jj,jk) = MIN( zmxlm_crs(ji,jj,jk+1) + fse3t_crs(ji,jj,jk+1), zmxlm_crs(ji,jj,jk) ) 266 266 END DO 267 267 END DO … … 312 312 DO ji = 2, jpi_crs-1 ! vector opt. 313 313 DO jk = 2, jpkm1 314 zcoef = avm_crs(ji,jj,jk) * 2._wp * e3w_crs(ji,jj,jk) *e3w_crs(ji,jj,jk)314 zcoef = avm_crs(ji,jj,jk) * 2._wp * fse3w_crs(ji,jj,jk) * fse3w_crs(ji,jj,jk) 315 315 ! ! shear 316 316 zdku = avmu_crs(ji-1,jj,jk) * ( un_crs(ji-1,jj,jk-1) - un_crs(ji-1,jj,jk) ) * ( ub_crs(ji-1,jj,jk-1) - ub_crs(ji-1,jj,jk) ) & -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90
r5602 r6772 56 56 USE ldfdyn ! lateral viscosity setting (ldfdyn_init routine) 57 57 USE ldftra ! lateral diffusivity setting (ldftra_init routine) 58 USE ldftra_crs ! lateral diffusivity setting (ldftra_init routine) 58 59 USE zdfini ! vertical physics setting (zdf_init routine) 59 60 USE phycst ! physical constant (par_cst routine) … … 118 119 !!---------------------------------------------------------------------- 119 120 INTEGER :: istp ! time step index 120 CHARACTER(len= 20) :: cmd121 CHARACTER(len=30) :: cmd 121 122 !!---------------------------------------------------------------------- 122 123 ! … … 183 184 IF(lwp) WRITE(numout,cform_aaa) ! Flag AAAAAAA 184 185 ! 185 IF( nstop /= 0 .AND. lwp ) THEN ! error print 186 IF( nstop /= 0 ) THEN ! error print 187 cmd='touch nemo_NOK' 188 CALL system(cmd) 186 189 WRITE(numout,cform_err) 187 190 WRITE(numout,*) nstop, ' error have been found' 191 ELSE 192 cmd='touch nemo_OK' 193 CALL system(cmd) 188 194 ENDIF 189 195 ! … … 460 466 IF( ln_crs_top ) CALL dom_grid_crs 461 467 CALL trc_init 468 CALL ldf_tra_crs_init 462 469 IF( ln_crs_top ) CALL dom_grid_glo 463 470 #endif -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/step.F90
r6101 r6772 257 257 CALL dom_grid_crs 258 258 259 !CALL eos_rab_crs( tsn_crs, rab_crs_n ) ! now local thermal/haline expension ratio at T-points 260 !CALL bn2_crs ( tsn_crs, rab_crs_n, rb2_crs ) ! now Brunt-Vaisala frequency 261 CALL eos_crs ( tsn_crs, rhd_crs, rhop_crs, gdept_crs(:,:,:) ) ! now in situ density for hpg computation 259 CALL zdf_mxl_crs(kstp) 260 CALL eos_crs ( tsn_crs, rhd_crs, rhop_crs, fsdept_crs(:,:,:) ) ! now in situ density for hpg computation 262 261 CALL iom_put("rhop_crs",rhop_crs) 263 262 CALL iom_put("rhd_crs",rhd_crs) … … 270 269 271 270 ENDIF 272 CALL zdf_mxl_crs(kstp)273 271 274 272 IF( ln_crs_top ) CALL dom_grid_crs -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/step_oce.F90
r5602 r6772 98 98 USE floats ! floats computation (flo_stp routine) 99 99 100 USE crs 100 101 USE crsfld ! Standard output on coarse grid (crs_fld routine) 101 102 USE zdfmxl_crs -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/MY_TRC/trcini_my_trc.F90
r5602 r6772 58 58 59 59 60 IF( .NOT. ln_rsttr ) trb(:,:,:,jp_myt0:jp_myt1) = 0. 61 IF( .NOT. ln_rsttr ) trn(:,:,:,jp_myt0:jp_myt1) = 0. 60 IF( .NOT. ln_rsttr ) trb(:,:,:,jp_myt0:jp_myt1) = 0._wp 61 IF( .NOT. ln_rsttr ) trn(:,:,:,jp_myt0:jp_myt1) = 0._wp 62 62 ! 63 63 END SUBROUTINE trc_ini_my_trc -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/MY_TRC/trcwri_my_trc.F90
r5602 r6772 16 16 USE crs, ONLY : ln_crs,ln_crs_top,ahtt_crs,ahtu_crs,ahtv_crs,ahtw_crs,jpi_crs,jpj_crs 17 17 USE iom, ONLY : iom_swap, iom_put 18 USE ieee_arithmetic 18 19 19 20 IMPLICIT NONE … … 36 37 IF( ln_crs_top ) CALL iom_swap( "nemo_crs" ) 37 38 38 CALL iom_put("ahtt_crs",ahtt_crs)39 CALL iom_put("ahtu_crs",ahtu_crs)40 CALL iom_put("ahtv_crs",ahtv_crs)41 CALL iom_put("ahtw_crs",ahtw_crs)42 43 44 39 ! write the tracer concentrations in the file 45 40 ! --------------------------------------- 41 WHERE(ieee_is_nan(trn))trn=1.e30 46 42 DO jn = jp_myt0, jp_myt1 47 43 cltra = TRIM( ctrcnm(jn) ) ! short title for tracer 48 IF( lk_vvl ) THEN 49 CALL iom_put( TRIM(cltra), trn(:,:,:,jn) * fse3t_n(:,:,:) ) 50 ELSE 51 CALL iom_put( TRIM(cltra), trn(:,:,:,jn) ) 44 CALL iom_put( TRIM(cltra), trn(:,:,:,jn) ) 52 45 ENDIF 53 46 END DO -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/TRP/trcadv_crs.F90
r5105 r6772 29 29 USE crs , ONLY : e2e3u_msk , e1e3v_msk , e1e2w_msk,jpi_crs,jpj_crs 30 30 USE timing 31 USE iom, ONLY: iom_put,iom_swap 31 32 32 33 IMPLICIT NONE … … 97 98 #endif 98 99 99 ! IF(lwp) WRITE(numout,*) 'TEST', e1e2t100 ! ! effective transport101 ! IF(lwp) WRITE(numout,*) 'un', maxval(un(:,:,:))102 ! IF(lwp) WRITE(numout,*) 'un', minval(un(:,:,:))103 ! IF(lwp) WRITE(numout,*) 'vn', maxval(vn(:,:,:))104 ! IF(lwp) WRITE(numout,*) 'vn', minval(vn(:,:,:))105 ! IF(lwp) WRITE(numout,*) 'wn', maxval(wn(:,:,:))106 ! IF(lwp) WRITE(numout,*) 'wn', minval(wn(:,:,:))107 100 DO jk = 1, jpkm1 108 101 ! ! eulerian transport only … … 113 106 END DO 114 107 115 IF(lwp)WRITE(numout,*)"jpi_crs jpj_crs jpk ",jpi_crs,jpj_crs,jpk116 DO jk=1,jpk117 DO jj = 1, jpj_crs118 DO ji = 1, jpi_crs119 IF( zwn(ji,jj,jk) .NE. zwn(ji,jj,jk) )WRITE(narea+200,*)"trcadv_zwn",zwn(ji,jj,jk) ; call flush(narea+200)120 END DO121 END DO122 END DO123 124 125 108 zwn(:,:,jpk) = 0.e0 ! no transport trough the bottom 126 109 … … 129 112 ! 130 113 SELECT CASE ( nadv ) !== compute advection trend and add it to general trend ==! 131 !cbr CASE ( 1 ) ; CALL tra_adv_cen2 ( kt, nittrc000, 'TRC', zun, zvn, zwn, trb, trn, tra, jptra ) ! 2nd order centered132 114 CASE ( 2 ) ; CALL tra_adv_tvd_crs ( kt, nittrc000, 'TRC', r2dt, zun, zvn, zwn, trb, trn, tra, jptra ) ! TVD 133 !cbr CASE ( 3 ) ; CALL tra_adv_muscl ( kt, nittrc000, 'TRC', r2dt, zun, zvn, zwn, trb, tra, jptra ) ! MUSCL134 !cbr CASE ( 4 ) ; CALL tra_adv_muscl2( kt, nittrc000, 'TRC', r2dt, zun, zvn, zwn, trb, trn, tra, jptra ) ! MUSCL2135 !cbr CASE ( 5 ) ; CALL tra_adv_ubs ( kt, nittrc000, 'TRC', r2dt, zun, zvn, zwn, trb, trn, tra, jptra ) ! UBS136 !cbr CASE ( 6 ) ; CALL tra_adv_qck ( kt, nittrc000, 'TRC', r2dt, zun, zvn, zwn, trb, trn, tra, jptra ) ! QUICKEST137 115 ! 138 116 CASE (-1 ) !== esopa: test all possibility with control print ==! 139 ! CALL tra_adv_cen2 ( kt, nittrc000, 'TRC', zun, zvn, zwn, trb, trn, tra, jptra )140 ! WRITE(charout, FMT="('adv1')") ; CALL prt_ctl_trc_info(charout)141 ! CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd')142 117 CALL tra_adv_tvd_crs ( kt, nittrc000, 'TRC', r2dt, zun, zvn, zwn, trb, trn, tra, jptra ) 143 118 WRITE(charout, FMT="('adv2')") ; CALL prt_ctl_trc_info(charout) 144 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd')145 ! CALL tra_adv_muscl ( kt, nittrc000, 'TRC', r2dt, zun, zvn, zwn, trb, tra, jptra )146 ! WRITE(charout, FMT="('adv3')") ; CALL prt_ctl_trc_info(charout)147 ! CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd')148 ! CALL tra_adv_muscl2( kt, nittrc000, 'TRC', r2dt, zun, zvn, zwn, trb, trn, tra, jptra )149 ! WRITE(charout, FMT="('adv4')") ; CALL prt_ctl_trc_info(charout)150 ! CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd')151 ! CALL tra_adv_ubs ( kt, nittrc000, 'TRC', r2dt, zun, zvn, zwn, trb, trn, tra, jptra )152 ! WRITE(charout, FMT="('adv5')") ; CALL prt_ctl_trc_info(charout)153 ! CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd')154 ! CALL tra_adv_qck ( kt, nittrc000, 'TRC', r2dt, zun, zvn, zwn, trb, trn, tra, jptra )155 ! WRITE(charout, FMT="('adv6')") ; CALL prt_ctl_trc_info(charout)156 119 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd') 157 120 ! -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/TRP/trcnxt.F90
r5602 r6772 27 27 !!---------------------------------------------------------------------- 28 28 USE oce_trc ! ocean dynamics and tracers variables 29 USE trc 29 USE trc, ONLY : nittrc000, tra, jptra,rdttrc,trb, trn,tra,ctrcnm ! ocean passive tracers variables 30 30 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 31 31 USE prtctl_trc ! Print control for debbuging … … 36 36 USE agrif_top_interp 37 37 # endif 38 USE crs, ONLY : ln_crs_top 39 USE ieee_arithmetic 38 40 39 41 IMPLICIT NONE … … 89 91 INTEGER, INTENT( in ) :: kt ! ocean time-step index 90 92 ! 91 INTEGER :: j k, jn ! dummy loop indices93 INTEGER :: ji,jj,jk, jn ! dummy loop indices 92 94 REAL(wp) :: zfact ! temporary scalar 93 95 CHARACTER (len=22) :: charout … … 137 139 ELSE 138 140 ! Leap-Frog + Asselin filter time stepping 139 IF( lk_vvl ) THEN ; CALL tra_nxt_vvl( kt, nittrc000, rdttrc, 'TRC', trb, trn, tra, & 140 & sbc_trc, sbc_trc_b, jptra ) ! variable volume level (vvl) 141 ELSE ; CALL tra_nxt_fix( kt, nittrc000, 'TRC', trb, trn, tra, jptra ) ! fixed volume level 141 IF( lk_vvl ) THEN 142 143 IF( ln_crs_top )THEN 144 CALL tra_nxt_vvl_crs( kt, nittrc000, rdttrc, 'TRC', trb, trn, tra, & 145 & sbc_trc, sbc_trc_b, jptra ) ! variable volume level (vvl) 146 ELSE 147 CALL tra_nxt_vvl( kt, nittrc000, rdttrc, 'TRC', trb, trn, tra, & 148 & sbc_trc, sbc_trc_b, jptra ) ! variable volume level (vvl) 149 ENDIF 150 ELSE ; CALL tra_nxt_fix( kt, nittrc000, 'TRC', trb, trn, tra, jptra ) ! fixed volume level 142 151 ENDIF 143 152 ENDIF -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/TRP/trcsbc.F90
r6101 r6772 17 17 !!---------------------------------------------------------------------- 18 18 USE oce_trc ! ocean dynamics and active tracers variables 19 USE trc ! ocean passive tracers variables19 USE trc , ONLY : trn,tra,ln_top_euler,rdttrc,nittrc000,ln_rsttr,numrtr,ctrcnm,jptra,numrtw,nn_ice_tr,lrst_trc 20 20 USE prtctl_trc ! Print control for debbuging 21 USE iom , ONLY : iom_varid, iom_get, iom_rstput,jpdom_autoglo21 USE iom , ONLY : iom_varid, iom_get, iom_rstput,jpdom_autoglo 22 22 USE trd_oce 23 23 USE trdtra 24 USE ieee_arithmetic 24 25 25 26 IMPLICIT NONE … … 135 136 136 137 ! 0. initialization 138 sbc_trc(:,:,:)=0._wp 137 139 DO jn = 1, jptra 138 140 ! -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/TRP/trctrp.F90
r6101 r6772 14 14 !!---------------------------------------------------------------------- 15 15 USE oce_trc ! ocean dynamics and active tracers variables 16 USE crs, ONLY: fmmflx_crs 16 17 USE trc ! ocean passive tracers variables 17 18 USE trcnam_trp ! passive tracers transport namelist variables … … 31 32 USE trcrad ! positivity (trc_rad routine) 32 33 USE trcsbc ! surface boundary condition (trc_sbc routine) 33 USE trcsbc_crs ! surface boundary condition (trc_sbc routine)34 34 USE zpshde ! partial step: hor. derivative (zps_hde routine) 35 35 USE zpshde_crs ! partial step: hor. derivative (zps_hde routine) 36 36 USE dom_oce , ONLY : ln_crs, ln_isfcav 37 USE crs , ONLY : jpi_crs,jpj_crs,wn_crs,ln_crs_top !cbr37 USE crs , ONLY : jpi_crs,jpj_crs,wn_crs,ln_crs_top,sbc_trc_crs,sbc_trc_b_crs 38 38 USE ldfslp_crs 39 39 #if defined key_agrif … … 41 41 USE agrif_top_update ! tracers updates 42 42 #endif 43 USE ieee_arithmetic 43 44 44 45 IMPLICIT NONE … … 75 76 IF( .NOT. lk_c1d ) THEN 76 77 ! 77 IF( ln_crs_top ) THEN ; CALL trc_sbc_crs( kstp)78 ELSE ;CALL trc_sbc( kstp )79 ENDIF78 CALL test(kstp,1) 79 CALL trc_sbc( kstp ) 80 CALL test(kstp,2) 80 81 IF( ln_crs_top ) THEN ; CALL trc_bbl_crs( kstp ) 81 82 ELSE ; CALL trc_bbl( kstp ) … … 83 84 IF( ln_trcdmp ) CALL trc_dmp( kstp ) ! internal damping trends 84 85 86 CALL test(kstp,3) 85 87 IF( ln_crs_top ) THEN ; CALL trc_adv_crs( kstp ) 86 88 ELSE ; CALL trc_adv( kstp ) 87 89 ENDIF 88 90 91 CALL test(kstp,4) 89 92 IF( ln_trcdmp_clo ) CALL trc_dmp_clo( kstp ) ! internal damping trends on closed seas only 90 93 IF( ln_crs_top ) THEN ; CALL trc_ldf_crs( kstp ) 91 94 ELSE ; CALL trc_ldf( kstp ) 92 95 ENDIF 96 CALL test(kstp,5) 93 97 IF( .NOT. lk_offline .AND. lk_zdfkpp ) & 94 98 & CALL trc_kpp( kstp ) ! KPP non-local tracer fluxes … … 99 103 ELSE ; CALL trc_zdf( kstp ) 100 104 ENDIF 105 CALL test(kstp,6) 106 101 107 CALL trc_nxt( kstp ) ! tracer fields at next time step 108 CALL test(kstp,10) 102 109 IF( ln_trcrad ) CALL trc_rad( kstp ) ! Correct artificial negative concentrations 103 110 … … 132 139 ! 133 140 END SUBROUTINE trc_trp 141 134 142 SUBROUTINE test(kt,i) 135 143 INTEGER,INTENT(IN) :: kt,i 136 144 REAL(wp)::zmin,zmax 137 INTEGER :: ii,jj,kk145 INTEGER :: ji,jj,jk 138 146 zmin=MINVAL( trb(2:jpi-1,2:jpj-1,:,1),mask=(tmask(2:jpi-1,2:jpj-1,:)==1)) ; CALL mpp_min(zmin) 139 147 zmax=MAXVAL( trb(2:jpi-1,2:jpj-1,:,1),mask=(tmask(2:jpi-1,2:jpj-1,:)==1)) ; CALL mpp_max(zmax) … … 145 153 zmax=MAXVAL( tra(2:jpi-1,2:jpj-1,:,1),mask=(tmask(2:jpi-1,2:jpj-1,:)==1)) ; CALL mpp_max(zmax) 146 154 IF(lwp)WRITE(numout,*)"trctrp a ",kt,i,zmin,zmax 147 zmin=MINVAL( tra(2:jpi-1,2:jpj-1,30,1),mask=(tmask(2:jpi-1,2:jpj-1,30)==1)) ; CALL mpp_min(zmin)148 zmax=MAXVAL( tra(2:jpi-1,2:jpj-1,30,1),mask=(tmask(2:jpi-1,2:jpj-1,30)==1)) ; CALL mpp_max(zmax)149 155 150 156 END SUBROUTINE test -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/oce_trc.F90
r6101 r6772 102 102 USE crs , ONLY : e1v => e1v_crs !: horizontal scale factors at v-point (m) 103 103 USE crs , ONLY : e2v => e2v_crs !: horizontal scale factors at v-point (m) 104 USE crs , ONLY : e3t => e3t_crs !: vertical scale factors at t- 105 USE crs , ONLY : e3t_0 => e3t_crs !: vertical scale factors at t- 106 USE crs , ONLY : fse3t => e3t_crs 107 USE crs , ONLY : fse3t_b => e3t_crs 108 USE crs , ONLY : fse3t_a => e3t_crs 109 USE crs , ONLY : fse3w => e3w_crs 110 USE crs , ONLY : e3u => e3u_crs !: vertical scale factors at u- 111 USE crs , ONLY : e3u_0 => e3u_crs !: vertical scale factors at u- 112 USE crs , ONLY : e3v => e3v_crs !: vertical scale factors v- 113 USE crs , ONLY : e3v_0 => e3v_crs !: vertical scale factors v- 114 USE crs , ONLY : e3w => e3w_crs !: w-points (m) 115 USE crs , ONLY : e3w_0 => e3w_crs !: w-points (m) 116 USE crs , ONLY : e3f => e3f_crs !: f-points (m) 104 105 #if defined key_vvl 106 USE crs , ONLY : e3t => e3t_n_crs !: vertical scale factors at t- 107 USE crs , ONLY : e3u => e3u_n_crs !: vertical scale factors at u- 108 USE crs , ONLY : e3v => e3v_n_crs !: vertical scale factors v- 109 USE crs , ONLY : e3w => e3w_n_crs !: w-points (m) 110 USE crs , ONLY : e3t_n => e3t_n_crs !: vertical scale factors at t- 111 USE crs , ONLY : e3u_n => e3u_n_crs !: vertical scale factors at u- 112 USE crs , ONLY : e3v_n => e3v_n_crs !: vertical scale factors v- 113 USE crs , ONLY : e3w_n => e3w_n_crs !: w-points (m) 114 USE crs , ONLY : e3t_a => e3t_a_crs !: vertical scale factors at t- 115 USE crs , ONLY : e3u_a => e3u_a_crs !: vertical scale factors at u- 116 USE crs , ONLY : e3v_a => e3v_a_crs !: vertical scale factors v- 117 USE crs , ONLY : e3w_a => e3w_a_crs !: w-points (m) 118 USE crs , ONLY : fse3t => e3t_n_crs !: vertical scale factors at t- 119 USE crs , ONLY : fse3u => e3u_n_crs !: vertical scale factors at u- 120 USE crs , ONLY : fse3v => e3v_n_crs !: vertical scale factors v- 121 USE crs , ONLY : fse3w => e3w_n_crs !: w-points (m) 122 USE crs , ONLY : gdept => gdept_n_crs !: depth of t-points (m) 123 USE crs , ONLY : gdept_crs => gdept_n_crs !: depth of t-points (m) 124 USE crs , ONLY : gdept_n => gdept_n_crs !: depth of t-points (m) 125 USE crs , ONLY : fse3t_b => e3t_b_crs !: vertical scale factors at t- 126 USE crs , ONLY : fse3t_n => e3t_n_crs !: vertical scale factors at t- 127 USE crs , ONLY : fse3t_a => e3t_a_crs !: vertical scale factors at t- 128 USE crs , ONLY : fsdept_n => gdept_n_crs !: depth of t-points (m) 129 USE crs , ONLY : e3t_max_crs => e3t_max_n_crs 130 USE crs , ONLY : e3u_max_crs => e3u_max_n_crs 131 USE crs , ONLY : e3v_max_crs => e3v_max_n_crs 132 USE crs , ONLY : e3w_max_crs => e3w_max_n_crs 133 #else 134 USE crs , ONLY : e3t => e3t_0_crs !: vertical scale factors at t- 135 USE crs , ONLY : e3u => e3u_0_crs !: vertical scale factors at u- 136 USE crs , ONLY : e3v => e3v_0_crs !: vertical scale factors v- 137 USE crs , ONLY : e3w => e3w_0_crs !: w-points (m) 138 USE crs , ONLY : e3t_n => e3t_0_crs !: vertical scale factors at t- 139 USE crs , ONLY : e3u_n => e3u_0_crs !: vertical scale factors at u- 140 USE crs , ONLY : e3v_n => e3v_0_crs !: vertical scale factors v- 141 USE crs , ONLY : e3w_n => e3w_0_crs !: w-points (m) 142 USE crs , ONLY : e3t_a => e3t_0_crs !: vertical scale factors at t- 143 USE crs , ONLY : e3u_a => e3u_0_crs !: vertical scale factors at u- 144 USE crs , ONLY : e3v_a => e3v_0_crs !: vertical scale factors v- 145 USE crs , ONLY : e3w_a => e3w_0_crs !: w-points (m) 146 USE crs , ONLY : fse3t => e3t_0_crs !: vertical scale factors at t- 147 USE crs , ONLY : fse3u => e3u_0_crs !: vertical scale factors at u- 148 USE crs , ONLY : fse3v => e3v_0_crs !: vertical scale factors v- 149 USE crs , ONLY : fse3w => e3w_0_crs !: w-points (m) 150 USE crs , ONLY : gdept => gdept_0_crs !: depth of t-points (m) 151 USE crs , ONLY : gdepw => gdepw_0_crs !: depth of t-points (m) 152 USE crs , ONLY : gdept_crs => gdept_0_crs !: depth of t-points (m) 153 USE crs , ONLY : gdepw_crs => gdepw_0_crs !: depth of t-points (m) 154 USE crs , ONLY : gdept_n => gdept_0_crs !: depth of t-points (m) 155 USE crs , ONLY : fse3t_b => e3t_0_crs !: vertical scale factors at t- 156 USE crs , ONLY : fse3t_n => e3t_0_crs !: vertical scale factors at t- 157 USE crs , ONLY : fse3t_a => e3t_0_crs !: vertical scale factors at t- 158 USE crs , ONLY : fsdept_n => gdept_0_crs !: depth of t-points (m) 159 USE crs , ONLY : e3t_max_crs => e3t_max_0_crs 160 USE crs , ONLY : e3u_max_crs => e3u_max_0_crs 161 USE crs , ONLY : e3v_max_crs => e3v_max_0_crs 162 USE crs , ONLY : e3w_max_crs => e3w_max_0_crs 163 #endif 164 USE crs , ONLY : e3t_0 => e3t_0_crs !: vertical scale factors at t- 165 USE crs , ONLY : e3u_0 => e3u_0_crs !: vertical scale factors at t- 166 USE crs , ONLY : e3v_0 => e3v_0_crs !: vertical scale factors at t- 167 USE crs , ONLY : e3w_0 => e3w_0_crs !: vertical scale factors at t- 168 117 169 USE crs , ONLY : ff => ff_crs !: f-points (m) 118 119 USE crs , ONLY : gdept_0 => gdept_crs !: depth of t-points (m) 170 USE crs , ONLY : gdept_0 => gdept_0_crs !: depth of t-points (m) 120 171 USE dom_oce , ONLY : gdept_1d => gdept_1d !: depth of t-points (m) 121 172 #if defined key_zco 122 USE crs , ONLY : gdept => gdept_ crs !: depth of t-points (m)173 USE crs , ONLY : gdept => gdept_0_crs !: depth of t-points (m) 123 174 USE crs , ONLY : gdepw => gdepw_crs !: depth of t-points (m) 124 175 #endif … … 140 191 USE crs , ONLY : wn => wn_crs !: vertical velocity (m s-1) 141 192 USE crs , ONLY : tsn => tsn_crs !: 4D array contaning ( tn, sn ) 142 USE oce , ONLY : tsb => tsb!: 4D array contaning ( tb, sb )143 USE oce , ONLY : tsa => tsa!: 4D array contaning ( ta, sa )144 USE oce , ONLY : rhop => rhop!: potential volumic mass (kg m-3)193 USE crs , ONLY : tsb => tsb_crs !: 4D array contaning ( tb, sb ) 194 USE crs , ONLY : tsa => tsa_crs !: 4D array contaning ( ta, sa ) 195 USE crs , ONLY : rhop => rhop_crs !: potential volumic mass (kg m-3) 145 196 USE crs , ONLY : rhd => rhd_crs !: in situ density anomalie rhd=(rho-rau0)/rau0 (no units) 146 197 USE crs , ONLY : rn2b => rb2_crs !: in situ density anomalie rhd=(rho-rau0)/rau0 (no units) … … 160 211 USE crs , ONLY : emp_b => emp_b_crs !: freshwater budget: volume flux [Kg/m2/s] 161 212 USE crs , ONLY : sfx => sfx_crs !: freshwater budget: concentration/dillution [Kg/m2/s] 213 USE crs , ONLY : sbc_trc_b => sbc_trc_b_crs !: freshwater budget: volume flux [Kg/m2/s] 214 USE crs , ONLY : sbc_trc => sbc_trc_crs !: freshwater budget: volume flux [Kg/m2/s] 162 215 USE crs , ONLY : fmmflx => fmmflx_crs !: freshwater budget: volume flux [Kg/m2/s] 163 216 USE crs , ONLY : rnf => rnf_crs !: river runoff [Kg/m2/s] … … 169 222 USE crs , ONLY : ahtt => ahtt_crs !: lateral diffusivity coef. at t-points 170 223 USE ldftra_oce , ONLY : rldf => rldf 171 224 USE crs , ONLY : trc_i => trc_i_crs 225 USE crs , ONLY : trc_o => trc_o_crs 172 226 USE crs , ONLY : avt => avt_crs !: vert. diffusivity coef. at w-point for temp 173 227 #if defined key_zdfddm … … 262 316 USE dom_oce , ONLY : e3t => e3t_0 !: vertical scale factors at t- 263 317 USE dom_oce , ONLY : e3t_0 => e3t_0 !: vertical scale factors at t- 318 #if defined key_vvl 319 USE dom_oce , ONLY : fse3t_b => e3t_b 320 USE dom_oce , ONLY : fse3t_n => e3t_n 321 USE dom_oce , ONLY : fse3t => e3t_n 322 USE dom_oce , ONLY : fse3u => e3u_n 323 USE dom_oce , ONLY : fse3v => e3v_n 324 USE dom_oce , ONLY : fse3w => e3w_n 325 USE dom_oce , ONLY : fse3t_a => e3t_a 326 USE dom_oce , ONLY : e3t_b => e3t_b 327 USE dom_oce , ONLY : e3t_n => e3t_n 328 USE dom_oce , ONLY : e3t_a => e3t_a 329 USE dom_oce , ONLY : e3u_n => e3u_n 330 USE dom_oce , ONLY : e3v_n => e3v_n 331 USE dom_oce , ONLY : e3u => e3u_n !: vertical scale factors at u- 332 USE dom_oce , ONLY : e3u_0 => e3u_0 !: vertical scale factors at u- 333 USE dom_oce , ONLY : e3v => e3v_n !: vertical scale factors v- 334 USE dom_oce , ONLY : e3v_0 => e3v_0 !: vertical scale factors v- 335 USE dom_oce , ONLY : e3w_n => e3w_n !: w-points (m) 336 USE dom_oce , ONLY : e3w => e3w_n !: w-points (m) 337 USE dom_oce , ONLY : e3w_0 => e3w_0 !: w-points (m) 338 USE dom_oce , ONLY : e3f => e3f_n !: f-points (m) 339 USE dom_oce , ONLY : gdept_n => gdept_n !: f-points (m) 340 USE dom_oce , ONLY : fsdept_n => gdept_n !: f-points (m) 341 #else 342 USE dom_oce , ONLY : fse3t_n => e3t_0 264 343 USE dom_oce , ONLY : fse3t => e3t_0 265 USE dom_oce , ONLY : fse3 t_b => e3t_0266 USE dom_oce , ONLY : fse3 t_a => e3t_0344 USE dom_oce , ONLY : fse3u => e3u_0 345 USE dom_oce , ONLY : fse3v => e3v_0 267 346 USE dom_oce , ONLY : fse3w => e3w_0 347 USE dom_oce , ONLY : fse3t_b => e3t_0 348 USE dom_oce , ONLY : fse3t_a => e3t_0 349 USE dom_oce , ONLY : e3t_a => e3t_0 268 350 USE dom_oce , ONLY : e3u => e3u_0 !: vertical scale factors at u- 269 351 USE dom_oce , ONLY : e3u_0 => e3u_0 !: vertical scale factors at u- … … 273 355 USE dom_oce , ONLY : e3w_0 => e3w_0 !: w-points (m) 274 356 USE dom_oce , ONLY : e3f => e3f_0 !: f-points (m) 357 USE dom_oce , ONLY : gdept_n => gdept_0 !: f-points (m) 358 USE dom_oce , ONLY : fsdept_n => gdept_0 !: f-points (m) 359 #endif 275 360 USE dom_oce , ONLY : ff => ff !: f-points (m) 276 361 USE dom_oce , ONLY : gdept_0 => gdept_0 !: f-points (m) … … 349 434 USE sbc_oce , ONLY : rnf => rnf !: river runoff [Kg/m2/s] 350 435 USE sbc_oce , ONLY : ln_dm2dc => ln_dm2dc !: Diurnal Cycle 351 USE sbc_oce , ONLY : ncpl_qsr_freq => ncpl_qsr_freq !: qsr coupling frequency per days from atmospher352 USE sbc_oce , ONLY : ln_rnf => ln_rnf !: runoffs / runoff mouths353 436 USE sbc_oce , ONLY : fr_i => fr_i !: ice fraction (between 0 to 1) 354 USE sbc_oce , ONLY : nn_ice_embd => nn_ice_embd !: flag for levitating/embedding sea-ice in the ocean355 437 USE traqsr , ONLY : rn_abs => rn_abs !: fraction absorbed in the very near surface 356 438 USE traqsr , ONLY : rn_si0 => rn_si0 !: very near surface depth of extinction … … 360 442 USE sbcrnf , ONLY : h_rnf => h_rnf !: river runoff [Kg/m2/s] 361 443 USE sbcrnf , ONLY : nk_rnf => nk_rnf !: depth of runoff in model level 444 USE trc , ONLY : sbc_trc_b => sbc_trc_b !: freshwater budget: volume flux [Kg/m2/s] 445 USE trc , ONLY : sbc_trc => sbc_trc !: freshwater budget: volume flux [Kg/m2/s] 446 USE trc , ONLY : trc_i => trc_i 447 USE trc , ONLY : trc_o => trc_o 362 448 363 449 USE trc_oce … … 407 493 USE sbc_oce , ONLY : nn_ice_embd 408 494 USE sbc_oce , ONLY : ln_cpl 495 USE sbc_oce , ONLY : ln_rnf 409 496 USE sbc_oce , ONLY : ncpl_qsr_freq 410 497 -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/trcdta.F90
r6101 r6772 37 37 !$AGRIF_END_DO_NOT_TREAT 38 38 !! * Substitutions 39 # include "domzgr_substitute.h90"39 !cbr # include "domzgr_substitute.h90" 40 40 !!---------------------------------------------------------------------- 41 41 !! NEMO/OPA 3.3 , NEMO Consortium (2010) -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/trcice.F90
r5602 r6772 14 14 15 15 USE oce_trc ! shared variables between ocean and passive tracers 16 USE trc ! passive tracers common variables16 USE trc, ONLY : nn_ice_tr,lk_pisces,lk_cfc,lk_c14b,lk_my_trc ! passive tracers common variables 17 17 USE trcice_cfc ! CFC initialisation 18 18 USE trcice_pisces ! PISCES initialisation -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/trcstp.F90
r6101 r6772 77 77 IF( l_trcdm2dc ) CALL trc_mean_qsr( kt ) 78 78 ! 79 IF( nn_dttrc /= 1 ) CALL trc_sub_stp( kt ) ! averaging physical variables for sub-stepping79 !cbr IF( nn_dttrc /= 1 ) CALL trc_sub_stp( kt ) ! averaging physical variables for sub-stepping 80 80 ! 81 81 IF( MOD( kt , nn_dttrc ) == 0 ) THEN ! only every nn_dttrc time step … … 102 102 IF( lk_trdmxl_trc ) CALL trd_mxl_trc ( kt ) ! trends: Mixed-layer 103 103 ! 104 IF( nn_dttrc /= 1 ) CALL trc_sub_reset( kt ) ! resetting physical variables when sub-stepping104 !cbr IF( nn_dttrc /= 1 ) CALL trc_sub_reset( kt ) ! resetting physical variables when sub-stepping 105 105 ! 106 106 ENDIF -
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/trcsub.F90
r5602 r6772 45 45 46 46 !!* Substitution 47 # include "top_substitute.h90"47 !!# include "top_substitute.h90" 48 48 !!---------------------------------------------------------------------- 49 49 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 111 111 ! 112 112 sshn_tm (:,:) = sshn_tm (:,:) + sshn (:,:) 113 rnf_tm (:,:) = rnf_tm (:,:) + rnf (:,:) 114 !cbr h_rnf_tm (:,:) = h_rnf_tm (:,:) + h_rnf (:,:) 113 IF( ln_rnf )THEN 114 rnf_tm (:,:) = rnf_tm (:,:) + rnf (:,:) 115 h_rnf_tm (:,:) = h_rnf_tm (:,:) + h_rnf (:,:) 116 ENDIF 115 117 hmld_tm (:,:) = hmld_tm (:,:) + hmld (:,:) 116 118 fr_i_tm (:,:) = fr_i_tm (:,:) + fr_i (:,:) … … 151 153 ssha_temp (:,:) = ssha (:,:) 152 154 rnf_temp (:,:) = rnf (:,:) 153 !cbr h_rnf_temp (:,:) = h_rnf (:,:) 154 hmld_temp (:,:) = hmld (:,:) 155 IF( ln_rnf )THEN 156 h_rnf_temp (:,:) = h_rnf (:,:) 157 hmld_temp (:,:) = hmld (:,:) 158 ENDIF 155 159 fr_i_temp (:,:) = fr_i (:,:) 156 160 emp_temp (:,:) = emp (:,:) … … 196 200 # endif 197 201 sshn_tm (:,:) = sshn_tm (:,:) + sshn (:,:) 198 rnf_tm (:,:) = rnf_tm (:,:) + rnf (:,:) 199 !cbr h_rnf_tm (:,:) = h_rnf_tm (:,:) + h_rnf (:,:) 202 IF( ln_rnf )THEN 203 rnf_tm (:,:) = rnf_tm (:,:) + rnf (:,:) 204 h_rnf_tm (:,:) = h_rnf_tm (:,:) + h_rnf (:,:) 205 ENDIF 200 206 hmld_tm (:,:) = hmld_tm (:,:) + hmld (:,:) 201 207 fr_i_tm (:,:) = fr_i_tm (:,:) + fr_i (:,:) … … 207 213 sshn (:,:) = sshn_tm (:,:) * r1_ndttrcp1 208 214 sshb (:,:) = sshb_hold (:,:) 209 rnf (:,:) = rnf_tm (:,:) * r1_ndttrcp1 210 !cbr h_rnf (:,:) = h_rnf_tm (:,:) * r1_ndttrcp1 215 IF( ln_rnf )THEN 216 rnf (:,:) = rnf_tm (:,:) * r1_ndttrcp1 217 h_rnf (:,:) = h_rnf_tm (:,:) * r1_ndttrcp1 218 ENDIF 211 219 hmld (:,:) = hmld_tm (:,:) * r1_ndttrcp1 212 220 ! variables that are initialized after averages … … 319 327 #endif 320 328 sshn_tm (:,:) = sshn (:,:) 321 rnf_tm (:,:) = rnf (:,:) 322 !cbr h_rnf_tm (:,:) = h_rnf (:,:) 329 IF( ln_rnf )THEN 330 rnf_tm (:,:) = rnf (:,:) 331 h_rnf_tm (:,:) = h_rnf (:,:) 332 ENDIF 323 333 hmld_tm (:,:) = hmld (:,:) 324 334 … … 378 388 sshb (:,:) = sshb_temp (:,:) 379 389 ssha (:,:) = ssha_temp (:,:) 380 rnf (:,:) = rnf_temp (:,:) 381 !cbr h_rnf (:,:) = h_rnf_temp (:,:) 390 IF( ln_rnf )THEN 391 rnf (:,:) = rnf_temp (:,:) 392 h_rnf (:,:) = h_rnf_temp (:,:) 393 ENDIF 382 394 ! 383 395 hmld (:,:) = hmld_temp (:,:) … … 427 439 emp_b_hold (:,:) = emp (:,:) 428 440 sshn_tm (:,:) = sshn (:,:) 429 rnf_tm (:,:) = rnf (:,:) 430 !cbr h_rnf_tm (:,:) = h_rnf (:,:) 441 IF( ln_rnf )THEN 442 rnf_tm (:,:) = rnf (:,:) 443 h_rnf_tm (:,:) = h_rnf (:,:) 444 ENDIF 431 445 hmld_tm (:,:) = hmld (:,:) 432 446 fr_i_tm (:,:) = fr_i (:,:)
Note: See TracChangeset
for help on using the changeset viewer.