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 7517 for branches/2016/v3_6_CMIP6_ice_diagnostics/NEMOGCM – NEMO

Ignore:
Timestamp:
2016-12-21T16:38:25+01:00 (7 years ago)
Author:
vancop
Message:

more outputs

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

Legend:

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

    r7506 r7517  
    430430   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_intstrx  !: X-direction internal stress (N/m2) 
    431431   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_intstry  !: Y-direction internal stress (N/m2) 
     432   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_sig1     !: Average normal stress in sea ice    
     433   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_sig2     !: Maximum shear stress in sea ice 
     434   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   diag_shear    !: Maximum shear of sea-ice velocity field 
    432435 
    433436   ! 
     
    538541                diag_corstrx(jpi,jpj) , diag_corstry(jpi,jpj) ,    & 
    539542                diag_intstrx(jpi,jpj) , diag_intstry(jpi,jpj) ,    & 
     543                diag_sig1(jpi,jpj)    , diag_sig2(jpi,jpj)    ,    & 
    540544                STAT = ierr(ii) ) 
    541545 
  • branches/2016/v3_6_CMIP6_ice_diagnostics/NEMOGCM/NEMO/LIM_SRC_3/limrhg.F90

    r7506 r7517  
    129129      REAL(wp) ::   zresm                                                    ! Maximal error on ice velocity 
    130130      REAL(wp) ::   zintb, zintn                                             ! dummy argument 
     131      REAL(wp) ::   zswi 
    131132       
    132133      REAL(wp), POINTER, DIMENSION(:,:) ::   zpresh                          ! temporary array for ice strength 
     
    639640      stress12_i(:,:) = zs12(:,:) 
    640641 
    641       ! SIMIP diagnostic internal stress 
     642      ! SIMIP diagnostic internal stress terms (N/m2) 
    642643      diag_dssh_dx(:,:) = zspgU(:,:) 
    643644      diag_dssh_dy(:,:) = zspgV(:,:) 
     
    649650      CALL lbc_lnk( diag_intstrx, 'U', -1. ) 
    650651      CALL lbc_lnk( diag_intstry, 'V', -1. ) 
     652 
     653      ! SIMIP diagnostic stress tensor invariants (normal and shear stress N/m) 
     654      DO jj = k_j1+1, k_jpj-1 
     655         DO ji = 2, jpim1 
     656             zswi  = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - 1.0e-6 ) ) ! 1 if ice, 0 if no ice 
     657             diag_sig1(ji,jj) = ( zs1(ji,jj) + zs2(ji,jj) ) * zswi 
     658             diag_sig2(ji,jj) = SQRT( ( zs1(ji,jj) - zs2(ji,jj) )**2 + 4*zs12(ji,jj)**2 ) * zswi 
     659         END DO 
     660      END DO 
     661      CALL lbc_lnk( diag_sig1, 'T', 1. ) 
     662      CALL lbc_lnk( diag_sig2, 'T', 1. ) 
    651663 
    652664      ! 
     
    686698         ENDIF 
    687699      ENDIF 
     700 
    688701      ! 
    689702      CALL wrk_dealloc( jpi,jpj, zpresh, z1_e1t0, z1_e2t0, zp_delt ) 
  • branches/2016/v3_6_CMIP6_ice_diagnostics/NEMOGCM/NEMO/LIM_SRC_3/limwri.F90

    r7506 r7517  
    1818   USE sbc_ice         ! Surface boundary condition: ice fields 
    1919   USE ice 
     20   USE dom_ice 
    2021   USE limvar 
    2122   USE in_out_manager 
     
    5253      INTEGER, INTENT(in) ::   kindic   ! if kindic < 0 there has been an error somewhere 
    5354      ! 
    54       INTEGER  ::  ji, jj, jk, jl  ! dummy loop indices 
     55      INTEGER  ::  ii, ji, jj, jk, jl  ! dummy loop indices 
    5556      REAL(wp) ::  z1_365 
    5657      REAL(wp) ::  z2da, z2db, ztmp, zrho1, zrho2 
    57       REAL(wp) ::  zdiag_area_nh, zdiag_extt_nh, zdiag_area_sh, zdiag_extt_sh, zdiag_volu_nh, zdiag_volu_sh 
    58        
    5958      REAL(wp), POINTER, DIMENSION(:,:,:) ::  zswi2 
    6059      REAL(wp), POINTER, DIMENSION(:,:)   ::  z2d, zswi    ! 2D workspace 
    6160 
     61      ! Global ice diagnostics (SIMIP) 
     62      REAL(wp) ::  zdiag_area_nh, &   ! area, extent, volume 
     63         &         zdiag_extt_nh, & 
     64         &         zdiag_area_sh, &  
     65         &         zdiag_extt_sh, &  
     66         &         zdiag_volu_nh, &  
     67         &         zdiag_volu_sh  
     68 
     69      ! Strait / passage fluxes (SIMIP) 
     70      REAL(wp), DIMENSION(4) ::  &                                    ! Strait fluxes for output 
     71         &         zdiag_area_strait  ,   &                                    ! 1=Fram Strait, 2=CAA, 3= Barents, 4 = Bering 
     72         &         zdiag_mice_strait  ,   & 
     73         &         zdiag_msno_strait 
     74 
     75      REAL(wp) :: zfarea_u, zfmice_u, zfmsno_u, zfarea_v, zfmice_v, zfmsno_v   ! dummy fluxes 
     76 
     77      REAL(wp), DIMENSION(11) :: & 
     78         &         zui, zuj, zvi, zvj                                          ! strait addresses 
     79 
     80      INTEGER  :: Nu, Nv                                                       ! passage size 
     81 
     82      INTEGER, PARAMETER :: i_grid = 2                                         ! grid type (eORCA1 = 1, ORCA2 = 2) 
     83       
    6284      !!------------------------------------------------------------------- 
    6385 
     
    139161 
    140162      CALL iom_put( "icestr"      , strength * zswi )    ! ice strength 
    141       CALL iom_put( "idive"       , divu_i * 1.0e8      )    ! divergence 
    142       CALL iom_put( "ishear"      , shear_i * 1.0e8     )    ! shear 
     163      CALL iom_put( "idive"       , divu_i              )    ! divergence 
     164      CALL iom_put( "ishear"      , shear_i             )    ! shear 
    143165      CALL iom_put( "snowvol"     , vt_s   * zswi       )        ! snow volume 
    144166       
     
    257279      CALL iom_put( "intstry"     ,   diag_intstry*zswi        )          ! Internal force term in force balance (y-component) 
    258280 
     281      CALL iom_put( "normstr"     ,   diag_sig1   *zswi        )          ! Normal stress 
     282      CALL iom_put( "sheastr"     ,   diag_sig2   *zswi        )          ! Shear stress 
     283 
    259284      !-------------------------------- 
    260       ! Global ice diagnostics 
     285      ! Global ice diagnostics (SIMIP) 
    261286      !-------------------------------- 
    262  
    263       IF ( iom_use ( "NH_icearea" ) .OR. ( iom_use( "NH_icevolu" ) ) THEN             ! NH ice area  
    264  
    265            WHERE( fcor > 0 ); zswi(:,:) = 1.;  
    266            ELSEWHERE        ; zswi(:,:) = 0. 
    267            END WHERE  
    268  
    269            IF ( iom_use ( "NH_icearea" ) THEN 
    270               zdiag_area_nh = glob_sum( at_i(:,:) * zswi(:,:) * e12t(:,:) ) / 1.0e12 
     287      ! 
     288      ! What follows could be a separate routine 
     289      ! 
     290 
     291       IF ( iom_use( "NH_icearea" ) .OR. iom_use( "NH_icevolu" ) ) THEN    ! NH ice area  
     292  
     293         WHERE( fcor > 0 ); zswi(:,:) = 1.0e-12;  
     294         ELSEWHERE        ; zswi(:,:) = 0. 
     295         END WHERE  
     296 
     297           IF ( iom_use( "NH_icearea" ) ) THEN 
     298              zdiag_area_nh = glob_sum( at_i(:,:) * zswi(:,:) * e12t(:,:) ) 
    271299              CALL iom_put( "NH_icearea", zdiag_area_nh ) 
    272300           ENDIF 
    273            IF ( iom_use ( "NH_icevolu" ) THEN 
    274               zdiag_volu_nh = glob_sum( vt_i(:,:) * zswi(:,:) * e12t(:,:) ) / 1.0e12 
     301           IF ( iom_use( "NH_icevolu" ) ) THEN 
     302              zdiag_volu_nh = glob_sum( vt_i(:,:) * zswi(:,:) * e12t(:,:) ) 
    275303              CALL iom_put( "NH_icevolu", zdiag_volu_nh ) 
    276304           ENDIF 
     
    278306      ENDIF  
    279307 
    280       IF ( iom_use ( "NH_iceextt" ) ) THEN                                            ! NH ice extt  
    281  
    282            WHERE( fcor > 0 .AND. at_i > 0.15 ); zswi(:,:) = 1.;  
    283            ELSEWHERE                          ; zswi(:,:) = 0. 
    284            END WHERE  
    285  
    286            zdiag_extt_nh = glob_sum( zswi(:,:) * e12t(:,:) ) / 1.0e12 
    287            CALL iom_put( "NH_iceextt", zdiag_extt_nh ) 
     308      IF ( iom_use( "NH_iceextt" ) ) THEN                                   ! NH ice extt  
     309 
     310         WHERE( fcor > 0 .AND. at_i > 0.15 ); zswi(:,:) = 1.0e-12;  
     311         ELSEWHERE                          ; zswi(:,:) = 0. 
     312         END WHERE  
     313 
     314         zdiag_extt_nh = glob_sum( zswi(:,:) * e12t(:,:) ) 
     315         CALL iom_put( "NH_iceextt", zdiag_extt_nh ) 
    288316 
    289317      ENDIF  
    290318 
    291       IF ( iom_use ( "SH_icearea" ) .OR. ( iom_use( "SH_icevolu" ) ) THEN             ! SH ice area  / volume 
    292  
    293            WHERE( fcor < 0 ); zswi(:,:) = 1.;  
    294            ELSEWHERE        ; zswi(:,:) = 0. 
    295            END WHERE  
    296  
    297            IF ( iom_use ( "SH_icearea" ) THEN 
    298               zdiag_area_sh = glob_sum( at_i(:,:) * zswi(:,:) * e12t(:,:) ) / 1.0e12 
    299               CALL iom_put( "SH_icearea", zdiag_area_sh ) 
    300            ENDIF 
    301            IF ( iom_use ( "SH_icevolu" ) THEN 
    302               zdiag_volu_sh = glob_sum( vt_i(:,:) * zswi(:,:) * e12t(:,:) ) / 1.0e12 
    303               CALL iom_put( "SH_icevolu", zdiag_volu_sh ) 
    304            ENDIF 
     319      IF ( iom_use( "SH_icearea" ) .OR. iom_use( "SH_icevolu" ) ) THEN    ! SH ice area  / volume 
     320 
     321         WHERE( fcor < 0 ); zswi(:,:) = 1.0e-12;  
     322         ELSEWHERE        ; zswi(:,:) = 0. 
     323         END WHERE  
     324 
     325         IF ( iom_use( "SH_icearea" ) ) THEN 
     326            zdiag_area_sh = glob_sum( at_i(:,:) * zswi(:,:) * e12t(:,:) )  
     327            CALL iom_put( "SH_icearea", zdiag_area_sh ) 
     328         ENDIF 
     329         IF ( iom_use( "SH_icevolu" ) ) THEN 
     330            zdiag_volu_sh = glob_sum( vt_i(:,:) * zswi(:,:) * e12t(:,:) ) 
     331            CALL iom_put( "SH_icevolu", zdiag_volu_sh ) 
     332         ENDIF 
    305333 
    306334      ENDIF  
    307335 
    308       IF ( iom_use ( "SH_iceextt" ) ) THEN                                            ! SH ice extt  
    309  
    310            WHERE( fcor < 0 .AND. at_i > 0.15 ); zswi(:,:) = 1.;  
    311            ELSEWHERE                          ; zswi(:,:) = 0. 
    312            END WHERE  
    313  
    314            zdiag_extt_sh = glob_sum( zswi(:,:) * e12t(:,:) )/ 1.0e12 
    315  
    316            CALL iom_put( "SH_iceextt", zdiag_extt_sh ) 
     336      IF ( iom_use( "SH_iceextt" ) ) THEN                                   ! SH ice extt  
     337 
     338         WHERE( fcor < 0 .AND. at_i > 0.15 ); zswi(:,:) = 1.0e-12;  
     339         ELSEWHERE                          ; zswi(:,:) = 0. 
     340         END WHERE  
     341 
     342         zdiag_extt_sh = glob_sum( zswi(:,:) * e12t(:,:) ) 
     343 
     344         CALL iom_put( "SH_iceextt", zdiag_extt_sh ) 
    317345 
    318346      ENDIF  
    319347 
    320       !-------------------------------- 
    321       ! Output values for each category 
    322       !-------------------------------- 
     348      !------------------------ 
     349      ! Fluxes through straits 
     350      !------------------------ 
     351      ! 
     352      ! This piece of code is quite awful and should probably be a separate routine 
     353      ! 
     354      ! See Notz et al 2016 for definitions 
     355      ! 4 Arctic passages are considered (Fram, CAA, Barents, Bering) 
     356      ! 
     357 
     358      IF ( iom_use("strait_arfl") .OR. iom_use("strait_mifl") .OR. iom_use("strait_msfl") ) THEN 
     359 
     360         zdiag_area_strait(:) = 0._wp 
     361         zdiag_mice_strait(:) = 0._wp 
     362         zdiag_msno_strait(:) = 0._wp 
     363    
     364         ! === Fram Strait === 
     365         IF ( i_grid == 2 ) THEN     ! ORCA2 
     366            Nv  = 4 
     367            zvi(1:Nv) = (/ 133, 134, 135, 136 /) 
     368            zvj(1:Nv) = (/ 136, 136, 136, 136 /) 
     369         ENDIF 
     370    
     371         IF ( i_grid == 1 ) THEN    ! eORCA1 
     372            Nv  = 10 
     373            zvi(1:Nv) = (/ 268,269,270,271,272,273,274,275,276,277 /) 
     374            zvj(1:Nv) = (/ 311,311,311,311,311,311,311,311,311,311 /) 
     375         ENDIF 
     376    
     377         DO ii = 1, Nv 
     378            ji = zvi(ii)     
     379            jj = zvj(ii) 
     380            zdiag_area_strait(1) = zdiag_area_strait(1)                               & ! --- ice area flux --- 
     381                &                + at_i(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 )         & ! northwards (positive) flow 
     382                &                + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( v_ice(ji,jj-1), 0.0 )           ! southwards (negative) flow 
     383    
     384            zdiag_mice_strait(1) = zdiag_mice_strait(1) + rhoic *                     & ! --- ice mass flux  --- 
     385                &                ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 )         & ! 
     386                &                + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( v_ice(ji,jj-1), 0.0 ) )         ! 
     387    
     388            zdiag_msno_strait(1) = zdiag_msno_strait(1) + rhosn *                     & ! --- snow mass flux --- 
     389                &                ( vt_s(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 )         &  
     390                &                + vt_s(ji,jj  ) * e12t(ji,jj)   * MIN( v_ice(ji,jj-1), 0.0 ) )   
     391         END DO 
     392    
     393         ! === Bering Strait === 
     394         IF ( i_grid == 1 ) THEN ! eORCA1 
     395            Nv  = 3 
     396            zvi(1:Nv) = (/ 113,114,115 /) 
     397            zvj(1:Nv) = (/ 285,285,285 /) 
     398         ENDIF 
     399    
     400         IF ( i_grid == 2 ) THEN ! ORCA2 
     401            Nv  = 2 
     402            zvi(1:Nv) = (/ 55 , 56 /) 
     403            zvj(1:Nv) = (/ 122,122 /) 
     404         ENDIF 
     405    
     406         DO ii = 1, Nv 
     407            ji = zvi(ii)      
     408            jj = zvj(ii) 
     409            zdiag_area_strait(4) = zdiag_area_strait(4)                               & ! --- ice area flux --- 
     410                &                + at_i(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 )         & ! northwards (positive) flow 
     411                &                + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( v_ice(ji,jj-1), 0.0 )           ! southwards (negative) flow 
     412    
     413            zdiag_mice_strait(4) = zdiag_mice_strait(4) + rhoic *                     & ! --- ice mass flux  --- 
     414                &                ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 )            & ! 
     415                &                + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( v_ice(ji,jj-1), 0.0 ) )            ! 
     416    
     417            zdiag_msno_strait(4) = zdiag_msno_strait(4) + rhosn *                     & ! --- snow mass flux --- 
     418                &                ( vt_s(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 )            &  
     419                &                + vt_s(ji,jj  ) * e12t(ji,jj)   * MIN( v_ice(ji,jj-1), 0.0 ) )   
     420         END DO 
     421    
     422         ! === Barents throughflow (eORCA1) 
     423 
     424         ! U-flow 
     425         IF ( i_grid == 1 ) THEN ! 'eORCA1' 
     426            Nu = 11 
     427            zui(1:Nu) = (/ 282,283,284,285,286,286,287,288,289,290,292/) 
     428            zuj(1:Nu) = (/ 308,307,306,305,304,303,302,301,300,299,298/) 
     429         ENDIF 
     430         IF ( i_grid == 2 ) THEN ! 'ORCA2' 
     431            Nu = 5 
     432            zui(1:Nu) = (/ 141,142,142,143,144 /) 
     433            zuj(1:Nu) = (/ 134,133,132,131,130 /) 
     434         ENDIF 
     435         zfarea_u = 0._wp 
     436         zfmice_u = 0._wp 
     437         zfmsno_u = 0._wp 
     438    
     439         DO ii = 1, Nu 
     440            ji = zui(ii)      
     441            jj = zuj(ii) 
     442            zfarea_u          = zfarea_u                                           & ! --- ice area zonal flux --- 
     443                &             + at_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         & ! --- eastward 
     444                &             + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 )           ! --- westward 
     445            zfmice_u          = zfmice_u + rhoic *                                 & ! --- ice mass zonal flux ---  
     446                &             ( vt_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         &    
     447                &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 ) )           
     448            zfmsno_u          = zfmsno_u + rhosn *                                 & ! --- snow mass zonal flux ---  
     449                &             ( vt_s(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         &    
     450                &             + vt_s(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 ) )           
     451         END DO 
     452    
     453         ! V-flow 
     454         IF ( i_grid == 1 ) THEN ! 'eORCA1' 
     455            Nv = 9 
     456            zvi(1:Nv) = (/ 282,283,284,285,286,287,288,289,290/) 
     457            zvj(1:Nv) = (/ 308,307,306,305,303,302,301,300,299/) 
     458         ENDIF 
     459         IF ( i_grid == 2 ) THEN ! 'ORCA2' 
     460            Nv = 4 
     461            zvi(1:Nv) = (/ 140,141,142,143 /) 
     462            zvj(1:Nv) = (/ 135,134,132,131 /) 
     463         ENDIF 
     464         zfarea_v = 0._wp 
     465         zfmice_v = 0._wp 
     466         zfmsno_v = 0._wp 
     467    
     468         DO ii  = 1, Nv   
     469            ji = zvi(ii)      
     470            jj = zvj(ii) 
     471            zfarea_v          = zfarea_v                                           & ! --- ice area meridian flux --- 
     472                &             + at_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & ! --- eastward 
     473                &             + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 )           ! --- westward 
     474            zfmice_v          = zfmice_v + rhoic *                                 & ! --- ice mass meridian flux --- 
     475                &             ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & ! 
     476                &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 ) )         ! 
     477            zfmsno_v          = zfmsno_v + rhosn *                                 & ! --- snow mass meridian flux --- 
     478                &             ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & ! 
     479                &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 ) )         ! 
     480         END DO 
     481    
     482         ! Sum U/V contributions 
     483         zdiag_area_strait(3) = zfarea_u + zfarea_v  
     484         zdiag_mice_strait(3) = zfmice_u + zfmice_v 
     485         zdiag_msno_strait(3) = zfmsno_u + zfmsno_v 
     486    
     487         ! === CAA throughflow === 
     488         ! U-flow through Queen Elisabeth Islands and McClure straits 
     489         IF ( i_grid == 1 ) THEN  ! eORCA1 
     490            Nu = 8  
     491            zui(1:Nu) = (/ 231,231,231,  132,132,132,132,132  /) 
     492            zuj(1:Nu) = (/ 328,329,330,  318,319,320,321,322  /) 
     493            zfarea_u = 0._wp 
     494            zfmice_u = 0._wp 
     495            zfmsno_u = 0._wp 
     496       
     497            DO ii = 1, Nu 
     498               ji = zui(ii)      
     499               jj = zuj(ii) 
     500               zfarea_u          = zfarea_u                                           & ! --- ice area zonal flux --- 
     501                   &             + at_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         & ! --- eastward 
     502                   &             + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 )           ! --- westward 
     503               zfmice_u          = zfmice_u + rhoic *                                 & ! --- ice mass zonal flux ---  
     504                   &             ( vt_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         &    
     505                   &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 ) )           
     506               zfmsno_u          = zfmsno_u + rhosn *                                 & ! --- snow mass zonal flux ---  
     507                   &             ( vt_s(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 )         &    
     508                   &             + vt_s(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji-1,jj), 0.0 ) )           
     509            END DO 
     510         ENDIF 
     511 
     512         IF ( i_grid == 2 ) THEN   ! ORCA2 
     513            zfarea_u = 0._wp       ! QEI and McClure straits are not resolved in ORCA2 
     514            zfmice_u = 0._wp 
     515            zfmsno_u = 0._wp 
     516         ENDIF 
     517    
     518         ! V-flow through Nares Strait 
     519         IF ( i_grid == 1 ) THEN   ! eORCA1 
     520            Nv = 4 
     521            zvi(1:Nv) = (/ 254,255,256,257 /) 
     522            zvj(1:Nv) = (/ 317,317,317,317 /) 
     523         ENDIF 
     524         IF ( i_grid == 2 ) THEN   ! ORCA2 
     525            Nv = 2 
     526            zvi(1:Nv) = (/ 117,118 /) 
     527            zvj(1:Nv) = (/ 145,145 /) 
     528         ENDIF 
     529         zfarea_v = 0._wp 
     530         zfmice_v = 0._wp 
     531         zfmsno_v = 0._wp 
     532    
     533         DO ii = 1, Nv   
     534            ji = zvi(ii)      
     535            jj = zvj(ii) 
     536            zfarea_v          = zfarea_v                                           & ! --- ice area meridian flux --- 
     537                &             + at_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & ! --- eastward 
     538                &             + at_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 )           ! --- westward 
     539            zfmice_v          = zfmice_v + rhoic *                                 & ! --- ice mass meridian flux --- 
     540                &             ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & ! 
     541                &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 ) )         ! 
     542            zfmsno_v          = zfmsno_v + rhosn *                                 & ! --- snow mass meridian flux --- 
     543                &             ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 )         & ! 
     544                &             + vt_i(ji,jj  ) * e12t(ji,jj)   * MIN( u_ice(ji,jj-1), 0.0 ) )         ! 
     545         END DO 
     546 
     547         ! Sum U/V contributions 
     548         zdiag_area_strait(2) = zfarea_u + zfarea_v  
     549         zdiag_mice_strait(2) = zfmice_u + zfmice_v 
     550         zdiag_msno_strait(2) = zfmsno_u + zfmsno_v 
     551    
     552         ! === Write in file 
     553         IF ( iom_use("strait_arfl") ) CALL iom_put( "strait_arfl", zdiag_area_strait ) 
     554         IF ( iom_use("strait_mifl") ) CALL iom_put( "strait_mifl", zdiag_mice_strait ) 
     555         IF ( iom_use("strait_msfl") ) CALL iom_put( "strait_msfl", zdiag_msno_strait )  
     556 
     557         WRITE(numout,*) " area flx ", zdiag_area_strait(:) 
     558         WRITE(numout,*) " mice flx ", zdiag_mice_strait(:) 
     559         WRITE(numout,*) " msno flx ", zdiag_msno_strait(:) 
     560 
     561      ENDIF 
     562 
     563      !---------------------------------- 
     564      ! Output category-dependent fields 
     565      !---------------------------------- 
    323566      IF ( iom_use( "iceconc_cat"  ) )  CALL iom_put( "iceconc_cat"      , a_i   * zswi2   )        ! area for categories 
    324567      IF ( iom_use( "icethic_cat"  ) )  CALL iom_put( "icethic_cat"      , ht_i  * zswi2   )        ! thickness for categories 
  • branches/2016/v3_6_CMIP6_ice_diagnostics/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90

    r7494 r7517  
    221221#if defined key_lim3 || defined key_lim2 
    222222      CALL iom_set_axis_attr( "ncatice", (/ (REAL(ji,wp), ji=1,jpl) /) ) 
     223      ! SIMIP diagnostics (4 main arctic straits) 
     224      CALL iom_set_axis_attr( "nstrait", (/ (REAL(ji,wp), ji=1,4) /) ) 
    223225#endif 
    224226      CALL iom_set_axis_attr( "icbcla", class_num ) 
     
    228230      ! automatic definitions of some of the xml attributs 
    229231      CALL set_xmlatt 
    230  
    231       CALL set_1point 
    232232 
    233233      ! end file definition 
     
    15691569      zz=REAL(narea,wp) 
    15701570      CALL iom_set_domain_attr('scalarpoint', lonvalue=zz, latvalue=zz) 
    1571  
     1571       
    15721572   END SUBROUTINE set_scalar 
    1573  
    1574    SUBROUTINE set_1point 
    1575       !!---------------------------------------------------------------------- 
    1576       !!                     ***  ROUTINE set_1point  *** 
    1577       !! 
    1578       !! ** Purpose :   define zoom grid for scalar fields 
    1579       !! 
    1580       !!---------------------------------------------------------------------- 
    1581       REAL(wp), DIMENSION(1)   ::   zz = 1. 
    1582       INTEGER  :: ix, iy 
    1583       !!---------------------------------------------------------------------- 
    1584       CALL dom_ngb( 180., 90., ix, iy, 'T' ) !  Nearest point to north pole should be ocean 
    1585       CALL iom_set_domain_attr('1point', zoom_ibegin=ix, zoom_jbegin=iy) 
    1586  
    1587    END SUBROUTINE set_1point 
    15881573 
    15891574 
Note: See TracChangeset for help on using the changeset viewer.