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 13469 for NEMO/branches/2020/temporary_r4_trunk/src/ICE/icealb.F90 – NEMO

Ignore:
Timestamp:
2020-09-15T12:49:18+02:00 (4 years ago)
Author:
smasson
Message:

r4_trunk: first change of DO loops for routines to be merged, see #2523

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/temporary_r4_trunk/src/ICE/icealb.F90

    r13466 r13469  
    122122      ! 
    123123      DO jl = 1, jpl 
    124          DO jj = 1, jpj 
    125             DO ji = 1, jpi 
    126                ! 
    127                !---------------------------------------------! 
    128                !--- Specific snow, ice and pond fractions ---! 
    129                !---------------------------------------------!                
    130                zafrac_snw = za_s_fra(ji,jj,jl) 
    131                IF( ld_pnd_alb ) THEN 
    132                   zafrac_pnd = MIN( pafrac_pnd(ji,jj,jl), 1._wp - zafrac_snw ) ! make sure (a_ip_eff + a_s_fra) <= 1 
    133                ELSE 
    134                   zafrac_pnd = 0._wp 
    135                ENDIF 
    136                zafrac_ice = MAX( 0._wp, 1._wp - zafrac_pnd - zafrac_snw ) ! max for roundoff errors 
    137                ! 
    138                !---------------! 
    139                !--- Albedos ---! 
    140                !---------------!                
    141                !                       !--- Bare ice albedo (for hi > 150cm) 
    142                IF( ld_pnd_alb ) THEN 
    143                   zalb_ice = rn_alb_idry 
    144                ELSE 
    145                   IF( ph_snw(ji,jj,jl) == 0._wp .AND. pt_su(ji,jj,jl) >= rt0 ) THEN   ;   zalb_ice = rn_alb_imlt 
    146                   ELSE                                                                ;   zalb_ice = rn_alb_idry   ;   ENDIF 
    147                ENDIF 
    148                !                       !--- Bare ice albedo (for hi < 150cm) 
    149                IF( 0.05 < ph_ice(ji,jj,jl) .AND. ph_ice(ji,jj,jl) <= 1.5 ) THEN      ! 5cm < hi < 150cm 
    150                   zalb_ice = zalb_ice    + ( 0.18 - zalb_ice   ) * z1_c1 * ( LOG(1.5) - LOG(ph_ice(ji,jj,jl)) ) 
    151                ELSEIF( ph_ice(ji,jj,jl) <= 0.05 ) THEN                               ! 0cm < hi < 5cm 
    152                   zalb_ice = rn_alb_oce  + ( 0.18 - rn_alb_oce ) * z1_c2 * ph_ice(ji,jj,jl) 
    153                ENDIF 
    154                ! 
    155                !                       !--- Snow-covered ice albedo (freezing, melting cases) 
    156                IF( pt_su(ji,jj,jl) < rt0 ) THEN 
    157                   zalb_snw = rn_alb_sdry - ( rn_alb_sdry - zalb_ice ) * EXP( - ph_snw(ji,jj,jl) * z1_c3 ) 
    158                ELSE 
    159                   zalb_snw = rn_alb_smlt - ( rn_alb_smlt - zalb_ice ) * EXP( - ph_snw(ji,jj,jl) * z1_c4 ) 
    160                ENDIF 
    161                !                       !--- Ponded ice albedo 
    162                zalb_pnd = rn_alb_dpnd - ( rn_alb_dpnd - zalb_ice ) * EXP( - ph_pnd(ji,jj,jl) * z1_href_pnd )  
    163                ! 
    164                !                       !--- Surface albedo is weighted mean of snow, ponds and bare ice contributions 
    165                zalb_os = ( zafrac_snw * zalb_snw + zafrac_pnd * zalb_pnd + zafrac_ice * zalb_ice ) * tmask(ji,jj,1) 
    166                ! 
    167                zalb_cs = zalb_os - ( - 0.1010 * zalb_os * zalb_os  & 
    168                   &                  + 0.1933 * zalb_os - 0.0148 ) * tmask(ji,jj,1) 
    169                ! 
    170                ! albedo depends on cloud fraction because of non-linear spectral effects 
    171                palb_ice(ji,jj,jl) = ( 1._wp - pcloud_fra(ji,jj) ) * zalb_cs + pcloud_fra(ji,jj) * zalb_os 
    172  
    173             END DO 
    174          END DO 
     124         DO_2D_11_11 
     125            ! 
     126            !---------------------------------------------! 
     127            !--- Specific snow, ice and pond fractions ---! 
     128            !---------------------------------------------!                
     129            zafrac_snw = za_s_fra(ji,jj,jl) 
     130            IF( ld_pnd_alb ) THEN 
     131               zafrac_pnd = MIN( pafrac_pnd(ji,jj,jl), 1._wp - zafrac_snw ) ! make sure (a_ip_eff + a_s_fra) <= 1 
     132            ELSE 
     133               zafrac_pnd = 0._wp 
     134            ENDIF 
     135            zafrac_ice = MAX( 0._wp, 1._wp - zafrac_pnd - zafrac_snw ) ! max for roundoff errors 
     136            ! 
     137            !---------------! 
     138            !--- Albedos ---! 
     139            !---------------!                
     140            !                       !--- Bare ice albedo (for hi > 150cm) 
     141            IF( ld_pnd_alb ) THEN 
     142               zalb_ice = rn_alb_idry 
     143            ELSE 
     144               IF( ph_snw(ji,jj,jl) == 0._wp .AND. pt_su(ji,jj,jl) >= rt0 ) THEN   ;   zalb_ice = rn_alb_imlt 
     145               ELSE                                                                ;   zalb_ice = rn_alb_idry   ;   ENDIF 
     146            ENDIF 
     147            !                       !--- Bare ice albedo (for hi < 150cm) 
     148            IF( 0.05 < ph_ice(ji,jj,jl) .AND. ph_ice(ji,jj,jl) <= 1.5 ) THEN      ! 5cm < hi < 150cm 
     149               zalb_ice = zalb_ice    + ( 0.18 - zalb_ice   ) * z1_c1 * ( LOG(1.5) - LOG(ph_ice(ji,jj,jl)) ) 
     150            ELSEIF( ph_ice(ji,jj,jl) <= 0.05 ) THEN                               ! 0cm < hi < 5cm 
     151               zalb_ice = rn_alb_oce  + ( 0.18 - rn_alb_oce ) * z1_c2 * ph_ice(ji,jj,jl) 
     152            ENDIF 
     153            ! 
     154            !                       !--- Snow-covered ice albedo (freezing, melting cases) 
     155            IF( pt_su(ji,jj,jl) < rt0 ) THEN 
     156               zalb_snw = rn_alb_sdry - ( rn_alb_sdry - zalb_ice ) * EXP( - ph_snw(ji,jj,jl) * z1_c3 ) 
     157            ELSE 
     158               zalb_snw = rn_alb_smlt - ( rn_alb_smlt - zalb_ice ) * EXP( - ph_snw(ji,jj,jl) * z1_c4 ) 
     159            ENDIF 
     160            !                       !--- Ponded ice albedo 
     161            zalb_pnd = rn_alb_dpnd - ( rn_alb_dpnd - zalb_ice ) * EXP( - ph_pnd(ji,jj,jl) * z1_href_pnd )  
     162            ! 
     163            !                       !--- Surface albedo is weighted mean of snow, ponds and bare ice contributions 
     164            zalb_os = ( zafrac_snw * zalb_snw + zafrac_pnd * zalb_pnd + zafrac_ice * zalb_ice ) * tmask(ji,jj,1) 
     165            ! 
     166            zalb_cs = zalb_os - ( - 0.1010 * zalb_os * zalb_os  & 
     167               &                  + 0.1933 * zalb_os - 0.0148 ) * tmask(ji,jj,1) 
     168            ! 
     169            ! albedo depends on cloud fraction because of non-linear spectral effects 
     170            palb_ice(ji,jj,jl) = ( 1._wp - pcloud_fra(ji,jj) ) * zalb_cs + pcloud_fra(ji,jj) * zalb_os 
     171 
     172         END_2D 
    175173      END DO 
    176174      ! 
Note: See TracChangeset for help on using the changeset viewer.