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 13168 for NEMO – NEMO

Changeset 13168 for NEMO


Ignore:
Timestamp:
2020-06-27T19:07:43+02:00 (4 years ago)
Author:
clem
Message:

change some of the fields checked by ice control

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/ICE/icectl.F90

    r12725 r13168  
    350350      !!                   ***  ROUTINE ice_ctl ***  
    351351      !!                  
    352       !! ** Purpose :   Alerts in case of model crash 
     352      !! ** Purpose :   control checks 
    353353      !!------------------------------------------------------------------- 
    354354      INTEGER, INTENT(in) ::   kt      ! ocean time step 
    355       INTEGER  ::   ji, jj, jk,  jl   ! dummy loop indices 
    356       INTEGER  ::   inb_altests       ! number of alert tests (max 20) 
    357       INTEGER  ::   ialert_id         ! number of the current alert 
    358       REAL(wp) ::   ztmelts           ! ice layer melting point 
     355      INTEGER  ::   ja, ji, jj, jk, jl ! dummy loop indices 
     356      INTEGER  ::   ialert_id          ! number of the current alert 
     357      REAL(wp) ::   ztmelts            ! ice layer melting point 
    359358      CHARACTER (len=30), DIMENSION(20) ::   cl_alname   ! name of alert 
    360359      INTEGER           , DIMENSION(20) ::   inb_alp     ! number of alerts positive 
    361360      !!------------------------------------------------------------------- 
    362  
    363       inb_altests = 10 
    364       inb_alp(:)  =  0 
    365  
    366       ! Alert if incompatible volume and concentration 
    367       ialert_id = 2 ! reference number of this alert 
    368       cl_alname(ialert_id) = ' Incompat vol and con         '    ! name of the alert 
     361      inb_alp(:) = 0 
     362      ialert_id = 0 
     363       
     364      ! Alert if very high salinity 
     365      ialert_id = ialert_id + 1 ! reference number of this alert 
     366      cl_alname(ialert_id) = ' Very high salinity ' ! name of the alert 
    369367      DO jl = 1, jpl 
    370368         DO jj = 1, jpj 
    371369            DO ji = 1, jpi 
    372                IF(  v_i(ji,jj,jl) /= 0._wp   .AND.   a_i(ji,jj,jl) == 0._wp   ) THEN 
    373                   WRITE(numout,*) ' ALERTE 2 :   Incompatible volume and concentration ' 
    374                   inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
     370               IF( v_i(ji,jj,jl) > epsi10  ) THEN 
     371                  IF( sv_i(ji,jj,jl) / v_i(ji,jj,jl) > rn_simax ) THEN 
     372                     WRITE(numout,*) ' ALERTE :   Very high salinity ',sv_i(ji,jj,jl)/v_i(ji,jj,jl) 
     373                     WRITE(numout,*) ' at i,j,l = ',ji,jj,jl 
     374                     inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
     375                  ENDIF 
    375376               ENDIF 
    376377            END DO 
     
    378379      END DO 
    379380 
    380       ! Alerte if very thick ice 
    381       ialert_id = 3 ! reference number of this alert 
    382       cl_alname(ialert_id) = ' Very thick ice               ' ! name of the alert 
    383       jl = jpl  
    384       DO jj = 1, jpj 
    385          DO ji = 1, jpi 
    386             IF(   h_i(ji,jj,jl)  >  50._wp   ) THEN 
    387                WRITE(numout,*) ' ALERTE 3 :   Very thick ice' 
    388                !CALL ice_prt( kt, ji, jj, 2, ' ALERTE 3 :   Very thick ice ' ) 
    389                inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
    390             ENDIF 
    391          END DO 
    392       END DO 
    393  
    394       ! Alert if very fast ice 
    395       ialert_id = 4 ! reference number of this alert 
    396       cl_alname(ialert_id) = ' Very fast ice               ' ! name of the alert 
    397       DO jj = 1, jpj 
    398          DO ji = 1, jpi 
    399             IF(   MAX( ABS( u_ice(ji,jj) ), ABS( v_ice(ji,jj) ) ) > 2.  .AND.  & 
    400                &  at_i(ji,jj) > 0._wp   ) THEN 
    401                WRITE(numout,*) ' ALERTE 4 :   Very fast ice' 
    402                !CALL ice_prt( kt, ji, jj, 1, ' ALERTE 4 :   Very fast ice ' ) 
    403                inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
    404             ENDIF 
    405          END DO 
    406       END DO 
    407  
    408       ! Alert on salt flux 
    409       ialert_id = 5 ! reference number of this alert 
    410       cl_alname(ialert_id) = ' High salt flux               ' ! name of the alert 
    411       DO jj = 1, jpj 
    412          DO ji = 1, jpi 
    413             IF( ABS( sfx (ji,jj) ) > 1.0e-2 ) THEN  ! = 1 psu/day for 1m ocean depth 
    414                WRITE(numout,*) ' ALERTE 5 :   High salt flux' 
    415                !CALL ice_prt( kt, ji, jj, 3, ' ALERTE 5 :   High salt flux ' ) 
    416                inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
    417             ENDIF 
    418          END DO 
    419       END DO 
    420  
    421       ! Alert if there is ice on continents 
    422       ialert_id = 6 ! reference number of this alert 
    423       cl_alname(ialert_id) = ' Ice on continents           ' ! name of the alert 
    424       DO jj = 1, jpj 
    425          DO ji = 1, jpi 
    426             IF(   tmask(ji,jj,1) <= 0._wp   .AND.   at_i(ji,jj) > 0._wp   ) THEN  
    427                WRITE(numout,*) ' ALERTE 6 :   Ice on continents' 
    428                !CALL ice_prt( kt, ji, jj, 1, ' ALERTE 6 :   Ice on continents ' ) 
    429                inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
    430             ENDIF 
    431          END DO 
    432       END DO 
    433  
    434 ! 
    435 !     ! Alert if very fresh ice 
    436       ialert_id = 7 ! reference number of this alert 
    437       cl_alname(ialert_id) = ' Very fresh ice               ' ! name of the alert 
     381      ! Alert if very low salinity 
     382      ialert_id = ialert_id + 1 ! reference number of this alert 
     383      cl_alname(ialert_id) = ' Very low salinity ' ! name of the alert 
    438384      DO jl = 1, jpl 
    439385         DO jj = 1, jpj 
    440386            DO ji = 1, jpi 
    441                IF( s_i(ji,jj,jl) < 0.1 .AND. a_i(ji,jj,jl) > 0._wp ) THEN 
    442                   WRITE(numout,*) ' ALERTE 7 :   Very fresh ice' 
    443 !                 CALL ice_prt(kt,ji,jj,1, ' ALERTE 7 :   Very fresh ice ' ) 
    444                   inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
     387               IF( v_i(ji,jj,jl) > epsi10  ) THEN 
     388                  IF( sv_i(ji,jj,jl) / v_i(ji,jj,jl) < rn_simin ) THEN 
     389                     WRITE(numout,*) ' ALERTE :   Very low salinity ',sv_i(ji,jj,jl),v_i(ji,jj,jl) 
     390                     WRITE(numout,*) ' at i,j,l = ',ji,jj,jl 
     391                     inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
     392                  ENDIF 
    445393               ENDIF 
    446394            END DO 
    447395         END DO 
    448396      END DO 
    449 ! 
    450       ! Alert if qns very big 
    451       ialert_id = 8 ! reference number of this alert 
    452       cl_alname(ialert_id) = ' fnsolar very big             ' ! name of the alert 
    453       DO jj = 1, jpj 
    454          DO ji = 1, jpi 
    455             IF( ABS( qns(ji,jj) ) > 1500._wp .AND. at_i(ji,jj) > 0._wp ) THEN 
    456                ! 
    457                WRITE(numout,*) ' ALERTE 8 :   Very high non-solar heat flux' 
    458                !CALL ice_prt( kt, ji, jj, 2, '   ') 
    459                inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
    460                ! 
    461             ENDIF 
    462          END DO 
    463       END DO 
    464       !+++++ 
    465  
    466 !     ! Alert if too old ice 
    467       ialert_id = 9 ! reference number of this alert 
    468       cl_alname(ialert_id) = ' Very old   ice               ' ! name of the alert 
    469       DO jl = 1, jpl 
    470          DO jj = 1, jpj 
    471             DO ji = 1, jpi 
    472                IF ( ( ( ABS( o_i(ji,jj,jl) ) > rdt_ice ) .OR. & 
    473                       ( ABS( o_i(ji,jj,jl) ) < 0._wp) ) .AND. & 
    474                              ( a_i(ji,jj,jl) > 0._wp ) ) THEN 
    475                   WRITE(numout,*) ' ALERTE 9 :   Wrong ice age' 
    476                   !CALL ice_prt( kt, ji, jj, 1, ' ALERTE 9 :   Wrong ice age ') 
    477                   inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
    478                ENDIF 
    479             END DO 
    480          END DO 
    481       END DO 
    482    
    483       ! Alert if very warm ice 
    484       ialert_id = 10 ! reference number of this alert 
    485       cl_alname(ialert_id) = ' Very warm ice                ' ! name of the alert 
    486       inb_alp(ialert_id) = 0 
     397 
     398      ! Alert if very cold ice 
     399      ialert_id = ialert_id + 1 ! reference number of this alert 
     400      cl_alname(ialert_id) = ' Very cold ice ' ! name of the alert 
    487401      DO jl = 1, jpl 
    488402         DO jk = 1, nlay_i 
     
    490404               DO ji = 1, jpi 
    491405                  ztmelts    =  -rTmlt * sz_i(ji,jj,jk,jl) + rt0 
    492                   IF( t_i(ji,jj,jk,jl) > ztmelts  .AND.  v_i(ji,jj,jl) > 1.e-10   & 
    493                      &                            .AND.  a_i(ji,jj,jl) > 0._wp   ) THEN 
    494                      WRITE(numout,*) ' ALERTE 10 :   Very warm ice' 
     406                  IF( t_i(ji,jj,jk,jl) < -50.+rt0  .AND.  v_i(ji,jj,jl) > epsi10 ) THEN 
     407                     WRITE(numout,*) ' ALERTE :   Very cold ice ',(t_i(ji,jj,jk,jl)-rt0) 
     408                     WRITE(numout,*) ' at i,j,k,l = ',ji,jj,jk,jl 
    495409                    inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
    496410                  ENDIF 
     
    499413         END DO 
    500414      END DO 
     415   
     416      ! Alert if very warm ice 
     417      ialert_id = ialert_id + 1 ! reference number of this alert 
     418      cl_alname(ialert_id) = ' Very warm ice ' ! name of the alert 
     419      DO jl = 1, jpl 
     420         DO jk = 1, nlay_i 
     421            DO jj = 1, jpj 
     422               DO ji = 1, jpi 
     423                  ztmelts    =  -rTmlt * sz_i(ji,jj,jk,jl) + rt0 
     424                  IF( t_i(ji,jj,jk,jl) > ztmelts  .AND.  v_i(ji,jj,jl) > epsi10 ) THEN 
     425                     WRITE(numout,*) ' ALERTE :   Very warm ice',(t_i(ji,jj,jk,jl)-rt0) 
     426                     WRITE(numout,*) ' at i,j,k,l = ',ji,jj,jk,jl 
     427                    inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
     428                  ENDIF 
     429               END DO 
     430            END DO 
     431         END DO 
     432      END DO 
     433       
     434      ! Alerte if very thick ice 
     435      ialert_id = ialert_id + 1 ! reference number of this alert 
     436      cl_alname(ialert_id) = ' Very thick ice ' ! name of the alert 
     437      jl = jpl  
     438      DO jj = 1, jpj 
     439         DO ji = 1, jpi 
     440            IF( h_i(ji,jj,jl) > 50._wp ) THEN 
     441               WRITE(numout,*) ' ALERTE :   Very thick ice ',h_i(ji,jj,jl) 
     442               WRITE(numout,*) ' at i,j,l = ',ji,jj,jl 
     443               inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
     444            ENDIF 
     445         END DO 
     446      END DO 
     447 
     448      ! Alerte if very thin ice 
     449      ialert_id = ialert_id + 1 ! reference number of this alert 
     450      cl_alname(ialert_id) = ' Very thin ice ' ! name of the alert 
     451      jl = 1  
     452      DO jj = 1, jpj 
     453         DO ji = 1, jpi 
     454            IF( h_i(ji,jj,jl) < rn_himin ) THEN 
     455               WRITE(numout,*) ' ALERTE :   Very thin ice ',h_i(ji,jj,jl) 
     456               WRITE(numout,*) ' at i,j,l = ',ji,jj,jl 
     457               inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
     458            ENDIF 
     459         END DO 
     460      END DO 
     461 
     462      ! Alert if very fast ice 
     463      ialert_id = ialert_id + 1 ! reference number of this alert 
     464      cl_alname(ialert_id) = ' Very fast ice ' ! name of the alert 
     465      DO jj = 1, jpj 
     466         DO ji = 1, jpi 
     467            IF( MAX( ABS( u_ice(ji,jj) ), ABS( v_ice(ji,jj) ) ) > 2. ) THEN 
     468               WRITE(numout,*) ' ALERTE :   Very fast ice ',MAX( ABS( u_ice(ji,jj) ), ABS( v_ice(ji,jj) ) ) 
     469               WRITE(numout,*) ' at i,j = ',ji,jj 
     470               inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
     471            ENDIF 
     472         END DO 
     473      END DO 
     474 
     475      ! Alert if there is ice on continents 
     476      ialert_id = ialert_id + 1 ! reference number of this alert 
     477      cl_alname(ialert_id) = ' Ice on continents ' ! name of the alert 
     478      DO jj = 1, jpj 
     479         DO ji = 1, jpi 
     480            IF( tmask(ji,jj,1) == 0._wp .AND. ( at_i(ji,jj) > 0._wp .OR. vt_i(ji,jj) > 0._wp ) ) THEN  
     481               WRITE(numout,*) ' ALERTE :   Ice on continents ',at_i(ji,jj),vt_i(ji,jj) 
     482               WRITE(numout,*) ' at i,j = ',ji,jj 
     483               inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
     484            ENDIF 
     485         END DO 
     486      END DO 
     487 
     488      ! Alert if incompatible ice concentration and volume 
     489      ialert_id = ialert_id + 1 ! reference number of this alert 
     490      cl_alname(ialert_id) = ' Incompatible ice conc and vol ' ! name of the alert 
     491      DO jj = 1, jpj 
     492         DO ji = 1, jpi 
     493            IF(  ( vt_i(ji,jj) == 0._wp .AND. at_i(ji,jj) >  0._wp ) .OR. & 
     494               & ( vt_i(ji,jj) >  0._wp .AND. at_i(ji,jj) == 0._wp ) ) THEN  
     495               WRITE(numout,*) ' ALERTE :   Incompatible ice conc and vol ',at_i(ji,jj),vt_i(ji,jj) 
     496               WRITE(numout,*) ' at i,j = ',ji,jj 
     497               inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
     498            ENDIF 
     499         END DO 
     500      END DO 
    501501 
    502502      ! sum of the alerts on all processors 
    503503      IF( lk_mpp ) THEN 
    504          DO ialert_id = 1, inb_altests 
    505             CALL mpp_sum('icectl', inb_alp(ialert_id)) 
     504         DO ja = 1, ialert_id 
     505            CALL mpp_sum('icectl', inb_alp(ja)) 
    506506         END DO 
    507507      ENDIF 
     
    509509      ! print alerts 
    510510      IF( lwp ) THEN 
    511          ialert_id = 1                                 ! reference number of this alert 
    512          cl_alname(ialert_id) = ' NO alerte 1      '   ! name of the alert 
    513511         WRITE(numout,*) ' time step ',kt 
    514512         WRITE(numout,*) ' All alerts at the end of ice model ' 
    515          DO ialert_id = 1, inb_altests 
    516             WRITE(numout,*) ialert_id, cl_alname(ialert_id)//' : ', inb_alp(ialert_id), ' times ! ' 
     513         DO ja = 1, ialert_id 
     514            WRITE(numout,*) ja, cl_alname(ja)//' : ', inb_alp(ja), ' times ! ' 
    517515         END DO 
    518516      ENDIF 
     
    563561               WRITE(numout,*) ' v_ice(i  ,j)  : ', v_ice(ji,jj) 
    564562               WRITE(numout,*) ' strength      : ', strength(ji,jj) 
    565                WRITE(numout,*) 
    566563               WRITE(numout,*) ' - Cell values ' 
    567564               WRITE(numout,*) '   ~~~~~~~~~~~ ' 
     
    572569               DO jl = 1, jpl 
    573570                  WRITE(numout,*) ' - Category (', jl,')' 
     571                  WRITE(numout,*) '   ~~~~~~~~~~~ ' 
    574572                  WRITE(numout,*) ' a_i           : ', a_i(ji,jj,jl) 
    575573                  WRITE(numout,*) ' h_i           : ', h_i(ji,jj,jl) 
     
    608606               WRITE(numout,*) ' v_ice(i  ,j)  : ', v_ice(ji,jj) 
    609607               WRITE(numout,*) ' strength      : ', strength(ji,jj) 
    610                WRITE(numout,*) ' u_ice_b       : ', u_ice_b(ji,jj)    , ' v_ice_b       : ', v_ice_b(ji,jj)   
    611608               WRITE(numout,*) 
    612609                
     
    732729         CALL prt_ctl(tab2d_1=v_i        (:,:,jl)        , clinfo1= ' v_i         : ') 
    733730         CALL prt_ctl(tab2d_1=v_s        (:,:,jl)        , clinfo1= ' v_s         : ') 
    734          CALL prt_ctl(tab2d_1=e_i        (:,:,1,jl)      , clinfo1= ' e_i1        : ') 
    735731         CALL prt_ctl(tab2d_1=e_s        (:,:,1,jl)      , clinfo1= ' e_snow      : ') 
    736732         CALL prt_ctl(tab2d_1=sv_i       (:,:,jl)        , clinfo1= ' sv_i        : ') 
     
    740736            CALL prt_ctl_info(' - Layer : ', ivar1=jk) 
    741737            CALL prt_ctl(tab2d_1=t_i(:,:,jk,jl) , clinfo1= ' t_i       : ') 
     738            CALL prt_ctl(tab2d_1=e_i(:,:,jk,jl) , clinfo1= ' e_i       : ') 
    742739         END DO 
    743740      END DO 
Note: See TracChangeset for help on using the changeset viewer.