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 9433 for branches/2017/dev_merge_2017/NEMOGCM/NEMO – NEMO

Ignore:
Timestamp:
2018-03-26T17:38:31+02:00 (6 years ago)
Author:
clem
Message:

add two outputs: mean snow temperature and ice surface temperature per category

Location:
branches/2017/dev_merge_2017/NEMOGCM/NEMO/LIM_SRC_3
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_merge_2017/NEMOGCM/NEMO/LIM_SRC_3/ice.F90

    r9076 r9433  
    145145   !! sm_i        |      -      |    Mean sea ice salinity        | ppt   | 
    146146   !! tm_i        |      -      |    Mean sea ice temperature     | K     | 
     147   !! tm_s        |      -      |    Mean snow    temperature     | K     | 
    147148   !! et_i        !      -      !    Total ice enthalpy           | J/m2  |  
    148149   !! et_s        !      -      !    Total snow enthalpy          | J/m2  |  
     
    340341   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   et_i , et_s  !: ice and snow total heat content 
    341342   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   tm_i         !: mean ice temperature over all categories 
     343   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   tm_s         !: mean snw temperature over all categories 
    342344   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   bvm_i        !: brine volume averaged over all categories 
    343345   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sm_i         !: mean sea ice salinity averaged over all categories [PSU] 
     
    458460      ALLOCATE( u_ice(jpi,jpj) , v_ice(jpi,jpj) ,                                      & 
    459461         &      vt_i (jpi,jpj) , vt_s (jpi,jpj) , at_i(jpi,jpj) , ato_i(jpi,jpj) ,     & 
    460          &      et_i (jpi,jpj) , et_s (jpi,jpj) , tm_i(jpi,jpj) , bvm_i(jpi,jpj) ,     & 
     462         &      et_i (jpi,jpj) , et_s (jpi,jpj) , tm_i(jpi,jpj) , tm_s (jpi,jpj) , bvm_i(jpi,jpj) ,  & 
    461463         &      sm_i (jpi,jpj) , tm_su(jpi,jpj) , hm_i(jpi,jpj) , hm_s (jpi,jpj) ,     & 
    462464         &      om_i (jpi,jpj) , tau_icebfr(jpi,jpj)                             , STAT=ierr(ii) ) 
  • branches/2017/dev_merge_2017/NEMOGCM/NEMO/LIM_SRC_3/icevar.F90

    r9271 r9433  
    2424   !!                        - vt_s(jpi,jpj) 
    2525   !!                        - at_i(jpi,jpj) 
    26    !!                        - et_s(jpi,jpj)  !total snow heat content 
    27    !!                        - et_i(jpi,jpj)  !total ice thermal content  
    28    !!                        - sm_i(jpi,jpj) !mean ice salinity 
    29    !!                        - tm_i (jpi,jpj) !mean ice temperature 
     26   !!                        - et_s(jpi,jpj)  total snow heat content 
     27   !!                        - et_i(jpi,jpj)  total ice thermal content  
     28   !!                        - sm_i(jpi,jpj)  mean ice salinity 
     29   !!                        - tm_i(jpi,jpj)  mean ice temperature 
     30   !!                        - tm_s(jpi,jpj)  mean snw temperature 
    3031   !!====================================================================== 
    3132   !! History :   -   ! 2006-01 (M. Vancoppenolle) Original code 
     
    9192      ! 
    9293      INTEGER ::   ji, jj, jk, jl   ! dummy loop indices 
    93       REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   z1_at_i, z1_vt_i 
     94      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   z1_at_i, z1_vt_i, z1_vt_s 
    9495      !!------------------------------------------------------------------- 
    9596      ! 
     
    108109      IF( kn > 1 ) THEN 
    109110         ! 
    110          ALLOCATE( z1_at_i(jpi,jpj) , z1_vt_i(jpi,jpj) ) 
     111         ALLOCATE( z1_at_i(jpi,jpj) , z1_vt_i(jpi,jpj) , z1_vt_s(jpi,jpj) ) 
    111112         WHERE( at_i(:,:) > epsi20 )   ;   z1_at_i(:,:) = 1._wp / at_i(:,:) 
    112113         ELSEWHERE                     ;   z1_at_i(:,:) = 0._wp 
     
    114115         WHERE( vt_i(:,:) > epsi20 )   ;   z1_vt_i(:,:) = 1._wp / vt_i(:,:) 
    115116         ELSEWHERE                     ;   z1_vt_i(:,:) = 0._wp 
     117         END WHERE 
     118         WHERE( vt_s(:,:) > epsi20 )   ;   z1_vt_s(:,:) = 1._wp / vt_s(:,:) 
     119         ELSEWHERE                     ;   z1_vt_s(:,:) = 0._wp 
    116120         END WHERE 
    117121         ! 
     
    127131         ! 
    128132         tm_i(:,:) = 0._wp 
     133         tm_s(:,:) = 0._wp 
    129134         DO jl = 1, jpl 
    130135            DO jk = 1, nlay_i 
    131136               tm_i(:,:) = tm_i(:,:) + r1_nlay_i * t_i (:,:,jk,jl) * v_i(:,:,jl) * z1_vt_i(:,:) 
     137            END DO 
     138            DO jk = 1, nlay_s 
     139               tm_s(:,:) = tm_s(:,:) + r1_nlay_s * t_s (:,:,jk,jl) * v_s(:,:,jl) * z1_vt_s(:,:) 
    132140            END DO 
    133141         END DO 
     
    138146            tm_si(:,:) = rt0 
    139147            tm_i (:,:) = rt0 
    140          END WHERE 
    141  
    142          DEALLOCATE( z1_at_i , z1_vt_i ) 
     148            tm_s (:,:) = rt0 
     149         END WHERE 
     150 
     151         DEALLOCATE( z1_at_i , z1_vt_i , z1_vt_s ) 
    143152      ENDIF 
    144153      ! 
  • branches/2017/dev_merge_2017/NEMOGCM/NEMO/LIM_SRC_3/icewri.F90

    r9124 r9433  
    5050      REAL(wp) ::   z2da, z2db, zrho1, zrho2 
    5151      REAL(wp), DIMENSION(jpi,jpj)     ::   z2d !  2D workspace 
    52       REAL(wp), DIMENSION(jpi,jpj)     ::   zmsk00, zmsk05, zmsk15 ! O%, 5% and 15% concentration mask 
    53       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zmsk00l        ! cat masks 
     52      REAL(wp), DIMENSION(jpi,jpj)     ::   zmsk00, zmsk05, zmsk15, zmsksn ! O%, 5% and 15% concentration mask and snow mask 
     53      REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zmsk00l, zmsksnl               ! cat masks 
    5454      ! 
    5555      ! Global ice diagnostics (SIMIP) 
     
    7272            zmsk05(ji,jj) = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - 0.05_wp ) ) ! 1 if 5% ice , 0 if less 
    7373            zmsk15(ji,jj) = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - 0.15_wp ) ) ! 1 if 15% ice, 0 if less 
     74            zmsksn(ji,jj) = MAX( 0._wp , SIGN( 1._wp , vt_s(ji,jj) - epsi06  ) ) ! 1 if snow   , 0 if no snow 
    7475         END DO 
    7576      END DO 
     
    7879            DO ji = 1, jpi 
    7980               zmsk00l(ji,jj,jl)  = MAX( 0._wp , SIGN( 1._wp , a_i(ji,jj,jl) - epsi06 ) ) 
     81               zmsksnl(ji,jj,jl)  = MAX( 0._wp , SIGN( 1._wp , v_s(ji,jj,jl) - epsi06 ) ) 
    8082            END DO 
    8183         END DO 
     
    9395      ! general fields 
    9496      IF( iom_use('icemass'  ) )   CALL iom_put( "icemass", rhoic * vt_i * zmsk00 )   ! Ice mass per cell area  
    95       IF( iom_use('snwmass'  ) )   CALL iom_put( "snwmass", rhosn * vt_s * zmsk00 )   ! Snow mass per cell area 
     97      IF( iom_use('snwmass'  ) )   CALL iom_put( "snwmass", rhosn * vt_s * zmsksn )   ! Snow mass per cell area 
    9698      IF( iom_use('icepres'  ) )   CALL iom_put( "icepres", zmsk00                )   ! Ice presence (1 or 0)  
    9799      IF( iom_use('iceconc'  ) )   CALL iom_put( "iceconc", at_i  * zmsk00        )   ! ice concentration 
     
    102104      IF( iom_use('iceage'   ) )   CALL iom_put( "iceage" , om_i  * zmsk00 / rday )   ! ice age 
    103105      IF( iom_use('icehnew'  ) )   CALL iom_put( "icehnew", ht_i_new              )   ! new ice thickness formed in the leads 
    104       IF( iom_use('snwvolu'  ) )   CALL iom_put( "snwvolu", vt_s  * zmsk00        )   ! snow volume 
     106      IF( iom_use('snwvolu'  ) )   CALL iom_put( "snwvolu", vt_s  * zmsksn        )   ! snow volume 
    105107      IF( iom_use('icefrb') ) THEN 
    106108         z2d(:,:) = ( zrho1 * hm_i(:,:) - zrho2 * hm_s(:,:) )                                          
     
    119121      ! heat 
    120122      IF( iom_use('icetemp'  ) )   CALL iom_put( "icetemp", ( tm_i  - rt0 ) * zmsk00 )   ! ice mean temperature 
     123      IF( iom_use('snwtemp'  ) )   CALL iom_put( "snwtemp", ( tm_s  - rt0 ) * zmsksn )   ! snw mean temperature 
    121124      IF( iom_use('icettop'  ) )   CALL iom_put( "icettop", ( tm_su - rt0 ) * zmsk00 )   ! temperature at the ice surface 
    122125      IF( iom_use('icetbot'  ) )   CALL iom_put( "icetbot", ( t_bo  - rt0 ) * zmsk00 )   ! temperature at the ice bottom 
    123126      IF( iom_use('icetsni'  ) )   CALL iom_put( "icetsni", ( tm_si - rt0 ) * zmsk00 )   ! temperature at the snow-ice interface 
    124127      IF( iom_use('icehc'    ) )   CALL iom_put( "icehc"  ,  -et_i          * zmsk00 )   ! ice heat content 
    125       IF( iom_use('snwhc'    ) )   CALL iom_put( "snwhc"  ,  -et_s          * zmsk00 )   ! snow heat content 
     128      IF( iom_use('snwhc'    ) )   CALL iom_put( "snwhc"  ,  -et_s          * zmsksn )   ! snow heat content 
    126129 
    127130      ! momentum 
     
    147150      IF( iom_use('iceconc_cat' ) )   CALL iom_put( "iceconc_cat" , a_i * zmsk00l                                              )   ! area for categories 
    148151      IF( iom_use('icethic_cat' ) )   CALL iom_put( "icethic_cat" , h_i * zmsk00l                                              )   ! thickness for categories 
    149       IF( iom_use('snwthic_cat' ) )   CALL iom_put( "snwthic_cat" , h_s * zmsk00l                                              )   ! snow depth for categories 
     152      IF( iom_use('snwthic_cat' ) )   CALL iom_put( "snwthic_cat" , h_s * zmsksnl                                              )   ! snow depth for categories 
    150153      IF( iom_use('icesalt_cat' ) )   CALL iom_put( "icesalt_cat" , s_i * zmsk00l                                              )   ! salinity for categories 
    151154      IF( iom_use('iceage_cat'  ) )   CALL iom_put( "iceage_cat"  , o_i * zmsk00l / rday                                       )   ! ice age 
    152155      IF( iom_use('icetemp_cat' ) )   CALL iom_put( "icetemp_cat" , ( SUM( t_i(:,:,:,:), dim=3 ) * r1_nlay_i - rt0 ) * zmsk00l )   ! ice temperature 
    153       IF( iom_use('snwtemp_cat' ) )   CALL iom_put( "snwtemp_cat" , ( SUM( t_s(:,:,:,:), dim=3 ) * r1_nlay_s - rt0 ) * zmsk00l )   ! snow temperature 
    154       IF( iom_use('icebrv_cat'  ) )   CALL iom_put( "icebrv_cat"  , bv_i * 100. * zmsk00l                                      )   ! brine volume 
    155       IF( iom_use('iceapnd_cat' ) )   CALL iom_put( "iceapnd_cat" , a_ip        * zmsk00l                                      )   ! melt pond frac for categories 
    156       IF( iom_use('icehpnd_cat' ) )   CALL iom_put( "icehpnd_cat" , h_ip        * zmsk00l                                      )   ! melt pond frac for categories 
    157       IF( iom_use('iceafpnd_cat') )   CALL iom_put( "iceafpnd_cat", a_ip_frac   * zmsk00l                                      )   ! melt pond frac for categories 
     156      IF( iom_use('snwtemp_cat' ) )   CALL iom_put( "snwtemp_cat" , ( SUM( t_s(:,:,:,:), dim=3 ) * r1_nlay_s - rt0 ) * zmsksnl )   ! snow temperature 
     157      IF( iom_use('icettop_cat' ) )   CALL iom_put( "icettop_cat" , ( t_su - rt0 ) * zmsk00l                                   )   ! surface temperature 
     158      IF( iom_use('icebrv_cat'  ) )   CALL iom_put( "icebrv_cat"  ,   bv_i * 100.  * zmsk00l                                   )   ! brine volume 
     159      IF( iom_use('iceapnd_cat' ) )   CALL iom_put( "iceapnd_cat" ,   a_ip         * zmsk00l                                   )   ! melt pond frac for categories 
     160      IF( iom_use('icehpnd_cat' ) )   CALL iom_put( "icehpnd_cat" ,   h_ip         * zmsk00l                                   )   ! melt pond frac for categories 
     161      IF( iom_use('iceafpnd_cat') )   CALL iom_put( "iceafpnd_cat",   a_ip_frac    * zmsk00l                                   )   ! melt pond frac for categories 
    158162 
    159163      !------------------ 
Note: See TracChangeset for help on using the changeset viewer.