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 187 for trunk/NEMO/OPA_SRC/TRA/traqsr.F90 – NEMO

Ignore:
Timestamp:
2004-11-30T11:16:22+01:00 (19 years ago)
Author:
opalod
Message:

CL + CE : UPDATE129 : for use of tracer component

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/TRA/traqsr.F90

    r106 r187  
    1212   USE oce             ! ocean dynamics and active tracers 
    1313   USE dom_oce         ! ocean space and time domain 
    14    USE trdtra_oce     ! ocean active tracer trends 
     14   USE trdtra_oce      ! ocean active tracer trends 
    1515   USE in_out_manager  ! I/O manager 
     16 
     17   USE trc_oce         ! share SMS/Ocean variables 
    1618 
    1719   USE ocesbc          ! thermohaline fluxes 
     
    2931 
    3032   !! * Module variables 
    31    REAL(wp) ::          & !!! * penetrative solar radiation namelist * 
     33   REAL(wp), PUBLIC ::  & !!! * penetrative solar radiation namelist * 
    3234      rabs = 0.58_wp,   &  ! fraction associated with xsi1 
    3335      xsi1 = 0.35_wp,   &  ! first depth of extinction  
    3436      xsi2 = 23.0_wp       ! second depth of extinction  
    3537      !                    ! (default values: water type Ib) 
     38   LOGICAL ::           &  
     39      ln_qsr_sms = .false. ! flag to use or not the biological  
     40      !                    ! fluxes for light  
     41    
    3642   INTEGER ::    & 
    3743      nksr                 ! number of levels 
     
    95101      ENDIF 
    96102 
    97       !                                                ! =================== ! 
    98       IF( lk_sco ) THEN                                !     s-coordinate    ! 
    99          !                                             ! =================== ! 
    100          ! 
    101          !                                                   ! =============== 
    102          DO jk = 1, jpkm1                                    ! Horizontal slab 
    103             !                                                ! =============== 
    104             DO jj = 2, jpjm1 
    105                DO ji = fs_2, fs_jpim1   ! vector opt. 
    106  
    107                   zdp1 = -fsdepw(ji,jj,jk  )              ! compute the qsr trend 
    108                   zdp2 = -fsdepw(ji,jj,jk+1) 
    109                   zc0  = qsr(ji,jj) * ro0cpr / fse3t(ji,jj,jk) 
    110                   zc1  =   (  rabs * EXP(zdp1/xsi1) + (1.-rabs) * EXP(zdp1/xsi2)  ) 
    111                   zc2  = - (  rabs * EXP(zdp2/xsi1) + (1.-rabs) * EXP(zdp2/xsi2)  ) 
    112                   zta  = zc0 * (  zc1 * tmask(ji,jj,jk) + zc2 * tmask(ji,jj,jk+1)  ) 
    113  
    114                   ta(ji,jj,jk) = ta(ji,jj,jk) + zta       ! add qsr trend to the temperature trend 
    115  
    116 #      if defined key_trdtra || defined key_trdmld 
    117                   ttrd(ji,jj,jk,7) = zta                  ! save the qsr trend 
    118 #      endif 
    119                END DO 
    120             END DO 
    121             !                                                ! =============== 
    122          END DO                                              !   End of slab 
    123          !                                                   ! =============== 
    124       ENDIF 
    125       !                                                ! =================== ! 
    126       IF( lk_zps ) THEN                                !    partial steps    ! 
    127          !                                             ! =================== ! 
     103      IF( lk_qsr_sms .AND. ln_qsr_sms ) THEN    !  Biological fluxes  ! 
     104         !                                     ! =================== ! 
    128105         ! 
    129106         !                                                ! =============== 
    130          DO jk = 1, nksr                                  ! Horizontal slab 
     107         DO jk = 1, jpkm1                                 ! Horizontal slab 
    131108            !                                             ! =============== 
    132109            DO jj = 2, jpjm1 
    133110               DO ji = fs_2, fs_jpim1   ! vector opt. 
    134     
    135                   zc0 = qsr(ji,jj) / fse3t(ji,jj,jk)      ! compute the qsr trend 
    136                   zta = zc0 * ( gdsr(jk) * tmask(ji,jj,jk) - gdsr(jk+1) * tmask(ji,jj,jk+1) ) 
    137     
     111                   
     112                  zc0 = ro0cpr  / fse3t(ji,jj,jk)      ! compute the qsr trend 
     113                  zta = zc0 * ( etot3(ji,jj,jk  ) * tmask(ji,jj,jk)     & 
     114                     &        - etot3(ji,jj,jk+1) * tmask(ji,jj,jk+1) ) 
     115                   
    138116                  ta(ji,jj,jk) = ta(ji,jj,jk) + zta       ! add qsr trend to the temperature trend 
    139     
     117                   
    140118#      if defined key_trdtra || defined key_trdmld 
    141119                  ttrd(ji,jj,jk,7) = zta                  ! save the qsr trend 
     
    146124         END DO                                           !   End of slab 
    147125         !                                                ! =============== 
    148       ENDIF 
     126      ELSE 
    149127      !                                                ! =================== ! 
    150       IF( lk_zco ) THEN                                !     z-coordinate    ! 
     128         IF( lk_sco ) THEN                                !     s-coordinate    ! 
    151129         !                                             ! =================== ! 
    152130         ! 
    153          !                                                ! =============== 
    154          DO jk = 1, nksr                                  ! Horizontal slab 
    155             !                                             ! =============== 
    156             zc0 = 1. / fse3t(1,1,jk) 
    157             DO jj = 2, jpjm1 
    158                DO ji = fs_2, fs_jpim1   ! vector opt. 
    159                   !                                       ! compute qsr forcing trend 
    160                   zta = qsr(ji,jj) * zc0 * ( gdsr(jk)*tmask(ji,jj,jk) - gdsr(jk+1)*tmask(ji,jj,jk+1) ) 
    161     
    162                   ta(ji,jj,jk) = ta(ji,jj,jk) + zta       ! add qsr trend to the temperature trend 
    163     
     131         !                                                   ! =============== 
     132            DO jk = 1, jpkm1                                    ! Horizontal slab 
     133            !                                                ! =============== 
     134               DO jj = 2, jpjm1 
     135                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     136 
     137                     zdp1 = -fsdepw(ji,jj,jk  )              ! compute the qsr trend 
     138                     zdp2 = -fsdepw(ji,jj,jk+1) 
     139                     zc0  = qsr(ji,jj) * ro0cpr / fse3t(ji,jj,jk) 
     140                     zc1  =   (  rabs * EXP(zdp1/xsi1) + (1.-rabs) * EXP(zdp1/xsi2)  ) 
     141                     zc2  = - (  rabs * EXP(zdp2/xsi1) + (1.-rabs) * EXP(zdp2/xsi2)  ) 
     142                     zta  = zc0 * (  zc1 * tmask(ji,jj,jk) + zc2 * tmask(ji,jj,jk+1)  ) 
     143                      
     144                     ta(ji,jj,jk) = ta(ji,jj,jk) + zta       ! add qsr trend to the temperature trend 
     145                      
    164146#      if defined key_trdtra || defined key_trdmld 
    165                   ttrd(ji,jj,jk,7) = zta                  ! save the qsr forcing trend 
     147                     ttrd(ji,jj,jk,7) = zta                  ! save the qsr trend 
    166148#      endif 
    167                END DO 
    168             END DO 
    169             !                                             ! =============== 
    170          END DO                                           !   End of slab 
    171          !                                                ! =============== 
    172       ENDIF 
    173  
    174       IF(l_ctl) THEN         ! print mean trends (used for debugging) 
    175          zta = SUM( ta(2:nictl,2:njctl,1:jpkm1) * tmask(2:nictl,2:njctl,1:jpkm1) ) 
     149                  END DO 
     150               END DO 
     151               !                                                ! =============== 
     152            END DO                                              !   End of slab 
     153            !                                                   ! =============== 
     154         ENDIF 
     155         !                                                ! =================== ! 
     156         IF( lk_zps ) THEN                                !    partial steps    ! 
     157            !                                             ! =================== ! 
     158            ! 
     159            !                                                ! =============== 
     160            DO jk = 1, nksr                                  ! Horizontal slab 
     161               !                                             ! =============== 
     162               DO jj = 2, jpjm1 
     163                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     164                      
     165                     zc0 = qsr(ji,jj) / fse3t(ji,jj,jk)      ! compute the qsr trend 
     166                     zta = zc0 * ( gdsr(jk) * tmask(ji,jj,jk) - gdsr(jk+1) * tmask(ji,jj,jk+1) ) 
     167                      
     168                     ta(ji,jj,jk) = ta(ji,jj,jk) + zta       ! add qsr trend to the temperature trend 
     169                      
     170#      if defined key_trdtra || defined key_trdmld 
     171                     ttrd(ji,jj,jk,7) = zta                  ! save the qsr trend 
     172#      endif 
     173                  END DO 
     174               END DO 
     175               !                                             ! =============== 
     176            END DO                                           !   End of slab 
     177            !                                                ! =============== 
     178         ENDIF 
     179         !                                                ! =================== ! 
     180         IF( lk_zco ) THEN                                !     z-coordinate    ! 
     181            !                                             ! =================== ! 
     182            ! 
     183            !                                                ! =============== 
     184            DO jk = 1, nksr                                  ! Horizontal slab 
     185               !                                             ! =============== 
     186               zc0 = 1. / fse3t(1,1,jk) 
     187               DO jj = 2, jpjm1 
     188                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     189                     !                                       ! compute qsr forcing trend 
     190                     zta = qsr(ji,jj) * zc0 * ( gdsr(jk)*tmask(ji,jj,jk) - gdsr(jk+1)*tmask(ji,jj,jk+1) ) 
     191                      
     192                     ta(ji,jj,jk) = ta(ji,jj,jk) + zta       ! add qsr trend to the temperature trend 
     193                      
     194#      if defined key_trdtra || defined key_trdmld 
     195                     ttrd(ji,jj,jk,7) = zta                  ! save the qsr forcing trend 
     196#      endif 
     197                  END DO 
     198               END DO 
     199               !                                             ! =============== 
     200            END DO                                           !   End of slab 
     201            !                                                ! =============== 
     202         ENDIF 
     203         ! 
     204      ENDIF 
     205 
     206 
     207      IF( l_ctl .AND. lwp ) THEN         ! print mean trends (used for debugging) 
     208!         zta = SUM( ta(2:jpim1,2:jpjm1,1:jpkm1) * tmask(2:jpim1,2:jpjm1,1:jpkm1) ) 
     209!         zta = SUM( ta * tmask )  
     210          zta = SUM( ta(2:nictl,2:njctl,1:jpkm1) * tmask(2:nictl,2:njctl,1:jpkm1) ) 
    176211         WRITE(numout,*) ' qsr  - Ta: ', zta-t_ctl 
    177212         t_ctl = zta  
     
    212247      !!---------------------------------------------------------------------- 
    213248      !! * Local declarations 
    214       INTEGER ::    jk,    &  ! dummy loop index 
    215                     indic      ! temporary integer 
    216       REAL(wp) ::   zdp1       ! temporary scalar 
    217  
    218       NAMELIST/namqsr/ ln_traqsr, rabs, xsi1, xsi2 
     249      INTEGER ::    ji,jj,jk, &  ! dummy loop index 
     250                    indic        ! temporary integer 
     251      REAL(wp) ::   zdp1         ! temporary scalar 
     252 
     253      NAMELIST/namqsr/ ln_traqsr, rabs, xsi1, xsi2, ln_qsr_sms 
    219254      !!---------------------------------------------------------------------- 
    220255 
     
    231266         WRITE(numout,*) 'tra_qsr_init : penetration of the surface solar radiation' 
    232267         WRITE(numout,*) '~~~~~~~~~~~~' 
    233          WRITE(numout,*) '          Namelist namqsr : set the parameter of penetration' 
    234          WRITE(numout,*) '             fraction associated with xsi   rabs   = ',rabs 
    235          WRITE(numout,*) '             first depth of extinction      xsi1   = ',xsi1 
    236          WRITE(numout,*) '             second depth of extinction     xsi2   = ',xsi2 
    237          WRITE(numout,*) 
     268         WRITE(numout,*) '    Namelist namqsr : set the parameter of penetration' 
     269         WRITE(numout,*) '        fraction associated with xsi     rabs        = ',rabs 
     270         WRITE(numout,*) '        first depth of extinction        xsi1        = ',xsi1 
     271         WRITE(numout,*) '        second depth of extinction       xsi2        = ',xsi2 
     272         IF( lk_qsr_sms ) THEN 
     273            WRITE(numout,*) '     Biological fluxes for light(Y/N) ln_qsr_sms  = ',ln_qsr_sms 
     274         ENDIF 
     275         WRITE(numout,*) ' ' 
    238276        END IF 
    239277      ELSE 
     
    277315            WRITE(numout,*) 
    278316         ENDIF 
     317         ! Initialisation of Biological fluxes for light here because 
     318         ! the optical biological model is call after the dynamical one 
     319         IF( lk_qsr_sms .AND. ln_qsr_sms ) THEN 
     320            DO jk = 1, jpkm1 
     321               DO jj = 1, jpj 
     322                  DO ji = 1, jpi 
     323                     etot3(ji,jj,jk) = qsr(ji,jj) * gdsr(jk) * tmask(ji,jj,jk) / ro0cpr 
     324                  END DO 
     325               END DO 
     326            END DO 
     327         ENDIF 
     328 
    279329      ENDIF 
    280330 
Note: See TracChangeset for help on using the changeset viewer.