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 4038 for branches/2013/dev_r4028_CNRS_LIM3 – NEMO

Ignore:
Timestamp:
2013-09-25T15:32:29+02:00 (11 years ago)
Author:
clem
Message:

add solar flux penetration of ice and ocean

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90

    r3680 r4038  
    1010   !!             -   !  2005-11  (G. Madec) zco, zps, sco coordinate 
    1111   !!            3.2  !  2009-04  (G. Madec & NEMO team)  
     12   !!            4.0  !  2012-05  (C. Rousset) store attenuation coef for use in ice model  
    1213   !!---------------------------------------------------------------------- 
    1314 
     
    2728   USE iom             ! I/O manager 
    2829   USE fldread         ! read input fields 
     30   USE restart         ! ocean restart 
    2931   USE lib_mpp         ! MPP library 
    3032   USE wrk_nemo       ! Memory Allocation 
     
    4345   LOGICAL , PUBLIC ::   ln_qsr_2bd = .TRUE.    !: 2 band         light absorption flag 
    4446   LOGICAL , PUBLIC ::   ln_qsr_bio = .FALSE.   !: bio-model      light absorption flag 
     47   LOGICAL , PUBLIC ::   ln_qsr_ice = .FALSE.   !: light penetration for ice-model LIM3 (clem) 
    4548   INTEGER , PUBLIC ::   nn_chldta  = 0         !: use Chlorophyll data (=1) or not (=0) 
    4649   REAL(wp), PUBLIC ::   rn_abs     = 0.58_wp   !: fraction absorbed in the very near surface (RGB & 2 bands) 
     
    99102      REAL(wp) ::   zchl, zcoef, zfact   ! local scalars 
    100103      REAL(wp) ::   zc0, zc1, zc2, zc3   !    -         - 
     104      REAL(wp) ::   zzc0, zzc1, zzc2, zzc3   !    -         - 
    101105      REAL(wp) ::   zz0, zz1, z1_e3t     !    -         - 
    102106      REAL(wp), POINTER, DIMENSION(:,:  ) :: zekb, zekg, zekr 
     
    158162         END DO 
    159163         CALL iom_put( 'qsr3d', etot3 )   ! Shortwave Radiation 3D distribution 
     164         ! clem: store attenuation coefficient of the first ocean level 
     165         IF ( ln_qsr_ice ) THEN 
     166            DO jj = 1, jpj 
     167               DO ji = 1, jpi 
     168                  IF ( qsr(ji,jj) /= 0._wp ) THEN 
     169                     oatte(ji,jj) = ( qsr_hc(ji,jj,1) / ( r1_rau0_rcp * qsr(ji,jj) ) ) 
     170                     iatte(ji,jj) = oatte(ji,jj) 
     171                  ENDIF 
     172               END DO 
     173            END DO 
     174         ENDIF 
    160175         !                                        ! ============================================== ! 
    161176      ELSE                                        !  Ocean alone :  
     
    216231                  END DO 
    217232               END DO 
     233               ! clem: store attenuation coefficient of the first ocean level 
     234               IF ( ln_qsr_ice ) THEN 
     235                  DO jj = 1, jpj 
     236                     DO ji = 1, jpi 
     237                        zzc0 = rn_abs * EXP( - fse3t(ji,jj,1) * xsi0r     ) 
     238                        zzc1 = zcoef  * EXP( - fse3t(ji,jj,1) * zekb(ji,jj) ) 
     239                        zzc2 = zcoef  * EXP( - fse3t(ji,jj,1) * zekg(ji,jj) ) 
     240                        zzc3 = zcoef  * EXP( - fse3t(ji,jj,1) * zekr(ji,jj) ) 
     241                        oatte(ji,jj) = 1.0 - ( zzc0 + zzc1 + zzc2  + zzc3  ) * tmask(ji,jj,2)  
     242                        iatte(ji,jj) = 1.0 - ( zzc0 + zzc1 + zcoef + zcoef ) * tmask(ji,jj,2) 
     243                     END DO 
     244                  END DO 
     245               ENDIF 
    218246               ! 
    219247               DO jk = 1, nksr                                        ! compute and add qsr trend to ta 
     
    227255                  qsr_hc(:,:,jk) =  etot3(:,:,jk) * qsr(:,:) 
    228256               END DO 
    229             ENDIF 
     257               ! clem: store attenuation coefficient of the first ocean level 
     258               IF ( ln_qsr_ice ) THEN 
     259                  oatte(:,:) = etot3(:,:,1) / r1_rau0_rcp 
     260                  iatte(:,:) = oatte(:,:) 
     261               ENDIF 
     262           ENDIF 
    230263 
    231264         ENDIF 
     
    246279                  END DO 
    247280               END DO 
     281               ! clem: store attenuation coefficient of the first ocean level 
     282               IF ( ln_qsr_ice ) THEN 
     283                  DO jj = 1, jpj 
     284                     DO ji = 1, jpi 
     285                        zc0 = zz0 * EXP( -fsdepw(ji,jj,1)*xsi0r ) + zz1 * EXP( -fsdepw(ji,jj,1)*xsi1r ) 
     286                        zc1 = zz0 * EXP( -fsdepw(ji,jj,2)*xsi0r ) + zz1 * EXP( -fsdepw(ji,jj,2)*xsi1r ) 
     287                        oatte(ji,jj) = ( zc0*tmask(ji,jj,1) - zc1*tmask(ji,jj,2) ) / r1_rau0_rcp 
     288                        iatte(ji,jj) = oatte(ji,jj) 
     289                     END DO 
     290                  END DO 
     291               ENDIF 
    248292            ELSE                                               !* constant volume: coef. computed one for all 
    249293               DO jk = 1, nksr 
     
    254298                  END DO 
    255299               END DO 
     300               ! clem: store attenuation coefficient of the first ocean level 
     301               IF ( ln_qsr_ice ) THEN 
     302                  oatte(:,:) = etot3(:,:,1) / r1_rau0_rcp 
     303                  iatte(:,:) = oatte(:,:) 
     304               ENDIF 
    256305               ! 
    257306            ENDIF 
     
    270319         ! 
    271320      ENDIF 
     321      ! clem: store attenuation coefficient of the first ocean level 
     322      !IF (ln_traqsr) THEN 
     323      !   DO jj = 1, jpj 
     324      !      DO ji = 1, jpi 
     325      !         IF ( qsr(ji,jj) /= 0._wp ) THEN 
     326      !            oatte(ji,jj) = qsr_hc(ji,jj,1) / ( r1_rau0_rcp * qsr(ji,jj) ) 
     327      !            iatte(ji,jj) = qsr_hc(ji,jj,1) / ( r1_rau0_rcp * qsr(ji,jj) ) 
     328      !         ENDIF 
     329      !      END DO 
     330      !   END DO 
     331      !END IF 
    272332      ! 
    273333      IF( lrst_oce ) THEN   !                  Write in the ocean restart file 
     
    325385      TYPE(FLD_N)        ::   sn_chl   ! informations about the chlorofyl field to be read 
    326386      !! 
    327       NAMELIST/namtra_qsr/  sn_chl, cn_dir, ln_traqsr, ln_qsr_rgb, ln_qsr_2bd, ln_qsr_bio,   & 
     387      NAMELIST/namtra_qsr/  sn_chl, cn_dir, ln_traqsr, ln_qsr_rgb, ln_qsr_2bd, ln_qsr_bio, ln_qsr_ice,  & 
    328388         &                  nn_chldta, rn_abs, rn_si0, rn_si1 
    329389      !!---------------------------------------------------------------------- 
     
    331391      ! 
    332392      IF( nn_timing == 1 )  CALL timing_start('tra_qsr_init') 
     393      ! 
     394      ! clem init for oatte and iatte 
     395      oatte(:,:) = 1._wp 
     396      iatte(:,:) = 1._wp 
    333397      ! 
    334398      CALL wrk_alloc( jpi, jpj,      zekb, zekg, zekr        )  
     
    354418         WRITE(numout,*) '      2 band               light penetration   ln_qsr_2bd = ', ln_qsr_2bd 
    355419         WRITE(numout,*) '      bio-model            light penetration   ln_qsr_bio = ', ln_qsr_bio 
     420         WRITE(numout,*) '      light penetration for ice-model LIM3     ln_qsr_ice = ', ln_qsr_ice 
    356421         WRITE(numout,*) '      RGB : Chl data (=1) or cst value (=0)    nn_chldta  = ', nn_chldta 
    357422         WRITE(numout,*) '      RGB & 2 bands: fraction of light (rn_si1)    rn_abs = ', rn_abs 
Note: See TracChangeset for help on using the changeset viewer.