Changeset 8172


Ignore:
Timestamp:
2017-06-14T15:44:31+02:00 (3 years ago)
Author:
vancop
Message:

SIMIP branch, generic 2D transport fluxes

Location:
branches/2016/v3_6_CMIP6_ice_diagnostics/NEMOGCM/NEMO/LIM_SRC_3
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/v3_6_CMIP6_ice_diagnostics/NEMOGCM/NEMO/LIM_SRC_3/ice.F90

    r8158 r8172  
    423423   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_dmi_dyn  !: Change in ice mass due to ice dynamics (kg/m2/s) 
    424424   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_dms_dyn  !: Change in snow mass due to ice dynamics (kg/m2/s) 
    425    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_dmtx_dyn !: X-component of total snow + ice mass transport (kg/s) 
    426    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_dmty_dyn !: X-component of total snow + ice mass transport (kg/s) 
     425   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_xmtrp_ice !: X-component of ice mass transport (kg/s) 
     426   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_ymtrp_ice !: Y-component of ice mass transport (kg/s) 
     427   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_xmtrp_snw !: X-component of snow mass transport (kg/s) 
     428   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_ymtrp_ice !: Y-component of snow mass transport (kg/s) 
     429   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_xatran   !: X-component of area transport (m2/s) 
     430   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_yatran   !: Y-component of area transport (m2/s) 
    427431   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_fc_bo    !: Bottom conduction flux (W/m2) 
    428432   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_fc_su    !: Surface conduction flux (W/m2) 
     
    540544      ALLOCATE( t_si (jpi,jpj,jpl)    , tm_si(jpi,jpj)        ,    &  
    541545                diag_dmi_dyn(jpi,jpj) , diag_dms_dyn(jpi,jpj) ,    & 
    542                 diag_dmtx_dyn(jpi,jpj), diag_dmty_dyn(jpi,jpj),    & 
     546                diag_xmtrp_ice(jpi,jpj), diag_ymtrp_ice(jpi,jpj),  & 
     547                diag_xmtrp_snw(jpi,jpj), diag_ymtrp_snw(jpi,jpj),  & 
     548                diag_xatrp(jpi,jpj)    , diag_yatrp(jpi,jpj)    ,  & 
    543549                diag_fc_bo(jpi,jpj)   , diag_fc_su(jpi,jpj)   ,    & 
    544550                diag_utau_oi(jpi,jpj) , diag_vtau_oi(jpi,jpj) ,    & 
  • branches/2016/v3_6_CMIP6_ice_diagnostics/NEMOGCM/NEMO/LIM_SRC_3/limrhg.F90

    r8156 r8172  
    129129      REAL(wp) ::   zresm                                                    ! Maximal error on ice velocity 
    130130      REAL(wp) ::   zintb, zintn                                             ! dummy argument 
    131       REAL(wp) ::   zswi 
     131      REAL(wp) ::   zswi, zfac_x, zfac_y 
    132132       
    133133      REAL(wp), POINTER, DIMENSION(:,:) ::   zpresh                          ! temporary array for ice strength 
     
    672672             diag_vtau_oi(ji,jj) = ztauy_oi(ji,jj) * zswi 
    673673 
     674             ! 2D ice mass, snow mass, area transport arrays (X, Y) 
     675             zfac_x = 0.5 * u_ice(ji,jj) * e2u(ji,jj) * zswi 
     676             zfac_y = 0.5 * v_ice(ji,jj) * e1v(ji,jj) * zswi 
     677 
     678             diag_xmtrp_ice(ji,jj) = rhoic * zfac_x * ( vt_i(ji+1,jj) + vt_i(ji,jj) ) ! ice mass transport, X-component 
     679             diag_ymtrp_ice(ji,jj) = rhoic * zfac_y * ( vt_i(ji,jj+1) + vt_i(ji,jj) ) !        ''           Y-   '' 
     680 
     681             diag_xmtrp_snw(ji,jj) = rhosn * zfac_x * ( vt_s(ji+1,jj) + vt_s(ji,jj) ) ! snow mass transport, X-component 
     682             diag_ymtrp_snw(ji,jj) = rhosn * zfac_y * ( vt_s(ji,jj+1) + vt_s(ji,jj) ) !          ''          Y-   '' 
     683 
     684             diag_xatrp(ji,jj)     = zfac_x * ( at_i(ji+1,jj) + at_i(ji,jj) )         ! area transport,      X-component 
     685             diag_yatrp(ji,jj)     = zfac_y * ( at_i(ji,jj+1) + at_i(ji,jj) )         !        ''            Y-   '' 
     686 
    674687         END DO 
    675688      END DO 
  • branches/2016/v3_6_CMIP6_ice_diagnostics/NEMOGCM/NEMO/LIM_SRC_3/limtrp.F90

    r8152 r8172  
    117117         zesold(:,:)    = SUM( SUM( e_s(:,:,1:nlay_s,:), dim=4 ), dim=3 )  
    118118 
    119          ! SIMIP diags init 
    120          diag_dmtx_dyn(:,:) = 0._wp ; diag_dmty_dyn(:,:) = 0._wp 
    121  
    122119         !--- Thickness correction init. ------------------------------- 
    123120         zatold(:,:) = SUM( a_i(:,:,:), dim=3 ) 
     
    192189                  &                                       sxxopw(:,:)  , syopw(:,:), syyopw(:,:), sxyopw(:,:)  ) 
    193190               DO jl = 1, jpl 
    194  
    195                   ! SIMIP mass transport diags 
    196                   diag_dmtx_dyn(:,:) = diag_dmtx_dyn(:,:) - ( rhoic * z0ice(:,:,jl) + rhosn * z0snw(:,:,jl) ) 
    197  
    198191                  CALL lim_adv_x( zusnit, u_ice, 1._wp, zsm, z0ice (:,:,jl), sxice(:,:,jl),   &    !--- ice volume  --- 
     192                     &                                       sxxice(:,:,jl), syice(:,:,jl), syyice(:,:,jl), sxyice(:,:,jl)  ) 
     193                  CALL lim_adv_y( zusnit, v_ice, 0._wp, zsm, z0ice (:,:,jl), sxice(:,:,jl),   &    !--- ice volume 
    199194                     &                                       sxxice(:,:,jl), syice(:,:,jl), syyice(:,:,jl), sxyice(:,:,jl)  ) 
    200195                  CALL lim_adv_x( zusnit, u_ice, 1._wp, zsm, z0snw (:,:,jl), sxsn (:,:,jl),   &    !--- snow volume  --- 
    201196                     &                                       sxxsn (:,:,jl), sysn (:,:,jl), syysn (:,:,jl), sxysn (:,:,jl)  ) 
    202  
    203                   diag_dmtx_dyn(:,:) = diag_dmtx_dyn(:,:) + ( rhoic * z0ice(:,:,jl) + rhosn * z0snw(:,:,jl) ) 
    204  
    205                   diag_dmty_dyn(:,:) = diag_dmty_dyn(:,:) - ( rhoic * z0ice(:,:,jl) + rhosn * z0snw(:,:,jl) ) 
    206  
    207                   CALL lim_adv_y( zusnit, v_ice, 0._wp, zsm, z0ice (:,:,jl), sxice(:,:,jl),   &    !--- ice volume 
    208                      &                                       sxxice(:,:,jl), syice(:,:,jl), syyice(:,:,jl), sxyice(:,:,jl)  ) 
    209197                  CALL lim_adv_y( zusnit, v_ice, 0._wp, zsm, z0snw (:,:,jl), sxsn (:,:,jl),   &    !--- snow volume 
    210198                     &                                       sxxsn (:,:,jl), sysn (:,:,jl), syysn (:,:,jl), sxysn (:,:,jl)  ) 
    211  
    212                   diag_dmty_dyn(:,:) = diag_dmty_dyn(:,:) + ( rhoic * z0ice(:,:,jl) + rhosn * z0snw(:,:,jl) ) 
    213  
    214199                  CALL lim_adv_x( zusnit, u_ice, 1._wp, zsm, z0smi (:,:,jl), sxsal(:,:,jl),   &    !--- ice salinity --- 
    215200                     &                                       sxxsal(:,:,jl), sysal(:,:,jl), syysal(:,:,jl), sxysal(:,:,jl)  ) 
     
    245230                  &                                       sxxopw(:,:)  , syopw(:,:), syyopw(:,:), sxyopw(:,:)  ) 
    246231               DO jl = 1, jpl 
    247  
    248                   ! SIMIP mass transport diags 
    249                   diag_dmty_dyn(:,:) = diag_dmty_dyn(:,:) - ( rhoic * z0ice(:,:,jl) + rhosn * z0snw(:,:,jl) ) 
    250232                  CALL lim_adv_y( zusnit, v_ice, 1._wp, zsm, z0ice (:,:,jl), sxice(:,:,jl),   &    !--- ice volume  --- 
     233                     &                                       sxxice(:,:,jl), syice(:,:,jl), syyice(:,:,jl), sxyice(:,:,jl)  ) 
     234                  CALL lim_adv_x( zusnit, u_ice, 0._wp, zsm, z0ice (:,:,jl), sxice(:,:,jl),   &    !--- ice volume  --- 
    251235                     &                                       sxxice(:,:,jl), syice(:,:,jl), syyice(:,:,jl), sxyice(:,:,jl)  ) 
    252236                  CALL lim_adv_y( zusnit, v_ice, 1._wp, zsm, z0snw (:,:,jl), sxsn (:,:,jl),   &    !--- snow volume  --- 
    253237                     &                                       sxxsn (:,:,jl), sysn (:,:,jl), syysn (:,:,jl), sxysn (:,:,jl)  ) 
    254                   diag_dmty_dyn(:,:) = diag_dmty_dyn(:,:) + ( rhoic * z0ice(:,:,jl) + rhosn * z0snw(:,:,jl) ) 
    255  
    256                   diag_dmtx_dyn(:,:) = diag_dmtx_dyn(:,:) - ( rhoic * z0ice(:,:,jl) + rhosn * z0snw(:,:,jl) ) 
    257                   CALL lim_adv_x( zusnit, u_ice, 0._wp, zsm, z0ice (:,:,jl), sxice(:,:,jl),   &    !--- ice volume  --- 
    258                      &                                       sxxice(:,:,jl), syice(:,:,jl), syyice(:,:,jl), sxyice(:,:,jl)  ) 
    259238                  CALL lim_adv_x( zusnit, u_ice, 0._wp, zsm, z0snw (:,:,jl), sxsn (:,:,jl),   &    !--- snow volume  --- 
    260239                     &                                       sxxsn (:,:,jl), sysn (:,:,jl), syysn (:,:,jl), sxysn (:,:,jl)  ) 
    261                   diag_dmtx_dyn(:,:) = diag_dmtx_dyn(:,:) + ( rhoic * z0ice(:,:,jl) + rhosn * z0snw(:,:,jl) ) 
    262  
    263240                  CALL lim_adv_y( zusnit, v_ice, 1._wp, zsm, z0smi (:,:,jl), sxsal(:,:,jl),   &    !--- ice salinity --- 
    264241                     &                                       sxxsal(:,:,jl), sysal(:,:,jl), syysal(:,:,jl), sxysal(:,:,jl)  ) 
     
    289266         ENDIF 
    290267 
    291          ! SIMIP diags 
    292          diag_dmtx_dyn(:,:) = diag_dmtx_dyn(:,:) / rdt_ice  
    293          diag_dmty_dyn(:,:) = diag_dmty_dyn(:,:) / rdt_ice 
    294  
    295268         !------------------------------------------- 
    296269         ! Recover the properties from their contents 
  • branches/2016/v3_6_CMIP6_ice_diagnostics/NEMOGCM/NEMO/LIM_SRC_3/limwri.F90

    r8158 r8172  
    6868         &         zdiag_volu_sh  
    6969 
    70       ! Strait / passage fluxes (SIMIP) 
    71       REAL(wp), DIMENSION(4) ::  &                                    ! Strait fluxes for output 
    72          &         zdiag_area_strait  ,   &                                    ! 1=Fram Strait, 2=CAA, 3= Barents, 4 = Bering 
    73          &         zdiag_mice_strait  ,   & 
    74          &         zdiag_msno_strait 
    75  
    76       REAL(wp) :: zfarea_u, zfmice_u, zfmsno_u, zfarea_v, zfmice_v, zfmsno_v   ! dummy fluxes 
    77  
    78       REAL(wp), DIMENSION(11) :: & 
    79          &         zui, zuj, zvi, zvj                                          ! strait addresses 
    80  
    81       INTEGER  :: Nu, Nv, &                                                    ! passage size 
    82                   i_strait                                                     ! strait number 
    83  
    84       INTEGER, DIMENSION(4)  :: ji0, ji1, jj0, jj1 
     70!     ! Strait / passage fluxes (SIMIP) 
     71!     REAL(wp), DIMENSION(4) ::  &                                    ! Strait fluxes for output 
     72!        &         zdiag_area_strait  ,   &                                    ! 1=Fram Strait, 2=CAA, 3= Barents, 4 = Bering 
     73!        &         zdiag_mice_strait  ,   & 
     74!        &         zdiag_msno_strait 
     75 
     76!     REAL(wp) :: zfarea_u, zfmice_u, zfmsno_u, zfarea_v, zfmice_v, zfmsno_v   ! dummy fluxes 
     77 
     78!     REAL(wp), DIMENSION(11) :: & 
     79!        &         zui, zuj, zvi, zvj                                          ! strait addresses 
     80 
     81!     INTEGER  :: Nu, Nv, &                                                    ! passage size 
     82!                 i_strait                                                     ! strait number 
     83 
     84!     INTEGER, DIMENSION(4)  :: ji0, ji1, jj0, jj1 
    8585       
    8686      !!------------------------------------------------------------------- 
     
    293293      IF  ( iom_use( "wfxsum"   ) ) CALL iom_put( "wfxsum"      ,   wfx_sum                  )          ! Freshwater flux from sea-ice surface 
    294294 
    295       IF  ( iom_use( "dmtxdyn"  ) ) CALL iom_put( "dmtxdyn"     ,   diag_dmtx_dyn            )          ! X-component of sea-ice mass transport 
    296       IF  ( iom_use( "dmtydyn"  ) ) CALL iom_put( "dmtydyn"     ,   diag_dmty_dyn            )          ! Y-component of sea-ice mass transport 
    297  
    298295      IF  ( iom_use( "utau_oi"  ) ) CALL iom_put( "utau_oi"     ,   diag_utau_oi*zswi        )          ! X-component of ocean stress on sea ice 
    299296      IF  ( iom_use( "vtau_oi"  ) ) CALL iom_put( "vtau_oi"     ,   diag_vtau_oi*zswi        )          ! Y-component of ocean stress on sea ice 
     
    310307      IF  ( iom_use( "normstr"  ) ) CALL iom_put( "normstr"     ,   diag_sig1   *zswi        )          ! Normal stress 
    311308      IF  ( iom_use( "sheastr"  ) ) CALL iom_put( "sheastr"     ,   diag_sig2   *zswi        )          ! Shear stress 
     309 
     310      IF  ( iom_use( "xmtrpice" ) ) CALL iom_put( "xmtrpice"     ,  diag_xmtrp_ice           )          ! X-component of sea-ice mass transport 
     311      IF  ( iom_use( "ymtrpice" ) ) CALL iom_put( "ymtrpice"     ,  diag_ymtrp_ice           )          ! Y-component of sea-ice mass transport 
     312 
     313      IF  ( iom_use( "xmtrpsnw" ) ) CALL iom_put( "xmtrpsnw"     ,  diag_xmtrp_snw           )          ! X-component of snow mass transport 
     314      IF  ( iom_use( "ymtrpsnw" ) ) CALL iom_put( "ymtrpsnw"     ,  diag_ymtrp_snw           )          ! Y-component of snow mass transport 
     315 
     316      IF  ( iom_use( "xatrp"    ) ) CALL iom_put( "xatrp"        ,  diag_xatrp               )          ! X-component of ice area transport 
     317      IF  ( iom_use( "yatrp"    ) ) CALL iom_put( "yatrp"        ,  diag_yatrp               )          ! Y-component of ice area transport 
    312318 
    313319      !-------------------------------- 
     
    356362 
    357363      ENDIF  
    358  
    359       !-------------------------------- 
    360       ! Fluxes through straits (SIMIP) 
    361       !-------------------------------- 
    362       ! 
    363       ! Valid only for ORCA-like grids 
    364       ! 
    365       ! 4 Arctic passages are considered (Fram, CAA, Barents, Bering; see Notz et al (GMD 2016) for definitions) 
    366       ! 
    367       ! Fram and Bering  straits are easy because they follow parallels 
    368       ! Barents and Canadian Arctic Archipelago are less easy because they do not, which is why they look so awful. 
    369       !  
    370  
    371       IF ( iom_use( "strait_arfl" ) .OR. iom_use( "strait_mifl" ) .OR. iom_use( "strait_msfl" ) .AND. cp_cfg == "orca" ) THEN 
    372  
    373          zdiag_area_strait(:) = 0._wp   ;   zdiag_mice_strait(:) = 0._wp   ;   zdiag_msno_strait(:) = 0._wp 
    374     
    375          !------------------------------ 
    376          ! === Fram & Bering Straits === 
    377          !------------------------------ 
    378            
    379          SELECT CASE ( jp_cfg )  
    380            
    381          CASE ( 2 )   ! --- ORCA2 
    382            
    383             ! Fram Strait   (i_strait = 1) 
    384             ji0(1) = 133   ;   ji1(1) = 136 
    385             jj0(1) = 136  
    386  
    387             ! Bering Strait (i_strait = 4) 
    388             ji0(4) = 55    ;   ji1(4) = 56 
    389             jj0(4) = 122 
    390            
    391          CASE ( 1 )   ! --- eORCA1 
    392            
    393             ! Fram Strait 
    394             ji0(1) = 268   ;   ji1(1) = 277 
    395             jj0(1) = 311 
    396  
    397             ! Bering Strait 
    398             ji0(4) = 113   ;   jj1(4) = 115 
    399             jj0(4) = 285 
    400             
    401          END SELECT 
    402            
    403          DO i_strait = 1, 4, 3 
    404  
    405             DO ji = mi0( ji0(i_strait) ), mi1(ji1 (i_strait) ) 
    406                jj = mj0( jj0(i_strait) ) 
    407     
    408                zdiag_area_strait(i_strait) = zdiag_area_strait(i_strait)                                 &     ! --- ice area flux --- 
    409                    &                + at_i(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 )         &     ! northwards (positive) flow 
    410                    &                + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( v_ice(ji,jj-1), 0.0 )               ! southwards (negative) flow 
    411        
    412                zdiag_mice_strait(i_strait) = zdiag_mice_strait(i_strait) + rhoic *                       &     ! --- ice mass flux  --- 
    413                    &                ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 )         &  
    414                    &                + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( v_ice(ji,jj-1), 0.0 ) )          
    415        
    416                zdiag_msno_strait(i_strait) = zdiag_msno_strait(i_strait) + rhosn *                       &     ! --- snow mass flux --- 
    417                    &                ( vt_s(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 )         &  
    418                    &                + vt_s(ji,jj  ) * e12t(ji,jj)   * MIN( v_ice(ji,jj-1), 0.0 ) )   
    419     
    420             END DO 
    421  
    422          END DO 
    423  
    424          !--------------------- 
    425          ! === Barents opening 
    426          !--------------------- 
    427     
    428          SELECT CASE ( jp_cfg )  
    429  
    430             CASE ( 1 )   ! 'eORCA1' 
    431  
    432                Nu = 11   ! U-Flow 
    433                zui(1:Nu) = (/ 282,283,284,285,286,286,287,288,289,290,292/) 
    434                zuj(1:Nu) = (/ 308,307,306,305,304,303,302,301,300,299,298/) 
    435  
    436                Nv = 9    ! V-Flow 
    437                zvi(1:Nv) = (/ 282,283,284,285,286,287,288,289,290/) 
    438                zvj(1:Nv) = (/ 308,307,306,305,303,302,301,300,299/) 
    439  
    440             CASE ( 2 )   ! 'ORCA2' 
    441  
    442                Nu = 5    ! U-Flow 
    443                zui(1:Nu) = (/ 141,142,142,143,144 /) 
    444                zuj(1:Nu) = (/ 134,133,132,131,130 /) 
    445  
    446                Nv = 4    ! V-Flow 
    447                zvi(1:Nv) = (/ 140,141,142,143 /) 
    448                zvj(1:Nv) = (/ 135,134,132,131 /) 
    449  
    450          END SELECT 
    451  
    452          ! Barents U-flow 
    453          zfarea_u = 0._wp   ;   zfmice_u = 0._wp   ;   zfmsno_u = 0._wp 
    454     
    455          DO ii = 1, Nu 
    456  
    457             ji = mi0(zui(ii)) 
    458             jj = mj0(zuj(ii)) 
    459  
    460             zfarea_u          = zfarea_u                                           & ! --- ice area zonal flux --- 
    461                 &             + at_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         & ! --- northward 
    462                 &             + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 )           ! --- southward 
    463             zfmice_u          = zfmice_u + rhoic *                                 & ! --- ice mass zonal flux ---  
    464                 &             ( vt_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         &    
    465                 &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 ) )           
    466             zfmsno_u          = zfmsno_u + rhosn *                                 & ! --- snow mass zonal flux ---  
    467                 &             ( vt_s(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         &    
    468                 &             + vt_s(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 ) )           
    469          END DO 
    470     
    471          ! Barents V-flow 
    472          zfarea_v = 0._wp   ;   zfmice_v = 0._wp   ;   zfmsno_v = 0._wp 
    473  
    474          DO ii  = 1, Nv   
    475  
    476             ji = mi0(zvi(ii)) 
    477             jj = mj0(zvj(ii)) 
    478  
    479             zfarea_v          = zfarea_v                                           & ! --- ice area meridian flux --- 
    480                 &             + at_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & ! --- eastward 
    481                 &             + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 )           ! --- westward 
    482             zfmice_v          = zfmice_v + rhoic *                                 & ! --- ice mass meridian flux --- 
    483                 &             ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & ! 
    484                 &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 ) )         ! 
    485             zfmsno_v          = zfmsno_v + rhosn *                                 & ! --- snow mass meridian flux --- 
    486                 &             ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & ! 
    487                 &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 ) )         ! 
    488          END DO 
    489     
    490          ! Sum Barents U-/V- contributions 
    491          zdiag_area_strait(3) = zfarea_u + zfarea_v  
    492          zdiag_mice_strait(3) = zfmice_u + zfmice_v 
    493          zdiag_msno_strait(3) = zfmsno_u + zfmsno_v 
    494  
    495          !--------------------- 
    496          ! === CAA throughflow 
    497          !--------------------- 
    498     
    499          SELECT CASE ( jp_cfg )  
    500  
    501             CASE ( 1 )   ! eORCA1 
    502  
    503                ! V-flow through Nares Strait 
    504                Nv = 4 
    505                zvi(1:Nv) = (/ 254,255,256,257 /) 
    506                zvj(1:Nv) = (/ 317,317,317,317 /) 
    507  
    508                ! U-flow through Queen Elisabeth Islands and McClure straits 
    509                Nu = 8  
    510                zui(1:Nu) = (/ 231,231,231,  132,132,132,132,132  /) 
    511                zuj(1:Nu) = (/ 328,329,330,  318,319,320,321,322  /) 
    512  
    513                zfarea_u = 0._wp   ;   zfmice_u = 0._wp   ;   zfmsno_u = 0._wp 
    514  
    515                DO ii = 1, Nu 
    516  
    517                   ji = mi0(zui(ii)) 
    518                   jj = mj0(zuj(ii)) 
    519  
    520                   zfarea_u          = zfarea_u                                                           & ! --- ice area zonal flux --- 
    521                       &             + at_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         & ! --- eastward 
    522                       &             + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 )           ! --- westward 
    523                   zfmice_u          = zfmice_u + rhoic *                                                 & ! --- ice mass zonal flux ---  
    524                       &             ( vt_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         &    
    525                       &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 ) )           
    526                   zfmsno_u          = zfmsno_u + rhosn *                                                 & ! --- snow mass zonal flux ---  
    527                       &             ( vt_s(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         &    
    528                       &             + vt_s(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 ) )           
    529  
    530                END DO 
    531  
    532  
    533             CASE ( 2 )   ! ORCA2 
    534  
    535                ! V-flow through Nares Strait 
    536                Nv = 2 
    537                zvi(1:Nv) = (/ 117,118 /) 
    538                zvj(1:Nv) = (/ 145,145 /) 
    539  
    540                ! U-flow through Queen Elisabeth Islands and McClure straits (not resolved in ORCA2) 
    541                zfarea_u = 0._wp   ;   zfmice_u = 0._wp   ;   zfmsno_u = 0._wp 
    542  
    543             END SELECT 
    544     
    545          ! V-flow through Nares Strait 
    546          zfarea_v = 0._wp   ;   zfmice_v = 0._wp   ;   zfmsno_v = 0._wp 
    547     
    548          DO ii = 1, Nv   
    549  
    550             ji = mi0(zvi(ii)) 
    551             jj = mj0(zvj(ii)) 
    552  
    553             zfarea_v          = zfarea_v                                           & ! --- ice area meridian flux --- 
    554                 &             + at_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & ! --- eastward 
    555                 &             + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 )           ! --- westward 
    556             zfmice_v          = zfmice_v + rhoic *                                 & ! --- ice mass meridian flux --- 
    557                 &             ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & ! 
    558                 &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 ) )         ! 
    559             zfmsno_v          = zfmsno_v + rhosn *                                 & ! --- snow mass meridian flux --- 
    560                 &             ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & ! 
    561                 &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 ) )         ! 
    562  
    563          END DO 
    564  
    565          ! Sum U/V contributions 
    566          zdiag_area_strait(2) = zfarea_u + zfarea_v  
    567          zdiag_mice_strait(2) = zfmice_u + zfmice_v 
    568          zdiag_msno_strait(2) = zfmsno_u + zfmsno_v 
    569     
    570          ! === Ncdf output 
    571          IF ( iom_use("strait_arfl") ) CALL iom_put( "strait_arfl", zdiag_area_strait ) 
    572          IF ( iom_use("strait_mifl") ) CALL iom_put( "strait_mifl", zdiag_mice_strait ) 
    573          IF ( iom_use("strait_msfl") ) CALL iom_put( "strait_msfl", zdiag_msno_strait )  
    574  
    575          WRITE(numout,*) " area flx ", zdiag_area_strait(:) 
    576          WRITE(numout,*) " mice flx ", zdiag_mice_strait(:) 
    577          WRITE(numout,*) " msno flx ", zdiag_msno_strait(:) 
    578  
    579       ENDIF 
     364!      !------------------------------------- 
     365!      ! Area, ice mass and snow mass fluxes 
     366!      !------------------------------------- 
     367!      ! SIMIP requires fluxes through passages and straits 
     368!      ! Easiest implementation is via offline python script 
     369!      ! strait_ar_x 
     370! 
     371!      !-------------------------------- 
     372!      ! Fluxes through straits (SIMIP) 
     373!      !-------------------------------- 
     374!      ! 
     375!      ! Valid only for ORCA-like grids 
     376!      ! 
     377!      ! 4 Arctic passages are considered (Fram, CAA, Barents, Bering; see Notz et al (GMD 2016) for definitions) 
     378!      ! 
     379!      ! Fram and Bering  straits are easy because they follow parallels 
     380!      ! Barents and Canadian Arctic Archipelago are less easy because they do not, which is why they look so awful. 
     381!      !  
     382! 
     383!      IF ( iom_use( "strait_arfl" ) .OR. iom_use( "strait_mifl" ) .OR. iom_use( "strait_msfl" ) .AND. cp_cfg == "orca" ) THEN 
     384! 
     385!         zdiag_area_strait(:) = 0._wp   ;   zdiag_mice_strait(:) = 0._wp   ;   zdiag_msno_strait(:) = 0._wp 
     386!    
     387!         !------------------------------ 
     388!         ! === Fram & Bering Straits === 
     389!         !------------------------------ 
     390!           
     391!         SELECT CASE ( jp_cfg )  
     392!           
     393!         CASE ( 2 )   ! --- ORCA2 
     394!           
     395!            ! Fram Strait   (i_strait = 1) 
     396!            ji0(1) = 133   ;   ji1(1) = 136 
     397!            jj0(1) = 136  
     398! 
     399!            ! Bering Strait (i_strait = 4) 
     400!            ji0(4) = 55    ;   ji1(4) = 56 
     401!            jj0(4) = 122 
     402!           
     403!         CASE ( 1 )   ! --- eORCA1 
     404!           
     405!            ! Fram Strait 
     406!            ji0(1) = 268   ;   ji1(1) = 277 
     407!            jj0(1) = 311 
     408! 
     409!            ! Bering Strait 
     410!            ji0(4) = 113   ;   jj1(4) = 115 
     411!            jj0(4) = 285 
     412!            
     413!         END SELECT 
     414!           
     415!         DO i_strait = 1, 4, 3 
     416! 
     417!            DO ji = mi0( ji0(i_strait) ), mi1(ji1 (i_strait) ) 
     418!               jj = mj0( jj0(i_strait) ) 
     419!    
     420!               zdiag_area_strait(i_strait) = zdiag_area_strait(i_strait)                                 &     ! --- ice area flux --- 
     421!                   &                + at_i(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 )         &     ! northwards (positive) flow 
     422!                   &                + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( v_ice(ji,jj-1), 0.0 )               ! southwards (negative) flow 
     423!       
     424!               zdiag_mice_strait(i_strait) = zdiag_mice_strait(i_strait) + rhoic *                       &     ! --- ice mass flux  --- 
     425!                   &                ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 )         &  
     426!                   &                + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( v_ice(ji,jj-1), 0.0 ) )          
     427!       
     428!               zdiag_msno_strait(i_strait) = zdiag_msno_strait(i_strait) + rhosn *                       &     ! --- snow mass flux --- 
     429!                   &                ( vt_s(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 )         &  
     430!                   &                + vt_s(ji,jj  ) * e12t(ji,jj)   * MIN( v_ice(ji,jj-1), 0.0 ) )   
     431!    
     432!            END DO 
     433! 
     434!         END DO 
     435! 
     436!         !--------------------- 
     437!         ! === Barents opening 
     438!         !--------------------- 
     439!    
     440!         SELECT CASE ( jp_cfg )  
     441! 
     442!            CASE ( 1 )   ! 'eORCA1' 
     443! 
     444!               Nu = 11   ! U-Flow 
     445!               zui(1:Nu) = (/ 282,283,284,285,286,286,287,288,289,290,292/) 
     446!               zuj(1:Nu) = (/ 308,307,306,305,304,303,302,301,300,299,298/) 
     447! 
     448!               Nv = 9    ! V-Flow 
     449!               zvi(1:Nv) = (/ 282,283,284,285,286,287,288,289,290/) 
     450!               zvj(1:Nv) = (/ 308,307,306,305,303,302,301,300,299/) 
     451! 
     452!            CASE ( 2 )   ! 'ORCA2' 
     453! 
     454!               Nu = 5    ! U-Flow 
     455!               zui(1:Nu) = (/ 141,142,142,143,144 /) 
     456!               zuj(1:Nu) = (/ 134,133,132,131,130 /) 
     457! 
     458!               Nv = 4    ! V-Flow 
     459!               zvi(1:Nv) = (/ 140,141,142,143 /) 
     460!               zvj(1:Nv) = (/ 135,134,132,131 /) 
     461! 
     462!         END SELECT 
     463! 
     464!         ! Barents U-flow 
     465!         zfarea_u = 0._wp   ;   zfmice_u = 0._wp   ;   zfmsno_u = 0._wp 
     466!    
     467!         DO ii = 1, Nu 
     468! 
     469!            ji = mi0(zui(ii)) 
     470!            jj = mj0(zuj(ii)) 
     471! 
     472!            zfarea_u          = zfarea_u                                           & ! --- ice area zonal flux --- 
     473!                &             + at_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         & ! --- northward 
     474!                &             + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 )           ! --- southward 
     475!            zfmice_u          = zfmice_u + rhoic *                                 & ! --- ice mass zonal flux ---  
     476!                &             ( vt_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         &    
     477!                &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 ) )           
     478!            zfmsno_u          = zfmsno_u + rhosn *                                 & ! --- snow mass zonal flux ---  
     479!                &             ( vt_s(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         &    
     480!                &             + vt_s(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 ) )           
     481!         END DO 
     482!    
     483!         ! Barents V-flow 
     484!         zfarea_v = 0._wp   ;   zfmice_v = 0._wp   ;   zfmsno_v = 0._wp 
     485! 
     486!         DO ii  = 1, Nv   
     487! 
     488!            ji = mi0(zvi(ii)) 
     489!            jj = mj0(zvj(ii)) 
     490! 
     491!            zfarea_v          = zfarea_v                                           & ! --- ice area meridian flux --- 
     492!                &             + at_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & ! --- eastward 
     493!                &             + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 )           ! --- westward 
     494!            zfmice_v          = zfmice_v + rhoic *                                 & ! --- ice mass meridian flux --- 
     495!                &             ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & ! 
     496!                &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 ) )         ! 
     497!            zfmsno_v          = zfmsno_v + rhosn *                                 & ! --- snow mass meridian flux --- 
     498!                &             ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & ! 
     499!                &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 ) )         ! 
     500!         END DO 
     501!    
     502!         ! Sum Barents U-/V- contributions 
     503!         zdiag_area_strait(3) = zfarea_u + zfarea_v  
     504!         zdiag_mice_strait(3) = zfmice_u + zfmice_v 
     505!         zdiag_msno_strait(3) = zfmsno_u + zfmsno_v 
     506! 
     507!         !--------------------- 
     508!         ! === CAA throughflow 
     509!         !--------------------- 
     510!    
     511!         SELECT CASE ( jp_cfg )  
     512! 
     513!            CASE ( 1 )   ! eORCA1 
     514! 
     515!               ! V-flow through Nares Strait 
     516!               Nv = 4 
     517!               zvi(1:Nv) = (/ 254,255,256,257 /) 
     518!               zvj(1:Nv) = (/ 317,317,317,317 /) 
     519! 
     520!               ! U-flow through Queen Elisabeth Islands and McClure straits 
     521!               Nu = 8  
     522!               zui(1:Nu) = (/ 231,231,231,  132,132,132,132,132  /) 
     523!               zuj(1:Nu) = (/ 328,329,330,  318,319,320,321,322  /) 
     524! 
     525!               zfarea_u = 0._wp   ;   zfmice_u = 0._wp   ;   zfmsno_u = 0._wp 
     526! 
     527!               DO ii = 1, Nu 
     528! 
     529!                  ji = mi0(zui(ii)) 
     530!                  jj = mj0(zuj(ii)) 
     531! 
     532!                  zfarea_u          = zfarea_u                                                           & ! --- ice area zonal flux --- 
     533!                      &             + at_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         & ! --- eastward 
     534!                      &             + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 )           ! --- westward 
     535!                  zfmice_u          = zfmice_u + rhoic *                                                 & ! --- ice mass zonal flux ---  
     536!                      &             ( vt_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         &    
     537!                      &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 ) )           
     538!                  zfmsno_u          = zfmsno_u + rhosn *                                                 & ! --- snow mass zonal flux ---  
     539!                      &             ( vt_s(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         &    
     540!                      &             + vt_s(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 ) )           
     541! 
     542!               END DO 
     543! 
     544! 
     545!            CASE ( 2 )   ! ORCA2 
     546! 
     547!               ! V-flow through Nares Strait 
     548!               Nv = 2 
     549!               zvi(1:Nv) = (/ 117,118 /) 
     550!               zvj(1:Nv) = (/ 145,145 /) 
     551! 
     552!               ! U-flow through Queen Elisabeth Islands and McClure straits (not resolved in ORCA2) 
     553!               zfarea_u = 0._wp   ;   zfmice_u = 0._wp   ;   zfmsno_u = 0._wp 
     554! 
     555!            END SELECT 
     556!    
     557!         ! V-flow through Nares Strait 
     558!         zfarea_v = 0._wp   ;   zfmice_v = 0._wp   ;   zfmsno_v = 0._wp 
     559!    
     560!         DO ii = 1, Nv   
     561! 
     562!            ji = mi0(zvi(ii)) 
     563!            jj = mj0(zvj(ii)) 
     564! 
     565!            zfarea_v          = zfarea_v                                           & ! --- ice area meridian flux --- 
     566!                &             + at_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & ! --- eastward 
     567!                &             + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 )           ! --- westward 
     568!            zfmice_v          = zfmice_v + rhoic *                                 & ! --- ice mass meridian flux --- 
     569!                &             ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & ! 
     570!                &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 ) )         ! 
     571!            zfmsno_v          = zfmsno_v + rhosn *                                 & ! --- snow mass meridian flux --- 
     572!                &             ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & ! 
     573!                &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 ) )         ! 
     574! 
     575!         END DO 
     576! 
     577!         ! Sum U/V contributions 
     578!         zdiag_area_strait(2) = zfarea_u + zfarea_v  
     579!         zdiag_mice_strait(2) = zfmice_u + zfmice_v 
     580!         zdiag_msno_strait(2) = zfmsno_u + zfmsno_v 
     581!    
     582!         ! === Ncdf output 
     583!         IF ( iom_use("strait_arfl") ) CALL iom_put( "strait_arfl", zdiag_area_strait ) 
     584!         IF ( iom_use("strait_mifl") ) CALL iom_put( "strait_mifl", zdiag_mice_strait ) 
     585!         IF ( iom_use("strait_msfl") ) CALL iom_put( "strait_msfl", zdiag_msno_strait )  
     586! 
     587!         WRITE(numout,*) " area flx ", zdiag_area_strait(:) 
     588!         WRITE(numout,*) " mice flx ", zdiag_mice_strait(:) 
     589!         WRITE(numout,*) " msno flx ", zdiag_msno_strait(:) 
     590! 
     591!      ENDIF 
    580592 
    581593      !     !  Create an output files (output.lim.abort.nc) if S < 0 or u > 20 m/s 
Note: See TracChangeset for help on using the changeset viewer.