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 2148 for branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/traqsr.F90 – NEMO

Ignore:
Timestamp:
2010-10-04T15:53:42+02:00 (14 years ago)
Author:
cetlod
Message:

merge LOCEAN 2010 developments branches

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/traqsr.F90

    r2024 r2148  
    2727   USE iom             ! I/O manager 
    2828   USE fldread         ! read input fields 
     29   USE restart         ! ocean restart 
    2930 
    3031   IMPLICIT NONE 
     
    4748   ! Module variables 
    4849   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_chl   ! structure of input Chl (file informations, fields read) 
    49    INTEGER ::   nksr   ! levels below which the light cannot penetrate ( depth larger than 391 m) 
     50   INTEGER, PUBLIC ::   nksr              ! levels below which the light cannot penetrate ( depth larger than 391 m) 
    5051   REAL(wp), DIMENSION(3,61) ::   rkrgb   !: tabulated attenuation coefficients for RGB absorption 
    5152 
     
    9596      REAL(wp) ::   zchl, zcoef, zsi0r   ! temporary scalars 
    9697      REAL(wp) ::   zc0, zc1, zc2, zc3   !    -         - 
     98      REAL(wp) ::   z1_e3t, zfact        !    -         - 
    9799      REAL(wp), DIMENSION(jpi,jpj)     ::   zekb, zekg, zekr            ! 2D workspace 
    98100      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ze0, ze1 , ze2, ze3, zea    ! 3D workspace 
     
    111113         ALLOCATE( ztrds(jpi,jpj,jpk) )   ;    ztrds(:,:,:) = 0. 
    112114      ENDIF 
     115 
     116      !                                        Set before qsr tracer content field 
     117      !                                        *********************************** 
     118      IF( kt == nit000 ) THEN                     ! Set the forcing field at nit000 - 1 
     119         !                                        ! ----------------------------------- 
     120         IF( ln_rstart .AND.    &                    ! Restart: read in restart file 
     121              & iom_varid( numror, 'qsr_hc_b', ldstop = .FALSE. ) > 0 ) THEN 
     122            IF(lwp) WRITE(numout,*) '          nit000-1 qsr tracer content forcing field red in the restart file' 
     123            zfact = 0.5e0 
     124            CALL iom_get( numror, jpdom_autoglo, 'qsr_hc_b', qsr_hc_b )   ! before heat content trend due to Qsr flux 
     125         ELSE                                           ! No restart or restart not found: Euler forward time stepping 
     126            zfact = 1.e0 
     127            qsr_hc_b(:,:,:) = 0.e0 
     128         ENDIF 
     129      ELSE                                        ! Swap of forcing field 
     130         !                                        ! --------------------- 
     131         zfact = 0.5e0 
     132         qsr_hc_b(:,:,:) = qsr_hc_n(:,:,:) 
     133      ENDIF 
     134      !                                        Compute now qsr tracer content field 
     135      !                                        ************************************ 
    113136       
    114137      !                                           ! ============================================== ! 
     
    118141            DO jj = 2, jpjm1 
    119142               DO ji = fs_2, fs_jpim1   ! vector opt. 
    120                   ta(ji,jj,jk) = ta(ji,jj,jk) + ro0cpr * ( etot3(ji,jj,jk) - etot3(ji,jj,jk+1) ) / fse3t(ji,jj,jk)  
     143                  qsr_hc_n(ji,jj,jk) = ro0cpr * ( etot3(ji,jj,jk) - etot3(ji,jj,jk+1) ) / fse3t(ji,jj,jk)  
    121144               END DO 
    122145            END DO 
     
    175198               ! 
    176199               DO jk = 1, nksr                                        ! compute and add qsr trend to ta 
    177                   tsa(:,:,jk,jp_tem) = tsa(:,:,jk,jp_tem) + ro0cpr * ( zea(:,:,jk) - zea(:,:,jk+1) ) / fse3t(:,:,jk) 
     200                  qsr_hc_n(:,:,jk) = ro0cpr * ( zea(:,:,jk) - zea(:,:,jk+1) ) 
    178201               END DO 
    179202               zea(:,:,nksr+1:jpk) = 0.e0     ! below 400m set to zero 
     
    182205            ELSE                                                 !*  Constant Chlorophyll 
    183206               DO jk = 1, nksr 
    184                   tsa(:,:,jk,jp_tem) = tsa(:,:,jk,jp_tem) + etot3(:,:,jk) * qsr(:,:) 
     207                  qsr_hc_n(:,:,jk) = etot3(:,:,jk) * qsr(:,:) 
    185208               END DO 
    186209            ENDIF 
     
    194217               DO jj = 2, jpjm1 
    195218                  DO ji = fs_2, fs_jpim1   ! vector opt. 
    196                      tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem) + etot3(ji,jj,jk) * qsr(ji,jj) 
     219                     qsr_hc_n(ji,jj,jk) = etot3(ji,jj,jk) * qsr(ji,jj) 
    197220                  END DO 
    198221               END DO 
     
    200223            ! 
    201224         ENDIF 
     225         ! 
     226      ENDIF 
     227      !                                        Add to the general trend 
     228      !                                        ************************ 
     229      DO jk = 1, nksr 
     230         DO jj = 2, jpjm1  
     231            DO ji = fs_2, fs_jpim1   ! vector opt. 
     232               z1_e3t = zfact / fse3t(ji,jj,jk) 
     233               tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem) + ( qsr_hc_b(ji,jj,jk) + qsr_hc_n(ji,jj,jk) ) * z1_e3t 
     234            END DO 
     235         END DO 
     236      END DO 
     237      ! 
     238      IF( lrst_oce ) THEN   !                  Write in the ocean restart file 
     239         !                                     ******************************* 
     240         IF(lwp) WRITE(numout,*) 
     241         IF(lwp) WRITE(numout,*) 'qsr tracer content forcing field written in ocean restart file ',   & 
     242            &                    'at it= ', kt,' date= ', ndastp 
     243         IF(lwp) WRITE(numout,*) '~~~~' 
     244         CALL iom_rstput( kt, nitrst, numrow, 'qsr_hc_b', qsr_hc_n ) 
    202245         ! 
    203246      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.