Ignore:
Timestamp:
2014-03-17T16:25:25+01:00 (7 years ago)
Author:
flavoni
Message:

add iom_use function in limwri.F90, see ticket #1259

Location:
branches/dev_r4028_CNRS_LIM3_MV2014/NEMOGCM/NEMO
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/dev_r4028_CNRS_LIM3_MV2014/NEMOGCM/NEMO/LIM_SRC_3/limwri.F90

    r4525 r4532  
    8787      END DO 
    8888      ! 
    89       ! 
    9089      CALL iom_put( "iceconc"      , at_i               )        ! ice concentration 
    9190      !                                              
    92       DO jj = 1, jpj                                             ! mean ice thickness 
    93          DO ji = 1, jpi 
    94             z2d(ji,jj)  = vt_i(ji,jj) / MAX( at_i(ji,jj), epsi06 ) * zind(ji,jj) 
    95          END DO 
    96       END DO 
    97       CALL iom_put( "icethic_cea"  , z2d                 )       ! ice thickness (i.e. icethi(:,:)) 
     91      IF ( iom_use( "icethic_cea" ) ) THEN                       ! mean ice thickness 
     92         DO jj = 1, jpj  
     93            DO ji = 1, jpi 
     94               z2d(ji,jj)  = vt_i(ji,jj) / MAX( at_i(ji,jj), epsi06 ) * zind(ji,jj) 
     95            END DO 
     96         END DO 
     97         CALL iom_put( "icethic_cea"  , z2d              ) 
     98      ENDIF 
    9899      CALL iom_put( "icevolu"      , vt_i                )       ! ice volume = mean ice thickness over the cell 
    99       DO jj = 1, jpj                                             
    100          DO ji = 1, jpi 
    101             z2d(ji,jj)  = vt_s(ji,jj) / MAX( at_i(ji,jj), epsi06 ) * zind(ji,jj) 
    102          END DO 
    103       END DO 
    104       CALL iom_put( "snowthic_cea" , z2d                 )       ! snow thickness = mean snow thickness over the cell 
    105       CALL iom_put( "ioceflxb"     , fbif * at_i         )       ! oceanic flux at the ice base 
     100      IF ( iom_use( "snowthic_cea" ) ) THEN                      ! snow thickness = mean snow thickness over the cell  
     101         DO jj = 1, jpj                                             
     102            DO ji = 1, jpi 
     103               z2d(ji,jj)  = vt_s(ji,jj) / MAX( at_i(ji,jj), epsi06 ) * zind(ji,jj) 
     104            END DO 
     105         END DO 
     106         CALL iom_put( "snowthic_cea" , z2d              )        
     107      ENDIF 
     108      WRITE(numout,*) '   valore del iom_use snowthic_cea', iom_use( "snowthic_cea" ) 
     109      WRITE(numout,*) '   valore del iom_use icethic_cea', iom_use( "icethic_cea" ) 
     110      IF ( iom_use( "ioceflxb" ) ) THEN  
     111         CALL iom_put( "ioceflxb"     , fbif * at_i         )       ! oceanic flux at the ice base 
     112      ENDIF 
    106113      CALL iom_put( "isst"         , sst_m               )       ! sea surface temperature 
    107114      CALL iom_put( "isss"         , sss_m               )       ! sea surface salinity 
    108       CALL iom_put( "qt_oce"       , qns + qsr           )       ! total flux at ocean surface 
     115      IF ( iom_use( "qt_oce" ) ) THEN  
     116         CALL iom_put( "qt_oce"       , qns + qsr           )       ! total flux at ocean surface 
     117      ENDIF 
    109118      ! 
    110       DO jj = 2 , jpjm1 
    111          DO ji = 2 , jpim1 
    112             z2da(ji,jj)  = (  u_ice(ji,jj) * tmu(ji,jj) + u_ice(ji-1,jj) * tmu(ji-1,jj) ) * 0.5_wp 
    113             z2db(ji,jj)  = (  v_ice(ji,jj) * tmv(ji,jj) + v_ice(ji,jj-1) * tmv(ji,jj-1) ) * 0.5_wp 
    114         END DO 
    115       END DO 
    116       CALL lbc_lnk( z2da, 'T', -1. ) 
    117       CALL lbc_lnk( z2db, 'T', -1. ) 
    118       DO jj = 1, jpj                                  
    119          DO ji = 1, jpi 
    120             z2d(ji,jj)  = SQRT( z2da(ji,jj) * z2da(ji,jj) + z2db(ji,jj) * z2db(ji,jj) )  
    121          END DO 
    122       END DO 
    123       CALL iom_put( "uice_ipa"     , z2da                )       ! ice velocity u component 
    124       CALL iom_put( "vice_ipa"     , z2db                )       ! ice velocity v component 
    125       CALL iom_put( "icevel"       , z2d                 )       ! ice velocity module 
    126       CALL iom_put( "icebopr"      , diag_bot_gr * rday  )       ! daily bottom thermodynamic ice production 
    127       CALL iom_put( "icedypr"      , diag_dyn_gr * rday  )       ! daily dynamic ice production (rid/raft) 
     119      IF ( iom_use( "uice_ipa" ) .OR. iom_use( "vice_ipa" ) .OR. iom_use( "icevel" )) THEN  
     120         DO jj = 2 , jpjm1 
     121            DO ji = 2 , jpim1 
     122               z2da(ji,jj)  = (  u_ice(ji,jj) * tmu(ji,jj) + u_ice(ji-1,jj) * tmu(ji-1,jj) ) * 0.5_wp 
     123               z2db(ji,jj)  = (  v_ice(ji,jj) * tmv(ji,jj) + v_ice(ji,jj-1) * tmv(ji,jj-1) ) * 0.5_wp 
     124           END DO 
     125         END DO 
     126         CALL lbc_lnk( z2da, 'T', -1. ) 
     127         CALL lbc_lnk( z2db, 'T', -1. ) 
     128         CALL iom_put( "uice_ipa"     , z2da                )       ! ice velocity u component 
     129         CALL iom_put( "vice_ipa"     , z2db                )       ! ice velocity v component 
     130         DO jj = 1, jpj                                  
     131            DO ji = 1, jpi 
     132               z2d(ji,jj)  = SQRT( z2da(ji,jj) * z2da(ji,jj) + z2db(ji,jj) * z2db(ji,jj) )  
     133            END DO 
     134         END DO 
     135         CALL iom_put( "icevel"       , z2d                 )       ! ice velocity module 
     136      ENDIF 
     137      IF ( iom_use( "icebopr" ) ) THEN  
     138         CALL iom_put( "icebopr"      , diag_bot_gr * rday  )       ! daily bottom thermodynamic ice production 
     139      ENDIF 
     140      IF ( iom_use( "icebopr" ) ) THEN  
     141         CALL iom_put( "icedypr"      , diag_dyn_gr * rday  )       ! daily dynamic ice production (rid/raft) 
     142      ENDIF 
    128143!!SF BE CAREFUL : qsr_oce qnd qns_oce are after penetration over ice 
    129144      CALL iom_put( "qsr_oce"      , qsr                 )       ! solar flux at ocean surface 
     
    151166      CALL iom_put( "micesalt"     , smt_i               )        ! mean ice salinity 
    152167      ! 
    153       z2d(:,:) = 0.e0 
    154       DO jl = 1, jpl 
     168      IF ( iom_use( "miceage" ) ) THEN  
     169         z2d(:,:) = 0.e0 
     170         DO jl = 1, jpl 
     171            DO jj = 1, jpj 
     172               DO ji = 1, jpi 
     173                  z2d(ji,jj) = z2d(ji,jj) + zind(ji,jj) * oa_i(ji,jj,jl) 
     174               END DO 
     175            END DO 
     176         END DO 
     177         z1_365 = 1._wp / 365._wp 
     178         CALL iom_put( "miceage"     , z2d * z1_365         )        ! mean ice age 
     179      ENDIF 
     180      IF ( iom_use( "icelapr" ) ) THEN  
     181         CALL iom_put( "icelapr"     , diag_lat_gr * rday   )        ! daily lateral thermodynamic ice production 
     182      ENDIF 
     183      IF ( iom_use( "icesipr" ) ) THEN  
     184         CALL iom_put( "icesipr"     , diag_sni_gr * rday   )        ! daily snowice ice production 
     185      ENDIF 
     186      IF ( iom_use( "micet" ) ) THEN  
    155187         DO jj = 1, jpj 
    156188            DO ji = 1, jpi 
    157                z2d(ji,jj) = z2d(ji,jj) + zind(ji,jj) * oa_i(ji,jj,jl) 
    158             END DO 
    159          END DO 
    160       END DO 
    161       z1_365 = 1._wp / 365._wp 
    162       CALL iom_put( "miceage"     , z2d * z1_365         )        ! mean ice age 
    163       CALL iom_put( "icelapr"     , diag_lat_gr * rday   )        ! daily lateral thermodynamic ice production 
    164       CALL iom_put( "icesipr"     , diag_sni_gr * rday   )        ! daily snowice ice production 
    165       DO jj = 1, jpj 
    166          DO ji = 1, jpi 
    167             z2d(ji,jj) = ( tm_i(ji,jj) - rtt ) * zind(ji,jj) 
    168          END DO 
    169       END DO 
    170  
    171       CALL iom_put( "micet"       , z2d                  )        ! mean ice temperature 
     189               z2d(ji,jj) = ( tm_i(ji,jj) - rtt ) * zind(ji,jj) 
     190            END DO 
     191         END DO 
     192         CALL iom_put( "micet"       , z2d                  )        ! mean ice temperature 
     193      ENDIF 
    172194      CALL iom_put( "icehc"       , et_i                 )        ! ice total heat content 
    173195      CALL iom_put( "isnowhc"     , et_s                 )        ! snow total heat content 
    174196      ! 
    175       z2d(:,:) = 0.e0 
    176       DO jl = 1, jpl 
     197      IF ( iom_use( "icest" ) ) THEN  
     198         z2d(:,:) = 0.e0 
     199         DO jl = 1, jpl 
     200            DO jj = 1, jpj 
     201               DO ji = 1, jpi 
     202                  z2d(ji,jj) = z2d(ji,jj) + zind(ji,jj) * ( t_su(ji,jj,jl) - rtt ) * a_i(ji,jj,jl) / MAX( at_i(ji,jj) , epsi06 ) 
     203               END DO 
     204            END DO 
     205         END DO 
     206         CALL iom_put( "icest"       , z2d                 )        ! ice surface temperature 
     207      ENDIF 
     208      IF ( iom_use( "sfxthd" ) ) THEN  
     209         CALL iom_put( "sfxthd"      , sfx_thd * rday      )        ! equivalent FW salt flux 
     210      ENDIF 
     211      IF ( iom_use( "ibrinv" ) ) THEN  
     212         CALL iom_put( "ibrinv"      , bv_i * 100._wp      )        ! brine volume 
     213      ENDIF 
     214      IF ( iom_use( "icecolf" ) ) THEN  
    177215         DO jj = 1, jpj 
    178216            DO ji = 1, jpi 
    179                z2d(ji,jj) = z2d(ji,jj) + zind(ji,jj) * ( t_su(ji,jj,jl) - rtt ) * a_i(ji,jj,jl) / MAX( at_i(ji,jj) , epsi06 ) 
    180             END DO 
    181          END DO 
    182       END DO 
    183       CALL iom_put( "icest"       , z2d                 )        ! ice surface temperature 
    184       CALL iom_put( "sfxthd"      , sfx_thd * rday      )        ! equivalent FW salt flux 
    185       CALL iom_put( "ibrinv"      , bv_i * 100._wp      )        ! brine volume 
    186       DO jj = 1, jpj 
    187          DO ji = 1, jpi 
    188             zindb  = MAX( zzero , SIGN( zone , at_i(ji,jj) ) ) 
    189             z2d(ji,jj) = hicol(ji,jj) * zindb 
    190          END DO 
    191       END DO 
    192       CALL iom_put( "icecolf"     , z2d                 )        ! frazil ice collection thickness 
    193       CALL iom_put( "icestr"      , strength * 0.001    )        ! ice strength 
    194       CALL iom_put( "isume"       , diag_sur_me * rday  )        ! surface melt  
    195       CALL iom_put( "ibome"       , diag_bot_me * rday  )        ! bottom melt  
    196       CALL iom_put( "idive"       , divu_i * 1.0e8      )        ! divergence 
    197       CALL iom_put( "ishear"      , shear_i * 1.0e8     )        ! shear 
    198       CALL iom_put( "isume"       , diag_sur_me * rday  )        ! surface melt  
    199       CALL iom_put( "icerepr"     , diag_res_pr * rday  )        ! daily prod./melting due to limupdate  
     217               zindb  = MAX( zzero , SIGN( zone , at_i(ji,jj) ) ) 
     218               z2d(ji,jj) = hicol(ji,jj) * zindb 
     219            END DO 
     220         END DO 
     221         CALL iom_put( "icecolf"     , z2d                 )        ! frazil ice collection thickness 
     222      ENDIF 
     223      IF ( iom_use( "icestr" ) ) THEN  
     224         CALL iom_put( "icestr"      , strength * 0.001    )        ! ice strength 
     225      ENDIF 
     226      IF ( iom_use( "isume" ) ) THEN  
     227         CALL iom_put( "isume"       , diag_sur_me * rday  )        ! surface melt  
     228      ENDIF 
     229      IF ( iom_use( "ibome" ) ) THEN  
     230         CALL iom_put( "ibome"       , diag_bot_me * rday  )        ! bottom melt  
     231      ENDIF 
     232      IF ( iom_use( "idive" ) ) THEN  
     233         CALL iom_put( "idive"       , divu_i * 1.0e8      )        ! divergence 
     234      ENDIF 
     235      IF ( iom_use( "ishear" ) ) THEN  
     236         CALL iom_put( "ishear"      , shear_i * 1.0e8     )        ! shear 
     237      ENDIF 
     238      IF ( iom_use( "icerepr" ) ) THEN  
     239         CALL iom_put( "icerepr"     , diag_res_pr * rday  )        ! daily prod./melting due to limupdate  
     240      ENDIF 
    200241      CALL iom_put( "snowvol"     , vt_s                )        ! snow volume 
    201       CALL iom_put( "sfxmec"      , sfx_mec * rday      )        ! salt flux from ridging rafting 
    202       CALL iom_put( "sfxres"      , sfx_res * rday      )        ! salt flux from limupdate (resultant) 
    203       CALL iom_put( "icetrp"      , diag_trp_vi * rday  )        ! ice volume transport 
     242      IF ( iom_use( "sfxmec" ) ) THEN  
     243         CALL iom_put( "sfxmec"      , sfx_mec * rday      )        ! salt flux from ridging rafting 
     244      ENDIF 
     245      IF ( iom_use( "sfxres" ) ) THEN  
     246         CALL iom_put( "sfxres"      , sfx_res * rday      )        ! salt flux from limupdate (resultant) 
     247      ENDIF 
     248      IF ( iom_use( "icetrp" ) ) THEN  
     249         CALL iom_put( "icetrp"      , diag_trp_vi * rday  )        ! ice volume transport 
     250      ENDIF 
    204251 
    205252 
     
    208255      !-------------------------------- 
    209256 
     257      IF ( iom_use( "iceage_cat" ) ) THEN  
    210258         DO jl = 1, jpl  
    211259            CALL lbc_lnk( a_i(:,:,jl)  , 'T' ,  1. ) 
     
    226274  
    227275         CALL iom_put( "iceage_cat"     , zoi         )        ! ice age for categories 
    228  
    229          ! Compute brine volume 
     276      ENDIF 
     277 
     278      ! Compute brine volume 
     279      IF ( iom_use( "iceage_cat" ) ) THEN  
    230280         zei(:,:,:) = 0._wp 
    231281         DO jl = 1, jpl  
     
    245295            CALL lbc_lnk( zei(:,:,jl) , 'T' ,  1. ) 
    246296         END DO 
     297         CALL iom_put( "brinevol_cat"     , zei         )        ! brine volume for categories 
     298      ENDIF 
    247299 
    248300         CALL iom_put( "iceconc_cat"      , a_i         )        ! area for categories 
     
    250302         CALL iom_put( "snowthic_cat"     , ht_s        )        ! snow depth for categories 
    251303         CALL iom_put( "salinity_cat"     , sm_i        )        ! salinity for categories 
    252          CALL iom_put( "brinevol_cat"     , zei         )        ! brine volume for categories 
    253304 
    254305      !     !  Create an output files (output.lim.abort.nc) if S < 0 or u > 20 
  • branches/dev_r4028_CNRS_LIM3_MV2014/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90

    r4525 r4532  
    4949#endif 
    5050   PUBLIC iom_init, iom_swap, iom_open, iom_close, iom_setkt, iom_varid, iom_get, iom_gettime, iom_rstput, iom_put 
    51    PUBLIC iom_getatt 
     51   PUBLIC iom_getatt, iom_use 
    5252 
    5353   PRIVATE iom_rp0d, iom_rp1d, iom_rp2d, iom_rp3d 
     
    14461446 
    14471447#endif 
     1448 
     1449   LOGICAL FUNCTION iom_use( cdname ) 
     1450      CHARACTER(LEN=*), INTENT(in) ::   cdname 
     1451#if defined key_iomput 
     1452      iom_use = xios_field_is_active( cdname ) 
     1453#else 
     1454      iom_use = .FALSE. 
     1455#endif 
     1456   END FUNCTION iom_use 
    14481457    
    14491458   !!====================================================================== 
Note: See TracChangeset for help on using the changeset viewer.