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 1445 for trunk/NEMO/TOP_SRC/LOBSTER – NEMO

Ignore:
Timestamp:
2009-05-13T16:35:02+02:00 (15 years ago)
Author:
cetlod
Message:

add the use of bio-optical retroaction on dynamics when coupling with PISCES, see ticket:428

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/TOP_SRC/LOBSTER/trcopt.F90

    r1176 r1445  
    88   !!              -   !  1999-11  (C. Menkes, M.-A. Foujols) itabe initial 
    99   !!              -   !  2000-02  (M.A. Foujols) change x**y par exp(y*log(x)) 
    10    !!             2.0  !  2007-12  (C. Deltel, G. Madec)  F90 
     10   !!   NEMO      2.0  !  2007-12  (C. Deltel, G. Madec)  F90 
     11   !!             3.2  !  2009-04  (C. Ethe, G. Madec)  minor optimisation + style 
    1112   !!---------------------------------------------------------------------- 
    1213#if defined key_lobster 
     
    4546      !! ** Method  :   local par is computed in w layers using light propagation 
    4647      !!              mean par in t layers are computed by integration 
     48      !! 
     49!!gm please remplace the '???' by true comments 
     50      !! ** Action  :   xpar   ??? 
     51      !!                neln   ??? 
     52      !!                xze    ??? 
    4753      !!--------------------------------------------------------------------- 
    4854      INTEGER, INTENT( in ) ::   kt   ! index of the time stepping 
    49       INTEGER  ::   ji, jj, jk 
    50       REAL(wp) ::   zpig                                    ! total pigment 
    51       REAL(wp) ::   zkr                                     ! total absorption coefficient in red 
    52       REAL(wp) ::   zkg                                     ! total absorption coefficient in green 
     55      !! 
     56      INTEGER  ::   ji, jj, jk          ! dummy loop indices 
     57      CHARACTER (len=25) ::   charout   ! temporary character 
     58      REAL(wp) ::   zpig                ! log of the total pigment 
     59      REAL(wp) ::   zkr, zkg            ! total absorption coefficient in red and green 
     60      REAL(wp) ::   zcoef               ! temporary scalar 
    5361      REAL(wp), DIMENSION(jpi,jpj)     ::   zpar100         ! irradiance at euphotic layer depth 
    5462      REAL(wp), DIMENSION(jpi,jpj)     ::   zpar0m          ! irradiance just below the surface 
    5563      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zparr, zparg    ! red and green compound of par 
    5664 
    57       CHARACTER (len=25) :: charout 
    5865      !!--------------------------------------------------------------------- 
    5966 
    6067      IF( kt == nit000 ) THEN 
    6168         IF(lwp) WRITE(numout,*) 
    62          IF(lwp) WRITE(numout,*) ' trc_opt: LOBSTER optic-model' 
    63          IF(lwp) WRITE(numout,*) ' ~~~~~~~' 
     69         IF(lwp) WRITE(numout,*) ' trc_opt : LOBSTER optic-model' 
     70         IF(lwp) WRITE(numout,*) ' ~~~~~~~ ' 
    6471      ENDIF 
    6572 
    66       ! determination of surface irradiance 
    67       ! ----------------------------------- 
    68       zpar0m (:,:)   = qsr   (:,:) * 0.43 
     73      !                                          ! surface irradiance 
     74      zpar0m (:,:)   = qsr   (:,:) * 0.43        ! ------------------ 
    6975      zpar100(:,:)   = zpar0m(:,:) * 0.01 
    7076      xpar   (:,:,1) = zpar0m(:,:) 
    71       zparr  (:,:,1) = 0.5 * zpar0m(:,:) 
    72       zparg  (:,:,1) = 0.5 * zpar0m(:,:) 
     77      zparr  (:,:,1) = zpar0m(:,:) * 0.5 
     78      zparg  (:,:,1) = zpar0m(:,:) * 0.5 
    7379 
     80!!gm optimisation : introduce zcoef and LOG computed once for all 
    7481 
    75       ! determination of xpar 
    76       ! --------------------- 
    77  
    78       DO jk = 2, jpk                     ! determination of local par in w levels 
     82      !                                          ! Photosynthetically Available Radiation (PAR) 
     83      zcoef = 12 * redf / rcchl / rpig           ! -------------------------------------- 
     84      DO jk = 2, jpk                                  ! local par at w-levels 
    7985         DO jj = 1, jpj 
    8086            DO ji = 1, jpi 
    81                zpig = MAX( TINY(0.), trn(ji,jj,jk-1,jpphy) ) * 12 * redf / rcchl / rpig 
    82                zkr  = xkr0 + xkrp * EXP( xlr * LOG( zpig ) ) 
    83                zkg  = xkg0 + xkgp * EXP( xlg * LOG( zpig ) ) 
     87!!gm           zpig = MAX( TINY(0.), trn(ji,jj,jk-1,jpphy) ) * zcoef 
     88!!gm           zkr  = xkr0 + xkrp * EXP( xlr * LOG(zpig) ) 
     89!!gm           zkg  = xkg0 + xkgp * EXP( xlg * LOG(zpig) ) 
     90               zpig = LOG(  MAX( TINY(0.), trn(ji,jj,jk-1,jpphy) ) * zcoef  ) 
     91               zkr  = xkr0 + xkrp * EXP( xlr * zpig ) 
     92               zkg  = xkg0 + xkgp * EXP( xlg * zpig ) 
    8493               zparr(ji,jj,jk) = zparr(ji,jj,jk-1) * EXP( -zkr * fse3t(ji,jj,jk-1) ) 
    8594               zparg(ji,jj,jk) = zparg(ji,jj,jk-1) * EXP( -zkg * fse3t(ji,jj,jk-1) ) 
     
    8796        END DO 
    8897      END DO 
    89  
    90       DO jk = 1, jpkm1                   ! mean par in t levels 
     98!!gm optimisation : suppress one division 
     99      DO jk = 1, jpkm1                                ! mean par at t-levels 
    91100         DO jj = 1, jpj 
    92101            DO ji = 1, jpi 
    93                zpig = MAX( TINY(0.), trn(ji,jj,jk,jpphy) ) * 12 * redf / rcchl / rpig 
    94                zkr  = xkr0 + xkrp * EXP( xlr * LOG( zpig ) ) 
    95                zkg  = xkg0 + xkgp * EXP( xlg * LOG( zpig ) ) 
    96                zparr(ji,jj,jk)    = zparr(ji,jj,jk) / zkr / fse3t(ji,jj,jk) * ( 1 - EXP( -zkr*fse3t(ji,jj,jk) ) ) 
    97                zparg(ji,jj,jk)    = zparg(ji,jj,jk) / zkg / fse3t(ji,jj,jk) * ( 1 - EXP( -zkg*fse3t(ji,jj,jk) ) ) 
     102               zpig = LOG(  MAX( TINY(0.), trn(ji,jj,jk,jpphy) ) * zcoef  ) 
     103               zkr  = xkr0 + xkrp * EXP( xlr * zpig ) 
     104               zkg  = xkg0 + xkgp * EXP( xlg * zpig ) 
     105!!gm           zparr(ji,jj,jk) = zparr(ji,jj,jk) / zkr / fse3t(ji,jj,jk) * ( 1 - EXP( -zkr * fse3t(ji,jj,jk) ) ) 
     106!!gm           zparg(ji,jj,jk) = zparg(ji,jj,jk) / zkg / fse3t(ji,jj,jk) * ( 1 - EXP( -zkg * fse3t(ji,jj,jk) ) ) 
     107               zparr(ji,jj,jk) = zparr(ji,jj,jk) / ( zkr * fse3t(ji,jj,jk) ) * ( 1 - EXP( -zkr * fse3t(ji,jj,jk) ) ) 
     108               zparg(ji,jj,jk) = zparg(ji,jj,jk) / ( zkg * fse3t(ji,jj,jk) ) * ( 1 - EXP( -zkg * fse3t(ji,jj,jk) ) ) 
    98109               xpar (ji,jj,jk) = MAX( zparr(ji,jj,jk) + zparg(ji,jj,jk), 1.e-15 ) 
    99110            END DO 
     
    101112      END DO 
    102113 
    103       ! 3. Determination of euphotic layer depth 
    104       ! ---------------------------------------- 
    105  
    106       ! Euphotic layer bottom level 
    107       neln(:,:) = 1                                           ! initialisation of EL level 
    108       DO jk = 1, jpk 
     114      !                                          ! Euphotic layer 
     115      !                                          ! -------------- 
     116      neln(:,:) = 1                                   ! euphotic layer level 
     117      DO jk = 1, jpk                                  ! (i.e. 1rst T-level strictly below EL bottom) 
    109118         DO jj = 1, jpj 
    110119           DO ji = 1, jpi 
    111               IF( xpar(ji,jj,jk) >= zpar100(ji,jj) )   neln(ji,jj) = jk+1 ! 1rst T-level strictly below EL bottom 
    112               !                                                  ! nb. this is to ensure compatibility with 
    113               !                                                  ! nmld_trc definition in trd_mld_trc_zint 
     120              IF( xpar(ji,jj,jk) >= zpar100(ji,jj) )   neln(ji,jj) = jk + 1  
     121              !                                       ! nb. this is to ensure compatibility with 
     122              !                                       ! nmld_trc definition in trd_mld_trc_zint 
    114123           END DO 
    115124         END DO 
    116       ENDDO 
    117  
    118       ! Euphotic layer depth 
     125      END DO 
     126      !                                               ! Euphotic layer depth 
    119127      DO jj = 1, jpj 
    120128         DO ji = 1, jpi 
    121             xze(ji,jj) = fsdepw( ji, jj, neln(ji,jj) )            ! exact EL depth 
     129            xze(ji,jj) = fsdepw(ji,jj,neln(ji,jj)) 
    122130         END DO 
    123       ENDDO  
     131      END DO  
    124132 
    125133 
    126       IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
     134      IF(ln_ctl) THEN      ! print mean trends (used for debugging) 
    127135         WRITE(charout, FMT="('opt')") 
    128          CALL prt_ctl_trc_info(charout) 
     136         CALL prt_ctl_trc_info( charout ) 
    129137         CALL prt_ctl_trc( tab4d=trn, mask=tmask, clinfo=ctrcnm ) 
    130138      ENDIF 
    131  
     139      ! 
    132140   END SUBROUTINE trc_opt 
    133141 
Note: See TracChangeset for help on using the changeset viewer.