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 7814 for branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90 – NEMO

Ignore:
Timestamp:
2017-03-20T17:21:42+01:00 (7 years ago)
Author:
clem
Message:

cosmetic changes for better phasing with trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90

    r6963 r7814  
    2727   !!                        - et_i(jpi,jpj)  !total ice thermal content  
    2828   !!                        - smt_i(jpi,jpj) !mean ice salinity 
    29    !!                        - ot_i(jpi,jpj)  !average ice age 
     29   !!                        - tm_i (jpi,jpj) !mean ice temperature 
    3030   !!====================================================================== 
    3131   !! History :   -   ! 2006-01 (M. Vancoppenolle) Original code 
     
    400400      ! 
    401401   END SUBROUTINE lim_var_salprof 
     402 
    402403 
    403404   SUBROUTINE lim_var_bv 
     
    654655      INTEGER  :: ji, jk, jl             ! dummy loop indices 
    655656      INTEGER  :: ijpij, i_fill, jl0   
    656       REAL(wp) :: zarg, zV, zconv, zdh 
     657      REAL(wp) :: zarg, zV, zconv, zdh, zdv 
    657658      REAL(wp), DIMENSION(:),   INTENT(in)    ::   zhti, zhts, zai    ! input ice/snow variables 
    658659      REAL(wp), DIMENSION(:,:), INTENT(inout) ::   zht_i, zht_s, za_i ! output ice/snow variables 
     
    675676         IF( zhti(ji) > 0._wp ) THEN 
    676677 
    677          ! initialisation of tests 
    678          itest(:)  = 0 
     678            ! find which category (jl0) the input ice thickness falls into 
     679            jl0 = jpl 
     680            DO jl = 1, jpl 
     681               IF ( ( zhti(ji) >= hi_max(jl-1) ) .AND. ( zhti(ji) < hi_max(jl) ) ) THEN 
     682                  jl0 = jl 
     683                  CYCLE 
     684               ENDIF 
     685            END DO 
     686 
     687            ! initialisation of tests 
     688            itest(:)  = 0 
    679689          
    680          i_fill = jpl + 1                                             !==================================== 
    681          DO WHILE ( ( SUM( itest(:) ) /= 4 ) .AND. ( i_fill >= 2 ) )  ! iterative loop on i_fill categories   
    682             ! iteration                                               !==================================== 
    683             i_fill = i_fill - 1 
     690            i_fill = jpl + 1                                             !==================================== 
     691            DO WHILE ( ( SUM( itest(:) ) /= 4 ) .AND. ( i_fill >= 2 ) )  ! iterative loop on i_fill categories 
     692               ! iteration                                               !==================================== 
     693               i_fill = i_fill - 1 
     694                
     695               ! initialisation of ice variables for each try 
     696               zht_i(ji,1:jpl) = 0._wp 
     697               za_i (ji,1:jpl) = 0._wp 
     698               itest(:)        = 0       
     699                
     700               ! *** case very thin ice: fill only category 1 
     701               IF ( i_fill == 1 ) THEN 
     702                  zht_i(ji,1) = zhti(ji) 
     703                  za_i (ji,1) = zai (ji) 
     704                   
     705               ! *** case ice is thicker: fill categories >1 
     706               ELSE 
     707 
     708                  ! Fill ice thicknesses in the (i_fill-1) cat by hmean  
     709                  DO jl = 1, i_fill - 1 
     710                     zht_i(ji,jl) = hi_mean(jl) 
     711                  END DO 
     712                   
     713                  ! Concentrations in the (i_fill-1) categories  
     714                  za_i(ji,jl0) = zai(ji) / SQRT(REAL(jpl)) 
     715                  DO jl = 1, i_fill - 1 
     716                     IF ( jl /= jl0 ) THEN 
     717                        zarg        = ( zht_i(ji,jl) - zhti(ji) ) / ( zhti(ji) * 0.5_wp ) 
     718                        za_i(ji,jl) =   za_i (ji,jl0) * EXP(-zarg**2) 
     719                     ENDIF 
     720                  END DO 
     721                   
     722                  ! Concentration in the last (i_fill) category 
     723                  za_i(ji,i_fill) = zai(ji) - SUM( za_i(ji,1:i_fill-1) ) 
     724                   
     725                  ! Ice thickness in the last (i_fill) category 
     726                  zV = SUM( za_i(ji,1:i_fill-1) * zht_i(ji,1:i_fill-1) ) 
     727                  zht_i(ji,i_fill) = ( zhti(ji) * zai(ji) - zV ) / MAX( za_i(ji,i_fill), epsi10 )  
     728                   
     729                  ! clem: correction if concentration of upper cat is greater than lower cat 
     730                  !       (it should be a gaussian around jl0 but sometimes it is not) 
     731                  IF ( jl0 /= jpl ) THEN 
     732                     DO jl = jpl, jl0+1, -1 
     733                        IF ( za_i(ji,jl) > za_i(ji,jl-1) ) THEN 
     734                           zdv = zht_i(ji,jl) * za_i(ji,jl) 
     735                           zht_i(ji,jl    ) = 0._wp 
     736                           za_i (ji,jl    ) = 0._wp 
     737                           za_i (ji,1:jl-1) = za_i(ji,1:jl-1) + zdv / MAX( REAL(jl-1) * zhti(ji), epsi10 ) 
     738                        END IF 
     739                     ENDDO 
     740                  ENDIF 
     741                
     742               ENDIF ! case ice is thick or thin 
    684743             
    685             ! initialisation of ice variables for each try 
    686             zht_i(ji,1:jpl) = 0._wp 
    687             za_i (ji,1:jpl) = 0._wp 
    688             itest(:)        = 0       
    689        
    690             ! *** case very thin ice: fill only category 1 
    691             IF ( i_fill == 1 ) THEN 
    692                zht_i(ji,1) = zhti(ji) 
    693                za_i (ji,1) = zai (ji) 
    694  
    695             ! *** case ice is thicker: fill categories >1 
    696             ELSE 
    697  
    698                ! Fill ice thicknesses except the last one (i_fill) by hmean  
    699                DO jl = 1, i_fill - 1 
    700                   zht_i(ji,jl) = hi_mean(jl) 
    701                END DO 
     744               !--------------------- 
     745               ! Compatibility tests 
     746               !---------------------  
     747               ! Test 1: area conservation 
     748               zconv = ABS( zai(ji) - SUM( za_i(ji,1:jpl) ) ) 
     749               IF ( zconv < epsi06 ) itest(1) = 1 
     750             
     751               ! Test 2: volume conservation 
     752               zconv = ABS( zhti(ji)*zai(ji) - SUM( za_i(ji,1:jpl)*zht_i(ji,1:jpl) ) ) 
     753               IF ( zconv < epsi06 ) itest(2) = 1 
    702754                
    703                ! find which category (jl0) the input ice thickness falls into 
    704                jl0 = i_fill 
     755               ! Test 3: thickness of the last category is in-bounds ? 
     756               IF ( zht_i(ji,i_fill) >= hi_max(i_fill-1) ) itest(3) = 1 
     757                
     758               ! Test 4: positivity of ice concentrations 
     759               itest(4) = 1 
    705760               DO jl = 1, i_fill 
    706                   IF ( ( zhti(ji) >= hi_max(jl-1) ) .AND. ( zhti(ji) < hi_max(jl) ) ) THEN 
    707                      jl0 = jl 
    708            CYCLE 
    709                   ENDIF 
    710                END DO 
    711                 
    712                ! Concentrations in the (i_fill-1) categories  
    713                za_i(ji,jl0) = zai(ji) / SQRT(REAL(jpl)) 
    714                DO jl = 1, i_fill - 1 
    715                   IF ( jl == jl0 ) CYCLE 
    716                   zarg        = ( zht_i(ji,jl) - zhti(ji) ) / ( zhti(ji) * 0.5_wp ) 
    717                   za_i(ji,jl) =   za_i (ji,jl0) * EXP(-zarg**2) 
    718                END DO 
    719                 
    720                ! Concentration in the last (i_fill) category 
    721                za_i(ji,i_fill) = zai(ji) - SUM( za_i(ji,1:i_fill-1) ) 
    722                 
    723                ! Ice thickness in the last (i_fill) category 
    724                zV = SUM( za_i(ji,1:i_fill-1) * zht_i(ji,1:i_fill-1) ) 
    725                zht_i(ji,i_fill) = ( zhti(ji) * zai(ji) - zV ) / za_i(ji,i_fill)  
    726                 
    727             ENDIF ! case ice is thick or thin 
    728              
    729             !--------------------- 
    730             ! Compatibility tests 
    731             !---------------------  
    732             ! Test 1: area conservation 
    733             zconv = ABS( zai(ji) - SUM( za_i(ji,1:jpl) ) ) 
    734             IF ( zconv < epsi06 ) itest(1) = 1 
    735              
    736             ! Test 2: volume conservation 
    737             zconv = ABS( zhti(ji)*zai(ji) - SUM( za_i(ji,1:jpl)*zht_i(ji,1:jpl) ) ) 
    738             IF ( zconv < epsi06 ) itest(2) = 1 
    739              
    740             ! Test 3: thickness of the last category is in-bounds ? 
    741             IF ( zht_i(ji,i_fill) >= hi_max(i_fill-1) ) itest(3) = 1 
    742              
    743             ! Test 4: positivity of ice concentrations 
    744             itest(4) = 1 
    745             DO jl = 1, i_fill 
    746                IF ( za_i(ji,jl) < 0._wp ) itest(4) = 0 
    747             END DO             
    748                                                            !============================ 
    749          END DO                                            ! end iteration on categories 
    750                                                            !============================ 
     761                  IF ( za_i(ji,jl) < 0._wp ) itest(4) = 0 
     762               END DO 
     763               !                                         !============================ 
     764            END DO                                       ! end iteration on categories 
     765               !                                         !============================ 
    751766         ENDIF ! if zhti > 0 
    752767      END DO ! i loop 
Note: See TracChangeset for help on using the changeset viewer.