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 434 for trunk/NEMO/OPA_SRC/istate.F90 – NEMO

Ignore:
Timestamp:
2006-04-10T17:46:12+02:00 (18 years ago)
Author:
opalod
Message:

nemo_v1_update_044 : CT : update the passive tracers TOP component and the standard GYRE configuration

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/istate.F90

    r392 r434  
    101101            CALL istate_eel                      ! EEL   configuration : start from pre-defined 
    102102            !                                    !                       velocity and thermohaline fields 
    103          ELSEIF(  cp_cfg == 'gyre') THEN          
     103         ELSEIF( cp_cfg == 'gyre' ) THEN          
    104104            CALL istate_gyre                     ! GYRE  configuration : start from pre-defined temperature 
    105105            !                                    !                       and salinity fields  
     
    396396      !!      9.0  !  04-05  (A. Koch-Larrouy)  Original code  
    397397      !!---------------------------------------------------------------------- 
     398      !! * Modules used 
     399      USE ioipsl 
     400 
    398401      !! * Local variables 
    399       INTEGER :: ji, jj, jk     ! dummy loop indices 
    400       !!---------------------------------------------------------------------- 
    401  
    402       IF(lwp) WRITE(numout,*) 
    403       IF(lwp) WRITE(numout,*) 'istate_gyre : initial analytical T and S profil deduced from LEVITUS ' 
    404       IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    405  
    406       DO jk = 1, jpk 
    407          DO jj = 1, jpj 
    408             DO ji = 1, jpi 
    409                tn(ji,jj,jk) = (  16. - 12. * TANH( (fsdept(ji,jj,jk) - 400) / 700 )         )   & 
    410                     &           * (-TANH( (500-fsdept(ji,jj,jk)) / 150 ) + 1) / 2               & 
    411                     &       + (      15. * ( 1. - TANH( (fsdept(ji,jj,jk)-50.) / 1500.) )       & 
    412                     &                - 1.4 * TANH((fsdept(ji,jj,jk)-100.) / 100.)               &     
    413                     &                + 7.  * (1500. - fsdept(ji,jj,jk)) / 1500.             )   &  
    414                     &           * (-TANH( (fsdept(ji,jj,jk) - 500) / 150) + 1) / 2 
    415                tn(ji,jj,jk) = tn(ji,jj,jk) * tmask(ji,jj,jk) 
    416                tb(ji,jj,jk) = tn(ji,jj,jk) 
    417  
    418                sn(ji,jj,jk) =  (  36.25 - 1.13 * TANH( (fsdept(ji,jj,jk) - 305) / 460 )  )  & 
    419                   &              * (-TANH((500 - fsdept(ji,jj,jk)) / 150) + 1) / 2          & 
    420                   &          + (  35.55 + 1.25 * (5000. - fsdept(ji,jj,jk)) / 5000.         & 
    421                   &                - 1.62 * TANH( (fsdept(ji,jj,jk) - 60.  ) / 650. )       & 
    422                   &                + 0.2  * TANH( (fsdept(ji,jj,jk) - 35.  ) / 100. )       & 
    423                   &                + 0.2  * TANH( (fsdept(ji,jj,jk) - 1000.) / 5000.)    )  & 
    424                   &              * (-TANH((fsdept(ji,jj,jk) - 500) / 150) + 1) / 2  
    425                sn(ji,jj,jk) = sn(ji,jj,jk) * tmask(ji,jj,jk) 
    426                sb(ji,jj,jk) = sn(ji,jj,jk) 
     402      INTEGER, PARAMETER ::   jpmois = 12 
     403      INTEGER, PARAMETER ::   & 
     404         ntsinit = 0         ! (0/1) (analytical/input data files) T&S initialization 
     405 
     406      CHARACTER (len=32) ::   clname 
     407      INTEGER :: ji, jj, jk                       ! dummy loop indices 
     408      INTEGER ::   ipi, ipj, ipk, itime           ! temporary integers 
     409      INTEGER, DIMENSION(jpmois) ::   istep 
     410 
     411      REAL(wp) ::   zdate0, zdt 
     412      REAL(wp), DIMENSION(jpk) ::   zlev 
     413      REAL(wp), DIMENSION(jpi,jpj) ::   zlon, zlat 
     414      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zt_dta, zs_dta 
     415      !!---------------------------------------------------------------------- 
     416 
     417      SELECT CASE ( ntsinit) 
     418 
     419      CASE ( 0 )                  ! analytical T/S profil deduced from LEVITUS 
     420         IF(lwp) WRITE(numout,*) 
     421         IF(lwp) WRITE(numout,*) 'istate_gyre : initial analytical T and S profil deduced from LEVITUS ' 
     422         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
     423 
     424         DO jk = 1, jpk 
     425            DO jj = 1, jpj 
     426               DO ji = 1, jpi 
     427                  tn(ji,jj,jk) = (  16. - 12. * TANH( (fsdept(ji,jj,jk) - 400) / 700 )         )   & 
     428                       &           * (-TANH( (500-fsdept(ji,jj,jk)) / 150 ) + 1) / 2               & 
     429                       &       + (      15. * ( 1. - TANH( (fsdept(ji,jj,jk)-50.) / 1500.) )       & 
     430                       &                - 1.4 * TANH((fsdept(ji,jj,jk)-100.) / 100.)               &     
     431                       &                + 7.  * (1500. - fsdept(ji,jj,jk)) / 1500.             )   &  
     432                       &           * (-TANH( (fsdept(ji,jj,jk) - 500) / 150) + 1) / 2 
     433                  tn(ji,jj,jk) = tn(ji,jj,jk) * tmask(ji,jj,jk) 
     434                  tb(ji,jj,jk) = tn(ji,jj,jk) 
     435 
     436                  sn(ji,jj,jk) =  (  36.25 - 1.13 * TANH( (fsdept(ji,jj,jk) - 305) / 460 )  )  & 
     437                     &              * (-TANH((500 - fsdept(ji,jj,jk)) / 150) + 1) / 2          & 
     438                     &          + (  35.55 + 1.25 * (5000. - fsdept(ji,jj,jk)) / 5000.         & 
     439                     &                - 1.62 * TANH( (fsdept(ji,jj,jk) - 60.  ) / 650. )       & 
     440                     &                + 0.2  * TANH( (fsdept(ji,jj,jk) - 35.  ) / 100. )       & 
     441                     &                + 0.2  * TANH( (fsdept(ji,jj,jk) - 1000.) / 5000.)    )  & 
     442                     &              * (-TANH((fsdept(ji,jj,jk) - 500) / 150) + 1) / 2  
     443                  sn(ji,jj,jk) = sn(ji,jj,jk) * tmask(ji,jj,jk) 
     444                  sb(ji,jj,jk) = sn(ji,jj,jk) 
     445               END DO 
    427446            END DO 
    428447         END DO 
    429       END DO 
     448 
     449      CASE ( 1 )                  ! T/S data fields read in dta_tem.nc/data_sal.nc files 
     450         IF(lwp) WRITE(numout,*) 
     451         IF(lwp) WRITE(numout,*) 'istate_gyre : initial T and S read from dta_tem.nc/data_sal.nc files' 
     452         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
     453         IF(lwp) WRITE(numout,*) '              NetCDF FORMAT' 
     454 
     455         ! Read temperature field 
     456         ! ---------------------- 
     457         ! open file 
     458         zdt = rdt 
     459         clname = 'data_tem' 
     460         CALL flinopen(TRIM(clname), mig(1), nlci , mjg(1),  nlcj   & 
     461            &    , .false.     , ipi   , ipj  , ipk   , zlon        & 
     462            &    , zlat        , zlev  , itime, istep , zdate0      & 
     463            &    , zdt         , numtdt ) 
     464 
     465         ! title, dimensions and tests 
     466         IF( ipi /= jpidta .OR. ipj /= jpjdta .OR. ipk /= jpk ) THEN 
     467            IF(lwp) THEN 
     468               WRITE(numout,*) 
     469               WRITE(numout,*) 'problem with dimensions' 
     470               WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta 
     471               WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta 
     472               WRITE(numout,*) ' ipk ',ipk,' jpk ',jpk 
     473            ENDIF 
     474            STOP 'istate_gyre' 
     475         ENDIF 
     476         IF(lwp) WRITE(numout,*) itime,istep(1),zdate0,zdt,numtdt 
     477 
     478          
     479         ! Read data 
     480         zt_dta(:,:,:) = 0.e0 
     481         CALL flinget( numtdt,'votemper',jpidta,jpjdta,jpk,1,1,   & 
     482            &          1,mig(1),nlci,mjg(1),nlcj,zt_dta(1:nlci,1:nlcj,1:jpk)) 
     483 
     484         tn(:,:,:) = zt_dta(:,:,:)*tmask(:,:,:)  
     485         tb(:,:,:) = zt_dta(:,:,:)*tmask(:,:,:)  
     486 
     487         CALL flinclo( numtdt ) 
     488 
     489         IF(lwp) WRITE(numout,*) 
     490         IF(lwp) WRITE(numout,*) '              read temperature data ok' 
     491         IF(lwp) WRITE(numout,*) 
     492 
     493         ! Read salinity field 
     494         ! ------------------- 
     495         ! open file 
     496         zdt = rdt 
     497         clname = 'data_sal' 
     498         CALL flinopen(TRIM(clname), mig(1), nlci , mjg(1),  nlcj   & 
     499            &    , .false.     , ipi   , ipj  , ipk   , zlon        & 
     500            &    , zlat        , zlev  , itime, istep , zdate0      & 
     501            &    , zdt         , numsdt ) 
     502 
     503         ! title, dimensions and tests 
     504 
     505         IF( ipi /= jpidta .OR. ipj /= jpjdta .OR. ipk /= jpk ) THEN 
     506             IF(lwp) THEN 
     507                 WRITE(numout,*) 
     508                 WRITE(numout,*) 'problem with dimensions' 
     509                 WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta 
     510                 WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta 
     511                 WRITE(numout,*) ' ipk ',ipk,' jpk ',jpk 
     512             ENDIF 
     513             STOP 'istate_gyre' 
     514         ENDIF 
     515         IF(lwp) WRITE(numout,*) itime,istep(1),zdate0,zdt,numsdt 
     516 
     517         ! Read data 
     518         zs_dta(:,:,:) = 0.e0 
     519         CALL flinget(numsdt,'vosaline',jpidta,jpjdta,jpk,1,1,   & 
     520            &         1,mig(1),nlci,mjg(1),nlcj,zs_dta(1:nlci,1:nlcj,1:jpk)) 
     521 
     522         sn(:,:,:)  = zs_dta(:,:,:)*tmask(:,:,:)  
     523         sb(:,:,:)  = zs_dta(:,:,:)*tmask(:,:,:)  
     524 
     525         CALL flinclo( numsdt ) 
     526 
     527         IF(lwp) WRITE(numout,*) 
     528         IF(lwp) WRITE(numout,*) '              read salinity data ok' 
     529         IF(lwp) WRITE(numout,*) 
     530 
     531      END SELECT 
    430532 
    431533      IF(lwp) THEN 
Note: See TracChangeset for help on using the changeset viewer.