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 2977 for branches/2011/dev_LOCEAN_2011/NEMOGCM/NEMO/OPA_SRC/DOM – NEMO

Ignore:
Timestamp:
2011-10-22T15:46:41+02:00 (13 years ago)
Author:
cetlod
Message:

Add in branch 2011/dev_LOCEAN_2011 changes from 2011/dev_r2787_PISCES_improvment, 2011/dev_r2787_LOCEAN_offline_fldread and 2011/dev_r2787_LOCEAN3_TRA_TRP branches, see ticket #877

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/dev_LOCEAN_2011/NEMOGCM/NEMO/OPA_SRC/DOM/istate.F90

    r2777 r2977  
    1313   !!            2.0  !  2006-07  (S. Masson)  distributed restart using iom 
    1414   !!            3.3  !  2010-10  (C. Ethe) merge TRC-TRA 
     15   !!            3.4  !  2011-04  (G. Madec) Merge of dtatem and dtasal & suppression of tb,tn/sb,sn  
    1516   !!---------------------------------------------------------------------- 
    1617 
     
    3031   USE zdf_oce         ! ocean vertical physics 
    3132   USE phycst          ! physical constants 
    32    USE dtatem          ! temperature data                 (dta_tem routine) 
    33    USE dtasal          ! salinity data                    (dta_sal routine) 
     33   USE dtatsd          ! data temperature and salinity   (dta_tsd routine) 
    3434   USE restart         ! ocean restart                   (rst_read routine) 
    3535   USE in_out_manager  ! I/O manager 
     
    4242   USE dynspg_exp      ! pressure gradient schemes 
    4343   USE dynspg_ts       ! pressure gradient schemes 
    44    USE traswp          ! Swap arrays                      (tra_swp routine) 
    4544   USE lib_mpp         ! MPP library 
    4645 
     
    7372      IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
    7473 
    75       rhd  (:,:,:) = 0.e0 
    76       rhop (:,:,:) = 0.e0 
    77       rn2  (:,:,:) = 0.e0  
    78       ta   (:,:,:) = 0.e0     
    79       sa   (:,:,:) = 0.e0 
     74      CALL dta_tsd_init                       ! Initialisation of T & S input data 
     75 
     76      rhd  (:,:,:  ) = 0.e0 
     77      rhop (:,:,:  ) = 0.e0 
     78      rn2  (:,:,:  ) = 0.e0  
     79      tsa  (:,:,:,:) = 0.e0     
    8080 
    8181      IF( ln_rstart ) THEN                    ! Restart from a file 
     
    8383         neuler = 1                              ! Set time-step indicator at nit000 (leap-frog) 
    8484         CALL rst_read                           ! Read the restart file 
    85          CALL tra_swap                           ! swap 3D arrays (t,s)  in a 4D array (ts) 
    8685         CALL day_init                           ! model calendar (using both namelist and restart infos) 
    8786      ELSE 
     
    9998         hdivb(:,:,:) = 0.e0   ;   hdivn(:,:,:) = 0.e0 
    10099         ! 
    101          IF( cp_cfg == 'eel' ) THEN 
     100         IF( cp_cfg == 'eel'      ) THEN 
    102101            CALL istate_eel                      ! EEL   configuration : start from pre-defined U,V T-S fields 
    103102         ELSEIF( cp_cfg == 'gyre' ) THEN          
    104103            CALL istate_gyre                     ! GYRE  configuration : start from pre-defined T-S fields 
    105          ELSE 
    106             !                                    ! Other configurations: Initial T-S fields 
    107 #if defined key_dtatem 
    108             CALL dta_tem( nit000 )                  ! read 3D temperature data 
    109             tb(:,:,:) = t_dta(:,:,:)   ;   tn(:,:,:) = t_dta(:,:,:) 
    110              
    111 #else 
    112             IF(lwp) WRITE(numout,*)                 ! analytical temperature profile 
    113             IF(lwp) WRITE(numout,*)'             Temperature initialization using an analytic profile' 
    114             CALL istate_tem 
    115 #endif 
    116 #if defined key_dtasal 
    117             CALL dta_sal( nit000 )                  ! read 3D salinity data 
    118             sb(:,:,:) = s_dta(:,:,:)   ;   sn(:,:,:) = s_dta(:,:,:) 
    119 #else 
    120             ! No salinity data 
    121             IF(lwp)WRITE(numout,*)                  ! analytical salinity profile 
    122             IF(lwp)WRITE(numout,*)'             Salinity initialisation using a constant value' 
    123             CALL istate_sal 
    124 #endif 
     104         ELSEIF( ln_tsd_init      ) THEN         ! Initial T-S fields read in files 
     105            CALL dta_tsd( nit000, tsb )                  ! read 3D T and S data at nit000 
     106            tsn(:,:,:,:) = tsb(:,:,:,:) 
     107            ! 
     108         ELSE                                    ! Initial T-S fields defined analytically 
     109            CALL istate_t_s 
    125110         ENDIF 
    126111         ! 
    127          CALL tra_swap                     ! swap 3D arrays (tb,sb,tn,sn)  in a 4D array 
    128112         CALL eos( tsb, rhd, rhop )        ! before potential and in situ densities 
    129113#if ! defined key_c1d 
     
    150134   END SUBROUTINE istate_init 
    151135 
    152  
    153    SUBROUTINE istate_tem 
     136   SUBROUTINE istate_t_s 
    154137      !!--------------------------------------------------------------------- 
    155       !!                  ***  ROUTINE istate_tem  *** 
     138      !!                  ***  ROUTINE istate_t_s  *** 
    156139      !!    
    157140      !! ** Purpose :   Intialization of the temperature field with an  
    158141      !!      analytical profile or a file (i.e. in EEL configuration) 
    159142      !! 
    160       !! ** Method  :   Use Philander analytic profile of temperature 
     143      !! ** Method  : - temperature: use Philander analytic profile 
     144      !!              - salinity   : use to a constant value 35.5 
    161145      !! 
    162146      !! References :  Philander ??? 
    163147      !!---------------------------------------------------------------------- 
    164       INTEGER :: ji, jj, jk 
     148      INTEGER  :: ji, jj, jk 
     149      REAL(wp) ::   zsal = 35.50 
    165150      !!---------------------------------------------------------------------- 
    166151      ! 
    167152      IF(lwp) WRITE(numout,*) 
    168       IF(lwp) WRITE(numout,*) 'istate_tem : initial temperature profile' 
    169       IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
     153      IF(lwp) WRITE(numout,*) 'istate_t_s : Philander s initial temperature profile' 
     154      IF(lwp) WRITE(numout,*) '~~~~~~~~~~   and constant salinity (',zsal,' psu)' 
    170155      ! 
    171156      DO jk = 1, jpk 
    172          DO jj = 1, jpj 
    173             DO ji = 1, jpi 
    174                tn(ji,jj,jk) = (  ( ( 7.5 - 0.*ABS(gphit(ji,jj))/30. )   & 
    175                   &               *( 1.-TANH((fsdept(ji,jj,jk)-80.)/30.) )   & 
    176                   &            + 10.*(5000.-fsdept(ji,jj,jk))/5000.)  ) * tmask(ji,jj,jk) 
    177                tb(ji,jj,jk) = tn(ji,jj,jk) 
    178           END DO 
    179         END DO 
     157         tsn(:,:,jk,jp_tem) = (  ( ( 7.5 - 0. * ABS( gphit(:,:) )/30. ) * ( 1.-TANH((fsdept(:,:,jk)-80.)/30.) )   & 
     158            &                + 10. * ( 5000. - fsdept(:,:,jk) ) /5000.)  ) * tmask(:,:,jk) 
     159         tsb(:,:,jk,jp_tem) = tsn(:,:,jk,jp_tem) 
    180160      END DO 
    181       ! 
    182       IF(lwp) CALL prizre( tn    , jpi   , jpj   , jpk   , jpj/2 ,   & 
    183          &                 1     , jpi   , 5     , 1     , jpk   ,   & 
    184          &                 1     , 1.    , numout                  ) 
    185       ! 
    186    END SUBROUTINE istate_tem 
    187  
    188  
    189    SUBROUTINE istate_sal 
    190       !!--------------------------------------------------------------------- 
    191       !!                  ***  ROUTINE istate_sal  *** 
    192       !! 
    193       !! ** Purpose :   Intialize the salinity field with an analytic profile 
    194       !! 
    195       !! ** Method  :   Use to a constant value 35.5 
    196       !!               
    197       !! ** Action  :   Initialize sn and sb 
    198       !!---------------------------------------------------------------------- 
    199       REAL(wp) ::   zsal = 35.50_wp 
    200       !!---------------------------------------------------------------------- 
    201       ! 
    202       IF(lwp) WRITE(numout,*) 
    203       IF(lwp) WRITE(numout,*) 'istate_sal : initial salinity : ', zsal 
    204       IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
    205       ! 
    206       sn(:,:,:) = zsal * tmask(:,:,:) 
    207       sb(:,:,:) = sn(:,:,:) 
    208       ! 
    209    END SUBROUTINE istate_sal 
     161      tsn(:,:,:,jp_sal) = zsal * tmask(:,:,:) 
     162      tsb(:,:,:,jp_sal) = tsn(:,:,:,jp_sal) 
     163      ! 
     164   END SUBROUTINE istate_t_s 
    210165 
    211166 
     
    254209            ! 
    255210            DO jk = 1, jpk 
    256                tn(:,:,jk) = ( zt2 + zt1 * exp( - fsdept(:,:,jk) / 1000 ) ) * tmask(:,:,jk) 
    257                tb(:,:,jk) = tn(:,:,jk) 
     211               tsn(:,:,jk,jp_tem) = ( zt2 + zt1 * exp( - fsdept(:,:,jk) / 1000 ) ) * tmask(:,:,jk) 
     212               tsb(:,:,jk,jp_tem) = tsn(:,:,jk,jp_tem) 
    258213            END DO 
    259214            ! 
    260             IF(lwp) CALL prizre( tn    , jpi   , jpj   , jpk   , jpj/2 ,   & 
    261                &                 1     , jpi   , 5     , 1     , jpk   ,   & 
    262                &                 1     , 1.    , numout                  ) 
     215            IF(lwp) CALL prizre( tsn(:,:,:,jp_tem), jpi   , jpj   , jpk   , jpj/2 ,   & 
     216               &                             1     , jpi   , 5     , 1     , jpk   ,   & 
     217               &                             1     , 1.    , numout                  ) 
    263218            ! 
    264219            ! set salinity field to a constant value 
     
    268223            IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
    269224            ! 
    270             sn(:,:,:) = zsal * tmask(:,:,:) 
    271             sb(:,:,:) = sn(:,:,:) 
     225            tsn(:,:,:,jp_sal) = zsal * tmask(:,:,:) 
     226            tsb(:,:,:,jp_sal) = tsn(:,:,:,jp_sal) 
    272227            ! 
    273228            ! set the dynamics: U,V, hdiv, rot (and ssh if necessary) 
     
    323278            ! 
    324279            CALL iom_open ( 'eel.initemp', inum ) 
    325             CALL iom_get ( inum, jpdom_data, 'initemp', tb ) ! read before temprature (tb) 
     280            CALL iom_get ( inum, jpdom_data, 'initemp', tsb(:,:,:,jp_tem) ) ! read before temprature (tb) 
    326281            CALL iom_close( inum ) 
    327282            ! 
    328             tn(:,:,:) = tb(:,:,:)                            ! set nox temperature to tb 
    329             ! 
    330             IF(lwp) CALL prizre( tn    , jpi   , jpj   , jpk   , jpj/2 ,   & 
    331                &                 1     , jpi   , 5     , 1     , jpk   ,   & 
    332                &                 1     , 1.    , numout                  ) 
     283            tsn(:,:,:,jp_tem) = tsb(:,:,:,jp_tem)                            ! set nox temperature to tb 
     284            ! 
     285            IF(lwp) CALL prizre( tsn(:,:,:,jp_tem), jpi   , jpj   , jpk   , jpj/2 ,   & 
     286               &                            1     , jpi   , 5     , 1     , jpk   ,   & 
     287               &                            1     , 1.    , numout                  ) 
    333288            ! 
    334289            ! set salinity field to a constant value 
     
    338293            IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
    339294            ! 
    340             sn(:,:,:) = zsal * tmask(:,:,:) 
    341             sb(:,:,:) = sn(:,:,:) 
     295            tsn(:,:,:,jp_sal) = zsal * tmask(:,:,:) 
     296            tsb(:,:,:,jp_sal) = tsn(:,:,:,jp_sal) 
    342297            ! 
    343298            !                                    ! =========================== 
     
    377332            DO jj = 1, jpj 
    378333               DO ji = 1, jpi 
    379                   tn(ji,jj,jk) = (  16. - 12. * TANH( (fsdept(ji,jj,jk) - 400) / 700 )         )   & 
     334                  tsn(ji,jj,jk,jp_tem) = (  16. - 12. * TANH( (fsdept(ji,jj,jk) - 400) / 700 )         )   & 
    380335                       &           * (-TANH( (500-fsdept(ji,jj,jk)) / 150 ) + 1) / 2               & 
    381336                       &       + (      15. * ( 1. - TANH( (fsdept(ji,jj,jk)-50.) / 1500.) )       & 
     
    383338                       &                + 7.  * (1500. - fsdept(ji,jj,jk)) / 1500.             )   &  
    384339                       &           * (-TANH( (fsdept(ji,jj,jk) - 500) / 150) + 1) / 2 
    385                   tn(ji,jj,jk) = tn(ji,jj,jk) * tmask(ji,jj,jk) 
    386                   tb(ji,jj,jk) = tn(ji,jj,jk) 
    387  
    388                   sn(ji,jj,jk) =  (  36.25 - 1.13 * TANH( (fsdept(ji,jj,jk) - 305) / 460 )  )  & 
     340                  tsn(ji,jj,jk,jp_tem) = tsn(ji,jj,jk,jp_tem) * tmask(ji,jj,jk) 
     341                  tsb(ji,jj,jk,jp_tem) = tsn(ji,jj,jk,jp_tem) 
     342 
     343                  tsn(ji,jj,jk,jp_sal) =  (  36.25 - 1.13 * TANH( (fsdept(ji,jj,jk) - 305) / 460 )  )  & 
    389344                     &              * (-TANH((500 - fsdept(ji,jj,jk)) / 150) + 1) / 2          & 
    390345                     &          + (  35.55 + 1.25 * (5000. - fsdept(ji,jj,jk)) / 5000.         & 
     
    393348                     &                + 0.2  * TANH( (fsdept(ji,jj,jk) - 1000.) / 5000.)    )  & 
    394349                     &              * (-TANH((fsdept(ji,jj,jk) - 500) / 150) + 1) / 2  
    395                   sn(ji,jj,jk) = sn(ji,jj,jk) * tmask(ji,jj,jk) 
    396                   sb(ji,jj,jk) = sn(ji,jj,jk) 
     350                  tsn(ji,jj,jk,jp_sal) = tsn(ji,jj,jk,jp_sal) * tmask(ji,jj,jk) 
     351                  tsb(ji,jj,jk,jp_sal) = tsn(ji,jj,jk,jp_sal) 
    397352               END DO 
    398353            END DO 
     
    408363         ! ---------------------- 
    409364         CALL iom_open ( 'data_tem', inum ) 
    410          CALL iom_get ( inum, jpdom_data, 'votemper', tn )  
     365         CALL iom_get ( inum, jpdom_data, 'votemper', tsn(:,:,:,jp_tem) )  
    411366         CALL iom_close( inum ) 
    412367 
    413          tn(:,:,:) = tn(:,:,:) * tmask(:,:,:)  
    414          tb(:,:,:) = tn(:,:,:) 
     368         tsn(:,:,:,jp_tem) = tsn(:,:,:,jp_tem) * tmask(:,:,:)  
     369         tsb(:,:,:,jp_tem) = tsn(:,:,:,jp_tem) 
    415370 
    416371         ! Read salinity field 
    417372         ! ------------------- 
    418373         CALL iom_open ( 'data_sal', inum ) 
    419          CALL iom_get ( inum, jpdom_data, 'vosaline', sn )  
     374         CALL iom_get ( inum, jpdom_data, 'vosaline', tsn(:,:,:,jp_sal) )  
    420375         CALL iom_close( inum ) 
    421376 
    422          sn(:,:,:)  = sn(:,:,:) * tmask(:,:,:)  
    423          sb(:,:,:)  = sn(:,:,:) 
     377         tsn(:,:,:,jp_sal) = tsn(:,:,:,jp_sal) * tmask(:,:,:)  
     378         tsb(:,:,:,jp_sal) = tsn(:,:,:,jp_sal) 
    424379 
    425380      END SELECT 
     
    429384         WRITE(numout,*) '              Initial temperature and salinity profiles:' 
    430385         WRITE(numout, "(9x,' level   gdept_0   temperature   salinity   ')" ) 
    431          WRITE(numout, "(10x, i4, 3f10.2)" ) ( jk, gdept_0(jk), tn(2,2,jk), sn(2,2,jk), jk = 1, jpk ) 
     386         WRITE(numout, "(10x, i4, 3f10.2)" ) ( jk, gdept_0(jk), tsn(2,2,jk,jp_tem), tsn(2,2,jk,jp_sal), jk = 1, jpk ) 
    432387      ENDIF 
    433388 
Note: See TracChangeset for help on using the changeset viewer.