New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 6772 for branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsfld.F90 – NEMO

Ignore:
Timestamp:
2016-07-01T18:02:45+02:00 (8 years ago)
Author:
cbricaud
Message:

clean in coarsening branch

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsfld.F90

    r6101 r6772  
    2424   USE crs 
    2525   USE crsdom 
     26   USE domvvl 
     27   USE domvvl_crs 
    2628   USE crslbclnk 
    2729   USE iom 
     
    3234   USE zdftke_crs 
    3335 
    34 !   USE ieee_arithmetic 
     36   USE ieee_arithmetic 
    3537 
    3638   IMPLICIT NONE 
     
    7779      REAL(wp), POINTER, DIMENSION(:,:,:,:) :: avte_crs 
    7880      REAL(wp)       :: z2dcrsu, z2dcrsv 
    79       REAL(wp)       :: zmin,zmax,icnt1,icnt2 
     81      REAL(wp)       :: z1_2dt 
     82      REAL(wp)       :: icnt1,icnt2 
    8083      INTEGER :: i,j,ijis,ijie,ijjs,ijje 
    8184      REAL(wp)       :: zw,zwp1,zum1,zu,zvm1,zv,zsnm,zsm,z 
     
    8588      INTEGER ::  iji,ijj 
    8689      INTEGER :: jl,jm,jn 
     90      REAL(wp)       :: zmin,zmax,zsuma0,zsuma1,zsuma2,zsuma3,zsumb0,zsumb1,zsumb2,zsumb3,zsumb4 
    8791      !! 
    8892      !!---------------------------------------------------------------------- 
     
    101105      CALL wrk_alloc( jpi_crs, jpj_crs, z2d_crs     ) 
    102106 
    103       ! Depth work arrrays 
    104       zfse3t(:,:,:) = fse3t(:,:,:) 
    105       zfse3u(:,:,:) = fse3u(:,:,:) 
    106       zfse3v(:,:,:) = fse3v(:,:,:) 
    107       zfse3w(:,:,:) = fse3w(:,:,:) 
    108107 
    109108      IF( kt == nit000  ) THEN 
     
    124123         emp_b_crs(:,:    ) = 0._wp    ! emp 
    125124         rnf_crs  (:,:    ) = 0._wp    ! runoff 
     125         rnf_b_crs(:,:    ) = 0._wp    ! runoff 
    126126         fr_i_crs (:,:    ) = 0._wp    ! ice cover 
    127127      ENDIF 
     
    129129      CALL iom_swap( "nemo_crs" )    ! swap on the coarse grid 
    130130 
    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 
    133203 
    134204      !  Temperature 
    135       zt(:,:,:) = tsb(:,:,:,jp_tem)  ;      zt_crs(:,:,:) = 0._wp 
    136       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(:,:,:) 
    138205      zt(:,:,:) = tsn(:,:,:,jp_tem)  ;      zt_crs(:,:,:) = 0._wp 
    139206      CALL crs_dom_ope( zt, 'VOL', 'T', tmask, zt_crs, p_e12=e1e2t, p_e3=zfse3t, psgn=1.0 ) 
     
    143210      CALL iom_put( "sst" , tsn_crs(:,:,1,jp_tem) )    ! sst 
    144211 
    145       !n2 before 
    146       zt(:,:,:) = rn2b(:,:,:)  ;      zt_crs(:,:,:) = 0._wp 
    147       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  
    151212      !  Salinity 
    152       zs(:,:,:) = tsb(:,:,:,jp_sal)  ;      zs_crs(:,:,:) = 0._wp 
    153       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(:,:,:) 
    155213      zs(:,:,:) = tsn(:,:,:,jp_sal)  ;      zs_crs(:,:,:) = 0._wp 
    156214      CALL crs_dom_ope( zs, 'VOL', 'T', tmask, zs_crs, p_e12=e1e2t, p_e3=zfse3t, psgn=1.0 ) 
     
    161219 
    162220      !  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 ) 
    164221      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       !cbr 
    166       ub_crs(:,:,:) = ub_crs(:,:,:)*umask_crs(:,:,:) 
    167222      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 
    170233      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 ) 
    243242            ENDDO 
    244243         ENDDO 
     
    248247      CALL iom_put( "hdiv", hdivn_crs )   
    249248 
    250  
    251       !  W-velocity 
    252       IF( ln_crs_wn ) THEN 
    253          CALL crs_dom_ope( wn, 'SUM', 'W', tmask, wn_crs, p_e12=e1e2t, p_surf_crs=e1e2w_msk, psgn=1.0 ) 
    254       ELSE 
    255         wn_crs(:,:,jpk) = 0._wp 
    256         DO jk = jpkm1, 1, -1 
    257            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         ENDDO 
    260       ENDIF 
    261  
    262       CALL iom_put( "woce", wn_crs  )   ! vertical velocity 
    263       !  free memory 
    264249 
    265250      !  avt, avs 
     
    276261            CALL crs_dom_ope( avt, 'MED', 'W', tmask, avt_crs, p_e12=e1e2t, p_e3=zfse3w, psgn=1.0 ) 
    277262         CASE ( 5 ) 
     263#if defined key_zdftke 
    278264            CALL crs_dom_ope( en , 'VOL', 'W', tmask, en_crs, p_e12=e1e2t, p_e3=zfse3w, psgn=1.0 ) 
    279265            CALL crs_dom_ope( taum , 'SUM', 'T', tmask, taum_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 
     
    282268            CALL tke_avn_crs 
    283269            CALL zdf_evd_crs(kt) 
     270#endif 
    284271         CASE ( 6 ) 
    285272 
     
    295282            CALL crs_dom_ope( zt, 'VOL', 'W', tmask, zt_crs, p_e12=e1e2t, p_e3=ztmp, psgn=1.0 ) 
    296283            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,zmax  
    298             zmin=MINVAL(zs_crs);zmax=MAXVAL(zs_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"avte1_crs",zmin,zmax  
    299284            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,zmax  
    301285            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,zmax  
    303286 
    304287            zt(:,:,:) = 0._wp 
     
    310293            CALL crs_dom_ope( zt, 'VOL', 'W', tmask, zt_crs, p_e12=e1e2t, p_e3=ztmp, psgn=1.0 ) 
    311294            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,zmax  
    313             zmin=MINVAL(zs_crs);zmax=MAXVAL(zs_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"avte2_crs",zmin,zmax  
    314295            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,zmax 
    316296            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,zmax 
    318297 
    319298            zt(:,:,:) = 0._wp 
     
    326305            CALL crs_dom_ope( zt, 'VOL', 'W', tmask, zt_crs, p_e12=e1e2t, p_e3=ztmp, psgn=1.0 ) 
    327306            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,zmax  
    329             zmin=MINVAL(zs_crs);zmax=MAXVAL(zs_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"avte3_crs",zmin,zmax  
    330307            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,zmax 
    332308            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,zmax 
    334309 
    335310            zt(:,:,:) = 0._wp 
     
    342317            CALL crs_dom_ope( zt, 'VOL', 'W', tmask, zt_crs, p_e12=e1e2t, p_e3=ztmp, psgn=1.0 ) 
    343318            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,zmax  
    345             zmin=MINVAL(zs_crs);zmax=MAXVAL(zs_crs);CALL mpp_min(zmin);CALL mpp_max(zmax);IF(lwp)WRITE(numout,*)"avte4_crs",zmin,zmax  
    346319            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,zmax 
    348320            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,zmax 
    350321 
    351322            CALL iom_put( "avte_crs1", avte_crs(:,:,:,1) )   !  Kz 
     
    353324            CALL iom_put( "avte_crs3", avte_crs(:,:,:,3) )   !  Kz 
    354325            CALL iom_put( "avte_crs4", avte_crs(:,:,:,4) )   !  Kz 
    355 !---------------------  
     326 
    356327            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) 
    358328            CALL iom_put( "zs_crs", zs_crs )   !  Kzlogvol 
    359 !--------------------- ok 
    360329 
    361330            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) 
    363331            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 !-------------------------nok 
    366332            avt_crs=zs_crs 
    367333 
     
    379345 
    380346  
    381 !-------------- 
    382347               zwgt(1:4)=0._wp 
    383348               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 !-------------- 
    385349               IF( SUM(zwgt(1:4)) .NE. 0._wp ) THEN   
    386350                  zmean = SUM( zwgt(1:4)*avte_crs(ji,jj,jk,1:4)) / SUM(zwgt(1:4) ) 
     
    390354                 zerr=1.e10 
    391355               ENDIF 
    392 !-------------- 
    393356 
    394357               zerr_crs(ji,jj,jk)=zerr 
     
    400363               IF( tmask_crs(ji,jj,jk) == 1 .AND.  zerr .LE. zerr0 .AND. zmean .GT. 0._wp ) icnt2=icnt2+1 
    401364 
    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 
    414369            CALL iom_put( "zt_crs", zt_crs )   !  Kz 
    415370            CALL iom_put( "zerr_crs", zerr_crs )   !  Kz 
     
    419374      CALL iom_put( "avt", avt_crs )   !  Kz 
    420375      
    421       !deja dasn step CALL zdf_mxl_crs(kt) 
    422  
    423   
    424       !  sbc fields   
    425  
    426       CALL crs_dom_ope( sshb , 'VOL', 'T', tmask, sshb_crs , p_e12=e1e2t, p_e3=zfse3t         , psgn=1.0 )   
    427376      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 )   
    429377      CALL crs_dom_ope( utau , 'SUM', 'U', umask, utau_crs , p_e12=e2u  , p_surf_crs=e2u_crs  , psgn=1.0 ) 
    430378      CALL crs_dom_ope( vtau , 'SUM', 'V', vmask, vtau_crs , p_e12=e1v  , p_surf_crs=e1v_crs  , psgn=1.0 ) 
     
    432380      CALL crs_dom_ope( rnf  , 'MAX', 'T', tmask, rnf_crs                                     , psgn=1.0 ) 
    433381      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 
    435388      CALL crs_dom_ope( emp  , 'SUM', 'T', tmask, emp_crs  , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 
     389 
    436390      CALL crs_dom_ope( fmmflx,'SUM', 'T', tmask, fmmflx_crs, p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 
    437391      CALL crs_dom_ope( sfx  , 'SUM', 'T', tmask, sfx_crs  , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 
     
    453407      CALL iom_put( "ice_cover", fr_i_crs )   ! ice cover output  
    454408 
     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 
    455474      !  free memory 
    456475      CALL wrk_dealloc( jpi, jpj, jpk, zfse3t, zfse3w ) 
Note: See TracChangeset for help on using the changeset viewer.